PageSourceSearch

https://engineawesome.com/assets/main-ngl9OQpB.js

js engineawesome.com collected 2026-09-24 18:56:02 UTC 739,174 bytes, 3,156 lines download raw bytes

vendor: 14,519 bytes, lines 1-4
1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/zapier-ChDIINcb.js","assets/vendor-framer-motion-7g6XWQ1T.js","assets/white-glove-service-BHFtUxDk.js","assets/templates-C1H-dJe5.js","assets/support-ChcXPX2i.js","assets/PageHeader-vp93cpMf.js","assets/CTACard-Dl8uVl0-.js","assets/SectionHeader-CsjuOtyP.js","assets/pricing-B0ol71DW.js","assets/partner-DmJg9YS1.js","assets/meet-CvBrFCQC.js","assets/for-DSo4X3HX.js","assets/features-CaEZuptE.js","assets/faq-C_gaicRL.js","assets/demo-booked-DQdhsOui.js","assets/contact-Bhv21AcW.js","assets/blog-DZUkw-cm.js","assets/about-Dd7X9qEi.js","assets/_-Cd3aI9Uw.js","assets/TemplatesSlider-1SuRfhx8.js","assets/index-jCViuUGJ.js","assets/BlogIllustration-CzQrC7YC.js","assets/index-D3JhdSmZ.js","assets/index-B-ELYDQ8.js","assets/custom-crm-XyBPuKUD.js","assets/BackLink-DMaTSZzU.js","assets/no-code-app-builders-Dn6WHWPv.js","assets/custom-vs-off-the-shelf-crm-BOBJf968.js","assets/crm-pricing-CtAWi5u9.js","assets/index-DCNHqVNf.js","assets/PillFilter-CqpH6Kk_.js","assets/_slug-BbhcHEky.js","assets/_slug-CfrKF-3h.js","assets/ProseContent-BZnwdNCH.js","assets/index-BMCidiYI.js","assets/_slug-DqrQhhaS.js","assets/_slug-DPklmk-U.js","assets/inperson-IB9-6hTI.js","assets/call-X77Sy7mv.js","assets/index-EjjPlq4Q.js","assets/service-companies-B9xnnuJH.js","assets/roofing-DIit6kXr.js","assets/property-management-Cxa76C4I.js","assets/plumbers-ClNNMR3E.js","assets/pest-control-B7gq-rSL.js","assets/non-profits-C7MEMA7P.js","assets/new-business-acquisitions-COAIOzno.js","assets/landscaping-BEeeNyxA.js","assets/hvac-B93c_cBt.js","assets/gutter-cleaning-Nqf97MMF.js","assets/electricians-AS1TrRow.js","assets/dog-walking-ChzuviMP.js","assets/cleaning-services-CKsq75zu.js","assets/agencies-ITXaJyV9.js","assets/_slug-BSQxHWbG.js","assets/_slug-DvHyIusQ.js","assets/index-Ct6bdnRw.js","assets/_slug-B5XN-est.js","assets/_slug-BMNZCm64.js","assets/index-DLZmNCy6.js","assets/policies-DakYUSWe.js","assets/index-tThTwh3p.js","assets/_slug-x4mbPSui.js","assets/_slug-BvzzrEkK.js"])))=>i.map(i=>d[i]);
2import{r as Xr,R as mv,a as $,j as A,b as ts}from"./vendor-framer-motion-7g6XWQ1T.js";var Eu={exports:{}},Yi={},Tu={exports:{}},Cu={};var jf;function fv(){return jf||(jf=1,(function(a){function o(B,Q){var oe=B.length;B.push(Q);e:for(;0<oe;){var je=oe-1>>>1,Oe=B[je];if(0<c(Oe,Q))B[je]=Q,B[oe]=Oe,oe=je;else break e}}function i(B){return B.length===0?null:B[0]}function r(B){if(B.length===0)return null;var Q=B[0],oe=B.pop();if(oe!==Q){B[0]=oe;e:for(var je=0,Oe=B.length,ut=Oe>>>1;je<ut;){var De=2*(je+1)-1,ge=B[De],Fe=De+1,Tt=B[Fe];if(0>c(ge,oe))Fe<Oe&&0>c(Tt,ge)?(B[je]=Tt,B[Fe]=oe,je=Fe):(B[je]=ge,B[De]=oe,je=De);else if(Fe<Oe&&0>c(Tt,oe))B[je]=Tt,B[Fe]=oe,je=Fe;else break e}}return Q}function c(B,Q){var oe=B.sortIndex-Q.sortIndex;return oe!==0?oe:B.id-Q.id}if(a.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var d=performance;a.unstable_now=function(){return d.now()}}else{var h=Date,p=h.now();a.unstable_now=function(){return h.now()-p}}var f=[],g=[],b=1,w=null,v=3,x=!1,R=!1,C=!1,O=!1,q=typeof setTimeout=="function"?setTimeout:null,I=typeof clearTimeout=="function"?clearTimeout:null,H=typeof setImmediate<"u"?setImmediate:null;function Y(B){for(var Q=i(g);Q!==null;){if(Q.callback===null)r(g);else if(Q.startTime<=B)r(g),Q.sortIndex=Q.expirationTime,o(f,Q);else break;Q=i(g)}}function F(B){if(C=!1,Y(B),!R)if(i(f)!==null)R=!0,W||(W=!0,te());else{var Q=i(g);Q!==null&&Le(F,Q.startTime-B)}}var W=!1,G=-1,U=5,V=-1;function ue(){return O?!0:!(a.unstable_now()-V<U)}function ie(){if(O=!1,W){var B=a.unstable_now();V=B;var Q=!0;try{e:{R=!1,C&&(C=!1,I(G),G=-1),x=!0;var oe=v;try{t:{for(Y(B),w=i(f);w!==null&&!(w.expirationTime>B&&ue());){var je=w.callback;if(typeof je=="function"){w.callback=null,v=w.priorityLevel;var Oe=je(w.expirationTime<=B);if(B=a.unstable_now(),typeof Oe=="function"){w.callback=Oe,Y(B),Q=!0;break t}w===i(f)&&r(f),Y(B)}else r(f);w=i(f)}if(w!==null)Q=!0;else{var ut=i(g);ut!==null&&Le(F,ut.startTime-B),Q=!1}}break e}finally{w=null,v=oe,x=!1}Q=void 0}}finally{Q?te():W=!1}}}var te;if(typeof H=="function")te=function(){H(ie)};else if(typeof MessageChannel<"u"){var Te=new MessageChannel,ke=Te.port2;Te.port1.onmessage=ie,te=function(){ke.postMessage(null)}}else te=function(){q(ie,0)};function Le(B,Q){G=q(function(){B(a.unstable_now())},Q)}a.unstable_IdlePriority=5,a.unstable_ImmediatePriority=1,a.unstable_LowPriority=4,a.unstable_NormalPriority=3,a.unstable_Profiling=null,a.unstable_UserBlockingPriority=2,a.unstable_cancelCallback=function(B){B.callback=null},a.unstable_forceFrameRate=function(B){0>B||125<B?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):U=0<B?Math.floor(1e3/B):5},a.unstable_getCurrentPriorityLevel=function(){return v},a.unstable_next=function(B){switch(v){case 1:case 2:case 3:var Q=3;break;default:Q=v}var oe=v;v=Q;try{return B()}finally{v=oe}},a.unstable_requestPaint=function(){O=!0},a.unstable_runWithPriority=function(B,Q){switch(B){case 1:case 2:case 3:case 4:case 5:break;default:B=3}var oe=v;v=B;try{return Q()}finally{v=oe}},a.unstable_scheduleCallback=function(B,Q,oe){var je=a.unstable_now();switch(typeof oe=="object"&&oe!==null?(oe=oe.delay,oe=typeof oe=="number"&&0<oe?je+oe:je):oe=je,B){case 1:var Oe=-1;break;case 2:Oe=250;break;case 5:Oe=1073741823;break;case 4:Oe=1e4;break;default:Oe=5e3}return Oe=oe+Oe,B={id:b++,callback:Q,priorityLevel:B,startTime:oe,expirationTime:Oe,sortIndex:-1},oe>je?(B.sortIndex=oe,o(g,B),i(f)===null&&B===i(g)&&(C?(I(G),G=-1):C=!0,Le(F,oe-je))):(B.sortIndex=Oe,o(f,B),R||x||(R=!0,W||(W=!0,te()))),B},a.unstable_shouldYield=ue,a.unstable_wrapCallback=function(B){var Q=v;return function(){var oe=v;v=Q;try{return B.apply(this,arguments)}finally{v=oe}}}})(Cu)),Cu}var Of;function gv(){return Of||(Of=1,Tu.exports=fv()),Tu.exports}var _u={exports:{}},dt={};var Nf;function yv(){if(Nf)return dt;Nf=1;var a=Xr();function o(f){var g="https://react.dev/errors/"+f;if(1<arguments.length){g+="?args[]="+encodeURIComponent(arguments[1]);for(var b=2;b<arguments.length;b++)g+="&args[]="+encodeURIComponent(arguments[b])}return"Minified React error #"+f+"; visit "+g+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function i(){}var r={d:{f:i,r:function(){throw Error(o(522))},D:i,C:i,L:i,m:i,X:i,S:i,M:i},p:0,findDOMNode:null},c=Symbol.for("react.portal");function d(f,g,b){var w=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:c,key:w==null?null:""+w,children:f,containerInfo:g,implementation:b}}var h=a.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function p(f,g){if(f==="font")return"";if(typeof g=="string")return g==="use-credentials"?g:""}return dt.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=r,dt.createPortal=function(f,g){var b=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!g||g.nodeType!==1&&g.nodeType!==9&&g.nodeType!==11)throw Error(o(299));return d(f,g,null,b)},dt.flushSync=function(f){var g=h.T,b=r.p;try{if(h.T=null,r.p=2,f)return f()}finally{h.T=g,r.p=b,r.d.f()}},dt.preconnect=function(f,g){typeof f=="string"&&(g?(g=g.crossOrigin,g=typeof g=="string"?g==="use-credentials"?g:"":void 0):g=null,r.d.C(f,g))},dt.prefetchDNS=function(f){typeof f=="string"&&r.d.D(f)},dt.preinit=function(f,g){if(typeof f=="string"&&g&&typeof g.as=="string"){var b=g.as,w=p(b,g.crossOrigin),v=typeof g.integrity=="string"?g.integrity:void 0,x=typeof g.fetchPriority=="string"?g.fetchPriority:void 0;b==="style"?r.d.S(f,typeof g.precedence=="string"?g.precedence:void 0,{crossOrigin:w,integrity:v,fetchPriority:x}):b==="script"&&r.d.X(f,{crossOrigin:w,integrity:v,fetchPriority:x,nonce:typeof g.nonce=="string"?g.nonce:void 0})}},dt.preinitModule=function(f,g){if(typeof f=="string")if(typeof g=="object"&&g!==null){if(g.as==null||g.as==="script"){var b=p(g.as,g.crossOrigin);r.d.M(f,{crossOrigin:b,integrity:typeof g.integrity=="string"?g.integrity:void 0,nonce:typeof g.nonce=="string"?g.nonce:void 0})}}else g==null&&r.d.M(f)},dt.preload=function(f,g){if(typeof f=="string"&&typeof g=="object"&&g!==null&&typeof g.as=="string"){var b=g.as,w=p(b,g.crossOrigin);r.d.L(f,b,{crossOrigin:w,integrity:typeof g.integrity=="string"?g.integrity:void 0,nonce:typeof g.nonce=="string"?g.nonce:void 0,type:typeof g.type=="string"?g.type:void 0,fetchPriority:typeof g.fetchPriority=="string"?g.fetchPriority:void 0,referrerPolicy:typeof g.referrerPolicy=="string"?g.referrerPolicy:void 0,imageSrcSet:typeof g.imageSrcSet=="string"?g.imageSrcSet:void 0,imageSizes:typeof g.imageSizes=="string"?g.imageSizes:void 0,media:typeof g.media=="string"?g.media:void 0})}},dt.preloadModule=function(f,g){if(typeof f=="string")if(g){var b=p(g.as,g.crossOrigin);r.d.m(f,{as:typeof g.as=="string"&&g.as!=="script"?g.as:void 0,crossOrigin:b,integrity:typeof g.integrity=="string"?g.integrity:void 0})}else r.d.m(f)},dt.requestFormReset=function(f){r.d.r(f)},dt.unstable_batchedUpdates=function(f,g){return f(g)},dt.useFormState=function(f,g,b){return h.H.useFormState(f,g,b)},dt.useFormStatus=function(){return h.H.useHostTransitionStatus()},dt.version="19.2.3",dt}var Bf;function kg(){if(Bf)return _u.exports;Bf=1;function a(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(a)}catch(o){console.error(o)}}return a(),_u.exports=yv(),_u.exports}var Lf;function wv(){if(Lf)return Yi;Lf=1;var a=gv(),o=Xr(),i=kg();function r(e){var t="https://react.dev/errors/"+e;if(1<arguments.length){t+="?args[]="+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n])}return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function c(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function d(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do t=e,(t.flags&4098)!==0&&(n=t.return),e=t.return;while(e)}return t.tag===3?n:null}function h(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function p(e){if(e.tag===31){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function f(e){if(d(e)!==e)throw Error(r(188))}function g(e){var t=e.alternate;if(!t){if(t=d(e),t===null)throw Error(r(188));return t!==e?null:e}for(var n=e,s=t;;){var l=n.return;if(l===null)break;var u=l.alternate;if(u===null){if(s=l.return,s!==null){n=s;continue}break}if(l.child===u.child){for(u=l.child;u;){if(u===n)return f(l),e;if(u===s)return f(l),t;u=u.sibling}throw Error(r(188))}if(n.return!==s.return)n=l,s=u;else{for(var m=!1,y=l.child;y;){if(y===n){m=!0,n=l,s=u;break}if(y===s){m=!0,s=l,n=u;break}y=y.sibling}if(!m){for(y=u.child;y;){if(y===n){m=!0,n=u,s=l;break}if(y===s){m=!0,s=u,n=l;break}y=y.sibling}if(!m)throw Error(r(189))}}if(n.alternate!==s)throw Error(r(190))}if(n.tag!==3)throw Error(r(188));return n.stateNode.current===n?e:t}function b(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e;for(e=e.child;e!==null;){if(t=b(e),t!==null)return t;e=e.sibling}return null}var w=Object.assign,v=Symbol.for("react.element"),x=Symbol.for("react.transitional.element"),R=Symbol.for("react.portal"),C=Symbol.for("react.fragment"),O=Symbol.for("react.strict_mode"),q=Symbol.for("react.profiler"),I=Symbol.for("react.consumer"),H=Symbol.for("react.context"),Y=Symbol.for("react.forward_ref"),F=Symbol.for("react.suspense"),W=Symbol.for("react.suspense_list"),G=Symbol.for("react.memo"),U=Symbol.for("react.lazy"),V=Symbol.for("react.activity"),ue=Symbol.for("react.memo_cache_sentinel"),ie=Symbol.iterator;function te(e){return e===null||typeof e!="object"?null:(e=ie&&e[ie]||e["@@iterator"],typeof e=="function"?e:null)}var Te=Symbol.for("react.client.reference");function ke(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===Te?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case C:return"Fragment";case q:return"Profiler";case O:return"StrictMode";case F:return"Suspense";case W:return"SuspenseList";case V:return"Activity"}if(typeof e=="object")switch(e.$$typeof){case R:return"Portal";case H:return e.displayName||"Context";case I:return(e._context.displayName||"Context")+".Consumer";case Y:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case G:return t=e.displayName||null,t!==null?t:ke(e.type)||"Memo";case U:t=e._payload,e=e._init;try{return ke(e(t))}catch{}}return null}var Le=Array.isArray,B=o.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,Q=i.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,oe={pending:!1,data:null,method:null,action:null},je=[],Oe=-1;function ut(e){return{current:e}}function De(e){0>Oe||(e.current=je[Oe],je[Oe]=null,Oe--)}function ge(e,t){Oe++,je[Oe]=e.current,e.current=t}var Fe=ut(null),Tt=ut(null),ft=ut(null),gt=ut(null);function Jt(e,t){switch(ge(ft,t),ge(Tt,e),ge(Fe,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?ef(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=ef(t),e=tf(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}De(Fe),ge(Fe,e)}function $t(){De(Fe),De(Tt),De(ft)}function en(e){e.memoizedState!==null&&ge(gt,e);var t=Fe.current,n=tf(t,e.type);t!==n&&(ge(Tt,e),ge(Fe,n))}function Ln(e){Tt.current===e&&(De(Fe),De(Tt)),gt.current===e&&(De(gt),Pi._currentValue=oe)}var ba,tn;function un(e){if(ba===void 0)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);ba=t&&t[1]||"",tn=-1<n.stack.indexOf(`
3    at`)?" (<anonymous>)":-1<n.stack.indexOf("@")?"@unknown:0:0":""}return`
4`+ba+e+tn}var Qo=!1;function Za(e,t){if(!e||Qo)return"";Qo=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var s={DetermineComponentFrameRoot:function(){try{if(t){var P=function(){throw Error()};if(Object.defineProperty(P.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(P,[])}catch(N){var j=N}Reflect.construct(e,[],P)}else{try{P.call()}catch(N){j=N}e.call(P.prototype)}}else{try{throw Error()}catch(N){j=N}(P=e())&&typeof P.catch=="function"&&P.catch(function(){})}}
vendor: 6,458 bytes, lines 4-9
4catch(N){if(N&&j&&typeof N.stack=="string")return[N.stack,j.stack]}return[null,null]}};s.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var l=Object.getOwnPropertyDescriptor(s.DetermineComponentFrameRoot,"name");l&&l.configurable&&Object.defineProperty(s.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var u=s.DetermineComponentFrameRoot(),m=u[0],y=u[1];if(m&&y){var k=m.split(`
5`),M=y.split(`
6`);for(l=s=0;s<k.length&&!k[s].includes("DetermineComponentFrameRoot");)s++;for(;l<M.length&&!M[l].includes("DetermineComponentFrameRoot");)l++;if(s===k.length||l===M.length)for(s=k.length-1,l=M.length-1;1<=s&&0<=l&&k[s]!==M[l];)l--;for(;1<=s&&0<=l;s--,l--)if(k[s]!==M[l]){if(s!==1||l!==1)do if(s--,l--,0>l||k[s]!==M[l]){var L=`
7`+k[s].replace(" at new "," at ");return e.displayName&&L.includes("<anonymous>")&&(L=L.replace("<anonymous>",e.displayName)),L}while(1<=s&&0<=l);break}}}finally{Qo=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:"")?un(n):""}function hl(e,t){switch(e.tag){case 26:case 27:case 5:return un(e.type);case 16:return un("Lazy");case 13:return e.child!==t&&t!==null?un("Suspense Fallback"):un("Suspense");case 19:return un("SuspenseList");case 0:case 15:return Za(e.type,!1);case 11:return Za(e.type.render,!1);case 1:return Za(e.type,!0);case 31:return un("Activity");default:return""}}function is(e){try{var t="",n=null;do t+=hl(e,n),n=e,e=e.return;while(e);return t}catch(s){return`
8Error generating stack: `+s.message+`
9`+s.stack}}var Vo=Object.prototype.hasOwnProperty,Dn=a.unstable_scheduleCallback,Pn=a.unstable_cancelCallback,ss=a.unstable_shouldYield,rs=a.unstable_requestPaint,le=a.unstable_now,Ze=a.unstable_getCurrentPriorityLevel,yt=a.unstable_ImmediatePriority,$o=a.unstable_UserBlockingPriority,ls=a.unstable_NormalPriority,$y=a.unstable_LowPriority,Nd=a.unstable_IdlePriority,Zy=a.log,Ky=a.unstable_setDisableYieldValue,Zo=null,Ct=null;function qn(e){if(typeof Zy=="function"&&Ky(e),Ct&&typeof Ct.setStrictMode=="function")try{Ct.setStrictMode(Zo,e)}catch{}}var _t=Math.clz32?Math.clz32:ew,Xy=Math.log,Jy=Math.LN2;function ew(e){return e>>>=0,e===0?32:31-(Xy(e)/Jy|0)|0}var cs=256,us=262144,ds=4194304;function va(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function hs(e,t,n){var s=e.pendingLanes;if(s===0)return 0;var l=0,u=e.suspendedLanes,m=e.pingedLanes;e=e.warmLanes;var y=s&134217727;return y!==0?(s=y&~u,s!==0?l=va(s):(m&=y,m!==0?l=va(m):n||(n=y&~e,n!==0&&(l=va(n))))):(y=s&~u,y!==0?l=va(y):m!==0?l=va(m):n||(n=s&~e,n!==0&&(l=va(n)))),l===0?0:t!==0&&t!==l&&(t&u)===0&&(u=l&-l,n=t&-t,u>=n||u===32&&(n&4194048)!==0)?t:l}function Ko(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function tw(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Bd(){var e=ds;return ds<<=1,(ds&62914560)===0&&(ds=4194304),e}function pl(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Xo(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function nw(e,t,n,s,l,u){var m=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var y=e.entanglements,k=e.expirationTimes,M=e.hiddenUpdates;for(n=m&~n;0<n;){var L=31-_t(n),P=1<<L;y[L]=0,k[L]=-1;var j=M[L];if(j!==null)for(M[L]=null,L=0;L<j.length;L++){var N=j[L];N!==null&&(N.lane&=-536870913)}n&=~P}s!==0&&Ld(e,s,0),u!==0&&l===0&&e.tag!==0&&(e.suspendedLanes|=u&~(m&~t))}function Ld(e,t,n){e.pendingLanes|=t,e.suspendedLanes&=~t;var s=31-_t(t);e.entangledLanes|=t,e.entanglements[s]=e.entanglements[s]|1073741824|n&261930}function Dd(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var s=31-_t(n),l=1<<s;l&t|e[s]&t&&(e[s]|=t),n&=~l}}function Pd(e,t){var n=t&-t;return n=(n&42)!==0?1:ml(n),(n&(e.suspendedLanes|t))!==0?0:n}function ml(e){switch(e){case 2:e=1;break;case 8:e=4;break;case 32:e=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:e=128;break;case 268435456:e=134217728;break;default:e=0}return e}function fl(e){return e&=-e,2<e?8<e?(e&134217727)!==0?32:268435456:8:2}function qd(){var e=Q.p;return e!==0?e:(e=window.event,e===void 0?32:Ef(e.type))}function Ud(e,t){var n=Q.p;try{return Q.p=e,t()}finally{Q.p=n}}var Un=Math.random().toString(36).slice(2),nt="__reactFiber$"+Un,wt="__reactProps$"+Un,Ka="__reactContainer$"+Un,gl="__reactEvents$"+Un,aw="__reactListeners$"+Un,ow="__reactHandles$"+Un,Hd="__reactResources$"+Un,Jo="__reactMarker$"+Un;function yl(e){delete e[nt],delete e[wt],delete e[gl],delete e[aw],delete e[ow]}function Xa(e){var t=e[nt];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Ka]||n[nt]){if(n=t.alternate,t.child!==null||n!==null&&n.child!==null)for(e=cf(e);e!==null;){if(n=e[nt])return n;e=cf(e)}return t}e=n,n=e.parentNode}return null}function Ja(e){if(e=e[nt]||e[Ka]){var t=e.tag;if(t===5||t===6||t===13||t===31||t===26||t===27||t===3)return e}return null}function ei(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e.stateNode;throw Error(r(33))}function eo(e){var t=e[Hd];return t||(t=e[Hd]={hoistableStyles:new Map,hoistableScripts:new Map}),t}function et(e){e[Jo]=!0}var Yd=new Set,Id={};function Sa(e,t){to(e,t),to(e+"Capture",t)}function to(e,t){for(Id[e]=t,e=0;e<t.length;e++)Yd.add(t[e])}var iw=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u
9037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),Wd={},Fd={};function sw(e){return Vo.call(Fd,e)?!0:Vo.call(Wd,e)?!1:iw.test(e)?Fd[e]=!0:(Wd[e]=!0,!1)}function ps(e,t,n){if(sw(t))if(n===null)e.removeAttribute(t);else{switch(typeof n){case"undefined":case"function":case"symbol":e.removeAttribute(t);return;case"boolean":var s=t.toLowerCase().slice(0,5);if(s!=="data-"&&s!=="aria-"){e.removeAttribute(t);return}}e.setAttribute(t,""+n)}}function ms(e,t,n){if(n===null)e.removeAttribute(t);else{switch(typeof n){case"undefined":case"function":case"symbol":case"boolean":e.removeAttribute(t);return}e.setAttribute(t,""+n)}}function dn(e,t,n,s){if(s===null)e.removeAttribute(n);else{switch(typeof s){case"undefined":case"function":case"symbol":case"boolean":e.removeAttribute(n);return}e.setAttributeNS(t,n,""+s)}}function Dt(e){switch(typeof e){case"bigint":case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Gd(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function rw(e,t,n){var s=Object.getOwnPropertyDescriptor(e.constructor.prototype,t);if(!e.hasOwnProperty(t)&&typeof s<"u"&&typeof s.get=="function"&&typeof s.set=="function"){var l=s.get,u=s.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(m){n=""+m,u.call(this,m)}}),Object.defineProperty(e,t,{enumerable:s.enumerable}),{getValue:function(){return n},setValue:function(m){n=""+m},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function wl(e){if(!e._valueTracker){var t=Gd(e)?"checked":"value";e._valueTracker=rw(e,t,""+e[t])}}function Qd(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),s="";return e&&(s=Gd(e)?e.checked?"true":"false":e.value),e=s,e!==n?(t.setValue(e),!0):!1}function fs(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var lw=/[\n"\\]/g;function Pt(e){return e.replace(lw,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function bl(e,t,n,s,l,u,m,y){e.name="",m!=null&&typeof m!="function"&&typeof m!="symbol"&&typeof m!="boolean"?e.type=m:e.removeAttribute("type"),t!=null?m==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+Dt(t)):e.value!==""+Dt(t)&&(e.value=""+Dt(t)):m!=="submit"&&m!=="reset"||e.removeAttribute("value"),t!=null?vl(e,m,Dt(t)):n!=null?vl(e,m,Dt(n)):s!=null&&e.removeAttribute("value"),l==null&&u!=null&&(e.defaultChecked=!!u),l!=null&&(e.checked=l&&typeof l!="function"&&typeof l!="symbol"),y!=null&&typeof y!="function"&&typeof y!="symbol"&&typeof y!="boolean"?e.name=""+Dt(y):e.removeAttribute("name")}function Vd(e,t,n,s,l,u,m,y){if(u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"&&(e.type=u),t!=null||n!=null){if(!(u!=="submit"&&u!=="reset"||t!=null)){wl(e);return}n=n!=null?""+Dt(n):"",t=t!=null?""+Dt(t):n,y||t===e.value||(e.value=t),e.defaultValue=t}s=s??l,s=typeof s!="function"&&typeof s!="symbol"&&!!s,e.checked=y?e.checked:!!s,e.defaultChecked=!!s,m!=null&&typeof m!="function"&&typeof m!="symbol"&&typeof m!="boolean"&&(e.name=m),wl(e)}function vl(e,t,n){t==="number"&&fs(e.ownerDocument)===e||e.defaultValue===""+n||(e.defaultValue=""+n)}function no(e,t,n,s){if(e=e.options,t){t={};for(var l=0;l<n.length;l++)t["$"+n[l]]=!0;for(n=0;n<e.length;n++)l=t.hasOwnProperty("$"+e[n].value),e[n].selected!==l&&(e[n].selected=l),l&&s&&(e[n].defaultSelected=!0)}else{for(n=""+Dt(n),t=null,l=0;l<e.length;l++){if(e[l].value===n){e[l].selected=!0,s&&(e[l].defaultSelected=!0);return}t!==null||e[l].disabled||(t=e[l])}t!==null&&(t.selected=!0)}}function $d(e,t,n){if(t!=null&&(t=""+Dt(t),t!==e.value&&(e.value=t),n==null)){e.defaultValue!==t&&(e.defaultValue=t);return}e.defaultValue=n!=null?""+Dt(n):""}function Zd(e,t,n,s){if(t==null){if(s!=null){if(n!=null)throw Error(r(92));if(Le(s)){if(1<s.length)throw Error(r(93));s=s[0]}n=s}n==null&&(n=""),t=n}n=Dt(t),e.defaultValue=n,s=e.textContent,s===n&&s!==""&&s!==null&&(e.value=s),wl(e)}function ao(e,t){if(t){var n=e.firstChild;
vendor: 4,140 bytes, line 9
9if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var cw=new Set("animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(" "));function Kd(e,t,n){var s=t.indexOf("--")===0;n==null||typeof n=="boolean"||n===""?s?e.setProperty(t,""):t==="float"?e.cssFloat="":e[t]="":s?e.setProperty(t,n):typeof n!="number"||n===0||cw.has(t)?t==="float"?e.cssFloat=n:e[t]=(""+n).trim():e[t]=n+"px"}function Xd(e,t,n){if(t!=null&&typeof t!="object")throw Error(r(62));if(e=e.style,n!=null){for(var s in n)!n.hasOwnProperty(s)||t!=null&&t.hasOwnProperty(s)||(s.indexOf("--")===0?e.setProperty(s,""):s==="float"?e.cssFloat="":e[s]="");for(var l in t)s=t[l],t.hasOwnProperty(l)&&n[l]!==s&&Kd(e,l,s)}else for(var u in t)t.hasOwnProperty(u)&&Kd(e,u,t[u])}function Sl(e){if(e.indexOf("-")===-1)return!1;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var uw=new Map([["acceptCharset","accept-charset"],["htmlFor","for"],["httpEquiv","http-equiv"],["crossOrigin","crossorigin"],["accentHeight","accent-height"],["alignmentBaseline","alignment-baseline"],["arabicForm","arabic-form"],["baselineShift","baseline-shift"],["capHeight","cap-height"],["clipPath","clip-path"],["clipRule","clip-rule"],["colorInterpolation","color-interpolation"],["colorInterpolationFilters","color-interpolation-filters"],["colorProfile","color-profile"],["colorRendering","color-rendering"],["dominantBaseline","dominant-baseline"],["enableBackground","enable-background"],["fillOpacity","fill-opacity"],["fillRule","fill-rule"],["floodColor","flood-color"],["floodOpacity","flood-opacity"],["fontFamily","font-family"],["fontSize","font-size"],["fontSizeAdjust","font-size-adjust"],["fontStretch","font-stretch"],["fontStyle","font-style"],["fontVariant","font-variant"],["fontWeight","font-weight"],["glyphName","glyph-name"],["glyphOrientationHorizontal","glyph-orientation-horizontal"],["glyphOrientationVertical","glyph-orientation-vertical"],["horizAdvX","horiz-adv-x"],["horizOriginX","horiz-origin-x"],["imageRendering","image-rendering"],["letterSpacing","letter-spacing"],["lightingColor","lighting-color"],["markerEnd","marker-end"],["markerMid","marker-mid"],["markerStart","marker-start"],["overlinePosition","overline-position"],["overlineThickness","overline-thickness"],["paintOrder","paint-order"],["panose-1","panose-1"],["pointerEvents","pointer-events"],["renderingIntent","rendering-intent"],["shapeRendering","shape-rendering"],["stopColor","stop-color"],["stopOpacity","stop-opacity"],["strikethroughPosition","strikethrough-position"],["strikethroughThickness","strikethrough-thickness"],["strokeDasharray","stroke-dasharray"],["strokeDashoffset","stroke-dashoffset"],["strokeLinecap","stroke-linecap"],["strokeLinejoin","stroke-linejoin"],["strokeMiterlimit","stroke-miterlimit"],["strokeOpacity","stroke-opacity"],["strokeWidth","stroke-width"],["textAnchor","text-anchor"],["textDecoration","text-decoration"],["textRendering","text-rendering"],["transformOrigin","transform-origin"],["underlinePosition","underline-position"],["underlineThickness","underline-thickness"],["unicodeBidi","unicode
9-bidi"],["unicodeRange","unicode-range"],["unitsPerEm","units-per-em"],["vAlphabetic","v-alphabetic"],["vHanging","v-hanging"],["vIdeographic","v-ideographic"],["vMathematical","v-mathematical"],["vectorEffect","vector-effect"],["vertAdvY","vert-adv-y"],["vertOriginX","vert-origin-x"],["vertOriginY","vert-origin-y"],["wordSpacing","word-spacing"],["writingMode","writing-mode"],["xmlnsXlink","xmlns:xlink"],["xHeight","x-height"]]),dw=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;function gs(e){return dw.test(""+e)?"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')":e}function hn(){}var Al=null;function kl(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var oo=null,io=null;function Jd(e){var t=Ja(e);if(t&&(e=t.stateNode)){var n=e[wt]||null;e:switch(e=t.stateNode,t.type){case"input":if(bl(e,n.value,n.defaultValue,n.defaultValue,n.checked,n.defaultChecked,n.type,n.name),t=n.name,n.type==="radio"&&t!=null){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll('input[name="'+Pt(""+t)+'"][type="radio"]'),t=0;t<n.length;t++){var s=n[t];if(s!==e&&s.form===e.form){var l=s[wt]||null;if(!l)throw Error(r(90));bl(s,l.value,l.defaultValue,l.defaultValue,l.checked,l.defaultChecked,l.type,l.name)}}for(t=0;t<n.length;t++)s=n[t],s.form===e.form&&Qd(s)}break e;case"textarea":$d(e,n.value,n.defaultValue);break e;case"select":t=n.value,t!=null&&no(e,!!n.multiple,t,!1)}}}var xl=!1;function eh(e,t,n){if(xl)return e(t,n);xl=!0;try{var s=e(t);return s}finally{if(xl=!1,(oo!==null||io!==null)&&(ar(),oo&&(t=oo,e=io,io=oo=null,Jd(t),e)))for(t=0;t<e.length;t++)Jd(e[t])}}function ti(e,t){var n=e.stateNode;if(n===null)return null;var s=n[wt]||null;if(s===null)return null;n=s[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(s=!s.disabled)||(e=e.type,s=!(e==="button"||e==="input"||e==="select"||e==="textarea")),e=!s;break e;default:e=!1}if(e)return null;if(n&&typeof n!="function")throw Error(r(231,t,typeof n));return n}var pn=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),El=!1;if(pn)try{var ni={};Object.defineProperty(ni,"passive",{get:function(){El=!0}}),window.addEventListener("test",ni,ni),window.removeEventListener("test",ni,ni)}catch{El=!1}var Hn=null,Tl=null,ys=null;function th(){if(ys)return ys;var e,t=Tl,n=t.length,s,l="value"in Hn?Hn.value:Hn.textContent,u=l.length;for(e=0;e<n&&t[e]===l[e];e++);var m=n-e;for(s=1;s<=m&&t[n-s]===l[u-s];s++);return ys=l.slice(e,1<s?1-s:void 0)}function ws(e){var t=e.keyCode;return"charCode"in e?(e=e.charCode,e===0&&t===13&&(e=13)):e=t,e===10&&(e=13),32<=e||e===13?e:0}function bs(){return!0}function nh(){return!1}function bt(e){function t(n,s,l,u,m){this._reactName=n,this._targetInst=l,this.type=s,this.nativeEvent=u,this.target=m,this.currentTarget=null;for(var y in e)e.hasOwnProperty(y)&&(n=e[y],this[y]=n?n(u):u[y]);return this.isDefaultPrevented=(u.defaultPrevented!=null?u.defaultPrevented:u.returnValue===!1)?bs:nh,this.isPropagationStopped=nh,this}return w(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var n=this.nativeEvent;n&&(n.preventDefault?n.preventDefault():typeof n.returnValue!="unknown"&&(n.returnValue=!1),this.isDefaultPrevented=bs)},stopPropagation:function(){var n=this.nativeEvent;n&&(n.stopPropagation?n.stopPropagation():typeof n.cancelBubble!="unknown"&&(n.cancelBubble=!0),this.isPropagationStopped=bs)},persist:function(){},isPersistent:bs}),t}var Aa={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},vs=bt(Aa),ai=w({},Aa,{view:0,detail:0}),hw=bt(ai),Cl,_l,oi,Ss=w({},ai,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:zl,button:0,buttons:0,relatedTarget:function(e){return e.relatedTarget===void 0?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==oi&&(oi&&e.type==="mousemove"?(Cl=e.screenX-oi.screenX,_l=e.screenY-oi.screenY):_l=Cl=0,oi=e),Cl)},movementY:function(e){return"movementY"in e?e.movementY:_l}}),ah=bt(Ss),pw=w({},Ss,{dataTransfer:0}),mw=bt(pw),fw=w({},ai,{relatedTarget:0}),Rl=bt(fw),gw=w({},Aa,{animationName:0,elapsedTime:0,pseudoElement:0}),yw=bt(gw),ww=w({},Aa,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),bw=bt(ww),vw=w({},Aa,{data:0}),oh=bt(vw),Sw={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Aw={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},kw={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function xw(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):(e=kw[e])?!!t[e]:!1}function zl(){return xw}var Ew=w({},ai,{key:function(e){if(e.key){var t=Sw[e.key]||e.key;if(t!=="Unidentified")return t}
vendor: 4,813 bytes, line 9
9return e.type==="keypress"?(e=ws(e),e===13?"Enter":String.fromCharCode(e)):e.type==="keydown"||e.type==="keyup"?Aw[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:zl,charCode:function(e){return e.type==="keypress"?ws(e):0},keyCode:function(e){return e.type==="keydown"||e.type==="keyup"?e.keyCode:0},which:function(e){return e.type==="keypress"?ws(e):e.type==="keydown"||e.type==="keyup"?e.keyCode:0}}),Tw=bt(Ew),Cw=w({},Ss,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),ih=bt(Cw),_w=w({},ai,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:zl}),Rw=bt(_w),zw=w({},Aa,{propertyName:0,elapsedTime:0,pseudoElement:0}),Mw=bt(zw),jw=w({},Ss,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Ow=bt(jw),Nw=w({},Aa,{newState:0,oldState:0}),Bw=bt(Nw),Lw=[9,13,27,32],Ml=pn&&"CompositionEvent"in window,ii=null;pn&&"documentMode"in document&&(ii=document.documentMode);var Dw=pn&&"TextEvent"in window&&!ii,sh=pn&&(!Ml||ii&&8<ii&&11>=ii),rh=" ",lh=!1;function ch(e,t){switch(e){case"keyup":return Lw.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function uh(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var so=!1;function Pw(e,t){switch(e){case"compositionend":return uh(t);case"keypress":return t.which!==32?null:(lh=!0,rh);case"textInput":return e=t.data,e===rh&&lh?null:e;default:return null}}function qw(e,t){if(so)return e==="compositionend"||!Ml&&ch(e,t)?(e=th(),ys=Tl=Hn=null,so=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return sh&&t.locale!=="ko"?null:t.data;default:return null}}var Uw={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function dh(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t==="input"?!!Uw[e.type]:t==="textarea"}function hh(e,t,n,s){oo?io?io.push(s):io=[s]:oo=s,t=ur(t,"onChange"),0<t.length&&(n=new vs("onChange","change",null,n,s),e.push({event:n,listeners:t}))}var si=null,ri=null;function Hw(e){Vm(e,0)}function As(e){var t=ei(e);if(Qd(t))return e}function ph(e,t){if(e==="change")return t}var mh=!1;if(pn){var jl;if(pn){var Ol="oninput"in document;if(!Ol){var fh=document.createElement("div");fh.setAttribute("oninput","return;"),Ol=typeof fh.oninput=="function"}jl=Ol}else jl=!1;mh=jl&&(!document.documentMode||9<document.documentMode)}function gh(){si&&(si.detachEvent("onpropertychange",yh),ri=si=null)}function yh(e){if(e.propertyName==="value"&&As(ri)){var t=[];hh(t,ri,e,kl(e)),eh(Hw,t)}}function Yw(e,t,n){e==="focusin"?(gh(),si=t,ri=n,si.attachEvent("onpropertychange",yh)):e==="focusout"&&gh()}function Iw(e){if(e==="selectionchange"||e==="keyup"||e==="keydown")return As(ri)}function Ww(e,t){if(e==="click")return As(t)}function Fw(e,t){if(e==="input"||e==="change")return As(t)}function Gw(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var Rt=typeof Object.is=="function"?Object.is:Gw;function li(e,t){if(Rt(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;var n=Object.keys(e),s=Object.keys(t);if(n.length!==s.length)return!1;for(s=0;s<n.length;s++){var l=n[s];if(!Vo.call(t,l)||!Rt(e[l],t[l]))return!1}return!0}function wh(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function bh(e,t){var n=wh(e);e=0;for(var s;n;){if(n.nodeType===3){if(s=e+n.textContent.length,e<=t&&s>=t)return{node:n,offset:t-e};e=s}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=wh(n)}}function vh(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?vh(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Sh(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=fs(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=fs(e.document)}return t}function Nl(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var Qw=pn&&"documentMode"in document&&11>
vendor: 22,438 bytes, line 9
9=document.documentMode,ro=null,Bl=null,ci=null,Ll=!1;function Ah(e,t,n){var s=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Ll||ro==null||ro!==fs(s)||(s=ro,"selectionStart"in s&&Nl(s)?s={start:s.selectionStart,end:s.selectionEnd}:(s=(s.ownerDocument&&s.ownerDocument.defaultView||window).getSelection(),s={anchorNode:s.anchorNode,anchorOffset:s.anchorOffset,focusNode:s.focusNode,focusOffset:s.focusOffset}),ci&&li(ci,s)||(ci=s,s=ur(Bl,"onSelect"),0<s.length&&(t=new vs("onSelect","select",null,t,n),e.push({event:t,listeners:s}),t.target=ro)))}function ka(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var lo={animationend:ka("Animation","AnimationEnd"),animationiteration:ka("Animation","AnimationIteration"),animationstart:ka("Animation","AnimationStart"),transitionrun:ka("Transition","TransitionRun"),transitionstart:ka("Transition","TransitionStart"),transitioncancel:ka("Transition","TransitionCancel"),transitionend:ka("Transition","TransitionEnd")},Dl={},kh={};pn&&(kh=document.createElement("div").style,"AnimationEvent"in window||(delete lo.animationend.animation,delete lo.animationiteration.animation,delete lo.animationstart.animation),"TransitionEvent"in window||delete lo.transitionend.transition);function xa(e){if(Dl[e])return Dl[e];if(!lo[e])return e;var t=lo[e],n;for(n in t)if(t.hasOwnProperty(n)&&n in kh)return Dl[e]=t[n];return e}var xh=xa("animationend"),Eh=xa("animationiteration"),Th=xa("animationstart"),Vw=xa("transitionrun"),$w=xa("transitionstart"),Zw=xa("transitioncancel"),Ch=xa("transitionend"),_h=new Map,Pl="abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");Pl.push("scrollEnd");function Zt(e,t){_h.set(e,t),Sa(t,[e])}var ks=typeof reportError=="function"?reportError:function(e){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof e=="object"&&e!==null&&typeof e.message=="string"?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",e);return}console.error(e)},qt=[],co=0,ql=0;function xs(){for(var e=co,t=ql=co=0;t<e;){var n=qt[t];qt[t++]=null;var s=qt[t];qt[t++]=null;var l=qt[t];qt[t++]=null;var u=qt[t];if(qt[t++]=null,s!==null&&l!==null){var m=s.pending;m===null?l.next=l:(l.next=m.next,m.next=l),s.pending=l}u!==0&&Rh(n,l,u)}}function Es(e,t,n,s){qt[co++]=e,qt[co++]=t,qt[co++]=n,qt[co++]=s,ql|=s,e.lanes|=s,e=e.alternate,e!==null&&(e.lanes|=s)}function Ul(e,t,n,s){return Es(e,t,n,s),Ts(e)}function Ea(e,t){return Es(e,null,null,t),Ts(e)}function Rh(e,t,n){e.lanes|=n;var s=e.alternate;s!==null&&(s.lanes|=n);for(var l=!1,u=e.return;u!==null;)u.childLanes|=n,s=u.alternate,s!==null&&(s.childLanes|=n),u.tag===22&&(e=u.stateNode,e===null||e._visibility&1||(l=!0)),e=u,u=u.return;return e.tag===3?(u=e.stateNode,l&&t!==null&&(l=31-_t(n),e=u.hiddenUpdates,s=e[l],s===null?e[l]=[t]:s.push(t),t.lane=n|536870912),u):null}function Ts(e){if(50<Mi)throw Mi=0,$c=null,Error(r(185));for(var t=e.return;t!==null;)e=t,t=e.return;return e.tag===3?e.stateNode:null}var uo={};function Kw(e,t,n,s){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=s,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function zt(e,t,n,s){return new Kw(e,t,n,s)}function Hl(e){return e=e.prototype,!(!e||!e.isReactComponent)}function mn(e,t){var n=e.alternate;return n===null?(n=zt(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&65011712,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n.refCleanup=e.refCleanup,n}function zh(e,t){e.flags&=65011714;var n=e.alternate;return n===null?(e.childLanes=0,e.lanes=t,e.child=null,e.subtreeFlags=0,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.stateNode=null):(e.childLanes=n.childLanes,e.lanes=n.lanes,e.child=n.child,e.subtreeFlags=0,e.deletions=null,e.memoizedProps=n.memoizedProps,e.memoizedState=n.memoizedState,e.updateQueue=n.updateQueue,e.type=n.type,t=n.dependencies,e.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext}),e}function Cs(e,t,n,s,l,u){var m=0;if(s=e,typeof e=="function")Hl(e)&&(m=1);else if(typeof e=="string")m=nv(e,n,Fe.current)?26:e==="html"||e==="head"||e==="body"?27:5;else e:switch(e){case V:return e=zt(31,n,t,l),e.elementType=V,e.lanes=u,e;case C:return Ta(n.children,l,u,t);case O:m=8,l|=24;break;case q:return e=zt(12,n,t,l|2),e.elementType=q,e.lanes=u,e;case F:return e=zt(13,n,t,l),e.elementType=F,e.lanes=u,e;case W:return e=zt(19,n,t,l),e.elementType=W,e.lanes=u,e;default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case H:m=10;break e;case I:m=9;break e;case Y:m=11;break e;case G:m=14;break e;case U:m=16,s=null;break e}m=29,n=Error(r(130,e===null?"null":typeof e,"")),s=null}return t=zt(m,n,t,l),t.elementType=e,t.type=s,t.lanes=u,t}function Ta(e,t,n,s){return e=zt(7,e,s,t),e.lanes=n,e}function Yl(e,t,n){return e=zt(6,e,null,t),e.lanes=n,e}function Mh(e){var t=zt(18,null,null,0);return t.stateNode=e,t}function Il(e,t,n){return t=zt(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}var jh=new WeakMap;function Ut(e,t){if(typeof e=="object"&&e!==null){var n=jh.get(e);return n!==void 0?n:(t={value:e,source:t,stack:is(t)},jh.set(e,t),t)}return{value:e,source:t,stack:is(t)}}var ho=[],po=0,_s=null,ui=0,Ht=[],Yt=0,Yn=null,nn=1,an="";function fn(e,t){ho[po++]=ui,ho[po++]=_s,_s=e,ui=t}function Oh(e,t,n){Ht[Yt++]=nn,Ht[Yt++]=an,Ht[Yt++]=Yn,Yn=e;var s=nn;e=an;var l=32-_t(s)-1;s&=~(1<<l),n+=1;var u=32-_t(t)+l;if(30<u){var m=l-l%5;u=(s&(1<<m)-1).toString(32),s>>=m,l-=m,nn=1<<32-_t(t)+l|n<<l|s,an=u+e}else nn=1<<u|n<<l|s,an=e}function Wl(e){e.return!==null&&(fn(e,1),Oh(e,1,0))}function Fl(e){for(;e===_s;)_s=ho[--po],ho[po]=null,ui=ho[--po],ho[po]=null;for(;e===Yn;)Yn=Ht[--Yt],Ht[Yt]=null,an=Ht[--Yt],Ht[Yt]=null,nn=Ht[--Yt],Ht[Yt]=null}function Nh(e,t){Ht[Yt++]=nn,Ht[Yt++]=an,Ht[Yt++]=Yn,nn=t.id,an=t.overflow,Yn=e}var at=null,Ne=null,fe=!1,In=null,It=!1,Gl=Error(r(519));function Wn(e){var t=Error(r(418,1<arguments.length&&arguments[1]!==void 0&&arguments[1]?"text":"HTML",""));throw di(Ut(t,e)),Gl}function Bh(e){var t=e.stateNode,n=e.type,s=e.memoizedProps;switch(t[nt]=e,t[wt]=s,n){case"dialog":he("cancel",t),he("close",t);break;case"iframe":case"object":case"embed":he("load",t);break;case"video":case"audio":for(n=0;n<Oi.length;n++)he(Oi[n],t);break;case"source":he("error",t);break;case"img":case"image":case"link":he("error",t),he("load",t);break;case"details":he("toggle",t);break;case"input":he("invalid",t),Vd(t,s.value,s.defaultValue,s.checked,s.defaultChecked,s.type,s.name,!0);break;case"select":he("invalid",t);break;case"textarea":he("invalid",t),Zd(t,s.value,s.defaultValue,s.children)}n=s.children,typeof n!="string"&&typeof n!="number"&&typeof n!="bigint"||t.textContent===""+n||s.suppressHydrationWarning===!0||Xm(t.textContent,n)?(s.popover!=null&&(he("beforetoggle",t),he("toggle",t)),s.onScroll!=null&&he("scroll",t),s.onScrollEnd!=null&&he("scrollend",t),s.onClick!=null&&(t.onclick=hn),t=!0):t=!1,t||Wn(e,!0)}function Lh(e){for(at=e.return;at;)switch(at.tag){case 5:case 31:case 13:It=!1;return;case 27:case 3:It=!0;return;default:at=at.return}}function mo(e){if(e!==at)return!1;if(!fe)return Lh(e),fe=!0,!1;var t=e.tag,n;if((n=t!==3&&t!==27)&&((n=t===5)&&(n=e.type,n=!(n!=="form"&&n!=="button")||uu(e.type,e.memoizedProps)),n=!n),n&&Ne&&Wn(e),Lh(e),t===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(r(317));Ne=lf(e)}else if(t===31){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(r(317));Ne=lf(e)}else t===27?(t=Ne,oa(e.type)?(e=fu,fu=null,Ne=e):Ne=t):Ne=at?Ft(e.stateNode.nextSibling):null;return!0}function Ca(){Ne=at=null,fe=!1}function Ql(){var e=In;return e!==null&&(kt===null?kt=e:kt.push.apply(kt,e),In=null),e}function di(e){In===null?In=[e]:In.push(e)}var Vl=ut(null),_a=null,gn=null;function Fn(e,t,n){ge(Vl,t._currentValue),t._currentValue=n}function yn(e){e._currentValue=Vl.current,De(Vl)}function $l(e,t,n){for(;e!==null;){var s=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,s!==null&&(s.childLanes|=t)):s!==null&&(s.childLanes&t)!==t&&(s.childLanes|=t),e===n)break;e=e.return}}function Zl(e,t,n,s){var l=e.child;for(l!==null&&(l.return=e);l!==null;){var u=l.dependencies;if(u!==null){var m=l.child;u=u.firstContext;e:for(;u!==null;){var y=u;u=l;for(var k=0;k<t.length;k++)if(y.context===t[k]){u.lanes|=n,y=u.alternate,y!==null&&(y.lanes|=n),$l(u.return,n,e),s||(m=null);break e}u=y.next}}else if(l.tag===18){if(m=l.return,m===null)throw Error(r(341));m.lanes|=n,u=m.alternate,u!==null&&(u.lanes|=n),$l(m,n,e),m=null}else m=l.child;if(m!==null)m.return=l;else for(m=l;m!==null;){if(m===e){m=null;break}if(l=m.sibling,l!==null){l.return=m.return,m=l;break}m=m.return}l=m}}function fo(e,t,n,s){e=null;for(var l=t,u=!1;l!==null;){if(!u){if((l.flags&524288)!==0)u=!0;else if((l.flags&262144)!==0)break}if(l.tag===10){var m=l.alternate;if(m===null)throw Error(r(387));if(m=m.memoizedProps,m!==null){var y=l.type;Rt(l.pendingProps.value,m.value)||(e!==null?e.push(y):e=[y])}}else if(l===gt.current){if(m=l.alternate,m===null)throw Error(r(387));m.memoizedState.memoizedState!==l.memoizedState.memoizedState&&(e!==null?e.push(Pi):e=[Pi])}l=l.return}e!==null&&Zl(t,e,n,s),t.flags|=262144}function Rs(e){for(e=e.firstContext;e!==null;){if(!Rt(e.context._currentValue,e.memoizedValue))return!0;e=e.next}return!1}function Ra(e){_a=e,gn=null,e=e.dependencies,e!==null&&(e.firstContext=null)}function ot(e){return Dh(_a,e)}function zs(e,t){return _a===null&&Ra(e),Dh(e,t)}function Dh(e,t){var n=t._currentValue;if(t={context:t,memoizedValue:n,next:null},gn===null){if(e===null)throw Error(r(308));gn=t,e.dependencies={lanes:0,firstContext:t},e.flags|=524288}else gn=gn.next=t;return n}var Xw=typeof AbortController<"u"?AbortController:function(){var e=[],t=this.signal={aborted:!1,addEventListener:function(n,s){e.push(s)}};this.abort=function(){t.aborted=!0,e.forEach(function(n){return n()})}},Jw=a.unstable_scheduleCallback,eb=a.unstable_NormalPriority,Ge={$$typeof:H,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function Kl(){return{controller:new Xw,data:new Map,refCount:0}}function hi(e){e.refCount--,e.refCount===0&&Jw(eb,function(){e.controller.abort()})}var pi=null,Xl=0,go=0,yo=null;function tb(e,t){if(pi===null){var n=pi=[];Xl=0,go=tu(),yo={status:"pending",value:void 0,then:function(s){n.push(s)}}}return Xl++,t.then(Ph,Ph),t}function Ph(){if(--Xl===0&&pi!==null){yo!==null&&(yo.status="fulfilled");var e=pi;pi=null,go=0,yo=null;for(var t=0;t<e.length;t++)(0,e[t])()}}function nb(e,t){var n=[],s={status:"pending",value:null,reason:null,then:function(l){n.push(l)}};return e.then(function(){s.status="fulfilled",s.value=t;for(var l=0;l<n.length;l++)(0,n[l])(t)},function(l){for(s.status="rejected",s.reason=l,l=0;l<n.length;l++)(0,n[l])(void 0)}),s}var qh=B.S;B.S=function(e,t){Am=le(),typeof t=="object"&&t!==null&&typeof t.then=="function"&&tb(e,t),qh!==null&&qh(e,t)};var za=ut(null);function Jl(){var e=za.current;return e!==null?e:ze.pooledCache}function Ms(e,t){t===null?ge(za,za.current):ge(za,t.pool)}function Uh(){var e=Jl();return e===null?null:{parent:Ge._currentValue,pool:e}}var wo=Error(r(460)),ec=Error(r(474)),js=Error(r(542)),Os={then:function(){}};function Hh(e){return e=e.status,e==="fulfilled"||e==="rejected"}function Yh(e,t,n){switch(n=e[n],n===void 0?e.push(t):n!==t&&(t.then(hn,hn),t=n),t.status){case"fulfilled":return t.value;case"rejected":throw e=t.reason,Wh(e),e;default:if(typeof t.status=="string")t.then(hn,hn);else{if(e=ze,e!==null&&100<e.shellSuspendCounter)throw Error(r(482));e=t,e.status="pending",e.then(function(s){if(t.status==="pending"){var l=t;l.status="fulfilled",l.value=s}},function(s){if(t.status==="pending"){var l=t;l.status="rejected",l.reason=s}})}switch(t.status){case"fulfilled":return t.value;case"rejected":throw e=t.reason,Wh(e),e}throw ja=t,wo}}function Ma(e){try{var t=e._init;return t(e._payload)}catch(n){throw n!==null&&typeof n=="object"&&typeof n.then=="function"?(ja=n,wo):n}}var ja=null;function Ih(){if(ja===null)throw Error(r(459));var e=ja;return ja=null,e}function Wh(e){if(e===wo||e===js)throw Error(r(483))}var bo=null,mi=0;function Ns(e){var t=mi;return mi+=1,bo===null&&(bo=[]),Yh(bo,e,t)}function fi(e,t){t=t.props.ref,e.ref=t!==void 0?t:null}function Bs(e,t){throw t.$$typeof===v?Error(r(525)):(e=Object.prototype.toString.call(t),Error(r(31,e==="[object Object]"?"object with keys {"+Object.keys(t).join(", ")+"}":e)))}function Fh(e){function t(_,E){if(e){var z=_.deletions;z===null?(_.deletions=[E],_.flags|=16):z.push(E)}}function n(_,E){if(!e)return null;for(;E!==null;)t(_,E),E=E.sibling;return null}function s(_){for(var E=new Map;_!==null;)_.key!==null?E.set(_.key,_):E.set(_.index,_),_=_.sibling;return E}function l(_,E){return _=mn(_,E),_.index=0,_.sibling=null,_}function u(_,E,z){return _.index=z,e?(z=_.alternate,z!==null?(z=z.index,z<E?(_.flags|=67108866,E):z):(_.flags|=67108866,E)):(_.flags|=1048576,E)}function m(_){return e&&_.alternate===null&&(_.flags|=67108866),_}function y(_,E,z,D){return E===null||E.tag!==6?(E=Yl(z,_.mode,D),E.return=_,E):(E=l(E,z),E.return=_,E)}function k(_,E,z,D){var X=z.type;return X===C?L(_,E,z.props.children,D,z.key):E!==null&&(E.elementType===X||typeof X=="object"&&X!==null&&X.$$typeof===U&&Ma(X)===E.type)?(E=l(E,z.props),fi(E,z),E.return=_,E):(E=Cs(z.type,z.key,z.props,null,_.mode,D),fi(E,z),E.return=_,E)}function M(_,E,z,D){return E===null||E.tag!==4||E.stateNode.containerInfo!==z.containerInfo||E.stateNode.implementation!==z.implementation?(E=Il(z,_.mode,D),E.return=_,E):(E=l(E,z.children||[]),E.return=_,E)}function L(_,E,z,D,X){return E===null||E.tag!==7?(E=Ta(z,_.mode,D,X),E.return=_,E):(E=l(E,z),E.return=_,E)}function P(_,E,z){if(typeof E=="string"&&E!==""||typeof E=="number"||typeof E=="bigint")return E=Yl(""+E,_.mode,z),E.return=_,E;if(typeof E=="object"&&E!==null){switch(E.$$typeof){case x:return z=Cs(E.type,E.key,E.props,null,_.mode,z),fi(z,E),z.return=_,z;case R:return E=Il(E,_.mode,z),E.return=_,E;case U:return E=Ma(E),P(_,E,z)}if(Le(E)||te(E))return E=Ta(E,_.mode,z,null),E.return=_,E;if(typeof E.then=="function")return P(_,Ns(E),z);if(E.$$typeof===H)return P(_,zs(_,E),z);Bs(_,E)}return null}function j(_,E,z,D){var X=E!==null?E.key:null;if(typeof z=="string"&&z!==""||typeof z=="number"||typeof z=="bigint")return X!==null?null:y(_,E,""+z,D);if(typeof z=="object"&&z!==null){switch(z.$$typeof){case x:return z.key===X?k(_,E,z,D):null;case R:return z.key===X?M(_,E,z,D):null;case U:return z=Ma(z),j(_,E,z,D)}if(Le(z)||te(z))return X!==null?null:L(_,E,z,D,null);if(typeof z.then=="function")return j(_,E,Ns(z),D);if(z.$$typeof===H)return j(_,E,zs(_,z),D);Bs(_,z)}return null}function N(_,E,z,D,X){if(typeof D=="string"&&D!==""||typeof D=="number"||typeof D=="bigint")return _=_.get(z)||null,y(E,_,""+D,X);if(typeof D=="object"&&D!==null){switch(D.$$typeof){case x:return _=_.get(D.key===null?z:D.key)||null,k(E,_,D,X);case R:return _=_.get(D.key===null?z:D.key)||null,M(E,_,D,X);case U:return D=Ma(D),N(_,E,z,D,X)}if(Le(D)||te(D))return _=_.get(z)||null,L(E,_,D,X,null);if(typeof D.then=="function")return N(_,E,z,Ns(D),X);if(D.$$typeof===H)return N(_,E,z,zs(E,D),X);Bs(E,D)}return null}function Z(_,E,z,D){for(var X=null,we=null,K=E,ce=E=0,me=null;K!==null&&ce<z.length;ce++){K.index>ce?(me=K,K=null):me=K.sibling;var be=j(_,K,z[ce],D);if(be===null){K===null&&(K=me);break}e&&K&&be.alternate===null&&t(_,K),E=u(be,E,ce),we===null?X=be:we.sibling=be,we=be,K=me}if(ce===z.length)return n(_,K),fe&&fn(_,ce),X;if(K===null){for(;ce<z.length;ce++)K=P(_,z[ce],D),K!==null&&(E=u(K,E,ce),we===null?X=K:we.sibling=K,we=K);return fe&&fn(_,ce),X}for(K=s(K);ce<z.length;ce++)me=N(K,_,ce,z[ce],D),me!==null&&(e&&me.alternate!==null&&K.delete(me.key===null?ce:me.key),E=u(me,E,ce),we===null?X=me:we.sibling=me,we=me);return e&&K.forEach(function(ca){return t(_,ca)}),fe&&fn(_,ce),X}function ae(_,E,z,D){if(z==null)throw Error(r(151));for(var X=null,we=null,K=E,ce=E=0,me=null,be=z.next();K!==null&&!be.done;ce++,be=z.next()){K.index>ce?(me=K,K=null):me=K.sibling;var ca=j(_,K,be.value,D);if(ca===null){K===null&&(K=me);break}e&&K&&ca.alternate===null&&t(_,K),E=u(ca,E,ce),we===null?X=ca:we.sibling=ca,we=ca,K=me}if(be.done)return n(_,K),fe&&fn(_,ce),X;if(K===null){for(;!be.done;ce++,be=z.next())be=P(_,be.value,D),be!==null&&(E=u(be,E,ce),we===null?X=be:we.sibling=be,we=be);return fe&&fn(_,ce),X}for(K=s(K);!be.done;ce++,be=z.next())be=N(K,_,ce,be.value,D),be!==null&&(e&&be.alternate!==null&&K.delete(be.key===null?ce:be.key),E=u(be,E,ce),we===null?X=be:we.sibling=be,we=be);return e&&K.forEach(function(pv){return t(_,pv)}),fe&&fn(_,ce),X}function Re(_,E,z,D){if(typeof z=="object"&&z!==null&&z.type===C&&z.key===null&&(z=z.props.children),typeof z=="object"&&z!==null){switch(z.$$typeof){case x:e:{for(var X=z.key;E!==null;){if(E.key===X){if(X=z.type,X===C){if(E.tag===7){n(_,E.sibling),D=l(E,z.props.children),D.return=_,_=D;break e}}else if(E.elementType===X||typeof X=="object"&&X!==null&&X.$$typeof===U&&Ma(X)===E.type){n(_,E.sibling),D=l(E,z.props),fi(D,z),D.return=_,_=D;break e}n(_,E);break}else t(_,E);E=E.sibling}z.type===C?(D=Ta(z.props.children,_.mode,D,z.key),D.return=_,_=D):(D=Cs(z.type,z.key,z.props,null,_.mode,D),fi(D,z),D.return=_,_=D)}return m(_);case R:e:{for(X=z.key;E!==null;){if(E.key===X)if(E.tag===4&&E.stateNode.containerInfo===z.containerInfo&&E.stateNode.implementation===z.implementation){n(_,E.sibling),D=l(E,z.children||[]),D.return=_,_=D;break e}else{n(_,E);break}else t(_,E);E=E.sibling}D=Il(z,_.mode,D),D.return=_,_=D}return m(_);case U:return z=Ma(z),Re(_,E,z,D)}if(Le(z))return Z(_,E,z,D);if(te(z)){if(X=te(z),typeof X!="function")throw Error(r(150));return z=X.call(z),ae(_,E,z,D)}if(typeof z.then=="function")return Re(_,E,Ns(z),D);if(z.$$typeof===H)return Re(_,E,zs(_,z),D);Bs(_,z)}return typeof z=="string"&&z!==""||typeof z=="number"||typeof z=="bigint"?(z=""+z,E!==null&&E.tag===6?(n(_,E.sibling),D=l(E,z),D.return=_,_=D):(n(_,E),D=Yl(z,_.mode,D),D.return=_,_=D),m(_)):n(_,E)}return function(_,E,z,D){try{mi=0;var X=Re(_,E,z,D);return bo=null,X}catch(K){if(K===wo||K===js)throw K;var we=zt(29,K,null,_.mode);return we.lanes=D,we.return=_,we}}}var Oa=Fh(!0),Gh=Fh(!1),Gn=!1;function tc(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function nc(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Qn(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Vn(e,t,n){var s=e.updateQueue;if(s===null)return null;if(s=s.shared,(Se&2)!==0){var l=s.pending;return l===null?t.next=t:(t.next=l.next,l.next=t),s.pending=t,t=Ts(e),Rh(e,null,n),t}return Es(e,s,t,n),Ts(e)}function gi(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194048)!==0)){var s=t.lanes;s&=e.pendingLanes,n|=s,t.lanes=n,Dd(e,n)}}function ac(e,t){var n=e.updateQueue,s=e.alternate;if(s!==null&&(s=s.updateQueue,n===s)){var l=null,u=null;if(n=n.firstBaseUpdate,n!==null){do{var m={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};u===null?l=u=m:u=u.next=m,n=n.next}while(n!==null);u===null?l=u=t:u=u.next=t}else l=u=t;n={baseState:s.baseState,firstBaseUpdate:l,lastBaseUpdate:u,shared:s.shared,callbacks:s.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var oc=!1;function yi(){if(oc){var e=yo;if(e!==null)throw e}}function wi(e,t,n,s){oc=!1;var l=e.updateQueue;Gn=!1;var u=l.firstBaseUpdate,m=l.lastBaseUpdate,y=l.shared.pending;if(y!==null){l.shared.pending=null;var k=y,M=k.next;k.next=null,m===null?u=M:m.next=M,m=k;var L=e.alternate;L!==null&&(L=L.updateQueue,y=L.lastBaseUpdate,y!==m&&(y===null?L.firstBaseUpdate=M:y.next=M,L.lastBaseUpdate=k))}if(u!==null){var P=l.baseState;m=0,L=M=k=null,y=u;do{var j=y.lane&-536870913,N=j!==y.lane;if(N?(pe&j)===j:(s&j)===j){j!==0&&j===go&&(oc=!0),L!==null&&(L=L.next={lane:0,tag:y.tag,payload:y.payload,callback:null,next:null});e:{var Z=e,ae=y;j=t;var Re=n;switch(ae.tag){case 1:if(Z=ae.payload,typeof Z=="function"){P=Z.call(Re,P,j);break e}P=Z;break e;case 3:Z.flags=Z.flags&-65537|128;case 0:if(Z=ae.payload,j=typeof Z=="function"?Z.call(Re,P,j):Z,j==null)break e;P=w({},P,j);break e;case 2:Gn=!0}}j=y.callback,j!==null&&(e.flags|=64,N&&(e.flags|=8192),N=l.callbacks,N===null?l.callbacks=[j]:N.push(j))}else N={lane:j,tag:y.tag,payload:y.payload,callback:y.callback,next:null},L===null?(M=L=N,k=P):L=L.next=N,m|=j;if(y=y.next,y===null){if(y=l.shared.pending,y===null)break;N=y,y=N.next,N.next=null,l.lastBaseUpdate=N,l.shared.pending=null}}while(!0);L===null&&(k=P),l.baseState=k,l.firstBaseUpdate=M,l.lastBaseUpdate=L,u===null&&(l.shared.lanes=0),Jn|=m,e.lanes=m,e.memoizedState=P}}function Qh(e,t){if(typeof e!="function")throw Error(r(191,e));e.call(t)}function Vh(e,t){var n=e.callbacks;
vendor: 6,180 bytes, line 9
9if(n!==null)for(e.callbacks=null,e=0;e<n.length;e++)Qh(n[e],t)}var vo=ut(null),Ls=ut(0);function $h(e,t){e=Tn,ge(Ls,e),ge(vo,t),Tn=e|t.baseLanes}function ic(){ge(Ls,Tn),ge(vo,vo.current)}function sc(){Tn=Ls.current,De(vo),De(Ls)}var Mt=ut(null),Wt=null;function $n(e){var t=e.alternate;ge(Ie,Ie.current&1),ge(Mt,e),Wt===null&&(t===null||vo.current!==null||t.memoizedState!==null)&&(Wt=e)}function rc(e){ge(Ie,Ie.current),ge(Mt,e),Wt===null&&(Wt=e)}function Zh(e){e.tag===22?(ge(Ie,Ie.current),ge(Mt,e),Wt===null&&(Wt=e)):Zn()}function Zn(){ge(Ie,Ie.current),ge(Mt,Mt.current)}function jt(e){De(Mt),Wt===e&&(Wt=null),De(Ie)}var Ie=ut(0);function Ds(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||pu(n)||mu(n)))return t}else if(t.tag===19&&(t.memoizedProps.revealOrder==="forwards"||t.memoizedProps.revealOrder==="backwards"||t.memoizedProps.revealOrder==="unstable_legacy-backwards"||t.memoizedProps.revealOrder==="together")){if((t.flags&128)!==0)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var wn=0,re=null,Ce=null,Qe=null,Ps=!1,So=!1,Na=!1,qs=0,bi=0,Ao=null,ab=0;function He(){throw Error(r(321))}function lc(e,t){if(t===null)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!Rt(e[n],t[n]))return!1;return!0}function cc(e,t,n,s,l,u){return wn=u,re=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,B.H=e===null||e.memoizedState===null?Op:xc,Na=!1,u=n(s,l),Na=!1,So&&(u=Xh(t,n,s,l)),Kh(e),u}function Kh(e){B.H=Ai;var t=Ce!==null&&Ce.next!==null;if(wn=0,Qe=Ce=re=null,Ps=!1,bi=0,Ao=null,t)throw Error(r(300));e===null||Ve||(e=e.dependencies,e!==null&&Rs(e)&&(Ve=!0))}function Xh(e,t,n,s){re=e;var l=0;do{if(So&&(Ao=null),bi=0,So=!1,25<=l)throw Error(r(301));if(l+=1,Qe=Ce=null,e.updateQueue!=null){var u=e.updateQueue;u.lastEffect=null,u.events=null,u.stores=null,u.memoCache!=null&&(u.memoCache.index=0)}B.H=Np,u=t(n,s)}while(So);return u}function ob(){var e=B.H,t=e.useState()[0];return t=typeof t.then=="function"?vi(t):t,e=e.useState()[0],(Ce!==null?Ce.memoizedState:null)!==e&&(re.flags|=1024),t}function uc(){var e=qs!==0;return qs=0,e}function dc(e,t,n){t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~n}function hc(e){if(Ps){for(e=e.memoizedState;e!==null;){var t=e.queue;t!==null&&(t.pending=null),e=e.next}Ps=!1}wn=0,Qe=Ce=re=null,So=!1,bi=qs=0,Ao=null}function ht(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Qe===null?re.memoizedState=Qe=e:Qe=Qe.next=e,Qe}function We(){if(Ce===null){var e=re.alternate;e=e!==null?e.memoizedState:null}else e=Ce.next;var t=Qe===null?re.memoizedState:Qe.next;if(t!==null)Qe=t,Ce=e;else{if(e===null)throw re.alternate===null?Error(r(467)):Error(r(310));Ce=e,e={memoizedState:Ce.memoizedState,baseState:Ce.baseState,baseQueue:Ce.baseQueue,queue:Ce.queue,next:null},Qe===null?re.memoizedState=Qe=e:Qe=Qe.next=e}return Qe}function Us(){return{lastEffect:null,events:null,stores:null,memoCache:null}}function vi(e){var t=bi;return bi+=1,Ao===null&&(Ao=[]),e=Yh(Ao,e,t),t=re,(Qe===null?t.memoizedState:Qe.next)===null&&(t=t.alternate,B.H=t===null||t.memoizedState===null?Op:xc),e}function Hs(e){if(e!==null&&typeof e=="object"){if(typeof e.then=="function")return vi(e);if(e.$$typeof===H)return ot(e)}throw Error(r(438,String(e)))}function pc(e){var t=null,n=re.updateQueue;if(n!==null&&(t=n.memoCache),t==null){var s=re.alternate;s!==null&&(s=s.updateQueue,s!==null&&(s=s.memoCache,s!=null&&(t={data:s.data.map(function(l){return l.slice()}),index:0})))}if(t==null&&(t={data:[],index:0}),n===null&&(n=Us(),re.updateQueue=n),n.memoCache=t,n=t.data[t.index],n===void 0)for(n=t.data[t.index]=Array(e),s=0;s<e;s++)n[s]=ue;return t.index++,n}function bn(e,t){return typeof t=="function"?t(e):t}function Ys(e){var t=We();return mc(t,Ce,e)}function mc(e,t,n){var s=e.queue;if(s===null)throw Error(r(311));s.lastRenderedReducer=n;var l=e.baseQueue,u=s.pending;if(u!==null){if(l!==null){var m=l.next;l.next=u.next,u.next=m}t.baseQueue=l=u,s.pending=null}if(u=e.baseState,l===null)e.memoizedState=u;else{t=l.next;var y=m=null,k=null,M=t,L=!1;do{var P=M.lane&-536870913;if(P!==M.lane?(pe&P)===P:(wn&P)===P){var j=M.revertLane;if(j===0)k!==null&&(k=k.next={lane:0,revertLane:0,gesture:null,action:M.action,hasEagerState:M.hasEagerState,eagerState:M.eagerState,next:null}),P===go&&(L=!0);else if((wn&j)===j){M=M.next,j===go&&(L=!0);continue}else P={lane:0,revertLane:M.revertLane,gesture:null,action:M.action,hasEagerState:M.hasEagerState,eagerState:M.eagerState,next:null},k===null?(y=k=P,m=u):k=k.next=P,re.lanes|=j,Jn|=j;P=M.action,Na&&n(u,P),u=M.hasEagerState?M.eagerState:n(u,P)}else j={lane:P,revertLane:M.revertLane,gesture:M.gesture,action:M.action,hasEagerState:M.hasEagerState,eagerState:M.eagerState,next:null},k===null?(y=k=j,m=u):k=k.next=j,re.lanes|=P,Jn|=P;M=M.next}while(M!==null&&M!==t);if(k===null?m=u:k.next=y,!Rt(u,e.memoizedState)&&(Ve=!0,L&&(n=yo,n!==null)))throw n;e.memoizedState=u,e.baseState=m,e.baseQueue=k,s.lastRenderedState=u}return l===null&&(s.lanes=0),[e.memoizedState,s.dispatch]}function fc(e){var t=We(),n=t.queue;if(n===null)throw Error(r(311));n.lastRenderedReducer=e;var s=n.dispatch,l=n.pending,u=t.memoizedState;if(l!==null){n.pending=null;var m=l=l.next;do u=e(u,m.action),m=m.next;while(m!==l);Rt(u,t.memoizedState)||(Ve=!0),t.memoizedState=u,t.baseQueue===null&&(t.baseState=u),n.lastRenderedState=u}return[u,s]}function Jh(e,t,n){var s=re,l=We(),u=fe;if(u){if(n===void 0)throw Error(r(407));n=n()}else n=t();var m=!Rt((Ce||l).memoizedState,n);if(m&&(l.memoizedState=n,Ve=!0),l=l.queue,wc(np.bind(null,s,l,e),[e]),l.getSnapshot!==t||m||Qe!==null&&Qe.memoizedState.tag&1){if(s.flags|=2048,ko(9,{destroy:void 0},tp.bind(null,s,l,n,t),null),ze===null)throw Error(r(349));u||(wn&127)!==0||ep(s,t,n)}return n}function ep(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},t=re.updateQueue,t===null?(t=Us(),re.updateQueue=t,t.stores=[e]):(n=t.stores,n===null?t.stores=[e]:n.push(e))}function tp(e,t,n,s){t.value=n,t.getSnapshot=s,ap(t)&&op(e)}
vendor: 12,472 bytes, line 9
9function np(e,t,n){return n(function(){ap(t)&&op(e)})}function ap(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!Rt(e,n)}catch{return!0}}function op(e){var t=Ea(e,2);t!==null&&xt(t,e,2)}function gc(e){var t=ht();if(typeof e=="function"){var n=e;if(e=n(),Na){qn(!0);try{n()}finally{qn(!1)}}}return t.memoizedState=t.baseState=e,t.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:bn,lastRenderedState:e},t}function ip(e,t,n,s){return e.baseState=n,mc(e,Ce,typeof s=="function"?s:bn)}function ib(e,t,n,s,l){if(Fs(e))throw Error(r(485));if(e=t.action,e!==null){var u={payload:l,action:e,next:null,isTransition:!0,status:"pending",value:null,reason:null,listeners:[],then:function(m){u.listeners.push(m)}};B.T!==null?n(!0):u.isTransition=!1,s(u),n=t.pending,n===null?(u.next=t.pending=u,sp(t,u)):(u.next=n.next,t.pending=n.next=u)}}function sp(e,t){var n=t.action,s=t.payload,l=e.state;if(t.isTransition){var u=B.T,m={};B.T=m;try{var y=n(l,s),k=B.S;k!==null&&k(m,y),rp(e,t,y)}catch(M){yc(e,t,M)}finally{u!==null&&m.types!==null&&(u.types=m.types),B.T=u}}else try{u=n(l,s),rp(e,t,u)}catch(M){yc(e,t,M)}}function rp(e,t,n){n!==null&&typeof n=="object"&&typeof n.then=="function"?n.then(function(s){lp(e,t,s)},function(s){return yc(e,t,s)}):lp(e,t,n)}function lp(e,t,n){t.status="fulfilled",t.value=n,cp(t),e.state=n,t=e.pending,t!==null&&(n=t.next,n===t?e.pending=null:(n=n.next,t.next=n,sp(e,n)))}function yc(e,t,n){var s=e.pending;if(e.pending=null,s!==null){s=s.next;do t.status="rejected",t.reason=n,cp(t),t=t.next;while(t!==s)}e.action=null}function cp(e){e=e.listeners;for(var t=0;t<e.length;t++)(0,e[t])()}function up(e,t){return t}function dp(e,t){if(fe){var n=ze.formState;if(n!==null){e:{var s=re;if(fe){if(Ne){t:{for(var l=Ne,u=It;l.nodeType!==8;){if(!u){l=null;break t}if(l=Ft(l.nextSibling),l===null){l=null;break t}}u=l.data,l=u==="F!"||u==="F"?l:null}if(l){Ne=Ft(l.nextSibling),s=l.data==="F!";break e}}Wn(s)}s=!1}s&&(t=n[0])}}return n=ht(),n.memoizedState=n.baseState=t,s={pending:null,lanes:0,dispatch:null,lastRenderedReducer:up,lastRenderedState:t},n.queue=s,n=zp.bind(null,re,s),s.dispatch=n,s=gc(!1),u=kc.bind(null,re,!1,s.queue),s=ht(),l={state:t,dispatch:null,action:e,pending:null},s.queue=l,n=ib.bind(null,re,l,u,n),l.dispatch=n,s.memoizedState=e,[t,n,!1]}function hp(e){var t=We();return pp(t,Ce,e)}function pp(e,t,n){if(t=mc(e,t,up)[0],e=Ys(bn)[0],typeof t=="object"&&t!==null&&typeof t.then=="function")try{var s=vi(t)}catch(m){throw m===wo?js:m}else s=t;t=We();var l=t.queue,u=l.dispatch;return n!==t.memoizedState&&(re.flags|=2048,ko(9,{destroy:void 0},sb.bind(null,l,n),null)),[s,u,e]}function sb(e,t){e.action=t}function mp(e){var t=We(),n=Ce;if(n!==null)return pp(t,n,e);We(),t=t.memoizedState,n=We();var s=n.queue.dispatch;return n.memoizedState=e,[t,s,!1]}function ko(e,t,n,s){return e={tag:e,create:n,deps:s,inst:t,next:null},t=re.updateQueue,t===null&&(t=Us(),re.updateQueue=t),n=t.lastEffect,n===null?t.lastEffect=e.next=e:(s=n.next,n.next=e,e.next=s,t.lastEffect=e),e}function fp(){return We().memoizedState}function Is(e,t,n,s){var l=ht();re.flags|=e,l.memoizedState=ko(1|t,{destroy:void 0},n,s===void 0?null:s)}function Ws(e,t,n,s){var l=We();s=s===void 0?null:s;var u=l.memoizedState.inst;Ce!==null&&s!==null&&lc(s,Ce.memoizedState.deps)?l.memoizedState=ko(t,u,n,s):(re.flags|=e,l.memoizedState=ko(1|t,u,n,s))}function gp(e,t){Is(8390656,8,e,t)}function wc(e,t){Ws(2048,8,e,t)}function rb(e){re.flags|=4;var t=re.updateQueue;if(t===null)t=Us(),re.updateQueue=t,t.events=[e];else{var n=t.events;n===null?t.events=[e]:n.push(e)}}function yp(e){var t=We().memoizedState;return rb({ref:t,nextImpl:e}),function(){if((Se&2)!==0)throw Error(r(440));return t.impl.apply(void 0,arguments)}}function wp(e,t){return Ws(4,2,e,t)}function bp(e,t){return Ws(4,4,e,t)}function vp(e,t){if(typeof t=="function"){e=e();var n=t(e);return function(){typeof n=="function"?n():t(null)}}if(t!=null)return e=e(),t.current=e,function(){t.current=null}}function Sp(e,t,n){n=n!=null?n.concat([e]):null,Ws(4,4,vp.bind(null,t,e),n)}function bc(){}function Ap(e,t){var n=We();t=t===void 0?null:t;var s=n.memoizedState;return t!==null&&lc(t,s[1])?s[0]:(n.memoizedState=[e,t],e)}function kp(e,t){var n=We();t=t===void 0?null:t;var s=n.memoizedState;if(t!==null&&lc(t,s[1]))return s[0];if(s=e(),Na){qn(!0);try{e()}finally{qn(!1)}}return n.memoizedState=[s,t],s}function vc(e,t,n){return n===void 0||(wn&1073741824)!==0&&(pe&261930)===0?e.memoizedState=t:(e.memoizedState=n,e=xm(),re.lanes|=e,Jn|=e,n)}function xp(e,t,n,s){return Rt(n,t)?n:vo.current!==null?(e=vc(e,n,s),Rt(e,t)||(Ve=!0),e):(wn&42)===0||(wn&1073741824)!==0&&(pe&261930)===0?(Ve=!0,e.memoizedState=n):(e=xm(),re.lanes|=e,Jn|=e,t)}function Ep(e,t,n,s,l){var u=Q.p;Q.p=u!==0&&8>u?u:8;var m=B.T,y={};B.T=y,kc(e,!1,t,n);try{var k=l(),M=B.S;if(M!==null&&M(y,k),k!==null&&typeof k=="object"&&typeof k.then=="function"){var L=nb(k,s);Si(e,t,L,Bt(e))}else Si(e,t,s,Bt(e))}catch(P){Si(e,t,{then:function(){},status:"rejected",reason:P},Bt())}finally{Q.p=u,m!==null&&y.types!==null&&(m.types=y.types),B.T=m}}function lb(){}function Sc(e,t,n,s){if(e.tag!==5)throw Error(r(476));var l=Tp(e).queue;Ep(e,l,t,oe,n===null?lb:function(){return Cp(e),n(s)})}function Tp(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:oe,baseState:oe,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:bn,lastRenderedState:oe},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:bn,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Cp(e){var t=Tp(e);t.next===null&&(t=e.alternate.memoizedState),Si(e,t.next.queue,{},Bt())}function Ac(){return ot(Pi)}function _p(){return We().memoizedState}function Rp(){return We().memoizedState}function cb(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=Bt();e=Qn(n);var s=Vn(t,e,n);s!==null&&(xt(s,t,n),gi(s,t,n)),t={cache:Kl()},e.payload=t;return}t=t.return}}function ub(e,t,n){var s=Bt();n={lane:s,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Fs(e)?Mp(t,n):(n=Ul(e,t,n,s),n!==null&&(xt(n,e,s),jp(n,t,s)))}function zp(e,t,n){var s=Bt();Si(e,t,n,s)}function Si(e,t,n,s){var l={lane:s,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(Fs(e))Mp(t,l);else{var u=e.alternate;if(e.lanes===0&&(u===null||u.lanes===0)&&(u=t.lastRenderedReducer,u!==null))try{var m=t.lastRenderedState,y=u(m,n);if(l.hasEagerState=!0,l.eagerState=y,Rt(y,m))return Es(e,t,l,0),ze===null&&xs(),!1}catch{}if(n=Ul(e,t,l,s),n!==null)return xt(n,e,s),jp(n,t,s),!0}return!1}function kc(e,t,n,s){if(s={lane:2,revertLane:tu(),gesture:null,action:s,hasEagerState:!1,eagerState:null,next:null},Fs(e)){if(t)throw Error(r(479))}else t=Ul(e,n,s,2),t!==null&&xt(t,e,2)}function Fs(e){var t=e.alternate;return e===re||t!==null&&t===re}function Mp(e,t){So=Ps=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function jp(e,t,n){if((n&4194048)!==0){var s=t.lanes;s&=e.pendingLanes,n|=s,t.lanes=n,Dd(e,n)}}var Ai={readContext:ot,use:Hs,useCallback:He,useContext:He,useEffect:He,useImperativeHandle:He,useLayoutEffect:He,useInsertionEffect:He,useMemo:He,useReducer:He,useRef:He,useState:He,useDebugValue:He,useDeferredValue:He,useTransition:He,useSyncExternalStore:He,useId:He,useHostTransitionStatus:He,useFormState:He,useActionState:He,useOptimistic:He,useMemoCache:He,useCacheRefresh:He};Ai.useEffectEvent=He;var Op={readContext:ot,use:Hs,useCallback:function(e,t){return ht().memoizedState=[e,t===void 0?null:t],e},useContext:ot,useEffect:gp,useImperativeHandle:function(e,t,n){n=n!=null?n.concat([e]):null,Is(4194308,4,vp.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Is(4194308,4,e,t)},useInsertionEffect:function(e,t){Is(4,2,e,t)},useMemo:function(e,t){var n=ht();t=t===void 0?null:t;var s=e();if(Na){qn(!0);try{e()}finally{qn(!1)}}return n.memoizedState=[s,t],s},useReducer:function(e,t,n){var s=ht();if(n!==void 0){var l=n(t);if(Na){qn(!0);try{n(t)}finally{qn(!1)}}}else l=t;return s.memoizedState=s.baseState=l,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:l},s.queue=e,e=e.dispatch=ub.bind(null,re,e),[s.memoizedState,e]},useRef:function(e){var t=ht();return e={current:e},t.memoizedState=e},useState:function(e){e=gc(e);var t=e.queue,n=zp.bind(null,re,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:bc,useDeferredValue:function(e,t){var n=ht();return vc(n,e,t)},useTransition:function(){var e=gc(!1);return e=Ep.bind(null,re,e.queue,!0,!1),ht().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var s=re,l=ht();if(fe){if(n===void 0)throw Error(r(407));n=n()}else{if(n=t(),ze===null)throw Error(r(349));(pe&127)!==0||ep(s,t,n)}l.memoizedState=n;var u={value:n,getSnapshot:t};return l.queue=u,gp(np.bind(null,s,u,e),[e]),s.flags|=2048,ko(9,{destroy:void 0},tp.bind(null,s,u,n,t),null),n},useId:function(){var e=ht(),t=ze.identifierPrefix;if(fe){var n=an,s=nn;n=(s&~(1<<32-_t(s)-1)).toString(32)+n,t="_"+t+"R_"+n,n=qs++,0<n&&(t+="H"+n.toString(32)),t+="_"}else n=ab++,t="_"+t+"r_"+n.toString(32)+"_";return e.memoizedState=t},useHostTransitionStatus:Ac,useFormState:dp,useActionState:dp,useOptimistic:function(e){var t=ht();t.memoizedState=t.baseState=e;var n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return t.queue=n,t=kc.bind(null,re,!0,n),n.dispatch=t,[e,t]},useMemoCache:pc,useCacheRefresh:function(){return ht().memoizedState=cb.bind(null,re)},useEffectEvent:function(e){var t=ht(),n={impl:e};return t.memoizedState=n,function(){if((Se&2)!==0)throw Error(r(440));return n.impl.apply(void 0,arguments)}}},xc={readContext:ot,use:Hs,useCallback:Ap,useContext:ot,useEffect:wc,useImperativeHandle:Sp,useInsertionEffect:wp,useLayoutEffect:bp,useMemo:kp,useReducer:Ys,useRef:fp,useState:function(){return Ys(bn)},useDebugValue:bc,useDeferredValue:function(e,t){var n=We();return xp(n,Ce.memoizedState,e,t)},useTransition:function(){var e=Ys(bn)[0],t=We().memoizedState;return[typeof e=="boolean"?e:vi(e),t]},useSyncExternalStore:Jh,useId:_p,useHostTransitionStatus:Ac,useFormState:hp,useActionState:hp,useOptimistic:function(e,t){var n=We();return ip(n,Ce,e,t)},useMemoCache:pc,useCacheRefresh:Rp};xc.useEffectEvent=yp;var Np={readContext:ot,use:Hs,useCallback:Ap,useContext:ot,useEffect:wc,useImperativeHandle:Sp,useInsertionEffect:wp,useLayoutEffect:bp,useMemo:kp,useReducer:fc,useRef:fp,useState:function(){return fc(bn)},useDebugValue:bc,useDeferredValue:function(e,t){var n=We();return Ce===null?vc(n,e,t):xp(n,Ce.memoizedState,e,t)},useTransition:function(){var e=fc(bn)[0],t=We().memoizedState;return[typeof e=="boolean"?e:vi(e),t]},useSyncExternalStore:Jh,useId:_p,useHostTransitionStatus:Ac,useFormState:mp,useActionState:mp,useOptimistic:function(e,t){var n=We();return Ce!==null?ip(n,Ce,e,t):(n.baseState=e,[e,n.queue.dispatch])},useMemoCache:pc,useCacheRefresh:Rp};Np.useEffectEvent=yp;function Ec(e,t,n,s){t=e.memoizedState,n=n(s,t),n=n==null?t:w({},t,n),e.memoizedState=n,e.lanes===0&&(e.updateQueue.baseState=n)}var Tc={enqueueSetState:function(e,t,n){e=e._reactInternals;var s=Bt(),l=Qn(s);l.payload=t,n!=null&&(l.callback=n),t=Vn(e,l,s),t!==null&&(xt(t,e,s),gi(t,e,s))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var s=Bt(),l=Qn(s);l.tag=1,l.payload=t,n!=null&&(l.callback=n),t=Vn(e,l,s),t!==null&&(xt(t,e,s),gi(t,e,s))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=Bt(),s=Qn(n);s.tag=2,t!=null&&(s.callback=t),t=Vn(e,s,n),t!==null&&(xt(t,e,n),gi(t,e,n))}};function Bp(e,t,n,s,l,u,m){return e=e.stateNode,typeof e.shouldComponentUpdate=="function"?e.shouldComponentUpdate(s,u,m):t.prototype&&t.prototype.isPureReactComponent?!li(n,s)||!li(l,u):!0}function Lp(e,t,n,s){e=t.state,typeof t.componentWillReceiveProps=="function"&&t.componentWillReceiveProps(n,s),typeof t.UNSAFE_componentWillReceiveProps=="function"&&t.UNSAFE_componentWillReceiveProps(n,s),t.state!==e&&Tc.enqueueReplaceState(t,t.state,null)}function Ba(e,t){var n=t;if("ref"in t){n={};for(var s in t)s!=="ref"&&(n[s]=t[s])}if(e=e.defaultProps){n===t&&(n=w({},n));for(var l in e)n[l]===void 0&&(n[l]=e[l])}return n}function Dp(e){ks(e)}function Pp(e){console.error(e)}function qp(e){ks(e)}function Gs(e,t){try{var n=e.onUncaughtError;n(t.value,{componentStack:t.stack})}catch(s){setTimeout(function(){throw s})}}
vendor: 4,340 bytes, line 9
9function Up(e,t,n){try{var s=e.onCaughtError;s(n.value,{componentStack:n.stack,errorBoundary:t.tag===1?t.stateNode:null})}catch(l){setTimeout(function(){throw l})}}function Cc(e,t,n){return n=Qn(n),n.tag=3,n.payload={element:null},n.callback=function(){Gs(e,t)},n}function Hp(e){return e=Qn(e),e.tag=3,e}function Yp(e,t,n,s){var l=n.type.getDerivedStateFromError;if(typeof l=="function"){var u=s.value;e.payload=function(){return l(u)},e.callback=function(){Up(t,n,s)}}var m=n.stateNode;m!==null&&typeof m.componentDidCatch=="function"&&(e.callback=function(){Up(t,n,s),typeof l!="function"&&(ea===null?ea=new Set([this]):ea.add(this));var y=s.stack;this.componentDidCatch(s.value,{componentStack:y!==null?y:""})})}function db(e,t,n,s,l){if(n.flags|=32768,s!==null&&typeof s=="object"&&typeof s.then=="function"){if(t=n.alternate,t!==null&&fo(t,n,l,!0),n=Mt.current,n!==null){switch(n.tag){case 31:case 13:return Wt===null?or():n.alternate===null&&Ye===0&&(Ye=3),n.flags&=-257,n.flags|=65536,n.lanes=l,s===Os?n.flags|=16384:(t=n.updateQueue,t===null?n.updateQueue=new Set([s]):t.add(s),Xc(e,s,l)),!1;case 22:return n.flags|=65536,s===Os?n.flags|=16384:(t=n.updateQueue,t===null?(t={transitions:null,markerInstances:null,retryQueue:new Set([s])},n.updateQueue=t):(n=t.retryQueue,n===null?t.retryQueue=new Set([s]):n.add(s)),Xc(e,s,l)),!1}throw Error(r(435,n.tag))}return Xc(e,s,l),or(),!1}if(fe)return t=Mt.current,t!==null?((t.flags&65536)===0&&(t.flags|=256),t.flags|=65536,t.lanes=l,s!==Gl&&(e=Error(r(422),{cause:s}),di(Ut(e,n)))):(s!==Gl&&(t=Error(r(423),{cause:s}),di(Ut(t,n))),e=e.current.alternate,e.flags|=65536,l&=-l,e.lanes|=l,s=Ut(s,n),l=Cc(e.stateNode,s,l),ac(e,l),Ye!==4&&(Ye=2)),!1;var u=Error(r(520),{cause:s});if(u=Ut(u,n),zi===null?zi=[u]:zi.push(u),Ye!==4&&(Ye=2),t===null)return!0;s=Ut(s,n),n=t;do{switch(n.tag){case 3:return n.flags|=65536,e=l&-l,n.lanes|=e,e=Cc(n.stateNode,s,e),ac(n,e),!1;case 1:if(t=n.type,u=n.stateNode,(n.flags&128)===0&&(typeof t.getDerivedStateFromError=="function"||u!==null&&typeof u.componentDidCatch=="function"&&(ea===null||!ea.has(u))))return n.flags|=65536,l&=-l,n.lanes|=l,l=Hp(l),Yp(l,e,n,s),ac(n,l),!1}n=n.return}while(n!==null);return!1}var _c=Error(r(461)),Ve=!1;function it(e,t,n,s){t.child=e===null?Gh(t,null,n,s):Oa(t,e.child,n,s)}function Ip(e,t,n,s,l){n=n.render;var u=t.ref;if("ref"in s){var m={};for(var y in s)y!=="ref"&&(m[y]=s[y])}else m=s;return Ra(t),s=cc(e,t,n,m,u,l),y=uc(),e!==null&&!Ve?(dc(e,t,l),vn(e,t,l)):(fe&&y&&Wl(t),t.flags|=1,it(e,t,s,l),t.child)}function Wp(e,t,n,s,l){if(e===null){var u=n.type;return typeof u=="function"&&!Hl(u)&&u.defaultProps===void 0&&n.compare===null?(t.tag=15,t.type=u,Fp(e,t,u,s,l)):(e=Cs(n.type,null,s,t,t.mode,l),e.ref=t.ref,e.return=t,t.child=e)}if(u=e.child,!Lc(e,l)){var m=u.memoizedProps;if(n=n.compare,n=n!==null?n:li,n(m,s)&&e.ref===t.ref)return vn(e,t,l)}return t.flags|=1,e=mn(u,s),e.ref=t.ref,e.return=t,t.child=e}function Fp(e,t,n,s,l){if(e!==null){var u=e.memoizedProps;if(li(u,s)&&e.ref===t.ref)if(Ve=!1,t.pendingProps=s=u,Lc(e,l))(e.flags&131072)!==0&&(Ve=!0);else return t.lanes=e.lanes,vn(e,t,l)}return Rc(e,t,n,s,l)}function Gp(e,t,n,s){var l=s.children,u=e!==null?e.memoizedState:null;if(e===null&&t.stateNode===null&&(t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),s.mode==="hidden"){if((t.flags&128)!==0){if(u=u!==null?u.baseLanes|n:n,e!==null){for(s=t.child=e.child,l=0;s!==null;)l=l|s.lanes|s.childLanes,s=s.sibling;s=l&~u}else s=0,t.child=null;return Qp(e,t,u,n,s)}if((n&536870912)!==0)t.memoizedState={baseLanes:0,cachePool:null},e!==null&&Ms(t,u!==null?u.cachePool:null),u!==null?$h(t,u):ic(),Zh(t);else return s=t.lanes=536870912,Qp(e,t,u!==null?u.baseLanes|n:n,n,s)}else u!==null?(Ms(t,u.cachePool),$h(t,u),Zn(),t.memoizedState=null):(e!==null&&Ms(t,null),ic(),Zn());return it(e,t,l,n),t.child}function ki(e,t){return e!==null&&e.tag===22||t.stateNode!==null||(t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),t.sibling}function Qp(e,t,n,s,l){var u=Jl();return u=u===null?null:{parent:Ge._currentValue,pool:u},t.memoizedState={baseLanes:n,cachePool:u},e!==null&&Ms(t,null),ic(),Zh(t),e!==null&&fo(e,t,s,!0),t.childLanes=l,null}function Qs(e,t){return t=$s({mode:t.mode,children:t.children},e.mode),t.ref=e.ref,e.child=t,t.return=e,t}
vendor: 5,740 bytes, line 9
9function Vp(e,t,n){return Oa(t,e.child,null,n),e=Qs(t,t.pendingProps),e.flags|=2,jt(t),t.memoizedState=null,e}function hb(e,t,n){var s=t.pendingProps,l=(t.flags&128)!==0;if(t.flags&=-129,e===null){if(fe){if(s.mode==="hidden")return e=Qs(t,s),t.lanes=536870912,ki(null,e);if(rc(t),(e=Ne)?(e=rf(e,It),e=e!==null&&e.data==="&"?e:null,e!==null&&(t.memoizedState={dehydrated:e,treeContext:Yn!==null?{id:nn,overflow:an}:null,retryLane:536870912,hydrationErrors:null},n=Mh(e),n.return=t,t.child=n,at=t,Ne=null)):e=null,e===null)throw Wn(t);return t.lanes=536870912,null}return Qs(t,s)}var u=e.memoizedState;if(u!==null){var m=u.dehydrated;if(rc(t),l)if(t.flags&256)t.flags&=-257,t=Vp(e,t,n);else if(t.memoizedState!==null)t.child=e.child,t.flags|=128,t=null;else throw Error(r(558));else if(Ve||fo(e,t,n,!1),l=(n&e.childLanes)!==0,Ve||l){if(s=ze,s!==null&&(m=Pd(s,n),m!==0&&m!==u.retryLane))throw u.retryLane=m,Ea(e,m),xt(s,e,m),_c;or(),t=Vp(e,t,n)}else e=u.treeContext,Ne=Ft(m.nextSibling),at=t,fe=!0,In=null,It=!1,e!==null&&Nh(t,e),t=Qs(t,s),t.flags|=4096;return t}return e=mn(e.child,{mode:s.mode,children:s.children}),e.ref=t.ref,t.child=e,e.return=t,e}function Vs(e,t){var n=t.ref;if(n===null)e!==null&&e.ref!==null&&(t.flags|=4194816);else{if(typeof n!="function"&&typeof n!="object")throw Error(r(284));(e===null||e.ref!==n)&&(t.flags|=4194816)}}function Rc(e,t,n,s,l){return Ra(t),n=cc(e,t,n,s,void 0,l),s=uc(),e!==null&&!Ve?(dc(e,t,l),vn(e,t,l)):(fe&&s&&Wl(t),t.flags|=1,it(e,t,n,l),t.child)}function $p(e,t,n,s,l,u){return Ra(t),t.updateQueue=null,n=Xh(t,s,n,l),Kh(e),s=uc(),e!==null&&!Ve?(dc(e,t,u),vn(e,t,u)):(fe&&s&&Wl(t),t.flags|=1,it(e,t,n,u),t.child)}function Zp(e,t,n,s,l){if(Ra(t),t.stateNode===null){var u=uo,m=n.contextType;typeof m=="object"&&m!==null&&(u=ot(m)),u=new n(s,u),t.memoizedState=u.state!==null&&u.state!==void 0?u.state:null,u.updater=Tc,t.stateNode=u,u._reactInternals=t,u=t.stateNode,u.props=s,u.state=t.memoizedState,u.refs={},tc(t),m=n.contextType,u.context=typeof m=="object"&&m!==null?ot(m):uo,u.state=t.memoizedState,m=n.getDerivedStateFromProps,typeof m=="function"&&(Ec(t,n,m,s),u.state=t.memoizedState),typeof n.getDerivedStateFromProps=="function"||typeof u.getSnapshotBeforeUpdate=="function"||typeof u.UNSAFE_componentWillMount!="function"&&typeof u.componentWillMount!="function"||(m=u.state,typeof u.componentWillMount=="function"&&u.componentWillMount(),typeof u.UNSAFE_componentWillMount=="function"&&u.UNSAFE_componentWillMount(),m!==u.state&&Tc.enqueueReplaceState(u,u.state,null),wi(t,s,u,l),yi(),u.state=t.memoizedState),typeof u.componentDidMount=="function"&&(t.flags|=4194308),s=!0}else if(e===null){u=t.stateNode;var y=t.memoizedProps,k=Ba(n,y);u.props=k;var M=u.context,L=n.contextType;m=uo,typeof L=="object"&&L!==null&&(m=ot(L));var P=n.getDerivedStateFromProps;L=typeof P=="function"||typeof u.getSnapshotBeforeUpdate=="function",y=t.pendingProps!==y,L||typeof u.UNSAFE_componentWillReceiveProps!="function"&&typeof u.componentWillReceiveProps!="function"||(y||M!==m)&&Lp(t,u,s,m),Gn=!1;var j=t.memoizedState;u.state=j,wi(t,s,u,l),yi(),M=t.memoizedState,y||j!==M||Gn?(typeof P=="function"&&(Ec(t,n,P,s),M=t.memoizedState),(k=Gn||Bp(t,n,k,s,j,M,m))?(L||typeof u.UNSAFE_componentWillMount!="function"&&typeof u.componentWillMount!="function"||(typeof u.componentWillMount=="function"&&u.componentWillMount(),typeof u.UNSAFE_componentWillMount=="function"&&u.UNSAFE_componentWillMount()),typeof u.componentDidMount=="function"&&(t.flags|=4194308)):(typeof u.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=s,t.memoizedState=M),u.props=s,u.state=M,u.context=m,s=k):(typeof u.componentDidMount=="function"&&(t.flags|=4194308),s=!1)}else{u=t.stateNode,nc(e,t),m=t.memoizedProps,L=Ba(n,m),u.props=L,P=t.pendingProps,j=u.context,M=n.contextType,k=uo,typeof M=="object"&&M!==null&&(k=ot(M)),y=n.getDerivedStateFromProps,(M=typeof y=="function"||typeof u.getSnapshotBeforeUpdate=="function")||typeof u.UNSAFE_componentWillReceiveProps!="function"&&typeof u.componentWillReceiveProps!="function"||(m!==P||j!==k)&&Lp(t,u,s,k),Gn=!1,j=t.memoizedState,u.state=j,wi(t,s,u,l),yi();var N=t.memoizedState;m!==P||j!==N||Gn||e!==null&&e.dependencies!==null&&Rs(e.dependencies)?(typeof y=="function"&&(Ec(t,n,y,s),N=t.memoizedState),(L=Gn||Bp(t,n,L,s,j,N,k)||e!==null&&e.dependencies!==null&&Rs(e.dependencies))?(M||typeof u.UNSAFE_componentWillUpdate!="function"&&typeof u.componentWillUpdate!="function"||(typeof u.componentWillUpdate=="function"&&u.componentWillUpdate(s,N,k),typeof u.UNSAFE_componentWillUpdate=="function"&&u.UNSAFE_componentWillUpdate(s,N,k)),typeof u.componentDidUpdate=="function"&&(t.flags|=4),typeof u.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof u.componentDidUpdate!="function"||m===e.memoizedProps&&j===e.memoizedState||(t.flags|=4),typeof u.getSnapshotBeforeUpdate!="function"||m===e.memoizedProps&&j===e.memoizedState||(t.flags|=1024),t.memoizedProps=s,t.memoizedState=N),u.props=s,u.state=N,u.context=k,s=L):(typeof u.componentDidUpdate!="function"||m===e.memoizedProps&&j===e.memoizedState||(t.flags|=4),typeof u.getSnapshotBeforeUpdate!="function"||m===e.memoizedProps&&j===e.memoizedState||(t.flags|=1024),s=!1)}return u=s,Vs(e,t),s=(t.flags&128)!==0,u||s?(u=t.stateNode,n=s&&typeof n.getDerivedStateFromError!="function"?null:u.render(),t.flags|=1,e!==null&&s?(t.child=Oa(t,e.child,null,l),t.child=Oa(t,null,n,l)):it(e,t,n,l),t.memoizedState=u.state,e=t.child):e=vn(e,t,l),e}function Kp(e,t,n,s){return Ca(),t.flags|=256,it(e,t,n,s),t.child}var zc={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Mc(e){return{baseLanes:e,cachePool:Uh()}}function jc(e,t,n){return e=e!==null?e.childLanes&~n:0,t&&(e|=Nt),e}
vendor: 4,048 bytes, line 9
9function Xp(e,t,n){var s=t.pendingProps,l=!1,u=(t.flags&128)!==0,m;if((m=u)||(m=e!==null&&e.memoizedState===null?!1:(Ie.current&2)!==0),m&&(l=!0,t.flags&=-129),m=(t.flags&32)!==0,t.flags&=-33,e===null){if(fe){if(l?$n(t):Zn(),(e=Ne)?(e=rf(e,It),e=e!==null&&e.data!=="&"?e:null,e!==null&&(t.memoizedState={dehydrated:e,treeContext:Yn!==null?{id:nn,overflow:an}:null,retryLane:536870912,hydrationErrors:null},n=Mh(e),n.return=t,t.child=n,at=t,Ne=null)):e=null,e===null)throw Wn(t);return mu(e)?t.lanes=32:t.lanes=536870912,null}var y=s.children;return s=s.fallback,l?(Zn(),l=t.mode,y=$s({mode:"hidden",children:y},l),s=Ta(s,l,n,null),y.return=t,s.return=t,y.sibling=s,t.child=y,s=t.child,s.memoizedState=Mc(n),s.childLanes=jc(e,m,n),t.memoizedState=zc,ki(null,s)):($n(t),Oc(t,y))}var k=e.memoizedState;if(k!==null&&(y=k.dehydrated,y!==null)){if(u)t.flags&256?($n(t),t.flags&=-257,t=Nc(e,t,n)):t.memoizedState!==null?(Zn(),t.child=e.child,t.flags|=128,t=null):(Zn(),y=s.fallback,l=t.mode,s=$s({mode:"visible",children:s.children},l),y=Ta(y,l,n,null),y.flags|=2,s.return=t,y.return=t,s.sibling=y,t.child=s,Oa(t,e.child,null,n),s=t.child,s.memoizedState=Mc(n),s.childLanes=jc(e,m,n),t.memoizedState=zc,t=ki(null,s));else if($n(t),mu(y)){if(m=y.nextSibling&&y.nextSibling.dataset,m)var M=m.dgst;m=M,s=Error(r(419)),s.stack="",s.digest=m,di({value:s,source:null,stack:null}),t=Nc(e,t,n)}else if(Ve||fo(e,t,n,!1),m=(n&e.childLanes)!==0,Ve||m){if(m=ze,m!==null&&(s=Pd(m,n),s!==0&&s!==k.retryLane))throw k.retryLane=s,Ea(e,s),xt(m,e,s),_c;pu(y)||or(),t=Nc(e,t,n)}else pu(y)?(t.flags|=192,t.child=e.child,t=null):(e=k.treeContext,Ne=Ft(y.nextSibling),at=t,fe=!0,In=null,It=!1,e!==null&&Nh(t,e),t=Oc(t,s.children),t.flags|=4096);return t}return l?(Zn(),y=s.fallback,l=t.mode,k=e.child,M=k.sibling,s=mn(k,{mode:"hidden",children:s.children}),s.subtreeFlags=k.subtreeFlags&65011712,M!==null?y=mn(M,y):(y=Ta(y,l,n,null),y.flags|=2),y.return=t,s.return=t,s.sibling=y,t.child=s,ki(null,s),s=t.child,y=e.child.memoizedState,y===null?y=Mc(n):(l=y.cachePool,l!==null?(k=Ge._currentValue,l=l.parent!==k?{parent:k,pool:k}:l):l=Uh(),y={baseLanes:y.baseLanes|n,cachePool:l}),s.memoizedState=y,s.childLanes=jc(e,m,n),t.memoizedState=zc,ki(e.child,s)):($n(t),n=e.child,e=n.sibling,n=mn(n,{mode:"visible",children:s.children}),n.return=t,n.sibling=null,e!==null&&(m=t.deletions,m===null?(t.deletions=[e],t.flags|=16):m.push(e)),t.child=n,t.memoizedState=null,n)}function Oc(e,t){return t=$s({mode:"visible",children:t},e.mode),t.return=e,e.child=t}function $s(e,t){return e=zt(22,e,null,t),e.lanes=0,e}function Nc(e,t,n){return Oa(t,e.child,null,n),e=Oc(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function Jp(e,t,n){e.lanes|=t;var s=e.alternate;s!==null&&(s.lanes|=t),$l(e.return,t,n)}function Bc(e,t,n,s,l,u){var m=e.memoizedState;m===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:s,tail:n,tailMode:l,treeForkCount:u}:(m.isBackwards=t,m.rendering=null,m.renderingStartTime=0,m.last=s,m.tail=n,m.tailMode=l,m.treeForkCount=u)}function em(e,t,n){var s=t.pendingProps,l=s.revealOrder,u=s.tail;s=s.children;var m=Ie.current,y=(m&2)!==0;if(y?(m=m&1|2,t.flags|=128):m&=1,ge(Ie,m),it(e,t,s,n),s=fe?ui:0,!y&&e!==null&&(e.flags&128)!==0)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&Jp(e,n,t);else if(e.tag===19)Jp(e,n,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}switch(l){case"forwards":for(n=t.child,l=null;n!==null;)e=n.alternate,e!==null&&Ds(e)===null&&(l=n),n=n.sibling;n=l,n===null?(l=t.child,t.child=null):(l=n.sibling,n.sibling=null),Bc(t,!1,l,n,u,s);break;case"backwards":case"unstable_legacy-backwards":for(n=null,l=t.child,t.child=null;l!==null;){if(e=l.alternate,e!==null&&Ds(e)===null){t.child=l;break}e=l.sibling,l.sibling=n,n=l,l=e}Bc(t,!0,n,null,u,s);break;case"together":Bc(t,!1,null,null,void 0,s);break;default:t.memoizedState=null}return t.child}
vendor: 7,051 bytes, line 9
9function vn(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),Jn|=t.lanes,(n&t.childLanes)===0)if(e!==null){if(fo(e,t,n,!1),(n&t.childLanes)===0)return null}else return null;if(e!==null&&t.child!==e.child)throw Error(r(153));if(t.child!==null){for(e=t.child,n=mn(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=mn(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function Lc(e,t){return(e.lanes&t)!==0?!0:(e=e.dependencies,!!(e!==null&&Rs(e)))}function pb(e,t,n){switch(t.tag){case 3:Jt(t,t.stateNode.containerInfo),Fn(t,Ge,e.memoizedState.cache),Ca();break;case 27:case 5:en(t);break;case 4:Jt(t,t.stateNode.containerInfo);break;case 10:Fn(t,t.type,t.memoizedProps.value);break;case 31:if(t.memoizedState!==null)return t.flags|=128,rc(t),null;break;case 13:var s=t.memoizedState;if(s!==null)return s.dehydrated!==null?($n(t),t.flags|=128,null):(n&t.child.childLanes)!==0?Xp(e,t,n):($n(t),e=vn(e,t,n),e!==null?e.sibling:null);$n(t);break;case 19:var l=(e.flags&128)!==0;if(s=(n&t.childLanes)!==0,s||(fo(e,t,n,!1),s=(n&t.childLanes)!==0),l){if(s)return em(e,t,n);t.flags|=128}if(l=t.memoizedState,l!==null&&(l.rendering=null,l.tail=null,l.lastEffect=null),ge(Ie,Ie.current),s)break;return null;case 22:return t.lanes=0,Gp(e,t,n,t.pendingProps);case 24:Fn(t,Ge,e.memoizedState.cache)}return vn(e,t,n)}function tm(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps)Ve=!0;else{if(!Lc(e,n)&&(t.flags&128)===0)return Ve=!1,pb(e,t,n);Ve=(e.flags&131072)!==0}else Ve=!1,fe&&(t.flags&1048576)!==0&&Oh(t,ui,t.index);switch(t.lanes=0,t.tag){case 16:e:{var s=t.pendingProps;if(e=Ma(t.elementType),t.type=e,typeof e=="function")Hl(e)?(s=Ba(e,s),t.tag=1,t=Zp(null,t,e,s,n)):(t.tag=0,t=Rc(null,t,e,s,n));else{if(e!=null){var l=e.$$typeof;if(l===Y){t.tag=11,t=Ip(null,t,e,s,n);break e}else if(l===G){t.tag=14,t=Wp(null,t,e,s,n);break e}}throw t=ke(e)||e,Error(r(306,t,""))}}return t;case 0:return Rc(e,t,t.type,t.pendingProps,n);case 1:return s=t.type,l=Ba(s,t.pendingProps),Zp(e,t,s,l,n);case 3:e:{if(Jt(t,t.stateNode.containerInfo),e===null)throw Error(r(387));s=t.pendingProps;var u=t.memoizedState;l=u.element,nc(e,t),wi(t,s,null,n);var m=t.memoizedState;if(s=m.cache,Fn(t,Ge,s),s!==u.cache&&Zl(t,[Ge],n,!0),yi(),s=m.element,u.isDehydrated)if(u={element:s,isDehydrated:!1,cache:m.cache},t.updateQueue.baseState=u,t.memoizedState=u,t.flags&256){t=Kp(e,t,s,n);break e}else if(s!==l){l=Ut(Error(r(424)),t),di(l),t=Kp(e,t,s,n);break e}else for(e=t.stateNode.containerInfo,e.nodeType===9?e=e.body:e=e.nodeName==="HTML"?e.ownerDocument.body:e,Ne=Ft(e.firstChild),at=t,fe=!0,In=null,It=!0,n=Gh(t,null,s,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(Ca(),s===l){t=vn(e,t,n);break e}it(e,t,s,n)}t=t.child}return t;case 26:return Vs(e,t),e===null?(n=pf(t.type,null,t.pendingProps,null))?t.memoizedState=n:fe||(n=t.type,e=t.pendingProps,s=dr(ft.current).createElement(n),s[nt]=t,s[wt]=e,st(s,n,e),et(s),t.stateNode=s):t.memoizedState=pf(t.type,e.memoizedProps,t.pendingProps,e.memoizedState),null;case 27:return en(t),e===null&&fe&&(s=t.stateNode=uf(t.type,t.pendingProps,ft.current),at=t,It=!0,l=Ne,oa(t.type)?(fu=l,Ne=Ft(s.firstChild)):Ne=l),it(e,t,t.pendingProps.children,n),Vs(e,t),e===null&&(t.flags|=4194304),t.child;case 5:return e===null&&fe&&((l=s=Ne)&&(s=Ib(s,t.type,t.pendingProps,It),s!==null?(t.stateNode=s,at=t,Ne=Ft(s.firstChild),It=!1,l=!0):l=!1),l||Wn(t)),en(t),l=t.type,u=t.pendingProps,m=e!==null?e.memoizedProps:null,s=u.children,uu(l,u)?s=null:m!==null&&uu(l,m)&&(t.flags|=32),t.memoizedState!==null&&(l=cc(e,t,ob,null,null,n),Pi._currentValue=l),Vs(e,t),it(e,t,s,n),t.child;case 6:return e===null&&fe&&((e=n=Ne)&&(n=Wb(n,t.pendingProps,It),n!==null?(t.stateNode=n,at=t,Ne=null,e=!0):e=!1),e||Wn(t)),null;case 13:return Xp(e,t,n);case 4:return Jt(t,t.stateNode.containerInfo),s=t.pendingProps,e===null?t.child=Oa(t,null,s,n):it(e,t,s,n),t.child;case 11:return Ip(e,t,t.type,t.pendingProps,n);case 7:return it(e,t,t.pendingProps,n),t.child;case 8:return it(e,t,t.pendingProps.children,n),t.child;case 12:return it(e,t,t.pendingProps.children,n),t.child;case 10:return s=t.pendingProps,Fn(t,t.type,s.value),it(e,t,s.children,n),t.child;case 9:return l=t.type._context,s=t.pendingProps.children,Ra(t),l=ot(l),s=s(l),t.flags|=1,it(e,t,s,n),t.child;case 14:return Wp(e,t,t.type,t.pendingProps,n);case 15:return Fp(e,t,t.type,t.pendingProps,n);case 19:return em(e,t,n);case 31:return hb(e,t,n);case 22:return Gp(e,t,n,t.pendingProps);case 24:return Ra(t),s=ot(Ge),e===null?(l=Jl(),l===null&&(l=ze,u=Kl(),l.pooledCache=u,u.refCount++,u!==null&&(l.pooledCacheLanes|=n),l=u),t.memoizedState={parent:s,cache:l},tc(t),Fn(t,Ge,l)):((e.lanes&n)!==0&&(nc(e,t),wi(t,null,null,n),yi()),l=e.memoizedState,u=t.memoizedState,l.parent!==s?(l={parent:s,cache:s},t.memoizedState=l,t.lanes===0&&(t.memoizedState=t.updateQueue.baseState=l),Fn(t,Ge,s)):(s=u.cache,Fn(t,Ge,s),s!==l.cache&&Zl(t,[Ge],n,!0))),it(e,t,t.pendingProps.children,n),t.child;case 29:throw t.pendingProps}throw Error(r(156,t.tag))}function Sn(e){e.flags|=4}function Dc(e,t,n,s,l){if((t=(e.mode&32)!==0)&&(t=!1),t){if(e.flags|=16777216,(l&335544128)===l)if(e.stateNode.complete)e.flags|=8192;else if(_m())e.flags|=8192;else throw ja=Os,ec}else e.flags&=-16777217}function nm(e,t){if(t.type!=="stylesheet"||(t.state.loading&4)!==0)e.flags&=-16777217;else if(e.flags|=16777216,!wf(t))if(_m())e.flags|=8192;else throw ja=Os,ec}function Zs(e,t){t!==null&&(e.flags|=4),e.flags&16384&&(t=e.tag!==22?Bd():536870912,e.lanes|=t,Co|=t)}function xi(e,t){if(!fe)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var s=null;n!==null;)n.alternate!==null&&(s=n),n=n.sibling;s===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:s.sibling=null}}function Be(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,s=0;if(t)for(var l=e.child;l!==null;)n|=l.lanes|l.childLanes,s|=l.subtreeFlags&65011712,s|=l.flags&65011712,l.return=e,l=l.sibling;else for(l=e.child;l!==null;)n|=l.lanes|l.childLanes,s|=l.subtreeFlags,s|=l.flags,l.return=e,l=l.sibling;return e.subtreeFlags|=s,e.childLanes=n,t}function mb(e,t,n){var s=t.pendingProps;switch(Fl(t),t.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Be(t),null;case 1:return Be(t),null;case 3:return n=t.stateNode,s=null,e!==null&&(s=e.memoizedState.cache),t.memoizedState.cache!==s&&(t.flags|=2048),yn(Ge),$t(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),(e===null||e.child===null)&&(mo(t)?Sn(t):e===null||e.memoizedState.isDehydrated&&(t.flags&256)===0||(t.flags|=1024,Ql())),Be(t),null;case 26:var l=t.type,u=t.memoizedState;return e===null?(Sn(t),u!==null?(Be(t),nm(t,u)):(Be(t),Dc(t,l,null,s,n))):u?u!==e.memoizedState?(Sn(t),Be(t),nm(t,u)):(Be(t),t.flags&=-16777217):(e=e.memoizedProps,e!==s&&Sn(t),Be(t),Dc(t,l,e,s,n)),null;case 27:if(Ln(t),n=ft.current,l=t.type,e!==null&&t.stateNode!=null)e.memoizedProps!==s&&Sn(t);
vendor: 6,969 bytes, line 9
9else{if(!s){if(t.stateNode===null)throw Error(r(166));return Be(t),null}e=Fe.current,mo(t)?Bh(t):(e=uf(l,s,n),t.stateNode=e,Sn(t))}return Be(t),null;case 5:if(Ln(t),l=t.type,e!==null&&t.stateNode!=null)e.memoizedProps!==s&&Sn(t);else{if(!s){if(t.stateNode===null)throw Error(r(166));return Be(t),null}if(u=Fe.current,mo(t))Bh(t);else{var m=dr(ft.current);switch(u){case 1:u=m.createElementNS("http://www.w3.org/2000/svg",l);break;case 2:u=m.createElementNS("http://www.w3.org/1998/Math/MathML",l);break;default:switch(l){case"svg":u=m.createElementNS("http://www.w3.org/2000/svg",l);break;case"math":u=m.createElementNS("http://www.w3.org/1998/Math/MathML",l);break;case"script":u=m.createElement("div"),u.innerHTML="<script><\/script>",u=u.removeChild(u.firstChild);break;case"select":u=typeof s.is=="string"?m.createElement("select",{is:s.is}):m.createElement("select"),s.multiple?u.multiple=!0:s.size&&(u.size=s.size);break;default:u=typeof s.is=="string"?m.createElement(l,{is:s.is}):m.createElement(l)}}u[nt]=t,u[wt]=s;e:for(m=t.child;m!==null;){if(m.tag===5||m.tag===6)u.appendChild(m.stateNode);else if(m.tag!==4&&m.tag!==27&&m.child!==null){m.child.return=m,m=m.child;continue}if(m===t)break e;for(;m.sibling===null;){if(m.return===null||m.return===t)break e;m=m.return}m.sibling.return=m.return,m=m.sibling}t.stateNode=u;e:switch(st(u,l,s),l){case"button":case"input":case"select":case"textarea":s=!!s.autoFocus;break e;case"img":s=!0;break e;default:s=!1}s&&Sn(t)}}return Be(t),Dc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==s&&Sn(t);else{if(typeof s!="string"&&t.stateNode===null)throw Error(r(166));if(e=ft.current,mo(t)){if(e=t.stateNode,n=t.memoizedProps,s=null,l=at,l!==null)switch(l.tag){case 27:case 5:s=l.memoizedProps}e[nt]=t,e=!!(e.nodeValue===n||s!==null&&s.suppressHydrationWarning===!0||Xm(e.nodeValue,n)),e||Wn(t,!0)}else e=dr(e).createTextNode(s),e[nt]=t,t.stateNode=e}return Be(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(s=mo(t),n!==null){if(e===null){if(!s)throw Error(r(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(r(557));e[nt]=t}else Ca(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Be(t),e=!1}else n=Ql(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(jt(t),t):(jt(t),null);if((t.flags&128)!==0)throw Error(r(558))}return Be(t),null;case 13:if(s=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(l=mo(t),s!==null&&s.dehydrated!==null){if(e===null){if(!l)throw Error(r(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(r(317));l[nt]=t}else Ca(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Be(t),l=!1}else l=Ql(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=l),l=!0;if(!l)return t.flags&256?(jt(t),t):(jt(t),null)}return jt(t),(t.flags&128)!==0?(t.lanes=n,t):(n=s!==null,e=e!==null&&e.memoizedState!==null,n&&(s=t.child,l=null,s.alternate!==null&&s.alternate.memoizedState!==null&&s.alternate.memoizedState.cachePool!==null&&(l=s.alternate.memoizedState.cachePool.pool),u=null,s.memoizedState!==null&&s.memoizedState.cachePool!==null&&(u=s.memoizedState.cachePool.pool),u!==l&&(s.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Zs(t,t.updateQueue),Be(t),null);case 4:return $t(),e===null&&iu(t.stateNode.containerInfo),Be(t),null;case 10:return yn(t.type),Be(t),null;case 19:if(De(Ie),s=t.memoizedState,s===null)return Be(t),null;if(l=(t.flags&128)!==0,u=s.rendering,u===null)if(l)xi(s,!1);else{if(Ye!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(u=Ds(e),u!==null){for(t.flags|=128,xi(s,!1),e=u.updateQueue,t.updateQueue=e,Zs(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)zh(n,e),n=n.sibling;return ge(Ie,Ie.current&1|2),fe&&fn(t,s.treeForkCount),t.child}e=e.sibling}s.tail!==null&&le()>tr&&(t.flags|=128,l=!0,xi(s,!1),t.lanes=4194304)}else{if(!l)if(e=Ds(u),e!==null){if(t.flags|=128,l=!0,e=e.updateQueue,t.updateQueue=e,Zs(t,e),xi(s,!0),s.tail===null&&s.tailMode==="hidden"&&!u.alternate&&!fe)return Be(t),null}else 2*le()-s.renderingStartTime>tr&&n!==536870912&&(t.flags|=128,l=!0,xi(s,!1),t.lanes=4194304);s.isBackwards?(u.sibling=t.child,t.child=u):(e=s.last,e!==null?e.sibling=u:t.child=u,s.last=u)}return s.tail!==null?(e=s.tail,s.rendering=e,s.tail=e.sibling,s.renderingStartTime=le(),e.sibling=null,n=Ie.current,ge(Ie,l?n&1|2:n&1),fe&&fn(t,s.treeForkCount),e):(Be(t),null);case 22:case 23:return jt(t),sc(),s=t.memoizedState!==null,e!==null?e.memoizedState!==null!==s&&(t.flags|=8192):s&&(t.flags|=8192),s?(n&536870912)!==0&&(t.flags&128)===0&&(Be(t),t.subtreeFlags&6&&(t.flags|=8192)):Be(t),n=t.updateQueue,n!==null&&Zs(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),s=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(s=t.memoizedState.cachePool.pool),s!==n&&(t.flags|=2048),e!==null&&De(za),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),yn(Ge),Be(t),null;case 25:return null;case 30:return null}throw Error(r(156,t.tag))}function fb(e,t){switch(Fl(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return yn(Ge),$t(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Ln(t),null;case 31:if(t.memoizedState!==null){if(jt(t),t.alternate===null)throw Error(r(340));Ca()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(jt(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(r(340));Ca()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return De(Ie),null;case 4:return $t(),null;case 10:return yn(t.type),null;case 22:case 23:return jt(t),sc(),e!==null&&De(za),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return yn(Ge),null;case 25:return null;default:return null}}function am(e,t){switch(Fl(t),t.tag){case 3:yn(Ge),$t();break;case 26:case 27:case 5:Ln(t);break;case 4:$t();break;case 31:t.memoizedState!==null&&jt(t);break;case 13:jt(t);break;case 19:De(Ie);break;case 10:yn(t.type);break;case 22:case 23:jt(t),sc(),e!==null&&De(za);break;case 24:yn(Ge)}}function Ei(e,t){try{var n=t.updateQueue,s=n!==null?n.lastEffect:null;if(s!==null){var l=s.next;n=l;do{if((n.tag&e)===e){s=void 0;var u=n.create,m=n.inst;s=u(),m.destroy=s}n=n.next}while(n!==l)}}catch(y){Ee(t,t.return,y)}}function Kn(e,t,n){try{var s=t.updateQueue,l=s!==null?s.lastEffect:null;if(l!==null){var u=l.next;s=u;do{if((s.tag&e)===e){var m=s.inst,y=m.destroy;if(y!==void 0){m.destroy=void 0,l=t;var k=n,M=y;try{M()}catch(L){Ee(l,k,L)}}}s=s.next}while(s!==u)}}catch(L){Ee(t,t.return,L)}}function om(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{Vh(t,n)}catch(s){Ee(e,e.return,s)}}}function im(e,t,n){n.props=Ba(e.type,e.memoizedProps),n.state=e.memoizedState;
vendor: 20,606 bytes, line 9
9try{n.componentWillUnmount()}catch(s){Ee(e,t,s)}}function Ti(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var s=e.stateNode;break;case 30:s=e.stateNode;break;default:s=e.stateNode}typeof n=="function"?e.refCleanup=n(s):n.current=s}}catch(l){Ee(e,t,l)}}function on(e,t){var n=e.ref,s=e.refCleanup;if(n!==null)if(typeof s=="function")try{s()}catch(l){Ee(e,t,l)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n=="function")try{n(null)}catch(l){Ee(e,t,l)}else n.current=null}function sm(e){var t=e.type,n=e.memoizedProps,s=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":n.autoFocus&&s.focus();break e;case"img":n.src?s.src=n.src:n.srcSet&&(s.srcset=n.srcSet)}}catch(l){Ee(e,e.return,l)}}function Pc(e,t,n){try{var s=e.stateNode;Db(s,e.type,n,t),s[wt]=t}catch(l){Ee(e,e.return,l)}}function rm(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&oa(e.type)||e.tag===4}function qc(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||rm(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&oa(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Uc(e,t,n){var s=e.tag;if(s===5||s===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=hn));else if(s!==4&&(s===27&&oa(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(Uc(e,t,n),e=e.sibling;e!==null;)Uc(e,t,n),e=e.sibling}function Ks(e,t,n){var s=e.tag;if(s===5||s===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(s!==4&&(s===27&&oa(e.type)&&(n=e.stateNode),e=e.child,e!==null))for(Ks(e,t,n),e=e.sibling;e!==null;)Ks(e,t,n),e=e.sibling}function lm(e){var t=e.stateNode,n=e.memoizedProps;try{for(var s=e.type,l=t.attributes;l.length;)t.removeAttributeNode(l[0]);st(t,s,n),t[nt]=e,t[wt]=n}catch(u){Ee(e,e.return,u)}}var An=!1,$e=!1,Hc=!1,cm=typeof WeakSet=="function"?WeakSet:Set,tt=null;function gb(e,t){if(e=e.containerInfo,lu=wr,e=Sh(e),Nl(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var s=n.getSelection&&n.getSelection();if(s&&s.rangeCount!==0){n=s.anchorNode;var l=s.anchorOffset,u=s.focusNode;s=s.focusOffset;try{n.nodeType,u.nodeType}catch{n=null;break e}var m=0,y=-1,k=-1,M=0,L=0,P=e,j=null;t:for(;;){for(var N;P!==n||l!==0&&P.nodeType!==3||(y=m+l),P!==u||s!==0&&P.nodeType!==3||(k=m+s),P.nodeType===3&&(m+=P.nodeValue.length),(N=P.firstChild)!==null;)j=P,P=N;for(;;){if(P===e)break t;if(j===n&&++M===l&&(y=m),j===u&&++L===s&&(k=m),(N=P.nextSibling)!==null)break;P=j,j=P.parentNode}P=N}n=y===-1||k===-1?null:{start:y,end:k}}else n=null}n=n||{start:0,end:0}}else n=null;for(cu={focusedElem:e,selectionRange:n},wr=!1,tt=t;tt!==null;)if(t=tt,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,tt=e;else for(;tt!==null;){switch(t=tt,u=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(n=0;n<e.length;n++)l=e[n],l.ref.impl=l.nextImpl;break;case 11:case 15:break;case 1:if((e&1024)!==0&&u!==null){e=void 0,n=t,l=u.memoizedProps,u=u.memoizedState,s=n.stateNode;try{var Z=Ba(n.type,l);e=s.getSnapshotBeforeUpdate(Z,u),s.__reactInternalSnapshotBeforeUpdate=e}catch(ae){Ee(n,n.return,ae)}}break;case 3:if((e&1024)!==0){if(e=t.stateNode.containerInfo,n=e.nodeType,n===9)hu(e);else if(n===1)switch(e.nodeName){case"HEAD":case"HTML":case"BODY":hu(e);break;default:e.textContent=""}}break;case 5:case 26:case 27:case 6:case 4:case 17:break;default:if((e&1024)!==0)throw Error(r(163))}if(e=t.sibling,e!==null){e.return=t.return,tt=e;break}tt=t.return}}function um(e,t,n){var s=n.flags;switch(n.tag){case 0:case 11:case 15:xn(e,n),s&4&&Ei(5,n);break;case 1:if(xn(e,n),s&4)if(e=n.stateNode,t===null)try{e.componentDidMount()}catch(m){Ee(n,n.return,m)}else{var l=Ba(n.type,t.memoizedProps);t=t.memoizedState;try{e.componentDidUpdate(l,t,e.__reactInternalSnapshotBeforeUpdate)}catch(m){Ee(n,n.return,m)}}s&64&&om(n),s&512&&Ti(n,n.return);break;case 3:if(xn(e,n),s&64&&(e=n.updateQueue,e!==null)){if(t=null,n.child!==null)switch(n.child.tag){case 27:case 5:t=n.child.stateNode;break;case 1:t=n.child.stateNode}try{Vh(e,t)}catch(m){Ee(n,n.return,m)}}break;case 27:t===null&&s&4&&lm(n);case 26:case 5:xn(e,n),t===null&&s&4&&sm(n),s&512&&Ti(n,n.return);break;case 12:xn(e,n);break;case 31:xn(e,n),s&4&&pm(e,n);break;case 13:xn(e,n),s&4&&mm(e,n),s&64&&(e=n.memoizedState,e!==null&&(e=e.dehydrated,e!==null&&(n=Eb.bind(null,n),Fb(e,n))));break;case 22:if(s=n.memoizedState!==null||An,!s){t=t!==null&&t.memoizedState!==null||$e,l=An;var u=$e;An=s,($e=t)&&!u?En(e,n,(n.subtreeFlags&8772)!==0):xn(e,n),An=l,$e=u}break;case 30:break;default:xn(e,n)}}function dm(e){var t=e.alternate;t!==null&&(e.alternate=null,dm(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&yl(t)),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}var Pe=null,vt=!1;function kn(e,t,n){for(n=n.child;n!==null;)hm(e,t,n),n=n.sibling}function hm(e,t,n){if(Ct&&typeof Ct.onCommitFiberUnmount=="function")try{Ct.onCommitFiberUnmount(Zo,n)}catch{}switch(n.tag){case 26:$e||on(n,t),kn(e,t,n),n.memoizedState?n.memoizedState.count--:n.stateNode&&(n=n.stateNode,n.parentNode.removeChild(n));break;case 27:$e||on(n,t);var s=Pe,l=vt;oa(n.type)&&(Pe=n.stateNode,vt=!1),kn(e,t,n),Bi(n.stateNode),Pe=s,vt=l;break;case 5:$e||on(n,t);case 6:if(s=Pe,l=vt,Pe=null,kn(e,t,n),Pe=s,vt=l,Pe!==null)if(vt)try{(Pe.nodeType===9?Pe.body:Pe.nodeName==="HTML"?Pe.ownerDocument.body:Pe).removeChild(n.stateNode)}catch(u){Ee(n,t,u)}else try{Pe.removeChild(n.stateNode)}catch(u){Ee(n,t,u)}break;case 18:Pe!==null&&(vt?(e=Pe,of(e.nodeType===9?e.body:e.nodeName==="HTML"?e.ownerDocument.body:e,n.stateNode),Bo(e)):of(Pe,n.stateNode));break;case 4:s=Pe,l=vt,Pe=n.stateNode.containerInfo,vt=!0,kn(e,t,n),Pe=s,vt=l;break;case 0:case 11:case 14:case 15:Kn(2,n,t),$e||Kn(4,n,t),kn(e,t,n);break;case 1:$e||(on(n,t),s=n.stateNode,typeof s.componentWillUnmount=="function"&&im(n,t,s)),kn(e,t,n);break;case 21:kn(e,t,n);break;case 22:$e=(s=$e)||n.memoizedState!==null,kn(e,t,n),$e=s;break;default:kn(e,t,n)}}function pm(e,t){if(t.memoizedState===null&&(e=t.alternate,e!==null&&(e=e.memoizedState,e!==null))){e=e.dehydrated;try{Bo(e)}catch(n){Ee(t,t.return,n)}}}function mm(e,t){if(t.memoizedState===null&&(e=t.alternate,e!==null&&(e=e.memoizedState,e!==null&&(e=e.dehydrated,e!==null))))try{Bo(e)}catch(n){Ee(t,t.return,n)}}function yb(e){switch(e.tag){case 31:case 13:case 19:var t=e.stateNode;return t===null&&(t=e.stateNode=new cm),t;case 22:return e=e.stateNode,t=e._retryCache,t===null&&(t=e._retryCache=new cm),t;default:throw Error(r(435,e.tag))}}function Xs(e,t){var n=yb(e);t.forEach(function(s){if(!n.has(s)){n.add(s);var l=Tb.bind(null,e,s);s.then(l,l)}})}function St(e,t){var n=t.deletions;if(n!==null)for(var s=0;s<n.length;s++){var l=n[s],u=e,m=t,y=m;e:for(;y!==null;){switch(y.tag){case 27:if(oa(y.type)){Pe=y.stateNode,vt=!1;break e}break;case 5:Pe=y.stateNode,vt=!1;break e;case 3:case 4:Pe=y.stateNode.containerInfo,vt=!0;break e}y=y.return}if(Pe===null)throw Error(r(160));hm(u,m,l),Pe=null,vt=!1,u=l.alternate,u!==null&&(u.return=null),l.return=null}if(t.subtreeFlags&13886)for(t=t.child;t!==null;)fm(t,e),t=t.sibling}var Kt=null;function fm(e,t){var n=e.alternate,s=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:St(t,e),At(e),s&4&&(Kn(3,e,e.return),Ei(3,e),Kn(5,e,e.return));break;case 1:St(t,e),At(e),s&512&&($e||n===null||on(n,n.return)),s&64&&An&&(e=e.updateQueue,e!==null&&(s=e.callbacks,s!==null&&(n=e.shared.hiddenCallbacks,e.shared.hiddenCallbacks=n===null?s:n.concat(s))));break;case 26:var l=Kt;if(St(t,e),At(e),s&512&&($e||n===null||on(n,n.return)),s&4){var u=n!==null?n.memoizedState:null;if(s=e.memoizedState,n===null)if(s===null)if(e.stateNode===null){e:{s=e.type,n=e.memoizedProps,l=l.ownerDocument||l;t:switch(s){case"title":u=l.getElementsByTagName("title")[0],(!u||u[Jo]||u[nt]||u.namespaceURI==="http://www.w3.org/2000/svg"||u.hasAttribute("itemprop"))&&(u=l.createElement(s),l.head.insertBefore(u,l.querySelector("head > title"))),st(u,s,n),u[nt]=e,et(u),s=u;break e;case"link":var m=gf("link","href",l).get(s+(n.href||""));if(m){for(var y=0;y<m.length;y++)if(u=m[y],u.getAttribute("href")===(n.href==null||n.href===""?null:n.href)&&u.getAttribute("rel")===(n.rel==null?null:n.rel)&&u.getAttribute("title")===(n.title==null?null:n.title)&&u.getAttribute("crossorigin")===(n.crossOrigin==null?null:n.crossOrigin)){m.splice(y,1);break t}}u=l.createElement(s),st(u,s,n),l.head.appendChild(u);break;case"meta":if(m=gf("meta","content",l).get(s+(n.content||""))){for(y=0;y<m.length;y++)if(u=m[y],u.getAttribute("content")===(n.content==null?null:""+n.content)&&u.getAttribute("name")===(n.name==null?null:n.name)&&u.getAttribute("property")===(n.property==null?null:n.property)&&u.getAttribute("http-equiv")===(n.httpEquiv==null?null:n.httpEquiv)&&u.getAttribute("charset")===(n.charSet==null?null:n.charSet)){m.splice(y,1);break t}}u=l.createElement(s),st(u,s,n),l.head.appendChild(u);break;default:throw Error(r(468,s))}u[nt]=e,et(u),s=u}e.stateNode=s}else yf(l,e.type,e.stateNode);else e.stateNode=ff(l,s,e.memoizedProps);else u!==s?(u===null?n.stateNode!==null&&(n=n.stateNode,n.parentNode.removeChild(n)):u.count--,s===null?yf(l,e.type,e.stateNode):ff(l,s,e.memoizedProps)):s===null&&e.stateNode!==null&&Pc(e,e.memoizedProps,n.memoizedProps)}break;case 27:St(t,e),At(e),s&512&&($e||n===null||on(n,n.return)),n!==null&&s&4&&Pc(e,e.memoizedProps,n.memoizedProps);break;case 5:if(St(t,e),At(e),s&512&&($e||n===null||on(n,n.return)),e.flags&32){l=e.stateNode;try{ao(l,"")}catch(Z){Ee(e,e.return,Z)}}s&4&&e.stateNode!=null&&(l=e.memoizedProps,Pc(e,l,n!==null?n.memoizedProps:l)),s&1024&&(Hc=!0);break;case 6:if(St(t,e),At(e),s&4){if(e.stateNode===null)throw Error(r(162));s=e.memoizedProps,n=e.stateNode;try{n.nodeValue=s}catch(Z){Ee(e,e.return,Z)}}break;case 3:if(mr=null,l=Kt,Kt=hr(t.containerInfo),St(t,e),Kt=l,At(e),s&4&&n!==null&&n.memoizedState.isDehydrated)try{Bo(t.containerInfo)}catch(Z){Ee(e,e.return,Z)}Hc&&(Hc=!1,gm(e));break;case 4:s=Kt,Kt=hr(e.stateNode.containerInfo),St(t,e),At(e),Kt=s;break;case 12:St(t,e),At(e);break;case 31:St(t,e),At(e),s&4&&(s=e.updateQueue,s!==null&&(e.updateQueue=null,Xs(e,s)));break;case 13:St(t,e),At(e),e.child.flags&8192&&e.memoizedState!==null!=(n!==null&&n.memoizedState!==null)&&(er=le()),s&4&&(s=e.updateQueue,s!==null&&(e.updateQueue=null,Xs(e,s)));break;case 22:l=e.memoizedState!==null;var k=n!==null&&n.memoizedState!==null,M=An,L=$e;if(An=M||l,$e=L||k,St(t,e),$e=L,An=M,At(e),s&8192)e:for(t=e.stateNode,t._visibility=l?t._visibility&-2:t._visibility|1,l&&(n===null||k||An||$e||La(e)),n=null,t=e;;){if(t.tag===5||t.tag===26){if(n===null){k=n=t;try{if(u=k.stateNode,l)m=u.style,typeof m.setProperty=="function"?m.setProperty("display","none","important"):m.display="none";else{y=k.stateNode;var P=k.memoizedProps.style,j=P!=null&&P.hasOwnProperty("display")?P.display:null;y.style.display=j==null||typeof j=="boolean"?"":(""+j).trim()}}catch(Z){Ee(k,k.return,Z)}}}else if(t.tag===6){if(n===null){k=t;try{k.stateNode.nodeValue=l?"":k.memoizedProps}catch(Z){Ee(k,k.return,Z)}}}else if(t.tag===18){if(n===null){k=t;try{var N=k.stateNode;l?sf(N,!0):sf(k.stateNode,!1)}catch(Z){Ee(k,k.return,Z)}}}else if((t.tag!==22&&t.tag!==23||t.memoizedState===null||t===e)&&t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break e;for(;t.sibling===null;){if(t.return===null||t.return===e)break e;n===t&&(n=null),t=t.return}n===t&&(n=null),t.sibling.return=t.return,t=t.sibling}s&4&&(s=e.updateQueue,s!==null&&(n=s.retryQueue,n!==null&&(s.retryQueue=null,Xs(e,n))));break;case 19:St(t,e),At(e),s&4&&(s=e.updateQueue,s!==null&&(e.updateQueue=null,Xs(e,s)));break;case 30:break;case 21:break;default:St(t,e),At(e)}}function At(e){var t=e.flags;if(t&2){try{for(var n,s=e.return;s!==null;){if(rm(s)){n=s;break}s=s.return}if(n==null)throw Error(r(160));switch(n.tag){case 27:var l=n.stateNode,u=qc(e);Ks(e,u,l);break;case 5:var m=n.stateNode;n.flags&32&&(ao(m,""),n.flags&=-33);var y=qc(e);Ks(e,y,m);break;case 3:case 4:var k=n.stateNode.containerInfo,M=qc(e);Uc(e,M,k);break;default:throw Error(r(161))}}catch(L){Ee(e,e.return,L)}e.flags&=-3}t&4096&&(e.flags&=-4097)}function gm(e){if(e.subtreeFlags&1024)for(e=e.child;e!==null;){var t=e;gm(t),t.tag===5&&t.flags&1024&&t.stateNode.reset(),e=e.sibling}}function xn(e,t){if(t.subtreeFlags&8772)for(t=t.child;t!==null;)um(e,t.alternate,t),t=t.sibling}function La(e){for(e=e.child;e!==null;){var t=e;switch(t.tag){case 0:case 11:case 14:case 15:Kn(4,t,t.return),La(t);break;case 1:on(t,t.return);var n=t.stateNode;typeof n.componentWillUnmount=="function"&&im(t,t.return,n),La(t);break;case 27:Bi(t.stateNode);case 26:case 5:on(t,t.return),La(t);break;case 22:t.memoizedState===null&&La(t);break;case 30:La(t);break;default:La(t)}e=e.sibling}}function En(e,t,n){for(n=n&&(t.subtreeFlags&8772)!==0,t=t.child;t!==null;){var s=t.alternate,l=e,u=t,m=u.flags;switch(u.tag){case 0:case 11:case 15:En(l,u,n),Ei(4,u);break;case 1:if(En(l,u,n),s=u,l=s.stateNode,typeof l.componentDidMount=="function")try{l.componentDidMount()}catch(M){Ee(s,s.return,M)}if(s=u,l=s.updateQueue,l!==null){var y=s.stateNode;try{var k=l.shared.hiddenCallbacks;if(k!==null)for(l.shared.hiddenCallbacks=null,l=0;l<k.length;l++)Qh(k[l],y)}catch(M){Ee(s,s.return,M)}}n&&m&64&&om(u),Ti(u,u.return);break;case 27:lm(u);case 26:case 5:En(l,u,n),n&&s===null&&m&4&&sm(u),Ti(u,u.return);break;case 12:En(l,u,n);break;case 31:En(l,u,n),n&&m&4&&pm(l,u);break;case 13:En(l,u,n),n&&m&4&&mm(l,u);break;case 22:u.memoizedState===null&&En(l,u,n),Ti(u,u.return);break;case 30:break;default:En(l,u,n)}t=t.sibling}}function Yc(e,t){var n=null;e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),e=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(e=t.memoizedState.cachePool.pool),e!==n&&(e!=null&&e.refCount++,n!=null&&hi(n))}function Ic(e,t){e=null,t.alternate!==null&&(e=t.alternate.memoizedState.cache),t=t.memoizedState.cache,t!==e&&(t.refCount++,e!=null&&hi(e))}function Xt(e,t,n,s){if(t.subtreeFlags&10256)for(t=t.child;t!==null;)ym(e,t,n,s),t=t.sibling}function ym(e,t,n,s){var l=t.flags;switch(t.tag){case 0:case 11:case 15:Xt(e,t,n,s),l&2048&&Ei(9,t);break;case 1:Xt(e,t,n,s);break;case 3:Xt(e,t,n,s),l&2048&&(e=null,t.alternate!==null&&(e=t.alternate.memoizedState.cache),t=t.memoizedState.cache,t!==e&&(t.refCount++,e!=null&&hi(e)));break;case 12:if(l&2048){Xt(e,t,n,s),e=t.stateNode;try{var u=t.memoizedProps,m=u.id,y=u.onPostCommit;typeof y=="function"&&y(m,t.alternate===null?"mount":"update",e.passiveEffectDuration,-0)}catch(k){Ee(t,t.return,k)}}else Xt(e,t,n,s);break;case 31:Xt(e,t,n,s);break;case 13:Xt(e,t,n,s);break;case 23:break;case 22:u=t.stateNode,m=t.alternate,t.memoizedState!==null?u._visibility&2?Xt(e,t,n,s):Ci(e,t):u._visibility&2?Xt(e,t,n,s):(u._visibility|=2,xo(e,t,n,s,(t.subtreeFlags&10256)!==0||!1)),l&2048&&Yc(m,t);break;case 24:Xt(e,t,n,s),l&2048&&Ic(t.alternate,t);break;default:Xt(e,t,n,s)}}function xo(e,t,n,s,l){for(l=l&&((t.subtreeFlags&10256)!==0||!1),t=t.child;t!==null;){var u=e,m=t,y=n,k=s,M=m.flags;switch(m.tag){case 0:case 11:case 15:xo(u,m,y,k,l),Ei(8,m);break;case 23:break;case 22:var L=m.stateNode;m.memoizedState!==null?L._visibility&2?xo(u,m,y,k,l):Ci(u,m):(L._visibility|=2,xo(u,m,y,k,l)),l&&M&2048&&Yc(m.alternate,m);break;case 24:xo(u,m,y,k,l),l&&M&2048&&Ic(m.alternate,m);break;default:xo(u,m,y,k,l)}t=t.sibling}}function Ci(e,t){if(t.subtreeFlags&10256)for(t=t.child;t!==null;){var n=e,s=t,l=s.flags;switch(s.tag){case 22:Ci(n,s),l&2048&&Yc(s.alternate,s);break;case 24:Ci(n,s),l&2048&&Ic(s.alternate,s);break;default:Ci(n,s)}t=t.sibling}}var _i=8192;function Eo(e,t,n){if(e.subtreeFlags&_i)for(e=e.child;e!==null;)wm(e,t,n),e=e.sibling}function wm(e,t,n){switch(e.tag){case 26:Eo(e,t,n),e.flags&_i&&e.memoizedState!==null&&av(n,Kt,e.memoizedState,e.memoizedProps);break;case 5:Eo(e,t,n);break;case 3:case 4:var s=Kt;Kt=hr(e.stateNode.containerInfo),Eo(e,t,n),Kt=s;break;case 22:e.memoizedState===null&&(s=e.alternate,s!==null&&s.memoizedState!==null?(s=_i,_i=16777216,Eo(e,t,n),_i=s):Eo(e,t,n));break;default:Eo(e,t,n)}}function bm(e){var t=e.alternate;if(t!==null&&(e=t.child,e!==null)){t.child=null;do t=e.sibling,e.sibling=null,e=t;while(e!==null)}}function Ri(e){var t=e.deletions;if((e.flags&16)!==0){if(t!==null)for(var n=0;n<t.length;n++){var s=t[n];tt=s,Sm(s,e)}bm(e)}if(e.subtreeFlags&10256)for(e=e.child;e!==null;)vm(e),e=e.sibling}function vm(e){switch(e.tag){case 0:case 11:case 15:Ri(e),e.flags&2048&&Kn(9,e,e.return);break;case 3:Ri(e);break;case 12:Ri(e);break;case 22:var t=e.stateNode;e.memoizedState!==null&&t._visibility&2&&(e.return===null||e.return.tag!==13)?(t._visibility&=-3,Js(e)):Ri(e);break;default:Ri(e)}}function Js(e){var t=e.deletions;if((e.flags&16)!==0){if(t!==null)for(var n=0;n<t.length;n++){var s=t[n];tt=s,Sm(s,e)}bm(e)}for(e=e.child;e!==null;){switch(t=e,t.tag){case 0:case 11:case 15:Kn(8,t,t.return),Js(t);break;case 22:n=t.stateNode,n._visibility&2&&(n._visibility&=-3,Js(t));break;default:Js(t)}e=e.sibling}}function Sm(e,t){for(;tt!==null;){var n=tt;switch(n.tag){case 0:case 11:case 15:Kn(8,n,t);break;case 23:case 22:if(n.memoizedState!==null&&n.memoizedState.cachePool!==null){var s=n.memoizedState.cachePool.pool;s!=null&&s.refCount++}break;case 24:hi(n.memoizedState.cache)}if(s=n.child,s!==null)s.return=n,tt=s;else e:for(n=e;tt!==null;){s=tt;var l=s.sibling,u=s.return;if(dm(s),s===n){tt=null;break e}if(l!==null){l.return=u,tt=l;break e}tt=u}}}var wb={getCacheForType:function(e){var t=ot(Ge),n=t.data.get(e);return n===void 0&&(n=e(),t.data.set(e,n)),n},cacheSignal:function(){return ot(Ge).controller.signal}},bb=typeof WeakMap=="function"?WeakMap:Map,Se=0,ze=null,de=null,pe=0,xe=0,Ot=null,Xn=!1,To=!1,Wc=!1,Tn=0,Ye=0,Jn=0,Da=0,Fc=0,Nt=0,Co=0,zi=null,kt=null,Gc=!1,er=0,Am=0,tr=1/0,nr=null,ea=null,Ke=0,ta=null,_o=null,Cn=0,Qc=0,Vc=null,km=null,Mi=0,$c=null;function Bt(){return(Se&2)!==0&&pe!==0?pe&-pe:B.T!==null?tu():qd()}function xm(){if(Nt===0)if((pe&536870912)===0||fe){var e=us;us<<=1,(us&3932160)===0&&(us=262144),Nt=e}else Nt=536870912;return e=Mt.current,e!==null&&(e.flags|=32),Nt}function xt(e,t,n){(e===ze&&(xe===2||xe===9)||e.cancelPendingCommit!==null)&&(Ro(e,0),na(e,pe,Nt,!1)),Xo(e,n),((Se&2)===0||e!==ze)&&(e===ze&&((Se&2)===0&&(Da|=n),Ye===4&&na(e,pe,Nt,!1)),sn(e))}function Em(e,t,n){if((Se&6)!==0)throw Error(r(327));var s=!n&&(t&127)===0&&(t&e.expiredLanes)===0||Ko(e,t),l=s?Ab(e,t):Kc(e,t,!0),u=s;do{if(l===0){To&&!s&&na(e,t,0,!1);break}else{if(n=e.current.alternate,u&&!vb(n)){l=Kc(e,t,!1),u=!1;continue}if(l===2){if(u=t,e.errorRecoveryDisabledLanes&u)var m=0;else m=e.pendingLanes&-536870913,m=m!==0?m:m&536870912?536870912:0;if(m!==0){t=m;e:{var y=e;l=zi;var k=y.current.memoizedState.isDehydrated;if(k&&(Ro(y,m).flags|=256),m=Kc(y,m,!1),m!==2){if(Wc&&!k){y.errorRecoveryDisabledLanes|=u,Da|=u,l=4;break e}u=kt,kt=l,u!==null&&(kt===null?kt=u:kt.push.apply(kt,u))}l=m}if(u=!1,l!==2)continue}}if(l===1){Ro(e,0),na(e,t,0,!0);break}e:{switch(s=e,u=l,u){case 0:case 1:throw Error(r(345));case 4:if((t&4194048)!==t)break;case 6:na(s,t,Nt,!Xn);break e;case 2:kt=null;break;case 3:case 5:break;default:throw Error(r(329))}if((t&62914560)===t&&(l=er+300-le(),10<l)){if(na(s,t,Nt,!Xn),hs(s,0,!0)!==0)break e;Cn=t,s.timeoutHandle=nf(Tm.bind(null,s,n,kt,nr,Gc,t,Nt,Da,Co,Xn,u,"Throttled",-0,0),l);break e}Tm(s,n,kt,nr,Gc,t,Nt,Da,Co,Xn,u,null,-0,0)}}break}while(!0);sn(e)}function Tm(e,t,n,s,l,u,m,y,k,M,L,P,j,N){if(e.timeoutHandle=-1,P=t.subtreeFlags,P&8192||(P&16785408)===16785408){P={stylesheets:null,count:0,imgCount:0,imgBytes:0,suspenseyImages:[],waitingForImages:!0,waitingForViewTransition:!1,unsuspend:hn},wm(t,u,P);var Z=(u&62914560)===u?er-le():(u&4194048)===u?Am-le():0;if(Z=ov(P,Z),Z!==null){Cn=u,e.cancelPendingCommit=Z(Nm.bind(null,e,t,u,n,s,l,m,y,k,L,P,null,j,N)),na(e,u,m,!M);return}}Nm(e,t,u,n,s,l,m,y,k)}function vb(e){for(var t=e;;){var n=t.tag;if((n===0||n===11||n===15)&&t.flags&16384&&(n=t.updateQueue,n!==null&&(n=n.stores,n!==null)))for(var s=0;s<n.length;s++){var l=n[s],u=l.getSnapshot;l=l.value;
vendor: 4,123 bytes, line 9
9try{if(!Rt(u(),l))return!1}catch{return!1}}if(n=t.child,t.subtreeFlags&16384&&n!==null)n.return=t,t=n;else{if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function na(e,t,n,s){t&=~Fc,t&=~Da,e.suspendedLanes|=t,e.pingedLanes&=~t,s&&(e.warmLanes|=t),s=e.expirationTimes;for(var l=t;0<l;){var u=31-_t(l),m=1<<u;s[u]=-1,l&=~m}n!==0&&Ld(e,n,t)}function ar(){return(Se&6)===0?(ji(0),!1):!0}function Zc(){if(de!==null){if(xe===0)var e=de.return;else e=de,gn=_a=null,hc(e),bo=null,mi=0,e=de;for(;e!==null;)am(e.alternate,e),e=e.return;de=null}}function Ro(e,t){var n=e.timeoutHandle;n!==-1&&(e.timeoutHandle=-1,Ub(n)),n=e.cancelPendingCommit,n!==null&&(e.cancelPendingCommit=null,n()),Cn=0,Zc(),ze=e,de=n=mn(e.current,null),pe=t,xe=0,Ot=null,Xn=!1,To=Ko(e,t),Wc=!1,Co=Nt=Fc=Da=Jn=Ye=0,kt=zi=null,Gc=!1,(t&8)!==0&&(t|=t&32);var s=e.entangledLanes;if(s!==0)for(e=e.entanglements,s&=t;0<s;){var l=31-_t(s),u=1<<l;t|=e[l],s&=~u}return Tn=t,xs(),n}function Cm(e,t){re=null,B.H=Ai,t===wo||t===js?(t=Ih(),xe=3):t===ec?(t=Ih(),xe=4):xe=t===_c?8:t!==null&&typeof t=="object"&&typeof t.then=="function"?6:1,Ot=t,de===null&&(Ye=1,Gs(e,Ut(t,e.current)))}function _m(){var e=Mt.current;return e===null?!0:(pe&4194048)===pe?Wt===null:(pe&62914560)===pe||(pe&536870912)!==0?e===Wt:!1}function Rm(){var e=B.H;return B.H=Ai,e===null?Ai:e}function zm(){var e=B.A;return B.A=wb,e}function or(){Ye=4,Xn||(pe&4194048)!==pe&&Mt.current!==null||(To=!0),(Jn&134217727)===0&&(Da&134217727)===0||ze===null||na(ze,pe,Nt,!1)}function Kc(e,t,n){var s=Se;Se|=2;var l=Rm(),u=zm();(ze!==e||pe!==t)&&(nr=null,Ro(e,t)),t=!1;var m=Ye;e:do try{if(xe!==0&&de!==null){var y=de,k=Ot;switch(xe){case 8:Zc(),m=6;break e;case 3:case 2:case 9:case 6:Mt.current===null&&(t=!0);var M=xe;if(xe=0,Ot=null,zo(e,y,k,M),n&&To){m=0;break e}break;default:M=xe,xe=0,Ot=null,zo(e,y,k,M)}}Sb(),m=Ye;break}catch(L){Cm(e,L)}while(!0);return t&&e.shellSuspendCounter++,gn=_a=null,Se=s,B.H=l,B.A=u,de===null&&(ze=null,pe=0,xs()),m}function Sb(){for(;de!==null;)Mm(de)}function Ab(e,t){var n=Se;Se|=2;var s=Rm(),l=zm();ze!==e||pe!==t?(nr=null,tr=le()+500,Ro(e,t)):To=Ko(e,t);e:do try{if(xe!==0&&de!==null){t=de;var u=Ot;t:switch(xe){case 1:xe=0,Ot=null,zo(e,t,u,1);break;case 2:case 9:if(Hh(u)){xe=0,Ot=null,jm(t);break}t=function(){xe!==2&&xe!==9||ze!==e||(xe=7),sn(e)},u.then(t,t);break e;case 3:xe=7;break e;case 4:xe=5;break e;case 7:Hh(u)?(xe=0,Ot=null,jm(t)):(xe=0,Ot=null,zo(e,t,u,7));break;case 5:var m=null;switch(de.tag){case 26:m=de.memoizedState;case 5:case 27:var y=de;if(m?wf(m):y.stateNode.complete){xe=0,Ot=null;var k=y.sibling;if(k!==null)de=k;else{var M=y.return;M!==null?(de=M,ir(M)):de=null}break t}}xe=0,Ot=null,zo(e,t,u,5);break;case 6:xe=0,Ot=null,zo(e,t,u,6);break;case 8:Zc(),Ye=6;break e;default:throw Error(r(462))}}kb();break}catch(L){Cm(e,L)}while(!0);return gn=_a=null,B.H=s,B.A=l,Se=n,de!==null?0:(ze=null,pe=0,xs(),Ye)}function kb(){for(;de!==null&&!ss();)Mm(de)}function Mm(e){var t=tm(e.alternate,e,Tn);e.memoizedProps=e.pendingProps,t===null?ir(e):de=t}function jm(e){var t=e,n=t.alternate;switch(t.tag){case 15:case 0:t=$p(n,t,t.pendingProps,t.type,void 0,pe);break;case 11:t=$p(n,t,t.pendingProps,t.type.render,t.ref,pe);break;case 5:hc(t);default:am(n,t),t=de=zh(t,Tn),t=tm(n,t,Tn)}e.memoizedProps=e.pendingProps,t===null?ir(e):de=t}function zo(e,t,n,s){gn=_a=null,hc(t),bo=null,mi=0;var l=t.return;try{if(db(e,l,t,n,pe)){Ye=1,Gs(e,Ut(n,e.current)),de=null;return}}catch(u){if(l!==null)throw de=l,u;Ye=1,Gs(e,Ut(n,e.current)),de=null;return}t.flags&32768?(fe||s===1?e=!0:To||(pe&536870912)!==0?e=!1:(Xn=e=!0,(s===2||s===9||s===3||s===6)&&(s=Mt.current,s!==null&&s.tag===13&&(s.flags|=16384))),Om(t,e)):ir(t)}function ir(e){var t=e;do{if((t.flags&32768)!==0){Om(t,Xn);return}e=t.return;var n=mb(t.alternate,t,Tn);if(n!==null){de=n;return}if(t=t.sibling,t!==null){de=t;return}de=t=e}while(t!==null);Ye===0&&(Ye=5)}function Om(e,t){do{var n=fb(e.alternate,e);if(n!==null){n.flags&=32767,de=n;return}if(n=e.return,n!==null&&(n.flags|=32768,n.subtreeFlags=0,n.deleti
vendor: 1,947 bytes, line 9
9ons=null),!t&&(e=e.sibling,e!==null)){de=e;return}de=e=n}while(e!==null);Ye=6,de=null}function Nm(e,t,n,s,l,u,m,y,k){e.cancelPendingCommit=null;do sr();while(Ke!==0);if((Se&6)!==0)throw Error(r(327));if(t!==null){if(t===e.current)throw Error(r(177));if(u=t.lanes|t.childLanes,u|=ql,nw(e,n,u,m,y,k),e===ze&&(de=ze=null,pe=0),_o=t,ta=e,Cn=n,Qc=u,Vc=l,km=s,(t.subtreeFlags&10256)!==0||(t.flags&10256)!==0?(e.callbackNode=null,e.callbackPriority=0,Cb(ls,function(){return qm(),null})):(e.callbackNode=null,e.callbackPriority=0),s=(t.flags&13878)!==0,(t.subtreeFlags&13878)!==0||s){s=B.T,B.T=null,l=Q.p,Q.p=2,m=Se,Se|=4;try{gb(e,t,n)}finally{Se=m,Q.p=l,B.T=s}}Ke=1,Bm(),Lm(),Dm()}}function Bm(){if(Ke===1){Ke=0;var e=ta,t=_o,n=(t.flags&13878)!==0;if((t.subtreeFlags&13878)!==0||n){n=B.T,B.T=null;var s=Q.p;Q.p=2;var l=Se;Se|=4;try{fm(t,e);var u=cu,m=Sh(e.containerInfo),y=u.focusedElem,k=u.selectionRange;if(m!==y&&y&&y.ownerDocument&&vh(y.ownerDocument.documentElement,y)){if(k!==null&&Nl(y)){var M=k.start,L=k.end;if(L===void 0&&(L=M),"selectionStart"in y)y.selectionStart=M,y.selectionEnd=Math.min(L,y.value.length);else{var P=y.ownerDocument||document,j=P&&P.defaultView||window;if(j.getSelection){var N=j.getSelection(),Z=y.textContent.length,ae=Math.min(k.start,Z),Re=k.end===void 0?ae:Math.min(k.end,Z);!N.extend&&ae>Re&&(m=Re,Re=ae,ae=m);var _=bh(y,ae),E=bh(y,Re);if(_&&E&&(N.rangeCount!==1||N.anchorNode!==_.node||N.anchorOffset!==_.offset||N.focusNode!==E.node||N.focusOffset!==E.offset)){var z=P.createRange();z.setStart(_.node,_.offset),N.removeAllRanges(),ae>Re?(N.addRange(z),N.extend(E.node,E.offset)):(z.setEnd(E.node,E.offset),N.addRange(z))}}}}for(P=[],N=y;N=N.parentNode;)N.nodeType===1&&P.push({element:N,left:N.scrollLeft,top:N.scrollTop});for(typeof y.focus=="function"&&y.focus(),y=0;y<P.length;y++){var D=P[y];D.element.scrollLeft=D.left,D.element.scrollTop=D.top}}wr=!!lu,cu=lu=null}finally{Se=l,Q.p=s,B.T=n}}e.current=t,Ke=2}}
vendor: 16,327 bytes, lines 9-10
9function Lm(){if(Ke===2){Ke=0;var e=ta,t=_o,n=(t.flags&8772)!==0;if((t.subtreeFlags&8772)!==0||n){n=B.T,B.T=null;var s=Q.p;Q.p=2;var l=Se;Se|=4;try{um(e,t.alternate,t)}finally{Se=l,Q.p=s,B.T=n}}Ke=3}}function Dm(){if(Ke===4||Ke===3){Ke=0,rs();var e=ta,t=_o,n=Cn,s=km;(t.subtreeFlags&10256)!==0||(t.flags&10256)!==0?Ke=5:(Ke=0,_o=ta=null,Pm(e,e.pendingLanes));var l=e.pendingLanes;if(l===0&&(ea=null),fl(n),t=t.stateNode,Ct&&typeof Ct.onCommitFiberRoot=="function")try{Ct.onCommitFiberRoot(Zo,t,void 0,(t.current.flags&128)===128)}catch{}if(s!==null){t=B.T,l=Q.p,Q.p=2,B.T=null;try{for(var u=e.onRecoverableError,m=0;m<s.length;m++){var y=s[m];u(y.value,{componentStack:y.stack})}}finally{B.T=t,Q.p=l}}(Cn&3)!==0&&sr(),sn(e),l=e.pendingLanes,(n&261930)!==0&&(l&42)!==0?e===$c?Mi++:(Mi=0,$c=e):Mi=0,ji(0)}}function Pm(e,t){(e.pooledCacheLanes&=t)===0&&(t=e.pooledCache,t!=null&&(e.pooledCache=null,hi(t)))}function sr(){return Bm(),Lm(),Dm(),qm()}function qm(){if(Ke!==5)return!1;var e=ta,t=Qc;Qc=0;var n=fl(Cn),s=B.T,l=Q.p;try{Q.p=32>n?32:n,B.T=null,n=Vc,Vc=null;var u=ta,m=Cn;if(Ke=0,_o=ta=null,Cn=0,(Se&6)!==0)throw Error(r(331));var y=Se;if(Se|=4,vm(u.current),ym(u,u.current,m,n),Se=y,ji(0,!1),Ct&&typeof Ct.onPostCommitFiberRoot=="function")try{Ct.onPostCommitFiberRoot(Zo,u)}catch{}return!0}finally{Q.p=l,B.T=s,Pm(e,t)}}function Um(e,t,n){t=Ut(n,t),t=Cc(e.stateNode,t,2),e=Vn(e,t,2),e!==null&&(Xo(e,2),sn(e))}function Ee(e,t,n){if(e.tag===3)Um(e,e,n);else for(;t!==null;){if(t.tag===3){Um(t,e,n);break}else if(t.tag===1){var s=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof s.componentDidCatch=="function"&&(ea===null||!ea.has(s))){e=Ut(n,e),n=Hp(2),s=Vn(t,n,2),s!==null&&(Yp(n,s,t,e),Xo(s,2),sn(s));break}}t=t.return}}function Xc(e,t,n){var s=e.pingCache;if(s===null){s=e.pingCache=new bb;var l=new Set;s.set(t,l)}else l=s.get(t),l===void 0&&(l=new Set,s.set(t,l));l.has(n)||(Wc=!0,l.add(n),e=xb.bind(null,e,t,n),t.then(e,e))}function xb(e,t,n){var s=e.pingCache;s!==null&&s.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,ze===e&&(pe&n)===n&&(Ye===4||Ye===3&&(pe&62914560)===pe&&300>le()-er?(Se&2)===0&&Ro(e,0):Fc|=n,Co===pe&&(Co=0)),sn(e)}function Hm(e,t){t===0&&(t=Bd()),e=Ea(e,t),e!==null&&(Xo(e,t),sn(e))}function Eb(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Hm(e,n)}function Tb(e,t){var n=0;switch(e.tag){case 31:case 13:var s=e.stateNode,l=e.memoizedState;l!==null&&(n=l.retryLane);break;case 19:s=e.stateNode;break;case 22:s=e.stateNode._retryCache;break;default:throw Error(r(314))}s!==null&&s.delete(t),Hm(e,n)}function Cb(e,t){return Dn(e,t)}var rr=null,Mo=null,Jc=!1,lr=!1,eu=!1,aa=0;function sn(e){e!==Mo&&e.next===null&&(Mo===null?rr=Mo=e:Mo=Mo.next=e),lr=!0,Jc||(Jc=!0,Rb())}function ji(e,t){if(!eu&&lr){eu=!0;do for(var n=!1,s=rr;s!==null;){if(e!==0){var l=s.pendingLanes;if(l===0)var u=0;else{var m=s.suspendedLanes,y=s.pingedLanes;u=(1<<31-_t(42|e)+1)-1,u&=l&~(m&~y),u=u&201326741?u&201326741|1:u?u|2:0}u!==0&&(n=!0,Fm(s,u))}else u=pe,u=hs(s,s===ze?u:0,s.cancelPendingCommit!==null||s.timeoutHandle!==-1),(u&3)===0||Ko(s,u)||(n=!0,Fm(s,u));s=s.next}while(n);eu=!1}}function _b(){Ym()}function Ym(){lr=Jc=!1;var e=0;aa!==0&&qb()&&(e=aa);for(var t=le(),n=null,s=rr;s!==null;){var l=s.next,u=Im(s,t);u===0?(s.next=null,n===null?rr=l:n.next=l,l===null&&(Mo=n)):(n=s,(e!==0||(u&3)!==0)&&(lr=!0)),s=l}Ke!==0&&Ke!==5||ji(e),aa!==0&&(aa=0)}function Im(e,t){for(var n=e.suspendedLanes,s=e.pingedLanes,l=e.expirationTimes,u=e.pendingLanes&-62914561;0<u;){var m=31-_t(u),y=1<<m,k=l[m];k===-1?((y&n)===0||(y&s)!==0)&&(l[m]=tw(y,t)):k<=t&&(e.expiredLanes|=y),u&=~y}if(t=ze,n=pe,n=hs(e,e===t?n:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),s=e.callbackNode,n===0||e===t&&(xe===2||xe===9)||e.cancelPendingCommit!==null)return s!==null&&s!==null&&Pn(s),e.callbackNode=null,e.callbackPriority=0;if((n&3)===0||Ko(e,n)){if(t=n&-n,t===e.callbackPriority)return t;switch(s!==null&&Pn(s),fl(n)){case 2:case 8:n=$o;break;case 32:n=ls;break;case 268435456:n=Nd;break;default:n=ls}return s=Wm.bind(null,e),n=Dn(n,s),e.callbackPriority=t,e.callbackNode=n,t}return s!==null&&s!==null&&Pn(s),e.callbackPriority=2,e.callbackNode=null,2}function Wm(e,t){if(Ke!==0&&Ke!==5)return e.callbackNode=null,e.callbackPriority=0,null;var n=e.callbackNode;if(sr()&&e.callbackNode!==n)return null;var s=pe;return s=hs(e,e===ze?s:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),s===0?null:(Em(e,s,t),Im(e,le()),e.callbackNode!=null&&e.callbackNode===n?Wm.bind(null,e):null)}function Fm(e,t){if(sr())return null;Em(e,t,!0)}function Rb(){Hb(function(){(Se&6)!==0?Dn(yt,_b):Ym()})}function tu(){if(aa===0){var e=go;e===0&&(e=cs,cs<<=1,(cs&261888)===0&&(cs=256)),aa=e}return aa}function Gm(e){return e==null||typeof e=="symbol"||typeof e=="boolean"?null:typeof e=="function"?e:gs(""+e)}function Qm(e,t){var n=t.ownerDocument.createElement("input");return n.name=t.name,n.value=t.value,e.id&&n.setAttribute("form",e.id),t.parentNode.insertBefore(n,t),e=new FormData(e),n.parentNode.removeChild(n),e}function zb(e,t,n,s,l){if(t==="submit"&&n&&n.stateNode===l){var u=Gm((l[wt]||null).action),m=s.submitter;m&&(t=(t=m[wt]||null)?Gm(t.formAction):m.getAttribute("formAction"),t!==null&&(u=t,m=null));var y=new vs("action","action",null,s,l);e.push({event:y,listeners:[{instance:null,listener:function(){if(s.defaultPrevented){if(aa!==0){var k=m?Qm(l,m):new FormData(l);Sc(n,{pending:!0,data:k,method:l.method,action:u},null,k)}}else typeof u=="function"&&(y.preventDefault(),k=m?Qm(l,m):new FormData(l),Sc(n,{pending:!0,data:k,method:l.method,action:u},u,k))},currentTarget:l}]})}}for(var nu=0;nu<Pl.length;nu++){var au=Pl[nu],Mb=au.toLowerCase(),jb=au[0].toUpperCase()+au.slice(1);Zt(Mb,"on"+jb)}Zt(xh,"onAnimationEnd"),Zt(Eh,"onAnimationIteration"),Zt(Th,"onAnimationStart"),Zt("dblclick","onDoubleClick"),Zt("focusin","onFocus"),Zt("focusout","onBlur"),Zt(Vw,"onTransitionRun"),Zt($w,"onTransitionStart"),Zt(Zw,"onTransitionCancel"),Zt(Ch,"onTransitionEnd"),to("onMouseEnter",["mouseout","mouseover"]),to("onMouseLeave",["mouseout","mouseover"]),to("onPointerEnter",["pointerout","pointerover"]),to("onPointerLeave",["pointerout","pointerover"]),Sa("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),Sa("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),Sa("onBeforeInput",["compositionend","keypress","textInput","paste"]),Sa("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),Sa("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),Sa("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Oi="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Ob=new Set("beforetoggle cancel close invalid load scroll scrollend toggle".split(" ").concat(Oi));function Vm(e,t){t=(t&4)!==0;for(var n=0;n<e.length;n++){var s=e[n],l=s.event;s=s.listeners;e:{var u=void 0;if(t)for(var m=s.length-1;0<=m;m--){var y=s[m],k=y.instance,M=y.currentTarget;if(y=y.listener,k!==u&&l.isPropagationStopped())break e;u=y,l.currentTarget=M;try{u(l)}catch(L){ks(L)}l.currentTarget=null,u=k}else for(m=0;m<s.length;m++){if(y=s[m],k=y.instance,M=y.currentTarget,y=y.listener,k!==u&&l.isPropagationStopped())break e;u=y,l.currentTarget=M;try{u(l)}catch(L){ks(L)}l.currentTarget=null,u=k}}}}function he(e,t){var n=t[gl];n===void 0&&(n=t[gl]=new Set);var s=e+"__bubble";n.has(s)||($m(t,e,2,!1),n.add(s))}function ou(e,t,n){var s=0;t&&(s|=4),$m(n,e,s,t)}var cr="_reactListening"+Math.random().toString(36).slice(2);function iu(e){if(!e[cr]){e[cr]=!0,Yd.forEach(function(n){n!=="selectionchange"&&(Ob.has(n)||ou(n,!1,e),ou(n,!0,e))});var t=e.nodeType===9?e:e.ownerDocument;t===null||t[cr]||(t[cr]=!0,ou("selectionchange",!1,t))}}function $m(e,t,n,s){switch(Ef(t)){case 2:var l=rv;break;case 8:l=lv;break;default:l=vu}n=l.bind(null,t,n,e),l=void 0,!El||t!=="touchstart"&&t!=="touchmove"&&t!=="wheel"||(l=!0),s?l!==void 0?e.addEventListener(t,n,{capture:!0,passive:l}):e.addEventListener(t,n,!0):l!==void 0?e.addEventListener(t,n,{passive:l}):e.addEventListener(t,n,!1)}function su(e,t,n,s,l){var u=s;if((t&1)===0&&(t&2)===0&&s!==null)e:for(;;){if(s===null)return;var m=s.tag;if(m===3||m===4){var y=s.stateNode.containerInfo;if(y===l)break;if(m===4)for(m=s.return;m!==null;){var k=m.tag;if((k===3||k===4)&&m.stateNode.containerInfo===l)return;m=m.return}for(;y!==null;){if(m=Xa(y),m===null)return;if(k=m.tag,k===5||k===6||k===26||k===27){s=u=m;continue e}y=y.parentNode}}s=s.return}eh(function(){var M=u,L=kl(n),P=[];e:{var j=_h.get(e);if(j!==void 0){var N=vs,Z=e;switch(e){case"keypress":if(ws(n)===0)break e;case"keydown":case"keyup":N=Tw;break;case"focusin":Z="focus",N=Rl;break;case"focusout":Z="blur",N=Rl;break;case"beforeblur":case"afterblur":N=Rl;break;case"click":if(n.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":N=ah;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":N=mw;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":N=Rw;break;case xh:case Eh:case Th:N=yw;break;case Ch:N=Mw;break;case"scroll":case"scrollend":N=hw;break;case"wheel":N=Ow;break;case"copy":case"cut":case"paste":N=bw;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":N=ih;break;case"toggle":case"beforetoggle":N=Bw}var ae=(t&4)!==0,Re=!ae&&(e==="scroll"||e==="scrollend"),_=ae?j!==null?j+"Capture":null:j;ae=[];for(var E=M,z;E!==null;){var D=E;if(z=D.stateNode,D=D.tag,D!==5&&D!==26&&D!==27||z===null||_===null||(D=ti(E,_),D!=null&&ae.push(Ni(E,D,z))),Re)break;E=E.return}0<ae.length&&(j=new N(j,Z,null,n,L),P.push({event:j,listeners:ae}))}}if((t&7)===0){e:{if(j=e==="mouseover"||e==="pointerover",N=e==="mouseout"||e==="pointerout",j&&n!==Al&&(Z=n.relatedTarget||n.fromElement)&&(Xa(Z)||Z[Ka]))break e;if((N||j)&&(j=L.window===L?L:(j=L.ownerDocument)?j.defaultView||j.parentWindow:window,N?(Z=n.relatedTarget||n.toElement,N=M,Z=Z?Xa(Z):null,Z!==null&&(Re=d(Z),ae=Z.tag,Z!==Re||ae!==5&&ae!==27&&ae!==6)&&(Z=null)):(N=null,Z=M),N!==Z)){if(ae=ah,D="onMouseLeave",_="onMouseEnter",E="mouse",(e==="pointerout"||e==="pointerover")&&(ae=ih,D="onPointerLeave",_="onPointerEnter",E="pointer"),Re=N==null?j:ei(N),z=Z==null?j:ei(Z),j=new ae(D,E+"leave",N,n,L),j.target=Re,j.relatedTarget=z,D=null,Xa(L)===M&&(ae=new ae(_,E+"enter",Z,n,L),ae.target=z,ae.relatedTarget=Re,D=ae),Re=D,N&&Z)t:{for(ae=Nb,_=N,E=Z,z=0,D=_;D;D=ae(D))z++;D=0;for(var X=E;X;X=ae(X))D++;for(;0<z-D;)_=ae(_),z--;for(;0<D-z;)E=ae(E),D--;for(;z--;){if(_===E||E!==null&&_===E.alternate){ae=_;break t}_=ae(_),E=ae(E)}ae=null}else ae=null;N!==null&&Zm(P,j,N,ae,!1),Z!==null&&Re!==null&&Zm(P,Re,Z,ae,!0)}}e:{if(j=M?ei(M):window,N=j.nodeName&&j.nodeName.toLowerCase(),N==="select"||N==="input"&&j.type==="file")var we=ph;else if(dh(j))if(mh)we=Fw;else{we=Iw;var K=Yw}else N=j.nodeName,!N||N.toLowerCase()!=="input"||j.type!=="checkbox"&&j.type!=="radio"?M&&Sl(M.elementType)&&(we=ph):we=Ww;if(we&&(we=we(e,M))){hh(P,we,n,L);break e}K&&K(e,j,M),e==="focusout"&&M&&j.type==="number"&&M.memoizedProps.value!=null&&vl(j,"number",j.value)}switch(K=M?ei(M):window,e){case"focusin":(dh(K)||K.contentEditable==="true")&&(ro=K,Bl=M,ci=null);break;case"focusout":ci=Bl=ro=null;break;case"mousedown":Ll=!0;break;case"contextmenu":case"mouseup":case"dragend":Ll=!1,Ah(P,n,L);break;case"selectionchange":if(Qw)break;case"keydown":case"keyup":Ah(P,n,L)}var ce;if(Ml)e:{switch(e){case"compositionstart":var me="onCompositionStart";break e;case"compositionend":me="onCompositionEnd";break e;case"compositionupdate":me="onCompositionUpdate";break e}me=void 0}else so?ch(e,n)&&(me="onCompositionEnd"):e==="keydown"&&n.keyCode===229&&(me="onCompositionStart");me&&(sh&&n.locale!=="ko"&&(so||me!=="onCompositionStart"?me==="onCompositionEnd"&&so&&(ce=th()):(Hn=L,Tl="value"in Hn?Hn.value:Hn.textContent,so=!0)),K=ur(M,me),0<K.length&&(me=new oh(me,e,null,n,L),P.push({event:me,listeners:K}),ce?me.data=ce:(ce=uh(n),ce!==null&&(me.data=ce)))),(ce=Dw?Pw(e,n):qw(e,n))&&(me=ur(M,"onBeforeInput"),0<me.length&&(K=new oh("onBeforeInput","beforeinput",null,n,L),P.push({event:K,listeners:me}),K.data=ce)),zb(P,e,M,n,L)}Vm(P,t)})}function Ni(e,t,n){return{instance:e,listener:t,currentTarget:n}}function ur(e,t){for(var n=t+"Capture",s=[];e!==null;){var l=e,u=l.stateNode;if(l=l.tag,l!==5&&l!==26&&l!==27||u===null||(l=ti(e,n),l!=null&&s.unshift(Ni(e,l,u)),l=ti(e,t),l!=null&&s.push(Ni(e,l,u))),e.tag===3)return s;e=e.return}return[]}function Nb(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5&&e.tag!==27);return e||null}function Zm(e,t,n,s,l){for(var u=t._reactName,m=[];n!==null&&n!==s;){var y=n,k=y.alternate,M=y.stateNode;if(y=y.tag,k!==null&&k===s)break;y!==5&&y!==26&&y!==27||M===null||(k=M,l?(M=ti(n,u),M!=null&&m.unshift(Ni(n,M,k))):l||(M=ti(n,u),M!=null&&m.push(Ni(n,M,k)))),n=n.return}m.length!==0&&e.push({event:t,listeners:m})}var Bb=/\r\n?/g,Lb=/\u0000|\uFFFD/g;function Km(e){return(typeof e=="string"?e:""+e).replace(Bb,`
10`).replace(Lb,"")}function Xm(e,t){return t=Km(t),Km(e)===t}function _e(e,t,n,s,l,u){switch(n){case"children":typeof s=="string"?t==="body"||t==="textarea"&&s===""||ao(e,s):(typeof s=="number"||typeof s=="bigint")&&t!=="body"&&ao(e,""+s);break;case"className":ms(e,"class",s);break;case"tabIndex":ms(e,"tabindex",s);break;case"dir":case"role":case"viewBox":case"width":case"height":ms(e,n,s);break;case"style":Xd(e,s,u);break;case"data":if(t!=="object"){ms(e,"data",s);break}case"src":case"href":if(s===""&&(t!=="a"||n!=="href")){e.removeAttribute(n);break}if(s==null||typeof s=="function"||typeof s=="symbol"||typeof s=="boolean"){e.removeAttribute(n);break}s=gs(""+s),e.setAttribute(n,s);break;case"action":case"formAction":if(typeof s=="function"){e.setAttribute(n,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}else typeof u=="function"&&(n==="formAction"?(t!=="input"&&_e(e,t,"name",l.name,l,null),_e(e,t,"formEncType",l.formEncType,l,null),_e(e,t,"formMethod",l.formMethod,l,null),_e(e,t,"formTarget",l.formTarget,l,null)):(_e(e,t,"encType",l.encType,l,null),_e(e,t,"method",l.method,l,null),_e(e,t,"target",l.target,l,null)));if(s==null||typeof s=="symbol"||typeof s=="boolean"){e.removeAttribute(n);break}s=gs(""+s),e.setAttribute(n,s);break;case"onClick":s!=null&&(e.onclick=hn);break;case"onScroll":s!=null&&he("scroll",e);break;case"onScrollEnd":s!=null&&he("scrollend",e);break;case"dangerouslySetInnerHTML":if(s!=null){if(typeof s!="object"||!("__html"in s))throw Error(r(61));if(n=s.__html,n!=null){if(l.children!=null)throw Error(r(60));e.innerHTML=n}}break;case"multiple":e.multiple=s&&typeof s!="function"&&typeof s!="symbol";break;case"muted":e.muted=s&&typeof s!="function"&&typeof s!="symbol";break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":break;case"autoFocus":break;case"xlinkHref":if(s==null||typeof s=="function"||typeof s=="boolean"||typeof s=="symbol"){e.removeAttribute("xlink:href");break}n=gs(""+s),e.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",n);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":s!=null&&typeof s!="function"&&typeof s!="symbol"?e.setAttribute(n,""+s):e.removeAttribute(n);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInl
10ine":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":s&&typeof s!="function"&&typeof s!="symbol"?e.setAttribute(n,""):e.removeAttribute(n);break;case"capture":case"download":s===!0?e.setAttribute(n,""):s!==!1&&s!=null&&typeof s!="function"&&typeof s!="symbol"?e.setAttribute(n,s):e.removeAttribute(n);break;case"cols":case"rows":case"size":case"span":s!=null&&typeof s!="function"&&typeof s!="symbol"&&!isNaN(s)&&1<=s?e.setAttribute(n,s):e.removeAttribute(n);break;case"rowSpan":case"start":s==null||typeof s=="function"||typeof s=="symbol"||isNaN(s)?e.removeAttribute(n):e.setAttribute(n,s);break;case"popover":he("beforetoggle",e),he("toggle",e),ps(e,"popover",s);break;case"xlinkActuate":dn(e,"http://www.w3.org/1999/xlink","xlink:actuate",s);break;case"xlinkArcrole":dn(e,"http://www.w3.org/1999/xlink","xlink:arcrole",s);break;case"xlinkRole":dn(e,"http://www.w3.org/1999/xlink","xlink:role",s);break;case"xlinkShow":dn(e,"http://www.w3.org/1999/xlink","xlink:show",s);break;case"xlinkTitle":dn(e,"http://www.w3.org/1999/xlink","xlink:title",s);break;case"xlinkType":dn(e,"http://www.w3.org/1999/xlink","xlink:type",s);break;case"xmlBase":dn(e,"http://www.w3.org/XML/1998/namespace","xml:base",s);break;case"xmlLang":dn(e,"http://www.w3.org/XML/1998/namespace","xml:lang",s);break;case"xmlSpace":dn(e,"http://www.w3.org/XML/1998/namespace","xml:space",s);break;case"is":ps(e,"is",s);break;case"innerText":case"textContent":break;default:(!(2<n.length)||n[0]!=="o"&&n[0]!=="O"||n[1]!=="n"&&n[1]!=="N")&&(n=uw.get(n)||n,ps(e,n,s))}}function ru(e,t,n,s,l,u){switch(n){case"style":Xd(e,s,u);break;case"dangerouslySetInnerHTML":if(s!=null){if(typeof s!="object"||!("__html"in s))throw Error(r(61));if(n=s.__html,n!=null){if(l.children!=null)throw Error(r(60));e.innerHTML=n}}break;case"children":typeof s=="string"?ao(e,s):(typeof s=="number"||typeof s=="bigint")&&ao(e,""+s);break;case"onScroll":s!=null&&he("scroll",e);break;case"onScrollEnd":s!=null&&he("scrollend",e);break;case"onClick":s!=null&&(e.onclick=hn);break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"innerHTML":case"ref":break;case"innerText":case"textContent":break;default:if(!Id.hasOwnProperty(n))e:{if(n[0]==="o"&&n[1]==="n"&&(l=n.endsWith("Capture"),t=n.slice(2,l?n.length-7:void 0),u=e[wt]||null,u=u!=null?u[n]:null,typeof u=="function"&&e.removeEventListener(t,u,l),typeof s=="function")){typeof u!="function"&&u!==null&&(n in e?e[n]=null:e.hasAttribute(n)&&e.removeAttribute(n)),e.addEventListener(t,s,l);break e}n in e?e[n]=s:s===!0?e.setAttribute(n,""):ps(e,n,s)}}}function st(e,t,n){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"img":he("error",e),he("load",e);var s=!1,l=!1,u;for(u in n)if(n.hasOwnProperty(u)){var m=n[u];if(m!=null)switch(u){case"src":s=!0;break;case"srcSet":l=!0;break;case"children":case"dangerouslySetInnerHTML":throw Error(r(137,t));default:_e(e,t,u,m,n,null)}}l&&_e(e,t,"srcSet",n.srcSet,n,null),s&&_e(e,t,"src",n.src,n,null);return;case"input":he("invalid",e);var y=u=m=l=null,k=null,M=null;for(s in n)if(n.hasOwnProperty(s)){var L=n[s];if(L!=null)switch(s){case"name":l=L;break;case"type":m=L;break;case"checked":k=L;break;case"defaultChecked":M=L;break;case"value":u=L;break;case"defaultValue":y=L;break;case"children":case"dangerouslySetInnerHTML":if(L!=null)throw Error(r(137,t));break;default:_e(e,t,s,L,n,null)}}Vd(e,u,y,k,M,m,l,!1);return;case"select":he("invalid",e),s=m=u=null;for(l in n)if(n.hasOwnProperty(l)&&(y=n[l],y!=null))switch(l){case"value":u=y;break;case"defaultValue":m=y;break;case"multiple":s=y;default:_e(e,t,l,y,n,null)}t=u,n=m,e.multiple=!!s,t!=null?no(e,!!s,t,!1):n!=null&&no(e,!!s,n,!0);return;case"textarea":he("invalid",e),u=l=s=null;for(m in n)if(n.hasOwnProperty(m)&&(y=n[m],y!=null))switch(m){case"value":s=y;break;case"defaultValue":l=y;break;case"children":u=y;break;case"dangerouslySetInnerHTML":if(y!=null)throw Error(r(91));break;default:_e(e,t,m,y,n,null)}Zd(e,s,l,u);return;case"option":for(k in n)n.hasOwnProperty(k)&&(s=n[k],s!=null)&&(k==="selected"?e.selected=s&&typeof s!="function"&&typeof s!="symbol":_e(e,t,k,s,n,null));return;case"dialog":he("beforetoggle",e),he("toggle",e),he("cancel",e),he("close",e);break;case"iframe":case"object":he("load",e);break;case"video":case"audio":for(s=0;s<Oi.length;s++)he(Oi[s],e);break;case"image":he("error",e),he("load",e);break;case"details":he("toggle",e);break;case"embed":case"source":case"link":he("error",e),he("load",e);case"area":case"base":case"br":case"col":case"hr":case"keygen":case"meta":case"param":case"track":case"wbr":case"menuitem":for(M in n)if(n.hasOwnProperty(M)&&(s=n[M],s!=null))switch(M){case"children":case"dangerouslySetInnerHTML":throw Error(r(137,t));default:_e(e,t,M,s,n,null)}return;default:if(Sl(t)){for(L in n)n.hasOwnProperty(L)&&(s=n[L],s!==void 0&&ru(e,t,L,s,n,void 0));return}}for(y in n)n.hasOwnProperty(y)&&(s=n[y],s!=null&&_e(e,t,y,s,n,null))}function Db(e,t,n,s){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"input":var l=null,u=null,m=null,y=null,k=null,M=null,L=null;for(N in n){var P=n[N];if(n.hasOwnProperty(N)&&P!=null)switch(N){case"checked":break;case"value":break;case"defaultValue":k=P;default:s.hasOwnProperty(N)||_e(e,t,N,null,s,P)}}for(var j in s){var N=s[j];if(P=n[j],s.hasOwnProperty(j)&&(N!=null||P!=null))switch(j){case"type":u=N;break;case"name":l=N;break;case"checked":M=N;break;case"defaultChecked":L=N;break;case"value":m=N;break;case"defaultValue":y=N;break;case"children":case"dangerouslySetInnerHTML":if(N!=null)throw Error(r(137,t));break;default:N!==P&&_e(e,t,j,N,s,P)}}bl(e,m,y,k,M,L,u,l);return;case"select":N=m=y=j=null;for(u in n)if(k=n[u],n.hasOwnProperty(u)&&k!=null)switch(u){case"value":break;case"multiple":N=k;default:s.hasOwnProperty(u)||_e(e,t,u,null,s,k)}for(l in s)if(u=s[l],k=n[l],s.hasOwnProperty(l)&&(u!=null||k!=null))switch(l){case"value":j=u;break;case"defaultValue":y=u;break;case"multiple":m=u;default:u!==k&&_e(e,t,l,u,s,k)}t=y,n=m,s=N,j!=null?no(e,!!n,j,!1):!!s!=!!n&&(t!=null?no(e,!!n,t,!0):no(e,!!n,n?[]:"",!1));return;case"textarea":N=j=null;
vendor: 4,650 bytes, line 10
10for(y in n)if(l=n[y],n.hasOwnProperty(y)&&l!=null&&!s.hasOwnProperty(y))switch(y){case"value":break;case"children":break;default:_e(e,t,y,null,s,l)}for(m in s)if(l=s[m],u=n[m],s.hasOwnProperty(m)&&(l!=null||u!=null))switch(m){case"value":j=l;break;case"defaultValue":N=l;break;case"children":break;case"dangerouslySetInnerHTML":if(l!=null)throw Error(r(91));break;default:l!==u&&_e(e,t,m,l,s,u)}$d(e,j,N);return;case"option":for(var Z in n)j=n[Z],n.hasOwnProperty(Z)&&j!=null&&!s.hasOwnProperty(Z)&&(Z==="selected"?e.selected=!1:_e(e,t,Z,null,s,j));for(k in s)j=s[k],N=n[k],s.hasOwnProperty(k)&&j!==N&&(j!=null||N!=null)&&(k==="selected"?e.selected=j&&typeof j!="function"&&typeof j!="symbol":_e(e,t,k,j,s,N));return;case"img":case"link":case"area":case"base":case"br":case"col":case"embed":case"hr":case"keygen":case"meta":case"param":case"source":case"track":case"wbr":case"menuitem":for(var ae in n)j=n[ae],n.hasOwnProperty(ae)&&j!=null&&!s.hasOwnProperty(ae)&&_e(e,t,ae,null,s,j);for(M in s)if(j=s[M],N=n[M],s.hasOwnProperty(M)&&j!==N&&(j!=null||N!=null))switch(M){case"children":case"dangerouslySetInnerHTML":if(j!=null)throw Error(r(137,t));break;default:_e(e,t,M,j,s,N)}return;default:if(Sl(t)){for(var Re in n)j=n[Re],n.hasOwnProperty(Re)&&j!==void 0&&!s.hasOwnProperty(Re)&&ru(e,t,Re,void 0,s,j);for(L in s)j=s[L],N=n[L],!s.hasOwnProperty(L)||j===N||j===void 0&&N===void 0||ru(e,t,L,j,s,N);return}}for(var _ in n)j=n[_],n.hasOwnProperty(_)&&j!=null&&!s.hasOwnProperty(_)&&_e(e,t,_,null,s,j);for(P in s)j=s[P],N=n[P],!s.hasOwnProperty(P)||j===N||j==null&&N==null||_e(e,t,P,j,s,N)}function Jm(e){switch(e){case"css":case"script":case"font":case"img":case"image":case"input":case"link":return!0;default:return!1}}function Pb(){if(typeof performance.getEntriesByType=="function"){for(var e=0,t=0,n=performance.getEntriesByType("resource"),s=0;s<n.length;s++){var l=n[s],u=l.transferSize,m=l.initiatorType,y=l.duration;if(u&&y&&Jm(m)){for(m=0,y=l.responseEnd,s+=1;s<n.length;s++){var k=n[s],M=k.startTime;if(M>y)break;var L=k.transferSize,P=k.initiatorType;L&&Jm(P)&&(k=k.responseEnd,m+=L*(k<y?1:(y-M)/(k-M)))}if(--s,t+=8*(u+m)/(l.duration/1e3),e++,10<e)break}}if(0<e)return t/e/1e6}return navigator.connection&&(e=navigator.connection.downlink,typeof e=="number")?e:5}var lu=null,cu=null;function dr(e){return e.nodeType===9?e:e.ownerDocument}function ef(e){switch(e){case"http://www.w3.org/2000/svg":return 1;case"http://www.w3.org/1998/Math/MathML":return 2;default:return 0}}function tf(e,t){if(e===0)switch(t){case"svg":return 1;case"math":return 2;default:return 0}return e===1&&t==="foreignObject"?0:e}function uu(e,t){return e==="textarea"||e==="noscript"||typeof t.children=="string"||typeof t.children=="number"||typeof t.children=="bigint"||typeof t.dangerouslySetInnerHTML=="object"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var du=null;function qb(){var e=window.event;return e&&e.type==="popstate"?e===du?!1:(du=e,!0):(du=null,!1)}var nf=typeof setTimeout=="function"?setTimeout:void 0,Ub=typeof clearTimeout=="function"?clearTimeout:void 0,af=typeof Promise=="function"?Promise:void 0,Hb=typeof queueMicrotask=="function"?queueMicrotask:typeof af<"u"?function(e){return af.resolve(null).then(e).catch(Yb)}:nf;function Yb(e){setTimeout(function(){throw e})}function oa(e){return e==="head"}function of(e,t){var n=t,s=0;do{var l=n.nextSibling;if(e.removeChild(n),l&&l.nodeType===8)if(n=l.data,n==="/$"||n==="/&"){if(s===0){e.removeChild(l),Bo(t);return}s--}else if(n==="$"||n==="$?"||n==="$~"||n==="$!"||n==="&")s++;else if(n==="html")Bi(e.ownerDocument.documentElement);else if(n==="head"){n=e.ownerDocument.head,Bi(n);for(var u=n.firstChild;u;){var m=u.nextSibling,y=u.nodeName;u[Jo]||y==="SCRIPT"||y==="STYLE"||y==="LINK"&&u.rel.toLowerCase()==="stylesheet"||n.removeChild(u),u=m}}else n==="body"&&Bi(e.ownerDocument.body);n=l}while(n);Bo(t)}function sf(e,t){var n=e;e=0;do{var s=n.nextSibling;if(n.nodeType===1?t?(n._stashedDisplay=n.style.display,n.style.display="none"):(n.style.display=n._stashedDisplay||"",n.getAttribute("style")===""&&n.removeAttribute("style")):n.nodeType===3&&(t?(n._stashedText=n.nodeValue,n.nodeValue=""):n.nodeValue=n._stashedText||""),s&&s.nodeType===8)if(n=s.data,n==="/$"){if(e===0)break;e--}else n!=="$"&&n!=="$?"&&n!=="$~"&&n!=="$!"||e++;n=s}while(n)}function hu(e){var t=e.firstChild;for(t&&t.nodeType===10&&(t=t.nextSibling);t;){var n=t;switch(t=t.nextSibling,n.nodeName){case"HTML":case"HEAD":case"BODY":hu(n),yl(n);continue;case"SCRIPT":case"STYLE":continue;case"LINK":if(n.rel.toLowerCase()==="stylesheet")continue}e.removeChild(n)}}function Ib(e,t,n,s){for(;
vendor: 10,788 bytes, line 10
10e.nodeType===1;){var l=n;if(e.nodeName.toLowerCase()!==t.toLowerCase()){if(!s&&(e.nodeName!=="INPUT"||e.type!=="hidden"))break}else if(s){if(!e[Jo])switch(t){case"meta":if(!e.hasAttribute("itemprop"))break;return e;case"link":if(u=e.getAttribute("rel"),u==="stylesheet"&&e.hasAttribute("data-precedence"))break;if(u!==l.rel||e.getAttribute("href")!==(l.href==null||l.href===""?null:l.href)||e.getAttribute("crossorigin")!==(l.crossOrigin==null?null:l.crossOrigin)||e.getAttribute("title")!==(l.title==null?null:l.title))break;return e;case"style":if(e.hasAttribute("data-precedence"))break;return e;case"script":if(u=e.getAttribute("src"),(u!==(l.src==null?null:l.src)||e.getAttribute("type")!==(l.type==null?null:l.type)||e.getAttribute("crossorigin")!==(l.crossOrigin==null?null:l.crossOrigin))&&u&&e.hasAttribute("async")&&!e.hasAttribute("itemprop"))break;return e;default:return e}}else if(t==="input"&&e.type==="hidden"){var u=l.name==null?null:""+l.name;if(l.type==="hidden"&&e.getAttribute("name")===u)return e}else return e;if(e=Ft(e.nextSibling),e===null)break}return null}function Wb(e,t,n){if(t==="")return null;for(;e.nodeType!==3;)if((e.nodeType!==1||e.nodeName!=="INPUT"||e.type!=="hidden")&&!n||(e=Ft(e.nextSibling),e===null))return null;return e}function rf(e,t){for(;e.nodeType!==8;)if((e.nodeType!==1||e.nodeName!=="INPUT"||e.type!=="hidden")&&!t||(e=Ft(e.nextSibling),e===null))return null;return e}function pu(e){return e.data==="$?"||e.data==="$~"}function mu(e){return e.data==="$!"||e.data==="$?"&&e.ownerDocument.readyState!=="loading"}function Fb(e,t){var n=e.ownerDocument;if(e.data==="$~")e._reactRetry=t;else if(e.data!=="$?"||n.readyState!=="loading")t();else{var s=function(){t(),n.removeEventListener("DOMContentLoaded",s)};n.addEventListener("DOMContentLoaded",s),e._reactRetry=s}}function Ft(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t==="$"||t==="$!"||t==="$?"||t==="$~"||t==="&"||t==="F!"||t==="F")break;if(t==="/$"||t==="/&")return null}}return e}var fu=null;function lf(e){e=e.nextSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="/$"||n==="/&"){if(t===0)return Ft(e.nextSibling);t--}else n!=="$"&&n!=="$!"&&n!=="$?"&&n!=="$~"&&n!=="&"||t++}e=e.nextSibling}return null}function cf(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="$"||n==="$!"||n==="$?"||n==="$~"||n==="&"){if(t===0)return e;t--}else n!=="/$"&&n!=="/&"||t++}e=e.previousSibling}return null}function uf(e,t,n){switch(t=dr(n),e){case"html":if(e=t.documentElement,!e)throw Error(r(452));return e;case"head":if(e=t.head,!e)throw Error(r(453));return e;case"body":if(e=t.body,!e)throw Error(r(454));return e;default:throw Error(r(451))}}function Bi(e){for(var t=e.attributes;t.length;)e.removeAttributeNode(t[0]);yl(e)}var Gt=new Map,df=new Set;function hr(e){return typeof e.getRootNode=="function"?e.getRootNode():e.nodeType===9?e:e.ownerDocument}var _n=Q.d;Q.d={f:Gb,r:Qb,D:Vb,C:$b,L:Zb,m:Kb,X:Jb,S:Xb,M:ev};function Gb(){var e=_n.f(),t=ar();return e||t}function Qb(e){var t=Ja(e);t!==null&&t.tag===5&&t.type==="form"?Cp(t):_n.r(e)}var jo=typeof document>"u"?null:document;function hf(e,t,n){var s=jo;if(s&&typeof t=="string"&&t){var l=Pt(t);l='link[rel="'+e+'"][href="'+l+'"]',typeof n=="string"&&(l+='[crossorigin="'+n+'"]'),df.has(l)||(df.add(l),e={rel:e,crossOrigin:n,href:t},s.querySelector(l)===null&&(t=s.createElement("link"),st(t,"link",e),et(t),s.head.appendChild(t)))}}function Vb(e){_n.D(e),hf("dns-prefetch",e,null)}function $b(e,t){_n.C(e,t),hf("preconnect",e,t)}function Zb(e,t,n){_n.L(e,t,n);var s=jo;if(s&&e&&t){var l='link[rel="preload"][as="'+Pt(t)+'"]';t==="image"&&n&&n.imageSrcSet?(l+='[imagesrcset="'+Pt(n.imageSrcSet)+'"]',typeof n.imageSizes=="string"&&(l+='[imagesizes="'+Pt(n.imageSizes)+'"]')):l+='[href="'+Pt(e)+'"]';var u=l;switch(t){case"style":u=Oo(e);break;case"script":u=No(e)}Gt.has(u)||(e=w({rel:"preload",href:t==="image"&&n&&n.imageSrcSet?void 0:e,as:t},n),Gt.set(u,e),s.querySelector(l)!==null||t==="style"&&s.querySelector(Li(u))||t==="script"&&s.querySelector(Di(u))||(t=s.createElement("link"),st(t,"link",e),et(t),s.head.appendChild(t)))}}function Kb(e,t){_n.m(e,t);var n=jo;if(n&&e){var s=t&&typeof t.as=="string"?t.as:"script",l='link[rel="modulepreload"][as="'+Pt(s)+'"][href="'+Pt(e)+'"]',u=l;switch(s){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":u=No(e)}if(!Gt.has(u)&&(e=w({rel:"modulepreload",href:e},t),Gt.set(u,e),n.querySelector(l)===null)){switch(s){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(n.querySelector(Di(u)))return}s=n.createElement("link"),st(s,"link",e),et(s),n.head.appendChild(s)}}}function Xb(e,t,n){_n.S(e,t,n);var s=jo;if(s&&e){var l=eo(s).hoistableStyles,u=Oo(e);t=t||"default";var m=l.get(u);if(!m){var y={loading:0,preload:null};if(m=s.querySelector(Li(u)))y.loading=5;else{e=w({rel:"stylesheet",href:e,"data-precedence":t},n),(n=Gt.get(u))&&gu(e,n);var k=m=s.createElement("link");et(k),st(k,"link",e),k._p=new Promise(function(M,L){k.onload=M,k.onerror=L}),k.addEventListener("load",function(){y.loading|=1}),k.addEventListener("error",function(){y.loading|=2}),y.loading|=4,pr(m,t,s)}m={type:"stylesheet",instance:m,count:1,state:y},l.set(u,m)}}}function Jb(e,t){_n.X(e,t);var n=jo;if(n&&e){var s=eo(n).hoistableScripts,l=No(e),u=s.get(l);u||(u=n.querySelector(Di(l)),u||(e=w({src:e,async:!0},t),(t=Gt.get(l))&&yu(e,t),u=n.createElement("script"),et(u),st(u,"link",e),n.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},s.set(l,u))}}function ev(e,t){_n.M(e,t);var n=jo;if(n&&e){var s=eo(n).hoistableScripts,l=No(e),u=s.get(l);u||(u=n.querySelector(Di(l)),u||(e=w({src:e,async:!0,type:"module"},t),(t=Gt.get(l))&&yu(e,t),u=n.createElement("script"),et(u),st(u,"link",e),n.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},s.set(l,u))}}function pf(e,t,n,s){var l=(l=ft.current)?hr(l):null;if(!l)throw Error(r(446));switch(e){case"meta":case"title":return null;case"style":return typeof n.precedence=="string"&&typeof n.href=="string"?(t=Oo(n.href),n=eo(l).hoistableStyles,s=n.get(t),s||(s={type:"style",instance:null,count:0,state:null},n.set(t,s)),s):{type:"void",instance:null,count:0,state:null};case"link":if(n.rel==="stylesheet"&&typeof n.href=="string"&&typeof n.precedence=="string"){e=Oo(n.href);var u=eo(l).hoistableStyles,m=u.get(e);if(m||(l=l.ownerDocument||l,m={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},u.set(e,m),(u=l.querySelector(Li(e)))&&!u._p&&(m.instance=u,m.state.loading=5),Gt.has(e)||(n={rel:"preload",as:"style",href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},Gt.set(e,n),u||tv(l,e,n,m.state))),t&&s===null)throw Error(r(528,""));return m}if(t&&s!==null)throw Error(r(529,""));return null;case"script":return t=n.async,n=n.src,typeof n=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=No(n),n=eo(l).hoistableScripts,s=n.get(t),s||(s={type:"script",instance:null,count:0,state:null},n.set(t,s)),s):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,e))}}function Oo(e){return'href="'+Pt(e)+'"'}function Li(e){return'link[rel="stylesheet"]['+e+"]"}function mf(e){return w({},e,{"data-precedence":e.precedence,precedence:null})}function tv(e,t,n,s){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?s.loading=1:(t=e.createElement("link"),s.preload=t,t.addEventListener("load",function(){return s.loading|=1}),t.addEventListener("error",function(){return s.loading|=2}),st(t,"link",n),et(t),e.head.appendChild(t))}function No(e){return'[src="'+Pt(e)+'"]'}function Di(e){return"script[async]"+e}function ff(e,t,n){if(t.count++,t.instance===null)switch(t.type){case"style":var s=e.querySelector('style[data-href~="'+Pt(n.href)+'"]');if(s)return t.instance=s,et(s),s;var l=w({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return s=(e.ownerDocument||e).createElement("style"),et(s),st(s,"style",l),pr(s,n.precedence,e),t.instance=s;case"stylesheet":l=Oo(n.href);var u=e.querySelector(Li(l));if(u)return t.state.loading|=4,t.instance=u,et(u),u;s=mf(n),(l=Gt.get(l))&&gu(s,l),u=(e.ownerDocument||e).createElement("link"),et(u);var m=u;return m._p=new Promise(function(y,k){m.onload=y,m.onerror=k}),st(u,"link",s),t.state.loading|=4,pr(u,n.precedence,e),t.instance=u;case"script":return u=No(n.src),(l=e.querySelector(Di(u)))?(t.instance=l,et(l),l):(s=n,(l=Gt.get(u))&&(s=w({},n),yu(s,l)),e=e.ownerDocument||e,l=e.createElement("script"),et(l),st(l,"link",s),e.head.appendChild(l),t.instance=l);case"void":return null;default:throw Error(r(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(s=t.instance,t.state.loading|=4,pr(s,n.precedence,e));return t.instance}function pr(e,t,n){for(var s=n.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),l=s.length?s[s.length-1]:null,u=l,m=0;m<s.length;m++){var y=s[m];if(y.dataset.precedence===t)u=y;else if(u!==l)break}u?u.parentNode.insertBefore(e,u.nextSibling):(t=n.nodeType===9?n.head:n,t.insertBefore(e,t.firstChild))}function gu(e,t){e.crossOrigin==null&&(e.crossOrigin=t.crossOrigin),e.referrerPolicy==null&&(e.referrerPolicy=t.referrerPolicy),e.title==null&&(e.title=t.title)}function yu(e,t){e.crossOrigin==null&&(e.crossOrigin=t.crossOrigin),e.referrerPolicy==null&&(e.referrerPolicy=t.referrerPolicy),e.integrity==null&&(e.integrity=t.integrity)}var mr=null;function gf(e,t,n){if(mr===null){var s=new Map,l=mr=new Map;l.set(n,s)}else l=mr,s=l.get(n),s||(s=new Map,l.set(n,s));if(s.has(e))return s;for(s.set(e,null),n=n.getElementsByTagName(e),l=0;l<n.length;l++){var u=n[l];if(!(u[Jo]||u[nt]||e==="link"&&u.getAttribute("rel")==="stylesheet")&&u.namespaceURI!=="http://www.w3.org/2000/svg"){var m=u.getAttribute(t)||"";m=e+m;var y=s.get(m);y?y.push(u):s.set(m,[u])}}return s}function yf(e,t,n){e=e.ownerDocument||e,e.head.insertBefore(n,t==="title"?e.querySelector("head > title"):null)}function nv(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;return t.rel==="stylesheet"?(e=t.disabled,typeof t.precedence=="string"&&e==null):!0;case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function wf(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function av(e,t,n,s){if(n.type==="stylesheet"&&(typeof s.media!="str
10ing"||matchMedia(s.media).matches!==!1)&&(n.state.loading&4)===0){if(n.instance===null){var l=Oo(s.href),u=t.querySelector(Li(l));if(u){t=u._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=fr.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=u,et(u);return}u=t.ownerDocument||t,s=mf(s),(l=Gt.get(l))&&gu(s,l),u=u.createElement("link"),et(u);var m=u;m._p=new Promise(function(y,k){m.onload=y,m.onerror=k}),st(u,"link",s),n.instance=u}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&(n.state.loading&3)===0&&(e.count++,n=fr.bind(e),t.addEventListener("load",n),t.addEventListener("error",n))}}var wu=0;function ov(e,t){return e.stylesheets&&e.count===0&&yr(e,e.stylesheets),0<e.count||0<e.imgCount?function(n){var s=setTimeout(function(){if(e.stylesheets&&yr(e,e.stylesheets),e.unsuspend){var u=e.unsuspend;e.unsuspend=null,u()}},6e4+t);0<e.imgBytes&&wu===0&&(wu=62500*Pb());var l=setTimeout(function(){if(e.waitingForImages=!1,e.count===0&&(e.stylesheets&&yr(e,e.stylesheets),e.unsuspend)){var u=e.unsuspend;e.unsuspend=null,u()}},(e.imgBytes>wu?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(s),clearTimeout(l)}}:null}function fr(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)yr(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var gr=null;function yr(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,gr=new Map,t.forEach(iv,e),gr=null,fr.call(e))}function iv(e,t){if(!(t.state.loading&4)){var n=gr.get(e);if(n)var s=n.get(null);else{n=new Map,gr.set(e,n);for(var l=e.querySelectorAll("link[data-precedence],style[data-precedence]"),u=0;u<l.length;u++){var m=l[u];(m.nodeName==="LINK"||m.getAttribute("media")!=="not all")&&(n.set(m.dataset.precedence,m),s=m)}s&&n.set(null,s)}l=t.instance,m=l.getAttribute("data-precedence"),u=n.get(m)||s,u===s&&n.set(null,l),n.set(m,l),this.count++,s=fr.bind(this),l.addEventListener("load",s),l.addEventListener("error",s),u?u.parentNode.insertBefore(l,u.nextSibling):(e=e.nodeType===9?e.head:e,e.insertBefore(l,e.firstChild)),t.state.loading|=4}}var Pi={$$typeof:H,Provider:null,Consumer:null,_currentValue:oe,_currentValue2:oe,_threadCount:0};function sv(e,t,n,s,l,u,m,y,k){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=pl(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=pl(0),this.hiddenUpdates=pl(null),this.identifierPrefix=s,this.onUncaughtError=l,this.onCaughtError=u,this.onRecoverableError=m,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=k,this.incompleteTransitions=new Map}function bf(e,t,n,s,l,u,m,y,k,M,L,P){return e=new sv(e,t,n,m,k,M,L,P,y),t=1,u===!0&&(t|=24),u=zt(3,null,null,t),e.current=u,u.stateNode=e,t=Kl(),t.refCount++,e.pooledCache=t,t.refCount++,u.memoizedState={element:s,isDehydrated:n,cache:t},tc(u),e}function vf(e){return e?(e=uo,e):uo}function Sf(e,t,n,s,l,u){l=vf(l),s.context===null?s.context=l:s.pendingContext=l,s=Qn(t),s.payload={element:n},u=u===void 0?null:u,u!==null&&(s.callback=u),n=Vn(e,s,t),n!==null&&(xt(n,e,t),gi(n,e,t))}function Af(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var n=e.retryLane;e.retryLane=n!==0&&n<t?n:t}}function bu(e,t){Af(e,t),(e=e.alternate)&&Af(e,t)}function kf(e){if(e.tag===13||e.tag===31){var t=Ea(e,67108864);t!==null&&xt(t,e,67108864),bu(e,67108864)}}function xf(e){if(e.tag===13||e.tag===31){var t=Bt();t=ml(t);var n=Ea(e,t);n!==null&&xt(n,e,t),bu(e,t)}}var wr=!0;function rv(e,t,n,s){var l=B.T;B.T=null;var u=Q.p;try{Q.p=2,vu(e,t,n,s)}finally{Q.p=u,B.T=l}}function lv(e,t,n,s){var l=B.T;B.T=null;var u=Q.p;try{Q.p=8,vu(e,t,n,s)}finally{Q.p=u,B.T=l}}function vu(e,t,n,s){if(wr){var l=Su(s);if(l===null)su(e,t,s,br,n),Tf(e,s);else if(uv(l,e,t,n,s))s.stopPropagation();else if(Tf(e,s),t&4&&-1<cv.indexOf(e)){for(;l!==null;){var u=Ja(l);if(u!==null)switch(u.tag){case 3:if(u=u.stateNode,u.current.memoizedState.isDehydrated){var m=va(u.pendingLanes);if(m!==0){var y=u;for(y.pendingLanes|=2,y.entangledLanes|=2;m;){var k=1<<31-_t(m);y.entanglements[1]|=k,m&=~k}sn(u),(Se&6)===0&&(tr=le()+500,ji(0))}}break;case 31:case 13:y=Ea(u,2),y!==null&&xt(y,u,2),ar(),bu(u,2)}if(u=Su(s),u===null&&su(e,t,s,br,n),u===l)break;l=u}l!==null&&s.stopPropagation()}else su(e,t,s,null,n)}}function Su(e){return e=kl(e),Au(e)}var br=null;function Au(e){if(br=null,e=Xa(e),e!==null){var t=d(e);if(t===null)e=null;else{var n=t.tag;if(n===13){if(e=h(t),e!==null)return e;e=null}else if(n===31){if(e=p(t),e!==null)return e;e=null}else if(n===3){if(t.stateNode.current.memoizedState.isDehydrated)return t.tag===3?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null)}}return br=e,null}function Ef(e){switch(e){case"beforetoggle":case"cancel":case"click":case"close"
vendor: 7,731 bytes, line 10
10:case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"toggle":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 2;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 8;case"message":switch(Ze()){case yt:return 2;case $o:return 8;case ls:case $y:return 32;case Nd:return 268435456;default:return 32}default:return 32}}var ku=!1,ia=null,sa=null,ra=null,qi=new Map,Ui=new Map,la=[],cv="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(" ");function Tf(e,t){switch(e){case"focusin":case"focusout":ia=null;break;case"dragenter":case"dragleave":sa=null;break;case"mouseover":case"mouseout":ra=null;break;case"pointerover":case"pointerout":qi.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Ui.delete(t.pointerId)}}function Hi(e,t,n,s,l,u){return e===null||e.nativeEvent!==u?(e={blockedOn:t,domEventName:n,eventSystemFlags:s,nativeEvent:u,targetContainers:[l]},t!==null&&(t=Ja(t),t!==null&&kf(t)),e):(e.eventSystemFlags|=s,t=e.targetContainers,l!==null&&t.indexOf(l)===-1&&t.push(l),e)}function uv(e,t,n,s,l){switch(t){case"focusin":return ia=Hi(ia,e,t,n,s,l),!0;case"dragenter":return sa=Hi(sa,e,t,n,s,l),!0;case"mouseover":return ra=Hi(ra,e,t,n,s,l),!0;case"pointerover":var u=l.pointerId;return qi.set(u,Hi(qi.get(u)||null,e,t,n,s,l)),!0;case"gotpointercapture":return u=l.pointerId,Ui.set(u,Hi(Ui.get(u)||null,e,t,n,s,l)),!0}return!1}function Cf(e){var t=Xa(e.target);if(t!==null){var n=d(t);if(n!==null){if(t=n.tag,t===13){if(t=h(n),t!==null){e.blockedOn=t,Ud(e.priority,function(){xf(n)});return}}else if(t===31){if(t=p(n),t!==null){e.blockedOn=t,Ud(e.priority,function(){xf(n)});return}}else if(t===3&&n.stateNode.current.memoizedState.isDehydrated){e.blockedOn=n.tag===3?n.stateNode.containerInfo:null;return}}}e.blockedOn=null}function vr(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var n=Su(e.nativeEvent);if(n===null){n=e.nativeEvent;var s=new n.constructor(n.type,n);Al=s,n.target.dispatchEvent(s),Al=null}else return t=Ja(n),t!==null&&kf(t),e.blockedOn=n,!1;t.shift()}return!0}function _f(e,t,n){vr(e)&&n.delete(t)}function dv(){ku=!1,ia!==null&&vr(ia)&&(ia=null),sa!==null&&vr(sa)&&(sa=null),ra!==null&&vr(ra)&&(ra=null),qi.forEach(_f),Ui.forEach(_f)}function Sr(e,t){e.blockedOn===t&&(e.blockedOn=null,ku||(ku=!0,a.unstable_scheduleCallback(a.unstable_NormalPriority,dv)))}var Ar=null;function Rf(e){Ar!==e&&(Ar=e,a.unstable_scheduleCallback(a.unstable_NormalPriority,function(){Ar===e&&(Ar=null);for(var t=0;t<e.length;t+=3){var n=e[t],s=e[t+1],l=e[t+2];if(typeof s!="function"){if(Au(s||n)===null)continue;break}var u=Ja(n);u!==null&&(e.splice(t,3),t-=3,Sc(u,{pending:!0,data:l,method:n.method,action:s},s,l))}}))}function Bo(e){function t(k){return Sr(k,e)}ia!==null&&Sr(ia,e),sa!==null&&Sr(sa,e),ra!==null&&Sr(ra,e),qi.forEach(t),Ui.forEach(t);for(var n=0;n<la.length;n++){var s=la[n];s.blockedOn===e&&(s.blockedOn=null)}for(;0<la.length&&(n=la[0],n.blockedOn===null);)Cf(n),n.blockedOn===null&&la.shift();if(n=(e.ownerDocument||e).$$reactFormReplay,n!=null)for(s=0;s<n.length;s+=3){var l=n[s],u=n[s+1],m=l[wt]||null;if(typeof u=="function")m||Rf(n);else if(m){var y=null;if(u&&u.hasAttribute("formAction")){if(l=u,m=u[wt]||null)y=m.formAction;else if(Au(l)!==null)continue}else y=m.action;typeof y=="function"?n[s+1]=y:(n.splice(s,3),s-=3),Rf(n)}}}function zf(){function e(u){u.canIntercept&&u.info==="react-transition"&&u.intercept({handler:function(){return new Promise(function(m){return l=m})},focusReset:"manual",scroll:"manual"})}function t(){l!==null&&(l(),l=null),s||setTimeout(n,20)}function n(){if(!s&&!navigation.transition){var u=navigation.currentEntry;u&&u.url!=null&&navigation.navigate(u.url,{state:u.getState(),info:"react-transition",history:"replace"})}}if(typeof navigation=="object"){var s=!1,l=null;return navigation.addEventListener("navigate",e),navigation.addEventListener("navigatesuccess",t),navigation.addEventListener("navigateerror",t),setTimeout(n,100),function(){s=!0,navigation.removeEventListener("navigate",e),navigation.removeEventListener("navigatesuccess",t),navigation.removeEventListener("navigateerror",t),l!==null&&(l(),l=null)}}}function xu(e){this._internalRoot=e}kr.prototype.render=xu.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(r(409));var n=t.current,s=Bt();Sf(n,s,e,t,null,null)},kr.prototype.unmount=xu.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;Sf(e.current,2,null,e,null,null),ar(),t[Ka]=null}};function kr(e){this._internalRoot=e}kr.prototype.unstable_scheduleHydration=function(e){if(e){var t=qd();e={blockedOn:null,target:e,priority:t};for(var n=0;n<la.length&&t!==0&&t<la[n].priority;n++);la.splice(n,0,e),n===0&&Cf(e)}};var Mf=o.version;if(Mf!=="19.2.3")throw Error(r(527,Mf,"19.2.3"));Q.findDOMNode=function(e){var t=e._reactInternals;if(t===void 0)throw typeof e.render=="function"?Error(r(188)):(e=Object.keys(e).join(","),Error(r(268,e)));return e=g(t),e=e!==null?b(e):null,e=e===null?null:e.stateNode,e};var hv={bundleType:0,version:"19.2.3",rendererPackageName:"react-dom",currentDispatcherRef:B,reconcilerVersion:"19.2.3"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var xr=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!xr.isDisabled&&xr.supportsFiber)try{Zo=xr.inject(hv),Ct=xr}catch{}}return Yi.createRoot=function(e,t){if(!c(e))throw Error(r(299));var n=!1,s="",l=Dp,u=Pp,m=qp;return t!=null&&(t.unstable_strictMode===!0&&(n=!0),t.identifierPrefix!==void 0&&(s=t.identifierPrefix),t.onUncaughtError!==void 0&&(l=t.onUncaughtError),t.onCaughtError!==void 0&&(u=t.onCaughtError),t.onRecoverableError!==void 0&&(m=t.onRecoverableError)),t=bf(e,1,!1,null,null,n,s,null,l,u,m,zf),e[Ka]=t.current,iu(e),new xu(t)},Yi.hydrateRoot=function(e,t,n){if(!c(e))throw Error(r(299));var s=!1,l="",u=Dp,m=Pp,y=qp,k=null;return n!=null&&(n.unstable_strictMode===!0&&(s=!0),n.identifierPrefix!==void 0&&(l=n.identifierPrefix),n.onUncaughtError!==void 0&&(u=n.onUncaughtError),n.onCaughtError!==void 0&&(m=n.onCaughtError),n.onRecoverableError!==void 0&&(y=n.onRecoverableError),n.formState!==void 0&&(k=n.formState)),t=bf(e,1,!0,t,n??null,s,l,k,u,m,y,zf),t.context=vf(null),n=t.current,s=Bt(),s=ml(s),l=Qn(s),l.callback=null,Vn(n,l,s),n=s,t.current.lanes=n,Xo(t,n),sn(t),e[Ka]=t.current,iu(e),new kr(t)},Yi.version="19.2.3",Yi}var Df;function bv(){if(Df)return Eu.exports;Df=1;function a(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(a)}catch(o){console.error(o)}}return a(),Eu.exports=wv(),Eu.exports}var vv=bv();
10const $u=new WeakMap,Sv=new WeakMap,Dr={current:[]};let Ru=!1,Ki=0;const Zi=new Set,Er=new Map;function xg(a){for(const o of a){if(Dr.current.includes(o))continue;Dr.current.push(o),o.recompute();const i=Sv.get(o);if(i)for(const r of i){const c=$u.get(r);c?.length&&xg(c)}}}function Av(a){const o={prevVal:a.prevState,currentVal:a.state};for(const i of a.listeners)i(o)}function kv(a){const o={prevVal:a.prevState,currentVal:a.state};for(const i of a.listeners)i(o)}function Eg(a){if(Ki>0&&!Er.has(a)&&Er.set(a,a.prevState),Zi.add(a),!(Ki>0)&&!Ru)try{for(Ru=!0;Zi.size>0;){const o=Array.from(Zi);Zi.clear();for(const i of o){const r=Er.get(i)??i.prevState;i.prevState=r,Av(i)}for(const i of o){const r=$u.get(i);r&&(Dr.current.push(i),xg(r))}for(const i of o){const r=$u.get(i);if(r)for(const c of r)kv(c)}}}finally{Ru=!1,Dr.current=[],Er.clear()}}function qo(a){Ki++;try{a()}finally{if(Ki--,Ki===0){const o=Zi.values().next().value;o&&Eg(o)}}}function xv(a){return typeof a=="function"}class Ev{constructor(o,i){this.listeners=new Set,this.subscribe=r=>{var c,d;this.listeners.add(r);const h=(d=(c=this.options)==null?void 0:c.onSubscribe)==null?void 0:d.call(c,r,this);return()=>{this.listeners.delete(r),h?.()}},this.prevState=o,this.state=o,this.options=i}setState(o){var i,r,c;this.prevState=this.state,(i=this.options)!=null&&i.updateFn?this.state=this.options.updateFn(this.prevState)(o):xv(o)?this.state=o(this.prevState):this.state=o,(c=(r=this.options)==null?void 0:r.onUpdate)==null||c.call(r),Eg(this)}}const ma="__TSR_index",Pf="popstate",qf="beforeunload";function Tv(a){let o=a.getLocation();const i=new Set,r=h=>{o=a.getLocation(),i.forEach(p=>p({location:o,action:h}))},c=h=>{a.notifyOnIndexChange??!0?r(h):o=a.getLocation()},d=async({task:h,navigateOpts:p,...f})=>{if(p?.ignoreBlocker??!1){h();return}const b=a.getBlockers?.()??[],w=f.type==="PUSH"||f.type==="REPLACE";if(typeof document<"u"&&b.length&&w)for(const v of b){const x=Pr(f.path,f.state);if(await v.blockerFn({currentLocation:o,nextLocation:x,action:f.type})){a.onBlocked?.();return}}h()};return{get location(){return o},get length(){return a.getLength()},subscribers:i,subscribe:h=>(i.add(h),()=>{i.delete(h)}),push:(h,p,f)=>{const g=o.state[ma];p=Uf(g+1,p),d({task:()=>{a.pushState(h,p),r({type:"PUSH"})},navigateOpts:f,type:"PUSH",path:h,state:p})},replace:(h,p,f)=>{const g=o.state[ma];p=Uf(g,p),d({task:()=>{a.replaceState(h,p),r({type:"REPLACE"})},navigateOpts:f,type:"REPLACE",path:h,state:p})},go:(h,p)=>{d({task:()=>{a.go(h),c({type:"GO",index:h})},navigateOpts:p,type:"GO"})},back:h=>{d({task:()=>{a.back(h?.ignoreBlocker??!1),c({type:"BACK"})},navigateOpts:h,type:"BACK"})},forward:h=>{d({task:()=>{a.forward(h?.ignoreBlocker??!1),c({type:"FORWARD"})},navigateOpts:h,type:"FORWARD"})},canGoBack:()=>o.state[ma]!==0,createHref:h=>a.createHref(h),block:h=>{if(!a.setBlockers)return()=>{};const p=a.getBlockers?.()??[];return a.setBlockers([...p,h]),()=>{const f=a.getBlockers?.()??[];a.setBlockers?.(f.filter(g=>g!==h))}},flush:()=>a.flush?.(),destroy:()=>a.destroy?.(),notify:r}}function Uf(a,o){o||(o={});const i=od();return{...o,key:i,__TSR_key:i,[ma]:a}}function Cv(a){const o=typeof document<"u"?window:void 0,i=o.history.pushState,r=o.history.replaceState;let c=[];const d=()=>c,h=U=>c=U,p=(U=>U),f=(()=>Pr(`${o.location.pathname}${o.location.search}${o.location.hash}`,o.history.state));if(!o.history.state?.__TSR_key&&!o.history.state?.key){const U=od();o.history.replaceState({[ma]:0,key:U,__TSR_key:U},"")}let g=f(),b,w=!1,v=!1,x=!1,R=!1;const C=()=>g;let O,q;const I=()=>{O&&(G._ignoreSubscribers=!0,(O.isPush?o.history.pushState:o.history.replaceState)(O.state,"",O.href),G._ignoreSubscribers=!1,O=void 0,q=void 0,b=void 0)},H=(U,V,ue)=>{const ie=p(V);q||(b=g),g=Pr(V,ue),O={href:ie,state:ue,isPush:O?.isPush||U==="push"},q||(q=Promise.resolve().then(()=>I()))},Y=U=>{g=f(),G.notify({type:U})},F=async()=>{if(v){v=!1;return}const U=f(),V=U.state[ma]-g.state[ma],ue=V===1,ie=V===-1,te=!ue&&!ie||w;w=!1;const Te=te?"GO":ie?"BACK":"FORWARD",ke=te?{type:"GO",index:V}:{type:ie?"BACK":"FORWARD"};if(x)x=!1;else{const Le=d();if(typeof document<"u"&&Le.length){for(const B of Le)if(await B.blockerFn({currentLocation:g,nextLocation:U,action:Te})){v=!0,o.history.go(1),G.notify(ke);return}}}g=f(),G.notify(ke)},W=U=>{if(R){R=!1;return}let V=!1;const ue=d();if(typeof document<"u"&&ue.length)for(const ie of ue){const te=ie.enableBeforeUnload??!0;if(te===!0){V=!0;break}if(typeof te=="function"&&te()===!0){V=!0;break}}if(V)return U.preventDefault(),U.returnValue=""},G=Tv({getLocation:C,getLength:()=>o.history.length,pushState:(U,V)=>H("push",U,V),replaceState:(U,V)=>H("replace",U,V),back:U=>(U&&(x=!0),R=!0,o.history.back()),forward:U=>{U&&(x=!0),R=!0,o.history.forward()},go:U=>{w=!0,o.history.go(U)},createHref:U=>p(U),flush:I,destroy:()=>{o.history.pushState=i,o.history.replaceState=r,o.removeEventListener(qf,W,{capture:!0}),o.removeEventListener(Pf,F)},onBlocked:()=>{b&&g!==b&&(g=b)},getBlockers:d,setBlockers:h,notifyOnIndexChange:!1});return o.addEventListener(qf,W,{capture:!0}),o.addEventListener(Pf,F),o.history.pushState=function(...U){const V=i.apply(o.history,U);return G._ignoreSubscribers||Y("PUSH"),V},o.history.replaceState=function(...U){const V=r.apply(o.history,U);return G._ignoreSubscribers||Y("REPLACE"),V},G}function _v(a){let o=a.replace(/[\x00-\x1f\x7f]/g,"");return o.startsWith("//")&&(o="/"+o.replace(/^\/+/,"")),o}function Pr(a,o){const i=_v(a),r=i.indexOf("#"),c=i.indexOf("?"),d=od();return{href:i,pathname:i.substring(0,r>0?c>0?Math.min(r,c):r:c>0?c:i.length),hash:r>-1?i.substring(r):"",search:c>-1?i.slice(c,r===-1?void 0:r):"",state:o||{[ma]:0,key:d,__TSR_key:d}}}function od(){return(Math.random()+1).toString(36).substring(7)}
10function qr(a){return a[a.length-1]}function Rv(a){return typeof a=="function"}function ha(a,o){return Rv(a)?a(o):a}const zv=Object.prototype.hasOwnProperty,Hf=Object.prototype.propertyIsEnumerable;function Qt(a,o,i=0){if(a===o)return a;if(i>500)return o;const r=o,c=Wf(a)&&Wf(r);if(!c&&!(Ur(a)&&Ur(r)))return r;const d=c?a:Yf(a);if(!d)return r;const h=c?r:Yf(r);if(!h)return r;const p=d.length,f=h.length,g=c?new Array(f):{};let b=0;for(let w=0;w<f;w++){const v=c?w:h[w],x=a[v],R=r[v];if(x===R){g[v]=x,(c?w<p:zv.call(a,v))&&b++;continue}if(x===null||R===null||typeof x!="object"||typeof R!="object"){g[v]=R;continue}const C=Qt(x,R,i+1);g[v]=C,C===x&&b++}return p===f&&b===p?a:g}function Yf(a){const o=Object.getOwnPropertyNames(a);for(const c of o)if(!Hf.call(a,c))return!1;const i=Object.getOwnPropertySymbols(a);if(i.length===0)return o;const r=o;for(const c of i){if(!Hf.call(a,c))return!1;r.push(c)}return r}function Ur(a){if(!If(a))return!1;const o=a.constructor;if(typeof o>"u")return!0;const i=o.prototype;return!(!If(i)||!i.hasOwnProperty("isPrototypeOf"))}function If(a){return Object.prototype.toString.call(a)==="[object Object]"}function Wf(a){return Array.isArray(a)&&a.length===Object.keys(a).length}function Ha(a,o,i){if(a===o)return!0;if(typeof a!=typeof o)return!1;if(Array.isArray(a)&&Array.isArray(o)){if(a.length!==o.length)return!1;for(let r=0,c=a.length;r<c;r++)if(!Ha(a[r],o[r],i))return!1;return!0}if(Ur(a)&&Ur(o)){const r=i?.ignoreUndefined??!0;if(i?.partial){for(const h in o)if((!r||o[h]!==void 0)&&!Ha(a[h],o[h],i))return!1;return!0}let c=0;if(!r)c=Object.keys(a).length;else for(const h in a)a[h]!==void 0&&c++;let d=0;for(const h in o)if((!r||o[h]!==void 0)&&(d++,d>c||!Ha(a[h],o[h],i)))return!1;return c===d}return!1}function Ia(a){let o,i;const r=new Promise((c,d)=>{o=c,i=d});return r.status="pending",r.resolve=c=>{r.status="resolved",r.value=c,o(c),a?.(c)},r.reject=c=>{r.status="rejected",i(c)},r}function Mv(a){return typeof a?.message!="string"?!1:a.message.startsWith("Failed to fetch dynamically imported module")||a.message.startsWith("error loading dynamically imported module")||a.message.startsWith("Importing a module script failed")}function fa(a){return!!(a&&typeof a=="object"&&typeof a.then=="function")}function jv(a){return a.replace(/[\x00-\x1f\x7f]/g,"")}function Ff(a){let o;try{o=decodeURI(a)}catch{o=a.replaceAll(/%[0-9A-F]{2}/gi,i=>{try{return decodeURI(i)}catch{return i}})}return jv(o)}const Tg=["http:","https:","mailto:","tel:"];function Hr(a){if(!a)return!1;try{const o=new URL(a);return!Tg.includes(o.protocol)}catch{return!1}}const Ov={"&":"\\u0026",">":"\\u003e","<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"},Nv=/[&><\u2028\u2029]/g;function Cg(a){return a.replace(Nv,o=>Ov[o])}function zu(a,o){if(!a)return a;const i=/%25|%5C/gi;let r=0,c="",d;for(;(d=i.exec(a))!==null;)c+=Ff(a.slice(r,d.index))+d[0],r=i.lastIndex;return c=c+Ff(r?a.slice(r):a),c.startsWith("//")&&(c="/"+c.replace(/^\/+/,"")),c}var Bv="Invariant failed";function Et(a,o){if(!a)throw new Error(Bv)}function Yr(a){const o=new Map;let i,r;const c=d=>{d.next&&(d.prev?(d.prev.next=d.next,d.next.prev=d.prev,d.next=void 0,r&&(r.next=d,d.prev=r)):(d.next.prev=void 0,i=d.next,d.next=void 0,r&&(d.prev=r,r.next=d)),r=d)};return{get(d){const h=o.get(d);if(h)return c(h),h.value},set(d,h){if(o.size>=a&&i){const f=i;o.delete(f.key),f.next&&(i=f.next,f.next.prev=void 0),f===r&&(r=void 0)}const p=o.get(d);if(p)p.value=h,c(p);else{const f={key:d,value:h,prev:r};r&&(r.next=f),r=f,i||(i=f),o.set(d,f)}},clear(){o.clear(),i=void 0,r=void 0}}}const Wo=0,Wa=1,Fa=2,ns=3,Pa=4,_g=5;function Lv(a){const o=a.indexOf("{");if(o===-1)return null;const i=a.indexOf("}",o);return i===-1||o+1>=a.length?null:[o,i]}function id(a,o,i=new Uint16Array(6)){const r=a.indexOf("/",o),c=r===-1?a.length:r,d=a.substring(o,c);if(!d||!d.includes("$"))return i[0]=Wo,i[1]=o,i[2]=o,i[3]=c,i[4]=c,i[5]=c,i;if(d==="$"){const p=a.length;return i[0]=Fa,i[1]=o,i[2]=o,i[3]=p,i[4]=p,i[5]=p,i}if(d.charCodeAt(0)===36)return i[0]=Wa,i[1]=o,i[2]=o+1,i[3]=c,i[4]=c,i[5]=c,i;const h=Lv(d);
10if(h){const[p,f]=h,g=d.charCodeAt(p+1);if(g===45){if(p+2<d.length&&d.charCodeAt(p+2)===36){const b=p+3,w=f;if(b<w)return i[0]=ns,i[1]=o+p,i[2]=o+b,i[3]=o+w,i[4]=o+f+1,i[5]=c,i}}else if(g===36){const b=p+1,w=p+2;return w===f?(i[0]=Fa,i[1]=o+p,i[2]=o+b,i[3]=o+w,i[4]=o+f+1,i[5]=a.length,i):(i[0]=Wa,i[1]=o+p,i[2]=o+w,i[3]=o+f,i[4]=o+f+1,i[5]=c,i)}}return i[0]=Wo,i[1]=o,i[2]=o,i[3]=c,i[4]=c,i[5]=c,i}function Jr(a,o,i,r,c,d,h){h?.(i);let p=r;{const f=i.fullPath??i.from,g=f.length,b=i.options?.caseSensitive??a,w=!!(i.options?.params?.parse&&i.options?.skipRouteOnParseError?.params);for(;p<g;){const x=id(f,p,o);let R;const C=p,O=x[5];switch(p=O+1,d++,x[0]){case Wo:{const I=f.substring(x[2],x[3]);if(b){const H=c.static?.get(I);if(H)R=H;else{c.static??=new Map;const Y=qa(i.fullPath??i.from);Y.parent=c,Y.depth=d,R=Y,c.static.set(I,Y)}}else{const H=I.toLowerCase(),Y=c.staticInsensitive?.get(H);if(Y)R=Y;else{c.staticInsensitive??=new Map;const F=qa(i.fullPath??i.from);F.parent=c,F.depth=d,R=F,c.staticInsensitive.set(H,F)}}break}case Wa:{const I=f.substring(C,x[1]),H=f.substring(x[4],O),Y=b&&!!(I||H),F=I?Y?I:I.toLowerCase():void 0,W=H?Y?H:H.toLowerCase():void 0,G=!w&&c.dynamic?.find(U=>!U.skipOnParamError&&U.caseSensitive===Y&&U.prefix===F&&U.suffix===W);if(G)R=G;else{const U=ju(Wa,i.fullPath??i.from,Y,F,W);R=U,U.depth=d,U.parent=c,c.dynamic??=[],c.dynamic.push(U)}break}case ns:{const I=f.substring(C,x[1]),H=f.substring(x[4],O),Y=b&&!!(I||H),F=I?Y?I:I.toLowerCase():void 0,W=H?Y?H:H.toLowerCase():void 0,G=!w&&c.optional?.find(U=>!U.skipOnParamError&&U.caseSensitive===Y&&U.prefix===F&&U.suffix===W);if(G)R=G;else{const U=ju(ns,i.fullPath??i.from,Y,F,W);R=U,U.parent=c,U.depth=d,c.optional??=[],c.optional.push(U)}break}case Fa:{const I=f.substring(C,x[1]),H=f.substring(x[4],O),Y=b&&!!(I||H),F=I?Y?I:I.toLowerCase():void 0,W=H?Y?H:H.toLowerCase():void 0,G=ju(Fa,i.fullPath??i.from,Y,F,W);R=G,G.parent=c,G.depth=d,c.wildcard??=[],c.wildcard.push(G)}}c=R}if(w&&i.children&&!i.isRoot&&i.id&&i.id.charCodeAt(i.id.lastIndexOf("/")+1)===95){const x=qa(i.fullPath??i.from);x.kind=_g,x.parent=c,d++,x.depth=d,c.pathless??=[],c.pathless.push(x),c=x}const v=(i.path||!i.children)&&!i.isRoot;if(v&&f.endsWith("/")){const x=qa(i.fullPath??i.from);x.kind=Pa,x.parent=c,d++,x.depth=d,c.index=x,c=x}c.parse=i.options?.params?.parse??null,c.skipOnParamError=w,c.parsingPriority=i.options?.skipRouteOnParseError?.priority??0,v&&!c.route&&(c.route=i,c.fullPath=i.fullPath??i.from)}if(i.children)for(const f of i.children)Jr(a,o,f,p,c,d,h)}function Mu(a,o){if(a.skipOnParamError&&!o.skipOnParamError)return-1;if(!a.skipOnParamError&&o.skipOnParamError)return 1;if(a.skipOnParamError&&o.skipOnParamError&&(a.parsingPriority||o.parsingPriority))return o.parsingPriority-a.parsingPriority;if(a.prefix&&o.prefix&&a.prefix!==o.prefix){if(a.prefix.startsWith(o.prefix))return-1;if(o.prefix.startsWith(a.prefix))return 1}if(a.suffix&&o.suffix&&a.suffix!==o.suffix){if(a.suffix.endsWith(o.suffix))return-1;if(o.suffix.endsWith(a.suffix))return 1}return a.prefix&&!o.prefix?-1:!a.prefix&&o.prefix?1:a.suffix&&!o.suffix?-1:!a.suffix&&o.suffix?1:a.caseSensitive&&!o.caseSensitive?-1:!a.caseSensitive&&o.caseSensitive?1:0}function ua(a){if(a.pathless)for(const o of a.pathless)ua(o);if(a.static)for(const o of a.static.values())ua(o);if(a.staticInsensitive)for(const o of a.staticInsensitive.values())ua(o);if(a.dynamic?.length){a.dynamic.sort(Mu);for(const o of a.dynamic)ua(o)}if(a.optional?.length){a.optional.sort(Mu);for(const o of a.optional)ua(o)}if(a.wildcard?.length){a.wildcard.sort(Mu);for(const o of a.wildcard)ua(o)}}function qa(a){return{kind:Wo,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:a,parent:null,parse:null,skipOnParamError:!1,parsingPriority:0}}function ju(a,o,i,r,c){return{kind:a,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:o,parent:null,parse:null,skipOnParamError:!1,parsingPriority:0,caseSensitive:i,prefix:r,suffix:c}}function Dv(a,o){const i=qa("/"),r=new Uint16Array(6);for(const c of a)Jr(!1,r,c,1,i,0);ua(i),o.masksTree=i,o.flatCache=Yr(1e3)}function Pv(a,o){a||="/";const i=o.flatCache.get(a);if(i)return i;const r=sd(a,o.masksTree);return o.flatCache.set(a,r),r}function qv(a,o,i,r,c){a||="/",r||="/";const d=o?`case\0${a}`:a;let h=c.singleCache.get(d);if(!h){h=qa("/");const p=new Uint16Array(6);Jr(o,p,{from:a},1,h,0),c.singleCache.set(d,h)}return sd(r,h,i)}function Uv(a,o,i=!1){const r=i?a:`nofuzz\0${a}`,c=o.matchCache.get(r);if(c!==void 0)return c;a||="/";let d;try{d=sd(a,o.segmentTree,i)}catch(h){if(h instanceof URIError)d=null;else throw h}return d&&(d.branch=Iv(d.route)),o.matchCache.set(r,d),d}function Hv(a){return a==="/"?a:a.replace(/\/{1,}$/,"")}function Yv(a,o=!1,i){const r=qa(a.fullPath),c=new Uint16Array(6),d={},h={};let p=0;return Jr(o,c,a,1,r,0,g=>{if(i?.(g,p),Et(!(g.id in d),`Duplicate routes found with id: ${String(g.id)}`),d[g.id]=g,p!==0&&g.path){const b=Hv(g.fullPath);(!h[b]||g.fullPath.endsWith("/"))&&(h[b]=g)}p++}),ua(r),{processedTree:{segmentTree:r,singleCache:Yr(1e3),matchCache:Yr(1e3),flatCache:null,masksTree:null},routesById:d,routesByPath:h}}function sd(a,o,i=!1){const r=a.split("/"),c=Fv(a,r,o,i);if(!c)return null;const[d]=Rg(a,r,c);return{route:c.node.route,rawParams:d,parsedParams:c.parsedParams}}function Rg(a,o,i){const r=Wv(i.node);let c=null;const d={};let h=i.extract?.part??0,p=i.extract?.node??0,f=i.extract?.path??0,g=i.extract?.segment??0;for(;p<r.length;h++,p++,f++,g++){const b=r[p];if(b.kind===Pa)break;if(b.kind===_g){g--,h--,f--;continue}const w=o[h],v=f;if(w&&(f+=w.length),b.kind===Wa){c??=i.node.fullPath.split("/");const x=c[g],R=b.prefix?.length??0;
10if(x.charCodeAt(R)===123){const O=b.suffix?.length??0,q=x.substring(R+2,x.length-O-1),I=w.substring(R,w.length-O);d[q]=decodeURIComponent(I)}else{const O=x.substring(1);d[O]=decodeURIComponent(w)}}else if(b.kind===ns){if(i.skipped&1<<p){h--,f=v-1;continue}c??=i.node.fullPath.split("/");const x=c[g],R=b.prefix?.length??0,C=b.suffix?.length??0,O=x.substring(R+3,x.length-C-1),q=b.suffix||b.prefix?w.substring(R,w.length-C):w;q&&(d[O]=decodeURIComponent(q))}else if(b.kind===Fa){const x=b,R=a.substring(v+(x.prefix?.length??0),a.length-(x.suffix?.length??0)),C=decodeURIComponent(R);d["*"]=C,d._splat=C;break}}return i.rawParams&&Object.assign(d,i.rawParams),[d,{part:h,node:p,path:f,segment:g}]}function Iv(a){const o=[a];for(;a.parentRoute;)a=a.parentRoute,o.push(a);return o.reverse(),o}function Wv(a){const o=Array(a.depth+1);do o[a.depth]=a,a=a.parent;while(a);return o}function Fv(a,o,i,r){if(a==="/"&&i.index)return{node:i.index,skipped:0};const c=!qr(o),d=c&&a!=="/",h=o.length-(c?1:0),p=[{node:i,index:1,skipped:0,depth:1,statics:1,dynamics:0,optionals:0}];let f=null,g=null,b=null;for(;p.length;){const w=p.pop(),{node:v,index:x,skipped:R,depth:C,statics:O,dynamics:q,optionals:I}=w;let{extract:H,rawParams:Y,parsedParams:F}=w;if(v.skipOnParamError){if(!Ou(a,o,w))continue;Y=w.rawParams,H=w.extract,F=w.parsedParams}r&&v.route&&v.kind!==Pa&&Ii(g,w)&&(g=w);const W=x===h;if(W&&(v.route&&!d&&Ii(b,w)&&(b=w),!v.optional&&!v.wildcard&&!v.index&&!v.pathless))continue;const G=W?void 0:o[x];let U;if(W&&v.index){const V={node:v.index,index:x,skipped:R,depth:C+1,statics:O,dynamics:q,optionals:I,extract:H,rawParams:Y,parsedParams:F};let ue=!0;if(v.index.skipOnParamError&&(Ou(a,o,V)||(ue=!1)),ue){if(O===h&&!q&&!I&&!R)return V;Ii(b,V)&&(b=V)}}if(v.wildcard&&Ii(f,w))for(const V of v.wildcard){const{prefix:ue,suffix:ie}=V;if(ue&&(W||!(V.caseSensitive?G:U??=G.toLowerCase()).startsWith(ue)))continue;if(ie){if(W)continue;const Te=o.slice(x).join("/").slice(-ie.length);if((V.caseSensitive?Te:Te.toLowerCase())!==ie)continue}const te={node:V,index:h,skipped:R,depth:C,statics:O,dynamics:q,optionals:I,extract:H,rawParams:Y,parsedParams:F};if(!(V.skipOnParamError&&!Ou(a,o,te))){f=te;break}}if(v.optional){const V=R|1<<C,ue=C+1;for(let ie=v.optional.length-1;ie>=0;ie--){const te=v.optional[ie];p.push({node:te,index:x,skipped:V,depth:ue,statics:O,dynamics:q,optionals:I,extract:H,rawParams:Y,parsedParams:F})}if(!W)for(let ie=v.optional.length-1;ie>=0;ie--){const te=v.optional[ie],{prefix:Te,suffix:ke}=te;if(Te||ke){const Le=te.caseSensitive?G:U??=G.toLowerCase();if(Te&&!Le.startsWith(Te)||ke&&!Le.endsWith(ke))continue}p.push({node:te,index:x+1,skipped:R,depth:ue,statics:O,dynamics:q,optionals:I+1,extract:H,rawParams:Y,parsedParams:F})}}if(!W&&v.dynamic&&G)for(let V=v.dynamic.length-1;V>=0;V--){const ue=v.dynamic[V],{prefix:ie,suffix:te}=ue;if(ie||te){const Te=ue.caseSensitive?G:U??=G.toLowerCase();if(ie&&!Te.startsWith(ie)||te&&!Te.endsWith(te))continue}p.push({node:ue,index:x+1,skipped:R,depth:C+1,statics:O,dynamics:q+1,optionals:I,extract:H,rawParams:Y,parsedParams:F})}if(!W&&v.staticInsensitive){const V=v.staticInsensitive.get(U??=G.toLowerCase());V&&p.push({node:V,index:x+1,skipped:R,depth:C+1,statics:O+1,dynamics:q,optionals:I,extract:H,rawParams:Y,parsedParams:F})}if(!W&&v.static){const V=v.static.get(G);V&&p.push({node:V,index:x+1,skipped:R,depth:C+1,statics:O+1,dynamics:q,optionals:I,extract:H,rawParams:Y,parsedParams:F})}if(v.pathless){const V=C+1;for(let ue=v.pathless.length-1;ue>=0;ue--){const ie=v.pathless[ue];p.push({node:ie,index:x,skipped:R,depth:V,statics:O,dynamics:q,optionals:I,extract:H,rawParams:Y,parsedParams:F})}}}if(b&&f)return Ii(f,b)?b:f;if(b)return b;if(f)return f;if(r&&g){let w=g.index;for(let x=0;x<g.index;x++)w+=o[x].length;const v=w===a.length?"/":a.slice(w);return g.rawParams??={},g.rawParams["**"]=decodeURIComponent(v),g}return null}function Ou(a,o,i){try{const[r,c]=Rg(a,o,i);i.rawParams=r,i.extract=c;const d=i.node.parse(r);return i.parsedParams=Object.assign({},i.parsedParams,d),!0}catch{return null}}function Ii(a,o){return a?o.statics>a.statics||o.statics===a.statics&&(o.dynamics>a.dynamics||o.dynamics===a.dynamics&&(o.optionals>a.optionals||o.optionals===a.optionals&&((o.node.kind===Pa)>(a.node.kind===Pa)||o.node.kind===Pa==(a.node.kind===Pa)&&o.depth>a.depth))):!0}function Mr(a){return rd(a.filter(o=>o!==void 0).join("/"))}function rd(a){return a.replace(/\/{2,}/g,"/")}function zg(a){return a==="/"?a:a.replace(/^\/{1,}/,"")}function zn(a){const o=a.length;return o>1&&a[o-1]==="/"?a.replace(/\/{1,}$/,""):a}function Mg(a){return zn(zg(a))}function Ir(a,o){return a?.endsWith("/")&&a!=="/"&&a!==`${o}/`?a.slice(0,-1):a}function Gv(a,o,i){return Ir(a,i)===Ir(o,i)}function Qv({base:a,to:o,trailingSlash:i="never",cache:r}){const c=o.startsWith("/"),d=!c&&o===".";let h;if(r){h=c?o:d?a:a+"\0"+o;const w=r.get(h);if(w)return w}let p;
10if(d)p=a.split("/");else if(c)p=o.split("/");else{for(p=a.split("/");p.length>1&&qr(p)==="";)p.pop();const w=o.split("/");for(let v=0,x=w.length;v<x;v++){const R=w[v];R===""?v?v===x-1&&p.push(R):p=[R]:R===".."?p.pop():R==="."||p.push(R)}}p.length>1&&(qr(p)===""?i==="never"&&p.pop():i==="always"&&p.push(""));let f,g="";for(let w=0;w<p.length;w++){w>0&&(g+="/");const v=p[w];if(!v)continue;f=id(v,0,f);const x=f[0];if(x===Wo){g+=v;continue}const R=f[5],C=v.substring(0,f[1]),O=v.substring(f[4],R),q=v.substring(f[2],f[3]);x===Wa?g+=C||O?`${C}{$${q}}${O}`:`$${q}`:x===Fa?g+=C||O?`${C}{$}${O}`:"$":g+=`${C}{-$${q}}${O}`}g=rd(g);const b=g||"/";return h&&r&&r.set(h,b),b}function Vv(a){const o=new Map(a.map(c=>[encodeURIComponent(c),c])),i=Array.from(o.keys()).map(c=>c.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|"),r=new RegExp(i,"g");return c=>c.replace(r,d=>o.get(d)??d)}function Nu(a,o,i){const r=o[a];return typeof r!="string"?r:a==="_splat"?encodeURI(r):$v(r,i)}function Bu({path:a,params:o,decoder:i}){let r=!1;const c={};if(!a||a==="/")return{interpolatedPath:"/",usedParams:c,isMissingParams:r};if(!a.includes("$"))return{interpolatedPath:a,usedParams:c,isMissingParams:r};const d=a.length;let h=0,p,f="";for(;h<d;){const b=h;p=id(a,b,p);const w=p[5];if(h=w+1,b===w)continue;const v=p[0];if(v===Wo){f+="/"+a.substring(b,w);continue}if(v===Fa){const x=o._splat;c._splat=x,c["*"]=x;const R=a.substring(b,p[1]),C=a.substring(p[4],w);if(!x){r=!0,(R||C)&&(f+="/"+R+C);continue}const O=Nu("_splat",o,i);f+="/"+R+O+C;continue}if(v===Wa){const x=a.substring(p[2],p[3]);!r&&!(x in o)&&(r=!0),c[x]=o[x];const R=a.substring(b,p[1]),C=a.substring(p[4],w),O=Nu(x,o,i)??"undefined";f+="/"+R+O+C;continue}if(v===ns){const x=a.substring(p[2],p[3]),R=o[x];if(R==null)continue;c[x]=R;const C=a.substring(b,p[1]),O=a.substring(p[4],w),q=Nu(x,o,i)??"";f+="/"+C+q+O;continue}}return a.endsWith("/")&&(f+="/"),{usedParams:c,interpolatedPath:f||"/",isMissingParams:r}}function $v(a,o){const i=encodeURIComponent(a);return o?.(i)??i}function Go(a={}){if(a.isNotFound=!0,a.throw)throw a;return a}function mt(a){return!!a?.isNotFound}function Zv(){try{if(typeof window<"u"&&typeof window.sessionStorage=="object")return window.sessionStorage}catch{}}const Wr="tsr-scroll-restoration-v1_3",Kv=(a,o)=>{let i;return(...r)=>{i||(i=setTimeout(()=>{a(...r),i=null},o))}};function Xv(){const a=Zv();if(!a)return null;const o=a.getItem(Wr);let i=o?JSON.parse(o):{};return{state:i,set:r=>{i=ha(r,i)||i;try{a.setItem(Wr,JSON.stringify(i))}catch{console.warn("[ts-router] Could not persist scroll restoration state to sessionStorage.")}}}}const Tr=Xv(),Zu=a=>a.state.__TSR_key||a.href;function Jv(a){const o=[];let i;for(;i=a.parentNode;)o.push(`${a.tagName}:nth-child(${Array.prototype.indexOf.call(i.children,a)+1})`),a=i;return`${o.reverse().join(" > ")}`.toLowerCase()}let Fr=!1;function jg({storageKey:a,key:o,behavior:i,shouldScrollRestoration:r,scrollToTopSelectors:c,location:d}){let h;try{h=JSON.parse(sessionStorage.getItem(a)||"{}")}catch(g){console.error(g);return}const p=o||window.history.state?.__TSR_key,f=h[p];Fr=!0;e:{if(r&&f&&Object.keys(f).length>0){for(const w in f){const v=f[w];if(w==="window")window.scrollTo({top:v.scrollY,left:v.scrollX,behavior:i});else if(w){const x=document.querySelector(w);x&&(x.scrollLeft=v.scrollX,x.scrollTop=v.scrollY)}}break e}const g=(d??window.location).hash.split("#",2)[1];if(g){const w=window.history.state?.__hashScrollIntoViewOptions??!0;if(w){const v=document.getElementById(g);v&&v.scrollIntoView(w)}break e}const b={top:0,left:0,behavior:i};if(window.scrollTo(b),c)for(const w of c){if(w==="window")continue;const v=typeof w=="function"?w():document.querySelector(w);v&&v.scrollTo(b)}}Fr=!1}function e0(a,o){if(!Tr&&!a.isServer||((a.options.scrollRestoration??!1)&&(a.isScrollRestoring=!0),a.isServer||a.isScrollRestorationSetup||!Tr))return;a.isScrollRestorationSetup=!0,Fr=!1;const r=a.options.getScrollRestorationKey||Zu;window.history.scrollRestoration="manual";const c=d=>{if(Fr||!a.isScrollRestoring)return;let h="";if(d.target===document||d.target===window)h="window";else{const f=d.target.getAttribute("data-scroll-restoration-id");f?h=`[data-scroll-restoration-id="${f}"]`:h=Jv(d.target)}const p=r(a.state.location);Tr.set(f=>{const g=f[p]||={},b=g[h]||={};if(h==="window")b.scrollX=window.scrollX||0,b.scrollY=window.scrollY||0;else if(h){const w=document.querySelector(h);w&&(b.scrollX=w.scrollLeft||0,b.scrollY=w.scrollTop||0)}return f})};typeof document<"u"&&document.addEventListener("scroll",Kv(c,100),!0),a.subscribe("onRendered",d=>{const h=r(d.toLocation);if(!a.resetNextScroll){a.resetNextScroll=!0;return}typeof a.options.scrollRestoration=="function"&&!a.options.scrollRestoration({location:a.latestLocation})||(jg({storageKey:Wr,key:h,behavior:a.options.scrollRestorationBehavior,shouldScrollRestoration:a.isScrollRestoring,scrollToTopSelectors:a.options.scrollToTopSelectors,location:a.history.location}),a.isScrollRestoring&&Tr.set(p=>(p[h]||={},p)))})}function t0(a){if(typeof document<"u"&&document.querySelector){const o=a.state.location.state.__hashScrollIntoViewOptions??!0;if(o&&a.state.location.hash!==""){const i=document.getElementById(a.state.location.hash);i&&i.scrollIntoView(o)}}}function Og(a,o=String){const i=new URLSearchParams;for(const r in a){const c=a[r];c!==void 0&&i.set(r,o(c))}return i.toString()}function Lu(a){return a?a==="false"?!1:a==="true"?!0:+a*0===0&&+a+""===a?+a:a:""}function n0(a){const o=new URLSearchParams(a),i={};for(const[r,c]of o.entries()){const d=i[r];d==null?i[r]=Lu(c):Array.isArray(d)?d.push(Lu(c)):i[r]=[d,Lu(c)]}return i}const a0=i0(JSON.parse),o0=s0(JSON.stringify,JSON.parse);function i0(a){return o=>{o[0]==="?"&&(o=o.substring(1));const i=n0(o);for(const r in i){const c=i[r];if(typeof c=="string")try{i[r]=a(c)}catch{}}return i}}function s0(a,o){const i=typeof o=="function";function r(c){if(typeof c=="object"&&c!==null)try{return a(c)}catch{}else if(i&&typeof c=="string")try{return o(c),a(c)}catch{}return c}return c=>{const d=Og(c,r);return d?`?${d}`:""}}const Lt="__root__";
10function ld(a){if(a.statusCode=a.statusCode||a.code||307,typeof a.href=="string"&&Hr(a.href))throw new Error(`Redirect blocked: unsafe protocol in href "${a.href}". Only ${Tg.join(", ")} protocols are allowed.`);if(!a.reloadDocument&&typeof a.href=="string")try{new URL(a.href),a.reloadDocument=!0}catch{}const o=new Headers(a.headers);a.href&&o.get("Location")===null&&o.set("Location",a.href);const i=new Response(null,{status:a.statusCode,headers:o});if(i.options=a,a.throw)throw i;return i}function Vt(a){return a instanceof Response&&!!a.options}function r0(a){if(a!==null&&typeof a=="object"&&a.isSerializedRedirect)return ld(a)}const jr=a=>{if(!a.rendered)return a.rendered=!0,a.onReady?.()},el=(a,o)=>!!(a.preload&&!a.router.state.matches.some(i=>i.id===o)),Uo=(a,o,i=!0)=>{const r={...a.router.options.context??{}},c=i?o:o-1;for(let d=0;d<=c;d++){const h=a.matches[d];if(!h)continue;const p=a.router.getMatch(h.id);p&&Object.assign(r,p.__routeContext,p.__beforeLoadContext)}return r},Ng=(a,o)=>{const i=a.router.routesById[o.routeId??""]??a.router.routeTree;!i.options.notFoundComponent&&a.router.options?.defaultNotFoundComponent&&(i.options.notFoundComponent=a.router.options.defaultNotFoundComponent),Et(i.options.notFoundComponent);const r=a.matches.find(c=>c.routeId===i.id);Et(r,"Could not find match for route: "+i.id),a.updateMatch(r.id,c=>({...c,status:"notFound",error:o,isFetching:!1})),o.routerCode==="BEFORE_LOAD"&&i.parentRoute&&(o.routeId=i.parentRoute.id,Ng(a,o))},pa=(a,o,i)=>{if(!(!Vt(i)&&!mt(i))){if(Vt(i)&&i.redirectHandled&&!i.options.reloadDocument)throw i;if(o){o._nonReactive.beforeLoadPromise?.resolve(),o._nonReactive.loaderPromise?.resolve(),o._nonReactive.beforeLoadPromise=void 0,o._nonReactive.loaderPromise=void 0;const r=Vt(i)?"redirected":"notFound";o._nonReactive.error=i,a.updateMatch(o.id,c=>({...c,status:r,context:Uo(a,o.index),isFetching:!1,error:i})),mt(i)&&!i.routeId&&(i.routeId=o.routeId),o._nonReactive.loadPromise?.resolve()}throw Vt(i)?(a.rendered=!0,i.options._fromLocation=a.location,i.redirectHandled=!0,i=a.router.resolveRedirect(i),i):(Ng(a,i),i)}},Bg=(a,o)=>{const i=a.router.getMatch(o);return!!(!a.router.isServer&&i._nonReactive.dehydrated||a.router.isServer&&i.ssr===!1)},Wi=(a,o,i,r)=>{const{id:c,routeId:d}=a.matches[o],h=a.router.looseRoutesById[d];if(i instanceof Promise)throw i;i.routerCode=r,a.firstBadMatchIndex??=o,pa(a,a.router.getMatch(c),i);try{h.options.onError?.(i)}catch(p){i=p,pa(a,a.router.getMatch(c),i)}a.updateMatch(c,p=>(p._nonReactive.beforeLoadPromise?.resolve(),p._nonReactive.beforeLoadPromise=void 0,p._nonReactive.loadPromise?.resolve(),{...p,error:i,status:"error",isFetching:!1,updatedAt:Date.now(),abortController:new AbortController}))},l0=(a,o,i,r)=>{const c=a.router.getMatch(o),d=a.matches[i-1]?.id,h=d?a.router.getMatch(d):void 0;if(a.router.isShell()){c.ssr=r.id===Lt;return}if(h?.ssr===!1){c.ssr=!1;return}const p=x=>x===!0&&h?.ssr==="data-only"?"data-only":x,f=a.router.options.defaultSsr??!0;if(r.options.ssr===void 0){c.ssr=p(f);return}if(typeof r.options.ssr!="function"){c.ssr=p(r.options.ssr);return}const{search:g,params:b}=c,w={search:Cr(g,c.searchError),params:Cr(b,c.paramsError),location:a.location,matches:a.matches.map(x=>({index:x.index,pathname:x.pathname,fullPath:x.fullPath,staticData:x.staticData,id:x.id,routeId:x.routeId,search:Cr(x.search,x.searchError),params:Cr(x.params,x.paramsError),ssr:x.ssr}))},v=r.options.ssr(w);if(fa(v))return v.then(x=>{c.ssr=p(x??f)});c.ssr=p(v??f)},Lg=(a,o,i,r)=>{if(r._nonReactive.pendingTimeout!==void 0)return;const c=i.options.pendingMs??a.router.options.defaultPendingMs;if(!!(a.onReady&&!a.router.isServer&&!el(a,o)&&(i.options.loader||i.options.beforeLoad||qg(i))&&typeof c=="number"&&c!==1/0&&(i.options.pendingComponent??a.router.options?.defaultPendingComponent))){const h=setTimeout(()=>{jr(a)},c);r._nonReactive.pendingTimeout=h}},c0=(a,o,i)=>{const r=a.router.getMatch(o);if(!r._nonReactive.beforeLoadPromise&&!r._nonReactive.loaderPromise)return;Lg(a,o,i,r);const c=()=>{const d=a.router.getMatch(o);d.preload&&(d.status==="redirected"||d.status==="notFound")&&pa(a,d,d.error)};return r._nonReactive.beforeLoadPromise?r._nonReactive.beforeLoadPromise.then(c):c()},u0=(a,o,i,r)=>
10{const c=a.router.getMatch(o),d=c._nonReactive.loadPromise;c._nonReactive.loadPromise=Ia(()=>{d?.resolve()});const{paramsError:h,searchError:p}=c;h&&Wi(a,i,h,"PARSE_PARAMS"),p&&Wi(a,i,p,"VALIDATE_SEARCH"),Lg(a,o,r,c);const f=new AbortController,g=a.matches[i-1]?.id;(g?a.router.getMatch(g):void 0)?.context??a.router.options.context;let w=!1;const v=()=>{w||(w=!0,a.updateMatch(o,W=>({...W,isFetching:"beforeLoad",fetchCount:W.fetchCount+1,abortController:f})))},x=()=>{c._nonReactive.beforeLoadPromise?.resolve(),c._nonReactive.beforeLoadPromise=void 0,a.updateMatch(o,W=>({...W,isFetching:!1}))};if(!r.options.beforeLoad){qo(()=>{v(),x()});return}c._nonReactive.beforeLoadPromise=Ia();const R={...Uo(a,i,!1),...c.__routeContext},{search:C,params:O,cause:q}=c,I=el(a,o),H={search:C,abortController:f,params:O,preload:I,context:R,location:a.location,navigate:W=>a.router.navigate({...W,_fromLocation:a.location}),buildLocation:a.router.buildLocation,cause:I?"preload":q,matches:a.matches,...a.router.options.additionalContext},Y=W=>{if(W===void 0){qo(()=>{v(),x()});return}(Vt(W)||mt(W))&&(v(),Wi(a,i,W,"BEFORE_LOAD")),qo(()=>{v(),a.updateMatch(o,G=>({...G,__beforeLoadContext:W})),x()})};let F;try{if(F=r.options.beforeLoad(H),fa(F))return v(),F.catch(W=>{Wi(a,i,W,"BEFORE_LOAD")}).then(Y)}catch(W){v(),Wi(a,i,W,"BEFORE_LOAD")}Y(F)},d0=(a,o)=>{const{id:i,routeId:r}=a.matches[o],c=a.router.looseRoutesById[r],d=()=>{if(a.router.isServer){const f=l0(a,i,o,c);if(fa(f))return f.then(p)}return p()},h=()=>u0(a,i,o,c),p=()=>{if(Bg(a,i))return;const f=c0(a,i,c);return fa(f)?f.then(h):h()};return d()},h0=(a,o,i)=>{const r=a.router.getMatch(o);if(!r||!i.options.head&&!i.options.scripts&&!i.options.headers)return;const c={ssr:a.router.options.ssr,matches:a.matches,match:r,params:r.params,loaderData:r.loaderData};return Promise.all([i.options.head?.(c),i.options.scripts?.(c),i.options.headers?.(c)]).then(([d,h,p])=>{const f=d?.meta,g=d?.links,b=d?.scripts,w=d?.styles;return{meta:f,links:g,headScripts:b,headers:p,scripts:h,styles:w}})},Dg=(a,o,i,r)=>{const c=a.matchPromises[i-1],{params:d,loaderDeps:h,abortController:p,cause:f}=a.router.getMatch(o),g=Uo(a,i),b=el(a,o);return{params:d,deps:h,preload:!!b,parentMatchPromise:c,abortController:p,context:g,location:a.location,navigate:w=>a.router.navigate({...w,_fromLocation:a.location}),cause:b?"preload":f,route:r,...a.router.options.additionalContext}},Gf=async(a,o,i,r)=>{try{const c=a.router.getMatch(o);try{(!a.router.isServer||c.ssr===!0)&&Pg(r);const d=r.options.loader?.(Dg(a,o,i,r)),h=r.options.loader&&fa(d);if((h||r._lazyPromise||r._componentsPromise||r.options.head||r.options.scripts||r.options.headers||c._nonReactive.minPendingPromise)&&a.updateMatch(o,g=>({...g,isFetching:"loader"})),r.options.loader){const g=h?await d:d;pa(a,a.router.getMatch(o),g),g!==void 0&&a.updateMatch(o,b=>({...b,loaderData:g}))}r._lazyPromise&&await r._lazyPromise;const f=c._nonReactive.minPendingPromise;f&&await f,r._componentsPromise&&await r._componentsPromise,a.updateMatch(o,g=>({...g,error:void 0,context:Uo(a,i),status:"success",isFetching:!1,updatedAt:Date.now()}))}catch(d){let h=d;if(h?.name==="AbortError"){a.updateMatch(o,f=>({...f,status:f.status==="pending"?"success":f.status,isFetching:!1,context:Uo(a,i)}));return}const p=c._nonReactive.minPendingPromise;p&&await p,mt(d)&&await r.options.notFoundComponent?.preload?.(),pa(a,a.router.getMatch(o),d);try{r.options.onError?.(d)}catch(f){h=f,pa(a,a.router.getMatch(o),f)}a.updateMatch(o,f=>({...f,error:h,context:Uo(a,i),status:"error",isFetching:!1}))}}catch(c){const d=a.router.getMatch(o);d&&(d._nonReactive.loaderPromise=void 0),pa(a,d,c)}},p0=async(a,o)=>{const{id:i,routeId:r}=a.matches[o];let c=!1,d=!1;const h=a.router.looseRoutesById[r];if(Bg(a,i)){if(a.router.isServer)return a.router.getMatch(i)}else{const g=a.router.getMatch(i);if(g._nonReactive.loaderPromise){if(g.status==="success"&&!a.sync&&!g.preload)return g;await g._nonReactive.loaderPromise;const b=a.router.getMatch(i),w=b._nonReactive.error||b.error;w&&pa(a,b,w)}else{const b=Date.now()-g.updatedAt,w=el(a,i),v=w?h.options.preloadStaleTime??a.router.options.defaultPreloadStaleTime??3e4:h.options.staleTime??a.router.options.defaultStaleTime??0,x=h.options.shouldReload,R=typeof x=="function"?x(Dg(a,i,o,h)):x,C=!!w&&!a.router.state.matches.some(H=>H.id===i),O=a.router.getMatch(i);O._nonReactive.loaderPromise=Ia(),C!==O.preload&&a.updateMatch(i,H=>({...H,preload:C}));const{status:q,invalid:I}=O;c=q==="success"&&(I||(R??b>v)),w&&h.options.preload===!1||(c&&!a.sync?(d=!0,(async()=>{try{await Gf(a,i,o,h);const H=a.router.getMatch(i);H._nonReactive.loaderPromise?.resolve(),H._nonReactive.loadPromise?.resolve(),H._nonReactive.loaderPromise=void 0}catch(H){Vt(H)&&await a.router.navigate(H.options)}})()):(q!=="success"||c&&a.sync)&&await Gf(a,i,o,h))}}const p=a.router.getMatch(i);d||(p._nonReactive.loaderPromise?.resolve(),p._nonReactive.loadPromise?.resolve()),clearTimeout(p._nonReactive.pen
10dingTimeout),p._nonReactive.pendingTimeout=void 0,d||(p._nonReactive.loaderPromise=void 0),p._nonReactive.dehydrated=void 0;const f=d?p.isFetching:!1;return f!==p.isFetching||p.invalid!==!1?(a.updateMatch(i,g=>({...g,isFetching:f,invalid:!1})),a.router.getMatch(i)):p};async function Qf(a){const o=Object.assign(a,{matchPromises:[]});!o.router.isServer&&o.router.state.matches.some(i=>i._forcePending)&&jr(o);try{for(let p=0;p<o.matches.length;p++){const f=d0(o,p);fa(f)&&await f}const i=o.firstBadMatchIndex??o.matches.length;for(let p=0;p<i;p++)o.matchPromises.push(p0(o,p));const c=(await Promise.allSettled(o.matchPromises)).filter(p=>p.status==="rejected").map(p=>p.reason);let d;for(const p of c){if(Vt(p))throw p;!d&&mt(p)&&(d=p)}for(const p of o.matches){const{id:f,routeId:g}=p,b=o.router.looseRoutesById[g];try{const w=h0(o,f,b);if(w){const v=await w;o.updateMatch(f,x=>({...x,...v}))}}catch(w){console.error(`Error executing head for route ${g}:`,w)}}if(d)throw d;const h=jr(o);fa(h)&&await h}catch(i){if(mt(i)&&!o.preload){const r=jr(o);throw fa(r)&&await r,i}if(Vt(i))throw i}return o.matches}async function Pg(a){if(!a._lazyLoaded&&a._lazyPromise===void 0&&(a.lazyFn?a._lazyPromise=a.lazyFn().then(o=>{const{id:i,...r}=o.options;Object.assign(a.options,r),a._lazyLoaded=!0,a._lazyPromise=void 0}):a._lazyLoaded=!0),!a._componentsLoaded&&a._componentsPromise===void 0){const o=()=>{const i=[];for(const r of Ug){const c=a.options[r]?.preload;c&&i.push(c())}if(i.length)return Promise.all(i).then(()=>{a._componentsLoaded=!0,a._componentsPromise=void 0});a._componentsLoaded=!0,a._componentsPromise=void 0};a._componentsPromise=a._lazyPromise?a._lazyPromise.then(o):o()}return a._componentsPromise}function Cr(a,o){return o?{status:"error",error:o}:{status:"success",value:a}}function qg(a){for(const o of Ug)if(a.options[o]?.preload)return!0;return!1}const Ug=["component","errorComponent","pendingComponent","notFoundComponent"];function m0(a){return{input:({url:o})=>{for(const i of a)o=Ku(i,o);return o},output:({url:o})=>{for(let i=a.length-1;i>=0;i--)o=Hg(a[i],o);return o}}}function f0(a){const o=Mg(a.basepath),i=`/${o}`,r=`${i}/`,c=a.caseSensitive?i:i.toLowerCase(),d=a.caseSensitive?r:r.toLowerCase();return{input:({url:h})=>{const p=a.caseSensitive?h.pathname:h.pathname.toLowerCase();return p===c?h.pathname="/":p.startsWith(d)&&(h.pathname=h.pathname.slice(i.length)),h},output:({url:h})=>(h.pathname=Mr(["/",o,h.pathname]),h)}}function Ku(a,o){const i=a?.input?.({url:o});if(i){if(typeof i=="string")return new URL(i);if(i instanceof URL)return i}return o}function Hg(a,o){const i=a?.output?.({url:o});if(i){if(typeof i=="string")return new URL(i);if(i instanceof URL)return i}return o}function g0(a){return a instanceof Error?{name:a.name,message:a.message}:{data:a}}function Ya(a){const o=a.resolvedLocation,i=a.location,r=o?.pathname!==i.pathname,c=o?.href!==i.href,d=o?.hash!==i.hash;return{fromLocation:o,toLocation:i,pathChanged:r,hrefChanged:c,hashChanged:d}}class y0{constructor(o){this.tempLocationKey=`${Math.round(Math.random()*1e7)}`,this.resetNextScroll=!0,this.shouldViewTransition=void 0,this.isViewTransitionTypesSupported=void 0,this.subscribers=new Set,this.isScrollRestoring=!1,this.isScrollRestorationSetup=!1,this.startTransition=i=>i(),this.update=i=>{i.notFoundRoute&&console.warn("The notFoundRoute API is deprecated and will be removed in the next major version. See https://tanstack.com/router/v1/docs/framework/react/guide/not-found-errors#migrating-from-notfoundroute for more info.");const r=this.options,c=this.basepath??r?.basepath??"/",d=this.basepath===void 0,h=r?.rewrite;this.options={...r,...i},this.isServer=this.options.isServer??typeof document>"u",this.options.pathParamsAllowedCharacters&&(this.pathParamsDecoder=Vv(this.options.pathParamsAllowedCharacters)),(!this.history||this.options.history&&this.options.history!==this.history)&&(this.options.history?this.history=this.options.history:this.isServer||(this.history=Cv())),this.origin=this.options.origin,this.origin||(!this.isServer&&window?.origin&&window.origin!=="null"?this.origin=window.origin:this.origin="http://localhost"),this.history&&this.updateLatestLocation(),this.options.routeTree!==this.routeTree&&(this.routeTree=this.options.routeTree,this.buildRouteTree()),!this.__store&&this.latestLocation&&(this.__store=new Ev(b0(this.latestLocation),{onUpdate:()=>{this.__store.state={...this.state,cachedMatches:this.state.cachedMatches.filter(v=>!["redirected"].includes(v.status))}}}),e0(this));let p=!1;const f=this.options.basepath??"/",g=this.options.rewrite;if(d||c!==f||h!==g){this.basepath=f;const v=[];Mg(f)!==""&&v.push(f0({basepath:f})),g&&v.push(g),this.rewrite=v.length===0?void 0:v.length===1?v[0]:m0(v),this.history&&this.updateLatestLocation(),p=!0}p&&this.__store&&(this.__store.state={...this.state,location:this.latestLocation}),typeof window<"u"&&"CSS"in window&&typeof window.CSS?.supports=="function"&&(this.isViewTransitionTypesSupported=window.CSS.supports("selector(:active-view-transition-type(a)"))},this.updateLatestLocation=()=>{this.latestLocation=this.parseLocation(this.history.location,this.latestLocation)},this.buildRouteTree=()=>{const{routesById:i,routesByPath:r,processedTree:c}=Yv(this.routeTree,this.options.caseSensitive,(h,p)=>{h.init({originalIndex:p})});this.options.routeMasks&&Dv(this.options.routeMasks,c),this.routesById=i,this.routesByPath=r,this.processedTree=c;const d=this.options.notFoundRoute;d&&(d.init({originalIndex:99999999999}),this.routesById[d.id]=d)},this.subscribe=(i,r)=>{const c={eventType:i,fn:r};return this.subscribers.add(c),()=>{this.subscribers.delete(c)}},this.emit=i=>
10{this.subscribers.forEach(r=>{r.eventType===i.type&&r.fn(i)})},this.parseLocation=(i,r)=>{const c=({href:f,state:g})=>{const b=new URL(f,this.origin),w=Ku(this.rewrite,b),v=this.options.parseSearch(w.search),x=this.options.stringifySearch(v);return w.search=x,{href:w.href.replace(w.origin,""),publicHref:f,url:w,pathname:zu(w.pathname),searchStr:x,search:Qt(r?.search,v),hash:zu(w.hash.split("#").reverse()[0]??""),state:Qt(r?.state,g)}},d=c(i),{__tempLocation:h,__tempKey:p}=d.state;if(h&&(!p||p===this.tempLocationKey)){const f=c(h);return f.state.key=d.state.key,f.state.__TSR_key=d.state.__TSR_key,delete f.state.__tempLocation,{...f,maskedLocation:d}}return d},this.resolvePathCache=Yr(1e3),this.resolvePathWithBase=(i,r)=>Qv({base:i,to:rd(r),trailingSlash:this.options.trailingSlash,cache:this.resolvePathCache}),this.matchRoutes=(i,r,c)=>typeof i=="string"?this.matchRoutesInternal({pathname:i,search:r},c):this.matchRoutesInternal(i,r),this.getMatchedRoutes=i=>v0({pathname:i,routesById:this.routesById,processedTree:this.processedTree}),this.cancelMatch=i=>{const r=this.getMatch(i);r&&(r.abortController.abort(),clearTimeout(r._nonReactive.pendingTimeout),r._nonReactive.pendingTimeout=void 0)},this.cancelMatches=()=>{const i=this.state.matches.filter(d=>d.status==="pending"),r=this.state.matches.filter(d=>d.isFetching==="loader");new Set([...this.state.pendingMatches??[],...i,...r]).forEach(d=>{this.cancelMatch(d.id)})},this.buildLocation=i=>{const r=(d={})=>{const h=d._fromLocation||this.pendingBuiltLocation||this.latestLocation,p=this.matchRoutes(h,{_buildLocation:!0}),f=qr(p);d.from;const g=d.unsafeRelative==="path"?h.pathname:d.from??f.fullPath,b=this.resolvePathWithBase(g,"."),w=f.search,v={...f.params},x=d.to?this.resolvePathWithBase(b,`${d.to}`):this.resolvePathWithBase(b,"."),R=d.params===!1||d.params===null?{}:(d.params??!0)===!0?v:Object.assign(v,ha(d.params,v)),C=Bu({path:x,params:R}).interpolatedPath,O=this.getMatchedRoutes(C);let q=O.matchedRoutes;if((O.foundRoute?O.foundRoute.path!=="/"&&O.routeParams["**"]:zn(C))&&(this.options.notFoundRoute?q=[...q,this.options.notFoundRoute]:Vf(this.options.notFoundMode,q)),Object.keys(R).length>0)for(const te of q){const Te=te.options.params?.stringify??te.options.stringifyParams;Te&&Object.assign(R,Te(R))}const H=i.leaveParams?x:zu(Bu({path:x,params:R,decoder:this.pathParamsDecoder}).interpolatedPath);let Y=w;if(i._includeValidateSearch&&this.options.search?.strict){const te={};q.forEach(Te=>{if(Te.options.validateSearch)try{Object.assign(te,Xu(Te.options.validateSearch,{...te,...Y}))}catch{}}),Y=te}Y=S0({search:Y,dest:d,destRoutes:q,_includeValidateSearch:i._includeValidateSearch}),Y=Qt(w,Y);const F=this.options.stringifySearch(Y),W=d.hash===!0?h.hash:d.hash?ha(d.hash,h.hash):void 0,G=W?`#${W}`:"";let U=d.state===!0?h.state:d.state?ha(d.state,h.state):{};U=Qt(h.state,U);const V=`${H}${F}${G}`,ue=new URL(V,this.origin),ie=Hg(this.rewrite,ue);return{publicHref:ie.pathname+ie.search+ie.hash,href:V,url:ie,pathname:H,search:Y,searchStr:F,state:U,hash:W??"",unmaskOnReload:d.unmaskOnReload}},c=(d={},h)=>{const p=r(d);let f=h?r(h):void 0;if(!f){const g={};if(this.options.routeMasks){const b=Pv(p.pathname,this.processedTree);if(b){Object.assign(g,b.rawParams);const{from:w,params:v,...x}=b.route,R=v===!1||v===null?{}:(v??!0)===!0?g:Object.assign(g,ha(v,g));h={from:i.from,...x,params:R},f=r(h)}}}return f&&(p.maskedLocation=f),p};return i.mask?c(i,{from:i.from,...i.mask}):c(i)},this.commitLocation=async({viewTransition:i,ignoreBlocker:r,...c})=>{const d=()=>{const f=["key","__TSR_key","__TSR_index","__hashScrollIntoViewOptions"];f.forEach(b=>{c.state[b]=this.latestLocation.state[b]});const g=Ha(c.state,this.latestLocation.state);return f.forEach(b=>{delete c.state[b]}),g},h=zn(this.latestLocation.href)===zn(c.href),p=this.commitLocationPromise;if(this.commitLocationPromise=Ia(()=>{p?.resolve()}),h&&d())this.load();else{let{maskedLocation:f,hashScrollIntoView:g,url:b,...w}=c;f&&(w={...f,state:{...f.state,__tempKey:void 0,__tempLocation:{...w,search:w.searchStr,state:{...w.state,__tempKey:void 0,__tempLocation:void 0,__TSR_key:void 0,key:void 0}}}},(w.unmaskOnReload??this.options.unmaskOnReload??!1)&&(w.state.__tempKey=this.tempLocationKey)),w.state.__hashScrollIntoViewOptions=g??this.options.defaultHashScrollIntoView??!0,this.shouldViewTransition=i,this.history[c.replace?"replace":"push"](w.publicHref,w.state,{ignoreBlocker:r})}return this.resetNextScroll=c.resetScroll??!0,this.history.subscribers.size||this.load(),this.commitLocationPromise},this.buildAndCommitLocation=({replace:i,resetScroll:r,hashScrollIntoView:c,viewTransition:d,ignoreBlocker:h,href:p,...f}={})=>
10{if(p){const w=this.history.location.state.__TSR_index,v=Pr(p,{__TSR_index:i?w:w+1}),x=new URL(v.pathname,this.origin),R=Ku(this.rewrite,x);f.to=R.pathname,f.search=this.options.parseSearch(v.search),f.hash=v.hash.slice(1)}const g=this.buildLocation({...f,_includeValidateSearch:!0});this.pendingBuiltLocation=g;const b=this.commitLocation({...g,viewTransition:d,replace:i,resetScroll:r,hashScrollIntoView:c,ignoreBlocker:h});return Promise.resolve().then(()=>{this.pendingBuiltLocation===g&&(this.pendingBuiltLocation=void 0)}),b},this.navigate=async({to:i,reloadDocument:r,href:c,publicHref:d,...h})=>{let p=!1;if(c)try{new URL(`${c}`),p=!0}catch{}if(p&&!r&&(r=!0),r){if(i!==void 0||!c){const g=this.buildLocation({to:i,...h});c=c??g.url.href,d=d??g.url.href}const f=!p&&d?d:c;if(Hr(f))return Promise.resolve();if(!h.ignoreBlocker){const b=this.history.getBlockers?.()??[];for(const w of b)if(w?.blockerFn&&await w.blockerFn({currentLocation:this.latestLocation,nextLocation:this.latestLocation,action:"PUSH"}))return Promise.resolve()}return h.replace?window.location.replace(f):window.location.href=f,Promise.resolve()}return this.buildAndCommitLocation({...h,href:c,to:i,_isNavigate:!0})},this.beforeLoad=()=>{if(this.cancelMatches(),this.updateLatestLocation(),this.isServer){const r=this.buildLocation({to:this.latestLocation.pathname,search:!0,params:!0,hash:!0,state:!0,_includeValidateSearch:!0});if(this.latestLocation.publicHref!==r.publicHref||r.url.origin!==this.origin){const c=this.getParsedLocationHref(r);throw ld({href:c})}}const i=this.matchRoutes(this.latestLocation);this.__store.setState(r=>({...r,status:"pending",statusCode:200,isLoading:!0,location:this.latestLocation,pendingMatches:i,cachedMatches:r.cachedMatches.filter(c=>!i.some(d=>d.id===c.id))}))},this.load=async i=>{let r,c,d;for(d=new Promise(p=>{this.startTransition(async()=>{try{this.beforeLoad();const f=this.latestLocation,g=this.state.resolvedLocation;this.state.redirect||this.emit({type:"onBeforeNavigate",...Ya({resolvedLocation:g,location:f})}),this.emit({type:"onBeforeLoad",...Ya({resolvedLocation:g,location:f})}),await Qf({router:this,sync:i?.sync,matches:this.state.pendingMatches,location:f,updateMatch:this.updateMatch,onReady:async()=>{this.startTransition(()=>{this.startViewTransition(async()=>{let b=[],w=[],v=[];qo(()=>{this.__store.setState(x=>{const R=x.matches,C=x.pendingMatches||x.matches;return b=R.filter(O=>!C.some(q=>q.id===O.id)),w=C.filter(O=>!R.some(q=>q.id===O.id)),v=C.filter(O=>R.some(q=>q.id===O.id)),{...x,isLoading:!1,loadedAt:Date.now(),matches:C,pendingMatches:void 0,cachedMatches:[...x.cachedMatches,...b.filter(O=>O.status!=="error"&&O.status!=="notFound")]}}),this.clearExpiredCache()}),[[b,"onLeave"],[w,"onEnter"],[v,"onStay"]].forEach(([x,R])=>{x.forEach(C=>{this.looseRoutesById[C.routeId].options[R]?.(C)})})})})}})}catch(f){Vt(f)?(r=f,this.isServer||this.navigate({...r.options,replace:!0,ignoreBlocker:!0})):mt(f)&&(c=f),this.__store.setState(g=>({...g,statusCode:r?r.status:c?404:g.matches.some(b=>b.status==="error")?500:200,redirect:r}))}this.latestLoadPromise===d&&(this.commitLocationPromise?.resolve(),this.latestLoadPromise=void 0,this.commitLocationPromise=void 0),p()})}),this.latestLoadPromise=d,await d;this.latestLoadPromise&&d!==this.latestLoadPromise;)await this.latestLoadPromise;let h;this.hasNotFoundMatch()?h=404:this.__store.state.matches.some(p=>p.status==="error")&&(h=500),h!==void 0&&this.__store.setState(p=>({...p,statusCode:h}))},this.startViewTransition=i=>{const r=this.shouldViewTransition??this.options.defaultViewTransition;if(delete this.shouldViewTransition,r&&typeof document<"u"&&"startViewTransition"in document&&typeof document.startViewTransition=="function"){let c;if(typeof r=="object"&&this.isViewTransitionTypesSupported){const d=this.latestLocation,h=this.state.resolvedLocation,p=typeof r.types=="function"?r.types(Ya({resolvedLocation:h,location:d})):r.types;if(p===!1){i();return}c={update:i,types:p}}else c=i;document.startViewTransition(c)}else i()},this.updateMatch=(i,r)=>{this.startTransition(()=>{const c=this.state.pendingMatches?.some(d=>d.id===i)?"pendingMatches":this.state.matches.some(d=>d.id===i)?"matches":this.state.cachedMatches.some(d=>d.id===i)?"cachedMatches":"";c&&this.__store.setState(d=>({...d,[c]:d[c]?.map(h=>h.id===i?r(h):h)}))})},this.getMatch=i=>{const r=c=>c.id===i;return this.state.cachedMatches.find(r)??this.state.pendingMatches?.find(r)??this.state.matches.find(r)},this.invalidate=i=>{const r=c=>i?.filter?.(c)??!0?{...c,invalid:!0,...i?.forcePending||c.status==="error"||c.status==="notFound"?{status:"pending",error:void 0}:void 0}:c;return this.__store.setState(c=>({...c,matches:c.matches.map(r),cachedMatches:c.cachedMatches.map(r),pendingMatches:c.pendingMatches?.map(r)})),this.shouldViewTransition=!1,this.load({sync:i?.sync})},this.getParsedLocationHref=i=>{let r=i.url.href;return this.origin&&i.url.origin===this.origin&&(r=r.replace(this.origin,"")||"/"),r},this.resolveRedirect=i=>{const r=i.headers.get("Location");if(i.options.href){if(r)try{const c=new URL(r);
10if(this.origin&&c.origin===this.origin){const d=c.pathname+c.search+c.hash;i.options.href=d,i.headers.set("Location",d)}}catch{}}else{const c=this.buildLocation(i.options),d=this.getParsedLocationHref(c);i.options.href=d,i.headers.set("Location",d)}return i.headers.get("Location")||i.headers.set("Location",i.options.href),i},this.clearCache=i=>{const r=i?.filter;r!==void 0?this.__store.setState(c=>({...c,cachedMatches:c.cachedMatches.filter(d=>!r(d))})):this.__store.setState(c=>({...c,cachedMatches:[]}))},this.clearExpiredCache=()=>{const i=r=>{const c=this.looseRoutesById[r.routeId];if(!c.options.loader)return!0;const d=(r.preload?c.options.preloadGcTime??this.options.defaultPreloadGcTime:c.options.gcTime??this.options.defaultGcTime)??300*1e3;return r.status==="error"?!0:Date.now()-r.updatedAt>=d};this.clearCache({filter:i})},this.loadRouteChunk=Pg,this.preloadRoute=async i=>{const r=this.buildLocation(i);let c=this.matchRoutes(r,{throwOnError:!0,preload:!0,dest:i});const d=new Set([...this.state.matches,...this.state.pendingMatches??[]].map(p=>p.id)),h=new Set([...d,...this.state.cachedMatches.map(p=>p.id)]);qo(()=>{c.forEach(p=>{h.has(p.id)||this.__store.setState(f=>({...f,cachedMatches:[...f.cachedMatches,p]}))})});try{return c=await Qf({router:this,matches:c,location:r,preload:!0,updateMatch:(p,f)=>{d.has(p)?c=c.map(g=>g.id===p?f(g):g):this.updateMatch(p,f)}}),c}catch(p){if(Vt(p))return p.options.reloadDocument?void 0:await this.preloadRoute({...p.options,_fromLocation:r});mt(p)||console.error(p);return}},this.matchRoute=(i,r)=>{const c={...i,to:i.to?this.resolvePathWithBase(i.from||"",i.to):void 0,params:i.params||{},leaveParams:!0},d=this.buildLocation(c);if(r?.pending&&this.state.status!=="pending")return!1;const p=(r?.pending===void 0?!this.state.isLoading:r.pending)?this.latestLocation:this.state.resolvedLocation||this.state.location,f=qv(d.pathname,r?.caseSensitive??!1,r?.fuzzy??!1,p.pathname,this.processedTree);return!f||i.params&&!Ha(f.rawParams,i.params,{partial:!0})?!1:r?.includeSearch??!0?Ha(p.search,d.search,{partial:!0})?f.rawParams:!1:f.rawParams},this.hasNotFoundMatch=()=>this.__store.state.matches.some(i=>i.status==="notFound"||i.globalNotFound),this.update({defaultPreloadDelay:50,defaultPendingMs:1e3,defaultPendingMinMs:500,context:void 0,...o,caseSensitive:o.caseSensitive??!1,notFoundMode:o.notFoundMode??"fuzzy",stringifySearch:o.stringifySearch??o0,parseSearch:o.parseSearch??a0}),typeof document<"u"&&(self.__TSR_ROUTER__=this)}isShell(){return!!this.options.isShell}isPrerendering(){return!!this.options.isPrerendering}get state(){return this.__store.state}get looseRoutesById(){return this.routesById}matchRoutesInternal(o,i){const r=this.getMatchedRoutes(o.pathname),{foundRoute:c,routeParams:d,parsedParams:h}=r;let{matchedRoutes:p}=r,f=!1;(c?c.path!=="/"&&d["**"]:zn(o.pathname))&&(this.options.notFoundRoute?p=[...p,this.options.notFoundRoute]:f=!0);const g=f?Vf(this.options.notFoundMode,p):void 0,b=[],w=v=>v?.id?v.context??this.options.context??void 0:this.options.context??void 0;return p.forEach((v,x)=>{const R=b[x-1],[C,O,q]=(()=>{const ke=R?.search??o.search,Le=R?._strictSearch??void 0;try{const B=Xu(v.options.validateSearch,{...ke})??void 0;return[{...ke,...B},{...Le,...B},void 0]}catch(B){let Q=B;if(B instanceof Gr||(Q=new Gr(B.message,{cause:B})),i?.throwOnError)throw Q;return[ke,{},Q]}})(),I=v.options.loaderDeps?.({search:C})??"",H=I?JSON.stringify(I):"",{interpolatedPath:Y,usedParams:F}=Bu({path:v.fullPath,params:d,decoder:this.pathParamsDecoder}),W=v.id+Y+H,G=this.getMatch(W),U=this.state.matches.find(ke=>ke.routeId===v.id),V=G?._strictParams??F;let ue;if(!G)if(v.options.skipRouteOnParseError)for(const ke in F)ke in h&&(V[ke]=h[ke]);
10else{const ke=v.options.params?.parse??v.options.parseParams;if(ke)try{Object.assign(V,ke(V))}catch(Le){if(mt(Le)||Vt(Le)?ue=Le:ue=new w0(Le.message,{cause:Le}),i?.throwOnError)throw ue}}Object.assign(d,V);const ie=U?"stay":"enter";let te;if(G)te={...G,cause:ie,params:U?Qt(U.params,d):d,_strictParams:V,search:Qt(U?U.search:G.search,C),_strictSearch:O};else{const ke=v.options.loader||v.options.beforeLoad||v.lazyFn||qg(v)?"pending":"success";te={id:W,ssr:this.isServer?void 0:v.options.ssr,index:x,routeId:v.id,params:U?Qt(U.params,d):d,_strictParams:V,pathname:Y,updatedAt:Date.now(),search:U?Qt(U.search,C):C,_strictSearch:O,searchError:void 0,status:ke,isFetching:!1,error:void 0,paramsError:ue,__routeContext:void 0,_nonReactive:{loadPromise:Ia()},__beforeLoadContext:void 0,context:{},abortController:new AbortController,fetchCount:0,cause:ie,loaderDeps:U?Qt(U.loaderDeps,I):I,invalid:!1,preload:!1,links:void 0,scripts:void 0,headScripts:void 0,meta:void 0,staticData:v.options.staticData||{},fullPath:v.fullPath}}i?.preload||(te.globalNotFound=g===v.id),te.searchError=q;const Te=w(R);te.context={...Te,...te.__routeContext,...te.__beforeLoadContext},b.push(te)}),b.forEach((v,x)=>{const R=this.looseRoutesById[v.routeId];if(!this.getMatch(v.id)&&i?._buildLocation!==!0){const O=b[x-1],q=w(O);if(R.options.context){const I={deps:v.loaderDeps,params:v.params,context:q??{},location:o,navigate:H=>this.navigate({...H,_fromLocation:o}),buildLocation:this.buildLocation,cause:v.cause,abortController:v.abortController,preload:!!v.preload,matches:b};v.__routeContext=R.options.context(I)??void 0}v.context={...q,...v.__routeContext,...v.__beforeLoadContext}}}),b}}class Gr extends Error{}class w0 extends Error{}function b0(a){return{loadedAt:0,isLoading:!1,isTransitioning:!1,status:"idle",resolvedLocation:void 0,location:a,matches:[],pendingMatches:[],cachedMatches:[],statusCode:200}}function Xu(a,o){if(a==null)return{};if("~standard"in a){const i=a["~standard"].validate(o);if(i instanceof Promise)throw new Gr("Async validation not supported");if(i.issues)throw new Gr(JSON.stringify(i.issues,void 0,2),{cause:i});return i.value}return"parse"in a?a.parse(o):typeof a=="function"?a(o):{}}function v0({pathname:a,routesById:o,processedTree:i}){const r={},c=zn(a);let d,h;const p=Uv(c,i,!0);return p&&(d=p.route,Object.assign(r,p.rawParams),h=Object.assign({},p.parsedParams)),{matchedRoutes:p?.branch||[o[Lt]],routeParams:r,foundRoute:d,parsedParams:h}}function S0({search:a,dest:o,destRoutes:i,_includeValidateSearch:r}){return A0(i)(a,o,r??!1)}function A0(a){const o={dest:null,_includeValidateSearch:!1,middlewares:[]};for(const c of a){if("search"in c.options)c.options.search?.middlewares&&o.middlewares.push(...c.options.search.middlewares);else if(c.options.preSearchFilters||c.options.postSearchFilters){const d=({search:h,next:p})=>{let f=h;"preSearchFilters"in c.options&&c.options.preSearchFilters&&(f=c.options.preSearchFilters.reduce((b,w)=>w(b),h));const g=p(f);return"postSearchFilters"in c.options&&c.options.postSearchFilters?c.options.postSearchFilters.reduce((b,w)=>w(b),g):g};o.middlewares.push(d)}if(c.options.validateSearch){const d=({search:h,next:p})=>{const f=p(h);if(!o._includeValidateSearch)return f;try{return{...f,...Xu(c.options.validateSearch,f)??void 0}}catch{return f}};o.middlewares.push(d)}}const i=({search:c})=>{const d=o.dest;return d.search?d.search===!0?c:ha(d.search,c):{}};o.middlewares.push(i);const r=(c,d,h)=>{if(c>=h.length)return d;const p=h[c];return p({search:d,next:g=>r(c+1,g,h)})};return function(d,h,p){return o.dest=h,o._includeValidateSearch=p,r(0,d,o.middlewares)}}function Vf(a,o){if(a!=="root")for(let i=o.length-1;i>=0;i--){const r=o[i];if(r.children)return r.id}return Lt}const ln=Symbol.for("TSR_DEFERRED_PROMISE");function k0(a,o){const i=a;return i[ln]||(i[ln]={status:"pending"},i.then(r=>{i[ln].status="success",i[ln].data=r}).catch(r=>{i[ln].status="error",i[ln].error={data:g0(r),__isServerError:!0}})),i}const x0="Error preloading route! ☝️";class Yg{constructor(o){if(this.init=i=>{this.originalIndex=i.originalIndex;const r=this.options,c=!r?.path&&!r?.id;this.parentRoute=this.options.getParentRoute?.(),c?this._path=Lt:this.parentRoute||Et(!1);let d=c?Lt:r?.path;d&&d!=="/"&&(d=zg(d));const h=r?.id||d;let p=c?Lt:Mr([this.parentRoute.id===Lt?"":this.parentRoute.id,h]);d===Lt&&(d="/"),p!==Lt&&(p=Mr(["/",p]));const f=p===Lt?"/":Mr([this.parentRoute.fullPath,d]);this._path=d,this._id=p,this._fullPath=f,this._to=zn(f)},this.addChildren=i=>this._addFileChildren(i),this._addFileChildren=i=>(Array.isArray(i)&&(this.children=i),typeof i=="object"&&i!==null&&(this.children=Object.values(i)),this),this._addFileTypes=()=>this,this.updateLoader=i=>(Object.assign(this.options,i),this),this.update=i=>(Object.assign(this.options,i),this),this.lazy=i=>(this.lazyFn=i,this),this.redirect=i=>ld({from:this.fullPath,...i}),this.options=o||{},this.isRoot=!o?.getParentRoute,o?.id&&o?.path)throw new Error("Route cannot have both an 'id' and a 'path' option.")}get to(){return this._to}get id(){return this._id}get path(){return this._path}get fullPath(){return this._fullPath}}class E0 extends Yg{constructor(o){super(o)}}var T0=(a=>(a[a.AggregateError=1]="AggregateError",a[a.ArrowFunction=2]="ArrowFunction",a[a.ErrorPrototypeStack=4]="ErrorPrototypeStack",a[a.ObjectAssign=8]="Ob
10jectAssign",a[a.BigIntTypedArray=16]="BigIntTypedArray",a[a.RegExp=32]="RegExp",a))(T0||{}),On=Symbol.asyncIterator,Ig=Symbol.hasInstance,Ho=Symbol.isConcatSpreadable,Nn=Symbol.iterator,Wg=Symbol.match,Fg=Symbol.matchAll,Gg=Symbol.replace,Qg=Symbol.search,Vg=Symbol.species,$g=Symbol.split,Zg=Symbol.toPrimitive,Yo=Symbol.toStringTag,Kg=Symbol.unscopables,Xg={[On]:0,[Ig]:1,[Ho]:2,[Nn]:3,[Wg]:4,[Fg]:5,[Gg]:6,[Qg]:7,[Vg]:8,[$g]:9,[Zg]:10,[Yo]:11,[Kg]:12},C0={0:On,1:Ig,2:Ho,3:Nn,4:Wg,5:Fg,6:Gg,7:Qg,8:Vg,9:$g,10:Zg,11:Yo,12:Kg},S=void 0,_0={2:!0,3:!1,1:S,0:null,4:-0,5:Number.POSITIVE_INFINITY,6:Number.NEGATIVE_INFINITY,7:Number.NaN},R0={0:"Error",1:"EvalError",2:"RangeError",3:"ReferenceError",4:"SyntaxError",5:"TypeError",6:"URIError"},z0={0:Error,1:EvalError,2:RangeError,3:ReferenceError,4:SyntaxError,5:TypeError,6:URIError};function ve(a,o,i,r,c,d,h,p,f,g,b,w){return{t:a,i:o,s:i,c:r,m:c,p:d,e:h,a:p,f,b:g,o:b,l:w}}function ga(a){return ve(2,S,a,S,S,S,S,S,S,S,S,S)}var Jg=ga(2),ey=ga(3),M0=ga(1),j0=ga(0),O0=ga(4),N0=ga(5),B0=ga(6),L0=ga(7);function D0(a){switch(a){case'"':return'\\"';case"\\":return"\\\\";case`
11`:return"\\n";case"\r":return"\\r";case"\b":return"\\b";case"	":return"\\t";case"\f":return"\\f";case"<":return"\\x3C";case"\u2028":return"\\u2028";case"\u2029":return"\\u2029";default:return S}}function ya(a){let o="",i=0,r;for(let c=0,d=a.length;c<d;c++)r=D0(a[c]),r&&(o+=a.slice(i,c)+r,i=c+1);return i===0?o=a:o+=a.slice(i),o}function P0(a){switch(a){case"\\\\":return"\\";case'\\"':return'"';case"\\n":return`
12`;case"\\r":return"\r";case"\\b":return"\b";case"\\t":return"	";case"\\f":return"\f";case"\\x3C":return"<";case"\\u2028":return"\u2028";case"\\u2029":return"\u2029";default:return a}}function Qa(a){return a.replace(/(\\\\|\\"|\\n|\\r|\\b|\\t|\\f|\\u2028|\\u2029|\\x3C)/g,P0)}var _r="__SEROVAL_REFS__",ty=new Map,Po=new Map;function ny(a){return ty.has(a)}function q0(a){return Po.has(a)}function U0(a){if(ny(a))return ty.get(a);throw new y1(a)}function H0(a){if(q0(a))return Po.get(a);throw new w1(a)}typeof globalThis<"u"?Object.defineProperty(globalThis,_r,{value:Po,configurable:!0,writable:!1,enumerable:!1}):typeof window<"u"?Object.defineProperty(window,_r,{value:Po,configurable:!0,writable:!1,enumerable:!1}):typeof self<"u"?Object.defineProperty(self,_r,{value:Po,configurable:!0,writable:!1,enumerable:!1}):typeof global<"u"&&Object.defineProperty(global,_r,{value:Po,configurable:!0,writable:!1,enumerable:!1});function cd(a){return a instanceof EvalError?1:a instanceof RangeError?2:a instanceof ReferenceError?3:a instanceof SyntaxError?4:a instanceof TypeError?5:a instanceof URIError?6:0}function Y0(a){let o=R0[cd(a)];return a.name!==o?{name:a.name}:a.constructor.name!==o?{name:a.constructor.name}:{}}function ay(a,o){let i=Y0(a),r=Object.getOwnPropertyNames(a);for(let c=0,d=r.length,h;c<d;c++)h=r[c],h!=="name"&&h!=="message"&&(h==="stack"?o&4&&(i=i||{},i[h]=a[h]):(i=i||{},i[h]=a[h]));return i}function oy(a){return Object.isFrozen(a)?3:Object.isSealed(a)?2:Object.isExtensible(a)?0:1}function I0(a){switch(a){case Number.POSITIVE_INFINITY:return N0;case Number.NEGATIVE_INFINITY:return B0}return a!==a?L0:Object.is(a,-0)?O0:ve(0,S,a,S,S,S,S,S,S,S,S,S)}function iy(a){return ve(1,S,ya(a),S,S,S,S,S,S,S,S,S)}function W0(a){return ve(3,S,""+a,S,S,S,S,S,S,S,S,S)}function F0(a){return ve(4,a,S,S,S,S,S,S,S,S,S,S)}function G0(a,o){let i=o.valueOf();return ve(5,a,i!==i?"":o.toISOString(),S,S,S,S,S,S,S,S,S)}function Q0(a,o){return ve(6,a,S,ya(o.source),o.flags,S,S,S,S,S,S,S)}function V0(a,o){return ve(17,a,Xg[o],S,S,S,S,S,S,S,S,S)}function $0(a,o){return ve(18,a,ya(U0(o)),S,S,S,S,S,S,S,S,S)}function Z0(a,o,i){return ve(25,a,i,ya(o),S,S,S,S,S,S,S,S)}function K0(a,o,i){return ve(9,a,S,S,S,S,S,i,S,S,oy(o),S)}function X0(a,o){return ve(21,a,S,S,S,S,S,S,o,S,S,S)}function J0(a,o,i){return ve(15,a,S,o.constructor.name,S,S,S,S,i,o.byteOffset,S,o.length)}function e1(a,o,i){return ve(16,a,S,o.constructor.name,S,S,S,S,i,o.byteOffset,S,o.byteLength)}function t1(a,o,i){return ve(20,a,S,S,S,S,S,S,i,o.byteOffset,S,o.byteLength)}function n1(a,o,i){return ve(13,a,cd(o),S,ya(o.message),i,S,S,S,S,S,S)}function a1(a,o,i){return ve(14,a,cd(o),S,ya(o.message),i,S,S,S,S,S,S)}function o1(a,o){return ve(7,a,S,S,S,S,S,o,S,S,S,S)}function i1(a,o){return ve(28,S,S,S,S,S,S,[a,o],S,S,S,S)}function s1(a,o){return ve(30,S,S,S,S,S,S,[a,o],S,S,S,S)}function r1(a,o,i){return ve(31,a,S,S,S,S,S,i,o,S,S,S)}function l1(a,o){return ve(32,a,S,S,S,S,S,S,o,S,S,S)}function c1(a,o){return ve(33,a,S,S,S,S,S,S,o,S,S,S)}function u1(a,o){return ve(34,a,S,S,S,S,S,S,o,S,S,S)}function d1(a,o,i,r){return ve(35,a,i,S,S,S,S,o,S,S,S,r)}
12var h1={parsing:1,serialization:2,deserialization:3};function p1(a){return`Seroval Error (step: ${h1[a]})`}var m1=(a,o)=>p1(a),sy=class extends Error{constructor(a,o){super(m1(a)),this.cause=o}},$f=class extends sy{constructor(a){super("parsing",a)}},f1=class extends sy{constructor(a){super("deserialization",a)}};function Bn(a){return`Seroval Error (specific: ${a})`}var tl=class extends Error{constructor(o){super(Bn(1)),this.value=o}},ry=class extends Error{constructor(o){super(Bn(2))}},g1=class extends Error{constructor(a){super(Bn(3))}},as=class extends Error{constructor(a){super(Bn(4))}},y1=class extends Error{constructor(a){super(Bn(5)),this.value=a}},w1=class extends Error{constructor(a){super(Bn(6))}},b1=class extends Error{constructor(a){super(Bn(7))}},wa=class extends Error{constructor(a){super(Bn(8))}},v1=class extends Error{constructor(o){super(Bn(9))}},S1=class{constructor(a,o){this.value=a,this.replacement=o}},nl=()=>{let a={p:0,s:0,f:0};return a.p=new Promise((o,i)=>{a.s=o,a.f=i}),a},A1=(a,o)=>{a.s(o),a.p.s=1,a.p.v=o},k1=(a,o)=>{a.f(o),a.p.s=2,a.p.v=o};nl.toString();A1.toString();k1.toString();var x1=()=>{let a=[],o=[],i=!0,r=!1,c=0,d=(f,g,b)=>{for(b=0;b<c;b++)o[b]&&o[b][g](f)},h=(f,g,b,w)=>{for(g=0,b=a.length;g<b;g++)w=a[g],!i&&g===b-1?f[r?"return":"throw"](w):f.next(w)},p=(f,g)=>(i&&(g=c++,o[g]=f),h(f),()=>{i&&(o[g]=o[c],o[c--]=void 0)});return{__SEROVAL_STREAM__:!0,on:f=>p(f),next:f=>{i&&(a.push(f),d(f,"next"))},throw:f=>{i&&(a.push(f),d(f,"throw"),i=!1,r=!1,o.length=0)},return:f=>{i&&(a.push(f),d(f,"return"),i=!1,r=!0,o.length=0)}}},E1=a=>o=>()=>{let i=0,r={[a]:()=>r,next:()=>{if(i>o.d)return{done:!0,value:void 0};let c=i++,d=o.v[c];if(c===o.t)throw d;return{done:c===o.d,value:d}}};return r},T1=(a,o)=>i=>()=>{let r=0,c=-1,d=!1,h=[],p=[],f=(b=0,w=p.length)=>{for(;b<w;b++)p[b].s({done:!0,value:void 0})};i.on({next:b=>{let w=p.shift();w&&w.s({done:!1,value:b}),h.push(b)},throw:b=>{let w=p.shift();w&&w.f(b),f(),c=h.length,d=!0,h.push(b)},return:b=>{let w=p.shift();w&&w.s({done:!0,value:b}),f(),c=h.length,h.push(b)}});let g={[a]:()=>g,next:()=>{if(c===-1){let v=r++;if(v>=h.length){let x=o();return p.push(x),x.p}return{done:!1,value:h[v]}}if(r>c)return{done:!0,value:void 0};let b=r++,w=h[b];if(b!==c)return{done:!1,value:w};if(d)throw w;return{done:!0,value:w}}};return g},ly=a=>{let o=atob(a),i=o.length,r=new Uint8Array(i);for(let c=0;c<i;c++)r[c]=o.charCodeAt(c);return r.buffer};ly.toString();function C1(a){return"__SEROVAL_SEQUENCE__"in a}function cy(a,o,i){return{__SEROVAL_SEQUENCE__:!0,v:a,t:o,d:i}}function _1(a){let o=[],i=-1,r=-1,c=a[Nn]();for(;;)try{let d=c.next();if(o.push(d.value),d.done){r=o.length-1;break}}catch(d){i=o.length,o.push(d)}return cy(o,i,r)}var R1=E1(Nn);function z1(a){return R1(a)}var M1={},j1={},O1={0:{},1:{},2:{},3:{},4:{},5:{}};function al(a){return"__SEROVAL_STREAM__"in a}function Va(){return x1()}function N1(a){let o=Va(),i=a[On]();async function r(){try{let c=await i.next();c.done?o.return(c.value):(o.next(c.value),await r())}catch(c){o.throw(c)}}return r().catch(()=>{}),o}var B1=T1(On,nl);function L1(a){return B1(a)}async function D1(a){try{return[1,await a]}catch(o){return[0,o]}}function P1(a,o){return{plugins:o.plugins,mode:a,marked:new Set,features:63^(o.disabledFeatures||0),refs:o.refs||new Map,depthLimit:o.depthLimit||1e3}}function Or(a,o){a.marked.add(o)}function q1(a,o){let i=a.refs.size;return a.refs.set(o,i),i}function ol(a,o){let i=a.refs.get(o);return i!=null?(Or(a,i),{type:1,value:F0(i)}):{type:0,value:q1(a,o)}}function ud(a,o){let i=ol(a,o);return i.type===1?i:ny(o)?{type:2,value:$0(i.value,o)}:i}function Ua(a,o){let i=ud(a,o);if(i.type!==0)return i.value;if(o in Xg)return V0(i.value,o);throw new tl(o)}function il(a,o){let i=ol(a,O1[o]);return i.type===1?i.value:ve(26,i.value,o,S,S,S,S,S,S,S,S,S)}function U1(a){let o=ol(a,M1);return o.type===1?o.value:ve(27,o.value,S,S,S,S,S,S,Ua(a,Nn),S,S,S)}function H1(a){let o=ol(a,j1);return o.type===1?o.value:ve(29,o.value,S,S,S,S,S,[il(a,1),Ua(a,On)],S,S,S,S)}function Y1(a,o,i,r){return ve(i?11:10,a,S,S,S,r,S,S,S,S,oy(o),S)}function I1(a,o,i,r){return ve(8,o,S,S,S,S,{k:i,v:r},S,il(a,0),S,S,S)}function W1(a,o,i){let r=new Uint8Array(i),c="";for(let d=0,h=r.length;d<h;d++)c+=String.fromCharCode(r[d]);return ve(19,o,ya(btoa(c)),S,S,S,S,S,il(a,5),S,S,S)}function F1(a,o){return{base:P1(a,o),child:void 0}}var G1=class{constructor(a,o){this._p=a,this.depth=o}parse(a){return Xe(this._p,this.depth,a)}};async function Q1(a,o,i){let r=[];for(let c=0,d=i.length;c<d;c++)c in i?r[c]=await Xe(a,o,i[c]):r[c]=0;return r}async function V1(a,o,i,r){return K0(i,r,await Q1(a,o,r))}async function dd(a,o,i){let r=Object.entries(i),c=[],d=[];for(let h=0,p=r.length;h<p;h++)c.push(ya(r[h][0])),d.push(await Xe(a,o,r[h][1]));return Nn in i&&(c.push(Ua(a.base,Nn)),d.push(i1(U1(a.base),await Xe(a,o,_1(i))))),On in i&&(c.push(Ua(a.base,On)),d.push(s1(H1(a.base),await Xe(a,o,N1(i))))),Yo in i&&(c.push(Ua(a.base,Yo)),d.push(iy(i[Yo]))),Ho in i&&(c.push(Ua(a.base,Ho)),d.push(i[Ho]?Jg:ey)),{k:c,v:d}}async function Du(a,o,i,r,c){return Y1(i,r,c,await dd(a,o,r))}async function $1(a,o,i,r){return X0(i,await Xe(a,o,r.valueOf()))}async function Z1(a,o,i,r){return J0(i,r,await Xe(a,o,r.buffer))}async function K1(a,o,i,r){return e1(i,r,await Xe(a,o,r.buffer))}async function X1(a,o,i,r){return t1(i,r,await Xe(a,o,r.buffer))}async function Zf(a,o,i,r){let c=ay(r,a.base.features);return n1(i,r,c?await dd(a,o,c):S)}async function J1(a,o,i,r){let c=ay(r,a.base.features);return a1(i,r,c?await dd(a,o,c):S)}async function eS(a,o,i,r){let c=[],d=[];for(let[h,p]of r.entries())c.push(await Xe(a,o,h)),d.push(await Xe(a,o,p));return I1(a.base,i,c,d)}async function tS(a,o,i,r){let c=[];for(let d of r.keys())c.push(await Xe(a,o,d));return o1(i,c)}async function uy(a,o,i,r){let c=a.base.plugins;if(c)for(let d=0,h=c.length;d<h;d++){let p=c[d];if(p.parse.async&&p.test(r))return Z0(i,p.tag,await p.parse.async(r,new G1(a,o),{id:i}))}return S}async function nS(a,o,i,r){let[c,d]=await D1(r);return ve(12,i,c,S,S,S,S,S,await Xe(a,o,d),S,S,S)}function aS(a,o,i,r,c){let d=[],h=i.on({next:p=>{Or(this.base,o),Xe(this,a,p).then(f=>{d.push(l1(o,f))},f=>{c(f),h()})},throw:p=>{Or(this.base,o),Xe(this,a,p).then(f=>{d.push(c1(o,f)),r(d),h()},f=>{c(f),h()})},return:p=>{Or(this.base,o),Xe(this,a,p).then(f=>{d.push(u1(o,f)),r(d),h()},f=>{c(f),h()})}})}async function oS(a,o,i,r){return r1(i,il(a.base,4),await new Promise(aS.bind(a,o,i,r)))}async function iS(a,o,i,r){let c=[];for(let d=0,h=r.v.length;d<h;
12d++)c[d]=await Xe(a,o,r.v[d]);return d1(i,c,r.t,r.d)}async function sS(a,o,i,r){if(Array.isArray(r))return V1(a,o,i,r);if(al(r))return oS(a,o,i,r);if(C1(r))return iS(a,o,i,r);let c=r.constructor;if(c===S1)return Xe(a,o,r.replacement);let d=await uy(a,o,i,r);if(d)return d;switch(c){case Object:return Du(a,o,i,r,!1);case S:return Du(a,o,i,r,!0);case Date:return G0(i,r);case Error:case EvalError:case RangeError:case ReferenceError:case SyntaxError:case TypeError:case URIError:return Zf(a,o,i,r);case Number:case Boolean:case String:case BigInt:return $1(a,o,i,r);case ArrayBuffer:return W1(a.base,i,r);case Int8Array:case Int16Array:case Int32Array:case Uint8Array:case Uint16Array:case Uint32Array:case Uint8ClampedArray:case Float32Array:case Float64Array:return Z1(a,o,i,r);case DataView:return X1(a,o,i,r);case Map:return eS(a,o,i,r);case Set:return tS(a,o,i,r)}if(c===Promise||r instanceof Promise)return nS(a,o,i,r);let h=a.base.features;if(h&32&&c===RegExp)return Q0(i,r);if(h&16)switch(c){case BigInt64Array:case BigUint64Array:return K1(a,o,i,r)}if(h&1&&typeof AggregateError<"u"&&(c===AggregateError||r instanceof AggregateError))return J1(a,o,i,r);if(r instanceof Error)return Zf(a,o,i,r);if(Nn in r||On in r)return Du(a,o,i,r,!!c);throw new tl(r)}async function rS(a,o,i){let r=ud(a.base,i);if(r.type!==0)return r.value;let c=await uy(a,o,r.value,i);if(c)return c;throw new tl(i)}async function Xe(a,o,i){switch(typeof i){case"boolean":return i?Jg:ey;case"undefined":return M0;case"string":return iy(i);case"number":return I0(i);case"bigint":return W0(i);case"object":{if(i){let r=ud(a.base,i);return r.type===0?await sS(a,o+1,r.value,i):r.value}return j0}case"symbol":return Ua(a.base,i);case"function":return rS(a,o,i);default:throw new tl(i)}}async function lS(a,o){try{return await Xe(a,0,o)}catch(i){throw i instanceof $f?i:new $f(i)}}var cS=(a=>(a[a.Vanilla=1]="Vanilla",a[a.Cross=2]="Cross",a))(cS||{});function dy(a,o){for(let i=0,r=o.length;i<r;i++){let c=o[i];a.has(c)||(a.add(c),c.extends&&dy(a,c.extends))}}function hy(a){if(a){let o=new Set;return dy(o,a),[...o]}}function uS(a){switch(a){case"Int8Array":return Int8Array;case"Int16Array":return Int16Array;case"Int32Array":return Int32Array;case"Uint8Array":return Uint8Array;case"Uint16Array":return Uint16Array;case"Uint32Array":return Uint32Array;case"Uint8ClampedArray":return Uint8ClampedArray;case"Float32Array":return Float32Array;case"Float64Array":return Float64Array;case"BigInt64Array":return BigInt64Array;case"BigUint64Array":return BigUint64Array;default:throw new b1(a)}}var dS=1e6,hS=1e4,pS=2e4;function py(a,o){switch(o){case 3:return Object.freeze(a);case 1:return Object.preventExtensions(a);case 2:return Object.seal(a);default:return a}}var mS=1e3;function fS(a,o){var i;return{mode:a,plugins:o.plugins,refs:o.refs||new Map,features:(i=o.features)!=null?i:63^(o.disabledFeatures||0),depthLimit:o.depthLimit||mS}}function gS(a){return{mode:2,base:fS(2,a),child:S}}var yS=class{constructor(a,o){this._p=a,this.depth=o}deserialize(a){return Me(this._p,this.depth,a)}};function my(a,o){if(o<0||!Number.isFinite(o)||!Number.isInteger(o))throw new wa({t:4,i:o});if(a.refs.has(o))throw new Error("Conflicted ref id: "+o)}function wS(a,o,i){return my(a.base,o),a.state.marked.has(o)&&a.base.refs.set(o,i),i}function bS(a,o,i){return my(a.base,o),a.base.refs.set(o,i),i}function Je(a,o,i){return a.mode===1?wS(a,o,i):bS(a,o,i)}function Ju(a,o,i){if(Object.hasOwn(o,i))return o[i];throw new wa(a)}function vS(a,o){return Je(a,o.i,H0(Qa(o.s)))}function SS(a,o,i){let r=i.a,c=r.length,d=Je(a,i.i,new Array(c));for(let h=0,p;h<c;h++)p=r[h],p&&(d[h]=Me(a,o,p));return py(d,i.o),d}function AS(a){switch(a){case"constructor":case"__proto__":case"prototype":case"__defineGetter__":case"__defineSetter__":case"__lookupGetter__":case"__lookupSetter__":return!1;default:return!0}}function kS(a){switch(a){case On:case Ho:case Yo:case Nn:return!0;default:return!1}}function Kf(a,o,i){AS(o)?a[o]=i:Object.defineProperty(a,o,{value:i,configurable:!0,enumerable:!0,writable:!0})}function xS(a,o,i,r,c){if(typeof r=="string")Kf(i,r,Me(a,o,c));else{let d=Me(a,o,r);
12switch(typeof d){case"string":Kf(i,d,Me(a,o,c));break;case"symbol":kS(d)&&(i[d]=Me(a,o,c));break;default:throw new wa(r)}}}function fy(a,o,i,r){let c=i.k;if(c.length>0)for(let d=0,h=i.v,p=c.length;d<p;d++)xS(a,o,r,c[d],h[d]);return r}function ES(a,o,i){let r=Je(a,i.i,i.t===10?{}:Object.create(null));return fy(a,o,i.p,r),py(r,i.o),r}function TS(a,o){return Je(a,o.i,new Date(o.s))}function CS(a,o){if(a.base.features&32){let i=Qa(o.c);if(i.length>pS)throw new wa(o);return Je(a,o.i,new RegExp(i,o.m))}throw new ry(o)}function _S(a,o,i){let r=Je(a,i.i,new Set);for(let c=0,d=i.a,h=d.length;c<h;c++)r.add(Me(a,o,d[c]));return r}function RS(a,o,i){let r=Je(a,i.i,new Map);for(let c=0,d=i.e.k,h=i.e.v,p=d.length;c<p;c++)r.set(Me(a,o,d[c]),Me(a,o,h[c]));return r}function zS(a,o){if(o.s.length>dS)throw new wa(o);return Je(a,o.i,ly(Qa(o.s)))}function MS(a,o,i){var r;let c=uS(i.c),d=Me(a,o,i.f),h=(r=i.b)!=null?r:0;if(h<0||h>d.byteLength)throw new wa(i);return Je(a,i.i,new c(d,h,i.l))}function jS(a,o,i){var r;let c=Me(a,o,i.f),d=(r=i.b)!=null?r:0;if(d<0||d>c.byteLength)throw new wa(i);return Je(a,i.i,new DataView(c,d,i.l))}function gy(a,o,i,r){if(i.p){let c=fy(a,o,i.p,{});Object.defineProperties(r,Object.getOwnPropertyDescriptors(c))}return r}function OS(a,o,i){let r=Je(a,i.i,new AggregateError([],Qa(i.m)));return gy(a,o,i,r)}function NS(a,o,i){let r=Ju(i,z0,i.s),c=Je(a,i.i,new r(Qa(i.m)));return gy(a,o,i,c)}function BS(a,o,i){let r=nl(),c=Je(a,i.i,r.p),d=Me(a,o,i.f);return i.s?r.s(d):r.f(d),c}function LS(a,o,i){return Je(a,i.i,Object(Me(a,o,i.f)))}function DS(a,o,i){let r=a.base.plugins;if(r){let c=Qa(i.c);for(let d=0,h=r.length;d<h;d++){let p=r[d];if(p.tag===c)return Je(a,i.i,p.deserialize(i.s,new yS(a,o),{id:i.i}))}}throw new g1(i.c)}function PS(a,o){return Je(a,o.i,Je(a,o.s,nl()).p)}function qS(a,o,i){let r=a.base.refs.get(i.i);if(r)return r.s(Me(a,o,i.a[1])),S;throw new as("Promise")}function US(a,o,i){let r=a.base.refs.get(i.i);if(r)return r.f(Me(a,o,i.a[1])),S;throw new as("Promise")}function HS(a,o,i){Me(a,o,i.a[0]);let r=Me(a,o,i.a[1]);return z1(r)}function YS(a,o,i){Me(a,o,i.a[0]);let r=Me(a,o,i.a[1]);return L1(r)}function IS(a,o,i){let r=Je(a,i.i,Va()),c=i.a,d=c.length;if(d)for(let h=0;h<d;h++)Me(a,o,c[h]);return r}function WS(a,o,i){let r=a.base.refs.get(i.i);if(r&&al(r))return r.next(Me(a,o,i.f)),S;throw new as("Stream")}function FS(a,o,i){let r=a.base.refs.get(i.i);if(r&&al(r))return r.throw(Me(a,o,i.f)),S;throw new as("Stream")}function GS(a,o,i){let r=a.base.refs.get(i.i);if(r&&al(r))return r.return(Me(a,o,i.f)),S;throw new as("Stream")}function QS(a,o,i){return Me(a,o,i.f),S}function VS(a,o,i){return Me(a,o,i.a[1]),S}function $S(a,o,i){let r=Je(a,i.i,cy([],i.s,i.l));for(let c=0,d=i.a.length;c<d;c++)r.v[c]=Me(a,o,i.a[c]);return r}function Me(a,o,i){if(o>a.base.depthLimit)throw new v1(a.base.depthLimit);switch(o+=1,i.t){case 2:return Ju(i,_0,i.s);case 0:return Number(i.s);case 1:return Qa(String(i.s));case 3:if(String(i.s).length>hS)throw new wa(i);return BigInt(i.s);case 4:return a.base.refs.get(i.i);case 18:return vS(a,i);case 9:return SS(a,o,i);case 10:case 11:return ES(a,o,i);case 5:return TS(a,i);case 6:return CS(a,i);case 7:return _S(a,o,i);case 8:return RS(a,o,i);case 19:return zS(a,i);case 16:case 15:return MS(a,o,i);case 20:return jS(a,o,i);case 14:return OS(a,o,i);case 13:return NS(a,o,i);case 12:return BS(a,o,i);case 17:return Ju(i,C0,i.s);case 21:return LS(a,o,i);case 25:return DS(a,o,i);case 22:return PS(a,i);case 23:return qS(a,o,i);case 24:return US(a,o,i);case 28:return HS(a,o,i);case 30:return YS(a,o,i);case 31:return IS(a,o,i);case 32:return WS(a,o,i);case 33:return FS(a,o,i);case 34:return GS(a,o,i);case 27:return QS(a,o,i);case 29:return VS(a,o,i);case 35:return $S(a,o,i);default:throw new ry(i)}}function ZS(a,o){try{return Me(a,0,o)}catch(i){throw new f1(i)}}var KS=()=>T;KS.toString();function Pu(a,o){let i=hy(o.plugins),r=gS({plugins:i,refs:o.refs,features:o.features,disabledFeatures:o.disabledFeatures});return ZS(r,a)}async function XS(a,o={}){let i=hy(o.plugins),r=F1(1,{plugins:i,disabledFeatures:o.disabledFeatures});return{t:await lS(r,a),f:r.base.features,m:Array.from(r.base.marked)}}function JS(a){return{tag:"$TSR/t/"+a.key,test:a.test,parse:{sync(o,i){return i.parse(a.toSerializable(o))},async async(o,i){return await i.parse(a.toSerializable(o))},stream(o,i){return i.parse(a.toSerializable(o))}},serialize:void 0,deserialize(o,i){return a.fromSerializable(i.deserialize(o))}}}var da={},yy=a=>new ReadableStream({start:o=>{a.on({next:i=>{try{o.enqueue(i)}catch{}},throw:i=>{o.error(i)},return:()=>{try{o.close()}catch{}}})}}),eA={tag:"seroval-plugins/web/ReadableStreamFactory",test(a){return a===da},parse:{sync(){return da},async async(){return await Promise.resolve(da)},stream(){return da}},serialize(){return yy.toString()},deserialize(){return da}};function Xf(a){let o=Va(),i=a.getReader();async function r(){try{let c=await i.read();c.done?o.return(c.value):(o.next(c.value),await r())}catch(c){o.throw(c)}}return r().catch(()=>{}),o}var tA={tag:"seroval/plugins/web/ReadableStream",extends:[eA],test(a){return typeof ReadableStream>"u"?!1:a instanceof ReadableStream},parse:{sync(a,o){return{factory:o.parse(da),stream:o.parse(Va())}},async async(a,o){return{factory:await o.parse(da),stream:await o.parse(Xf(a))}},stream(a,o){return{factory:o.parse(da),stream:o.parse(Xf(a))}}},serialize(a,o){return"("+o.serialize(a.factory)+")("+o.serialize(a.stream)+")"},deserialize(a,o){let i=o.deserialize(a.stream);return yy(i)}},nA=tA;const aA={tag:"$TSR/Error",test(a){return a instanceof Error},parse:{sync(a,o){return{message:o.parse(a.message)}},async async(a,o){return{message:await o.parse(a.message)}},stream(a,o){return{message:o.parse(a.message)}}},serialize(a,o){return"new Error("+o.serialize(a.message)+")"},deserialize(a,o){return new Error(o.deserialize(a.message))}};class oA{constructor(o,i){this.stream=o,this.hint=i?.hint??"binary"}}const Qr=globalThis.Buffer,wy=!!Qr&&typeof Qr.from=="function";function by(a){if(a.length===0)return"";if(wy)return Qr.from(a).toString("base64");const o=32768,i=[];for(let r=0;r<a.length;r+=o){const c=a.subarray(r,r+o);i.push(String.fromCharCode.apply(null,c))}return btoa(i.join(""))}function vy(a){if(a.length===0)return new Uint8Array(0);if(wy){const r=Qr.from(a,"base64");return new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}const o=atob(a),i=new Uint8Array(o.length);for(let r=0;r<o.length;
12r++)i[r]=o.charCodeAt(r);return i}const Xi=Object.create(null),Ji=Object.create(null),iA=a=>new ReadableStream({start(o){a.on({next(i){try{o.enqueue(vy(i))}catch{}},throw(i){o.error(i)},return(){try{o.close()}catch{}}})}}),sA=new TextEncoder,rA=a=>new ReadableStream({start(o){a.on({next(i){try{typeof i=="string"?o.enqueue(sA.encode(i)):o.enqueue(vy(i.$b64))}catch{}},throw(i){o.error(i)},return(){try{o.close()}catch{}}})}}),lA="(s=>new ReadableStream({start(c){s.on({next(b){try{const d=atob(b),a=new Uint8Array(d.length);for(let i=0;i<d.length;i++)a[i]=d.charCodeAt(i);c.enqueue(a)}catch(_){}},throw(e){c.error(e)},return(){try{c.close()}catch(_){}}})}}))",cA="(s=>{const e=new TextEncoder();return new ReadableStream({start(c){s.on({next(v){try{if(typeof v==='string'){c.enqueue(e.encode(v))}else{const d=atob(v.$b64),a=new Uint8Array(d.length);for(let i=0;i<d.length;i++)a[i]=d.charCodeAt(i);c.enqueue(a)}}catch(_){}},throw(x){c.error(x)},return(){try{c.close()}catch(_){}}})}})})";function Jf(a){const o=Va(),i=a.getReader();return(async()=>{try{for(;;){const{done:r,value:c}=await i.read();if(r){o.return(void 0);break}o.next(by(c))}}catch(r){o.throw(r)}finally{i.releaseLock()}})(),o}function eg(a){const o=Va(),i=a.getReader(),r=new TextDecoder("utf-8",{fatal:!0});return(async()=>{try{for(;;){const{done:c,value:d}=await i.read();if(c){try{const h=r.decode();h.length>0&&o.next(h)}catch{}o.return(void 0);break}try{const h=r.decode(d,{stream:!0});h.length>0&&o.next(h)}catch{o.next({$b64:by(d)})}}}catch(c){o.throw(c)}finally{i.releaseLock()}})(),o}const uA={tag:"tss/RawStreamFactory",test(a){return a===Xi},parse:{sync(){},async(){return Promise.resolve(void 0)},stream(){}},serialize(){return lA},deserialize(){return Xi}},dA={tag:"tss/RawStreamFactoryText",test(a){return a===Ji},parse:{sync(){},async(){return Promise.resolve(void 0)},stream(){}},serialize(){return cA},deserialize(){return Ji}},hA={tag:"tss/RawStream",extends:[uA,dA],test(a){return a instanceof oA},parse:{sync(a,o){const i=a.hint==="text"?Ji:Xi;return{hint:a.hint,factory:o.parse(i),stream:o.parse(Va())}},async async(a,o){const i=a.hint==="text"?Ji:Xi,r=a.hint==="text"?eg(a.stream):Jf(a.stream);return{hint:a.hint,factory:await o.parse(i),stream:await o.parse(r)}},stream(a,o){const i=a.hint==="text"?Ji:Xi,r=a.hint==="text"?eg(a.stream):Jf(a.stream);return{hint:a.hint,factory:o.parse(i),stream:o.parse(r)}}},serialize(a,o){return"("+o.serialize(a.factory)+")("+o.serialize(a.stream)+")"},deserialize(a,o){const i=o.deserialize(a.stream);return a.hint==="text"?rA(i):iA(i)}};function pA(a){return{tag:"tss/RawStream",test:()=>!1,parse:{},serialize(){throw new Error("RawStreamDeserializePlugin.serialize should not be called. Client only deserializes.")},deserialize(o){return a(o.streamId)}}}const mA=[aA,hA,nA],fA="use",Vr=mv[fA],Rr=typeof window<"u"?$.useLayoutEffect:$.useEffect;function qu(a){const o=$.useRef({value:a,prev:null}),i=o.current.value;return a!==i&&(o.current={value:a,prev:i}),o.current.prev}function gA(a,o,i={},r={}){$.useEffect(()=>{if(!a.current||r.disabled||typeof IntersectionObserver!="function")return;const c=new IntersectionObserver(([d])=>{o(d)},i);return c.observe(a.current),()=>{c.disconnect()}},[o,i,r.disabled,a])}function yA(a){const o=$.useRef(null);return $.useImperativeHandle(a,()=>o.current,[]),o}function wA({promise:a}){if(Vr)return Vr(a);const o=k0(a);if(o[ln].status==="pending")throw o;if(o[ln].status==="error")throw o[ln].error;return o[ln].data}function bA(a){const o=A.jsx(vA,{...a});return a.fallback?A.jsx($.Suspense,{fallback:a.fallback,children:o}):o}function vA(a){const o=wA(a);return a.children(o)}function hd(a){const o=a.errorComponent??sl;return A.jsx(SA,{getResetKey:a.getResetKey,onCatch:a.onCatch,children:({error:i,reset:r})=>i?$.createElement(o,{error:i,reset:r}):a.children})}class SA extends $.Component{constructor(){super(...arguments),this.state={error:null}}static getDerivedStateFromProps(o){return{resetKey:o.getResetKey()}}static getDerivedStateFromError(o){return{error:o}}reset(){this.setState({error:null})}componentDidUpdate(o,i){i.error&&i.resetKey!==this.state.resetKey&&this.reset()}componentDidCatch(o,i){this.props.onCatch&&this.props.onCatch(o,i)}render(){return this.props.children({error:this.state.resetKey!==this.props.getResetKey()?null:this.state.error,reset:()=>{this.reset()}})}}function sl({error:a}){const[o,i]=$.useState(!1);return A.jsxs("div",{style:{padding:".5rem",maxWidth:"100%"},children:[A.jsxs("div",{style:{display:"flex",alignItems:"center",gap:".5rem"},children:[A.jsx("strong",{style:{fontSize:"1rem"},children:"Something went wrong!"}),A.jsx("button",{style:{appearance:"none",fontSize:".6em",border:"1px solid currentColor",padding:".1rem .2rem",fontWeight:"bold",borderRadius:".25rem"},onClick:()=>i(r=>!r),children:o?"Hide Error":"Show Error"})]}),A.jsx("div",{style:{height:".25rem"}}),o?A.jsx("div",{children:A.jsx("pre",{style:{fontSize:".7em",border:"1px solid red",borderRadius:".25rem",padding:".3rem",color:"red",overflow:"auto"},children:a.message?A.jsx("code",{children:a.message}):null})}):null]})}function AA({children:a,fallback:o=null}){return Sy()?A.jsx(ts.Fragment,{children:a}):A.jsx(ts.Fragment,{children:o})}function Sy(){return ts.useSyncExternalStore(kA,()=>!0,()=>!1)}function kA(){return()=>{}}var Uu={exports:{}},Hu={},Yu={exports:{}},Iu={};var tg;function xA(){if(tg)return Iu;tg=1;var a=Xr();function o(w,v){return w===v&&(w!==0||1/w===1/v)||w!==w&&v!==v}var i=typeof Object.is=="function"?Object.is:o,r=a.useState,c=a.useEffect,d=a.useLayoutEffect,h=a.useDebugValue;function p(w,v){var x=v(),R=r({inst:{value:x,getSnapshot:v}}),C=R[0].inst,O=R[1];return d(function(){C.value=x,C.getSnapshot=v,f(C)&&O({inst:C})},[w,x,v]),c(function(){return f(C)&&O({inst:C}),w(function(){f(C)&&O({inst:C})})},[w]),h(x),x}function f(w){var v=w.getSnapshot;w=w.value;try{var x=v();return!i(w,x)}catch{return!0}}function g(w,v){return v()}var b=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?g:p;return Iu.useSyncExternalStore=a.useSyncExternalStore!==void 0?a.useSyncExternalStore:b,Iu}var ng;function EA(){return ng||(ng=1,Yu.exports=xA()),Yu.exports}var ag;function TA(){if(ag)return Hu;ag=1;var a=Xr(),o=EA();function i(g,b){return g===b&&(g!==0||1/g===1/b)||g!==g&&b!==b}
12var r=typeof Object.is=="function"?Object.is:i,c=o.useSyncExternalStore,d=a.useRef,h=a.useEffect,p=a.useMemo,f=a.useDebugValue;return Hu.useSyncExternalStoreWithSelector=function(g,b,w,v,x){var R=d(null);if(R.current===null){var C={hasValue:!1,value:null};R.current=C}else C=R.current;R=p(function(){function q(W){if(!I){if(I=!0,H=W,W=v(W),x!==void 0&&C.hasValue){var G=C.value;if(x(G,W))return Y=G}return Y=W}if(G=Y,r(H,W))return G;var U=v(W);return x!==void 0&&x(G,U)?(H=W,G):(H=W,Y=U)}var I=!1,H,Y,F=w===void 0?null:w;return[function(){return q(b())},F===null?void 0:function(){return q(F())}]},[b,w,v,x]);var O=c(g,R[0],R[1]);return h(function(){C.hasValue=!0,C.value=O},[O]),f(O),O},Hu}var og;function CA(){return og||(og=1,Uu.exports=TA()),Uu.exports}var _A=CA();function RA(a,o=r=>r,i={}){const r=i.equal??zA;return _A.useSyncExternalStoreWithSelector(a.subscribe,()=>a.state,()=>a.state,o,r)}function zA(a,o){if(Object.is(a,o))return!0;if(typeof a!="object"||a===null||typeof o!="object"||o===null)return!1;if(a instanceof Map&&o instanceof Map){if(a.size!==o.size)return!1;for(const[r,c]of a)if(!o.has(r)||!Object.is(c,o.get(r)))return!1;return!0}if(a instanceof Set&&o instanceof Set){if(a.size!==o.size)return!1;for(const r of a)if(!o.has(r))return!1;return!0}if(a instanceof Date&&o instanceof Date)return a.getTime()===o.getTime();const i=ig(a);if(i.length!==ig(o).length)return!1;for(let r=0;r<i.length;r++)if(!Object.prototype.hasOwnProperty.call(o,i[r])||!Object.is(a[i[r]],o[i[r]]))return!1;return!0}function ig(a){return Object.keys(a).concat(Object.getOwnPropertySymbols(a))}const Wu=$.createContext(null);function Ay(){return typeof document>"u"?Wu:window.__TSR_ROUTER_CONTEXT__?window.__TSR_ROUTER_CONTEXT__:(window.__TSR_ROUTER_CONTEXT__=Wu,Wu)}function lt(a){const o=$.useContext(Ay());return a?.warn,o}function qe(a){const o=lt({warn:a?.router===void 0}),i=a?.router||o,r=$.useRef(void 0);return RA(i.__store,c=>{if(a?.select){if(a.structuralSharing??i.options.defaultStructuralSharing){const d=Qt(r.current,a.select(c));return r.current=d,d}return a.select(c)}return c})}const rl=$.createContext(void 0),MA=$.createContext(void 0);function cn(a){const o=$.useContext(a.from?MA:rl);return qe({select:r=>{const c=r.matches.find(d=>a.from?a.from===d.routeId:d.id===o);if(Et(!((a.shouldThrow??!0)&&!c),`Could not find ${a.from?`an active match from "${a.from}"`:"a nearest match!"}`),c!==void 0)return a.select?a.select(c):c},structuralSharing:a.structuralSharing})}function pd(a){return cn({from:a.from,strict:a.strict,structuralSharing:a.structuralSharing,select:o=>a.select?a.select(o.loaderData):o.loaderData})}function md(a){const{select:o,...i}=a;return cn({...i,select:r=>o?o(r.loaderDeps):r.loaderDeps})}function fd(a){return cn({from:a.from,shouldThrow:a.shouldThrow,structuralSharing:a.structuralSharing,strict:a.strict,select:o=>{const i=a.strict===!1?o.params:o._strictParams;return a.select?a.select(i):i}})}function gd(a){return cn({from:a.from,strict:a.strict,shouldThrow:a.shouldThrow,structuralSharing:a.structuralSharing,select:o=>a.select?a.select(o.search):o.search})}function yd(a){const o=lt();return $.useCallback(i=>o.navigate({...i,from:i.from??a?.from}),[a?.from,o])}var jA=kg();function OA(a,o){const i=lt(),[r,c]=$.useState(!1),d=$.useRef(!1),h=yA(o),p=Sy(),{activeProps:f,inactiveProps:g,activeOptions:b,to:w,preload:v,preloadDelay:x,hashScrollIntoView:R,replace:C,startTransition:O,resetScroll:q,viewTransition:I,children:H,target:Y,disabled:F,style:W,className:G,onClick:U,onFocus:V,onMouseEnter:ue,onMouseLeave:ie,onTouchStart:te,ignoreBlocker:Te,params:ke,search:Le,hash:B,state:Q,mask:oe,reloadDocument:je,unsafeRelative:Oe,from:ut,_fromLocation:De,...ge}=a,Fe=qe({select:le=>le.location.search,structuralSharing:!0}),Tt=a.from,ft=$.useMemo(()=>({...a,from:Tt}),[i,Fe,Tt,a._fromLocation,a.hash,a.to,a.search,a.params,a.state,a.mask,a.unsafeRelative]),gt=$.useMemo(()=>i.buildLocation({...ft}),[i,ft]),Jt=$.useMemo(()=>{if(F)return;let le=gt.maskedLocation?gt.maskedLocation.url.href:gt.url.href,Ze=!1;return i.origin&&(le.startsWith(i.origin)?le=i.history.createHref(le.replace(i.origin,""))||"/":Ze=!0),{href:le,external:Ze}},[F,gt.maskedLocation,gt.url,i.origin,i.history]),$t=$.useMemo(()=>
12{if(Jt?.external)return Hr(Jt.href)?void 0:Jt.href;if(!(typeof w=="string"&&w.charCodeAt(0)===47&&w.charCodeAt(1)!==47))try{return new URL(w),Hr(w)?void 0:w}catch{}},[w,Jt]),en=a.reloadDocument||$t?!1:v??i.options.defaultPreload,Ln=x??i.options.defaultPreloadDelay??0,ba=qe({select:le=>{if($t)return!1;if(b?.exact){if(!Gv(le.location.pathname,gt.pathname,i.basepath))return!1}else{const Ze=Ir(le.location.pathname,i.basepath),yt=Ir(gt.pathname,i.basepath);if(!(Ze.startsWith(yt)&&(Ze.length===yt.length||Ze[yt.length]==="/")))return!1}return(b?.includeSearch??!0)&&!Ha(le.location.search,gt.search,{partial:!b?.exact,ignoreUndefined:!b?.explicitUndefined})?!1:b?.includeHash?p&&le.location.hash===gt.hash:!0}}),tn=$.useCallback(()=>{i.preloadRoute({...ft}).catch(le=>{console.warn(le),console.warn(x0)})},[i,ft]),un=$.useCallback(le=>{le?.isIntersecting&&tn()},[tn]);gA(h,un,PA,{disabled:!!F||en!=="viewport"}),$.useEffect(()=>{d.current||!F&&en==="render"&&(tn(),d.current=!0)},[F,tn,en]);const Qo=le=>{const Ze=le.currentTarget.getAttribute("target"),yt=Y!==void 0?Y:Ze;if(!F&&!qA(le)&&!le.defaultPrevented&&(!yt||yt==="_self")&&le.button===0){le.preventDefault(),jA.flushSync(()=>{c(!0)});const $o=i.subscribe("onResolved",()=>{$o(),c(!1)});i.navigate({...ft,replace:C,resetScroll:q,hashScrollIntoView:R,startTransition:O,viewTransition:I,ignoreBlocker:Te})}};if($t)return{...ge,ref:h,href:$t,...H&&{children:H},...Y&&{target:Y},...F&&{disabled:F},...W&&{style:W},...G&&{className:G},...U&&{onClick:U},...V&&{onFocus:V},...ue&&{onMouseEnter:ue},...ie&&{onMouseLeave:ie},...te&&{onTouchStart:te}};const Za=le=>{F||en&&tn()},hl=Za,is=le=>{if(!(F||!en))if(!Ln)tn();else{const Ze=le.target;if(Fi.has(Ze))return;const yt=setTimeout(()=>{Fi.delete(Ze),tn()},Ln);Fi.set(Ze,yt)}},Vo=le=>{if(F||!en||!Ln)return;const Ze=le.target,yt=Fi.get(Ze);yt&&(clearTimeout(yt),Fi.delete(Ze))},Dn=ba?ha(f,{})??NA:Fu,Pn=ba?Fu:ha(g,{})??Fu,ss=[G,Dn.className,Pn.className].filter(Boolean).join(" "),rs=(W||Dn.style||Pn.style)&&{...W,...Dn.style,...Pn.style};return{...ge,...Dn,...Pn,href:Jt?.href,ref:h,onClick:Gi([U,Qo]),onFocus:Gi([V,Za]),onMouseEnter:Gi([ue,is]),onMouseLeave:Gi([ie,Vo]),onTouchStart:Gi([te,hl]),disabled:!!F,target:Y,...rs&&{style:rs},...ss&&{className:ss},...F&&BA,...ba&&LA,...r&&DA}}const Fu={},NA={className:"active"},BA={role:"link","aria-disabled":!0},LA={"data-status":"active","aria-current":"page"},DA={"data-transitioning":"transitioning"},Fi=new WeakMap,PA={rootMargin:"100px"},Gi=a=>o=>{for(const i of a)if(i){if(o.defaultPrevented)return;i(o)}},rt=$.forwardRef((a,o)=>{const{_asChild:i,...r}=a,{type:c,...d}=OA(r,o),h=typeof r.children=="function"?r.children({isActive:d["data-status"]==="active"}):r.children;if(!i){const{disabled:p,...f}=d;return $.createElement("a",f,h)}return $.createElement(i,d,h)});function qA(a){return!!(a.metaKey||a.altKey||a.ctrlKey||a.shiftKey)}let UA=class extends Yg{constructor(o){super(o),this.useMatch=i=>cn({select:i?.select,from:this.id,structuralSharing:i?.structuralSharing}),this.useRouteContext=i=>cn({...i,from:this.id,select:r=>i?.select?i.select(r.context):r.context}),this.useSearch=i=>gd({select:i?.select,structuralSharing:i?.structuralSharing,from:this.id}),this.useParams=i=>fd({select:i?.select,structuralSharing:i?.structuralSharing,from:this.id}),this.useLoaderDeps=i=>md({...i,from:this.id}),this.useLoaderData=i=>pd({...i,from:this.id}),this.useNavigate=()=>yd({from:this.fullPath}),this.Link=ts.forwardRef((i,r)=>A.jsx(rt,{ref:r,from:this.fullPath,...i})),this.$$typeof=Symbol.for("react.memo")}};function HA(a){return new UA(a)}class YA extends E0{constructor(o){super(o),this.useMatch=i=>cn({select:i?.select,from:this.id,structuralSharing:i?.structuralSharing}),this.useRouteContext=i=>cn({...i,from:this.id,select:r=>i?.select?i.select(r.context):r.context}),this.useSearch=i=>gd({select:i?.select,structuralSharing:i?.structuralSharing,from:this.id}),this.useParams=i=>fd({select:i?.select,structuralSharing:i?.structuralSharing,from:this.id}),this.useLoaderDeps=i=>md({...i,from:this.id}),this.useLoaderData=i=>pd({...i,from:this.id}),this.useNavigate=()=>yd({from:this.fullPath}),this.Link=ts.forwardRef((i,r)=>A.jsx(rt,{ref:r,from:this.fullPath,...i})),this.$$typeof=Symbol.for("react.memo")}}function IA(a){return new YA(a)}function ne(a){return typeof a=="object"?new sg(a,{silent:!0}).createRoute(a):new sg(a,{silent:!0}).createRoute}class sg{constructor(o,i){this.path=o,this.createRoute=r=>{this.silent;const c=HA(r);return c.isRoot=!1,c},this.silent=i?.silent}}class rg{constructor(o){this.useMatch=i=>cn({select:i?.select,from:this.options.id,structuralSharing:i?.structuralSharing}),this.useRouteContext=i=>cn({from:this.options.id,select:r=>i?.select?i.select(r.context):r.context}),this.useSearch=i=>gd({select:i?.select,structuralSharing:i?.structuralSharing,from:this.options.id}),this.useParams=i=>fd({select:i?.select,structuralSharing:i?.structuralSharing,from:this.options.id}),this.useLoaderDeps=i=>md({...i,from:this.options.id}),this.useLoaderData=i=>pd({...i,from:this.options.id}),this.useNavigate=()=>{const i=lt();return yd({from:i.routesById[this.options.id].fullPath})},this.options=o,this.$$typeof=Symbol.for("react.memo")}}function lg(a){return typeof a=="object"?new rg(a):o=>new rg({id:a,...o})}function J(a,o){let i,r,c,d;const h=()=>(i||(i=a().then(f=>{i=void 0,r=f[o??"default"]}).catch(f=>{if(c=f,Mv(c)&&c instanceof Error&&typeof window<"u"&&typeof sessionStorage<"u"){const g=`tanstack_router_reload:${c.message}`;sessionStorage.getItem(g)||(sessionStorage.setItem(g,"1"),d=!0)}})),i),p=function(g){if(d)throw window.location.reload(),new Promise(()=>{});if(c)throw c;if(!r)if(Vr)Vr(h());else throw h();return $.createElement(r,g)};return p.preload=h,p}function WA(){const a=lt(),o=$.useRef({router:a,mounted:!1}),[i,r]=$.useState(!1),{hasPendingMatches:c,isLoading:d}
12=qe({select:w=>({isLoading:w.isLoading,hasPendingMatches:w.matches.some(v=>v.status==="pending")}),structuralSharing:!0}),h=qu(d),p=d||i||c,f=qu(p),g=d||c,b=qu(g);return a.startTransition=w=>{r(!0),$.startTransition(()=>{w(),r(!1)})},$.useEffect(()=>{const w=a.history.subscribe(a.load),v=a.buildLocation({to:a.latestLocation.pathname,search:!0,params:!0,hash:!0,state:!0,_includeValidateSearch:!0});return zn(a.latestLocation.publicHref)!==zn(v.publicHref)&&a.commitLocation({...v,replace:!0}),()=>{w()}},[a,a.history]),Rr(()=>{if(typeof window<"u"&&a.ssr||o.current.router===a&&o.current.mounted)return;o.current={router:a,mounted:!0},(async()=>{try{await a.load()}catch(v){console.error(v)}})()},[a]),Rr(()=>{h&&!d&&a.emit({type:"onLoad",...Ya(a.state)})},[h,a,d]),Rr(()=>{b&&!g&&a.emit({type:"onBeforeRouteMount",...Ya(a.state)})},[g,b,a]),Rr(()=>{if(f&&!p){const w=Ya(a.state);a.emit({type:"onResolved",...w}),a.__store.setState(v=>({...v,status:"idle",resolvedLocation:v.location})),w.hrefChanged&&t0(a)}},[p,f,a]),null}function FA(a){const o=qe({select:i=>`not-found-${i.location.pathname}-${i.status}`});return A.jsx(hd,{getResetKey:()=>o,onCatch:(i,r)=>{if(mt(i))a.onCatch?.(i,r);else throw i},errorComponent:({error:i})=>{if(mt(i))return a.fallback?.(i);throw i},children:a.children})}function GA(){return A.jsx("p",{children:"Not Found"})}function Do(a){return A.jsx(A.Fragment,{children:a.children})}function ky(a,o,i){return o.options.notFoundComponent?A.jsx(o.options.notFoundComponent,{...i}):a.options.defaultNotFoundComponent?A.jsx(a.options.defaultNotFoundComponent,{...i}):A.jsx(GA,{})}function QA({children:a}){const o=lt();return o.isServer?A.jsx("script",{nonce:o.options.ssr?.nonce,dangerouslySetInnerHTML:{__html:a+";document.currentScript.remove()"}}):null}function VA(){const a=lt();if(!a.isScrollRestoring||!a.isServer||typeof a.options.scrollRestoration=="function"&&!a.options.scrollRestoration({location:a.latestLocation}))return null;const i=(a.options.getScrollRestorationKey||Zu)(a.latestLocation),r=i!==Zu(a.latestLocation)?i:void 0,c={storageKey:Wr,shouldScrollRestoration:!0};return r&&(c.key=r),A.jsx(QA,{children:`(${jg.toString()})(${Cg(JSON.stringify(c))})`})}const xy=$.memo(function({matchId:o}){const i=lt(),r=qe({select:q=>{const I=q.matches.find(H=>H.id===o);return Et(I),{routeId:I.routeId,ssr:I.ssr,_displayPending:I._displayPending}},structuralSharing:!0}),c=i.routesById[r.routeId],d=c.options.pendingComponent??i.options.defaultPendingComponent,h=d?A.jsx(d,{}):null,p=c.options.errorComponent??i.options.defaultErrorComponent,f=c.options.onCatch??i.options.defaultOnCatch,g=c.isRoot?c.options.notFoundComponent??i.options.notFoundRoute?.options.component:c.options.notFoundComponent,b=r.ssr===!1||r.ssr==="data-only",w=(!c.isRoot||c.options.wrapInSuspense||b)&&(c.options.wrapInSuspense??d??(c.options.errorComponent?.preload||b))?$.Suspense:Do,v=p?hd:Do,x=g?FA:Do,R=qe({select:q=>q.loadedAt}),C=qe({select:q=>{const I=q.matches.findIndex(H=>H.id===o);return q.matches[I-1]?.routeId}}),O=c.isRoot?c.options.shellComponent??Do:Do;return A.jsxs(O,{children:[A.jsx(rl.Provider,{value:o,children:A.jsx(w,{fallback:h,children:A.jsx(v,{getResetKey:()=>R,errorComponent:p||sl,onCatch:(q,I)=>{if(mt(q))throw q;f?.(q,I)},children:A.jsx(x,{fallback:q=>{if(!g||q.routeId&&q.routeId!==r.routeId||!q.routeId&&!c.isRoot)throw q;return $.createElement(g,q)},children:b||r._displayPending?A.jsx(AA,{fallback:h,children:A.jsx(cg,{matchId:o})}):A.jsx(cg,{matchId:o})})})})}),C===Lt&&i.options.scrollRestoration?A.jsxs(A.Fragment,{children:[A.jsx($A,{}),A.jsx(VA,{})]}):null]})});function $A(){const a=lt(),o=$.useRef(void 0);return A.jsx("script",{suppressHydrationWarning:!0,ref:i=>{i&&(o.current===void 0||o.current.href!==a.latestLocation.href)&&(a.emit({type:"onRendered",...Ya(a.state)}),o.current=a.latestLocation)}},a.latestLocation.state.__TSR_key)}const cg=$.memo(function({matchId:o}){const i=lt(),{match:r,key:c,routeId:d}=qe({select:f=>{const g=f.matches.find(R=>R.id===o),b=g.routeId,v=(i.routesById[b].options.remountDeps??i.options.defaultRemountDeps)?.({routeId:b,loaderDeps:g.loaderDeps,params:g._strictParams,search:g._strictSearch});return{key:v?JSON.stringify(v):void 0,routeId:b,match:{id:g.id,status:g.status,error:g.error,invali
12d:g.invalid,_forcePending:g._forcePending,_displayPending:g._displayPending}}},structuralSharing:!0}),h=i.routesById[d],p=$.useMemo(()=>{const f=h.options.component??i.options.defaultComponent;return f?A.jsx(f,{},c):A.jsx(Ey,{})},[c,h.options.component,i.options.defaultComponent]);if(r._displayPending)throw i.getMatch(r.id)?._nonReactive.displayPendingPromise;if(r._forcePending)throw i.getMatch(r.id)?._nonReactive.minPendingPromise;if(r.status==="pending"){const f=h.options.pendingMinMs??i.options.defaultPendingMinMs;if(f){const g=i.getMatch(r.id);if(g&&!g._nonReactive.minPendingPromise&&!i.isServer){const b=Ia();g._nonReactive.minPendingPromise=b,setTimeout(()=>{b.resolve(),g._nonReactive.minPendingPromise=void 0},f)}}throw i.getMatch(r.id)?._nonReactive.loadPromise}if(r.status==="notFound")return Et(mt(r.error)),ky(i,h,r.error);if(r.status==="redirected")throw Et(Vt(r.error)),i.getMatch(r.id)?._nonReactive.loadPromise;if(r.status==="error"){if(i.isServer){const f=(h.options.errorComponent??i.options.defaultErrorComponent)||sl;return A.jsx(f,{error:r.error,reset:void 0,info:{componentStack:""}})}throw r.error}return p}),Ey=$.memo(function(){const o=lt(),i=$.useContext(rl),r=qe({select:g=>g.matches.find(b=>b.id===i)?.routeId}),c=o.routesById[r],d=qe({select:g=>{const w=g.matches.find(v=>v.id===i);return Et(w),w.globalNotFound}}),h=qe({select:g=>{const b=g.matches,w=b.findIndex(v=>v.id===i);return b[w+1]?.id}}),p=o.options.defaultPendingComponent?A.jsx(o.options.defaultPendingComponent,{}):null;if(d)return ky(o,c,void 0);if(!h)return null;const f=A.jsx(xy,{matchId:h});return r===Lt?A.jsx($.Suspense,{fallback:p,children:f}):f});function ZA(){const a=lt(),i=a.routesById[Lt].options.pendingComponent??a.options.defaultPendingComponent,r=i?A.jsx(i,{}):null,c=a.isServer||typeof document<"u"&&a.ssr?Do:$.Suspense,d=A.jsxs(c,{fallback:r,children:[!a.isServer&&A.jsx(WA,{}),A.jsx(KA,{})]});return a.options.InnerWrap?A.jsx(a.options.InnerWrap,{children:d}):d}function KA(){const a=lt(),o=qe({select:c=>c.matches[0]?.id}),i=qe({select:c=>c.loadedAt}),r=o?A.jsx(xy,{matchId:o}):null;return A.jsx(rl.Provider,{value:o,children:a.options.disableGlobalCatchBoundary?r:A.jsx(hd,{getResetKey:()=>i,errorComponent:sl,onCatch:c=>{c.message||c.toString()},children:r})})}const XA=a=>new JA(a);class JA extends y0{constructor(o){super(o)}}typeof globalThis<"u"?(globalThis.createFileRoute=ne,globalThis.createLazyFileRoute=lg):typeof window<"u"&&(window.createFileRoute=ne,window.createLazyFileRoute=lg);function ek({router:a,children:o,...i}){Object.keys(i).length>0&&a.update({...a.options,...i,context:{...a.options.context,...i.context}});const r=Ay(),c=A.jsx(r.Provider,{value:a,children:o});return a.options.Wrap?A.jsx(a.options.Wrap,{children:c}):c}function tk({router:a,...o}){return A.jsx(ek,{router:a,...o,children:A.jsx(ZA,{})})}function Ty({tag:a,attrs:o,children:i,nonce:r}){switch(a){case"title":return A.jsx("title",{...o,suppressHydrationWarning:!0,children:i});case"meta":return A.jsx("meta",{...o,suppressHydrationWarning:!0});case"link":return A.jsx("link",{...o,nonce:r,suppressHydrationWarning:!0});case"style":return A.jsx("style",{...o,dangerouslySetInnerHTML:{__html:i},nonce:r});case"script":return A.jsx(nk,{attrs:o,children:i});default:return null}}function nk({attrs:a,children:o}){const i=lt();if($.useEffect(()=>{if(a?.src){const r=(()=>{try{const h=document.baseURI||window.location.href;return new URL(a.src,h).href}catch{return a.src}})();if(Array.from(document.querySelectorAll("script[src]")).find(h=>h.src===r))return;const d=document.createElement("script");for(const[h,p]of Object.entries(a))h!=="suppressHydrationWarning"&&p!==void 0&&p!==!1&&d.setAttribute(h,typeof p=="boolean"?"":String(p));return document.head.appendChild(d),()=>{d.parentNode&&d.parentNode.removeChild(d)}}if(typeof o=="string"){const r=typeof a?.type=="string"?a.type:"text/javascript",c=typeof a?.nonce=="string"?a.nonce:void 0;if(Array.from(document.querySelectorAll("script:not([src])")).find(p=>{if(!(p instanceof HTMLScriptElement))return!1;const f=p.getAttribute("type")??"text/javascript",g=p.getAttribute("nonce")??void 0;return p.textContent===o&&f===r&&g===c}))return;const h=document.createElement("script");
12if(h.textContent=o,a)for(const[p,f]of Object.entries(a))p!=="suppressHydrationWarning"&&f!==void 0&&f!==!1&&h.setAttribute(p,typeof f=="boolean"?"":String(f));return document.head.appendChild(h),()=>{h.parentNode&&h.parentNode.removeChild(h)}}},[a,o]),!i.isServer){const{src:r,...c}=a||{};return A.jsx("script",{suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:""},...c})}return a?.src&&typeof a.src=="string"?A.jsx("script",{...a,suppressHydrationWarning:!0}):typeof o=="string"?A.jsx("script",{...a,dangerouslySetInnerHTML:{__html:o},suppressHydrationWarning:!0}):null}const ak=()=>{const a=lt(),o=a.options.ssr?.nonce,i=qe({select:f=>f.matches.map(g=>g.meta).filter(Boolean)}),r=$.useMemo(()=>{const f=[],g={};let b;for(let w=i.length-1;w>=0;w--){const v=i[w];for(let x=v.length-1;x>=0;x--){const R=v[x];if(R)if(R.title)b||(b={tag:"title",children:R.title});else if("script:ld+json"in R)try{const C=JSON.stringify(R["script:ld+json"]);f.push({tag:"script",attrs:{type:"application/ld+json"},children:Cg(C)})}catch{}else{const C=R.name??R.property;if(C){if(g[C])continue;g[C]=!0}f.push({tag:"meta",attrs:{...R,nonce:o}})}}}return b&&f.push(b),o&&f.push({tag:"meta",attrs:{property:"csp-nonce",content:o}}),f.reverse(),f},[i,o]),c=qe({select:f=>{const g=f.matches.map(v=>v.links).filter(Boolean).flat(1).map(v=>({tag:"link",attrs:{...v,nonce:o}})),b=a.ssr?.manifest,w=f.matches.map(v=>b?.routes[v.routeId]?.assets??[]).filter(Boolean).flat(1).filter(v=>v.tag==="link").map(v=>({tag:"link",attrs:{...v.attrs,suppressHydrationWarning:!0,nonce:o}}));return[...g,...w]},structuralSharing:!0}),d=qe({select:f=>{const g=[];return f.matches.map(b=>a.looseRoutesById[b.routeId]).forEach(b=>a.ssr?.manifest?.routes[b.id]?.preloads?.filter(Boolean).forEach(w=>{g.push({tag:"link",attrs:{rel:"modulepreload",href:w,nonce:o}})})),g},structuralSharing:!0}),h=qe({select:f=>f.matches.map(g=>g.styles).flat(1).filter(Boolean).map(({children:g,...b})=>({tag:"style",attrs:{...b,nonce:o},children:g})),structuralSharing:!0}),p=qe({select:f=>f.matches.map(g=>g.headScripts).flat(1).filter(Boolean).map(({children:g,...b})=>({tag:"script",attrs:{...b,nonce:o},children:g})),structuralSharing:!0});return ok([...r,...d,...c,...h,...p],f=>JSON.stringify(f))};function ok(a,o){const i=new Set;return a.filter(r=>{const c=o(r);return i.has(c)?!1:(i.add(c),!0)})}function ik(){const a=ak(),i=lt().options.ssr?.nonce;return A.jsx(A.Fragment,{children:a.map(r=>$.createElement(Ty,{...r,key:`tsr-meta-${JSON.stringify(r)}`,nonce:i}))})}const sk=()=>{const a=lt(),o=a.options.ssr?.nonce,i=qe({select:h=>{const p=[],f=a.ssr?.manifest;return f?(h.matches.map(g=>a.looseRoutesById[g.routeId]).forEach(g=>f.routes[g.id]?.assets?.filter(b=>b.tag==="script").forEach(b=>{p.push({tag:"script",attrs:{...b.attrs,nonce:o},children:b.children})})),p):[]},structuralSharing:!0}),{scripts:r}=qe({select:h=>({scripts:h.matches.map(p=>p.scripts).flat(1).filter(Boolean).map(({children:p,...f})=>({tag:"script",attrs:{...f,suppressHydrationWarning:!0,nonce:o},children:p}))}),structuralSharing:!0});let c;a.serverSsr&&(c=a.serverSsr.takeBufferedScripts());const d=[...r,...i];return c&&d.unshift(c),A.jsx(A.Fragment,{children:d.map((h,p)=>$.createElement(Ty,{...h,key:`tsr-scripts-${h.tag}-${p}`}))})};function rk(a,o){a.id=o.i,a.__beforeLoadContext=o.b,a.loaderData=o.l,a.status=o.s,a.ssr=o.ssr,a.updatedAt=o.u,a.error=o.e}async function lk(a){Et(window.$_TSR);const o=a.options.serializationAdapters;if(o?.length){const C=new Map;o.forEach(O=>{C.set(O.key,O.fromSerializable)}),window.$_TSR.t=C,window.$_TSR.buffer.forEach(O=>O())}window.$_TSR.initialized=!0,Et(window.$_TSR.router);const{manifest:i,dehydratedData:r,lastMatchId:c}=window.$_TSR.router;a.ssr={manifest:i};const h=document.querySelector('meta[property="csp-nonce"]')?.content;a.options.ssr={nonce:h};const p=a.matchRoutes(a.state.location),f=Promise.all(p.map(C=>{const O=a.looseRoutesById[C.routeId];return a.loadRouteChunk(O)}));function g(C){const q=a.looseRoutesById[C.routeId].options.pendingMinMs??a.options.defaultPendingMinMs;if(q){const I=Ia();C._nonReactive.minPendingPromise=I,C._forcePending=!0,setTimeout(()=>{I.resolve(),a.updateMatch(C.id,H=>(H._nonReactive.minPendingPromise=void 0,{...H,_forcePending:void 0}))},q)}}function b(C){const O=a.looseRoutesById[C.routeId];O&&(O.options.ssr=C.ssr)}let w;p.forEach(C=>{const O=window.$_TSR.router.matches.find(q=>q.i===C.id);if(!O){C._nonReactive.dehydrated=!1,C.ssr=!1,b(C);return}rk(C,O),b(C),C._nonReactive.dehydrated=C.ssr!==!1,(C.ssr==="data-only"||C.ssr===!1)&&w===void 0&&(w=C.index,g(C))}),a.__store.setState(C=>({...C,matches:p})),await a.options.hydrate?.(r),await Promise.all(a.state.matches.map(async C=>{try{const O=a.looseRoutesById[C.routeId],I=a.state.matches[C.index-1]?.context??a.options.context;if(O.options.context){const W={deps:C.loaderDeps,params:C.params,context:I??{},location:a.state.location,navigate:G=>a.navigate({...G,_fromLocation:a.state.location}),buildLocation:a.buildLocation,cause:C.cause,abortController:C.abortController,preload:!1,matches:p};
12C.__routeContext=O.options.context(W)??void 0}C.context={...I,...C.__routeContext,...C.__beforeLoadContext};const H={ssr:a.options.ssr,matches:a.state.matches,match:C,params:C.params,loaderData:C.loaderData},Y=await O.options.head?.(H),F=await O.options.scripts?.(H);C.meta=Y?.meta,C.links=Y?.links,C.headScripts=Y?.scripts,C.styles=Y?.styles,C.scripts=F}catch(O){if(mt(O))C.error={isNotFound:!0},console.error(`NotFound error during hydration for routeId: ${C.routeId}`,O);else throw C.error=O,console.error(`Error during hydration for route ${C.routeId}:`,O),O}}));const v=p[p.length-1].id!==c;if(!p.some(C=>C.ssr===!1)&&!v)return p.forEach(C=>{C._nonReactive.dehydrated=void 0}),f;const R=Promise.resolve().then(()=>a.load()).catch(C=>{console.error("Error during router hydration:",C)});if(v){const C=p[1];Et(C),g(C),C._displayPending=!0,C._nonReactive.displayPendingPromise=R,R.then(()=>{qo(()=>{a.__store.state.status==="pending"&&a.__store.setState(O=>({...O,status:"idle",resolvedLocation:O.location})),a.updateMatch(C.id,O=>({...O,_displayPending:void 0,displayPendingPromise:void 0}))})})}return f}const ck="__TSS_CONTEXT",ed=Symbol.for("TSS_SERVER_FUNCTION"),uk="x-tss-serialized",dk="x-tss-raw",Cy="application/x-tss-framed",Rn={JSON:0,CHUNK:1,END:2,ERROR:3},Lo=9,ug=1,hk=/;\s*v=(\d+)/;function pk(a){const o=a.match(hk);return o?parseInt(o[1],10):void 0}function mk(a){const o=pk(a);if(o!==void 0&&o!==ug)throw new Error(`Incompatible framed protocol version: server=${o}, client=${ug}. Please ensure client and server are using compatible versions.`)}const _y=()=>window.__TSS_START_OPTIONS__;function fk(){return[..._y()?.serializationAdapters?.map(JS)??[],...mA]}const dg=new TextDecoder,gk=new Uint8Array(0),hg=16*1024*1024,pg=32*1024*1024,mg=1024,fg=1e5;function yk(a){const o=new Map,i=new Map,r=new Set;let c=!1,d=null,h=0,p;const f=new ReadableStream({start(w){p=w},cancel(){c=!0;try{d?.cancel()}catch{}o.forEach(w=>{try{w.error(new Error("Framed response cancelled"))}catch{}}),o.clear(),i.clear(),r.clear()}});function g(w){const v=i.get(w);if(v)return v;if(r.has(w))return new ReadableStream({start(R){R.close()}});if(i.size>=mg)throw new Error(`Too many raw streams in framed response (max ${mg})`);const x=new ReadableStream({start(R){o.set(w,R)},cancel(){r.add(w),o.delete(w),i.delete(w)}});return i.set(w,x),x}function b(w){return g(w),o.get(w)}return(async()=>{const w=a.getReader();d=w;const v=[];let x=0;function R(){if(x<Lo)return null;const O=v[0];if(O.length>=Lo){const G=O[0],U=(O[1]<<24|O[2]<<16|O[3]<<8|O[4])>>>0,V=(O[5]<<24|O[6]<<16|O[7]<<8|O[8])>>>0;return{type:G,streamId:U,length:V}}const q=new Uint8Array(Lo);let I=0,H=Lo;for(let G=0;G<v.length&&H>0;G++){const U=v[G],V=Math.min(U.length,H);q.set(U.subarray(0,V),I),I+=V,H-=V}const Y=q[0],F=(q[1]<<24|q[2]<<16|q[3]<<8|q[4])>>>0,W=(q[5]<<24|q[6]<<16|q[7]<<8|q[8])>>>0;return{type:Y,streamId:F,length:W}}function C(O){if(O===0)return gk;const q=new Uint8Array(O);let I=0,H=O;for(;H>0&&v.length>0;){const Y=v[0];if(!Y)break;const F=Math.min(Y.length,H);q.set(Y.subarray(0,F),I),I+=F,H-=F,F===Y.length?v.shift():v[0]=Y.subarray(F)}return x-=O,q}try{for(;;){const{done:O,value:q}=await w.read();if(c||O)break;if(q){if(x+q.length>pg)throw new Error(`Framed response buffer exceeded ${pg} bytes`);for(v.push(q),x+=q.length;;){const I=R();if(!I)break;const{type:H,streamId:Y,length:F}=I;if(H!==Rn.JSON&&H!==Rn.CHUNK&&H!==Rn.END&&H!==Rn.ERROR)throw new Error(`Unknown frame type: ${H}`);if(H===Rn.JSON){if(Y!==0)throw new Error("Invalid JSON frame streamId (expected 0)")}else if(Y===0)throw new Error("Invalid raw frame streamId (expected non-zero)");if(F>hg)throw new Error(`Frame payload too large: ${F} bytes (max ${hg})`);const W=Lo+F;if(x<W)break;if(++h>fg)throw new Error(`Too many frames in framed response (max ${fg})`);C(Lo);const G=C(F);switch(H){case Rn.JSON:{try{p.enqueue(dg.decode(G))}catch{}break}case Rn.CHUNK:{const U=b(Y);U&&U.enqueue(G);break}case Rn.END:{const U=b(Y);if(r.add(Y),U){try{U.close()}catch{}o.delete(Y)}break}case Rn.ERROR:{const U=b(Y);if(r.add(Y),U){const V=dg.decode(G);U.error(new Error(V)),o.delete(Y)}break}}}}}if(x!==0)throw new Error("Incomplete frame at end of framed response");try{p.close()}catch{}
12o.forEach(O=>{try{O.close()}catch{}}),o.clear()}catch(O){try{p.error(O)}catch{}o.forEach(q=>{try{q.error(O)}catch{}}),o.clear()}finally{try{w.releaseLock()}catch{}d=null}})(),{getOrCreateStream:g,jsonChunks:f}}let Io=null;const wk=Object.prototype.hasOwnProperty;function Ry(a){for(const o in a)if(wk.call(a,o))return!0;return!1}async function bk(a,o,i){Io||(Io=fk());const c=o[0],d=c.fetch??i,h=c.data instanceof FormData?"formData":"payload",p=c.headers?new Headers(c.headers):new Headers;if(p.set("x-tsr-serverFn","true"),h==="payload"&&p.set("accept",`${Cy}, application/x-ndjson, application/json`),c.method==="GET"){if(h==="formData")throw new Error("FormData is not supported with GET requests");const g=await zy(c);if(g!==void 0){const b=Og({payload:g});a.includes("?")?a+=`&${b}`:a+=`?${b}`}}let f;if(c.method==="POST"){const g=await vk(c);g?.contentType&&p.set("content-type",g.contentType),f=g?.body}return await Sk(async()=>d(a,{method:c.method,headers:p,signal:c.signal,body:f}))}async function zy(a){let o=!1;const i={};if(a.data!==void 0&&(o=!0,i.data=a.data),a.context&&Ry(a.context)&&(o=!0,i.context=a.context),o)return My(i)}async function My(a){return JSON.stringify(await Promise.resolve(XS(a,{plugins:Io})))}async function vk(a){if(a.data instanceof FormData){let i;return a.context&&Ry(a.context)&&(i=await My(a.context)),i!==void 0&&a.data.set(ck,i),{body:a.data}}const o=await zy(a);if(o)return{body:o,contentType:"application/json"}}async function Sk(a){let o;try{o=await a()}catch(c){if(c instanceof Response)o=c;else throw console.log(c),c}if(o.headers.get(dk)==="true")return o;const i=o.headers.get("content-type");if(Et(i),!!o.headers.get(uk)){let c;if(i.includes(Cy)){if(mk(i),!o.body)throw new Error("No response body for framed response");const{getOrCreateStream:d,jsonChunks:h}=yk(o.body),f=[pA(d),...Io||[]],g=new Map;c=await kk({jsonStream:h,onMessage:b=>Pu(b,{refs:g,plugins:f}),onError(b,w){console.error(b,w)}})}else if(i.includes("application/x-ndjson")){const d=new Map;c=await Ak({response:o,onMessage:h=>Pu(h,{refs:d,plugins:Io}),onError(h,p){console.error(h,p)}})}else if(i.includes("application/json")){const d=await o.json();c=Pu(d,{plugins:Io})}if(Et(c),c instanceof Error)throw c;return c}if(i.includes("application/json")){const c=await o.json(),d=r0(c);if(d)throw d;if(mt(c))throw c;return c}if(!o.ok)throw new Error(await o.text());return o}async function Ak({response:a,onMessage:o,onError:i}){if(!a.body)throw new Error("No response body");const r=a.body.pipeThrough(new TextDecoderStream).getReader();let c="",d=!1,h;for(;!d;){const{value:p,done:f}=await r.read();if(p&&(c+=p),c.length===0&&f)throw new Error("Stream ended before first object");if(c.endsWith(`
13`)){const g=c.split(`
14`).filter(Boolean),b=g[0];if(!b)throw new Error("No JSON line in the first chunk");h=JSON.parse(b),d=!0,c=g.slice(1).join(`
15`)}else{const g=c.indexOf(`
16`);if(g>=0){const b=c.slice(0,g).trim();c=c.slice(g+1),b.length>0&&(h=JSON.parse(b),d=!0)}}}return(async()=>{try{for(;;){const{value:p,done:f}=await r.read();p&&(c+=p);const g=c.lastIndexOf(`
17`);if(g>=0){const b=c.slice(0,g);c=c.slice(g+1);const w=b.split(`
18`).filter(Boolean);for(const v of w)try{o(JSON.parse(v))}catch(x){i?.(`Invalid JSON line: ${v}`,x)}}if(f)break}}catch(p){i?.("Stream processing error:",p)}})(),o(h)}async function kk({jsonStream:a,onMessage:o,onError:i}){const r=a.getReader(),{value:c,done:d}=await r.read();if(d||!c)throw new Error("Stream ended before first object");const h=JSON.parse(c);return(async()=>{try{for(;;){const{value:p,done:f}=await r.read();if(f)break;
18if(p)try{o(JSON.parse(p))}catch(g){i?.(`Invalid JSON: ${p}`,g)}}}catch(p){i?.("Stream processing error:",p)}})(),o(h)}function xk(a){const o="/_serverFn/"+a;return Object.assign((...c)=>{const d=_y()?.serverFns?.fetch;return bk(o,c,d??fetch)},{url:o,serverFnMeta:{id:a},[ed]:!0})}const Ek={key:"$TSS/serverfn",test:a=>typeof a!="function"||!(ed in a)?!1:!!a[ed],toSerializable:({serverFnMeta:a})=>({functionId:a.id}),fromSerializable:({functionId:a})=>xk(a)};function Tk(){const[a,o]=$.useState(!1),i=qe({select:c=>c.location.pathname});$.useLayoutEffect(()=>{o(!1)},[i]);const r=[{to:"/features",label:"Features",title:"Explore Engine Awesome features"},{to:"/pricing",label:"Pricing",title:"View pricing plans"},{to:"/for",label:"Use Cases",title:"Explore use cases"},{to:"/templates",label:"Templates",title:"Browse app templates"},{to:"/blog",label:"Blog",title:"Read our latest articles"}];return A.jsx("header",{className:"fixed top-0 left-0 right-0 z-50",children:A.jsx("div",{className:"mx-auto max-w-7xl px-4 pt-4",children:A.jsxs("nav",{className:"bg-white dark:bg-slate-950 md:bg-white/25 md:dark:bg-slate-950/25 md:backdrop-blur-lg md:backdrop-saturate-150 border border-white/35 dark:border-white/10 rounded-2xl px-5 py-3 transition-colors duration-300",style:{boxShadow:"0 2px 16px rgba(0, 0, 0, 0.06), inset 0 1px 0 rgba(255, 255, 255, 0.1)"},children:[A.jsxs("div",{className:"flex items-center justify-between",children:[A.jsxs(rt,{to:"/",className:"flex items-center gap-2.5 group",title:"Go to Engine Awesome homepage",onClick:()=>window.scrollTo({top:0,behavior:"smooth"}),children:[A.jsx("div",{className:"w-8 h-8 rounded-lg bg-gradient-to-br from-primary-500 to-accent-500 flex items-center justify-center transition-transform duration-300 group-hover:scale-105",children:A.jsxs("svg",{className:"w-5 h-5 text-white",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[A.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 011.37.49l1.296 2.247a1.125 1.125 0 01-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 010 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 01-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 01-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.212-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 01-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 01-1.369-.49l-1.297-2.247a1.125 1.125 0 01.26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 010-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 01-.26-1.43l1.297-2.247a1.125 1.125 0 011.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28z"}),A.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"})]})}),A.jsxs("span",{className:"text-2xl font-bold tracking-tight",children:[A.jsx("span",{className:"text-black dark:text-white",style:{fontFamily:"'IBM Plex Sans', system-ui, sans-serif"},children:"engine"}),A.jsx("span",{className:"text-[#0069D0] dark:text-[#5BA8FF]",style:{fontFamily:"'Inter', system-ui, sans-serif"},children:"awesome"})]})]}),A.jsx("div",{className:"hidden md:flex items-center gap-7",children:r.map(c=>A.jsx(rt,{to:c.to,className:"text-[13px] font-medium text-slate-500 hover:text-slate-900 dark:text-slate-400 dark:hover:text-white transition-colors",title:c.title,children:c.label},c.to))}),A.jsxs("div",{className:"hidden md:flex items-center gap-3",children:[A.jsx("a",{href:"https://engineawesome.app/login",target:"_blank",rel:"noopener noreferrer",className:"text-[13px] font-medium text-slate-500 hover:text-slate-900 dark:text-slate-400 dark:hover:text-white transition-colors px-3 py-1.5",title:"Log in to your account (opens in new tab)",children:"Log In"}),A.jsx(rt,{to:"/templates",className:"text-[13px] font-medium bg-slate-900 dark:bg-white text-white dark:text-slate-900 px-5 py-2 rounded-full hover:bg-slate-800 dark:hover:bg-slate-100 transition-colors",title:"Get started with Engine Awesome",children:"Get Started"})]}),A.jsx("div",{className:"flex md:hidden items-center gap-2",children:A.jsx("button",{className:"p-2 text-slate-500 dark:text-slate-400",onClick:()=>o(!a),"aria-label":"Toggle menu","aria-expanded":a,children:A.jsx("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:a?A.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M6 18L18 6M6 6l12 12"}):A.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M4 6h16M4 12h16M4 18h16"})})})})]}),a&&A.jsx("div",{className:"menu-enter md:hidden overflow-hidden mt-3 pt-3 border-t border-slate-200/30 dark:border-white/[0.08]",children:A.jsxs("div",{className:"flex flex-col gap-1",children:[r.map(c=>A.jsx(rt,{to:c.to,className:"text-[15px] text-slate-500 hover:text-slate-900 dark:text-slate-400 dark:hover:text-white transition-colors py-2.5 px-2 rounded-lg hover:bg-slate-50 dark:hover:bg-white/[0.04]",onClick:()=>o(!1),title:c.title,children:c.label},c.to)),A.jsx("a",{href:"https://engineawesome.app/login",target:"_blank",rel:"noopener noreferrer",className:"text-[15px] text-slate-500 hover:text-slate-900 dark:text-slate-400 dark:hover:text-white transition-colors py-2.5 px-2 rounded-lg hover:bg-slate-50 dark:hover:bg-white/[0.04]",onClick:()=>o(!1),title:"Log in to your account (opens in new tab)",children:"Log In"}),A.jsx(rt,{to:"/templates",className:"btn-primary text-sm text-center mt-2",onClick:()=>o(!1),title:"Get started with Engine Awesome",children:"Get Started"})]})})]})})})}function Ck({variant:a="full",className:o=""}){const[i,r]=$.useState(""),[c,d]=$.useState("idle"),[h,p]=$.useState(""),f="1156893",g="176879007117083854",b=async w=>{if(w.preventDefault(),!!i){d("loading"),p("");try{if((await fetch(`https://assets.mailerlite.com/jsonp/${f}/forms/${g}/subscribe`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fields:{email:i}})})).ok)d("success"),r("");else throw new Error("Subscription failed")}catch{window.open(`https://dashboard.mailerlite.com/forms/${f}/${g}/share`,"_blank"),d("success"),r("")}}};return c==="success"?A.jsxs("div",{className:`text-center ${o}`,children:[A.jsxs("div",{className:"flex items-center justify-center gap-2 text-green-600 dark:text-green-400",children:[A.jsx("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:A.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})}),A.jsx("span",{className:"font-medium",children:"Thanks for subscribing!"})]}
18),A.jsx("p",{className:"text-sm text-slate-600 dark:text-slate-400 mt-2",children:"Check your inbox to confirm your subscription."})]}):a==="inline"?A.jsx("form",{onSubmit:b,className:o,children:A.jsxs("div",{className:"flex flex-col gap-2",children:[A.jsxs("div",{className:"flex gap-2",children:[A.jsx("label",{htmlFor:"newsletter-email-inline",className:"sr-only",children:"Email address"}),A.jsx("input",{id:"newsletter-email-inline",type:"email",value:i,onChange:w=>r(w.target.value),placeholder:"Enter your email",required:!0,className:"flex-1 px-3 py-2 rounded-lg bg-slate-100 border border-slate-200 text-slate-900 dark:bg-white/10 dark:border-white/20 dark:text-white text-sm placeholder-slate-400 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent transition-colors"}),A.jsx("button",{type:"submit",disabled:c==="loading",className:"px-4 py-2 rounded-lg bg-gradient-to-r from-primary-500 to-accent-500 text-white text-sm font-medium hover:opacity-90 transition-opacity disabled:opacity-50",children:c==="loading"?"...":"Subscribe"})]}),h&&A.jsx("p",{className:"text-xs text-red-500 dark:text-red-400",children:h})]})}):A.jsxs("form",{onSubmit:b,className:`flex flex-col sm:flex-row gap-3 ${o}`,children:[A.jsx("label",{htmlFor:"newsletter-email",className:"sr-only",children:"Email address"}),A.jsx("input",{id:"newsletter-email",type:"email",value:i,onChange:w=>r(w.target.value),placeholder:"Enter your email",required:!0,className:"flex-1 px-4 py-3 rounded-full bg-slate-100 border border-slate-200 text-slate-900 dark:bg-white/10 dark:border-white/20 dark:text-white placeholder-slate-400 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent transition-colors"}),A.jsx("button",{type:"submit",disabled:c==="loading",className:"btn-primary whitespace-nowrap disabled:opacity-50",children:c==="loading"?"Subscribing...":"Subscribe"}),h&&A.jsx("p",{className:"text-xs text-red-500 dark:text-red-400 sm:absolute sm:bottom-0 sm:left-0 sm:translate-y-full sm:pt-2",children:h})]})}function _k(){const a=new Date().getFullYear(),o={product:[{label:"Features",to:"/features"},{label:"Templates",to:"/templates"},{label:"Solutions",to:"/solutions"},{label:"Partners",to:"/partner"},{label:"Pricing",to:"/pricing"},{label:"Compare",to:"/compare"},{label:"Zapier",to:"/zapier"}],company:[{label:"About",to:"/about"},{label:"Blog",to:"/blog"},{label:"Contact",to:"/contact"},{label:"Legal Stuff",to:"/about/policies"}],resources:[{label:"Get Support",to:"/support"},{label:"FAQ",to:"/faq"},{label:"Learn Engine Awesome",href:"https://learn.engineawesome.com"},{label:"Book a Call",to:"/meet/call"},{label:"White-Glove Service",to:"/white-glove-service"}]};return A.jsx("footer",{className:"border-t border-slate-100 dark:border-white/[0.06] mt-20",children:A.jsxs("div",{className:"container-custom section-padding",children:[A.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-8 lg:gap-12",children:[A.jsxs("div",{className:"col-span-2 md:col-span-1",children:[A.jsxs(rt,{to:"/",className:"flex items-center gap-2.5 mb-5",children:[A.jsx("div",{className:"w-7 h-7 rounded-lg bg-gradient-to-br from-primary-500 to-accent-500 flex items-center justify-center",children:A.jsxs("svg",{className:"w-4 h-4 text-white",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:[A.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 011.37.49l1.296 2.247a1.125 1.125 0 01-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 010 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 01-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 01-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.212-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 01-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 01-1.369-.49l-1.297-2.247a1.125 1.125 0 01.26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 010-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.
18125 1.125 0 01-.26-1.43l1.297-2.247a1.125 1.125 0 011.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28z"}),A.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"})]})}),A.jsxs("span",{style:{fontWeight:"bold",fontSize:"1.25rem",lineHeight:"1.2",letterSpacing:"-0.025em"},children:[A.jsx("span",{className:"text-black dark:text-white",style:{fontFamily:"'IBM Plex Sans', system-ui, sans-serif"},children:"engine"}),A.jsx("span",{className:"text-[#0069D0] dark:text-[#5BA8FF]",style:{fontFamily:"'Inter', system-ui, sans-serif"},children:"awesome"})]})]}),A.jsx("p",{className:"text-sm text-slate-500 dark:text-slate-500 mb-6 leading-relaxed",children:"Build custom applications without code. The no-code platform for modern businesses."}),A.jsxs("div",{className:"flex gap-4 flex-wrap",children:[A.jsx("a",{href:"https://twitter.com/engineawesome",target:"_blank",rel:"noopener noreferrer",className:"text-slate-400 hover:text-slate-600 dark:text-slate-500 dark:hover:text-white transition-colors","aria-label":"Twitter",children:A.jsx("svg",{className:"w-[18px] h-[18px]",fill:"currentColor",viewBox:"0 0 24 24",children:A.jsx("path",{d:"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"})})}),A.jsx("a",{href:"https://www.facebook.com/engineawesome",target:"_blank",rel:"noopener noreferrer",className:"text-slate-400 hover:text-slate-600 dark:text-slate-500 dark:hover:text-white transition-colors","aria-label":"Facebook",children:A.jsx("svg",{className:"w-[18px] h-[18px]",fill:"currentColor",viewBox:"0 0 24 24",children:A.jsx("path",{d:"M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"})})}),A.jsx("a",{href:"https://www.youtube.com/@engineawesome",target:"_blank",rel:"noopener noreferrer",className:"text-slate-400 hover:text-slate-600 dark:text-slate-500 dark:hover:text-white transition-colors","aria-label":"YouTube",children:A.jsx("svg",{className:"w-[18px] h-[18px]",fill:"currentColor",viewBox:"0 0 24 24",children:A.jsx("path",{d:"M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"})})}),A.jsx("a",{href:"https://www.linkedin.com/company/engineawesome/",target:"_blank",rel:"noopener noreferrer",className:"text-slate-400 hover:text-slate-600 dark:text-slate-500 dark:hover:text-white transition-colors","aria-label":"LinkedIn",children:A.jsx("svg",{className:"w-[18px] h-[18px]",fill:"currentColor",viewBox:"0 0 24 24",children:A.jsx("path",{d:"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"})})}),A.jsx("a",{href:"https://www.instagram.com/engineawesome/",target:"_blank",rel:"noopener noreferrer",className:"text-slate-400 hover:text-slate-600 dark:text-slate-500 dark:hover:text-white transition-colors","aria-label":"Instagram",children:A.jsx("svg",{className:"w-[18px] h-[18px]",fill:"currentColor",viewBox:"0 0 24 24",children:A.jsx("path",{d:"M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zM12 0C8.741 0 8.333.014 7.053.072 2.695.272.273 2.69.073 7.052.014 8.333 0 8.741 0 12c0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98C8.333 23.986 8.741 24 12 24c3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98C15.668.014 15.259 0 12 0zm0 5.838a6.162 6.162 0 1 0 0 12.324 6.162 6.162 0 0 0 0-12.324zM12 16a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm6.406-11.845a1.44 1.44 0 1 0 0 2.881 1.44 1.44 0 0 0 0-2.881z"})})}),A.jsx("a",{href:"https://www.pinterest.com/engineawesome/",target:"_blank",rel:"noopener noreferrer",className:"text-slate-400 hover:text-slate-600 dar
18k:text-slate-500 dark:hover:text-white transition-colors","aria-label":"Pinterest",children:A.jsx("svg",{className:"w-[18px] h-[18px]",fill:"currentColor",viewBox:"0 0 24 24",children:A.jsx("path",{d:"M12 0C5.373 0 0 5.372 0 12c0 5.084 3.163 9.426 7.627 11.174-.105-.949-.2-2.405.042-3.441.218-.937 1.407-5.965 1.407-5.965s-.359-.719-.359-1.782c0-1.668.967-2.914 2.171-2.914 1.023 0 1.518.769 1.518 1.69 0 1.029-.655 2.568-.994 3.995-.283 1.194.599 2.169 1.777 2.169 2.133 0 3.772-2.249 3.772-5.495 0-2.873-2.064-4.882-5.012-4.882-3.414 0-5.418 2.561-5.418 5.207 0 1.031.397 2.138.893 2.738a.36.36 0 0 1 .083.345l-.333 1.36c-.053.22-.174.267-.402.161-1.499-.698-2.436-2.889-2.436-4.649 0-3.785 2.75-7.262 7.929-7.262 4.163 0 7.398 2.967 7.398 6.931 0 4.136-2.607 7.464-6.227 7.464-1.216 0-2.359-.631-2.75-1.378l-.748 2.853c-.271 1.043-1.002 2.35-1.492 3.146C9.57 23.812 10.763 24 12 24c6.627 0 12-5.373 12-12 0-6.628-5.373-12-12-12z"})})})]})]}),A.jsxs("div",{children:[A.jsx("p",{className:"text-xs font-semibold text-slate-900 dark:text-white mb-4 uppercase tracking-wider",children:"Product"}),A.jsx("ul",{className:"space-y-3",children:o.product.map(i=>A.jsx("li",{children:i.to?A.jsx(rt,{to:i.to,className:"text-sm text-slate-500 hover:text-slate-900 dark:text-slate-500 dark:hover:text-white transition-colors",children:i.label}):A.jsx("a",{href:i.href,target:"_blank",rel:"noopener noreferrer",className:"text-sm text-slate-500 hover:text-slate-900 dark:text-slate-500 dark:hover:text-white transition-colors",children:i.label})},i.label))})]}),A.jsxs("div",{children:[A.jsx("p",{className:"text-xs font-semibold text-slate-900 dark:text-white mb-4 uppercase tracking-wider",children:"Company"}),A.jsx("ul",{className:"space-y-3",children:o.company.map(i=>A.jsx("li",{children:i.to?A.jsx(rt,{to:i.to,className:"text-sm text-slate-500 hover:text-slate-900 dark:text-slate-500 dark:hover:text-white transition-colors",children:i.label}):A.jsx("a",{href:i.href,target:"_blank",rel:"noopener noreferrer",className:"text-sm text-slate-500 hover:text-slate-900 dark:text-slate-500 dark:hover:text-white transition-colors",children:i.label})},i.label))})]}),A.jsxs("div",{children:[A.jsx("p",{className:"text-xs font-semibold text-slate-900 dark:text-white mb-4 uppercase tracking-wider",children:"Resources"}),A.jsx("ul",{className:"space-y-3",children:o.resources.map(i=>A.jsx("li",{children:i.to?A.jsx(rt,{to:i.to,className:"text-sm text-slate-500 hover:text-slate-900 dark:text-slate-500 dark:hover:text-white transition-colors",children:i.label}):A.jsx("a",{href:i.href,target:"_blank",rel:"noopener noreferrer",className:"text-sm text-slate-500 hover:text-slate-900 dark:text-slate-500 dark:hover:text-white transition-colors",children:i.label})},i.label))})]})]}),A.jsx("div",{className:"mt-16 pt-10 border-t border-slate-100 dark:border-white/[0.06]",children:A.jsxs("div",{className:"flex flex-col md:flex-row md:items-center md:justify-between gap-6",children:[A.jsxs("div",{className:"md:max-w-sm",children:[A.jsx("p",{className:"text-sm font-semibold text-slate-900 dark:text-white mb-2",children:"Stay in the loop"}),A.jsx("p",{className:"text-sm text-slate-500 dark:text-slate-500",children:"Get the latest updates, tips, and news delivered to your inbox."})]}),A.jsx("div",{className:"md:w-96",children:A.jsx(Ck,{variant:"inline"})})]})}),A.jsxs("div",{className:"mt-12 pt-8 border-t border-slate-100 dark:border-white/[0.06] flex flex-col md:flex-row justify-between items-center gap-4",children:[A.jsxs("p",{className:"text-sm text-slate-400 dark:text-slate-500",children:["© ",a," Engine Awesome. All rights reserved."]}),A.jsxs("div",{className:"flex gap-6",children:[A.jsx(rt,{to:"/about/policies/privacy-policy",className:"text-sm text-slate-400 hover:text-slate-600 dark:text-slate-500 dark:hover:text-white transition-colors",children:"Privacy Policy"}),A.jsx(rt,{to:"/about/policies/terms-and-conditions",className:"text-sm text-slate-400 hover:text-slate-600 dark:text-slate-500 dark:hover:text-white transition-colors",children:"Terms of Service"})]})]})]})})}const Rk=$.createContext(void 0);function zk({children:a}){const[o,i]=$.useState("light"),[r,c]=$.useState(!1);$.useEffect(()=>{$.startTransition(()=>{c(!0)})},[]),$.useEffect(()=>{if(!r)return;const p=document.documentElement;p.classList.remove("dark"),p.classList.add("light")},[r]);const d=()=>{i(p=>p==="dark"?"light":"dark")},h=p=>{i(p)};return r?A.jsx(Rk.Provider,{value:{theme:o,toggleTheme:d,setTheme:h},children:a}):null}function ll(a,o="-12%"){const[i,r]=$.useState("idle");return $.useEffect(()=>{const c=a.current;if(!c)return;const d=c.getBoundingClientRect();if(d.top<window.innerHeight&&d.bottom>0)return;const p=window.matchMedia("(max-width: 768px)").matches?"0%":o;r("ready");const f=new IntersectionObserver(([g])=>{g.isIntersecting&&(r("visible"),f.disconnect())},{rootMargin:p});return f.observe(c),()=>f.disconnect()}
18,[o]),i}const Fo="cubic-bezier(0.16, 1, 0.3, 1)";function Qi({children:a,className:o="",delay:i=0,margin:r}){const c=$.useRef(null),d=ll(c,r),h=d!=="idle";return A.jsx("div",{ref:c,className:o,style:h?{opacity:d==="visible"?1:0,transform:d==="visible"?"none":"translateY(12px)",transition:`opacity 1s ${i}s ${Fo}, transform 1s ${i}s ${Fo}`}:void 0,children:a})}function KT({children:a,className:o="",delay:i=0}){const r=$.useRef(null),c=ll(r),d=c!=="idle";return A.jsx("div",{ref:r,className:o,style:d?{opacity:c==="visible"?1:0,transform:c==="visible"?"none":"translateY(12px)",transition:`opacity 1s ${i}s ${Fo}, transform 1s ${i}s ${Fo}`}:void 0,children:a})}const jy=$.createContext(null);function XT({children:a,className:o="",staggerDelay:i=.15,margin:r}){const c=$.useRef(null),d=ll(c,r);return A.jsx(jy.Provider,{value:{reveal:d,staggerDelay:i},children:A.jsx("div",{ref:c,className:o,children:a})})}function JT({children:a,className:o="",direction:i="up",index:r=0}){const c=$.useContext(jy),d=$.useRef(null),h=ll(d),p=c?c.reveal:h,f=c?r*c.staggerDelay:0,g=p!=="idle",b=i==="left"?"translateX(-12px)":"translateY(12px)";return A.jsx("div",{ref:d,className:o,style:g?{opacity:p==="visible"?1:0,transform:p==="visible"?"none":b,transition:`opacity 1s ${f}s ${Fo}, transform 1s ${f}s ${Fo}`}:void 0,children:a})}function eC({children:a,className:o=""}){return A.jsx("div",{className:o,children:a})}const Mk="/assets/global-C_JjGVZx.css",jk=`
19  (function() {
20    document.documentElement.classList.add('light');
21    document.documentElement.classList.remove('dark');
22  })();
23`;function Ok(){const a=[{icon:A.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.5,children:A.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z"})}),title:"Visual Builder",description:"Drag & drop interface - no coding required"},{icon:A.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.5,children:A.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M13 10V3L4 14h7v7l9-11h-7z"})}),title:"Launch Fast",description:"Pre-built templates to get started in minutes"},{icon:A.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.5,children:A.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M18.364 5.636l-3.536 3.536m0 5.656l3.536 3.536M9.172 9.172L5.636 5.636m3.536 9.192l-3.536 3.536M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-5 0a4 4 0 11-8 0 4 4 0 018 0z"})}),title:"White Glove Support",description:"Real humans ready to help you succeed"},{icon:A.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.5,children:A.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"})}),title:"Own Your Data",description:"Your data belongs to you - export anytime"}],o=[{to:"/",label:"Home"},{to:"/features",label:"Features"},{to:"/templates",label:"Templates"},{to:"/pricing",label:"Pricing"}];return A.jsxs("div",{className:"pt-24 pb-16 section-padding min-h-[90vh] flex items-center relative overflow-hidden",children:[A.jsxs("div",{className:"absolute inset-0 pointer-events-none overflow-hidden",children:[A.jsx("div",{className:"absolute -top-40 -right-40 w-96 h-96 bg-gradient-to-br from-primary-500/20 to-accent-500/20 rounded-full blur-3xl animate-pulse"}),A.jsx("div",{className:"absolute -bottom-40 -left-40 w-96 h-96 bg-gradient-to-tr from-accent-500/20 to-primary-500/20 rounded-full blur-3xl animate-pulse",style:{animationDelay:"1.5s"}}),A.jsx("div",{className:"absolute top-1/4 right-[10%] opacity-10 dark:opacity-5 animate-spin-slow",children:A.jsx("svg",{className:"w-32 h-32 text-primary-500",fill:"currentColor",viewBox:"0 0 24 24",children:A.jsx("path",{d:"M12 15.5A3.5 3.5 0 0 1 8.5 12A3.5 3.5 0 0 1 12 8.5a3.5 3.5 0 0 1 3.5 3.5a3.5 3.5 0 0 1-3.5 3.5m7.43-2.53c.04-.32.07-.64.07-.97c0-.33-.03-.66-.07-1l2.11-1.63c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.31-.61-.22l-2.49 1c-.52-.39-1.06-.73-1.69-.98l-.37-2.65A.506.506 0 0 0 14 2h-4c-.25 0-.46.18-.5.42l-.37 2.65c-.63.25-1.17.59-1.69.98l-2.49-1c-.22-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49.12.64L4.57 11c-.04.34-.07.67-.07 1c0 .33.03.65.07.97l-2.11 1.66c-.19.15-.25.42-.12.64l2 3.46c.12.22.39.3.61.22l2.49-1.01c.52.4 1.06.74 1.69.99l.37 2.65c.04.24.25.42.5.42h4c.25 0 .46-.18.5-.42l.37-2.65c.63-.26 1.17-.59 1.69-.99l2.49 1.01c.22.08.49 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.66Z"})})}),A.jsx("div",{className:"absolute bottom-1/4 left-[5%] opacity-10 dark:opacity-5 animate-spin-reverse",children:A.jsx("svg",{className:"w-24 h-24 text-accent-500",fill:"currentColor",viewBox:"0 0 24 24",children:A.jsx("path",{d:"M12 15.5A3.5 3.5 0 0 1 8.5 12A3.5 3.5 0 0 1 12 8.5a3.5 3.5 0 0 1 3.5 3.5a3.5 3.5 0 0 1-3.5 3.5m7.43-2.53c.04-.32.07-.64.07-.97c0-.33-.03-.66-.07-1l2.11-1.63c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.31-.61-.22l-2.49 1c-.52-.39-1.06-.73-1.69-.98l-.37-2.65A.506.506 0 0 0 14 2h-4c-.25 0-.46.18-.5.42l-.37 2.65c-.63.25-1.17.59-1.69.98l-2.49-1c-.22-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49.12.64L4.57 11c-.04.34-.07.67-.07 1c0 .33.03.65.07.97l-2.11 1.66c-.19.15-.25.42-.12.64l2 3.46c.12.22.39.3.61.22l2.49-1.01c.52.4 1.06.74 1.69.99l.37 2.65c.04.24.25.42.5.42h4c.25 0 .46-.18.5-.42l.37-2.65c.63-.26 1.17-.59 1.69-.99l2.49 1.01c.22.08.49 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.66Z"})})})]}),A.jsx("div",{className:"container-custom w-full relative z-10",children:A.jsxs("div",{className:"max-w-4xl mx-auto",children:[A.jsxs("div",{className:"text-center mb-12",children:[A.jsx(Qi,{children:A.jsxs("div",{className:"relative mb-6 inline-block animate-float",children:[A.jsx("div",{className:"absolute inset-0 blur-3xl op
23acity-40",children:A.jsx("div",{className:"w-full h-full bg-gradient-to-r from-primary-500 via-accent-500 to-primary-500 rounded-full"})}),A.jsx("div",{className:"relative",children:A.jsxs("span",{className:"text-[8rem] sm:text-[12rem] lg:text-[14rem] font-extrabold leading-none gradient-text select-none tracking-tighter",children:["4",A.jsxs("span",{className:"inline-block relative",children:[A.jsx("span",{className:"opacity-0",children:"0"}),A.jsx("span",{className:"absolute inset-0 flex items-center justify-center animate-spin-medium",children:A.jsxs("svg",{className:"w-[5.5rem] sm:w-[8.5rem] lg:w-[10rem] h-[5.5rem] sm:h-[8.5rem] lg:h-[10rem]",fill:"url(#gearGradient)",viewBox:"0 0 24 24",children:[A.jsx("defs",{children:A.jsxs("linearGradient",{id:"gearGradient",x1:"0%",y1:"0%",x2:"100%",y2:"100%",children:[A.jsx("stop",{offset:"0%",stopColor:"#0c87f2"}),A.jsx("stop",{offset:"100%",stopColor:"#d946ef"})]})}),A.jsx("path",{d:"M12 15.5A3.5 3.5 0 0 1 8.5 12A3.5 3.5 0 0 1 12 8.5a3.5 3.5 0 0 1 3.5 3.5a3.5 3.5 0 0 1-3.5 3.5m7.43-2.53c.04-.32.07-.64.07-.97c0-.33-.03-.66-.07-1l2.11-1.63c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.31-.61-.22l-2.49 1c-.52-.39-1.06-.73-1.69-.98l-.37-2.65A.506.506 0 0 0 14 2h-4c-.25 0-.46.18-.5.42l-.37 2.65c-.63.25-1.17.59-1.69.98l-2.49-1c-.22-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49.12.64L4.57 11c-.04.34-.07.67-.07 1c0 .33.03.65.07.97l-2.11 1.66c-.19.15-.25.42-.12.64l2 3.46c.12.22.39.3.61.22l2.49-1.01c.52.4 1.06.74 1.69.99l.37 2.65c.04.24.25.42.5.42h4c.25 0 .46-.18.5-.42l.37-2.65c.63-.26 1.17-.59 1.69-.99l2.49 1.01c.22.08.49 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.66Z"})]})})]}),"4"]})}),A.jsxs("div",{className:"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-full h-full pointer-events-none",children:[A.jsx("div",{className:"absolute top-4 left-8 w-3 h-3 bg-primary-500 rounded-full animate-float",style:{animationDuration:"2s"}}),A.jsx("div",{className:"absolute top-1/4 right-4 w-2 h-2 bg-accent-500 rounded-full animate-float",style:{animationDuration:"2.5s",animationDelay:"0.5s"}}),A.jsx("div",{className:"absolute bottom-1/3 left-4 w-4 h-4 bg-primary-400 rounded-full animate-float",style:{animationDuration:"3s",animationDelay:"1s"}}),A.jsx("div",{className:"absolute bottom-8 right-12 w-2 h-2 bg-accent-400 rounded-full animate-float",style:{animationDuration:"2s",animationDelay:"0.3s"}})]})]})}),A.jsxs(Qi,{delay:.1,children:[A.jsxs("h1",{className:"mb-4",children:["Looks like you're ",A.jsx("span",{className:"gradient-text",children:"lost"})]}),A.jsx("p",{className:"text-lg sm:text-xl text-slate-600 dark:text-slate-400 mb-2 max-w-xl mx-auto",children:"This page doesn't exist, but don't worry!"}),A.jsxs("p",{className:"text-base text-slate-500 dark:text-slate-500 max-w-lg mx-auto",children:["With ",A.jsx("span",{className:"font-semibold text-primary-500",children:"Engine Awesome"}),", building apps is never confusing."]})]})]}),A.jsx(Qi,{delay:.2,children:A.jsxs("div",{className:"glass-card mb-8",children:[A.jsx("h2",{className:"text-center text-sm font-semibold text-slate-500 dark:text-slate-400 uppercase tracking-wider mb-6",children:"While you're here, discover what makes us awesome"}),A.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:a.map(i=>A.jsxs("div",{className:"p-4 rounded-xl bg-slate-100/50 dark:bg-white/5 hover:bg-slate-200/50 dark:hover:bg-white/10 transition-all hover:scale-105 cursor-default",children:[A.jsx("div",{className:"w-10 h-10 rounded-lg bg-gradient-to-br from-primary-500/20 to-accent-500/20 flex items-center justify-center mb-3 text-primary-500 dark:text-primary-400",children:i.icon}),A.jsx("h3",{className:"font-semibold text-slate-900 dark:text-white mb-1",children:i.title}),A.jsx("p",{className:"text-sm text-slate-600 dark:text-slate-400",children:i.description})]},i.title))})]})}),A.jsx(Qi,{delay:.4,children:A.jsxs("div",{className:"flex flex-col sm:flex-row items-center justify-center gap-4 mb-8",children:[A.jsxs(rt,{to:"/templates",className:"btn-primary inline-flex items-center gap-2",children:[A.jsx("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:A.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M13 10V3L4 14h7v7l9-11h-7z"})}),"Start Building Free"]}),A.jsxs(rt,{to:"/",className:"btn-secondary inline-flex items-center gap-2",children:[A.jsx("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:A.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"})}),"Go Home"]})]})}),A.jsx(Qi,{delay:.5,children:A.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-2 text-sm",children:[A.jsx("span",{className:"text-slate-500 dark:text-slate-500",children:"Qu
23ick links:"}),o.map((i,r)=>A.jsxs("span",{className:"flex items-center",children:[A.jsx(rt,{to:i.to,className:"text-primary-500 dark:text-primary-400 hover:text-primary-600 dark:hover:text-primary-300 hover:underline transition-colors",children:i.label}),r<o.length-1&&A.jsx("span",{className:"text-slate-300 dark:text-slate-700 mx-2",children:"•"})]},i.to))]})})]})})]})}function Nk(){const a=qe({select:i=>i.location.pathname}),o=$.useRef(!1);return $.useEffect(()=>{o.current=!0},[]),A.jsx("div",{className:o.current?"page-enter":"",children:A.jsx(Ey,{})},a)}const Bk={"@context":"https://schema.org","@type":"Organization",name:"Engine Awesome",url:"https://engineawesome.com",logo:"https://engineawesome.com/og-image.png",sameAs:["https://twitter.com/engineawesome"]},Lk={"@context":"https://schema.org","@type":"SoftwareApplication",name:"Engine Awesome",applicationCategory:"BusinessApplication",operatingSystem:"Web",description:"Build custom applications without code. The no-code platform for modern businesses.",featureList:["Drag-and-drop visual builder","Pre-built app templates","Zapier integration","REST API","White-glove support","Data export"],offers:{"@type":"AggregateOffer",lowPrice:"0",highPrice:"199",priceCurrency:"USD",url:"https://engineawesome.com/pricing"}},Dk={"@context":"https://schema.org","@type":"WebSite",name:"Engine Awesome",url:"https://engineawesome.com"},Ue=IA({notFoundComponent:Ok,head:()=>({meta:[{charSet:"utf-8"},{name:"viewport",content:"width=device-width, initial-scale=1"},{property:"og:site_name",content:"Engine Awesome"},{property:"og:image:width",content:"1200"},{property:"og:image:height",content:"630"},{property:"og:image:alt",content:"Engine Awesome - No-code platform for modern businesses"},{property:"og:locale",content:"en_US"},{property:"fb:app_id",content:"178876915003172"},{name:"twitter:card",content:"summary_large_image"},{name:"twitter:site",content:"@engineawesome"},{name:"twitter:creator",content:"@engineawesome"},{name:"twitter:image:alt",content:"Engine Awesome - No-code platform for modern businesses"},{name:"application-name",content:"Engine Awesome"},{name:"apple-mobile-web-app-title",content:"Engine Awesome"},{name:"mobile-web-app-capable",content:"yes"},{name:"apple-mobile-web-app-status-bar-style",content:"black-translucent"},{name:"theme-color",content:"#6366f1"},{name:"msapplication-TileColor",content:"#6366f1"}],links:[{rel:"stylesheet",href:Mk},{rel:"icon",href:"/favicon.ico",sizes:"any"},{rel:"icon",href:"/favicon-16x16.png",sizes:"16x16",type:"image/png"},{rel:"icon",href:"/favicon-32x32.png",sizes:"32x32",type:"image/png"},{rel:"icon",href:"/icon.svg",type:"image/svg+xml"},{rel:"apple-touch-icon",href:"/apple-touch-icon.png",sizes:"180x180"},{rel:"manifest",href:"/site.webmanifest"}],scripts:[{type:"application/ld+json",children:JSON.stringify(Bk)},{type:"application/ld+json",children:JSON.stringify(Lk)},{type:"application/ld+json",children:JSON.stringify(Dk)}]}),component:Pk});function Pk(){return A.jsxs("html",{lang:"en",className:"light",children:[A.jsxs("head",{children:[A.jsx(ik,{}),A.jsx("script",{dangerouslySetInnerHTML:{__html:jk}}),A.jsx("script",{async:!0,src:"https://www.googletagmanager.com/gtag/js?id=G-TXESH348ET"}),A.jsx("script",{dangerouslySetInnerHTML:{__html:"
vendor: 118 bytes, line 23
23window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}gtag('js',new Date());gtag('config','
23G-TXESH348ET
vendor: 3 bytes, line 23
23');
23"}})]}),A.jsxs("body",{className:"min-h-screen mesh-gradient",children:[A.jsx(zk,{children:A.jsxs("div",{className:"w-full overflow-x-hidden",children:[A.jsx("a",{href:"#main-content",className:"sr-only focus:not-sr-only focus:absolute focus:top-4 focus:left-4 focus:z-[100] focus:px-4 focus:py-2 focus:bg-primary-500 focus:text-white focus:rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-300",children:"Skip to main content"}),A.jsx(Tk,{}),A.jsx("main",{id:"main-content",children:A.jsx(Nk,{})}),A.jsx(_k,{})]})}),A.jsx(sk,{})]})]})}const qk="modulepreload",Uk=function(a){return"/"+a},gg={},ee=function(o,i,r){let c=Promise.resolve();if(i&&i.length>0){let f=function(g){return Promise.all(g.map(b=>Promise.resolve(b).then(w=>({status:"fulfilled",value:w}),w=>({status:"rejected",reason:w}))))};document.getElementsByTagName("link");const h=document.querySelector("meta[property=csp-nonce]"),p=h?.nonce||h?.getAttribute("nonce");c=f(i.map(g=>{if(g=Uk(g),g in gg)return;gg[g]=!0;const b=g.endsWith(".css"),w=b?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${g}"]${w}`))return;const v=document.createElement("link");if(v.rel=b?"stylesheet":qk,b||(v.as="script"),v.crossOrigin="",v.href=g,p&&v.setAttribute("nonce",p),document.head.appendChild(v),b)return new Promise((x,R)=>{v.addEventListener("load",x),v.addEventListener("error",()=>R(new Error(`Unable to preload CSS for ${g}`)))})}))}function d(h){const p=new Event("vite:preloadError",{cancelable:!0});if(p.payload=h,window.dispatchEvent(p),!p.defaultPrevented)throw h}return c.then(h=>{for(const p of h||[])p.status==="rejected"&&d(p.reason);return o().catch(d)})},Oy="https://engineawesome.com",Hk=`${Oy}/og-image.png`;function Yk(a){if(!a)return"/";const o=a.startsWith("/")?a:`/${a}`;return o==="/"?"/":o.endsWith("/")?o:`${o}/`}function se({title:a,description:o,pathname:i,image:r,type:c="website",noindex:d}){const h=Yk(i),p=`${Oy}${h}`,f=r??Hk;return{meta:[{title:a},{name:"description",content:o},{property:"og:title",content:a},{property:"og:description",content:o},{property:"og:url",content:p},{property:"og:type",content:c},{property:"og:image",content:f},{name:"twitter:title",content:a},{name:"twitter:description",content:o},{name:"twitter:image",content:f},{name:"robots",content:d?"noindex, nofollow":"index, follow"}],links:[{rel:"canonical",href:p}]}}const Ik=()=>ee(()=>import("./zapier-ChDIINcb.js"),__vite__mapDeps([0,1])),Wk=ne("/zapier")({component:J(Ik,"component"),head:()=>se({title:"Zapier Integration - Engine Awesome",description:"Connect Engine Awesome with thousands of apps using Zapier. Automate workflows and streamline your business processes.",pathname:"/zapier/"})}),Fk=()=>ee(()=>import("./white-glove-service-BHFtUxDk.js"),__vite__mapDeps([2,1])),Gk=ne("/white-glove-service")({component:J(Fk,"component"),head:()=>se({title:"White Glove Service - Engine Awesome",description:"Professional onboarding and custom application development starting at $995. Let our experts build and configure Engine Awesome for your business.",pathname:"/white-glove-service/"})}),Qk=()=>ee(()=>import("./templates-C1H-dJe5.js"),__vite__mapDeps([3,1])),Vk=ne("/templates")({component:J(Qk,"component")}),$k=()=>ee(()=>import("./support-ChcXPX2i.js"),__vite__mapDeps([4,1,5,6,7])),Zk=ne("/support")({component:J($k,"component"),head:()=>se({title:"Get Support - Engine Awesome",description:"Get help with Engine Awesome. Access documentation, contact support, or browse our knowledge base.",pathname:"/support/"})}),Kk=()=>ee(()=>import("./pricing-B0ol71DW.js"),__vite__mapDeps([8,1])),Xk=ne("/pricing")({component:J(Kk,"component"),head:()=>se({title:"Pricing - Engine Awesome",description:"Simple, transparent pricing for Engine Awesome. Start free and scale as you grow. No hidden fees.",pathname:"/pricing/"})}),Jk=()=>ee(()=>import("./partner-DmJg9YS1.js"),__vite__mapDeps([9,1])),ex=ne("/partner")({component:J(Jk,"component")}),tx=()=>ee(()=>import("./meet-CvBrFCQC.js"),__vite__mapDeps([10,1])),nx=ne("/meet")({component:J(tx,"component")}),ax=()=>ee(()=>import("./for-DSo4X3HX.js"),__vite__mapDeps([11,1])),ox=ne("/for")({component:J(ax,"component")}),ix=()=>ee(()=>import("./features-CaEZuptE.js"),__vite__mapDeps([12,1])),sx=ne("/features")({component:J(ix,"component"),head:()=>se({title:"Features - Engine Awesome",description:"Discover the powerful features that make Engine Awesome the best no-code platform for building custom business applications.",pathname:"/features/"})}),rx=()=>ee(()=>
23import("./faq-C_gaicRL.js"),__vite__mapDeps([13,1])),lx=[{category:"About Engine Awesome",faqs:[{question:"What is Engine Awesome?",answer:"Engine Awesome is a no-code application builder that lets businesses create custom software — CRMs, project trackers, rental management tools, field service apps, and more — without writing a single line of code. You drag, drop, and configure instead of hiring developers."},{question:"Who is Engine Awesome for?",answer:"Engine Awesome is built for small and medium-sized businesses, operations teams, and entrepreneurs who need custom software but don't have developer resources. It's ideal for industries like field services, rentals, healthcare, real estate, and nonprofits."},{question:"Is Engine Awesome really no-code?",answer:"Yes — no coding knowledge is required. You build apps visually using a drag-and-drop interface. If you can use a spreadsheet, you can build an app in Engine Awesome. For teams that want to extend apps further, a REST API is also available."},{question:"How is Engine Awesome different from Airtable, Glide, or AppSheet?",answer:"Engine Awesome combines a flexible database with a visual app builder and white-glove support in one platform. Unlike Airtable (spreadsheet-first) or Glide (mobile-first), Engine Awesome is purpose-built for operational business apps with complex workflows, Zapier automation, and a full REST API — plus a real support team that helps you succeed."}]},{category:"Features & Integrations",faqs:[{question:"Does Engine Awesome integrate with Zapier?",answer:"Yes. Engine Awesome has native Zapier integration, so you can connect it to thousands of other tools like Gmail, Slack, QuickBooks, Salesforce, Google Sheets, and more — without any code."},{question:"Can I build a CRM without coding?",answer:"Absolutely. Engine Awesome is one of the most popular no-code platforms for building custom CRMs. You can track contacts, companies, deals, follow-ups, and pipelines — all configured exactly the way your business works, not a generic template."},{question:"Does Engine Awesome have a REST API?",answer:"Yes. Every app built on Engine Awesome comes with a REST API, letting you connect to external systems, sync data with other software, or build custom integrations beyond what Zapier covers."},{question:"What kinds of apps can I build with Engine Awesome?",answer:"Common apps include CRMs, project management tools, field service job trackers, equipment rental management systems, inventory trackers, nonprofit volunteer databases, and client portals. If it involves storing and managing data, you can likely build it in Engine Awesome."},{question:"Does Engine Awesome support custom templates?",answer:"Yes. Engine Awesome offers a library of pre-built templates for common business use cases so you can launch faster. Templates can be fully customized — they're a starting point, not a constraint."}]},{category:"Pricing & Plans",faqs:[{question:"Is there a free plan for Engine Awesome?",answer:"Yes. The Free plan lets you build one application with up to 1,000 records at no cost, forever."},{question:"How much does Engine Awesome cost?",answer:A.jsxs(A.Fragment,{children:["Engine Awesome has three tiers: Free (one app, 1,000 records), Pro starting at $39–$49/month (unlimited apps, up to 50,000 records, Zapier, API), and Business starting at $159–$199/month (higher limits, priority support, advanced features). Annual plans include a 20% discount. For large organizations with custom security, compliance, or invoicing needs, we also offer an Enterprise plan with custom pricing — ",A.jsx(rt,{to:"/contact",className:"underline hover:text-slate-900 dark:hover:text-white transition-colors",children:"contact our sales team to get a quote"}),"."]}),answerText:"Engine Awesome has three tiers: Free (one app, 1,000 records), Pro starting at $39–$49/month (unlimited apps, up to 50,000 records, Zapier, API), and Business starting at $159–$199/month (higher limits, priority support, advanced features). Annual plans include a 20% discount. For large organizations with custom security, compliance, or invoicing needs, we also offer an Enterprise plan with custom pricing — contact our sales team to get a quote."},{question:"Can I cancel my Engine Awesome subscription anytime?",answer:"Yes. There are no long-term contracts. Monthly plans can be cancelled at any time. Annual plans are billed upfront but are not subject to automatic renew
23al without notice."},{question:"Do you offer discounts for nonprofits or educational institutions?",answer:"Yes. Engine Awesome offers special pricing for qualified nonprofit organizations, educational institutions, and open-source projects. Reach out to the sales team to learn more."}]},{category:"Getting Started & Support",faqs:[{question:"How quickly can I launch an app with Engine Awesome?",answer:"Many customers launch their first working app in a day using a pre-built template. A fully custom app typically takes a few days to a couple of weeks depending on complexity — far faster than traditional software development."},{question:"What is white-glove support?",answer:"White-glove support means real humans help you succeed — not just a knowledge base. Engine Awesome's team can assist with setup, data migration, workflow design, and troubleshooting. Higher-tier plans include priority access to this hands-on support."},{question:"Can I migrate data from another platform to Engine Awesome?",answer:"Yes. Engine Awesome supports data imports via CSV and through its REST API. The white-glove support team can also assist with migrations from spreadsheets, legacy systems, or other no-code platforms."},{question:"Is my data secure in Engine Awesome?",answer:"Yes. Engine Awesome uses encrypted connections, role-based access controls, and regular backups to protect your data. Your data belongs to you and can be exported at any time."}]}],cx={"@context":"https://schema.org","@type":"FAQPage",mainEntity:lx.flatMap(a=>a.faqs.map(o=>({"@type":"Question",name:o.question,acceptedAnswer:{"@type":"Answer",text:typeof o.answer=="string"?o.answer:o.answerText??""}})))},ux=ne("/faq")({component:J(rx,"component"),head:()=>({...se({title:"FAQ - Engine Awesome",description:"Frequently asked questions about Engine Awesome, the no-code app builder for modern businesses. Learn about features, pricing, integrations, and support.",pathname:"/faq/"}),scripts:[{type:"application/ld+json",children:JSON.stringify(cx)}]})}),dx=()=>ee(()=>import("./demo-booked-DQdhsOui.js"),__vite__mapDeps([14,1])),hx=ne("/demo-booked")({component:J(dx,"component"),head:()=>se({title:"Demo Booked - Engine Awesome",description:"Your demo has been scheduled. Check your email for confirmation details.",pathname:"/demo-booked/",noindex:!0})}),px=()=>ee(()=>import("./contact-Bhv21AcW.js"),__vite__mapDeps([15,1])),mx=ne("/contact")({component:J(px,"component"),head:()=>se({title:"Contact Us - Engine Awesome",description:"Get in touch with the Engine Awesome team. We'd love to hear from you.",pathname:"/contact/"})}),fx=()=>ee(()=>import("./blog-DZUkw-cm.js"),__vite__mapDeps([16,1])),gx=ne("/blog")({component:J(fx,"component")}),yx=()=>ee(()=>import("./about-Dd7X9qEi.js"),__vite__mapDeps([17,1])),wx=ne("/about")({component:J(yx,"component")}),bx=()=>ee(()=>import("./_-Cd3aI9Uw.js"),__vite__mapDeps([18,1,19])),vx=ne("/$")({loader:()=>{throw Go()},head:({match:a})=>se({title:"Page Not Found - Engine Awesome",description:"Sorry, the page you're looking for doesn't exist. Browse Engine Awesome templates and guides instead.",pathname:a.pathname,noindex:!0}),notFoundComponent:J(bx,"notFoundComponent")});function wd(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var $a=wd();function Ny(a){$a=a}var es={exec:()=>null};function Ae(a,o=""){let i=typeof a=="string"?a:a.source;const r={replace:(c,d)=>{let h=typeof d=="string"?d:d.source;return h=h.replace(pt.caret,"$1"),i=i.replace(c,h),r},getRegex:()=>new RegExp(i,o)};return r}var pt={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine
vendor: 10,570 bytes, lines 23-24
23:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:a=>new RegExp(`^( {0,3}${a})((?:[	 ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:a=>new RegExp(`^ {0,${Math.min(3,a-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ 	][^\\n]*)?(?:\\n|$))`),hrRegex:a=>new RegExp(`^ {0,${Math.min(3,a-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:a=>new RegExp(`^ {0,${Math.min(3,a-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:a=>new RegExp(`^ {0,${Math.min(3,a-1)}}#`),htmlBeginRegex:a=>new RegExp(`^ {0,${Math.min(3,a-1)}}<(?:[a-z].*>|!--)`,"i")},Sx=/^(?:[ \t]*(?:\n|$))+/,Ax=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,kx=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,os=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,xx=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,bd=/(?:[*+-]|\d{1,9}[.)])/,By=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Ly=Ae(By).replace(/bull/g,bd).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),Ex=Ae(By).replace(/bull/g,bd).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),vd=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Tx=/^[^\n]+/,Sd=/(?!\s*\])(?:\\.|[^\[\]\\])+/,Cx=Ae(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",Sd).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),_x=Ae(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,bd).getRegex(),cl="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",Ad=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,Rx=Ae("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ 	]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ 	]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ 	]*)+\\n|$))","i").replace("comment",Ad).replace("tag",cl).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Dy=Ae(vd).replace("hr",os).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",cl).getRegex(),zx=Ae(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Dy).getRegex(),kd={blockquote:zx,code:Ax,def:Cx,fences:kx,heading:xx,hr:os,html:Rx,lheading:Ly,list:_x,newline:Sx,paragraph:Dy,table:es,text:Tx},yg=Ae("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",os).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3}	)[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",cl).getRegex(),Mx={...kd,lheading:Ex,table:yg,paragraph:Ae(vd).replace("hr",os).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",yg).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",cl).getRegex()},jx={...kd,html:Ae(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",Ad).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:es,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:Ae(vd).replace("hr",os).replace("heading",` *#{1,6} *[^
24]`).replace("lheading",Ly).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Ox=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Nx=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Py=/^( {2,}|\\)\n(?!\s*$)/,Bx=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,ul=/[\p{P}\p{S}]/u,xd=/[\s\p{P}\p{S}]/u,qy=/[^\s\p{P}\p{S}]/u,Lx=Ae(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,xd).getRegex(),Uy=/(?!~)[\p{P}\p{S}]/u,Dx=/(?!~)[\s\p{P}\p{S}]/u,Px=/(?:[^\s\p{P}\p{S}]|~)/u,qx=/\[[^[\]]*?\]\((?:\\.|[^\\\(\)]|\((?:\\.|[^\\\(\)])*\))*\)|`[^`]*?`|<[^<>]*?>/g,Hy=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,Ux=Ae(Hy,"u").replace(/punct/g,ul).getRegex(),Hx=Ae(Hy,"u").replace(/punct/g,Uy).getRegex(),Yy="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",Yx=Ae(Yy,"gu").replace(/notPunctSpace/g,qy).replace(/punctSpace/g,xd).replace(/punct/g,ul).getRegex(),Ix=Ae(Yy,"gu").replace(/notPunctSpace/g,Px).replace(/punctSpace/g,Dx).replace(/punct/g,Uy).getRegex(),Wx=Ae("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,qy).replace(/punctSpace/g,xd).replace(/punct/g,ul).getRegex(),Fx=Ae(/\\(punct)/,"gu").replace(/punct/g,ul).getRegex(),Gx=Ae(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Qx=Ae(Ad).replace("(?:-->|$)","-->").getRegex(),Vx=Ae("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",Qx).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),$r=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,$x=Ae(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",$r).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Iy=Ae(/^!?\[(label)\]\[(ref)\]/).replace("label",$r).replace("ref",Sd).getRegex(),Wy=Ae(/^!?\[(ref)\](?:\[\])?/).replace("ref",Sd).getRegex(),Zx=Ae("reflink|nolink(?!\\()","g").replace("reflink",Iy).replace("nolink",Wy).getRegex(),Ed={_backpedal:es,anyPunctuation:Fx,autolink:Gx,blockSkip:qx,br:Py,code:Nx,del:es,emStrongLDelim:Ux,emStrongRDelimAst:Yx,emStrongRDelimUnd:Wx,escape:Ox,link:$x,nolink:Wy,punctuation:Lx,reflink:Iy,reflinkSearch:Zx,tag:Vx,text:Bx,url:es},Kx={...Ed,link:Ae(/^!?\[(label)\]\((.*?)\)/).replace("label",$r).getRegex(),reflink:Ae(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",$r).getRegex()},td={...Ed,emStrongRDelimAst:Ix,emStrongLDelim:Hx,url:Ae(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\.|[^\\])*?(?:\\.|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/},Xx={...td,br:Ae(Py).replace("{2,}","*").getRegex(),text:Ae(td.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},zr={normal:kd,gfm:Mx,pedantic:jx},Vi={normal:Ed,gfm:td,breaks:Xx,pedantic:Kx},Jx={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},wg=a=>Jx[a];function rn(a,o){if(o){if(pt.escapeTest.test(a))return a.replace(pt.escapeReplace,wg)}else if(pt.escapeTestNoEncode.test(a))return a.replace(pt.escapeReplaceNoEncode,wg);return a}function bg(a){try{a=encodeURI(a).replace(pt.percentDecode,"%")}catch{return null}return a}function vg(a,o){const i=a.replace(pt.findPipe,(d,h,p)=>{let f=!1,g=h;for(;--g>=0&&p[g]==="\\";)f=!f;return f?"|":" |"}),r=i.split(pt.splitPipe);let c=0;if(r[0].trim()||r.shift(),r.length>0&&!r.at(-1)?.trim()&&r.pop(),o)if(r.length>
24o)r.splice(o);else for(;r.length<o;)r.push("");for(;c<r.length;c++)r[c]=r[c].trim().replace(pt.slashPipe,"|");return r}function $i(a,o,i){const r=a.length;if(r===0)return"";let c=0;for(;c<r&&a.charAt(r-c-1)===o;)c++;return a.slice(0,r-c)}function e2(a,o){if(a.indexOf(o[1])===-1)return-1;let i=0;for(let r=0;r<a.length;r++)if(a[r]==="\\")r++;else if(a[r]===o[0])i++;else if(a[r]===o[1]&&(i--,i<0))return r;return i>0?-2:-1}function Sg(a,o,i,r,c){const d=o.href,h=o.title||null,p=a[1].replace(c.other.outputLinkReplace,"$1");r.state.inLink=!0;const f={type:a[0].charAt(0)==="!"?"image":"link",raw:i,href:d,title:h,text:p,tokens:r.inlineTokens(p)};return r.state.inLink=!1,f}function t2(a,o,i){const r=a.match(i.other.indentCodeCompensation);if(r===null)return o;const c=r[1];return o.split(`
25`).map(d=>{const h=d.match(i.other.beginningSpace);if(h===null)return d;const[p]=h;return p.length>=c.length?d.slice(c.length):d}).join(`
26`)}var Zr=class{options;rules;lexer;constructor(a){this.options=a||$a}space(a){const o=this.rules.block.newline.exec(a);if(o&&o[0].length>0)return{type:"space",raw:o[0]}}code(a){const o=this.rules.block.code.exec(a);if(o){const i=o[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:o[0],codeBlockStyle:"indented",text:this.options.pedantic?i:$i(i,`
27`)}}}fences(a){const o=this.rules.block.fences.exec(a);if(o){const i=o[0],r=t2(i,o[3]||"",this.rules);return{type:"code",raw:i,lang:o[2]?o[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):o[2],text:r}}}heading(a){const o=this.rules.block.heading.exec(a);if(o){let i=o[2].trim();if(this.rules.other.endingHash.test(i)){const r=$i(i,"#");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(i=r.trim())}return{type:"heading",raw:o[0],depth:o[1].length,text:i,tokens:this.lexer.inline(i)}}}hr(a){const o=this.rules.block.hr.exec(a);if(o)return{type:"hr",raw:$i(o[0],`
28`)}}blockquote(a){const o=this.rules.block.blockquote.exec(a);if(o){let i=$i(o[0],`
29`).split(`
30`),r="",c="";const d=[];for(;i.length>0;){let h=!1;const p=[];let f;for(f=0;f<i.length;f++)if(this.rules.other.blockquoteStart.test(i[f]))p.push(i[f]),h=!0;else if(!h)p.push(i[f]);else break;i=i.slice(f);const g=p.join(`
31`),b=g.replace(this.rules.other.blockquoteSetextReplace,`
32    $1`).replace(this.rules.other.blockquoteSetextReplace2,"");r=r?`${r}
33${g}`:g,c=c?`${c}
34${b}`:b;const w=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(b,d,!0),this.lexer.state.top=w,i.length===0)break;const v=d.at(-1);if(v?.type==="code")break;if(v?.type==="blockquote"){const x=v,R=x.raw+`
35`+i.join(`
36`),C=this.blockquote(R);d[d.length-1]=C,r=r.substring(0,r.length-x.raw.length)+C.raw,c=c.substring(0,c.length-x.text.length)+C.text;break}else if(v?.type==="list"){const x=v,R=x.raw+`
37`+i.join(`
38`),C=this.list(R);d[d.length-1]=C,r=r.substring(0,r.length-v.raw.length)+C.raw,c=c.substring(0,c.length-x.raw.length)+C.raw,i=R.substring(d.at(-1).raw.length).split(`
39`);continue}}return{type:"blockquote",raw:r,tokens:d,text:c}}}list(a){let o=this.rules.block.list.exec(a);if(o){let i=o[1].trim();const r=i.length>1,c={type:"list",raw:"",ordered:r,start:r?+i.slice(0,-1):"",loose:!1,items:[]};i=r?`\\d{1,9}\\${i.slice(-1)}`:`\\${i}`,this.options.pedantic&&(i=r?i:"[*+-]");const d=this.rules.other.listItemRegex(i);let h=!1;for(;a;){let f=!1,g="",b="";if(!(o=d.exec(a))||this.rules.block.hr.test(a))break;g=o[0],a=a.substring(g.length);let w=o[2].split(`
40`,1)[0].replace(this.rules.other.listReplaceTabs,q=>" ".repeat(3*q.length)),v=a.split(`
41`,1)[0],x=!w.trim(),R=0;if(this.options.pedantic?(R=2,b=w.trimStart()):x?R=o[1].length+1:(R=o[2].search(this.rules.other.nonSpaceChar),R=R>4?1:R,b=w.slice(R),R+=o[1].length),x&&this.rules.other.blankLine.test(v)&&(g+=v+`
42`,a=a.substring(v.length+1),f=!0),!f){const q=this.rules.other.nextBulletRegex(R),I=this.rules.other.hrRegex(R),H=this.rules.other.fencesBeginRegex(R),Y=this.rules.other.headingBeginRegex(R),F=this.rules.other.htmlBeginRegex(R);for(;a;){const W=a.split(`
43`,1)[0];let G;if(v=W,this.options.pedantic?(v=v.replace(this.rules.other.listReplaceNesting,"  "),G=v):G=v.replace(this.rules.other.tabCharGlobal,"    "),H.test(v)||Y.test(v)||F.test(v)||q.test(v)||I.test(v))break;if(G.search(this.rules.other.nonSpaceChar)>=R||!v.trim())b+=`
44`+G.slice(R);else{if(x||w.replace(this.rules.other.tabCharGlobal,"    ").search(this.rules.other.nonSpaceChar)>=4||H.test(w)||Y.test(w)||I.test(w))break;b+=`
45`+v}!x&&!v.trim()&&(x=!0),g+=W+`
46`,a=a.substring(W.length+1),w=G.slice(R)}}c.loose||(h?c.loose=!0:this.rules.other.doubleBlankLine.test(g)&&(h=!0));let C=null,O;this.options.gfm&&(C=this.rules.other.listIsTask.exec(b),C&&(O=C[0]!=="[ ] ",b=b.replace(this.rules.other.listReplaceTask,""))),c.items.push({type:"list_item",raw:g,task:!!C,checked:O,loose:!1,text:b,tokens:[]}),c.raw+=g}const p=c.items.at(-1);if(p)p.raw=p.raw.trimEnd(),p.text=p.text.trimEnd();else return;c.raw=c.raw.trimEnd();for(let f=0;f<c.items.length;f++)if(this.lexer.state.top=!1,c.items[f].tokens=this.lexer.blockTokens(c.items[f].text,[]),!c.loose){const g=c.items[f].tokens.filter(w=>w.type==="space"),b=g.length>0&&g.some(w=>this.rules.other.anyLine.test(w.raw));c.loose=b}if(c.loose)for(let f=0;f<c.items.length;f++)c.items[f].loose=!0;return c}}html(a){const o=this.rules.block.html.exec(a);if(o)return{type:"html",block:!0,raw:o[0],pre:o[1]==="pre"||o[1]==="script"||o[1]==="style",text:o[0]}}def(a){const o=this.rules.block.def.exec(a);if(o){const i=o[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),r=o[2]?o[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",c=o[3]?o[3].substring(1,o[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):o[3];return{type:"def",tag:i,raw:o[0],href:r,title:c}}}table(a){const o=this.rules.block.table.exec(a);if(!o||!this.rules.other.tableDelimiter.test(o[2]))return;
46const i=vg(o[1]),r=o[2].replace(this.rules.other.tableAlignChars,"").split("|"),c=o[3]?.trim()?o[3].replace(this.rules.other.tableRowBlankLine,"").split(`
47`):[],d={type:"table",raw:o[0],header:[],align:[],rows:[]};if(i.length===r.length){for(const h of r)this.rules.other.tableAlignRight.test(h)?d.align.push("right"):this.rules.other.tableAlignCenter.test(h)?d.align.push("center"):this.rules.other.tableAlignLeft.test(h)?d.align.push("left"):d.align.push(null);for(let h=0;h<i.length;h++)d.header.push({text:i[h],tokens:this.lexer.inline(i[h]),header:!0,align:d.align[h]});for(const h of c)d.rows.push(vg(h,d.header.length).map((p,f)=>({text:p,tokens:this.lexer.inline(p),header:!1,align:d.align[f]})));return d}}lheading(a){const o=this.rules.block.lheading.exec(a);if(o)return{type:"heading",raw:o[0],depth:o[2].charAt(0)==="="?1:2,text:o[1],tokens:this.lexer.inline(o[1])}}paragraph(a){const o=this.rules.block.paragraph.exec(a);if(o){const i=o[1].charAt(o[1].length-1)===`
48`?o[1].slice(0,-1):o[1];return{type:"paragraph",raw:o[0],text:i,tokens:this.lexer.inline(i)}}}text(a){const o=this.rules.block.text.exec(a);if(o)return{type:"text",raw:o[0],text:o[0],tokens:this.lexer.inline(o[0])}}escape(a){const o=this.rules.inline.escape.exec(a);if(o)return{type:"escape",raw:o[0],text:o[1]}}tag(a){const o=this.rules.inline.tag.exec(a);if(o)return!this.lexer.state.inLink&&this.rules.other.startATag.test(o[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(o[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(o[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(o[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:o[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:o[0]}}link(a){const o=this.rules.inline.link.exec(a);if(o){const i=o[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(i)){if(!this.rules.other.endAngleBracket.test(i))return;const d=$i(i.slice(0,-1),"\\");if((i.length-d.length)%2===0)return}else{const d=e2(o[2],"()");if(d===-2)return;if(d>-1){const p=(o[0].indexOf("!")===0?5:4)+o[1].length+d;o[2]=o[2].substring(0,d),o[0]=o[0].substring(0,p).trim(),o[3]=""}}let r=o[2],c="";if(this.options.pedantic){const d=this.rules.other.pedanticHrefTitle.exec(r);d&&(r=d[1],c=d[3])}else c=o[3]?o[3].slice(1,-1):"";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(i)?r=r.slice(1):r=r.slice(1,-1)),Sg(o,{href:r&&r.replace(this.rules.inline.anyPunctuation,"$1"),title:c&&c.replace(this.rules.inline.anyPunctuation,"$1")},o[0],this.lexer,this.rules)}}reflink(a,o){let i;if((i=this.rules.inline.reflink.exec(a))||(i=this.rules.inline.nolink.exec(a))){const r=(i[2]||i[1]).replace(this.rules.other.multipleSpaceGlobal," "),c=o[r.toLowerCase()];if(!c){const d=i[0].charAt(0);return{type:"text",raw:d,text:d}}return Sg(i,c,i[0],this.lexer,this.rules)}}emStrong(a,o,i=""){let r=this.rules.inline.emStrongLDelim.exec(a);if(!r||r[3]&&i.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[2]||"")||!i||this.rules.inline.punctuation.exec(i)){const d=[...r[0]].length-1;let h,p,f=d,g=0;const b=r[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(b.lastIndex=0,o=o.slice(-1*a.length+d);(r=b.exec(o))!=null;){if(h=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!h)continue;if(p=[...h].length,r[3]||r[4]){f+=p;continue}else if((r[5]||r[6])&&d%3&&!((d+p)%3)){g+=p;continue}if(f-=p,f>0)continue;p=Math.min(p,p+f+g);const w=[...r[0]][0].length,v=a.slice(0,d+r.index+w+p);if(Math.min(d,p)%2){const R=v.slice(1,-1);return{type:"em",raw:v,text:R,tokens:this.lexer.inlineTokens(R)}}const x=v.slice(2,-2);return{type:"strong",raw:v,text:x,tokens:this.lexer.inlineTokens(x)}}}}codespan(a){const o=this.rules.inline.code.exec(a);if(o){let i=o[2].replace(this.rules.other.newLineCharGlobal," ");const r=this.rules.other.nonSpaceChar.test(i),c=this.rules.other.startingSpaceChar.test(i)&&this.rules.other.endingSpaceChar.test(i);return r&&c&&(i=i.substring(1,i.length-1)),{type:"codespan",raw:o[0],text:i}}}br(a){const o=this.rules.inline.br.exec(a);if(o)return{type:"br",raw:o[0]}}del(a){const o=this.rules.inline.del.exec(a);if(o)return{type:"del",raw:o[0],text:o[2],tokens:this.lexer.inlineTokens(o[2])}}autolink(a){const o=this.rules.inline.autolink.exec(a);if(o){let i,r;
vendor: 1,400 bytes, lines 48-49
48return o[2]==="@"?(i=o[1],r="mailto:"+i):(i=o[1],r=i),{type:"link",raw:o[0],text:i,href:r,tokens:[{type:"text",raw:i,text:i}]}}}url(a){let o;if(o=this.rules.inline.url.exec(a)){let i,r;if(o[2]==="@")i=o[0],r="mailto:"+i;else{let c;do c=o[0],o[0]=this.rules.inline._backpedal.exec(o[0])?.[0]??"";while(c!==o[0]);i=o[0],o[1]==="www."?r="http://"+o[0]:r=o[0]}return{type:"link",raw:o[0],text:i,href:r,tokens:[{type:"text",raw:i,text:i}]}}}inlineText(a){const o=this.rules.inline.text.exec(a);if(o){const i=this.lexer.state.inRawBlock;return{type:"text",raw:o[0],text:o[0],escaped:i}}}},Mn=class nd{tokens;options;state;tokenizer;inlineQueue;constructor(o){this.tokens=[],this.tokens.links=Object.create(null),this.options=o||$a,this.options.tokenizer=this.options.tokenizer||new Zr,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};const i={other:pt,block:zr.normal,inline:Vi.normal};this.options.pedantic?(i.block=zr.pedantic,i.inline=Vi.pedantic):this.options.gfm&&(i.block=zr.gfm,this.options.breaks?i.inline=Vi.breaks:i.inline=Vi.gfm),this.tokenizer.rules=i}static get rules(){return{block:zr,inline:Vi}}static lex(o,i){return new nd(i).lex(o)}static lexInline(o,i){return new nd(i).inlineTokens(o)}lex(o){o=o.replace(pt.carriageReturn,`
49`),this.blockTokens(o,this.tokens);for(let i=0;
vendor: 4,723 bytes, lines 49-58
49i<this.inlineQueue.length;i++){const r=this.inlineQueue[i];this.inlineTokens(r.src,r.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(o,i=[],r=!1){for(this.options.pedantic&&(o=o.replace(pt.tabCharGlobal,"    ").replace(pt.spaceLine,""));o;){let c;if(this.options.extensions?.block?.some(h=>(c=h.call({lexer:this},o,i))?(o=o.substring(c.raw.length),i.push(c),!0):!1))continue;if(c=this.tokenizer.space(o)){o=o.substring(c.raw.length);const h=i.at(-1);c.raw.length===1&&h!==void 0?h.raw+=`
50`:i.push(c);continue}if(c=this.tokenizer.code(o)){o=o.substring(c.raw.length);const h=i.at(-1);h?.type==="paragraph"||h?.type==="text"?(h.raw+=`
51`+c.raw,h.text+=`
52`+c.text,this.inlineQueue.at(-1).src=h.text):i.push(c);continue}if(c=this.tokenizer.fences(o)){o=o.substring(c.raw.length),i.push(c);continue}if(c=this.tokenizer.heading(o)){o=o.substring(c.raw.length),i.push(c);continue}if(c=this.tokenizer.hr(o)){o=o.substring(c.raw.length),i.push(c);continue}if(c=this.tokenizer.blockquote(o)){o=o.substring(c.raw.length),i.push(c);continue}if(c=this.tokenizer.list(o)){o=o.substring(c.raw.length),i.push(c);continue}if(c=this.tokenizer.html(o)){o=o.substring(c.raw.length),i.push(c);continue}if(c=this.tokenizer.def(o)){o=o.substring(c.raw.length);const h=i.at(-1);h?.type==="paragraph"||h?.type==="text"?(h.raw+=`
53`+c.raw,h.text+=`
54`+c.raw,this.inlineQueue.at(-1).src=h.text):this.tokens.links[c.tag]||(this.tokens.links[c.tag]={href:c.href,title:c.title});continue}if(c=this.tokenizer.table(o)){o=o.substring(c.raw.length),i.push(c);continue}if(c=this.tokenizer.lheading(o)){o=o.substring(c.raw.length),i.push(c);continue}let d=o;if(this.options.extensions?.startBlock){let h=1/0;const p=o.slice(1);let f;this.options.extensions.startBlock.forEach(g=>{f=g.call({lexer:this},p),typeof f=="number"&&f>=0&&(h=Math.min(h,f))}),h<1/0&&h>=0&&(d=o.substring(0,h+1))}if(this.state.top&&(c=this.tokenizer.paragraph(d))){const h=i.at(-1);r&&h?.type==="paragraph"?(h.raw+=`
55`+c.raw,h.text+=`
56`+c.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=h.text):i.push(c),r=d.length!==o.length,o=o.substring(c.raw.length);continue}if(c=this.tokenizer.text(o)){o=o.substring(c.raw.length);const h=i.at(-1);h?.type==="text"?(h.raw+=`
57`+c.raw,h.text+=`
58`+c.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=h.text):i.push(c);continue}if(o){const h="Infinite loop on byte: "+o.charCodeAt(0);if(this.options.silent){console.error(h);break}else throw new Error(h)}}return this.state.top=!0,i}inline(o,i=[]){return this.inlineQueue.push({src:o,tokens:i}),i}inlineTokens(o,i=[]){let r=o,c=null;if(this.tokens.links){const p=Object.keys(this.tokens.links);if(p.length>0)for(;(c=this.tokenizer.rules.inline.reflinkSearch.exec(r))!=null;)p.includes(c[0].slice(c[0].lastIndexOf("[")+1,-1))&&(r=r.slice(0,c.index)+"["+"a".repeat(c[0].length-2)+"]"+r.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(c=this.tokenizer.rules.inline.anyPunctuation.exec(r))!=null;)r=r.slice(0,c.index)+"++"+r.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(c=this.tokenizer.rules.inline.blockSkip.exec(r))!=null;)r=r.slice(0,c.index)+"["+"a".repeat(c[0].length-2)+"]"+r.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);let d=!1,h="";for(;o;){d||(h=""),d=!1;let p;if(this.options.extensions?.inline?.some(g=>(p=g.call({lexer:this},o,i))?(o=o.substring(p.raw.length),i.push(p),!0):!1))continue;if(p=this.tokenizer.escape(o)){o=o.substring(p.raw.length),i.push(p);continue}if(p=this.tokenizer.tag(o)){o=o.substring(p.raw.length),i.push(p);continue}if(p=this.tokenizer.link(o)){o=o.substring(p.raw.length),i.push(p);continue}if(p=this.tokenizer.reflink(o,this.tokens.links)){o=o.substring(p.raw.length);const g=i.at(-1);p.type==="text"&&g?.type==="text"?(g.raw+=p.raw,g.text+=p.text):i.push(p);continue}if(p=this.tokenizer.emStrong(o,r,h)){o=o.substring(p.raw.length),i.push(p);continue}if(p=this.tokenizer.codespan(o)){o=o.substring(p.raw.length),i.push(p);continue}if(p=this.tokenizer.br(o)){o=o.substring(p.raw.length),i.push(p);continue}if(p=this.tokenizer.del(o)){o=o.substring(p.raw.length),i.push(p);continue}if(p=this.tokenizer.autolink(o)){o=o.substring(p.raw.length),i.push(p);continue}if(!this.state.inLink&&(p=this.tokenizer.url(o))){o=o.substring(p.raw.length),i.push(p);continue}let f=o;if(this.options.extensions?.startInline){let g=1/0;const b=o.slice(1);let w;this.options.extensions.startInline.forEach(v=>{w=v.call({lexer:this},b),typeof w=="number"&&w>=0&&(g=Math.min(g,w))}),g<1/0&&g>=0&&(f=o.substring(0,g+1))}if(p=this.tokenizer.inlineText(f)){o=o.substring(p.raw.length),p.raw.slice(-1)!=="_"&&(h=p.raw.slice(-1)),d=!0;const g=i.at(-1);g?.type==="text"?(g.raw+=p.raw,g.text+=p.text):i.push(p);continue}
58if(o){const g="Infinite loop on byte: "+o.charCodeAt(0);if(this.options.silent){console.error(g);break}else throw new Error(g)}}return i}},Kr=class{options;parser;constructor(a){this.options=a||$a}space(a){return""}code({text:a,lang:o,escaped:i}){const r=(o||"").match(pt.notSpaceStart)?.[0],c=a.replace(pt.endingNewline,"")+`
59`;return r?'<pre><code class="language-'+rn(r)+'">'+(i?c:rn(c,!0))+`</code></pre>
60`:"<pre><code>"+(i?c:rn(c,!0))+`</code></pre>
61`}blockquote({tokens:a}){return`<blockquote>
62${this.parser.parse(a)}</blockquote>
63`}html({text:a}){return a}heading({tokens:a,depth:o}){return`<h${o}>${this.parser.parseInline(a)}</h${o}>
64`}hr(a){return`<hr>
65`}list(a){const o=a.ordered,i=a.start;let r="";for(let h=0;h<a.items.length;h++){const p=a.items[h];r+=this.listitem(p)}const c=o?"ol":"ul",d=o&&i!==1?' start="'+i+'"':"";return"<"+c+d+`>
66`+r+"</"+c+`>
67`}listitem(a){let o="";if(a.task){const i=this.checkbox({checked:!!a.checked});a.loose?a.tokens[0]?.type==="paragraph"?(a.tokens[0].text=i+" "+a.tokens[0].text,a.tokens[0].tokens&&a.tokens[0].tokens.length>0&&a.tokens[0].tokens[0].type==="text"&&(a.tokens[0].tokens[0].text=i+" "+rn(a.tokens[0].tokens[0].text),a.tokens[0].tokens[0].escaped=!0)):a.tokens.unshift({type:"text",raw:i+" ",text:i+" ",escaped:!0}):o+=i+" "}return o+=this.parser.parse(a.tokens,!!a.loose),`<li>${o}</li>
68`}checkbox({checked:a}){return"<input "+(a?'checked="" ':"")+'disabled="" type="checkbox">'}paragraph({tokens:a}){return`<p>${this.parser.parseInline(a)}</p>
69`}table(a){let o="",i="";for(let c=0;c<a.header.length;c++)i+=this.tablecell(a.header[c]);o+=this.tablerow({text:i});let r="";for(let c=0;c<a.rows.length;c++){const d=a.rows[c];i="";for(let h=0;h<d.length;h++)i+=this.tablecell(d[h]);r+=this.tablerow({text:i})}return r&&(r=`<tbody>${r}</tbody>`),`<table>
70<thead>
71`+o+`</thead>
72`+r+`</table>
73`}tablerow({text:a}){return`<tr>
74${a}</tr>
75`}tablecell(a){const o=this.parser.parseInline(a.tokens),i=a.header?"th":"td";return(a.align?`<${i} align="${a.align}">`:`<${i}>`)+o+`</${i}>
76`}strong({tokens:a}){return`<strong>${this.parser.parseInline(a)}</strong>`}em({tokens:a}){return`<em>${this.parser.parseInline(a)}</em>`}codespan({text:a}){return`<code>${rn(a,!0)}</code>`}br(a){return"<br>"}del({tokens:a}){return`<del>${this.parser.parseInline(a)}</del>`}link({href:a,title:o,tokens:i}){const r=this.parser.parseInline(i),c=bg(a);if(c===null)return r;a=c;let d='<a href="'+a+'"';return o&&(d+=' title="'+rn(o)+'"'),d+=">"+r+"</a>",d}image({href:a,title:o,text:i,tokens:r}){r&&(i=this.parser.parseInline(r,this.parser.textRenderer));const c=bg(a);if(c===null)return rn(i);a=c;let d=`<img src="${a}" alt="${i}"`;return o&&(d+=` title="${rn(o)}"`),d+=">",d}text(a){return"tokens"in a&&a.tokens?this.parser.parseInline(a.tokens):"escaped"in a&&a.escaped?a.text:rn(a.text)}},Td=class{strong({text:a}){return a}em({text:a}){return a}codespan({text:a}){return a}del({text:a}){return a}html({text:a}){return a}text({text:a}){return a}link({text:a}){return""+a}image({text:a}){return""+a}br(){return""}},jn=class ad{options;renderer;textRenderer;constructor(o){this.options=o||$a,this.options.renderer=this.options.renderer||new Kr,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new Td}static parse(o,i){return new ad(i).parse(o)}static parseInline(o,i){return new ad(i).parseInline(o)}parse(o,i=!0){let r="";for(let c=0;c<o.length;c++){const d=o[c];if(this.options.extensions?.renderers?.[d.type]){const p=d,f=this.options.extensions.renderers[p.type].call({parser:this},p);if(f!==!1||!["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(p.type)){r+=f||"";continue}}const h=d;switch(h.type){case"space":{r+=this.renderer.space(h);continue}case"hr":{r+=this.renderer.hr(h);continue}case"heading":{r+=this.renderer.heading(h);continue}case"code":{r+=this.renderer.code(h);continue}case"table":{r+=this.renderer.table(h);continue}case"blockquote":{r+=this.renderer.blockquote(h);continue}case"list":{r+=this.renderer.list(h);continue}case"html":{r+=this.renderer.html(h);continue}case"paragraph":{r+=this.renderer.paragraph(h);continue}case"text":{let p=h,f=this.renderer.text(p);for(;c+1<o.length&&o[c+1].type==="text";)p=o[++c],f+=`
77`+this.renderer.text(p);i?r+=this.renderer.paragraph({type:"paragraph",raw:f,text:f,tokens:[{type:"text",raw:f,text:f,escaped:!0}]}):r+=f;continue}default:{const p='Token with "'+h.type+'" type was not found.';if(this.options.silent)return console.error(p),"";throw new Error(p)}}}return r}parseInline(o,i=this.renderer){let r="";for(let c=0;c<o.length;c++){const d=o[c];if(this.options.extensions?.renderers?.[d.type]){const p=this.options.extensions.renderers[d.type].call({parser:this},d);if(p!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(d.type)){r+=p||"";continue}}const h=d;switch(h.type){case"escape":{r+=i.text(h);break}case"html":{r+=i.html(h);break}case"link":{r+=i.link(h);break}case"image":{r+=i.image(h);break}case"strong":{r+=i.strong(h);break}case"em":{r+=i.em(h);break}case"codespan":{r+=i.codespan(h);break}case"br":{r+=i.br(h);break}case"del":{r+=i.del(h);break}case"text":{r+=i.text(h);break}default:{const p='Token with "'+h.type+'" type was not found.';if(this.options.silent)return console.error(p),"";throw new Error(p)}}}return r}},Nr=class{options;block;constructor(a){this.options=a||$a}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(a){return a}postprocess(a){return a}processAllTokens(a){return a}provideLexer(){return this.block?Mn.lex:Mn.lexInline}provideParser(){return this.block?jn.parse:jn.parseInline}},n2=class{defaults=wd();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=jn;Renderer=Kr;TextRenderer=Td;Lexer=Mn;Tokenizer=Zr;Hooks=Nr;constructor(...a){this.use(...a)}walkTokens(a,o){let i=[];for(const r of a)switch(i=i.concat(o.call(this,r)),r.type){case"table":{const c=r;for(const d of c.header)i=i.concat(this.walkTokens(d.tokens,o));for(const d of c.rows)for(const h of d)i=i.concat(this.walkTokens(h.tokens,o));break}case"list":{const c=r;i=i.concat(this.walkTokens(c.items,o));break}default:{const c=r;this.defaults.extensions?.childTokens?.[c.type]?this.defaults.extensions.childTokens[c.type].forEach(d=>{const h=c[d].flat(1/0);i=i.concat(this.walkTokens(h,o))}):c.tokens&&(i=i.concat(this.walkTokens(c.tokens,o)))}}return i}use(...a){const o=this.defaults.extensions||{renderers:{},childTokens:{}};return a.forEach(i=>
vendor: 6,599 bytes, lines 77-112
77{const r={...i};if(r.async=this.defaults.async||r.async||!1,i.extensions&&(i.extensions.forEach(c=>{if(!c.name)throw new Error("extension name required");if("renderer"in c){const d=o.renderers[c.name];d?o.renderers[c.name]=function(...h){let p=c.renderer.apply(this,h);return p===!1&&(p=d.apply(this,h)),p}:o.renderers[c.name]=c.renderer}if("tokenizer"in c){if(!c.level||c.level!=="block"&&c.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");const d=o[c.level];d?d.unshift(c.tokenizer):o[c.level]=[c.tokenizer],c.start&&(c.level==="block"?o.startBlock?o.startBlock.push(c.start):o.startBlock=[c.start]:c.level==="inline"&&(o.startInline?o.startInline.push(c.start):o.startInline=[c.start]))}"childTokens"in c&&c.childTokens&&(o.childTokens[c.name]=c.childTokens)}),r.extensions=o),i.renderer){const c=this.defaults.renderer||new Kr(this.defaults);for(const d in i.renderer){if(!(d in c))throw new Error(`renderer '${d}' does not exist`);if(["options","parser"].includes(d))continue;const h=d,p=i.renderer[h],f=c[h];c[h]=(...g)=>{let b=p.apply(c,g);return b===!1&&(b=f.apply(c,g)),b||""}}r.renderer=c}if(i.tokenizer){const c=this.defaults.tokenizer||new Zr(this.defaults);for(const d in i.tokenizer){if(!(d in c))throw new Error(`tokenizer '${d}' does not exist`);if(["options","rules","lexer"].includes(d))continue;const h=d,p=i.tokenizer[h],f=c[h];c[h]=(...g)=>{let b=p.apply(c,g);return b===!1&&(b=f.apply(c,g)),b}}r.tokenizer=c}if(i.hooks){const c=this.defaults.hooks||new Nr;for(const d in i.hooks){if(!(d in c))throw new Error(`hook '${d}' does not exist`);if(["options","block"].includes(d))continue;const h=d,p=i.hooks[h],f=c[h];Nr.passThroughHooks.has(d)?c[h]=g=>{if(this.defaults.async)return Promise.resolve(p.call(c,g)).then(w=>f.call(c,w));const b=p.call(c,g);return f.call(c,b)}:c[h]=(...g)=>{let b=p.apply(c,g);return b===!1&&(b=f.apply(c,g)),b}}r.hooks=c}if(i.walkTokens){const c=this.defaults.walkTokens,d=i.walkTokens;r.walkTokens=function(h){let p=[];return p.push(d.call(this,h)),c&&(p=p.concat(c.call(this,h))),p}}this.defaults={...this.defaults,...r}}),this}setOptions(a){return this.defaults={...this.defaults,...a},this}lexer(a,o){return Mn.lex(a,o??this.defaults)}parser(a,o){return jn.parse(a,o??this.defaults)}parseMarkdown(a){return(i,r)=>{const c={...r},d={...this.defaults,...c},h=this.onError(!!d.silent,!!d.async);if(this.defaults.async===!0&&c.async===!1)return h(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof i>"u"||i===null)return h(new Error("marked(): input parameter is undefined or null"));if(typeof i!="string")return h(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(i)+", string expected"));d.hooks&&(d.hooks.options=d,d.hooks.block=a);const p=d.hooks?d.hooks.provideLexer():a?Mn.lex:Mn.lexInline,f=d.hooks?d.hooks.provideParser():a?jn.parse:jn.parseInline;if(d.async)return Promise.resolve(d.hooks?d.hooks.preprocess(i):i).then(g=>p(g,d)).then(g=>d.hooks?d.hooks.processAllTokens(g):g).then(g=>d.walkTokens?Promise.all(this.walkTokens(g,d.walkTokens)).then(()=>g):g).then(g=>f(g,d)).then(g=>d.hooks?d.hooks.postprocess(g):g).catch(h);try{d.hooks&&(i=d.hooks.preprocess(i));let g=p(i,d);d.hooks&&(g=d.hooks.processAllTokens(g)),d.walkTokens&&this.walkTokens(g,d.walkTokens);let b=f(g,d);return d.hooks&&(b=d.hooks.postprocess(b)),b}catch(g){return h(g)}}}onError(a,o){return i=>{if(i.message+=`
78Please report this to https://github.com/markedjs/marked.`,a){const r="<p>An error occurred:</p><pre>"+rn(i.message+"",!0)+"</pre>";return o?Promise.resolve(r):r}if(o)return Promise.reject(i);throw i}}},Ga=new n2;function ye(a,o){return Ga.parse(a,o)}ye.options=ye.setOptions=function(a){return Ga.setOptions(a),ye.defaults=Ga.defaults,Ny(ye.defaults),ye};ye.getDefaults=wd;ye.defaults=$a;ye.use=function(...a){return Ga.use(...a),ye.defaults=Ga.defaults,Ny(ye.defaults),ye};ye.walkTokens=function(a,o){return Ga.walkTokens(a,o)};ye.parseInline=Ga.parseInline;ye.Parser=jn;ye.parser=jn.parse;ye.Renderer=Kr;ye.TextRenderer=Td;ye.Lexer=Mn;ye.lexer=Mn.lex;ye.Tokenizer=Zr;ye.Hooks=Nr;ye.parse=ye;ye.options;ye.setOptions;ye.use;ye.walkTokens;ye.parseInline;jn.parse;Mn.lex;const Fy=[{title:"How to Build Your Own CRM (Without Hiring a Developer)",excerpt:"Off-the-shelf CRMs charge per seat, force you into their workflows, and rarely fit how your team actually sells. Here's a better way.",date:"2026-02-10",category:"Business",author:"Engine Awesome Team",featured:!1,content:`# How to Build Your Own CRM (Without Hiring a Developer)
79
80Most businesses end up with a CRM that was built for someone else's sales process.
81
82You signed up, went through the onboarding, rearranged a few fields, and then started working around the parts that didn't quite fit. After a while the workarounds become the workflow, and you forget what a system built around your business would even feel like.
83
84There's a better option. You can build your own CRM — one that tracks exactly what you need, works the way your team works, and doesn't charge you extra every time you add someone new.
85
86## Why Most CRMs Don't Fit
87
88Off-the-shelf CRMs are built to sell to as many businesses as possible. That means they come with a default set of stages, fields, and views designed around a generic sales process — not yours.
89
90Your team ends up:
91
92- Ignoring fields that don't apply
93- Missing fields that do apply but aren't there
94- Working around the stage names that don't match your pipeline
95- Paying per seat, which creates pressure to limit who has access
96
97Customization exists, but it usually lives behind a higher pricing tier. And even then, there are limits.
98
99## Why Hiring a Developer Isn't Always the Answer
100
101The other obvious path is to hire someone to build something from scratch. This can work, but it comes with real tradeoffs.
102
103Custom development is slow. Requirements take time, builds take time, bugs take time. By the time your CRM is ready, your process may have already changed.
104
105It's also expensive — not just to build, but to maintain. Every change requires a conversation, a spec, and a timeline. You're never quite free to just iterate.
106
107And if your developer moves on, you're left with something you don't fully understand and can't easily modify.
108
109## What About Using AI to Build One?
110
111There's a third path that comes up a lot: vibe coding — prompting an AI model to generate a CRM for you. No developer, no monthly subscription, just a conversation with an AI that spits out working code.
112
113It's genuinely tempting. And for a weekend experiment, it can feel like it's working.
114
115For a production CRM that your business depends on, it usually falls apart.
116
117**You get code you can't maintain.** The moment something breaks — and it will — you're back to prompting an AI and hoping the fix doesn't introduce three new problems. There's no documentation, no test suite, no architecture your team understands. The only person who knows how it works is the AI that generated it, and it doesn't remember last session.
118
119**AI-generated code has security holes.** SQL injection vulnerabilities, broken access controls, unvalidated user inputs — these are common in AI-generated code and genuinely dangerous in a system that holds your customer data. A non-developer won't catch them. A data leak from a homemade CRM is a serious business problem.
120
121**The data model doesn't hold up.** A vibe-coded CRM works in the demo. Three months later, after you've added contact history, deal stages, linked records, and import support, the underlying database structure starts showing cracks. It was never designed to evolve — it was generated to satisfy the first prompt.
122
123**You still need to run it somewhere.** A generated app needs a server, a database, backups, uptime monitoring, SSL. That infrastru
123cture doesn't manage itself, and it's not what you hired yourself to do.
124
125The appeal is real — you want something custom, and you want it fast. But you're trading a monthly SaaS fee for a maintenance burden that doesn't go away and a security risk that can't be ignored.
126
127## Building Your Own CRM With Engine Awesome
128
129Engine Awesome is a no-code app builder designed for businesses that want software that fits the way they work — without the cost or complexity of custom development.
130
131You can build a fully functional CRM in minutes. Not a watered-down one — a real one with:
132
133- **Custom fields** for every piece of data your team tracks
134- **Pipeline stages** that match your actual sales process
135- **Fully custom layouts** — build the exact views your team needs
136- **Intake forms** to capture leads from your website automatically
137- **Role-based access** so each team member sees exactly what they need
138- **Dashboards** showing open deals, close rates, and pipeline value
139
140There's no code required. You define the data model, set up your views, and you're running.
141
142## What You Can Track
143
144A custom CRM built on Engine Awesome can handle any combination of the following — depending on how your business works:
145
146**Leads and prospects** — where they came from, what they need, when you last reached out, what stage they're in.
147
148**Contacts and companies** — full relationship history, linked to every deal and interaction.
149
150**Deals and opportunities** — value, stage, close date, associated contacts, notes from every conversation.
151
152**Activities and follow-ups** — calls, emails, meetings, tasks — attached to the right record so nothing falls through.
153
154**Documents** — proposals, contracts, intake forms — uploaded and organized against each deal.
155
156You're not limited to what a vendor decided matters. You build what your business actually uses.
157
158## One Price Per Application, Unlimited Users
159
160One of the biggest frustrations with standard CRMs is per-seat pricing. Adding a new salesperson means a bigger bill. Giving your support team read access? That's another seat.
161
162With Engine Awesome, each application has its own subscription — and every person on your team is included. Your whole sales team, your manager, your ops person who occasionally needs to pull a report — all covered.
163
164That changes the math significantly when your team grows.
165
166## Starting From a Template
167
168If you don't want to start from a blank slate, Engine Awesome has CRM templates you can start from. They come pre-built with a sensible data model and common views — so you're not making decisions from scratch.
169
170From there, you change whatever doesn't fit. Add a field, rename a stage, swap out a view. The template is a starting point, not a constraint.
171
172[Browse CRM templates →](/templates/?category=crm)
173
174## How Fast Can You Actually Get Running?
175
176A v1 of your CRM can be up and running in minutes. That's not a marketing claim — it's genuinely how the product works. You define your records, set up a few views, and you have something your team can start using.
177
178You'll iterate from there. Maybe you add a second pipeline for renewals. Maybe you build a separate intake form for inbound leads. You make changes yourself, in real time, without waiting on anyone.
179
180## What If You Need Help Getting Set Up?
181
182If you'd rather have someone help you configure the system — define the data model, build the views, migrate existing data — our white-glove service is available for that.
183
184[Learn about white-glove service →](/white-glove-service)
185
186## Is a Custom CRM Right for You?
187
188A custom CRM built on Engine Awesome is a good fit if:
189
190- Your sales process doesn't map cleanly to a standard CRM's default stages
191- You're paying for seats you'd rather give away freely
192- You want to iterate on your system yourself, without waiting on a vendor or developer
193- You need to track things that off-the-shelf CRMs don't support out of the box
194
195If any of that sounds familiar, it's worth taking a look.
196
197[See how Engine Awesome handles CRM →](/solutions/custom-crm)
198
199[Book a walkthrough →](/meet/call)`,_meta:{filePath:"build-your-own-crm.md",fileName:"build-your-own-crm.md",directory:".",extension:"md",path:"build-your-own-crm"},slug:"build-your-own-crm"},{title:"The Best CRM for Small Business (And What to Look for Before You Buy)",excerpt:"Most CRMs are built for enterprise teams. Here is what small businesses actually need — and why a custom-built CRM often beats the off-the-shelf options.",date:"2026-02-14",category:"Business",author:"Engine Awesome Team",featured:!1,content:`# The Best CRM for Small Business (And What to Look for Before You Buy)
200
201Small businesses have a CRM problem.
202
203The market is full of options — HubSpot, Salesforce, Pipedrive, Zoho, and dozens more. But most of them were built for enterprise sales teams. They're packed with features you'll never use, locked behind pricing tiers you can't justify, and structured around a sales process that may have nothing to do with how your business actually works.
204
205Here is what to look for before you commit to anything — and why more small businesses are building their own instead.
206
207## What a CRM Actually Needs to Do
208
209Before comparing tools, it helps to get clear on what you actually need a CRM to do. For most small businesses, it comes down to a few core things:
210
211- **Track every lead and customer** — who they are, what they need, where they are in y
211our process
212- **Record every interaction** — calls, emails, meetings, notes from conversations
213- **Show you what to do next** — follow-ups, overdue deals, active proposals
214- **Give your whole team access** — not just the salespeople
215
216Everything else — AI scoring, revenue forecasting, complex workflow automation — is valuable eventually. But it's not what you need on day one.
217
218## The Per-Seat Pricing Problem
219
220The most frustrating thing about most CRMs for small businesses is how they're priced.
221
222Per seat means every person who needs access to the system costs money. At $25-90 per user per month (depending on the platform and tier), that adds up fast. Add five salespeople, a manager, and two support reps — and you're paying for eight seats even though only a few people are in the CRM daily.
223
224The result? Companies limit access. The support team doesn't get in. The ops manager uses a workaround. Nobody has the full picture.
225
226If the whole point of a CRM is shared visibility, charging per person undermines that.
227
228## Why "Free" CRMs Have a Catch
229
230Several platforms offer a free tier. It sounds appealing, but the limitations are usually significant:
231
232- Contact and record limits
233- No automations
234- Limited views and reporting
235- Key features gated behind paid tiers
236- Storage limits that fill up fast
237
238The free tier is a funnel into a paid subscription. Once your data is in there and your team is trained, switching is painful — so the price goes up and you stay.
239
240## The Customization Gap
241
242Every business has something specific about the way they work.
243
244Maybe you track clients differently from leads. Maybe your pipeline has six stages instead of the standard three. Maybe you need to attach documents to every deal, or track a second set of data the CRM wasn't designed for.
245
246Off-the-shelf CRMs handle the standard use case well. When you're off the standard path, you start working around the tool — and those workarounds accumulate.
247
248## What to Look For in a Small Business CRM
249
250**Flat-rate or unlimited-user pricing.** You want your whole team in the system, not a subset of it.
251
252**A data model you can customize.** You should be able to add fields, rename stages, and structure records around how your business actually works — not the vendor's template.
253
254**Layouts that match your workflow.** The system should let you build the exact views your team needs — not force you into a fixed set of pre-built options.
255
256**No features you're paying for but never use.** Complexity is a cost. A simpler, focused system that fits your workflow beats a bloated one that technically does more.
257
258**Something you can actually change yourself.** When your process evolves, you want to update the system in an afternoon — not submit a support ticket or hire a consultant.
259
260## Why Some Small Businesses Build Their Own
261
262More small businesses are skipping the off-the-shelf options entirely and building a CRM that's designed specifically for the way they work.
263
264This used to mean hiring a developer — which meant months of lead time and ongoing maintenance costs. That equation has changed.
265
266With no-code tools like Engine Awesome, you can build a fully custom CRM — your fields, your stages, your views — in minutes. You're not configuring someone else's template; you're defining the data model from scratch. And when your process changes, you change the system yourself.
267
268The result is a CRM that actually fits, with every team member included for one flat subscription.
269
270## What About Vibe Coding a CRM?
271
272There's a newer option that's getting more attention: using an AI model to generate a CRM from scratch. Describe what you want, and the AI writes the code. It sounds like the best of both worlds — fully custom, no developer required.
273
274In practice, it comes with serious problems.
275
276**You don't own the understanding.** When something breaks — and it will — you're looking at code you didn't write and don't fully understand. Debugging a vibe-coded CRM means prompting an AI and hoping the fix doesn't introduce a new problem. For a system that holds all your customer data, that's a precarious position.
277
278**Security is a real risk.** AI-generated code frequently contains security vulnerabilities that a non-developer won't catch — SQL injection risks, misconfigured access controls, unvalidated inputs. Your CRM stores sensitive customer data. A security gap in a homemade system is a genuine liability.
279
280**The data model degrades over time.** A vibe-coded CRM might work in a demo. But the underlying data structure is usually fragile — missing proper relationships, no data integrity constraints, no thought given to how the schema will evolve. As your business grows and you add complexity, the foundation starts to crack.
281
282**Maintenance compounds.** Every change requires more prompting, more generated code, more untested changes on top of previous untested changes. The debt compounds quickly. Six months in, you have a system nobody wants to touch.
283
284**Infrastructure falls on you.** A vibe-coded app still needs to be deployed somewhere. You need to provision a server, manage a database, handle backups, deal with downtime. There's no support line when the CRM goes down before a sales call.
285
286The appeal of vibe coding a CRM is the same as the appeal of building a custom one: you get exactly what you want. The problem is the hidden burden that comes with owning something you built on unstable ground.
287
288A no-code platform gives you the customization without the code ownership problem. The infrastructure, security, and maintenance are handled. You define what you need; the platform runs it.
289
290## What a Custom CRM on Engine Awesome Looks Like
291
292Here is what you can build:
293
294- **Lead and customer records** with every field you need — nothing you don't
295- **Pipeline stages** named exactly what your process is
296- **Fully custom layouts** — built around the way your team works
297- **Intake forms** on your website that flow leads straight into the system
298- **Dashboards** showing open deals, close rates, and follow-ups due this week
299- **Role access** so your sales team, ops team, and management see what they need
300
301It takes minutes to get a first version running. You iterate from there.
302
303[See CRM templates →](/templates/?category=crm)
304
305## The Bottom Line
306
307The best CRM for a small business is the one your whole team will actually use.
308
309That means it needs to fit how you work, not the other way around. It means it can't be so expensive that you limit who gets access. And it means you can update it yourself when your process changes.
310
311For a lot of small businesses, that points toward building something custom — without the cost or timeline of traditional development.
312
313[Learn more about building a custom CRM →](/solutions/custom-crm)
314
315[Book a walkthrough →](/meet/call)`,_meta:{filePath:"crm-for-small-business.md",fileName:"crm-for-small-business.md",directory:".",extension:"md",path:"crm-for-small-business"},slug:"crm-for-small-business"},{title:"Customizable Filters: View Your Data, Your Way",excerpt:"Engine Awesome now enables users to create customizable filters for data tables without requiring any coding knowledge.",date:"2023-02-08",category:"Product Updates",author:"Steve Bruner",featured:!1,content:`# Customizable Filters: View Your Data, Your Way
316
317Engine Awesome has announced a new feature enabling users to create customizable filters for data tables without requiring any coding knowledge. The filters are constructed using blocks that can be arranged in any order and styled to match user preferences.
318
319## Key Features
320
321The platform allows users to filter data in real-time, helping them focus on relevant information. Users can sort by specific dates using an advanced date picker or filter by any available field.
322
323### Practical Applications
324
325- Highlighting action items by filtering today's date
326- Isolating open orders, new quotes, and unpaid invoices
327- Displaying open tasks while hiding completed jobs
328
329## User Experience
330
331Data tables are great for displaying data, but narrowing down results can be a pain. Our block-based interface means absolutely no code is needed to implement or customize filters.
332
333## Impact
334
335This enhancement makes data management more flexible across various application types, allowing businesses to view and organize information according to their specific workflows and needs.`,_meta:{filePath:"customizable-filters-view-your-data-your-way.md",fileName:"customizable-filters-view-your-data-your-way.md",directory:".",extension:"md",path:"customizable-filters-view-your-data-your-way"},slug:"customizable-filters-view-your-data-your-way"},{title:"Dashboard Pages and Quick Tables",excerpt:"We're moving towards letting you build powerful dashboard pages using no-code. Our first step is introducing no-code Tables.",date:"2023-01-17",category:"Product Updates",author:"Engine Awesome Team",featured:!1,content:`# Dashboard Pages and Quick Tables
336
337Engine Awesome is moving towards letting you build powerful dashboard pages using no-code. Our first step is introducing no-code Tables—one of our most significant changes since our launch in August 2022.
338
339## The New Table Block
340
341Building table layouts is now a breeze with the new Engine Awesome "Table" block. Just insert it, add the fields you want to display, and you're done.
342
343## Key Features
344
345### Buttons and Navigation
346You can add buttons to "Create New" Objects, and link to other dashboard pages or layouts. This makes it easy to navigate your application.
347
348### Pagination Options
349Add pagination or limit the list to your most recent items. Display ten items at a time, or show everything—it's up to you.
350
351## Why Dashboards Matter
352
353Dashboards provide a simple way to find the information you need and provide access to the tools you use. With Engine Awesome's new table functionality, you can create custom views of your data that match exactly how you work.
354
355## What's Next
356
357This is just the beginning of our dashboard improvements. We're continuing to build out no-code tools that let you create exactly the interface your business needs.`,_meta:{filePath:"dashboard-pages-and-quick-tables.md",fileName:"dashboard-pages-and-quick-tables.md",directory:".",extension:"md",path:"dashboard-pages-and-quick-tables"},slug:"dashboard-pages-and-quick-tables"},{title:"Embeddable Forms: Collect Data From Anywhere",excerpt:"Engine Awesome now lets you create embeddable forms with drag-and-drop ease. Collect data directly from your website, restrict access by domain, and automate record creation and updates—no coding required.",date:"2026-02-06",category:"Product Updates",author:"Steve Bruner",featured:!0,content:`# Embeddable Forms: Collect Data From Anywhere
358
359## How It Works
360
361Creating an embeddable form follows the same intuitive process you already know in Engine Awesome. Drag and drop fields onto y
361our form layout, configure your settings, and publish. Engine Awesome generates an embed snippet you can paste into any website to start collecting submissions immediately.
362
363## Powerful Form Actions
364
365Embeddable forms go beyond simple data collection. Each form can be configured to handle records in the way that best fits your workflow:
366
367- **Create New Object** — Every submission creates a brand-new record in your application. Perfect for lead capture forms, event registrations, or support requests.
368- **Find or Create Object** — The form searches for an existing record based on a matching field. If a match is found, it pulls up that record; if not, it creates a new one. Great for customer portals where users may or may not already exist in your system.
369- **Update or Create Object** — Similar to find or create, but if a matching record is found, its fields are updated with the new submission data. Ideal for profile update forms or recurring data collection where you always want the latest information.
370- **Update Existing Object** — The form updates a record that already exists, with no new record created. Use this for editing workflows where the record is known ahead of time.
371
372## Domain Restrictions
373
374Control exactly where your forms can be used. Restrict which domains are allowed to load your embedded form, so only your authorized websites can submit data. This keeps your data clean and prevents unauthorized use of your forms.
375
376## Hidden Fields
377
378Not every field needs to be visible to the person filling out the form. Hidden fields let you pass in values behind the scenes—like a source tracker, campaign ID, or any default value—without cluttering the user-facing form. The data still gets saved to the record, giving you full context on every submission.
379
380## Get Started
381
382Embeddable forms are available now for all Engine Awesome users. Head to your application, create a new form layout, and start collecting data from anywhere on the web.`,_meta:{filePath:"embeddable-forms.md",fileName:"embeddable-forms.md",directory:".",extension:"md",path:"embeddable-forms"},slug:"embeddable-forms"},{title:"Engine Awesome Has a New Look!",excerpt:"Our application mode has been completely redesigned to be cleaner, faster, and even more mobile-friendly.",date:"2023-01-23",category:"Product Updates",author:"Engine Awesome Team",featured:!1,content:`# Engine Awesome Has a New Look!
383
384We've been hard at work improving Engine Awesome, and we're excited to unveil our newly redesigned application mode.
385
386## Cleaner, Faster, More Mobile-Friendly
387
388The Engine Awesome application mode has been completely redesigned to be:
389
390- **Cleaner** - A streamlined interface that puts your data front and center
391- **Faster** - Improved performance for a snappier experience
392- **More Mobile-Friendly** - Works beautifully on any device
393
394## How It Works
395
396Engine Awesome has two modes:
397
3981. **Build Mode** - Where creators design and configure their applications
3992. **Application Mode** - Where you enter data and run your business
400
401With our new design, switching between building and using your application is seamless. Create your custom solution, then use it daily to manage your operations.
402
403## A Better User Experience
404
405We've made numerous updates since our launch in August 2022, and this redesign represents our commitment to making Engine Awesome the best no-code platform for running your business.
406
407The new look makes it easier than ever to navigate your applications, enter data, and get work done.`,_meta:{filePath:"engine-awesome-has-a-new-look.md",fileName:"engine-awesome-has-a-new-look.md",directory:".",extension:"md",path:"engine-awesome-has-a-new-look"},slug:"engine-awesome-has-a-new-look"},{title:'Engine Awesome Highlighted at the "State of the Word"',excerpt:"Engine Awesome received recognition during WordPress co-founder Matt Mullenweg's annual keynote address.",date:"2022-12-19",category:"Product Updates",author:"Steve Bruner",featured:!1,content:`# Engine Awesome Highlighted at the "State of the Word"
408
409Engine Awesome received recognition during WordPress co-founder Matt Mullenweg's annual keynote address, delivered on December 15, 2022. The company was highlighted as a notable example of leveraging the WordPress editor, Gutenberg, for purposes beyond traditional webpage design.
410
411## Built on Gutenberg
412
413Engine Awesome, built as a Laravel application, utilizes Gutenberg as its primary application interface. This approach allows the company to benefit from an established open-source ecosystem while providing users with a powerful tool built on familiar technology.
414
415## Media Coverage
416
417The recognition generated coverage across several WordPress-focused publications:
418
419- WP Tavern
420- The WP Minute
421- Easy WP
422- WPMotivate
423
424## Innovation in No-Code
425
426This announcement demonstrates how modern no-code/low-code platforms can repurpose existing open-source components to create innovative business applications.
427
428We invite you to try Engine Awesome and see how we're reimagining what's possible with the Gutenberg editor!`,_meta:{filePath:"engine-awesome-highlighted-at-the-state-of-the-word.md",fileName:"engine-awesome-highlighted-at-the-state-of-the-word.md",directory:".",extension:"md",path:"engine-awesome-highlighted-at-the-state-of-the-word"},slug:"engine-awesome-highlighted-at-the-state-of-the-word"},{title:"Engine Awesome in the News, and Our First Tutorial!",excerpt:`WP Tavern interviewed us for an "Under the hood" look at Engine Awesome, and we've released our first video tutorial.`,date:"2023-02-02",category:"Product Updates",author:"Engine Awesome Team",featured:!1,content:`# Engine Awesome in the News, and Our First Tutorial!
429
430If you've been curious about Engine Awesome, this is a great time to learn more. We've got some exciting news to share!
431
432## Featured on WP Tavern
433
434WP Tavern, the leading WordPress news site, interviewed us for an "Under the hood" look at Engine Awesome. It's a great overview of what we're building and why.
435
436## Our First Tutorial is Live!
437
438We've published our first tutorial on YouTube. In just 35 minutes, our CTO Timothy Jacobs shows you how to build an application perfect for any Service Business.
439
440### What You'll Learn
441
442- How to set up your first Engine Awesome application
443- Creating custom fields and data structures
444- Building interfaces that work for your workflow
445- Tips and tricks for getting the most out of the platform
446
447## Perfect for Service Businesses
448
449Whether you run a consulting firm, agency, or any service-based business, this tutorial will show you how Engine Awesome can help you manage clients, projects, and operations more effectively.
450
451Check out the tutorial and start building your custom application today!`,_meta:{filePath:"engine-awesome-in-the-news-and-our-first-tutorial.md",fileName:"engine-awesome-in-the-news-and-our-first-tutorial.md",directory:".",extension:"md",path:"engine-awesome-in-the-news-and-our-first-tutorial"},slug:"engine-awesome-in-the-news-and-our-first-tutorial"},{title:"Engine Awesome on the WP Tavern Podcast",excerpt:"Timothy and 
451Steve discuss the ins and outs of Engine Awesome, including how we use Gutenberg outside of WordPress.",date:"2023-04-26",category:"Product Updates",author:"Steve Bruner",featured:!1,content:`# Engine Awesome on the WP Tavern Podcast
452
453We're excited to share that Timothy and I recently appeared on the WP Tavern podcast to discuss Engine Awesome.
454
455## What We Discussed
456
457We covered the "why" and "how" behind our company, including some interesting technical details about how we built Engine Awesome.
458
459### Gutenberg Outside WordPress
460
461One of the most interesting parts of our conversation was about Gutenberg—but not how you might expect. We talked about using Gutenberg outside of WordPress.
462
463Gutenberg is open source, and when we began working on Engine Awesome and needed a way for our clients to interact with it, we found Gutenberg was the perfect tool for the job.
464
465### The Benefits of Gutenberg
466
467We discussed:
468
469- What benefits we've gained by using Gutenberg
470- How it's saved us development time
471- How it's becoming a stable and mature product
472- Why it's easy for non-technical users to understand
473
474### Laravel + Gutenberg
475
476We also dove into the pros and cons of integrating Gutenberg with Laravel, our backend framework. It's a unique approach that lets us combine the best of both worlds.
477
478## A Familiar Environment
479
480If you're well-versed in WordPress, you'll find Engine Awesome a familiar environment. We've leveraged the WordPress ecosystem while building something entirely new—a platform that makes it easy for businesses to create custom solutions without needing to be coding wizards.`,_meta:{filePath:"engine-awesome-on-the-wp-tavern-podcast.md",fileName:"engine-awesome-on-the-wp-tavern-podcast.md",directory:".",extension:"md",path:"engine-awesome-on-the-wp-tavern-podcast"},slug:"engine-awesome-on-the-wp-tavern-podcast"},{title:"Engine Awesome Relationships: The Easiest Relationship You'll Ever Have",excerpt:"Engine Awesome has introduced support for object relationships, enabling users to connect different data types within their applications.",date:"2022-12-30",category:"Product Updates",author:"Steve Bruner",featured:!1,content:`# Engine Awesome Relationships: The Easiest Relationship You'll Ever Have
481
482Engine Awesome has introduced support for object relationships, enabling users to connect different data types within their applications. This feature allows developers to build more sophisticated no-code applications by establishing connections between entities.
483
484## Practical Applications
485
486The platform supports various relationship structures:
487
488- Companies linked to contacts and projects
489- Projects containing task items
490- Clients connected to orders
491- Musicians organizing songs and tour dates
492- Retail operations managing store displays and inventory
493
494## Activity Stream
495
496A particularly valuable use case involves creating an "Activity Stream" by establishing an Activity object and relating it across multiple data types. This provides comprehensive activity tracking throughout an entire application.
497
498## User Interface Features
499
500The update includes:
501
502- **Relationship picker tool** - Easily select related objects
503- **Relationship block component** - Display relationships in your layouts
504
505These tools make it intuitive to establish and manage connections without coding knowledge.
506
507## Endless Possibilities
508
509Relationships provide flexibility for developers building applications. The full extent of possibilities remains to be explored by our user community—we can't wait to see what you build!`,_meta:{filePath:"engine-awesome-relationships-the-easiest-relationship-youll-ever-have.md",fileName:"engine-awesome-relationships-the-easiest-relationship-youll-ever-have.md",directory:".",extension:"md",path:"engine-awesome-relationships-the-easiest-relationship-youll-ever-have"},slug:"engine-awesome-relationships-the-easiest-relationship-youll-ever-have"}
509,{title:"From Frustration to Flexibility: Andigo's Success with Engine Awesome",excerpt:"Andrew Schulkind leads Andigo, a website and content marketing agency that helps mission-driven businesses generate audience engagement through solid information architecture, great user experience, and compelling content.",date:"2024-12-02",category:"Customer Success Stories",author:"Andrew Schulkind",featured:!0,content:`# From Frustration to Flexibility: Andigo's Success with Engine Awesome
510
511**Customer Success Story**
512
513*Andrew Schulkind, CEO of Andigo*
514
515**Key Results:**
516- **90%** Faster onboarding than previous tools
517- **Same-day** Implementation with minimal learning curve
518
519> Andrew Schulkind leads Andigo, a website and content marketing agency that helps mission-driven businesses generate audience engagement through solid information architecture, great user experience, and compelling content. A dash of common sense doesn't hurt, either.
520
521## Industry
522
523Content Marketing and Web Development
524
525## Challenges
526
527I don't look anything like "Goldilocks," but that's exactly how our search for project management software felt—we couldn't find the "just right" solution.
528
529With a modest team and what we thought were relatively simple needs, I assumed finding the right tool wouldn't be difficult. I was wrong. Our existing tool was costing us time and efficiency, yet the process of finding a better alternative was turning into an even bigger time sink.
530
531## Research
532
533Our search for the right solution revealed a range of challenges:
534
535- **Expense**: While free tools were available, they felt unfinished or extremely limited compared to their paid counterparts. Full-featured platforms, on the other hand, often came with steep monthly per-seat fees—and even more costs hidden in feature upgrades or escalating subscriptions.
536
537- **Training and Commitment**: Tools that seemed like they might work required significant effort to learn or configure. It felt like we were signing up for an unpaid second job, whether that meant investing hours of our time or hiring consultants to do the heavy lifting.
538
539- **Flexibility**: Many tools locked us into rigid workflows. If our needs changed, we'd have to go through the time-consuming and expensive configuration process again.
540
541- **Overwhelmed**: Every new tool presented a maze of options, features, and dashboards. Logging in for the first time often felt more like stepping into chaos than starting a solution.
542
543- **Fear of the Unknown**: Even when a tool showed potential, I worried that weeks or months down the road, we'd discover it wasn't the right fit—leaving us back at square one.
544
545As much as we needed a better tool, the search itself became an obstacle.
546
547> Engine Awesome was the first tool that truly feels like it was designed for our business, not the other way around.
548
549## Solution
550
551When I first heard about Engine Awesome, I'll admit I was skeptical. I assumed it would demand the same time, effort, and compromises as every other platform we'd tried. However, knowing the team behind the tool, I decided to give it a shot—and I'm so glad I did.
552
553From the very start, Engine Awesome proved to be different.
554
555- **Fast Implementation**: We were up and running the same day we signed up. The onboarding process was seamless, and we could test it on live projects almost immediately.
556
557- **Responsive Support**: The Engine Awesome team was incredibly responsive to our needs. Every feature request or question was answered quickly—often within hours.
558
559- **Incredible Flexibility**: The platform adapted to our workflow, not the other way around. Every customization we needed was straightforward to implement and worked seamlessly.
560
561- **Room to Grow**: This isn't just a project management tool;
561 it's a foundation we can build on as our needs evolve.
562
563- **Cost-Effective**: Engine Awesome's reasonable pricing, combined with the time and money we saved on setup and customization, made it an excellent value.
564
565## Results
566
567We're no longer wasting time with the wrong tool—or wasting energy searching for a better one. With Engine Awesome, we've found a solution that fits perfectly, adapts to our needs, and gives us room to grow.
568
569Best of all, it lets us focus on what matters: running our business and delivering exceptional results for our clients.
570
571If you're frustrated with rigid, complex, or overpriced tools, I highly recommend giving Engine Awesome a try.
572
573[Learn more about **Andigo** here.](https://andigo.com/)`,_meta:{filePath:"from-frustration-to-flexibility-andigos-success-with-engine-awesome.md",fileName:"from-frustration-to-flexibility-andigos-success-with-engine-awesome.md",directory:".",extension:"md",path:"from-frustration-to-flexibility-andigos-success-with-engine-awesome"},slug:"from-frustration-to-flexibility-andigos-success-with-engine-awesome"},{title:"Get Started Even Quicker with Application Templates",excerpt:"Building your application with Engine Awesome is easy, but we understand that sometimes it's tough to begin. That's why we've launched our Application Library.",date:"2023-04-20",category:"Product Updates",author:"Steve Bruner",featured:!1,content:`# Get Started Even Quicker with Application Templates
574
575Building your application with Engine Awesome is easy, but we understand that sometimes it's tough to begin. That's why we've launched our Application Library—a collection of pre-built templates designed to accelerate project setup.
576
577## Pre-Built Templates for Every Business
578
579The templates cover various business needs, including:
580
581- Service businesses
582- Real estate management
583- Fundraising organization
584- CRM lead tracking
585
586Each template can be used immediately or customized through Engine Awesome's no-code builder.
587
588## No Per-User Fees
589
590A key value proposition is our pricing model: our pricing includes (essentially) your entire team. We don't charge per-user fees because we believe team synchronization improves business operations.
591
592## Getting Started
593
594Both new and existing customers can explore the library. If you can't find a suitable template, you can request custom applications from our team.
595
596We encourage you to test the templates and provide feedback. Visit our Application Library to get started today!`,_meta:{filePath:"get-started-even-quicker-with-application-templates.md",fileName:"get-started-even-quicker-with-application-templates.md",directory:".",extension:"md",path:"get-started-even-quicker-with-application-templates"},slug:"get-started-even-quicker-with-application-templates"},{title:"Give Your Business a Helping Hand with Engine Awesome's White Glove Service",excerpt:"Introducing our White Glove Service—top-tier, concierge-like support included with every Engine Awesome account.",date:"2023-06-28",category:"Product Updates",author:"Engine Awesome Team",featured:!1,content:`# Give Your Business a Helping Hand with Engine Awesome's White Glove Service
597
598We're excited to introduce our White Glove Service, designed to make your journey with Engine Awesome even smoother and more enjoyable.
599
600## What is White Glove Service?
601
602White Glove Service is a top-tier, concierge-like service included when you use Engine Awesome. It's designed to help you get the most out of our no-code application builder.
603
604## Guidance Every Step of the Way
605
606From initial setup to fine-tuning your applications, our team is here to help. When you sign up for Engine Awesome, you automatically receive White Glove Service, which provides:
607
608- **Direct access to experts** who can provide guidance and answer questions
609- **Troubleshooting support** when you need it
610- **Help with data imports** from other sources
611- **Zapier automation assistance** to connect your tools
612
613## A Collaborative Approach
614
615Our approach to white glove onboarding strikes a balance between professional rigor and a friendly, supportive experience. We build solutions that truly fit your business with a personal touch that makes the process feel more like a collaboration than a service.
616
617## Real Results
618
619Homeowners Hub leveraged our White Glove Service to kickstart their journey without worrying about their busy schedule. Our team helped them get up and running quickly, so they could focus on what they do best—serving their customers.
620
621## Get Started
622
623Every Engine Awesome account includes White Glove Service at no extra cost. Sign up today and experience the difference that personalized support can make for your business.`,_meta:{filePath:"give-your-business-a-helping-hand-with-engine-awesomes-white-glove-service.md",fileName:"give-your-business-a-helping-hand-with-engine-awesomes-white-glove-service.md",directory:".",extension:"md",path:"give-your-business-a-helping-hand-with-engine-awesomes-white-glove-service"},slug:"give-your-business-a-helping-hand-with-engine-awesomes-white-glove-service"},{title:"Google Calendar and Engine Awesome: The Ultimate Power Schedule!",excerpt:"Engine Awesome has launched a Google Calendar integration that enables bidirectional synchronization between job scheduling and calendar views.",date:"2023-08-02",category:"Product Updates",author:"Steve Bruner",featured:!1,content:`# Google Calendar and Engine Awesome: The Ultimate Power Schedule!
624
625Engine Awesome has launched a Google Calendar integration that enables bidirectional synchronization between job scheduling in Engine Awesome and calendar views in Google Calendar.
626
627## Two-Way Synchronization
628
629Jobs created in Engine Awesome automatically appear in Google Calendar. Changes made in either platform sync back to the other, ensuring consistency across both systems.
630
631## Multi-Team Support
632
633Companies with multiple teams can create separate calendars while maintaining a consolidated overview of all operations.
634
635## How It Works
636
637The process involves four straightforward steps:
638
6391. **Create and schedule jobs** within Engine Awesome with complete job details
6402. **Jobs automatically display** in Google Calendar for visual scheduling review
6413. **Reschedule jobs directly** in Google Calendar by adjusting time slots
6424. **Changes automatically update** back in Engine Awesome
643
644It's a tool that most of us are already familiar with. It's intuitive, widely used, and offers a visual representation of schedules that benefits teams already comfortable with Google's platform.
645
646## Getting Started
647
648Existing customers have automatic access to this beta feature. New customers should install an application template and contact support for configuration assistance.
649
650The feature streamlines job management by leveraging a familiar, widely-adopted calendar platform while maintaining data accuracy across both systems.`,_meta:{filePath:"google-calendar-and-engine-awesome-the-ultimate-power-schedule.md",fileName:"google-calendar-and-engine-awesome-the-ultimate-power-schedule.md",directory:".",extension:"md",path:"google-calendar-and-engine-awesome-the-ultimate-power-schedule"},slug:"google-calendar-and-engine-awesome-the-ultimate-power-schedule"},{title:"How AI Can Help You Capture Hidden Business Opportunities",excerpt:"You work hard to generate leads—whether through your website's chatbot, your contact form, or direct calls to your business.",date:"2025-02-05",category:"Business",author:"Steve Bruner",featured:!0,content:`# How AI Can Help You Capture Hidden Business Opportunities
651
652You work hard to generate leads—whether through your website's chatbot, your contact form, or direct calls to your business. But what happens to those leads once they come in? Are they being followed up on consistently? Are potential customers being engaged properly? Or are some slipping away without you even realizing it?
653
654One of our prospects faced this exact problem. They were bringing in leads from multiple sources, but follow-up was inconsistent. Some inquiries never received a response, while others were handled in ways that failed to convert interested prospects into paying customers.
655
656To solve this, we brought all their conversations into Engine Awesome and used our AI Engine to analyze them.
657
658The result? A system that automatically identifies missed opportunities, ensuring no potential lead falls through the cracks.
659
660---
661
662## Are You Missing Opportunities Without Even Knowing It?
663
664You handle customer interactions every day, but without the right follow-up, potential sales can disappear. Here are a few real-world examples of how this happens:
665
666- **The Unconverted Inquiry** – A potential customer fills out a contact form asking about pricing, but the response is brief, delayed, or doesn't encourage next steps. The lead never follows up, and the opportunity is lost.
667
668- **The Service Mismatch** – A potential client asks about a service you offer, but the person responding isn't sure about the details. Instead of guiding them toward the right solution, the conversation ends with uncertainty, and the customer looks elsewhere.
669
670- **The Lost Phone Call** – A customer calls your business, but the employee answering the call isn't fully engaged. They take a message or give a vague response instead of actively working to convert the caller into a customer. Or worse, the caller dialed your number by mistake, thinking they were calling a competitor—and instead of turning the situation into an opportunity, your employee simply lets them go.
671
672These moments happen all the time, and unless you have a system to track and act on them, they go unnoticed.
673
674---
675
676## How Our AI Engine Helps You Find Hidden Opportunities
677
678Instead of manually reviewing every customer conversation or sifting through endless transcripts, our AI Engine does the heavy lifting for you. Here's how it works:
679
680- **Bringing Everything Into One Place** – Conversations and transcripts from all your lead sources are automatically collected and stored in Engine Awesome.
681
682- **Analyzing Conversations for Missed Leads** – AI scans these interactions to identify where engagement fell short—whether it's an inquiry that wasn't fully addressed, a potential sale that stalled, or a lead that never received a follow-up.
683
684- **Providing Actionable Insights** – You get clear reports on where opportunities were missed, making it easy to follow up with leads or train staff to handle interactions better.
685
686By turning scattered conversations into structured insights, AI helps you stop losing potential customers and start converting more leads.
687
688---
689
690## Turning Insights Into Growth
691
692Once AI identifies a missed opportunity, you can take action immediately:
693
694- **Follow Up Quickly** – Reach out to potential customers before they move on to a competitor.
695
696- **Improve Sales Conversations** – Use AI insights to train your team on better engagement strategies.
697
698- **Refine Your Processes** – Adjust chatbot scripts, contact form responses, and sales follow-up tactics to improve c
698onversion rates.
699
700Instead of relying on guesswork, you'll have data-driven insights that lead to real growth.
701
702---
703
704## You're Already Generating Leads—Make Sure You're Capturing Them
705
706Every interaction—whether it's a chatbot message, a contact form submission, or a phone call—holds valuable insight. The question is: **Are you making the most of them?**
707
708By using AI-driven analysis, you can stop leaving money on the table. Instead of missing out on potential customers, you can take proactive steps to engage, convert, and grow your revenue.
709
710Because in business, it's not just about getting leads—it's about knowing what to do with them.
711
712If you want to learn more about how Engine Awesome can help your business, [you can contact us here](/contact).`,_meta:{filePath:"how-ai-can-help-you-capture-hidden-business-opportunities.md",fileName:"how-ai-can-help-you-capture-hidden-business-opportunities.md",directory:".",extension:"md",path:"how-ai-can-help-you-capture-hidden-business-opportunities"},slug:"how-ai-can-help-you-capture-hidden-business-opportunities"},{title:"How Marketing Teams Can Scale Faster with Custom Business Tools",excerpt:"Marketing today isn't just about big ideas—it's a balancing act of creativity, speed, data, and flawless execution.",date:"2025-05-27",category:"Business",author:"Jason Levy",featured:!1,content:`# How Marketing Teams Can Scale Faster with Custom Business Tools
713
714Marketing today isn't just about big ideas—it's a balancing act of creativity, speed, data, and flawless execution. Yet despite all the expectations, many teams are still buried in spreadsheets, toggling between disconnected tools, and chasing updates across endless email chains.
715
716The result? Burnout, bottlenecks, and missed growth opportunities.
717
718That's where the power of personalized software meets the brilliance of high-performance marketing.
719
720Welcome to the new era of growth enablement—powered by Engine Awesome and [Blazeo](https://www.blazeo.com).
721
722## The Agility Problem in Modern Marketing
723
724Traditional marketing operations are increasingly inefficient for today's pace of work. Campaign requests come from every direction—sales, product, leadership, customer success. Assets are stored in scattered folders. Status updates are buried in Slack. Reporting is manual. And the tools meant to help—like spreadsheets or generic project trackers—just don't fit the unique workflows of growing marketing teams.
725
726Marketers don't have time to wait on IT or dev resources to build internal solutions. They need tools that adapt to *them*—not the other way around.
727
728## Can't Marketing Teams Just Vibe Code Their Own Tools?
729
730It's a fair question. AI coding tools have gotten good enough that non-developers can describe a tool and get working code back in minutes. Why not just build your own campaign tracker or request portal that way?
731
732The short answer: because running it is a different job than building it.
733
734A vibe-coded tool might look great in a demo. But marketing teams need tools that hold up under real use — multiple team members, changing workflows, growing data. AI-generated code isn't designed for that. It's generated to satisfy a prompt. Structural decisions that made sense for the first version become problems six months later when you need to add a new field, connect a new integration, or onboard three new people.
735
736There's also the maintenance question. When the tool breaks — and it will — someone has to fix it. That person is now responsible for a codebase they didn't write and can't fully understand. That's not a scalable arrangement for a marketing team that should be focused on campaigns, not code.
737
738And hosting, backups, access management, and security? All of that comes with the territory when you build from scratch with AI — none of it is handled for you.
739
740The better path is a platform built to handle the operational layer, so your team can focus on the work.
741
742## Personalized Software to the Rescue: Custom Tools, Zero Dev Time
743
744That's why personalized software platforms are revolutionizing marketing operations. They allow teams to build internal tools that fit like a glove—with zero engineering bottlenecks.
745
746Engine Awesome is leading the charge, giving marketing teams the power to build tailored applications and dashboards without writing a single line of code. Think of it as your personal toolkit for automating workflows, centralizing campaign data, and replacing outdated spreadsheets.
747
748Need a content request tracker dashboard for your design team? Want a centralized place to log, assign, and follow up on campaign tasks? Or maybe a tool that c
748ombines social analytics and email performance in one dashboard?
749
750With Engine Awesome, marketing leaders can build these tools in minutes, not months.
751
752## When Systems Meet Strategy: Blazeo x Engine Awesome
753
754But tools alone don't drive growth—strategy does.
755
756That's where Blazeo comes in. As a creative and high-performance marketing agency, Blazeo brings the firepower of conversion-driven strategy, branding, and media with deep operational understanding. Paired with Engine Awesome, Blazeo doesn't just execute campaigns—they optimize the system behind them.
757
758Together, the two companies offer a unique advantage: custom business tools that support smarter, faster marketing—backed by a team that understands how to drive growth at every stage.
759
760Here's how this collaboration supercharges marketing teams:
761
762## 1. Automated Campaign Request Workflows
763
764Forget chaotic email chains and misaligned deadlines. Blazeo helps define the ideal intake process—Engine Awesome brings it to life.
765
766Teams can build request portals that automatically assign tasks, route approvals, and generate project timelines. Everything is tracked in real-time, reducing friction and ensuring nothing slips through the cracks.
767
768## 2. Centralized Data = Better Decisions
769
770Marketing teams rely on data, but too often it's spread across CRMs, analytics platforms, ad dashboards, and Excel sheets. Blazeo + Engine Awesome help marketers centralize and visualize that data through custom dashboards that pull from multiple sources.
771
772The result? Real-time insights without having to cobble together reports manually.
773
774## 3. Custom Tools for Every Team Member
775
776Instead of one-size-fits-all software, Engine Awesome lets marketers build tools for specific needs:
777
778- **Content calendars** integrated with production workflows
779- **Influencer databases** linked to campaign metrics
780- **Budget trackers** tied to real-time performance data
781- **A/B testing logs** with built-in learning repositories
782
783Blazeo works with teams to define what's needed—and Engine Awesome makes it real.
784
785## 4. Speed, Clarity, and Scalability
786
787Scaling a marketing team isn't just about hiring more people—it's about building smarter systems. With the right tools in place, even small teams can move like large ones.
788
789By automating the repetitive, centralizing the messy, and aligning the team with clear workflows, Engine Awesome and Blazeo enable marketers to spend more time on strategy and creativity—and less on admin.`,_meta:{filePath:"how-marketing-teams-can-scale-faster-with-custom-business-tools.md",fileName:"how-marketing-teams-can-scale-faster-with-custom-business-tools.md",directory:".",extension:"md",path:"how-marketing-teams-can-scale-faster-with-custom-business-tools"},slug:"how-marketing-teams-can-scale-faster-with-custom-business-tools"},{title:"How Woolley Home Solutions Boosted Efficiency with Centralized Lead Management",excerpt:"Meet Norman Woolley, President of Woolley Home Solutions. His mission is to deliver trusted, all-in-one home comfort services that keep homeowners comfortable and worry-free.",date:"2025-08-04",category:"Customer Success Stories",author:"Norman Woolley",featured:!0,content:`# How Woolley Home Solutions Boosted Efficiency with Centralized Lead Management
790
791**Customer Success Story**
792
793*By Norman Woolley, President of Woolley Home Solutions*
794
795**Key Results:**
796- **85%** Faster Lead Follow-Up
797- **50%** Reduction in Time Spent Managing Leads
798
799> Meet Norman Woolley, President of Woolley Home Solutions. His mission is to deliver trusted, all-in-one home comfort services that keep homeowners comfortable and worry-free.
800
801## Industry
802
803Heating and Cooling Services
804
805## Challenge: Fragmented Lead Management
806
807Woolley Home Solutions was struggling to keep up with the increasing volume of leads coming from various sources. Our marketing efforts generated inquiries through chatbots, online advertising, and multiple web forms scattered across different platforms. Each lead was trapped in a silo: some arrived via email, others required logging into separate accounts to download spreadsheets, and all had to be manually checked and assigned to staff members.
808
809This process was inefficient, time-consuming, and prone to human error. Team members found themselves juggling lead tracking across multiple platforms, which made it harder to stay focused and sometimes delayed timely follow-ups. The fragmented system made it difficult to get a clear picture of lead status, c
809ausing delays and lost revenue.
810
811## Solution: A Single, Unified Dashboard Powered by Engine Awesome
812
813To address these issues, we turned to Engine Awesome for a custom solution. Engine Awesome designed and implemented a centralized lead management dashboard that consolidates leads from all sources into one user-friendly platform.
814
815Now, every lead from chatbots, ads, and web forms automatically flows into this unified dashboard. Our team at Woolley no longer needs to log into multiple systems or dig through emails—everything we need is in one place. The dashboard allows quick assignment of leads to team members, and tracks progress in real time.
816
817Engine Awesome also integrated AI-powered tools that analyze lead data and identify potential opportunities that might otherwise be missed. This proactive approach helps us act faster and smarter, improving conversion rates and maximizing the value of our marketing spend.
818
819> Engine Awesome didn't just give us a new tool—they transformed how we work.
820
821## Results: Efficiency, Clarity, and Growth
822
823The transition to Engine Awesome's dashboard brought immediate improvements:
824
825- **Consolidated Lead Management:** Eliminating scattered lead sources gave our team full visibility and control.
826- **Faster Response Times:** Centralizing all leads in one place made it easier for our team to assign and follow up quickly, enhancing the overall customer experience.
827- **Reduced Manual Work:** We saved hours previously spent juggling multiple platforms, freeing time for higher-value tasks.
828- **AI-Driven Insights:** Intelligent alerts helped capture hidden opportunities, boosting overall sales.
829- **Enhanced Team Accountability:** The dashboard's transparency made it clear who was responsible for each lead and the follow-up status.
830
831As I've seen firsthand, our team feels empowered and focused. With Engine Awesome, we finally have a lead management system that grows with us. We're confident every potential customer is handled properly, and that confidence is reflected in our results.
832
833[Learn more about Woolley Home Solutions.](https://woolleyfuel.com/)`,_meta:{filePath:"how-woolley-home-solutions-boosted-efficiency-with-centralized-lead-management.md",fileName:"how-woolley-home-solutions-boosted-efficiency-with-centralized-lead-management.md",directory:".",extension:"md",path:"how-woolley-home-solutions-boosted-efficiency-with-centralized-lead-management"},slug:"how-woolley-home-solutions-boosted-efficiency-with-centralized-lead-management"},{title:"Introducing Engine Awesome",excerpt:"Engine Awesome is a SAAS product allowing you to create custom applications that work the way you do. Build anything you want and connect it to over 5000 services via Zapier.",date:"2022-08-18",category:"Product Updates",author:"Steve Bruner",featured:!0,content:`# Introducing Engine Awesome
834
835Engine Awesome is a SAAS product allowing you to create custom applications that work the way you do. Our first version allows you to create anything you want and connect it to over 5000 services via Zapier.
836
837## The Problem We're Solving
838
839All companies use unique processes and workflows to run their business. Even those in the same industry do things differently from their competitors. Unfortunately, today's software does not allow for this flexibility. Instead, they feature defined rules, often forcing us to put square pegs in round holes.
840
841## Our Story
842
843For 15 years, my website development agency tried every piece of software available to manage clients and projects, and they never worked the way I wanted. As a result, I always felt like I was doing things their way instead of my own.
844
845Together with co-founder Timothy Jacobs, we built Engine Awesome as a simple drag-and-drop solution. Both of us have been building websites and web applications for a long time, customizing each application for specific businesses and their specific workflows and needs.
846
847Now with Engine Awesome, you can build this yourself for your particular needs.
848
849## Easy to Use
850
851It's easy to use with our simple drag-and-drop application engine. Sign up and start running your business your way.
852
853With Engine Awesome, you're not forced to adapt to rigid software rules. Instead, you create the exact tools your business needs to thrive.`,_meta:{filePath:"introducing-engine-awesome.md",fileName:"introducing-engine-awesome.md",directory:".",extension:"md",path:"introducing-engine-awesome"},slug:"introducing-engine-awesome"},{title:"Multiple Layouts for Maximum Flexibility",excerpt:"Engine Awesome announces multiple layouts, enabling users to create unlimited customizable views within applications.",date:"2022-11-17",category:"Product Updates",author:"Steve Bruner",featured:!1,content:`# Multiple Layouts for Maximum Flexibility
854
855Engine Awesome has announced a significant platform enhancement called "multiple layouts," enabling users to create unlimited customizable views within applications. Each layout can be a form, list table, dashboard, and more.
856
857## Real-World Example: Party Time Entertainment
858
859Party Time Entertainment developed an intake form for event planning that progresses through multiple status stages. The system restricts data modification after customer approval—different employee views appear based on the quote's current status:
860
861- **Sent to Customer** - Initial quote view
862- **Customer Approved** - Locked for changes
863- **Scheduled** - Calendar integration view
864- **Paid** - Final completion view
865
866## Zapier Integration
867
868The company leverages its Zapier integration to automate event calendar additions and status updates to "Scheduled." This demonstrates how Engine Awesome's layout flexibility adapts user interfaces dynamically based on field values and business workflow requirements.
869
870## Endless Possibilities
871
872There are so many things you can do with Engine Awesome and multiple views. Create different experiences for different users, different statuses, and different workflows—all within the same application.`,_meta:{filePath:"multiple-layouts-for-maximum-flexibility.md",fileName:"multiple-layouts-for-maximum-flexibility.md",directory:".",extension:"md",path:"multiple-layouts-for-maximum-flexibility"},slug:"multiple-layouts-for-maximum-flexibility"},{title:"No-Code Business Apps — What They Are and When They Make Sense",excerpt:"No-code tools have matured to the point where businesses can build real operational software without a developer. Here is what that actually looks like in practice.",date:"2026-02-17",category:"Business",author:"Engine Awesome Team",featured:!1,intro:`Most businesses end up stuck between off-the-shelf software that doesn't quite fit and custom development that costs too much and takes too long. No-code platforms have quietly closed that gap. This post covers what no-code business apps actually are, when they make sense, and why the newer AI "vibe coding" approach isn't the shortcut it looks like.`,content:`# No-Code Business Apps — What They Are and When They Make Sense
873
874For most of the history of software, building a custom business application required a developer. You described what you needed, a developer built it, and you maintained it indefinitely.
875
876That relationship made sense when software was hard to build. It makes less sense today.
877
878No-code platforms have matured to the point where small and mid-sized businesses can build real operational software themselves — without writing a line of code. This piece covers what that actually means in practice, when it makes sense, and what to watch out for.
879
880## What a No-Code Business App Actually Is
881
882A no-code business app is software your business uses to run day-to-day operations — built using a visual platform instead of traditional code.
883
884This is distinct from consumer apps (things like games or social networks) and from marketing websites. We are talking about the softw
884are your team logs into every day:
885
886- A CRM that tracks leads and customers
887- A job management system for a service business
888- A donor and volunteer database for a non-profit
889- A property management tool for a landlord
890- A project tracker for an agency
891
892These are operational applications. They need a data model, views for different use cases, forms for capturing information, access controls, and reporting. With a capable no-code platform, all of that can be built without code.
893
894## What Used to Stop Businesses From Building Their Own
895
896Until recently, businesses that needed operational software had two options: buy something off the shelf or hire a developer.
897
898Off-the-shelf software covers common use cases well. HubSpot for CRM, Asana for project management, Buildium for property management. The problem is that your business rarely maps cleanly to the software's assumptions. You end up working around it — and those workarounds accumulate.
899
900Custom development solves the fit problem but introduces cost and timeline problems. A developer can build exactly what you need, but it takes time to specify, build, test, and deploy. Every change afterward requires another conversation, another spec, another build cycle.
901
902No-code platforms close that gap. You define the data model, configure the views, set up the forms, and deploy — all in the same tool, without a developer in the loop.
903
904## What About Vibe Coding?
905
906There's a newer option people reach for: using an AI model to generate the app for you. Describe what you need, let the AI write the code, skip both the developer and the SaaS subscription.
907
908It sounds like a shortcut to a custom app. In practice, it creates a different set of problems.
909
910**You inherit code you don't understand.** The AI writes it; you run it. The moment something breaks — a form stops working, data stops saving, a view shows wrong results — you're dependent on prompting the AI again and hoping the fix works. There's no documentation, no test coverage, no architecture you can inspect and reason about.
911
912**The security risk is real.** AI-generated code regularly contains vulnerabilities: SQL injection, broken access control, unvalidated inputs. For a business application that holds customer data, those vulnerabilities matter. A non-developer won't know to look for them, and a data breach from a DIY app is a serious problem.
913
914**AI-generated apps are fragile as they grow.** The initial version often works well enough. But business software evolves — you add fields, change workflows, connect new tools. An AI-generated codebase wasn't designed to grow; it was generated to answer the first prompt. Those structural limits become apparent quickly.
915
916**You still have to host and maintain it.** A generated app needs a server, a database, backups, and monitoring. None of that is included. Keeping it running is ongoing work that has nothing to do with running your business.
917
918No-code platforms are the better path to a custom app. You get something that fits your process without taking on a maintenance burden you didn't sign up for.
919
920## What You Can Actually Build
921
922Here are real examples of what businesses build with no-code tools:
923
924**Custom CRM.** Track leads from first contact through close. Define your own pipeline stages, fields, and views. Attach notes, documents, and interactions to every record. Build intake forms that capture leads from your website automatically.
925
926**Job management for service businesses.** Create jobs, attach them to customers, assign crews, set dates, and track status from scheduled through completed. Techs update from the field; the dashboard updates in real time.
927
928**Donor database for non-profits.** Every donor, gift, interaction, and grant in one place. Volunteer coordination, event management, and impact reporting alongside the fundraising data.
929
930**Property management system.** Tenants, leases, maintenance requests, vendor contacts, and document storage — organized by property and portfolio.
931
932**Operational dashboards.** Pull together the data your team cares about — open deals, jobs scheduled this week, outstanding follow-ups — into views that make the status of your business visible at a glance.
933
934## The User Access Question
935
936One of the biggest practical differences between off-the-shelf software and no-code custom apps is how user access is handled.
937
938Most SaaS software charges per seat. Add a new team member, pay for another seat. That creates real pressure to limit who gets access — which defeats the purpose of shared operational software.
939
940No-code platforms vary on this. Some still charge per user. Others, like Engine Awesome, charge per application — and include unlimited users. That changes the math considerably for growing teams.
941
942## When No-Code Makes Sense
943
944No-code is a good fit when:
945
946**Your process doesn't map to a standard product.** If you've tried two or three off-the-shelf options and keep finding the same gaps, a custom app built around how you actually work is likely the better path.
947
948**You want to iterate quickly.** With a no-code platform, you can add a field or change a view yourself in minutes. That feedback loop is much faster than waiting on a vendor feature or a development cycle.
949
950**You want your whole team in the system.** If per-seat pricing is causing you to limit access, a flat-rate model with unlimited users solves that problem.
951
952**The use case is operational, not consumer-facing.** No-code is strongest for internal business apps. If you need a public-facing product with complex user-generated content and high scale, traditional development or a more specialized platform is the better fit.
953
954## When It Might Not Be the Right Fit
955
956No-code has real limits. It is worth being honest about them:
957
958**Highly complex logic.** Some business logic is complicated enough that a visual builder becomes hard to maintain. If your application needs branching automation, complex calculated fields, and multi-step workflows, a no-code platform may not handle it cleanly.
959
960**Building a product for external users.** If you are building a SaaS product — software you plan to sell to customers — you will likely outgrow no-code tools faster. They are designed for internal use, not multi-tenant consumer-scale products.
961
962**Specific integration requirements.** If your business depends on deep integration with an enterprise system that only has a proprietary API, a general-purpose no-code platform may not connect to it without significant custom work.
963
964## Getting Started
965
966The fastest way to understand whether no-code works for your use case is to try building something real.
967
968Most platforms have templates that give you a working starting point. From there, you customize to match your actual workflow. If the platform can handle your use case, you'll know quickly.
969
970If you're building a CRM, job management system, field service app, or similar operational tool, Engine Awesome is designed specifically for that category.
971
972[Browse templates →](/templates/)
973
974[See how it works for CRMs →](/solutions/custom-crm)
975
976[Book a walkthrough →](/meet/call)`,_meta:{filePath:"no-code-business-apps.md",fileName:"no-code-business-apps.md",directory:".",extension:"md",path:"no-code-business-apps"},slug:"no-code-business-apps"},{title:"Personalize Your Application with Design Elements, Layout Tools, and Themes",excerpt:"Engine Awesome announces new personalization features enabling users to customize their applications more extensively.",date:"2022-12-08",category:"Product Updates",author:"Steve Bruner",featured:!1,content:`# Personalize Your Application with Design Elements, Layout Tools, and Themes
977
978Engine Awesome has announced new personalization features enabling users to customize their applications more extensively. The update introduces design elements, layout tools, and pre-loaded themes.
979
980## Layout Tools
981
982Users can now organize fields using Row and Stack blocks to build more advanced layouts. The system automatically responds to different screen sizes, ensuring your application looks great on any device.
983
984## Design Customization
985
986The platform offers extensive customization options:
987
988- **Colors** for text, backgrounds, borders, and more
989- **Padding and margin controls** for spacing around blocks
990- **Typography settings** to match your brand
991
992## Themes
993
994Pre-loaded theme options allow users to switch styles quickly without building from scratch. Choose a theme that fits your brand and customize from there.
995
996## Simple Yet Powerful
997
998We maintain our commitment to accessibility, emphasizing that these capabilities remain simple enough to allow users to build applications in minutes, not months.
999
1000These updates represent significant enhancements to the no-code application-building experience while preserving the platform's ease of use.`,_meta:{filePath:"personalize-your-application-with-design-elements-layout-tools-and-themes.md",fileName:"personalize-your-application-with-design-elements-layout-tools-and-themes.md",directory:".",extension:"md",path:"personalize-your-application-with-design-elements-layout-tools-and-themes"},slug:"personalize-your-application-with-design-elements-layout-tools-and-themes"},{title:"Preset it and forget it! Save your search queries.",excerpt:"Engine Awesome has announced a new feature called Preset Filter Queries, which allows users to save and reapply complex search f
1000ilters with a single click.",date:"2023-05-16",category:"Product Updates",author:"Steve Bruner",featured:!1,content:`# Preset it and forget it! Save your search queries.
1001
1002Engine Awesome has announced a new feature called Preset Filter Queries, which allows users to save and reapply complex search filters with a single click.
1003
1004## Overview of the Feature
1005
1006This enhancement builds on our existing customizable filter system. Preset Filter Queries are an intuitive feature that enables you to create, save, and reapply complex search filters.
1007
1008## How It Works
1009
1010Users can build preset filters using Engine Awesome's no-code builder by:
1011
10121. Selecting the "Query Filter Preset block"
10132. Defining parameters through a menu system
10143. Naming the preset
10154. Saving it for future use
1016
1017Common use cases include "Scheduled Jobs," "Contacts to Follow up with," and "Open Invoices."
1018
1019## Key Benefits
1020
1021- **Time Savings** – Users no longer need to repeatedly enter identical search criteria
1022- **Consistency** – Teams can ensure standardized search parameters across operations
1023- **Ease of Use** – The intuitive interface makes creating and applying presets straightforward
1024
1025## Implementation
1026
1027All application templates in Engine Awesome's library have been updated to include this new functionality, making it immediately available to users and new customers exploring the platform.`,_meta:{filePath:"preset-it-and-forget-it-save-your-search-queries.md",fileName:"preset-it-and-forget-it-save-your-search-queries.md",directory:".",extension:"md",path:"preset-it-and-forget-it-save-your-search-queries"},slug:"preset-it-and-forget-it-save-your-search-queries"},{title:"Questions to Ask Before Hiring an Accountant",excerpt:"When we started looking for an accountant for our business, we quickly realized how overwhelming the process can be.",date:"2025-02-18",category:"Business",author:"Steve Bruner",featured:!1,content:`# Questions to Ask Before Hiring an Accountant
1028
1029When we started looking for an accountant for our business, we quickly realized how overwhelming the process can be. There are countless options, and choosing the right one is crucial for keeping your finances in order and making informed decisions. **Since we aren't experts in accounting**, we did a lot of research to understand what to look for. We put together this guide to help other business owners navigate the process and make a confident decision.
1030
1031---
1032
1033## Types of Financial Professionals
1034
1035### You (DIY Approach)
1036
1037Many new business owners attempt to handle their own accounting to save money. While this may seem cost-effective at first, it can lead to costly mistakes. Tax laws change frequently, and keeping up with financial regulations is time-consuming. Plus, your time is valuable—what's your hourly rate? If an accountant can complete the work faster and more accurately, the investment is well worth it.
1038
1039### Bookkeeper
1040
1041A bookkeeper helps track income and expenses, manage payroll, and handle financial transactions. They often use accounting software like QuickBooks to keep financial records organized. While they provide valuable day-to-day financial management, they do not offer strategic tax planning or financial advice.
1042
1043### Accountant
1044
1045An accountant goes beyond bookkeeping by preparing tax documents, creating financial reports, and analyzing business financials. They help with compliance, budgeting, and strategic financial planning but may not be able to represent you before the IRS.
1046
1047### Certified Public Accountant (CPA)
1048
1049A CPA has undergone extensive education and certification, making them the most qualified financial professional for businesses. They provide comprehensive accounting services, tax preparation, and financial strategy development. Additionally, they are licensed to represent you before the IRS, and may offer bookkeeping services in-house, making them a one-stop solution.
1050
1051---
1052
1053## Key Questions to Ask When Hiring an Accountant
1054
1055### 1. Are You a Certified Public Accountant (CPA)?
1056
1057While anyone can claim to be an accountant, a CPA has met rigorous educational and licensing requirements. A CPA can provide expert financial advice, assist with tax preparation, and even represent you before the IRS. Although bookkeepers and general accountants can handle financial records, hiring a CPA ensures access to a higher level of expertise.
1058
1059### 2. Do You Work with Small Businesses and Startups?
1060
1061The financial needs of a small business differ greatly from those of a large corporation. An accountant with experience in small businesses will understand common challenges and provide relevant solutions. Ask potential accountants how many of their clients are small businesses and whether they have experience in your industry.
1062
1063### 3. How Accessible Are You?
1064
1065Your accountant should be available when you need them, whether it's for a quick question or a detailed financial review. Consider asking:
1066
1067- How quickly do you respond to emails or phone calls?
1068- Will I be working directly with you or someone on your team?
1069- Can we schedule regular financial check-ins?
1070
1071### 4. What Are Your Fees and Billing Structure?
1072
1073Reliable accountants assess your business needs before quoting a price. Look for an accountant who offers a clear and transparent fee structure. Be cautious of accountants who provide instant quotes without understanding your business, as this can indicate hidden costs or generic, one-size-fits-all services.
1074
1075### 5. Can You Help with Bookkeeping or QuickBooks Training?
1076
1077Many businesses use accounting software like QuickBooks for financial tracking. If you manage your own books, you may need an accountant who can train you in best practices. Some accountants also offer in-house bookkeeping services, which could be a convenient option depending on your business model.
1078
1079### 6. How Do You Stay Up to Date with Tax Laws?
1080
1081Tax regulations change frequently, and staying informed is crucial. CPAs are required to earn Continuing Professional Education (CPE) credits, but a great accountant will go beyond the minimum requirements. Ask how they keep up with changes in tax law and financial best practices to ensure you receive the best advice possible.
1082
1083### 7. For Startups: What Business Structure Is Right for Me?
1084
1085Choosing between an LLC, S-Corp, or another business structure has significant tax and financial implications. A knowledgeable accountant will analyze your situation and provide recommendations based on your specific needs rather than automatically steering you toward one structure.
1086
1087---
1088
1089## Final Thoughts
1090
1091We aren't financial experts, but through our research, we learned that hiring the right accountant can make a big difference in our business's success. An accountant should be more than just a financial consultant—they should be a strategic partner invested in your business's growth. By understanding your options and asking the right questions, you can find an accountant who aligns with your needs and helps you achieve financial stability. Good luck!`,_meta:{filePath:"questions-to-ask-before-hiring-an-accountant.md",fileName:"questions-to-ask-before-hiring-an-accountant.md",directory:".",extension:"md",path:"questions-to-ask-before-hiring-an-accountant"},slug:"questions-to-ask-before-hiring-an-accountant"},{title:"Transforming Project Management at Homeowners Hub: A Journey with Engine Awesome",excerpt:"Introducing Sandi Goodman, a serial entrepreneur and the Co-Founder/CEO of Homeowners Hub. Sandi's mission is to simplify home maintenance for busy homeowners by connecting them with vetted and trusted contractors.",date:"2024-03-04",category:"Customer Success Stories",author:"Sandi Goodman",featured:!0,content:`# Transforming Project Management at Homeowners Hub: A Journey with Engine Awesome
1092
1093**Customer Success Story**
1094
1095*Sandi Goodman, Co-Founder / CEO of Homeowners Hub*
1096
1097**Key Results:**
1098- **75%** Cost savings
1099- **30%** Reduction in time spent on projects
1100
1101> Introducing Sandi Goodman, a serial entrepreneur and the Co-Founder/CEO of Homeowners Hub. Sandi's mission is to simplify home maintenance for busy homeowners by connecting them with vetted and trusted contractors.
1102
1103## Industry
1104
1105Home Maintenance and Repair Concierge Service
1106
1107## Challenge
1108
1109As we expand Homeowners Hub, we've encountered significant challenges in managing our rapidly increasing volume of projects and new employees. We used a blend of Keap CRM, Trello, and paper-based tracking for years to manage our workload. Over time it proved inadequate and cumbersome for our scaling business. We needed a more efficient, scalable solution.
1110
1111## Research
1112
1113In our search for an improved system, we discovered Engine Awesome. Intrigued by its promise of a customizable and scalable solution, we began exploring the platform and working directly with their team. It didn't take long to re
1113cognize Engine Awesome's capability to be tailored to our unique business needs. We immediately saw the benefits and started moving our operations over.
1114
1115> Using Engine Awesome is more than fun. It allows me to think out of the box. It's almost like magic.
1116
1117## Solutions
1118
11191. **Easily import existing data:** Homeowners Hub has been around for a while, and we've accumulated over 2,000 contacts in Keap. They needed to be imported seamlessly into Engine Awesome since manual entry was not an option. Engine Awesome's white-glove service imported our existing data seamlessly.
1120
11212. **Quick start and rapid expansion:** At Homeowners Hub, we manage many projects daily, so there was no room for downtime during this transition. We launched by choosing and installing one of Engine Awesome's application templates, "Simple CRM," which was a great starting point. We worked with Engine Awesome's team to modify the application to align with our operational needs. The modifications were fast and usually implemented within a few minutes.
1122
11233. **Tailored workflow for business specifics:** The adaptability of Engine Awesome was a game-changer for us. Our previous CRM was loaded with superfluous features that were complicated and slowed us down, but Engine Awesome offered us a different experience. It empowered us to construct a system that was free from unnecessary clutter. This lean approach meant we could focus exclusively on features and workflows essential to our business needs. We crafted a platform aligned with our unique business processes, enhancing our operational efficiency and responsiveness to customer needs. Engine Awesome has proven to be a pivotal asset in our business strategy.
1124
11254. **Enhanced team collaboration:** At Homeowners Hub, we are experiencing huge growth and want to make it easy to onboard new employees. We were able to create a straightforward and intuitive layout with Engine Awesome that ensures anyone can log in and immediately grasp how to manage and track projects. Training new employees is fast and easy. All our data is in one central place where anyone on the team can quickly get up to date on client projects.
1126
11275. **Growing our application:** Once we realized how quick it was to add new functionality, we started to grow our Engine Awesome application beyond the initial scope. We track so much more data than we did previously, and it's presented in a clean, efficient way. We've begun building new features, like a service library and home systems records, so we can make sure we are fully servicing our customers.
1128
1129## Results
1130
1131Implementing Engine Awesome led to huge improvements in our operating efficiency. Notably, the reduction in project management time allowed us to handle more projects simultaneously. Beyond just doing more, we're doing it better, with workflows that are smooth and adaptable to our growing needs.
1132
1133Engine Awesome has provided immediate benefits and laid a strong foundation for our long-term scalability and success. As a result, I believe Homeowners Hub is now better positioned to handle future growth, embrace new challenges, and continue delivering exceptional service to our clients.
1134
1135[Learn more about HomeOwners Hub](https://www.hubyourhome.com/).`,_meta:{filePath:"transforming-project-management-at-homeowners-hub-a-journey-with-engine-awesome.md",fileName:"transforming-project-management-at-homeowners-hub-a-journey-with-engine-awesome.md",directory:".",extension:"md",path:"transforming-project-management-at-homeowners-hub-a-journey-with-engine-awesome"},slug:"transforming-project-management-at-homeowners-hub-a-journey-with-engine-awesome"},{title:"Why Spreadsheets are Great for Running Your Business—Until They're Not",excerpt:"When you're starting out, spreadsheets are a lifesaver. They're easy to use, flexible, and probably already installed on your computer.",date:"2024-10-05",category:"Business",author:"Engine Awesome Team",featured:!1,content:`# Why Spreadsheets are Great for Running Your Business—Until They're Not
1136
1137## The Problem with Spreadsheets
1138
1139When you're starting out, spreadsheets are a lifesaver. They're easy to use, flexible, and probably already installed on your computer. At first, they help you track everything from sales to client data and project tasks, and you feel like you're on top of it all. But as your business grows, those trusty spreadsheets can start to hold you back.
1140
1141Sound familiar? If so, you're not alone. We've been there, too.
1142
1143For many small businesses, spreadsheets become critical for keeping things organized, but they can quickly become overwhelming. Managing larger data sets, sharing information with your team, and ensuring active collaboration gets harder. What was once a quick fix starts to slow you down.
1144
1145## Why Spreadsheets Seem Like the Perfect Tool—At First
1146
1147Spreadsheets are so popular because they do a lot of things well. Here's why they work great in the beginning:
1148
1149- **Easy to Customize:** You can set up your spreadsheets exactly how you like them—color code cells, create formulas, and organize your information in a way that makes sense for your business.
1150
1151- **Flexible**: Spreadsheets can handle a range of tasks. Whether you're tracking sales, inventory, or client data, you can easily adapt them to your workflow.
1152
1153- **No Training Needed:** Everyone knows how to use a spreadsheet, at least on a basic level. That means no expensive training sessions or steep learning curves.
1154
1155For many business owners, spreadsheets are the first logical step when moving away from paper records. They give you what you need to get organized and keep things moving. But as your business grows, the limitations of spreadsheets start to show up.
1156
1157## When Spreadsheets Start to Hold You Back
1158
1159If you've been running your business on spreadsheets for a while, you may have noticed some of these problems:
1160
1161- **Collaboration Issues:** Sharing spreadsheets with your team can get messy, especially if you're sending files back and forth or dealing with multiple versions.
1162
1163- **Errors and Inaccuracies:** Manual data entry increases the chances of mistakes. A simple typo or formula error can throw off your entire system.
1164
1165- **Limited Scalability:** As your data grows, your spreadsheets can become unwieldy. Managing multiple tabs and large amounts of information gets harder, and it's easy to lose track of important details.
1166
1167- **Time-Consuming:** The more your business grows, the more time you spend maintaining your spreadsheets. What once took a few minutes now takes hours.
1168
1169At this point, it's clear that spreadsheets are no longer enough to support your business. So what's the next step?
1170
1171## What to Do When You've Outgrown Spreadsheets
1172
1173When your spreadsheets start slowing you down, you have a few options for moving forward:
1174
1175### Option 1: Off-the-Shelf Software
1176
1177Many businesses look for ready-made software to replace their spreadsheets. This can be a quick fix, but it comes with its own challenges.
1178
1179- **Complexity:** These tools are often designed to meet the needs of a wide range of businesses, which means they come with a lot of features you may never use. This can make them overwhelming and difficult to navigate.
1180
1181- **Limited Customization:** Most off-the-shelf solutions don't adapt to the unique way you run your business. You'll find yourself jumping between screens, re-entering data, and working around the limitations of the software.
1182
1183- **Bloat:** As these tools continue to add features, they can become even more complex over time. You may be forced to pay for upgrades just to keep your system compatible with the latest updates.
1184
1185### Option 2: Custom Development
1186
1187Another route is to hire a developer to build custom software for your business. This sounds ideal—software designed specifically for your needs—but it comes with its own set of drawbacks.
1188
1189- **High Costs:** Custom development can be expensive, and costs can quickly add up as your needs evolve.
1190
1191- **Time Delays:** Building custom software from scratch takes time. Every change or update requires conversations, specifications, and timelines, which can slow down your business.
1192
1193- **Ongoing Maintenance:** This is the one most companies forget about. Once the software is built, you'll need to maintain it, which may require hiring a development team for support and future updates.
1194
1195## Finding A Solution That Fits Your Business
1196
1197If spreadsheets are slowing you down and off-the-shelf software or custom development doesn't seem like the right fit, we've got good news—there's another option. That's where our software, **Engine Awesome** comes in.
1198
1199Engine Awesome bridges the gap between spreadsheets and more complex software solutions. It's a managed software platform that allows you to build exactly what you need, without all the hassle.
1200
1201## Here's why Engine Awesome is the perfect next step:
1202
1203- **Customization Without the Coding:** With Engine Awesome, you don't need to be a developer to build custom software. Our platform gives you the flexibility to create tools that match your business processes, just like you did with spreadsheets, but with far more power.
1204
1205- **Real-Time Collaboration:** No more emailing spreadsheets back and forth. Engine Awesome allows your team to work together in real-time, ensuring everyone stays on the same page.
1206
1207- **Scalable and Flexible:** As your business grows, so does Engine Awesome. You can easily adjust and expand your software without worrying about performance issues.
1208
1209- **Fast Setup:** Whether you're starting from scratch or moving your existing data, getting set up with Engine Awesome is quick and easy. You can be up and running in minutes, not months.
1210
1211## How do we know Engine Awesome is right for you?
1212
1213Because we've been in your shoes. As a small business relying on spreadsheets, we faced the same challenges—manual updates, collaboration headaches, and limited scalability. Existing software solutions were either too complex or didn't fit our unique needs.
1214
1215That's why we created **Engine Awesome**. We built it to solve the problems we encountered ourselves. It combines user-friendly simplicity and flexibility with the power of custom softw
1215are, without the complexity or high costs. We know it's right for you because it was the solution we needed for our own growth.
1216
1217### Ready to Upgrade?
1218
1219If you're tired of wrestling with spreadsheets and need a solution that fits your growing business, Engine Awesome is here to help. It's the tool we wished we had when our spreadsheets started slowing us down. Now, we're sharing it with you.
1220
1221**Want to see Engine Awesome in action?**
1222
1223[Learn More](/meet/call)
1224
1225**Still not convinced?**
1226
1227[Learn how Homeowners Hub](/news/transforming-project-management-at-homeowners-hub-a-journey-with-engine-awesome) made the switch from a bloated CRM and Paper, to Engine Awesome and saw immediate improvements in efficiency and collaboration.`,_meta:{filePath:"why-spreadsheets-are-great-for-running-your-business-until-theyre-not.md",fileName:"why-spreadsheets-are-great-for-running-your-business-until-theyre-not.md",directory:".",extension:"md",path:"why-spreadsheets-are-great-for-running-your-business-until-theyre-not"},slug:"why-spreadsheets-are-great-for-running-your-business-until-theyre-not"},{title:"Zapier Integration Now in Private Beta",excerpt:"Connect Engine Awesome to over 5000 apps with our new Zapier integration. Automate your workflows and integrate with the tools you already use.",date:"2022-10-24",category:"Product Updates",author:"Engine Awesome Team",featured:!1,content:`# Zapier Integration Now in Private Beta
1228
1229We're excited to announce our new Zapier integration, allowing you to automate Engine Awesome with the tools you already use.
1230
1231## Connect to Everything
1232
1233The integration makes it easy to connect Engine Awesome to your existing systems:
1234
1235- **Invoicing systems** - Sync your billing data automatically
1236- **CRMs** - Keep customer information up to date
1237- **Help Desks** - Track support tickets seamlessly
1238- **Project Managers** - Coordinate tasks and deadlines
1239
1240## Communication Made Easy
1241
1242You can also easily send messages to Slack or email accounts, keeping your team informed about important updates in Engine Awesome.
1243
1244## Powerful Integrations
1245
1246- **Twilio** - Text clients directly from within Engine Awesome
1247- **Google Workspace** - Automate data movement between Engine Awesome and Sheets, Docs, Drive, Calendar, and Gmail
1248
1249## Multi-Step Workflows
1250
1251Engine Awesome and Zapier allow you to create multi-step workflows to automate more parts of your business. Remove tedious manual tasks and make the most of your Engine Awesome data.
1252
1253## Get Access
1254
1255The Zapier integration is currently in private beta and available to all Engine Awesome clients. Contact our support team and include the email address associated with your Zapier account to receive an invite.`,_meta:{filePath:"zapier-integration-now-in-private-beta.md",fileName:"zapier-integration-now-in-private-beta.md",directory:".",extension:"md",path:"zapier-integration-now-in-private-beta"},slug:"zapier-integration-now-in-private-beta"}],Br=[{id:4458,invite:"VQEZ2NAQNLVO",team_slug:"awt-blank-slate",title:"Blank Slate",excerpt:"Start with a completely blank workspace and build exactly what you need.",date:"2023-01-01",description:"Skip the template and start fresh. Build your app from the ground up with full control over tables, views, fields, and automations.",featured_image:"/images/templates/blank-slate.webp",featured_image_sm:"/images/templates/blank-slate-sm.webp",template_type:[],template_category:[],target_audience:"Teams and individuals who already know what they want to build and prefer to start with a blank canvas.",key_features:["Completely blank workspace — no pre-built tables or views","Add your own tables, fields, and relationships","Design views and layouts from scratch","Set up automations tailored to your exact workflow","Full flexibility with no template constraints"],gallery:[],featured:!1,content:`# Blank Slate
1256
1257Sometimes you already know what you want. Skip the templates and start building your app exactly the way you envision it.
1258
1259## Overview
1260
1261Engine Awesome gives you a powerful, flexible platform to build custom business apps. When none of our templates quite fit your needs, starting blank gives you complete control from day one — no pre-built structure to work around.
1262
1263## What You Get
1264
1265A fully blank workspace with access to all the same tools and features as any other template:
1266
1267- **Tables** — Create tables with exactly the fields and data types you need
1268- **Views** — Design list, grid, calendar, or kanban views that match your workflow
1269- **Automations** — Set up triggers and actions without any pre-existing logic to untangle
1270- **Forms** — Build intake forms from scratch for your specific use case
1271- **Permissions** — Configure access controls the way you want from the start
1272
1273## Who Is This For?
1274
1275This option works best if you:
1276
1277- Have a specific data model in mind that doesn't match existing templates
1278- Want to migrate from a spreadsheet or another tool with a custom structure
1279- Are building something unique that doesn't fit a standard category
1280- Prefer to learn the platform by building from first principles
1281
1282## Getting Started
1283
1284After signing up, you'll land in a blank workspace. Start by creating your first table and adding the fields you need. From there, build out views, forms, and automations to complete your app.`,_meta:{filePath:"blank-slate.md",fileName:"blank-slate.md",directory:".",extension:"md",path:"blank-slate"},slug:"blank-slate"},{id:2309,invite:"VQEZ2NAQNLVO",team_slug:"awt-cleaning-service",title:"Cleaning Service Application",excerpt:"A customizable business management solution designed specifically for cleaning service companies.",date:"2023-04-01",description:"All-in-one platform for cleaning service businesses to organize client information, job scheduling, team management, and payment tracking",featured_image:"/images/templates/cleaning-service-application.webp",featured_image_sm:"/images/templates/cleaning-service-application-sm.webp",template_type:["Service"],template_category:["Operations"],target_audience:"Small to large cleaning service businesses",key_features:["Track customer details and comprehensive job history","View and edit job details directly on-site","Organize and manage team members and assignments","View and filter customers with advanced search capabilities","See all jobs on one centralized dashboard","Ensure teams don't leave supplies at job locations","100% customizable with drag-and-drop interface"],gallery:["/images/templates/gallery/cleaning-service-application-1.png","/images/templates/gallery/cleaning-service-application-2.png","/images/templates/gallery/cleaning-service-application-3.png","/images/templates/gallery/cleaning-service-application-4.png","/images/templates/gallery/cleaning-service-application-5.png","/images/templates/gallery/cleaning-service-application-6.png"],featured:!1,content:`# Cleaning Service Application
1285
1286A customizable business management solution designed specifically for cleaning service companies. This all-in-one platform helps eliminate the stress of managing operations by organizing client information, job scheduling, team management, and payment tracking in one centralized location.
1287
1288## Overview
1289
1290Running a cleaning service business means juggling clients, schedules, team members, and supplies. The Cleaning Service Application brings everything together in one place, so you can focus on growing your business instead of managing spreadsheets.
1291
1292## Key Features
1293
1294- **Client Management** - Track customer details and comprehensive job history
1295- **Job Tracking** - View and edit job details directly on-site
1296- **Team Management** - Organize and manage team members and assignments
1297- **Customer Filtering** - View and filter customers with advanced search capabilities
1298- **Unified Dashboard** - See all jobs on one centralized screen
1299- **Supply Tracking** - Ensure teams don't leave supplies at job locations
1300- **100% Customizable** - Drag-and-drop interface requires no coding knowledge
1301
1302## Who Is This For?
1303
1304This template is perfect for:
1305
1306- Small to large cleaning service businesses
1307- Company owners managing multiple clients and teams
1308- Cleaning operations requiring centralized organization
1309- Businesses of any size seeking to replace spreadsheet-based systems
1310
1311## Getting Started
1312
1313Install this template and start organizing your cleaning business today. Review the demo data, customize fields to match your workflow, then invite your team members to collaborate.`,_meta:{filePath:"cleaning-service-application.md",fileName:"cleaning-service-application.md",directory:".",extension:"md",path:"cleaning-service-application"},slug:"cleaning-service-application"},{id:2065,invite:"VQEZ2NAQNLVO",team_slug:"awt-crm-simple",title:"CRM Simple Application",excerpt:"Manage contacts, leads, and interactions.",date:"2023-04-02",description:"Enables businesses to organize customer interactions, track leads, and manage relationships efficiently without complexity",featured_image:"/images/templates/crm-simple-application.webp",featured_image_sm:"/images/templates/crm-simple-application-sm.webp",template_type:["CRM"],template_category:["Sales"],target_audience:"Small businesses and solopreneurs",key_features:["Detailed contact record management with interaction history","Search and filtering capabilities for contacts and companies","Unified activity stream displaying all business interactions","Company information management and organization","Follow-up reminder system to prevent missed communications","Fully customizable structure and fields","Demo data included for learning purposes"],gallery:["/images/templates/gallery/crm-simple-application-1.png","/images/templates/gallery/crm-simple-application-2.png","/images/templates/gallery/crm-simple-application-3.png","/images/templates/gallery/crm-simple-application-4.png","/images/templates/gallery/crm-simple-application-5.png"],featured:!0,content:`# CRM Simple Application
1314
1315A straightforward Customer Relationship Management system designed for quick implementation. This template enables businesses to organize customer interactions, track leads, and manage relationships efficiently without complexity.
1316
1317## Overview
1318
1319Not every business needs a complex CRM with dozens of features they'll never use. The CRM Simple Application gives you exactly what you need to track customers and interactions, without the overwhelm.
1320
1321## Key Features
1322
1323- **Contact Management** - Detailed contact record management with interaction history
1324- **Search & Filter** - Search and filtering capabilities for contacts and companies
1325- **Activity Stream** - Unified activity stream displaying all business interactions
1326- **Company Tracking** - Company information management and organization
1327- **Follow-up Reminders** - Never miss important communications
1328- **Fully Customizable** - Modify structure and fields as needed
1329- **Demo Data** - Learn the system with included sample data
1330
1331## Who Is This For?
1332
1333This template is ideal for:
1334
1335- Small businesses and solopreneurs
1336- Teams transitioning from spreadsheet-based tracking
1337- Organizations seeking affordable, straightforward CRM functionality
1338- Businesses requiring customizable solutions that evolve with their needs
1339
1340## Getting Started
1341
1342Install this template and start managing your customer relationships immediately. The included demo data helps you understand the system before customizing it for your specific needs.`,_meta:{filePath:"crm-simple-application.md",fileName:"crm-simple-application.md",directory:".",extension:"md",path:"crm-simple-application"},slug:"crm-simple-application"},{id:2021,invite:"VQEZ2NAQNLVO",team_slug:"awt-crm-suite",title:"CRM Suite Application",excerpt:"A comprehensive Customer Relationship Management system for organizing and managing customer interactions.",date:"2023-04-03",description:"Centralized tracking of contacts, companies, tasks, deals, and activities, eliminating the need for multiple spreadsheets",featured_image:"/images/templates/crm-suite-application.webp",featured_image_sm:"/images/templates/crm-suite-application-sm.webp",template_type:["CRM"],template_category:["Sales"],target_audience:"Solopreneurs to large enterprises requiring contact management",key_features:["View and search customer details with filtering capabilities","Monitor account activity and maintain comprehensive company records","Create, assign, and track tasks with reminders","Manage sales deals with full detail views and status tracking","Complete history of all interactions and changes across the system","100% customizable fields, layout, features, and naming","Invite team members and collaborate in real-time"],gallery:["/images/templates/gallery/crm-suite-application-1.png","/images/templates/gallery/crm-suite-application-2.png","/images/templates/gallery/crm-suite-application-3.png","/images/templates/gallery/crm-suite-application-4.png","/images/templates/gallery/crm-suite-application-5.png","/images/templates/gallery/crm-suite-application-6.png","/images/templates/gallery/crm-suite-application-7.png","/images/templates/gallery/crm-suite-application-8.png","/images/templates/gallery/crm-suite-application-9.png"],featured:!1,content:`# CRM Suite Application
1343
1344A comprehensive Customer Relationship Management system designed to help businesses organize and manage customer interactions. The platform enables centralized tracking of contacts, companies, tasks, deals, and activities, eliminating the need for multiple spreadsheets.
1345
1346## Overview
1347
1348The CRM Suite Application is a full-featured CRM that grows with your business. Track every customer interaction, manage your sales pipeline, and keep your team aligned—all in one customizable platform.
1349
1350## Key Features
1351
1352- **Contact Management** - View and search customer details with filtering capabilities
1353- **Company Tracking** - Monitor account activity and maintain comprehensive company records
1354- **Task Management** - Create, assign, and track tasks with reminders
1355- **Deal Pipeline** - Manage sales deals with full detail views and status tracking
1356- **Activity Stream** - Complete history of all interactions and changes across the system
1357- **100% Customizable** - Modify fields, layout, features, and naming conventions
1358- **Multi-user Support** - Invite team members and collaborate in real-time
1359
1360## Who Is This For?
1361
1362This template serves:
1363
1364- Solopreneurs managing customer interactions
1365- Small businesses building sales pipelines
1366- Large enterprises requiring contact management across sales teams
1367- Agencies, service providers, non-profits, and sales organizations of any size
1368
1369## Getting Started
1370
1371Install this template and start building your customer database today. Customize the deal stages, contact fields, and workflows to match your sales process.`,_meta:{filePath:"crm-suite-application.md",fileName:"crm-suite-application.md",directory:".",extension:"md",path:"crm-suite-application"},slug:"crm-suite-application"},{id:2804,invite:"VQEZ2NAQNLVO",team_slug:"awt-dog-walking",title:"Dog Walking Application",excerpt:"Manage your customers, their pets, jobs, teams, and team members.",date:"2023-04-26",description:"Specialized application for dog walking service businesses to track clients, pets, schedules, and teams",featured_image:"/images/templates/dog-walking-application.webp",featured_image_sm:"/images/templates/dog-walking-application-sm.webp",template_type:["Service"],template_category:["Operations"],target_audience:"Dog walking business operators of any size",key_features:["Effortlessly manage clients, pets, jobs, teams, and team members","Record and view comprehensive client job history","Full customization options"],gallery:["/images/templates/gallery/dog-walking-application-1.png","/images/templates/gallery/dog-walking-application-2.png","/images/templates/gallery/dog-walking-application-3.png","/images/templates/gallery/dog-walking-application-4.png","/images/templates/gallery/dog-walking-application-5.png"],featured:!1,content:`# Dog Walking Application
1372
1373Specialized application for dog walking service businesses to track clients, pets, schedules, and teams.
1374
1375## Overview
1376
1377The Dog Walking Application is purpose-built for pet care professionals who need to manage multiple clients, their furry friends, and a team of walkers. Keep track of every walk, every pet's preferences, and every client interaction in one organized system.
1378
1379## Key Features
1380
1381- **Effortlessly manage clients, pets, jobs, teams, and team members** - All your business data organized and accessible
1382- **Record and view comprehensive client job history** - Track walks, notes, and special instructions for each pet
1383- **Full customization options** - Add fields for pet preferences, medical notes, emergency contacts, and more
1384
1385## Who Is This For?
1386
1387This template is perfect for:
1388
1389- Solo dog walkers looking to grow their business
1390- Dog walking companies with multiple team members
1391- Pet sitting services expanding into dog walking
1392- Anyone in the pet care industry needing better organization
1393
1394## Pet-Specific Features
1395
1396- Track individual pet profiles with photos and details
1397- Record feeding schedules and dietary restrictions
1398- Note behavioral quirks and training commands
1399- Store veterinarian and emergency contact information
1400- Log walk routes and durations
1401
1402## Getting Started
1403
1404Install this template and start managing your dog walking business today. Add your clients, create pet profiles, and schedule your first walks within minutes.`,_meta:{filePath:"dog-walking-application.md",fileName:"dog-walking-application.md",directory:".",extension:"md",path:"dog-walking-application"},slug:"dog-walking-application"},{id:2105,invite:"VQEZ2NAQNLVO",team_slug:"awt-donation-tracker",title:"Donation Tracker Application",excerpt:"A customizable donation management tool designed for non-profits and charitable organizations.",date:"2023-04-04",description:"Track donations, maintain donor histories, and strengthen donor relationships while ensuring tax compliance",featured_image:"/images/templates/donation-tracker-application.webp",featured_image_sm:"/images/templates/donation-tracker-application-sm.webp",template_type:["Non-Profit"],template_category:["Non-Profit","Operations"],target_audience:"Non-profit and charitable organizations",key_features:["Real-time donation graphing and visualization","Comprehensive donor information database with detailed history","Complete donor directory with centralized access","A
1404ctivity stream for recording all donor interactions","Donation tracking and recording system","Fully customizable fields and design","Tax documentation support"],gallery:["/images/templates/gallery/donation-tracker-application-1.png","/images/templates/gallery/donation-tracker-application-2.png","/images/templates/gallery/donation-tracker-application-3.png","/images/templates/gallery/donation-tracker-application-4.png","/images/templates/gallery/donation-tracker-application-5.png"],featured:!1,content:`# Donation Tracker Application
1405
1406A customizable donation management tool designed for non-profits and charitable organizations to track donations, maintain donor histories, and strengthen donor relationships while ensuring tax compliance.
1407
1408## Overview
1409
1410Managing donations and donor relationships is critical for non-profit success. The Donation Tracker Application provides everything you need to track contributions, maintain donor records, and generate reports for tax compliance.
1411
1412## Key Features
1413
1414- **Donation Visualization** - Real-time donation graphing and visualization
1415- **Donor Database** - Comprehensive donor information with detailed history
1416- **Donor Directory** - Complete donor directory with centralized access
1417- **Activity Stream** - Record all donor interactions and communications
1418- **Donation Tracking** - Complete donation tracking and recording system
1419- **Fully Customizable** - Adapt fields and design to your organization
1420- **Tax Support** - Documentation support for tax compliance
1421
1422## Who Is This For?
1423
1424This template is perfect for:
1425
1426- Non-profit organizations
1427- Charitable organizations
1428- Small to medium-sized organizations (scalable to larger enterprises)
1429- Teams responsible for donation management
1430- Organizations seeking to strengthen donor relationships
1431
1432## Getting Started
1433
1434Install this template and start tracking your donations today. Review the demo data, customize fields to match your organization's needs, and invite team members to collaborate on donor management.`,_meta:{filePath:"donation-tracker-application.md",fileName:"donation-tracker-application.md",directory:".",extension:"md",path:"donation-tracker-application"},slug:"donation-tracker-application"},{id:2380,invite:"VQEZ2NAQNLVO",team_slug:"awt-service-business",title:"Field Service Application",excerpt:"Manage your customers, jobs, and team members.",date:"2023-04-11",description:"Comprehensive field service management with client, job, and team organization capabilities",featured_image:"/images/templates/field-service-application.webp",featured_image_sm:"/images/templates/field-service-application-sm.webp",template_type:["Service"],template_category:["Operations"],target_audience:"Service-based field businesses of any scale",key_features:["Manage clients, jobs, teams, and team members","View comprehensive client job history","Track team tool and supply management","100% customizable interface"],gallery:["/images/templates/gallery/field-service-application-1.png","/images/templates/gallery/field-service-application-2.png","/images/templates/gallery/field-service-application-3.png","/images/templates/gallery/field-service-application-4.png","/images/templates/gallery/field-service-application-5.png","/images/templates/gallery/field-service-application-6.png","/images/templates/gallery/field-service-application-7.png"],featured:!0,content:`# Field Service Application
1435
1436Comprehensive field service management with client, job, and team organization capabilities.
1437
1438## Overview
1439
1440The Field Service Application provides a solid foundation for any service-based business with field operations. Whether you're managing technicians, installers, or service representatives, this template helps you coordinate your workforce effectively.
1441
1442## Key Features
1443
1444- **Manage clients, jobs, teams, and team members** - Complete visibility into your operations
1445- **View comprehensive client job history** - Access full service records for any customer
1446- **Track team tool and supply management** - Know where your equipment is at all times
1447- **100% customizable interface** - Build exactly what your business needs
1448
1449## Who Is This For?
1450
1451This versatile template works for:
1452
1453- HVAC service companies
1454- Appliance repair businesses
1455- Installation services
1456- Maintenance contractors
1457- Any business with mobile service teams
1458
1459## Core Capabilities
1460
1461- Customer relationship management
1462- Job scheduling and dispatch
1463- Team assignment and tracking
1464- Service history documentation
1465- Equipment and inventory tracking
1466
1467## Getting Started
1468
1469Install this template as your starting point for field service management. Customize it to match your specific industry requirements and workflow preferences.`,_meta:{filePath:"field-service-application.md",fileName:"field-service-application.md",directory:".",extension:"md",path:"field-service-application"},slug:"field-service-application"},{id:4459,invite:"VQEZ2NAQNLVO",team_slug:"awt-service-suite",title:"Field Service Suite Application",excerpt:"Manage accounts, properties, quotes, jobs, vendors, and installed systems.",date:"2026-09-09",description:"Complete field service operation covering accounts, properties, quotes, jobs, installed systems, and the vendor network that supports them",featured_image:"/images/templates/field-service-suite-application.webp",featured_image_sm:"/images/templates/field-service-suite-application-sm.webp",template_type:["Service","CRM"],template_category:["Operations"],target_audience:"Service businesses that quote, install, and maintain systems at customer properties, often working alongside vendors",key_features:["Track accounts, contacts, and prospects through the full sales cycle","Keep a record of every quote against the account it was priced for","Manage multiple properties per account and the systems installed at each one","Coordinate vendors and their staff alongside your own team","Keep complete service history for every account, property, and system","Modify fields, layouts, features, and sections to match specific needs"],gallery:[],featured:!0,content:`# Field Service Suite Application
1470
1471The most complete field service template in the library. Where the Field Service Application covers clients, jobs, and team
1471s, the Suite adds everything a growing operation needs: a full sales pipeline, multiple properties per account, equipment records, quoting, and a vendor network.
1472
1473## Overview
1474
1475Some service businesses do more than show up and do the work. They price the work first, install equipment that has to be tracked for years, and rely on vendors to deliver alongside their own crews.
1476
1477The Field Service Suite Application brings all of that into one application. Prospects become accounts, accounts hold as many properties as they own, and the work done at each one leaves behind an installed system you keep servicing long after. Quotes, jobs, and history stay attached to the account they belong to, so nothing lives in a separate spreadsheet.
1478
1479## Key Features
1480
1481- **Sales Pipeline** - Track accounts, contacts, and prospects through the full sales cycle
1482- **Quoting** - Keep a record of every quote against the account it was priced for
1483- **Property Records** - Manage multiple properties per account and the systems installed at each one
1484- **Vendor Network** - Coordinate vendors and their staff alongside your own team
1485- **Complete History** - Keep full service history for every account, property, and system
1486- **Full Customization** - Modify fields, layouts, features, and sections to match your needs
1487
1488## What's Included
1489
1490The template ships with the object types a full service operation runs on:
1491
1492- **Accounts** - The businesses and homeowners you serve
1493- **Contacts** - The people at each account
1494- **Prospects** - Potential customers still working through the pipeline
1495- **Properties** - The locations where work gets done, with as many per account as you need
1496- **Quotes** - Pricing you have put in front of a customer, kept on the account record
1497- **Jobs** - Scheduled work, assignments, and completion details
1498- **System Installations** - Equipment installed at each property, tracked over its lifetime
1499- **Vendors** - Partner companies you work with
1500- **Trade Staff** - The individual people those vendors send into the field
1501- **History** - A complete activity record across everything above
1502
1503## Who Is This For?
1504
1505This template fits businesses that sell, install, and service equipment:
1506
1507- HVAC and plumbing contractors
1508- Water treatment and filtration companies
1509- Home systems and smart home installers
1510- Solar and energy efficiency businesses
1511- Security and life safety system providers
1512- Any service company managing installed equipment across many properties
1513
1514## Field Service or Field Service Suite?
1515
1516Choose the **Field Service Application** if you schedule jobs for clients and assign them to teams. It is the leaner starting point.
1517
1518Choose the **Field Service Suite Application** if you also need to quote work before it becomes a job, track equipment installed at a property, manage multiple properties per account, or manage vendors and the staff they send into the field.
1519
1520## Getting Started
1521
1522Install this template and start with your accounts and properties. Add your vendors and their staff, then record a quote, a job, and an installed system to see how the pieces connect. Every field, layout, and section can be adjusted to match how your business already runs.`,_meta:{filePath:"field-service-suite-application.md",fileName:"field-service-suite-application.md",directory:".",extension:"md",path:"field-service-suite-application"},slug:"field-service-suite-application"},{id:4457,invite:"VQEZ2NAQNLVO",team_slug:"awt-service-team",title:"Field Service Teams Application",excerpt:"Manage your customers, jobs, teams, and team members.",date:"2025-02-27",description:"Designed to manage service-based business operations including clients, teams, jobs, and scheduling",featured_image:"/images/templates/field-service-teams-application.webp",featured_image_sm:"/images/templates/field-service-teams-application-sm.webp",template_type:["Service"],template_category:[],target_audience:"Service-based businesses of any size",key_features:["Effortlessly manage clients, jobs, teams, and team members","Record and view comprehensive client job history","Ensure your team never leaves tools or supplies at a job site","Full customization options"],gallery:["/images/templates/gallery/field-service-teams-application-1.png","/images/templates/gallery/field-service-teams-application-2.png","/images/templates/gallery/field-service-teams-application-3.png","/images/templates/gallery/field-service-teams-application-4.png","/images/templates/gallery/field-service-teams-application-5.png","/images/templates/gallery/field-service-teams-application-6.png","/images/templates/gallery/field-service-teams-application-7.png"],featured:!1,content:`# Field Service Teams Application
1523
1524Designed to manage service-based business operations including clients, teams, jobs, and scheduling.
1525
1526## Overview
1527
1528The Field Service Teams Application is a comprehensive solution for service-based businesses that need to coordinate multiple teams working in the field. Whether you're managing HVAC technicians, plumbers, electricians, or any other field service professionals, this template provides everything you need to keep your operations running smoothly.
1529
1530## Key Features
1531
1532- **Effortlessly manage clients, jobs, teams, and team members** - Keep all your business information organized in one central location
1533- **Record and view comprehensive client job history** - Never lose track of past work or customer interactions
1534- **Ensure your team never leaves tools or supplies at a job site** - Built-in checklist and inventory tracking
1535- **Full customization options** - Adapt the application to match your specific business processes
1536
1537## Who Is This For?
1538
1539This template is perfect for service-based businesses of any size, including:
1540
1541- HVAC companies
1542- Plumbing services
1543- Electrical contractors
1544- Cleaning services
1545- Landscaping businesses
1546- Any business with field teams
1547
1548## Getting Started
1549
1550Install this template and start managing your field service operations immediately. Customize fields, workflows, and layouts to match your business needs.`,_meta:{filePath:"field-service-teams-application.md",fileName:"field-service-teams-application.md",directory:".",extension:"md",path:"field-service-teams-application"},slug:"field-service-teams-application"},{id:2608,invite:"VQEZ2NAQNLVO",team_slug:"awt-gutter-clean",title:"Gutter Cleaning Application",excerpt:"Manage your customers, jobs, teams, and team members.",date:"2023-04-12",description:"Business management solution for gutter cleaning services to organize clients, jobs, and field teams",featured_image:"/images/templates/gutter-cleaning-application.webp",featured_image_sm:"/images/templates/gutter-cleaning-application-sm.webp",template_type:["Service"],template_category:["Operations"],target_audience:"Gutter cleaning service businesses",key_features:["Effortlessly manage clients, jobs, teams, and team members","Record and view comprehensive client job history","Ensure your team never leaves tools or supplies at a job site","Full customization options"],gallery:["/images/templates/gallery/gutter-cleaning-application-1.png","/images/templates/gallery/gutter-cleaning-application-2.png","/images/templates/gallery/gutter-cleaning-application-3.png","/images/templates/gallery/gutter-cleaning-application-4.png","/images/templates/gallery/gutter-cleaning-application-5.png"],featured:!1,content:`# Gutter Cleaning Application
1551
1552Business management solution for gutter cleaning services to organize clients, jobs, and field teams.
1553
1554## Overview
1555
1556The Gutter Cleaning Application is designed specifically for gutter cleaning businesses that need to manage customers, schedule jobs, and coordinate field teams. Keep your operations running smoothly with a system built for your industry.
1557
1558## Key Features
1559
1560- **Effortlessly manage clients, jobs, teams, and team members** - All your business operations in one place
1561- **Record and view comprehensive client job history** - Track service history for each property
1562- **Ensure your team never leaves tools or supplies at a job site** - Built-in equipment checklists
1563- **Full customization options** - Add seasonal scheduling, before/after photos, and more
1564
1565## Who Is This For?
1566
1567This template is perfect for:
1568
1569- Solo gutter cleaning operators
1570- Gutter cleaning companies with multiple crews
1571- Home maintenance businesses adding gutter services
1572- Seasonal cleaning businesses
1573
1574## Industry-Specific Features
1575
1576- Track property details and gutter specifications
1577- Schedule recurring maintenance visits
1578- Record before and after conditions
1579- Manage seasonal booking rushes
1580- Store property access instructions
1581
1582## Getting Started
1583
1584Install this template and start managing your gutter cleaning business today. Add your customers, schedule your jobs, and keep your crews organized.`,_meta:{filePath:"gutter-cleaning-application.md",fileName:"gutter-cleaning-application.md",directory:".",extension:"md",path:"gutter-cleaning-application"},slug:"gutter-cleaning-application"},{id:2231,invite:"9RFYT5YBG4HX",team_slug:"awt-job-hunting",title:"Job Hunting Application",excerpt:"A customizable application designed to help job seekers stay organized throughout their job search process.",date:"2023-04-05",description:"Centralized tracking for job opportunities, applications, companies, contacts, and follow-ups",featured_image:"/images/templates/job-hunting-application.webp",featured_image_sm:"/images/templates/job-hunting-application-sm.webp",template_type:["Free Forever"],template_category:["Career"],target_audience:"Job seekers and career changers",key_features:["Easily track details for each job application","Manage all job activity in one place with activity stream","Keep detailed information on prospective employers","Track detailed information on all employees you interact with","Never miss important follow-ups with built-in reminders","Fully customizable to match your needs","Absolutely FREE to use"],gallery:["/images/templates/gallery/job-hunting-application-1.png","/images/templates/gallery/job-hunting-application-2.png","/images/templates/gallery/job-hunting-application-3.png","/images/templates/gallery/job-hunting-application-4.png","/images/templates/gallery/job-hunting-application-5.png","/images/templates/gallery/job-hunting-application-6.png","/images/templates/gallery/job-hunting-application-7.png"],featured:!1,content:`# Job Hunting Application
1585
1586A customizable application designed to help job seekers stay organized throughout their job search process. It provides centralized tracking for job opportunities, applications, companies, contacts, and follow-ups.
1587
1588## Overview
1589
1590Job hunting can be overwhelming when you're managing multiple applications, interviews, and follow-ups. The Job Hunting Application keeps everything organized so you can focus on landing your next role.
1591
1592**This application is absolutely FREE!**
1593
1594## Key Features
1595
1596- **Job Tracking** - Easily track details for each job and view all applications in one organized list
1597- **Activity Management** - Manage all job activity in one place with a dedicated activity stream
1598- **Company Records** - Keep detailed information on prospective employers
1599- **Contact Database** - Track detailed information on all employees you interact with
1600- **Follow-up Reminders** - Never miss important follow-ups with built-in reminder functionality
1601- **Fully Customizable** - Rename, modify, or remove sections and fields to match your needs
1602
1603## Who Is This For?
1604
1605This template is perfect for:
1606
1607- Job seekers actively hunting for new positions
1608- Career changers managing multiple applications
1609- Anyone who needs to stay organized while interviewing
1610- Professionals managing complex job searches across multiple companies
1611
1612## Getting Started
1613
1614Install this template (it's free!) and start organizing your job search immediately. Track every application, company, and contact in one place, and never miss a follow-up again.`,_meta:{filePath:"job-hunting-application.md",fileName:"job-hunting-application.md",directory:".",extension:"md",path:"job-hunting-application"},slug:"job-hunting-application"},{id:2378,invite:"VQEZ2NAQNLVO",team_slug:"awt-gardening",title:"Lawn Care Application",excerpt:"Lawn care software designed to eliminate stress in managing gardening businesses.",date:"2023-04-06",description:"Keep your lawn care and gardening operations organized by replacing multiple spreadsheets and manual tracking systems",featured_image:"/images/templates/lawn-care-application.webp",featured_image_sm:"/images/templates/lawn-care-application-sm.webp",template_type:["Service"],template_category:["Operations"],target_audience:"Lawn care and gardening business operators of any size",key_features:["Comprehensive client record management with detailed history tracking","Job creation and management from scheduling through payment completion","Team and team member tracking and organization","Tool and supply management to prevent items left at job sites","100% customizable interface with drag-and-drop functionality","No coding knowledge required for modifications"],gallery:["/images/templates/gallery/lawn-care-application-1.png","/images/templates/gallery/lawn-care-application-2.png","/images/templates/gallery/lawn-care-application-3.png","/images/templates/gallery/lawn-care-application-4.png","/images/templates/gallery/lawn-care-application-5.png","/images/templates/gallery/lawn-care-application-6.png"],featured:!1,content:`# Lawn Care Application
1615
1616Engine Awesome's lawn care software is designed to eliminate stress in managing gardening businesses by keeping operations organized. It replaces the need for multiple spreadsheets and manual tracking systems.
1617
1618## Overview
1619
1620Running a lawn care business means managing clients, schedules, teams, equipment, and payments. The Lawn Care Application brings everything together so you can spend more time growing your business and less time on paperwork.
1621
1622## Key Features
1623
1624- **Client Management** - Comprehensive client record management with detailed history tracking
1625- **Job Management** - Job creation and management from scheduling through payment completion
1626- **Team Organization** - Team and team member tracking and organization
1627- **Equipment Tracking** - Tool and supply management to prevent items left at job sites
1628- **100% Customizable** - Drag-and-drop interface with no coding required
1629- **Flexible Workflows** - Adapt the system to match your specific processes
1630
1631## Who Is This For?
1632
1633This template is perfect for:
1634
1635- Lawn care business operators of any size
1636- Gardening and landscaping companies
1637- Small operations managing a few clients
1638- Larger companies handling hundreds of accounts
1639
1640## Getting Started
1641
1642Install this template and start organizing your lawn care business today. E
1642xplore the demo data, customize fields and sections to match your workflow, then invite team members to collaborate.`,_meta:{filePath:"lawn-care-application.md",fileName:"lawn-care-application.md",directory:".",extension:"md",path:"lawn-care-application"},slug:"lawn-care-application"},{id:4393,invite:"VQEZ2NAQNLVO",team_slug:"awt-lead-management",title:"Lead Management Application",excerpt:"Manage your leads, companies, and activities.",date:"2025-01-30",description:"Streamlines lead tracking and conversion by centralizing all potential customer interactions and details",featured_image:"/images/templates/lead-management-application.webp",featured_image_sm:"/images/templates/lead-management-application-sm.webp",template_type:["CRM"],template_category:["Marketing","Sales"],target_audience:"Small businesses, solopreneurs, and companies transitioning from spreadsheets",key_features:["Increased Efficiency – Automate lead tracking and follow-ups","Better Organization – Centralized lead information system","Higher Conversion Rates – Effective lead tracking and engagement","Improved Collaboration – Real-time team updates and assignments","Data-Driven Decision Making – Analytics and reporting insights","Customizable & Scalable – Adapts to business growth"],gallery:["/images/templates/gallery/lead-management-application-1.png","/images/templates/gallery/lead-management-application-2.png","/images/templates/gallery/lead-management-application-3.png","/images/templates/gallery/lead-management-application-4.png","/images/templates/gallery/lead-management-application-5.png"],featured:!0,content:`# Lead Management Application
1643
1644Streamlines lead tracking and conversion by centralizing all potential customer interactions and details.
1645
1646## Overview
1647
1648The Lead Management Application helps you capture, track, and convert leads more effectively. Stop letting potential customers slip through the cracks with a centralized system that keeps your entire team aligned.
1649
1650## Key Benefits
1651
1652- **Increased Efficiency** – Automate lead tracking and follow-ups so nothing falls through the cracks
1653- **Better Organization** – Centralized lead information system keeps everything in one place
1654- **Higher Conversion Rates** – Effective lead tracking and engagement helps you close more deals
1655- **Improved Collaboration** – Real-time team updates and assignments keep everyone on the same page
1656- **Data-Driven Decision Making** – Analytics and reporting insights help you optimize your process
1657- **Customizable & Scalable** – Adapts to business growth as your needs evolve
1658
1659## Who Is This For?
1660
1661This template is ideal for:
1662
1663- Small businesses looking to professionalize their sales process
1664- Solopreneurs managing their own lead pipeline
1665- Companies transitioning from spreadsheets to a proper CRM
1666- Marketing teams tracking campaign-generated leads
1667- Sales teams needing better lead visibility
1668
1669## Getting Started
1670
1671Install this template and start tracking your leads immediately. Import existing contacts, set up your pipeline stages, and customize the fields to match your sales process.`,_meta:{filePath:"lead-management-application.md",fileName:"lead-management-application.md",directory:".",extension:"md",path:"lead-management-application"},slug:"lead-management-application"},{id:2634,invite:"VQEZ2NAQNLVO",team_slug:"awt-project-mgmt",title:"Project Management Application",excerpt:"Manage your Projects, Tasks and Clients.",date:"2023-04-17",description:"Comprehensive project tracking system for managing projects, tasks, clients, and team collaboration",featured_image:"/images/templates/project-management-application.webp",featured_image_sm:"/images/templates/project-management-application-sm.webp",template_type:["Projects"],template_category:["Marketing","Non-Profit","Operations","Real Estate","Sales"],target_audience:"Project managers and teams across various industries",key_features:["Effortlessly manage projects, tasks, and clients","Record and view task history","Ensure your team is up to date on each project","Full customization options"],gallery:["/images/templates/gallery/project-management-application-1.png","/images/templates/gallery/project-management-application-2.png","/images/templates/gallery/project-management-application-3.png","/images/templates/gallery/project-management-application-4.png","/images/templates/gallery/project-management-application-5.png","/images/templates/gallery/project-management-application-6.png"],featured:!0,content:`# Project Management Application
1672
1673Comprehensive project tracking system for managing projects, tasks, clients, and team collaboration.
1674
1675## Overview
1676
1677The Project Management Application provides everything you need to keep your projects on track. From task assignment to progress tracking, this template helps teams of all sizes deliver projects successfully.
1678
1679## Key Features
1680
1681- **Effortlessly manage projects, tasks, and clients** - Organize all project information in one central hub
1682- **Record and view task history** - Never lose track of what's been done or what's pending
1683- **Ensure your team is up to date on each project** - Real-time visibility into project status
1684- **Full customization options** - Adapt workflows to match your methodology (Agile, Waterfall, or hybrid)
1685
1686## Who Is This For?
1687
1688This template works great for:
1689
1690- Marketing teams managing campaigns and deliverables
1691- Non-profit organizations coordinating programs and events
1692- Operations teams handling process improvements
1693- Real estate professionals tracking deals and transactions
1694- Sales teams managing complex sales cycles
1695- Any team that needs to coordinate work across multiple people
1696
1697## Project Tracking Features
1698
1699- Create and assign tasks with due dates
1700- Track project milestones and deadlines
1701- View project progress at a glance
1702- Manage client communications and approvals
1703- Generate status reports
1704
1705## Getting Started
1706
1707Install this template and start organizing your projects immediately. Create your first project, add tasks, assign team members, and watch your productivity improve.`,_meta:{filePath:"project-management-application.md",fileName:"project-management-application.md",directory:".",extension:"md",path:"project-management-application"},slug:"project-management-application"},{id:2311,invite:"VQEZ2NAQNLVO",team_slug:"awt-rental-prop-mgt",title:"Rental Property Management Application",excerpt:"A customizable business management tool designed to streamline rental property operations.",date:"2023-04-07",description:"Organize tenant information, track properties, manage leases, and monitor payment history in one centralized location",featured_image:"/images/templates/rental-property-management.webp",featured_image_sm:"/images/templates/rental-property-management-sm.webp",template_type:["Rentals"],template_category:["Real Estate","Operations"],target_audience:"Property owners and managers",key_features:["Maintain detailed records and history for each rental property","Record comprehensive tenant details and access complete tenant history","View and organize complete lease history documentation","Monitor all rental payments and payment records","Search and filter tenants and properties for easy access","Modify fields, layouts, features, and sections to match specific needs"],gallery:["/images/templates/gallery/rental-property-management-1.png","/images/templates/gallery/rental-property-management-2.png","/images/templates/gallery/rental-property-management-3.png","/images/templates/gallery/rental-property-management-4.png","/images/templates/gallery/rental-property-management-5.png","/images/templates/gallery/rental-property-management-6.png"],featured:!1,content:`# Rental Property Management Application
1708
1709A customizable business management tool designed to streamline rental property operations. The application helps property owners and managers organize tenant information, track properties, manage leases, and monitor payment history in one centralized location.
1710
1711## Overview
1712
1713Managing rental properties involves tracking tenants, leases, payments, and property details across potentially dozens of units. The Rental Property Management Application brings all this information together in one organized platform.
1714
1715## Key Features
1716
1717- **Property Management** - Maintain detailed records and history for each rental property
1718- **Tenant Tracking** - Record comprehensive tenant details and access complete tenant history
1719- **Lease Management** - View and organize complete lease history documentation
1720- **Payment Tracking** - Monitor all rental payments and payment records
1721- **Filterable Lists** - Search and filter tenants and properties for easy access
1722- **Full Customization** - Modify fields, layouts, features, and sections to match your needs
1723
1724## Who Is This For?
1725
1726This template is perfect for:
1727
1728- Property owners managing multiple rental properties
1729- Property managers overseeing tenant portfolios
1730- Real estate professionals seeking organizational tools
1731- Businesses of any size, from small operations to those managing hundreds of tenants
1732
1733## Getting Started
1734
1735Install this template and start organizing your rental properties today. Track tenants, leases, and payments all in one place, and invite team members to collaborate on property management.`,_meta:{filePath:"rental-property-management.md",fileName:"rental-property-management.md",directory:".",extension:"md",path:"rental-property-management"},slug:"rental-property-management"}
1735,{id:2256,invite:"VQEZ2NAQNLVO",team_slug:"awt-rental-space-mgt",title:"Rental Space Management Application",excerpt:"A comprehensive management solution designed to streamline rental property operations.",date:"2023-04-08",description:"Centralize tenant, space, and lease information in one organized platform",featured_image:"/images/templates/rental-space-management.webp",featured_image_sm:"/images/templates/rental-space-management-sm.webp",template_type:["Rentals"],template_category:["Real Estate","Operations"],target_audience:"Property owners and managers overseeing rental units",key_features:["Record and track detailed tenant information, history, and lease records","Maintain comprehensive details on each rental property or unit","View and manage complete lease history for all properties","Track incoming rent payments and financial records","Adapt fields, layout, and features to match specific requirements","Eliminate spreadsheet juggling through centralized data management"],gallery:["/images/templates/gallery/rental-space-management-1.png","/images/templates/gallery/rental-space-management-2.png","/images/templates/gallery/rental-space-management-3.png","/images/templates/gallery/rental-space-management-4.png","/images/templates/gallery/rental-space-management-5.png","/images/templates/gallery/rental-space-management-6.png"],featured:!1,content:`# Rental Space Management Application
1736
1737A comprehensive management solution designed to streamline rental property operations by centralizing tenant, space, and lease information in one organized platform.
1738
1739## Overview
1740
1741Whether you're managing commercial spaces, residential units, or mixed-use properties, the Rental Space Management Application provides the tools you need to track every aspect of your rental business.
1742
1743## Key Features
1744
1745- **Tenant Management** - Record and track detailed tenant information, history, and lease records
1746- **Space Tracking** - Maintain comprehensive details on each rental property or unit
1747- **Lease Documentation** - View and manage complete lease history for all properties
1748- **Payment Monitoring** - Track incoming rent payments and financial records
1749- **Fully Customizable** - Adapt fields, layout, and features to match specific requirements
1750- **Consolidated Organization** - Eliminate spreadsheet juggling through centralized data management
1751
1752## Who Is This For?
1753
1754This template is perfect for:
1755
1756- Property owners managing multiple rental units
1757- Property managers overseeing tenant relationships
1758- Real estate professionals requiring organizational tools
1759- Businesses of any size, from small portfolios to hundreds of rental units
1760
1761## Getting Started
1762
1763Install this template and start managing your rental spaces today. The platform emphasizes flexibility, allowing your system to evolve alongside business growth.`,_meta:{filePath:"rental-space-management.md",fileName:"rental-space-management.md",directory:".",extension:"md",path:"rental-space-management"}
1763,slug:"rental-space-management"}],Lr=[{title:"Engine Awesome for Agencies",excerpt:"Expand your service offerings and increase revenue by quickly creating custom applications for your clients.",date:"2026-05-12",headline:"Expand your service offerings, increase revenue, and deliver exceptional value to your clients",description:"Engine Awesome enables agencies to rapidly develop custom applications, allowing them to expand the range of services offered to clients, increase revenue streams, and deliver enhanced client value.",icon:"briefcase",benefits:["Expand the range of services offered to clients","Increase revenue streams with custom app development","Deliver enhanced client value","Create solutions quickly without extensive development time","No coding required for most applications","White-label solutions for your clients"],content:`## Build Custom Applications for Your Clients
1764
1765As an agency, you're always looking for ways to expand your service offerings and deliver more value to your clients. Engine Awesome gives you the power to create custom applications quickly and efficiently, without the need for extensive development resources.
1766
1767## Why Agencies Choose Engine Awesome
1768
1769### Rapid Development
1770Build functional applications in hours, not months. Our intuitive drag-and-drop interface means you can prototype, iterate, and deliver faster than ever before.
1771
1772### No Coding Required
1773Your team doesn't need to be full of developers to create powerful applications. With Engine Awesome, anyone can build professional-grade solutions.
1774
1775### Customizable Solutions
1776Every client is different, and their needs are unique. Engine Awesome lets you customize every aspect of your applications to perfectly match your clients' requirements.
1777
1778### Scalable Revenue Model
1779Add custom application development to your service menu. Create recurring revenue streams by building and maintaining applications for your clients.
1780
1781## What You Can Build
1782
1783- **Client Portals** - Give your clients a branded space to access their data, reports, and communications
1784- **Project Management Tools** - Build custom workflow solutions tailored to specific industries
1785- **CRM Systems** - Create relationship management tools customized for your clients' sales processes
1786- **Booking & Scheduling** - Develop appointment and resource scheduling applications
1787- **Inventory Management** - Build stock tracking and management solutions
1788- **Custom Dashboards** - Create data visualization tools for business intelligence
1789
1790## Get Started Today
1791
1792Ready to expand your agency's capabilities? Engine Awesome makes it easy to add custom application development to your service offerings without the overhead of a full development team.`,_meta:{filePath:"agencies.md",fileName:"agencies.md",directory:".",extension:"md",path:"agencies"},slug:"agencies"},{title:"Engine Awesome for Cleaning Services",excerpt:"Streamline your business, increase revenue, and deliver exceptional value to your customers with an application designed for your business.",date:"2026-05-12",headline:"Streamline your cleaning business operations and deliver exceptional service",description:"Engine Awesome helps cleaning service providers organize and simplify operational processes, increase business income, and deliver superior service to clients with industry-specific solutions.",icon:"sparkles",benefits:["Streamline operational processes","Increase business revenue","Deliver superior customer service","Industry-specific solutions","Manage scheduling and appointments","Track customer information and preferences"],content:`## Built for Cleaning Service Businesses
1793
1794Running a cleaning service business comes with unique challenges - managing schedules, tracking clients, handling recurring appointments, and keeping your team organized. Engine Awesome provides the tools you need to streamline every aspect of your operations.
1795
1796## Transform Your Cleaning Business
1797
1798### Scheduling Made Simple
1799Manage your team's schedules, handle recurring appointments, and avoid double-bookings with an intuitive scheduling system built for service businesses.
1800
1801### Customer Management
1802Keep track of all your clients, their properties, preferences, and service history in one centralized location. Never forget a client's special requests again.
1803
1804### Team Coordination
1805Assign jobs to team members, track their progress, and ensure everyone knows where they need to be and what they need to do.
1806
1807### Invoicing & Payments
1808Generate professional invoices, track payments, and manage your accounts receivable without switching between multiple applications.
1809
1810## Key Features for Cleaning Services
1811
1812- **Recurring Job Scheduling** - Set up repeating appointments for regular clients
1813- **Route Optimization** - Organize daily routes for maximum efficiency
1814- **Client Communication** - Send appointment reminders and follow-up messages
1815- **Supply Tracking** - Keep track of cleaning supplies and equipment
1816- **Quality Checklists** - Ensure consistent service with customizable checklists
1817- **Time Tracking** - Monitor job durations and team productivity
1818
1819## 100% Customizable
1820
1821Like everything in Engine Awesome, your cleaning service application is completely customizable. Add fields, change layouts, remove or add features - the application adapts to your unique business needs.
1822
1823## Start Growing Your Business
1824
1825Stop juggling spreadsheets and paper schedules. Engine Awesome gives you the professional tools you need to grow your cleaning service business.`,_meta:{filePath:"cleaning-services.md",fileName:"cleaning-services.md",directory:".",extension:"md",path:"cleaning-services"},slug:"cleaning-services"},{title:"Custom Dog Walking App — Manage Clients, Pets, and Walkers in One Place",excerpt:"Build your own dog walking management app — client records, pet profiles, walk scheduling, and walker coordination — customized to how your business actually runs.",date:"2026-02-21",headline:"A dog walking business app built around your clients, your pets, and your team",description:"Engine Awesome lets dog walking businesses build a custom app for managing clients, pet profiles, walk scheduling, and walker coordination — at a flat price with unlimited users.",icon:"heart",benefits:["Track every client, pet, and walk in one place","Store pet details — feeding, behavior, vet contacts — per profile","Schedule and assign walks across your team","Log walk history for every pet","Flat per-app price — add every walker, no per-seat fees","Fully customizable as your business grows"],content:`## A Dog Walking App Built Around Your Business
1826
1827Most dog walkers start with a notes app and a group chat. It works until it doesn't — when you're managing a dozen clients, multiple walkers, and pets with specific feeding schedules, behavioral notes, and vet contacts that need to be at your walkers' fingertips on every job.
1828
1829Engine Awesome lets you build a dog walking app that handles all of it — customized to how your business is structured, at a flat price that doesn't spike as you bring on more walkers.
1830
1831## Build Your Own Dog Walking Management App
1832
1833### Client & Pet Records
1834Every client gets a record with their contact details, address, and the pets in their household. Every pet gets their own profile: breed, age, feeding schedule, dietary restrictions, behavioral quirks, training commands, vet information, and emergency contacts. Your walkers have everything they need before they knock on the door.
1835
1836### Walk Scheduling
1837Build a scheduling view that shows your walkers, their assignments, and upcoming walks. Assign jobs to walkers based on location, availability, or regular client relationships. Handle one-time walks and recurring bookings without losing track of who's going where.
1838
1839### Walk Logs
1840Build a walk log form that walkers fill in after each job — duration, route, notes, potty success, anything unusual. Every log becomes a permanent record attached to the pet and the client. When a client asks how their dog is doing, you have the full history.
1841
1842### Team Management
1843Track your walkers — contact information, the clients they cover, their schedule, and any notes about specific pet relationships. Scale from solo operator to a team of walkers without rebuilding your system.
1844
1845## Key Features for Dog Walking Businesses
1846
1847- **Pet Profiles** — Feeding schedules, behavioral notes, vet info, and emergency contacts per pet
1848- **Client Records** — Household contacts, address, pets, and full service history
1849- **Walk Scheduling** — Assign and manage walks across your walker team
1850- **Walk Logs** — Record duration, route, notes, and any incidents per walk
1851- **Photo Attachments** — Walkers can attach a photo from the walk to the log
1852- **Walker Profiles** — Track your team, their clients, and their schedules
1853- **Service History** — Complete walk history searchable by client, pet, or walker
1854
1855## Purpose-Built for How Dog Walkers Actually Work
1856
1857Generic scheduling apps don't have pet profiles. Generic CRMs don't have fields for feeding schedules or training commands. Engine Awesome lets you build the exact fields your walkers need — so when a new walker takes over a client, they have everything, not just a name and an address.
1858
1859## 100% Customizable
1860
1861Running a solo dog walking operation looks completely different from managing a team of eight walkers across a city. Engine Awesome adapts to both — and lets you add the fields, views, and workflows that fit how your business runs today.
1862
1863## Flat Price, Unlimited Walkers
1864
1865Add part-time walkers, seasonal help, or a business partner without your software costs going up. Engine Awesome is priced per app, not per user.
1866
1867## Build the Dog Walking App Your Business Needs
1868
1869Stop managing client notes in your phone and walk logs in a spreadsheet. Engine Awesome gives dog walking businesses a fully customizable app for client management, pet profiles, walk scheduling, and team coordination — built around how y
1869ou actually work.`,_meta:{filePath:"dog-walking.md",fileName:"dog-walking.md",directory:".",extension:"md",path:"dog-walking"},slug:"dog-walking"},{title:"Custom Job Management Software for Electrical Contractors",excerpt:"Build your own electrical contractor management system — job records, quote tracking, crew scheduling, and job costing — without off-the-shelf software that never quite fits.",date:"2026-02-21",headline:"Job management software built for your electrical contracting business",description:"Engine Awesome lets electrical contractors build a custom system for managing job records, quote tracking, crew schedules, and job costs — fully tailored to how your business operates.",icon:"bolt",benefits:["Manage jobs from first call to completed work","Build quote records, export as PDF, track approval status","Schedule crews across multiple job sites","Monitor job costs and labor hours in real time","Flat per-app price — add your whole crew","Customizable to match your exact workflow"],content:`## Software for Electrical Contractors That Actually Fits
1870
1871Off-the-shelf electrical contractor software is built for a median business — not yours. You end up adapting your workflow to fit the software instead of the other way around. Engine Awesome lets you build a job management system that matches exactly how you run your electrical contracting operation.
1872
1873One flat price per app. Your whole crew, no per-seat fees.
1874
1875## Build Your Own Electrical Contractor Management System
1876
1877### Job Records
1878Build job forms that capture what your crews actually need to log — job type, location, scope of work, materials, labor hours, and photos. Every job becomes a permanent record you can search, filter, and reference later.
1879
1880### Quote Records
1881Build quote forms with line-item breakdowns for materials and labor. Export as a PDF and send to the customer. Track status — pending, approved, declined — as a field in the record so nothing gets lost.
1882
1883### Crew Scheduling
1884See your electricians, apprentices, and job sites in one scheduling view. Assign crews to jobs, handle changes when a job runs long, and make sure nobody shows up to a site without the right permits or materials.
1885
1886### Job Costing
1887Track labor hours, material costs, and subcontractor expenses against your estimates. Know whether a job is profitable before you close it — not weeks later when you're reviewing financials.
1888
1889### Customer & Site Records
1890Keep complete records for every customer and job site: contact information, permits pulled, previous work performed, equipment installed, and inspection records. Serve repeat customers faster and avoid re-doing work that's already documented.
1891
1892## Key Features for Electrical Contractors
1893
1894- **Job Records** — Structured forms for scope, materials, labor, and photos per job
1895- **Quote Records** — Build, export as PDF, and track approval status
1896- **Crew & Technician Scheduling** — Multi-job, multi-crew visibility in one view
1897- **Job Cost Tracking** — Log actual costs and labor hours against your estimates
1898- **Permit & Inspection Logs** — Track permit status and inspection dates per job
1899- **Material & Parts Lists** — Specify what's needed before the crew hits the road
1900- **Photo Documentation** — Before/after photos attached to job records
1901
1902## Why Custom Software for Electrical Contractors?
1903
1904Generic field service software covers the basics but rarely handles the details that matter for electrical work — permit tracking, inspection scheduling, circuit panel documentation, or the specific billing structures common in commercial electrical contracting.
1905
1906Engine Awesome lets you build exactly what you need. Add the fields your estimators require. Build the workflows your project managers actually use. Customize forms for residential service calls, commercial new construction, or industrial maintenance — or all three.
1907
1908## 100% Customizable
1909
1910Your residential service business runs differently than a commercial electrical contractor. Engine Awesome adapts to both — and everything in between. Add fields, build custom forms, set up workflows that match how your team actually works.
1911
1912## Grow Without Growing Your Software Costs
1913
1914Add apprentices, journeymen, project managers, and office staff without paying more per seat. Engine Awesome is a flat price per app — so as your electrical contracting business grows, your software costs stay predictable.
1915
1916## Start Managing Jobs the Way You Actually Work
1917
1918Stop bending your process to fit software that wasn't built for you. Engine Awesome gives electrical contractors the tools to track jobs, schedule crews, log costs, and manage customers — built around your operation from day one.`,_meta:{filePath:"electricians.md",fileName:"electricians.md",directory:".",extension:"md",path:"electricians"},slug:"electricians"},{title:"Custom Gutter Cleaning App — Jobs, Crew, and Property Records in One Place",excerpt:"Build your own gutter cleaning management app — customer records, job scheduling, crew checklists, and service history — without generic software that doesn't fit a seasonal service business.",date:"2026-02-21",headline:"Gutter cleaning business software built for seasonal jobs, crew checklists, and property records",de
1918scription:"Engine Awesome lets gutter cleaning businesses build a custom app for managing customer records, scheduling jobs, tracking crew equipment, and maintaining service history per property — at a flat price with unlimited users.",icon:"home",benefits:["Track every customer and property's service history","Schedule and assign jobs across your crew","Equipment checklists so nothing gets left at a job site","Photo documentation before and after each job","Flat per-app price — add your whole crew","Fully customizable for seasonal and year-round operations"],content:`## A Gutter Cleaning App Built Around Your Jobs
1919
1920Gutter cleaning is a deceptively operational business. You're managing seasonal surges, multiple crews, properties with specific access instructions, and the constant risk of leaving equipment at a job site. Generic scheduling tools handle some of this — but they're not built for the specific records and checklists a gutter cleaning operation actually needs.
1921
1922Engine Awesome lets you build a gutter cleaning app that fits your business — customer records, job scheduling, crew checklists, and service history — at a flat price with no per-seat fees.
1923
1924## Build Your Own Gutter Cleaning Management App
1925
1926### Customer & Property Records
1927Every customer gets a record with contact details, the properties you service for them, access instructions, gate codes, any known hazards, and their complete service history. When a crew arrives at a property, they have everything they need — no phone calls back to the office.
1928
1929### Job Scheduling
1930Build a scheduling view for your crew. See upcoming jobs, assign them to specific crews or technicians, handle weather rescheduling, and manage the seasonal surge when everyone calls at once. Track job status from booked to completed.
1931
1932### Crew Equipment Checklists
1933Build a checklist that crews complete before leaving each job site — ladders, blowers, buckets, tarps, any equipment specific to your operation. Every completed checklist becomes a record attached to the job. No more tools left at a customer's property.
1934
1935### Service History per Property
1936Every completed job logs what was done, who did it, what was found, and any notes for the next visit. Build a property service history that helps your crew do a better job on the second visit than the first.
1937
1938### Before & After Photo Documentation
1939Attach photos to every job record — gutter condition before, work in progress, cleaned result. Customers who aren't home when you visit get the documentation. Disputed jobs have a record.
1940
1941## Key Features for Gutter Cleaning Businesses
1942
1943- **Customer & Property Records** — Contact info, access instructions, and per-property service history
1944- **Job Scheduling** — Assign jobs to crews, track status, and manage rescheduling
1945- **Equipment Checklists** — Pre-departure and post-job checklists to prevent left-behind tools
1946- **Before/After Photos** — Photo documentation attached directly to each job record
1947- **Crew Assignment** — Track which crew handled each job and any job-specific notes
1948- **Seasonal Job Management** — Handle spring and fall surges without losing track of the queue
1949- **Service History Lookup** — Search any property's full service record instantly
1950
1951## Never Leave Tools at a Job Site Again
1952
1953The equipment checklist feature alone is worth the app. Build a custom checklist for your specific equipment, require crews to complete it before leaving, and keep a record of every completed check. It's a simple form — but it solves a problem that costs real money.
1954
1955## 100% Customizable
1956
1957A solo gutter cleaner with 50 residential clients runs differently from a company with multiple crews handling residential and commercial accounts. Engine Awesome adapts to both. Add the fields that matter for your operation — gutter type, downspout count, roof pitch, whatever your crews actually need to know.
1958
1959## Flat Price, Unlimited Crew Members
1960
1961Add seasonal crew members during fall cleanup without your software costs spiking. Engine Awesome is priced per app, not per user.
1962
1963## Build the Gutter Cleaning App Your Business Needs
1964
1965Stop managing customer notes in your phone and job assignments in a group chat. Engine Awesome gives gutter cleaning businesses a customizable app for customer records, job scheduling, crew checklists, and service history — built to fit how your operation actually runs.`,_meta:{filePath:"gutter-cleaning.md",fileName:"gutter-cleaning.md",directory:".",extension:"md",path:"gutter-cleaning"},slug:"gutter-cleaning"},{title:"Custom HVAC Management App — Without the ServiceTitan Price Tag",excerpt:"Build your own HVAC management system for scheduling, dispatch, job history, and customer records — at a flat price that works for small businesses.",date:"2026-02-21",headline:"HVAC software built around your business, not the other way around",description:"Engine Awesome lets HVAC contractors build a custom management system — scheduling, dispatch, job history, and customer records — without paying ServiceTitan prices or changing how you work.",icon:"wrench",benefits:["Schedule and dispatch technicians without double-bookings","Track job history and equipment for every customer","Build quote records and export them as PDFs to send customers","Flat per-app price — unlimited technicians","No per-seat fees as your crew grows","Fully customizable to match your workflow"],content:`## HVAC Software Without the ServiceTitan Price Tag
1966
1967ServiceTitan is powerful — and priced for enterprise. For most HVAC small businesses, you're paying for features you'll never use and seats you can't afford to add. Engine Awesome gives you a different path: build exactly the HVAC management system your business needs, at a flat price per app.
1968
1969No per-seat fees. No forced upsells. No adapting your workflow to fit someone else's software.
1970
1971## Build Your Own HVAC Management System
1972
1973### Scheduling & Dispatch
1974Build a scheduling board that shows your technicians, their availability, and open jobs at a glance. Assign jobs, handle emergency calls, and avoid double-bookings — without fighting a system designed for a company ten times your size.
1975
1976### Job History & Equipment Tracking
1977Every customer gets a complete record: equipment installed, service history, warranty information, and technician notes. When a unit breaks down at 11pm and a tech is on-site the next morning, they have everything they need.
1978
1979### Quote Records
1980Build a quote form that captures job scope, parts, and labor. When it's ready, export it as a PDF and email it to the customer. Track the status — pending, approved, declined — right in the same record so nothing falls through the cracks.
1981
1982### Job Records
1983Build job forms that capture what your technicians actually need to log — job type, parts used, labor time, notes, and photos. Every job becomes a permanent record tied to the customer and the equipment.
1984
1985### Customer & Site Records
1986Track customer contact information, multiple service locations, preferred technicians, and billing details in one place. Serve return customers like you know them — because you do.
1987
1988## Key Features for HVAC Contractors
1989
1990- **Technician Dispatch Board** — Scheduling view with job assignment across your crew
1991- **Equipment Logs** — Model numbers, install dates, service records, and warranty info per unit
1992- **Quote Records** — Capture scope and pricing, export as PDF, email to customer
1993- **Job Forms** — Structured records for parts, labor, notes, and photos per job
1994- **Preventive Maintenance Tracking** — Flag customers due for seasonal tune-ups
1995- **Photo Attachments** — Technicians document their work from the field
1996- **Quote Status Tracking** — Mark quotes pending, approved, or declined
1997
1998## Why Not ServiceTitan?
1999
2000ServiceTitan is built for HVAC companies with dozens of technicians, complex multi-location operations, and enterprise IT budgets. If that's not you, you're paying for complexity you don't need — and wrestling with a system that wasn't designed for how a smaller operation actually works.
2001
2002Engine Awesome is a flat per-app price. Add every technician in your crew, every office staffer, every manager — no additional cost. As you grow, your costs don't spike.
2003
2004## 100% Customizable
2005
2006No two HVAC businesses run exactly the same way. Engine Awesome lets you add custom fields, build the forms your technicians actually use, and set up workflows that match how your dispatch and service process really works — not a generic template.
2007
2008## Stop Overpaying for Software That Doesn't Fit
2009
2010Build an HVAC management system that works the way your business works. Engine Awesome gives you the tools to schedule jobs, track customers, log equipment, and manage your crew — without enterprise software pricing.`,_meta:{filePath:"hvac.md",fileName:"hvac.md",directory:".",extension:"md",path:"hvac"},slug:"hvac"},{title:"Custom CRM for Landscaping Companies — Build Your Own Landscaping Software",excerpt:"Build a custom CRM for your landscaping business — seasonal recurring jobs, crew routing, quote templates, chemical tracking, and customer management — without paying for features you don't use.",date:"2026-02-21",headline:"Landscaping business software that handles the complexity of outdoor work",description:"Engine Awesome lets landscaping companies build a fully custom CRM — managing seasonal schedules, recurring jobs, crew routing, chemical logs, and quote templates — at a flat price with unlimited users.",icon:"leaf",benefits:["Manage seasonal and recurring jobs without spreadsheets","Route crews efficiently across multiple properties","Track chemical applications and compliance records","Build quote templates for your most common services","Flat per-app price — add your entire crew","Customizable for lawn care, landscaping design, and maintenance"],content:`## A Custom CRM Built for Landscaping Companies
2011
2012Landscaping businesses have complexity that generic CRMs ignore: seasonal schedules, recurring weekly or biweekly jobs, chemical application logs, crew routing across dozens of properties, and quote templates that change with the season. Engine Awesome lets you build a CRM that handles all of it — customized to exactly how your landscaping business operates.
2013
2014One flat price per app. Your whole operation — crew leads, estimators, office staff — all included.
2015
2016## Build Your Own Landscaping Management System
2017
2018### Seasonal & Recurring Job Scheduling
2019Build a scheduling system that handles your recurring lawn maintenance clients, seasonal cleanups, and one-time landscape projects in one view. Set up repeating jobs for weekly mowing, monthly fertilization, or annual spring/fall cleanups — and adjust them by season without starting from scratch.
2020
2021### Crew Routing & Assignment
2022Organize daily crew routes across your service area for maximum efficiency. Assign crews to jobs based on location, equipment, or specialization. See who's where and what they're working on throughout the day.
2023
2024### Quote Records
2025Build quote record templates for your most common services — lawn maintenance packages, mulch installation, seasonal plantings, irrigation work. Fill one out quickly, export as a PDF, send to the customer, and track status — pending, accepted, or declined — in the record.
2026
2027### Chemical Application Tracking
2028Log every chemical application: product name, application rate, target pest or weed, technician, date, and property. Build a compliance record that's organized and searchable — by customer, by product, or by date range.
2029
2030### Customer & Property Records
2031Track every client's property details — square footage, lawn type, irrigation system, plant beds, special instructions, and service history. Build a record that makes every crew member look like they know the property before they arrive.
2032
2033## Key Features for Landscaping Businesses
2034
2035- **Recurring Job Management** — Weekly, biweekly, monthly, and seasonal schedule templates
2036- **Crew Routing** — Organize daily routes by geography and crew assignment
2037- **Quote Record Templates** — Pre-built quote forms for common landscaping services, export as PDF
2038- **Chemical & Fertilizer Logs** — Compliant application records by property and product
2039- **Seasonal Scheduling** — Handle spring/fall transitions without rebuilding your schedule
2040- **Property Notes & Maps** — Document gate codes, irrigation zones, and special instructions
2041- **Photo Documentation** — Before/after photos for landscape installs and maintenance
2042- **Job Notes & Completion Logs** — Record what was done on each visit, per property
2043
2044## Why Off-the-Shelf Landscaping Software Falls Short
2045
2046Generic landscaping software often handles basic scheduling but struggles with the operational details that matter for a growing company: tracking chemical applications across hundreds of properties, managing seasonal transitions, or building crew routes that actually minimize drive time. You end up building workarounds in spreadsheets for the things the software can't do.
2047
2048Engine Awesome is fully customizable — add the fields that matter for your specific services, build workflows for your irrigation division and your maintenance crews separately, or track the equipment each crew needs on each property.
2049
2050## 100% Customizable
2051
2052A lawn care company with 200 recurring residential clients runs very differently from a commercial landscape contractor managing large-property maintenance contracts. Engine Awesome adapts to both — and lets you build separate workflows for different service lines if needed.
2053
2054## Grow Without Paying Per Seat
2055
2056Add seasonal crew members during spring rush without your software costs spiking. Engine Awesome is a flat price per app — bring on as many crew leads, estimators, and office staff as you need.
2057
2058## Build the Landscaping Software Your Operation Actually Needs
2059
2060Stop patching together spreadsheets, calendar apps, and generic CRM tools. Engine Awesome gives landscaping companies a fully customizable system for scheduling, routing, quote records, chemical tracking, and customer management — built around how your business actually works.`,_meta:{filePath:"landscaping.md",fileName:"landscaping.md",directory:".",extension:"md",path:"landscaping"},slug:"landscaping"},{title:"Engine Awesome for Acquired Businesses",excerpt:"Optimize and scale your newly acquired business with custom tools designed to streamline operations without traditional development costs.",date:"2026-05-12",headline:"Optimize & Scale Your New Business with Engine Awesome",description:"You've acquired a business—now make it more efficient, profitable, and easy to run. Engine Awesome offers custom tools tailored to your operational needs without the expense of traditional custom development.",icon:"rocket",benefits:["Streamline operations and replace disconnected systems","Automate repetitive work to focus on growth","Centralize customer, project, and business data","Access real-time metrics for data-driven decisions","Build tools quickly without traditional development costs","Dedicated support for your success"],content:`## You've Acquired a Business—Now Let's Make It Better
2061
2062Acquiring a business is just the beginning. The real work starts when you need to optimize operations, improve efficiency, and scale for growth. Engine Awesome helps you transform your new acquisition into a well-oiled machine.
2063
2064## Why Acquired Businesses Choose Engine Awesome
2065
2066### Replace Disconnected Systems
2067Many acquired businesses run on a patchwork of spreadsheets, legacy software, and manual processes. Engine Awesome lets you build unified solutions that bring everything together.
2068
2069### No Traditional Development Costs
2070Custom software development is expensive and time-consuming. Engine Awesome gives you the power to build exactly what you need without the six-figure price tag.
2071
2072### Adapt to Your Operations
2073Rather than forcing your business into rigid, pre-built software, Engine Awesome molds to your specific operational needs and workflows.
2074
2075### Expert Support
2076Our team is dedicated to your success. White-glove service is available to help ensure your business transformation goes smoothly.
2077
2078## Key Benefits for Business Acquirers
2079
2080### Streamline Operations
2081Replace spreadsheets and disconnected systems with unified solutions that your entire team can access and use.
2082
2083### Improve Efficiency
2084Automate repetitive tasks and manual processes so your team can focus on growth and delivering value to customers.
2085
2086### Organize Your Data
2087Centralize customer information, project details, and business data in one accessible location. No more hunting through multiple systems.
2088
2089### Data-Driven Insights
2090Access real-time metrics and reporting to make informed decisions about optimizing your operations and driving growth.
2091
2092### Cost Savings
2093Build the tools you need quickly and affordably. Traditional custom development can cost tens of thousands of dollars—Engine Awesome gives you the same capabilities at a fraction of the cost.
2094
2095## What You Can Build
2096
2097- **Operational Dashboards** - Get a real-time view of business performance
2098- **Customer Management** - Centralize all customer data and interactions
2099- **Process Automation** - Eliminate manual, repetitive tasks
2100- **Inventory & Asset Tracking** - Know what you have and where it is
2101- **Employee Management** - Streamline HR and team coordination
2102- **Financial Tracking** - Monitor revenue, expenses, and profitability
2103
2104## Start Your Transformation
2105
2106Ready to make your acquisition more efficient and profitable? Schedule a free consultation to discu
2106ss how Engine Awesome can support your business goals.`,_meta:{filePath:"new-business-acquisitions.md",fileName:"new-business-acquisitions.md",directory:".",extension:"md",path:"new-business-acquisitions"},slug:"new-business-acquisitions"},{title:"Engine Awesome for Non-Profits",excerpt:"Streamline your operations, amplify your mission, and engage more donors with customizable software designed specifically for non-profits.",date:"2026-05-12",headline:"Streamline operations, amplify your mission, and engage more donors",description:"Engine Awesome helps non-profit organizations streamline administrative processes, focus on their core charitable work, and better connect with and manage donor relationships.",icon:"heart",benefits:["Streamline administrative processes","Focus on your core charitable mission","Better connect with donors","Manage donor relationships effectively","Customizable to your organization's needs","Affordable solutions for limited budgets"],content:`## Empowering Non-Profits to Do More Good
2107
2108Non-profit organizations face unique challenges - limited budgets, volunteer coordination, donor management, and the constant need to demonstrate impact. Engine Awesome provides the tools you need to operate more efficiently so you can focus on what matters most: your mission.
2109
2110## How Engine Awesome Helps Non-Profits
2111
2112### Operational Efficiency
2113Streamline your administrative processes and workflows. Spend less time on paperwork and more time making a difference in your community.
2114
2115### Mission Amplification
2116When your operations run smoothly, you can focus on what you do best - serving your community and advancing your cause.
2117
2118### Donor Engagement
2119Build stronger relationships with your donors. Track interactions, manage campaigns, and demonstrate the impact of their contributions.
2120
2121### Volunteer Management
2122Coordinate your volunteer workforce effectively. Schedule shifts, track hours, and communicate with your volunteer community.
2123
2124## Features Built for Non-Profits
2125
2126- **Donor Database** - Centralize all donor information and giving history
2127- **Campaign Management** - Plan and track fundraising campaigns
2128- **Event Planning** - Organize fundraisers, volunteer events, and community programs
2129- **Grant Tracking** - Manage grant applications, deadlines, and reporting requirements
2130- **Volunteer Scheduling** - Coordinate volunteer availability and assignments
2131- **Impact Reporting** - Generate reports that showcase your organization's impact
2132
2133## Customized for Your Cause
2134
2135Every non-profit is different. Whether you're focused on education, healthcare, environment, social services, or any other cause, Engine Awesome can be tailored to support your specific programs and workflows.
2136
2137## Affordable Solutions
2138
2139We understand that non-profits operate with limited resources. Engine Awesome provides powerful tools at a price point that makes sense for organizations focused on doing good rather than generating profit.
2140
2141## Amplify Your Impact
2142
2143Ready to modernize your operations and engage more donors? Engine Awesome gives you the tools to run your non-profit more effectively while staying focused on your mission.`,_meta:{filePath:"non-profits.md",fileName:"non-profits.md",directory:".",extension:"md",path:"non-profits"},slug:"non-profits"},{title:"Custom Pest Control Software — Routes, Service History, Chemical Logs, and Billing",excerpt:"Build your own pest control management system — recurring routes, service history, chemical application logs, and billing records — fully customized to how your pest control business operates.",date:"2026-02-21",headline:"Pest control software built for recurring routes, compliance records, and growing service businesses",description:"Engine Awesome lets pest control companies build a custom management system for managing recurring service routes, tracking chemical applications, maintaining service histories, and tracking billing status — at a flat price with unlimited users.",icon:"shield",benefits:["Manage recurring service routes without scheduling conflicts","Track chemical applications for c
2143ompliance and customer records","Maintain complete service histories for every account","Build billing records, export as PDF, and track payment status","Flat per-app price — add your whole team","Customizable for residential, commercial, and specialty pest control"],content:`## Pest Control Software That Handles Your Route Business
2144
2145Pest control is a recurring-service business built on routes, compliance, and customer retention. Generic field service software handles scheduling but rarely handles the details that matter for pest control: chemical application logs by product and target pest, route organization across technicians, and the complete service history that keeps commercial accounts renewing year after year.
2146
2147Engine Awesome lets you build a pest control management system that's fully customized to your operation — one flat price per app, unlimited users.
2148
2149## Build Your Own Pest Control Management System
2150
2151### Recurring Route Management
2152Build and manage recurring service routes for your technicians. Assign accounts to routes, handle frequency variations (monthly, quarterly, bi-annual), and schedule one-time treatments without disrupting regular routes. See who's covering what and when across your entire service area.
2153
2154### Chemical Application Logs
2155Record every chemical application: product name, EPA registration number, application rate, target pest, treatment area, technician, and date. Build a compliance record that's organized by customer, by technician, or by product — and searchable when you need it.
2156
2157### Service History by Account
2158Every customer account gets a complete service history: every visit, every treatment, every chemical applied, every technician note, and every pest finding. When a commercial account asks for documentation, you have it. When a residential customer calls about a recurring problem, your technician sees the full history before they arrive.
2159
2160### Billing Records
2161Build a billing record from a completed service visit, export it as a PDF, and send it to the customer. Track payment status — sent, paid, overdue — per account so you always know where things stand without digging through email.
2162
2163### Customer & Account Records
2164Maintain complete records for every account: contact information, service address, access instructions, treatment history, pest findings, and account notes. Serve commercial accounts with the documentation they require and residential customers with the personal service they expect.
2165
2166## Key Features for Pest Control Businesses
2167
2168- **Route Scheduling** — Recurring routes by technician with frequency and geography controls
2169- **Chemical Log Tracking** — Full application records with EPA numbers and compliance fields
2170- **Service History** — Complete treatment history per account, searchable and exportable
2171- **Technician Dispatch** — Assign and manage service calls across your team
2172- **Commercial Account Management** — Documentation and reporting for commercial clients
2173- **Billing Records** — Build, export as PDF, and track payment status per account
2174- **Pest Finding Records** — Log pest activity observed on each visit
2175- **Photo Documentation** — Attach photos of problem areas or findings to service records
2176
2177## Compliance Without the Paperwork Burden
2178
2179Chemical application records are a regulatory requirement — but they're also a liability and a sales tool. Organized, complete chemical logs protect your business if there's ever a compliance question. They also let you show commercial accounts exactly what's been applied and when, which builds trust and supports contract renewals.
2180
2181Engine Awesome lets you build application logs that capture what your state requires and what your customers expect — in a format that's easy for technicians to fill in from the field.
2182
2183## Why Not Generic Field Service Software?
2184
2185Generic field service tools handle scheduling and invoicing but aren't designed for the specific records pest control requires — chemical logs with EPA numbers, pest finding documentation, or the recurring-route structure that defines how a route-based pest control business operates. You end up maintaining compliance records separately, which means double entry and missed documentation.
2186
2187Engine Awesome lets you build the whole system in one place — routes, chemical logs, service history, and billing records — customized to your operation.
2188
2189## 100% Customizable
2190
2191A residential pest control company with 300 recurring accounts runs differently than a commercial pest management firm serving restaurants and food service facilities. Engine Awesome handles both — and lets you build different workflows, forms, and record types for each service line.
2192
2193## Grow Without Paying Per Seat
2194
2195Add technicians during busy season without your software bill spiking. Engine Awesome is priced per app, not per user — so your costs stay predictable as your route count and team grow.
2196
2197## Build the Pest Control Software Your Business Needs
2198
2199Stop managing routes in spreadsheets and chemical logs in paper binders. Engine Awesome gives pest control companies a fully customizable system for route management, chemical compliance, service history, and billing — built around how your operation actually runs.`,_meta:{filePath:"pest-control.md",fileName:"pest-control.md",directory:".",extension:"md",path:"pest-control"},slug:"pest-control"},{title:"Custom CRM for Plumbing Businesses — Build Your Own Plumbing Software",excerpt:"Build a custom CRM and job management system for your plumbing business — scheduling, dispatch, service history, and quote records — without expensive off-the-shelf software.",date:"2026-02-21",headline:"Plumbing business software built around how you actually work",description:"Engine Awesome lets plumbing contractors build a custom CRM and job management system — scheduling, service history, quote records, and dispatch — at a flat price that works for small and growing plumbing businesses.",icon:"droplets",benefits:["Track every customer's service history and plumbing records","Schedule and dispatch plumbers without double-bookings","Build quote records, export as PDF, and track approval status","Manage emergency calls alongside regular appointments","Flat per-app price — unlimited plumbers and office staff","Fully customizable to your business processes"],content:`## A CRM for Plumbers That Works Like Your Business Does
2200
2201Most plumbing software is built for large operations or tries to serve every trade at once. The result is software that's either too expensive, too complex, or missing the specific features that matter for plumbing work. Engine Awesome takes a different approach: build the exact CRM and job management system your plumbing business needs.
2202
2203Flat price per app. Add your whole team — plumbers, apprentices, dispatchers, office staff — no extra cost.
2204
2205## Build Your Own Plumbing Business Software
2206
2207### Customer Records & Service History
2208Every customer gets a complete record: contact information, service address, plumbing history, notes about fixtures and pipe layouts, and past jobs. When a return customer calls with a problem, your dispatcher sees everything relevant before they even book the job.
2209
2210### Scheduling & Dispatch
2211Manage routine appointments and emergency calls in one place. See technician availability, assign jobs, handle same-day changes, and make sure the right plumber gets to the right job with what they need.
2212
2213### Quote Records
2214Build itemized quote records from the field or the office. Export as a PDF and email to the customer. Track approval status — pending, accepted, declined — directly in the record.
2215
2216### Job Records
2217Build job forms for every call — scope of work, parts used, labor hours, technician notes, and photos. Every completed job becomes a permanent record tied to the customer.
2218
2219### Billing Records
2220Build a billing record from a completed job, export it as a PDF, and send it to the customer. Track payment status — sent, paid, overdue — as a field so you always know where each account stands.
2221
2222## Key Features for Plumbing Contractors
2223
2224- **Customer & Property Records** — Complete service history, fixture notes, and contact info
2225- **Scheduling & Dispatch Board** — Manage technicians and jobs across the day and week
2226- **Emergency Call Management** — Handle urgent jobs alongside regular appointments
2227- **Quote Records** — Build, export as PDF, and track approval status
2228- **Job Records** — Capture scope, parts, labor, and photos per job
2229- **Billing Records** — Build, export as PDF, and track payment status
2230- **Service History Lookup** — Find any past job, quote, or customer record instantly
2231
2232## Why Not Generic Plumbing Software?
2233
2234Off-the-shelf plumbing software makes assumptions about your business that may not be true — how you price jobs, how you dispatch, how you handle commercial vs. residential accounts, or how your service agreements work. You end up working around the software instead of using it.
2235
2236Engine Awesome lets you build exactly what fits your plumbing operation. Add custom fields for the information your plumbers actually need on a call. Build forms for permit tracking, water heater installs, drain inspections, or whatever your specific services require.
2237
2238## 100% Customizable
2239
2240Residential emergency plumbing runs differently than commercial plumbing maintenance contracts. Engine Awesome handles both — and lets you build separate workflows for each if you need them. Add fields, customize forms, set up the approval chains that match how you actually run jobs.
2241
2242## Grow Without Growing Your Software Bill
2243
2244Hire another plumber? Add them to your app at no extra cost. Engine Awesome is priced per app, not per seat — so your software costs stay stable even as your crew expands.
2245
2246## Build the Plumbing Software Your Business Actually Needs
2247
2248Stop working around software that wasn't built for you. Engine Awesome gives plumbing businesses the tools to track customers, schedule jobs, log job records, and manage dispatch — built to fit your operation from day one.`,_meta:{filePath:"plumbers.md",fileName:"plumbers.md",directory:".",extension:"md",path:"plumbers"},slug:"plumbers"},{title:"Engine Awesome for Property Management",excerpt:"Manage tenants, owners, maintenance, and leases in one place — built the way you work.",date:"2026-05-12",headline:"Manage tenants, owners, maintenance, and leases in one place — built the way you work.",description:"Custom property management tools — tenant tracking, maintenance requests, lease management. Unlimited users, no per-seat pricing.",icon:"briefcase",benefits:["Track tenants, leases, and rent collection in one system","Let tenants submit maintenance requests online","Give property owners their own login to see reports","Manage vendors and work orders","Your whole team gets access — no per-seat costs","Automated rent reminders and lease renewal notifications"],content:`## Custom Property Management Software
2249
2250Engine Awesome lets you build a property management system around your actual portfolio and workflow — not a generic template designed for someone else's business.
2251
2252## What You Can Build
2253
2254- Tenant and lease database with custom fields
2255- Maintenance request portal for tenants
2256- Owner portal with reporting access
2257- Vendor and work order management
2258- Automated rent reminders and lease renewal alerts
2259- Vacancy and rent collection dashboards
2260
2261## Why Property Managers Choose Engine Awesome
2262
2263Your whole team — every property manager, maintenance tech, and admin — gets access for one flat price. No per-seat costs, ever.
2264
2265Start with the [Rental Property Management template](/templates/rental-property-management-application/) and customize it for your portfolio.`,_meta:{filePath:"property-management.md",fileName:"property-management.md",directory:".",extension:"md",path:"property-management"},slug:"property-management"},{title:"Custom Roofing Contractor Software — Inspection Tracking, Claims, and Crew Management",excerpt:"Build your own roofing contractor management system — inspection records, insurance claim documentation, crew scheduling, and job site tracking — customized to how your roofing business operates.",date:"2026-02-21",headline:"Roofing contractor software built for inspections, insurance claims, and multi-site crew management",description:"Engine Awesome lets roofing contractors build a custom management system for tracking inspections, organizing insurance claim documentation, managing crews across job sites, and handling the full job lifecycle — at a flat price that works for small and mid-size roofing companies.",icon:"home",benefits:["Track inspections and document findings with photos","Organize insurance claim paperwork and adjuster communications","Manage crews across multiple active job sites","Track materials, deliveries, and job costs per project","Flat per-app price — unlimited crew members and office staff","Fully customizable for residential and commercial roofing"],content:`## Roofing Contractor Software Built Around Your Jobs
2266
2267Roofing is project-driven, insurance-heavy, and multi-site by nature. Generic contractor software handles some of that — but rarely handles inspection documentation, insurance claim workflows, and multi-crew site management together. Engine Awesome lets you build a roofing contractor management system that covers the full job lifecycle, customized to how your business works.
2268
2269Flat price per app. Add your project managers, crews, estimators, and office staff without per-seat fees.
2270
2271## Build Your Own Roofing Management System
2272
2273### Inspection Tracking & Documentation
2274Create detailed inspection records for every roof: damage type, affected areas, measurements, photo documentation, and inspector notes. Build a record that's ready for insurance adjusters, homeowners, and your own estimating team — all in one place.
2275
2276### Insurance Claim Management
2277Track insurance claims from initial inspection through adjuster review, approval, and final payment. Organize claim numbers, adjuster contacts, scope of loss documents, and correspondence by job — so nothing gets lost across email threads and file folders.
2278
2279### Crew Management Across Job Sites
2280See all your active job sites and crew assignments in one view. Schedule tear-off crews, installation crews, and inspectors across multiple simultaneous projects. Handle weather delays and rescheduling without losing track of where everyone needs to be.
2281
2282### Job Costing & Materials Tracking
2283Track material deliveries, dumpster pickups, subcontractor costs, and labor hours per job. Compare actual costs to your estimate while the job is still open — not weeks later.
2284
2285### Customer & Project Records
2286Maintain complete records for every project: homeowner contact info, property address, HOA requirements, permit status, material selections, warranty documentation, and final photos. Build the paper trail you need for warranty claims and referrals.
2287
2288## Key Features for Roofing Contractors
2289
2290- **Inspection Reports** — Structured documentation with photo attachments and measurement fields
2291- **Insurance Claim Tracking** — Claim status, adjuster info, and document organization by job
2292- **Multi-Site Crew Scheduling** — Manage crew assignments across active job sites simultaneously
2293- **Material & Delivery Tracking** — Log material orders, delivery dates, and quantities per job
2294- **Permit & HOA Records** — Track permit applications, approvals, and HOA requirements
2295- **Job Cost Tracking** — Actual vs. estimated costs with line-item breakdown
2296- **Warranty Documentation** — Manufacturer and workmanship warranty records per project
2297- **Photo Libraries** — Organized before/during/after photos attached to each job
2298
2299## Handling the Insurance Claim Workflow
2300
2301Storm damage roofing businesses live and die by the insurance claim process. Most contractor software treats this as an afterthought. Engine Awesome lets you build a workflow that matches how y
2301our claims process actually works — from initial storm inspection to adjuster meeting to supplement requests to final payment. Track every communication, document, and status change in one place.
2302
2303## Why Not Generic Contractor Software?
2304
2305General field service software isn't built for the roofing-specific complexity of insurance work, multi-day projects across different crews, or the documentation requirements that come with manufacturer warranties and adjuster approvals. You end up managing the important stuff in spreadsheets and email anyway.
2306
2307Engine Awesome lets you build the exact system your roofing operation needs — whether you focus on residential storm work, commercial flat roofing, or both.
2308
2309## 100% Customizable
2310
2311A residential insurance restoration company needs different workflows than a commercial roofing contractor. Engine Awesome handles both — and lets you build separate processes for your retail and insurance divisions if you need them. Add the fields your estimators use, the checklists your foremen follow, the approval steps your project managers require.
2312
2313## Grow Without Growing Your Software Costs
2314
2315Add crew leads, project managers, and office staff as your roofing business grows — without paying more per seat. Engine Awesome is priced per app, not per user.
2316
2317## Build the Roofing Software Your Business Needs
2318
2319Stop managing inspections in spreadsheets and insurance claims in email. Engine Awesome gives roofing contractors a customizable system for tracking inspections, managing claims, scheduling crews, and closing jobs — built to fit your operation.`,_meta:{filePath:"roofing.md",fileName:"roofing.md",directory:".",extension:"md",path:"roofing"},slug:"roofing"},{title:"Operations Software for Service Companies — Jobs, Leads & Crew Management",excerpt:"Engine Awesome gives service companies a configurable operations platform — start from a template, customize it to your workflow, and add your whole team for one flat price. No per-seat fees.",date:"2026-03-10",headline:"Run your service business without the chaos",description:"Engine Awesome gives service companies a configurable operations platform — track leads, manage jobs, schedule crews, and see every customer in one place. Every office staffer and field tech included for one flat price.",icon:"settings",benefits:["Track every lead from first call to completed job","Schedule crews and assign jobs from one dashboard","Every customer record includes full job and service history","Field techs update job status from their phone — no calls needed","Manage recurring jobs without losing track of who is due next","Every office staffer and field tech included — no per-seat fees"],content:`## One System for Your Whole Service Operation
2320
2321Most service businesses run on a whiteboard, a spreadsheet, and a group text. Leads come in through one channel, jobs get scheduled through another, and field updates happen over the phone. Engine Awesome replaces all of it with a single configurable platform built around how your business actually runs.
2322
2323No per-seat fees. No rigid templates. No adapting your workflow to someone else's software.
2324
2325## What You Can Build
2326
2327### Customer & Lead Tracking
2328Every prospect and customer in one place — contact details, property address, service history, notes from past jobs, and any open estimates or upcoming work. When a customer calls back six months later, you know exactly what you did for them and when.
2329
2330### Job Management & Work Orders
2331Create jobs, attach them to customers, assign a crew, set a date, and track status from scheduled to in-progress to completed — all in one record. Office staff and field techs stay in sync without phone calls.
2332
2333### Crew Scheduling
2334See who is assigned to what, on which day. Spot scheduling conflicts before they happen and balance workloads across your teams. No more double-bookings or missed assignments.
2335
2336### Estimates & Pipeline
2337Track every estimate from sent to approved to lost — so you know your close rate and which leads are worth following up on. The full estimate history stays attached to the customer record.
2338
2339### Intake Forms
2340Embed a form on your website to capture new service requests. Inquiries flow straight into your system and appear in your lead queue automatically — no manual data entry.
2341
2342### Operations Dashboards
2343Jobs completed this week, open leads, upcoming scheduled work, and crew utilization — all visible at a glance so nothing slips through the cracks.
2344
2345## How It Works
2346
2347**Lead comes in** — A new inquiry arrives via your website form or a phone call. A lead record is created with name, address, service needed, and how they found you.
2348
2349**Estimate sent and tracked** — You log the estimate against the lead record. When they approve it, the status updates and the job is ready to schedule — full history stays on the customer record.
2350
2351**Job scheduled and crew assigned** — You pick a date, assign the right crew or te
2351ch, and the job appears on their list. No phone calls to dispatch — they see it when they log in.
2352
2353**Tech updates from the field** — The tech marks the job in-progress when they arrive and completed when they're done — from their phone. Notes, photos, or any issues get logged on the spot.
2354
2355**You see everything** — Your dashboard shows completed jobs, open leads, upcoming scheduled work, and any jobs that need follow-up across your entire operation.
2356
2357## Why Generic Service Software Falls Short
2358
2359Generic field service tools are built for the average service business, not yours. You end up bending your workflow to fit their system, paying for features your team will never touch, and building spreadsheet workarounds for the gaps their software cannot fill.
2360
2361Per-seat pricing penalizes growth. Hiring a seasonal tech or a new dispatcher should not increase your software bill. With Engine Awesome, your price does not change when your team grows.
2362
2363A two-person operation with recurring residential clients runs differently from a multi-crew commercial service business. Your software should reflect how your specific operation works — not force you into a one-size-fits-all template.
2364
2365## Works for Any Service Business
2366
2367Lawn care, cleaning services, HVAC, plumbing, pest control, gutter cleaning, pool service, landscaping, and any other business that runs jobs, manages crews, and needs to track customers and work history.
2368
2369## Your Whole Team. One Flat Price.
2370
2371Every dispatcher, office admin, and field technician gets access for one flat price. No calculating whether it is worth adding your newest tech to the system. As your team grows, your software cost stays the same.`,_meta:{filePath:"service-companies.md",fileName:"service-companies.md",directory:".",extension:"md",path:"service-companies"},slug:"service-companies"}],Gy=[{title:"Engine Awesome Account Ownership",description:"Everything you need to know about Engine Awesome account ownership.",lastUpdated:"2024-01-15",icon:"user-check",order:1,content:`# Who owns a Engine Awesome account?
2372
2373Engine Awesome accounts are owned by individuals, not by organizations. When you sign up and create an account at Engine Awesome, you are the owner of that account and all the data in it. Our legal responsibility is to the account owner(s), so we won't let other people take over your account without your permission.
2374
2375## What can account owners do?
2376
2377Account owners can:
2378
2379- **Manage all aspects of the account's subscription:** including updating billing information; adding more users and account administrators; creating new teams; and cancelling an account.
2380- **Designate other account administrators**: Engine Awesome accounts can have [multiple owners](https://learn.engineawesome.com/settings/team/). We recommend designating other owners you trust, so that updates can be made to the account when you're not available.
2381
2382## What happens when none of the current account owners are available?
2383
2384It happens — people switch jobs, get laid off, go on extended leave — the account owner(s) may be unavailable for any number of reasons. Still, our obligation is to the current account owner(s). That means we're unable to add new owners to the account without permission from a current account owner, communicated from the email address we have on file.
2385
2386If the account has been frozen due to non-payment for less than a week, we'll be glad to thaw the account for a week or so, so people can access their work in the meantime.
2387
2388The quickest route to add a new owner is often to contact a current account owner, and ask them to log in and add another owner right away from the Adminland section.
2389
2390Otherwise, we can also gladly reach out to any current account owners at the email addresses we have on file, and request permission to add an owner. If it's a company address and another employee has access to the inbox, the person who receives the email can grant permission to add a new owner. For security's sake, permission must come from an address we have on file for a current account owner.
2391
2392When none of the above is an option, a court order is required to add another owner to the account. We will of course readily comply with any court orders to turn data over to the appropriate party.
2393
2394## What if I have another question about ownership?
2395
2396Engine Awesome may update this policy once in a blue moon — we'll notify you about significant changes by emailing the account owner or by placing a prominent notice on our site. You can access, change or delete your personal information at any time by contacting Engine Awesome [support](https://engineawesome.com/support/).
2397
2398Questions about this account ownership policy? Please get in touch with our [support team](https://engineawesome.com/support/) and we'll be happy to answer them!`,_meta:{filePath:"account-ownership.md",fileName:"account-ownership.md",directory:".",extension:"md",path:"account-ownership"},slug:"account-ownership"},{title:"Cancellation policy",description:"Everything you need to know about canceling your 37signals product accounts.",lastUpdated:"2022-08-30",icon:"x-circle",order:2,content:`# Cancellation policy
2399
2400*Last updated: August 30, 2022*
2401
2402We want satisfied customers, not hostages. That's why we make it easy for you to cancel your account directly in all of our apps — no phone calls required, no questions asked.
2403
2404Team owners can follow these instructions to cancel in-app:
2405* Under your team settings, scroll to the bottom of the page and press the "Delete" button. A modal will pop-up asking you to confirm.
2406
2407Our legal responsibility is to team owners, which means we cannot cancel a team at the request of anyone else. If for whatever reason you no longer know who the team owner is, [contact us](https://engineawesome.com/support/). We will gladly reach out to any current team owners at the email addresses we have on file.
2408
2409## What happens when you delete a team?
2410
2411You won't be able to access your team once you delete it, so make sure you download everything you want to keep beforehand.
2412
2413We'll permanently delete the content in your team from our servers 30 days after cancellation, and from our backups within 60 days. Retrieving content for a single team from a backup isn't possible, so if you change your mind you'll need to do it within the first 30 days after cancellation. **Content can't be recovered once it has been permanently deleted.**
2414
2415We won't bill you again once you cancel. We don't automatically prorate any unused time you may have left but if you haven't used your account in months or just started a new billing cycle, [contact us](https://engineawesome.com/support/) for a [fair refund](https://engineawesome.com/about/policies/refunds/). We'll treat you right.
2416
2417## Engine Awesome-initiated cancellations
2418
2419We may cancel accounts if they have been inactive for an extended period:
2420* For trial accounts: 30 days after a trial has expired without being upgraded
2421* For frozen accounts: 180 days after being frozen due to billing failures
2422* For free accounts: after 365 days of inactivity
2423
2424We also retain the right to suspend or terminate accounts for any reason at any time, as outlined in our [Terms of Service](https://engineawesome.com/about/policies/terms-and-conditions/). In practice, this generally means we will cancel your account without notice if we have evidence that you are using our products to engage in [abusive behavior](https://engineawesome.com/about/policies/abuse/).`,_meta:{filePath:"c
2424ancellations.md",fileName:"cancellations.md",directory:".",extension:"md",path:"cancellations"},slug:"cancellations"},{title:"Company Processors",description:"Engine Awesome LLC uses some other third-party processors for company purposes outside of delivering our services.",lastUpdated:"2024-01-15",icon:"building",order:12,content:`# Company processors
2425
2426We as a company use third-party software that may process your information under certain circumstances.
2427
2428For the following processors, we have established GDPR-compliant data processing agreements, extending [GDPR safeguards](https://engineawesome.com/about/policies/privacy-policy/) everywhere personal data is processed. These processors are all located in the United States:
2429
2430* [Email Octopus](https://emailoctopus.com/legal/gdpr) Email newsletter service.
2431* [Paypal](https://www.paypal.com/us/webapps/mpp/gdpr-readiness-requirements) Payment transfer service.
2432* [Cloudflare](https://www.cloudflare.com/gdpr/introduction/) Content delivery network and DDoS mitigation.
2433* [Mixpanel](https://mixpanel.com) Event analytics service.
2434
2435As a company, we host a blog, and run occasional events virtually. If you voluntarily engage with us through those media, your personal information may also be collected by the following processors, also all located in the US:
2436
2437* [Twitter](https://gdpr.twitter.com/) Social media platform.
2438* [Zoom](https://explore.zoom.us/en/trust/legal-compliance/) Video meetings and webinars.`,_meta:{filePath:"company-processors.md",fileName:"company-processors.md",directory:".",extension:"md",path:"company-processors"},slug:"company-processors"},{title:"Copy that?",description:"How Engine Awesome handles copyright infringement claims.",lastUpdated:"2022-08-30",icon:"file-text",order:3,content:`# Copyright Infringement Claims
2439
2440Last updated: August 30, 2022
2441
2442## Notification of Copyright Infringement Claims
2443
2444Making original work is hard! As described in our [Use Restrictions policy](https://engineawesome.com/about/policies/abuse/), you can't use Engine Awesome products* to make or disseminate work that uses the intellectual property of others beyond the bounds of [fair use](https://www.copyright.gov/fair-use/more-info.html).
2445
2446Are you a copyright owner? Under the Digital Millennium Copyright Act (17 U.S.C. § 512), you have the right to notify us (Engine Awesome, LLC) if you believe that an account user of any product we built and maintain has infringed on your work(s) as copyright owner. To be effective, the notification of claimed infringement must be written. Please include the following information:
2447
2448- A physical or electronic signature of a person authorized to act on behalf of the owner of an exclusive right that is allegedly infringed.
2449- Identification of the copyrighted work(s) claimed to have been infringed. If there are multiple, please share a representative list of those works.
2450- A way for us to locate the material you believe is infringing the copyrighted work.
2451- Your name and contact information so that we can get back to you. Email address is preferred but a telephone number or mailing address works too.
2452- A statement that you, in good faith, believe that use of the material in the manner complained of is not authorized by the copyright owner, its agent, or the law.
2453- A statement that the information in the notification is accurate, and under penalty of perjury, that you are authorized to act on behalf of the owner of an exclusive right that is allegedly infringed.
2454
2455## Digital Millennium Copyright Act ("DCMA") Counter-notifications
2456
2457On the flip-side, if you believe your material has been removed in error, you can file a written counter-notification. Please include the following information:
2458
2459- A physical or electronic signature, or the signature of the person authorized to act on your behalf.
2460- A description of the material that was removed.
2461- A description of where the material appeared in Engine Awesome products prior to their removal.
2462- Your name and contact information so that we can get back to you. Email address is preferred but a telephone number or mailing address works too.
2463- A statement under penalty of perjury that you have a good faith belief that the material was removed or disabled as a result of mistake or misidentification.
2464- A statement that you consent to the jurisdiction of the Federal District Court for the judicial district in which your address is located, or if your address is outside of the United States, in New York City (where Engine Awesome is located).
2465- A statement that you will accept service of process from the person who filed the original DMCA notice or an agent of that person. (In other words, you've designated that person to receive documents on your behalf.)
2466
2467## Where to Send Notices
2468
2469You can notify us of either copyright infringement claims or DCMA counter-notifications through either of the following channels:
2470
2471**By email**: [[email protected]](mailto:[email protected])
2472
2473**By mail**: Engine Awesome, LLC
2474421 8th Avenue #859
2475New York NY 10116
2476ATTN: Steve Bruner
2477
2478**This policy and process applies to any product created and owned by Engine Awesome, LLC.*`,_meta:{filePath:"copyright-infringement-claims.md",fileName:"copyright-infringement-claims.md",directory:".",extension:"md",path:"copyright-infringement-claims"},slug:"copyright-infringement-claims"},{title:"Data Subject Access Request",description:"How to exercise your data privacy rights under GDPR, CCPA, and other regulations.",lastUpdated:"2022-10-13",icon:"file-search",order:5,content:`## Overview
2479
2480You have rights over your personal data. This page explains how to exercise those rights under various privacy regulations including GDPR, CCPA, and others.
2481
2482## Your Rights
2483
2484Depending on your location, you may have the right to:
2485
2486- **Access** - Request a copy of the personal information we hold about you
2487- **Deletion** - Request that we delete your personal data
2488- **Correction** - Request that we correct inaccurate data
2489- **Portability** - Request your data in a machine-readable format
2490- **Opt-out** - Opt out of certain data processing activities
2491- **Non-discrimination** - Exercise your rights without discrimination
2492
2493## How to Submit a Request
2494
2495To exercise your data rights, contact us with the following information:
2496
2497### Required Information
2498
24991. **Your full name** (first and last)
25002. **Email address** used to access Engine Awesome
25013. **Legal framework** for your request:
2502   - GDPR (European Union / EEA)
2503   - CCPA (California, USA)
2504   - Other applicable regulation
25054. **Your request** - Specific details about what action you're requesting
2506
2507### Request Types
2508
2509You can request one of the following:
2510
2511- Access to collected personal information
2512- Deletion of your data
2513- Opt out from third-party data sales
2514- Opt in to personal data sales
2515- Other requests (please describe)
2516
2517## Important Notices
2518
2519Before submitting a request, please understand:
2520
25211. **Accuracy** - You must certify that the information you provide is accurate to the best of your knowledge
25222. **Irreversibility** - Data deletion is permanent and may result in termination of services
25233. **Verification** - We may need to verify your identity before processing your request
2524
2525## Processing Time
2526
2527- We aim to respond to all requests within **30 days**
2528- Complex requests may take up to **45 days** with notice
2529- We may contact you for additional information if needed
2530
2531## Contact
2532
2533**Email**: [[email protected]](mailto:[email protected])
2534
2535**Mail**:
2536Engine Awesome LLC
2537Attn: Data Protection
2538421 8th Avenue #859
2539New York, NY 10116 USA
2540
2541## Related Policies
2542
2543- [Privacy Policy](/about/policies/privacy-policy) - Our complete privacy policy
2544- [Terms and Conditions](/about/policies/terms-and-conditions) - Our terms of service`,_meta:{filePath:"data-subject-access-request.md",fileName:"data-subject-access-request.md",directory:".",extension:"md",path:"data-subject-access-request"},slug:"data-subject-access-request"},{title:"How we handle abusive usage",description:"Guiding principles and process for investigating abuse reports",lastUpdated:"2022-08-27",icon:"shield-alert",order:15,content:`# How we handle abusive usage
2545
2546*Last updated: August 27, 2022*
2547
2548We build our products* to give teams a better way to work. We are proud of that purpose and trust that our customers use our products for appropriate endeavors.
2549
2550Sometimes, though, we discover potential abusive usage as detailed in our [Use Restrictions policy](https://engineawesome.com/about/policies/abuse). When that happens, we investigate using the following guiding principles and process.
2551
2552## Guiding Principles
2553
2554### Human oversight
2555
2556Who's "we", you ask? It's us: folks from the Engine Awesome team. Our internal abuse oversight committee includes our executives, Steve and Timothy. On rare occasions for particularly sensitive situations or if legally required, we may also seek counsel from external experts.
2557
2558### Balanced responsibilities
2559
2560We have an obligation to protect the privacy and safety of both our customers and the people reporting issues to us. We do our best to balance those responsibilities throughout the process.
2561
2562### Focus on evidence
2563
2564We base our decisions on the evidence available to us: what we see and hear account users say and do. We document what we observe and ask whether that observable evidence points to a restricted use.
2565
2566## Process
2567
2568Every case goes through the same general process:
2569
25701. Discovery
25712. Investigation
25723. Decision, sometimes with right to an appeal
2573
2574### How do we discover potential abuse?
2575
2576From our experience, we learn about potential abuse because:
2577
2578- Someone alerts us. We give [abuse reports](https://engineawesome.com/about/policies/abuse) our full care and attention. Our Support team also responds to every question or comment that comes in. If we notice anything in those emails that points to a violation, we will look into it.
2579- We notice an anomaly in our business operations monitoring. We monitor a range of things about our products, like signup volume and error rates of web requests. If we see something weird with those numbers, we get to the bottom of it.
2580- We stumble upon public web content that links an individual or organization to an Engine Awesome product. We aren't scouring the Internet looking for those links, but if we do come across any, we check them out.
2581
2582This list is not exhaustive; there are always edge cases. We will update the list if we find regular new avenues.
2583
2584### How do we investigate?
2585
2586We focus on the evidence:
2587
2588- Language and imagery used by users on the account
2589- Evidence of account users' power and/or ability to act on spoken claims
2590- Publicly available information about account users
2591
2592We strive to balance privacy and safety for all those involved:
2593
2594- We make every effort to complete our investigations without accessing a customer account. For instance, if there are screenshots or public documents available, we review those. We also consider whether it is appropriate to involve the account owner in a given investigation and seek additional evidence from them.
2595- As we review the evidence, we look for indications of existing negative impact. We also assess the severity of any potential negative impact, regardless of intent. When relevant, we look for and follow available guidelines from expert institutions.
2596- If we cannot come to a fair assessment from the information available, we may decide to access a customer account without notice. We do not make this decision lightly. Customer privacy is a big deal to us and we only pursue this course of action if the evidence we have already is very concerning, but not definitive.
2597
2598While some violations are flatly obvious, others are subjective, nuanced, and difficult to adjudicate. We give each case adequate time and attention, commensurate with the violation, criticality, and severity of the charge.
2599
2600### What happens if someone really broke the rules?
2601
2602We will terminate an account without advance notice if there is evidence it is being used for a restricted purpose that has, is, or will cause severe harm. If applicable, we will also report the incident to the appropriate authorities.
2603
2604For other cases, we'll take a case-by-case approach to clear things up.
2605
2606Further, as a small, privately owned independent business that puts our values and conscience ahead of growth at all costs, we reserve the right to deny service to anyone we ultimately feel uncomfortable doing business with.
2607
2608### Can you appeal a decision?
2609
2610If we terminate an account without notice, the decision is final.
2611
2612For other cases, we will consider good faith appeals sent to [[email protected]](mailto:[email protected]) by the account owner within 14 calendar days.
2613
2614**This process applies to any product created and owned by Engine Awesome, LLC.**`,_meta:{filePath:"how-we-handle-abusive-usage.md",fileName:"how-we-handle-abusive-usage.md",directory:".",extension:"md",path:"how-we-handle-abusive-usage"},slug:"how-we-handle-abusive-usage"},{title:"How to manage the Engine Awesome account of someone who is incapacitated or has died",description:"Instructions for managing an Engine Awesome account when the owner is incapacitated or has passed away.",lastUpdated:"2022-08-27",icon:"heart-handshake",order:4,content:`# How to manage the Engine Awesome account of someone who is incapacitated or has died
2615
2616Last updated: August 27, 2022
2617
2618First, we are so sorry. Managing administrative aspects is often the last thing you may want to do under these circumstances. We've tried to set up a process that makes managing your loved one's Engine Awesome account as smooth as possible while also honoring the privacy and security obligations we have to our customers.
2619
2620**If you just want to stop the account from being billed and do not need access to any data,** the fastest way to do this is by canceling the associated credit card directly via the credit card company.
2621
2622**If you have the login credentials of the account,** you can manage billing, through the Team Settings page. You can access the Team Settings page via the team menu in the upper right of the Engine Awesome dashboard. To delete your account refer to our [cancellation policy](https://engineawesome.com/about/policies/cancellations/)
2623
2624**If you do not have login credentials but do have legal authority to manage someone's affairs,** we will still try to help. However, please know in advance that we cannot provide login credentials. The following process may take anywhere from 4-7 days as we go through verification steps. To get started, please please in a [support ticket](https://engineawesome.com/support/) with:
2625
2626* Legal documents proving your designated role in managing this person's affairs. Acceptable documents include: a copy of a fully-executed Power of Attorney; or a copy of an official Death Certificate *and* one of the following: a) a copy of a will or trust document naming you as executor or beneficiary; b) a marriage certificate if you are a surviving spouse; c) a birth certificate if you are their parent or proof of guardianship for legal guardians.
2627* The email address registered by your loved one when they log into Engine Awesome.
2628* A few pieces of information to help with the verification process:
2629
2630  - If the name on the legal documents do not match the name we have on record for the account owner, we'll need some sort of proof that the document is for the same individual
2631  - A photograph showing the following things in the same picture: 1. a photo selfie showing your face; 2. a picture of your Government Issued ID (Passport, Drivers License, etc...) next to your face.
2632  - The region and postal code likely used for the person's billing address
2633  - The last four numbers of the credit card likely used to pay for the person's account
2634
2635If we are able to successfully verify the information you have shared, we will email the account in question with a notification and option to dispute the request.
2636
2637After 72 hours, if we do not receive a dispute response, we'll be able to help with the following:
2638
2639* Deleting the team, which will lead to deleting the account data. Please refer to our [Cancellation policy](https://engineawesome.com/about/policies/cancellations/) for more information.
2640* Providing an export of the account contents.
2641
2642We delete all information shared with us for verification purposes immediately after we finish the verification process.
2643
2644## Still have a question?
2645
2646Please get in touch with our [support team](https://engineawesome.com/support/).`,_meta:{filePath:"incapacitated.md",fileName:"incapacitated.md",directory:".",extension:"md",path:"incapacitated"},slug:"incapacitated"},{title:"Privacy policy",description:"The privacy of your data — and it is your data, not ours! — is a big deal to us. Here's the rundown of what we collect and why, when we access your information, and 
2646your rights.",lastUpdated:"2023-12-23",icon:"shield",order:6,content:`# Privacy policy
2647
2648*Last updated: December 23, 2023*
2649
2650The privacy of your data—and it is your data, not ours!—is a big deal to us. In this policy, we lay out: what data we collect and why; how your data is handled; and your rights with respect to your data. We promise we never sell your data: never have, never will.
2651
2652This policy applies to all products built and maintained by Engine Awesome LLC.
2653
2654## What we collect and why
2655
2656Our guiding principle is to collect only what we need. Here's what that means in practice:
2657
2658### Identity & access
2659
2660When you sign up for a Engine Awesome product, we ask for identifying information such as your name, email address, and maybe a company name. That's so you can personalize your new account, and we can send you product updates and other essential information. We may also send you optional surveys from time to time to help us understand how you use our products and to make improvements. With your consent, we will send you our newsletter and other updates. We sometimes also give you the option to add a profile picture that displays in our products.
2661
2662We'll never sell your personal information to third parties, and we won't use your name or company in marketing statements without your permission either.
2663
2664### Billing information
2665
2666If you sign up for a paid Engine Awesome product, you will be asked to provide your payment information and billing address. Credit card information is submitted directly to our payment processor and doesn't hit Engine Awesome servers. We store a record of the payment transaction, including the last 4 digits of the credit card number, for purposes of account history, invoicing, and billing support. We store your billing address so we can charge you for service, calculate any sales tax due, send you invoices, and detect fraudulent credit card transactions. We occasionally use aggregate billing information to guide our marketing efforts.
2667
2668### Product interactions
2669
2670We store on our servers the content that you upload or receive or maintain in your Engine Awesome product accounts. This is so you can use our products as intended, for example, to create contacts. We keep this content as long as your account is active. If you delete your account, we'll delete the content within 60 days.
2671
2672### Geolocation data
2673
2674For most of our products, we log the full IP address used to sign up a product account and retain that for use in mitigating future spammy signups. We also log all account access by full IP address for security and fraud prevention purposes, and we keep this login data for as long as your product account is active.
2675
2676### Website interactions
2677
2678We collect information about your browsing activity for analytics and statistical purposes such as conversion rate testing and experimenting with new product designs. This includes, for example, your browser and operating system versions, your IP address, which web pages you visited and how long they took to load, and which website referred you to us. If you have an account and are signed in, these web analytics data are tied to your IP address and user account until your account is no longer active. The web analytics we use are described further in the Advertising and Cookies section.
2679
2680### Google API Services Usage Disclosure
2681
2682Engine Awesome's use and transfer to any other app of information received from Google APIs will adhere to [Google API Services User Data Policy](https://developers.google.com/terms/api-services-user-data-policy#additional_requirements_for_specific_api_scopes), including the Limited Use requirements.
2683
2684### Anti-bot assessments
2685
2686We use third-party [CAPTCHA](https://en.wikipedia.org/wiki/CAPTCHA) services across our applications to mitigate brute force logins. We have a legitimate interest in protecting our apps and the broader Internet community from credential stuffing attacks and spam. When you log into your Engine Awesome accounts, the CAPTCHA service evaluates various information (e.g., IP address, how long the visitor has been on the app, mouse movements) to try to detect if the activity is from an automated program instead of a human. We retain these data via our subprocessor indefinitely for use in spam mitigation.
2687
2688### Advertising and Cookies
2689
2690Engine Awesome may run contextual ads on various third-party platforms such as Google, Reddit, LinkedIn and others. Users who click on one of our ads will be sent to the Engine Awesome marketing site. Where permissible under law, we may load an ad-company script on their browsers that sets a third-party cookie and sends information to the ad network to enable evaluation of the effectiveness of our ads, e.g., which ad they clicked and which keyword triggered the ad, and whether they performed certain actions such as clicking a button or submitting a form.
2691
2692We also use persistent first-party cookies and some third-party cookies to store certain preferences, make it easier for you to use our applications, and perform A/B testing as well as supp
2692ort some analytics.
2693
2694A cookie is a piece of text stored by your browser. It may help remember login information and site preferences. It might also collect information such as your browser type, operating system, web pages visited, duration of visit, content viewed, and other click-stream data. You can adjust cookie retention settings and accept or block individual cookies in your browser settings, although our apps won't work and other aspects of our service may not function properly if you turn cookies off.
2695
2696### Voluntary correspondence
2697
2698When you contact Engine Awesome with a question or to ask for help, we keep that correspondence, including your email address, so that we have a history of past correspondence to reference if you reach out in the future.
2699
2700We also store information you may volunteer, for example, written responses to surveys. If you agree to a customer interview, we may ask for your permission to record the conversation for future reference or use. We will only do so with your express consent.
2701
2702### How we approach mobile app permissions
2703
2704We may offer optional desktop and mobile apps for some of our products. Because of how the platforms are designed, apps will typically request your consent before accessing contacts, calendar, camera, and other privacy-sensitive features of your device. Consent is always optional and our apps will function without it, though some features may be unavailable.
2705
2706## When we access or share your information
2707
2708**To provide products or services you've requested**.TODO We use some [third-party subprocessors](https://engineawesome.com/about/policies/privacy-policy/subprocessors/) to help run our applications and provide the Services to you. We also use third-party processors for other business functions such as managing newsletter subscriptions, sending customer surveys, and providing our company storefront. You can view the list at [Company processors](https://engineawesome.com/about/policies/privacy-policy/company-processors/).
2709
2710We may share your information at your direction if you integrate a third-party service into your use of our products.
2711
2712No Engine Awesome human looks at your content except for limited purposes with your express permission, for example, if an error occurs that stops an automated process from working and requires manual intervention to fix. These are rare cases, and when they happen, we look for root cause solutions as much as possible to avoid them recurring. We may also access your data if required in order to respond to legal process (see "When required under applicable law" below).
2713
2714**To exclude you from seeing our ads.** Where permissible by law and if you have an Engine Awesome account, we may share a one-way hash of your email address with ad companies to exclude you from seeing our ads.
2715
2716**To help you troubleshoot or squash a software bug, with your permission.** If at any point we need to access your content to help you with a support case, we will ask for your consent before proceeding.
2717
2718**To investigate, prevent, or take action regarding [restricted uses](https://engineawesome.com/about/policies/abuse/).** Accessing a customer's account when investigating potential abuse is a measure of last resort. We want to protect the privacy and safety of both our customers and the people reporting issues to us, and we do our best to balance those responsibilities throughout the process. If we discover you are using our products for a restricted purpose, we will take action as necessary, including notifying appropriate authorities where warranted.
2719
2720**When required under applicable law.**
2721
2722Engine Awesome LLC. is a U.S. company and all data infrastructure are located in the U.S.
2723
2724* Requests for user data. Our policy is to not respond to government requests for user data unless we are compelled by legal process or in limited circumstances in the event of an emergency request. However, if U.S. law enforcement authorities have the necessary warrant, criminal subpoena, or court order requiring us to share data, we must comply. Likewise, we will only respond to requests from government authorities outside the U.S. if compelled by the U.S. government through procedures outlined in a mutual legal assistance treaty or agreement. It is Engine Awesomes' policy to notify affected users before we share data unless we are legally prohibited from doing so, and except in some emergency cases.
2725* Preservation requests. Similarly, Engine Awesomes' policy is to comply with requests to preserve data only if c
2725ompelled by the U.S. Federal Stored Communications Act, 18 U.S.C. Section 2703(f), or by a properly served U.S. subpoena for civil matters. We do not share preserved data unless required by law or compelled by a court order that we choose not to appeal. Furthermore, unless we receive a proper warrant, court order, or subpoena before the required preservation period expires, we will destroy any preserved copies of customer data at the end of the preservation period.
2726* If we are audited by a tax authority, we may be required to share billing-related information. If that happens, we will share only the minimum needed, such as billing addresses and tax exemption information.
2727
2728Finally, if Engine Awesome LLC. is acquired by or merges with another company — we don't plan on that, but if it happens — we'll notify you well before any of your personal information is transferred or becomes subject to a different privacy policy.
2729
2730## Your rights with respect to your information
2731
2732At Engine Awesome, we strive to apply the same data rights to all customers, regardless of their location. Some of these rights include:
2733
2734* **Right to Know.** You have the right to know what personal information is collected, used, shared or sold. We outline both the categories and specific bits of data we collect, as well as how they are used, in this privacy policy.
2735* **Right of Access.** This includes your right to access the personal information we gather about you, and your right to obtain information about the sharing, storage, security and processing of that information.
2736* **Right to Correction.** You have the right to request correction of your personal information.
2737* **Right to Erasure / "To Be Forgotten".** This is your right to request, subject to certain limitations under applicable law, that your personal information be erased from our possession and, by extension, from all of our service providers. Fulfillment of some data deletion requests may prevent you from using Engine Awesome services because our applications may then no longer work. In such cases, a data deletion request may result in closing your account.
2738* **Right to Complain.** You have the right to make a complaint regarding our handling of your personal information with the appropriate supervisory authority.
2739* **Right to Restrict Processing.** This is your right to request restriction of how and why your personal information is used or processed, including opting out of sale of personal information. (Again: we never have and never will sell your personal data.)
2740* **Right to Object.** You have the right, in certain situations, to object to how or why your personal information is processed.
2741* **Right to Portability.** You have the right to receive the personal information we have about you and the right to transmit it to another party.  If you want to export data from your accounts, you can do so directly by contacting our [support team](https://engineawesome.com/support/).
2742* **Right to not Be Subject to Automated Decision-Making.** You have the right to object to and prevent any decision that could have a legal or similarly significant effect on you from being made solely based on automated processes. This right is limited if the decision is necessary for performance of any contract between you and us, is allowed by applicable law, or is based on your explicit consent.
2743* **Right to Non-Discrimination.** We do not and will not charge you a different amount to use our products, offer you different discounts, or give you a lower level of customer service because you have exercised your data privacy rights. However, the exercise of certain rights may, by virtue of your exercising those rights, prevent you from using our Services.
2744
2745Many of these rights can be exercised by signing in and updating your account information.
2746
2747If you have questions about exercising these rights or need assistance, please [contact us](https://engineawesome.com/support/). or at Engine Awesome LLC, 421 8th Avenue #859 New York NY 10116 USA. If an authorized agent is corresponding on your behalf, we will need written consent with a signature from the account holder before proceeding.
2748
2749If you are in the EU or UK, you can contact your data protection authority to file a complaint or learn more about local privacy laws.
2750
2751## How we secure your data
2752
2753All data is encrypted via [SSL/TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security) when transmitted from our servers to your browser. The database backups are also encrypted. In addition, we go to great lengths to secure your data at rest. For more information about how we keep your information secure, please review our [security overview](https://engineawesome.com/about/policies/security/).
2754
2755Most data is not encrypted while they live in our database (since they need to be ready to send to you when you need them).
2756
2757## What happens when you delete content in your product accounts
2758
2759In many of our applications, we give you the option to trash content. Anything you trash in your product accounts while they are active will be kept for 30 days. After that time, the trashed content cannot be accessed via the application and we are not able to retrieve it for you. The trashed content may remain on our active servers for another 30 days, and copies of the content may be held in backups of our application databases for up to another 30 days after that. Altogether, any content trashed in your product accounts should be purged from all of our systems and logs within 90 days.
2760
2761If you choose to cancel your account, your content will become immediately inaccessible and should be purged from our systems in full within 60 days. This applies both for cases when an account owner directly cancels and for auto-cancelled accounts. Please refer to our [Cancellation policy](https://engineawesome.com/about/policies/cancellations/) for more details.
2762
2763## Location of site and data
2764
2765Our products and other web properties are operated in the United States. If you are located in the European Union, UK, or elsewhere outside of the United States, **please be aware that any information you provide to us will be transferred to and stored in the United States**. By using our websites or Services and/or providing us with your personal information, you consent to this transfer.
2766
2767## When transferring personal data from the EU
2768
2769The European Data Protection Board (EDPB) has issued guidance that personal data transferred out of the EU must be treated with the same level of protection that is granted under EU privacy law. UK law provides similar safeguards for UK user data that is transferred out of the UK. Accordingly, Engine Awesome has adopted a data processing addendum with Standard Contractual Clauses to help ensure this protection. Engine Awesome's DPA is available at [https://engineawesome.com/wp-content/uploads/2022/09/Engine_Awesome_Data_Processing_Addendum_v202209.pdf](https://engineawesome.com/wp-content/uploads/2022/09/Engine_Awesome_Data_Processing_Addendum_v202209.pdf).
2770
2771There are also a few ad hoc cases where EU personal data may be transferred to the U.S. in connection with Engine Awesome LLC operations, for instance, if an EU user signs up for our newsletter or participates in one of our surveys or buys swag from our company online store. Such transfers are only occasional and data is transferred under the [Article 49(1)(b) derogation](https://gdpr-info.eu/art-49-gdpr/) under GDPR and the UK version of GDPR.
2772
2773## Changes & questions
2774
2775We may update this policy as needed to comply with relevant regulations and reflect any new practices. You can view a history of the changes to our policies [on GitHub](https://github.com/engineawesome/policies/commits/master). Whenever we make a significant change to our policies, we will refresh the date at the top of this page and take any other appropriate steps to notify users.
2776
2777Have any questions, comments, or concerns about this privacy policy, your data, or your rights with respect to your information? Please get [in touch](https://engineawesome.com/support/) and we'll be happy to try to answer them!`,_meta:{filePath:"privacy-policy.md",fileName:"privacy-policy.md",directory:".",extension:"md",path:"privacy-policy"},slug:"privacy-policy"},{title:"Reasonable Use Policy",description:"In order to maintain a high level of performance and quality for all our users, we have to set some boundaries",lastUpdated:"2023-04-15",icon:"gauge",order:14,content:`# Reasonable Use Policy
2778
2779*Last updated: April 15, 2023*
2780
2781Hello there, and welcome to Engine Awesome! We're all about making your experience as enjoyable and hassle-free as possible, which is why we often use the term "unlimited" when describing our services. However, in the real world, we know that nothing is truly unlimited. It's a bit like an all-you-can-eat buffet - sure, the food seems endless, but there's always a limit to how much one can actually consume. Similarly, in order to maintain a high level of performance and quality for all our users, we have to set some boundaries. That's where our Reasonable Use Policy comes into play.
2782
2783## We're flexible
2784Now, we understand that things change, and sometimes you might need a little extra wiggle room. Our limits aren't set in stone – we're all about flexibility and finding solutions that work for you. If you find yourself needing more resources, just reach out to our friendly [support team](https://engineawesome.com/support/). We'll be more than happy to discuss your requirements and work together to find an accommodation that suits your needs.
2785
2786## 1. Users: Sharing is Caring, But Not Unlimited
2787
2788We love to see your team grow, but we have to keep it manageable for everyone. That's why we're setting a limit of 1,000 users per account. This way, we can guarantee that our services run smoothly for all our customers, without sacrificing performance or reliability. Remember, it's all about quality over quantity!
2789
2790## 2. Records: Keeping It Organized and Efficient
2791
2792With great power comes great responsibility, and managing data is no exception. In order to maintain a high-performance environment, we limit the number of records per team to 50,000. This ensures that your data stays organized and accessible, without overwhelming the system. Let's keep things neat and tidy!
2793
2794## 3. Storage: Room to Grow, Within Reason
2795
2796We know that your data storage needs may change over time, but to keep things running smoothly, we're setting a cap of 5GB per account. It might sound like a small number, but trust us, it's more than enough for most teams. By setting this limit, we can make sure that everyone enjoys a consistent experience with our services.
2797
2798## 4. Object Types: Variety is the Spice of Life, to a Point
2799
2800We encourage you to explore the versatility of our platform, but let's not get too carried away. In order to maintain a balanced and efficient system, we're limiting the number of object types to 50 per account. To put this into perspective, most of the [applications in our library](https://engineawesome.com/applications) use four object types, so you have plenty of room for creativity and customization without bogging down the system.
2801
2802Now, with these rules in place, we're all set to create some amazing applications together! If you ever have any questions or concerns, don't hesitate to reach out to our [support team](https://engineawesome.com/support/). We're always here to help.
2803
2804Thanks again for choosing Engine Awesome, and let's build something incredible together!`,_meta:{filePath:"reasonable-use.md",fileName:"reasonable-use.md",directory:".",extension:"md",path:"reasonable-use"},slug:"reasonable-use"},{title:"Refund policy",description:"Bad refund policies are infuriating. We never want our customers to feel that way, so our refund policy is simple: If you're ever unhappy with our products for any reason, we'll take care of you.",lastUpdated:"2024-01-15",icon:"credit-card",order:7,content:`# A fair refund policy.
2805
2806Bad refund policies are infuriating. You feel like the company is just trying to rip you off. We never want our customers to feel that way, so our refund policy is simple: If you're ever unhappy with our products* for any reason, just contact [our support team](https://engineawesome.com/support/) and we'll take care of you.
2807
2808## Examples of full refunds we'd grant.
2809
2810* If you were just charged for your next month of service but you meant to cancel, we're happy to refund that extra charge.
2811* If you forgot to cancel your account a couple months ago and you haven't used it since then, we'll give you a full refund for a few back months. No problem.
2812* If you tried one of our products for a couple months and you just weren't happy with it, you can have your money back.
2813
2814## Examples of partial refunds or credits we'd grant.
2815
2816* If you forgot to cancel your account a year ago, and there's been activity on your account since then, we'll review your account usage and figure out a partial refund based on how many months you used it.
2817* If you upgraded your account a few months ago to a higher plan and kept using it in general but you didn't end up using the extra features, we'd consider applying a prorated credit towards future months.
2818* If we had extended downtime (multiple hours in a day, or multiple days in a month) or you emailed customer service and it took multiple days to get back to you, we'd issue a partial credit to your account.
2819
2820## Monthly vs Annual subscriptions
2821We may offer annual subscriptions for some of our products. Our annual subscriptions are less money then if you paid monthly over the same time frame. For example, we may charge $10 a month for a product which would be $120 a year. However, if you pay annually it would only cost $96, saving you 20%. In order to offer you this savings, we can not prorate refunds. So if you buy the annual plan and cancel in the eighth month, we will not refund you for the unused four months.
2822
2823## When can I expect my refund?
2824After we initiate the refund, you should see the funds in your bank account within 5-10 business days, [depen
2824ding on your bank's policies](https://www.thebalancemoney.com/how-does-a-credit-card-refund-work-4174421).
2825
2826## Get in touch
2827
2828At the end of the day, nearly everything on the edges comes down to a case-by-case basis. [Send us a note](https://engineawesome.com/support/), tell us what's up, and we'll work with you to make sure you're happy.
2829
2830**This policy applies to any product created and owned by Engine Awesome LLC.*`,_meta:{filePath:"refunds.md",fileName:"refunds.md",directory:".",extension:"md",path:"refunds"},slug:"refunds"},{title:"Security Response",description:"Have you discovered a web security flaw that might impact one of our products? Here is how you can report it.",lastUpdated:"2024-01-15",icon:"alert-triangle",order:13,content:`# Security response
2831
2832## We appreciate your concern
2833
2834Keeping customer data safe and secure is a huge responsibility and a top priority. We work hard to protect our customers from the latest threats. Your input and feedback on our security is always appreciated.
2835
2836## Reporting security problems
2837
2838**Report security vulnerabilities** via email to [Timothy directly](mailto:[email protected]). If you feel it necessary, you can send your email via PGP to keep your message safe and please provide us with a secure way to respond. We'll respond as soon as we can. Please follow up or [ping us on Twitter](https://twitter.com/engineawesome) if you don't hear back.
2839
2840**For requests that aren't urgent or sensitive**: submit a [support request](https://engineawesome.com/support/).
2841
2842## Thanks for working with us
2843
2844We respect the time and talent that drives new discoveries in web security technology, and appreciate your help in keeping Engine Awesome as secure as possible.`,_meta:{filePath:"security-response.md",fileName:"security-response.md",directory:".",extension:"md",path:"security-response"},slug:"security-response"},{title:"Security overview",description:"Keeping customer data safe and secure is a huge responsibility and a top priority for us. Here's how we make it happen.",lastUpdated:"2024-01-15",icon:"lock",order:8,content:`# Security overview.
2845
2846## We protect your data.
2847
2848All data are written to disks instantly and backed up daily. Files that our customers upload are stored on servers that use modern techniques to remove bottlenecks and points of failure.
2849
2850## Your data is sent using HTTPS.
2851
2852Whenever your data are in transit between you and us, everything is encrypted, and sent using HTTPS.
2853
2854## Regularly-updated infrastructure.
2855
2856Our software infrastructure is updated regularly with the latest security patches. While perfect security is a moving target, we work with security researchers to keep up with the state-of-the-art in web security.
2857
2858## We protect your billing information.
2859
2860All credit card transactions are processed using secure encryption—the same level of encryption used by leading banks. Card information is transmitted, stored, and processed securely on a <a href="https://en.wikipedia.org/wiki/Payment_Card_Industry_Data_Security_Standard">PCI-Compliant network</a>. Your credit card information is submitted directly to our payment processor and doesn't hit Engine Awesome servers.
2861
2862## Constant monitoring
2863
2864We have a team dedicated to maintaining your account's security on our systems and monitoring tools we've set up to alert us to any nefarious activity against our domains. To date, we've _never_ had a data breach.
2865
2866We have processes and defenses in place to keep our streak of 0 data breaches going. But in the unfortunate circumstances someone malicious does successfully mount an attack, we will immediately notify all affected customers.
2867
2868## Over 20 years of experience.
2869
2870We've been around the block and we've seen a lot of companies come and go. Security isn't just about technology, it's about trust. We'll continue to work hard every day to maintain that trust. Longevity and stability is core to our mission at Engine Awesome.
2871
2872## Have a concern? Need to report an incident?
2873
2874Have you noticed abuse, misuse, an exploit, or experienced an incident with your account? Please visit our [security response page](https://engineawesome.com/about/policies/security/response/) for details on how to securely submit a report.`,_meta:{filePath:"security.md",fileName:"security.md",directory:".",extension:"md",path:"security"},slug:"security"},{title:"Engine Awesome Subprocessors",description:"All the third-party subprocessors that we use to run Engine Awesome.",lastUpdated:"2024-01-15",icon:"server",order:11,content:`# Engine Awesome subprocessors
2875
2876We use third party subprocessors, such as cloud computing providers and customer support software, to run Engine Awesome (the service). We establish GDPR-compliant data processing agreements with each subprocessor, extending [GDPR safeguards](../index.md) everywhere personal data is processed.
2877
2878The following is a list of personal data subprocessors we use. These subprocessors are all located in the United States:
2879
2880* A[Cloudflare](https://www.cloudflare.com/gdpr/introduction/). Cloud services provider.
2881* [Datadog](https://www.datadoghq.com/legal/privacy/). Infrastru
2881cture and application monitoring.
2882* [Digital Ocean](https://www.digitalocean.com/legal). Cloud services provider.
2883* [Email Octopus](https://emailoctopus.com/legal/gdpr). Transactional email service.
2884* [Help Scout](https://www.helpscout.net/company/legal/gdpr/). Help desk software.
2885* [Postmark](https://postmarkapp.com/security). Transactional email service.
2886* [Stripe](https://stripe.com/privacy). Payment processing services.`,_meta:{filePath:"subprocessors.md",fileName:"subprocessors.md",directory:".",extension:"md",path:"subprocessors"},slug:"subprocessors"},{title:"Terms of Service",description:"All the terms that you agree to when you sign up for Engine Awesome product.",lastUpdated:"2025-11-30",icon:"file-contract",order:9,content:`# Terms of Service
2887
2888*Last updated: November 30, 2025*
2889
2890Thank you so much for using Engine Awesome! Here are some Terms of Service our lawyers say we need.
2891
2892When we say "Company", "we", "our", or "us" in this document, we are referring to Engine Awesome LLC.
2893
2894When we say "Services", we mean any product created and maintained by Engine Awesome LLC., whether delivered within a web browser, desktop application, mobile application, or another format.
2895
2896When we say "You" or "your", we are referring to the people or organizations that own an account with one or more of our Services.
2897
2898We may update these Terms of Service in the future. You can track all changes [on GitHub](https://github.com/EngineAwesome/policies/commits/master). Typically these changes have been to clarify some of these terms by linking to an expanded related policy. Whenever we make a significant change to our policies, we will refresh the date at the top of this page and take any other appropriate steps to notify account holders.
2899
2900When you use our Services, now or in the future, you are agreeing to the latest Terms of Service. That's true for any of our existing and future products and all features that we add to our Services over time. There may be times where we do not exercise or enforce any right or provision of the Terms of Service; in doing so, we are not waiving that right or provision. **These terms do contain a limitation of our liability.**
2901
2902If you violate any of the terms, we may terminate your account. That's a broad statement and it means you need to place a lot of trust in us. We do our best to deserve that trust by being open about [who we are](https://engineawesome.com/about/), and keeping an open door to [your feedback](https://engineawesome.com/support/).
2903
2904## Account Terms
2905
29061. You are responsible for maintaining the security of your account and password. The Company cannot and will not be liable for any loss or damage from your failure to comply with this security obligation. We recommend users set up two-factor authentication using <a href="https://support.google.com/accounts/answer/1066447">Google Authenticator</a> or <a href="https://authy.com">Authy</a>. Sometimes we may require it.
29072. You may not use the Services for any purpose outlined in our [Use Restrictions policy](https://engineawesome.com/about/policies/abuse/).
29083. You are responsible for all content posted and activity that occurs under your account. That includes content posted by others who either: (a) have access to your login credentials; or (b) have their own logins under your account.
29094. You must be a human. Accounts registered by "bots" or other automated methods are not permitted.
2910
2911
2912## Sensitive Information Prohibited
2913
2914**Engine Awesome is not a secure document vault.** You may not upload, store, or process documents or media that contain highly sensitive personal information. The platform is not designed to handle government-issued identification, financial documents, or similar records. Prohibited content includes, but is not limited to:
2915
2916- Driver's licenses
2917- Passports
2918- Birth certificates
2919- Social Security cards or numbers
2920- Checks, bank statements, or other financial documents
2921- Tax forms or taxpayer identification numbers
2922- Credit card or debit card numbers
2923- Medical or health-related records
2924- Any document containing government ID numbers, account numbers, or similar identifiers
2925
2926If your organization requires identity verification or handling of sensitive personal documents, you must use a secure, compliant system designed for that purpose. Uploading this type of content through standard Engine Awesome features is not permitted and may result in removal of the content or suspension of your account.
2927
2928You are responsible for ensuring that all uploaded content complies with these restrictions and with applicable laws.
2929
2930## Payment, Refunds, and Plan Changes
2931
29321. If we offer a free version of one of our Services, it is really free: we will not ask you for your credit card and — just like for customers who pay for our Services — we do not sell your data.
29332. For paid Services that offer a free trial, we explain the length of trial when you sign up. After the trial period, you need to pay in advance to keep using the Service. If you do not pay, we will freeze your account and it will be inaccessible until you make payment. If your account has been frozen for a 
2933while, we will queue it up for auto-cancellation. See our [Cancellation policy](https://engineawesome.com/about/policies/cancellations/) for more details.
29343. If you are upgrading from a free plan to a paid plan, we will charge your card immediately and your billing cycle starts on the day of upgrade. For other upgrades or downgrades in plan level, the new rate is prorated from the day you change your plan.
29354. We process refunds according to our [Fair Refund policy](https://engineawesome.com/about/policies/refunds/).
2936
2937## Cancellation and Termination
2938
29391. Since cancelling your account will immediately delete all your data, we ask you to put in a [support request for cancellation](https://engineawesome.com/support/). You can find instructions for how to cancel your account in our [Cancellation policy](https://engineawesome.com/about/policies/cancellations/).
29402. All of your content will be inaccessible from the Services immediately upon account cancellation. Within 30 days, all content will be permanently deleted from active systems and logs. Within 60 days, all content will be permanently deleted from our backups. We cannot recover this information once it has been permanently deleted. If you want to export any data before your account is cancelled, please put in a [support ticket](https://engineawesome.com/support/) for that request.
29413. If you cancel the Service before the end of your current paid up month or year for annual plans, your cancellation will take effect immediately, and you will not be charged again. We do not automatically prorate unused time in the last billing cycle. See our [Fair Refund policy](https://engineawesome.com/about/policies/refunds/) for more details.
29424. We have the right to suspend or terminate your account and refuse any and all current or future use of our Services for any reason at any time. Suspension means you and any other users on your account will not be able to access the account or any content in the account. Termination will furthermore result in the deletion of your account or your access to your account, and the forfeiture and relinquishment of all content in your account. We also reserve the right to refuse the use of the Services to anyone for any reason at any time. We have this clause because statistically speaking, a small percentage of users are doing something nefarious. There are some things we staunchly stand against and this clause is how we exercise that stance. For more details, see our [Use Restrictions policy](https://engineawesome.com/about/policies/abuse/).
29435. Verbal, physical, written or other abuse (including threats of abuse or retribution) of a Company employee or officer will result in immediate account termination.
2944
2945## Modifications to the Service and Prices
2946
29471. Sometimes it becomes technically impossible to continue a feature or we redesign a part of our Services because we think it could be better or we decide to close new signups of a product. We reserve the right at any time to modify or discontinue, temporarily or permanently, any part of our Services with or without notice.
29482. Sometimes we change the pricing structure for our products. When we do that, we tend to exempt existing customers from those changes. However, we may choose to change the prices for existing customers. If we do so, we will give at least 30 days notice and will notify you via the email address on record. We may also post a notice about changes on our websites or the affected Services themselves.
2949
2950## Uptime, Security, and Privacy
2951
29521. Your use of the Services is at your sole risk. We provide these Services on an "as is" and "as available" basis. We take uptime of our applications seriously.
29532. We reserve the right to temporarily disable your account if your usage significantly exceeds the average usage of other customers of the Services. Of course, we'll reach out to the account owner before taking any action except in rare cases where the level of use may negatively impact the performance of the Service for other customers.
29543. We take many measures to protect and secure your data through backups, redundancies, and encryption. We enforce encryption for data transmission from the public Internet. There are some edge cases where we may send your data through our network unencrypted. Please refer to our [Security Overview](https://engineawesome.com/about/policies/security/) for full details and our [Security Response page](https://engineawesome.com/about/policies/security/response) for how to report a security incident or threat.
29554. When you use our Services, you entrust us with your data. We take that trust to heart. You agree that Engine Awesome may process your data as described 
2955in our [Privacy Policy](https://engineawesome.com/about/policies/privacy-policy/) and for no other purpose. We as humans can access your data for the following reasons:
2956  - **To help you with support requests you make.** We'll ask for express consent before accessing your account.
2957  - **On the rare occasions when an error occurs that stops an automated process partway through.** We get automated alerts when such errors occur. When we can fix the issue and restart automated processing without looking at any personal data, we do. In rare cases, we have to look at a minimum amount of personal data to fix the issue. In these rare cases, we aim to fix the root cause as much as possible to avoid the errors from reoccurring.
2958  - **To safeguard Engine Awesome.** We'll look at logs and metadata as part of our work to ensure the security of your data and the Services as a whole. If necessary, we may also access accounts as part of an [abuse report investigation](https://engineawesome.com/about/policies/abuse/how-we-handle/).
2959  - **To the extent required by applicable law.** As a US company with all data infrastructure located in the US, we only preserve or share customer data if compelled by a US government authority with a legally binding order or proper request under the Stored Communications Act. If a non-US authority approaches Engine Awesome for assistance, our default stance is to refuse unless the order has been approved by the US government, which compels us to comply through procedures outlined in an established mutual legal assistance treaty or agreement mechanism. If Engine Awesome is audited by a tax authority, we only share the bare minimum billing information needed to complete the audit.
2960
29615. We use third party vendors and hosting partners to provide the necessary hardware, software, networking, storage, and related technology required to run the Services. You can see a list of all subprocessors who handle personal data for [Engine Awesome](https://engineawesome.com/about/policies/privacy-policy/subprocessors/).
29626. Under the California Consumer Privacy Act ("CCPA"), Engine Awesome is a "service provider", not a "business" or "third party", with respect to your use of the Services. That means we process any data you share with us only for the purpose you signed up for and as described in these Terms of Service, [Privacy policy](https://engineawesome.com/about/policies/privacy-policy/), and [other policies](https://engineawesome.com/about/policies/). We do not retain, use, disclose, or sell any of that information for any other commercial purposes unless we have your explicit permission. And on the flip-side, you agree to comply with your requirements under the CCPA and not use Engine Awesome's Services in a way that violates the regulations.
29637. These Service Terms incorporate the [Engine Awesome Data Processing Addendum ("DPA")](https://engineawesome.com/wp-content/uploads/2022/09/Engine_Awesome_Data_Processing_Addendum_v202209.pdf), when the General Data Protection regulation ("GDPR") applies to your use of Basecamp Services to process Customer Data as defined in the DPA. The DPA is effective as of September 20, 2022 and replaces and supersedes any previously agreed data processing addendum between you and Engine Awesome LLC relating to the GDPR.
2964
2965## Copyright and Content Ownership
2966
29671. All content posted on the Services must comply with U.S. copyright law. We provide details on [how to file a copyright infringement claim](https://engineawesome.com/about/policies/copyright-infringement-claims/).
29682. We claim no intellectual property rights over the material you provide to the Services. All materials uploaded remain yours.
29693. We do not pre-screen content, but reserve the right (but not the obligation) in our sole discretion to refuse or remove any content that is available via the Service.
29704. The names, look, and feel of the Services are copyright© to the Company. All rights reserved. You may not duplicate, copy, or reuse any portion of the HTML, CSS, JavaScript, or visual design elements without express written permission from the Company. You must request permission to use the Company's logo or any Service logos for promotional purposes. Please [contact us](https://engineawesome.com/support/) for requests to use logos. We reserve the right to rescind this permission if you violate these Terms of Service.
29715. You agree not to reproduce, duplicate, copy, sell, resell or exploit any portion of the Services, use of the Services, or access to the Services without the express written permission by the C
2971ompany.
29726. You must not modify another website so as to falsely imply that it is associated with the Services or the Company.
2973
2974## Features and Bugs
2975
2976We design our Services with care, based on our own experience and the experiences of customers who share their time and feedback. However, there is no such thing as a service that pleases everybody. We make no guarantees that our Services will meet your specific requirements or expectations.
2977
2978We also test all of our features extensively before shipping them. As with any software, our Services inevitably have some bugs. We track the bugs reported to us and work through priority ones, especially any related to security or privacy. Not all reported bugs will get fixed and we don't guarantee completely error-free Services.
2979
2980## Services Adaptations and API Terms
2981
2982We offer Application Program Interfaces ("API"s) for some of our Services. Any use of the API, including through a third-party product that accesses the Services, is bound by the terms of this agreement plus the following specific terms:
2983
29841. You expressly understand and agree that we are not liable for any damages or losses resulting from your use of the API or third-party products that access data via the API.
29852. Third parties may not access and employ the API if the functionality is part of an application that remotely records, monitors, or reports a Service user's activity *other than time tracking*, both inside and outside the applications. The Company, in its sole discretion, will determine if an integration service violates this bylaw. A third party that has built and deployed an integration for the purpose of remote user surveillance will be required to remove that integration.
29863. Abuse or excessively frequent requests to the Services via the API may result in the temporary or permanent suspension of your account's access to the API. The Company, in its sole discretion, will determine abuse or excessive usage of the API. If we need to suspend your account's access, we will attempt to warn the account owner first. If your API usage could or has caused downtime, we may cut off access without prior notice.
2987
2988Some third-party providers have created integrations between our Services and theirs. We are not liable or accountable for any of these third-party integrations.
2989
2990## Liability
2991
2992We mention liability throughout these Terms but to put it all in one section:
2993
2994***You expressly understand and agree that the Company shall not be liable, in law or in equity, to you or to any third party for any direct, indirect, incidental, lost profits, special, consequential, punitive or exemplary damages, including, but not limited to, damages for loss of profits, goodwill, use, data or other intangible losses (even if the Company has been advised of the possibility of such damages), resulting from: (i) the use or the inability to use the Services; (ii) the cost of procurement of substitute goods and services resulting from any goods, data, information or services purchased or obtained or messages received or transactions entered into through or from the Services; (iii) unauthorized access to or alteration of your transmissions or data; (iv) statements or conduct of any third party on the service; (v) or any other matter relating to this Terms of Service or the Services, whether as a breach of contract, tort (including negligence whether active or passive), or any other theory of liability.***
2995
2996In other words: choosing to use our Services does mean you are making a bet on us. If the bet does not work out, that's on you, not us. We do our darnedest to be as safe a bet as possible through careful management of the business; investments in security, infrastructure, and talent; and in general giving a damn. If you choose to use our Services, thank you for betting on us.
2997
2998If you have a question about any of the Terms of Service, please [contact our Support team](https://engineawesome.com/support/).`,_meta:{filePath:"terms-and-conditions.md",fileName:"terms-and-conditions.md",directory:".",extension:"md",path:"terms-and-conditions"},slug:"terms-and-conditions"},{title:"Restricted Use Policy",description:"It is not okay to use our products for these restricted purposes.",lastUpdated:"2025-11-30",icon:"ban",order:10,content:`# Use Restrictions
2999
3000*Last updated: November 30, 2025*
3001
3002Many teams use Engine Awesome products*. We are proud to give them a better way to work. We also recognize that however good the maker's intentions are, technology can amplify the ability to cause great harm. That's why we've established this policy. We feel an ethical obligation to counter such harm: both in terms of dealing with instances where Engine Awesome is used (and abused) to further such harm and to state unequivocally that the products we make at Engine Awesome are not safe havens for people who wish to commit such harm. If you have an account with any of our products, you can't use them for any of the restricted purposes listed below. If we find out you are, [we will take action](https://engineawesome.com/about/policies/abuse/how-we-handle/).
3003
3004## Restricted purposes
3005
3006* **Violence or threats thereof**: If an activity qualifies as a violent crime in the United States or where you live, you may 
3006not use Engine Awesome products to plan, perpetrate, or threaten that activity.
3007* **Child exploitation, sexualization, or abuse**: We don't tolerate any activities that create, disseminate, or otherwise cause child abuse. Keep away and stop. Just stop.
3008* **Hate speech**: You cannot use our products to advocate for the extermination, domination, or oppression of people.
3009* **Harassment**: Intimidating or targeting people or groups through repeated communication, including using racial slurs or dehumanizing language, is not welcome at Engine Awesome.
3010* **Doxing**: If you are using Engine Awesome products to share other peoples' private personal information for the purposes of harassment, we don't want anything to do with you.
3011* **Malware or spyware**: Code for good, not evil. If you are using our products to make or distribute anything that qualifies as malware or spyware — including remote user surveillance — begone.
3012* **Phishing or otherwise attempting fraud**: It is not okay to lie about who you are or who you affiliate with to steal from, extort, or otherwise harm others.
3013* **Spamming**: No one wants unsolicited commercial emails. We don't tolerate folks (including their bots) using Engine Awesome products for spamming purposes. If your emails don't pass muster with [CAN-SPAM](https://www.ftc.gov/business-guidance/resources/can-spam-act-compliance-guide-business) or any other anti-spam law, it's not allowed.
3014* **Cybersquatting**: We don't like username extortionists. If you purchase an Engine Awesome product account in someone else's name and then try to sell that account to them, you are [cybersquatting](https://www.law.cornell.edu/uscode/text/15/1125). Cybersquatting accounts are subject to immediate cancellation.
3015* **Infringing on intellectual property**: You can't use Engine Awesome products to make or disseminate work that uses the intellectual property of others beyond the bounds of [fair use](https://www.copyright.gov/fair-use/more-info.html).
3016
3017While our use restrictions are comprehensive, they can't be exhaustive — it's possible an offense could defy categorization, present for the first time, or illuminate a moral quandary we hadn't yet considered. That said, we hope the overarching spirit is clear: Engine Awesome is not to be harnessed for harm, whether mental, physical, personal or civic. Different points of view — philosophical, religious, and political — are welcome, but ideologies like white nationalism, or hate-fueled movements anchored by oppression, violence, abuse, extermination, or domination of one group over another, will not be accepted here.
3018
3019## Sensitive Information Prohibited
3020
3021**Engine Awesome is not a secure document vault.** You may not upload, store, or process documents or media that contain highly sensitive personal information. The platform is not designed to handle government-issued identification, financial documents, or similar records. Prohibited content includes, but is not limited to:
3022
3023- Driver's licenses
3024- Passports
3025- Birth certificates
3026- Social Security cards or numbers
3027- Checks, bank statements, or other financial documents
3028- Tax forms or taxpayer identification numbers
3029- Credit card or debit card numbers
3030- Medical or health-related records
3031- Any document containing government ID numbers, account numbers, or similar identifiers
3032
3033If your organization requires identity verification or handling of sensitive personal documents, you must use a secure, compliant system designed for that purpose. Uploading this type of content through standard Engine Awesome features is not permitted and may result in removal of the content or suspension of your account.
3034
3035You are responsible for ensuring that all uploaded content complies with these restrictions and with applicable laws.
3036
3037## How to report abuse
3038
3039For cases of suspected malware, spyware, phishing, spamming, and cybersquatting, please alert us at [[email protected]](mailto:[email protected]).
3040
3041For all other cases, please let us know by emailing [[email protected]](mailto:[email protected]). If you're not 100% sure if something rises to the level of our use restrictions policy, report it anyway.
3042
3043Please share as much as you are comfortable with about the account, the content or behavior you are reporting, and how you found it. Sending us a URL or screenshots is super helpful. If you need a secure file transfer, let us know and we will send you a link. We will not disclose your identity to anyone associated with the reported account. For copyright cases, we've outlined extra instructions on [how to notify us about infringement claims](../copyright/index.md).
3044
3045Someone on our team will respond within two business days to let you know 
3045we've begun investigating. We have published details on [how we investigate use restriction reports](https://engineawesome.com/about/policies/abuse/how-we-handle/). We will also let you know the outcome of our investigation (unless you ask us not to, or we are not allowed to under law).
3046
3047**This policy and process applies to any product created and owned by Engine Awesome, LLC.**`,_meta:{filePath:"use-restrictions.md",fileName:"use-restrictions.md",directory:".",extension:"md",path:"use-restrictions"},slug:"use-restrictions"}],Qy=[{name:"Blazeo",tagline:"The Marketing Engine of the Future",description:"Engine Awesome partners with Blazeo to help agencies and service businesses expand their offerings and increase revenue by rapidly creating custom applications for clients.",website:"https://blazeo.com",features:["Custom Application Development","Service Expansion for Agencies","Revenue Growth Opportunities","Centralized Lead Management","Zapier Integration","Pre-built Application Library"],benefits:["Rapidly build tailored business tools without extensive coding","Extend agency capabilities to offer additional client solutions","Create new income streams through custom application services","Streamline client communication and project tracking"],integrationHighlight:"The Blazeo integration enables agencies to leverage Engine Awesome's powerful platform to deliver custom applications to clients faster than ever. With Zapier automation support and access to pre-built templates, you can accelerate development and focus on growing your business.",ctaPrimaryText:"Get a Free Consultation",ctaPrimaryUrl:"/templates/",ctaSecondaryText:"Learn Engine Awesome",ctaSecondaryUrl:"https://learn.engineawesome.com",content:`## Transform Your Agency with Blazeo + Engine Awesome
3048
3049The partnership between Blazeo and Engine Awesome brings together the best of both worlds: Blazeo's marketing expertise and Engine Awesome's powerful application-building platform. Together, they enable agencies to deliver exceptional value to their clients.
3050
3051## Why This Partnership Matters
3052
3053### For Marketing Agencies
3054
3055Marketing agencies are constantly looking for ways to differentiate themselves and provide more value to clients. With the Blazeo + Engine Awesome integration, you can:
3056
3057- **Offer custom application development** as a new service line
3058- **Build client portals** that keep customers engaged and informed
3059- **Create lead management systems** tailored to each client's unique sales process
3060- **Automate workflows** that save time and reduce manual errors
3061
3062### For Service Businesses
3063
3064Service businesses need tools that work the way they do. This partnership enables you to:
3065
3066- **Centralize all your leads** in one powerful system
3067- **Track customer interactions** from first contact to completed job
3068- **Automate follow-ups** so no opportunity slips through the cracks
3069- **Generate reports** that give you insights into your business performance
3070
3071## How It Works
3072
30731. **Connect your accounts** - Link your Blazeo and Engine Awesome accounts in just a few clicks
30742. **Configure your workflows** - Set up automated data flows between the platforms
30753. **Start capturing leads** - Every lead from your marketing efforts flows directly into Engine Awesome
30764. **Grow your business** - Focus on what you do best while the integration handles the rest
3077
3078## Use Cases
3079
3080### Lead Generation Campaigns
3081
3082Run marketing campaigns through Blazeo and automatically capture every lead in Engine Awesome. No more manual data entry, no more lost opportunities.
3083
3084### Client Reporting
3085
3086Build custom dashboards in Engine Awesome that pull data from your Blazeo campaigns. Give clients real-time visibility into their marketing performance.
3087
3088### Sales Pipeline Management
3089
3090Create a seamless flow from marketing qualified lead to sales opportunity. Track every touchpoint and never let a hot lead go cold.
3091
3092## Get Started Today
3093
3094Ready to supercharge your agency or service business? The Blazeo + Engine Awesome integration is easy to set up and starts delivering value from day one.`,_meta:{filePath:"blazeo.md",fileName:"blazeo.md",directory:".",extension:"md",path:"blazeo"},slug:"blazeo"},{name:"WS Form",tagline:"The Best Way to Connect WordPress & Engine Awesome",description:"WS Form provides seamless WordPress 
3094integration, automatically capturing form submissions and sending them directly into Engine Awesome for streamlined lead management.",website:"https://wsform.com",features:["Automatic Lead Capture","WordPress Form Integration","Real-time Data Sync","No Manual Data Entry","Seamless Setup Process","Reliable Form Handling"],benefits:["Capture every lead automatically from your WordPress forms","Eliminate manual data entry and reduce human error","Never miss an opportunity with instant lead sync","Streamline your lead management workflow"],integrationHighlight:"The WS Form integration sends form submissions straight into Engine Awesome, eliminating lost opportunities and manual data entry. Connect your WordPress forms and start capturing leads automatically with a seamless, no-code setup.",ctaPrimaryText:"Start Capturing Leads",ctaPrimaryUrl:"/templates/",ctaSecondaryText:"Learn More About WS Form",ctaSecondaryUrl:"https://wsform.com",content:`## Connect Your WordPress Forms to Engine Awesome
3095
3096If you're running a WordPress website, chances are you're using forms to capture leads, inquiries, and customer information. WS Form is one of the most powerful form builders for WordPress, and now it integrates seamlessly with Engine Awesome.
3097
3098## Why WS Form + Engine Awesome?
3099
3100### Automatic Lead Capture
3101
3102Every form submission on your WordPress site is automatically sent to Engine Awesome. No copying and pasting, no CSV exports, no manual data entry. Just seamless, automatic lead capture.
3103
3104### Real-Time Sync
3105
3106When someone fills out your form, their information appears in Engine Awesome instantly. Respond to leads while they're still hot and close more deals.
3107
3108### Zero Data Loss
3109
3110Manual processes lead to human error. With the WS Form integration, every single lead is captured automatically. Never lose another opportunity to a missed email or forgotten spreadsheet entry.
3111
3112## Perfect For
3113
3114### Small Businesses
3115
3116You don't need a dedicated IT team to set up sophisticated lead capture. The WS Form + Engine Awesome integration is designed for business owners who want powerful tools without the complexity.
3117
3118### WordPress Developers
3119
3120Building sites for clients? Add real value by implementing lead capture that actually works. Your clients will thank you when every lead from their website flows directly into their CRM.
3121
3122### Marketing Teams
3123
3124Running landing pages and lead generation campaigns? Make sure every lead is captured and tracked. Build reports on form performance and conversion rates.
3125
3126## How to Set Up the Integration
3127
3128Setting up the WS Form integration is straightforward:
3129
31301. **Install WS Form** on your WordPress site if you haven't already
31312. **Create your forms** using WS Form's intuitive drag-and-drop builder
31323. **Connect to Engine Awesome** using your API key
31334. **Map your fields** to tell Engine Awesome where each piece of data should go
31345. **Start capturing leads** automatically from every form submission
3135
3136## Advanced Features
3137
3138### Conditional Logic
3139
3140Use WS Form's conditional logic to show or hide fields based on user input, and all that data flows into Engine Awesome with full context.
3141
3142### Multi-Step Forms
3143
3144Break long forms into digestible steps to improve conversion rates. Every submission still goes straight to Engine Awesome.
3145
3146### File Uploads
3147
3148Capture file uploads through your forms and have them automatically attached to records in Engine Awesome.
3149
3150### Custom Field Mapping
3151
3152Map any form field to any field in Engine Awesome. Complete flexibility to match your exact data structure.
3153
3154## Start Capturing Leads Today
3155
3156Don't let another lead slip through the cracks. Set up the WS Form + Engine Awesome integration and start capturing every opportunity automatically.`,_meta:{filePath:"ws-form.md",fileName:"ws-form.md",directory:".",extension:"md",path:"ws-form"},slug:"ws-form"}],a2=[["field-service-suite-application","field-service-teams-application","field-service-application"]];function o2(a){return a2.reduce((o,i)=>{const r=i.map(h=>o.find(p=>p.slug===h)).filter(h=>h!==void 0);if(r.length<2)return o;const c=o.findIndex(h=>r.includes(h)),d=o.filter(h=>!r.includes(h));return[...d.slice(0,c),...r,...d.slice(c)]},a)}function Cd(){const o=Br.map(i=>({id:i.id,invite:i.invite,team_slug:i.team_slug,slug:i.slug,title:i.title,excerpt:i.excerpt,description:i.description,featured_image:i.featured_image,featured_image_sm:i.featured_image_sm,gallery:i.gallery,template_type:i.template_type,template_category:i.template_category,target_audience:i.target_audience,key_features:i.key_features,featured:i.featured})).sort((i,r)=>{const c=Br.find(f=>f.slug===i.slug),d=Br.find(f=>f.slug===r.slug),h=new Date(c?.date||0).getTime();return new Date(d?.date||0).getTime()-h});return o2(o)}function i2(a){const o=Br.find(i=>i.slug===a);return o?{id:o.id,invite:o.invite,team_slug:o.team_slug,slug:o.slug,title:o.title,excerpt:o.excerpt,date:o.date,description:o.description,featured_image:o.featured_image,featured_image_sm:o.featured_image_sm,template_type:o.template_type,template_category:o.template_category,target_audience:o.target_audience,key_features:o.key_features,gallery:o.gallery,content:o.content,htmlContent:ye(o.content)}:null}function s2(){const a=Cd(),o=new Set;return a.forEach(r=>{r.template_type.forEach(c=>o.add(c))}),["All",...Array.from(o).sort((r,c)=>r==="Free Forever"?1:c==="Free Forever"?-1:r.localeCompare(c))]}function Vy(a){return new Date(a).toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric"})}function dl(){return Fy.map(o=>({slug:o.slug,title:o.title,excerpt:o.excerpt,date:Vy(o.date),category:o.category,author:o.author,featured:o.featured})).sort((o,i)=>{const r=new Date(o.date).getTime();return new Date(i.date).getTime()-r})}function r2(a){const o=Fy.find(r=>r.slug===a);if(!o)return null;const i=o.content.replace(/^#\s+.+$/m,"").trim();return{slug:o.slug,title:o.title,excerpt:o.excerpt,date:Vy(o.date),category:o.category,author:o.author,featured:o.featured,featured_image:o.featured_image,content:o.content,htmlContent:ye(i)}}function Ag(a){return dl().filter(o=>o.category===a)}function l2(a){const o=dl().filter(i=>i.featured);return a?o.slice(0,a):o}const Gu=9,c2=1;function tC(a,o="All",i=[]){const r=dl().filter(f=>!(i.includes(f.slug)||o!=="All"&&f.category!==o)),c=r.length,d=Math.ceil(c/Gu),h=(a-1)*Gu;return{posts:r.slice(h,h+Gu),totalPages:d,totalPosts:c}}function u2(){const a=dl(),o=new Set(a.map(i=>i.category));return["All",...Array.from(o)]}const d2=()=>ee(()=>import("./index-jCViuUGJ.js"),__vite__mapDeps([20,1,21,19])),h2=ne("/")({component:J(d2,"component"),loader:()=>{const a=["project-management-application","lead-management-application","crm-simple-application","crm-suite-application","field-service-suite-application","field-service-teams-application","field-service-application","cleaning-service-application","lawn-care-application","rental-property-management","rental-sp
3156ace-management","job-hunting-application","dog-walking-application","donation-tracker-application","gutter-cleaning-application"],o=Cd().sort((c,d)=>{const h=a.indexOf(c.slug),p=a.indexOf(d.slug),f=h===-1?a.length:h,g=p===-1?a.length:p;return f-g}),i=Ag("Customer Success Stories"),r=Ag("Product Updates");return{allTemplates:o,latestCaseStudy:i[0]||null,latestProductUpdate:r[0]||null}},head:()=>se({title:"Engine Awesome - Build Custom Apps Without Code",description:"Build custom apps your business actually needs. No code, flat fee, unlimited users. Start from a template and customize it in minutes.",pathname:"/"})}),p2=()=>ee(()=>import("./index-D3JhdSmZ.js"),__vite__mapDeps([22,1,7])),m2=ne("/solutions/")({component:J(p2,"component"),head:()=>se({title:"Custom Business Apps for SMBs | Engine Awesome",description:"Build custom CRMs, job management systems, field service apps, and more. No code, unlimited users, one flat price per app. See what Engine Awesome can build.",pathname:"/solutions/"})}),f2=()=>ee(()=>import("./index-B-ELYDQ8.js"),__vite__mapDeps([23,1])),g2=ne("/compare/")({component:J(f2,"component"),head:()=>se({title:"CRM & No-Code Platform Comparisons | Engine Awesome",description:"Compare CRM pricing, custom vs off-the-shelf CRMs, and no-code app builders side by side. See how Engine Awesome stacks up against HubSpot, Salesforce, Airtable, and more.",pathname:"/compare/"})}),y2=()=>ee(()=>import("./custom-crm-XyBPuKUD.js"),__vite__mapDeps([24,1,7,25])),w2=ne("/solutions/custom-crm")({component:J(y2,"component"),head:()=>({...se({title:"Build a Custom CRM — No Code | Engine Awesome",description:"Build a CRM that fits your business exactly. No per-user pricing, no code required. Track leads, automate workflows, manage clients your way.",pathname:"/solutions/custom-crm/"}),scripts:[{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:[{"@type":"Question",name:"Can I migrate my data from another CRM?",acceptedAnswer:{"@type":"Answer",text:"Yes. Our team can handle data migration from HubSpot, Salesforce, spreadsheets, or any CSV export as part of our white-glove service. Ask us about setup and migration support."}},{"@type":"Question",name:"How long does it take to set up a custom CRM?",acceptedAnswer:{"@type":"Answer",text:"Most teams are up and running in days, not months. You start with a template, customize it through the visual builder, and our team helps you launch. Complex setups with migrations and automation typically take 1–2 weeks."}},{"@type":"Question",name:'What does "no code" actually mean? Can I still customize deeply?',acceptedAnswer:{"@type":"Answer",text:"No code means you use a visual drag-and-drop interface to build forms, pipelines, automations, and dashboards — no developer needed. You can customize fields, workflows, views, and permissions deeply without writing a single line of code."}},{"@type":"Question",name:"Is there a limit on contacts or records?",acceptedAnswer:{"@type":"Answer",text:"Pro plan includes 50,000 records. Business plan includes 500,000 records. Both plans include unlimited users."}},{"@type":"Question",name:"Can I add features later as my business grows?",acceptedAnswer:{"@type":"Answer",text:"Absolutely. Engine Awesome is designed to grow with you. Add new fields, automate new workflows, build new views, or launch new modules as your needs evolve — all without a developer."}}]})}]})}),b2=()=>ee(()=>import("./no-code-app-builders-Dn6WHWPv.js"),__vite__mapDeps([26,1,7,25])),v2=ne("/compare/no-code-app-builders")({component:J(b2,"component"),head:()=>({...se({title:"No-Code App Builders Compared 2026 | Engine Awesome",description:"Compare no-code app builders: Airtable, Glide, Notion, Bubble, and Engine Awesome. See which platform fits your use case, team size, and budget.",pathname:"/compare/no-code-app-builders/"}),scripts:[{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:[{"@type":"Question",name:"What is the best no-code app builder for small businesses?",acceptedA
3156nswer:{"@type":"Answer",text:"The best no-code app builder for small businesses depends on your use case. For building internal business apps — CRMs, job trackers, client databases — Engine Awesome is purpose-built for that workflow. For spreadsheet-style data management, Airtable is a popular choice. For simple mobile apps, Glide works well."}},{"@type":"Question",name:"How is Engine Awesome different from Airtable?",acceptedAnswer:{"@type":"Answer",text:"Airtable is a powerful spreadsheet-database hybrid. Engine Awesome is an app builder focused on internal business applications — CRMs, job management systems, field service tools, and more. Engine Awesome includes unlimited users on every paid plan, whereas Airtable charges per seat."}},{"@type":"Question",name:"Can I build a CRM with a no-code tool?",acceptedAnswer:{"@type":"Answer",text:"Yes. Engine Awesome is designed specifically for building custom business apps including CRMs. You define the data model, set up pipeline views, add intake forms, and configure dashboards — all without code."}},{"@type":"Question",name:"Do no-code app builders charge per user?",acceptedAnswer:{"@type":"Answer",text:"Most no-code app builders — including Airtable, Notion, and Glide — charge per seat. Engine Awesome uses per-application pricing: each app has its own subscription with unlimited users included."}}
3156,{"@type":"Question",name:"What can I build with Engine Awesome?",acceptedAnswer:{"@type":"Answer",text:"Engine Awesome is best suited for internal business applications: custom CRMs, job management systems, field service apps, donor and volunteer trackers, property management tools, client databases, and operational dashboards."}}]})}]})}),S2=()=>ee(()=>import("./custom-vs-off-the-shelf-crm-BOBJf968.js"),__vite__mapDeps([27,1,7,25])),A2=ne("/compare/custom-vs-off-the-shelf-crm")({component:J(S2,"component"),head:()=>({...se({title:"Custom CRM vs Off-the-Shelf CRM | Engine Awesome",description:"Custom CRM or off-the-shelf? Compare flexibility, cost, time-to-launch, and user access. See why no-code custom is the smarter middle path.",pathname:"/compare/custom-vs-off-the-shelf-crm/"}),scripts:[{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:[{"@type":"Question",name:"What is the difference between a custom CRM and off-the-shelf CRM?",acceptedAnswer:{"@type":"Answer",text:"An off-the-shelf CRM (like HubSpot or Salesforce) is a pre-built product with fixed features and workflows you configure. A custom CRM is built specifically for your business, giving you full control over fields, stages, and logic. The tradeoff is that traditional custom development is expensive and slow, while off-the-shelf tools often force compromises."}},{"@type":"Question",name:"How much does it cost to build a custom CRM?",acceptedAnswer:{"@type":"Answer",text:"A traditionally coded custom CRM can cost tens of thousands of dollars to build and maintain. With Engine Awesome, you can build a custom CRM for the cost of a monthly subscription — no developers required."}},{"@type":"Question",name:"Is off-the-shelf CRM or custom CRM better for small businesses?",acceptedAnswer:{"@type":"Answer",text:"For small businesses with a unique sales process or team structure, a no-code custom CRM is often better — you get full flexibility without per-seat costs that grow with your team. Off-the-shelf CRMs are faster to get started with but charge per user and rarely fit exactly."}},{"@type":"Question",name:"Can I build a CRM without a developer?",acceptedAnswer:{"@type":"Answer",text:"Yes. Engine Awesome is a no-code platform that lets you build a fully custom CRM — your fields, your stages, your views — without writing any code. A first version can be up and running in minutes."}},{"@type":"Question",name:"Do I need to pay per user with a custom CRM?",acceptedAnswer:{"@type":"Answer",text:"Not with Engine Awesome. Each application has its own subscription — and every user on that application is included. You can add your whole team without the bill going up."}}]})}]})}),k2=()=>ee(()=>import("./crm-pricing-CtAWi5u9.js"),__vite__mapDeps([28,1,7,25])),x2=ne("/compare/crm-pricing")({component:J(k2,"component"),head:()=>({...se({title:"CRM Pricing Comparison 2026 | Engine Awesome",description:"Compare CRM pricing from HubSpot, Salesforce, Zoho, Pipedrive, and more. See how per-seat costs add up, and the unlimited-user alternative.",pathname:"/compare/crm-pricing/"}),scripts:[{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:[{"@type":"Question",name:"How much does HubSpot CRM cost for 10 users?",acceptedAnswer:{"@type":"Answer",text:"HubSpot Starter costs around $150/month for 10 users (billed annually). HubSpot Professional — which unlocks most CRM features — costs around $900/month for 10 users. Both are billed per seat."}},{"@type":"Question",name:"How much does Salesforce cost for 10 users?",acceptedAnswer:{"@type":"Answer",text:"Salesforce Starter Suite costs around $250/month for 10 users. Salesforce Pro Suite costs around $1,000/month for 10 users, billed annually per seat."}},{"@type":"Question",name:"Is there a CRM with no per-user pricing?",acceptedAnswer:{"@type":"Answer",text:"Yes. Engine Awesome uses flat-rate pricing — unlimited users on every paid plan. The Pro plan is $39/month (billed annually), regardless of how many team members you add."}},{"@type":"Question",name:"What CRM is cheapest for small businesses?",acceptedA
3156nswer:{"@type":"Answer",text:"For teams that need unlimited users with full CRM features, Engine Awesome is significantly cheaper than HubSpot, Salesforce, or Pipedrive. At $39/month (annual) for the Pro plan, it costs less than one seat on HubSpot Professional."}}]})}]})}),E2=()=>ee(()=>import("./index-DCNHqVNf.js"),__vite__mapDeps([29,1,30,6])),T2=ne("/templates/")({component:J(E2,"component"),validateSearch:a=>({category:typeof a.category=="string"?a.category:void 0,plan:typeof a.plan=="string"?a.plan:void 0,billing:typeof a.billing=="string"?a.billing:void 0}),loader:()=>({templates:Cd(),types:s2()}),head:()=>se({title:"App Templates - Engine Awesome",description:"Browse our library of ready-to-use app templates. CRM, project management, field service, and more. Start building in minutes.",pathname:"/templates/"})}),C2=()=>ee(()=>import("./_slug-BbhcHEky.js"),__vite__mapDeps([31,1])),_2=()=>ee(()=>import("./_slug-CfrKF-3h.js"),__vite__mapDeps([32,1,25,33])),R2=ne("/templates/$slug")({component:J(_2,"component"),validateSearch:a=>({plan:typeof a.plan=="string"?a.plan:void 0,billing:typeof a.billing=="string"?a.billing:void 0}),loader:({params:a})=>{const o=i2(a.slug);if(!o)throw Go();return{template:o}},head:({loaderData:a,params:o})=>se({title:`${a?.template.title??"Template"} - Engine Awesome Templates`,description:a?.template.description??"",pathname:`/templates/${o.slug}/`,image:a?.template.featured_image}),notFoundComponent:J(C2,"notFoundComponent")});function z2(){return Qy.map(a=>({slug:a.slug,name:a.name,tagline:a.tagline,description:a.description,logo:a.logo}))}function M2(a){const o=Qy.find(i=>i.slug===a);return o?{slug:o.slug,name:o.name,tagline:o.tagline,description:o.description,logo:o.logo,website:o.website,features:o.features,benefits:o.benefits,integrationHighlight:o.integrationHighlight,cta:{primary:{text:o.ctaPrimaryText,url:o.ctaPrimaryUrl},secondary:o.ctaSecondaryText?{text:o.ctaSecondaryText,url:o.ctaSecondaryUrl||""}:void 0},content:o.content,htmlContent:ye(o.content)}:null}const j2=()=>ee(()=>import("./index-BMCidiYI.js"),__vite__mapDeps([34,1])),O2=ne("/partner/")({component:J(j2,"component"),loader:()=>({partners:z2()}),head:()=>se({title:"Partners - Engine Awesome",description:"Discover our trusted partners and integrations that help you get more out of Engine Awesome.",pathname:"/partner/"})}),N2=()=>ee(()=>import("./_slug-DqrQhhaS.js"),__vite__mapDeps([35,1])),B2=()=>ee(()=>import("./_slug-DPklmk-U.js"),__vite__mapDeps([36,1,33,25])),L2=ne("/partner/$slug")({component:J(B2,"component"),loader:({params:a})=>{const o=M2(a.slug);if(!o)throw Go();return{partner:o}},head:({loaderData:a,params:o})=>se({title:`${a?.partner.name??"Partner"} - Engine Awesome Partner`,description:a?.partner.description??"",pathname:`/partner/${o.slug}/`}),notFoundComponent:J(N2,"notFoundComponent")}),D2=()=>ee(()=>import("./inperson-IB9-6hTI.js"),__vite__mapDeps([37,1])),P2=ne("/meet/inperson")({component:J(D2,"component"),head:()=>se({title:"Meet In Person - Engine Awesome",description:"Schedule an in-person meeting with the Engine Awesome team in NYC. Let us buy you a coffee and show you what we can do for your business.",pathname:"/meet/inperson/"})}),q2=()=>ee(()=>import("./call-X77Sy7mv.js"),__vite__mapDeps([38,1])),U2=ne("/meet/call")({component:J(q2,"component"),head:()=>se({title:"Let's Chat - Engine Awesome",description:"Schedule a Zoom call with the Engine Awesome team. We would love to show you what Engine Awesome can do for your business.",pathname:"/meet/call/"})}),H2=()=>ee(()=>import("./index-EjjPlq4Q.js"),__vite__mapDeps([39,1])),Y2=ne("/for/")({component:J(H2,"component"),head:()=>se({title:"Use Cases - Engine Awesome",description:"See how Engine Awesome helps property managers, agencies, non-profits, service companies, and more run their operations without spreadsheets.",pathname:"/for/"})}),I2=()=>ee(()=>import("./service-companies-B9xnnuJH.js"),__vite__mapDeps([40,1,7,25])),W2=ne("/for/service-companies")({component:J(I2,"component"),head:()=>({...se({title:"Engine Awesome for Service Companies | Jobs, Leads & Crew Management",description:"Engine Awesome gives service companies a configurable operations platform. Start from a template, customize it to your workflow, and add your whole team for one flat price. No per-seat fees.",pathname:"/for/service-companies/"}),scripts:[{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:[{"@type":"Question",name:"Can field technicians use it from their phone?",acceptedA
3156nswer:{"@type":"Answer",text:"Yes. Engine Awesome is web-based and works on any device. Techs can pull up their job list, update job status, add notes, and log completion from the field without needing a separate app."}},{"@type":"Question",name:"Can we track estimates alongside jobs?",acceptedAnswer:{"@type":"Answer",text:"Yes. You can build a pipeline that tracks leads from first contact through estimate sent, estimate approved, job scheduled, job completed, and invoiced — with the full history attached to each customer record."}},{"@type":"Question",name:"Can we manage recurring jobs like weekly lawn care or monthly cleaning?",acceptedAnswer:{"@type":"Answer",text:"Yes. You can set up recurring job records and schedule them however your business works — weekly, biweekly, monthly, or custom intervals — all tied to the right customer."}},{"@type":"Question",name:"Can office staff and field techs both use the same system?",acceptedAnswer:{"@type":"Answer",text:"Yes. Every user on your application is included — office staff, dispatchers, and field techs alike. You control what each role can see and do."}},{"@type":"Question",name:"What kinds of service businesses use Engine Awesome?",acceptedAnswer:{"@type":"Answer",text:"Lawn care, cleaning services, HVAC, plumbing, pest control, gutter cleaning, pool service, landscaping, and any other business that runs jobs, manages crews, and needs to track customers and work history."}}]})}]})}),F2=()=>ee(()=>import("./roofing-DIit6kXr.js"),__vite__mapDeps([41,1,7,25])),G2=ne("/for/roofing")({component:J(F2,"component"),head:()=>({...se({title:"Roofing Contractor Software | Engine Awesome",description:"Engine Awesome gives roofing contractors a configurable system for inspection records, insurance claim tracking, multi-site crew scheduling, and job costing. Start from a template, configure it to your workflow, and add your whole team for one flat price.",pathname:"/for/roofing/"}),scripts:[{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:[{"@type":"Question",name:"Can we manage insurance claims from inspection through final payment?",acceptedAnswer:{"@type":"Answer",text:"Yes. Each job record can track the full insurance claim lifecycle: claim number, adjuster contact, scope of loss, supplement requests, approval status, and payment received. Every document and communication is organized by job, not scattered across email."}},{"@type":"Question",name:"Can we schedule crews across multiple active job sites?",acceptedAnswer:{"@type":"Answer",text:"Yes. You can see all active job sites and crew assignments in one view. Schedule tear-off crews, installation crews, and inspectors across simultaneous projects and handle weather delays without losing track of where everyone needs to be."}},{"@type":"Question",name:"Can field crews and project managers update records from the job site?",acceptedAnswer:{"@type":"Answer",text:"Yes. Crew leads and project managers log in from their phone to update job status, log labor and materials, attach photos, and flag issues. The office sees changes in real time without phone calls."}},{"@type":"Question",name:"Can we track actual job costs versus our estimates?",acceptedAnswer:{"@type":"Answer",text:"Yes. Material deliveries, subcontractor costs, and labor hours are all tracked against the original estimate inside the job record. You know whether a job is running over while it is still open."}},{"@type":"Question",name:"Can I start from a template and customize it for our workflow?",acceptedAnswer:{"@type":"Answer",text:"Yes. You start with the roofing contractor template and configure it to match your inspection process, insurance claim workflow, crew scheduling, and job costing needs. Most teams are up and running within a day."}},{"@type":"Question",name:"What happens when we add crew leads or project managers? Do we pay more?",acceptedAnswer:{"@type":"Answer",text:"No. Engine Awesome pricing is per application, not per user. Every crew member, project manager, estimator, and office staff member is included for one flat price. Your bill does not change when your team grows."}}]})}]})}),Q2=()=>ee(()=>import("./property-management-Cxa76C4I.js"),__vite__mapDeps([42,1,7,25])),V2=ne("/for/property-management")({component:J(Q2,"component"),head:()=>({...se({title:"Property Management Software | Engine Awesome",description:"Engine Awesome gives property managers a configurable management system. Start from a template, customize it to your portfolio, and add your whole team for one flat price. No per-seat fees.",pathname:"/for/property-management/"}),scripts:[{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:[{"@type":"Question",name:"How do we track maintenance requests from tenants?",acceptedA
3156nswer:{"@type":"Answer",text:"Set up a public intake form that tenants submit when they have a request. Submissions land in your Engine Awesome workspace as new records, where your team picks them up and tracks the work to completion. Tenants do not log in. Updates back to tenants happen however your team currently communicates: email, SMS, or phone."}},{"@type":"Question",name:"Does it connect with our accounting software?",acceptedAnswer:{"@type":"Answer",text:"Engine Awesome connects to Zapier and Make, which together support hundreds of accounting platforms. The exact setup depends on which accounting product you use and what data you want to push. If you want help wiring it up, ask about White Glove Support."}},{"@type":"Question",name:"Can I store lease documents and attach them to tenant records?",acceptedAnswer:{"@type":"Answer",text:"Yes. Engine Awesome supports file uploads, so you can attach leases, inspection reports, insurance certificates, and any other documents directly to the relevant property or tenant record. Everything stays in one place."}},{"@type":"Question",name:"How many properties and units can I manage?",acceptedAnswer:{"@type":"Answer",text:"The Pro plan includes 50,000 records, enough for most portfolios. The Business plan includes 500,000 records for larger operations. Both plans include unlimited users."}},{"@type":"Question",name:"Can I customize the fields to match my lease structures?",acceptedAnswer:{"@type":"Answer",text:"Yes. Custom fields are unlimited on all paid plans. You can track lease start/end dates, rent amounts, security deposits, pet fees, parking assignments, and anything else your leases require."}}]})}]})}),$2=()=>ee(()=>import("./plumbers-ClNNMR3E.js"),__vite__mapDeps([43,1,7,25])),Z2=ne("/for/plumbers")({component:J($2,"component"),head:()=>({...se({title:"Plumbing Business Software | Engine Awesome",description:"Engine Awesome gives plumbing businesses a configurable job management system. Start from a template, customize it to your workflow, and add your whole crew for one flat price. No per-seat fees.",pathname:"/for/plumbers/"}),scripts:[{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:[{"@type":"Question",name:"Can we track service history and fixture notes per customer address?",acceptedAnswer:{"@type":"Answer",text:"Yes. Each customer record holds contact info, service address, fixture notes, pipe layout details, and a full history of past jobs. When a return customer calls, your dispatcher sees everything relevant before booking the job."}},{"@type":"Question",name:"Can we handle both emergency calls and scheduled appointments?",acceptedAnswer:{"@type":"Answer",text:"Yes. Emergency calls and scheduled appointments are both job records in the same system. You can slot emergency calls into the schedule without disrupting the rest of the day."}},{"@type":"Question",name:"Can plumbers update job records from their phone?",acceptedAnswer:{"@type":"Answer",text:"Yes. Plumbers log in from their phone, pull up the customer record and service history, and update the job with parts used, labor hours, photos, and notes when the work is done."}},{"@type":"Question",name:"How does billing record tracking work?",acceptedAnswer:{"@type":"Answer",text:"A billing record 
3156is built from the completed job, exported as a PDF, and sent to the customer. Payment status is tracked directly in the record: sent, paid, or overdue. You always know where each account stands."}},{"@type":"Question",name:"Do we pay more when we hire an apprentice or new plumber?",acceptedAnswer:{"@type":"Answer",text:"No. Engine Awesome is priced per application, not per user. Every plumber, apprentice, dispatcher, and office staff member is included for one flat price."}}]})}]})}),K2=()=>ee(()=>import("./pest-control-B7gq-rSL.js"),__vite__mapDeps([44,1,7,25])),X2=ne("/for/pest-control")({component:J(K2,"component"),head:()=>({...se({title:"Pest Control Business Software | Engine Awesome",description:"Engine Awesome gives pest control companies a configurable system for recurring routes, chemical application logs, service history, and billing. Start from a template, configure it to your workflow, and add your whole team for one flat price.",pathname:"/for/pest-control/"}),scripts:[{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:[{"@type":"Question",name:"Can technicians log chemical applications from the field?",acceptedAnswer:{"@type":"Answer",text:"Yes. Technicians complete application records from their phone at each stop: product name, EPA registration number, application rate, target pest, treatment area, and date. No paper forms to transcribe later."}},{"@type":"Question",name:"Can we build recurring routes for different service frequencies?",acceptedAnswer:{"@type":"Answer",text:"Yes. Accounts can be assigned to routes with monthly, quarterly, bi-annual, or custom frequencies. One-time treatments slot in without disrupting regular route schedules."}},{"@type":"Question",name:"Does it handle commercial accounts differently from residential?",acceptedAnswer:{"@type":"Answer",text:"Yes. You can set up separate record types and workflows for commercial and residential accounts. Commercial accounts often need more documentation and different approval chains, and you can configure that without affecting how residential records work."}},{"@type":"Question",name:"Can we export service and chemical records for compliance audits?",acceptedAnswer:{"@type":"Answer",text:"Yes. Service history, chemical application logs, and billing records are all searchable and exportable. When a commercial account or regulatory body asks for documentation, you have it organized and ready."}},{"@type":"Question",name:"Can I start from a template and customize it for our operation?",acceptedAnswer:{"@type":"Answer",text:"Yes. You start with the pest control template and configure it to match your route structure, chemical log fields, account types, and billing workflow. Most teams are running within a day."}},{"@type":"Question",name:"What happens when we add technicians during busy season? Do we pay more?",acceptedAnswer:{"@type":"Answer",text:"No. Engine Awesome pricing is per application, not per user. Every technician, dispatcher, and office staff member is included for one flat price. Your bill does not change when your team grows."}}]})}]})}),J2=()=>ee(()=>import("./non-profits-C7MEMA7P.js"),__vite__mapDeps([45,1,7,25])),eE=ne("/for/non-profits")({component:J(J2,"component"),head:()=>({...se({title:"Engine Awesome for Non-Profits | Donor & Volunteer Management",description:"Engine Awesome gives nonprofits a configurable donor and volunteer management system. Start from a template, customize it to your programs, and add your whole team for one flat price.",pathname:"/for/non-profits/"}),scripts:[{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:[{"@type":"Question",name:"Can we track donors and their full giving history?",acceptedAnswer:{"@type":"Answer",text:"Yes. Engine Awesome lets you configure a donor database with custom fields for contact info, giving history, campaign attribution, communication preferences, and any other data your organization tracks. Every interaction and gift is attached to the right donor record."}},{"@type":"Question",name:"Can volunteers use the system too?",acceptedA
3156nswer:{"@type":"Answer",text:"Yes. Every user on your application is included: staff, volunteers, and board members alike. You control what each role can see and do, so volunteers only access what they need."}},{"@type":"Question",name:"Can we track grant deadlines and reporting requirements?",acceptedAnswer:{"@type":"Answer",text:"Yes. You can configure a grant tracking system with fields for funder name, award amount, application deadlines, report due dates, and current status. Automated reminders can alert your team before a deadline arrives."}},{"@type":"Question",name:"How many donor records can we store?",acceptedAnswer:{"@type":"Answer",text:"The Pro plan includes 50,000 records and the Business plan includes 500,000, enough for most nonprofit donor databases. Both plans include unlimited users."}},{"@type":"Question",name:"Can board members see what they need without accessing everything?",acceptedAnswer:{"@type":"Answer",text:"Yes. Engine Awesome supports role-based permissions. Set up a read-only role that exposes only the records and fields you want board members to 
3156see (program outcomes, grant status, donor totals) and hide the rest. They log in to the same workspace as staff but see a different view."}}]})}]})}),tE=()=>ee(()=>import("./new-business-acquisitions-COAIOzno.js"),__vite__mapDeps([46,1,7,25])),nE=ne("/for/new-business-acquisitions")({component:J(tE,"component"),head:()=>({...se({title:"Software for Acquired Businesses | Engine Awesome",description:"Engine Awesome helps business acquirers replace inherited spreadsheets and disconnected systems with a unified, configurable app, fast and without traditional development costs. Start from a template, configure it to your operation, and get your team running in days.",pathname:"/for/new-business-acquisitions/"}),scripts:[{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:[{"@type":"Question",name:"How quickly can we replace the spreadsheets and get the team using something better?",acceptedAnswer:{"@type":"Answer",text:"Most acquirers are operational within a week. You start from a template closest to your business type, configure it to match how you want things to run, migrate data from the old spreadsheets, and get your team trained. White-glove service is available if you want the build handled for you."}},{"@type":"Question",name:"Do we need to hire developers to build this?",acceptedAnswer:{"@type":"Answer",text:"No. Engine Awesome is designed to be configured without code. You build the data structure, workflows, and views your business actually needs — without a development team or a six-figure budget."}},{"@type":"Question",name:"Can we migrate data from existing spreadsheets and legacy software?",acceptedAnswer:{"@type":"Answer",text:"Yes. Data can be imported directly from spreadsheets. If you have legacy software with export capability, that data can be brought in as well. Our team can assist with data migration as part of white-glove service."}},{"@type":"Question",name:"Can we get real-time visibility into what the business is actually doing?",acceptedAnswer:{"@type":"Answer",text:"Yes. Build operational dashboards that show exactly the metrics you need: jobs completed, revenue by period, customer counts, outstanding balances, or whatever KPIs matter for your specific business. No more waiting for someone to pull a spreadsheet report."}},{"@type":"Question",name:"We acquired a service business — is Engine Awesome a good fit?",acceptedAnswer:{"@type":"Answer",text:"Yes. Engine Awesome has templates for service businesses including HVAC, plumbing, landscaping, roofing, cleaning services, and more. If your acquisition is a service business, there is almost certainly a template that covers your core workflows."}},{"@type":"Question",name:"How does pricing work if we add or change staff post-acquisition?",acceptedAnswer:{"@type":"Answer",text:"Engine Awesome is priced per application, not per user. Your whole team is included for one flat price. Staff changes after the acquisition do not affect your bill."}}]})}]})}),aE=()=>ee(()=>import("./landscaping-BEeeNyxA.js"),__vite__mapDeps([47,1,7,25])),oE=ne("/for/landscaping")({component:J(aE,"component"),head:()=>se({title:"Custom CRM for Landscaping Companies - Engine Awesome",description:"A landscaping CRM you can make your own in minutes. Track jobs, customers, quotes, and crews. Flat fee, unlimited users, no code.",pathname:"/for/landscaping/"})}),iE=()=>ee(()=>import("./hvac-B93c_cBt.js"),__vite__mapDeps([48,1,7,25])),sE=ne("/for/hvac")({component:J(iE,"component"),head:()=>({...se({title:"HVAC Management Software | Engine Awesome",description:"Engine Awesome gives HVAC companies a configurable job management system. Start from a template, customize it to your workflow, and add your whole crew for one flat price. No per-seat fees.",pathname:"/for/hvac/"}),scripts:[{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:[{"@type":"Question",name:"Can technicians access job and equipment records from the field?",acceptedAnswer:{"@type":"Answer",text:"Yes. Technicians log in from their phone and see their assigned jobs, the full customer equipment history, and any notes from past visits. They can update job status, log parts and labor, and attach photos without calling the office."}},{"@type":"Question",name:"Can we track equipment history per customer across multiple visits?",acceptedA
3156nswer:{"@type":"Answer",text:"Yes. Each customer record can include equipment profiles with make, model, install date, and a full service history. Every job completed is attached to the equipment record automatically."}},{"@type":"Question",name:"How is this different from ServiceTitan for a small HVAC company?",acceptedAnswer:{"@type":"Answer",text:"ServiceTitan is built for large operations with enterprise features, financing modules, and per-seat pricing that scales against you as you grow. Engine Awesome starts from a template you configure to your workflow, includes your whole crew for one flat price, and does not charge you more when you hire a new tech."}},{"@type":"Question",name:"Can we manage both emergency calls and scheduled maintenance in the same system?",acceptedAnswer:{"@type":"Answer",text:"Yes. Emergency calls and scheduled maintenance visits are both job records in the same system. You assign techs, track status, and log outcomes the same way regardless of call type."}},{"@type":"Question",name:"What happens when we hire a new technician? Do we pay more?",acceptedAnswer:{"@type":"Answer",text:"No. Engine Awesome pricing is per application, not per user. Adding a new tech to your team costs $0. Your bill does not change when your crew grows."}}]})}]})}),rE=()=>ee(()=>import("./gutter-cleaning-Nqf97MMF.js"),__vite__mapDeps([49,1,7,25])),lE=ne("/for/gutter-cleaning")({component:J(rE,"component"),head:()=>({...se({title:"Gutter Cleaning Business Software | Engine Awesome",description:"Engine Awesome gives gutter cleaning businesses a configurable app for customer records, job scheduling, crew equipment checklists, photo documentation, and service history. Start from a template, configure it to your workflow, and add your whole crew for one flat price.",pathname:"/for/gutter-cleaning/"}),scripts:[{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:[{"@type":"Question",name:"Can crews access property access instructions and gate codes from their phone?",acceptedAnswer:{"@type":"Answer",text:"Yes. Every customer record holds the property address, access instructions, gate codes, known hazards, and notes from previous visits. Crews pull this up on their phone before arriving. No calls back to the office to ask for a gate code."}},{"@type":"Question",name:"Can we require equipment checklists before crews leave a job site?",acceptedAnswer:{"@type":"Answer",text:"Yes. Build a custom equipment checklist for your specific gear: ladders, blowers, buckets, tarps. Crews complete it on their phone before leaving each job. Every completed checklist is attached to the job record. No more tools left at a customer's property."}},{"@type":"Question",name:"Can crews attach before and after photos to job records?",acceptedAnswer:{"@type":"Answer",text:"Yes. Crews attach photos directly from their phone to the job record: gutter condition before, work in progress, and cleaned result. Customers who aren't home get documentation. Disputed jobs have a record."}},{"@type":"Question",name:"Can we manage the seasonal surge when everyone calls at once?",acceptedAnswer:{"@type":"Answer",text:"Yes. Jobs are queued, assigned, and tracked in one view. You can see your full job list, assign to available crews, handle weather rescheduling, and work through the surge without losing track of where things stand."}},{"@type":"Question",name:"Can I start from a template and customize it for our operation?",acceptedAnswer:{"@type":"Answer",text:"Yes. You start with the gutter cleaning template and configure it to match your equipment checklists, property record fields, scheduling approach, and billing workflow. Most businesses are up and running within a day."}},{"@type":"Question",name:"What happens when we add seasonal crew members? Do we pay more?",acceptedAnswer:{"@type":"Answer",text:"No. Engine Awesome pricing is per application, not per user. Every crew member and office staff member is included for one flat price. Your bill does not change when you bring on seasonal help."}}]})}]})}),cE=()=>ee(()=>import("./electricians-AS1TrRow.js"),__vite__mapDeps([50,1,7,25])),uE=ne("/for/electricians")({component:J(cE,"component"),head:()=>({...se({title:"Electrical Contractor Software | Engine Awesome",description:"Engine Awesome gives electrical contractors a configurable job management system. Start from a template, customize it to your workflow, and add your whole crew for one flat price. No per-seat fees.",pathname:"/for/electricians/"}),scripts:[{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:[{"@type":"Question",name:"Can electricians update job records from the field?",acceptedA
3156nswer:{"@type":"Answer",text:"Yes. Electricians and apprentices log in from their phone and see their assigned jobs, the customer and site history, and any notes from previous visits. They can log parts, labor hours, and photos without calling the office."}},{"@type":"Question",name:"Can we track permits and inspections per job?",acceptedAnswer:{"@type":"Answer",text:"Yes. Each job record can include permit numbers, inspection dates, inspector notes, and pass/fail status. Your project managers always know where each permit stands without digging through email."}},{"@type":"Question",name:"Can we manage both service calls and larger construction projects?",acceptedAnswer:{"@type":"Answer",text:"Yes. Residential service calls and commercial construction jobs are both job records in the same system. You can set up different fields and workflows for each job type so every record captures what matters for that kind of work."}},{"@type":"Question",name:"Can we see actual job costs versus our estimates?",acceptedAnswer:{"@type":"Answer",text:"Yes. Labor hours, material costs, and subcontractor expenses can all be tracked against the original estimate inside the job record. You know whether a job is running over before it closes."}},{"@type":"Question",name:"Can I start from a template and customize it for our workflow?",acceptedAnswer:{"@type":"Answer",text:"Yes. You start with the electrical contractor template and configure it to match your estimating process, crew scheduling, permit tracking, and job costing needs. Most teams are running within a day."}},{"@type":"Question",name:"What happens when we hire a new electrician or apprentice? Do we pay more?",acceptedAnswer:{"@type":"Answer",text:"No. Engine Awesome pricing is per application, not per user. Every electrician, apprentice, project manager, and office staff member is included for one flat price. Your bill does not change when your crew grows."}}]})}]})}),dE=()=>ee(()=>import("./dog-walking-ChzuviMP.js"),__vite__mapDeps([51,1,7,25])),hE=ne("/for/dog-walking")({component:J(dE,"component"),head:()=>({...se({title:"Dog Walking Business Software | Engine Awesome",description:"Engine Awesome gives dog walking businesses a configurable app for client records, pet profiles, walk scheduling, walk logs, and billing. Start from a template, configure it to your workflow, and add your whole team for one flat price.",pathname:"/for/dog-walking/"}),scripts:[{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:[{"@type":"Question",name:"Can walkers access pet profiles and care notes from their phone?",acceptedAnswer:{"@type":"Answer",text:"Yes. Every pet profile holds the feeding schedule, behavioral notes, training commands, vet information, and emergency contacts. Walkers pull this up on their phone before each job. When a new walker covers a client, they have everything, not just a name and an address."}},{"@type":"Question",name:"Can we manage both recurring walks and one-time bookings?",acceptedAnswer:{"@type":"Answer",text:"Yes. Recurring walks and one-time bookings are both job records in the same system. You assign walkers, track status, and log outcomes the same way for both."}},{"@type":"Question",name:"Can walkers submit walk logs and photos from the field?",acceptedAnswer:{"@type":"Answer",text:"Yes. Walkers fill in a walk log after each job: duration, route, notes, and anything unusual. They attach a photo directly from their phone. Every log is permanently attached to the pet and client record."}},{"@type":"Question",name:"Can we track the full walk history for each pet?",acceptedAnswer:{"@type":"Answer",text:"Yes. Every completed walk log is attached to the pet profile. You can pull the full service history for any pet or client instantly, searchable by date, walker, or notes."}},{"@type":"Question",name:"Can I start from a template and customize it for our business?",acceptedAnswer:{"@type":"Answer",text:"Yes. You start with the dog walking template and configure it to match your pet profile fields, walk log format, scheduling approach, and billing workflow. Most businesses are up and running within a day."}},{"@type":"Question",name:"What happens when we add new walkers? Do we pay more?",acceptedA
3156nswer:{"@type":"Answer",text:"No. Engine Awesome pricing is per application, not per user. Every walker, part-time help, and office staff member is included for one flat price. Your bill does not change when your team grows."}}]})}]})}),pE=()=>ee(()=>import("./cleaning-services-CKsq75zu.js"),__vite__mapDeps([52,1,7,25])),mE=ne("/for/cleaning-services")({component:J(pE,"component"),head:()=>({...se({title:"Cleaning Service Business Software | Engine Awesome",description:"Engine Awesome gives cleaning service businesses a configurable system for recurring schedules, client property records, team dispatch, quality checklists, and billing. Start from a template, configure it to your workflow, and add your whole team for one flat price.",pathname:"/for/cleaning-services/"}),scripts:[{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:[{"@type":"Question",name:"Can we manage recurring schedules for weekly, bi-weekly, and monthly clients?",acceptedAnswer:{"@type":"Answer",text:"Yes. Each client can have their own recurring schedule at whatever frequency you set. New appointments generate automatically, and one-time jobs slot in without disrupting the regular calendar."}},{"@type":"Question",name:"Can cleaners access client notes, access codes, and preferences from their phone?",acceptedAnswer:{"@type":"Answer",text:"Yes. Every client record holds the property address, access instructions, gate codes, pet notes, product preferences, and any other details your team needs before they arrive. Cleaners pull this up on their phone on the way to each job."}}
3156,{"@type":"Question",name:"Can we use quality checklists for each job?",acceptedAnswer:{"@type":"Answer",text:"Yes. Build customizable checklists for different job types: standard cleans, deep cleans, move-out cleans, commercial offices. Cleaners complete the checklist on their phone and attach before/after photos. Every completed checklist is part of the job record."}},{"@type":"Question",name:"Can we send billing records to clients after each visit?",acceptedAnswer:{"@type":"Answer",text:"Yes. Build a billing record from any completed job, export it as a PDF, and send it to the client. Track payment status per client so you always know what is outstanding."}},{"@type":"Question",name:"Can I start from a template and customize it for our business?",acceptedAnswer:{"@type":"Answer",text:"Yes. You start with the cleaning service template and configure it to match your scheduling approach, client record fields, checklist formats, and billing workflow. Most teams are up and running within a day."}},{"@type":"Question",name:"What happens when we hire new cleaners? Do we pay more?",acceptedAnswer:{"@type":"Answer",text:"No. Engine Awesome pricing is per application, not per user. Every cleaner, team lead, and office staff member is included for one flat price. Your bill does not change when your team grows."}}]})}]})}),fE=()=>ee(()=>import("./agencies-ITXaJyV9.js"),__vite__mapDeps([53,1,7,25])),gE=ne("/for/agencies")({component:J(fE,"component"),head:()=>({...se({title:"Engine Awesome for Agencies | Build Custom Apps for Clients",description:"Engine Awesome gives agencies a configurable app-building platform. Start from a template, customize it for each client, and add their whole team for one flat price. No per-seat fees.",pathname:"/for/agencies/"}),scripts:[{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:[{"@type":"Question",name:"Can I build apps for multiple clients from one Engine Awesome account?",acceptedAnswer:{"@type":"Answer",text:"Yes. Each client gets their own separate application with its own data, users, and settings. You manage everything from your agency account and can spin up a new client app in minutes."}},{"@type":"Question",name:"Can I white-label the apps I build for clients?",acceptedAnswer:{"@type":"Answer",text:"Yes. You can customize the branding: logo and colors, so the app looks like it belongs to your client. Custom domain names are also available. Talk to sales for details."}},{"@type":"Question",name:"Do clients need to pay Engine Awesome separately?",acceptedAnswer:{"@type":"Answer",text:"That depends on how you structure the engagement. Some agencies bill clients directly for the subscription as part of a retainer. Others handle the subscription themselves and include it in their service fee. Reach out and we can talk through what works for your model."}},{"@type":"Question",name:"How quickly can I deliver a custom app to a client?",acceptedAnswer:{"@type":"Answer",text:"A v1 can be up and running in minutes. You will likely fine-tune it over time, adding fields, adjusting views, tweaking workflows, but clients can be using a real, working app the same day."}},{"@type":"Question",name:"What kinds of apps can I build for clients?",acceptedAnswer:{"@type":"Answer",text:"Anything data-driven: CRMs, project trackers, lead pipelines, inventory systems, booking tools, intake forms, inspection workflows, custom dashboards. If it involves tracking and managing information, you can build it."}}]})}]})});function nC(){return Lr.map(o=>({slug:o.slug,title:o.title,excerpt:o.excerpt,headline:o.headline,description:o.description,icon:o.icon,benefits:o.benefits})).sort((o,i)=>{const r=Lr.find(p=>p.slug===o.slug),c=Lr.find(p=>p.slug===i.slug),d=new Date(r?.date||0).getTime();return new Date(c?.date||0).getTime()-d})}function yE(a){const o=Lr.find(i=>i.slug===a);return o?{slug:o.slug,title:o.title,excerpt:o.excerpt,date:o.date,headline:o.headline,description:o.description,icon:o.icon,benefits:o.benefits,content:o.content,htmlContent:ye(o.content)}:null}const wE=()=>ee(()=>import("./_slug-BSQxHWbG.js"),__vite__mapDeps([54,1])),bE=()=>ee(()=>import("./_slug-DvHyIusQ.js"),__vite__mapDeps([55,1,25,33])),vE=ne("/for/$slug")({component:J(bE,"component"),loader:({params:a})=>{const o=yE(a.slug);
3156if(!o)throw Go();return{usecase:o}},head:({loaderData:a,params:o})=>se({title:`${a?.usecase.title??"Use Case"} - Engine Awesome`,description:a?.usecase.description??"",pathname:`/for/${o.slug}/`}),notFoundComponent:J(wE,"notFoundComponent")}),SE=()=>ee(()=>import("./index-Ct6bdnRw.js"),__vite__mapDeps([56,1,21,30,6])),AE=ne("/blog/")({component:J(SE,"component"),loader:()=>({featuredPosts:l2(c2),categories:u2()}),head:()=>se({title:"Blog - Engine Awesome",description:"Stay up to date with the latest news, product updates, and tips for building better no-code applications.",pathname:"/blog/"})}),kE=()=>ee(()=>import("./_slug-B5XN-est.js"),__vite__mapDeps([57,1])),xE=()=>ee(()=>import("./_slug-BMNZCm64.js"),__vite__mapDeps([58,1,21,25,33])),EE=ne("/blog/$slug")({component:J(xE,"component"),loader:({params:a})=>{const o=r2(a.slug);if(!o)throw Go();return{post:o}},head:({loaderData:a,params:o})=>se({title:`${a?.post.title??"Blog"} - Engine Awesome`,description:a?.post.excerpt??"",pathname:`/blog/${o.slug}/`,type:"article"}),notFoundComponent:J(kE,"notFoundComponent")}),TE=()=>ee(()=>import("./index-DLZmNCy6.js"),__vite__mapDeps([59,1,6])),CE=ne("/about/")({component:J(TE,"component"),head:()=>se({title:"About Us - Engine Awesome",description:"Engine Awesome was established with a mission centered on making your company more efficient and your life easier.",pathname:"/about/"})}),_E=()=>ee(()=>import("./policies-DakYUSWe.js"),__vite__mapDeps([60,1])),RE=ne("/about/policies")({component:J(_E,"component")});function zE(){return Gy.map(o=>({slug:o.slug,title:o.title,description:o.description,lastUpdated:o.lastUpdated,icon:o.icon,order:o.order})).sort((o,i)=>{const r=o.order??999,c=i.order??999;return r!==c?r-c:o.title.localeCompare(i.title)})}function ME(a){const o=Gy.find(i=>i.slug===a);return o?{slug:o.slug,title:o.title,description:o.description,lastUpdated:o.lastUpdated,icon:o.icon,order:o.order,content:o.content,htmlContent:ye(o.content)}:null}const jE=()=>ee(()=>import("./index-tThTwh3p.js"),__vite__mapDeps([61,1,5,6])),OE=ne("/about/policies/")({component:J(jE,"component"),loader:()=>({policies:zE()}),head:()=>se({title:"Policies, Terms, and Legal - Engine Awesome",description:"We try to make all our policies as clear, fair, and readable as possible.",pathname:"/about/policies/"})}),NE=()=>ee(()=>import("./_slug-x4mbPSui.js"),__vite__mapDeps([62,1])),BE=()=>ee(()=>import("./_slug-BvzzrEkK.js"),__vite__mapDeps([63,1,33,25])),LE=ne("/about/policies/$slug")({component:J(BE,"component"),loader:({params:a})=>{const o=ME(a.slug);if(!o)throw Go();return{policy:o}},head:({loaderData:a,params:o})=>se({title:`${a?.policy.title??"Policy"} - Engine Awesome`,description:a?.policy.description??"",pathname:`/about/policies/${o.slug}/`}),notFoundComponent:J(NE,"notFoundComponent")}),DE=Wk.update({id:"/zapier",path:"/zapier",getParentRoute:()=>Ue}),PE=Gk.update({id:"/white-glove-service",path:"/white-glove-service",getParentRoute:()=>Ue}),_d=Vk.update({id:"/templates",path:"/templates",getParentRoute:()=>Ue}),qE=Zk.update({id:"/support",path:"/support",getParentRoute:()=>Ue}),UE=Xk.update({id:"/pricing",path:"/pricing",getParentRoute:()=>Ue}),Rd=ex.update({id:"/partner",path:"/partner",getParentRoute:()=>Ue}),zd=nx.update({id:"/meet",path:"/meet",getParentRoute:()=>Ue}),ct=ox.update({id:"/for",path:"/for",getParentRoute:()=>Ue}),HE=sx.update({id:"/features",path:"/features",getParentRoute:()=>Ue}),YE=ux.update({id:"/faq",path:"/faq",getParentRoute:()=>Ue}),IE=hx.update({id:"/demo-booked",path:"/demo-booked",getParentRoute:()=>Ue}),WE=mx.update({id:"/contact",path:"/contact",getParentRoute:()=>Ue}),Md=gx.update({id:"/blog",path:"/blog",getParentRoute:()=>Ue}),jd=wx.update({id:"/about",path:"/about",getParentRoute:()=>Ue}),FE=vx.update({id:"/$",path:"/$",getParentRoute:()=>Ue}),GE=h2.update({id:"/",path:"/",getParentRoute:()=>Ue}),QE=m2.update({id:"/solutions/",path:"/solutions/",getParentRoute:()=>Ue}),VE=g2.update({id:"/compare/",path:"/compare/",getParentRoute:()=>Ue}),$E=w2.update({id:"/solutions/custom-crm",path:"/solutions/custom-crm",getParentRoute:()=>Ue}),ZE=v2.update({id:"/compare/no-code-app-builders",path:"/compare/no-code-app-builders",getParentRoute:()=>Ue}),KE=A2.update({id:"/compare/custom-vs-off-the-shelf-crm",path:"/compare/custom-vs-off-the-shelf-crm",getParentRoute:()=>Ue}),XE=x2.update({id:"/compare/crm-pricing",path:"/compare/crm-pricing",getParentRoute:()=>Ue}),JE=T2.update({id:"/",path:"/",getParentRoute:()=>_d}),eT=R2.update({id:"/$slug",path:"/$slug",getParentRoute:()=>_d}),tT=O2.update({id:"/",path:"/",getParentRoute:()=>Rd}),nT=L2.update({id:"/$slug",path:"/$slug",getParentRoute:()=>Rd}),aT=P2.update({id:"/inperson",path:"/inperson",getParentRoute:()=>zd}),oT=U2.update({id:"/call",path:"/call",getParentRoute:()=>zd}),iT=Y2.update({id:"/",path:"/",getParentRoute:()=>ct}),sT=W2.update({id:"/service-companies",path:"/service-companies",getParentRoute:()=>ct}),rT=G2.update({id:"/roofing",path:"/roofing",getParentRoute:()=>ct}),lT=V2.update({id:"/property-management",path:"/property-management",getParentRoute:()=>ct}),cT=Z2.update({id:"/plumbers",path:"/plumbers",getParentRoute:()=>ct}),uT=X2.update({id:"/pest-control",path:"/pest-control",getParentRoute:()=>ct}),dT=eE.update({id:"/non-profits",path:"/non-profits",getParentRoute:()=>ct}),hT=nE.update({id:"/new-business-acquisitions",path:"/new-business-acquisitions",getParentRoute:()=>ct}),pT=oE.update({id:"/landscaping",path:"/landscaping",getParentRoute:()=>ct}),mT=sE.update({id:"/hvac",path:"/hvac",getParentRoute:()=>ct}),fT=lE.update({id:"/gutter-cleaning",path:"/gutter-cleaning",getParentRoute:()=>ct}),gT=uE.update({id:"/electricians",path:"/electricians",getParentRoute:()=>ct}),yT=hE.update({id:"/dog-walking",path:"/dog-walking",getParentRoute:()=>ct}),wT=mE.update({id:"/cleaning-services",path:"/cleaning-services",getParentRoute:()=>ct}),bT=gE.update({id:"/agencies",path:"/agencies",getParentRoute:()=>ct}),vT=vE.update({id:"/$slug",path:"/$slug",getParentRoute:()=>ct}),ST=AE.update({id:"/",path:"/",getParentRoute:()=>Md}),AT=EE.update({id:"/$slug",path:"/$slug",getParentRoute:()=>Md}),kT=CE.update({id:"/",path:"/",getParentRoute:()=>jd}),Od=RE.update({id:"/policies",path:"/policies",getParentRoute:()=>jd}),xT=OE.update({id:"/",path:"/",getParentRoute:()=>Od}),ET=LE.update({id:"/$slug",path:"/$slug",getParentRoute:()=>Od}),TT={AboutPoliciesSlugRoute:ET,AboutPoliciesIndexRoute:xT},CT=Od._addFileChildren(TT),_T={AboutPoliciesRoute:CT,AboutIndexRoute:kT},RT=jd._addFileChildren(_T),zT={BlogSlugRoute:AT,BlogIndexRoute:ST},MT=Md._addFileChildren(zT),jT={ForSlugRoute:vT,ForAgenciesRoute:bT,ForCleaningServicesRoute:wT,ForDogWalkingRoute:yT,ForElectriciansRoute:gT,ForGutterCleaningRoute:fT,ForHvacRoute:mT,ForLandscapingRoute:pT,ForNewBusinessAcquisitionsRoute:hT,ForNonProfitsRoute:dT,ForPestControlRoute:uT,ForPlumbersRoute:cT,ForPropertyManagementRoute:lT,ForRoofingRoute:rT,ForServiceCompaniesRoute:sT,ForIndexRoute:iT}
3156,OT=ct._addFileChildren(jT),NT={MeetCallRoute:oT,MeetInpersonRoute:aT},BT=zd._addFileChildren(NT),LT={PartnerSlugRoute:nT,PartnerIndexRoute:tT},DT=Rd._addFileChildren(LT),PT={TemplatesSlugRoute:eT,TemplatesIndexRoute:JE},qT=_d._addFileChildren(PT),UT={IndexRoute:GE,SplatRoute:FE,AboutRoute:RT,BlogRoute:MT,ContactRoute:WE,DemoBookedRoute:IE,FaqRoute:YE,FeaturesRoute:HE,ForRoute:OT,MeetRoute:BT,PartnerRoute:DT,PricingRoute:UE,SupportRoute:qE,TemplatesRoute:qT,WhiteGloveServiceRoute:PE,ZapierRoute:DE,CompareCrmPricingRoute:XE,CompareCustomVsOffTheShelfCrmRoute:KE,CompareNoCodeAppBuildersRoute:ZE,SolutionsCustomCrmRoute:$E,CompareIndexRoute:VE,SolutionsIndexRoute:QE},HT=Ue._addFileChildren(UT);let Qu;function YT(){return Qu||(Qu=XA({routeTree:HT,scrollRestoration:!0,scrollRestorationBehavior:"instant",defaultPreloadStaleTime:0,trailingSlash:"always"})),Qu}async function IT(){const a=await YT();let o;return o=[],window.__TSS_START_OPTIONS__={serializationAdapters:o},o.push(Ek),a.options.serializationAdapters&&o.push(...a.options.serializationAdapters),a.update({basepath:"",serializationAdapters:o}),a.state.matches.length||await lk(a),a}async function WT(){const a=await IT();return window.$_TSR?.h(),a}let Vu;function FT(){return Vu||(Vu=WT()),A.jsx(bA,{promise:Vu,children:a=>A.jsx(tk,{router:a})})}vv.hydrateRoot(document,A.jsx(FT,{}));export{Qi as A,rt as L,Ck as N,Ey as O,h2 as R,XT as S,JT as a,eC as b,KT as c,Fo as d,T2 as e,gd as f,Cd as g,yd as h,R2 as i,O2 as j,L2 as k,z2 as l,vE as m,nC as n,AE as o,tC as p,EE as q,jA as r,dl as s,OE as t,ll as u,LE as v,zE as w};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.