PageSourceSearch

https://www.cellaragrowth.co/assets/index-DJEByfrl.js

js cellaragrowth.co collected 2026-10-09 21:32:17 UTC 1,058,187 bytes, 22 lines download raw bytes

vendor: 34,257 bytes, lines 1-9
1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DemoAiWidget-BRAry02N.js","assets/react-0T9Avz-T.js","assets/ExitIntentModal-uKdEzJWQ.js","assets/jsx-runtime-BRYeo4JD.js","assets/proxy-OIjLakdB.js","assets/AnimatePresence-DKkerrgW.js","assets/arrow-right-pXu0mZxN.js","assets/types-DKSnJpxg.js","assets/button-BHVWWpZJ.js","assets/dist-bi65YP1V.js","assets/utils-B6KiDbIe.js","assets/input-B1QiroVS.js","assets/sms-consent-Burclw9l.js","assets/checkbox-Dq5H8GhW.js","assets/dist-DVU25seG.js","assets/check-B4p5H3XQ.js","assets/label-BIXWeD1n.js","assets/lead-capture.functions-3j0WI9AB.js","assets/NotFound-DHiAWvNi.js","assets/router-compat-CcbgDyKk.js","assets/useStore-J4ZGx9_z.js","assets/invariant-DEEwAagU.js","assets/link-Dw5f262_.js","assets/react-dom-CYA6wvPF.js","assets/useParams-B1G1x4s5.js","assets/useMatch-DjzgP8kG.js","assets/matchContext-Bw5GDCfW.js","assets/useNavigate-D-lWVtZh.js","assets/routes-DAFRVMvV.js","assets/use-reduced-motion-CS2OZ7bQ.js","assets/Layout-D7zrtJ1h.js","assets/chevron-down-BYP2Mj57.js","assets/chevron-right-B18pr_Gx.js","assets/CtaButtons-CJAEwEBr.js","assets/message-square-Ds21R_gc.js","assets/refresh-cw-BTyc4Cxe.js","assets/Seo-B6BadmQc.js","assets/usePageTracker-DpWOyu_p.js","assets/RoiEstimator-U-roVH4C.js","assets/roi-estimator-AYGC_B1U.js","assets/EditorialImage-C42dCLEq.js","assets/about-DHeWFYbW.js","assets/accessibility-UXI0qk4L.js","assets/after-launch-BbyB6pLi.js","assets/circle-check-BMBSGawj.js","assets/ai-front-desk-DXuNNMwZ.js","assets/ServiceEstimator-sju73X9J.js","assets/loader-circle-CypY6w-c.js","assets/lock-CVt76Ux3.js","assets/dist-CdavmC8-.js","assets/dist-DuomvAfl.js","assets/auth-DlbW_OgF.js","assets/card-trlAbsdA.js","assets/case-studies-CAY--rRV.js","assets/cellara-launch-C1X8ncIR.js","assets/connected-revenue-system-DHjZ2l_6.js","assets/contact-CKnQv0uD.js","assets/select-BXZi2SnJ.js","assets/tslib.es6-Tae09705.js","assets/dist-CFghtihQ.js","assets/textarea-8N0WuIZH.js","assets/faq-BDgOeX9n.js","assets/fractional-growth-operations-CESxrZ6s.js","assets/growth-advisory-BqjOWdSw.js","assets/growth-gap-D1Zvlxla.js","assets/useServerFn-Bi-MvYDK.js","assets/redirect-DCb_aIiF.js","assets/arrow-left-DbLSsoqY.js","assets/economics-Bzyi0DsE.js","assets/growth-systems-B0AZDyo-.js","assets/pricing-CPoLuW-V.js","assets/growth-systems-GWdqRVA_.js","assets/high-performance-websites-Dm7wMXPW.js","assets/how-we-work-BmiBwp5u.js","assets/launch-partner-program-C1X8ncIR.js","assets/paid-growth-COWVf0V5.js","assets/paid-growth-fit-CbrKNVtJ.js","assets/pricing-DqdFxqE2.js","assets/privacy-CRczGsyD.js","assets/reputation-growth-DZ-IT7Wl.js","assets/revenue-operations-D7kiXENT.js","assets/revenue-operations-reset-Be_b5smy.js","assets/seo-geo-B18zeAKw.js","assets/solutions-CqqHPGTN.js","assets/terms-DvSWbJXf.js","assets/analytics-Bag2gdT2.js","assets/calendar-xIpSXmbd.js","assets/table-BPnNRIEB.js","assets/leads-DD_Hg5ZM.js","assets/copy-BXqUuAxz.js","assets/assessments.index-CWpQJmgV.js","assets/assessments.estimate-return-vCdSZSL-.js","assets/assessments.growth-gap-dWRaq6hT.js","assets/AssessmentLanding-Bi5VUJBr.js","assets/assessments.paid-growth-fit-CVdn2EYD.js","assets/cellara-launch.index-Ba6Am5UP.js","assets/launch-offer-DJKh322a.js","assets/accordion-5Bc3PNFY.js","assets/cellara-launch.checkout-bIni53KQ.js","assets/react-stripe.esm-Unu5q_yJ.js","assets/CheckoutHeader-DgPgO12p.js","assets/stripe-DdbMnNiY.js","assets/cellara-launch.functions-S30-3BmT.js","assets/cellara-launch.questionnaire-DH-5wAtJ.js","assets/cellara-launch.thank-you-DxVAN07h.js","assets/_offer-Puh2wp6c.js","assets/checkout.functions-DjthA4uG.js","assets/return-C1SHv7Qs.js","assets/route-Dv_mU_nV.js","assets/root-DLTE-HSj.js","assets/useLoaderData-atny6rNM.js","assets/useSearch-DvschG6t.js","assets/industries-n81KgxDd.js","assets/arrow-up-right-DyqELKAZ.js","assets/accounting-firms-CtnJ6gT7.js","assets/advisory-firms-CtCUI2ar.js","assets/beauty-wellness-BM8xwvui.js","assets/healthcare-aesthetics-DGn47Nxr.js","assets/home-services-SA1XUSya.js","assets/legal-services-D1ZWAAyL.js","assets/rental-companies-2Z2wCgHU.js","assets/insights-AfYSJnzm.js","assets/clock-Cpw3vVey.js","assets/_slug-D2GH9rm7.js","assets/launch-partner-program.index-BPOaYHbY.js","assets/launch-t6D5fuSo.js","assets/launch-checkout.functions-4nOq_QBk.js","assets/launch-partner-program.playbook-thank-you-os9c7Rdh.js","assets/message-square-text-CheUh2TP.js","assets/launch-partner-program.thank-you-DtpE3wlu.js","assets/_._lovable.oauth.consent-DhT0a6-_.js","assets/_._lovable.oauth.consent-CXRKhIGT.js"])))=>i.map(i=>d[i]);
2import{a as e,i as t,n,o as r,r as i,t as a}from"./react-0T9Avz-T.js";import{t as o}from"./react-dom-CYA6wvPF.js";import{A as s,B as c,C as l,D as u,E as d,F as f,H as p,I as m,L as h,M as g,N as _,O as v,P as y,R as b,S as x,T as S,V as C,_ as w,a as T,b as E,d as ee,f as D,h as te,i as ne,j as re,k as ie,l as ae,m as oe,n as O,o as k,r as se,t as ce,u as le,v as ue,w as de,x as fe,z as pe}from"./useStore-J4ZGx9_z.js";import{t as me}from"./invariant-DEEwAagU.js";import{i as he,n as ge,r as _e,t as ve}from"./redirect-DCb_aIiF.js";import{t as ye}from"./root-DLTE-HSj.js";import{n as be,t as xe}from"./route-Dv_mU_nV.js";import{t as Se}from"./jsx-runtime-BRYeo4JD.js";import{n as Ce}from"./matchContext-Bw5GDCfW.js";import{n as we}from"./useMatch-DjzgP8kG.js";import{n as Te,r as Ee}from"./tslib.es6-Tae09705.js";import{a as De,i as Oe,n as ke,r as Ae,t as je}from"./dist-DVU25seG.js";import{a as Me,i as Ne,r as Pe,t as Fe}from"./dist-bi65YP1V.js";import{t as Ie}from"./utils-B6KiDbIe.js";import{n as A,r as Le}from"./pricing-CPoLuW-V.js";var Re=n((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0<n;){var r=n-1>>>1,a=e[r];if(0<i(a,t))e[r]=t,e[n]=a,n=r;else break a}}function n(e){return e.length===0?null:e[0]}function r(e){if(e.length===0)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;a:for(var r=0,a=e.length,o=a>>>1;r<o;){var s=2*(r+1)-1,c=e[s],l=s+1,u=e[l];if(0>i(c,n))l<a&&0>i(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(l<a&&0>i(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m)if(n(c)!==null)m=!0,S||(S=!0,D());else{var t=n(l);t!==null&&re(x,t.startTime-e)}}var S=!1,C=-1,w=5,T=-1;function E(){return g?!0:!(e.unstable_now()-T<w)}function ee(){if(g=!1,S){var t=e.unstable_now();T=t;var i=!0;try{a:{m=!1,h&&(h=!1,v(C),C=-1),p=!0;var a=f;try{b:{for(b(t),d=n(c);d!==null&&!(d.expirationTime>t&&E());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&re(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}}}finally{i?D():S=!1}}}var D;if(typeof y==`function`)D=function(){y(ee)};else if(typeof MessageChannel<`u`){var te=new MessageChannel,ne=te.port2;te.port1.onmessage=ee,D=function(){ne.postMessage(null)}}else D=function(){_(ee,0)};function re(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125<e?console.error(`forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported`):w=0<e?Math.floor(1e3/e):5},e.unstable_getCurrentPriorityLevel=function(){return f},e.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},e.unstable_requestPaint=function(){g=!0},e.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},e.unstable_scheduleCallback=function(r,i,a){var o=e.unstable_now();switch(typeof a==`object`&&a?(a=a.delay,a=typeof a==`number`&&0<a?o+a:o):a=o,r){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return s=a+s,r={id:u++,callback:i,priorityLevel:r,startTime:a,expirationTime:s,sortIndex:-1},a>o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,re(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,D()))),r},e.unstable_shouldYield=E,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),ze=n(((e,t)=>{t.exports=Re()})),Be=n((e=>{var t=ze(),n=a(),r=o();function i(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 s(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function c(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do t=e,t.flags&4098&&(n=t.return),e=t.return;while(e)}return t.tag===3?n:null}function l(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 u(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 d(e){if(c(e)!==e)throw Error(i(188))}function f(e){var t=e.alternate;if(!t){if(t=c(e),t===null)throw Error(i(188));return t===e?e:null}for(var n=e,r=t;;){var a=n.return;if(a===null)break;var o=a.alternate;if(o===null){if(r=a.return,r!==null){n=r;continue}break}if(a.child===o.child){for(o=a.child;o;){if(o===n)return d(a),e;if(o===r)return d(a),t;o=o.sibling}throw Error(i(188))}if(n.return!==r.return)n=a,r=o;else{for(var s=!1,l=a.child;l;){if(l===n){s=!0,n=a,r=o;break}if(l===r){s=!0,r=a,n=o;break}l=l.sibling}if(!s){for(l=o.child;l;){if(l===n){s=!0,n=o,r=a;break}if(l===r){s=!0,r=o,n=a;break}l=l.sibling}if(!s)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(n.tag!==3)throw Error(i(188));return n.stateNode.current===n?e:t}function p(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e;for(e=e.child;e!==null;){if(t=p(e),t!==null)return t;e=e.sibling}return null}var m=Object.assign,h=Symbol.for(`react.element`),g=Symbol.for(`react.transitional.element`),_=Symbol.for(`react.portal`),v=Symbol.for(`react.fragment`),y=Symbol.for(`react.strict_mode`),b=Symbol.for(`react.profiler`),x=Symbol.for(`react.consumer`),S=Symbol.for(`react.context`),C=Symbol.for(`react.forward_ref`),w=Symbol.for(`react.suspense`),T=Symbol.for(`react.suspense_list`),E=Symbol.for(`react.memo`),ee=Symbol.for(`react.lazy`),D=Symbol.for(`react.activity`),te=Symbol.for(`react.memo_cache_sentinel`),ne=Symbol.iterator;function re(e){return typeof e!=`object`||!e?null:(e=ne&&e[ne]||e[`@@iterator`],typeof e==`function`?e:null)}var ie=Symbol.for(`react.client.reference`);function ae(e){if(e==null)return null;if(typeof e==`function`)return e.$$typeof===ie?null:e.displayName||e.name||null;if(typeof e==`string`)return e;switch(e){case v:return`Fragment`;case b:return`Profiler`;case y:return`StrictMode`;case w:return`Suspense`;case T:return`SuspenseList`;case D:return`Activity`}if(typeof e==`object`)switch(e.$$typeof){case _:return`Portal`;case S:return e.displayName||`Context`;case x:return(e._context.displayName||`Context`)+`.Consumer`;case C:var t=e.render;return e=e.displayName,e||=(e=t.displayName||t.name||``,e===``?`ForwardRef`:`ForwardRef(`+e+`)`),e;case E:return t=e.displayName||null,t===null?ae(e.type)||`Memo`:t;case ee:t=e._payload,e=e._init;try{return ae(e(t))}catch{}}return null}var oe=Array.isArray,O=n.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,k=r.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,se={pending:!1,data:null,method:null,action:null},ce=[],le=-1;function ue(e){return{current:e}}function de(e){0>le||(e.current=ce[le],ce[le]=null,le--)}function fe(e,t){le++,ce[le]=e.current,e.current=t}var pe=ue(null),me=ue(null),he=ue(null),ge=ue(null);function _e(e,t){switch(fe(he,t),fe(me,e),fe(pe,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Jd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Jd(t),e=Yd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}de(pe),fe(pe,e)}function ve(){de(pe),de(me),de(he)}function ye(e){e.memoizedState!==null&&fe(ge,e);var t=pe.current,n=Yd(t,e.type);t!==n&&(fe(me,e),fe(pe,n))}function be(e){me.current===e&&(de(pe),de(me)),ge.current===e&&(de(ge),ip._currentValue=se)}var xe,Se;function Ce(e){if(xe===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);xe=t&&t[1]||``,Se=-1<e.stack.indexOf(`
3    at`)?` (<anonymous>)`:-1<e.stack.indexOf(`@`)?`@unknown:0:0`:``}return`
4`+xe+e+Se}var we=!1;function Te(e,t){if(!e||we)return``;we=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var r={DetermineComponentFrameRoot:function(){try{if(t){var n=function(){throw Error()};if(Object.defineProperty(n.prototype,"props",{set:function(){throw Error()}}),typeof Reflect==`object`&&Reflect.construct){try{Reflect.construct(n,[])}catch(e){var r=e}Reflect.construct(e,[],n)}else{try{n.call()}catch(e){r=e}e.call(n.prototype)}}else{try{throw Error()}catch(e){r=e}(n=e())&&typeof n.catch==`function`&&n.catch(function(){})}}catch(e){if(e&&r&&typeof e.stack==`string`)return[e.stack,r.stack]}return[null,null]}};r.DetermineComponentFrameRoot.displayName=`DetermineComponentFrameRoot`;var i=Object.getOwnPropertyDescriptor(r.DetermineComponentFrameRoot,`name`);i&&i.configurable&&Object.defineProperty(r.DetermineComponentFrameRoot,"name",{value:`DetermineComponentFrameRoot`});var a=r.DetermineComponentFrameRoot(),o=a[0],s=a[1];if(o&&s){var c=o.split(`
5`),l=s.split(`
6`);for(i=r=0;r<c.length&&!c[r].includes(`DetermineComponentFrameRoot`);)r++;for(;i<l.length&&!l[i].includes(`DetermineComponentFrameRoot`);)i++;if(r===c.length||i===l.length)for(r=c.length-1,i=l.length-1;1<=r&&0<=i&&c[r]!==l[i];)i--;for(;1<=r&&0<=i;r--,i--)if(c[r]!==l[i]){if(r!==1||i!==1)do if(r--,i--,0>i||c[r]!==l[i]){var u=`
7`+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(`<anonymous>`)&&(u=u.replace(`<anonymous>`,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{we=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?Ce(n):``}function Ee(e,t){switch(e.tag){case 26:case 27:case 5:return Ce(e.type);case 16:return Ce(`Lazy`);case 13:return e.child!==t&&t!==null?Ce(`Suspense Fallback`):Ce(`Suspense`);case 19:return Ce(`SuspenseList`);case 0:case 15:return Te(e.type,!1);case 11:return Te(e.type.render,!1);case 1:return Te(e.type,!0);case 31:return Ce(`Activity`);default:return``}}function De(e){try{var t=``,n=null;do t+=Ee(e,n),n=e,e=e.return;while(e);return t}catch(e){return`
8Error generating stack: `+e.message+`
9`+e.stack}}var Oe=Object.prototype.hasOwnProperty,ke=t.unstable_scheduleCallback,Ae=t.unstable_cancelCallback,je=t.unstable_shouldYield,Me=t.unstable_requestPaint,Ne=t.unstable_now,Pe=t.unstable_getCurrentPriorityLevel,Fe=t.unstable_ImmediatePriority,Ie=t.unstable_UserBlockingPriority,A=t.unstable_NormalPriority,Le=t.unstable_LowPriority,Re=t.unstable_IdlePriority,Be=t.log,Ve=t.unstable_setDisableYieldValue,He=null,Ue=null;function We(e){if(typeof Be==`function`&&Ve(e),Ue&&typeof Ue.setStrictMode==`function`)try{Ue.setStrictMode(He,e)}catch{}}var Ge=Math.clz32?Math.clz32:Je,Ke=Math.log,qe=Math.LN2;function Je(e){return e>>>=0,e===0?32:31-(Ke(e)/qe|0)|0}var Ye=256,Xe=262144,Ze=4194304;function Qe(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 $e(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=Qe(n))):i=Qe(o):i=Qe(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=Qe(n))):i=Qe(o)):i=Qe(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function et(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function tt(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 nt(){var e=Ze;return Ze<<=1,!(Ze&62914560)&&(Ze=4194304),e}function rt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function it(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function at(e,t,n,r,i,a){var o=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 s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0<n;){var u=31-Ge(n),d=1<<u;s[u]=0,c[u]=-1;var f=l[u];if(f!==null)for(l[u]=null,u=0;u<f.length;u++){var p=f[u];p!==null&&(p.lane&=-536870913)}n&=~d}r!==0&&ot(e,r,0),a!==0&&i===0&&e.tag!==0&&(e.suspendedLanes|=a&~(o&~t))}function ot(e,t,n){e.pendingLanes|=t,e.suspendedLanes&=~t;var r=31-Ge(t);e.entangledLanes|=t,e.entanglements[r]=e.entanglements[r]|1073741824|n&261930}function st(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-Ge(n),i=1<<r;i&t|e[r]&t&&(e[r]|=t),n&=~i}}function ct(e,t){var n=t&-t;return n=n&42?1:lt(n),(n&(e.suspendedLanes|t))===0?n:0}function lt(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 ut(e){return e&=-e,2<e?8<e?e&134217727?32:268435456:8:2}function dt(){var e=k.p;return e===0?(e=window.event,e===void 0?32:yp(e.type)):e}function ft(e,t){var n=k.p;try{return k.p=e,t()}finally{k.p=n}}var pt=Math.random().toString(36).slice(2),mt=`__reactFiber$`+pt,ht=`__reactProps$`+pt,gt=`__reactContainer$`+pt,_t=`__reactEvents$`+pt,vt=`__reactListeners$`+pt,yt=`__reactHandles$`+pt,bt=`__reactResources$`+pt,xt=`__reactMarker$`+pt;function St(e){delete e[mt],delete e[ht],delete e[_t],delete e[vt],delete e[yt]}function Ct(e){var t=e[mt];if(t)return t;for(var n=e.parentNode;n;){if(t=n[gt]||n[mt]){if(n=t.alternate,t.child!==null||n!==null&&n.child!==null)for(e=vf(e);e!==null;){if(n=e[mt])return n;e=vf(e)}return t}e=n,n=e.parentNode}return null}function wt(e){if(e=e[mt]||e[gt]){var t=e.tag;if(t===5||t===6||t===13||t===31||t===26||t===27||t===3)return e}return null}function Tt(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e.stateNode;throw Error(i(33))}function Et(e){var t=e[bt];return t||=e[bt]={hoistableStyles:new Map,hoistableScripts:new Map},t}function Dt(e){e[xt]=!0}var Ot=new Set,kt={};function At(e,t){jt(e,t),jt(e+`Capture`,t)}function jt(e,t){for(kt[e]=t,e=0;e<t.length;e++)Ot.add(t[e])}var Mt=RegExp(`^[: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][: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]*$`),Nt={},Pt={};function Ft(e){return Oe.call(Pt,e)?!0:Oe.call(Nt,e)?!1:Mt.test(e)?Pt[e]=!0:(Nt[e]=!0,!1)}function It(e,t,n){if(Ft(t))if(n===null)e.removeAttribute(t);else{switch(typeof n){case`undefined`:case`function`:case`symbol`:e.removeAttribute(t);return;case`boolean`:var r=t.toLowerCase().slice(0,5);if(r!==`data-`&&r!==`aria-`){e.removeAttribute(t);return}}e.setAttribute(t,``+n)}}function Lt(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 Rt(e,t,n,r){if(r===null)e.removeAttribute(n);else{switch(typeof r){case`undefined`:case`function`:case`symbol`:case`boolean`:e.removeAttribute(n);return}e.setAttributeNS(t,n,``+r)}}function zt(e){switch(typeof e){case`bigint`:case`boolean`:case`number`:case`string`:case`undefined`:return e;case`object`:return e;default:return``}}function Bt(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()===`input`&&(t===`checkbox`||t===`radio`)}function Vt(e,t,n){var r=Object.getOwnPropertyDescriptor(e.constructor.prototype,t);if(!e.hasOwnProperty(t)&&r!==void 0&&typeof r.get==`function`&&typeof r.set==`function`){var i=r.get,a=r.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(e){n=``+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:r.enumerable}),{getValue:function(){return n},setValue:function(e){n=``+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Ht(e){if(!e._valueTracker){var t=Bt(e)?`checked`:`value`;e._valueTracker=Vt(e,t,``+e[t])}}function Ut(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r=``;return e&&(r=Bt(e)?e.checked?`true`:`false`:e.value),e=r,e!==n&&(t.setValue(e),!0)}function Wt(e){if(e||=typeof document<`u`?document:void 0,e===void 0)return null;try{return e.activeElement||e.body}catch{return e.body}}var Gt=/[\n"\\]/g;function Kt(e){return e.replace(Gt,function(e){return`\\`+e.charCodeAt(0).toString(16)+` `})}function qt(e,t,n,r,i,a,o,s){e.name=``,o!=null&&typeof o!=`function`&&typeof o!=`symbol`&&typeof o!=`boolean`?e.type=o:e.removeAttribute(`type`),t==null?o!==`submit`&&o!==`reset`||e.removeAttribute(`value`):o===`number`?(t===0&&e.value===``||e.value!=t)&&(e.value=``+zt(t)):e.value!==``+zt(t)&&(e.value=``+zt(t)),t==null?n==null?r!=null&&e.removeAttribute(`value`):Yt(e,o,zt(n)):Yt(e,o,zt(t)),i==null&&a!=null&&(e.defaultChecked=!!a),i!=null&&(e.checked=i&&typeof i!=`function`&&typeof i!=`symbol`),s!=null&&typeof s!=`function`&&typeof s!=`symbol`&&typeof s!=`boolean`?e.name=``+zt(s):e.removeAttribute(`name`)}function Jt(e,t,n,r,i,a,o,s){if(a!=null&&typeof a!=`function`&&typeof a!=`symbol`&&typeof a!=`boolean`&&(e.type=a),t!=null||n!=null){if(!(a!==`submit`&&a!==`reset`||t!=null)){Ht(e);return}n=n==null?``:``+zt(n),t=t==null?n:``+zt(t),s||t===e.value||(e.value=t),e.defaultValue=t}r??=i,r=typeof r!=`function`&&typeof r!=`symbol`&&!!r,e.checked=s?e.checked:!!r,e.defaultChecked=!!r,o!=null&&typeof o!=`function`&&typeof o!=`symbol`&&typeof o!=`boolean`&&(e.name=o),Ht(e)}function Yt(e,t,n){t===`number`&&Wt(e.ownerDocument)===e||e.defaultValue===``+n||(e.defaultValue=``+n)}function Xt(e,t,n,r){if(e=e.options,t){t={};for(var i=0;i<n.length;i++)t[`$`+n[i]]=!0;for(n=0;n<e.length;n++)i=t.hasOwnProperty(`$`+e[n].value),e[n].selected!==i&&(e[n].selected=i),i&&r&&(e[n].defaultSelected=!0)}else{for(n=``+zt(n),t=null,i=0;i<e.length;i++){if(e[i].value===n){e[i].selected=!0,r&&(e[i].defaultSelected=!0);return}t!==null||e[i].disabled||(t=e[i])}t!==null&&(t.selected=!0)}}function Zt(e,t,n){if(t!=null&&(t=``+zt(t),t!==e.value&&(e.value=t),n==null)){e.defaultValue!==t&&(e.defaultValue=t);return}e.defaultValue=n==null?``:``+zt(n)}function Qt(e,t,n,r){if(t==null){if(r!=null){if(n!=null)throw Error(i(92));if(oe(r)){if(1<r.length)throw Error(i(93));r=r[0]}n=r}n??=``,t=n}n=zt(t),e.defaultValue=n,r=e.textContent,r===n&&r!==``&&r!==null&&(e.value=r),Ht(e)}function $t(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var en=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 tn(e,t,n){var r=t.indexOf(`--`)===0;n==null||typeof n==`boolean`||n===``?r?e.setProperty(t,``):t===`float`?e.cssFloat=``:e[t]=``:r?e.setProperty(t,n):typeof n!=`number`||n===0||en.has(t)?t===`float`?e.cssFloat=n:e[t]=(``+n).trim():e[t]=n+`px`}function nn(e,t,n){if(t!=null&&typeof t!=`object`)throw Error(i(62));if(e=e.style,n!=null){for(var r in n)!n.hasOwnProperty(r)||t!=null&&t.hasOwnProperty(r)||(r.indexOf(`--`)===0?e.setProperty(r,``):r===`float`?e.cssFloat=``:e[r]=``);for(var a in t)r=t[a],t.hasOwnProperty(a)&&n[a]!==r&&tn(e,a,r)}else for(var o in t)t.hasOwnProperty(o)&&tn(e,o,t[o])}function rn(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 an=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-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`]]),on=/^[\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 sn(e){return on.test(``+e)?`javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')`:e}function cn(){}var ln=null;function un(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var dn=null,fn=null;function pn(e){var t=wt(e);if(t&&(e=t.stateNode)){var n=e[ht]||null;a:switch(e=t.stateNode,t.type){case`input`:if(qt(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="`+Kt(``+t)+`"][type="radio"]`),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var a=r[ht]||null;if(!a)throw Error(i(90));qt(r,a.value,a.defaultValue,a.defaultValue,a.checked,a.defaultChecked,a.type,a.name)}}for(t=0;t<n.length;t++)r=n[t],r.form===e.form&&Ut(r)}break a;case`textarea`:Zt(e,n.value,n.defaultValue);break a;case`select`:t=n.value,t!=null&&Xt(e,!!n.multiple,t,!1)}}}var mn=!1;function hn(e,t,n){if(mn)return e(t,n);mn=!0;try{return e(t)}finally{if(mn=!1,(dn!==null||fn!==null)&&(Ou(),dn&&(t=dn,e=fn,fn=dn=null,pn(t),e)))for(t=0;t<e.length;t++)pn(e[t])}}function gn(e,t){var n=e.stateNode;if(n===null)return null;var r=n[ht]||null;if(r===null)return null;n=r[t];a:switch(t){case`onClick`:case`onClickCapture`:case`onDoubleClick`:case`onDoubleClickCapture`:case`onMouseDown`:case`onMouseDownCapture`:case`onMouseMove`:case`onMouseMoveCapture`:case`onMouseUp`:case`onMouseUpCapture`:case`onMouseEnter`:(r=!r.disabled)||(e=e.type,r=e!==`button`&&e!==`input`&&e!==`select`&&e!==`textarea`),e=!r;break a;default:e=!1}if(e)return null;if(n&&typeof n!=`function`)throw Error(i(231,t,typeof n));return n}var _n=!(typeof window>`u`||window.document===void 0||window.document.createElement===void 0),vn=!1;if(_n)try{var yn={};Object.defineProperty(yn,"passive",{get:function(){vn=!0}}),window.addEventListener(`test`,yn,yn),window.removeEventListener(`test`,yn,yn)}catch{vn=!1}var bn=null,xn=null,Sn=null;function Cn(){if(Sn)return Sn;var e,t=xn,n=t.length,r,i=`value`in bn?bn.value:bn.textContent,a=i.length;for(e=0;e<n&&t[e]===i[e];e++);var o=n-e;for(r=1;r<=o&&t[n-r]===i[a-r];r++);return Sn=i.slice(e,1<r?1-r:void 0)}function wn(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 Tn(){return!0}function En(){return!1}function Dn(e){function t(t,n,r,i,a){for(var o in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=i,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(o)&&(t=e[o],this[o]=t?t(i):i[o]);return this.isDefaultPrevented=(i.defaultPrevented==null?!1===i.returnValue:i.defaultPrevented)?Tn:En,this.isPropagationStopped=En,this}return m(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():typeof e.returnValue!=`unknown`&&(e.returnValue=!1),this.isDefaultPrevented=Tn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():typeof e.cancelBubble!=`unknown`&&(e.cancelBubble=!0),this.isPropagationStopped=Tn)},persist:function(){},isPersistent:Tn}),t}var On={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},kn=Dn(On),An=m({},On,{view:0,detail:0}),jn=Dn(An),Mn,Nn,Pn,Fn=m({},An,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Gn,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!==Pn&&(Pn&&e.type===`mousemove`?(Mn=e.screenX-Pn.screenX,Nn=e.screenY-Pn.screenY):Nn=Mn=0,Pn=e),Mn)},movementY:function(e){return`movementY`in e?e.movementY:Nn}}),In=Dn(Fn),Ln=Dn(m({},Fn,{dataTransfer:0})),Rn=Dn(m({},An,{relatedTarget:0})),zn=Dn(m({},On,{animationName:0,elapsedTime:0,pseudoElement:0})),Bn=Dn(m({},On,{clipboardData:function(e){return`clipboardData`in e?e.clipboardData:window.clipboardData}})),j=Dn(m({},On,{data:0})),Vn={Esc:`Escape`,Spacebar:` `,Left:`ArrowLeft`,Up:`ArrowUp`,Right:`ArrowRight`,Down:`ArrowDown`,Del:`Delete`,Win:`OS`,Menu:`ContextMenu`,Apps:`ContextMenu`,Scroll:`ScrollLock`,MozPrintableKey:`Unidentified`},Hn={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:`F
95`,117:`F6`,118:`F7`,119:`F8`,120:`F9`,121:`F10`,122:`F11`,123:`F12`,144:`NumLock`,145:`ScrollLock`,224:`Meta`},Un={Alt:`altKey`,Control:`ctrlKey`,Meta:`metaKey`,Shift:`shiftKey`};function Wn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):(e=Un[e])?!!t[e]:!1}function Gn(){return Wn}var Kn=Dn(m({},An,{key:function(e){if(e.key){var t=Vn[e.key]||e.key;if(t!==`Unidentified`)return t}return e.type===`keypress`?(e=wn(e),e===13?`Enter`:String.fromCharCode(e)):e.type===`keydown`||e.type===`keyup`?Hn[e.keyCode]||`Unidentified`:``},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Gn,charCode:function(e){return e.type===`keypress`?wn(e):0},keyCode:function(e){return e.type===`keydown`||e.type===`keyup`?e.keyCode:0},which:function(e){return e.type===`keypress`?wn(e):e.type===`keydown`||e.type===`keyup`?e.keyCode:0}})),qn=Dn(m({},Fn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Jn=Dn(m({},An,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Gn})),Yn=Dn(m({},On,{propertyName:0,elapsedTime:0,pseudoElement:0})),Xn=Dn(m({},Fn,{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})),Zn=Dn(m({},On,{newState:0,oldState:0})),Qn=[9,13,27,32],$n=_n&&`CompositionEvent`in window,er=null;_n&&`documentMode`in document&&(er=document.documentMode);var tr=_n&&`TextEvent`in window&&!er,nr=_n&&(!$n||er&&8<er&&11>=er),rr=` `,ir=!1;function ar(e,t){switch(e){case`keyup`:return Qn.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function or(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var sr=!1;function cr(e,t){switch(e){case`compositionend`:return or(t);case`keypress`:return t.which===32?(ir=!0,rr):null;case`textInput`:return e=t.data,e===rr&&ir?null:e;default:return null}}function lr(e,t){if(sr)return e===`compositionend`||!$n&&ar(e,t)?(e=Cn(),Sn=xn=bn=null,sr=!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 nr&&t.locale!==`ko`?null:t.data;default:return null}}var ur={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 dr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t===`input`?!!ur[e.type]:t===`textarea`}function fr(e,t,n,r){dn?fn?fn.push(r):fn=[r]:dn=r,t=Nd(t,`onChange`),0<t.length&&(n=new kn(`onChange`,`change`,null,n,r),e.push({event:n,listeners:t}))}var pr=null,mr=null;function hr(e){Ed(e,0)}function gr(e){if(Ut(Tt(e)))return e}function _r(e,t){if(e===`change`)return t}var vr=!1;if(_n){var yr;if(_n){var br=`oninput`in document;if(!br){var xr=document.createElement(`div`);xr.setAttribute(`oninput`,`return;`),br=typeof xr.oninput==`function`}yr=br}else yr=!1;vr=yr&&(!document.documentMode||9<document.documentMode)}function Sr(){pr&&(pr.detachEvent(`onpropertychange`,Cr),mr=pr=null)}function Cr(e){if(e.propertyName===`value`&&gr(mr)){var t=[];fr(t,mr,e,un(e)),hn(hr,t)}}function wr(e,t,n){e===`focusin`?(Sr(),pr=t,mr=n,pr.attachEvent(`onpropertychange`,Cr)):e===`focusout`&&Sr()}function Tr(e){if(e===`selectionchange`||e===`keyup`||e===`keydown`)return gr(mr)}function Er(e,t){if(e===`click`)return gr(t)}function Dr(e,t){if(e===`input`||e===`change`)return gr(t)}function Or(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var kr=typeof Object.is==`function`?Object.is:Or;function Ar(e,t){if(kr(e,t))return!0;if(typeof e!=`object`||!e||typeof t!=`object`||!t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var i=n[r];if(!Oe.call(t,i)||!kr(e[i],t[i]))return!1}return!0}function jr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function Mr(e,t){var n=jr(e);e=0;for(var r;n;){if(n.nodeType===3){if(r=e+n.textContent.length,e<=t&&r>=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=jr(n)}}function Nr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Nr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Pr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Wt(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=Wt(e.document)}return t}function Fr(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 Ir=_n&&`documentMode`in document&&11>=document.documentMode,Lr=null,Rr=null,zr=null,Br=!1;function Vr(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Br||Lr==null||Lr!==Wt(r)||(r=Lr,`selectionStart`in r&&Fr(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focu
vendor: 73,898 bytes, line 9
9sNode:r.focusNode,focusOffset:r.focusOffset}),zr&&Ar(zr,r)||(zr=r,r=Nd(Rr,`onSelect`),0<r.length&&(t=new kn(`onSelect`,`select`,null,t,n),e.push({event:t,listeners:r}),t.target=Lr)))}function Hr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n[`Webkit`+e]=`webkit`+t,n[`Moz`+e]=`moz`+t,n}var Ur={animationend:Hr(`Animation`,`AnimationEnd`),animationiteration:Hr(`Animation`,`AnimationIteration`),animationstart:Hr(`Animation`,`AnimationStart`),transitionrun:Hr(`Transition`,`TransitionRun`),transitionstart:Hr(`Transition`,`TransitionStart`),transitioncancel:Hr(`Transition`,`TransitionCancel`),transitionend:Hr(`Transition`,`TransitionEnd`)},Wr={},Gr={};_n&&(Gr=document.createElement(`div`).style,`AnimationEvent`in window||(delete Ur.animationend.animation,delete Ur.animationiteration.animation,delete Ur.animationstart.animation),`TransitionEvent`in window||delete Ur.transitionend.transition);function Kr(e){if(Wr[e])return Wr[e];if(!Ur[e])return e;var t=Ur[e],n;for(n in t)if(t.hasOwnProperty(n)&&n in Gr)return Wr[e]=t[n];return e}var qr=Kr(`animationend`),Jr=Kr(`animationiteration`),Yr=Kr(`animationstart`),Xr=Kr(`transitionrun`),Zr=Kr(`transitionstart`),Qr=Kr(`transitioncancel`),$r=Kr(`transitionend`),ei=new Map,ti=`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(` `);ti.push(`scrollEnd`);function ni(e,t){ei.set(e,t),At(t,[e])}var ri=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&&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)},ii=[],ai=0,oi=0;function si(){for(var e=ai,t=oi=ai=0;t<e;){var n=ii[t];ii[t++]=null;var r=ii[t];ii[t++]=null;var i=ii[t];ii[t++]=null;var a=ii[t];if(ii[t++]=null,r!==null&&i!==null){var o=r.pending;o===null?i.next=i:(i.next=o.next,o.next=i),r.pending=i}a!==0&&di(n,i,a)}}function ci(e,t,n,r){ii[ai++]=e,ii[ai++]=t,ii[ai++]=n,ii[ai++]=r,oi|=r,e.lanes|=r,e=e.alternate,e!==null&&(e.lanes|=r)}function li(e,t,n,r){return ci(e,t,n,r),fi(e)}function ui(e,t){return ci(e,null,null,t),fi(e)}function di(e,t,n){e.lanes|=n;var r=e.alternate;r!==null&&(r.lanes|=n);for(var i=!1,a=e.return;a!==null;)a.childLanes|=n,r=a.alternate,r!==null&&(r.childLanes|=n),a.tag===22&&(e=a.stateNode,e===null||e._visibility&1||(i=!0)),e=a,a=a.return;return e.tag===3?(a=e.stateNode,i&&t!==null&&(i=31-Ge(n),e=a.hiddenUpdates,r=e[i],r===null?e[i]=[t]:r.push(t),t.lane=n|536870912),a):null}function fi(e){if(50<yu)throw yu=0,bu=null,Error(i(185));for(var t=e.return;t!==null;)e=t,t=e.return;return e.tag===3?e.stateNode:null}var pi={};function mi(e,t,n,r){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=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function hi(e,t,n,r){return new mi(e,t,n,r)}function gi(e){return e=e.prototype,!(!e||!e.isReactComponent)}function _i(e,t){var n=e.alternate;return n===null?(n=hi(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 vi(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 yi(e,t,n,r,a,o){var s=0;if(r=e,typeof e==`function`)gi(e)&&(s=1);else if(typeof e==`string`)s=Yf(e,n,pe.current)?26:e===`html`||e===`head`||e===`body`?27:5;else a:switch(e){case D:return e=hi(31,n,t,a),e.elementType=D,e.lanes=o,e;case v:return bi(n.children,a,o,t);case y:s=8,a|=24;break;case b:return e=hi(12,n,t,a|2),e.elementType=b,e.lanes=o,e;case w:return e=hi(13,n,t,a),e.elementType=w,e.lanes=o,e;case T:return e=hi(19,n,t,a),e.elementType=T,e.lanes=o,e;default:if(typeof e==`object`&&e)switch(e.$$typeof){case S:s=10;break a;case x:s=9;break a;case C:s=11;break a;case E:s=14;break a;case ee:s=16,r=null;break a}s=29,n=Error(i(130,e===null?`null`:typeof e,``)),r=null}return t=hi(s,n,t,a),t.elementType=e,t.type=r,t.lanes=o,t}function bi(e,t,n,r){return e=hi(7,e,r,t),e.lanes=n,e}function xi(e,t,n){return e=hi(6,e,null,t),e.lanes=n,e}function Si(e){var t=hi(18,null,null,0);return t.stateNode=e,t}function Ci(e,t,n){return t=hi(4,e.children===null?[]:e.children,e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}var wi=new WeakMap;function Ti(e,t){if(typeof e==`object`&&e){var n=wi.get(e);return n===void 0?(t={value:e,source:t,stack:De(t)},wi.set(e,t),t):n}return{value:e,source:t,stack:De(t)}}var Ei=[],Di=0,Oi=null,ki=0,Ai=[],ji=0,Mi=null,Ni=1,Pi=``;function Fi(e,t){Ei[Di++]=ki,Ei[Di++]=Oi,Oi=e,ki=t}function Ii(e,t,n){Ai[ji++]=Ni,Ai[ji++]=Pi,Ai[ji++]=Mi,Mi=e;var r=Ni;e=Pi;var i=32-Ge(r)-1;r&=~(1<<i),n+=1;var a=32-Ge(t)+i;if(30<a){var o=i-i%5;a=(r&(1<<o)-1).toString(32),r>>=o,i-=o,Ni=1<<32-Ge(t)+i|n<<i|r,Pi=a+e}else Ni=1<<a|n<<i|r,Pi=e}function Li(e){e.return!==null&&(Fi(e,1),Ii(e,1,0))}function Ri(e){for(;e===Oi;)Oi=Ei[--Di],Ei[Di]=null,ki=Ei[--Di],Ei[Di]=null;for(;e===Mi;)Mi=Ai[--ji],Ai[ji]=null,Pi=Ai[--ji],Ai[ji]=null,Ni=Ai[--ji],Ai[ji]=null}function zi(e,t){Ai[ji++]=Ni,Ai[ji++]=Pi,Ai[ji++]=Mi,Ni=t.id,Pi=t.overflow,Mi=e}var Bi=null,Vi=null,M=!1,Hi=null,Ui=!1,Wi=Error(i(519));function Gi(e){throw Zi(Ti(Error(i(418,1<arguments.length&&arguments[1]!==void 0&&arguments[1]?`text`:`HTML`,``)),e)),Wi}function Ki(e){var t=e.stateNode,n=e.type,r=e.memoizedProps;switch(t[mt]=e,t[ht]=r,n){case`dialog`:G(`cancel`,t),G(`close`,t);break;case`iframe`:case`object`:case`embed`:G(`load`,t);break;case`video`:case`audio`:for(n=0;n<wd.length;n++)G(wd[n],t);break;case`source`:G(`error`,t);break;case`img`:case`image`:case`link`:G(`error`,t),G(`load`,t);break;case`details`:G(`toggle`,t);break;case`input`:G(`invalid`,t),Jt(t,r.value,r.defaultValue,r.checked,r.defaultChecked,r.type,r.name,!0);break;case`select`:G(`invalid`,t);break;case`textarea`:G(`invalid`,t),Qt(t,r.value,r.defaultValue,r.children)}n=r.children,typeof n!=`string`&&typeof n!=`number`&&typeof n!=`bigint`||t.textContent===``+n||!0===r.suppressHydrationWarning||zd(t.textContent,n)?(r.popover!=null&&(G(`beforetoggle`,t),G(`toggle`,t)),r.onScroll!=null&&G(`scroll`,t),r.onScrollEnd!=null&&G(`scrollend`,t),r.onClick!=null&&(t.onclick=cn),t=!0):t=!1,t||Gi(e,!0)}function qi(e){for(Bi=e.return;Bi;)switch(Bi.tag){case 5:case 31:case 13:Ui=!1;return;case 27:case 3:Ui=!0;return;default:Bi=Bi.return}}function Ji(e){if(e!==Bi)return!1;if(!M)return qi(e),M=!0,!1;var t=e.tag,n;if((n=t!==3&&t!==27)&&((n=t===5)&&(n=e.type,n=n===`form`||n===`button`||Xd(e.type,e.memoizedProps)),n=!n),n&&Vi&&Gi(e),qi(e),t===13){if(e=e.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(317));Vi=_f(e)}else if(t===31){if(e=e.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(317));Vi=_f(e)}else t===27?(t=Vi,af(e.type)?(e=gf,gf=null,Vi=e):Vi=t):Vi=Bi?hf(e.stateNode.nextSibling):null;return!0}function Yi(){Vi=Bi=null,M=!1}function Xi(){var e=Hi;return e!==null&&(ou===null?ou=e:ou.push.apply(ou,e),Hi=null),e}function Zi(e){Hi===null?Hi=[e]:Hi.push(e)}var Qi=ue(null),$i=null,ea=null;function ta(e,t,n){fe(Qi,t._currentValue),t._currentValue=n}function na(e){e._currentValue=Qi.current,de(Qi)}function ra(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)===t?r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t):(e.childLanes|=t,r!==null&&(r.childLanes|=t)),e===n)break;e=e.return}}function ia(e,t,n,r){var a=e.child;for(a!==null&&(a.return=e);a!==null;){var o=a.dependencies;if(o!==null){var s=a.child;o=o.firstContext;a:for(;o!==null;){var c=o;o=a;for(var l=0;l<t.length;l++)if(c.context===t[l]){o.lanes|=n,c=o.alternate,c!==null&&(c.lanes|=n),ra(o.return,n,e),r||(s=null);break a}o=c.next}}else if(a.tag===18){if(s=a.return,s===null)throw Error(i(341));s.lanes|=n,o=s.alternate,o!==null&&(o.lanes|=n),ra(s,n,e),s=null}else s=a.child;if(s!==null)s.return=a;else for(s=a;s!==null;){if(s===e){s=null;break}if(a=s.sibling,a!==null){a.return=s.return,s=a;break}s=s.return}a=s}}function aa(e,t,n,r){e=null;for(var a=t,o=!1;a!==null;){if(!o){if(a.flags&524288)o=!0;else if(a.flags&262144)break}if(a.tag===10){var s=a.alternate;if(s===null)throw Error(i(387));if(s=s.memoizedProps,s!==null){var c=a.type;kr(a.pendingProps.value,s.value)||(e===null?e=[c]:e.push(c))}}else if(a===ge.current){if(s=a.alternate,s===null)throw Error(i(387));s.memoizedState.memoizedState!==a.memoizedState.memoizedState&&(e===null?e=[ip]:e.push(ip))}a=a.return}e!==null&&ia(t,e,n,r),t.flags|=262144}function oa(e){for(e=e.firstContext;e!==null;){if(!kr(e.context._currentValue,e.memoizedValue))return!0;e=e.next}return!1}function sa(e){$i=e,ea=null,e=e.dependencies,e!==null&&(e.firstContext=null)}function ca(e){return ua($i,e)}function la(e,t){return $i===null&&sa(e),ua(e,t)}function ua(e,t){var n=t._currentValue;if(t={context:t,memoizedValue:n,next:null},ea===null){if(e===null)throw Error(i(308));ea=t,e.dependencies={lanes:0,firstContext:t},e.flags|=524288}else ea=ea.next=t;return n}var da=typeof AbortController<`u`?AbortController:function(){var e=[],t=this.signal={aborted:!1,addEventListener:function(t,n){e.push(n)}};this.abort=function(){t.aborted=!0,e.forEach(function(e){return e()})}},fa=t.unstable_scheduleCallback,pa=t.unstable_NormalPriority,ma={$$typeof:S,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function ha(){return{controller:new da,data:new Map,refCount:0}}function ga(e){e.refCount--,e.refCount===0&&fa(pa,function(){e.controller.abort()})}var _a=null,va=0,ya=0,ba=null;function xa(e,t){if(_a===null){var n=_a=[];va=0,ya=vd(),ba={status:`pending`,value:void 0,then:function(e){n.push(e)}}}return va++,t.then(Sa,Sa),t}function Sa(){if(--va===0&&_a!==null){ba!==null&&(ba.status=`fulfilled`);var e=_a;_a=null,ya=0,ba=null;for(var t=0;t<e.length;t++)(0,e[t])()}}function Ca(e,t){var n=[],r={status:`pending`,value:null,reason:null,then:function(e){n.push(e)}};return e.then(function(){r.status=`fulfilled`,r.value=t;for(var e=0;e<n.length;e++)(0,n[e])(t)},function(e){for(r.status=`rejected`,r.reason=e,e=0;e<n.length;e++)(0,n[e])(void 0)}),r}var wa=O.S;O.S=function(e,t){lu=Ne(),typeof t==`object`&&t&&typeof t.then==`function`&&xa(e,t),wa!==null&&wa(e,t)};var Ta=ue(null);function Ea(){var e=Ta.current;return e===null?Kl.pooledCache:e}function Da(e,t){t===null?fe(Ta,Ta.current):fe(Ta,t.pool)}function Oa(){var e=Ea();return e===null?null:{parent:ma._currentValue,pool:e}}var ka=Error(i(460)),Aa=Error(i(474)),ja=Error(i(542)),Ma={then:function(){}};function Na(e){return e=e.status,e===`fulfilled`||e===`rejected`}function Pa(e,t,n){switch(n=e[n],n===void 0?e.push(t):n!==t&&(t.then(cn,cn),t=n),t.status){case`fulfilled`:return t.value;case`rejected`:throw e=t.reason,Ra(e),e;default:if(typeof t.status==`string`)t.then(cn,cn);else{if(e=Kl,e!==null&&100<e.shellSuspendCounter)throw Error(i(482));e=t,e.status=`pending`,e.then(function(e){if(t.status===`pending`){var n=t;n.status=`fulfilled`,n.value=e}},function(e){if(t.status===`pending`){var n=t;n.status=`rejected`,n.reason=e}})}switch(t.status){case`fulfilled`:return t.value;case`rejected`:throw e=t.reason,Ra(e),e}throw Ia=t,ka}}function Fa(e){try{var t=e._init;return t(e._payload)}catch(e){throw typeof e==`object`&&e&&typeof e.then==`function`?(Ia=e,ka):e}}var Ia=null;function La(){if(Ia===null)throw Error(i(459));var e=Ia;return Ia=null,e}function Ra(e){if(e===ka||e===ja)throw Error(i(483))}var za=null,Ba=0;function Va(e){var t=Ba;return Ba+=1,za===null&&(za=[]),Pa(za,e,t)}function Ha(e,t){t=t.props.ref,e.ref=t===void 0?null:t}function Ua(e,t){throw t.$$typeof===h?Error(i(525)):(e=Object.prototype.toString.call(t),Error(i(31,e===`[object Object]`?`object with keys {`+Object.keys(t).join(`, `)+`}`:e)))}function Wa(e){function t(t,n){if(e){var r=t.deletions;r===null?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;r!==null;)t(n,r),r=r.sibling;return null}function r(e){for(var t=new Map;e!==null;)e.key===null?t.set(e.index,e):t.set(e.key,e),e=e.sibling;return t}function a(e,t){return e=_i(e,t),e.index=0,e.sibling=null,e}function o(t,n,r){return t.index=r,e?(r=t.alternate,r===null?(t.flags|=67108866,n):(r=r.index,r<n?(t.flags|=67108866,n):r)):(t.flags|=1048576,n)}function s(t){return e&&t.alternate===null&&(t.flags|=67108866),t}function c(e,t,n,r){return t===null||t.tag!==6?(t=xi(n,e.mode,r),t.return=e,t):(t=a(t,n),t.return=e,t)}function l(e,t,n,r){var i=n.type;return i===v?d(e,t,n.props.children,r,n.key):t!==null&&(t.elementType===i||typeof i==`object`&&i&&i.$$typeof===ee&&Fa(i)===t.type)?(t=a(t,n.props),Ha(t,n),t.return=e,t):(t=yi(n.type,n.key,n.props,null,e.mode,r),Ha(t,n),t.return=e,t)}function u(e,t,n,r){return t===null||t.tag!==4||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?(t=Ci(n,e.mode,r),t.return=e,t):(t=a(t,n.children||[]),t.return=e,t)}function d(e,t,n,r,i){return t===null||t.tag!==7?(t=bi(n,e.mode,r,i),t.return=e,t):(t=a(t,n),t.return=e,t)}function f(e,t,n){if(typeof t==`string`&&t!==``||typeof t==`number`||typeof t==`bigint`)return t=xi(``+t,e.mode,n),t.return=e,t;if(typeof t==`object`&&t){switch(t.$$typeof){case g:return n=yi(t.type,t.key,t.props,null,e.mode,n),Ha(n,t),n.return=e,n;case _:return t=Ci(t,e.mode,n),t.return=e,t;case ee:return t=Fa(t),f(e,t,n)}if(oe(t)||re(t))return t=bi(t,e.mode,n,null),t.return=e,t;if(typeof t.then==`function`)return f(e,Va(t),n);if(t.$$typeof===S)return f(e,la(e,t),n);Ua(e,t)}return null}function p(e,t,n,r){var i=t===null?null:t.key;if(typeof n==`string`&&n!==``||typeof n==`number`||typeof n==`bigint`)return i===null?c(e,t,``+n,r):null;if(typeof n==`object`&&n){switch(n.$$typeof){case g:return n.key===i?l(e,t,n,r):null;case _:return n.key===i?u(e,t,n,r):null;case ee:return n=Fa(n),p(e,t,n,r)}if(oe(n)||re(n))return i===null?d(e,t,n,r,null):null;if(typeof n.then==`function`)return p(e,t,Va(n),r);if(n.$$typeof===S)return p(e,t,la(e,n),r);Ua(e,n)}return null}function m(e,t,n,r,i){if(typeof r==`string`&&r!==``||typeof r==`number`||typeof r==`bigint`)return e=e.get(n)||null,c(t,e,``+r,i);if(typeof r==`object`&&r){switch(r.$$typeof){case g:return e=e.get(r.key===null?n:r.key)||null,l(t,e,r,i);case _:return e=e.get(r.key===null?n:r.key)||null,u(t,e,r,i);case ee:return r=Fa(r),m(e,t,n,r,i)}if(oe(r)||re(r))return e=e.get(n)||null,d(t,e,r,i,null);if(typeof r.then==`function`)return m(e,t,n,Va(r),i);if(r.$$typeof===S)return m(e,t,n,la(t,r),i);Ua(t,r)}return null}function h(i,a,s,c){for(var l=null,u=null,d=a,h=a=0,g=null;d!==null&&h<s.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),M&&Fi(i,h),l;if(d===null){for(;h<s.length;h++)d=f(i,s[h],c),d!==null&&(a=o(d,a,h),u===null?l=d:u.sibling=d,u=d);return M&&Fi(i,h),l}for(d=r(d);h<s.length;h++)g=m(d,i,h,s[h],c),g!==null&&(e&&g.alternate!==null&&d.delete(g.key===null?h:g.key),a=o(g,a,h),u===null?l=g:u.sibling=g,u=g);return e&&d.forEach(function(e){return t(i,e)}),M&&Fi(i,h),l}function y(a,s,c,l){if(c==null)throw Error(i(151));for(var u=null,d=null,h=s,g=s=0,_=null,v=c.next();h!==null&&!v.done;g++,v=c.next()){h.index>g?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),M&&Fi(a,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(a,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return M&&Fi(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&v.alternate!==null&&h.delete(v.key===null?g:v.key),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),M&&Fi(a,g),u}function b(e,r,o,c){if(typeof o==`object`&&o&&o.type===v&&o.key===null&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case g:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===v){if(r.tag===7){n(e,r.sibling),c=a(r,o.props.children),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===ee&&Fa(l)===r.type){n(e,r.sibling),c=a(r,o.props),Ha(c,o),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}o.type===v?(c=bi(o.props.children,e.mode,c,o.key),c.return=e,e=c):(c=yi(o.type,o.key,o.props,null,e.mode,c),Ha(c,o),c.return=e,e=c)}return s(e);case _:a:{for(l=o.key;r!==null;){if(r.key===l)if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=a(r,o.children||[]),c.return=e,e=c;break a}else{n(e,r);break}t(e,r),r=r.sibling}c=Ci(o,e.mode,c),c.return=e,e=c}return s(e);case ee:return o=Fa(o),b(e,r,o,c)}if(oe(o))return h(e,r,o,c);if(re(o)){if(l=re(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),y(e,r,o,c)}if(typeof o.then==`function`)return b(e,r,Va(o),c);if(o.$$typeof===S)return b(e,r,la(e,o),c);Ua(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=a(r,o),c.return=e,e=c):(n(e,r),c=xi(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{Ba=0;var i=b(e,t,n,r);return za=null,i}catch(t){if(t===ka||t===ja)throw t;var a=hi(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var Ga=Wa(!0),Ka=Wa(!1),qa=!1;function Ja(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Ya(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 Xa(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Za(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,Gl&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=fi(e),di(e,null,n),t}return ci(e,r,t,n),fi(e)}function N(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,st(e,n)}}function Qa(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var $a=!1;function eo(){if($a){var e=ba;if(e!==null)throw e}}function to(e,t,n,r){$a=!1;var i=e.updateQueue;qa=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(V&f)===f:(r&f)===f){f!==0&&f===ya&&($a=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var h=e,g=s;f=t;var _=n;switch(g.tag){case 1:if(h=g.payload,typeof h==`function`){d=h.call(_,d,f);break a}d=h;break a;case 3:h.flags=h.flags&-65537|128;case 0:if(h=g.payload,f=typeof h==`function`?h.call(_,d,f):h,f==null)break a;d=m({},d,f);break a;case 2:qa=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),eu|=o,e.lanes=o,e.memoizedState=d}}function no(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function ro(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;e<n.length;e++)no(n[e],t)}var io=ue(null),ao=ue(0);function oo(e,t){e=Ql,fe(ao,e),fe(io,t),Ql=e|t.baseLanes}function so(){fe(ao,Ql),fe(io,io.current)}function co(){Ql=ao.current,de(io),de(ao)}var lo=ue(null),uo=null;function fo(e){var t=e.alternate;fe(_o,_o.current&1),fe(lo,e),uo===null&&(t===null||io.current!==null||t.memoizedState!==null)&&(uo=e)}function po(e){fe(_o,_o.current),fe(lo,e),uo===null&&(uo=e)}function mo(e){e.tag===22?(fe(_o,_o.current),fe(lo,e),uo===null&&(uo=e)):ho(e)}function ho(){fe(_o,_o.current),fe(lo,lo.current)}function go(e){de(lo),uo===e&&(uo=null),de(_o)}var _o=ue(0);function vo(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||ff(n)||pf(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)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 yo=0,P=null,F=null,bo=null,xo=!1,So=!1,Co=!1,wo=0,To=0,Eo=null,Do=0;function Oo(){throw Error(i(321))}function ko(e,t){if(t===null)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!kr(e[n],t[n]))return!1;return!0}function Ao(e,t,n,r,i,a){return yo=a,P=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,O.H=e===null||e.memoizedState===null?Us:Ws,Co=!1,a=n(r,i),Co=!1,So&&(a=Mo(t,n,r,i)),jo(e),a}function jo(e){O.H=Hs;var t=F!==null&&F.next!==null;if(yo=0,bo=F=P=null,xo=!1,To=0,Eo=null,t)throw Error(i(300));e===null||sc||(e=e.dependencies,e!==null&&oa(e)&&(sc=!0))}function Mo(e,t,n,r){P=e;var a=0;do{if(So&&(Eo=null),To=0,So=!1,25<=a)throw Error(i(301));if(a+=1,bo=F=null,e.updateQueue!=null){var o=e.updateQueue;o.lastEffect=null,o.events=null,o.stores=null,o.memoCache!=null&&(o.memoCache.index=0)}O.H=Gs,o=t(n,r)}while(So);return o}function No(){var e=O.H,t=e.useState()[0];return t=typeof t.then==`function`?Bo(t):t,e=e.useState()[0],(F===null?null:F.memoizedState)!==e&&(P.flags|=1024),t}function Po(){var e=wo!==0;return wo=0,e}function Fo(e,t,n){t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~n}function Io(e){if(xo){for(e=e.memoizedState;e!==null;){var t=e.queue;t!==null&&(t.pending=null),e=e.next}xo=!1}yo=0,bo=F=P=null,So=!1,To=wo=0,Eo=null}function Lo(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return bo===null?P.memoizedState=bo=e:bo=bo.next=e,bo}function Ro(){if(F===null){var e=P.alternate;e=e===null?null:e.memoizedState}else e=F.next;var t=bo===null?P.memoizedState:bo.next;if(t!==null)bo=t,F=e;else{if(e===null)throw P.alternate===null?Error(i(467)):Error(i(310));F=e,e={memoizedState:F.memoizedState,baseState:F.baseState,baseQueue:F.baseQueue,queue:F.queue,next:null},bo===null?P.memoizedState=bo=e:bo=bo.next=e}return bo}function zo(){return{lastEffect:null,events:null,stores:null,memoCache:null}}function Bo(e){var t=To;return To+=1,Eo===null&&(Eo=[]),e=Pa(Eo,e,t),t=P,(bo===null?t.memoizedState:bo.next)===null&&(t=t.alternate,O.H=t===null||t.memoizedState===null?Us:Ws),e}function Vo(e){if(typeof e==`object`&&e){if(typeof e.then==`function`)return Bo(e);if(e.$$typeof===S)return ca(e)}throw Error(i(438,String(e)))}function Ho(e){var t=null,n=P.updateQueue;if(n!==null&&(t=n.memoCache),t==null){var r=P.alternate;r!==null&&(r=r.updateQueue,r!==null&&(r=r.memoCache,r!=null&&(t={data:r.data.map(function(e){return e.slice()}),index:0})))}if(t??={data:[],index:0},n===null&&(n=zo(),P.updateQueue=n),n.memoCache=t,n=t.data[t.index],n===void 0)for(n=t.data[t.index]=Array(e),r=0;r<e;r++)n[r]=te;return t.index++,n}function Uo(e,t){return typeof t==`function`?t(e):t}function Wo(e){return Go(Ro(),F,e)}function Go(e,t,n){var r=e.queue;if(r===null)throw Error(i(311));r.lastRenderedReducer=n;var a=e.baseQueue,o=r.pending;if(o!==null){if(a!==null){var s=a.next;a.next=o.next,o.next=s}t.baseQueue=a=o,r.pending=null}if(o=e.baseState,a===null)e.memoizedState=o;else{t=a.next;var c=s=null,l=null,u=t,d=!1;do{var f=u.lane&-536870913;if(f===u.lane?(yo&f)===f:(V&f)===f){var p=u.revertLane;if(p===0)l!==null&&(l=l.next={lane:0,revertLane:0,gesture:null,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),f===ya&&(d=!0);else if((yo&p)===p){u=u.next,p===ya&&(d=!0);continue}else f={lane:0,revertLane:u.revertLane,gesture:null,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},l===null?(c=l=f,s=o):l=l.next=f,P.lanes|=p,eu|=p;f=u.action,Co&&n(o,f),o=u.hasEagerState?u.eagerState:n(o,f)}else p={lane:f,revertLane:u.revertLane,gesture:u.gesture,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},l===null?(c=l=p,s=o):l=l.next=p,P.lanes|=f,eu|=f;u=u.next}while(u!==null&&u!==t);if(l===null?s=o:l.next=c,!kr(o,e.memoizedState)&&(sc=!0,d&&(n=ba,n!==null)))throw n;e.memoizedState=o,e.baseState=s,e.baseQueue=l,r.lastRenderedState=o}return a===null&&(r.lanes=0),[e.memoizedState,r.dispatch]}function Ko(e){var t=Ro(),n=t.queue;if(n===null)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,a=n.pending,o=t.memoizedState;if(a!==null){n.pending=null;var s=a=a.next;do o=e(o,s.action),s=s.next;while(s!==a);kr(o,t.memoizedState)||(sc=!0),t.memoizedState=o,t.baseQueue===null&&(t.baseState=o),n.lastRenderedState=o}return[o,r]}function qo(e,t,n){var r=P,a=Ro(),o=M;if(o){if(n===void 0)throw Error(i(407));n=n()}else n=t();var s=!kr((F||a).memoizedState,n);if(s&&(a.memoizedState=n,sc=!0),a=a.queue,gs(Xo.bind(null,r,a,e),[e]),a.getSnapshot!==t||s||bo!==null&&bo.memoizedState.tag&1){if(r.flags|=2048,ds(9,{destroy:void 0},Yo.bind(null,r,a,n,t),null),Kl===null)throw Error(i(349));o||yo&127||Jo(r,t,n)}return n}function Jo(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},t=P.updateQueue,t===null?(t=zo(),P.updateQueue=t,t.stores=[e]):(n=t.stores,n===null?t.stores=[e]:n.push(e))}function Yo(e,t,n,r){t.value=n,t.getSnapshot=r,Zo(t)&&I(e)}function Xo(e,t,n){return n(function(){Zo(t)&&I(e)})}function Zo(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!kr(e,n)}catch{return!0}}function I(e){var t=ui(e,2);t!==null&&Cu(t,e,2)}function L(e){var t=Lo();if(typeof e==`function`){var n=e;if(e=n(),Co){We(!0);try{n()}finally{We(!1)}}}return t.memoizedState=t.baseState=e,t.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:Uo,lastRenderedState:e},t}function Qo(e,t,n,r){return e.baseState=n,Go(e,F,typeof r==`function`?r:Uo)}function $o(e,t,n,r,a){if(zs(e))throw Error(i(485));if(e=t.action,e!==null){var o={payload:a,action:e,next:null,isTransition:!0,status:`pending`,value:null,reason:null,listeners:[],then:function(e){o.listeners.push(e)}};O.T===null?o.isTransition=!1:n(!0),r(o),n=t.pending,n===null?(o.next=t.pending=o,es(t,o)):(o.next=n.next,t.pending=n.next=o)}}function es(e,t){var n=t.action,r=t.payload,i=e.state;if(t.isTransition){var a=O.T,o={};O.T=o;try{var s=n(i,r),c=O.S;c!==null&&c(o,s),ts(e,t,s)}catch(n){rs(e,t,n)}finally{a!==null&&o.types!==null&&(a.types=o.types),O.T=a}}else try{a=n(i,r),ts(e,t,a)}catch(n){rs(e,t,n)}}function ts(e,t,n){typeof n==`object`&&n&&typeof n.then==`function`?n.then(function(n){ns(e,t,n)},function(n){return rs(e,t,n)}):ns(e,t,n)}function ns(e,t,n){t.status=`fulfilled`,t.value=n,is(t),e.state=n,t=e.pending,t!==null&&(n=t.next,n===t?e.pending=null:(n=n.next,t.next=n,es(e,n)))}function rs(e,t,n){var r=e.pending;if(e.pending=null,r!==null){r=r.next;do t.status=`rejected`,t.reason=n,is(t),t=t.next;while(t!==r)}e.action=null}function is(e){e=e.listeners;for(var t=0;t<e.length;t++)(0,e[t])()}function as(e,t){return t}function os(e,t){if(M){var n=Kl.formState;if(n!==null){a:{var r=P;if(M){if(Vi){b:{for(var i=Vi,a=Ui;i.nodeType!==8;){if(!a){i=null;break b}if(i=hf(i.nextSibling),i===null){i=null;break b}}a=i.data,i=a===`F!`||a===`F`?i:null}if(i){Vi=hf(i.nextSibling),r=i.data===`F!`;break a}}Gi(r)}r=!1}r&&(t=n[0])}}return n=Lo(),n.memoizedState=n.baseState=t,r={pending:null,lanes:0,dispatch:null,lastRenderedReducer:as,lastRenderedState:t},n.queue=r,n=Is.bind(null,P,r),r.dispatch=n,r=L(!1),a=Rs.bind(null,P,!1,r.queue),r=Lo(),i={state:t,dispatch:null,action:e,pending:null},r.queue=i,n=$o.bind(null,P,i,a,n),i.dispatch=n,r.memoizedState=e,[t,n,!1]}function ss(e){return cs(Ro(),F,e)}function cs(e,t,n){if(t=Go(e,t,as)[0],e=Wo(Uo)[0],typeof t==`object`&&t&&typeof t.then==`function`)try{var r=Bo(t)}catch(e){throw e===ka?ja:e}else r=t;t=Ro();var i=t.queue,a=i.dispatch;return n!==t.memoizedState&&(P.flags|=2048,ds(9,{destroy:void 0},ls.bind(null,i,n),null)),[r,a,e]}function ls(e,t){e.action=t}function us(e){var t=Ro(),n=F;if(n!==null)return cs(t,n,e);Ro(),t=t.memoizedState,n=Ro();var r=n.queue.dispatch;return n.memoizedState=e,[t,r,!1]}function ds(e,t,n,r){return e={tag:e,create:n,deps:r,inst:t,next:null},t=P.updateQueue,t===null&&(t=zo(),P.updateQueue=t),n=t.lastEffect,n===null?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function fs(){return Ro().memoizedState}function ps(e,t,n,r){var i=Lo();P.flags|=e,i.memoizedState=ds(1|t,{destroy:void 0},n,r===void 0?null:r)}function ms(e,t,n,r){var i=Ro();r=r===void 0?null:r;var a=i.memoizedState.inst;F!==null&&r!==null&&ko(r,F.memoizedState.deps)?i.memoizedState=ds(t,a,n,r):(P.flags|=e,i.memoizedState=ds(1|t,a,n,r))}function hs(e,t){ps(8390656,8,e,t)}function gs(e,t){ms(2048,8,e,t)}function _s(e){P.flags|=4;var t=P.updateQueue;if(t===null)t=zo(),P.updateQueue=t,t.events=[e];else{var n=t.events;n===null?t.events=[e]:n.push(e)}}function vs(e){var t=Ro().memoizedState;return _s({ref:t,nextImpl:e}),function(){if(Gl&2)throw Error(i(440));return t.impl.apply(void 0,arguments)}}function ys(e,t){return ms(4,2,e,t)}function bs(e,t){return ms(4,4,e,t)}function xs(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 Ss(e,t,n){n=n==null?null:n.concat([e]),ms(4,4,xs.bind(null,t,e),n)}function R(){}function Cs(e,t){var n=Ro();t=t===void 0?null:t;var r=n.memoizedState;return t!==null&&ko(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function z(e,t){var n=Ro();t=t===void 0?null:t;var r=n.memoizedState;if(t!==null&&ko(t,r[1]))return r[0];if(r=e(),Co){We(!0);try{e()}finally{We(!1)}}return n.memoizedState=[r,t],r}function ws(e,t,n){return n===void 0||yo&1073741824&&!(V&261930)?e.memoizedState=t:(e.memoizedState=n,e=Su(),P.lanes|=e,eu|=e,n)}function Ts(e,t,n,r){return kr(n,t)?n:io.current===null?!(yo&42)||yo&1073741824&&!(V&261930)?(sc=!0,e.memoizedState=n):(e=Su(),P.lanes|=e,eu|=e,t):(e=ws(e,n,r),kr(e,t)||(sc=!0),e)}function Es(e,t,n,r,i){var a=k.p;k.p=a!==0&&8>a?a:8;var o=O.T,s={};O.T=s,Rs(e,!1,t,n);try{var c=i(),l=O.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?Ls(e,t,Ca(c,r),xu(e)):Ls(e,t,r,xu(e))}catch(n){Ls(e,t,{then:function(){},status:`rejected`,reason:n},xu())}finally{k.p=a,o!==null&&s.types!==null&&(o.types=s.types),O.T=o}}function Ds(){}function Os(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=ks(e).queue;Es(e,a,t,se,n===null?Ds:function(){return As(e),n(r)})}function ks(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:se,baseState:se,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Uo,lastRenderedState:se},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Uo,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function As(e){var t=ks(e);t.next===null&&(t=e.alternate.memoizedState),Ls(e,t.next.queue,{},xu())}function js(){return ca(ip)}function Ms(){return Ro().memoizedState}function Ns(){return Ro().memoizedState}function Ps(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=xu();e=Xa(n);var r=Za(t,e,n);r!==null&&(Cu(r,t,n),N(r,t,n)),t={cache:ha()},e.payload=t;return}t=t.return}}function Fs(e,t,n){var r=xu();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},zs(e)?Bs(t,n):(n=li(e,t,n,r),n!==null&&(Cu(n,e,r),Vs(n,t,r)))}function Is(e,t,n){Ls(e,t,n,xu())}function Ls(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(zs(e))Bs(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,kr(s,o))return ci(e,t,i,0),Kl===null&&si(),!1}catch{}if(n=li(e,t,i,r),n!==null)return Cu(n,e,r),Vs(n,t,r),!0}return!1}function Rs(e,t,n,r){if(r={lane:2,revertLane:vd(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},zs(e)){if(t)throw Error(i(479))}else t=li(e,n,r,2),t!==null&&Cu(t,e,2)}function zs(e){var t=e.alternate;return e===P||t!==null&&t===P}function Bs(e,t){So=xo=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Vs(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,st(e,n)}}var Hs={readContext:ca,use:Vo,useCallback:Oo,useContext:Oo,useEffect:Oo,useImperativeHandle:Oo,useLayoutEffect:Oo,useInsertionEffect:Oo,useMemo:Oo,useReducer:Oo,useRef:Oo,useState:Oo,useDebugValue:Oo,useDeferredValue:Oo,useTransition:Oo,useSyncExternalStore:Oo,useId:Oo,useHostTransitionStatus:Oo,useFormState:Oo,useActionState:Oo,useOptimistic:Oo,useMemoCache:Oo,useCacheRefresh:Oo};Hs.useEffectEvent=Oo;var Us={readContext:ca,use:Vo,useCallback:function(e,t){return Lo().memoizedState=[e,t===void 0?null:t],e},useContext:ca,useEffect:hs,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),ps(4194308,4,xs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ps(4194308,4,e,t)},useInsertionEffect:function(e,t){ps(4,2,e,t)},useMemo:function(e,t){var n=Lo();t=t===void 0?null:t;var r=e();if(Co){We(!0);try{e()}finally{We(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=Lo();if(n!==void 0){var i=n(t);if(Co){We(!0);try{n(t)}finally{We(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=Fs.bind(null,P,e),[r.memoizedState,e]},useRef:function(e){var t=Lo();return e={current:e},t.memoizedState=e},useState:function(e){e=L(e);var t=e.queue,n=Is.bind(null,P,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:R,useDeferredValue:function(e,t){return ws(Lo(),e,t)},useTransition:function(){var e=L(!1);return e=Es.bind(null,P,e.queue,!0,!1),Lo().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=P,a=Lo();if(M){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),Kl===null)throw Error(i(349));V&127||Jo(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,hs(Xo.bind(null,r,o,e),[e]),r.flags|=2048,ds(9,{destroy:void 0},Yo.bind(null,r,o,n,t),null),n},useId:function(){var e=Lo(),t=Kl.identifierPrefix;if(M){var n=Pi,r=Ni;n=(r&~(1<<32-Ge(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=wo++,0<n&&(t+=`H`+n.toString(32)),t+=`_`}else n=Do++,t=`_`+t+`r_`+n.toString(32)+`_`;return e.memoizedState=t},useHostTransitionStatus:js,useFormState:os,useActionState:os,useOptimistic:function(e){var t=Lo();t.memoizedState=t.baseState=e;var n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return t.queue=n,t=Rs.bind(null,P,!0,n),n.dispatch=t,[e,t]},useMemoCache:Ho,useCacheRefresh:function(){return Lo().memoizedState=Ps.bind(null,P)},useEffectEvent:function(e){var t=Lo(),n={impl:e};return t.memoizedState=n,function(){if(Gl&2)throw Error(i(440));return n.impl.apply(void 0,arguments)}}},Ws={readContext:ca,use:Vo,useCallback:Cs,useContext:ca,useEffect:gs,useImperativeHandle:Ss,useInsertionEffect:ys,useLayoutEffect:bs,useMemo:z,useReducer:Wo,useRef:fs,useState:function(){return Wo(Uo)},useDebugValue:R,useDeferredValue:function(e,t){return Ts(Ro(),F.memoizedState,e,t)},useTransition:function(){var e=Wo(Uo)[0],t=Ro().memoizedState;return[typeof e==`boolean`?e:Bo(e),t]},useSyncExternalStore:qo,useId:Ms,useHostTransitionStatus:js,useFormState:ss,useActionState:ss,useOptimistic:function(e,t){return Qo(Ro(),F,e,t)},useMemoCache:Ho,useCacheRefresh:Ns};Ws.useEffectEvent=vs;var Gs={readContext:ca,use:Vo,useCallback:Cs,useContext:ca,useEffect:gs,useImperativeHandle:Ss,useInsertionEffect:ys,useLayoutEffect:bs,useMemo:z,useReducer:Ko,useRef:fs,useState:function(){return Ko(Uo)},useDebugValue:R,useDeferredValue:function(e,t){var n=Ro();return F===null?ws(n,e,t):Ts(n,F.memoizedState,e,t)},useTransition:function(){var e=Ko(Uo)[0],t=Ro().memoizedState;return[typeof e==`boolean`?e:Bo(e),t]},useSyncExternalStore:qo,useId:Ms,useHostTransitionStatus:js,useFormState:us,useActionState:us,useOptimistic:function(e,t){var n=Ro();return F===null?(n.baseState=e,[e,n.queue.dispatch]):Qo(n,F,e,t)},useMemoCache:Ho,useCacheRefresh:Ns};Gs.useEffectEvent=vs;function Ks(e,t,n,r){t=e.memoizedState,n=n(r,t),n=n==null?t:m({},t,n),e.memoizedState=n,e.lanes===0&&(e.updateQueue.baseState=n)}var qs={enqueueSetState:function(e,t,n){e=e._reactInternals;var r=xu(),i=Xa(r);i.payload=t,n!=null&&(i.callback=n),t=Za(e,i,r),t!==null&&(Cu(t,e,r),N(t,e,r))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=xu(),i=Xa(r);i.tag=1,i.payload=t,n!=null&&(i.callback=n),t=Za(e,i,r),t!==null&&(Cu(t,e,r),N(t,e,r))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=xu(),r=Xa(n);r.tag=2,t!=null&&(r.callback=t),t=Za(e,r,n),t!==null&&(Cu(t,e,n),N(t,e,n))}};function Js(e,t,n,r,i,a,o){return e=e.stateNode,typeof e.shouldComponentUpdate==`function`?e.shouldComponentUpdate(r,a,o):t.prototype&&t.prototype.isPureReactComponent?!Ar(n,r)||!Ar(i,a):!0}function Ys(e,t,n,r){e=t.state,typeof t.componentWillReceiveProps==`function`&&t.componentWillReceiveProps(n,r),typeof t.UNSAFE_componentWillReceiveProps==`function`&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&qs.enqueueReplaceState(t,t.state,null)}function Xs(e,t){var n=t;if(`ref`in t)for(var r in n={},t)r!==`ref`&&(n[r]=t[r]);if(e=e.defaultProps)for(var i in n===t&&(n=m({},n)),e)n[i]===void 0&&(n[i]=e[i]);return n}function Zs(e){ri(e)}function Qs(e){console.error(e)}function $s(e){ri(e)}function ec(e,t){try{var n=e.onUncaughtError;n(t.value,{componentStack:t.stack})}catch(e){setTimeout(function(){throw e})}}function tc(e,t,n){try{var r=e.onCaughtError;r(n.value,{componentStack:n.stack,errorBoundary:t.tag===1?t.stateNode:null})}catch(e){setTimeout(function(){throw e})}}function nc(e,t,n){return n=Xa(n),n.tag=3,n.payload={element:null},n.callback=function(){ec(e,t)},n}function rc(e){return e=Xa(e),e.tag=3,e}function ic(e,t,n,r){var i=n.type.getDerivedStateFromError;if(typeof i==`function`){var a=r.value;e.payload=function(){return i(a)},e.callback=function(){tc(t,n,r)}}var o=n.stateNode;o!==null&&typeof o.componentDidCatch==`function`&&(e.callback=function(){tc(t,n,r),typeof i!=`function`&&(H===null?H=new Set([this]):H.add(this));var e=r.stack;this.componentDidCatch(r.value,{componentStack:e===null?``:e})})}function ac(e,t,n,r,a){if(n.flags|=32768,typeof r==`object`&&r&&typeof r.then==`function`){if(t=n.alternate,t!==null&&aa(t,n,a,!0),n=lo.current,n!==null){switch(n.tag){case 31:case 13:return uo===null?Fu():n.alternate===null&&$l===0&&($l=3),n.flags&=-257,n.flags|=65536,n.lanes=a,r===Ma?n.flags|=16384:(t=n.updateQueue,t===null?n.updateQueue=new Set([r]):t.add(r),$u(e,r,a)),!1;case 22:return n.flags|=65536,r===Ma?n.flags|=16384:(t=n.updateQueue,t===null?(t={transitions:null,markerInstances:null,retryQueue:new Set([r])},n.updateQueue=t):(n=t.retryQueue,n===null?t.retryQueue=new Set([r]):n.add(r)),$u(e,r,a)),!1}throw Error(i(435,n.tag))}return $u(e,r,a),Fu(),!1}if(M)return t=lo.current,t===null?(r!==Wi&&(t=Error(i(423),{cause:r}),Zi(Ti(t,n))),e=e.current.alternate,e.flags|=65536,a&=-a,e.lanes|=a,r=Ti(r,n),a=nc(e.stateNode,r,a),Qa(e,a),$l!==4&&($l=2)):(!(t.flags&65536)&&(t.flags|=256),t.flags|=65536,t.lanes=a,r!==Wi&&(e=Error(i(422),{cause:r}),Zi(Ti(e,n)))),!1;var o=Error(i(520),{cause:r});if(o=Ti(o,n),au===null?au=[o]:au.push(o),$l!==4&&($l=2),t===null)return!0;r=Ti(r,n),n=t;do{switch(n.tag){case 3:return n.flags|=65536,e=a&-a,n.lanes|=e,e=nc(n.stateNode,r,e),Qa(n,e),!1;case 1:if(t=n.type,o=n.stateNode,!(n.flags&128)&&(typeof t.getDerivedStateFromError==`function`||o!==null&&typeof o.componentDidCatch==`function`&&(H===null||!H.has(o))))return n.flags|=65536,a&=-a,n.lanes|=a,a=rc(a),ic(a,e,n,r),Qa(n,a),!1}n=n.return}while(n!==null);return!1}var oc=Error(i(461)),sc=!1;function cc(e,t,n,r){t.child=e===null?Ka(t,null,n,r):Ga(t,e.child,n,r)}function lc(e,t,n,r,i){n=n.render;var a=t.ref;if(`ref`in r){var o={};for(var s in r)s!==`ref`&&(o[s]=r[s])}else o=r;return sa(t),r=Ao(e,t,n,o,a,i),s=Po(),e!==null&&!sc?(Fo(e,t,i),Nc(e,t,i)):(M&&s&&Li(t),t.flags|=1,cc(e,t,r,i),t.child)}function uc(e,t,n,r,i){if(e===null){var a=n.type;return typeof a==`function`&&!gi(a)&&a.defaultProps===void 0&&n.compare===null?(t.tag=15,t.type=a,dc(e,t,a,r,i)):(e=yi(n.type,null,r,t,t.mode,i),e.ref=t.ref,e.return=t,t.child=e)}if(a=e.child,!Pc(e,i)){var o=a.memoizedProps;if(n=n.compare,n=n===null?Ar:n,n(o,r)&&e.ref===t.ref)return Nc(e,t,i)}return t.flags|=1,e=_i(a,r),e.ref=t.ref,e.return=t,t.child=e}function dc(e,t,n,r,i){if(e!==null){var a=e.memoizedProps;if(Ar(a,r)&&e.ref===t.ref)if(sc=!1,t.pendingProps=r=a,Pc(e,i))e.flags&131072&&(sc=!0);else return t.lanes=e.lanes,Nc(e,t,i)}return yc(e,t,n,r,i)}function fc(e,t,n,r){var i=r.children,a=e===null?null:e.memoizedState;if(e===null&&t.stateNode===null&&(t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),r.mode===`hidden`){if(t.flags&128){if(a=a===null?n:a.baseLanes|n,e!==null){for(r=t.child=e.child,i=0;r!==null;)i=i|r.lanes|r.childLanes,r=r.sibling;r=i&~a}else r=0,t.child=null;return mc(e,t,a,n,r)}if(n&536870912)t.memoizedState={baseLanes:0,cachePool:null},e!==null&&Da(t,a===null?null:a.cachePool),a===null?so():oo(t,a),mo(t);else return r=t.lanes=536870912,mc(e,t,a===null?n:a.baseLanes|n,n,r)}else a===null?(e!==null&&Da(t,null),so(),ho(t)):(Da(t,a.cachePool),oo(t,a),ho(t),t.memoizedState=null);return cc(e,t,i,n),t.child}function pc(e,t){return e!==null&&e.tag===22||t.stateNode!==null||(t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),t.sibling}function mc(e,t,n,r,i){var a=Ea();return a=a===null?null:{parent:ma._currentValue,pool:a},t.memoizedState={baseLanes:n,cachePool:a},e!==null&&Da(t,null),so(),mo(t),e!==null&&aa(e,t,r,!0),t.childLanes=i,null}function hc(e,t){return t=Oc({mode:t.mode,children:t.children},e.mode),t.ref=e.ref,e.child=t,t.return=e,t}function gc(e,t,n){return Ga(t,e.child,null,n),e=hc(t,t.pendingProps),e.flags|=2,go(t),t.memoizedState=null,e}function _c(e,t,n){var r=t.pendingProps,a=!!(t.flags&128);if(t.flags&=-129,e===null){if(M){if(r.mode===`hidden`)return e=hc(t,r),t.lanes=536870912,pc(null,e);if(po(t),(e=Vi)?(e=df(e,Ui),e=e!==null&&e.data===`&`?e:null,e!==null&&(t.memoizedState={dehydrated:e,treeContext:Mi===null?null:{id:Ni,overflow:Pi},retryLane:536870912,hydrationErrors:null},n=Si(e),n.return=t,t.child=n,Bi=t,Vi=null)):e=null,e===null)throw Gi(t);return t.lanes=536870912,null}return hc(t,r)}var o=e.memoizedState;if(o!==null){var s=o.dehydrated;if(po(t),a)if(t.flags&256)t.flags&=-257,t=gc(e,t,n);else if(t.memoizedState!==null)t.child=e.child,t.flags|=128,t=null;else throw Error(i(558));else if(sc||aa(e,t,n,!1),a=(n&e.childLanes)!==0,sc||a){if(r=Kl,r!==null&&(s=ct(r,n),s!==0&&s!==o.retryLane))throw o.retryLane=s,ui(e,s),Cu(r,e,s),oc;Fu(),t=gc(e,t,n)}else e=o.treeContext,Vi=hf(s.nextSibling),Bi=t,M=!0,Hi=null,Ui=!1,e!==null&&zi(t,e),t=hc(t,r),t.flags|=4096;return t}return e=_i(e.child,{mode:r.mode,children:r.children}),e.ref=t.ref,t.child=e,e.return=t,e}function vc(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(i(284));(e===null||e.ref!==n)&&(t.flags|=4194816)}}function yc(e,t,n,r,i){return sa(t),n=Ao(e,t,n,r,void 0,i),r=Po(),e!==null&&!sc?(Fo(e,t,i),Nc(e,t,i)):(M&&r&&Li(t),t.flags|=1,cc(e,t,n,i),t.child)}function bc(e,t,n,r,i,a){return sa(t),t.updateQueue=null,n=Mo(t,r,n,i),jo(e),r=Po(),e!==null&&!sc?(Fo(e,t,a),Nc(e,t,a)):(M&&r&&Li(t),t.flags|=1,cc(e,t,n,a),t.child)}function xc(e,t,n,r,i){if(sa(t),t.stateNode===null){var a=pi,o=n.contextType;typeof o==`object`&&o&&(a=ca(o)),a=new n(r,a),t.memoizedState=a.state!==null&&a.state!==void 0?a.state:null,a.updater=qs,t.stateNode=a,a._reactInternals=t,a=t.stateNode,a.props=r,a.state=t.memoizedState,a.refs={},Ja(t),o=n.contextType,a.context=typeof o==`object`&&o?ca(o):pi,a.state=t.memoizedState,o=n.getDerivedStateFromProps,typeof o==`function`&&(Ks(t,n,o,r),a.state=t.memoizedState),typeof n.getDerivedStateFromProps==`function`||typeof a.getSnapshotBeforeUpdate==`function`||typeof a.UNSAFE_componentWillMount!=`function`&&typeof a.componentWillMount!=`function`||(o=a.state,typeof a.componentWillMount==`function`&&a.componentWillMount(),typeof a.UNSAFE_componentWillMount==`function`&&a.UNSAFE_componentWillMount(),o!==a.state&&qs.enqueueReplaceState(a,a.state,null),to(t,r,a,i),eo(),a.state=t.memoizedState),typeof a.componentDidMount==`function`&&(t.flags|=4194308),r=!0}else if(e===null){a=t.stateNode;var s=t.memoizedProps,c=Xs(n,s);a.props=c;var l=a.context,u=n.contextType;o=pi,typeof u==`object`&&u&&(o=ca(u));var d=n.getDerivedStateFromProps;u=typeof d==`function`||typeof a.getSnapshotBeforeUpdate==`function`,s=t.pendingProps!==s,u||typeof a.UNSAFE_componentWillReceiveProps!=`function`&&typeof a.componentWillReceiveProps!=`function`||(s||l!==o)&&Ys(t,a,r,o),qa=!1;var f=t.memoizedState;a.state=f,to(t,r,a,i),eo(),l=t.memoizedState,s||f!==l||qa?(typeof d==`function`&&(Ks(t,n,d,r),l=t.memoizedState),(c=qa||Js(t,n,c,r,f,l,o))?(u||typeof a.UNSAFE_componentWillMount!=`function`&&typeof a.componentWillMount!=`function`||(typeof a.componentWillMount==`function`&&a.componentWillMount(),typeof a.UNSAFE_componentWillMount==`function`&&a.UNSAFE_componentWillMount()),typeof a.componentDidMount==`function`&&(t.flags|=4194308)):(typeof a.componentDidMount==`function`&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),a.props=r,a.state=l,a.context=o,r=c):(typeof a.componentDidMount==`function`&&(t.flags|=4194308),r=!1)}else{a=t.stateNode,Ya(e,t),o=t.memoizedProps,u=Xs(n,o),a.props=u,d=t.pendingProps,f=a.context,l=n.contextType,c=pi,typeof l==`object`&&l&&(c=ca(l)),s=n.getDerivedStateFromProps,(l=typeof s==`function`||typeof a.getSnapshotBeforeUpdate==`function`)||typeof a.UNSAFE_componentWillReceiveProps!=`function`&&typeof a.componentWillReceiveProps!=`function`||(o!==d||f!==c)&&Ys(t,a,r,c),qa=!1,f=t.memoizedState,a.state=f,to(t,r,a,i),eo();var p=t.memoizedState;o!==d||f!==p||qa||e!==null&&e.dependencies!==null&&oa(e.dependencies)?(typeof s==`function`&&(Ks(t,n,s,r),p=t.memoizedState),(u=qa||Js(t,n,u,r,f,p,c)||e!==null&&e.dependencies!==null&&oa(e.dependencies))?(l||typeof a.UNSAFE_componentWillUpdate!=`function`&&typeof a.componentWillUpdate!=`function`||(typeof a.componentWillUpdate==`function`&&a.componentWillUpdate(r,p,c),typeof a.UNSAFE_componentWillUpdate==`function`&&a.UNSAFE_componentWillUpdate(r,p,c)),typeof a.componentDidUpdate==`function`&&(t.flags|=4),typeof a.getSnapshotBeforeUpdate==`function`&&(t.flags|=1024)):(typeof a.componentDidUpdate!=`function`||o===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),typeof a.getSnapshotBeforeUpdate!=`function`||o===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=p),a.props=r,a.state=p,a.context=c,r=u):(typeof a.componentDidUpdate!=`function`||o===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),typeof a.getSnapshotBeforeUpdate!=`function`||o===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),r=!1)}return a=r,vc(e,t),r=!!(t.flags&128),a||r?(a=t.stateNode,n=r&&typeof n.getDerivedStateFromError!=`function`?null:a.render(),t.flags|=1,e!==null&&r?(t.child=Ga(t,e.child,null,i),t.child=Ga(t,null,n,i)):cc(e,t,n,i),t.memoizedState=a.state,e=t.child):e=Nc(e,t,i),e}function Sc(e,t,n,r){return Yi(),t.flags|=256,cc(e,t,n,r),t.child}var Cc={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function wc(e){return{baseLanes:e,cachePool:Oa()}}function Tc(e,t,n){return e=e===null?0:e.childLanes&~n,t&&(e|=ru),e}function Ec(e,t,n){var r=t.pendingProps,a=!1,o=!!(t.flags&128),s;if((s=o)||(s=e!==null&&e.memoizedState===null?!1:!!(_o.current&2)),s&&(a=!0,t.flags&=-129),s=!!(t.flags&32),t.flags&=-33,e===null){if(M){if(a?fo(t):ho(t),(e=Vi)?(e=df(e,Ui),e=e!==null&&e.data!==`&`?e:null,e!==null&&(t.memoizedState={dehydrated:e,treeContext:Mi===null?null:{id:Ni,overflow:Pi},retryLane:536870912,hydrationErrors:null},n=Si(e),n.return=t,t.child=n,Bi=t,Vi=null)):e=null,e===null)throw Gi(t);return pf(e)?t.lanes=32:t.lanes=536870912,null}var c=r.children;return r=r.fallback,a?(ho(t),a=t.mode,c=Oc({mode:`hidden`,children:c},a),r=bi(r,a,n,null),c.return=t,r.return=t,c.sibling=r,t.child=c,r=t.child,r.memoizedState=wc(n),r.childLanes=Tc(e,s,n),t.memoizedState=Cc,pc(null,r)):(fo(t),Dc(t,c))}var l=e.memoizedState;if(l!==null&&(c=l.dehydrated,c!==null)){if(o)t.flags&256?(fo(t),t.flags&=-257,t=kc(e,t,n)):t.memoizedState===null?(ho(t),c=r.fallback,a=t.mode,r=Oc({mode:`visible`,children:r.children},a),c=bi(c,a,n,null),c.flags|=2,r.return=t,c.return=t,r.sibling=c,t.child=r,Ga(t,e.child,null,n),r=t.child,r.memoizedState=wc(n),r.childLanes=Tc(e,s,n),t.memoizedState=Cc,t=pc(null,r)):(ho(t),t.child=e.child,t.flags|=128,t=null);else if(fo(t),pf(c)){if(s=c.nextSibling&&c.nextSibling.dataset,s)var u=s.dgst;s=u,r=Error(i(419)),r.stack=``,r.digest=s,Zi({value:r,source:null,stack:null}),t=kc(e,t,n)}else if(sc||aa(e,t,n,!1),s=(n&e.childLanes)!==0,sc||s){if(s=Kl,s!==null&&(r=ct(s,n),r!==0&&r!==l.retryLane))throw l.retryLane=r,ui(e,r),Cu(s,e,r),oc;ff(c)||Fu(),t=kc(e,t,n)}else ff(c)?(t.flags|=192,t.child=e.child,t=null):(e=l.treeContext,Vi=hf(c.nextSibling),Bi=t,M=!0,Hi=null,Ui=!1,e!==null&&zi(t,e),t=Dc(t,r.children),t.flags|=4096);return t}return a?(ho(t),c=r.fallback,a=t.mode,l=e.child,u=l.sibling,r=_i(l,{mode:`hidden`,children:r.children}),r.subtreeFlags=l.subtreeFlags&65011712,u===null?(c=bi(c,a,n,null),c.flags|=2):c=_i(u,c),c.return=t,r.return=t,r.sibling=c,t.child=r,pc(null,r),r=t.child,c=e.child.memoizedState,c===null?c=wc(n):(a=c.cachePool,a===null?a=Oa():(l=ma._currentValue,a=a.parent===l?a:{parent:l,pool:l}),c={baseLanes:c.baseLanes|n,cachePool:a}),r.memoizedState=c,r.childLanes=Tc(e,s,n),t.memoizedState=Cc,pc(e.child,r)):(fo(t),n=e.child,e=n.sibling,n=_i(n,{mode:`visible`,children:r.children}),n.return=t,n.sibling=null,e!==null&&(s=t.deletions,s===null?(t.deletions=[e],t.flags|=16):s.push(e)),t.child=n,t.memoizedState=null,n)}function Dc(e,t){return t=Oc({mode:`visible`,children:t},e.mode),t.return=e,e.child=t}function Oc(e,t){return e=hi(22,e,null,t),e.lanes=0,e}function kc(e,t,n){return Ga(t,e.child,null,n),e=Dc(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function Ac(e,t,n){e.lanes|=t;var r=e.alternate;r!==null&&(r.lanes|=t),ra(e.return,t,n)}function jc(e,t,n,r,i,a){var o=e.memoizedState;o===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:i,treeForkCount:a}:(o.isBackwards=t,o.rendering=null,o.renderingStartTime=0,o.last=r,o.tail=n,o.tailMode=i,o.treeForkCount=a)}function Mc(e,t,n){var r=t.pendingProps,i=r.revealOrder,a=r.tail;r=r.children;var o=_o.current,s=!!(o&2);if(s?(o=o&1|2,t.flags|=128):o&=1,fe(_o,o),cc(e,t,r,n),r=M?ki:0,!s&&e!==null&&e.flags&128)a:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&Ac(e,n,t);else if(e.tag===19)Ac(e,n,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break a;for(;e.sibling===null;){if(e.return===null||e.return===t)break a;e=e.return}e.sibling.return=e.return,e=e.sibling}switch(i){case`forwards`:for(n=t.child,i=null;n!==null;)e=n.alternate,e!==null&&vo(e)===null&&(i=n),n=n.sibling;n=i,n===null?(i=t.child,t.child=null):(i=n.sibling,n.sibling=null),jc(t,!1,i,n,a,r);break;case`backwards`:case`unstable_legacy-backwards`:for(n=null,i=t.child,t.child=null;i!==null;){if(e=i.alternate,e!==null&&vo(e)===null){t.child=i;break}e=i.sibling,i.sibling=n,n=i,i=e}jc(t,!0,n,null,a,r);break;case`together`:jc(t,!1,null,null,void 0,r);break;default:t.memoizedState=null}return t.child}function Nc(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),eu|=t.lanes,(n&t.childLanes)===0)if(e!==null){if(aa(e,t,n,!1),(n&t.childLanes)===0)return null}else return null;if(e!==null&&t.child!==e.child)throw Error(i(153));if(t.child!==null){for(e=t.child,n=_i(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=_i(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function Pc(e,t){return(e.lanes&t)!==0||(e=e.dependencies,!!(e!==null&&oa(e)))}function Fc(e,t,n){switch(t.tag){case 3:_e(t,t.stateNode.containerInfo),ta(t,ma,e.memoizedState.cache),Yi();break;case 27:case 5:ye(t);break;case 4:_e(t,t.stateNode.containerInfo);break;case 10:ta(t,t.type,t.memoizedProps.value);break;case 31:if(t.memoizedState!==null)return t.flags|=128,po(t),null;break;case 13:var r=t.memoizedState;if(r!==null)return r.dehydrated===null?(n&t.child.childLanes)===0?(fo(t),e=Nc(e,t,n),e===null?null:e.sibling):Ec(e,t,n):(fo(t),t.flags|=128,null);fo(t);break;case 19:var i=!!(e.flags&128);if(r=(n&t.childLanes)!==0,r||=(aa(e,t,n,!1),(n&t.childLanes)!==0),i){if(r)return Mc(e,t,n);t.flags|=128}if(i=t.memoizedState,i!==null&&(i.rendering=null,i.tail=null,i.lastEffect=null),fe(_o,_o.current),r)break;return null;case 22:return t.lanes=0,fc(e,t,n,t.pendingProps);case 24:ta(t,ma,e.memoizedState.cache)}return Nc(e,t,n)}function Ic(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps)sc=!0;else{if(!Pc(e,n)&&!(t.flags&128))return sc=!1,Fc(e,t,n);sc=!!(e.flags&131072)}else sc=!1,M&&t.flags&1048576&&Ii(t,ki,t.index);switch(t.lanes=0,t.tag){case 16:a:{var r=t.pendingProps;if(e=Fa(t.elementType),t.type=e,typeof e==`function`)gi(e)?(r=Xs(e,r),t.tag=1,t=xc(null,t,e,r,n)):(t.tag=0,t=yc(null,t,e,r,n));else{if(e!=null){var a=e.$$typeof;if(a===C){t.tag=11,t=lc(null,t,e,r,n);break a}if(a===E){t.tag=14,t=uc(null,t,e,r,n);break a}}throw t=ae(e)||e,Error(i(306,t,``))}}return t;case 0:return yc(e,t,t.type,t.pendingProps,n);case 1:return r=t.type,a=Xs(r,t.pendingProps),xc(e,t,r,a,n);case 3:a:{if(_e(t,t.stateNode.containerInfo),e===null)throw Error(i(387));r=t.pendingProps;var o=t.memoizedState;a=o.element,Ya(e,t),to(t,r,null,n);var s=t.memoizedState;if(r=s.cache,ta(t,ma,r),r!==o.cache&&ia(t,[ma],n,!0),eo(),r=s.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:s.cache},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){t=Sc(e,t,r,n);break a}else if(r!==a){a=Ti(Error(i(424)),t),Zi(a),t=Sc(e,t,r,n);break a}else{switch(e=t.stateNode.containerInfo,e.nodeType){case 9:e=e.body;break;default:e=e.nodeName===`HTML`?e.ownerDocument.body:e}for(Vi=hf(e.firstChild),Bi=t,M=!0,Hi=null,Ui=!0,n=Ka(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling}else{if(Yi(),r===a){t=Nc(e,t,n);break a}cc(e,t,r,n)}t=t.child}return t;case 26:return vc(e,t),e===null?(n=Ff(t.type,null,t.pendingProps,null))?t.memoizedState=n:M||(n=t.type,e=t.pendingProps,r=qd(he.current).createElement(n),r[mt]=t,r[ht]=e,Vd(r,n,e),Dt(r),t.stateNode=r):t.memoizedState=Ff(t.type,e.memoizedProps,t.pendingProps,e.memoizedState),null;case 27:return ye(t),e===null&&M&&(r=t.stateNode=yf(t.type,t.pendingProps,he.current),Bi=t,Ui=!0,a=Vi,af(t.type)?(gf=a,Vi=hf(r.firstChild)):Vi=a),cc(e,t,t.pendingProps.children,n),vc(e,t),e===null&&(t.flags|=4194304),t.child;case 5:return e===null&&M&&((a=r=Vi)&&(r=lf(r,t.type,t.pendingProps,Ui),r===null?a=!1:(t.stateNode=r,Bi=t,Vi=hf(r.firstChild),Ui=!1,a=!0)),a||Gi(t)),ye(t),a=t.type,o=t.pendingProps,s=e===null?null:e.memoizedProps,r=o.children,Xd(a,o)?r=null:s!==null&&Xd(a,s)&&(t.flags|=32),t.memoizedState!==null&&(a=Ao(e,t,No,null,null,n),ip._currentValue=a),vc(e,t),cc(e,t,r,n),t.child;case 6:return e===null&&M&&((e=n=Vi)&&(n=uf(n,t.pendingProps,Ui),n===null?e=!1:(t.stateNode=n,Bi=t,Vi=null,e=!0)),e||Gi(t)),null;case 13:return Ec(e,t,n);case 4:return _e(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Ga(t,null,r,n):cc(e,t,r,n),t.child;case 11:return lc(e,t,t.type,t.pendingProps,n);case 7:return cc(e,t,t.pendingProps,n),t.child;case 8:return cc(e,t,t.pendingProps.children,n),t.child;case 12:return cc(e,t,t.pendingProps.children,n),t.child;case 10:return r=t.pendingProps,ta(t,t.type,r.value),cc(e,t,r.children,n),t.child;case 9:return a=t.type._context,r=t.pendingProps.children,sa(t),a=ca(a),r=r(a),t.flags|=1,cc(e,t,r,n),t.child;case 14:return uc(e,t,t.type,t.pendingProps,n);case 15:return dc(e,t,t.type,t.pendingProps,n);case 19:return Mc(e,t,n);case 31:return _c(e,t,n);case 22:return fc(e,t,n,t.pendingProps);case 24:return sa(t),r=ca(ma),e===null?(a=Ea(),a===null&&(a=Kl,o=ha(),a.pooledCache=o,o.refCount++,o!==null&&(a.pooledCacheLanes|=n),a=o),t.memoizedState={parent:r,cache:a},Ja(t),ta(t,ma,a)):((e.lanes&n)!==0&&(Ya(e,t),to(t,null,null,n),eo()),a=e.memoizedState,o=t.memoizedState,a.parent===r?(r=o.cache,ta(t,ma,r),r!==a.cache&&ia(t,[ma],n,!0)):(a={parent:r,cache:r},t.memoizedState=a,t.lanes===0&&(t.memoizedState=t.updateQueue.baseState=a),ta(t,ma,r))),cc(e,t,t.pendingProps.children,n),t.child;case 29:throw t.pendingProps}throw Error(i(156,t.tag))}function Lc(e){e.flags|=4}function Rc(e,t,n,r,i){if((t=!!(e.mode&32))&&(t=!1),t){if(e.flags|=16777216,(i&335544128)===i)if(e.stateNode.complete)e.flags|=8192;else if(Mu())e.flags|=8192;else throw Ia=Ma,Aa}else e.flags&=-16777217}function zc(e,t){if(t.type!==`stylesheet`||t.state.loading&4)e.flags&=-16777217;else if(e.flags|=16777216,!Xf(t))if(Mu())e.flags|=8192;else throw Ia=Ma,Aa}function Bc(e,t){t!==null&&(e.flags|=4),e.flags&16384&&(t=e.tag===22?536870912:nt(),e.lanes|=t,iu|=t)}function Vc(e,t){if(!M)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 r=null;n!==null;)n.alternate!==null&&(r=n),n=n.sibling;r===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Hc(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,r=0;if(t)for(var i=e.child;i!==null;)n|=i.lanes|i.childLanes,r|=i.subtreeFlags&65011712,r|=i.flags&65011712,i.return=e,i=i.sibling;else for(i=e.child;i!==null;)n|=i.lanes|i.childLanes,r|=i.subtreeFlags,r|=i.flags,i.return=e,i=i.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function Uc(e,t,n){var r=t.pendingProps;switch(Ri(t),t.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Hc(t),null;case 1:return Hc(t),null;case 3:return n=t.stateNode,r=null,e!==null&&(r=e.memoizedState.cache),t.memoizedState.cache!==r&&(t.flags|=2048),na(ma),ve(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),(e===null||e.child===null)&&(Ji(t)?Lc(t):e===null||e.memoizedState.isDehydrated&&!(t.flags&256)||(t.flags|=1024,Xi())),Hc(t),null;case 26:var a=t.type,o=t.memoizedState;return e===null?(Lc(t),o===null?(Hc(t),Rc(t,a,null,r,n)):(Hc(t),zc(t,o))):o?o===e.memoizedState?(Hc(t),t.flags&=-16777217):(Lc(t),Hc(t),zc(t,o)):(e=e.memoizedProps,e!==r&&Lc(t),Hc(t),Rc(t,a,e,r,n)),null;case 27:if(be(t),n=he.current,a=t.type,e!==null&&t.stateNode!=null)e.memoizedProps!==r&&Lc(t);else{if(!r){if(t.stateNode===null)throw Error(i(166));return Hc(t),null}e=pe.current,Ji(t)?Ki(t,e):(e=yf(a,r,n),t.stateNode=e,Lc(t))}return Hc(t),null;case 5:if(be(t),a=t.type,e!==null&&t.stateNode!=null)e.memoizedProps!==r&&Lc(t);else{if(!r){if(t.stateNode===null)throw Error(i(166));return Hc(t),null}if(o=pe.current,Ji(t))Ki(t,o);else{var s=qd(he.current);switch(o){case 1:o=s.createElementNS(`http://www.w3.org/2000/svg`,a);break;case 2:o=s.createElementNS(`http://www.w3.org/1998/Math/MathML`,a);break;default:switch(a){case`svg`:o=s.createElementNS(`http://www.w3.org/2000/svg`,a);break;case`math`:o=s.createElementNS(`http://www.w3.org/1998/Math/MathML`,a);break;case`script`:o=s.createElement(`div`),o.innerHTML=`<script><\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(a,{is:r.is}):s.createElement(a)}}o[mt]=t,o[ht]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(Vd(o,a,r),a){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&Lc(t)}}return Hc(t),Rc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&Lc(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=he.current,Ji(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=Bi,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[mt]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||zd(e.nodeValue,n)),e||Gi(t,!0)}else e=qd(e).createTextNode(r),e[mt]=t,t.stateNode=e}return Hc(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=Ji(t),n!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(557));e[mt]=t}else Yi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Hc(t),e=!1}else n=Xi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(go(t),t):(go(t),null);if(t.flags&128)throw Error(i(558))}return Hc(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=Ji(t),r!==null&&r.dehydrated!==null){if(e===null){if(!a)throw Error(i(318));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(i(317));a[mt]=t}else Yi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Hc(t),a=!1}else a=Xi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(go(t),t):(go(t),null)}return go(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,a=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(a=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==a&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Bc(t,t.updateQueue),Hc(t),null);case 4:return ve(),e===null&&kd(t.stateNode.containerInfo),Hc(t),null;case 10:return na(t.type),Hc(t),null;case 19:if(de(_o),r=t.memoizedState,r===null)return Hc(t),null;if(a=!!(t.flags&128),o=r.rendering,o===null)if(a)Vc(r,!1);else{if($l!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=vo(e),o!==null){for(t.flags|=128,Vc(r,!1),e=o.updateQueue,t.updateQueue=e,Bc(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)vi(n,e),n=n.sibling;return fe(_o,_o.current&1|2),M&&Fi(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Ne()>uu&&(t.flags|=128,a=!0,Vc(r,!1),t.lanes=4194304)}else{if(!a)if(e=vo(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,Bc(t,e),Vc(r,!0),r.tail===null&&r.tailMode===`hidden`&&!o.alternate&&!M)return Hc(t),null}else 2*Ne()-r.renderingStartTime>uu&&n!==536870912&&(t.flags|=128,a=!0,Vc(r,!1),t.lanes=4194304);r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}return r.tail===null?(Hc(t),null):(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Ne(),e.sibling=null,n=_o.current,fe(_o,a?n&1|2:n&1),M&&Fi(t,r.treeForkCount),e);case 22:case 23:return go(t),co(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(Hc(t),t.subtreeFlags&6&&(t.flags|=8192)):Hc(t),n=t.updateQueue,n!==null&&Bc(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&de(Ta),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),na(ma),Hc(t),null;case 25:return null;case 30:return null}throw Error(i(156,t.tag))}function Wc(e,t){switch(Ri(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return na(ma),ve(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return be(t),null;case 31:if(t.memoizedState!==null){if(go(t),t.alternate===null)throw Error(i(340));Yi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(go(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));Yi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return de(_o),null;case 4:return ve(),null;case 10:return na(t.type),null;case 22:case 23:return go(t),co(),e!==null&&de(Ta),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return na(ma),null;case 25:return null;default:return null}}function Gc(e,t){switch(Ri(t),t.tag){case 3:na(ma),ve();break;case 26:case 27:case 5:be(t);break;case 4:ve();break;case 31:t.memoizedState!==null&&go(t);break;case 13:go(t);break;case 19:de(_o);break;case 10:na(t.type);break;case 22:case 23:go(t),co(),e!==null&&de(Ta);break;case 24:na(ma)}}function Kc(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){U(t,t.return,e)}}function qc(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){U(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){U(t,t.return,e)}}function Jc(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{ro(t,n)}catch(t){U(e,e.return,t)}}}function Yc(e,t,n){n.props=Xs(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){U(e,t,n)}}function Xc(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){U(e,t,n)}}function Zc(e,t){var n=e.ref,r=e.refCleanup;if(n!==null)if(typeof r==`function`)try{r()}catch(n){U(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){U(e,t,n)}else n.current=null}function Qc(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{a:switch(t){case`button`:case`input`:case`select`:case`textarea`:n.autoFocus&&r.focus();break a;case`img`:n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(t){U(e,e.return,t)}}function $c(e,t,n){try{var r=e.stateNode;Hd(r,e.type,n,t),r[ht]=t}catch(t){U(e,e.return,t)}}function el(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&af(e.type)||e.tag===4}function tl(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||el(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&&af(e.type)||e.flags&2||e.child===null||e.tag===4)continue a;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function nl(e,t,n){var r=e.tag;if(r===5||r===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=cn));else if(r!==4&&(r===27&&af(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(nl(e,t,n),e=e.sibling;e!==null;)nl(e,t,n),e=e.sibling}function rl(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(r===27&&af(e.type)&&(n=e.stateNode),e=e.child,e!==null))for(rl(e,t,n),e=e.sibling;e!==null;)rl(e,t,n),e=e.sibling}function il(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);Vd(t,r,n),t[mt]=e,t[ht]=n}catch(t){U(e,e.return,t)}}var al=!1,ol=!1,sl=!1,cl=typeof WeakSet==`function`?WeakSet:Set,ll=null;function ul(e,t){if(e=e.containerInfo,Gd=pp,e=Pr(e),Fr(e)){if(`selectionStart`in e)var n={start:e.selectionStart,end:e.selectionEnd};else a:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break a}var s=0,c=-1,l=-1,u=0,d=0,f=e,p=null;b:for(;;){for(var m;f!==n||a!==0&&f.nodeType!==3||(c=s+a),f!==o||r!==0&&f.nodeType!==3||(l=s+r),f.nodeType===3&&(s+=f.nodeValue.length),(m=f.firstChild)!==null;)p=f,f=m;for(;;){if(f===e)break b;if(p===n&&++u===a&&(c=s),p===o&&++d===r&&(l=s),(m=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=m}n=c===-1||l===-1?null:{start:c,end:l}}else n=null}n||={start:0,end:0}}else n=null;for(Kd={focusedElem:e,selectionRange:n},pp=!1,ll=t;ll!==null;)if(t=ll,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,ll=e;else for(;ll!==null;){switch(t=ll,o=t.alternate,e=t.flags,t.tag){case 0:if(e&4&&(e=t.updateQueue,e=e===null?null:e.events,e!==null))for(n=0;n<e.length;n++)a=e[n],a.ref.impl=a.nextImpl;break;case 11:case 15:break;case 1:if(e&1024&&o!==null){e=void 0,n=t,a=o.memoizedProps,o=o.memoizedState,r=n.stateNode;try{var h=Xs(n.type,a);e=r.getSnapshotBeforeUpdate(h,o),r.__reactInternalSnapshotBeforeUpdate=e}catch(e){U(n,n.return,e)}}break;case 3:if(e&1024){if(e=t.stateNode.containerInfo,n=e.nodeType,n===9)cf(e);else if(n===1)switch(e.nodeName){case`HEAD`:case`HTML`:case`BODY`:cf(e);break;default:e.textContent=``}}break;case 5:case 26:case 27:case 6:case 4:case 17:break;default:if(e&1024)throw Error(i(163))}if(e=t.sibling,e!==null){e.return=t.return,ll=e;break}ll=t.return}}function dl(e,t,n){var r=n.flags;switch(n.tag){case 0:case 11:case 15:El(e,n),r&4&&Kc(5,n);break;case 1:if(El(e,n),r&4)if(e=n.stateNode,t===null)try{e.componentDidMount()}catch(e){U(n,n.return,e)}else{var i=Xs(n.type,t.memoizedProps);t=t.memoizedState;try{e.componentDidUpdate(i,t,e.__reactInternalSnapshotBeforeUpdate)}catch(e){U(n,n.return,e)}}r&64&&Jc(n),r&512&&Xc(n,n.return);break;case 3:if(El(e,n),r&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{ro(e,t)}catch(e){U(n,n.return,e)}}break;case 27:t===null&&r&4&&il(n);case 26:case 5:El(e,n),t===null&&r&4&&Qc(n),r&512&&Xc(n,n.return);break;case 12:El(e,n);break;case 31:El(e,n),r&4&&_l(e,n);break;case 13:El(e,n),r&4&&vl(e,n),r&64&&(e=n.memoizedState,e!==null&&(e=e.dehydrated,e!==null&&(n=nd.bind(null,n),mf(e,n))));break;case 22:if(r=n.memoizedState!==null||al,!r){t=t!==null&&t.memoizedState!==null||ol,i=al;var a=ol;al=r,(ol=t)&&!a?Ol(e,n,!!(n.subtreeFlags&8772)):El(e,n),al=i,ol=a}break;case 30:break;default:El(e,n)}}function fl(e){var t=e.alternate;t!==null&&(e.alternate=null,fl(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&St(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 pl=null,ml=!1;function hl(e,t,n){for(n=n.child;n!==null;)gl(e,t,n),n=n.sibling}function gl(e,t,n){if(Ue&&typeof Ue.onCommitFiberUnmount==`function`)try{Ue.onCommitFiberUnmount(He,n)}catch{}switch(n.tag){case 26:ol||Zc(n,t),hl(e,t,n),n.memoizedState?n.memoizedState.count--:n.stateNode&&(n=n.stateNode,n.parentNode.removeChild(n));break;case 27:ol||Zc(n,t);var r=pl,i=ml;af(n.type)&&(pl=n.stateNode,ml=!1),hl(e,t,n),bf(n.stateNode),pl=r,ml=i;break;case 5:ol||Zc(n,t);
vendor: 3,803 bytes, line 9
9case 6:if(r=pl,i=ml,pl=null,hl(e,t,n),pl=r,ml=i,pl!==null)if(ml)try{(pl.nodeType===9?pl.body:pl.nodeName===`HTML`?pl.ownerDocument.body:pl).removeChild(n.stateNode)}catch(e){U(n,t,e)}else try{pl.removeChild(n.stateNode)}catch(e){U(n,t,e)}break;case 18:pl!==null&&(ml?(e=pl,of(e.nodeType===9?e.body:e.nodeName===`HTML`?e.ownerDocument.body:e,n.stateNode),Rp(e)):of(pl,n.stateNode));break;case 4:r=pl,i=ml,pl=n.stateNode.containerInfo,ml=!0,hl(e,t,n),pl=r,ml=i;break;case 0:case 11:case 14:case 15:qc(2,n,t),ol||qc(4,n,t),hl(e,t,n);break;case 1:ol||(Zc(n,t),r=n.stateNode,typeof r.componentWillUnmount==`function`&&Yc(n,t,r)),hl(e,t,n);break;case 21:hl(e,t,n);break;case 22:ol=(r=ol)||n.memoizedState!==null,hl(e,t,n),ol=r;break;default:hl(e,t,n)}}function _l(e,t){if(t.memoizedState===null&&(e=t.alternate,e!==null&&(e=e.memoizedState,e!==null))){e=e.dehydrated;try{Rp(e)}catch(e){U(t,t.return,e)}}}function vl(e,t){if(t.memoizedState===null&&(e=t.alternate,e!==null&&(e=e.memoizedState,e!==null&&(e=e.dehydrated,e!==null))))try{Rp(e)}catch(e){U(t,t.return,e)}}function yl(e){switch(e.tag){case 31:case 13:case 19:var t=e.stateNode;return t===null&&(t=e.stateNode=new cl),t;case 22:return e=e.stateNode,t=e._retryCache,t===null&&(t=e._retryCache=new cl),t;default:throw Error(i(435,e.tag))}}function bl(e,t){var n=yl(e);t.forEach(function(t){if(!n.has(t)){n.add(t);var r=rd.bind(null,e,t);t.then(r,r)}})}function xl(e,t){var n=t.deletions;if(n!==null)for(var r=0;r<n.length;r++){var a=n[r],o=e,s=t,c=s;a:for(;c!==null;){switch(c.tag){case 27:if(af(c.type)){pl=c.stateNode,ml=!1;break a}break;case 5:pl=c.stateNode,ml=!1;break a;case 3:case 4:pl=c.stateNode.containerInfo,ml=!0;break a}c=c.return}if(pl===null)throw Error(i(160));gl(o,s,a),pl=null,ml=!1,o=a.alternate,o!==null&&(o.return=null),a.return=null}if(t.subtreeFlags&13886)for(t=t.child;t!==null;)Cl(t,e),t=t.sibling}var Sl=null;function Cl(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:xl(t,e),wl(e),r&4&&(qc(3,e,e.return),Kc(3,e),qc(5,e,e.return));break;case 1:xl(t,e),wl(e),r&512&&(ol||n===null||Zc(n,n.return)),r&64&&al&&(e=e.updateQueue,e!==null&&(r=e.callbacks,r!==null&&(n=e.shared.hiddenCallbacks,e.shared.hiddenCallbacks=n===null?r:n.concat(r))));break;case 26:var a=Sl;if(xl(t,e),wl(e),r&512&&(ol||n===null||Zc(n,n.return)),r&4){var o=n===null?null:n.memoizedState;if(r=e.memoizedState,n===null)if(r===null)if(e.stateNode===null){a:{r=e.type,n=e.memoizedProps,a=a.ownerDocument||a;b:switch(r){case`title`:o=a.getElementsByTagName(`title`)[0],(!o||o[xt]||o[mt]||o.namespaceURI===`http://www.w3.org/2000/svg`||o.hasAttribute(`itemprop`))&&(o=a.createElement(r),a.head.insertBefore(o,a.querySelector(`head > title`))),Vd(o,r,n),o[mt]=e,Dt(o),r=o;break a;case`link`:var s=qf(`link`,`href`,a).get(r+(n.href||``));if(s){for(var c=0;c<s.length;c++)if(o=s[c],o.getAttribute(`href`)===(n.href==null||n.href===``?null:n.href)&&o.getAttribute(`rel`)===(n.rel==null?null:n.rel)&&o.getAttribute(`title`)===(n.title==null?null:n.title)&&o.getAttribute(`crossorigin`)===(n.crossOrigin==null?null:n.crossOrigin)){s.splice(c,1);break b}}o=a.createElement(r),Vd(o,r,n),a.head.appendChild(o);break;case`meta`:if(s=qf(`meta`,`content`,a).get(r+(n.content||``))){for(c=0;c<s.length;c++)if(o=s[c],o.getAttribute(`content`)===(n.content==null?null:``+n.content)&&o.getAttribute(`name`)===(n.name==null?null:n.name)&&o.getAttribute(`property`)===(n.property==null?null:n.property)&&o.getAttribute(`http-equiv`)===(n.httpEquiv==null?null:n.httpEquiv)&&o.getAttribute(`charset`)===(n.charSet==null?null:n.charSet)){s.splice(c,1);break b}}o=a.createElement(r),Vd(o,r,n),a.head.appendChild(o);break;default:throw Error(i(468,r))}o[mt]=e,Dt(o),r=o}e.stateNode=r}else Jf(a,e.type,e.stateNode);else e.stateNode=Hf(a,r,e.memoizedProps);
vendor: 65,868 bytes, lines 9-10
9else o===r?r===null&&e.stateNode!==null&&$c(e,e.memoizedProps,n.memoizedProps):(o===null?n.stateNode!==null&&(n=n.stateNode,n.parentNode.removeChild(n)):o.count--,r===null?Jf(a,e.type,e.stateNode):Hf(a,r,e.memoizedProps))}break;case 27:xl(t,e),wl(e),r&512&&(ol||n===null||Zc(n,n.return)),n!==null&&r&4&&$c(e,e.memoizedProps,n.memoizedProps);break;case 5:if(xl(t,e),wl(e),r&512&&(ol||n===null||Zc(n,n.return)),e.flags&32){a=e.stateNode;try{$t(a,``)}catch(t){U(e,e.return,t)}}r&4&&e.stateNode!=null&&(a=e.memoizedProps,$c(e,a,n===null?a:n.memoizedProps)),r&1024&&(sl=!0);break;case 6:if(xl(t,e),wl(e),r&4){if(e.stateNode===null)throw Error(i(162));r=e.memoizedProps,n=e.stateNode;try{n.nodeValue=r}catch(t){U(e,e.return,t)}}break;case 3:if(Kf=null,a=Sl,Sl=Cf(t.containerInfo),xl(t,e),Sl=a,wl(e),r&4&&n!==null&&n.memoizedState.isDehydrated)try{Rp(t.containerInfo)}catch(t){U(e,e.return,t)}sl&&(sl=!1,Tl(e));break;case 4:r=Sl,Sl=Cf(e.stateNode.containerInfo),xl(t,e),wl(e),Sl=r;break;case 12:xl(t,e),wl(e);break;case 31:xl(t,e),wl(e),r&4&&(r=e.updateQueue,r!==null&&(e.updateQueue=null,bl(e,r)));break;case 13:xl(t,e),wl(e),e.child.flags&8192&&e.memoizedState!==null!=(n!==null&&n.memoizedState!==null)&&(cu=Ne()),r&4&&(r=e.updateQueue,r!==null&&(e.updateQueue=null,bl(e,r)));break;case 22:a=e.memoizedState!==null;var l=n!==null&&n.memoizedState!==null,u=al,d=ol;if(al=u||a,ol=d||l,xl(t,e),ol=d,al=u,wl(e),r&8192)a:for(t=e.stateNode,t._visibility=a?t._visibility&-2:t._visibility|1,a&&(n===null||l||al||ol||Dl(e)),n=null,t=e;;){if(t.tag===5||t.tag===26){if(n===null){l=n=t;try{if(o=l.stateNode,a)s=o.style,typeof s.setProperty==`function`?s.setProperty(`display`,`none`,`important`):s.display=`none`;else{c=l.stateNode;var f=l.memoizedProps.style,p=f!=null&&f.hasOwnProperty(`display`)?f.display:null;c.style.display=p==null||typeof p==`boolean`?``:(``+p).trim()}}catch(e){U(l,l.return,e)}}}else if(t.tag===6){if(n===null){l=t;try{l.stateNode.nodeValue=a?``:l.memoizedProps}catch(e){U(l,l.return,e)}}}else if(t.tag===18){if(n===null){l=t;try{var m=l.stateNode;a?sf(m,!0):sf(l.stateNode,!1)}catch(e){U(l,l.return,e)}}}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 a;for(;t.sibling===null;){if(t.return===null||t.return===e)break a;n===t&&(n=null),t=t.return}n===t&&(n=null),t.sibling.return=t.return,t=t.sibling}r&4&&(r=e.updateQueue,r!==null&&(n=r.retryQueue,n!==null&&(r.retryQueue=null,bl(e,n))));break;case 19:xl(t,e),wl(e),r&4&&(r=e.updateQueue,r!==null&&(e.updateQueue=null,bl(e,r)));break;case 30:break;case 21:break;default:xl(t,e),wl(e)}}function wl(e){var t=e.flags;if(t&2){try{for(var n,r=e.return;r!==null;){if(el(r)){n=r;break}r=r.return}if(n==null)throw Error(i(160));switch(n.tag){case 27:var a=n.stateNode;rl(e,tl(e),a);break;case 5:var o=n.stateNode;n.flags&32&&($t(o,``),n.flags&=-33),rl(e,tl(e),o);break;case 3:case 4:var s=n.stateNode.containerInfo;nl(e,tl(e),s);break;default:throw Error(i(161))}}catch(t){U(e,e.return,t)}e.flags&=-3}t&4096&&(e.flags&=-4097)}function Tl(e){if(e.subtreeFlags&1024)for(e=e.child;e!==null;){var t=e;Tl(t),t.tag===5&&t.flags&1024&&t.stateNode.reset(),e=e.sibling}}function El(e,t){if(t.subtreeFlags&8772)for(t=t.child;t!==null;)dl(e,t.alternate,t),t=t.sibling}function Dl(e){for(e=e.child;e!==null;){var t=e;switch(t.tag){case 0:case 11:case 14:case 15:qc(4,t,t.return),Dl(t);break;case 1:Zc(t,t.return);var n=t.stateNode;typeof n.componentWillUnmount==`function`&&Yc(t,t.return,n),Dl(t);break;case 27:bf(t.stateNode);case 26:case 5:Zc(t,t.return),Dl(t);break;case 22:t.memoizedState===null&&Dl(t);break;case 30:Dl(t);break;default:Dl(t)}e=e.sibling}}function Ol(e,t,n){for(n&&=!!(t.subtreeFlags&8772),t=t.child;t!==null;){var r=t.alternate,i=e,a=t,o=a.flags;switch(a.tag){case 0:case 11:case 15:Ol(i,a,n),Kc(4,a);break;case 1:if(Ol(i,a,n),r=a,i=r.stateNode,typeof i.componentDidMount==`function`)try{i.componentDidMount()}catch(e){U(r,r.return,e)}if(r=a,i=r.updateQueue,i!==null){var s=r.stateNode;try{var c=i.shared.hiddenCallbacks;if(c!==null)for(i.shared.hiddenCallbacks=null,i=0;i<c.length;i++)no(c[i],s)}catch(e){U(r,r.return,e)}}n&&o&64&&Jc(a),Xc(a,a.return);break;case 27:il(a);case 26:case 5:Ol(i,a,n),n&&r===null&&o&4&&Qc(a),Xc(a,a.return);break;case 12:Ol(i,a,n);break;case 31:Ol(i,a,n),n&&o&4&&_l(i,a);break;case 13:Ol(i,a,n),n&&o&4&&vl(i,a);break;case 22:a.memoizedState===null&&Ol(i,a,n),Xc(a,a.return);break;case 30:break;default:Ol(i,a,n)}t=t.sibling}}function kl(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&&ga(n))}function Al(e,t){e=null,t.alternate!==null&&(e=t.alternate.memoizedState.cache),t=t.memoizedState.cache,t!==e&&(t.refCount++,e!=null&&ga(e))}function jl(e,t,n,r){if(t.subtreeFlags&10256)for(t=t.child;t!==null;)Ml(e,t,n,r),t=t.sibling}function Ml(e,t,n,r){var i=t.flags;switch(t.tag){case 0:case 11:case 15:jl(e,t,n,r),i&2048&&Kc(9,t);break;case 1:jl(e,t,n,r);break;case 3:jl(e,t,n,r),i&2048&&(e=null,t.alternate!==null&&(e=t.alternate.memoizedState.cache),t=t.memoizedState.cache,t!==e&&(t.refCount++,e!=null&&ga(e)));break;case 12:if(i&2048){jl(e,t,n,r),e=t.stateNode;try{var a=t.memoizedProps,o=a.id,s=a.onPostCommit;typeof s==`function`&&s(o,t.alternate===null?`mount`:`update`,e.passiveEffectDuration,-0)}catch(e){U(t,t.return,e)}}else jl(e,t,n,r);break;case 31:jl(e,t,n,r);break;case 13:jl(e,t,n,r);break;case 23:break;case 22:a=t.stateNode,o=t.alternate,t.memoizedState===null?a._visibility&2?jl(e,t,n,r):(a._visibility|=2,Nl(e,t,n,r,!!(t.subtreeFlags&10256)||!1)):a._visibility&2?jl(e,t,n,r):Pl(e,t),i&2048&&kl(o,t);break;case 24:jl(e,t,n,r),i&2048&&Al(t.alternate,t);break;default:jl(e,t,n,r)}}function Nl(e,t,n,r,i){for(i&&=!!(t.subtreeFlags&10256)||!1,t=t.child;t!==null;){var a=e,o=t,s=n,c=r,l=o.flags;switch(o.tag){case 0:case 11:case 15:Nl(a,o,s,c,i),Kc(8,o);break;case 23:break;case 22:var u=o.stateNode;o.memoizedState===null?(u._visibility|=2,Nl(a,o,s,c,i)):u._visibility&2?Nl(a,o,s,c,i):Pl(a,o),i&&l&2048&&kl(o.alternate,o);break;case 24:Nl(a,o,s,c,i),i&&l&2048&&Al(o.alternate,o);break;default:Nl(a,o,s,c,i)}t=t.sibling}}function Pl(e,t){if(t.subtreeFlags&10256)for(t=t.child;t!==null;){var n=e,r=t,i=r.flags;switch(r.tag){case 22:Pl(n,r),i&2048&&kl(r.alternate,r);break;case 24:Pl(n,r),i&2048&&Al(r.alternate,r);break;default:Pl(n,r)}t=t.sibling}}var Fl=8192;function Il(e,t,n){if(e.subtreeFlags&Fl)for(e=e.child;e!==null;)Ll(e,t,n),e=e.sibling}function Ll(e,t,n){switch(e.tag){case 26:Il(e,t,n),e.flags&Fl&&e.memoizedState!==null&&Zf(n,Sl,e.memoizedState,e.memoizedProps);break;case 5:Il(e,t,n);break;case 3:case 4:var r=Sl;Sl=Cf(e.stateNode.containerInfo),Il(e,t,n),Sl=r;break;case 22:e.memoizedState===null&&(r=e.alternate,r!==null&&r.memoizedState!==null?(r=Fl,Fl=16777216,Il(e,t,n),Fl=r):Il(e,t,n));break;default:Il(e,t,n)}}function Rl(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 zl(e){var t=e.deletions;if(e.flags&16){if(t!==null)for(var n=0;n<t.length;n++){var r=t[n];ll=r,Hl(r,e)}Rl(e)}if(e.subtreeFlags&10256)for(e=e.child;e!==null;)Bl(e),e=e.sibling}function Bl(e){switch(e.tag){case 0:case 11:case 15:zl(e),e.flags&2048&&qc(9,e,e.return);break;case 3:zl(e);break;case 12:zl(e);break;case 22:var t=e.stateNode;e.memoizedState!==null&&t._visibility&2&&(e.return===null||e.return.tag!==13)?(t._visibility&=-3,Vl(e)):zl(e);break;default:zl(e)}}function Vl(e){var t=e.deletions;if(e.flags&16){if(t!==null)for(var n=0;n<t.length;n++){var r=t[n];ll=r,Hl(r,e)}Rl(e)}for(e=e.child;e!==null;){switch(t=e,t.tag){case 0:case 11:case 15:qc(8,t,t.return),Vl(t);break;case 22:n=t.stateNode,n._visibility&2&&(n._visibility&=-3,Vl(t));break;default:Vl(t)}e=e.sibling}}function Hl(e,t){for(;ll!==null;){var n=ll;switch(n.tag){case 0:case 11:case 15:qc(8,n,t);break;case 23:case 22:if(n.memoizedState!==null&&n.memoizedState.cachePool!==null){var r=n.memoizedState.cachePool.pool;r!=null&&r.refCount++}break;case 24:ga(n.memoizedState.cache)}if(r=n.child,r!==null)r.return=n,ll=r;else a:for(n=e;ll!==null;){r=ll;var i=r.sibling,a=r.return;if(fl(r),r===n){ll=null;break a}if(i!==null){i.return=a,ll=i;break a}ll=a}}}var Ul={getCacheForType:function(e){var t=ca(ma),n=t.data.get(e);return n===void 0&&(n=e(),t.data.set(e,n)),n},cacheSignal:function(){return ca(ma).controller.signal}},Wl=typeof WeakMap==`function`?WeakMap:Map,Gl=0,Kl=null,B=null,V=0,ql=0,Jl=null,Yl=!1,Xl=!1,Zl=!1,Ql=0,$l=0,eu=0,tu=0,nu=0,ru=0,iu=0,au=null,ou=null,su=!1,cu=0,lu=0,uu=1/0,du=null,H=null,fu=0,pu=null,mu=null,hu=0,gu=0,_u=null,vu=null,yu=0,bu=null;function xu(){return Gl&2&&V!==0?V&-V:O.T===null?dt():vd()}function Su(){if(ru===0)if(!(V&536870912)||M){var e=Xe;Xe<<=1,!(Xe&3932160)&&(Xe=262144),ru=e}else ru=536870912;return e=lo.current,e!==null&&(e.flags|=32),ru}function Cu(e,t,n){(e===Kl&&(ql===2||ql===9)||e.cancelPendingCommit!==null)&&(Au(e,0),Du(e,V,ru,!1)),it(e,n),(!(Gl&2)||e!==Kl)&&(e===Kl&&(!(Gl&2)&&(tu|=n),$l===4&&Du(e,V,ru,!1)),ud(e))}function wu(e,t,n){if(Gl&6)throw Error(i(327));var r=!n&&!(t&127)&&(t&e.expiredLanes)===0||et(e,t),a=r?Ru(e,t):Iu(e,t,!0),o=r;do{if(a===0){Xl&&!r&&Du(e,t,0,!1);break}if(n=e.current.alternate,o&&!Eu(n)){a=Iu(e,t,!1),o=!1;continue}if(a===2){if(o=t,e.errorRecoveryDisabledLanes&o)var s=0;else s=e.pendingLanes&-536870913,s=s===0?s&536870912?536870912:0:s;if(s!==0){t=s;a:{var c=e;a=au;var l=c.current.memoizedState.isDehydrated;if(l&&(Au(c,s).flags|=256),s=Iu(c,s,!1),s!==2){if(Zl&&!l){c.errorRecoveryDisabledLanes|=o,tu|=o,a=4;break a}o=ou,ou=a,o!==null&&(ou===null?ou=o:ou.push.apply(ou,o))}a=s}if(o=!1,a!==2)continue}}if(a===1){Au(e,0),Du(e,t,0,!0);break}a:{switch(r=e,o=a,o){case 0:case 1:throw Error(i(345));case 4:if((t&4194048)!==t)break;case 6:Du(r,t,ru,!Yl);break a;case 2:ou=null;break;case 3:case 5:break;default:throw Error(i(329))}if((t&62914560)===t&&(a=cu+300-Ne(),10<a)){if(Du(r,t,ru,!Yl),$e(r,0,!0)!==0)break a;hu=t,r.timeoutHandle=$d(Tu.bind(null,r,n,ou,du,su,t,ru,tu,iu,Yl,o,`Throttled`,-0,0),a);break a}Tu(r,n,ou,du,su,t,ru,tu,iu,Yl,o,null,-0,0)}break}while(1);ud(e)}function Tu(e,t,n,r,i,a,o,s,c,l,u,d,f,p){if(e.timeoutHandle=-1,d=t.subtreeFlags,d&8192||(d&16785408)==16785408){d={stylesheets:null,count:0,imgCount:0,imgBytes:0,suspenseyImages:[],waitingForImages:!0,waitingForViewTransition:!1,unsuspend:cn},Ll(t,a,d);var m=(a&62914560)===a?cu-Ne():(a&4194048)===a?lu-Ne():0;if(m=$f(d,m),m!==null){hu=a,e.cancelPendingCommit=m(Gu.bind(null,e,t,a,n,r,i,o,s,c,u,d,null,f,p)),Du(e,a,o,!l);return}}Gu(e,t,a,n,r,i,o,s,c)}function Eu(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 r=0;r<n.length;r++){var i=n[r],a=i.getSnapshot;i=i.value;try{if(!kr(a(),i))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 Du(e,t,n,r){t&=~nu,t&=~tu,e.suspendedLanes|=t,e.pingedLanes&=~t,r&&(e.warmLanes|=t),r=e.expirationTimes;for(var i=t;0<i;){var a=31-Ge(i),o=1<<a;r[a]=-1,i&=~o}n!==0&&ot(e,n,t)}function Ou(){return Gl&6?!0:(dd(0,!1),!1)}function ku(){if(B!==null){if(ql===0)var e=B.return;else e=B,ea=$i=null,Io(e),za=null,Ba=0,e=B;for(;e!==null;)Gc(e.alternate,e),e=e.return;B=null}}function Au(e,t){var n=e.timeoutHandle;n!==-1&&(e.timeoutHandle=-1,ef(n)),n=e.cancelPendingCommit,n!==null&&(e.cancelPendingCommit=null,n()),hu=0,ku(),Kl=e,B=n=_i(e.current,null),V=t,ql=0,Jl=null,Yl=!1,Xl=et(e,t),Zl=!1,iu=ru=nu=tu=eu=$l=0,ou=au=null,su=!1,t&8&&(t|=t&32);var r=e.entangledLanes;if(r!==0)for(e=e.entanglements,r&=t;0<r;){var i=31-Ge(r),a=1<<i;t|=e[i],r&=~a}return Ql=t,si(),n}function ju(e,t){P=null,O.H=Hs,t===ka||t===ja?(t=La(),ql=3):t===Aa?(t=La(),ql=4):ql=t===oc?8:typeof t==`object`&&t&&typeof t.then==`function`?6:1,Jl=t,B===null&&($l=1,ec(e,Ti(t,e.current)))}function Mu(){var e=lo.current;return e===null?!0:(V&4194048)===V?uo===null:(V&62914560)===V||V&536870912?e===uo:!1}function Nu(){var e=O.H;return O.H=Hs,e===null?Hs:e}function Pu(){var e=O.A;return O.A=Ul,e}function Fu(){$l=4,Yl||(V&4194048)!==V&&lo.current!==null||(Xl=!0),!(eu&134217727)&&!(tu&134217727)||Kl===null||Du(Kl,V,ru,!1)}function Iu(e,t,n){var r=Gl;Gl|=2;var i=Nu(),a=Pu();(Kl!==e||V!==t)&&(du=null,Au(e,t)),t=!1;var o=$l;a:do try{if(ql!==0&&B!==null){var s=B,c=Jl;switch(ql){case 8:ku(),o=6;break a;case 3:case 2:case 9:case 6:lo.current===null&&(t=!0);var l=ql;if(ql=0,Jl=null,Hu(e,s,c,l),n&&Xl){o=0;break a}break;default:l=ql,ql=0,Jl=null,Hu(e,s,c,l)}}Lu(),o=$l;break}catch(t){ju(e,t)}while(1);return t&&e.shellSuspendCounter++,ea=$i=null,Gl=r,O.H=i,O.A=a,B===null&&(Kl=null,V=0,si()),o}function Lu(){for(;B!==null;)Bu(B)}function Ru(e,t){var n=Gl;Gl|=2;var r=Nu(),a=Pu();Kl!==e||V!==t?(du=null,uu=Ne()+500,Au(e,t)):Xl=et(e,t);a:do try{if(ql!==0&&B!==null){t=B;var o=Jl;b:switch(ql){case 1:ql=0,Jl=null,Hu(e,t,o,1);break;case 2:case 9:if(Na(o)){ql=0,Jl=null,Vu(t);break}t=function(){ql!==2&&ql!==9||Kl!==e||(ql=7),ud(e)},o.then(t,t);break a;case 3:ql=7;break a;case 4:ql=5;break a;case 7:Na(o)?(ql=0,Jl=null,Vu(t)):(ql=0,Jl=null,Hu(e,t,o,7));break;case 5:var s=null;switch(B.tag){case 26:s=B.memoizedState;case 5:case 27:var c=B;if(s?Xf(s):c.stateNode.complete){ql=0,Jl=null;var l=c.sibling;if(l!==null)B=l;else{var u=c.return;u===null?B=null:(B=u,Uu(u))}break b}}ql=0,Jl=null,Hu(e,t,o,5);break;case 6:ql=0,Jl=null,Hu(e,t,o,6);break;case 8:ku(),$l=6;break a;default:throw Error(i(462))}}zu();break}catch(t){ju(e,t)}while(1);return ea=$i=null,O.H=r,O.A=a,Gl=n,B===null?(Kl=null,V=0,si(),$l):0}function zu(){for(;B!==null&&!je();)Bu(B)}function Bu(e){var t=Ic(e.alternate,e,Ql);e.memoizedProps=e.pendingProps,t===null?Uu(e):B=t}function Vu(e){var t=e,n=t.alternate;switch(t.tag){case 15:case 0:t=bc(n,t,t.pendingProps,t.type,void 0,V);break;case 11:t=bc(n,t,t.pendingProps,t.type.render,t.ref,V);break;case 5:Io(t);default:Gc(n,t),t=B=vi(t,Ql),t=Ic(n,t,Ql)}e.memoizedProps=e.pendingProps,t===null?Uu(e):B=t}function Hu(e,t,n,r){ea=$i=null,Io(t),za=null,Ba=0;var i=t.return;try{if(ac(e,i,t,n,V)){$l=1,ec(e,Ti(n,e.current)),B=null;return}}catch(t){if(i!==null)throw B=i,t;$l=1,ec(e,Ti(n,e.current)),B=null;return}t.flags&32768?(M||r===1?e=!0:Xl||V&536870912?e=!1:(Yl=e=!0,(r===2||r===9||r===3||r===6)&&(r=lo.current,r!==null&&r.tag===13&&(r.flags|=16384))),Wu(t,e)):Uu(t)}function Uu(e){var t=e;do{if(t.flags&32768){Wu(t,Yl);return}e=t.return;var n=Uc(t.alternate,t,Ql);if(n!==null){B=n;return}if(t=t.sibling,t!==null){B=t;return}B=t=e}while(t!==null);$l===0&&($l=5)}function Wu(e,t){do{var n=Wc(e.alternate,e);if(n!==null){n.flags&=32767,B=n;return}if(n=e.return,n!==null&&(n.flags|=32768,n.subtreeFlags=0,n.deletions=null),!t&&(e=e.sibling,e!==null)){B=e;return}B=e=n}while(e!==null);$l=6,B=null}function Gu(e,t,n,r,a,o,s,c,l){e.cancelPendingCommit=null;do Xu();while(fu!==0);if(Gl&6)throw Error(i(327));if(t!==null){if(t===e.current)throw Error(i(177));if(o=t.lanes|t.childLanes,o|=oi,at(e,n,o,s,c,l),e===Kl&&(B=Kl=null,V=0),mu=t,pu=e,hu=n,gu=o,_u=a,vu=r,t.subtreeFlags&10256||t.flags&10256?(e.callbackNode=null,e.callbackPriority=0,id(A,function(){return Zu(),null})):(e.callbackNode=null,e.callbackPriority=0),r=!!(t.flags&13878),t.subtreeFlags&13878||r){r=O.T,O.T=null,a=k.p,k.p=2,s=Gl,Gl|=4;try{ul(e,t,n)}finally{Gl=s,k.p=a,O.T=r}}fu=1,Ku(),qu(),Ju()}}function Ku(){if(fu===1){fu=0;var e=pu,t=mu,n=!!(t.flags&13878);if(t.subtreeFlags&13878||n){n=O.T,O.T=null;var r=k.p;k.p=2;var i=Gl;Gl|=4;try{Cl(t,e);var a=Kd,o=Pr(e.containerInfo),s=a.focusedElem,c=a.selectionRange;if(o!==s&&s&&s.ownerDocument&&Nr(s.ownerDocument.documentElement,s)){if(c!==null&&Fr(s)){var l=c.start,u=c.end;if(u===void 0&&(u=l),`selectionStart`in s)s.selectionStart=l,s.selectionEnd=Math.min(u,s.value.length);else{var d=s.ownerDocument||document,f=d&&d.defaultView||window;if(f.getSelection){var p=f.getSelection(),m=s.textContent.length,h=Math.min(c.start,m),g=c.end===void 0?h:Math.min(c.end,m);!p.extend&&h>g&&(o=g,g=h,h=o);var _=Mr(s,h),v=Mr(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;s<d.length;s++){var b=d[s];b.element.scrollLeft=b.left,b.element.scrollTop=b.top}}pp=!!Gd,Kd=Gd=null}finally{Gl=i,k.p=r,O.T=n}}e.current=t,fu=2}}function qu(){if(fu===2){fu=0;var e=pu,t=mu,n=!!(t.flags&8772);if(t.subtreeFlags&8772||n){n=O.T,O.T=null;var r=k.p;k.p=2;var i=Gl;Gl|=4;try{dl(e,t.alternate,t)}finally{Gl=i,k.p=r,O.T=n}}fu=3}}function Ju(){if(fu===4||fu===3){fu=0,Me();var e=pu,t=mu,n=hu,r=vu;t.subtreeFlags&10256||t.flags&10256?fu=5:(fu=0,mu=pu=null,Yu(e,e.pendingLanes));var i=e.pendingLanes;if(i===0&&(H=null),ut(n),t=t.stateNode,Ue&&typeof Ue.onCommitFiberRoot==`function`)try{Ue.onCommitFiberRoot(He,t,void 0,(t.current.flags&128)==128)}catch{}if(r!==null){t=O.T,i=k.p,k.p=2,O.T=null;try{for(var a=e.onRecoverableError,o=0;o<r.length;o++){var s=r[o];a(s.value,{componentStack:s.stack})}}finally{O.T=t,k.p=i}}hu&3&&Xu(),ud(e),i=e.pendingLanes,n&261930&&i&42?e===bu?yu++:(yu=0,bu=e):yu=0,dd(0,!1)}}function Yu(e,t){(e.pooledCacheLanes&=t)===0&&(t=e.pooledCache,t!=null&&(e.pooledCache=null,ga(t)))}function Xu(){return Ku(),qu(),Ju(),Zu()}function Zu(){if(fu!==5)return!1;var e=pu,t=gu;gu=0;var n=ut(hu),r=O.T,a=k.p;try{k.p=32>n?32:n,O.T=null,n=_u,_u=null;var o=pu,s=hu;if(fu=0,mu=pu=null,hu=0,Gl&6)throw Error(i(331));var c=Gl;if(Gl|=4,Bl(o.current),Ml(o,o.current,s,n),Gl=c,dd(0,!1),Ue&&typeof Ue.onPostCommitFiberRoot==`function`)try{Ue.onPostCommitFiberRoot(He,o)}catch{}return!0}finally{k.p=a,O.T=r,Yu(e,t)}}function Qu(e,t,n){t=Ti(n,t),t=nc(e.stateNode,t,2),e=Za(e,t,2),e!==null&&(it(e,2),ud(e))}function U(e,t,n){if(e.tag===3)Qu(e,e,n);else for(;t!==null;){if(t.tag===3){Qu(t,e,n);break}if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(H===null||!H.has(r))){e=Ti(n,e),n=rc(2),r=Za(t,n,2),r!==null&&(ic(n,r,t,e),it(r,2),ud(r));break}}t=t.return}}function $u(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Wl;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(Zl=!0,i.add(n),e=ed.bind(null,e,t,n),t.then(e,e))}function ed(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,Kl===e&&(V&n)===n&&($l===4||$l===3&&(V&62914560)===V&&300>Ne()-cu?!(Gl&2)&&Au(e,0):nu|=n,iu===V&&(iu=0)),ud(e)}function td(e,t){t===0&&(t=nt()),e=ui(e,t),e!==null&&(it(e,t),ud(e))}function nd(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),td(e,n)}function rd(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),td(e,n)}function id(e,t){return ke(e,t)}var ad=null,od=null,sd=!1,cd=!1,W=!1,ld=0;function ud(e){e!==od&&e.next===null&&(od===null?ad=od=e:od=od.next=e),cd=!0,sd||(sd=!0,_d())}function dd(e,t){if(!W&&cd){W=!0;do for(var n=!1,r=ad;r!==null;){if(!t)if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-Ge(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,gd(r,a))}else a=V,a=$e(r,r===Kl?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||et(r,a)||(n=!0,gd(r,a));r=r.next}while(n);W=!1}}function fd(){pd()}function pd(){cd=sd=!1;var e=0;ld!==0&&Qd()&&(e=ld);for(var t=Ne(),n=null,r=ad;r!==null;){var i=r.next,a=md(r,t);a===0?(r.next=null,n===null?ad=i:n.next=i,i===null&&(od=n)):(n=r,(e!==0||a&3)&&(cd=!0)),r=i}fu!==0&&fu!==5||dd(e,!1),ld!==0&&(ld=0)}function md(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0<a;){var o=31-Ge(a),s=1<<o,c=i[o];c===-1?((s&n)===0||(s&r)!==0)&&(i[o]=tt(s,t)):c<=t&&(e.expiredLanes|=s),a&=~s}if(t=Kl,n=V,n=$e(e,e===t?n:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),r=e.callbackNode,n===0||e===t&&(ql===2||ql===9)||e.cancelPendingCommit!==null)return r!==null&&r!==null&&Ae(r),e.callbackNode=null,e.callbackPriority=0;if(!(n&3)||et(e,n)){if(t=n&-n,t===e.callbackPriority)return t;switch(r!==null&&Ae(r),ut(n)){case 2:case 8:n=Ie;break;case 32:n=A;break;case 268435456:n=Re;break;default:n=A}return r=hd.bind(null,e),n=ke(n,r),e.callbackPriority=t,e.callbackNode=n,t}return r!==null&&r!==null&&Ae(r),e.callbackPriority=2,e.callbackNode=null,2}function hd(e,t){if(fu!==0&&fu!==5)return e.callbackNode=null,e.callbackPriority=0,null;var n=e.callbackNode;if(Xu()&&e.callbackNode!==n)return null;var r=V;return r=$e(e,e===Kl?r:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),r===0?null:(wu(e,r,t),md(e,Ne()),e.callbackNode!=null&&e.callbackNode===n?hd.bind(null,e):null)}function gd(e,t){if(Xu())return null;wu(e,t,!0)}function _d(){nf(function(){Gl&6?ke(Fe,fd):pd()})}function vd(){if(ld===0){var e=ya;e===0&&(e=Ye,Ye<<=1,!(Ye&261888)&&(Ye=256)),ld=e}return ld}function yd(e){return e==null||typeof e==`symbol`||typeof e==`boolean`?null:typeof e==`function`?e:sn(``+e)}function bd(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 xd(e,t,n,r,i){if(t===`submit`&&n&&n.stateNode===i){var a=yd((i[ht]||null).action),o=r.submitter;o&&(t=(t=o[ht]||null)?yd(t.formAction):o.getAttribute(`formAction`),t!==null&&(a=t,o=null));var s=new kn(`action`,`action`,null,r,i);e.push({event:s,listeners:[{instance:null,listener:function(){if(r.defaultPrevented){if(ld!==0){var e=o?bd(i,o):new FormData(i);Os(n,{pending:!0,data:e,method:i.method,action:a},null,e)}}else typeof a==`function`&&(s.preventDefault(),e=o?bd(i,o):new FormData(i),Os(n,{pending:!0,data:e,method:i.method,action:a},a,e))},currentTarget:i}]})}}for(var Sd=0;Sd<ti.length;Sd++){var Cd=ti[Sd];ni(Cd.toLowerCase(),`on`+(Cd[0].toUpperCase()+Cd.slice(1)))}ni(qr,`onAnimationEnd`),ni(Jr,`onAnimationIteration`),ni(Yr,`onAnimationStart`),ni(`dblclick`,`onDoubleClick`),ni(`focusin`,`onFocus`),ni(`focusout`,`onBlur`),ni(Xr,`onTransitionRun`),ni(Zr,`onTransitionStart`),ni(Qr,`onTransitionCancel`),ni($r,`onTransitionEnd`),jt(`onMouseEnter`,[`mouseout`,`mouseover`]),jt(`onMouseLeave`,[`mouseout`,`mouseover`]),jt(`onPointerEnter`,[`pointerout`,`pointerover`]),jt(`onPointerLeave`,[`pointerout`,`pointerover`]),At(`onChange`,`change click focusin focusout input keydown keyup selectionchange`.split(` `)),At(`onSelect`,`focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange`.split(` `)),At(`onBeforeInput`,[`compositionend`,`keypress`,`textInput`,`paste`]),At(`onCompositionEnd`,`compositionend focusout keydown keypress keyup mousedown`.split(` `)),At(`onCompositionStart`,`compositionstart focusout keydown keypress keyup mousedown`.split(` `)),At(`onCompositionUpdate`,`compositionupdate focusout keydown keypress keyup mousedown`.split(` `));var wd=`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(` `),Td=new Set(`beforetoggle cancel close invalid load scroll scrollend toggle`.split(` `).concat(wd));function Ed(e,t){t=!!(t&4);for(var n=0;n<e.length;n++){var r=e[n],i=r.event;r=r.listeners;a:{var a=void 0;if(t)for(var o=r.length-1;0<=o;o--){var s=r[o],c=s.instance,l=s.currentTarget;if(s=s.listener,c!==a&&i.isPropagationStopped())break a;a=s,i.currentTarget=l;try{a(i)}catch(e){ri(e)}i.currentTarget=null,a=c}else for(o=0;o<r.length;o++){if(s=r[o],c=s.instance,l=s.currentTarget,s=s.listener,c!==a&&i.isPropagationStopped())break a;a=s,i.currentTarget=l;try{a(i)}catch(e){ri(e)}i.currentTarget=null,a=c}}}}function G(e,t){var n=t[_t];n===void 0&&(n=t[_t]=new Set);var r=e+`__bubble`;n.has(r)||(Ad(t,e,2,!1),n.add(r))}function Dd(e,t,n){var r=0;t&&(r|=4),Ad(n,e,r,t)}var Od=`_reactListening`+Math.random().toString(36).slice(2);function kd(e){if(!e[Od]){e[Od]=!0,Ot.forEach(function(t){t!==`selectionchange`&&(Td.has(t)||Dd(t,!1,e),Dd(t,!0,e))});var t=e.nodeType===9?e:e.ownerDocument;t===null||t[Od]||(t[Od]=!0,Dd(`selectionchange`,!1,t))}}function Ad(e,t,n,r){switch(yp(t)){case 2:var i=mp;break;case 8:i=hp;break;default:i=gp}n=i.bind(null,t,n,e),i=void 0,!vn||t!==`touchstart`&&t!==`touchmove`&&t!==`wheel`||(i=!0),r?i===void 0?e.addEventListener(t,n,!0):e.addEventListener(t,n,{capture:!0,passive:i}):i===void 0?e.addEventListener(t,n,!1):e.addEventListener(t,n,{passive:i})}function jd(e,t,n,r,i){var a=r;if(!(t&1)&&!(t&2)&&r!==null)a:for(;;){if(r===null)return;var o=r.tag;if(o===3||o===4){var s=r.stateNode.containerInfo;if(s===i)break;if(o===4)for(o=r.return;o!==null;){var l=o.tag;if((l===3||l===4)&&o.stateNode.containerInfo===i)return;o=o.return}for(;s!==null;){if(o=Ct(s),o===null)return;if(l=o.tag,l===5||l===6||l===26||l===27){r=a=o;continue a}s=s.parentNode}}r=r.return}hn(function(){var r=a,i=un(n),o=[];a:{var s=ei.get(e);if(s!==void 0){var l=kn,u=e;switch(e){case`keypress`:if(wn(n)===0)break a;case`keydown`:case`keyup`:l=Kn;break;case`focusin`:u=`focus`,l=Rn;break;case`focusout`:u=`blur`,l=Rn;break;case`beforeblur`:case`afterblur`:l=Rn;break;case`click`:if(n.button===2)break a;case`auxclick`:case`dblclick`:case`mousedown`:case`mousemove`:case`mouseup`:case`mouseout`:case`mouseover`:case`contextmenu`:l=In;break;case`drag`:case`dragend`:case`dragenter`:case`dragexit`:case`dragleave`:case`dragover`:case`dragstart`:case`drop`:l=Ln;break;case`touchcancel`:case`touchend`:case`touchmove`:case`touchstart`:l=Jn;break;case qr:case Jr:case Yr:l=zn;break;case $r:l=Yn;break;case`scroll`:case`scrollend`:l=jn;break;case`wheel`:l=Xn;break;case`copy`:case`cut`:case`paste`:l=Bn;break;case`gotpointercapture`:case`lostpointercapture`:case`pointercancel`:case`pointerdown`:case`pointermove`:case`pointerout`:case`pointerover`:case`pointerup`:l=qn;break;case`toggle`:case`beforetoggle`:l=Zn}var d=!!(t&4),f=!d&&(e===`scroll`||e===`scrollend`),p=d?s===null?null:s+`Capture`:s;d=[];for(var m=r,h;m!==null;){var g=m;if(h=g.stateNode,g=g.tag,g!==5&&g!==26&&g!==27||h===null||p===null||(g=gn(m,p),g!=null&&d.push(Md(m,g,h))),f)break;m=m.return}0<d.length&&(s=new l(s,u,null,n,i),o.push({event:s,listeners:d}))}}if(!(t&7)){a:{if(s=e===`mouseover`||e===`pointerover`,l=e===`mouseout`||e===`pointerout`,s&&n!==ln&&(u=n.relatedTarget||n.fromElement)&&(Ct(u)||u[gt]))break a;if((l||s)&&(s=i.window===i?i:(s=i.ownerDocument)?s.defaultView||s.parentWindow:window,l?(u=n.relatedTarget||n.toElement,l=r,u=u?Ct(u):null,u!==null&&(f=c(u),d=u.tag,u!==f||d!==5&&d!==27&&d!==6)&&(u=null)):(l=null,u=r),l!==u)){if(d=In,g=`onMouseLeave`,p=`onMouseEnter`,m=`mouse`,(e===`pointerout`||e===`pointerover`)&&(d=qn,g=`onPointerLeave`,p=`onPointerEnter`,m=`pointer`),f=l==null?s:Tt(l),h=u==null?s:Tt(u),s=new d(g,m+`leave`,l,n,i),s.target=f,s.relatedTarget=h,g=null,Ct(i)===r&&(d=new d(p,m+`enter`,u,n,i),d.target=h,d.relatedTarget=f,g=d),f=g,l&&u)b:{for(d=Pd,p=l,m=u,h=0,g=p;g;g=d(g))h++;g=0;for(var _=m;_;_=d(_))g++;for(;0<h-g;)p=d(p),h--;for(;0<g-h;)m=d(m),g--;for(;h--;){if(p===m||m!==null&&p===m.alternate){d=p;break b}p=d(p),m=d(m)}d=null}else d=null;l!==null&&Fd(o,s,l,d,!1),u!==null&&f!==null&&Fd(o,f,u,d,!0)}}a:{if(s=r?Tt(r):window,l=s.nodeName&&s.nodeName.toLowerCase(),l===`select`||l===`input`&&s.type===`file`)var v=_r;else if(dr(s))if(vr)v=Dr;else{v=Tr;var y=wr}else l=s.nodeName,!l||l.toLowerCase()!==`input`||s.type!==`checkbox`&&s.type!==`radio`?r&&rn(r.elementType)&&(v=_r):v=Er;if(v&&=v(e,r)){fr(o,v,n,i);break a}y&&y(e,s,r),e===`focusout`&&r&&s.type===`number`&&r.memoizedProps.value!=null&&Yt(s,`number`,s.value)}switch(y=r?Tt(r):window,e){case`focusin`:(dr(y)||y.contentEditable===`true`)&&(Lr=y,Rr=r,zr=null);break;case`focusout`:zr=Rr=Lr=null;break;case`mousedown`:Br=!0;break;case`contextmenu`:case`mouseup`:case`dragend`:Br=!1,Vr(o,n,i);break;case`selectionchange`:if(Ir)break;case`keydown`:case`keyup`:Vr(o,n,i)}var b;if($n)b:{switch(e){case`compositionstart`:var x=`onCompositionStart`;break b;case`compositionend`:x=`onCompositionEnd`;break b;case`compositionupdate`:x=`onCompositionUpdate`;break b}x=void 0}else sr?ar(e,n)&&(x=`onCompositionEnd`):e===`keydown`&&n.keyCode===229&&(x=`onCompositionStart`);x&&(nr&&n.locale!==`ko`&&(sr||x!==`onCompositionStart`?x===`onCompositionEnd`&&sr&&(b=Cn()):(bn=i,xn=`value`in bn?bn.value:bn.textContent,sr=!0)),y=Nd(r,x),0<y.length&&(x=new j(x,e,null,n,i),o.push({event:x,listeners:y}),b?x.data=b:(b=or(n),b!==null&&(x.data=b)))),(b=tr?cr(e,n):lr(e,n))&&(x=Nd(r,`onBeforeInput`),0<x.length&&(y=new j(`onBeforeInput`,`beforeinput`,null,n,i),o.push({event:y,listeners:x}),y.data=b)),xd(o,e,r,n,i)}Ed(o,t)})}function Md(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Nd(e,t){for(var n=t+`Capture`,r=[];e!==null;){var i=e,a=i.stateNode;if(i=i.tag,i!==5&&i!==26&&i!==27||a===null||(i=gn(e,n),i!=null&&r.unshift(Md(e,i,a)),i=gn(e,t),i!=null&&r.push(Md(e,i,a))),e.tag===3)return r;e=e.return}return[]}function Pd(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5&&e.tag!==27);return e||null}function Fd(e,t,n,r,i){for(var a=t._reactName,o=[];n!==null&&n!==r;){var s=n,c=s.alternate,l=s.stateNode;if(s=s.tag,c!==null&&c===r)break;s!==5&&s!==26&&s!==27||l===null||(c=l,i?(l=gn(n,a),l!=null&&o.unshift(Md(n,l,c))):i||(l=gn(n,a),l!=null&&o.push(Md(n,l,c)))),n=n.return}o.length!==0&&e.push({event:t,listeners:o})}var Id=/\r\n?/g,Ld=/\u0000|\uFFFD/g;function Rd(e){return(typeof e==`string`?e:``+e).replace(Id,`
10`).replace(Ld,``)}function zd(e,t){return t=Rd(t),Rd(e)===t}function K(e,t,n,r,a,o){switch(n){case`children`:typeof r==`string`?t===`body`||t===`textarea`&&r===``||$t(e,r):(typeof r==`number`||typeof r==`bigint`)&&t!==`body`&&$t(e,``+r);break;case`className`:Lt(e,`class`,r);break;case`tabIndex`:Lt(e,`tabindex`,r);break;case`dir`:case`role`:case`viewBox`:case`width`:case`height`:Lt(e,n,r);break;case`style`:nn(e,r,o);break;case`data`:if(t!==`object`){Lt(e,`data`,r);break}case`src`:case`href`:if(r===``&&(t!==`a`||n!==`href`)){e.removeAttribute(n);break}if(r==null||typeof r==`function`||typeof r==`symbol`||typeof r==`boolean`){e.removeAttribute(n);break}r=sn(``+r),e.setAttribute(n,r);break;case`action`:case`formAction`:if(typeof r==`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}if(typeof o==`function`&&(n===`formAction`?(t!==`input`&&K(e,t,`name`,a.name,a,null),K(e,t,`formEncType`,a.formEncType,a,null),K(e,t,`formMethod`,a.formMethod,a,null),K(e,t,`formTarget`,a.formTarget,a,null)):(K(e,t,`encType`,a.encType,a,null),K(e,t,`method`,a.method,a,null),K(e,t,`target`,a.target,a,null))),r==null||typeof r==`symbol`||typeof r==`boolean`){e.removeAttribute(n);break}r=sn(``+r),e.setAttribute(n,r);break;case`onClick`:r!=null&&(e.onclick=cn);break;case`onScroll`:r!=null&&G(`scroll`,e);break;case`onScrollEnd`:r!=null&&G(`scrollend`,e);break;case`dangerouslySetInnerHTML`:if(r!=null){if(typeof r!=`object`||!(`__html`in r))throw Error(i(61));if(n=r.__html,n!=null){if(a.children!=null)throw Error(i(60));e.innerHTML=n}}break;case`multiple`:e.multiple=r&&typeof r!=`function`&&typeof r!=`symbol`;break;case`muted`:e.muted=r&&typeof r!=`function`&&typeof r!=`symbol`;break;case`suppressContentEditableWarning`:case`suppressHydrationWarning`:case`defaultValue`:case`defaultChecked`:case`innerHTML`:case`ref`:break;case`autoFocus`:break;case`xlinkHref`:if(r==null||typeof r==`function`||typeof r==`boolean`||typeof r==`symbol`){e.removeAttribute(`xlink:href`);break}n=sn(``+r),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`:r!=null&&typeof r!=`function`&&typeof r!=`symbol`?e.setAttribute(n,``+r):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`playsInline`:case`readOnly`:case`required`:case`reversed`:case`scoped`:case`seamless`:case`itemScope`:r&&typeof r!=`function`&&typeof r!=`symbol`?e.setAttribute(n,``):e.removeAttribute(n);break;case`capture`:case`download`:!0===r?e.setAttribute(n,``):!1!==r&&r!=null&&typeof r!=`function`&&typeof r!=`symbol`?e.setAttribute(n,r):e.removeAttribute(n);break;case`cols`:case`rows`:case`size`:case`span`:r!=null&&typeof r!=`function`&&typeof r!=`symbol`&&!isNaN(r)&&1<=r?e.setAttribute(n,r):e.removeAttribute(n);break;case`rowSpan`:case`start`:r==null||typeof r==`function`||typeof r==`symbol`||isNaN(r)?e.removeAttribute(n):e.setAttribute(n,r);break;case`popover`:G(`beforetoggle`,e),G(`toggle`,e),It(e,`popover`,r);break;case`xlinkActuate`:Rt(e,`http://www.w3.org/1999/xlink`,`xlink:actuate`,r);break;case`xlinkArcrole`:Rt(e,`http://www.w3.org/1999/xlink`,`xlink:arcrole`,r);break;case`xlinkRole`:Rt(e,`http://www.w3.org/1999/xlink`,`xlink:role`,r);break;case`xlinkShow`:Rt(e,`http://www.w3.org/1999/xlink`,`xlink:show`,r);break;case`xlinkTitle`:Rt(e,`http://www.w3.org/1999/xlink`,`xlink:title`,r);break;case`xlinkType`:Rt(e,`http://www.w3.org/1999/xlink`,`xlink:type`,r);break;case`xmlBase`:Rt(e,`http://www.w3.org/XML/1998/namespace`,`xml:base`,r);break;case`xmlLang`:Rt(e,`http://www.w3.org/XML/1998/namespace`,`xml:lang`,r);break;case`xmlSpace`:Rt(e,`http://www.w3.org/XML/1998/namespace`,`xml:space`,r);break;case`is`:It(e,`is`,r);break;case`innerText`:case`textContent`:break;default:(!(2<n.length)||n[0]!==`o`&&n[0]!==`O`||n[1]!==`n`&&n[1]!==`N`)&&(n=an.get(n)||n,It(e,n,r))}}function Bd(e,t,n,r,a,o){switch(n){case`style`:nn(e,r,o);break;case`dangerouslySetInnerHTML`:if(r!=null){if(typeof r!=`object`||!(`__html`in r))throw Error(i(61));if(n=r.__html,n!=null){if(a.children!=null)throw Error(i(60));e.innerHTML=n}}break;case`children`:typeof r==`string`?$t(e,r):(typeof r==`number`||typeof r==`bigint`)&&$t(e,``+r);break;case`onScroll`:r!=null&&G(`scroll`,e);break;case`onScrollEnd`:r!=null&&G(`scrollend`,e);break;case`onClick`:r!=null&&(e.onclick=cn);break;case`suppressContentEditableWarning`:case`suppressHydrationWarning`:case`innerHTML`:case`ref`:break;case`innerText`:case`textContent`:break;default:if(!kt.hasOwnProperty(n))a:{if(n[0]===`o`&&n[1]===`n`&&(a=n.endsWith(`Capture`),t=n.slice(2,a?n.length-7:void 0),o=e[ht]||null,o=o==null?null:o[n],typeof o==`function`&&e.removeEventListener(t,o,a),typeof r==`function`)){typeof o!=`function`&&o!==null&&(n in e?e[n]=null:e.hasAttribute(n)&&e.removeAttribute(n)),e.addEventListener(t,r,a);break a}n in e?e[n]=r:!0===r?e.setAttribute(n,``):It(e,n,r)}}}function Vd(e,t,n){switch(t){case`div`:case`span`:case`svg`:case`path`:case`a`:case`g`:case`p`:case`li`:break;case`img`:G(`error`,e),G(`load`,e);var r=!1,a=!1,o;for(o in n)if(n.hasOwnProperty(o)){var s=n[o];if(s!=null)switch(o){case`src`:r=!0;break;case`srcSet`:a=!0;break;case`children`:case`dangerouslySetInnerHTML`:throw Error(i(137,t));default:K(e,t,o,s,n,null)}}a&&K(e,t,`srcSet`,n.srcSet,n,null),r&&K(e,t,`src`,n.src,n,null);return;case`input`:G(`invalid`,e);var c=o=s=a=null,l=null,u=null;for(r in n)if(n.hasOwnProperty(r)){var d=n[r];if(d!=null)switch(r){case`name`:a=d;break;case`type`:s=d;break;case`checked`:l=d;break;case`defaultChecked`:u=d;break;case`value`:o=d;break;case`defaultValue`:c=d;break;case`children`:case`dangerouslySetInnerHTML`:if(d!=null)throw Error(i(137,t));break;default:K(e,t,r,d,n,null)}}Jt(e,o,c,l,u,s,a,!1);return;case`select`:for(a in G(`invalid`,e),r=s=o=null,n)if(n.hasOwnProperty(a)&&(c=n[a],c!=null))switch(a){case`value`:o=c;break;case`defaultValue`:s=c;break;case`multiple`:r=c;default:K(e,t,a,c,n,null)}t=o,n=s,e.multiple=!!r,t==null?n!=null&&Xt(e,!!r,n,!0):Xt(e,!!r,t,!1);return;case`textarea`:for(s in G(`invalid`,e),o=a=r=null,n)if(n.hasOwnProperty(s)&&(c=n[s],c!=null))switch(s){case`value`:r=c;break;case`defaultValue`:a=c;break;case`children`:o=c;break;case`dangerouslySetInnerHTML`:if(c!=null)throw Error(i(91));break;default:K(e,t,s,c,n,null)}Qt(e,r,a,o);return;case`option`:for(l in n)if(n.hasOwnProperty(l)&&(r=n[l],r!=null))switch(l){case`selected`:e.selected=r&&typeof r!=`function`&&typeof r!=`symbol`;break;default:K(e,t,l,r,n,null)}return;case`dialog`:G(`beforetoggle`,e),G(`toggle`,e),G(`cancel`,e),G(`close`,e);break;case`iframe`:case`object`:G(`load`,e);break;case`video`:case`audio`:for(r=0;r<wd.length;r++)G(wd[r],e);break;case`image`:G(`error`,e),G(`load`,e);break;case`details`:G(`toggle`,e);break;case`embed`:case`source`:case`link`:G(`error`,e),G(`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(u in n)if(n.hasOwnProperty(u)&&(r=n[u],r!=null))switch(u){case`children`:case`dangerouslySetInnerHTML`:throw Error(i(137,t));default:K(e,t,u,r,n,null)}return;default:if(rn(t)){for(d in n)n.hasOwnProperty(d)&&(r=n[d],r!==void 0&&Bd(e,t,d,r,n,void 0));return}}for(c in n)n.hasOwnProperty(c)&&(r=n[c],r!=null&&K(e,t,c,r,n,null))}function Hd(e,t,n,r){switch(t){case`div`:case`span`:case`svg`:case`path`:case`a`:case`g`:case`p`:case`li`:break;case`input`:var a=null,o=null,s=null,c=null,l=null,u=null,d=null;for(m in n){var f=n[m];if(n.hasOwnProperty(m)&&f!=null)switch(m){case`checked`:break;case`value`:break;case`defaultValue`:l=f;default:r.hasOwnProperty(m)||K(e,t,m,null,r,f)}}for(var p in r){var m=r[p];if(f=n[p],r.hasOwnProperty(p)&&(m!=null||f!=null))switch(p){case`type`:o=m;break;case`name`:a=m;break;case`checked`:u=m;break;case`defaultChecked`:d=m;break;case`value`:s=m;break;case`defaultValue`:c=m;break;case`children`:case`dangerouslySetInnerHTML`:if(m!=null)throw Error(i(137,t));break;default:m!==f&&K(e,t,p,m,r,f)}}qt(e,s,c,l,u,d,o,a);return;case`select`:for(o in m=s=c=p=null,n)if(l=n[o],n.hasOwnProperty(o)&&l!=null)switch(o){case`value`:break;case`multiple`:m=l;default:r.hasOwnProperty(o)||K(e,t,o,null,r,l)}for(a in r)if(o=r[a],l=n[a],r.hasOwnProperty(a)&&(o!=null||l!=null))switch(a){case`value`:p=o;break;case`defaultValue`:c=o;break;case`multiple`:s=o;default:o!==l&&K(e,t,a,o,r,l)}t=c,n=s,r=m,p==null?!!r!=!!n&&(t==null?Xt(e,!!n,n?[]:``,!1):Xt(e,!!n,t,!0)):Xt(e,!!n,p,!1);return;case`textarea`:for(c in m=p=null,n)if(a=n[c],n.hasOwnProperty(c)&&a!=null&&!r.hasOwnProperty(c))switch(c){case`value`:break;case`children`:break;default:K(e,t,c,null,r,a)}for(s in r)if(a=r[s],o=n[s],r.hasOwnProperty(s)&&(a!=null||o!=null))switch(s){case`value`:p=a;break;case`defaultValue`:m=a;break;case`children`:break;case`dangerouslySetInnerHTML`:if(a!=null)throw Error(i(91));break;default:a!==o&&K(e,t,s,a,r,o)}Zt(e,p,m);return;case`option`:for(var h in n)if(p=n[h],n.hasOwnProperty(h)&&p!=null&&!r.hasOwnProperty(h))switch(h){case`selected`:e.selected=!1;break;default:K(e,t,h,null,r,p)}for(l in r)if(p=r[l],m=n[l],r.hasOwnProperty(l)&&p!==m&&(p!=null||m!=null))switch(l){case`selected`:e.selected=p&&typeof p!=`function`&&typeof p!=`symbol`;break;default:K(e,t,l,p,r,m)}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 g in n)p=n[g],n.hasOwnProperty(g)&&p!=null&&!r.hasOwnProperty(g)&&K(e,t,g,null,r,p);for(u in r)if(p=r[u],m=n[u],r.hasOwnProperty(u)&&p!==m&&(p!=null||m!=null))switch(u){case`children`:case`dangerouslySetInnerHTML`:if(p!=null)throw Error(i(137,t));break;default:K(e,t,u,p,r,m)}return;default:if(rn(t)){for(var _ in n)p=n[_],n.hasOwnProperty(_)&&p!==void 0&&!r.hasOwnProperty(_)&&Bd(e,t,_,void 0,r,p);for(d in r)p=r[d],m=n[d],!r.hasOwnProperty(d)||p===m||p===void 0&&m===void 0||Bd(e,t,d,p,r,m);return}}for(var v in n)p=n[v],n.hasOwnProperty(v)&&p!=null&&!r.hasOwnProperty(v)&&K(e,t,v,null,r,p);for(f in r)p=r[f],m=n[f],!r.hasOwnProperty(f)||p===m||p==null&&m==null||K(e,t,f,p,r,m)}function Ud(e){switch(e){case`css`:case`script`:case`font`:case`img`:case`image`:case`input`:case`link`:return!0;default:return!1}}function Wd(){if(typeof performance.getEntriesByType==`function`){for(var e=0,t=0,n=performance.getEntriesByType(`resource`),r=0;r<n.length;r++){var i=n[r],a=i.transferSize,o=i.initiatorType,s=i.duration;if(a&&s&&Ud(o)){for(o=0,s=i.responseEnd,r+=1;r<n.length;r++){var c=n[r],l=c.startTime;if(l>s)break;var u=c.transferSize,d=c.initiatorType;u&&Ud(d)&&(c=c.responseEnd,o+=u*(c<s?1:(s-l)/(c-l)))}if(--r,t+=8*(a+o)/(i.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 Gd=null,Kd=null;function qd(e){return e.nodeType===9?e:e.ownerDocument}function Jd(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 Yd(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 Xd(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 Zd=null;function Qd(){var e=window.event;return e&&e.type===`popstate`?e!==Zd&&(Zd=e,!0):(Zd=null,!1)}var $d=typeof setTimeout==`function`?setTimeout:void 0,ef=typeof clearTimeout==`function`?clearTimeout:void 0,tf=typeof Promise==`function`?Promise:void 0,nf=typeof queueMicrotask==`function`?queueMicrotask:tf===void 0?$d:function(e){return tf.resolve(null).then(e).catch(rf)};function rf(e){setTimeout(function(){throw e})}function af(e){return e===`head`}function of(e,t){var n=t,r=0;do{var i=n.nextSibling;if(e.removeChild(n),i&&i.nodeType===8)if(n=i.data,n===`/$`||n===`/&`){if(r===0){e.removeChild(i),Rp(t);return}r--}else if(n===`$`||n===`$?`||n===`$~`||n===`$!`||n===`&`)r++;else if(n===`html`)bf(e.ownerDocument.documentElement);else if(n===`head`){n=e.ownerDocument.head,bf(n);for(var a=n.firstChild;a;){var o=a.nextSibling,s=a.nodeName;a[xt]||s===`SCRIPT`||s===`STYLE`||s===`LINK`&&a.rel.toLowerCase()===`stylesheet`||n.removeChild(a),a=o}}else n===`body`&&bf(e.ownerDocument.body);n=i}while(n);Rp(t)}function sf(e,t){var n=e;e=0;do{var r=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||``),r&&r.nodeType===8)if(n=r.data,n===`/$`){if(e===0)break;e--}else n!==`$`&&n!==`$?`&&n!==`$~`&&n!==`$!`||e++;n=r}while(n)}function cf(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`:cf(n),St(n);continue;case`SCRIPT`:case`STYLE`:continue;case`LINK`:if(n.rel.toLowerCase()===`stylesheet`)continue}e.removeChild(n)}}function lf(e,t,n,r){for(;e.nodeType===1;){var i=n;if(e.nodeName.toLowerCase()!==t.toLowerCase()){if(!r&&(e.nodeName!==`INPUT`||e.type!==`hidden`))break}else if(!r)if(t===`input`&&e.type===`hidden`){var a=i.name==null?null:``+i.name;if(i.type===`hidden`&&e.getAttribute(`name`)===a)return e}else return e;else if(!e[xt])switch(t){case`meta`:if(!e.hasAttribute(`itemprop`))break;return e;case`link`:if(a=e.getAttribute(`rel`),a===`stylesheet`&&e.hasAttribute(`data-precedence`)||a!==i.rel||e.getAttribute(`href`)!==(i.href==null||i.href===``?null:i.href)||e.getAttribute(`crossorigin`)!==(i.crossOrigin==null?null:i.crossOrigin)||e.getAttribute(`title`)!==(i.title==null?null:i.title))break;return e;case`style`:if(e.hasAttribute(`data-precedence`))break;return e;case`script`:if(a=e.getAttribute(`src`),(a!==(i.src==null?null:i.src)||e.getAttribute(`type`)!==(i.type==null?null:i.type)||e.getAttribute(`crossorigin`)!==(i.crossOrigin==null?null:i.crossOrigin))&&a&&e.hasAttribute(`async`)&&!e.hasAttribute(`itemprop`))break;return e;default:return e}if(e=hf(e.nextSibling),e===null)break}return null}function uf(e,t,n){if(t===``)return null;for(;e.nodeType!==3;)if((e.nodeType!==1||e.nodeName!==`INPUT`||e.type!==`hidden`)&&!n||(e=hf(e.nextSibling),e===null))return null;return e}function df(e,t){for(;e.nodeType!==8;)if((e.nodeType!==1||e.nodeName!==`INPUT`||e.type!==`hidden`)&&!t||(e=hf(e.nextSibling),e===null))return null;return e}function ff(e){return e.data===`$?`||e.data===`$~`}function pf(e){return e.data===`$!`||e.data===`$?`&&e.ownerDocument.readyState!==`loading`}function mf(e,t){var n=e.ownerDocument;if(e.data===`$~`)e._reactRetry=t;else if(e.data!==`$?`||n.readyState!==`loading`)t();else{var r=function(){t(),n.removeEventListener(`DOMContentLoaded`,r)};n.addEventListener(`DOMContentLoaded`,r),e._reactRetry=r}}function hf(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 gf=null;function _f(e){e=e.nextSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n===`/$`||n===`/&`){if(t===0)return hf(e.nextSibling);t--}else n!==`$`&&n!==`$!`&&n!==`$?`&&n!==`$~`&&n!==`&`||t++}e=e.nextSibling}return null}function vf(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 yf(e,t,n){switch(t=qd(n),e){case`html`:if(e=t.documentElement,!e)throw Error(i(452));return e;case`head`:if(e=t.head,!e)throw Error(i(453));return e;case`body`:if(e=t.body,!e)throw Error(i(454));return e;default:throw Error(i(451))}}function bf(e){for(var t=e.attributes;t.length;)e.removeAttributeNode(t[0]);St(e)}var xf=new Map,Sf=new Set;function Cf(e){return typeof e.getRootNode==`function`?e.getRootNode():e.nodeType===9?e:e.ownerDocument}var wf=k.d;k.d={f:Tf,r:Ef,D:q,C:kf,L:Af,m:jf,X:Nf,S:Mf,M:Pf};function Tf(){var e=wf.f(),t=Ou();return e||t}function Ef(e){var t=wt(e);t!==null&&t.tag===5&&t.type===`form`?As(t):wf.r(e)}var Df=typeof document>`u`?null:document;function Of(e,t,n){var r=Df;if(r&&typeof t==`string`&&t){var i=Kt(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),Sf.has(i)||(Sf.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),Vd(t,`link`,e),Dt(t),r.head.appendChild(t)))}}function q(e){wf.D(e),Of(`dns-prefetch`,e,null)}function kf(e,t){wf.C(e,t),Of(`preconnect`,e,t)}function Af(e,t,n){wf.L(e,t,n);var r=Df;if(r&&e&&t){var i=`link[rel="preload"][as="`+Kt(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+Kt(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+Kt(n.imageSizes)+`"]`)):i+=`[href="`+Kt(e)+`"]`;var a=i;switch(t){case`style`:a=If(e);break;case`script`:a=Bf(e)}xf.has(a)||(e=m({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),xf.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(Lf(a))||t===`script`&&r.querySelector(Vf(a))||(t=r.createElement(`link`),Vd(t,`link`,e),Dt(t),r.head.appendChild(t)))}}function jf(e,t){wf.m(e,t);var n=Df;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+Kt(r)+`"][href="`+Kt(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Bf(e)}if(!xf.has(a)&&(e=m({rel:`modulepreload`,href:e},t),xf.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(Vf(a)))return}r=n.createElement(`link`),Vd(r,`link`,e),Dt(r),n.head.appendChild(r)}}}function Mf(e,t,n){wf.S(e,t,n);var r=Df;if(r&&e){var i=Et(r).hoistableStyles,a=If(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(Lf(a)))s.loading=5;else{e=m({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=xf.get(a))&&Wf(e,n);var c=o=r.createElement(`link`);Dt(c),Vd(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Uf(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function Nf(e,t){wf.X(e,t);var n=Df;if(n&&e){var r=Et(n).hoistableScripts,i=Bf(e),a=r.get(i);a||(a=n.querySelector(Vf(i)),a||(e=m({src:e,async:!0},t),(t=xf.get(i))&&Gf(e,t),a=n.createElement(`script`),Dt(a),Vd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Pf(e,t){wf.M(e,t);var n=Df;if(n&&e){var r=Et(n).hoistableScripts,i=Bf(e),a=r.get(i);a||(a=n.querySelector(Vf(i)),a||(e=m({src:e,async:!0,type:`module`},t),(t=xf.get(i))&&Gf(e,t),a=n.createElement(`script`),Dt(a),Vd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Ff(e,t,n,r){var a=(a=he.current)?Cf(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(t=If(n.href),n=Et(a).hoistableStyles,r=n.get(t),r||(r={type:`style`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=If(n.href);var o=Et(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(Lf(e)))&&!o._p&&(s.instance=o,s.state.loading=5),xf.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},xf.set(e,n),o||zf(a,e,n,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(t=Bf(n),n=Et(a).hoistableScripts,r=n.get(t),r||(r={type:`script`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function If(e){return`href="`+Kt(e)+`"`}function Lf(e){return`link[rel="stylesheet"][`+e+`]`}function Rf(e){return m({},e,{"data-precedence":e.precedence,precedence:null})}function zf(e,t,n,r){e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)?r.loading=1:(t=e.createElement(`link`),r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2}),Vd(t,`link`,n),Dt(t),e.head.appendChild(t))}function Bf(e){return`[src="`+Kt(e)+`"]`}function Vf(e){return`script[async]`+e}function Hf(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+Kt(n.href)+`"]`);if(r)return t.instance=r,Dt(r),r;var a=m({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),Dt(r),Vd(r,`style`,a),Uf(r,n.precedence,e),t.instance=r;case`stylesheet`:a=If(n.href);var o=e.querySelector(Lf(a));if(o)return t.state.loading|=4,t.instance=o,Dt(o),o;r=Rf(n),(a=xf.get(a))&&Wf(r,a),o=(e.ownerDocument||e).createElement(`link`),Dt(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),Vd(o,`link`,r),t.state.loading|=4,Uf(o,n.precedence,e),t.instance=o;case`script`:return o=Bf(n.src),(a=e.querySelector(Vf(o)))?(t.instance=a,Dt(a),a):(r=n,(a=xf.get(o))&&(r=m({},n),Gf(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),Dt(a),Vd(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Uf(r,n.precedence,e));return t.instance}function Uf(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o<r.length;o++){var s=r[o];if(s.dataset.precedence===t)a=s;else if(a!==i)break}a?a.parentNode.insertBefore(e,a.nextSibling):(t=n.nodeType===9?n.head:n,t.insertBefore(e,t.firstChild))}function Wf(e,t){e.crossOrigin??=t.crossOrigin,e.referrerPolicy??=t.referrerPolicy,e.title??=t.title}function Gf(e,t){e.crossOrigin??=t.crossOrigin,e.referrerPolicy??=t.referrerPolicy,e.integrity??=t.integrity}var Kf=null;function qf(e,t,n){if(Kf===null){var r=new Map,i=Kf=new Map;i.set(n,r)}else i=Kf,r=i.get(n),r||(r=new Map,i.set(n,r));if(r.has(e))return r;for(r.set(e,null),n=n.getElementsByTagName(e),i=0;i<n.length;i++){var a=n[i];if(!(a[xt]||a[mt]||e===`link`&&a.getAttribute(`rel`)===`stylesheet`)&&a.namespaceURI!==`http://www.w3.org/2000/svg`){var o=a.getAttribute(t)||``;o=e+o;var s=r.get(o);s?s.push(a):r.set(o,[a])}}return r}function Jf(e,t,n){e=e.ownerDocument||e,e.head.insertBefore(n,t===`title`?e.querySelector(`head > title`):null)}function Yf(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;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!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 Xf(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Zf(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=If(r.href),a=t.querySelector(Lf(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=ep.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,Dt(a);return}a=t.ownerDocument||t,r=Rf(r),(i=xf.get(i))&&Wf(r,i),a=a.createElement(`link`),Dt(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),Vd(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=ep.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var Qf=0;function $f(e,t){return e.stylesheets&&e.count===0&&np(e,e.stylesheets),0<e.count||0<e.imgCount?function(n){var r=setTimeout(function(){if(e.stylesheets&&np(e,e.stylesheets),e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}},6e4+t);0<e.imgBytes&&Qf===0&&(Qf=62500*Wd());var i=setTimeout(function(){if(e.waitingForImages=!1,e.count===0&&(e.stylesheets&&np(e,e.stylesheets),e.unsuspend)){var t=e.unsuspend;e.unsuspend=null,t()}},(e.imgBytes>Qf?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function ep(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)np(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var tp=null;function np(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,tp=new Map,t.forEach(rp,e),tp=null,ep.call(e))}function rp(e,t){if(!(t.state.loading&4)){var n=tp.get(e);if(n)var r=n.get(null);else{n=new Map,tp.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a<i.length;a++){var o=i[a];(o.nodeName===`LINK`||o.getAttribute(`media`)!==`not all`)&&(n.set(o.dataset.precedence,o),r=o)}r&&n.set(null,r)}i=t.instance,o=i.getAttribute(`data-precedence`),a=n.get(o)||r,a===r&&n.set(null,i),n.set(o,i),this.count++,r=ep.bind(this),i.addEventListener(`load`,r),i.addEventListener(`error`,r),a?a.parentNode.insertBefore(i,a.nextSibling):(e=e.nodeType===9?e.head:e,e.insertBefore(i,e.firstChild)),t.state.loading|=4}}var ip={$$typeof:S,Provider:null,Consumer:null,_currentValue:se,_currentValue2:se,_threadCount:0};function ap(e,t,n,r,i,a,o,s,c){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=rt(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=rt(0),this.hiddenUpdates=rt(null),this.identifierPrefix=r,this.onUncaughtError=i,this.onCaughtError=a,this.onRecoverableError=o,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=c,this.incompleteTransitions=new Map}function op(e,t,n,r,i,a,o,s,c,l,u,d){return e=new ap(e,t,n,o,c,l,u,d,s),t=1,!0===a&&(t|=24),a=hi(3,null,null,t),e.current=a,a.stateNode=e,t=ha(),t.refCount++,e.pooledCache=t,t.refCount++,a.memoizedState={element:r,isDehydrated:n,cache:t},Ja(a),e}function sp(e){return e?(e=pi,e):pi}function cp(e,t,n,r,i,a){i=sp(i),r.context===null?r.context=i:r.pendingContext=i,r=Xa(t),r.payload={element:n},a=a===void 0?null:a,a!==null&&(r.callback=a),n=Za(e,r,t),n!==null&&(Cu(n,e,t),N(n,e,t))}function lp(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var n=e.retryLane;e.retryLane=n!==0&&n<t?n:t}}function up(e,t){lp(e,t),(e=e.alternate)&&lp(e,t)}function dp(e){if(e.tag===13||e.tag===31){var t=ui(e,67108864);t!==null&&Cu(t,e,67108864),up(e,67108864)}}function fp(e){if(e.tag===13||e.tag===31){var t=xu();t=lt(t);var n=ui(e,t);n!==null&&Cu(n,e,t),up(e,t)}}var pp=!0;function mp(e,t,n,r){var i=O.T;O.T=null;var a=k.p;try{k.p=2,gp(e,t,n,r)}finally{k.p=a,O.T=i}}function hp(e,t,n,r){var i=O.T;O.T=null;var a=k.p;try{k.p=8,gp(e,t,n,r)}finally{k.p=a,O.T=i}}function gp(e,t,n,r){if(pp){var i=_p(r);if(i===null)jd(e,t,r,J,n),Op(e,r);else if(Ap(i,e,t,n,r))r.stopPropagation();else if(Op(e,r),t&4&&-1<Dp.indexOf(e)){for(;i!==null;){var a=wt(i);if(a!==null)switch(a.tag){case 3:if(a=a.stateNode,a.current.memoizedState.isDehydrated){var o=Qe(a.pendingLanes);if(o!==0){var s=a;for(s.pendingLanes|=2,s.entangledLanes|=2;o;){var c=1<<31-Ge(o);s.entanglements[1]|=c,o&=~c}ud(a),!(Gl&6)&&(uu=Ne()+500,dd(0,!1))}}break;case 31:case 13:s=ui(a,2),s!==null&&Cu(s,a,2),Ou(),up(a,2)}if(a=_p(r),a===null&&jd(e,t,r,J,n),a===i)break;i=a}i!==null&&r.stopPropagation()}else jd(e,t,r,null,n)}}function _p(e){return e=un(e),vp(e)}var J=null;function vp(e){if(J=null,e=Ct(e),e!==null){var t=c(e);if(t===null)e=null;else{var n=t.tag;if(n===13){if(e=l(t),e!==null)return e;e=null}else if(n===31){if(e=u(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 J=e,null}function yp(e){switch(e){case`beforetoggle`:case`cancel`:case`click`:case`close`: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(Pe()){case Fe:return 2;case Ie:return 8;case A:case Le:return 32;case Re:return 268435456;default:return 32}default:return 32}}var bp=!1,xp=null,Sp=null,Cp=null,wp=new Map,Tp=new Map,Ep=[],Dp=`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 Op(e,t){switch(e){case`focusin`:case`focusout`:xp=null;break;case`dragenter`:case`dragleave`:Sp=null;break;case`mouseover`:case`mouseout`:Cp=null;break;case`pointerover`:case`pointerout`:wp.delete(t.pointerId);break;case`gotpointercapture`:case`lostpointercapture`:Tp.delete(t.pointerId)}}function kp(e,t,n,r,i,a){return e===null||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[i]},t!==null&&(t=wt(t),t!==null&&dp(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,i!==null&&t.indexOf(i)===-1&&t.push(i),e)}function Ap(e,t,n,r,i){switch(t){case`focusin`:return xp=kp(xp,e,t,n,r,i),!0;case`dragenter`:return Sp=kp(Sp,e,t,n,r,i),!0;case`mouseover`:return Cp=kp(Cp,e,t,n,r,i),!0;case`pointerover`:var a=i.pointerId;return wp.set(a,kp(wp.get(a)||null,e,t,n,r,i)),!0;case`gotpointercapture`:return a=i.pointerId,Tp.set(a,kp(Tp.get(a)||null,e,t,n,r,i)),!0}return!1}function jp(e){var t=Ct(e.target);if(t!==null){var n=c(t);if(n!==null){if(t=n.tag,t===13){if(t=l(n),t!==null){e.blockedOn=t,ft(e.priority,function(){fp(n)});return}}else if(t===31){if(t=u(n),t!==null){e.blockedOn=t,ft(e.priority,function(){fp(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 Mp(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var n=_p(e.nativeEvent);if(n===null){n=e.nativeEvent;var r=new n.constructor(n.type,n);ln=r,n.target.dispatchEvent(r),ln=null}else return t=wt(n),t!==null&&dp(t),e.blockedOn=n,!1;t.shift()}return!0}function Np(e,t,n){Mp(e)&&n.delete(t)}function Pp(){bp=!1,xp!==null&&Mp(xp)&&(xp=null),Sp!==null&&Mp(Sp)&&(Sp=null),Cp!==null&&Mp(Cp)&&(Cp=null),wp.forEach(Np),Tp.forEach(Np)}function Fp(e,n){e.blockedOn===n&&(e.blockedOn=null,bp||(bp=!0,t.unstable_scheduleCallback(t.unstable_NormalPriority,Pp)))}var Ip=null;function Lp(e){Ip!==e&&(Ip=e,t.unstable_scheduleCallback(t.unstable_NormalPriority,function(){Ip===e&&(Ip=null);for(var t=0;t<e.length;t+=3){var n=e[t],r=e[t+1],i=e[t+2];if(typeof r!=`function`){if(vp(r||n)===null)continue;break}var a=wt(n);a!==null&&(e.splice(t,3),t-=3,Os(a,{pending:!0,data:i,method:n.method,action:r},r,i))}}))}function Rp(e){function t(t){return Fp(t,e)}xp!==null&&Fp(xp,e),Sp!==null&&Fp(Sp,e),Cp!==null&&Fp(Cp,e),wp.forEach(t),Tp.forEach(t);for(var n=0;n<Ep.length;n++){var r=Ep[n];r.blockedOn===e&&(r.blockedOn=null)}for(;0<Ep.length&&(n=Ep[0],n.blockedOn===null);)jp(n),n.blockedOn===null&&Ep.shift();if(n=(e.ownerDocument||e).$$reactFormReplay,n!=null)for(r=0;r<n.length;r+=3){var i=n[r],a=n[r+1],o=i[ht]||null;if(typeof a==`function`)o||Lp(n);else if(o){var s=null;if(a&&a.hasAttribute(`formAction`)){if(i=a,o=a[ht]||null)s=o.formAction;else if(vp(i)!==null)continue}else s=o.action;typeof s==`function`?n[r+1]=s:(n.splice(r,3),r-=3),Lp(n)}}}function zp(){function e(e){e.canIntercept&&e.info===`react-transition`&&e.intercept({handler:function(){return new Promise(function(e){return i=e})},focusReset:`manual`,scroll:`manual`})}function t(){i!==null&&(i(),i=null),r||setTimeout(n,20)}function n(){if(!r&&!navigation.transition){var e=navigation.currentEntry;e&&e.url!=null&&navigation.navigate(e.url,{state:e.getState(),info:`react-transition`,history:`replace`})}}if(typeof navigation==`object`){var r=!1,i=null;return navigation.addEventListener(`navigate`,e),navigation.addEventListener(`navigatesuccess`,t),navigation.addEventListener(`navigateerror`,t),setTimeout(n,100),function(){r=!0,navigation.removeEventListener(`navigate`,e),navigation.removeEventListener(`navigatesuccess`,t),navigation.removeEventListener(`navigateerror`,t),i!==null&&(i(),i=null)}}}function Bp(e){this._internalRoot=e}Vp.prototype.render=Bp.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(i(409));var n=t.current;cp(n,xu(),e,t,null,null)},Vp.prototype.unmount=Bp.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;cp(e.current,2,null,e,null,null),Ou(),t[gt]=null}};function Vp(e){this._internalRoot=e}Vp.prototype.unstable_scheduleHydration=function(e){if(e){var t=dt();e={blockedOn:null,target:e,priority:t};for(var n=0;n<Ep.length&&t!==0&&t<Ep[n].priority;n++);Ep.splice(n,0,e),n===0&&jp(e)}};var Hp=n.version;if(Hp!==`19.2.8`)throw Error(i(527,Hp,`19.2.8`));k.findDOMNode=function(e){var t=e._reactInternals;if(t===void 0)throw typeof e.render==`function`?Error(i(188)):(e=Object.keys(e).join(`,`),Error(i(268,e)));return e=f(t),e=e===null?null:p(e),e=e===null?null:e.stateNode,e};var Up={bundleType:0,version:`19.2.8`,rendererPackageName:`react-dom`,currentDispatcherRef:O,reconcilerVersion:`19.2.8`};
10if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<`u`){var Wp=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Wp.isDisabled&&Wp.supportsFiber)try{He=Wp.inject(Up),Ue=Wp}catch{}}e.hydrateRoot=function(e,t,n){if(!s(e))throw Error(i(299));var r=!1,a=``,o=Zs,c=Qs,l=$s,u=null;return n!=null&&(!0===n.unstable_strictMode&&(r=!0),n.identifierPrefix!==void 0&&(a=n.identifierPrefix),n.onUncaughtError!==void 0&&(o=n.onUncaughtError),n.onCaughtError!==void 0&&(c=n.onCaughtError),n.onRecoverableError!==void 0&&(l=n.onRecoverableError),n.formState!==void 0&&(u=n.formState)),t=op(e,1,!0,t,n??null,r,a,u,o,c,l,zp),t.context=sp(null),n=t.current,r=xu(),r=lt(r),a=Xa(r),a.callback=null,Za(n,a,r),n=r,t.current.lanes=n,it(t,n),ud(t),e[gt]=t.current,kd(e),new Vp(t)}})),Ve=n(((e,t)=>{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=Be()})),He=`__TSS_CONTEXT`,Ue=Symbol.for(`TSS_SERVER_FUNCTION`),We=Symbol.for(`TSS_SERVER_FUNCTION_FACTORY`),Ge=`application/x-tss-framed`,Ke={JSON:0,CHUNK:1,END:2,ERROR:3};`${Ge}`;var qe=/;\s*v=(\d+)/;function Je(e){let t=e.match(qe);return t?parseInt(t[1],10):void 0}function Ye(e){let t=Je(e);if(t!==void 0&&t!==1)throw Error(`Incompatible framed protocol version: server=${t}, client=1. Please ensure client and server are using compatible versions.`)}var Xe=()=>window.__TSS_START_OPTIONS__;function Ze(){try{return sessionStorage}catch{return}}var Qe=`tsr-scroll-restoration-v1_3`,$e=Ze();function et(){try{return JSON.parse($e?.getItem(`tsr-scroll-restoration-v1_3`)||`{}`)}catch{return{}}}function tt(){try{$e?.setItem(Qe,JSON.stringify(nt))}catch{}}var nt=et(),rt=`data-scroll-restoration-id`,it=e=>e.state.__TSR_key||e.href;function at(e){let t=e.getAttribute(rt);if(t)return`[${rt}="${t}"]`;let n=``,r=e,i;for(;i=r.parentNode;){let e=1,t=r;for(;t=t.previousElementSibling;)e++;let a=`${r.localName}:nth-child(${e})`;n=n?`${a} > ${n}`:a,r=i}return n}var ot=!1,st=`window`;function ct(e){try{return typeof e==`function`?e():document.querySelector(e)}catch{}}function lt(e){let t=new Set;for(let n of e){if(n===st)continue;let e=ct(n);e&&t.add(e)}return t}function ut(e,t){let n=t??e.options.scrollRestoration,r=e._scroll;n&&(r.restoring=!0);let i=e.options.getScrollRestorationKey||it,a=new Set,o=e=>{let t=nt[e]||={};for(let e of a)e===document?t[st]={scrollX,scrollY}:e.isConnected&&(t[at(e)]={scrollX:e.scrollLeft,scrollY:e.scrollTop})};n&&!r.restoration&&(r.restoration=!0,ot=!1,history.scrollRestoration=`manual`,document.addEventListener(`scroll`,e=>{ot||a.add(e.target)},!0),e.subscribe(`onBeforeLoad`,e=>{e.fromLocation&&o(i(e.fromLocation)),a.clear()}),addEventListener(`pagehide`,()=>{o(i(e.stores.resolvedLocation.get()??e.stores.location.get())),tt()})),!r.reset&&(r.reset=!0,e.subscribe(`onRendered`,t=>{let n=e.options.scrollRestorationBehavior,o=e.options.scrollToTopSelectors,s=r.next,c=r.hash,l;if(a.clear(),r.next=!0,r.hash=!1,typeof e.options.scrollRestoration==`function`&&!e.options.scrollRestoration({location:e.latestLocation}))return;let u=i(t.toLocation),d=t.fromLocation&&i(t.fromLocation);if(r.restoring&&d&&d!==u){let e=nt[d];if(e){let t=nt[u];for(let n in e){if(n===st){if(s)continue}else{let e=ct(n);if(!e||s&&o&&(l??=lt(o),l.has(e)))continue}t||=nt[u]={},t[n]??=e[n]}}}ot=!0;try{let e=t.toLocation.hash,i=t.toLocation.state.__hashScrollIntoViewOptions??!0,a=!1;if(s){!e&&o&&(l??=lt(o));let t=e&&i&&c,s=r.restoring?nt[u]:void 0;if(s)for(let e in s){let{scrollX:r,scrollY:i}=s[e];if(e===st){if(t)continue;scrollTo({top:i,left:r,behavior:n}),a=!0}else{let t=ct(e);t&&(t.scrollLeft=r,t.scrollTop=i,l?.delete(t))}}if(!e){let e={top:0,left:0,behavior:n};if(a||scrollTo(e),l)for(let t of l)t.scrollTo(e)}}!a&&e&&i&&document.getElementById(e)?.scrollIntoView(i)}finally{ot=!1}}))}function dt(e,t=String){let n=new URLSearchParams;for(let r in e){let i=e[r];i!==void 0&&n.set(r,t(i))}return n.toString()}function ft(e){return e?e===`false`?!1:e===`true`?!0:e*0==0&&+e+``===e?+e:e:``}function pt(e){let t=new URLSearchParams(e),n=Object.create(null);for(let[e,r]of t.entries()){let t=n[e];t==null?n[e]=ft(r):Array.isArray(t)?t.push(ft(r)):n[e]=[t,ft(r)]}return n}var mt=gt(JSON.parse),ht=_t(JSON.stringify,JSON.parse);function gt(e){return t=>{t[0]===`?`&&(t=t.substring(1));let n=pt(t);for(let t in n){let r=n[t];if(typeof r==`string`)try{n[t]=e(r)}catch{}}return n}}function _t(e,t){let n=typeof t==`function`;function r(r){if(typeof r==`object`&&r)try{return e(r)}catch{}else if(n&&typeof r==`string`)try{return t(r),e(r)}catch{}return r}return e=>{let t=dt(e,r);return t?`?${t}`:``}}function vt(e){return{input:({url:t})=>{for(let n of e)t=bt(n,t);return t},output:({url:t})=>{for(let n=e.length-1;n>=0;n--)t=xt(e[n],t);return t}}}function yt(e){let t=ue(e.basepath),n=`/${t}`,r=e.caseSensitive?n:n.toLowerCase(),i=`${r}/`;return{input:({url:t})=>{let a=e.caseSensitive?t.pathname:t.pathname.toLowerCase();return a===r?t.pathname=`/`:a.startsWith(i)&&(t.pathname=t.pathname.slice(n.length)),t},output:({url:e})=>(e.pathname=te([`/`,t,e.pathname]),e)}}function bt(e,t){let n=e?.input?.({url:t});if(n){if(typeof n==`string`)return new URL(n);if(n instanceof URL)return n}return t}function xt(e,t){let n=e?.output?.({url:t});if(n){if(typeof n==`string`)return new URL(n);if(n instanceof URL)return n}return t}function St(e,t){let{createMutableStore:n,createReadonlyStore:r,batch:i,init:a}=t,o=new Map,s=new Map,c=new Map,l=n(e.status),d=n(e.loadedAt),f=n(e.isLoading),p=n(e.isTransitioning),m=n(e.location),h=n(e.resolvedLocation),g=n(e.statusCode),_=n(e.redirect),v=n([]),y=n([]),b=n([]),x=r
10(()=>Ct(o,v.get())),S=r(()=>Ct(s,y.get())),C=r(()=>Ct(c,b.get())),w=r(()=>v.get()[0]),T=r(()=>v.get().some(e=>o.get(e)?.get().status===`pending`)),E=r(()=>({locationHref:m.get().href,resolvedLocationHref:h.get()?.href,status:l.get()})),ee=r(()=>({status:l.get(),loadedAt:d.get(),isLoading:f.get(),isTransitioning:p.get(),matches:x.get(),location:m.get(),resolvedLocation:h.get(),statusCode:g.get(),redirect:_.get()})),D=u(64);function te(e){let t=D.get(e);return t||(t=r(()=>{let t=v.get();for(let n of t){let t=o.get(n);if(t&&t.routeId===e)return t.get()}}),D.set(e,t)),t}let ne={status:l,loadedAt:d,isLoading:f,isTransitioning:p,location:m,resolvedLocation:h,statusCode:g,redirect:_,matchesId:v,pendingIds:y,cachedIds:b,matches:x,pendingMatches:S,cachedMatches:C,firstId:w,hasPending:T,matchRouteDeps:E,matchStores:o,pendingMatchStores:s,cachedMatchStores:c,__store:ee,getRouteMatchStore:te,setMatches:re,setPending:ie,setCached:ae};re(e.matches),a?.(ne);function re(e){wt(e,o,v,n,i)}function ie(e){wt(e,s,y,n,i)}function ae(e){wt(e,c,b,n,i)}return ne}function Ct(e,t){let n=[];for(let r of t){let t=e.get(r);t&&n.push(t.get())}return n}function wt(e,t,n,r,i){let a=e.map(e=>e.id),o=new Set(a);i(()=>{for(let e of t.keys())o.has(e)||t.delete(e);for(let n of e){let e=t.get(n.id);if(!e){let e=r(n);e.routeId=n.routeId,t.set(n.id,e);continue}e.routeId=n.routeId,e.get()!==n&&e.set(n)}ie(n.get(),a)||n.set(a)})}var Tt=e=>{if(!e.rendered)return e.rendered=!0,e.onReady?.()},Et=e=>e.stores.matchesId.get().some(t=>e.stores.matchStores.get(t)?.get()._forcePending),Dt=(e,t)=>!!(e.preload&&!e.router.stores.matchStores.has(t)),Ot=(e,t,n=!0)=>{let r={...e.router.options.context??{}},i=n?t:t-1;for(let t=0;t<=i;t++){let n=e.matches[t];if(!n)continue;let i=e.router.getMatch(n.id);
10i&&Object.assign(r,i.__routeContext,i.__beforeLoadContext)}return r},kt=(e,t)=>{if(!e.matches.length)return;let n=t.routeId,r=e.matches.findIndex(t=>t.routeId===e.router.routeTree.id),i=r>=0?r:0,a=n?e.matches.findIndex(e=>e.routeId===n):e.firstBadMatchIndex??e.matches.length-1;a<0&&(a=i);for(let t=a;t>=0;t--){let n=e.matches[t];if(e.router.looseRoutesById[n.routeId].options.notFoundComponent)return t}return n?a:i},At=(e,t,n)=>{if(!(!ve(n)&&!he(n)))throw ve(n)&&n.redirectHandled&&!n.options.reloadDocument?n:(t&&(t._nonReactive.beforeLoadPromise?.resolve(),t._nonReactive.loaderPromise?.resolve(),t._nonReactive.beforeLoadPromise=void 0,t._nonReactive.loaderPromise=void 0,t._nonReactive.error=n,e.updateMatch(t.id,r=>({...r,status:ve(n)?`redirected`:he(n)?`notFound`:r.status===`pending`?`success`:r.status,context:Ot(e,t.index),isFetching:!1,error:n})),he(n)&&!n.routeId&&(n.routeId=t.routeId),t._nonReactive.loadPromise?.resolve()),ve(n)&&(e.rendered=!0,n.options._fromLocation=e.location,n.redirectHandled=!0,n=e.router.resolveRedirect(n)),n)},jt=(e,t)=>{let n=e.router.getMatch(t);return!!(!n||n._nonReactive.dehydrated)},Mt=(e,t,n)=>{let r=Ot(e,n);e.updateMatch(t,e=>({...e,context:r}))},Nt=(e,t,n)=>{let{id:r,routeId:i}=e.matches[t],a=e.router.looseRoutesById[i];if(n instanceof Promise)throw n;e.firstBadMatchIndex??=t,At(e,e.router.getMatch(r),n);try{a.options.onError?.(n)}catch(t){n=t,At(e,e.router.getMatch(r),n)}e.updateMatch(r,e=>(e._nonReactive.beforeLoadPromise?.resolve(),e._nonReactive.beforeLoadPromise=void 0,e._nonReactive.loadPromise?.resolve(),{...e,error:n,status:`error`,isFetching:!1,updatedAt:Date.now(),abortController:new AbortController})),!e.preload&&!ve(n)&&!he(n)&&(e.serialError??=n)},Pt=(e,t,n,r)=>{if(r._nonReactive.pendingTimeout!==void 0)return;let i=n.options.pendingMs??e.router.options.defaultPendingMs;if(e.onReady&&!Dt(e,t)&&(n.options.loader||n.options.beforeLoad||Gt(n))&&typeof i==`number`&&i!==1/0&&(n.options.pendingComponent??e.router.options?.defaultPendingComponent)){let t=setTimeout(()=>{Tt(e)},i);r._nonReactive.pendingTimeout=t}},Ft=(e,t,n)=>{let r=e.router.getMatch(t);if(!r._nonReactive.beforeLoadPromise&&!r._nonReactive.loaderPromise)return;Pt(e,t,n,r);let i=()=>{let n=e.router.getMatch(t);n.preload&&(n.status===`redirected`||n.status===`notFound`)&&At(e,n,n.error)};return r._nonReactive.beforeLoadPromise?r._nonReactive.beforeLoadPromise.then(i):i()},It=(e,t,n,r)=>{let i=e.router.getMatch(t),a=i._nonReactive.loadPromise;i._nonReactive.loadPromise=s(()=>{a?.resolve(),a=void 0});let{paramsError:o,searchError:c}=i;o&&Nt(e,n,o),c&&Nt(e,n,c),Pt(e,t,r,i);let l=new AbortController,u=!1,d=()=>{u||(u=!0,e.updateMatch(t,e=>({...e,isFetching:`beforeLoad`,fetchCount:e.fetchCount+1,abortController:l})))},f=()=>{i._nonReactive.beforeLoadPromise?.resolve(),i._nonReactive.beforeLoadPromise=void 0,e.updateMatch(t,e=>({...e,isFetching:!1}))};if(!r.options.beforeLoad){e.router.batch(()=>{d(),f()});return}i._nonReactive.beforeLoadPromise=s();let p={...Ot(e,n,!1),...i.__routeContext},{search:m,params:h,cause:g}=i,_=Dt(e,t),v={search:m,abortController:l,params:h,preload:_,context:p,location:e.location,navigate:t=>e.router.navigate({...t,_fromLocation:e.location}),buildLocation:e.router.buildLocation,cause:_?`preload`:g,matches:e.matches,routeId:r.id,...e.router.options.additionalContext},y=r=>{if(r===void 0){e.router.batch(()=>{d(),f()});return}(ve(r)||he(r))&&(d(),Nt(e,n,r)),e.router.batch(()=>{d(),e.updateMatch(t,e=>({...e,__beforeLoadContext:r})),f()})},b;try{if(b=r.options.beforeLoad(v),pe(b))return d(),b.catch(t=>{Nt(e,n,t)}).then(y)}catch(t){d(),Nt(e,n,t)}y(b)},Lt=(e,t)=>{let{id:n,routeId:r}=e.matches[t],i=e.router.looseRoutesById[r],a=()=>s(),o=()=>It(e,n,t,i),s=()=>{if(jt(e,n))return;let t=Ft(e,n,i);return pe(t)?t.then(o):o()};return a()},Rt=(e,t,n)=>{let r=e.router.getMatch(t);if(!r||!n.options.head&&!n.options.scripts&&!n.options.headers)return;let i={ssr:e.router.options.ssr,matches:e.matches,match:r,params:r.params,loaderData:r.loaderData};return Promise.all([n.options.head?.(i),n.options.scripts?.(i),n.options.headers?.(i)]).then(([e,t,n])=>({meta:e?.meta,links:e?.links,headScripts:e?.scripts,headers:n,scripts:t,styles:e?.styles}))},zt=(e,t,n,r,i)=>{let a=t[r-1],{params:o,loaderDeps:s,abortController:c,cause:l}=e.router.getMatch(n),u=Ot(e,r),d=Dt(e,n);return{params:o,deps:s,preload:!!d,parentMatchPromise:a,abortController:c,context:u,location:e.location,navigate:t=>e.router.navigate({...t,_fromLocation:e.location}),cause:d?`preload`:l,route:i,...e.router.options.additionalContext}},Bt=async(e,t,n,r,i)=>{try{let a=e.router.getMatch(n);try{Wt(i);let o=i.options.loader,s=typeof o==`function`?o:o?.handler,c=s?.(zt(e,t,n,r,i)),l=!!s&&pe(c);if((l||i._lazyPromise||i._componentsPromise||i.options.head||i.options.scripts||i.options.headers||a._nonReactive.minPendingPromise)&&e.updateMatch(n,e=>({...e,isFetching:`loader`})),s){let t=l?await c:c;At(e,e.router.getMatch(n),t),t!==void 0&&e.updateMatch(n,e=>({...e,loaderData:t}))}i._lazyPromise&&await i._lazyPromise;let u=a._nonReactive.minPendingPromise;u&&await u,i._componentsPromise&&await i._componentsPromise,e.updateMatch(n,t=>({...t,error:void 0,context:Ot(e,r),status:`success`,isFetching:!1,updatedAt:Date.now()}))}catch(t){let o=t;if(o?.name===`AbortError`){if(a.abortController.signal.aborted){a._nonReactive.loaderPromise?.resolve(),a._nonReactive.loaderPromise=void 0;return}e.updateMatch(n,t=>
10({...t,status:t.status===`pending`?`success`:t.status,isFetching:!1,context:Ot(e,r)}));return}let s=a._nonReactive.minPendingPromise;s&&await s,he(t)&&await i.options.notFoundComponent?.preload?.(),At(e,e.router.getMatch(n),t);try{i.options.onError?.(t)}catch(t){o=t,At(e,e.router.getMatch(n),t)}!ve(o)&&!he(o)&&await Wt(i,[`errorComponent`]),e.updateMatch(n,t=>({...t,error:o,context:Ot(e,r),status:`error`,isFetching:!1}))}}catch(t){let r=e.router.getMatch(n);r&&(r._nonReactive.loaderPromise=void 0),At(e,r,t)}},Vt=async(e,t,n)=>{async function r(r,a,s,l,u){let f=Date.now()-a.updatedAt,p=r?u.options.preloadStaleTime??e.router.options.defaultPreloadStaleTime??3e4:u.options.staleTime??e.router.options.defaultStaleTime??0,m=u.options.shouldReload,h=typeof m==`function`?m(zt(e,t,i,n,u)):m,{status:g,invalid:_}=l,v=f>=p&&(!!e.forceStaleReload||l.cause===`enter`||s!==void 0&&s!==l.id);o=g===`success`&&(_||(h??v)),r&&u.options.preload===!1||(o&&!e.sync&&d?(c=!0,(async()=>{try{await Bt(e,t,i,n,u);let r=e.router.getMatch(i);r._nonReactive.loaderPromise?.resolve(),r._nonReactive.loadPromise?.resolve(),r._nonReactive.loaderPromise=void 0,r._nonReactive.loadPromise=void 0}catch(t){ve(t)&&await e.router.navigate(t.options)}})()):g!==`success`||o?await Bt(e,t,i,n,u):Mt(e,i,n))}let{id:i,routeId:a}=e.matches[n],o=!1,c=!1,l=e.router.looseRoutesById[a],u=l.options.loader,d=((typeof u==`function`?void 0:u?.staleReloadMode)??e.router.options.defaultStaleReloadMode)!==`blocking`;if(jt(e,i)){if(!e.router.getMatch(i))return e.matches[n];Mt(e,i,n)}else{let t=e.router.getMatch(i),o=e.router.stores.matchesId.get()[n],c=(o&&e.router.stores.matchStores.get(o)||null)?.routeId===a?o:e.router.stores.matches.get().find(e=>e.routeId===a)?.id,u=Dt(e,i);if(t._nonReactive.loaderPromise){if(t.status===`success`&&!e.sync&&!t.preload&&d)return t;await t._nonReactive.loaderPromise;let n=e.router.getMatch(i),a=n._nonReactive.error||n.error;a&&At(e,n,a),n.status===`pending`&&await r(u,t,c,n,l)}else{let n=u&&!e.router.stores.matchStores.has(i),a=e.router.getMatch(i);a._nonReactive.loaderPromise=s(),n!==a.preload&&e.updateMatch(i,e=>({...e,preload:n})),await r(u,t,c,a,l)}}let f=e.router.getMatch(i);c||(f._nonReactive.loaderPromise?.resolve(),f._nonReactive.loadPromise?.resolve(),f._nonReactive.loadPromise=void 0),clearTimeout(f._nonReactive.pendingTimeout),f._nonReactive.pendingTimeout=void 0,c||(f._nonReactive.loaderPromise=void 0),f._nonReactive.dehydrated=void 0;let p=c?f.isFetching:!1;return p!==f.isFetching||f.invalid!==!1?(e.updateMatch(i,e=>({...e,isFetching:p,invalid:!1})),e.router.getMatch(i)):f};async function Ht(e){let t=e,n=[];Et(t.router)&&Tt(t);let r;for(let e=0;e<t.matches.length;e++){try{let n=Lt(t,e);pe(n)&&await n}catch(e){if(ve(e))throw e;if(he(e))r=e;else if(!t.preload)throw e;break}if(t.serialError||t.firstBadMatchIndex!=null)break}let i=t.firstBadMatchIndex??t.matches.length,a=r&&!t.preload?kt(t,r):void 0,o=r&&t.preload?0:a===void 0?i:Math.min(a+1,i),s,c;for(let e=0;e<o;e++)n.push(Vt(t,n,e));try{await Promise.all(n)}catch{let e=await Promise.allSettled(n);for(let t of e){if(t.status!==`rejected`)continue;let e=t.reason;if(ve(e))throw e;he(e)?s??=e:c??=e}if(c!==void 0)throw c}let l=s??(r&&!t.preload?r:void 0),u=t.firstBadMatchIndex===void 0?t.matches.length-1:t.firstBadMatchIndex;if(!l&&r&&t.preload)return t.matches;if(l){let e=kt(t,l);e===void 0&&me();let n=t.matches[e],r=t.router.looseRoutesById[n.routeId],i=t.router.options?.defaultNotFoundComponent;!r.options.notFoundComponent&&i&&(r.options.notFoundComponent=i),l.routeId=n.routeId;let a=n.routeId===t.router.routeTree.id;t.updateMatch(n.id,e=>({...e,...a?{status:`success`,globalNotFound:!0,error:void 0}:{status:`notFound`,error:l},isFetching:!1})),u=e,await Wt(r,[`notFoundComponent`])}else if(!t.preload){let e=t.matches[0];e.globalNotFound||t.router.getMatch(e.id)?.globalNotFound&&t.updateMatch(e.id,e=>({...e,globalNotFound:!1,error:void 0}))}if(t.serialError&&t.firstBadMatchIndex!==void 0){let e=t.router.looseRoutesById[t.matches[t.firstBadMatchIndex].routeId];await Wt(e,[`errorComponent`])}for(let e=0;e<=u;e++){let{id:n,routeId:r}=t.matches[e],i=t.router.looseRoutesById[r];try{let e=Rt(t,n,i);if(e){let r=await e;t.updateMatch(n,e=>({...e,...r}))}}catch(e){console.error(`Error executing head for route ${r}:`,e)}}let d=Tt(t);if(pe(d)&&await d,l)throw l;if(t.serialError&&!t.preload&&!t.onReady)throw t.serialError;return t.matches}function Ut(e,t){let n=t.map(t=>
10e.options[t]?.preload?.()).filter(Boolean);if(n.length!==0)return Promise.all(n)}function Wt(e,t=Kt){!e._lazyLoaded&&e._lazyPromise===void 0&&(e.lazyFn?e._lazyPromise=e.lazyFn().then(t=>{let{id:n,...r}=t.options;Object.assign(e.options,r),e._lazyLoaded=!0,e._lazyPromise=void 0}):e._lazyLoaded=!0);let n=()=>e._componentsLoaded?void 0:t===Kt?(()=>{if(e._componentsPromise===void 0){let t=Ut(e,Kt);t?e._componentsPromise=t.then(()=>{e._componentsLoaded=!0,e._componentsPromise=void 0}):e._componentsLoaded=!0}return e._componentsPromise})():Ut(e,t);return e._lazyPromise?e._lazyPromise.then(n):n()}function Gt(e){for(let t of Kt)if(e.options[t]?.preload)return!0;return!1}var Kt=[`component`,`errorComponent`,`pendingComponent`,`notFoundComponent`],qt=`__TSR_index`,Jt=`popstate`,Yt=`beforeunload`;function Xt(e){let t=e.getLocation(),n=new Set,r=r=>{t=e.getLocation(),n.forEach(e=>e({location:t,action:r}))},i=n=>{e.notifyOnIndexChange??!0?r(n):t=e.getLocation()},a=async({task:n,navigateOpts:r,...i})=>{if(r?.ignoreBlocker??!1){n();return}let a=e.getBlockers?.()??[],o=i.type===`PUSH`||i.type===`REPLACE`;if(typeof document<`u`&&a.length&&o)for(let n of a){let r=en(i.path,i.state);if(await n.blockerFn({currentLocation:t,nextLocation:r,action:i.type})){e.onBlocked?.();return}}n()};return{get location(){return t},get length(){return e.getLength()},subscribers:n,subscribe:e=>(n.add(e),()=>{n.delete(e)}),push:(n,i,o)=>{let s=t.state[qt];i=Zt(s+1,i),a({task:()=>{e.pushState(n,i),r({type:`PUSH`})},navigateOpts:o,type:`PUSH`,path:n,state:i})},replace:(n,i,o)=>{let s=t.state[qt];i=Zt(s,i),a({task:()=>{e.replaceState(n,i),r({type:`REPLACE`})},navigateOpts:o,type:`REPLACE`,path:n,state:i})},go:(t,n)=>{a({task:()=>{e.go(t),i({type:`GO`,index:t})},navigateOpts:n,type:`GO`})},back:t=>{a({task:()=>{e.back(t?.ignoreBlocker??!1),i({type:`BACK`})},navigateOpts:t,type:`BACK`})},forward:t=>{a({task:()=>{e.forward(t?.ignoreBlocker??!1),i({type:`FORWARD`})},navigateOpts:t,type:`FORWARD`})},canGoBack:()=>t.state[qt]!==0,createHref:t=>e.createHref(t),block:t=>{if(!e.setBlockers)return()=>{};let n=e.getBlockers?.()??[];return e.setBlockers([...n,t]),()=>{let n=e.getBlockers?.()??[];e.setBlockers?.(n.filter(e=>e!==t))}},flush:()=>e.flush?.(),destroy:()=>e.destroy?.(),notify:r}}function Zt(e,t){t||={};let n=tn();return{...t,key:n,__TSR_key:n,[qt]:e}}function Qt(e){let t=e?.window??(typeof document<`u`?window:void 0),n=t.history.pushState,r=t.history.replaceState,i=[],a=()=>i,o=e=>i=e,s=e?.createHref??(e=>e),c=e?.parseLocation??(()=>en(`${t.location.pathname}${t.location.search}${t.location.hash}`,t.history.state));if(!t.history.state?.__TSR_key&&!t.history.state?.key){let e=tn();t.history.replaceState({[qt]:0,key:e,__TSR_key:e},``)}let l=c(),u,d=!1,f=!1,p=!1,m=!1,h=()=>l,g,_,v=()=>{g&&(C._ignoreSubscribers=!0,(g.isPush?t.history.pushState:t.history.replaceState)(g.state,``,g.href),C._ignoreSubscribers=!1,g=void 0,_=void 0,u=void 0)},y=(e,t,n)=>{let r=s(t);_||(u=l),l=en(t,n),g={href:r,state:n,isPush:g?.isPush||e===`push`},_||=Promise.resolve().then(()=>v())},b=e=>{l=c(),C.notify({type:e})},x=async()=>{if(f){f=!1;return}let e=c(),n=e.state[qt]-l.state[qt],r=n===1,i=n===-1,o=!r&&!i||d;d=!1;let s=o?`GO`:i?`BACK`:`FORWARD`,u=o?{type:`GO`,index:n}:{type:i?`BACK`:`FORWARD`};if(p)p=!1;else{let n=a();if(typeof document<`u`&&n.length){for(let r of n)if(await r.blockerFn({currentLocation:l,nextLocation:e,action:s})){f=!0,t.history.go(1),C.notify(u);return}}}l=c(),C.notify(u)},S=e=>{if(m){m=!1;return}let t=!1,n=a();if(typeof document<`u`&&n.length)for(let e of n){let n=e.enableBeforeUnload??!0;if(n===!0){t=!0;break}if(typeof n==`function`&&n()===!0){t=!0;break}}if(t)return e.preventDefault(),e.returnValue=``},C=Xt({getLocation:h,getLength:()=>t.history.length,pushState:(e,t)=>y(`push`,e,t),replaceState:(e,t)=>y(`replace`,e,t),back:e=>(e&&(p=!0),m=!0,t.history.back()),forward:e=>{e&&(p=!0),m=!0,t.history.forward()},go:e=>{d=!0,t.history.go(e)},createHref:e=>s(e),flush:v,destroy:()=>{t.history.pushState=n,t.history.replaceState=r,t.removeEventListener(Yt,S,{capture:!0}),t.removeEventListener(Jt,x)},onBlocked:()=>{u&&l!==u&&(l=u)},getBlockers:a,setBlockers:o,notifyOnIndexChange:!1});return t.addEventListener(Yt,S,{capture:!0}),t.addEventListener(Jt,x),t.history.pushState=function(...e){let r=n.apply(t.history,e);return C._ignoreSubscribers||b(`PUSH`),r},t.history.replaceState=function(...e){let n=r.apply(t.history,e);return C._ignoreSubscribers||b(`REPLACE`),n},C}function $t(e){let t=e.replace(/[\x00-\x1f\x7f]/g,``);return t.startsWith(`//`)&&(t=`/`+t.replace(/^\/+/,``)),t}function en(e,t){let n=$t(e),r=n.indexOf(`#`),i=n.indexOf(`?`),a=tn();return{href:n,pathname:n.substring(0,r>0?i>0?Math.min(r,i):r:i>0?i:n.length),hash:r>-1?n.substring(r):``,search:i>-1?n.slice(i,r===-1?void 0:r):``,state:t||{[qt]:0,key:a,__TSR_key:a}}}function tn(){return(Math.random()+1).toString(36).substring(7)}function nn(e){return e instanceof Error?{name:e.name,message:e.message}:{data:e}}function rn(e,t){let n=t,r=e;return{fromLocation:n,toLocation:r,pathChanged:n?.pathname!==r.pathname,hrefChanged:n?.href!==r.href,hashChanged:n?.hash!==r.hash}}var an=class{constructor(e,t){this.tempLocationKey=`${Math.round(Math.random()*1e7)}`,this._scroll={next:!0},this.shouldViewTransition=void 0,this.isViewTransitionTypesSupported=void 0,this.subscribers=new Set,this.routeBranchCache=new WeakMap,this.lightweightCache=new WeakMap,this.startTransition=e=>e(),this.update=e=>{let t=this.options,n=this.basepath??t?.basepath??`/`,r=this.basepath===void 0,i=t?.rewrite;if(this.options={...t,...e},this.isServer=this.options.isServer??typeof document>`u`,this.protocolAllowlist=new Set(this.options.protocolAllowlist),this.options.pathParamsAllowedCharacters&&(this.pathParamsDecoder=D(this.options.pathParamsAllowedCharacters)),(!this.history||this.options.history&&this.options.history!==this.history)&&(this.history=this.options.history?this.options.history:Qt()),this.origin=this.options.origin,this.origin||=window?.origin&&window.origin!==`null`?window.origin:`http://localhost`,this.history&&this.updateLatestLocation(),this.options.routeTree!==this.routeTree){this.routeTree=this.options.routeTree;let e;this.resolvePathCache=u(1e3),e=this.buildRouteTree(),this.setRoutes(e)}if(!this.stores&&this.latestLocation){let e=this.getStoreConfig(this);this.batch=e.batch,this.stores=St(cn(this.latestLocation),e),ut(this)}let a=!1,o=this.options.basepath??`/`,s=this.options.rewrite;if(r||n!==o||i!==s){this.basepath=o;let e=[],t=ue(o);t&&t!==`/`&&e.push(yt({basepath:o})),s&&e.push(s),this.rewrite=e.length===0?void 0:e.length===1?e[0]:vt(e),this.history&&this.updateLatestLocation(),a=!0}a&&this.stores&&this.stores.location.set(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=()=>{let e=d(this.routeTree,this.options.caseSensitive,(e,t)=>{e.init({originalIndex:t})});return this.options.routeMasks&&S(this.options.routeMasks,e.processedTree),e},this.subscribe=(e,t)=>
10{let n={eventType:e,fn:t};return this.subscribers.add(n),()=>{this.subscribers.delete(n)}},this.emit=e=>{this.subscribers.forEach(t=>{t.eventType===e.type&&t.fn(e)})},this.parseLocation=(e,t)=>{let n=({pathname:e,search:n,hash:r,href:i,state:a})=>{if(!this.rewrite&&!/[ \x00-\x1f\x7f\u0080-\uffff]/.test(e)){let i=this.options.parseSearch(n),o=this.options.stringifySearch(i);return{href:e+o+r,publicHref:e+o+r,pathname:re(e).path,external:!1,searchStr:o,search:C(t?.search,i),hash:re(r.slice(1)).path,state:p(t?.state,a)}}let o=new URL(i,this.origin),s=bt(this.rewrite,o),c=this.options.parseSearch(s.search),l=this.options.stringifySearch(c);return s.search=l,{href:s.href.replace(s.origin,``),publicHref:i,pathname:re(s.pathname).path,external:!!this.rewrite&&s.origin!==this.origin,searchStr:l,search:C(t?.search,c),hash:re(s.hash.slice(1)).path,state:p(t?.state,a)}},r=n(e),{__tempLocation:i,__tempKey:a}=r.state;if(i&&(!a||a===this.tempLocationKey)){let e=n(i);return e.state.key=r.state.key,e.state.__TSR_key=r.state.__TSR_key,delete e.state.__tempLocation,{...e,maskedLocation:r}}return r},this.resolvePathWithBase=(e,t)=>w({base:e,to:t.includes(`//`)?ee(t):t,trailingSlash:this.options.trailingSlash,cache:this.resolvePathCache}),this.matchRoutes=(e,t,n)=>typeof e==`string`?this.matchRoutesInternal({pathname:e,search:t},n):this.matchRoutesInternal(e,t),this.getMatchedRoutes=e=>un({pathname:e,routesById:this.routesById,processedTree:this.processedTree}),this.cancelMatch=e=>{let t=this.getMatch(e);t&&(t.abortController.abort(),clearTimeout(t._nonReactive.pendingTimeout),t._nonReactive.pendingTimeout=void 0)},this.cancelMatches=()=>{this.stores.pendingIds.get().forEach(e=>{this.cancelMatch(e)}),this.stores.matchesId.get().forEach(e=>{if(this.stores.pendingMatchStores.has(e))return;let t=this.stores.matchStores.get(e)?.get();t&&(t.status===`pending`||t.isFetching===`loader`)&&this.cancelMatch(e)})},this.buildLocation=e=>{let t=(t={})=>{let n=t._fromLocation||this.pendingBuiltLocation||this.latestLocation,r=this.matchRoutesLightweight(n);t.from;let i=t.unsafeRelative===`path`?n.pathname:t.from??r.fullPath,a=t.to?`${t.to}`:void 0,o=r.search,s=Object.assign(Object.create(null),r.params),c=a?.charCodeAt(0)===47?`/`:this.resolvePathWithBase(i,`.`),l=a?this.resolvePathWithBase(c,a):c,u=t.params===!1||t.params===null?Object.create(null):(t.params??!0)===!0?s:Object.assign(s,f(t.params,s)),d=this.routesByPath[E(l)],h;if(d)h=this.getRouteBranch(d);else if(l.includes(`$`))h=[];else{let e=this.getMatchedRoutes(l);h=e.matchedRoutes,this.options.notFoundRoute&&(!e.foundRoute||e.foundRoute.path!==`/`&&e.routeParams[`**`])&&(h=[...h,this.options.notFoundRoute])}if(h.length&&m(u))for(let e of h){let t=e.options.params?.stringify??e.options.stringifyParams;if(t)try{Object.assign(u,t(u))}catch{}}let g=e.leaveParams?l:re(oe({path:l,params:u,decoder:this.pathParamsDecoder,server:this.isServer}).interpolatedPath).path,v=o;if(e._includeValidateSearch&&this.options.search?.strict){let e={};h.forEach(t=>{if(t.options.validateSearch)try{Object.assign(e,ln(t.options.validateSearch,{...e,...v}))}catch{}}),v=e}v=dn({search:v,dest:t,destRoutes:h,_includeValidateSearch:e._includeValidateSearch}),v=C(o,v);let y=this.options.stringifySearch(v),b=t.hash===!0?n.hash:t.hash?f(t.hash,n.hash):void 0,x=b?`#${b}`:``,S=t.state===!0?n.state:t.state?f(t.state,n.state):{};S=p(n.state,S);let w=`${g}${y}${x}`,T,ee,D=!1;if(this.rewrite){let e=new URL(w,this.origin),t=xt(this.rewrite,e);T=e.href.replace(e.origin,``),t.origin===this.origin?ee=t.pathname+t.search+t.hash:(ee=t.href,D=!0)}else T=_(w),ee=T;return{publicHref:ee,href:T,pathname:g,search:v,searchStr:y,state:S,hash:b??``,external:D,unmaskOnReload:t.unmaskOnReload}},n=(n={},r)=>{let i=t(n),a=r?t(r):void 0;if(!a){let n=Object.create(null);if(this.options.routeMasks){let o=x(i.pathname,this.processedTree);if(o){Object.assign(n,o.rawParams);let{from:i,params:s,...c}=o.route,l=s===!1||s===null?Object.create(null):(s??!0)===!0?n:Object.assign(n,f(s,n));r={from:e.from,...c,params:l},a=t(r)}}}return a&&(i.maskedLocation=a),i};return e.mask?n(e,{from:e.from,...e.mask}):n(e)},this.commitLocation=async({viewTransition:e,ignoreBlocker:t,...n})=>{let r,i=()=>{let e=[`key`,`__TSR_key`,`__TSR_index`,`__hashScrollIntoViewOptions`];
10e.forEach(e=>{n.state[e]=this.latestLocation.state[e]});let t=g(n.state,this.latestLocation.state);return e.forEach(e=>{delete n.state[e]}),t},a=E(this.latestLocation.href)===E(n.href),o=this.commitLocationPromise;if(this.commitLocationPromise=s(()=>{o?.resolve(),o=void 0}),a&&i())this.load();else{let{maskedLocation:i,hashScrollIntoView:a,...o}=n;i&&(o={...i,state:{...i.state,__tempKey:void 0,__tempLocation:{...o,search:o.searchStr,state:{...o.state,__tempKey:void 0,__tempLocation:void 0,__TSR_key:void 0,key:void 0}}}},(o.unmaskOnReload??this.options.unmaskOnReload??!1)&&(o.state.__tempKey=this.tempLocationKey)),o.state.__hashScrollIntoViewOptions=a??this.options.defaultHashScrollIntoView??!0,this.shouldViewTransition=e,r=n.replace?`REPLACE`:`PUSH`,this.history[r===`REPLACE`?`replace`:`push`](o.publicHref,o.state,{ignoreBlocker:t})}return this._scroll.next=n.resetScroll??!0,this.history.subscribers.size||this.load(r?{action:{type:r}}:void 0),this.commitLocationPromise},this.buildAndCommitLocation=({replace:e,resetScroll:t,hashScrollIntoView:n,viewTransition:r,ignoreBlocker:i,href:a,...o}={})=>{if(a){let t=this.history.location.state.__TSR_index,n=en(a,{__TSR_index:e?t:t+1}),r=new URL(n.pathname,this.origin);o.to=bt(this.rewrite,r).pathname,o.search=this.options.parseSearch(n.search),o.hash=n.hash.slice(1)}let s=this.buildLocation({...o,_includeValidateSearch:!0});this.pendingBuiltLocation=s;let c=this.commitLocation({...s,viewTransition:r,replace:e,resetScroll:t,hashScrollIntoView:n,ignoreBlocker:i});return queueMicrotask(()=>{this.pendingBuiltLocation===s&&(this.pendingBuiltLocation=void 0)}),c},this.navigate=async({to:e,reloadDocument:t,href:n,publicHref:r,...i})=>{let a=!1;if(n)try{new URL(`${n}`),a=!0}catch{}if(a&&!t&&(t=!0),t){if(e!==void 0||!n){let t=this.buildLocation({to:e,...i});n??=t.publicHref,r??=t.publicHref}let t=!a&&r?r:n;if(h(t,this.protocolAllowlist))return;if(!i.ignoreBlocker){let e=this.history.getBlockers?.()??[];for(let t of e)if(t?.blockerFn&&await t.blockerFn({currentLocation:this.latestLocation,nextLocation:this.latestLocation,action:`PUSH`}))return}i.replace?window.location.replace(t):window.location.href=t;return}return this.buildAndCommitLocation({...i,href:n,to:e,_isNavigate:!0})},this.beforeLoad=()=>{this.cancelMatches(),this.updateLatestLocation();let e=this.matchRoutes(this.latestLocation),t=this.stores.cachedMatches.get().filter(t=>!e.some(e=>e.id===t.id));this.batch(()=>{this.stores.status.set(`pending`),this.stores.statusCode.set(200),this.stores.isLoading.set(!0),this.stores.location.set(this.latestLocation),this.stores.setPending(e),this.stores.setCached(t)})},this.load=async e=>{let t=e?.action?.type,n,r,i,a=this.stores.resolvedLocation.get()??this.stores.location.get();for(i=new Promise(o=>{this.startTransition(async()=>{try{this.beforeLoad(),t&&(this._scroll.hash=t===`PUSH`||t===`REPLACE`);let n=this.latestLocation,r=rn(n,this.stores.resolvedLocation.get());this.stores.redirect.get()||this.emit({type:`onBeforeNavigate`,...r}),this.emit({type:`onBeforeLoad`,...r}),await Ht({router:this,sync:e?.sync,forceStaleReload:a.href===n.href,matches:this.stores.pendingMatches.get(),location:n,updateMatch:this.updateMatch,onReady:async()=>{this.startTransition(()=>{this.startViewTransition(async()=>{let e=null,t=null,n=null,r=null;this.batch(()=>{let i=this.stores.pendingMatches.get(),a=i.length,o=this.stores.matches.get();e=a?o.filter(e=>!this.stores.pendingMatchStores.has(e.id)):null;let s=new Set;for(let e of this.stores.pendingMatchStores.values())e.routeId&&s.add(e.routeId);let c=new Set;for(let e of this.stores.matchStores.values())e.routeId&&c.add(e.routeId);t=a?o.filter(e=>!s.has(e.routeId)):null,n=a?i.filter(e=>!c.has(e.routeId)):null,r=a?i.filter(e=>c.has(e.routeId)):o,this.stores.isLoading.set(!1),this.stores.loadedAt.set(Date.now()),a&&(this.stores.setMatches(i),this.stores.setPending([]),this.stores.setCached([...this.stores.cachedMatches.get(),...e.filter(e=>e.status!==`error`&&e.status!==`notFound`&&e.status!==`redirected`)]),this.clearExpiredCache())});for(let[e,i]of[[t,`onLeave`],[n,`onEnter`],[r,`onStay`]])if(e)for(let t of e)this.looseRoutesById[t.routeId].options[i]?.(t)})})}})}catch(e){ve(e)?(n=e,this.navigate({...n.options,replace:!0,ignoreBlocker:!0})):he(e)&&(r=e);let t=n?n.status:r?404:this.stores.matches.get().some(e=>e.status===`error`)?500:200;this.batch(()=>{this.stores.statusCode.set(t),this.stores.redirect.set(n)})}this.latestLoadPromise===i&&(this.commitLocationPromise?.resolve(),this.latestLoadPromise=void 0,this.commitLocationPromise=void 0),o()})}),this.latestLoadPromise=i,await i;this.latestLoadPromise&&i!==this.latestLoadPromise;)await this.latestLoadPromise;let o;this.hasNotFoundMatch()?o=404:this.stores.matches.get().some(e=>e.status===`error`)&&(o=500),o!==void 0&&this.stores.statusCode.set(o)},this.startViewTransition=e=>{let t=this.shouldViewTransition??this.options.defaultViewTransition;if(this.shouldViewTransition=void 0,t&&typeof document<`u`&&`startViewTransition`in document&&typeof document.startViewTransition==`function`){let n;if(typeof t==`object`&&this.isViewTransitionTypesSupported){let r=this.latestLocation,i=this.stores.resolvedLocation.get(),a=typeof t.types==`function`?t.types(rn(r,i)):t.types;if(a===!1){e();return}n={update:e,types:a}}else n=e;document.startViewTransition(n)}else e()},this.updateMatch=(e,t)=>{this.startTransition(()=>
10{let n=this.stores.pendingMatchStores.get(e);if(n){n.set(t);return}let r=this.stores.matchStores.get(e);if(r){r.set(t);return}let i=this.stores.cachedMatchStores.get(e);if(i){let n=t(i.get());n.status===`redirected`?this.stores.cachedMatchStores.delete(e)&&this.stores.cachedIds.set(t=>t.filter(t=>t!==e)):i.set(n)}})},this.getMatch=e=>this.stores.cachedMatchStores.get(e)?.get()??this.stores.pendingMatchStores.get(e)?.get()??this.stores.matchStores.get(e)?.get(),this.invalidate=e=>{let t=t=>e?.filter?.(t)??!0?{...t,invalid:!0,...e?.forcePending||t.status===`error`||t.status===`notFound`?{status:`pending`,error:void 0}:void 0}:t;return this.batch(()=>{this.stores.setMatches(this.stores.matches.get().map(t)),this.stores.setCached(this.stores.cachedMatches.get().map(t)),this.stores.setPending(this.stores.pendingMatches.get().map(t))}),this.shouldViewTransition=!1,this.load({sync:e?.sync})},this.getParsedLocationHref=e=>e.publicHref||`/`,this.resolveRedirect=e=>{let t=e.headers.get(`Location`);if(!e.options.href||e.options._builtLocation){let t=e.options._builtLocation??this.buildLocation(e.options),n=this.getParsedLocationHref(t);e.options.href=n,e.headers.set(`Location`,n)}else if(t)try{let n=new URL(t);if(this.origin&&n.origin===this.origin){let t=n.pathname+n.search+n.hash;e.options.href=t,e.headers.set(`Location`,t)}}catch{}if(e.options.href&&!e.options._builtLocation&&h(e.options.href,this.protocolAllowlist))throw Error(`Redirect blocked: unsafe protocol`);return e.headers.get(`Location`)||e.headers.set(`Location`,e.options.href),e},this.clearCache=e=>{let t=e?.filter;t===void 0?this.stores.setCached([]):this.stores.setCached(this.stores.cachedMatches.get().filter(e=>!t(e)))},this.clearExpiredCache=()=>{let e=Date.now();this.clearCache({filter:t=>{let n=this.looseRoutesById[t.routeId];if(!n.options.loader)return!0;let r=(t.preload?n.options.preloadGcTime??this.options.defaultPreloadGcTime:n.options.gcTime??this.options.defaultGcTime)??3e5;return t.status===`error`||e-t.updatedAt>=r}})},this.loadRouteChunk=Wt,this.preloadRoute=async e=>{let t=e._builtLocation??this.buildLocation(e),n=this.matchRoutes(t,{throwOnError:!0,preload:!0,dest:e}),r=new Set([...this.stores.matchesId.get(),...this.stores.pendingIds.get()]),i=new Set([...r,...this.stores.cachedIds.get()]),a=n.filter(e=>!i.has(e.id));if(a.length){let e=this.stores.cachedMatches.get();this.stores.setCached([...e,...a])}try{return n=await Ht({router:this,matches:n,location:t,preload:!0,updateMatch:(e,t)=>{r.has(e)?n=n.map(n=>n.id===e?t(n):n):this.updateMatch(e,t)}}),n}catch(e){if(ve(e))return e.options.reloadDocument?void 0:await this.preloadRoute({...e.options,_fromLocation:t});he(e)||console.error(e);return}},this.matchRoute=(e,t)=>{let n={...e,to:e.to?this.resolvePathWithBase(e.from||``,e.to):void 0,params:e.params||{},leaveParams:!0},r=this.buildLocation(n);if(t?.pending&&this.stores.status.get()!==`pending`)return!1;let i=(t?.pending===void 0?!this.stores.isLoading.get():t.pending)?this.latestLocation:this.stores.resolvedLocation.get()||this.stores.location.get(),a=de(r.pathname,t?.caseSensitive??!1,t?.fuzzy??!1,i.pathname,this.processedTree);return!a||e.params&&!g(a.rawParams,e.params,{partial:!0})?!1:t?.includeSearch??!0?g(i.search,r.search,{partial:!0})?a.rawParams:!1:a.rawParams},this.hasNotFoundMatch=()=>this.stores.matches.get().some(e=>e.status===`notFound`||e.globalNotFound),this.getStoreConfig=t,this.update({defaultPreloadDelay:50,defaultPendingMs:1e3,defaultPendingMinMs:500,context:void 0,...e,caseSensitive:e.caseSensitive??!1,notFoundMode:e.notFoundMode??`fuzzy`,stringifySearch:e.stringifySearch??ht,parseSearch:e.parseSearch??mt,protocolAllowlist:e.protocolAllowlist??v}),typeof document<`u`&&(self.__TSR_ROUTER__=this)}isShell(){return!!this.options.isShell}isPrerendering(){return!!this.options.isPrerendering}get state(){return this.stores.__store.get()}setRoutes({routesById:e,routesByPath:t,processedTree:n}){this.routesById=e,this.routesByPath=t,this.processedTree=n;let r=this.options.notFoundRoute;r&&(r.init({originalIndex:99999999999}),this.routesById[r.id]=r)}getRouteBranch(e){let t=this.routeBranchCache.get(e);return t||(t=fe(e),this.routeBranchCache.set(e,t)),t}get looseRoutesById(){return this.routesById}getParentContext(e){return e?.id?e.context??this.options.context??void 0:this.options.context??void 0}matchRoutesInternal(e,t){let n=this.getMatchedRoutes(e.pathname),{foundRoute:r,routeParam
10s:i}=n,{matchedRoutes:a}=n,o=!1;(r?r.path!==`/`&&i[`**`]:E(e.pathname))&&(this.options.notFoundRoute?a=[...a,this.options.notFoundRoute]:o=!0);let c=o?pn(this.options.notFoundMode,a):void 0,l=Array(a.length),u=new Map;for(let e of this.stores.matchStores.values())e.routeId&&u.set(e.routeId,e.get());for(let n=0;n<a.length;n++){let r=a[n],o=l[n-1],d,f,m;{let n=o?.search??e.search,i=o?._strictSearch??void 0;try{let e=ln(r.options.validateSearch,{...n})??void 0;d={...n,...e},f={...i,...e},m=void 0}catch(e){let r=e;if(e instanceof on||(r=new on(e.message,{cause:e})),t?.throwOnError)throw r;d=n,f={},m=r}}let h=r.options.loaderDeps?.({search:d})??``,g=h?JSON.stringify(h):``,{interpolatedPath:_,usedParams:v}=oe({path:r.fullPath,params:i,decoder:this.pathParamsDecoder,server:this.isServer}),y=r.id+_+g,b=this.getMatch(y),x=u.get(r.id),S=b?._strictParams??v,w;if(!b)try{mn(r,S)}catch(e){if(w=he(e)||ve(e)?e:new sn(e.message,{cause:e}),t?.throwOnError)throw w}Object.assign(i,S);let T=x?`stay`:`enter`,E;if(b)E={...b,cause:T,params:x?.params??i,_strictParams:S,search:C(x?x.search:b.search,d),_strictSearch:f};else{let e=r.options.loader||r.options.beforeLoad||r.lazyFn||Gt(r)?`pending`:`success`;E={id:y,ssr:r.options.ssr,index:n,routeId:r.id,params:x?.params??i,_strictParams:S,pathname:_,updatedAt:Date.now(),search:x?C(x.search,d):d,_strictSearch:f,searchError:void 0,status:e,isFetching:!1,error:void 0,paramsError:w,__routeContext:void 0,_nonReactive:{loadPromise:s()},__beforeLoadContext:void 0,context:{},abortController:new AbortController,fetchCount:0,cause:T,loaderDeps:x?p(x.loaderDeps,h):h,invalid:!1,preload:!1,links:void 0,scripts:void 0,headScripts:void 0,meta:void 0,staticData:r.options.staticData||{},fullPath:r.fullPath}}t?.preload||(E.globalNotFound=c===r.id),E.searchError=m;let ee=this.getParentContext(o);E.context={...ee,...E.__routeContext,...E.__beforeLoadContext},l[n]=E}for(let t=0;t<l.length;t++){let n=l[t],r=this.looseRoutesById[n.routeId],a=this.getMatch(n.id),o=u.get(n.routeId);if(n.params=o?C(o.params,i):i,!a){let i=l[t-1],a=this.getParentContext(i);if(r.options.context){let t={deps:n.loaderDeps,params:n.params,context:a??{},location:e,navigate:t=>this.navigate({...t,_fromLocation:e}),buildLocation:this.buildLocation,cause:n.cause,abortController:n.abortController,preload:!!n.preload,matches:l,routeId:r.id};n.__routeContext=r.options.context(t)??void 0}n.context={...a,...n.__routeContext,...n.__beforeLoadContext}}}return l}matchRoutesLightweight(e){let t=c(this.stores.matchesId.get()),n=this.lightweightCache.get(e);if(n&&n[0]===t)return n[1];let{matchedRoutes:r,routeParams:i}=this.getMatchedRoutes(e.pathname),a=c(r),o={...e.search};for(let e of r)try{Object.assign(o,ln(e.options.validateSearch,o))}catch{}let s=t&&this.stores.matchStores.get(t)?.get(),l=s&&s.routeId===a.id&&s.pathname===e.pathname,u;if(l)u=s.params;else{let e=Object.assign(Object.create(null),i);for(let t of r)try{mn(t,e)}catch{}u=e}let d={matchedRoutes:r,fullPath:a.fullPath,search:o,params:u};return this.lightweightCache.set(e,[t,d]),d}},on=class extends Error{},sn=class extends Error{};function cn(e){return{loadedAt:0,isLoading:!1,isTransitioning:!1,status:`idle`,resolvedLocation:void 0,location:e,matches:[],statusCode:200}}function ln(e,t){if(e==null)return{};if(`~standard`in e){let n=e[`~standard`].validate(t);if(n instanceof Promise)throw new on(`Async validation not supported`);if(n.issues)throw new on(JSON.stringify(n.issues,void 0,2),{cause:n});return n.value}return`parse`in e?e.parse(t):typeof e==`function`?e(t):{}}function un({pathname:e,routesById:t,processedTree:n}){let r=Object.create(null),i=E(e),a,o=l(i,n,!0);return o&&(a=o.route,Object.assign(r,o.rawParams)),{matchedRoutes:o?.branch||[t.__root__],routeParams:r,foundRoute:a}}function dn({search:e,dest:t,destRoutes:n,_includeValidateSearch:r}){return fn(n)(e,t,r??!1)}function fn(e){let t,n,r=[];for(let t of e){let e=t.options;`search`in e?e.search?.middlewares&&r.push(...e.search.middlewares):(e.preSearchFilters||e.postSearchFilters)&&r.push(({search:t,next:n})=>{let r=n(e.preSearchFilters?e.preSearchFilters.reduce((e,t)=>
10t(e),t):t);return e.postSearchFilters?e.postSearchFilters.reduce((e,t)=>t(e),r):r});let i=e.validateSearch;i&&r.push(({search:e,next:t,meta:r})=>{let a=t(e);if(n)try{let e=ln(i,a);if(r&&e)for(let t in e)t in a||(r.defaulted||=new Map).set(t,e[t]);return{...a,...e}}catch{}return a})}let i=(e,n,a)=>{if(e>=r.length){if(!t.search)return{};if(t.search===!0)return n;let e=f(t.search,n);return a&&(a.explicit=e),e}return r[e]({search:n,next:(t,n)=>{if(n){let n=a||{};return{search:i(e+1,t,n),meta:n}}return i(e+1,t,a)},meta:a})};return function(e,r,a){return t=r,n=a,i(0,e)}}function pn(e,t){if(e!==`root`)for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.children)return n.id}return ye}function mn(e,t){let n=e.options.params?.parse??e.options.parseParams;if(n){let e=n(t);if(e===!1)throw Error(`Route params.parse returned false for a matched route`);Object.assign(t,e)}}var hn=Symbol.for(`TSR_DEFERRED_PROMISE`);function gn(e,t){let n=e;return n[hn]?n:(n[hn]={status:`pending`},n.then(e=>{n[hn].status=`success`,n[hn].data=e}).catch(e=>{n[hn].status=`error`,n[hn].error={data:(t?.serializeError??nn)(e),__isServerError:!0}}),n)}function _n(e,t){if(e)return typeof e==`string`?e:e[t]}function vn(e){return e?.scriptFormat??`module`}function yn(e,t,n){let r=bn(t),i=_n(n,`script`)??r.crossOrigin;return{...vn(e)===`iife`?{rel:`preload`,as:`script`}:{rel:`modulepreload`},href:r.href,...i?{crossOrigin:i}:{}}}function bn(e){return typeof e==`string`?{href:e,crossOrigin:void 0}:e}function xn(e,t){if(t.length===0)return;if(t.length===1){e.push(t[0]);return}let n=new Set;for(let r of t){let t=JSON.stringify(r);n.has(t)||(n.add(t),e.push(r))}}function Sn(e){return typeof e==`string`?{href:e,crossOrigin:void 0}:e}var Cn=Symbol.asyncIterator,wn=Symbol.hasInstance,Tn=Symbol.isConcatSpreadable,En=Symbol.iterator,Dn=Symbol.match,On=Symbol.matchAll,kn=Symbol.replace,An=Symbol.search,jn=Symbol.species,Mn=Symbol.split,Nn=Symbol.toPrimitive,Pn=Symbol.toStringTag,Fn=Symbol.unscopables,In={[Cn]:0,[wn]:1,[Tn]:2,[En]:3,[Dn]:4,[On]:5,[kn]:6,[An]:7,[jn]:8,[Mn]:9,[Nn]:10,[Pn]:11,[Fn]:12},Ln={0:Cn,1:wn,2:Tn,3:En,4:Dn,5:On,6:kn,7:An,8:jn,9:Mn,10:Nn,11:Pn,12:Fn},Rn={2:!0,3:!1,1:void 0,0:null,4:-0,5:1/0,6:-1/0,7:NaN},zn={0:`Error`,1:`EvalError`,2:`RangeError`,3:`ReferenceError`,4:`SyntaxError`,5:`TypeError`,6:`URIError`},Bn={0:Error,1:EvalError,2:RangeError,3:ReferenceError,4:SyntaxError,5:TypeError,6:URIError};function j(e,t,n,r,i,a,o,s,c,l,u,d){return{t:e,i:t,s:n,c:r,m:i,p:a,e:o,a:s,f:c,b:l,o:u,l:d}}function Vn(e){return j(2,void 0,e,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}var Hn=Vn(2),Un=Vn(3),Wn=Vn(1),Gn=Vn(0),Kn=Vn(4),qn=Vn(5),Jn=Vn(6),Yn=Vn(7);function Xn(e){switch(e){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}}function Zn(e){let t=``,n=0,r;for(let i=0,a=e.length;i<a;i++)r=Xn(e[i]),r&&(t+=e.slice(n,i)+r,n=i+1);return n===0?t=e:t+=e.slice(n),t}function Qn(e){switch(e){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 e}}function $n(e){return e.replace(/(\\\\|\\"|\\n|\\r|\\b|\\t|\\f|\\u2028|\\u2029|\\x3C)/g,Qn)}var er=`__SEROVAL_REFS__`,tr=new Map,nr=new Map;function rr(e){return tr.has(e)}function ir(e){return nr.has(e)}function ar(e){if(rr(e))return tr.get(e);throw new Jr(e)}function or(e){if(ir(e))return nr.get(e);throw new Yr(e)}typeof globalThis<`u`?Object.defineProperty(globalThis,er,{value:nr,configurable:!0,writable:!1,enumerable:!1}):typeof window<`u`?Object.defineProperty(window,er,{value:nr,configurable:!0,writable:!1,enumerable:!1}):typeof self<`u`?Object.defineProperty(self,er,{value:nr,configurable:!0,writable:!1,enumerable:!1}):typeof global<`u`&&Object.defineProperty(global,er,{value:nr,configurable:!0,writable:!1,enumerable:!1});function sr(e){return e instanceof EvalError?1:e instanceof RangeError?2:e instanceof ReferenceError?3:e instanceof SyntaxError?4:e instanceof TypeError?5:e instanceof URIError?6:0}function cr(e){let t=zn[sr(e)];return e.name===t?e.constructor.name===t?{}:{name:e.constructor.name}:{name:e.name}}function lr(e,t){let n=cr(e),r=Object.getOwnPropertyNames(e);for(let i=0,a=r.length,o;i<a;i++)o=r[i],o!==`name`&&o!==`message`&&(o===`stack`?t&4&&(n||={},n[o]=e[o]):(n||={},n[o]=e[o]));return n}function ur(e){return Object.isFrozen(e)?3:Object.isSealed(e)?2:+!Object.isExtensible(e)}function dr(e){switch(e){case 1/0:return qn;case-1/0:return Jn}return e===e?Object.is(e,-0)?Kn:j(0,void 0,e,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0):Yn}function fr(e){return j(1,void 0,Zn(e),void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}function pr(e){return j(3,void 0,``+e,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}function mr(e){return j(4,e,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}function hr(e,t){let n=t.valueOf();return j(5,e,n===n?t.toISOString():``,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}function gr(e,t,n){return j(36,e,n.toString(),t,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}function _r(e,t){return j(6,e,void 0,Zn(t.source),t.flags,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}function vr(e,t){return j(17,e,In[t],void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}function yr(e,t){return j(18,e,Zn(ar(t)),void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}function br(e,t,n){return j(25,e,n,Zn(t),void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}function xr(e,t,n){return j(9,e,void 0,void 0,void 0,void 0,void 0,n,void 0,void 0,ur(t),void 0)}function Sr(e,t){return j(21,e,void 0,void 0,void 0,void 0,void 0,void 0,t,void 0,void 0,void 0)}function Cr(e,t,n){return j(15,e,void 0,t.constructor.name,void 0,void 0,void 0,void 0,n,t.byteOffset,void 0,t.length)}function wr(e,t,n){return j(16,e,void 0,t.constructor.name,void 0,void 0,void 0,void 0,n,t.byteOffset,void 0,t.length)}function Tr(e,t,n){return j(20,e,void 0,void 0,void 0,void 0,void 0,void 0,n,t.byteOffset,void 0,t.byteLength)}function Er(e,t,n){return j(13,e,sr(t),void 0,Zn(t.message),n,void 0,void 0,void 0,void 0,void 0,void 0)}function Dr(e,t,n){return j(14,e,sr(t),void 0,Zn(t.message),n,void 0,void 0,void 0,void 0,void 0,void 0)}function Or(e,t){return j(7,e,void 0,void 0,void 0,void 0,void 0,t,void 0,void 0,void 0,void 0)}function kr(e,t){return j(28,void 0,void 0,void 0,void 0,void 0,void 0,[e,t],void 0,void 0,void 0,void 0)}function Ar(e,t){return j(30,void 0,void 0,void 0,void 0,void 0,void 0,[e,t],void 0,void 0,void 0,void 0)}function jr(e,t,n){return j(31,e,void 0,void 0,void 0,void 0,void 0,n,t,void 0,void 0,void 0)}function Mr(e,t){return j(32,e,void 0,void 0,void 0,void 0,void 0,void 0,t,void 0,void 0,void 0)}function Nr(e,t){return j(33,e,void 0,void 0,void 0,void 0,void 0,void 0,t,void 0,void 0,void 0)}function Pr(e,t){return j(34,e,void 0,void 0,void 0,void 0,void 0,void 0,t,void 0,void 0,void 0)}function Fr(e,t,n,r){return j(35,e,n,void 0,void 0,void 0,void 0,t,void 0,void 0,void 0,r)}var{toString:Ir}
12=Object.prototype,Lr={parsing:1,serialization:2,deserialization:3};function Rr(e){return`Seroval Error (step: ${Lr[e]})`}var zr=(e,t)=>Rr(e),Br=class extends Error{constructor(e,t){super(zr(e,t)),this.cause=t}},Vr=class extends Br{constructor(e){super(`parsing`,e)}},Hr=class extends Br{constructor(e){super(`deserialization`,e)}};function Ur(e){return`Seroval Error (specific: ${e})`}var Wr=class extends Error{constructor(e){super(Ur(1)),this.value=e}},Gr=class extends Error{constructor(e){super(Ur(2))}},Kr=class extends Error{constructor(e){super(Ur(3))}},qr=class extends Error{constructor(e){super(Ur(4))}},Jr=class extends Error{constructor(e){super(Ur(5)),this.value=e}},Yr=class extends Error{constructor(e){super(Ur(6))}},Xr=class extends Error{constructor(e){super(Ur(7))}},Zr=class extends Error{constructor(e){super(Ur(8))}},Qr=class extends Error{constructor(e){super(Ur(9))}},$r=class{constructor(e,t){this.value=e,this.replacement=t}},ei=()=>{let e={p:0,s:0,f:0};return e.p=new Promise((t,n)=>{e.s=t,e.f=n}),e},ti=()=>{let e=[],t=[],n=!0,r=!1,i=0,a={flush(e,n,r){for(r=0;r<i;r++)t[r]&&t[r][n](e)},up(t,i,a,o){for(i=0,a=e.length;i<a;i++)o=e[i],!n&&i===a-1?t[r?`return`:`throw`](o):t.next(o)},on(e,r){return n&&(r=i++,t[r]=e),a.up(e),()=>{n&&(t[r]=t[i],t[i--]=void 0)}}};return{__SEROVAL_STREAM__:!0,on(e){return a.on(e)},next(t){n&&(e.push(t),a.flush(t,`next`))},throw(i){n&&(e.push(i),a.flush(i,`throw`),n=!1,r=!1,t.length=0)},return(i){n&&(e.push(i),a.flush(i,`return`),n=!1,r=!0,t.length=0)}}},ni=e=>t=>()=>{let n=0,r={[e](){return r},next(){if(n>t.d)return{done:!0,value:void 0};let e=n++,r=t.v[e];if(e===t.t)throw r;return{done:e===t.d,value:r}}};return r},ri=(e,t)=>n=>()=>{let r=0,i=-1,a=!1,o=[],s=[],c={finalize(e=0,t=s.length){for(;e<t;e++)s[e].s({done:!0,value:void 0})}};n.on({next(e){let t=s.shift();t&&t.s({done:!1,value:e}),o.push(e)},throw(e){let t=s.shift();t&&t.f(e),c.finalize(),i=o.length,a=!0,o.push(e)},return(e){let t=s.shift();t&&t.s({done:!0,value:e}),c.finalize(),i=o.length,o.push(e)}});let l={[e](){return l},next(){if(i===-1){let e=r++;if(e>=o.length){let e=t();return s.push(e),e.p}return{done:!1,value:o[e]}}if(r>i)return{done:!0,value:void 0};let e=r++,n=o[e];if(e!==i)return{done:!1,value:n};if(a)throw n;return{done:!0,value:n}}};return l},ii=e=>{let t=atob(e),n=t.length,r=new Uint8Array(n);for(let e=0;e<n;e++)r[e]=t.charCodeAt(e);return r.buffer};function ai(e){return`__SEROVAL_SEQUENCE__`in e}function oi(e,t,n){return{__SEROVAL_SEQUENCE__:!0,v:e,t,d:n}}function si(e){let t=[],n=-1,r=-1,i=e[En]();for(;;)try{let e=i.next();if(t.push(e.value),e.done){r=t.length-1;break}}catch(e){n=t.length,t.push(e)}return oi(t,n,r)}var ci=ni(En);function li(e){return ci(e)}var ui={},di={},fi={0:{},1:{},2:{},3:{},4:{},5:{}};function pi(e){return`__SEROVAL_STREAM__`in e}function mi(){return ti()}function hi(e){let t=mi(),n=e[Cn]();async function r(){try{let e=await n.next();e.done?t.return(e.value):(t.next(e.value),await r())}catch(e){t.throw(e)}}return r().catch(()=>{}),t}var gi=ri(Cn,ei);function _i(e){return gi(e)}async function vi(e){try{return[1,await e]}catch(e){return[0,e]}}function yi(e,t){return{plugins:t.plugins,mode:e,marked:new Set,features:127^(t.disabledFeatures||0),refs:t.refs||new Map,depthLimit:t.depthLimit||1e3}}function bi(e,t){e.marked.add(t)}function xi(e,t){let n=e.refs.size;return e.refs.set(t,n),n}function Si(e,t){let n=e.refs.get(t);return n==null?{type:0,value:xi(e,t)}:(bi(e,n),{type:1,value:mr(n)})}function Ci(e,t){let n=Si(e,t);return n.type===1?n:rr(t)?{type:2,value:yr(n.value,t)}:n}function wi(e,t){let n=Ci(e,t);if(n.type!==0)return n.value;if(t in In)return vr(n.value,t);throw new Wr(t)}function Ti(e,t){let n=Si(e,fi[t]);return n.type===1?n.value:j(26,n.value,t,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}function Ei(e){let t=Si(e,ui);return t.type===1?t.value:j(27,t.value,void 0,void 0,void 0,void 0,void 0,void 0,wi(e,En),void 0,void 0,void 0)}function Di(e){let t=Si(e,di);return t.type===1?t.value:j(29,t.value,void 0,void 0,void 0,void 0,void 0,[Ti(e,1),wi(e,Cn)],void 0,void 0,void 0,void 0)}function Oi(e,t,n,r){return j(n?11:10,e,void 0,void 0,void 0,r,void 0,void 0,void 0,void 0,ur(t),void 0)}function ki(e,t,n,r){return j(8,t,void 0,void 0,void 0,void 0,{k:n,v:r},void 0,Ti(e,0),void 0,void 0,void 0)}
12function Ai(e,t,n){let r=new Uint8Array(n),i=``;for(let e=0,t=r.length;e<t;e++)i+=String.fromCharCode(r[e]);return j(19,t,Zn(btoa(i)),void 0,void 0,void 0,void 0,void 0,Ti(e,5),void 0,void 0,void 0)}function ji(e,t){return{base:yi(e,t),child:void 0}}var Mi=class{constructor(e,t){this._p=e,this.depth=t}parse(e){return Zi(this._p,this.depth,e)}};async function Ni(e,t,n){let r=[];for(let i=0,a=n.length;i<a;i++)i in n?r[i]=await Zi(e,t,n[i]):r[i]=0;return r}async function Pi(e,t,n,r){return xr(n,r,await Ni(e,t,r))}async function Fi(e,t,n){let r=Object.entries(n),i=[],a=[];for(let n=0,o=r.length;n<o;n++)i.push(Zn(r[n][0])),a.push(await Zi(e,t,r[n][1]));return En in n&&(i.push(wi(e.base,En)),a.push(kr(Ei(e.base),await Zi(e,t,si(n))))),Cn in n&&(i.push(wi(e.base,Cn)),a.push(Ar(Di(e.base),await Zi(e,t,hi(n))))),Pn in n&&(i.push(wi(e.base,Pn)),a.push(fr(n[Pn]))),Tn in n&&(i.push(wi(e.base,Tn)),a.push(n[Tn]?Hn:Un)),{k:i,v:a}}async function Ii(e,t,n,r,i){return Oi(n,r,i,await Fi(e,t,r))}async function Li(e,t,n,r){return Sr(n,await Zi(e,t,r.valueOf()))}async function Ri(e,t,n,r){return Cr(n,r,await Zi(e,t,r.buffer))}async function zi(e,t,n,r){return wr(n,r,await Zi(e,t,r.buffer))}async function Bi(e,t,n,r){return Tr(n,r,await Zi(e,t,r.buffer))}async function Vi(e,t,n,r){let i=lr(r,e.base.features);return Er(n,r,i?await Fi(e,t,i):void 0)}async function M(e,t,n,r){let i=lr(r,e.base.features);return Dr(n,r,i?await Fi(e,t,i):void 0)}async function Hi(e,t,n,r){let i=[],a=[];for(let[n,o]of r.entries())i.push(await Zi(e,t,n)),a.push(await Zi(e,t,o));return ki(e.base,n,i,a)}async function Ui(e,t,n,r){let i=[];for(let n of r.keys())i.push(await Zi(e,t,n));return Or(n,i)}async function Wi(e,t,n,r){let i=e.base.plugins;if(i)for(let a=0,o=i.length;a<o;a++){let o=i[a];if(o.parse.async&&o.test(r))return br(n,o.tag,await o.parse.async(r,new Mi(e,t),{id:n}))}}async function Gi(e,t,n,r){let[i,a]=await vi(r);return j(12,n,i,void 0,void 0,void 0,void 0,void 0,await Zi(e,t,a),void 0,void 0,void 0)}function Ki(e,t,n,r,i){let a=[],o=n.on({next:n=>{bi(this.base,t),Zi(this,e,n).then(e=>{a.push(Mr(t,e))},e=>{i(e),o()})},throw:n=>{bi(this.base,t),Zi(this,e,n).then(e=>{a.push(Nr(t,e)),r(a),o()},e=>{i(e),o()})},return:n=>{bi(this.base,t),Zi(this,e,n).then(e=>{a.push(Pr(t,e)),r(a),o()},e=>{i(e),o()})}})}async function qi(e,t,n,r){return jr(n,Ti(e.base,4),await new Promise(Ki.bind(e,t,n,r)))}async function Ji(e,t,n,r){let i=[];for(let n=0,a=r.v.length;n<a;n++)i[n]=await Zi(e,t,r.v[n]);return Fr(n,i,r.t,r.d)}async function Yi(e,t,n,r){if(Array.isArray(r))return Pi(e,t,n,r);if(pi(r))return qi(e,t,n,r);if(ai(r))return Ji(e,t,n,r);let i=r.constructor;if(i!==void 0&&typeof i!=`function`){let e=Object.getPrototypeOf(r);i=e===null?void 0:e.constructor}if(i===$r)return Zi(e,t,r.replacement);let a=await Wi(e,t,n,r);if(a)return a;switch(i){case Object:return Ii(e,t,n,r,!1);case void 0:return Ii(e,t,n,r,!0);case Date:return hr(n,r);case Error:case EvalError:case RangeError:case ReferenceError:case SyntaxError:case TypeError:case URIError:return Vi(e,t,n,r);case Number:case Boolean:case String:case BigInt:return Li(e,t,n,r);case ArrayBuffer:return Ai(e.base,n,r);case Int8Array:case Int16Array:case Int32Array:case Uint8Array:case Uint16Array:case Uint32Array:case Uint8ClampedArray:case Float32Array:case Float64Array:return Ri(e,t,n,r);case DataView:return Bi(e,t,n,r);case Map:return Hi(e,t,n,r);case Set:return Ui(e,t,n,r)}if(i===Promise||r instanceof Promise)return Gi(e,t,n,r);let o=e.base.features;if(o&32&&i===RegExp)return _r(n,r);if(o&16)switch(i){case BigInt64Array:case BigUint64Array:return zi(e,t,n,r);default:break}if(o&1&&typeof AggregateError<`u`&&(i===AggregateError||r instanceof AggregateError))return M(e,t,n,r);if(o&64&&typeof Temporal<`u`)switch(i){case Temporal.Instant:return gr(n,0,r);case Temporal.Duration:return gr(n,1,r);case Temporal.PlainDate:return gr(n,2,r);case Temporal.PlainDateTime:return gr(n,3,r);case Temporal.PlainMonthDay:return gr(n,4,r);case Temporal.PlainTime:return gr(n,5,r);case Temporal.PlainYearMonth:return gr(n,6,r);case Temporal.ZonedDateTime:return gr(n,7,r);default:break}if(r instanceof Error)return Vi(e,t,n,r);if(En in r||Cn in r)return Ii(e,t,n,r,!!i);throw new Wr(r)}async function Xi(e,t,n){let r=Ci(e.base,n);if(r.type!==0)return r.value;let i=await Wi(e,t,r.value,n);if(i)return i;throw new Wr(n)}async function Zi(e,t,n){if(t>=e.base.depthLimit)throw new Qr(e.base.depthLimit);switch(typeof n){case`boolean`:return n?Hn:Un;case`undefined`:return Wn;case`string`:return fr(n);case`number`:return dr(n);case`bigint`:return pr(n);case`object`:if(n){let r=Ci(e.base,n);return r.type===0?await Yi(e,t+1,r.value,n):r.value}return Gn;case`symbol`:return wi(e.base,n);case`function`:return Xi(e,t,n);default:throw new Wr(n)}}async function Qi(e,t){try{return await Zi(e,0,t)}catch(e){throw e instanceof Vr?e:new Vr(e)}}function $i(e){return e}function ea(e,t){for(let n=0,r=t.length;n<r;n++){let r=t[n];e.has(r)||(e.add(r),r.extends&&ea(e,r.extends))}}function ta(e){if(e){let t=new Set;return ea(t,e),[...t]}}function na(e){switch(e){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 Xr(e)}}function ra(e){switch(e){case`constructor`:case`__proto__`:case`prototype`:case`__defineGetter__`:case`__defineSetter__`:case`__lookupGetter__`:case`__lookupSetter__`:return!1;default:return!0}}function ia(e){switch(e){case Cn:case Tn:case Pn:case En:return!0;default:return!1}}var aa=1e6,oa=1e4,sa=2e4;function ca(e,t){switch(t){case 3:return Object.freeze(e);case 1:return Object.preventExtensions(e);case 2:return Object.seal(e);default:return e}}var la=1e3;function ua(e,t){let n=t.refs||new Map;return`types`in n||Object.assign(n,{types:new Map}),{mode:e,plugins:t.plugins,refs:n,features:t.features??127^(t.disabledFeatures||0),depthLimit:t.depthLimit||la}}
12function da(e){return{mode:2,base:ua(2,e),child:void 0}}var fa=class{constructor(e,t){this._p=e,this.depth=t}deserialize(e){return N(this._p,this.depth,e)}};function pa(e,t){if(t<0||!Number.isFinite(t)||!Number.isInteger(t))throw new Zr({t:4,i:t});if(e.refs.has(t))throw Error(`Conflicted ref id: `+t)}function ma(e,t,n){return pa(e.base,t),e.state.marked.has(t)&&e.base.refs.set(t,n),n}function ha(e,t,n){return pa(e.base,t),e.base.refs.set(t,n),n}function ga(e,t,n){return e.mode===1?ma(e,t,n):ha(e,t,n)}function _a(e,t,n){if(Object.hasOwn(t,n))return t[n];throw new Zr(e)}function va(e,t){return ga(e,t.i,or($n(t.s)))}function ya(e,t,n){let r=n.a,i=r.length,a=ga(e,n.i,Array(i));for(let n=0,o;n<i;n++)o=r[n],o&&(a[n]=N(e,t,o));return ca(a,n.o),a}function ba(e,t,n){ra(t)?e[t]=n:Object.defineProperty(e,t,{value:n,configurable:!0,enumerable:!0,writable:!0})}function xa(e,t,n,r,i){if(typeof r==`string`)ba(n,$n(r),N(e,t,i));else{let a=N(e,t,r);switch(typeof a){case`string`:ba(n,a,N(e,t,i));break;case`symbol`:ia(a)&&(n[a]=N(e,t,i));break;default:throw new Zr(r)}}}function Sa(e,t,n){e.base.refs.types.set(t,n)}function Ca(e,t,n,r){if(e.base.refs.types.get(n)!==r)throw new Zr(t)}function wa(e,t,n,r){let i=n.k;if(i.length>0)for(let a=0,o=n.v,s=i.length;a<s;a++)xa(e,t,r,i[a],o[a]);return r}function Ta(e,t,n){let r=ga(e,n.i,n.t===10?{}:Object.create(null));return wa(e,t,n.p,r),ca(r,n.o),r}function Ea(e,t){return ga(e,t.i,new Date(t.s))}function Da(e,t){if(!(e.base.features&64))throw new Gr(t);let n;switch(t.c){case 0:n=Temporal.Instant.from(t.s);break;case 1:n=Temporal.Duration.from(t.s);break;case 2:n=Temporal.PlainDate.from(t.s);break;case 3:n=Temporal.PlainDateTime.from(t.s);break;case 4:n=Temporal.PlainMonthDay.from(t.s);break;case 5:n=Temporal.PlainTime.from(t.s);break;case 6:n=Temporal.PlainYearMonth.from(t.s);break;case 7:n=Temporal.ZonedDateTime.from(t.s);break;default:throw new Zr(t)}return ga(e,t.i,n)}function Oa(e,t){if(e.base.features&32){let n=$n(t.c);if(n.length>sa)throw new Zr(t);return ga(e,t.i,new RegExp(n,t.m))}throw new Gr(t)}function ka(e,t,n){let r=ga(e,n.i,new Set);for(let i=0,a=n.a,o=a.length;i<o;i++)r.add(N(e,t,a[i]));return r}function Aa(e,t,n){let r=ga(e,n.i,new Map);for(let i=0,a=n.e.k,o=n.e.v,s=a.length;i<s;i++)r.set(N(e,t,a[i]),N(e,t,o[i]));return r}function ja(e,t){if(t.s.length>aa)throw new Zr(t);return ga(e,t.i,ii($n(t.s)))}function Ma(e,t,n){let r=na(n.c),i=N(e,t,n.f),a=n.b??0;if(a<0||a>i.byteLength)throw new Zr(n);return ga(e,n.i,new r(i,a,n.l))}function Na(e,t,n){let r=N(e,t,n.f),i=n.b??0;if(i<0||i>r.byteLength)throw new Zr(n);return ga(e,n.i,new DataView(r,i,n.l))}function Pa(e,t,n,r){if(n.p){let i=wa(e,t,n.p,{});Object.defineProperties(r,Object.getOwnPropertyDescriptors(i))}return r}function Fa(e,t,n){return Pa(e,t,n,ga(e,n.i,AggregateError([],$n(n.m))))}function Ia(e,t,n){let r=_a(n,Bn,n.s);return Pa(e,t,n,ga(e,n.i,new r($n(n.m))))}function La(e,t,n){let r=ei(),i=ga(e,n.i,r.p),a=N(e,t,n.f);return n.s?r.s(a):r.f(a),i}function Ra(e,t,n){return ga(e,n.i,Object(N(e,t,n.f)))}function za(e,t,n){let r=e.base.plugins;if(r){let i=$n(n.c);for(let a=0,o=r.length;a<o;a++){let o=r[a];if(o.tag===i)return ga(e,n.i,o.deserialize(n.s,new fa(e,t),{id:n.i}))}}throw new Kr(n.c)}function Ba(e,t){let n=ga(e,t.i,ga(e,t.s,ei()).p);return Sa(e,t.s,22),n}function Va(e,t,n){let r=e.base.refs.get(n.i);if(r){Ca(e,n,n.i,22),r.s(N(e,t,n.a[1]));return}throw new qr(`Promise`)}function Ha(e,t,n){let r=e.base.refs.get(n.i);if(r){Ca(e,n,n.i,22),r.f(N(e,t,n.a[1]));return}throw new qr(`Promise`)}function Ua(e,t,n){return N(e,t,n.a[0]),li(N(e,t,n.a[1]))}function Wa(e,t,n){return N(e,t,n.a[0]),_i(N(e,t,n.a[1]))}function Ga(e,t,n){let r=ga(e,n.i,mi());Sa(e,n.i,31);let i=n.a,a=i.length;if(a)for(let n=0;n<a;n++)N(e,t,i[n]);return r}function Ka(e,t,n){let r=e.base.refs.get(n.i);if(r){Ca(e,n,n.i,31),r.next(N(e,t,n.f));return}throw new qr(`Stream`)}function qa(e,t,n){let r=e.base.refs.get(n.i);if(r){Ca(e,n,n.i,31),r.throw(N(e,t,n.f));return}throw new qr(`Stream`)}function Ja(e,t,n){let r=e.base.refs.get(n.i);if(r){Ca(e,n,n.i,31),r.return(N(e,t,n.f));return}throw new qr(`Stream`)}function Ya(e,t,n){N(e,t,n.f)}function Xa(e,t,n){N(e,t,n.a[1])}
12function Za(e,t,n){let r=ga(e,n.i,oi([],n.s,n.l));for(let i=0,a=n.a.length;i<a;i++)r.v[i]=N(e,t,n.a[i]);return r}function N(e,t,n){if(t>e.base.depthLimit)throw new Qr(e.base.depthLimit);switch(t+=1,n.t){case 2:return _a(n,Rn,n.s);case 0:return Number(n.s);case 1:return $n(String(n.s));case 3:if(String(n.s).length>oa)throw new Zr(n);return BigInt(n.s);case 4:return e.base.refs.get(n.i);case 18:return va(e,n);case 9:return ya(e,t,n);case 10:case 11:return Ta(e,t,n);case 5:return Ea(e,n);case 6:return Oa(e,n);case 7:return ka(e,t,n);case 8:return Aa(e,t,n);case 19:return ja(e,n);case 16:case 15:return Ma(e,t,n);case 20:return Na(e,t,n);case 14:return Fa(e,t,n);case 13:return Ia(e,t,n);case 12:return La(e,t,n);case 17:return _a(n,Ln,n.s);case 21:return Ra(e,t,n);case 25:return za(e,t,n);case 22:return Ba(e,n);case 23:return Va(e,t,n);case 24:return Ha(e,t,n);case 28:return Ua(e,t,n);case 30:return Wa(e,t,n);case 31:return Ga(e,t,n);case 32:return Ka(e,t,n);case 33:return qa(e,t,n);case 34:return Ja(e,t,n);case 27:return Ya(e,t,n);case 29:return Xa(e,t,n);case 35:return Za(e,t,n);case 36:return Da(e,n);default:throw new Gr(n)}}function Qa(e,t){try{return N(e,0,t)}catch(e){throw new Hr(e)}}function $a(e,t){return Qa(da({plugins:ta(t.plugins),refs:t.refs,features:t.features,disabledFeatures:t.disabledFeatures,depthLimit:t.depthLimit}),e)}async function eo(e,t={}){let n=ji(1,{plugins:ta(t.plugins),disabledFeatures:t.disabledFeatures});return{t:await Qi(n,e),f:n.base.features,m:Array.from(n.base.marked)}}function to(e){return e}function no(e){return $i({tag:`$TSR/t/`+e.key,test:e.test,parse:{sync(t,n,r){return{v:n.parse(e.toSerializable(t))}},async async(t,n,r){return{v:await n.parse(e.toSerializable(t))}},stream(t,n,r){return{v:n.parse(e.toSerializable(t))}}},serialize:void 0,deserialize(t,n,r){return e.fromSerializable(n.deserialize(t.v))}})}var ro=class{constructor(e,t){this.stream=e,this.hint=t?.hint??`binary`}},io=globalThis.Buffer,ao=!!io&&typeof io.from==`function`;function oo(e){if(e.length===0)return``;if(ao)return io.from(e).toString(`base64`);let t=32768,n=[];for(let r=0;r<e.length;r+=t){let i=e.subarray(r,r+t);n.push(String.fromCharCode.apply(null,i))}return btoa(n.join(``))}function so(e){if(e.length===0)return new Uint8Array;
12if(ao){let t=io.from(e,`base64`);return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}var co=Object.create(null),lo=Object.create(null),uo=e=>new ReadableStream({start(t){e.on({next(e){try{t.enqueue(so(e))}catch{}},throw(e){t.error(e)},return(){try{t.close()}catch{}}})}}),fo=new TextEncoder,po=e=>new ReadableStream({start(t){e.on({next(e){try{typeof e==`string`?t.enqueue(fo.encode(e)):t.enqueue(so(e.$b64))}catch{}},throw(e){t.error(e)},return(){try{t.close()}catch{}}})}}),mo=`(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(_){}}})}}))`,ho=`(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 go(e){let t=mi(),n=e.getReader();return(async()=>{try{for(;;){let{done:e,value:r}=await n.read();if(e){t.return(void 0);break}t.next(oo(r))}}catch(e){t.throw(e)}finally{n.releaseLock()}})(),t}function _o(e){let t=mi(),n=e.getReader(),r=new TextDecoder(`utf-8`,{fatal:!0});return(async()=>{try{for(;;){let{done:e,value:i}=await n.read();if(e){try{let e=r.decode();e.length>0&&t.next(e)}catch{}t.return(void 0);break}try{let e=r.decode(i,{stream:!0});e.length>0&&t.next(e)}catch{t.next({$b64:oo(i)})}}}catch(e){t.throw(e)}finally{n.releaseLock()}})(),t}var vo=$i({tag:`tss/RawStream`,extends:[$i({tag:`tss/RawStreamFactory`,test(e){return e===co},parse:{sync(e,t,n){return{}},async async(e,t,n){return{}},stream(e,t,n){return{}}},serialize(e,t,n){return mo},deserialize(e,t,n){return co}}),$i({tag:`tss/RawStreamFactoryText`,test(e){return e===lo},parse:{sync(e,t,n){return{}},async async(e,t,n){return{}},stream(e,t,n){return{}}},serialize(e,t,n){return ho},deserialize(e,t,n){return lo}})],test(e){return e instanceof ro},parse:{sync(e,t,n){let r=e.hint===`text`?lo:co;return{hint:t.parse(e.hint),factory:t.parse(r),stream:t.parse(mi())}},async async(e,t,n){let r=e.hint===`text`?lo:co,i=e.hint===`text`?_o(e.stream):go(e.stream);return{hint:await t.parse(e.hint),factory:await t.parse(r),stream:await t.parse(i)}},stream(e,t,n){let r=e.hint===`text`?lo:co,i=e.hint===`text`?_o(e.stream):go(e.stream);return{hint:t.parse(e.hint),factory:t.parse(r),stream:t.parse(i)}}},serialize(e,t,n){return`(`+t.serialize(e.factory)+`)(`+t.serialize(e.stream)+`)`},deserialize(e,t,n){let r=t.deserialize(e.stream);return t.deserialize(e.hint)===`text`?po(r):uo(r)}});function yo(e){return $i({tag:`tss/RawStream`,test:()=>!1,parse:{},serialize(){throw Error(`RawStreamDeserializePlugin.serialize should not be called. Client only deserializes.`)},deserialize(t,n,r){return e(typeof n?.deserialize==`function`?n.deserialize(t.streamId):t.streamId)}})}var P=$i({tag:`$TSR/Error`,test(e){return e instanceof Error},parse:{sync(e,t){return{message:t.parse(e.message)}},async async(e,t){return{message:await t.parse(e.message)}},stream(e,t){return{message:t.parse(e.message)}}},serialize(e,t){return`new Error(`+t.serialize(e.message)+`)`},deserialize(e,t){return Error(t.deserialize(e.message))}}),F={},bo=e=>new ReadableStream({start(t){e.on({next(e){try{t.enqueue(e)}catch{}},throw(e){t.error(e)},return(){try{t.close()}catch{}}})}}),xo=$i({tag:`seroval-plugins/web/ReadableStreamFactory`,test(e){return e===F},parse:{sync(){return F},async async(){return await Promise.resolve(F)},stream(){return F}},serialize(){return bo.toString()},deserialize(){return F}});async function So(e,t){try{let n=await t.read();n.done?(e.return(n.value),t.releaseLock()):(e.next(n.value),await So(e,t))}catch(t){e.throw(t)}}function Co(e){e.cancel().catch(()=>{}),e.releaseLock()}function wo(e){let t=mi(),n=e.getReader(),r=Co.bind(null,n);return So(t,n).catch(r),[t,r]}var To=[P,vo,$i({tag:`seroval/plugins/web/ReadableStream`,extends:[xo],test(e){return typeof ReadableStream>`u`?!1:e instanceof ReadableStream},parse:{sync(e,t){return{factory:t.parse(F),stream:t.parse(mi())}},async async(e,t){return{factory:await t.parse(F),stream:await t.parse(wo(e)[0])}},stream(e,t){let[n,r]=wo(e);return t.addCleanup(r),{factory:t.parse(F),stream:t.parse(n)}}},serialize(e,t){return`(`+t.serialize(e.factory)+`)(`+t.serialize(e.stream)+`)`},deserialize(e,t){return bo(t.deserialize(e.stream))}})];function Eo(){return[...(Xe()?.serializationAdapters)?.map(no)??[],...To]}var Do=new TextDecoder,Oo=new Uint8Array,ko=16777216,Ao=33554432,jo=1024,Mo=1e5;function No(e){let t=new Map,n=new Map,r=new Set,i=!1,a=null,o=0,s,c=new ReadableStream({start(e){s=e},cancel(){i=!0;try{a?.cancel()}catch{}
12t.forEach(e=>{try{e.error(Error(`Framed response cancelled`))}catch{}}),t.clear(),n.clear(),r.clear()}});function l(e){let i=n.get(e);if(i)return i;if(r.has(e))return new ReadableStream({start(e){e.close()}});if(n.size>=jo)throw Error(`Too many raw streams in framed response (max ${jo})`);let a=new ReadableStream({start(n){t.set(e,n)},cancel(){r.add(e),t.delete(e),n.delete(e)}});return n.set(e,a),a}function u(e){return l(e),t.get(e)}return(async()=>{let n=e.getReader();a=n;let c=[],l=0;function d(){if(l<9)return null;let e=c[0];if(e.length>=9)return{type:e[0],streamId:(e[1]<<24|e[2]<<16|e[3]<<8|e[4])>>>0,length:(e[5]<<24|e[6]<<16|e[7]<<8|e[8])>>>0};let t=new Uint8Array(9),n=0,r=9;for(let e=0;e<c.length&&r>0;e++){let i=c[e],a=Math.min(i.length,r);t.set(i.subarray(0,a),n),n+=a,r-=a}return{type:t[0],streamId:(t[1]<<24|t[2]<<16|t[3]<<8|t[4])>>>0,length:(t[5]<<24|t[6]<<16|t[7]<<8|t[8])>>>0}}function f(e){if(e===0)return Oo;let t=c[0];if(t&&t.length>=e){let n=t.subarray(0,e);return t.length===e?c.shift():c[0]=t.subarray(e),l-=e,n}let n=new Uint8Array(e),r=0,i=e;for(;i>0&&c.length>0;){let e=c[0];if(!e)break;let t=Math.min(e.length,i);n.set(e.subarray(0,t),r),r+=t,i-=t,t===e.length?c.shift():c[0]=e.subarray(t)}return l-=e,n}try{for(;;){let{done:e,value:a}=await n.read();if(i||e)break;if(a){if(l+a.length>Ao)throw Error(`Framed response buffer exceeded ${Ao} bytes`);for(c.push(a),l+=a.length;;){let e=d();if(!e)break;let{type:n,streamId:i,length:a}=e;if(n!==Ke.JSON&&n!==Ke.CHUNK&&n!==Ke.END&&n!==Ke.ERROR)throw Error(`Unknown frame type: ${n}`);if(n===Ke.JSON){if(i!==0)throw Error(`Invalid JSON frame streamId (expected 0)`)}else if(i===0)throw Error(`Invalid raw frame streamId (expected non-zero)`);if(a>ko)throw Error(`Frame payload too large: ${a} bytes (max ${ko})`);let c=9+a;if(l<c)break;if(++o>Mo)throw Error(`Too many frames in framed response (max ${Mo})`);f(9);let p=f(a);switch(n){case Ke.JSON:try{s.enqueue(Do.decode(p))}catch{}break;case Ke.CHUNK:{let e=u(i);e&&e.enqueue(p);break}case Ke.END:{let e=u(i);if(r.add(i),e){try{e.close()}catch{}t.delete(i)}break}case Ke.ERROR:{let e=u(i);if(r.add(i),e){let n=Do.decode(p);e.error(Error(n)),t.delete(i)}break}}}}}if(l!==0)throw Error(`Incomplete frame at end of framed response`);try{s.close()}catch{}t.forEach(e=>{try{e.close()}catch{}}),t.clear()}catch(e){try{s.error(e)}catch{}t.forEach(t=>{try{t.error(e)}catch{}}),t.clear()}finally{try{n.releaseLock()}catch{}a=null}})(),{getOrCreateStream:l,jsonChunks:c}}var Po=null;async function Fo(e){e.length>0&&await Promise.allSettled(e)}var Io=Object.prototype.hasOwnProperty;function Lo(e){for(let t in e)if(Io.call(e,t))return!0;return!1}async function Ro(e,t,n){Po||=Eo();let r=t[0],i=r.fetch??n,a=r.data instanceof FormData?`formData`:`payload`,o=r.headers?new Headers(r.headers):new Headers;if(o.set(`x-tsr-serverFn`,`true`),a===`payload`&&o.set(`accept`,`${Ge}, application/x-ndjson, application/json`),r.method===`GET`){if(a===`formData`)throw Error(`FormData is not supported with GET requests`);let t=await zo(r);if(t!==void 0){let n=dt({payload:t});e.includes(`?`)?e+=`&${n}`:e+=`?${n}`}}let s;if(r.method===`POST`){let e=await Vo(r);e?.contentType&&o.set(`content-type`,e.contentType),s=e?.body}return await Ho(async()=>i(e,{method:r.method,headers:o,signal:r.signal,body:s}))}async function zo(e){let t=!1,n={};if(e.data!==void 0&&(t=!0,n.data=e.data),e.context&&Lo(e.context)&&(t=!0,n.context=e.context),t)return Bo(n)}async function Bo(e){return JSON.stringify(await Promise.resolve(eo(e,{plugins:Po})))}async function Vo(e){if(e.data instanceof FormData){let t;return e.context&&Lo(e.context)&&(t=await Bo(e.context)),t!==void 0&&e.data.set(He,t),{body:e.data}}let t=await zo(e);if(t)return{body:t,contentType:`application/json`}}async function Ho(e){let t;try{t=await e()}catch(e){if(e instanceof Response)t=e;else throw console.log(e),e}if(t.headers.get(`x-tss-raw`)===`true`)return t;let n=t.headers.get(`content-type`);if(n||me(),t.headers.get(`x-tss-serialized`)){let e;if(n.includes(`application/x-tss-framed`)){if(Ye(n),!t.body)throw Error(`No response body for framed response`);
12let{getOrCreateStream:r,jsonChunks:i}=No(t.body),a=[yo(r),...Po||[]],o=new Map;e=await Uo({jsonStream:i,onMessage:e=>$a(e,{refs:o,plugins:a}),onError(e,t){console.error(e,t)}})}else if(n.includes(`application/json`)){let n=await t.json(),r=[];try{e=$a(n,{plugins:Po})}finally{}await Fo(r)}if(e||me(),e instanceof Error)throw e;return e}if(n.includes(`application/json`)){let e=await t.json(),n=ge(e);if(n)throw n;if(he(e))throw e;return e}if(!t.ok)throw Error(await t.text());return t}async function Uo({jsonStream:e,onMessage:t,onError:n}){let r=e.getReader(),{value:i,done:a}=await r.read();if(a||!i)throw Error(`Stream ended before first object`);let o=JSON.parse(i),s=!1,c=(async()=>{try{for(;;){let{value:e,done:i}=await r.read();if(i)break;if(e)try{let n=[];try{t(JSON.parse(e))}finally{}await Fo(n)}catch(t){n?.(`Invalid JSON: ${e}`,t)}}}catch(e){s||n?.(`Stream processing error:`,e)}})(),l,u=[];try{l=t(o)}catch(e){throw s=!0,r.cancel().catch(()=>{}),e}return await Fo(u),Promise.resolve(l).catch(()=>{s=!0,r.cancel().catch(()=>{})}),c.finally(()=>{try{r.releaseLock()}catch{}}),l}function Wo(e){let t=`/_serverFn/`+e;return Object.assign((...e)=>{let n=Xe()?.serverFns?.fetch;return Ro(t,e,n??fetch)},{url:t,serverFnMeta:{id:e},[Ue]:!0})}var Go=to({key:`$TSS/serverfn`,test:e=>typeof e!=`function`||!(Ue in e)?!1:!!e[Ue],toSerializable:({serverFnMeta:e})=>({functionId:e.id}),fromSerializable:({functionId:e})=>Wo(e)});function Ko(e){if(Array.isArray(e))return e.flatMap(e=>Ko(e));if(typeof e!=`string`)return[];let t=[],n=0,r,i,a,o,s,c=()=>{for(;n<e.length&&/\s/.test(e.charAt(n));)n+=1;return n<e.length},l=()=>(i=e.charAt(n),i!==`=`&&i!==`;`&&i!==`,`);for(;n<e.length;){for(r=n,s=!1;c();)if(i=e.charAt(n),i===`,`){for(a=n,n+=1,c(),o=n;n<e.length&&l();)n+=1;n<e.length&&e.charAt(n)===`=`?(s=!0,n=o,t.push(e.slice(r,a)),r=n):n=a+1}else n+=1;(!s||n>=e.length)&&t.push(e.slice(r))}return t}function qo(e){return e instanceof Headers?e:Array.isArray(e)||typeof e==`object`?new Headers(e):null}function Jo(...e){return e.reduce((e,t)=>{let n=qo(t);if(!n)return e;for(let[t,r]of n.entries())t===`set-cookie`?Ko(r).forEach(t=>e.append(`set-cookie`,t)):e.set(t,r);return e},new Headers)}function Yo(e){return e.replaceAll(`\0`,`/`).replaceAll(`�`,`/`)}function Xo(e,t){e.id=t.i,e.__beforeLoadContext=t.b,e.loaderData=t.l,e.status=t.s,e.ssr=t.ssr,e.updatedAt=t.u,e.error=t.e,t.g!==void 0&&(e.globalNotFound=t.g)}async function Zo(e){window.$_TSR||me();let t=e.options.serializationAdapters;if(t?.length){let e=new Map;t.forEach(t=>{e.set(t.key,t.fromSerializable)}),window.$_TSR.t=e,window.$_TSR.buffer.forEach(e=>e())}window.$_TSR.initialized=!0,window.$_TSR.router||me();let n=window.$_TSR.router;n.matches.forEach(e=>{e.i=Yo(e.i)}),n.lastMatchId&&=Yo(n.lastMatchId);let{manifest:r,dehydratedData:i,lastMatchId:a}=n;e.ssr={manifest:r};let o=document.querySelector(`meta[property="csp-nonce"]`)?.content;e.options.ssr={nonce:o},await e.options.hydrate?.(i);let c=e.matchRoutes(e.stores.location.get()),l=Promise.all(c.map(t=>e.loadRouteChunk(e.looseRoutesById[t.routeId])));function u(t){let n=e.looseRoutesById[t.routeId].options.pendingMinMs??e.options.defaultPendingMinMs;if(n){let r=s();t._nonReactive.minPendingPromise=r,t._forcePending=!0,setTimeout(()=>{r.resolve(),e.updateMatch(t.id,e=>(e._nonReactive.minPendingPromise=void 0,{...e,_forcePending:void 0}))},n)}}function d(t){let n=e.looseRoutesById[t.routeId];n&&(n.options.ssr=t.ssr)}let f;c.forEach(e=>{let t=n.matches.find(t=>t.i===e.id);if(!t){e._nonReactive.dehydrated=!1,e.ssr=!1,d(e);return}Xo(e,t),d(e),e._nonReactive.dehydrated=e.ssr!==!1,(e.ssr===`data-only`||e.ssr===!1)&&f===void 0&&(f=e.index,u(e))}),e.stores.setMatches(c);let p=e.stores.matches.get(),m=e.stores.location.get();await Promise.all(p.map(async t=>{try{let n=e.looseRoutesById[t.routeId],r=p[t.index-1]?.context??e.options.context;if(n.options.context){let i={deps:t.loaderDeps,params:t.params,context:r??{},location:m,navigate:t=>e.navigate({...t,_fromLocation:m}),buildLocation:e.buildLocation,cause:t.cause,abortController:t.abortController,preload:!1,matches:c,routeId:n.id};
12t.__routeContext=n.options.context(i)??void 0}t.context={...r,...t.__routeContext,...t.__beforeLoadContext};let i={ssr:e.options.ssr,matches:p,match:t,params:t.params,loaderData:t.loaderData},a=await n.options.head?.(i),o=await n.options.scripts?.(i);t.meta=a?.meta,t.links=a?.links,t.headScripts=a?.scripts,t.styles=a?.styles,t.scripts=o}catch(e){if(he(e))t.error={isNotFound:!0},console.error(`NotFound error during hydration for routeId: ${t.routeId}`,e);else throw t.error=e,console.error(`Error during hydration for route ${t.routeId}:`,e),e}}));let h=c[c.length-1].id!==a;if(!c.some(e=>e.ssr===!1)&&!h)return c.forEach(e=>{e._nonReactive.dehydrated=void 0}),e.stores.resolvedLocation.set(e.stores.location.get()),l;let g=Promise.resolve().then(()=>e.load()).catch(e=>{console.error(`Error during router hydration:`,e)});if(h){let t=c[1];t||me(),u(t),t._displayPending=!0,t._nonReactive.displayPendingPromise=g,g.then(()=>{e.batch(()=>{e.stores.status.get()===`pending`&&(e.stores.status.set(`idle`),e.stores.resolvedLocation.set(e.stores.location.get())),e.updateMatch(t.id,e=>({...e,_displayPending:void 0,displayPendingPromise:void 0}))})})}return l}var I=r(a(),1),L=Se();function Qo({promise:e}){if(k)return k(e);let t=gn(e);if(t[hn].status===`pending`)throw t;if(t[hn].status===`error`)throw t[hn].error;return t[hn].data}function $o(e){let t=(0,L.jsx)(es,{...e});return e.fallback?(0,L.jsx)(I.Suspense,{fallback:e.fallback,children:t}):t}function es(e){let t=Qo(e);return e.children(t)}function ts(e){let t=e.errorComponent??rs;return(0,L.jsx)(ns,{getResetKey:e.getResetKey,onCatch:e.onCatch,children:({error:n,reset:r})=>n?I.createElement(t,{error:n,reset:r}):e.children})}var ns=class extends I.Component{constructor(...e){super(...e),this.state={error:null}}static getDerivedStateFromProps(e,t){let n=e.getResetKey();return t.error&&t.resetKey!==n?{resetKey:n,error:null}:{resetKey:n}}static getDerivedStateFromError(e){return{error:e}}reset(){this.setState({error:null})}componentDidCatch(e,t){this.props.onCatch&&this.props.onCatch(e,t)}render(){return this.props.children({error:this.state.error,reset:()=>{this.reset()}})}};function rs({error:e}){let[t,n]=I.useState(!1);return(0,L.jsxs)(`div`,{style:{padding:`.5rem`,maxWidth:`100%`},children:[(0,L.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`.5rem`},children:[(0,L.jsx)(`strong`,{style:{fontSize:`1rem`},children:`Something went wrong!`}),(0,L.jsx)(`button`,{style:{appearance:`none`,fontSize:`.6em`,border:`1px solid currentColor`,padding:`.1rem .2rem`,fontWeight:`bold`,borderRadius:`.25rem`},onClick:()=>n(e=>!e),children:t?`Hide Error`:`Show Error`})]}),(0,L.jsx)(`div`,{style:{height:`.25rem`}}),t?(0,L.jsx)(`div`,{children:(0,L.jsx)(`pre`,{style:{fontSize:`.7em`,border:`1px solid red`,borderRadius:`.25rem`,padding:`.3rem`,color:`red`,overflow:`auto`},children:e.message?(0,L.jsx)(`code`,{children:e.message}):null})}):null]})}var is=(e=>(e[e.None=0]=`None`,e[e.Mutable=1]=`Mutable`,e[e.Watching=2]=`Watching`,e[e.RecursedCheck=4]=`RecursedCheck`,e[e.Recursed=8]=`Recursed`,e[e.Dirty=16]=`Dirty`,e[e.Pending=32]=`Pending`,e))(is||{});function as({update:e,notify:t,unwatched:n}){return{link:r,unlink:i,propagate:a,checkDirty:o,shallowPropagate:s};function r(e,t,n){let r=t.depsTail;if(r!==void 0&&r.dep===e)return;let i=r===void 0?t.deps:r.nextDep;if(i!==void 0&&i.dep===e){i.version=n,t.depsTail=i;return}let a=e.subsTail;if(a!==void 0&&a.version===n&&a.sub===t)return;let o=t.depsTail=e.subsTail={version:n,dep:e,sub:t,prevDep:r,nextDep:i,prevSub:a,nextSub:void 0};i!==void 0&&(i.prevDep=o),r===void 0?t.deps=o:r.nextDep=o,a===void 0?e.subs=o:a.nextSub=o}function i(e,t=e.sub){let r=e.dep,i=e.prevDep,a=e.nextDep,o=e.nextSub,s=e.prevSub;return a===void 0?t.depsTail=i:a.prevDep=i,i===void 0?t.deps=a:i.nextDep=a,o===void 0?r.subsTail=s:o.prevSub=s,s===void 0?(r.subs=o)===void 0&&n(r):s.nextSub=o,a}function a(e){let n=e.nextSub,r;top:do{let i=e.sub,a=i.flags;if(a&60?a&12?a&4?!(a&48)&&c(e,i)?(i.flags=a|40,a&=1):a=0:i.flags=a&-9|32:a=0:i.flags=a|32,a&2&&t(i),a&1){let t=i.subs;if(t!==void 0){let i=(e=t).nextSub;i!==void 0&&(r={value:n,prev:r},n=i);continue}}if((e=n)!==void 0){n=e.nextSub;continue}for(;r!==void 0;)if(e=r.value,r=r.prev,e!==void 0){n=e.nextSub;continue top}break}while(!0)}function o(t,n){let r,i=0,a=!1;top:do{let o=t.dep,c=o.flags;if(n.flags&16)a=!0;else if((c&17)==17){if(e(o)){let e=o.subs;e.nextSub!==void 0&&s(e),a=!0}}else if((c&33)==33){(t.nextSub!==void 0||t.prevSub!==void 0)&&(r={value:t,prev:r}),t=o.deps,n=o,++i;continue}if(!a){let e=t.nextDep;if(e!==void 0){t=e;continue}}for(;i--;){let i=n.subs,o=i.nextSub!==void 0;if(o?(t=r.value,r=r.prev):t=i,a){if(e(n)){o&&s(i),n=t.sub;continue}a=!1}else n.flags&=-33;n=t.sub;let c=t.nextDep;if(c!==void 0){t=c;continue top}}return a}while(!0)}function s(e){do{let n=e.sub,r=n.flags;(r&48)==32&&(n.flags=r|16,(r&6)==2&&t(n))}while((e=e.nextSub)!==void 0)}function c(e,t){let n=t.depsTail;for(;n!==void 0;){if(n===e)return!0;n=n.prevDep}return!1}}function os(e,t,n){let r=typeof e==`object`,i=r?e:void 0;return{next:(r?e.next:e)?.bind(i),error:(r?e.error:t)?.bind(i),complete:(r?e.complete:n)?.bind(i)}}var ss=[],cs=0,{link:ls,unlink:us,propagate:ds,checkDirty:fs,shallowPropagate:ps}=as({update(e){return e._update()},notify(e){ss[hs++]=e,e.flags&=~is.Watching},unwatched(e){e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=is.Mutable|is.Dirty,ys(e))}}),ms=0,hs=0,gs,_s=0;function vs(e){try{++_s,e()}finally{--_s||bs()}}function ys(e){let t=e.depsTail,n=t===void 0?e.deps:t.nextDep;for(;n!==void 0;)n=us(n,e)}function bs(){if(!(_s>0)){for(;ms<hs;){let e=ss[ms];ss[ms++]=void 0,e.notify()}ms=0,hs=0}}function xs(e,t){let n=typeof e==`function`,r=e,i={_snapshot:n?void 0:e,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:n?is.None:is.Mutable,get(){return gs!==void 0&&ls(i,gs,cs),i._snapshot},subscribe(e){let t=os(e),n={current:!1},r=Ss(()=>{i.get(),n.current?t.next?.(i._snapshot):n.current=!0});return{unsubscribe:()=>{r.stop()}}},_update(e){let a=gs,o=t?.compare??Object.is;if(n)gs=i,++cs,i.depsTail=void 0;else if(e===void 0)return!1;
12n&&(i.flags=is.Mutable|is.RecursedCheck);try{let t=i._snapshot,a=typeof e==`function`?e(t):e===void 0&&n?r(t):e;return t===void 0||!o(t,a)?(i._snapshot=a,!0):!1}finally{gs=a,n&&(i.flags&=~is.RecursedCheck),ys(i)}}};return n?(i.flags=is.Mutable|is.Dirty,i.get=function(){let e=i.flags;if(e&is.Dirty||e&is.Pending&&fs(i.deps,i)){if(i._update()){let e=i.subs;e!==void 0&&ps(e)}}else e&is.Pending&&(i.flags=e&~is.Pending);return gs!==void 0&&ls(i,gs,cs),i._snapshot}):i.set=function(e){if(i._update(e)){let e=i.subs;e!==void 0&&(ds(e),ps(e),bs())}},i}function Ss(e){let t=()=>{let t=gs;gs=n,++cs,n.depsTail=void 0,n.flags=is.Watching|is.RecursedCheck;try{return e()}finally{gs=t,n.flags&=~is.RecursedCheck,ys(n)}},n={deps:void 0,depsTail:void 0,subs:void 0,subsTail:void 0,flags:is.Watching|is.RecursedCheck,notify(){let e=this.flags;e&is.Dirty||e&is.Pending&&fs(this.deps,this)?t():this.flags=is.Watching},stop(){this.flags=is.None,this.depsTail=void 0,ys(this)}};return t(),n}function R(e){return new Cs(e,{silent:!0}).createRoute}var Cs=class{constructor(e,t){this.path=e,this.createRoute=e=>{let t=be(e);return t.isRoot=!1,t},this.silent=t?.silent}};function z(e,t){let n,r,i,a,o=()=>(n||=e().then(e=>{n=void 0,r=e[t??`default`]}).catch(e=>{if(i=e,b(i)&&i instanceof Error&&typeof window<`u`&&typeof sessionStorage<`u`){let e=`tanstack_router_reload:${i.message}`;sessionStorage.getItem(e)||(sessionStorage.setItem(e,`1`),a=!0)}}),n),s=function(e){if(a)throw window.location.reload(),new Promise(()=>{});if(i)throw i;if(!r)if(k)k(o());else throw o();return I.createElement(r,e)};return s.preload=o,s}function ws(e){let t=O(),n=`not-found-${ce(t.stores.location,e=>e.pathname)}-${ce(t.stores.status,e=>e)}`;return(0,L.jsx)(ts,{getResetKey:()=>n,onCatch:(t,n)=>{if(he(t))e.onCatch?.(t,n);else throw t},errorComponent:({error:t})=>{if(he(t))return e.fallback?.(t);throw t},children:e.children})}function Ts(){return(0,L.jsx)(`p`,{children:`Not Found`})}function Es(e){return(0,L.jsx)(L.Fragment,{children:e.children})}function Ds(e,t,n){return t.options.notFoundComponent?(0,L.jsx)(t.options.notFoundComponent,{...n}):e.options.defaultNotFoundComponent?(0,L.jsx)(e.options.defaultNotFoundComponent,{...n}):(0,L.jsx)(Ts,{})}var Os=(e,t)=>e.routeId===t.routeId&&e._displayPending===t._displayPending,ks=(e,t)=>e[0]===t[0]&&e[1]===t[1],As=I.memo(function({matchId:e}){let t=O(),n=t.stores.matchStores.get(e);n||me();let r=ce(t.stores.loadedAt,e=>e),i=ce(n,e=>e,Os);return(0,L.jsx)(js,{router:t,matchId:e,resetKey:r,matchState:I.useMemo(()=>{let e=i.routeId,n=t.routesById[e].parentRoute?.id;return{routeId:e,ssr:i.ssr,_displayPending:i._displayPending,parentRouteId:n}},[i._displayPending,i.routeId,i.ssr,t.routesById])})});function js({router:e,matchId:t,resetKey:n,matchState:r}){let i=e.routesById[r.routeId],a=i.options.pendingComponent??e.options.defaultPendingComponent,o=a?(0,L.jsx)(a,{}):null,s=i.options.errorComponent??e.options.defaultErrorComponent,c=i.options.onCatch??e.options.defaultOnCatch,l=i.isRoot?i.options.notFoundComponent??e.options.notFoundRoute?.options.component:i.options.notFoundComponent,u=r.ssr===!1||r.ssr===`data-only`,d=(!i.isRoot||i.options.wrapInSuspense||u)&&(i.options.wrapInSuspense??a??(i.options.errorComponent?.preload||u))?I.Suspense:Es,f=s?ts:Es,p=l?ws:Es;return(0,L.jsxs)(i.isRoot?i.options.shellComponent??Es:Es,{children:[(0,L.jsx)(Ce.Provider,{value:t,children:(0,L.jsx)(d,{fallback:o,children:(0,L.jsx)(f,{getResetKey:()=>n,errorComponent:s||rs,onCatch:(e,t)=>{if(he(e))throw e.routeId??=r.routeId,e;c?.(e,t)},children:(0,L.jsx)(p,{fallback:e=>{if(e.routeId??=r.routeId,!l||e.routeId&&e.routeId!==r.routeId||!e.routeId&&!i.isRoot)throw e;return I.createElement(l,e)},children:u||r._displayPending?(0,L.jsx)(ne,{fallback:o,children:(0,L.jsx)(Ns,{matchId:t})}):(0,L.jsx)(Ns,{matchId:t})})})})}),r.parentRouteId===`__root__`?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Ms,{}),(e.options.scrollRestoration,null)]}):null]})}function Ms(){let e=O(),t=I.useRef();return ae(()=>{let n=e.stores.resolvedLocation.get(),r=t.current;n&&(!r||r.href!==n.href)&&e.emit({type:`onRendered`,...rn(e.stores.location.get(),r??n)}),t.current=n},[ce(e.stores.resolvedLocation,e=>e?.state.__TSR_key),e]),null}
12var Ns=I.memo(function({matchId:e}){let t=O(),n=(e,n)=>t.getMatch(e.id)?._nonReactive[n]??e._nonReactive[n],r=t.stores.matchStores.get(e);r||me();let i=ce(r,e=>e),a=i.routeId,o=t.routesById[a],c=I.useMemo(()=>{let e=(t.routesById[a].options.remountDeps??t.options.defaultRemountDeps)?.({routeId:a,loaderDeps:i.loaderDeps,params:i._strictParams,search:i._strictSearch});return e?JSON.stringify(e):void 0},[a,i.loaderDeps,i._strictParams,i._strictSearch,t.options.defaultRemountDeps,t.routesById]),l=I.useMemo(()=>{let e=o.options.component??t.options.defaultComponent;return e?(0,L.jsx)(e,{},c):(0,L.jsx)(Ps,{})},[c,o.options.component,t.options.defaultComponent]);if(i._displayPending)throw n(i,`displayPendingPromise`);if(i._forcePending)throw n(i,`minPendingPromise`);if(i.status===`pending`){let e=o.options.pendingMinMs??t.options.defaultPendingMinMs;if(e){let n=t.getMatch(i.id);if(n&&!n._nonReactive.minPendingPromise){let t=s();n._nonReactive.minPendingPromise=t,setTimeout(()=>{t.resolve(),n._nonReactive.minPendingPromise=void 0},e)}}throw n(i,`loadPromise`)}if(i.status===`notFound`)return he(i.error)||me(),Ds(t,o,i.error);if(i.status===`redirected`)throw ve(i.error)||me(),n(i,`loadPromise`);if(i.status===`error`)throw i.error;return l}),Ps=I.memo(function(){let e=O(),t=I.useContext(Ce),n,r=!1,i;{let a=t?e.stores.matchStores.get(t):void 0;[n,r]=ce(a,e=>[e?.routeId,e?.globalNotFound??!1],ks),i=ce(e.stores.matchesId,e=>e[e.findIndex(e=>e===t)+1])}let a=n?e.routesById[n]:void 0,o=e.options.defaultPendingComponent?(0,L.jsx)(e.options.defaultPendingComponent,{}):null;if(r)return a||me(),Ds(e,a,void 0);if(!i)return null;let s=(0,L.jsx)(As,{matchId:i});return n===`__root__`?(0,L.jsx)(I.Suspense,{fallback:o,children:s}):s});function Fs(){let e=O(),t=I.useRef({router:e,mounted:!1}),[n,r]=I.useState(!1),i=ce(e.stores.isLoading,e=>e),a=ce(e.stores.hasPending,e=>e),o=le(i),s=i||n||a,c=le(s),l=i||a,u=le(l);return e.startTransition=e=>{r(!0),I.startTransition(()=>{e(),r(!1)})},I.useEffect(()=>{let t=e.history.subscribe(e.load),n=e.buildLocation({to:e.latestLocation.pathname,search:!0,params:!0,hash:!0,state:!0,_includeValidateSearch:!0});return E(e.latestLocation.publicHref)!==E(n.publicHref)&&e.commitLocation({...n,replace:!0}),()=>{t()}},[e,e.history]),ae(()=>{typeof window<`u`&&e.ssr||t.current.router===e&&t.current.mounted||(t.current={router:e,mounted:!0},(async()=>{try{await e.load()}catch(e){console.error(e)}})())},[e]),ae(()=>{o&&!i&&e.emit({type:`onLoad`,...rn(e.stores.location.get(),e.stores.resolvedLocation.get())})},[o,e,i]),ae(()=>{u&&!l&&e.emit({type:`onBeforeRouteMount`,...rn(e.stores.location.get(),e.stores.resolvedLocation.get())})},[l,u,e]),ae(()=>{if(c&&!s){let t=rn(e.stores.location.get(),e.stores.resolvedLocation.get());e.emit({type:`onResolved`,...t}),vs(()=>{e.stores.status.set(`idle`),e.stores.resolvedLocation.set(e.stores.location.get())})}},[s,c,e]),null}function Is(){let e=O(),t=e.routesById.__root__.options.pendingComponent??e.options.defaultPendingComponent,n=t?(0,L.jsx)(t,{}):null,r=(0,L.jsxs)(typeof document<`u`&&e.ssr?Es:I.Suspense,{fallback:n,children:[(0,L.jsx)(Fs,{}),(0,L.jsx)(Ls,{})]});return e.options.InnerWrap?(0,L.jsx)(e.options.InnerWrap,{children:r}):r}function Ls(){let e=O(),t=ce(e.stores.firstId,e=>e),n=ce(e.stores.loadedAt,e=>e),r=t?(0,L.jsx)(As,{matchId:t}):null;return(0,L.jsx)(Ce.Provider,{value:t,children:e.options.disableGlobalCatchBoundary?r:(0,L.jsx)(ts,{getResetKey:()=>n,errorComponent:rs,onCatch:void 0,children:r})})}var Rs=e=>({createMutableStore:xs,createReadonlyStore:xs,batch:vs}),zs=e=>new Bs(e),Bs=class extends an{constructor(e){super(e,Rs)}};function Vs({router:e,children:t,...n}
12){m(n)&&e.update({...e.options,...n,context:{...e.options.context,...n.context}});let r=(0,L.jsx)(se.Provider,{value:e,children:t});return e.options.Wrap?(0,L.jsx)(e.options.Wrap,{children:r}):r}function Hs({router:e,...t}){return(0,L.jsx)(Vs,{router:e,...t,children:(0,L.jsx)(Is,{})})}function Us(e){let t=O();return ce(t.stores.location,we(e,t))}function Ws(e,t){if(t)for(let[n,r]of Object.entries(t))n!==`suppressHydrationWarning`&&r!==void 0&&r!==!1&&e.setAttribute(n,typeof r==`boolean`?``:String(r))}function Gs(e){let{attrs:t,children:n,nonce:r,preventScriptHoist:i}=e;switch(e.tag){case`title`:return(0,L.jsx)(`title`,{...t,suppressHydrationWarning:!0,children:n});case`meta`:return(0,L.jsx)(`meta`,{...t,suppressHydrationWarning:!0});case`link`:return(0,L.jsx)(`link`,{...t,precedence:t?.precedence??(t?.rel===`stylesheet`?`default`:void 0),nonce:r,suppressHydrationWarning:!0});case`style`:return e.inlineCss,(0,L.jsx)(`style`,{...t,dangerouslySetInnerHTML:{__html:n},nonce:r});case`script`:return(0,L.jsx)(Ks,{attrs:t,preventScriptHoist:i,children:n});default:return null}}function Ks({attrs:e,children:t,preventScriptHoist:n}){O();let r=T(),i=typeof e?.type==`string`&&e.type!==``&&e.type!==`text/javascript`&&e.type!==`module`;if(I.useEffect(()=>{if(!i){if(e?.src){let t=(()=>{try{let t=document.baseURI||window.location.href;return new URL(e.src,t).href}catch{return e.src}})();for(let e of document.querySelectorAll(`script[src]`))if(e.src===t)return;let n=document.createElement(`script`);return Ws(n,e),document.head.appendChild(n),()=>n.remove()}if(typeof t==`string`){let n=typeof e?.type==`string`?e.type:`text/javascript`,r=typeof e?.nonce==`string`?e.nonce:void 0;for(let e of document.querySelectorAll(`script:not([src])`)){if(!(e instanceof HTMLScriptElement))continue;let i=e.getAttribute(`type`)??`text/javascript`,a=e.getAttribute(`nonce`)??void 0;if(e.textContent===t&&i===n&&a===r)return}let i=document.createElement(`script`);return i.textContent=t,Ws(i,e),document.head.appendChild(i),()=>i.remove()}}},[e,t,i]),i&&typeof t==`string`)return(0,L.jsx)(`script`,{...e,suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:t}});if(!r){if(e?.src)return(0,L.jsx)(`script`,{...e,suppressHydrationWarning:!0});if(typeof t==`string`)return(0,L.jsx)(`script`,{...e,dangerouslySetInnerHTML:{__html:t},suppressHydrationWarning:!0})}return null}var qs=e=>{let t=O(),n=t.options.ssr?.nonce,r=ce(t.stores.matches,e=>e.map(e=>e.meta).filter(e=>e!==void 0),g),i=I.useMemo(()=>{let e=[],t={},i;for(let a=r.length-1;a>=0;a--){let o=r[a];for(let r=o.length-1;r>=0;r--){let a=o[r];if(a)if(a.title)i||={tag:`title`,children:a.title};else if(`script:ld+json`in a)try{let t=JSON.stringify(a[`script:ld+json`]);e.push({tag:`script`,attrs:{type:`application/ld+json`},children:y(t)})}catch{}else{let r=a.name??a.property;if(r){if(t[r])continue;t[r]=!0}e.push({tag:`meta`,attrs:{...a,nonce:n}})}}}return i&&e.push(i),n&&e.push({tag:`meta`,attrs:{property:`csp-nonce`,content:n}}),e.reverse(),e},[r,n]),a=ce(t.stores.matches,e=>e.flatMap(e=>e.links??[]).filter(e=>e!==void 0).map(e=>({tag:`link`,attrs:{...e,nonce:n}})),g),o=ce(t.stores.matches,r=>{let i=t.ssr?.manifest,a=[];return i?(r.forEach(t=>{i.routes[t.routeId]?.css?.forEach(t=>{let r=Sn(t);a.push({tag:`link`,attrs:{rel:`stylesheet`,...r,crossOrigin:_n(e,`stylesheet`)??r.crossOrigin,suppressHydrationWarning:!0,nonce:n}})})}),i.inlineStyle&&a.push({tag:`style`,attrs:{...i.inlineStyle.attrs,nonce:n},children:i.inlineStyle.children,inlineCss:!0}),a):a},g),s=ce(t.stores.matches,r=>{let i=[],a=t.ssr?.manifest;return a&&r.forEach(t=>{a.routes[t.routeId]?.preloads?.forEach(t=>{i.push({tag:`link`,attrs:{...yn(a,t,e),nonce:n}})})}),i},g),c=ce(t.stores.matches,e=>e.flatMap(e=>e.styles??[]).filter(e=>e!==void 0).map(({children:e,...t})=>({tag:`style`,attrs:{...t,nonce:n},children:e})),g),l=ce(t.stores.matches,e=>e.flatMap(e=>e.headScripts??[]).filter(e=>e!==void 0).map(({children:e,...t})=>({tag:`script`,attrs:{...t,nonce:n},children:e})),g),u=[];return xn(u,i),u.push(...s),xn(u,a),u.push(...o),xn(u,c),xn(u,l),u};function Js(e){let t=qs(e.assetCrossOrigin),n=O().options.ssr?.nonce;return(0,L.jsx)(L.Fragment,{children:t.map(e=>(0,I.createElement)(Gs,{...e,key:`tsr-meta-${JSON.stringify(e)}`,nonce:n}))})}var Ys=()=>{let e=O(),t=e.options.ssr?.nonce,n=n=>{let r=[],i=e.ssr?.manifest;if(!i)return[];for(let e of n){let n=i.routes[e.routeId]?.scripts;if(n)for(let e of n)r.push({tag:`script`,attrs:{...e.attrs,nonce:t},children:e.children,...typeof e.attrs?.src==`string`?{preventScriptHoist:!0}:{}})}return r},r=e=>e.map(e=>
12e.scripts).flat(1).filter(Boolean).map(({children:e,...n})=>({tag:`script`,attrs:{...n,suppressHydrationWarning:!0,nonce:t},children:e})),i=ce(e.stores.matches,n,g);return Xs(e,ce(e.stores.matches,r,g),i)};function Xs(e,t,n){let r=[...t,...n];return(0,L.jsx)(L.Fragment,{children:r.map((e,t)=>(0,I.createElement)(Gs,{...e,key:`tsr-scripts-${e.tag}-${t}`}))})}function Zs(e){return e!==`__proto__`&&e!==`constructor`&&e!==`prototype`}function Qs(e,t){let n=Object.create(null);if(e)for(let t of Object.keys(e))Zs(t)&&(n[t]=e[t]);if(t&&typeof t==`object`)for(let e of Object.keys(t))Zs(e)&&(n[e]=t[e]);return n}function $s(e){if(!e)return Object.create(null);let t=Object.create(null);for(let n of Object.keys(e))Zs(n)&&(t[n]=e[n]);return t}var ec=()=>{throw Error(`createServerOnlyFn() functions can only be called on the server!`)},tc=(e,t)=>{let n=t||e||{};n.method===void 0&&(n.method=`GET`);let r=e=>tc(void 0,{...n,validator:e,inputValidator:e});return Object.assign(e=>tc(void 0,{...n,...e}),{options:n,middleware:e=>{let t=[...n.middleware||[]];e.map(e=>{We in e?e.options.middleware&&t.push(...e.options.middleware):t.push(e)});let r=tc(void 0,{...n,middleware:t});return r[We]=!0,r},validator:r,inputValidator:r,handler:(...e)=>{let[t,r]=e,i={...n,extractedFn:t,serverFn:r},a=[...i.middleware||[],ac(i)];return t.method=n.method,Object.assign(async e=>{let n=await nc(a,`client`,{...t,...i,data:e?.data,headers:e?.headers,signal:e?.signal,fetch:e?.fetch,context:$s()}),r=ge(n.error);if(r)throw r;if(n.error)throw n.error;return n.result},{...t,method:n.method,__executeServer:async e=>{let n=ec(),r=n.contextAfterGlobalMiddlewares;return await nc(a,`server`,{...t,...e,serverFnMeta:t.serverFnMeta,context:Qs(e.context,r),request:n.request}).then(e=>({result:e.result,error:e.error,context:e.sendContext}))}})}})};async function nc(e,t,n){let r=rc([...Xe()?.functionMiddleware||[],...e]);if(t===`server`){let e=ec({throwIfNotFound:!1});e?.executedRequestMiddlewares&&(r=r.filter(t=>!e.executedRequestMiddlewares.has(t)))}let i=async e=>{let n=r.shift();if(!n)return e;try{let r=`validator`in n.options?n.options.validator:void 0;!r&&`inputValidator`in n.options&&(r=n.options.inputValidator),r&&t===`server`&&(e.data=await ic(r,e.data));let a;if(t===`client`?`client`in n.options&&(a=n.options.client):`server`in n.options&&(a=n.options.server),a){let t=async(t={})=>{let n=await i({...e,...t,context:Qs(e.context,t.context),sendContext:Qs(e.sendContext,t.sendContext),headers:Jo(e.headers,t.headers),_callSiteFetch:e._callSiteFetch,fetch:e._callSiteFetch??t.fetch??e.fetch,result:t.result===void 0?t instanceof Response?t:e.result:t.result,error:t.error??e.error});if(n.error)throw n.error;return n},n=await a({...e,next:t});if(ve(n))return{...e,error:n};if(n instanceof Response)return{...e,result:n};if(!n)throw Error(`User middleware returned undefined. You must call next() or return a result in your middlewares.`);return n}return i(e)}catch(t){return{...e,error:t}}};return i({...n,headers:n.headers||{},sendContext:n.sendContext||{},context:n.context||$s(),_callSiteFetch:n.fetch})}function rc(e,t=100){let n=new Set,r=[],i=(e,a)=>{if(a>t)throw Error(`Middleware nesting depth exceeded maximum of ${t}. Check for circular references.`);e.forEach(e=>{e.options.middleware&&i(e.options.middleware,a+1),n.has(e)||(n.add(e),r.push(e))})};return i(e,0),r}async function ic(e,t){if(e==null)return{};if(`~standard`in e){let n=await e[`~standard`].validate(t);if(n.issues)throw Error(JSON.stringify(n.issues,void 0,2));return n.value}if(`parse`in e)return e.parse(t);if(typeof e==`function`)return e(t);throw Error(`Invalid validator type!`)}function ac(e){return{"~types":void 0,options:{inputValidator:e.validator??e.inputValidator,client:async({next:t,sendContext:n,fetch:r,...i})=>{let a={...i,context:n,fetch:r};return t(await e.extractedFn?.(a))},server:async({next:t,...n})=>{let r=await e.serverFn?.(n);return t({...n,result:r})}}}}var oc=(e,t)=>{let n={type:`request`,...t||e},r=e=>oc({},Object.assign(n,{validator:e,inputValidator:e}));return{options:n,middleware:e=>oc({},Object.assign(n,{middleware:e})),validator:r,inputValidator:r,client:e=>oc({},Object.assign(n,{client:e})),server:e=>oc({},Object.assign(n,{server:e}))}};function sc(e,t){for(let n=0,r=t.length;n<r;n++){let r=t[n];e.has(r)||(e.add(r),r.extends&&sc(e,r.extends))}}var cc=e=>({getOptions:async()=>{let t=await e();if(t.serializationAdapters){let e=new Set;sc(e,t.serializationAdapters),t.serializationAdapters=Array.from(e)}return t},createMiddleware:oc}),lc=e=>e?(...t)=>e(...t):(...e)=>
vendor: 3,004 bytes, line 12
12fetch(...e),uc=class extends Error{constructor(e,t=`FunctionsError`,n){super(e),this.name=t,this.context=n}toJSON(){return{name:this.name,message:this.message,context:this.context}}},dc=class extends uc{constructor(e){super(`Failed to send a request to the Edge Function`,`FunctionsFetchError`,e)}},fc=class extends uc{constructor(e){super(`Relay Error invoking the Edge Function`,`FunctionsRelayError`,e)}},pc=class extends uc{constructor(e){super(`Edge Function returned a non-2xx status code`,`FunctionsHttpError`,e)}},mc;(function(e){e.Any=`any`,e.ApNortheast1=`ap-northeast-1`,e.ApNortheast2=`ap-northeast-2`,e.ApSouth1=`ap-south-1`,e.ApSoutheast1=`ap-southeast-1`,e.ApSoutheast2=`ap-southeast-2`,e.CaCentral1=`ca-central-1`,e.EuCentral1=`eu-central-1`,e.EuWest1=`eu-west-1`,e.EuWest2=`eu-west-2`,e.EuWest3=`eu-west-3`,e.SaEast1=`sa-east-1`,e.UsEast1=`us-east-1`,e.UsWest1=`us-west-1`,e.UsWest2=`us-west-2`})(mc||={});var hc=class{constructor(e,{headers:t={},customFetch:n,region:r=mc.Any}={}){this.url=e,this.headers=t,this.region=r,this.fetch=lc(n)}setAuth(e){this.headers.Authorization=`Bearer ${e}`}invoke(e){return Te(this,arguments,void 0,function*(e,t={}){var n;let r,i,a;try{let{headers:n,method:o,body:s,signal:c,timeout:l}=t,u={},{region:d}=t;d||=this.region;let f=new URL(`${this.url}/${e}`);d&&d!==`any`&&(u[`x-region`]=d,f.searchParams.set(`forceFunctionRegion`,d));let p,m=!!n&&Object.keys(n).some(e=>e.toLowerCase()===`content-type`);s&&!m?typeof Blob<`u`&&s instanceof Blob||s instanceof ArrayBuffer?(u[`Content-Type`]=`application/octet-stream`,p=s):typeof s==`string`?(u[`Content-Type`]=`text/plain`,p=s):typeof FormData<`u`&&s instanceof FormData?p=s:(u[`Content-Type`]=`application/json`,p=JSON.stringify(s)):p=s&&typeof s!=`string`&&!(typeof Blob<`u`&&s instanceof Blob)&&!(s instanceof ArrayBuffer)&&!(typeof FormData<`u`&&s instanceof FormData)?JSON.stringify(s):s;let h=c;l&&(i=new AbortController,r=setTimeout(()=>i.abort(),l),c?(h=i.signal,a=()=>i.abort(),c.addEventListener(`abort`,a)):h=i.signal);let g=yield this.fetch(f.toString(),{method:o||`POST`,headers:Object.assign(Object.assign(Object.assign({},u),this.headers),n),body:p,signal:h}).catch(e=>{throw new dc(e)}),_=g.headers.get(`x-relay-error`);if(_&&_===`true`)throw new fc(g);if(!g.ok)throw new pc(g);let v=(g.headers.get(`Content-Type`)??`text/plain`).split(`;`)[0].trim().toLowerCase(),y;return y=v===`application/json`?yield g.json():v===`application/octet-stream`||v===`application/pdf`?yield g.blob():v===`text/event-stream`?g:v===`multipart/form-data`?yield g.formData():yield g.text(),{data:y,error:null,response:g}}catch(e){return{data:null,error:e,response:e instanceof pc||e instanceof fc?e.context:void 0}}finally{r&&clearTimeout(r),a&&((n=t.signal)==null||n.removeEventListener(`abort`,a))}})}},gc=3,_c=e=>Math.min(1e3*2**e,3e4),vc=[520,503],yc=[`GET`,`HEAD`,`OPTIONS`],bc=class extends Error{constructor(e){super(e.message),this.name=`PostgrestError`,this.details=e.details,this.hint=e.hint,this.co
12de=e.code}toJSON(){return{name:this.name,message:this.message,details:this.details,hint:this.hint,code:this.code}}};function xc(e,t){return new Promise(n=>{if(t?.aborted){n();return}let r=setTimeout(()=>{t?.removeEventListener(`abort`,i),n()},e);function i(){clearTimeout(r),n()}t?.addEventListener(`abort`,i)})}function Sc(e,t,n,r){return!(!r||n>=gc||!yc.includes(e)||!vc.includes(t))}var Cc=class{constructor(e){this.shouldThrowOnError=!1,this.retryEnabled=!0,this.method=e.method,this.url=e.url,this.headers=new Headers(e.headers),this.schema=e.schema,this.body=e.body,this.shouldThrowOnError=e.shouldThrowOnError??!1,this.signal=e.signal,this.isMaybeSingle=e.isMaybeSingle??!1,this.shouldStripNulls=e.shouldStripNulls??!1,this.urlLengthLimit=e.urlLengthLimit??8e3,this.retryEnabled=e.retry??!0,this.fetch=e.fetch?e.fetch:fetch}throwOnError(){return this.shouldThrowOnError=!0,this}stripNulls(){if(this.headers.get(`Accept`)===`text/csv`)throw Error(`stripNulls() cannot be used with csv()`);return this.shouldStripNulls=!0,this}setHeader(e,t){return this.headers=new Headers(this.headers),this.headers.set(e,t),this}retry(e){return this.retryEnabled=e,this}then(e,t){var n=this;if(this.schema===void 0||([`GET`,`HEAD`].includes(this.method)?this.headers.set(`Accept-Profile`,this.schema):this.headers.set(`Content-Profile`,this.schema)),this.method!==`GET`&&this.method!==`HEAD`&&this.headers.set(`Content-Type`,`application/json`),this.shouldStripNulls){let e=this.headers.get(`Accept`);e===`application/vnd.pgrst.object+json`?this.headers.set(`Accept`,`application/vnd.pgrst.object+json;nulls=stripped`):(!e||e===`application/json`)&&this.headers.set(`Accept`,`application/vnd.pgrst.array+json;nulls=stripped`)}let r=this.fetch,i=(async()=>{let e=0;for(;;){let t={};n.headers.forEach((e,n)=>{t[n]=e}),e>0&&(t[`X-Retry-Count`]=String(e));let i;try{i=await r(n.url.toString(),{method:n.method,headers:t,body:JSON.stringify(n.body,(e,t)=>typeof t==`bigint`?t.toString():t),signal:n.signal})}catch(t){if(t?.name===`AbortError`||t?.code===`ABORT_ERR`||!yc.includes(n.method))throw t;if(n.retryEnabled&&e<gc){let t=_c(e);e++,await xc(t,n.signal);continue}throw t}if(Sc(n.method,i.status,e,n.retryEnabled)){let t=i.headers?.get(`Retry-After`)??null,r=t===null?_c(e):Math.max(0,parseInt(t,10)||0)*1e3;await i.text(),e++,await xc(r,n.signal);continue}return await n.processResponse(i)}})();return this.shouldThrowOnError||(i=i.catch(e=>{let t=``,n=``,r=``,i=e?.cause;if(i){let n=i?.message??``,r=i?.code??``;t=`${e?.name??`FetchError`}: ${e?.message}`,t+=`\n\nCaused by: ${i?.name??`Error`}: ${n}`,r&&(t+=` (${r})`),i?.stack&&(t+=`\n${i.stack}`)}else t=e?.stack??``;let a=this.url.toString().length;return e?.name===`AbortError`||e?.code===`ABORT_ERR`?(r=``,n=`Request was aborted (timeout or manual cancellation)`,a>this.urlLengthLimit&&(n+=`. Note: Your request URL is ${a} characters, which may exceed server limits. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [many IDs])), consider using an RPC function to pass values server-side.`)):(i?.name===`HeadersOverflowError`||i?.code===`UND_ERR_HEADERS_OVERFLOW`)&&(r=``,n=`HTTP headers exceeded server limits (typically 16KB)`,a>this.urlLengthLimit&&(n+=`. Your request URL is ${a} characters. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [200+ IDs])), consider using an RPC function instead.`)),{success:!1,error:{message:`${e?.name??`FetchError`}: ${e?.message}`,details:t,hint:n,code:r},data:null,count:null,status:0,statusText:``}})),i.then(e,t)}async processResponse(e){var t=this;let n=null,r=null,i=null,a=e.status,o=e.statusText;if(e.ok){if(t.method!==`HEAD`){let i=await e.text();if(i!==``)if(t.headers.get(`Accept`)===`text/csv`)r=i;else if(t.headers.get(`Accept`)&&t.headers.get(`Accept`)?.includes(`application/vnd.pgrst.plan+text`))r=i;else try{r=JSON.parse(i)}catch{if(n={message:i},r=null,t.shouldThrowOnError)throw new bc({message:i,details:``,hint:``,code:``})}}let s=t.headers.get(`Prefer`)?.match(/count=(exact|planned|estimated)/),c=e.headers.get(`content-range`)?.split(`/`);s&&c&&c.length>1&&(i=parseInt(c[1])),t.isMaybeSingle&&Array.isArray(r)&&(r.length>1?(n={code:`PGRST116`,details:`Results contain ${r.length} rows, application/vnd.pgrst.object+json requires 1 row`,hint:null,message:`JSON object requested, multiple (or no) rows returned`},r=null,i=null,a=406,o=`Not Acceptable`):r=r.length===1?r[0]:null)}else{let i=await e.text();try{n=JSON.parse(i),Array.isArray(n)&&e.status===404&&(r=[],n=null,a=200,o=`OK`)}
vendor: 9,998 bytes, line 12
12catch{e.status===404&&i===``?(a=204,o=`No Content`):n={message:i}}if(n&&t.shouldThrowOnError)throw new bc(n)}return{success:n===null,error:n,data:r,count:i,status:a,statusText:o}}returns(){return this}overrideTypes(){return this}},wc=class extends Cc{throwOnError(){return super.throwOnError()}select(e){let t=!1,n=(e??`*`).split(``).map(e=>/\s/.test(e)&&!t?``:(e===`"`&&(t=!t),e)).join(``);return this.url.searchParams.set(`select`,n),this.headers.append(`Prefer`,`return=representation`),this}order(e,{ascending:t=!0,nullsFirst:n,foreignTable:r,referencedTable:i=r}={}){let a=i?`${i}.order`:`order`,o=this.url.searchParams.get(a);return this.url.searchParams.set(a,`${o?`${o},`:``}${e}.${t?`asc`:`desc`}${n===void 0?``:n?`.nullsfirst`:`.nullslast`}`),this}limit(e,{foreignTable:t,referencedTable:n=t}={}){let r=n===void 0?`limit`:`${n}.limit`;return this.url.searchParams.set(r,`${e}`),this}range(e,t,{foreignTable:n,referencedTable:r=n}={}){let i=r===void 0?`offset`:`${r}.offset`,a=r===void 0?`limit`:`${r}.limit`;return this.url.searchParams.set(i,`${e}`),this.url.searchParams.set(a,`${t-e+1}`),this}abortSignal(e){return this.signal=e,this}single(){return this.headers.set(`Accept`,`application/vnd.pgrst.object+json`),this}maybeSingle(){return this.isMaybeSingle=!0,this}csv(){return this.headers.set(`Accept`,`text/csv`),this}geojson(){return this.headers.set(`Accept`,`application/geo+json`),this}explain({analyze:e=!1,verbose:t=!1,settings:n=!1,buffers:r=!1,wal:i=!1,format:a=`text`}={}){let o=[e?`analyze`:null,t?`verbose`:null,n?`settings`:null,r?`buffers`:null,i?`wal`:null].filter(Boolean).join(`|`),s=this.headers.get(`Accept`)??`application/json`;return this.headers.set(`Accept`,`application/vnd.pgrst.plan+${a}; for="${s}"; options=${o};`),this}rollback(){return this.headers.append(`Prefer`,`tx=rollback`),this}returns(){return this}maxAffected(e){return this.headers.append(`Prefer`,`handling=strict`),this.headers.append(`Prefer`,`max-affected=${e}`),this}},Tc=RegExp(`[,()]`),Ec=class extends wc{throwOnError(){return super.throwOnError()}eq(e,t){return this.url.searchParams.append(e,`eq.${t}`),this}neq(e,t){return this.url.searchParams.append(e,`neq.${t}`),this}gt(e,t){return this.url.searchParams.append(e,`gt.${t}`),this}gte(e,t){return this.url.searchParams.append(e,`gte.${t}`),this}lt(e,t){return this.url.searchParams.append(e,`lt.${t}`),this}lte(e,t){return this.url.searchParams.append(e,`lte.${t}`),this}like(e,t){return this.url.searchParams.append(e,`like.${t}`),this}likeAllOf(e,t){return this.url.searchParams.append(e,`like(all).{${t.join(`,`)}}`),this}likeAnyOf(e,t){return this.url.searchParams.append(e,`like(any).{${t.join(`,`)}}`),this}ilike(e,t){return this.url.searchParams.append(e,`ilike.${t}`),this}ilikeAllOf(e,t){return this.url.searchParams.append(e,`ilike(all).{${t.join(`,`)}}`),this}ilikeAnyOf(e,t){return this.url.searchParams.append(e,`ilike(any).{${t.join(`,`)}}`),this}regexMatch(e,t){return this.url.searchParams.append(e,`match.${t}`),this}regexIMatch(e,t){return this.url.searchParams.append(e,`imatch.${t}`),this}is(e,t){return this.url.searchParams.append(e,`is.${t}`),this}isDistinct(e,t){return this.url.searchParams.append(e,`isdistinct.${t}`),this}in(e,t){let n=Array.from(new Set(t)).map(e=>typeof e==`string`&&Tc.test(e)?`"${e}"`:`${e}`).join(`,`);return this.url.searchParams.append(e,`in.(${n})`),this}notIn(e,t){let n=Array.from(new Set(t)).map(e=>typeof e==`string`&&Tc.test(e)?`"${e}"`:`${e}`).join(`,`);return this.url.searchParams.append(e,`not.in.(${n})`),this}contains(e,t){return typeof t==`string`?this.url.searchParams.append(e,`cs.${t}`):Array.isArray(t)?this.url.searchParams.append(e,`cs.{${t.join(`,`)}}`):this.url.searchParams.append(e,`cs.${JSON.stringify(t)}`),this}containedBy(e,t){return typeof t==`string`?this.url.searchParams.append(e,`cd.${t}`):Array.isArray(t)?this.url.searchParams.append(e,`cd.{${t.join(`,`)}}`):this.url.searchParams.append(e,`cd.${JSON.stringify(t)}`),this}rangeGt(e,t){return this.url.searchParams.append(e,`sr.${t}`),this}rangeGte(e,t){return this.url.searchParams.append(e,`nxl.${t}`),this}rangeLt(e,t){return this.url.searchParams.append(e,`sl.${t}`),this}rangeLte(e,t){return this.url.searchParams.append(e,`nxr.${t}`),this}rangeAdjacent(e,t){return this.url.searchParams.append(e,`adj.${t}`),this}overlaps(e,t){return typeof t==`string`?this.url.searchParams.append(e,`ov.${t}`):this.url.searchParams.append(e,`ov.{${t.join(`,`)}}`),this}textSearch(e,t,{config:n,type:r}={}){let i=``;r===`plain`?i=`pl`:r===`phrase`?i=`ph`:r===`websearch`&&(i=`w`);let a=n===void 0?``:`(${n})`;return this.url.searchParams.append(e,`${i}fts${a}.${t}`),this}match(e){return Object.entries(e).filter(([e,t])=>t!==void 0).forEach(([e,t])=>{this.url.searchParams.append(e,`eq.${t}`)}),this}not(e,t,n){return this.url.searchParams.append(e,`not.${t}.${n}`),this}or(e,{foreignTable:t,referencedTable:n=t}={}){let r=n?`${n}.or`:`or`;return this.url.searchParams.append(r,`(${e})`),this}filter(e,t,n){return this.url.searchParams.append(e,`${t}.${n}`),this}},Dc=class{constructor(e,{headers:t={},schema:n,fetch:r,urlLengthLimit:i=8e3,retry:a}){this.url=e,this.headers=new Headers(t),this.schema=n,this.fetch=r,this.urlLengthLimit=i,this.retry=a}cloneRequestState(){return{url:new URL(this.url.toString()),headers:new Headers(this.headers)}}select(e,t){let{head:n=!1,count:r}=t??{},i=n?`HEAD`:`GET`,a=!1,o=(e??`*`).split(``).map(e=>/\s/.test(e)&&!a?``:(e===`"`&&(a=!a),e)).join(``),{url:s,headers:c}=this.cloneRequestState();return s.searchParams.set(`select`,o),r&&c.append(`Prefer`,`count=${r}`),new Ec({method:i,url:s,headers:c,schema:this.schema,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}insert(e,{count:t,defaultToNull:n=!0}={}){let{url:r,headers:i}=this.cloneRequestState();if(t&&i.append(`Prefer`,`count=${t}`),n||i.append(`Prefer`,`missing=default`),Array.isArray(e)){let t=e.reduce((e,t)=>e.concat(Object.keys(t)),[]);if(t.length>0){let e=[...new Set(t)].map(e=>`"${e}"`);r.searchParams.set(`columns`,e.join(`,`))}}return new Ec({method:`POST`,url:r,headers:i,schema:this.schema,body:e,fetch:this.fetch??fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}upsert(e,{onConflict:t,ignoreDuplicates:n=!1,count:r,defaultToNull:i=!0}={}){let{url:a,headers:o}=this.cloneRequestState();if(o.append(`Prefer`,`resolution=${n?`ignore`:`merge`}-duplicates`),t!==void 0&&a.searchParams.set(`on_conflict`,t),r&&o.append(`Prefer`,`count=${r}`),i||o.append(`Prefer`,`missing=default`),Array.isArray(e)){let t=e.reduce((e,t)=>e.concat(Object.keys(t)),[]);if(t.length>0){let e=[...new Set(t)].map(e=>`"${e}"`);a.searchParams.set(`columns`,e.join(`,`))}}return new Ec({method:`POST`,url:a,headers:o,schema:this.schema,body:e,fetch:this.fetch??fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}update(e,{count:t}={}){let{url:n,headers:r}=this.cloneRequestState();return t&&r.append(`Prefer`,`count=${t}`),new Ec({method:`PATCH`,url:n,headers:r,schema:this.schema,body:e,fetch:this.fetch??fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}delete({count:e}={}){let{url:t,headers:n}=this.cloneRequestState();return e&&n.append(`Prefer`,`count=${e}`),new Ec({method:`DELETE`,url:t,headers:n,schema:this.schema,fetch:this.fetch??fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}};function Oc(e){"@babel/helpers - typeof";return Oc=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},Oc(e)}function kc(e,t){if(Oc(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(Oc(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function Ac(e){var t=kc(e,`string`);return Oc(t)==`symbol`?t:t+``}function jc(e,t,n){return(t=Ac(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Mc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Nc(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?Mc(Object(n),!0).forEach(function(t){jc(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Mc(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var Pc=class e{constructor(e,{headers:t={},schema:n,fetch:r,timeout:i,urlLengthLimit:a=8e3,retry:o}={}){this.url=e,this.headers=new Headers(t),this.schemaName=n,this.urlLengthLimit=a;let s=r??globalThis.fetch;this.fetch=i!==void 0&&i>0?(e,t)=>{let n=new AbortController,r=setTimeout(()=>n.abort(),i),a=t?.signal;if(a){if(a.aborted)return clearTimeout(r),s(e,t);let i=()=>{clearTimeout(r),n.abort()};return a.addEventListener(`abort`,i,{once:!0}),s(e,Nc(Nc({},t),{},{signal:n.signal})).finally(()=>{clearTimeout(r),a.removeEventListener(`abort`,i)})}return s(e,Nc(Nc({},t),{},{signal:n.signal})).finally(()=>clearTimeout(r))}:s,this.retry=o}from(e){if(!e||typeof e!=`string`||e.trim()===``)throw Error(`Invalid relation name: relation must be a non-empty string.`);return new Dc(new URL(`${this.url}/${e}`),{headers:new Headers(this.headers),schema:this.schemaName,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}schema(t){return new e(this.url,{headers:this.headers,schema:t,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}rpc(e,t={},{head:n=!1,get:r=!1,count:i}={}){let a,o=new URL(`${this.url}/rpc/${e}`),s,c=e=>typeof e==`object`&&!!e&&(!Array.isArray(e)||e.some(c)),l=n&&Object.values(t).some(c);l?(a=`POST`,s=t):n||r?(a=n?`HEAD`:`GET`,Object.entries(t).filter(([e,t])=>t!==void 0).map(([e,t])=>[e,Array.isArray(t)?`{${t.join(`,`)}}`:`${t}
12`]).forEach(([e,t])=>{o.searchParams.append(e,t)})):(a=`POST`,s=t);let u=new Headers(this.headers);return l?u.set(`Prefer`,i?`count=${i},return=minimal`:`return=minimal`):i&&u.set(`Prefer`,`count=${i}`),new Ec({method:a,url:o,headers:u,schema:this.schemaName,body:s,fetch:this.fetch??fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}},Fc=class{constructor(){}static detectEnvironment(){if(typeof WebSocket<`u`)return{type:`native`,wsConstructor:WebSocket};let e=globalThis;if(typeof globalThis<`u`&&e.WebSocket!==void 0)return{type:`native`,wsConstructor:e.WebSocket};let t=typeof global<`u`?global:void 0;if(t&&t.WebSocket!==void 0)return{type:`native`,wsConstructor:t.WebSocket};if(typeof globalThis<`u`&&e.WebSocketPair!==void 0&&globalThis.WebSocket===void 0)return{type:`cloudflare`,error:`Cloudflare Workers detected. WebSocket clients are not supported in Cloudflare Workers.`,workaround:`Use Cloudflare Workers WebSocket API for server-side WebSocket handling, or deploy to a different runtime.`};if(typeof globalThis<`u`&&e.EdgeRuntime||typeof navigator<`u`&&navigator.userAgent?.includes(`Vercel-Edge`))return{type:`unsupported`,error:`Edge runtime detected (Vercel Edge/Netlify Edge). WebSockets are not supported in edge functions.`,workaround:`Use serverless functions or a different deployment target for WebSocket functionality.`};let n=globalThis.process;if(n){let e=n.versions;if(e&&e.node)return{type:`unsupported`,error:`Node.js detected but native WebSocket not found.`,workaround:`Ensure you are running Node.js 22+ or provide a WebSocket implementation via the transport option.`}}return{type:`unsupported`,error:`Unknown JavaScript runtime without WebSocket support.`,workaround:`Ensure you're running in a supported environment (browser, Node.js, Deno) or provide a custom WebSocket implementation.`}}static getWebSocketConstructor(){let e=this.detectEnvironment();if(e.wsConstructor)return e.wsConstructor;let t=e.error||`WebSocket not supported in this environment.`;throw e.workaround&&(t+=`\n\nSuggested solution: ${e.workaround}`),Error(t)}static isWebSocketSupported(){try{return this.detectEnvironment().type===`native`}catch{return!1}}},Ic=`realtime-js/2.111.0`,Lc=`1.0.0`,Rc=`2.0.0`,zc=Rc,Bc=1e4,Vc={closed:`closed`,errored:`errored`,joined:`joined`,joining:`joining`,leaving:`leaving`},Hc={close:`phx_close`,error:`phx_error`,join:`phx_join`,reply:`phx_reply`,leave:`phx_leave`,access_token:`access_token`},Uc={connecting:`connecting`,open:`open`,closing:`closing`,closed:`closed`},Wc=class{constructor(e){this.HEADER_LENGTH=1,this.USER_BROADCAST_PUSH_META_LENGTH=6,this.KINDS={userBroadcastPush:3,userBroadcast:4},this.BINARY_ENCODING=0,this.JSON_ENCODING=1,this.BROADCAST_EVENT=`broadcast`,this.allowedMetadataKeys=[],this.allowedMetadataKeys=e??[]}encode(e,t){if(e.event===this.BROADCAST_EVENT&&!(e.payload instanceof ArrayBuffer)&&typeof e.payload.event==`string`)return t(this._binaryEncodeUserBroadcastPush(e));let n=[e.join_ref,e.ref,e.topic,e.event,e.payload];return t(JSON.stringify(n))}_binaryEncodeUserBroadcastPush(e){return this._isArrayBuffer(e.payload?.payload)?this._encodeBinaryUserBroadcastPush(e):this._encodeJsonUserBroadcastPush(e)}_encodeBinaryUserBroadcastPush(e){let t=e.payload?.payload??new ArrayBuffer(0);return this._encodeUserBroadcastPush(e,this.BINARY_ENCODING,t)}_encodeJsonUserBroadcastPush(e){let t=e.payload?.payload??{},n=new TextEncoder().encode(JSON.stringify(t)).buffer;return this._encodeUserBroadcastPush(e,this.JSON_ENCODING,n)}_encodeUserBroadcastPush(e,t,n){let r=new TextEncoder,i=r.encode(e.topic),a=r.encode(e.ref??``),o=r.encode(e.join_ref??``),s=r.encode(e.payload.event),c=this.allowedMetadataKeys?this._pick(e.payload,this.allowedMetadataKeys):{},l=r.encode(Object.keys(c).length===0?``:JSON.stringify(c));if(o.length>255)throw Error(`joinRef length ${o.length} exceeds maximum of 255`);if(a.length>255)throw Error(`ref length ${a.length} exceeds maximum of 255`);if(i.length>255)throw Error(`topic length ${i.length} exceeds maximum of 255`);if(s.length>255)throw Error(`userEvent length ${s.length} exceeds maximum of 255`);if(l.length>255)throw Error(`metadata length ${l.length} exceeds maximum of 255`);let u=this.USER_BROADCAST_PUSH_META_LENGTH+o.length+a.length+i.length+s.length+l.length,d=new ArrayBuffer(this.HEADER_LENGTH+u),f=new DataView(d),p=new Uint8Array(d),m=0;f.setUint8(m++,this.KINDS.userBroadcastPush),f.setUint8(m++,o.length),f.setUint8(m++,a.length),f.setUint8(m++,i.length),f.setUint8(m++,s.length),f.setUint8(m++,l.length),f.setUint8(m++,t),p.set(o,m),m+=o.length,p.set(a,m),m+=a.length,p.set(i,m),m+=i.length,p.set(s,m),m+=s.length,p.set(l,m),m+=l.length;var h=new Uint8Array(d.byteLength+n.byteLength);return h.set(new Uint8Array(d),0),h.set(new Uint8Array(n),d.byteLength),h.buffer}decode(e,t){if(this._isArrayBuffer(e))return t(this._binaryDecode(e));if(typeof e==`string`){let[n,r,i,a,o]=JSON.parse(e);return t({join_ref:n,ref:r,topic:i,event:a,payload:o})}return t({})}_binaryDecode(e){let t=new DataView(e),n=t.getUint8(0),r=new TextDecoder;switch(n){case this.KINDS.userBroadcast:return this._decodeUserBroadcast(e,t,r)}}_decodeUserBroadcast(e,t,n){let r=t.getUint8(1),i=t.getUint8(2),a=t.getUint8(3),o=t.getUint8(4),s=this.HEADER_LENGTH+4,c=n.decode(e.slice(s,s+r));s+=r;let l=n.decode(e.slice(s,s+i));s+=i;let u=n.decode(e.slice(s,s+a));s+=a;let d=e.slice(s,e.byteLength),f=o===this.JSON_ENCODING?JSON.parse(n.decode(d)):d,p={type:this.BROADCAST_EVENT,event:l,payload:f};return a>0&&(p.meta=JSON.parse(u)),{join_ref:null,ref:null,topic:c,event:this.BROADCAST_EVENT,payload:p}}_isArrayBuffer(e){return e instanceof ArrayBuffer||e?.constructor?.name===`ArrayBuffer`}_pick(e,t){return!e||typeof e!=`object`?{}:Object.fromEntries(Object.entries(e).filter(([e])=>t.includes(e)))}},Gc;(function(e){e.abstime=`abstime`,e.bool=`bool`,e.date=`date`,e.daterange=`daterange`,e.float4=`float4`,e.float8=`float8`,e.int2=`int2`,e.int4=`int4`,e.int4range=`int4range`,e.int8=`int8`,e.int8range=`int8range`,e.json=`json`,e.jsonb=`jsonb`,e.money=`money`,e.numeric=`numeric`,e.oid=`oid`,e.reltime=`reltime`,e.text=`text`,e.time=`time`,e.timestamp=`timestamp`,e.timestamptz=`timestamptz`,e.timetz=`timetz`,e.tsrange=`tsrange`,e.tstzrange=`tstzrange`})(Gc||={});var Kc=(e,t,n={})=>{let r=n.skipTypes??[];return t?Object.keys(t).reduce((n,i)=>(n[i]=qc(i,e,t,r),n),{}):{}},qc=(e,t,n,r)=>{let i=t.find(t=>t.name===e)?.type,a=n[e];return i&&!r.includes(i)?Jc(i,a):Yc(a)},Jc=(e,t)=>{if(e.charAt(0)===`_`)return $c(t,e.slice(1,e.length));switch(e){case Gc.bool:return Xc(t);case Gc.float4:case Gc.float8:case Gc.int2:case Gc.int4:case Gc.int8:case Gc.numeric:case Gc.oid:return Zc(t);case Gc.json:case Gc.jsonb:return Qc(t);case Gc.timestamp:return el(t);case Gc.abstime:case Gc.date:case Gc.daterange:case Gc.int4range:case Gc.int8range:case Gc.money:case Gc.reltime:case Gc.text:case Gc.time:case Gc.timestamptz:case Gc.timetz:case Gc.tsrange:case Gc.tstzrange:return Yc(t);default:return Yc(t)}},Yc=e=>e,Xc=e=>{switch(e){case`t`:return!0;case`f`:return!1;default:return e}},Zc=e=>{if(typeof e==`string`){let t=parseFloat(e);
vendor: 19,250 bytes, lines 12-13
12if(!Number.isNaN(t))return t}return e},Qc=e=>{if(typeof e==`string`)try{return JSON.parse(e)}catch{return e}return e},$c=(e,t)=>{if(typeof e!=`string`)return e;let n=e.length-1,r=e[n];if(e[0]===`{`&&r===`}`){let r,i=e.slice(1,n);try{r=JSON.parse(`[`+i+`]`)}catch{r=i?i.split(`,`):[]}return r.map(e=>Jc(t,e))}return e},el=e=>typeof e==`string`?e.replace(` `,`T`):e,tl=e=>{let t=new URL(e);return t.protocol=t.protocol.replace(/^ws/i,`http`),t.pathname=t.pathname.replace(/\/+$/,``).replace(/\/socket\/websocket$/i,``).replace(/\/socket$/i,``).replace(/\/websocket$/i,``),t.pathname===``||t.pathname===`/`?t.pathname=`/api/broadcast`:t.pathname+=`/api/broadcast`,t.href},nl=e=>typeof e==`function`?e:function(){return e},rl=typeof self<`u`?self:null,il=typeof window<`u`?window:null,al=rl||il||globalThis,ol=`2.0.0`,sl=1e4,cl=1e3,ll=100,ul={connecting:0,open:1,closing:2,closed:3},dl={closed:`closed`,errored:`errored`,joined:`joined`,joining:`joining`,leaving:`leaving`},fl={close:`phx_close`,error:`phx_error`,join:`phx_join`,reply:`phx_reply`,leave:`phx_leave`},pl={longpoll:`longpoll`,websocket:`websocket`},ml={complete:4},hl=`base64url.bearer.phx.`,gl=class{constructor(e,t,n,r){this.channel=e,this.event=t,this.payload=n||function(){return{}},this.receivedResp=null,this.timeout=r,this.timeoutTimer=null,this.recHooks=[],this.sent=!1,this.ref=void 0}resend(e){this.timeout=e,this.reset(),this.send()}send(){this.hasReceived(`timeout`)||(this.startTimeout(),this.sent=!0,this.channel.socket.push({topic:this.channel.topic,event:this.event,payload:this.payload(),ref:this.ref,join_ref:this.channel.joinRef()}))}receive(e,t){return this.hasReceived(e)&&t(this.receivedResp.response),this.recHooks.push({status:e,callback:t}),this}reset(){this.cancelRefEvent(),this.ref=null,this.refEvent=null,this.receivedResp=null,this.sent=!1}destroy(){this.cancelRefEvent(),this.cancelTimeout()}matchReceive({status:e,response:t,_ref:n}){this.recHooks.filter(t=>t.status===e).forEach(e=>e.callback(t))}cancelRefEvent(){this.refEvent&&this.channel.off(this.refEvent)}cancelTimeout(){clearTimeout(this.timeoutTimer),this.timeoutTimer=null}startTimeout(){this.timeoutTimer&&this.cancelTimeout(),this.ref=this.channel.socket.makeRef(),this.refEvent=this.channel.replyEventName(this.ref),this.channel.on(this.refEvent,e=>{this.cancelRefEvent(),this.cancelTimeout(),this.receivedResp=e,this.matchReceive(e)}),this.timeoutTimer=setTimeout(()=>{this.trigger(`timeout`,{})},this.timeout)}hasReceived(e){return this.receivedResp&&this.receivedResp.status===e}trigger(e,t){this.channel.trigger(this.refEvent,{status:e,response:t})}},_l=class{constructor(e,t){this.callback=e,this.timerCalc=t,this.timer=void 0,this.tries=0}reset(){this.tries=0,clearTimeout(this.timer)}scheduleTimeout(){clearTimeout(this.timer),this.timer=setTimeout(()=>{this.tries+=1,this.callback()},this.timerCalc(this.tries+1))}},vl=class{constructor(e,t,n){this.state=dl.closed,this.topic=e,this.params=nl(t||{}),this.socket=n,this.bindings=[],this.bindingRef=0,this.timeout=this.socket.timeout,this.joinedOnce=!1,this.joinPush=new gl(this,fl.join,this.params,this.timeout),this.pushBuffer=[],this.stateChangeRefs=[],this.rejoinTimer=new _l(()=>{this.socket.isConnected()&&this.rejoin()},this.socket.rejoinAfterMs),this.stateChangeRefs.push(this.socket.onError(()=>this.rejoinTimer.reset())),this.stateChangeRefs.push(this.socket.onOpen(()=>{this.rejoinTimer.reset(),this.isErrored()&&this.rejoin()})),this.joinPush.receive(`ok`,()=>{this.state=dl.joined,this.rejoinTimer.reset(),this.pushBuffer.forEach(e=>e.send()),this.pushBuffer=[]}),this.joinPush.receive(`error`,e=>{this.state=dl.errored,this.socket.hasLogger()&&this.socket.log(`channel`,`error ${this.topic}`,e),this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout()}),this.onClose(()=>{this.rejoinTimer.reset(),this.socket.hasLogger()&&this.socket.log(`channel`,`close ${this.topic}`),this.state=dl.closed,this.socket.remove(this)}),this.onError(e=>{this.socket.hasLogger()&&this.socket.log(`channel`,`error ${this.topic}`,e),this.isJoining()&&this.joinPush.reset(),this.state=dl.errored,this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout()}),this.joinPush.receive(`timeout`,()=>{this.socket.hasLogger()&&this.socket.log(`channel`,`timeout ${this.topic}`,this.joinPush.timeout),new gl(this,fl.leave,nl({}),this.timeout).send(),this.state=dl.errored,this.joinPush.reset(),this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout()}),this.on(fl.reply,(e,t)=>{this.trigger(this.replyEventName(t),e)})}join(e=this.timeout){if(this.joinedOnce)throw Error(`tried to join multiple times. 'join' can only be called a single time per channel instance`);return this.timeout=e,this.joinedOnce=!0,this.rejoin(),this.joinPush}teardown(){this.pushBuffer.forEach(e=>e.destroy()),this.pushBuffer=[],this.rejoinTimer.reset(),this.joinPush.destroy(),this.state=dl.closed,this.bindings=[]}onClose(e){this.on(fl.close,e)}onError(e){return this.on(fl.error,t=>e(t))}on(e,t){let n=this.bindingRef++;return this.bindings.push({event:e,ref:n,callback:t}),n}off(e,t){this.bindings=this.bindings.filter(n=>n.event!==e||t!==void 0&&t!==n.ref)}canPush(){return this.socket.isConnected()&&this.isJoined()}push(e,t,n=this.timeout){if(t||={},!this.joinedOnce)throw Error(`tried to push '${e}' to '${this.topic}' before joining. Use channel.join() before pushing events`);let r=new gl(this,e,function(){return t},n);return this.canPush()?r.send():(r.startTimeout(),this.pushBuffer.push(r)),r}leave(e=this.timeout){this.rejoinTimer.reset(),this.joinPush.cancelTimeout(),this.state=dl.leaving;let t=()=>{this.socket.hasLogger()&&this.socket.log(`channel`,`leave ${this.topic}`),this.trigger(fl.close,`leave`)},n=new gl(this,fl.leave,nl({}),e);return n.receive(`ok`,()=>t()).receive(`timeout`,()=>t()),n.send(),this.canPush()||n.trigger(`ok`,{}),n}onMessage(e,t,n){return t}filterBindings(e,t,n){return!0}isMember(e,t,n,r){return this.topic===e?r&&r!==this.joinRef()?(this.socket.hasLogger()&&this.socket.log(`channel`,`dropping outdated message`,{topic:e,event:t,payload:n,joinRef:r}),!1):!0:!1}joinRef(){return this.joinPush.ref}rejoin(e=this.timeout){this.isLeaving()||(this.socket.leaveOpenTopic(this.topic),this.state=dl.joining,this.joinPush.resend(e))}trigger(e,t,n,r){let i=this.onMessage(e,t,n,r);if(t&&!i)throw Error(`channel onMessage callbacks must return the payload, modified or unmodified`);let a=this.bindings.filter(r=>r.event===e&&this.filterBindings(r,t,n));for(let e=0;e<a.length;e++)a[e].callback(i,n,r||this.joinRef())}replyEventName(e){return`chan_reply_${e}`}isClosed(){return this.state===dl.closed}isErrored(){return this.state===dl.errored}isJoined(){return this.state===dl.joined}isJoining(){return this.state===dl.joining}isLeaving(){return this.state===dl.leaving}},yl=class{static request(e,t,n,r,i,a,o){if(al.XDomainRequest){let n=new al.XDomainRequest;return this.xdomainRequest(n,e,t,r,i,a,o)}if(al.XMLHttpRequest){let s=new al.XMLHttpRequest;return this.xhrRequest(s,e,t,n,r,i,a,o)}if(al.fetch&&al.AbortController)return this.fetchRequest(e,t,n,r,i,a,o);throw Error(`No suitable XMLHttpRequest implementation found`)}static fetchRequest(e,t,n,r,i,a,o){let s={method:e,headers:n,body:r},c=null;return i&&(c=new AbortController,setTimeout(()=>c.abort(),i),s.signal=c.signal),al.fetch(t,s).then(e=>e.text()).then(e=>this.parseJSON(e)).then(e=>o&&o(e)).catch(e=>{e.name===`AbortError`&&a?a():o&&o(null)}),c}static xdomainRequest(e,t,n,r,i,a,o){return e.timeout=i,e.open(t,n),e.onload=()=>{let t=this.parseJSON(e.responseText);o&&o(t)},a&&(e.ontimeout=a),e.onprogress=()=>{},e.send(r),e}static xhrRequest(e,t,n,r,i,a,o,s){e.open(t,n,!0),e.timeout=a;for(let[t,n]of Object.entries(r))e.setRequestHeader(t,n);return e.onerror=()=>s&&s(null),e.onreadystatechange=()=>{e.readyState===ml.complete&&s&&s(this.parseJSON(e.responseText))},o&&(e.ontimeout=o),e.send(i),e}static parseJSON(e){if(!e||e===``)return null;try{return JSON.parse(e)}catch{return console&&console.log(`failed to parse JSON response`,e),null}}static serialize(e,t){let n=[];for(var r in e){if(!Object.prototype.hasOwnProperty.call(e,r))continue;let i=t?`${t}[${r}]`:r,a=e[r];typeof a==`object`?n.push(this.serialize(a,i)):n.push(encodeURIComponent(i)+`=`+encodeURIComponent(a))}return n.join(`&`)}static appendParams(e,t){return Object.keys(t).length===0?e:`${e}${e.match(/\?/)?`&`:`?`}${this.serialize(t)}`}},bl=e=>{let t=``,n=new Uint8Array(e),r=n.byteLength;for(let e=0;e<r;e++)t+=String.fromCharCode(n[e]);return btoa(t)},xl=class{constructor(e,t){t&&t.length===2&&t[1].startsWith(hl)&&(this.authToken=atob(t[1].slice(hl.length))),this.endPoint=null,this.token=null,this.skipHeartbeat=!0,this.reqs=new Set,this.awaitingBatchAck=!1,this.currentBatch=null,this.currentBatchTimer=null,this.batchBuffer=[],this.onopen=function(){},this.onerror=function(){},this.onmessage=function(){},this.onclose=function(){},this.pollEndpoint=this.normalizeEndpoint(e),this.readyState=ul.connecting,setTimeout(()=>this.poll(),0)}normalizeEndpoint(e){return e.replace(`ws://`,`http://`).replace(`wss://`,`https://`).replace(RegExp(`(.*)/`+pl.websocket),`$1/`+pl.longpoll)}endpointURL(){return yl.appendParams(this.pollEndpoint,{token:this.token})}closeAndRetry(e,t,n){this.close(e,t,n),this.readyState=ul.connecting}ontimeout(){this.onerror(`timeout`),this.closeAndRetry(1005,`timeout`,!1)}isActive(){return this.readyState===ul.open||this.readyState===ul.connecting}poll(){let e={Accept:`application/json`};this.authToken&&(e[`X-Phoenix-AuthToken`]=this.authToken),this.ajax(`GET`,e,null,()=>this.ontimeout(),e=>{if(e){var{status:t,token:n,messages:r}=e;if(t===410&&this.token!==null){this.onerror(410),this.closeAndRetry(3410,`session_gone`,!1);return}this.token=n}else t=0;switch(t){case 200:r.forEach(e=>{setTimeout(()=>this.onmessage({data:e}),0)}),this.poll();break;case 204:this.poll();break;case 410:this.readyState=ul.open,this.onopen({}),this.poll();break;case 403:this.onerror(403),this.close(1008,`forbidden`,!1);break;case 0:case 500:this.onerror(500),this.closeAndRetry(1011,`internal server error`,500);break;default:throw Error(`unhandled poll status ${t}`)}})}send(e){typeof e!=`string`&&(e=bl(e)),this.currentBatch?this.currentBatch.push(e):this.awaitingBatchAck?this.batchBuffer.push(e):(this.currentBatch=[e],this.currentBatchTimer=setTimeout(()=>{this.batchSend(this.currentBatch),this.currentBatch=null},0))}batchSend(e,t=0){this.awaitingBatchAck=!0;let n=t+ll,r=e.slice(t,n);this.ajax(`POST`,{"Content-Type":`application/x-ndjson`},r.join(`
13`),()=>this.onerror(`timeout`),t=>{!t||t.status!==200?(this.awaitingBatchAck=!1,this.onerror(t&&t.status),this.closeAndRetry(1011,`internal server error`,!1)):n<e.length?this.batchSend(e,n):this.batchBuffer.length>0?(this.batchSend(this.batchBuffer),this.batchBuffer=[]):this.awaitingBatchAck=!1})}close(e,t,n){for(let e of this.reqs)e.abort();this.readyState=ul.closed;let r=Object.assign({code:1e3,reason:void 0,wasClean:!0},{code:e,reason:t,wasClean:n});this.batchBuffer=[],clearTimeout(this.currentBatchTimer),this.currentBatchTimer=null,typeof CloseEvent<`u`?this.onclose(new CloseEvent(`close`,r)):this.onclose(r)}ajax(e,t,n,r,i){let a;a=yl.request(e,this.endpointURL(),t,n,this.timeout,()=>{this.reqs.delete(a),r()},e=>{this.reqs.delete(a),this.isActive()&&i(e)}),this.reqs.add(a)}},Sl=class e{constructor(t,n={}){let r=n.events||{state:`presence_state`,diff:`presence_diff`};this.state=Object.create(null),this.pendingDiffs=[],this.channel=t,this.joinRef=null,this.caller={onJoin:function(){},onLeave:function(){},onSync:function(){}},this.channel.on(r.state,t=>{let{onJoin:n,onLeave:r,onSync:i}=this.caller;this.joinRef=this.channel.joinRef(),this.state=e.syncState(this.state,t,n,r),this.pendingDiffs.forEach(t=>{this.state=e.syncDiff(this.state,t,n,r)}),this.pendingDiffs=[],i()}),this.channel.on(r.diff,t=>{let{onJoin:n,onLeave:r,onSync:i}=this.caller;this.inPendingSyncState()?this.pendingDiffs.push(t):(this.state=e.syncDiff(this.state,t,n,r),i())})}onJoin(e){this.caller.onJoin=e}onLeave(e){this.caller.onLeave=e}onSync(e){this.caller.onSync=e}list(t){return e.list(this.state,t)}inPendingSyncState(){return!this.joinRef||this.joinRef!==this.channel.joinRef()}static syncState(e,t,n,r){let i=this.toNullProtoObj(this.clone(e));t=this.toNullProtoObj(t);let a=Object.create(null),o=Object.create(null);return this.map(i,(e,n)=>{t[e]||(o[e]=n)}),this.map(t,(e,t)=>{let n=i[e];if(n){let r=t.metas.map(e=>e.phx_ref),i=n.metas.map(e=>e.phx_ref),s=t.metas.filter(e=>i.indexOf(e.phx_ref)<0),c=n.metas.filter(e=>r.indexOf(e.phx_ref)<0);s.length>0&&(a[e]=t,a[e].metas=s),c.length>0&&(o[e]=this.clone(n),o[e].metas=c)}else a[e]=t}),this.syncDiff(i,{joins:a,leaves:o},n,r)}static syncDiff(e,t,n,r){e=this.toNullProtoObj(e);let{joins:i,leaves:a}=this.clone(t);return n||=function(){},r||=function(){},this.map(i,(t,r)=>{let i=e[t];if(e[t]=this.clone(r),i){let n=e[t].metas.map(e=>e.phx_ref),r=i.metas.filter(e=>n.indexOf(e.phx_ref)<0);e[t].metas.unshift(...r)}n(t,i,r)}),this.map(a,(t,n)=>{let i=e[t];if(!i)return;let a=n.metas.map(e=>e.phx_ref);i.metas=i.metas.filter(e=>a.indexOf(e.phx_ref)<0),r(t,i,n),i.metas.length===0&&delete e[t]}),e}static list(e,t){return t||=function(e,t){return t},this.map(e,(e,n)=>t(e,n))}static map(e,t){return Object.getOwnPropertyNames(e).map(n=>t(n,e[n]))}static toNullProtoObj(e){if(Object.getPrototypeOf(e)===null)return e;let t=Object.create(null);return Object.getOwnPropertyNames(e).forEach(n=>{t[n]=e[n]}),t}static clone(e){return JSON.parse(JSON.stringify(e))}},Cl={HEADER_LENGTH:1,META_LENGTH:4,KINDS:{push:0,reply:1,broadcast:2},encode(e,t){if(e.payload.constructor===ArrayBuffer)return t(this.binaryEncode(e));{let n=[e.join_ref,e.ref,e.topic,e.event,e.payload];return t(JSON.stringify(n))}},decode(e,t){if(e.constructor===ArrayBuffer)return t(this.binaryDecode(e));{let[n,r,i,a,o]=JSON.parse(e);return t({join_ref:n,ref:r,topic:i,event:a,payload:o})}},binaryEncode(e){let{join_ref:t,ref:n,event:r,topic:i,payload:a}=e,o=new TextEncoder,s=o.encode(t),c=o.encode(n),l=o.encode(i),u=o.encode(r);this.assertFieldSize(s.byteLength,`join_ref`),this.assertFieldSize(c.byteLength,`ref`),this.assertFieldSize(l.byteLength,`topic`),this.assertFieldSize(u.byteLength,`event`);let d=this.META_LENGTH+s.byteLength+c.byteLength+l.byteLength+u.byteLength,f=new ArrayBuffer(this.HEADER_LENGTH+d),p=new Uint8Array(f),m=new DataView(f),h=0;m.setUint8(h++,this.KINDS.push),m.setUint8(h++,s.byteLength),m.setUint8(h++,c.byteLength),m.setUint8(h++,l.byteLength),m.setUint8(h++,u.byteLength),p.set(s,h),h+=s.byteLength,p.set(c,h),h+=c.byteLength,p.set(l,h),h+=l.byteLength,p.set(u,h),h+=u.byteLength;var g=new Uint8Array(f.byteLength+a.byteLength);return g.set(p,0),g.set(new Uint8Array(a),f.byteLength),g.buffer},assertFieldSize(e,t){if(e>255)throw Error(`unable to convert ${t} to binary: must be less than or equal to 255 bytes, but is ${e} bytes`)},binaryDecode(e){let t=new DataView(e),n=t.getUint8(0),r=new TextDecoder;switch(n){case this.KINDS.push:return this.decodePush(e,t,r);case this.KINDS.reply:return this.decodeReply(e,t,r);case this.KINDS.broadcast:return this.decodeBroadcast(e,t,r)}},decodePush(e,t,n){let r=t.getUint8(1),i=t.getUint8(2),a=t.getUint8(3),o=this.HEADER_LENGTH+this.META_LENGTH-1,s=n.decode(e.slice(o,o+r));o+=r;let c=n.decode(e.slice(o,o+i));o+=i;let l=n.decode(e.slice(o,o+a));return o+=a,{join_ref:s,ref:null,topic:c,event:l,payload:e.slice(o,e.byteLength)}},decodeReply(e,t,n){let r=t.getUint8(1),i=t.getUint8(2),a=t.getUint8(3),o=t.getUint8(4),s=this.HEADER_LENGTH+this.META_LENGTH,c=n.decode(e.slice(s,s+r));s+=r;let l=n.decode(e.slice(s,s+i));s+=i;let u=n.decode(e.slice(s,s+a));s+=a;let d=n.decode(e.slice(s,s+o));s+=o;let f={status:d,response:e.slice(s,e.byteLength)};return{join_ref:c,ref:l,topic:u,event:fl.reply,payload:f}},decodeBroadcast(e,t,n){let r=t.getUint8(1),i=t.getUint8(2),a=this.HEADER_LENGTH+2,o=n.decode(e.slice(a,a+r));a+=r;let s=n.decode(e.slice(a,a+i));return a+=i,{join_ref:null,ref:null,topic:o,event:s,payload:e.slice(a,e.byteLength)}}},wl=class{constructor(e,t={}){this.stateChangeCallbacks={open:[],close:[],error:[],message:[]},this.channels=[],this.sendBuffer=[],this.ref=0,this.fallbackRef=null,this.timeout=t.timeout||sl,this.transport=t.transport||al.WebSocket||xl,this.conn=void 0,this.primaryPassedHealthCheck=!1,this.longPollFallbackMs=t.longPollFallbackMs,this.fallbackTimer=null;let n=null;try{n=al&&al.sessionStorage}catch{}this.sessionStore=t.sessionStorage||n,this.establishedConnections=0,this.defaultEncoder=Cl.encode.bind(Cl),this.defaultDecoder=Cl.decode.bind(Cl),this.closeWasClean=!0,this.disconnecting=!1,this.binaryType=t.binaryType||`arraybuffer`,this.connectClock=1,this.pageHidden=!1,this.encode=void 0,this.decode=void 0,this.transport===xl?(this.encode=this.defaultEncoder,this.decode=this.defaultDecoder):(this.encode=t.encode||this.defaultEncoder,this.decode=t.decode||this.defaultDecoder);let r=null;il&&il.addEventListener&&(il.addEventListener(`pagehide`,e=>{this.conn&&(this.disconnect(),r=this.connectClock)}),il.addEventListener(`pageshow`,e=>{r===this.connectClock&&(r=null,this.connect())}),il.addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`?this.pageHidden=!0:(this.pageHidden=!1,!this.isConnected()&&!this.closeWasClean&&this.teardown(()=>this.connect()))})),this.heartbeatIntervalMs=t.heartbeatIntervalMs||3e4,this.autoSendHeartbeat=t.autoSendHeartbeat??!0,this.heartbeatCallback=t.heartbeatCallback??(()=>{}),this.rejoinAfterMs=e=>t.rejoinAfterMs?t.rejoinAfterMs(e):[1e3,2e3,5e3][e-1]||1e4,this.reconnectAfterMs=e=>t.reconnectAfterMs?t.reconnectAfterMs(e):[10,50,100,150,200,250,500,1e3,2e3][e-1]||5e3,this.logger=t.logger||null,!this.logger&&t.debug&&(this.logger=(e,t,n)=>{console.log(`${e}: ${t}`,n)}),this.longpollerTimeout=t.longpollerTimeout||2e4,this.params=nl(t.params||{}),this.endPoint=`${e}/${pl.websocket}`,this.vsn=t.vsn||ol,this.heartbeatTimeoutTimer=null,this.heartbeatTimer=null,this.heartbeatSentAt=null,this.pendingHeartbeatRef=null,this.reconnectTimer=new _l(()=>{if(this.pageHidden){this.log(`Not reconnecting as page is hidden!`),this.teardown();return}this.teardown(async()=>{t.beforeReconnect&&await t.beforeReconnect(),this.connect()})},this.reconnectAfterMs),this.authToken=t.authToken&&nl(t.authToken)}getLongPollTransport(){return xl}replaceTransport(e){this.connectClock++,this.closeWasClean=!0,clearTimeout(this.fallbackTimer),this.reconnectTimer.reset(),this.conn&&=(this.conn.close(),null),this.transport=e}protocol(){return location.protocol.match(/^https/)?`wss`:`ws`}endPointURL(){let e=yl.appendParams(yl.appendParams(this.endPoint,this.params()),{vsn:this.vsn});return e.charAt(0)===`/`?e.charAt(1)===`/`?`${this.protocol()}:${e}`:`${this.protocol()}://${location.host}${e}`:e}disconnect(e,t,n){this.connectClock++,this.disconnecting=!0,this.closeWasClean=!0,clearTimeout(this.fallbackTimer),this.reconnectTimer.reset(),this.teardown(()=>{this.disconnecting=!1,e&&e()},t,n)}connect(e){e&&(console&&console.log(`passing params to connect is deprecated. Instead pass :params to the Socket constructor`),this.params=nl(e)),!(this.conn&&!this.disconnecting)&&(this.longPollFallbackMs&&this.transport!==xl?this.connectWithF
vendor: 4,375 bytes, line 13
13allback(xl,this.longPollFallbackMs):this.transportConnect())}log(e,t,n){this.logger&&this.logger(e,t,n)}hasLogger(){return this.logger!==null}onOpen(e){let t=this.makeRef();return this.stateChangeCallbacks.open.push([t,e]),t}onClose(e){let t=this.makeRef();return this.stateChangeCallbacks.close.push([t,e]),t}onError(e){let t=this.makeRef();return this.stateChangeCallbacks.error.push([t,e]),t}onMessage(e){let t=this.makeRef();return this.stateChangeCallbacks.message.push([t,e]),t}onHeartbeat(e){this.heartbeatCallback=e}ping(e){if(!this.isConnected())return!1;let t=this.makeRef(),n=Date.now();this.push({topic:`phoenix`,event:`heartbeat`,payload:{},ref:t});let r=this.onMessage(i=>{i.ref===t&&(this.off([r]),e(Date.now()-n))});return!0}transportName(e){switch(e){case xl:return`LongPoll`;default:return e.name}}transportConnect(){this.connectClock++,this.closeWasClean=!1;let e;this.authToken&&(e=[`phoenix`,`${hl}${btoa(this.authToken()).replace(/=/g,``)}`]),this.conn=new this.transport(this.endPointURL(),e),this.conn.binaryType=this.binaryType,this.conn.timeout=this.longpollerTimeout,this.conn.onopen=()=>this.onConnOpen(),this.conn.onerror=e=>this.onConnError(e),this.conn.onmessage=e=>this.onConnMessage(e),this.conn.onclose=e=>this.onConnClose(e)}getSession(e){return this.sessionStore&&this.sessionStore.getItem(e)}storeSession(e,t){this.sessionStore&&this.sessionStore.setItem(e,t)}connectWithFallback(e,t=2500){clearTimeout(this.fallbackTimer);let n=!1,r=!0,i,a,o=this.transportName(e),s=t=>{this.log(`transport`,`falling back to ${o}...`,t),this.off([i,a]),r=!1,this.replaceTransport(e),this.transportConnect()};if(this.getSession(`phx:fallback:${o}`))return s(`memorized`);this.fallbackTimer=setTimeout(s,t),a=this.onError(e=>{this.log(`transport`,`error`,e),r&&!n&&(clearTimeout(this.fallbackTimer),s(e))}),this.fallbackRef&&this.off([this.fallbackRef]),this.fallbackRef=this.onOpen(()=>{if(n=!0,!r){let t=this.transportName(e);return this.primaryPassedHealthCheck||this.storeSession(`phx:fallback:${t}`,`true`),this.log(`transport`,`established ${t} fallback`)}clearTimeout(this.fallbackTimer),this.fallbackTimer=setTimeout(s,t),this.ping(e=>{this.log(`transport`,`connected to primary after`,e),this.primaryPassedHealthCheck=!0,clearTimeout(this.fallbackTimer)})}),this.transportConnect()}clearHeartbeats(){clearTimeout(this.heartbeatTimer),clearTimeout(this.heartbeatTimeoutTimer)}onConnOpen(){this.hasLogger()&&this.log(`transport`,`connected to ${this.endPointURL()}`),this.closeWasClean=!1,this.disconnecting=!1,this.establishedConnections++,this.flushSendBuffer(),this.reconnectTimer.reset(),this.autoSendHeartbeat&&this.resetHeartbeat(),this.triggerStateCallbacks(`open`)}heartbeatTimeout(){if(this.pendingHeartbeatRef){this.pendingHeartbeatRef=null,this.heartbeatSentAt=null,this.hasLogger()&&this.log(`transport`,`heartbeat timeout. Attempting to re-establish connection`);try{this.heartbeatCallback(`timeout`)}catch(e){this.log(`error`,`error in heartbeat callback`,e)}this.triggerChanError(Error(`heartbeat timeout`)),this.closeWasClean=!1,this.teardown(()=>this.reconnectTimer.scheduleTimeout(),cl,`heartbeat timeout`)}}resetHeartbeat(){this.conn&&this.conn.skipHeartbeat||(this.pendingHeartbeatRef=null,this.clearHeartbeats(),this.heartbeatTimer=setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs))}teardown(e,t,n){if(!this.conn)return e&&e();let r=this.conn;this.waitForBufferDone(r,()=>{t?r.close(t,n||``):r.close(),this.waitForSocketClosed(r,()=>{this.conn===r&&(this.conn.onopen=function(){},this.conn.onerror=function(){},this.conn.onmessage=function(){},this.conn.onclose=function(){},this.conn=null),e&&e()})})}waitForBufferDone(e,t,n=1){if(n===5||!e.bufferedAmount){t();return}setTimeout(()=>{this.waitForBufferDone(e,t,n+1)},150*n)}waitForSocketClosed(e,t,n=1){if(n===5||e.readyState===ul.closed){t();return}setTimeout(()=>{this.waitForSocketClosed(e,t,n+1)},150*n)}onConnClose(e){this.conn&&(this.conn.onclose=()=>{}),this.hasLogger()&&this.log(`transport`,`close`,e),this.triggerChanError(e),this.clearHeartbeats(),this.closeWasClean||this.reconnectTimer.scheduleTimeout(),this.triggerStateCallbacks(`close`,e)}onConnError(e){this.hasLogger()&&this.log(`transport`,`error`,e);let t=this.transport,n=this.establishedConnections;this.triggerStateCallbacks(`error`,e,t,n),(t===this.transport||n>0)&&this.triggerChanError(e)}
vendor: 11,711 bytes, line 13
13triggerChanError(e){this.channels.forEach(t=>{t.isErrored()||t.isLeaving()||t.isClosed()||t.trigger(fl.error,e)})}connectionState(){switch(this.conn&&this.conn.readyState){case ul.connecting:return`connecting`;case ul.open:return`open`;case ul.closing:return`closing`;default:return`closed`}}isConnected(){return this.connectionState()===`open`}remove(e){this.off(e.stateChangeRefs),this.channels=this.channels.filter(t=>t!==e)}off(e){for(let t in this.stateChangeCallbacks)this.stateChangeCallbacks[t]=this.stateChangeCallbacks[t].filter(([t])=>e.indexOf(t)===-1)}channel(e,t={}){let n=new vl(e,t,this);return this.channels.push(n),n}push(e){if(this.hasLogger()){let{topic:t,event:n,payload:r,ref:i,join_ref:a}=e;this.log(`push`,`${t} ${n} (${a}, ${i})`,r)}this.isConnected()?this.encode(e,e=>this.conn.send(e)):this.sendBuffer.push(()=>this.encode(e,e=>this.conn.send(e)))}makeRef(){let e=this.ref+1;return this.ref=e===this.ref?0:e,this.ref.toString()}sendHeartbeat(){if(!this.isConnected()){try{this.heartbeatCallback(`disconnected`)}catch(e){this.log(`error`,`error in heartbeat callback`,e)}return}if(this.pendingHeartbeatRef){this.heartbeatTimeout();return}this.pendingHeartbeatRef=this.makeRef(),this.heartbeatSentAt=Date.now(),this.push({topic:`phoenix`,event:`heartbeat`,payload:{},ref:this.pendingHeartbeatRef});try{this.heartbeatCallback(`sent`)}catch(e){this.log(`error`,`error in heartbeat callback`,e)}this.heartbeatTimeoutTimer=setTimeout(()=>this.heartbeatTimeout(),this.heartbeatIntervalMs)}flushSendBuffer(){this.isConnected()&&this.sendBuffer.length>0&&(this.sendBuffer.forEach(e=>e()),this.sendBuffer=[])}onConnMessage(e){this.decode(e.data,e=>{let{topic:t,event:n,payload:r,ref:i,join_ref:a}=e;if(i&&i===this.pendingHeartbeatRef){let e=this.heartbeatSentAt?Date.now()-this.heartbeatSentAt:void 0;this.clearHeartbeats();try{this.heartbeatCallback(r.status===`ok`?`ok`:`error`,e)}catch(e){this.log(`error`,`error in heartbeat callback`,e)}this.pendingHeartbeatRef=null,this.heartbeatSentAt=null,this.autoSendHeartbeat&&(this.heartbeatTimer=setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs))}this.hasLogger()&&this.log(`receive`,`${r.status||``} ${t} ${n} ${i&&`(`+i+`)`||``}`.trim(),r);for(let e=0;e<this.channels.length;e++){let o=this.channels[e];o.isMember(t,n,r,a)&&o.trigger(n,r,i,a)}this.triggerStateCallbacks(`message`,e)})}triggerStateCallbacks(e,...t){try{this.stateChangeCallbacks[e].forEach(([n,r])=>{try{r(...t)}catch(t){this.log(`error`,`error in ${e} callback`,t)}})}catch(t){this.log(`error`,`error triggering ${e} callbacks`,t)}}leaveOpenTopic(e){let t=this.channels.find(t=>t.topic===e&&(t.isJoined()||t.isJoining()));t&&(this.hasLogger()&&this.log(`transport`,`leaving duplicate topic "${e}"`),t.leave())}},Tl=class e{constructor(t,n){let r=Ol(n);this.presence=new Sl(t.getChannel(),r),this.presence.onJoin((n,r,i)=>{let a=e.onJoinPayload(n,r,i);t.getChannel().trigger(`presence`,a)}),this.presence.onLeave((n,r,i)=>{let a=e.onLeavePayload(n,r,i);t.getChannel().trigger(`presence`,a)}),this.presence.onSync(()=>{t.getChannel().trigger(`presence`,{event:`sync`})})}get state(){return e.transformState(this.presence.state)}static transformState(e){return e=Dl(e),Object.getOwnPropertyNames(e).reduce((t,n)=>{let r=e[n];return t[n]=El(r),t},{})}static onJoinPayload(e,t,n){return{event:`join`,key:e,currentPresences:kl(t),newPresences:El(n)}}static onLeavePayload(e,t,n){return{event:`leave`,key:e,currentPresences:kl(t),leftPresences:El(n)}}};function El(e){return e.metas.map(e=>{let t=Object.getOwnPropertyDescriptors(e),n=Object.defineProperties({},t);return n.presence_ref=n.phx_ref,delete n.phx_ref,delete n.phx_ref_prev,n})}function Dl(e){return JSON.parse(JSON.stringify(e))}function Ol(e){return e?.events&&{events:e.events}}function kl(e){return e?.metas?El(e):[]}var Al;(function(e){e.SYNC=`sync`,e.JOIN=`join`,e.LEAVE=`leave`})(Al||={});var jl=class{get state(){return this.presenceAdapter.state}constructor(e,t){this.channel=e,this.presenceAdapter=new Tl(this.channel.channelAdapter,t)}};function Ml(e){if(e instanceof Error)return e;if(typeof e==`string`)return Error(e);if(e&&typeof e==`object`){let t=e;if(typeof t.code==`number`){let n=typeof t.reason==`string`&&t.reason?` (${t.reason})`:``;return Error(`socket closed: ${t.code}${n}`,{cause:e})}return Error(`channel error: transport failure`,{cause:e})}return Error(`channel error: connection lost`)}var Nl=class{constructor(e,t,n){let r=Pl(n);this.channel=e.getSocket().channel(t,r),this.socket=e}get state(){return this.channel.state}set state(e){this.channel.state=e}get joinedOnce(){return this.channel.joinedOnce}get joinPush(){return this.channel.joinPush}get rejoinTimer(){return this.channel.rejoinTimer}on(e,t){return this.channel.on(e,t)}off(e,t){this.channel.off(e,t)}subscribe(e){return this.channel.join(e)}unsubscribe(e){return this.channel.leave(e)}teardown(){this.channel.teardown()}onClose(e){this.channel.onClose(e)}onError(e){return this.channel.onError(e)}push(e,t,n){let r;try{r=this.channel.push(e,t,n)}catch{throw Error(`tried to push '${e}' to '${this.channel.topic}' before joining. Use channel.subscribe() before pushing events`)}if(this.channel.pushBuffer.length>100){let e=this.channel.pushBuffer.shift();e.cancelTimeout(),this.socket.log(`channel`,`discarded push due to buffer overflow: ${e.event}`,e.payload())}return r}updateJoinPayload(e){let t=this.channel.joinPush.payload();this.channel.joinPush.payload=()=>Object.assign(Object.assign({},t),e)}canPush(){return this.socket.isConnected()&&this.state===Vc.joined}isJoined(){return this.state===Vc.joined}isJoining(){return this.state===Vc.joining}isClosed(){return this.state===Vc.closed}isLeaving(){return this.state===Vc.leaving}updateFilterBindings(e){this.channel.filterBindings=e}updatePayloadTransform(e){this.channel.onMessage=e}getChannel(){return this.channel}};function Pl(e){return{config:Object.assign({broadcast:{ack:!1,self:!1},presence:{key:``,enabled:!1},private:!1},e.config)}}var Fl=/[,()"\\]/,Il=e=>Fl.test(e)||e!==e.trim(),Ll=e=>`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`,Rl=e=>{let t=e===null?`null`:String(e);return Il(t)?Ll(t):t},zl=e=>e===null?`null`:String(e),Bl=(e,t)=>{if(e===`in`){let e=Array.isArray(t)?t:[t];if(e.length===0)throw Error("Realtime `in` filter requires at least one value.");return`in.(${Array.from(new Set(e)).map(e=>Rl(e)).join(`,`)})`}return e===`is`?`is.${zl(t)}`:`${e}.${Rl(t)}`},Vl=class{constructor(){this.filters=[]}add(e,t,n,r=!1){let i=r?`not.`:``;return this.filters.push(`${e}=${i}${Bl(t,n)}`),this}eq(e,t){return this.add(e,`eq`,t)}neq(e,t){return this.add(e,`neq`,t)}gt(e,t){return this.add(e,`gt`,t)}gte(e,t){return this.add(e,`gte`,t)}lt(e,t){return this.add(e,`lt`,t)}lte(e,t){return this.add(e,`lte`,t)}in(e,t){return this.add(e,`in`,t)}like(e,t){return this.add(e,`like`,t)}ilike(e,t){return this.add(e,`ilike`,t)}match(e,t){return this.add(e,`match`,t)}imatch(e,t){return this.add(e,`imatch`,t)}is(e,t){return this.add(e,`is`,t)}isDistinct(e,t){return this.add(e,`isdistinct`,t)}not(e,t,n){return this.add(e,t,n,!0)}build(){return this.filters.join(`,`)}toString(){return this.build()}},Hl;(function(e){e.ALL=`*`,e.INSERT=`INSERT`,e.UPDATE=`UPDATE`,e.DELETE=`DELETE`})(Hl||={});var Ul;(function(e){e.BROADCAST=`broadcast`,e.PRESENCE=`presence`,e.POSTGRES_CHANGES=`postgres_changes`,e.SYSTEM=`system`})(Ul||={});var Wl;(function(e){e.SUBSCRIBED=`SUBSCRIBED`,e.TIMED_OUT=`TIMED_OUT`,e.CLOSED=`CLOSED`,e.CHANNEL_ERROR=`CHANNEL_ERROR`})(Wl||={});var Gl=class e{get state(){return this.channelAdapter.state}set state(e){this.channelAdapter.state=e}get joinedOnce(){return this.channelAdapter.joinedOnce}get timeout(){return this.socket.timeout}get joinPush(){return this.channelAdapter.joinPush}get rejoinTimer(){return this.channelAdapter.rejoinTimer}constructor(e,t={config:{}},n){if(this.topic=e,this.params=t,this.socket=n,this.bindings={},this.subTopic=e.replace(/^realtime:/i,``),this.params.config=Object.assign({broadcast:{ack:!1,self:!1},presence:{key:``,enabled:!1},private:!1},t.config),this.channelAdapter=new Nl(this.socket.socketAdapter,e,this.params),this.presence=new jl(this),this._onClose(()=>{this.socket._remove(this)}),this._updateFilterTransform(),this.broadcastEndpointURL=tl(this.socket.socketAdapter.endPointURL()),this.private=this.params.config.private||!1,!this.private&&this.params.config?.broadcast?.replay)throw Error(`tried to use replay on public channel '${this.topic}'. It must be a private channel.`)}subscribe(e,t=this.timeout){if(this.socket.isConnected()||this.socket.connect(),this.channelAdapter.isClosed()){let{config:{broadcast:n,presence:r,private:i}}=this.params,a=this.bindings.postgres_changes?.map(e=>e.filter)??[],o=!!this.bindings[Ul.PRESENCE]&&this.bindings[Ul.PRESENCE].length>0||this.params.config.presence?.enabled===!0,s={},c={broadcast:n,presence:Object.assign(Object.assign({},r),{enabled:o}),postgres_changes:a,private:i};this.socket.accessTokenValue&&(s.access_token=this.socket.accessTokenValue),this._onError(t=>{e?.(Wl.CHANNEL_ERROR,Ml(t))}),this._onClose(()=>e?.(Wl.CLOSED)),this.updateJoinPayload(Object.assign({config:c},s)),this._updateFilterMessage(),this.channelAdapter.subscribe(t).receive(`ok`,async({postgres_changes:t})=>{if(this.socket._isManualToken()||this.socket.setAuth(),t===void 0){e?.(Wl.SUBSCRIBED);return}this._updatePostgresBindings(t,e)}).receive(`error`,t=>{this.state=Vc.errored;let n=Object.values(t).join(`, `)||`error`;e?.(Wl.CHANNEL_ERROR,Error(n,{cause:t}))}).receive(`timeout`,()=>{e?.(Wl.TIMED_OUT)})}return this}_updatePostgresBindings(t,n){let r=this.bindings.postgres_changes,i=r?.length??0,a=[];for(let o=0;o<i;o++){let i=r[o],{filter:{event:s,schema:c,table:l,filter:u}}=i,d=t&&t[o];if(d&&d.event===s&&e.isFilterValueEqual(d.schema,c)&&e.isFilterValueEqual(d.table,l)&&e.isFilterValueEqual(d.filter,u))a.push(Object.assign(Object.assign({},i),{id:d.id}));else{this.unsubscribe(),this.state=Vc.errored,n?.(Wl.CHANNEL_ERROR,Error(`mismatch between server and client bindings for postgres changes`));return}}this.bindings.postgres_changes=a,this.state!=Vc.errored&&n&&n(Wl.SUBSCRIBED)}presenceState(){return this.presence.state}async track(e,t={}){return await this.send({type:`presence`,event:`track`,payload:e},t)}async untrack(e={}){return await this.send({type:`presence`,event:`untrack`},e)}on(e,t,n){let r=this.channelAdapter.isJoined()||this.channelAdapter.isJoining(),i=e===Ul.PRESENCE||e===Ul.POSTGRES_CHANGES;if(r&&i)throw this.socket.log(`channel`,`cannot add \`${e}\` callbacks for ${this.topic} after \`subscribe()\`.`),Error(`cannot add \`${e}\` callbacks for ${this.topic} after \`subscribe()\`.`);return this._on(e,t,n)}async httpSend(e,t,n={}){if(t==null)return Promise.reject(Error(`Payload is required for httpSend()`));let r=t instanceof ArrayBuffer||ArrayBuffer.isView(t),i={apikey:this.socket.apiKey?this.socket.apiKey:``,"Content-Type":r?`application/octet-stream`:`application/json`};this.socket.accessTokenValue&&(i.Authorization=`Bearer ${this.socket.accessTokenValue}`);let a=new URL(this.broadcastEndpointURL);a.pathname+=`/${encodeURIComponent(this.subTopic)}/events/${encodeURIComponent(e)}`,this.private&&a.searchParams.set(`private`,`true`);let o={method:`POST`,headers:i,body:r?t:JSON.stringify(t)},s=await this._fetchWithTimeout(a.toString(),o,n.timeout??this.timeout);if(s.status===202)return{success:!0};if(s.status===404)return Promise.reject(Error(`httpSend() requires Realtime server v2.97.0 or newer; the endpoint returned 404. Update your Supabase CLI to a recent version, or upgrade the Realtime server in your self-hosted setup. See https://github.com/supabase/supabase-js/blob/master/packages/core/realt
13ime-js/migrations/httpsend-server-version.md`));let c=s.statusText;try{let e=await s.json();c=e.error||e.message||c}catch{}return Promise.reject(Error(c))}async send(e,t={}){if(!this.channelAdapter.canPush()&&e.type===`broadcast`){console.warn(`Realtime send() is automatically falling back to REST API. This behavior will be deprecated in the future. Please use httpSend() explicitly for REST delivery.`);let{event:n,payload:r}=e,i={apikey:this.socket.apiKey?this.socket.apiKey:``,"Content-Type":`application/json`};this.socket.accessTokenValue&&(i.Authorization=`Bearer ${this.socket.accessTokenValue}`);let a={method:`POST`,headers:i,body:JSON.stringify({messages:[{topic:this.subTopic,event:n,payload:r,private:this.private}]})};try{let e=await this._fetchWithTimeout(this.broadcastEndpointURL,a,t.timeout??this.timeout);return await e.body?.cancel(),e.ok?`ok`:`error`}catch(e){return e instanceof Error&&e.name===`AbortError`?`timed out`:`error`}}return new Promise(n=>{let r=this.channelAdapter.push(e.type,e,t.timeout||this.timeout);e.type===`broadcast`&&!this.params?.config?.broadcast?.ack&&n(`ok`),r.receive(`ok`,()=>n(`ok`)),r.receive(`error`,()=>n(`error`)),r.receive(`timeout`,()=>n(`timed out`))})}updateJoinPayload(e){this.channelAdapter.updateJoinPayload(e)}async unsubscribe(e=this.timeout){return new Promise(t=>{this.channelAdapter.unsubscribe(e).receive(`ok`,()=>t(`ok`)).receive(`timeout`,()=>t(`timed out`)).receive(`error`,()=>t(`error`))})}teardown(){this.channelAdapter.teardown()}async _fetchWithTimeout(e,t,n){let r=new AbortController,i=setTimeout(()=>r.abort(),n),a=await this.socket.fetch(e,Object.assign(Object.assign({},t),{signal:r.signal}));return clearTimeout(i),a}_on(e,t,n){let r=e.toLocaleLowerCase(),i=t?.filter;(i instanceof Vl||typeof i==`object`&&i&&typeof i.build==`function`)&&(t=Object.assign(Object.assign({},t),{filter:i.build()}));let a=this.channelAdapter.on(e,n),o={type:r,filter:t,callback:n,ref:a};return this.bindings[r]?this.bindings[r].push(o):this.bindings[r]=[o],this._updateFilterMessage(),this}_onClose(e){this.channelAdapter.onClose(e)}_onError(e){this.channelAdapter.onError(e)}_updateFilterMessage(){this.channelAdapter.updateFilterBindings((e,t,n)=>{let r=e.event.toLocaleLowerCase();if(this._notThisChannelEvent(r,n))return!1;let i=this.bindings[r]?.find(t=>t.ref===e.ref);if(!i)return!0;if([`broadcast`,`presence`,`postgres_changes`].includes(r))if(`id`in i){let e=i.id,n=i.filter?.event;return e&&t.ids?.includes(e)&&(n===`*`||n?.toLocaleLowerCase()===t.data?.type.toLocaleLowerCase())}else{let e=(i?.filter?.event)?.toLocaleLowerCase();return e===`*`||e===(t?.event)?.toLocaleLowerCase()}return i.type.toLocaleLowerCase()===r})}_notThisChannelEvent(e,t){let{close:n,error:r,leave:i,join:a}=Hc;return t&&[n,r,i,a].includes(e)&&t!==this.joinPush.ref}_updateFilterTransform(){this.channelAdapter.updatePayloadTransform((e,t,n)=>{if(typeof t==`object`&&`ids`in t){let e=t.data,{schema:n,table:r,commit_timestamp:i,type:a,errors:o}=e;return Object.assign(Object.assign({},{schema:n,table:r,commit_timestamp:i,eventType:a,new:{},old:{},errors:o}),this._getPayloadRecords(e))}return t})}copyBindings(e){if(this.joinedOnce)throw Error(`cannot copy bindings into joined channel`);for(let t in e.bindings)for(let n of e.bindings[t])this._on(n.type,n.filter,n.callback)}static isFilterValueEqual(e,t){return(e??void 0)===(t??void 0)}_getPayloadRecords(e){let t={new:{},old:{}};return(e.type===`INSERT`||e.type===`UPDATE`)&&(t.new=Kc(e.columns,e.record)),(e.type===`UPDATE`||e.type===`DELETE`)&&(t.old=Kc(e.columns,e.old_record)),t}},Kl=class{constructor(e,t){this.socket=new wl(e,t)}get timeout(){return this.socket.timeout}get endPoint(){return this.socket.endPoint}get transport(){return this.socket.transport}get heartbeatIntervalMs(){return this.socket.heartbeatIntervalMs}get heartbeatCallback(){return this.socket.heartbeatCallback}set heartbeatCallback(e){this.socket.heartbeatCallback=e}get heartbeatTimer(){return this.socket.heartbeatTimer}get pendingHeartbeatRef(){return this.socket.pendingHeartbeatRef}get reconnectTimer(){return this.socket.reconnectTimer}get vsn(){return this.socket.vsn}get encode(){return this.socket.encode}get decode(){return this.socket.decode}get reconnectAfterMs(){return this.socket.reconnectAfterMs}get sendBuffer(){return this.socket.sendBuffer}get stateChangeCallbacks(){return this.socket.stateChangeCallbacks}connect(){this.socket.connect()}disconnect(e,t,n,r=1e4){return new Promise(i=>{setTimeout(()=>i(`timeout`),r),this.socket.disconnect(()=>{e(),i(`ok`)},t,n)})}push(e){this.socket.push(e)}log(e,t,n){this.socket.log(e,t,n)}makeRef(){return this.socket.makeRef()}onOpen(e){this.socket.onOpen(e)}onClose(e){this.socket.onClose(e)}onError(e){this.socket.onError(e)}onMessage(e){this.socket.onMessage(e)}isConnected(){return this.socket.isConnected()}isConnecting(){return this.socket.connectionState()==Uc.connecting}isDisconnecting(){return this.socket.connectionState()==Uc.closing}connectionState(){return this.socket.connectionState()}endPointURL(){return this.socket.endPointURL()}sendHeartbeat(){this.socket.sendHeartbeat()}getSocket(){return this.socket}},B={HEARTBEAT_INTERVAL:25e3,RECONNECT_DELAY:10,HEARTBEAT_TIMEOUT_FALLBACK:100},V=[1e3,2e3,5e3,1e4],ql=1e4;function Jl(){let e=new Map;return{get length(){return e.size},clear(){e.clear()},getItem(t){return e.has(t)?e.get(t):null},key(t){return Array.from(e.keys())[t]??null},removeItem(t){e.delete(t)},setItem(t,n){e.set(t,String(n))}}}function Yl(){try{if(typeof globalThis<`u`&&globalThis.sessionStorage)return globalThis.sessionStorage}catch{}return Jl()}var Xl=`
14  addEventListener("message", (e) => {
15    if (e.data.event === "start") {
16      setInterval(() => postMessage({ event: "keepAlive" }), e.data.interval);
17    }
18  });`,Zl=class{get endPoint(){return this.socketAdapter.endPoint}get timeout(){return this.socketAdapter.timeout}get transport(){return this.socketAdapter.transport}get heartbeatCallback(){return this.socketAdapter.heartbeatCallback}get heartbeatIntervalMs(){return this.socketAdapter.heartbeatIntervalMs}get heartbeatTimer(){return this.worker?this._workerHeartbeatTimer:this.socketAdapter.heartbeatTimer}get pendingHeartbeatRef(){return this.worker?this._pendingWorkerHeartbeatRef:this.socketAdapter.pendingHeartbeatRef}get reconnectTimer(){return this.socketAdapter.reconnectTimer}get vsn(){return this.socketAdapter.vsn}get encode(){return this.socketAdapter.encode}get decode(){return this.socketAdapter.decode}get reconnectAfterMs(){return this.socketAdapter.reconnectAfterMs}get sendBuffer(){return this.socketAdapter.sendBuffer}get stateChangeCallbacks(){return this.socketAdapter.stateChangeCallbacks}constructor(e,t){if(this.channels=[],this.accessTokenValue=null,this.accessToken=null,this.apiKey=null,this.httpEndpoint=``,this.headers={},this.params={}
18,this.ref=0,this.serializer=new Wc,this._manuallySetToken=!1,this._authPromise=null,this._workerHeartbeatTimer=void 0,this._pendingWorkerHeartbeatRef=null,this._pendingDisconnectTimer=null,this._disconnectOnEmptyChannelsAfterMs=0,this._resolveFetch=e=>e?(...t)=>e(...t):(...e)=>fetch(...e),!t?.params?.apikey)throw Error(`API key is required to connect to Realtime`);this.apiKey=t.params.apikey;let n=this._initializeOptions(t);this.socketAdapter=new Kl(e,n),this.httpEndpoint=tl(e),this.fetch=this._resolveFetch(t?.fetch)}connect(){if(!(this.isConnecting()||this.isDisconnecting()||this.isConnected())){this.accessToken&&!this._authPromise&&this._setAuthSafely(`connect`),this._setupConnectionHandlers();try{this.socketAdapter.connect()}catch(e){let t=e.message;throw Error(`WebSocket not available: ${t}`)}this._handleNodeJsRaceCondition()}}endpointURL(){return this.socketAdapter.endPointURL()}async disconnect(e,t){return this._cancelPendingDisconnect(),this.isDisconnecting()?`ok`:await this.socketAdapter.disconnect(()=>{clearInterval(this._workerHeartbeatTimer),this._terminateWorker()},e,t)}getChannels(){return this.channels}async removeChannel(e){let t=await e.unsubscribe();return t===`ok`&&e.teardown(),t}async removeAllChannels(){let e=this.channels.map(async e=>{let t=await e.unsubscribe();return e.teardown(),t}),t=await Promise.all(e);return await this.disconnect(),t}log(e,t,n){this.socketAdapter.log(e,t,n)}connectionState(){return this.socketAdapter.connectionState()||Uc.closed}isConnected(){return this.socketAdapter.isConnected()}isConnecting(){return this.socketAdapter.isConnecting()}isDisconnecting(){return this.socketAdapter.isDisconnecting()}channel(e,t={config:{}}){let n=`realtime:${e}`,r=this.getChannels().find(e=>e.topic===n);if(r)return r;{let n=new Gl(`realtime:${e}`,t,this);return this._cancelPendingDisconnect(),this.channels.push(n),n}}push(e){this.socketAdapter.push(e)}async setAuth(e=null){this._authPromise=this._performAuth(e);try{await this._authPromise}finally{this._authPromise=null}}_isManualToken(){return this._manuallySetToken}async sendHeartbeat(){this.socketAdapter.sendHeartbeat()}onHeartbeat(e){this.socketAdapter.heartbeatCallback=this._wrapHeartbeatCallback(e)}_makeRef(){return this.socketAdapter.makeRef()}_remove(e){this.channels=this.channels.filter(t=>t.topic!==e.topic),this.channels.length===0&&(this.log(`transport`,`no channels remaining, scheduling disconnect`),this._schedulePendingDisconnect())}_schedulePendingDisconnect(){if(this._cancelPendingDisconnect(),this._disconnectOnEmptyChannelsAfterMs===0){this.log(`transport`,`disconnecting immediately - no channels`),this.disconnect();return}
18this._pendingDisconnectTimer=setTimeout(()=>{this._pendingDisconnectTimer=null,this.channels.length===0&&(this.log(`transport`,`deferred disconnect fired - no channels, disconnecting`),this.disconnect())},this._disconnectOnEmptyChannelsAfterMs),this.log(`transport`,`deferred disconnect scheduled in ${this._disconnectOnEmptyChannelsAfterMs}ms`)}_cancelPendingDisconnect(){this._pendingDisconnectTimer!==null&&(this.log(`transport`,`pending disconnect cancelled - channel activity detected`),clearTimeout(this._pendingDisconnectTimer),this._pendingDisconnectTimer=null)}async _performAuth(e=null){let t,n=!1;if(e)t=e,n=!0;else if(this.accessToken)try{t=await this.accessToken()}catch(e){this.log(`error`,`Error fetching access token from callback`,e),t=this.accessTokenValue}else t=this.accessTokenValue;n?this._manuallySetToken=!0:this.accessToken&&(this._manuallySetToken=!1),this.accessTokenValue!=t&&(this.accessTokenValue=t,this.channels.forEach(e=>{let n={access_token:t,version:Ic};t&&e.updateJoinPayload(n),e.joinedOnce&&e.channelAdapter.isJoined()&&e.channelAdapter.push(Hc.access_token,{access_token:t})}))}async _waitForAuthIfNeeded(){this._authPromise&&await this._authPromise}_setAuthSafely(e=`general`){this._isManualToken()||this.setAuth().catch(t=>{this.log(`error`,`Error setting auth in ${e}`,t)})}_setupConnectionHandlers(){this.socketAdapter.onOpen(()=>{(this._authPromise||(this.accessToken&&!this.accessTokenValue?this.setAuth():Promise.resolve())).catch(e=>{this.log(`error`,`error waiting for auth on connect`,e)}),this.worker&&!this.workerRef&&this._startWorkerHeartbeat()}),this.socketAdapter.onClose(()=>{this.worker&&this.workerRef&&this._terminateWorker()}),this.socketAdapter.onMessage(e=>{e.ref&&e.ref===this._pendingWorkerHeartbeatRef&&(this._pendingWorkerHeartbeatRef=null)})}_handleNodeJsRaceCondition(){this.socketAdapter.isConnected()&&this.socketAdapter.getSocket().onConnOpen()}_wrapHeartbeatCallback(e){return(t,n)=>{t!==`disconnected`&&(t==`sent`&&this._setAuthSafely(),e&&e(t,n))}}_startWorkerHeartbeat(){this.workerUrl?this.log(`worker`,`starting worker for from ${this.workerUrl}`):this.log(`worker`,`starting default worker`);let e=this._workerObjectUrl(this.workerUrl);this.workerRef=new Worker(e),this.workerRef.onerror=e=>{this.log(`worker`,`worker error`,e.message),this._terminateWorker(),this.disconnect()},this.workerRef.onmessage=e=>{e.data.event===`keepAlive`&&this.sendHeartbeat()},this.workerRef.postMessage({event:`start`,interval:this.heartbeatIntervalMs})}_terminateWorker(){this.workerRef&&=(this.log(`worker`,`terminating worker`),this.workerRef.terminate(),void 0)}_workerObjectUrl(e){let t;if(e)t=e;else{let e=new Blob([Xl],{type:`application/javascript`});t=URL.createObjectURL(e)}return t}_initializeOptions(e){this.worker=e?.worker??!1,this.accessToken=e?.accessToken??null;let t={};t.timeout=e?.timeout??Bc,t.heartbeatIntervalMs=e?.heartbeatIntervalMs??B.HEARTBEAT_INTERVAL,this._disconnectOnEmptyChannelsAfterMs=e?.disconnectOnEmptyChannelsAfterMs??2*(e?.heartbeatIntervalMs??B.HEARTBEAT_INTERVAL),t.transport=e?.transport??Fc.getWebSocketConstructor(),t.params=e?.params,t.logger=e?.logger,t.heartbeatCallback=this._wrapHeartbeatCallback(e?.heartbeatCallback),t.sessionStorage=e?.sessionStorage??Yl(),t.reconnectAfterMs=e?.reconnectAfterMs??(e=>V[e-1]||ql);let n,r,i=e?.vsn??zc;switch(i){case Lc:n=(e,t)=>t(JSON.stringify(e)),r=(e,t)=>t(JSON.parse(e));break;case Rc:n=this.serializer.encode.bind(this.serializer),r=this.serializer.decode.bind(this.serializer);break;default:throw Error(`Unsupported serializer version: ${t.vsn}`)}if(t.vsn=i,t.encode=e?.encode??n,t.decode=e?.decode??r,t.beforeReconnect=this._reconnectAuth.bind(this),(e?.logLevel||e?.log_level)&&(this.logLevel=e.logLevel||e.log_level,t.params=Object.assign(Object.assign({},t.params),{log_level:this.logLevel})),this.worker){if(typeof window<`u`&&!window.Worker)throw Error(`Web Worker is not supported`);this.workerUrl=e?.workerUrl,t.autoSendHeartbeat=!this.worker}return t}async _reconnectAuth(){await this._waitForAuthIfNeeded(),this.isConnected()||this.connect()}}
vendor: 4,836 bytes, line 18
18,Ql=class extends Error{constructor(e,t){super(e),this.name=`IcebergError`,this.status=t.status,this.icebergType=t.icebergType,this.icebergCode=t.icebergCode,this.details=t.details,this.isCommitStateUnknown=t.icebergType===`CommitStateUnknownException`||[500,502,504].includes(t.status)&&t.icebergType?.includes(`CommitState`)===!0}isNotFound(){return this.status===404}isConflict(){return this.status===409}isAuthenticationTimeout(){return this.status===419}};function $l(e,t,n){let r=new URL(t,e);if(n)for(let[e,t]of Object.entries(n))t!==void 0&&r.searchParams.set(e,t);return r.toString()}async function eu(e){return!e||e.type===`none`?{}:e.type===`bearer`?{Authorization:`Bearer ${e.token}`}:e.type===`header`?{[e.name]:e.value}:e.type===`custom`?await e.getHeaders():{}}function tu(e){let t=e.fetchImpl??globalThis.fetch;return{async request({method:n,path:r,query:i,body:a,headers:o}){let s=$l(e.baseUrl,r,i),c=await eu(e.auth),l=await t(s,{method:n,headers:{...a?{"Content-Type":`application/json`}:{},...c,...o},body:a?JSON.stringify(a):void 0}),u=await l.text(),d=(l.headers.get(`content-type`)||``).includes(`application/json`),f=d&&u?JSON.parse(u):u;if(!l.ok){let e=d?f:void 0,t=e?.error;throw new Ql(t?.message??`Request failed with status ${l.status}`,{status:l.status,icebergType:t?.type,icebergCode:t?.code,details:e})}return{status:l.status,headers:l.headers,data:f}}}}function nu(e){return e.join(`�`)}var ru=class{constructor(e,t=``){this.client=e,this.prefix=t}async listNamespaces(e){let t=e?{parent:nu(e.namespace)}:void 0;return(await this.client.request({method:`GET`,path:`${this.prefix}/namespaces`,query:t})).data.namespaces.map(e=>({namespace:e}))}async createNamespace(e,t){let n={namespace:e.namespace,properties:t?.properties};return(await this.client.request({method:`POST`,path:`${this.prefix}/namespaces`,body:n})).data}async dropNamespace(e){await this.client.request({method:`DELETE`,path:`${this.prefix}/namespaces/${nu(e.namespace)}`})}async loadNamespaceMetadata(e){return{properties:(await this.client.request({method:`GET`,path:`${this.prefix}/namespaces/${nu(e.namespace)}`})).data.properties}}async namespaceExists(e){try{return await this.client.request({method:`HEAD`,path:`${this.prefix}/namespaces/${nu(e.namespace)}`}),!0}catch(e){if(e instanceof Ql&&e.status===404)return!1;throw e}}async createNamespaceIfNotExists(e,t){try{return await this.createNamespace(e,t)}catch(e){if(e instanceof Ql&&e.status===409)return;throw e}}};function iu(e){return e.join(`�`)}var au=class{constructor(e,t=``,n){this.client=e,this.prefix=t,this.accessDelegation=n}async listTables(e){return(await this.client.request({method:`GET`,path:`${this.prefix}/namespaces/${iu(e.namespace)}/tables`})).data.identifiers}async createTable(e,t){let n={};return this.accessDelegation&&(n[`X-Iceberg-Access-Delegation`]=this.accessDelegation),(await this.client.request({method:`POST`,path:`${this.prefix}/namespaces/${iu(e.namespace)}/tables`,body:t,headers:n})).data.metadata}async updateTable(e,t){let n=await this.client.request({method:`POST`,path:`${this.prefix}/namespaces/${iu(e.namespace)}/tables/${e.name}`,body:t});return{"metadata-location":n.data[`metadata-location`],metadata:n.data.metadata}}async dropTable(e,t){await this.client.request({method:`DELETE`,path:`${this.prefix}/namespaces/${iu(e.namespace)}/tables/${e.name}`,query:{purgeRequested:String(t?.purge??!1)}})}async loadTable(e){let t={};return this.accessDelegation&&(t[`X-Iceberg-Access-Delegation`]=this.accessDelegation),(await this.client.request({method:`GET`,path:`${this.prefix}/namespaces/${iu(e.namespace)}/tables/${e.name}`,headers:t})).data.metadata}async tableExists(e){let t={};this.accessDelegation&&(t[`X-Iceberg-Access-Delegation`]=this.accessDelegation);try{return await this.client.request({method:`HEAD`,path:`${this.prefix}/namespaces/${iu(e.namespace)}/tables/${e.name}`,headers:t}),!0}catch(e){if(e instanceof Ql&&e.status===404)return!1;throw e}}async createTableIfNotExists(e,t){try{return await this.createTable(e,t)}catch(n){if(n instanceof Ql&&n.status===409)return await this.loadTable({namespace:e.namespace,name:t.name});throw n}}},ou=class{constructor(e){let t=`v1`;e.catalogName&&(t+=`/${e.catalogName}`);let n=e.baseUrl.endsWith(`/`)?e.baseUrl:`${e.baseUrl}/`;this.client=tu({baseUrl:n,auth:e.auth,fetchImpl:e.fetch}),this.accessDelegation=e.accessDelegation?.join(`,`),this.namespaceOps=new ru(this.client,t),this.tableOps=new au(this.client,t,this.accessDelegation)}async listNamespaces(e){return this.namespaceOps.listNamespaces(e)}async createNamespace(e,t){return this.namespaceOps.createNamespace(e,t)}async dropNamespace(e){await this.namespaceOps.dropNamespace(e)}async loadNamespaceMetadata(e){return this.namespaceOps.loadNamespaceMetadata(e)}async listTables(e){return this.tableOps.listTables(e)}
18async createTable(e,t){return this.tableOps.createTable(e,t)}async updateTable(e,t){return this.tableOps.updateTable(e,t)}async dropTable(e,t){await this.tableOps.dropTable(e,t)}async loadTable(e){return this.tableOps.loadTable(e)}async namespaceExists(e){return this.namespaceOps.namespaceExists(e)}async tableExists(e){return this.tableOps.tableExists(e)}async createNamespaceIfNotExists(e,t){return this.namespaceOps.createNamespaceIfNotExists(e,t)}async createTableIfNotExists(e,t){return this.tableOps.createTableIfNotExists(e,t)}};function su(e){"@babel/helpers - typeof";return su=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},su(e)}function cu(e,t){if(su(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(su(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function lu(e){var t=cu(e,`string`);return su(t)==`symbol`?t:t+``}function uu(e,t,n){return(t=lu(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function du(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function H(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?du(Object(n),!0).forEach(function(t){uu(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):du(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var fu=class extends Error{constructor(e,t=`storage`,n,r){super(e),this.__isStorageError=!0,this.namespace=t,this.name=t===`vectors`?`StorageVectorsError`:`StorageError`,this.status=n,this.statusCode=r}toJSON(){return{name:this.name,message:this.message,status:this.status,statusCode:this.statusCode}}};function pu(e){return typeof e==`object`&&!!e&&`__isStorageError`in e}var mu=class extends fu{constructor(e,t,n,r=`storage`){super(e,r,t,n),this.name=r===`vectors`?`StorageVectorsApiError`:`StorageApiError`,this.status=t,this.statusCode=n}toJSON(){return H({},super.toJSON())}},hu=class extends fu{constructor(e,t,n=`storage`){super(e,n),this.name=n===`vectors`?`StorageVectorsUnknownError`:`StorageUnknownError`,this.originalError=t}};function gu(e,t,n){let r=H({},e),i=t.toLowerCase();for(let e of Object.keys(r))e.toLowerCase()===i&&delete r[e];return r[i]=n,r}function _u(e){let t={};for(let[n,r]of Object.entries(e))t[n.toLowerCase()]=r;return t}var vu=e=>e?(...t)=>e(...t):(...e)=>fetch(...e),yu=e=>{if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},bu=e=>{if(Array.isArray(e))return e.map(e=>bu(e));if(typeof e==`function`||e!==Object(e))return e;let t={};return Object.entries(e).forEach(([e,n])=>{let r=e.replace(/([-_][a-z])/gi,e=>e.toUpperCase().replace(/[-_]/g,``));t[r]=bu(n)}),t},xu=e=>!e||typeof e!=`string`||e.length===0||e.length>100||e.trim()!==e||e.includes(`/`)||e.includes(`\\`)?!1:/^[\w!.\*'() &$@=;:+,?-]+$/.test(e),Su=e=>e.split(`/`).map(encodeURIComponent).join(`/`),Cu=e=>{if(typeof e==`object`&&e){let t=e;if(typeof t.msg==`string`)return t.msg;if(typeof t.message==`string`)return t.message;if(typeof t.error_description==`string`)return t.error_description;if(typeof t.error==`string`)return t.error;if(typeof t.error==`object`&&t.error!==null){let e=t.error;if(typeof e.message==`string`)return e.message}}return JSON.stringify(e)},wu=async(e,t,n,r)=>{if(typeof e==`object`&&e&&`json`in e&&typeof e.json==`function`){let n=e,i=parseInt(String(n.status),10);Number.isFinite(i)||(i=500),n.json().then(e=>{let n=e?.statusCode||e?.code||i+``;t(new mu(Cu(e),i,n,r))}).catch(()=>{let e=i+``;t(new mu(n.statusText||`HTTP ${i} error`,i,e,r))})}else t(new hu(Cu(e),e,r))},Tu=(e,t,n,r)=>{let i={method:e,headers:t?.headers||{}};if(e===`GET`||e===`HEAD`||!r)return H(H({},i),n);if(yu(r)){let e=t?.headers||{},n;for(let[t,r]of Object.entries(e))t.toLowerCase()===`content-type`&&(n=r);i.headers=gu(e,`Content-Type`,n??`application/json`),i.body=JSON.stringify(r)}else i.body=r;return t?.duplex&&(i.duplex=t.duplex),H(H({},i),n)};async function Eu(e,t,n,r,i,a,o){return new Promise((s,c)=>{e(n,Tu(t,r,i,a)).then(e=>{if(!e.ok)throw e;if(r?.noResolveJson)return e;if(o===`vectors`){let t=e.headers.get(`content-type`);if(e.headers.get(`content-length`)===`0`||e.status===204||!t||!t.includes(`application/json`))return{}}return e.json()}).then(e=>s(e)).catch(e=>wu(e,c,r,o))})}function Du(e=`storage`){return{get:async(t,n,r,i)=>Eu(t,`GET`,n,r,i,void 0,e),post:async(t,n,r,i,a)=>Eu(t,`POST`,n,i,a,r,e),put:async(t,n,r,i,a)=>Eu(t,`PUT`,n,i,a,r,e),head:async(t,n,r,i)=>Eu(t,`HEAD`,n,H(H({},r),{},{noResolveJson:!0}),i,void 0,e),remove:async(t,n,r,i,a)=>Eu(t,`DELETE`,n,i,a,r,e)}}var{get:Ou,post:ku,put:Au,head:ju,remove:Mu}=Du(`storage`),Nu=Du(`vectors`),Pu=class{constructor(e,t={},n,r=`storage`){this.shouldThrowOnError=!1,this.url=e,this.headers=_u(t),this.fetch=vu(n),this.namespace=r}throwOnError(){return this.shouldThrowOnError=!0,this}setHeader(e,t){return this.headers=gu(this.headers,e,t),this}async handleOperation(e){var t=this;try{return{data:await e(),error:null}}catch(e){if(t.shouldThrowOnError)throw e;if(pu(e))return{data:null,error:e};throw e}}},Fu=Symbol.toStringTag,Iu=class{constructor(e,t){this.downloadFn=e,this.shouldThrowOnError=t,this[Fu]=`StreamDownloadBuilder`,this.promise=null}
18then(e,t){return this.getPromise().then(e,t)}catch(e){return this.getPromise().catch(e)}finally(e){return this.getPromise().finally(e)}getPromise(){return this.promise||=this.execute(),this.promise}async execute(){var e=this;try{return{data:(await e.downloadFn()).body,error:null}}catch(t){if(e.shouldThrowOnError)throw t;if(pu(t))return{data:null,error:t};throw t}}},Lu=Symbol.toStringTag,Ru=class{constructor(e,t){this.downloadFn=e,this.shouldThrowOnError=t,this[Lu]=`BlobDownloadBuilder`,this.promise=null}asStream(){return new Iu(this.downloadFn,this.shouldThrowOnError)}then(e,t){return this.getPromise().then(e,t)}catch(e){return this.getPromise().catch(e)}finally(e){return this.getPromise().finally(e)}getPromise(){return this.promise||=this.execute(),this.promise}async execute(){var e=this;try{return{data:await(await e.downloadFn()).blob(),error:null}}catch(t){if(e.shouldThrowOnError)throw t;if(pu(t))return{data:null,error:t};throw t}}},zu={limit:100,offset:0,sortBy:{column:`name`,order:`asc`}},Bu={cacheControl:`3600`,contentType:`text/plain;charset=UTF-8`,upsert:!1},Vu=class extends Pu{constructor(e,t={},n,r){super(e,t,r,`storage`),this.bucketId=n}async uploadOrUpdate(e,t,n,r){var i=this;return i.handleOperation(async()=>{let a,o=H(H({},Bu),r),s=H(H({},i.headers),e===`POST`&&{"x-upsert":String(o.upsert)}),c=o.metadata;if(typeof Blob<`u`&&n instanceof Blob?(a=new FormData,a.append(`cacheControl`,o.cacheControl),c&&a.append(`metadata`,i.encodeMetadata(c)),a.append(``,n)):typeof FormData<`u`&&n instanceof FormData?(a=n,a.has(`cacheControl`)||a.append(`cacheControl`,o.cacheControl),c&&!a.has(`metadata`)&&a.append(`metadata`,i.encodeMetadata(c))):(a=n,s[`cache-control`]=`max-age=${o.cacheControl}`,s[`content-type`]=o.contentType,c&&(s[`x-metadata`]=i.toBase64(i.encodeMetadata(c))),(typeof ReadableStream<`u`&&a instanceof ReadableStream||a&&typeof a==`object`&&`pipe`in a&&typeof a.pipe==`function`)&&!o.duplex&&(o.duplex=`half`)),r?.headers)for(let[e,t]of Object.entries(r.headers))s=gu(s,e,t);let l=i._removeEmptyFolders(t),u=i._getFinalPath(l),d=await(e==`PUT`?Au:ku)(i.fetch,`${i.url}/object/${u}`,a,H({headers:s},o?.duplex?{duplex:o.duplex}:{}));return{path:l,id:d.Id,fullPath:d.Key}})}async upload(e,t,n){return this.uploadOrUpdate(`POST`,e,t,n)}async uploadToSignedUrl(e,t,n,r){var i=this;let a=i._removeEmptyFolders(e),o=i._getFinalPath(a),s=new URL(i.url+`/object/upload/sign/${o}`);return s.searchParams.set(`token`,t),i.handleOperation(async()=>{let e,t=H(H({},Bu),r),o=H(H({},i.headers),{"x-upsert":String(t.upsert)}),c=t.metadata;if(typeof Blob<`u`&&n instanceof Blob?(e=new FormData,e.append(`cacheControl`,t.cacheControl),c&&e.append(`metadata`,i.encodeMetadata(c)),e.append(``,n)):typeof FormData<`u`&&n instanceof FormData?(e=n,e.has(`cacheControl`)||e.append(`cacheControl`,t.cacheControl),c&&!e.has(`metadata`)&&e.append(`metadata`,i.encodeMetadata(c))):(e=n,o[`cache-control`]=`max-age=${t.cacheControl}`,o[`content-type`]=t.contentType,c&&(o[`x-metadata`]=i.toBase64(i.encodeMetadata(c))),(typeof ReadableStream<`u`&&e instanceof ReadableStream||e&&typeof e==`object`&&`pipe`in e&&typeof e.pipe==`function`)&&!t.duplex&&(t.duplex=`half`)),r?.headers)for(let[e,t]of Object.entries(r.headers))o=gu(o,e,t);return{path:a,fullPath:(await Au(i.fetch,s.toString(),e,H({headers:o},t?.duplex?{duplex:t.duplex}:{}))).Key}})}async createSignedUploadUrl(e,t){var n=this;return n.handleOperation(async()=>{let r=n._getFinalPath(e),i=H({},n.headers);t?.upsert&&(i[`x-upsert`]=`true`);let a=await ku(n.fetch,`${n.url}/object/upload/sign/${r}`,{},{headers:i}),o=new URL(n.url+a.url),s=o.searchParams.get(`token`);if(!s)throw new fu(`No token returned by API`);return{signedUrl:o.toString(),path:e,token:s}})}async update(e,t,n){return this.uploadOrUpdate(`PUT`,e,t,n)}async move(e,t,n){var r=this;return r.handleOperation(async()=>await ku(r.fetch,`${r.url}/object/move`,{bucketId:r.bucketId,sourceKey:e,destinationKey:t,de
18stinationBucket:n?.destinationBucket},{headers:r.headers}))}async copy(e,t,n){var r=this;return r.handleOperation(async()=>({path:(await ku(r.fetch,`${r.url}/object/copy`,{bucketId:r.bucketId,sourceKey:e,destinationKey:t,destinationBucket:n?.destinationBucket},{headers:r.headers})).Key}))}async createSignedUrl(e,t,n){var r=this;return r.handleOperation(async()=>{let i=r._getFinalPath(e),a=typeof n?.transform==`object`&&n.transform!==null&&Object.keys(n.transform).length>0,o=await ku(r.fetch,`${r.url}/object/sign/${i}`,H({expiresIn:t},a?{transform:n.transform}:{}),{headers:r.headers}),s=new URLSearchParams;n?.download&&s.set(`download`,n.download===!0?``:n.download),n?.cacheNonce!=null&&s.set(`cacheNonce`,String(n.cacheNonce));let c=s.toString();return{signedUrl:encodeURI(`${r.url}${o.signedURL}${c?`&${c}`:``}`)}})}async createSignedUrls(e,t,n){var r=this;return r.handleOperation(async()=>{let i=await ku(r.fetch,`${r.url}/object/sign/${r.bucketId}`,{expiresIn:t,paths:e},{headers:r.headers}),a=new URLSearchParams;n?.download&&a.set(`download`,n.download===!0?``:n.download),n?.cacheNonce!=null&&a.set(`cacheNonce`,String(n.cacheNonce));let o=a.toString();return i.map(e=>H(H({},e),{},{signedUrl:e.signedURL?encodeURI(`${r.url}${e.signedURL}${o?`&${o}`:``}`):null}))})}download(e,t,n){let r=typeof t?.transform==`object`&&t.transform!==null&&Object.keys(t.transform).length>0?`render/image/authenticated`:`object`,i=new URLSearchParams;t?.transform&&this.applyTransformOptsToQuery(i,t.transform),t?.cacheNonce!=null&&i.set(`cacheNonce`,String(t.cacheNonce));let a=i.toString(),o=this._getFinalPath(e);return new Ru(()=>Ou(this.fetch,`${this.url}/${r}/${o}${a?`?${a}`:``}`,{headers:this.headers,noResolveJson:!0},n),this.shouldThrowOnError)}async info(e){var t=this;let n=t._getFinalPath(e);return t.handleOperation(async()=>bu(await Ou(t.fetch,`${t.url}/object/info/${n}`,{headers:t.headers})))}async exists(e){var t=this;let n=t._getFinalPath(e);try{return await ju(t.fetch,`${t.url}/object/${n}`,{headers:t.headers}),{data:!0,error:null}}catch(e){if(t.shouldThrowOnError)throw e;if(pu(e)){let t=e instanceof mu?e.status:e instanceof hu?e.originalError?.status:void 0;if(t!==void 0&&[400,404].includes(t))return{data:!1,error:e}}throw e}}getPublicUrl(e,t){let n=this._getFinalPath(e),r=new URLSearchParams;t?.download&&r.set(`download`,t.download===!0?``:t.download),t?.transform&&this.applyTransformOptsToQuery(r,t.transform),t?.cacheNonce!=null&&r.set(`cacheNonce`,String(t.cacheNonce));let i=r.toString(),a=typeof t?.transform==`object`&&t.transform!==null&&Object.keys(t.transform).length>0?`render/image`:`object`;return{data:{publicUrl:encodeURI(`${this.url}/${a}/public/${n}`)+(i?`?${i}`:``)}}}async remove(e){var t=this;return t.handleOperation(async()=>await Mu(t.fetch,`${t.url}/object/${t.bucketId}`,{prefixes:e},{headers:t.headers}))}async purgeCache(e,t,n){var r=this;return r.handleOperation(async()=>{let i=Su(r._getFinalPath(e)),a=new URLSearchParams;t?.transformations&&a.set(`transformations`,`true`);let o=a.toString();return await Mu(r.fetch,`${r.url}/cdn/${i}${o?`?${o}`:``}`,{},{headers:r.headers},n)})}async list(e,t,n){var r=this;return r.handleOperation(async()=>{let i=t?.sortBy?H(H({},zu.sortBy),t.sortBy):zu.sortBy,a=H(H(H({},zu),t),{},{sortBy:i,prefix:e||``});return await ku(r.fetch,`${r.url}/object/list/${r.bucketId}`,a,{headers:r.headers},n)})}async listV2(e,t){var n=this;return n.handleOperation(async()=>{let r=H({},e);return await ku(n.fetch,`${n.url}/object/list-v2/${n.bucketId}`,r,{headers:n.headers},t)})}encodeMetadata(e){return JSON.stringify(e)}toBase64(e){return typeof Buffer<`u`?Buffer.from(e).toString(`base64`):btoa(e)}_getFinalPath(e){return`${this.bucketId}/${e.replace(/^\/+/,``)}`}_removeEmptyFolders(e){return e.replace(/^\/|\/$/g,``).replace(/\/+/g,`/`)}applyTransformOptsToQuery(e,t){return t.width&&e.set(`width`,t.width.toString()),t.height&&e.set(`height`,t.height.toString()),t.resize&&e.set(`resize`,t.resize),t.format&&e.set(`format`,t.format),t.quality&&e.set(`quality`,t.quality.toString()),e}},Hu={"X-Client-Info":`storage-js/2.111.0`},Uu=class extends Pu{constructor(e,t={},n,r){let i=new URL(e);r?.useNewHostname&&/supabase\.(co|in|red)$/.test(i.hostname)&&!i.hostname.includes(`storage.supabase.`)&&(i.hostname=i.hostname.replace(`supabase.`,`storage.supabase.`));let a=i.href.replace(/\/$/,``),o=H(H({},Hu),t);super(a,o,n,`storage`)}async listBuckets(e){var t=this;return t.handleOperation(async()=>{let n=t.listBucketOptionsToQueryString(e);return await Ou(t.fetch,`${t.url}/bucket${n}`,{headers:t.headers})})}async getBucket(e){var t=this;return t.handleOperation(async()=>await Ou(t.fetch,`${t.url}/bucket/${e}`,{headers:t.headers}))}async createBucket(e,t={public:!1}){var n=this;return n.handleOperation(async()=>await ku(n.fetch,`${n.url}/bucket`,{id:e,name:e,type:t.type,public:t.public,file_size_limit:t.fileSizeLimit,allowed_mime_types:t.allowedMimeTypes},{headers:n.headers}))}async updateBucket(e,t){var n=this;return n.handleOperation(async()=>await Au(n.fetch,`${n.url}/bucket/${e}`,{id:e,name:e,public:t.public,file_size_limit:t.fileSizeLimit,allowed_mime_types:t.allowedMimeTypes},{headers:n.headers}))}async emptyBucket(e){var t=this;return t.handleOperation(async()=>await ku(t.fetch,`${t.url}/bucket/${e}/empty`,{},{headers:t.headers}))}async deleteBucket(e){var t=this;return t.handleOperation(async()=>await Mu(t.fetch,`${t.url}/bucket/${e}`,{},{headers:t.headers}))}async purgeBucketCache(e,t,n){var r=this;return r.handleOperation(async()=>{let i=new URLSearchParams;t?.transformations&&i.set(`transformations`,`true`);let a=i.toString();return await Mu(r.fetch,`${r.url}/cdn/${Su(e)}${a?`?${a}`:``}`,{},{headers:r.headers},n)})}listBucketOptionsToQueryString(e){let t={};return e&&(`limit`in e&&(t.limit=String(e.limit)),`offset`in e&&(t.offset=String(e.offset)),e.search&&(t.search=e.search),e.sortColumn&&(t.sortColumn=e.sortColumn),e.sortOrder&&(t.sortOrder=e.sortOrder)),Object.keys(t).length>
180?`?`+new URLSearchParams(t).toString():``}},Wu=class extends Pu{constructor(e,t={},n){let r=e.replace(/\/$/,``),i=H(H({},Hu),t);super(r,i,n,`storage`)}async createBucket(e){var t=this;return t.handleOperation(async()=>await ku(t.fetch,`${t.url}/bucket`,{name:e},{headers:t.headers}))}async listBuckets(e){var t=this;return t.handleOperation(async()=>{let n=new URLSearchParams;e?.limit!==void 0&&n.set(`limit`,e.limit.toString()),e?.offset!==void 0&&n.set(`offset`,e.offset.toString()),e?.sortColumn&&n.set(`sortColumn`,e.sortColumn),e?.sortOrder&&n.set(`sortOrder`,e.sortOrder),e?.search&&n.set(`search`,e.search);let r=n.toString(),i=r?`${t.url}/bucket?${r}`:`${t.url}/bucket`;return await Ou(t.fetch,i,{headers:t.headers})})}async deleteBucket(e){var t=this;return t.handleOperation(async()=>await Mu(t.fetch,`${t.url}/bucket/${e}`,{},{headers:t.headers}))}from(e){var t=this;if(!xu(e))throw new fu(`Invalid bucket name: File, folder, and bucket names must follow AWS object key naming guidelines and should avoid the use of any other characters.`);let n=new ou({baseUrl:this.url,catalogName:e,auth:{type:`custom`,getHeaders:async()=>t.headers},fetch:this.fetch}),r=this.shouldThrowOnError;return new Proxy(n,{get(e,t){let n=e[t];return typeof n==`function`?async(...t)=>{try{return{data:await n.apply(e,t),error:null}}catch(e){if(r)throw e;return{data:null,error:e}}}:n}})}},Gu=class extends Pu{constructor(e,t={},n){let r=e.replace(/\/$/,``),i=H(H({},Hu),{},{"Content-Type":`application/json`},t);super(r,i,n,`vectors`)}async createIndex(e){var t=this;return t.handleOperation(async()=>await Nu.post(t.fetch,`${t.url}/CreateIndex`,e,{headers:t.headers})||{})}async getIndex(e,t){var n=this;return n.handleOperation(async()=>await Nu.post(n.fetch,`${n.url}/GetIndex`,{vectorBucketName:e,indexName:t},{headers:n.headers}))}async listIndexes(e){var t=this;return t.handleOperation(async()=>await Nu.post(t.fetch,`${t.url}/ListIndexes`,e,{headers:t.headers}))}async deleteIndex(e,t){var n=this;return n.handleOperation(async()=>await Nu.post(n.fetch,`${n.url}/DeleteIndex`,{vectorBucketName:e,indexName:t},{headers:n.headers})||{})}},Ku=class extends Pu{constructor(e,t={},n){let r=e.replace(/\/$/,``),i=H(H({},Hu),{},{"Content-Type":`application/json`},t);super(r,i,n,`vectors`)}async putVectors(e){var t=this;if(e.vectors.length<1||e.vectors.length>500)throw Error(`Vector batch size must be between 1 and 500 items`);return t.handleOperation(async()=>await Nu.post(t.fetch,`${t.url}/PutVectors`,e,{headers:t.headers})||{})}async getVectors(e){var t=this;return t.handleOperation(async()=>await Nu.post(t.fetch,`${t.url}/GetVectors`,e,{headers:t.headers}))}async listVectors(e){var t=this;if(e.segmentCount!==void 0){if(e.segmentCount<1||e.segmentCount>16)throw Error(`segmentCount must be between 1 and 16`);if(e.segmentIndex!==void 0&&(e.segmentIndex<0||e.segmentIndex>=e.segmentCount))throw Error(`segmentIndex must be between 0 and ${e.segmentCount-1}`)}return t.handleOperation(async()=>await Nu.post(t.fetch,`${t.url}/ListVectors`,e,{headers:t.headers}))}async queryVectors(e){var t=this;return t.handleOperation(async()=>await Nu.post(t.fetch,`${t.url}/QueryVectors`,e,{headers:t.headers}))}async deleteVectors(e){var t=this;if(e.keys.length<1||e.keys.length>500)throw Error(`Keys batch size must be between 1 and 500 items`);return t.handleOperation(async()=>await Nu.post(t.fetch,`${t.url}/DeleteVectors`,e,{headers:t.headers})||{})}},qu=class extends Pu{constructor(e,t={},n){let r=e.replace(/\/$/,``),i=H(H({},Hu),{},{"Content-Type":`application/json`},t);super(r,i,n,`vectors`)}async createBucket(e){var t=this;return t.handleOperation(async()=>await Nu.post(t.fetch,`${t.url}/CreateVectorBucket`,{vectorBucketName:e},{headers:t.headers})||{})}async getBucket(e){var t=this;return t.handleOperation(async()=>await Nu.post(t.fetch,`${t.url}/GetVectorBucket`,{vectorBucketName:e},{headers:t.headers}))}async listBuckets(e={}){var t=this;return t.handleOperation(async()=>await Nu.post(t.fetch,`${t.url}/ListVectorBuckets`,e,{headers:t.headers}))}async deleteBucket(e){var t=this;return t.handleOperation(async()=>await Nu.post(t.fetch,`${t.url}/DeleteVectorBucket`,{vectorBucketName:e},{headers:t.headers})||{})}},Ju=class extends qu{constructor(e,t={}){super(e,t.headers||{},t.fetch)}from(e){return new Yu(this.url,this.headers,e,this.fetch)}async createBucket(e){var t=()=>super.createBucket,n=this;return t().call(n,e)}async getBucket(e){var t=()=>super.getBucket,n=this;return t().call(n,e)}async listBuckets(e={}){var t=()=>super.listBuckets,n=this;return t().call(n,e)}async deleteBucket(e){var t=()=>super.deleteBucket,n=this;return t().call(n,e)}},Yu=class extends Gu{constructor(e,t,n,r){super(e,t,r),this.vectorBucketName=n}async createIndex(e){var t=()=>super.createIndex,n=this;return t().call(n,H(H({},e),{},{vectorBucketName:n.vectorBucketName}))}
18async listIndexes(e={}){var t=()=>super.listIndexes,n=this;return t().call(n,H(H({},e),{},{vectorBucketName:n.vectorBucketName}))}async getIndex(e){var t=()=>super.getIndex,n=this;return t().call(n,n.vectorBucketName,e)}async deleteIndex(e){var t=()=>super.deleteIndex,n=this;return t().call(n,n.vectorBucketName,e)}index(e){return new Xu(this.url,this.headers,this.vectorBucketName,e,this.fetch)}},Xu=class extends Ku{constructor(e,t,n,r,i){super(e,t,i),this.vectorBucketName=n,this.indexName=r}async putVectors(e){var t=()=>super.putVectors,n=this;return t().call(n,H(H({},e),{},{vectorBucketName:n.vectorBucketName,indexName:n.indexName}))}async getVectors(e){var t=()=>super.getVectors,n=this;return t().call(n,H(H({},e),{},{vectorBucketName:n.vectorBucketName,indexName:n.indexName}))}async listVectors(e={}){var t=()=>super.listVectors,n=this;return t().call(n,H(H({},e),{},{vectorBucketName:n.vectorBucketName,indexName:n.indexName}))}async queryVectors(e){var t=()=>super.queryVectors,n=this;return t().call(n,H(H({},e),{},{vectorBucketName:n.vectorBucketName,indexName:n.indexName}))}async deleteVectors(e){var t=()=>super.deleteVectors,n=this;return t().call(n,H(H({},e),{},{vectorBucketName:n.vectorBucketName,indexName:n.indexName}))}},Zu=class extends Uu{constructor(e,t={},n,r){super(e,t,n,r)}from(e){return new Vu(this.url,this.headers,e,this.fetch)}get vectors(){return new Ju(this.url+`/vector`,{headers:this.headers,fetch:this.fetch})}get analytics(){return new Wu(this.url+`/iceberg`,this.headers,this.fetch)}},Qu=`2.111.0`,U=3e4,$u=3*U,ed=2*U,td=`http://localhost:9999`,nd=`supabase.auth.token`,rd={"X-Client-Info":`gotrue-js/${Qu}`},id=`X-Supabase-Api-Version`,ad={"2024-01-01":{timestamp:Date.parse(`2024-01-01T00:00:00.0Z`),name:`2024-01-01`}},od=/^([a-z0-9_-]{4})*($|[a-z0-9_-]{3}$|[a-z0-9_-]{2}$)$/i,sd=`sb_flow_id`,cd=class extends Error{constructor(e,t,n){super(e),this.__isAuthError=!0,this.name=`AuthError`,this.status=t,this.code=n}toJSON(){return{name:this.name,message:this.message,status:this.status,code:this.code}}};function W(e){return typeof e==`object`&&!!e&&`__isAuthError`in e}var ld=class extends cd{constructor(e,t,n){super(e,t,n),this.name=`AuthApiError`,this.status=t,this.code=n}};function ud(e){return W(e)&&e.name===`AuthApiError`}var dd=class extends cd{constructor(e,t){super(e),this.name=`AuthUnknownError`,this.originalError=t}},fd=class extends cd{constructor(e,t,n,r){super(e,n,r),this.name=t,this.status=n}},pd=class extends fd{constructor(){super(`Auth session missing!`,`AuthSessionMissingError`,400,void 0)}};function md(e){return W(e)&&e.name===`AuthSessionMissingError`}var hd=class extends fd{constructor(){super(`Auth session or user missing`,`AuthInvalidToken
18ResponseError`,500,void 0)}},gd=class extends fd{constructor(e){super(e,`AuthInvalidCredentialsError`,400,void 0)}},_d=class extends fd{constructor(e,t=null){super(e,`AuthImplicitGrantRedirectError`,500,void 0),this.details=null,this.details=t}toJSON(){return Object.assign(Object.assign({},super.toJSON()),{details:this.details})}};function vd(e){return W(e)&&e.name===`AuthImplicitGrantRedirectError`}var yd=class extends fd{constructor(e,t=null){super(e,`AuthPKCEGrantCodeExchangeError`,500,void 0),this.details=null,this.details=t}toJSON(){return Object.assign(Object.assign({},super.toJSON()),{details:this.details})}},bd=class extends fd{constructor(){super(`PKCE code verifier not found in storage. This can happen if the auth flow was initiated in a different browser or device, or if the storage was cleared. For SSR frameworks (Next.js, SvelteKit, etc.), use @supabase/ssr on both the server and client to store the code verifier in cookies.`,`AuthPKCECodeVerifierMissingError`,400,`pkce_code_verifier_not_found`)}},xd=class extends fd{constructor(e,t){super(e,`AuthRetryableFetchError`,t,void 0)}};function Sd(e){return W(e)&&e.name===`AuthRetryableFetchError`}var Cd=class extends fd{constructor(e=`Refresh result discarded: session state changed mid-flight (e.g., concurrent signOut)`){super(e,`AuthRefreshDiscardedError`,409,void 0)}};function wd(e){return W(e)&&e.name===`AuthRefreshDiscardedError`}var Td=class extends fd{constructor(e,t,n){super(e,`AuthWeakPasswordError`,t,`weak_password`),this.reasons=n}toJSON(){return Object.assign(Object.assign({},super.toJSON()),{reasons:this.reasons})}},Ed=class extends fd{constructor(e){super(e,`AuthInvalidJwtError`,400,`invalid_jwt`)}},G=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_`.split(``),Dd=` 	
19\r=`.split(``),Od=(()=>{let e=Array(128);for(let t=0;t<e.length;t+=1)e[t]=-1;for(let t=0;t<Dd.length;t+=1)e[Dd[t].charCodeAt(0)]=-2;for(let t=0;t<G.length;t+=1)e[G[t].charCodeAt(0)]=t;return e})();function kd(e,t,n){if(e!==null)for(t.queue=t.queue<<8|e,t.queuedBits+=8;t.queuedBits>=6;)n(G[t.queue>>t.queuedBits-6&63]),t.queuedBits-=6;else if(t.queuedBits>0)for(t.queue<<=6-t.queuedBits,t.queuedBits=6;t.queuedBits>=6;)n(G[t.queue>>t.queuedBits-6&63]),t.queuedBits-=6}function Ad(e,t,n){let r=Od[e];if(r>-1)for(t.queue=t.queue<<6|r,t.queuedBits+=6;t.queuedBits>=8;)n(t.queue>>t.queuedBits-8&255),t.queuedBits-=8;else if(r===-2)return;else throw Error(`Invalid Base64-URL character "${String.fromCharCode(e)}"`)}function jd(e){let t=[],n=e=>{t.push(String.fromCodePoint(e))},r={utf8seq:0,codepoint:0},i={queue:0,queuedBits:0},a=e=>{Pd(e,r,n)};for(let t=0;t<e.length;t+=1)Ad(e.charCodeAt(t),i,a);return t.join(``)}function Md(e,t){if(e<=127){t(e);return}if(e<=2047){t(192|e>>6),t(128|e&63);return}if(e<=65535){t(224|e>>12),t(128|e>>6&63),t(128|e&63);return}if(e<=1114111){t(240|e>>18),t(128|e>>12&63),t(128|e>>6&63),t(128|e&63);return}throw Error(`Unrecognized Unicode codepoint: ${e.toString(16)}`)}function Nd(e,t){for(let n=0;n<e.length;n+=1){let r=e.charCodeAt(n);if(r>55295&&r<=56319){let t=(r-55296)*1024&65535;r=(e.charCodeAt(n+1)-56320&65535|t)+65536,n+=1}Md(r,t)}}function Pd(e,t,n){if(t.utf8seq===0){if(e<=127){n(e);return}for(let n=1;n<6;n+=1)if(!(e>>7-n&1)){t.utf8seq=n;break}if(t.utf8seq===2)t.codepoint=e&31;else if(t.utf8seq===3)t.codepoint=e&15;else if(t.utf8seq===4)t.codepoint=e&7;else throw Error(`Invalid UTF-8 sequence`);--t.utf8seq}else if(t.utf8seq>0){if(e<=127)throw Error(`Invalid UTF-8 sequence`);t.codepoint=t.codepoint<<6|e&63,--t.utf8seq,t.utf8seq===0&&n(t.codepoint)}}function Fd(e){let t=[],n={queue:0,queuedBits:0},r=e=>{t.push(e)};for(let t=0;t<e.length;t+=1)Ad(e.charCodeAt(t),n,r);return new Uint8Array(t)}function Id(e){let t=[];return Nd(e,e=>t.push(e)),new Uint8Array(t)}function Ld(e){let t=[],n={queue:0,queuedBits:0},r=e=>{t.push(e)};return e.forEach(e=>kd(e,n,r)),kd(null,n,r),t.join(``)}function Rd(e){return Math.round(Date.now()/1e3)+e}function zd(){return Symbol(`auth-callback`)}var K=()=>typeof window<`u`&&typeof document<`u`,Bd={tested:!1,writable:!1},Vd=()=>{if(!K())return!1;try{if(typeof globalThis.localStorage!=`object`)return!1}catch{return!1}if(Bd.tested)return Bd.writable;let e=`lswt-${Math.random()}${Math.random()}`;try{globalThis.localStorage.setItem(e,e),globalThis.localStorage.removeItem(e),Bd.tested=!0,Bd.writable=!0}catch{Bd.tested=!0,Bd.writable=!1}return Bd.writable};function Hd(e){let t={},n=new URL(e);if(n.hash&&n.hash[0]===`#`)try{new URLSearchParams(n.hash.substring(1)).forEac
19h((e,n)=>{t[n]=e})}catch{}return n.searchParams.forEach((e,n)=>{t[n]=e}),t}var Ud=e=>e?(...t)=>e(...t):(...e)=>fetch(...e),Wd=e=>typeof e==`object`&&!!e&&`status`in e&&`ok`in e&&`json`in e&&typeof e.json==`function`,Gd=async(e,t,n)=>{await e.setItem(t,JSON.stringify(n))},Kd=async(e,t)=>{let n=await e.getItem(t);if(!n)return null;try{return JSON.parse(n)}catch{return null}},qd=async(e,t)=>{await e.removeItem(t)},Jd=class e{constructor(){this.promise=new e.promiseConstructor((e,t)=>{this.resolve=e,this.reject=t})}};Jd.promiseConstructor=Promise;function Yd(e){let t=e.split(`.`);if(t.length!==3)throw new Ed(`Invalid JWT structure`);for(let e=0;e<t.length;e++)if(!od.test(t[e]))throw new Ed(`JWT not in base64url format`);return{header:JSON.parse(jd(t[0])),payload:JSON.parse(jd(t[1])),signature:Fd(t[2]),raw:{header:t[0],payload:t[1]}}}async function Xd(e){return await new Promise(t=>{setTimeout(()=>t(null),e)})}function Zd(e,t){return new Promise((n,r)=>{(async()=>{for(let i=0;i<1/0;i++)try{let r=await e(i);if(!t(i,null,r)){n(r);return}}catch(e){if(!t(i,e)){r(e);return}}})()})}function Qd(e){return(`0`+e.toString(16)).substr(-2)}function $d(){let e=new Uint32Array(56);if(typeof crypto>`u`){let e=``;for(let t=0;t<56;t++)e+=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~`.charAt(Math.floor(Math.random()*66));return e}return crypto.getRandomValues(e),Array.from(e,Qd).join(``)}async function ef(e){let t=new TextEncoder().encode(e),n=await crypto.subtle.digest(`SHA-256`,t),r=new Uint8Array(n);return Array.from(r).map(e=>String.fromCharCode(e)).join(``)}async function tf(e){if(!(typeof crypto<`u`&&crypto.subtle!==void 0&&typeof TextEncoder<`u`))return console.warn(`WebCrypto API is not supported. Code challenge method will default to use plain instead of sha256.`),e;let t=await ef(e);return btoa(t).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}var nf=/^[a-zA-Z0-9_-]{8,64}$/;function rf(e){return typeof e==`string`&&nf.test(e)?e:null}function af(){if(typeof crypto<`u`&&typeof crypto.getRandomValues==`function`){let e=new Uint8Array(16);return crypto.getRandomValues(e),Array.from(e,Qd).join(``)}let e=``;for(let t=0;t<32;t++)e+=Math.floor(Math.random()*16).toString(16);return e}var of=(e,t)=>`${e}-flow-${t}-code-verifier`,sf=e=>`${e}-flows-code-verifier`;async function cf(e,t){let n=await Kd(e,sf(t));return Array.isArray(n)?n.filter(e=>rf(e)!==null):[]}async function lf(e,t,n,r,i){await Gd(e,of(t,n),r);let a=(await cf(e,t)).filter(e=>e!==n);for(a.push(n);a.length>5;){let n=a.shift();await qd(e,of(t,n)),i?.(n)}await Gd(e,sf(t),a),await Gd(e,`${t}-code-verifier`,r)}async function uf(e,t,n){if(n){let r=await Kd(e,of(t,n));return{verifier:typeof r==`string`?r:null,flowId:n}}let r=await Kd(e,`${t}-code-verifier`);return{verifier:typeof r==`string`?r:null,flowId:null}}async function df(e,t,n){let r=`${t}-code-verifier`;if(!n){await qd(e,r);return}let i=of(t,n),a=await Kd(e,i);await qd(e,i);let o=await cf(e,t),s=o.filter(e=>e!==n);s.length!==o.length&&(s.length>0?await Gd(e,sf(t),s):await qd(e,sf(t))),a!=null&&a===await Kd(e,r)&&await qd(e,r)}async function ff(e,t){let n=await cf(e,t);for(let r of n)await qd(e,of(t,r));await qd(e,sf(t)),await qd(e,`${t}-code-verifier`)}function pf(e,t){let n=e.indexOf(`#`),r=n===-1?e:e.slice(0,n),i=n===-1?``:e.slice(n),a=r.indexOf(`?`);if(a!==-1){let e=r.slice(0,a),t=r.slice(a+1).split(`&`).filter(e=>e!==``&&e!==`sb_flow_id`&&!e.startsWith(`sb_flow_id=`));r=t.length>0?`${e}?${t.join(`&`)}`:e}let o=r.includes(`?`)?`&`:`?`;return`${r}${o}${sd}=${encodeURIComponent(t)}${i}`}async function mf(e,t,n=!1,r){let i=$d(),a=i;n&&(a+=`/recovery`);let o=af();await lf(e,t,o,a,r);let s=await tf(i);return[s,i===s?`plain`:`s256`,o]}var hf=/^2[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$/i;function gf(e){let t=e.headers.get(id);if(!t||!t.match(hf))return null;try{return new Date(`${t}T00:00:00.0Z`)}catch{return null}}function _f(e){if(!e)throw Error(`Missing exp claim`);if(e<=Math.floor(Date.now()/1e3))throw Error(`JWT has expired`)}function vf(e){switch(e){case`RS256`:return{name:`RSASSA-PKCS1-v1_5`,hash:{name:`
19SHA-256`}};case`ES256`:return{name:`ECDSA`,namedCurve:`P-256`,hash:{name:`SHA-256`}};default:throw Error(`Invalid alg claim`)}}var yf=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;function bf(e){if(!yf.test(e))throw Error(`@supabase/auth-js: Expected parameter to be UUID but is not`)}function xf(e){if(!e.passkey)throw Error("@supabase/auth-js: the passkey API is experimental and disabled by default. Enable it by passing `auth: { experimental: { passkey: true } }` to createClient (or to the GoTrueClient constructor).")}function Sf(){return new Proxy({},{get:(e,t)=>{if(t===`__isUserNotAvailableProxy`)return!0;if(typeof t==`symbol`){let e=t.toString();if(e===`Symbol(Symbol.toPrimitive)`||e===`Symbol(Symbol.toStringTag)`||e===`Symbol(util.inspect.custom)`)return}throw Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Accessing the "${t}" property of the session object is not supported. Please use getUser() instead.`)},set:(e,t)=>{throw Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Setting the "${t}" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`)},deleteProperty:(e,t)=>{throw Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Deleting the "${t}" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`)}})}function Cf(e,t){return new Proxy(e,{get:(e,n,r)=>{if(n===`__isInsecureUserWarningProxy`)return!0;if(typeof n==`symbol`){let t=n.toString();if(t===`Symbol(Symbol.toPrimitive)`||t===`Symbol(Symbol.toStringTag)`||t===`Symbol(util.inspect.custom)`||t===`Symbol(nodejs.util.inspect.custom)`)return Reflect.get(e,n,r)}return!t.value&&typeof n==`string`&&(console.warn(`Using the user object as returned from supabase.auth.getSession() or from some supabase.auth.onAuthStateChange() events could be insecure! This value comes directly from the storage medium (usually cookies on the server) and may not be authentic. Use supabase.auth.getUser() instead which authenticates the data by contacting the Supabase Auth server.`),t.value=!0),Reflect.get(e,n,r)}})}function wf(e){return JSON.parse(JSON.stringify(e))}var Tf=e=>{if(typeof e==`object`&&e){let t=e;if(typeof t.msg==`string`)return t.msg;if(typeof t.message==`string`)return t.message;if(typeof t.error_description==`string`)return t.error_description;if(typeof t.error==`string`)return t.error}return JSON.stringify(e)},Ef=[500,501,502,503,504,520,521,522,523,524,525,526,527,528,529,530];async function Df(e){if(!Wd(e))throw new xd(Tf(e),0);if(Ef.includes(e.status))throw new xd(Tf(e),e.status);let t;try{t=await e.json()}catch(e){throw new dd(Tf(e),e)}let n,r=gf(e);if(r&&r.getTime()>=ad[`2024-01-01`].timestamp&&typeof t==`object`&&t&&typeof t.code==`string`?n=t.code:typeof t==`object`&&t&&typeof t.error_code==`string`&&(n=t.error_code),!n){if(typeof t==`object`&&t&&typeof t.weak_password==`object`&&t.weak_password&&Array.isArray(t.weak_password.reasons)&&t.weak_password.reasons.length&&t.weak_password.reasons.reduce((e,t)=>e&&typeof t==`string`,!0))throw new Td(Tf(t),e.status,t.weak_password.reasons)}else if(n===`weak_password`)throw new Td(Tf(t),e.status,t.weak_password?.reasons||[]);else if(n===`session_not_found`)throw new pd;throw new ld(Tf(t),e.status||500,n)}var Of=(e,t,n,r)=>{let i={method:e,headers:t?.headers||{}};return e===`GET`?i:(i.headers=Object.assign({"Content-Type":`application/json;charset=UTF-8`},t?.headers),i.body=JSON.stringify(r),Object.assign(Object.assign({},i),n))};async function q(e,t,n,r){let i=Object.assign({},r?.headers);i[`X-Supabase-Api-Version`]||(i[id]=ad[`2024-01-01`].name),r?.jwt&&(i.Authorization=`Bearer ${r.jwt}`);let a=r?.query??{};r?.redirectTo&&(a.redirect_to=r.redirectTo);let o=await kf(e,t,n+(Object.keys(a).length?`?`+new URLSearchParams(a).toString():``),{headers:i,noResolveJson:r?.noResolveJson},{},r?.body);return r?.xform?r?.xform(o):{data:Object.assign({},o),error:null}}async function kf(e,t,n,r,i,a){let o=Of(t,r,i,a),s;try{s=await e(n,Object.assign({},o))}catch(e){throw new xd(Tf(e),0)}
19if(s.ok||await Df(s),r?.noResolveJson)return s;try{return await s.json()}catch(e){await Df(e)}}function Af(e){let t=null;If(e)&&(t=Object.assign({},e),e.expires_at||(t.expires_at=Rd(e.expires_in)));let n=e.user??(typeof e?.id==`string`?e:null);return{data:{session:t,user:n},error:null}}function jf(e){let t=Af(e);return!t.error&&e.weak_password&&typeof e.weak_password==`object`&&Array.isArray(e.weak_password.reasons)&&e.weak_password.reasons.length&&e.weak_password.message&&typeof e.weak_password.message==`string`&&e.weak_password.reasons.reduce((e,t)=>e&&typeof t==`string`,!0)&&(t.data.weak_password=e.weak_password),t}function Mf(e){return{data:{user:e.user??e},error:null}}function Nf(e){return{data:e,error:null}}function Pf(e){let{action_link:t,email_otp:n,hashed_token:r,redirect_to:i,verification_type:a}=e,o=Ee(e,[`action_link`,`email_otp`,`hashed_token`,`redirect_to`,`verification_type`]);return{data:{properties:{action_link:t,email_otp:n,hashed_token:r,redirect_to:i,verification_type:a},user:Object.assign({},o)},error:null}}function Ff(e){return e}function If(e){return!!e.access_token&&!!e.refresh_token&&!!e.expires_in}var Lf=[`global`,`local`,`others`],Rf=class{constructor({url:e=``,headers:t={},fetch:n,experimental:r}){this.url=e,this.headers=t,this.fetch=Ud(n),this.experimental=r??{},this.mfa={listFactors:this._listFactors.bind(this),deleteFactor:this._deleteFactor.bind(this)},this.oauth={listClients:this._listOAuthClients.bind(this),createClient:this._createOAuthClient.bind(this),getClient:this._getOAuthClient.bind(this),updateClient:this._updateOAuthClient.bind(this),deleteClient:this._deleteOAuthClient.bind(this),regenerateClientSecret:this._regenerateOAuthClientSecret.bind(this)},this.customProviders={listProviders:this._listCustomProviders.bind(this),createProvider:this._createCustomProvider.bind(this),getProvider:this._getCustomProvider.bind(this),updateProvider:this._updateCustomProvider.bind(this),deleteProvider:this._deleteCustomProvider.bind(this)},this.passkey={listPasskeys:this._adminListPasskeys.bind(this),deletePasskey:this._adminDeletePasskey.bind(this)}}async signOut(e,t=Lf[0]){if(Lf.indexOf(t)<0)throw Error(`@supabase/auth-js: Parameter scope must be one of ${Lf.join(`, `)}`);try{return await q(this.fetch,`POST`,`${this.url}/logout?scope=${t}`,{headers:this.headers,jwt:e,noResolveJson:!0}),{data:null,error:null}}catch(e){if(W(e))return{data:null,error:e};throw e}}async inviteUserByEmail(e,t={}){try{return await q(this.fetch,`POST`,`${this.url}/invite`,{body:{email:e,data:t.data},headers:this.headers,redirectTo:t.redirectTo,xform:Mf})}catch(e){if(W(e))return{data:{user:null},error:e};throw e}}async generateLink(e){try{let{options:t}=e,n=Ee(e,[`options`]),r=Object.assign(Object.assign({},n),t);return`newEmail`in n&&(r.new_email=n?.newEmail,delete r.newEmail),await q(this.fetch,`POST`,`${this.url}/admin/generate_link`,{body:r,headers:this.headers,xform:Pf,redirectTo:t?.redirectTo})}catch(e){if(W(e))return{data:{properties:null,user:null},error:e};throw e}}async createUser(e){try{return await q(this.fetch,`POST`,`${this.url}/admin/users`,{body:e,headers:this.headers,xform:Mf})}catch(e){if(W(e))return{data:{user:null},error:e};throw e}}async listUsers(e){try{let t={nextPage:null,lastPage:0,total:0},n=await q(this.fetch,`GET`,`${this.url}/admin/users`,{headers:this.headers,noResolveJson:!0,query:{page:(e?.page)?.toString()??``,per_page:(e?.perPage)?.toString()??``},xform:Ff});if(n.error)throw n.error;let r=await n.json(),i=n.headers.get(`x-total-count`)??0,a=n.headers.get(`link`)?.split(`,`)??[];return a.length>0&&(a.forEach(e=>{let n=parseInt(e.split(`;`)[0].split(`=`)[1].substring(0,1)),r=JSON.parse(e.split(`;`)[1].split(`=`)[1]);t[`${r}Page`]=n}),t.total=parseInt(i)),{data:Object.assign(Object.assign({},r),t),error:null}}catch(e){if(W(e))return{data:{users:[]},error:e};throw e}}async getUserById(e){bf(e);try{return await q(this.fetch,`GET`,`${this.url}/admin/users/${e}`,{headers:this.headers,xform:Mf})}catch(e){if(W(e))return{data:{user:null},error:e};throw e}}async updateUserById(e,t){bf(e);try{return await q(this.fetch,`PUT`,`${this.url}/admin/users/${e}`,{body:t,headers:this.headers,xform:Mf})}catch(e){if(W(e))return{data:{user:null},error:e};throw e}}async deleteUser(e,t=!1){bf(e);try{return await q(this.fetch,`DELETE`,`${this.url}/admin/users/${e}`,{headers:this.headers,body:{should_soft_delete:t},xform:Mf})}catch(e){if(W(e))return{data:{user:null},error:e};throw e}}async _listFactors(e){bf(e.userId);try{let{data:t,error:n}=await q(this.fetch,`GET`,`${this.url}/admin/users/${e.userId}/factors`,{headers:this.headers,xform:e=>({data:{factors:e},error:null})});return{data:t,error:n}}catch(e){if(W(e))return{data:null,error:e};throw e}}async _deleteFactor(e){bf(e.userId),bf(e.id);try{return{data:await q(this.fetch,`DELETE`,`${this.url}/admin/users/${e.userId}/factors/${e.id}`,{headers:this.headers}),error:null}}catch(e){if(W(e))return{data:null,error:e};throw e}}async _listOAuthClients(e){try{let t={nextPage:null,lastPage:0,total:0},n=await q(this.fetch,`GET`,`${this.url}/admin/oauth/clients`,{headers:this.headers,noResolveJson:!0,query:{page:(e?.page)?.toString()??``,per_page:(e?.perPage)?.toString()??``},xform:Ff});if(n.error)throw n.error;let r=await n.json(),i=n.headers.get(`x-total-count`)??0,a=n.headers.get(`link`)?.split(`,`)??[];return a.length>
190&&(a.forEach(e=>{let n=parseInt(e.split(`;`)[0].split(`=`)[1].substring(0,1)),r=JSON.parse(e.split(`;`)[1].split(`=`)[1]);t[`${r}Page`]=n}),t.total=parseInt(i)),{data:Object.assign(Object.assign({},r),t),error:null}}catch(e){if(W(e))return{data:{clients:[]},error:e};throw e}}async _createOAuthClient(e){try{return await q(this.fetch,`POST`,`${this.url}/admin/oauth/clients`,{body:e,headers:this.headers,xform:e=>({data:e,error:null})})}catch(e){if(W(e))return{data:null,error:e};throw e}}async _getOAuthClient(e){try{return await q(this.fetch,`GET`,`${this.url}/admin/oauth/clients/${e}`,{headers:this.headers,xform:e=>({data:e,error:null})})}catch(e){if(W(e))return{data:null,error:e};throw e}}async _updateOAuthClient(e,t){try{return await q(this.fetch,`PUT`,`${this.url}/admin/oauth/clients/${e}`,{body:t,headers:this.headers,xform:e=>({data:e,error:null})})}catch(e){if(W(e))return{data:null,error:e};throw e}}async _deleteOAuthClient(e){try{return await q(this.fetch,`DELETE`,`${this.url}/admin/oauth/clients/${e}`,{headers:this.headers,noResolveJson:!0}),{data:null,error:null}}catch(e){if(W(e))return{data:null,error:e};throw e}}async _regenerateOAuthClientSecret(e){try{return await q(this.fetch,`POST`,`${this.url}/admin/oauth/clients/${e}/regenerate_secret`,{headers:this.headers,xform:e=>({data:e,error:null})})}catch(e){if(W(e))return{data:null,error:e};throw e}}async _listCustomProviders(e){try{let t={};return e?.type&&(t.type=e.type),await q(this.fetch,`GET`,`${this.url}/admin/custom-providers`,{headers:this.headers,query:t,xform:e=>({data:{providers:e?.providers??[]},error:null})})}catch(e){if(W(e))return{data:{providers:[]},error:e};throw e}}async _createCustomProvider(e){try{return await q(this.fetch,`POST`,`${this.url}/admin/custom-providers`,{body:e,headers:this.headers,xform:e=>({data:e,error:null})})}catch(e){if(W(e))return{data:null,error:e};throw e}}async _getCustomProvider(e){try{return await q(this.fetch,`GET`,`${this.url}/admin/custom-providers/${e}`,{headers:this.headers,xform:e=>({data:e,error:null})})}catch(e){if(W(e))return{data:null,error:e};throw e}}async _updateCustomProvider(e,t){try{return await q(this.fetch,`PUT`,`${this.url}/admin/custom-providers/${e}`,{body:t,headers:this.headers,xform:e=>({data:e,error:null})})}catch(e){if(W(e))return{data:null,error:e};throw e}}async _deleteCustomProvider(e){try{return await q(this.fetch,`DELETE`,`${this.url}/admin/custom-providers/${e}`,{headers:this.headers,noResolveJson:!0}),{data:null,error:null}}catch(e){if(W(e))return{data:null,error:e};throw e}}async _adminListPasskeys(e){xf(this.experimental),bf(e.userId);try{return await q(this.fetch,`GET`,`${this.url}/admin/users/${e.userId}/passkeys`,{headers:this.headers,xform:e=>({data:e,error:null})})}catch(e){if(W(e))return{data:null,error:e};throw e}}async _adminDeletePasskey(e){xf(this.experimental),bf(e.userId),bf(e.passkeyId);try{return await q(this.fetch,`DELETE`,`${this.url}/admin/users/${e.userId}/passkeys/${e.passkeyId}`,{headers:this.headers,noResolveJson:!0}),{data:null,error:null}}catch(e){if(W(e))return{data:null,error:e};throw e}}};function zf(e={}){return{getItem:t=>e[t]||null,setItem:(t,n)=>{e[t]=n},removeItem:t=>{delete e[t]}}}globalThis&&Vd()&&globalThis.localStorage&&globalThis.localStorage.getItem(`supabase.gotrue-js.locks.debug`);var Bf=class extends Error{constructor(e){super(e),this.isAcquireTimeout=!0}};function Vf(){if(typeof globalThis!=`object`)try{Object.defineProperty(Object.prototype,"__magic__",{get:function(){return this},configurable:!0}),__magic__.globalThis=__magic__,delete Object.prototype.__magic__}catch{typeof self<`u`&&(self.globalThis=self)}}function Hf(e){if(!/^0x[a-fA-F0-9]{40}$/.test(e))throw Error(`@supabase/auth-js: Address "${e}" is invalid.`);return e.toLowerCase()}function Uf(e){return parseInt(e,16)}function Wf(e){let t=new TextEncoder().encode(e);return`0x`+Array.from(t,e=>e.toString(16).padStart(2,`0`)).join(``)}function Gf(e){let{chainId:t,domain:n,expirationTime:r,issuedAt:i=new Date,nonce:a,notBefore:o,requestId:s,resources:c,scheme:l,uri:u,version:d}=e;if(!Number.isInteger(t))throw Error(`@supabase/auth-js: Invalid SIWE message field "chainId". Chain ID must be a EIP-155 chain ID. Provided value: ${t}`);if(!n)throw Error(`@supabase/auth-js: Invalid SIWE message field "domain". Domain must be provided.`);if(a&&a.length<8)throw Error(`@supabase/auth-js: Invalid SIWE message field "nonce". Nonce must be at least 8 characters. Provided value: ${a}`);if(!u)throw Error(`@supabase/auth-js: Invalid SIWE message field "uri". URI must be provided.`);if(d!==`1`)throw Error(`@supabase/auth-js: Invalid SIWE message field "version". Version must be '1'. Provided value: ${d}`);if(e.statement?.includes(`
20`))throw Error(`@supabase/auth-js: Invalid SIWE message field "statement". Statement must not include '\\n'. Provided value: ${e.statement}`);let f=Hf(e.address),p=`${l?`${l}://${n}`:n} wants you to sign in with your Ethereum account:\n${f}\n\n${e.statement?`${e.statement}\n`:``}`,m=`URI: ${u}\nVersion: ${d}\nChain ID: ${t}${a?`\nNonce: ${a}`:``}\nIssued At: ${i.toISOString()}`;if(r&&(m+=`\nExpiration Time: ${r.toISOString()}`),o&&(m+=`\nNot Before: ${o.toISOString()}`),s&&(m+=`\nRequest ID: ${s}`),c){let e=`
21Resources:`;for(let t of c){if(!t||typeof t!=`string`)throw Error(`@supabase/auth-js: Invalid SIWE message field "resources". Every resource must be a valid string. Provided value: ${t}`);e+=`\n- ${t}`}m+=e}return`${p}\n${m}`}
21var Kf=class extends Error{constructor({message:e,code:t,cause:n,name:r}){super(e,{cause:n}),this.__isWebAuthnError=!0,this.name=r??(n instanceof Error?n.name:void 0)??`Unknown Error`,this.code=t}toJSON(){return{name:this.name,message:this.message,code:this.code}}},qf=class extends Kf{constructor(e,t){super({code:`ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY`,cause:t,message:e}),this.name=`WebAuthnUnknownError`,this.originalError=t}};function Jf({error:e,options:t}){let{publicKey:n}=t;if(!n)throw Error(`options was missing required publicKey property`);if(e.name===`AbortError`){if(t.signal instanceof AbortSignal)return new Kf({message:`Registration ceremony was sent an abort signal`,code:`ERROR_CEREMONY_ABORTED`,cause:e})}else if(e.name===`ConstraintError`){if(n.authenticatorSelection?.requireResidentKey===!0)return new Kf({message:`Discoverable credentials were required but no available authenticator supported it`,code:`ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT`,cause:e});if(t.mediation===`conditional`&&n.authenticatorSelection?.userVerification===`required`)return new Kf({message:`User verification was required during automatic registration but it could not be performed`,code:`ERROR_AUTO_REGISTER_USER_VERIFICATION_FAILURE`,cause:e});if(n.authenticatorSelection?.userVerification===`required`)return new Kf({message:`User verification was required but no available authenticator supported it`,code:`ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT`,cause:e})}else if(e.name===`InvalidStateError`)return new Kf({message:`The authenticator was previously registered`,code:`ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED`,cause:e});else if(e.name===`NotAllowedError`)return new Kf({message:e.message,code:`ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY`,cause:e});else if(e.name===`NotSupportedError`)return n.pubKeyCredParams.filter(e=>e.type===`public-key`).length===0?new Kf({message:`No entry in pubKeyCredParams was of type "public-key"`,code:`ERROR_MALFORMED_PUBKEYCREDPARAMS`,cause:e}):new Kf({message:`No available authenticator supported any of the specified pubKeyCredParams algorithms`,code:`ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG`,cause:e});else if(e.name===`SecurityError`){let t=window.location.hostname;if(!tp(t))return new Kf({message:`${window.location.hostname} is an invalid domain`,code:`ERROR_INVALID_DOMAIN`,cause:e});if(n.rp.id!==t)return new Kf({message:`The RP ID "${n.rp.id}" is invalid for this domain`,code:`ERROR_INVALID_RP_ID`,cause:e})}else if(e.name===`TypeError`){if(n.user.id.byteLength<1||n.user.id.byteLength>64)return new Kf({message:`User ID was not between 1 and 64 characters`,code:`ERROR_INVALID_USER_ID_LENGTH`,cause:e})}else if(e.name===`UnknownError`)return new Kf({message:`The authenticator was unable to process the specified options, or could not create a new credential`,code:`ERROR_AUTHENTICATOR_GENERAL_ERROR`,cause:e});return new Kf({message:`a Non-Webauthn related error has occurred`,code:`ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY`,cause:e})}function Yf({error:e,options:t}){let{publicKey:n}=t;if(!n)throw Error(`options was missing required publicKey property`);if(e.name===`AbortError`){if(t.signal instanceof AbortSignal)return new Kf({message:`Authentication ceremony was sent an abort signal`,code:`ERROR_CEREMONY_ABORTED`,cause:e})}else if(e.name===`NotAllowedError`)return new Kf({message:e.message,code:`ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY`,cause:e});else if(e.name===`SecurityError`){let t=window.location.hostname;if(!tp(t))return new Kf({message:`${window.location.hostname} is an invalid domain`,code:`ERROR_INVALID_DOMAIN`,cause:e});if(n.rpId!==t)return new Kf({message:`The RP ID "${n.rpId}" is invalid for this domain`,code:`ERROR_INVALID_RP_ID`,cause:e})}else if(e.name===`UnknownError`)return new Kf({message:`The authenticator was unable to process the specified options, or could not create a new assertion signature`,code:`ERROR_AUTHENTICATOR_GENERAL_ERROR`,cause:e});return new Kf({message:`a Non-Webauthn related error has occurred`,code:`ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY`,cause:e})}var Xf=new class{createNewAbortSignal(){if(this.controller){let e=Error(`Cancelling existing WebAuthn API call for new one`);e.name=`AbortError`,this.controller.abort(e)}let e=new AbortController;return this.controller=e,e.signal}cancelCeremony(){if(this.controller){let e=Error(`Manually cancelling existing WebAuthn API call`);e.name=`AbortError`,this.controller.abort(e),this.controller=void 0}}};function Zf(e){if(!e)throw Error(`Credential creation options are required`);if(typeof PublicKeyCredential<`u`&&`parseCreationOptionsFromJSON`in PublicKeyCredential&&typeof PublicKeyCredential.parseCreationOptionsFromJSON==`function`)return PublicKeyCredential.parseCreationOptionsFromJSON(e);let{challenge:t,user:n,excludeCredentials:r}=e,i=Ee(e,[`challenge`,`user`,`excludeCredentials`]),a=Fd(t).buffer,o=Object.assign(Object.assign({}
21,n),{id:Fd(n.id).buffer}),s=Object.assign(Object.assign({},i),{challenge:a,user:o});if(r&&r.length>0){s.excludeCredentials=Array(r.length);for(let e=0;e<r.length;e++){let t=r[e];s.excludeCredentials[e]=Object.assign(Object.assign({},t),{id:Fd(t.id).buffer,type:t.type||`public-key`,transports:t.transports})}}return s}function Qf(e){if(!e)throw Error(`Credential request options are required`);if(typeof PublicKeyCredential<`u`&&`parseRequestOptionsFromJSON`in PublicKeyCredential&&typeof PublicKeyCredential.parseRequestOptionsFromJSON==`function`)return PublicKeyCredential.parseRequestOptionsFromJSON(e);let{challenge:t,allowCredentials:n}=e,r=Ee(e,[`challenge`,`allowCredentials`]),i=Fd(t).buffer,a=Object.assign(Object.assign({},r),{challenge:i});if(n&&n.length>0){a.allowCredentials=Array(n.length);for(let e=0;e<n.length;e++){let t=n[e];a.allowCredentials[e]=Object.assign(Object.assign({},t),{id:Fd(t.id).buffer,type:t.type||`public-key`,transports:t.transports})}}return a}function $f(e){if(`toJSON`in e&&typeof e.toJSON==`function`)return e.toJSON();let t=e;return{id:e.id,rawId:e.id,response:{attestationObject:Ld(new Uint8Array(e.response.attestationObject)),clientDataJSON:Ld(new Uint8Array(e.response.clientDataJSON))},type:`public-key`,clientExtensionResults:e.getClientExtensionResults(),authenticatorAttachment:t.authenticatorAttachment??void 0}}function ep(e){if(`toJSON`in e&&typeof e.toJSON==`function`)return e.toJSON();let t=e,n=e.getClientExtensionResults(),r=e.response;return{id:e.id,rawId:e.id,response:{authenticatorData:Ld(new Uint8Array(r.authenticatorData)),clientDataJSON:Ld(new Uint8Array(r.clientDataJSON)),signature:Ld(new Uint8Array(r.signature)),userHandle:r.userHandle?Ld(new Uint8Array(r.userHandle)):void 0},type:`public-key`,clientExtensionResults:n,authenticatorAttachment:t.authenticatorAttachment??void 0}}function tp(e){return e===`localhost`||/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(e)}function np(){return!!(K()&&`PublicKeyCredential`in window&&window.PublicKeyCredential&&`credentials`in navigator&&typeof(navigator==null?void 0:navigator.credentials)?.create==`function`&&typeof(navigator==null?void 0:navigator.credentials)?.get==`function`)}async function rp(e){try{let t=await navigator.credentials.create(e);return t?t instanceof PublicKeyCredential?{data:t,error:null}:{data:null,error:new qf(`Browser returned unexpected credential type`,t)}:{data:null,error:new qf(`Empty credential response`,t)}}catch(t){return{data:null,error:Jf({error:t,options:e})}}}async function ip(e){try{let t=await navigator.credentials.get(e);return t?t instanceof PublicKeyCredential?{data:t,error:null}:{data:null,error:new qf(`Browser returned unexpected credential type`,t)}:{data:null,error:new qf(`Empty credential response`,t)}}catch(t){return{data:null,error:Yf({error:t,options:e})}}}var ap={hints:[`security-key`],authenticatorSelection:{authenticatorAttachment:`cross-platform`,requireResidentKey:!1,userVerification:`preferred`,residentKey:`discouraged`},attestation:`direct`},op={userVerification:`preferred`,hints:[`security-key`],attestation:`direct`};function sp(...e){let t=e=>typeof e==`object`&&!!e&&!Array.isArray(e),n=e=>e instanceof ArrayBuffer||ArrayBuffer.isView(e),r={};for(let i of e)if(i)for(let e in i){let a=i[e];if(a!==void 0)if(Array.isArray(a))r[e]=a;else if(n(a))r[e]=a;else if(t(a)){let n=r[e];r[e]=t(n)?sp(n,a):sp(a)}else r[e]=a}return r}function cp(e,t){return sp(ap,e,t||{})}function lp(e,t){return sp(op,e,t||{})}var up=class{constructor(e){this.client=e,this.enroll=this._enroll.bind(this),this.challenge=this._challenge.bind(this),this.verify=this._verify.bind(this),this.authenticate=this._authenticate.bind(this),this.register=this._register.bind(this)}async _enroll(e){return this.client.mfa.enroll(Object.assign(Object.assign({},e),{factorType:`webauthn`}))}async _challenge({factorId:e,webauthn:t,friendlyName:n,signal:r},i){try{let{data:a,error:o}=await this.client.mfa.challenge({factorId:e,webauthn:t});if(!a)return{data:null,error:o};let s=r??Xf.createNewAbortSignal();if(a.webauthn.type===`create`){let{user:e}=a.webauthn.credential_options.publicKey;if(!e.name){let t=n;if(t)e.name=`${e.id}:${t}`;else{let t=(await this.client.getUser()).data.user,n=t?.user_metadata?.name||t?.email||t?.id||`User`;e.name=`${e.id}:${n}`}}e.displayName||=e.name}switch(a.webauthn.type){case`create`:{let{data:t,error:n}=await rp({publicKey:cp(a.webauthn.credential_options.publicKey,i?.create),signal:s});return t?{data:{factorId:e,challengeId:a.id,webauthn:{type:a.webauthn.type,credential_response:t}},error:null}:{data:null,error:n}}case`request`:{let t=lp(a.webauthn.credential_options.publicKey,i?.request),{data:n,error:r}=await ip(Object.assign(Object.assign({},a.webauthn.credential_options),{publicKey:t,signal:s}));return n?{data:{factorId:e,challengeId:a.id,webauthn:{type:a.webauthn.type,credential_response:n}},error:null}:{data:null,error:r}}}}catch(e){return W(e)?{data:null,error:e}:{data:null,error:new dd(`Unexpected error in challenge`,e)}}}async _verify({challengeId:e,factorId:t,webauthn:n}){return this.client.mfa.verify({factorId:t,challengeId:e,webauthn:n})}async _authenticate({factorId:e,webauthn:{rpId:t=typeof window<`u`?window.location.hostname:void 0,rpOrigins:n=typeof window<`u`?[window.location.origin]:void 0,signal:r}={}},i){if(!t)return{data:null,error:new cd(`rpId is required for WebAuthn authentication`)};try{if(!np())return{data:null,error:new dd(`Browser does not support WebAuthn`,null)};let{data:a,error:o}=await this.challenge({factorId:e,webauthn:{rpId:t,rpOrigins:n},signal:r},{request:i});if(!a)return{data:null,error:o};let{webauthn:s}=a;return this._verify({factorId:e,challengeId:a.challengeId,webauthn:{type:s.type,rpId:t,rpOrigins:n,credential_response:s.credential_response}})}catch(e){return W(e)?{data:null,error:e}:{data:null,error:new dd(`Unexpected error in authenticate`,e)}}}async _register({friendlyName:e,webauthn:{rpId:t=typeof window<`u`?window.location.hostname:void 0,rpOrigins:n=typeof window<`u`?[window.location.origin]:void 0,signal:r}={}},i){if(!t)return{data:null,error:new cd(`rpId is required for WebAuthn registration`)};try{if(!np())return{data:null,error:new dd(`Browser does not support WebAuthn`,null)};let{data:a,error:o}=await this._enroll({friendlyName:e});if(!a)return await this.client.mfa.listFactors().then(t=>t.data?.all.find(t=>t.factor_type===`webauthn`&&t.friendly_name===e&&t.status!==`unverified`)).then(e=>e?this.client.mfa.unenroll({factorId:e?.id}):void 0),{data:null,error:o};let{data:s,error:c}=await this._challenge({factorId:a.id,friendlyName:a.friendly_name,webauthn:{rpId:t,rpOrigins:n},signal:r},{create:i});return s?this._verify({factorId:a.id,challengeId:s.challengeId,webauthn:{rpId:t,rpOrigins:n,type:s.webauthn.type,credential_response:s.webauthn.credential_response}}):{data:null,error:c}}catch(e){return W(e)?{data:null,error:e}:{data:null,error:new dd(`Unexpected error in register`,e)}}}};Vf();var dp={url:td,storageKey:nd,autoRefreshToken:!0,persistSession:!0,detectSessionInUrl:!0,headers:rd,flowType:`implicit`,debug:!1,hasCustomAuthorizationHeader:!1,throwOnError:!1,lockAcquireTimeout:5e3,skipAutoInitialize:!1,experimental:{}},fp={},pp=class e{get jwks(){return fp[this.storageKey]?.jwks??{keys:[]}}set jwks(e){fp[this.storageKey]=Object.assign(Object.assign({},fp[this.storageKey]),{jwks:e})}get jwks_cached_at(){return fp[this.storageKey]?.cachedAt??-(2**53-1)}set jwks_cached_at(e){fp[this.storageKey]=Object.assign(Object.assign({},fp[this.storageKey]),{cachedAt:e})}constructor(t){var n;this.userStorage=null,this.memoryStorage=null,this.stateChangeEmitters=new Map,this.autoRefreshTicker=null,this.autoRefreshTickTimeout=null,this.visibilityChangedCallback=null,this.refreshingDeferred=null,this.lastRefreshFailure=null,this._sessionRemovalEpoch=0,this.initializePromise=null,this._pendingInitNotifications=null,this.detectSessionInUrl=!0,this.hasCustomAuthorizationHeader=!1,this.suppressGetSessionWarning=!1,this.lock=null,this.lockAcquired=!1,this.pendingInLock=[],this.broadcastChannel=null,this.logger=console.log;let r=Object.assign(Object.assign({},dp),t);if(this.storageKey=r.storageKey,this.instanceID=e.nextInstanceID[this.storageKey]??0,e.nextInstanceID[this.storageKey]=this.instanceID+1,this.logDebugMessages=!!r.debug,typeof r.debug==`function`&&(this.logger=r.debug),this.instanceID>0&&K()){let e=`${this._logPrefix()} Multiple GoTrueClient instances detected in the same browser context. It is not an error, but this should be avoided as it may produce undefined behavior when used concurrently under the same storage key.`;console.warn(e),this.logDebugMessages&&console.trace(e)}if(this.persistSession=r.persistSession,this.autoRefreshToken=r.autoRefreshToken,this.experimental=r.experimental??{},this.admin=new Rf({url:r.url,headers:r.headers,fetch:r.fetch,experimental:this.experimental}),this.url=r.url,this.headers=r.headers,this.fetch=Ud(r.fetch),this.detectSessionInUrl=r.detectSessionInUrl,this.flowType=r.flowType,this.hasCustomAuthorizationHeader=r.hasCustomAuthorizationHeader,this.throwOnError=r.throwOnError,this.lockAcquireTimeout=r.lockAcquireTimeout,r.lock!=null&&(this.lock=r.lock),this.jwks||(this.jwks={keys:[]},this.jwks_cached_at=-(2**53-1)),this.mfa={verify:this._verify.bind(this),enroll:this._enroll.bind(this),unenroll:this._unenroll.bind(this),challenge:this._challenge.bind(this),listFactors:this._listFactors.bind(this),challengeAndVerify:this._challengeAndVerify.bind(this),getAuthenticatorAssuranceLevel:this._getAuthenticatorAssuranceLevel.bind(this),webauthn:new up(this)}
21,this.oauth={getAuthorizationDetails:this._getAuthorizationDetails.bind(this),approveAuthorization:this._approveAuthorization.bind(this),denyAuthorization:this._denyAuthorization.bind(this),listGrants:this._listOAuthGrants.bind(this),revokeGrant:this._revokeOAuthGrant.bind(this)},this.passkey={startRegistration:this._startPasskeyRegistration.bind(this),verifyRegistration:this._verifyPasskeyRegistration.bind(this),startAuthentication:this._startPasskeyAuthentication.bind(this),verifyAuthentication:this._verifyPasskeyAuthentication.bind(this),list:this._listPasskeys.bind(this),update:this._updatePasskey.bind(this),delete:this._deletePasskey.bind(this)},this.persistSession?(r.storage?this.storage=r.storage:Vd()?this.storage=globalThis.localStorage:(this.memoryStorage={},this.storage=zf(this.memoryStorage)),r.userStorage&&(this.userStorage=r.userStorage)):(this.memoryStorage={},this.storage=zf(this.memoryStorage)),K()&&globalThis.BroadcastChannel&&this.persistSession&&this.storageKey){try{this.broadcastChannel=new globalThis.BroadcastChannel(this.storageKey)}catch(e){console.error(`Failed to create a new BroadcastChannel, multi-tab state changes will not be available`,e)}(n=this.broadcastChannel)==null||n.addEventListener(`message`,async e=>{this._debug(`received broadcast notification from other tab or client`,e),(e.data.event===`TOKEN_REFRESHED`||e.data.event===`SIGNED_IN`)&&(this.lastRefreshFailure=null);try{await this._notifyAllSubscribers(e.data.event,e.data.session,!1)}catch(e){this._debug(`#broadcastChannel`,`error`,e)}})}r.skipAutoInitialize||this.initialize().catch(e=>{this._debug(`#initialize()`,`error`,e)})}isThrowOnErrorEnabled(){return this.throwOnError}_returnResult(e){if(this.throwOnError&&e&&e.error)throw e.error;return e}_logPrefix(){return`GoTrueClient@${this.storageKey}:${this.instanceID} (${Qu}) ${new Date().toISOString()}`}_debug(...e){return this.logDebugMessages&&this.logger(this._logPrefix(),...e),this}async initialize(){if(this.initializePromise)return await this.initializePromise;this._pendingInitNotifications=[],this.initializePromise=(async()=>this.lock==null?await this._initialize():await this._acquireLock(this.lockAcquireTimeout,async()=>await this._initialize()))();let e=await this.initializePromise,t=this._pendingInitNotifications??[];this._pendingInitNotifications=null;for(let e of t)await this._notifyAllSubscribers(e.event,e.session,e.broadcast);return e}async _initialize(){try{let e={},t=`none`;if(K()&&(e=Hd(window.location.href),this._isImplicitGrantCallback(e)?t=`implicit`:await this._isPKCECallback(e)&&(t=`pkce`)),K()&&this.detectSessionInUrl&&t!==`none`){let{data:n,error:r}=await this._getSessionFromURL(e,t);if(r){if(this._debug(`#_initialize()`,`error detecting session from URL`,r),vd(r)){let e=r.details?.code;if(e===`identity_already_exists`||e===`identity_not_found`||e===`single_identity_not_deletable`)return{error:r}}return{error:r}}let{session:i,redirectType:a}=n;return this._debug(`#_initialize()`,`detected session in URL`,i,`redirect type`,a),await this._saveSession(i),setTimeout(async()=>{a===`recovery`?await this._notifyAllSubscribers(`PASSWORD_RECOVERY`,i):await this._notifyAllSubscribers(`SIGNED_IN`,i)},0),{error:null}}return await this._recoverAndRefresh(),{error:null}}catch(e){return W(e)?this._returnResult({error:e}):this._returnResult({error:new dd(`Unexpected error during initialization`,e)})}finally{await this._handleVisibilityChange(),this._debug(`#_initialize()`,`end`)}}async signInAnonymously(e){try{let{data:t,error:n}=await q(this.fetch,`POST`,`${this.url}/signup`,{headers:this.headers,body:{data:e?.options?.data??{},gotrue_meta_security:{captcha_token:e?.options?.captchaToken}},xform:Af});if(n||!t)return this._returnResult({data:{user:null,session:null},error:n});let r=t.session,i=t.user;return t.session&&(await this._saveSession(t.session),await this._notifyAllSubscribers(`SIGNED_IN`,r)),this._returnResult({data:{user:i,session:r},error:null})}catch(e){if(W(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async signUp(e){let t=null;try{let n;if(`email`in e){let{email:r,password:i,options:a}=e,o=null,s=null;this.flowType===`pkce`&&([o,s,t]=await this._getCodeChallengeAndMethod()),n=await q(this.fetch,`POST`,`${this.url}/signup`,{headers:this.headers,redirectTo:this._maybeAppendFlowIdToRedirect(a?.emailRedirectTo,t),body:{email:r,password:i,data:a?.data??{},gotrue_meta_security:{captcha_token:a?.captchaToken}
21,code_challenge:o,code_challenge_method:s},xform:Af})}else if(`phone`in e){let{phone:t,password:r,options:i}=e;n=await q(this.fetch,`POST`,`${this.url}/signup`,{headers:this.headers,body:{phone:t,password:r,data:i?.data??{},channel:i?.channel??`sms`,gotrue_meta_security:{captcha_token:i?.captchaToken}},xform:Af})}else throw new gd(`You must provide either an email or phone number and a password`);let{data:r,error:i}=n;if(i||!r)return await df(this.storage,this.storageKey,t),this._returnResult({data:{user:null,session:null},error:i});let a=r.session,o=r.user;return r.session&&(await this._saveSession(r.session),await this._notifyAllSubscribers(`SIGNED_IN`,a)),this._returnResult({data:{user:o,session:a},error:null})}catch(e){if(await df(this.storage,this.storageKey,t),W(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async signInWithPassword(e){try{let t;if(`email`in e){let{email:n,password:r,options:i}=e;t=await q(this.fetch,`POST`,`${this.url}/token?grant_type=password`,{headers:this.headers,body:{email:n,password:r,gotrue_meta_security:{captcha_token:i?.captchaToken}},xform:jf})}else if(`phone`in e){let{phone:n,password:r,options:i}=e;t=await q(this.fetch,`POST`,`${this.url}/token?grant_type=password`,{headers:this.headers,body:{phone:n,password:r,gotrue_meta_security:{captcha_token:i?.captchaToken}},xform:jf})}else throw new gd(`You must provide either an email or phone number and a password`);let{data:n,error:r}=t;if(r)return this._returnResult({data:{user:null,session:null},error:r});if(!n||!n.session||!n.user){let e=new hd;return this._returnResult({data:{user:null,session:null},error:e})}return n.session&&(await this._saveSession(n.session),await this._notifyAllSubscribers(`SIGNED_IN`,n.session)),this._returnResult({data:Object.assign({user:n.user,session:n.session},n.weak_password?{weakPassword:n.weak_password}:null),error:r})}catch(e){if(W(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async signInWithOAuth(e){return await this._handleProviderSignIn(e.provider,{redirectTo:e.options?.redirectTo,scopes:e.options?.scopes,queryParams:e.options?.queryParams,skipBrowserRedirect:e.options?.skipBrowserRedirect})}async exchangeCodeForSession(e,t){return await this.initializePromise,this.lock==null?this._exchangeCodeForSession(e,t):this._acquireLock(this.lockAcquireTimeout,async()=>this._exchangeCodeForSession(e,t))}async signInWithWeb3(e){let{chain:t}=e;switch(t){case`ethereum`:return await this.signInWithEthereum(e);case`solana`:return await this.signInWithSolana(e);default:throw Error(`@supabase/auth-js: Unsupported chain "${t}"`)}}async signInWithEthereum(e){let t,n;if(`message`in e)t=e.message,n=e.signature;else{let{chain:r,wallet:i,statement:a,options:o}=e,s;if(!K()){if(typeof i!=`object`||!o?.url)throw Error(`@supabase/auth-js: Both wallet and url must be specified in non-browser environments.`);s=i}else if(typeof i==`object`)s=i;else{let e=window;if(`ethereum`in e&&typeof e.ethereum==`object`&&`request`in e.ethereum&&typeof e.ethereum.request==`function`)s=e.ethereum;else throw Error(`@supabase/auth-js: No compatible Ethereum wallet interface on the window object (window.ethereum) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'ethereum', wallet: resolvedUserWallet }) instead.`)}let c=new URL(o?.url??window.location.href),l=await s.request({method:`eth_requestAccounts`}).then(e=>e).catch(()=>{throw Error(`@supabase/auth-js: Wallet method eth_requestAccounts is missing or invalid`)});if(!l||l.length===0)throw Error(`@supabase/auth-js: No accounts available. Please ensure the wallet is connected.`);let u=Hf(l[0]),d=o?.signInWithEthereum?.chainId;d||=Uf(await s.request({method:`eth_chainId`})),t=Gf({domain:c.host,address:u,statement:a,uri:c.href,version:`1`,chainId:d,nonce:o?.signInWithEthereum?.nonce,issuedAt:o?.signInWithEthereum?.issuedAt??new Date,expirationTime:o?.signInWithEthereum?.expirationTime,notBefore:o?.signInWithEthereum?.notBefore,requestId:o?.signInWithEthereum?.requestId,resources:o?.signInWithEthereum?.resources}),n=await s.request({method:`personal_sign`,params:[Wf(t),u]})}try{let{data:r,error:i}=await q(this.fetch,`POST`,`${this.url}/token?grant_type=web3`,{headers:this.headers,body:Object.assign({chain:`ethereum`,message:t,signature:n},e.options?.captchaToken?{gotrue_meta_security:{captcha_token:e.options?.captchaToken}}:null),xform:Af});if(i)throw i;if(!r||!r.session||!r.user){let e=new hd;return this._returnResult({data:{user:null,session:null},error:e})}return r.session&&(await this._saveSession(r.session),await this._notifyAllSubscribers(`SIGNED_IN`,r.session)),this._returnResult({data:Object.assign({},r),error:i})}catch(e){if(W(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async signInWithSolana(e){let t,n;if(`message`in e)t=e.message,n=e.signature;else{let{chain:r,wallet:i,statement:a,options:o}=e,s;if(!K()){if(typeof i!=`object`||!o?.url)throw Error(`@supabase/auth-js: Both wallet and url must be specified in non-browser environments.`);s=i}else if(typeof i==`object`)s=i;else{let e=window;if(`solana`in e&&typeof e.solana==`object`&&(`signIn`in e.solana&&typeof e.solana.signIn==`function`||`signMessage`in e.
21solana&&typeof e.solana.signMessage==`function`))s=e.solana;else throw Error(`@supabase/auth-js: No compatible Solana wallet interface on the window object (window.solana) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'solana', wallet: resolvedUserWallet }) instead.`)}let c=new URL(o?.url??window.location.href);if(`signIn`in s&&s.signIn){let e=await s.signIn(Object.assign(Object.assign(Object.assign({issuedAt:new Date().toISOString()},o?.signInWithSolana),{version:`1`,domain:c.host,uri:c.href}),a?{statement:a}:null)),r;if(Array.isArray(e)&&e[0]&&typeof e[0]==`object`)r=e[0];else if(e&&typeof e==`object`&&`signedMessage`in e&&`signature`in e)r=e;else throw Error(`@supabase/auth-js: Wallet method signIn() returned unrecognized value`);if(`signedMessage`in r&&`signature`in r&&(typeof r.signedMessage==`string`||r.signedMessage instanceof Uint8Array)&&r.signature instanceof Uint8Array)t=typeof r.signedMessage==`string`?r.signedMessage:new TextDecoder().decode(r.signedMessage),n=r.signature;else throw Error(`@supabase/auth-js: Wallet method signIn() API returned object without signedMessage and signature fields`)}else{if(!(`signMessage`in s)||typeof s.signMessage!=`function`||!(`publicKey`in s)||typeof s!=`object`||!s.publicKey||!(`toBase58`in s.publicKey)||typeof s.publicKey.toBase58!=`function`)throw Error(`@supabase/auth-js: Wallet does not have a compatible signMessage() and publicKey.toBase58() API`);t=[`${c.host} wants you to sign in with your Solana account:`,s.publicKey.toBase58(),...a?[``,a,``]:[``],`Version: 1`,`URI: ${c.href}`,`Issued At: ${o?.signInWithSolana?.issuedAt??new Date().toISOString()}`,...o?.signInWithSolana?.notBefore?[`Not Before: ${o.signInWithSolana.notBefore}`]:[],...o?.signInWithSolana?.expirationTime?[`Expiration Time: ${o.signInWithSolana.expirationTime}`]:[],...o?.signInWithSolana?.chainId?[`Chain ID: ${o.signInWithSolana.chainId}`]:[],...o?.signInWithSolana?.nonce?[`Nonce: ${o.signInWithSolana.nonce}`]:[],...o?.signInWithSolana?.requestId?[`Request ID: ${o.signInWithSolana.requestId}`]:[],...o?.signInWithSolana?.resources?.length?[`Resources`,...o.signInWithSolana.resources.map(e=>`- ${e}`)]:[]].join(`
22`);let e=await s.signMessage(new TextEncoder().encode(t),`utf8`);if(!e||!(e instanceof Uint8Array))throw Error(`@supabase/auth-js: Wallet signMessage() API returned an recognized value`);n=e}}try{let{data:r,error:i}=await q(this.fetch,`POST`,`${this.url}/token?grant_type=web3`,{headers:this.headers,body:Object.assign({chain:`solana`,message:t,signature:Ld(n)},e.options?.captchaToken?{gotrue_meta_security:{captcha_token:e.options?.captchaToken}}:null),xform:Af});if(i)throw i;if(!r||!r.session||!r.user){let e=new hd;return this._returnResult({data:{user:null,session:null},error:e})}return r.session&&(await this._saveSession(r.session),await this._notifyAllSubscribers(`SIGNED_IN`,r.session)),this._returnResult({data:Object.assign({},r),error:i})}catch(e){if(W(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async _exchangeCodeForSession(e,t){let n=t?.flowId!=null,r=n?rf(t?.flowId):K()?rf(Hd(window.location.href)[sd]):null;n&&!r&&this._debug(`#_exchangeCodeForSession()`,`provided flowId is not a valid flow id`,t?.flowId);let{verifier:i,flowId:a}=n&&!r?{verifier:null,flowId:null}:await uf(this.storage,this.storageKey,r),[o,s]=(i??``).split(`/`);try{if(!o&&this.flowType===`pkce`)throw new bd;let{data:t,error:n}=await q(this.fetch,`POST`,`${this.url}/token?grant_type=pkce`,{headers:this.headers,body:{auth_code:e,code_verifier:o},xform:Af});if(await df(this.storage,this.storageKey,a),n)throw n;if(!t||!t.session||!t.user){let e=new hd;return this._returnResult({data:{user:null,session:null,redirectType:null},error:e})}return t.session&&(await this._saveSession(t.session),await this._notifyAllSubscribers(s===`recovery`?`PASSWORD_RECOVERY`:`SIGNED_IN`,t.session)),this._returnResult({data:Object.assign(Object.assign({},t),{redirectType:s??null}),error:n})}catch(e){if(await df(this.storage,this.storageKey,a),W(e))return this._returnResult({data:{user:null,session:null,redirectType:null},error:e});throw e}}async signInWithIdToken(e){try{let{options:t,provider:n,token:r,access_token:i,nonce:a}=e,{data:o,error:s}=await q(this.fetch,`POST`,`${this.url}/token?grant_type=id_token`,{headers:this.headers,body:{provider:n,id_token:r,access_token:i,nonce:a,gotrue_meta_security:{captcha_token:t?.captchaToken}},xform:Af});if(s)return this._returnResult({data:{user:null,session:null},error:s});if(!o||!o.session||!o.user){let e=new hd;return this._returnResult({data:{user:null,session:null},error:e})}return o.session&&(await this._saveSession(o.session),await this._notifyAllSubscribers(`SIGNED_IN`,o.session)),this._returnResult({data:o,error:s})}catch(e){if(W(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async signInWithOtp(e){let t=null;try{if(`email`in e){let{email:n,options:r}=e,i=null,a=null;this.flowType===`pkce`&&([i,a,t]=await this._getCodeChallengeAndMethod());let{error:o}=await q(this.fetch,`POST`,`${this.url}/otp`,{headers:this.headers,body:{email:n,data:r?.data??{},create_user:r?.shouldCreateUser??!0,gotrue_meta_security:{captcha_token:r?.captchaToken},code_challenge:i,code_challenge_method:a},redirectTo:this._maybeAppendFlowIdToRedirect(r?.emailRedirectTo,t)});return this._returnResult({data:{user:null,session:null},error:o})}if(`phone`in e){let{phone:t,options:n}=e,{data:r,error:i}=await q(this.fetch,`POST`,`${this.url}/otp`,{headers:this.headers,body:{phone:t,data:n?.data??{},create_user:n?.shouldCreateUser??!0,gotrue_meta_security:{captcha_token:n?.captchaToken},channel:n?.channel??`sms`}});return this._returnResult({data:{user:null,session:null,messageId:r?.message_id},error:i})}throw new gd(`You must provide either an email or phone number.`)}catch(e){if(await df(this.storage,this.storageKey,t),W(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async verifyOtp(e){try{let t,n;`options`in e&&(t=e.options?.redirectTo,n=e.options?.captchaToken);let{data:r,error:i}=await q(this.fetch,`POST`,`${this.url}/verify`,{headers:this.headers,body:Object.assign(Object.assign({},e),{gotrue_meta_security:{captcha_token:n}}),redirectTo:t,xform:Af});if(i)throw i;if(!r)throw Error(`An error occurred on token verification.`);let a=r.session,o=r.user;return a?.access_token&&(await this._saveSession(a),await this._notifyAllSubscribers(e.type==`recovery`?`PASSWORD_RECOVERY`:`SIGNED_IN`,a)),this._returnResult({data:{user:o,session:a},error:null})}catch(e){if(W(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async signInWithSSO(e){let t=null;try{let n=null,r=null;this.flowType===`pkce`&&([n,r,t]=await this._getCodeChallengeAndMethod());let i=await q(this.fetch,`POST`,`${this.url}/sso`,{body:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},`providerId`in e?{provider_id:e.providerId}:null),`domain`in e?{domain:e.domain}:null),{redirect_to:this._maybeAppendFlowIdToRedirect(e.options?.redirectTo,t)}),e?.options?.captchaToken?{gotrue_meta_security:{captcha_token:e.options.captchaToken}}:null),{skip_http_redirect:!0,code_challenge:n,code_challenge_method:r}),headers:this.headers,xform:Nf});return i.data?.url&&K()&&!e.options?.skipBrowserRedirect&&window.location.assign(i.data.url),this._returnResult(i)}catch(e){if(await df(this.storage,this.storageKey,t),W(e))return this._returnResult({data:null,error:e});throw e}}async reauthenticate(){return await this.initializePromise,this.lock==null?await this._reauthenticate():await this._acquireLock(this.lockAcquireTimeout,async()=>await this._reauthenticate())}async _reauthenticate(){try{return await this._useSession(async e=>{let{data:{session:t},error:n}=e;if(n)throw n;if(!t)throw new pd;let{error:r}=await q(this.fetch,`GET`,`${this.url}/reauthenticate`,{headers:this.headers,jwt:t.access_token});return this._returnResult({data:{user:null,session:null},error:r})})}catch(e){if(W(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async resend(e){let t=null;try{let n=`${this.url}/resend`;if(`email`in e){let{email:r,type:i,options:a}=e,o=null,s=null;this.flowType===`pkce`&&([o,s,t]=await this._getCodeChallengeAndMethod());let{error:c}=await q(this.fetch,`POST`,n,{headers:this.headers,body:{email:r,type:i,gotrue_meta_security:{captcha_token:a?.captchaToken}
22,code_challenge:o,code_challenge_method:s},redirectTo:this._maybeAppendFlowIdToRedirect(a?.emailRedirectTo,t)});return c&&await df(this.storage,this.storageKey,t),this._returnResult({data:{user:null,session:null},error:c})}if(`phone`in e){let{phone:t,type:r,options:i}=e,{data:a,error:o}=await q(this.fetch,`POST`,n,{headers:this.headers,body:{phone:t,type:r,gotrue_meta_security:{captcha_token:i?.captchaToken}}});return this._returnResult({data:{user:null,session:null,messageId:a?.message_id},error:o})}throw new gd(`You must provide either an email or phone number and a type`)}catch(e){if(await df(this.storage,this.storageKey,t),W(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async getSession(){return await this.initializePromise,this.lock==null?await this._useSession(async e=>e):await this._acquireLock(this.lockAcquireTimeout,async()=>this._useSession(async e=>e))}async _acquireLock(e,t){this._debug(`#_acquireLock`,`begin`,e);try{if(this.lockAcquired){let e=this.pendingInLock.length?this.pendingInLock[this.pendingInLock.length-1]:Promise.resolve(),n=(async()=>(await e,await t()))();return this.pendingInLock.push((async()=>{try{await n}catch{}})()),n}return await this.lock(`lock:${this.storageKey}`,e,async()=>{this._debug(`#_acquireLock`,`lock acquired for storage key`,this.storageKey);try{this.lockAcquired=!0;let e=t();for(this.pendingInLock.push((async()=>{try{await e}catch{}})()),await e;this.pendingInLock.length;){let e=[...this.pendingInLock];await Promise.all(e),this.pendingInLock.splice(0,e.length)}return await e}finally{this._debug(`#_acquireLock`,`lock released for storage key`,this.storageKey),this.lockAcquired=!1}})}finally{this._debug(`#_acquireLock`,`end`)}}async _useSession(e){this._debug(`#_useSession`,`begin`);try{return await e(await this.__loadSession())}finally{this._debug(`#_useSession`,`end`)}}async __loadSession(){this._debug(`#__loadSession()`,`begin`),this.lock!=null&&!this.lockAcquired&&this._debug(`#__loadSession()`,`used outside of an acquired lock!`,Error().stack);try{let e=null,t=await Kd(this.storage,this.storageKey);if(this._debug(`#getSession()`,`session from storage`,t),t!==null&&(this._isValidSession(t)?e=t:(this._debug(`#getSession()`,`session from storage is not valid`),await this._removeSession())),!e)return{data:{session:null},error:null};let n=e.expires_at?e.expires_at*1e3-Date.now()<$u:!1;if(this._debug(`#__loadSession()`,`session has${n?``:` not`} expired`,`expires_at`,e.expires_at),!n){if(this.userStorage){let t=await Kd(this.userStorage,this.storageKey+`-user`);t?.user?e.user=t.user:e.user=Sf()}if(this.storage.isServer&&e.user&&!e.user.__isUserNotAvailableProxy){let t={value:this.suppressGetSessionWarning};e.user=Cf(e.user,t),t.value&&(this.suppressGetSessionWarning=!0)}return{data:{session:e},error:null}}let{data:r,error:i}=await this._callRefreshToken(e.refresh_token);if(i){if(e.expires_at&&e.expires_at*1e3>Date.now()){let t=await Kd(this.storage,this.storageKey);if(t&&t.refresh_token===e.refresh_token)return this._returnResult({data:{session:e},error:null})}return this._returnResult({data:{session:null},error:i})}return this._returnResult({data:{session:r},error:null})}finally{this._debug(`#__loadSession()`,`end`)}}async getUser(e){if(e)return await this._getUser(e);await this.initializePromise;let t;return t=this.lock==null?await this._getUser():await this._acquireLock(this.lockAcquireTimeout,async()=>await this._getUser()),t.data.user&&(this.suppressGetSessionWarning=!0),t}async _getUser(e){try{return e?await q(this.fetch,`GET`,`${this.url}/user`,{headers:this.headers,jwt:e,xform:Mf}):await this._useSession(async e=>{let{data:t,error:n}=e;if(n)throw n;return!t.session?.access_token&&!this.hasCustomAuthorizationHeader?{data:{user:null},error:new pd}:await q(this.fetch,`GET`,`${this.url}/user`,{headers:this.headers,jwt:t.session?.access_token??void 0,xform:Mf})})}catch(e){if(W(e))return md(e)&&await this._removeSession(),this._returnResult({data:{user:null},error:e});throw e}}async updateUser(e,t={}){return await this.initializePromise,this.lock==null?await this._updateUser(e,t):await this._acquireLock(this.lockAcquireTimeout,async()=>await this._updateUser(e,t))}async _updateUser(e,t={}){let n=null;try{return await this._useSession(async r=>{let{data:i,error:a}=r;if(a)throw a;if(!i.session)throw new pd;let o=i.session,s=null,c=null;this.flowType===`pkce`&&e.email!=null&&([s,c,n]=await this._getCodeChallengeAndMethod());let{data:l,error:u}=await q(this.fetch,`PUT`,`${this.url}/user`,{headers:this.headers,redirectTo:this._maybeAppendFlowIdToRedirect(t?.emailRedirectTo,n),body:Object.assign(Object.assign({},e),{code_challenge:s,code_challenge_method:c}),jwt:o.access_token,xform:Mf});if(u)throw u;return o.user=l.user,await this._saveSession(o),await this._notifyAllSubscribers(`USER_UPDATED`,o),this._returnResult({data:{user:o.user},error:null})})}catch(e){if(await df(this.storage,this.storageKey,n),W(e))return this._returnResult({data:{user:null},error:e});throw e}}async setSession(e){return await this.initializePromise,this.lock==null?await this._setSession(e):await this._acquireLock(this.lockAcquireTimeout,async()=>await this._setSession(e))}async _setSession(e){try{if(!e.access_token||!e.refresh_token)throw new pd;let t=Date.now()/1e3,n=t,r=!0,i=null,{payload:a}=Yd(e.access_token);if(a.exp&&(n=a.exp,r=n<=t),r){let{data:t,error:n}=await this._callRefreshToken(e.refresh_token);if(n)return this._returnResult({data:{user:null,session:null},error:n});if(!t)return{data:{user:null,session:null},error:null};i=t}else{let{data:r,error:a}=await this._getUser(e.access_token);if(a)return this._returnResult({data:{user:null,session:null},error:a});i={access_token:e.access_token,refresh_token:e.refresh_token,user:r.user,token_type:`bearer`,expires_in:n-t,expires_at:n},await this._saveSession(i),await this._notifyAllSubscribers(`SIGNED_IN`,i)}return this._returnResult({data:{user:i.user,session:i},error:null})}catch(e){if(W(e))return this._returnResult({data:{session:null,user:null},error:e});throw e}}async refreshSession(e){return await this.initializePromise,this.lock==null?await this._refreshSession(e):await this._acquireLock(this.lockAcquireTimeout,async()=>await this._refreshSession(e))}async _refreshSession(e){try{return await this._useSession(async t=>{if(!e){let{data:n,error:r}=t;if(r)throw r;e=n.session??void 0}if(!e?.refresh_token)throw new pd;let{data:n,error:r}=await this._callRefreshToken(e.refresh_token);return r?this._returnResult({data:{user:null,session:null},error:r}):n?this._returnResult({data:{user:n.user,session:n},error:null}):this._returnResult({data:{user:null,session:null},error:null})})}catch(e){if(W(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async _getSessionFromURL(e,t){try{if(!K())throw new _d(`No browser detected.`);if(e.error||e.error_description||e.error_code)throw new _d(e.error_description||`Error in URL with unspecified error_description`,{error:e.error||`unspecified_error`,code:e.error_code||`unspecified_code`});switch(t){case`implicit`:if(this.flowType===`pkce`)throw new yd(`Not a valid PKCE flow url.`);break;case`pkce`:if(this.flowType===`implicit`)throw new _d(`Not a valid implicit grant flow url.`)}if(t===`pkce`){if(this._debug(`#_initialize()`,`begin`,`is PKCE flow`,!0),!e.code)throw new yd(`No code detected.`);let{data:t,error:n}=await this._exchangeCodeForSession(e.code,{flowId:e[sd]});if(n)throw n;let r=new URL(window.location.href);return r.searchParams.delete(`code`),r.searchParams.delete(sd),window.history.replaceState(window.history.state,``,r.toString()),{data:{session:t.session,redirectType:t.redirectType??null},error:null}}let{provider_token:n,provider_refresh_token:r,access_token:i,refresh_token:a,expires_in:o,expires_at:s,token_type:c}=e;if(!i||!o||!a||!c)throw new _d(`No session defined in URL`);let l=Math.round(Date.now()/1e3),u=parseInt(o),d=l+u;s&&(d=parseInt(s));let f=d-l;
22f*1e3<=3e4&&console.warn(`@supabase/gotrue-js: Session as retrieved from URL expires in ${f}s, should have been closer to ${u}s`);let p=d-u;l-p>=120?console.warn(`@supabase/gotrue-js: Session as retrieved from URL was issued over 120s ago, URL could be stale`,p,d,l):l-p<0&&console.warn(`@supabase/gotrue-js: Session as retrieved from URL was issued in the future? Check the device clock for skew`,p,d,l);let{data:m,error:h}=await this._getUser(i);if(h)throw h;let g={provider_token:n,provider_refresh_token:r,access_token:i,expires_in:u,expires_at:d,refresh_token:a,token_type:c,user:m.user};return window.location.hash=``,this._debug(`#_getSessionFromURL()`,`clearing window.location.hash`),this._returnResult({data:{session:g,redirectType:e.type},error:null})}catch(e){if(W(e))return this._returnResult({data:{session:null,redirectType:null},error:e});throw e}}_isImplicitGrantCallback(e){return typeof this.detectSessionInUrl==`function`?this.detectSessionInUrl(new URL(window.location.href),e):!!(e.access_token||e.error||e.error_description||e.error_code)}async _isPKCECallback(e){if(!e.code)return!1;let t=rf(e[sd]);return t&&await Kd(this.storage,of(this.storageKey,t))?!0:!!await Kd(this.storage,`${this.storageKey}-code-verifier`)}async signOut(e={scope:`global`}){return await this.initializePromise,this.lock==null?await this._signOut(e):await this._acquireLock(this.lockAcquireTimeout,async()=>await this._signOut(e))}async _signOut({scope:e}={scope:`global`}){return await this._useSession(async t=>{let n=async()=>{await this._removeSession()},{data:r,error:i}=t;if(i&&!md(i))return this._returnResult({error:i});let a=r.session?.access_token;if(a){let{error:t}=await this.admin.signOut(a,e);if(t&&!(ud(t)&&(t.status===404||t.status===401||t.status===403)||md(t)))return e!==`others`&&await n(),this._returnResult({error:t})}return e!==`others`&&await n(),this._returnResult({error:null})})}onAuthStateChange(e){let t=zd(),n={id:t,callback:e,unsubscribe:()=>{this._debug(`#unsubscribe()`,`state change callback with id removed`,t),this.stateChangeEmitters.delete(t)}};return this._debug(`#onAuthStateChange()`,`registered callback with id`,t),this.stateChangeEmitters.set(t,n),(async()=>{await this.initializePromise,this.lock==null?await this._emitInitialSession(t):await this._acquireLock(this.lockAcquireTimeout,async()=>{this._emitInitialSession(t)})})(),{data:{subscription:n}}}async _emitInitialSession(e){return await this._useSession(async t=>{try{let{data:{session:n},error:r}=t;if(r)throw r;await this.stateChangeEmitters.get(e)?.callback(`INITIAL_SESSION`,n),this._debug(`INITIAL_SESSION`,`callback id`,e,`session`,n)}catch(t){await this.stateChangeEmitters.get(e)?.callback(`INITIAL_SESSION`,null),this._debug(`INITIAL_SESSION`,`callback id`,e,`error`,t),md(t)||Sd(t)||ud(t)&&(t.code===`refresh_token_not_found`||t.code===`refresh_token_already_used`||t.code===`session_expired`)?console.warn(t):console.error(t)}})}async resetPasswordForEmail(e,t={}){let n=null,r=null,i=null;this.flowType===`pkce`&&([n,r,i]=await this._getCodeChallengeAndMethod(!0));try{return await q(this.fetch,`POST`,`${this.url}/recover`,{body:{email:e,code_challenge:n,code_challenge_method:r,gotrue_meta_security:{captcha_token:t.captchaToken}},headers:this.headers,redirectTo:this._maybeAppendFlowIdToRedirect(t.redirectTo,i)})}catch(e){if(await df(this.storage,this.storageKey,i),W(e))return this._returnResult({data:null,error:e});throw e}}async getUserIdentities(){try{let{data:e,error:t}=await this.getUser();if(t)throw t;return this._returnResult({data:{identities:e.user.identities??[]},error:null})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}async linkIdentity(e){return`token`in e?this.linkIdentityIdToken(e):this.linkIdentityOAuth(e)}async linkIdentityOAuth(e){let t=null;try{let{data:n,error:r}=await this._useSession(async n=>{let{data:r,error:i}=n;if(i)throw i;let{url:a,flowId:o}=await this._getUrlForProvider(`${this.url}/user/identities/authorize`,e.provider,{redirectTo:e.options?.redirectTo,scopes:e.options?.scopes,queryParams:e.options?.queryParams,skipBrowserRedirect:!0});return t=o,await q(this.fetch,`GET`,a,{headers:this.headers,jwt:r.session?.access_token??void 0})});if(r)throw r;return K()&&!e.options?.skipBrowserRedirect&&window.location.assign(n?.url),this._returnResult({data:{provider:e.provider,url:n?.url,flowId:t},error:null})}catch(n){if(W(n))return this._returnResult({data:{provider:e.provider,url:null,flowId:t},error:n});throw n}}async linkIdentityIdToken(e){return await this._useSession(async t=>{try{let{error:n,data:{session:r}}=t;if(n)throw n;let{options:i,provider:a,token:o,access_token:s,nonce:c}=e,{data:l,error:u}=await q(this.fetch,`POST`,`${this.url}/token?grant_type=id_token`,{headers:this.headers,jwt:r?.access_token??void 0,body:{provider:a,id_token:o,access_token:s,nonce:c,link_identity:!0,gotrue_meta_security:{captcha_token:i?.captchaToken}},xform:Af});return u?this._returnResult({data:{user:null,session:null},error:u}):!l||!l.session||!l.user?this._returnResult({data:{user:null,session:null},error:new hd}):(l.session&&(await this._saveSession(l.session),await this._notifyAllSubscribers(`USER_UPDATED`,l.session)),this._returnResult({data:l,error:u}))}catch(e){if(await df(this.storage,this.storageKey,null),W(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}})}async unlinkIdentity(e){try{return await this._useSession(async t=>{let{data:n,error:r}=t;if(r)throw r;return await q(this.fetch,`DELETE`,`${this.url}/user/identities/${e.identity_id}`,{headers:this.headers,jwt:n.session?.access_token??void 0})})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}async _refreshAccessToken(e){let t=`#_refreshAccessToken()`;this._debug(t,`begin`);try{let n=Date.now();return await Zd(async n=>(n>0&&await Xd(200*2**(n-1)),this._debug(t,`refreshing attempt`,n),await q(this.fetch,`POST`,`${this.url}/token?grant_type=refresh_token`,{body:{refresh_token:e},headers:this.headers,xform:Af})),(e,t)=>{let r=200*2**e;return t&&Sd(t)&&Date.now()+r-n<3e4})}catch(e){if(this._debug(t,`error`,e),W(e))return this._returnResult({data:{session:null,user:null},error:e});throw e}finally{this._debug(t,`end`)}}_isValidSession(e){return typeof e==`object`&&!!e&&`access_token`in e&&`refresh_token`in e&&`expires_at`in e}async _handleProviderSignIn(e,t){let{url:n,flowId:r}=await this._getUrlForProvider(`${this.url}/authorize`,e,{redirectTo:t.redirectTo,scopes:t.scopes,queryParams:t.queryParams});return this._debug(`#_handleProviderSignIn()`,`provider`,e,`options`,t,`url`,n),K()&&!t.skipBrowserRedirect&&window.location.assign(n),{data:{provider:e,url:n,flowId:r},error:null}}async _recoverAndRefresh(){let e=`#_recoverAndRefresh()`;this._debug(e,`begin`);try{let t=await Kd(this.storage,this.storageKey);if(t&&this.userStorage){let e=await Kd(this.userStorage,this.storageKey+`-user`);!this.storage.isServer&&Object.is(this.storage,this.userStorage)&&!e&&(e={user:t.user},await Gd(this.userStorage,this.storageKey+`-user`,e)),t.user=e?.user??Sf()}else if(t&&!t.user&&!t.user){let e=await Kd(this.storage,this.storageKey+`-user`);e&&e?.user?(t.user=e.user,await qd(this.storage,this.storageKey+`-user`),await Gd(this.storage,this.storageKey,t)):t.user=Sf()}if(this._debug(e,`session from storage`,t),!this._isValidSession(t)){this._debug(e,`session is not val
22id`),t!==null&&await this._removeSession();return}let n=(t.expires_at??1/0)*1e3-Date.now()<$u;if(this._debug(e,`session has${n?``:` not`} expired with margin of ${$u}s`),n){if(this.autoRefreshToken&&t.refresh_token){let{error:n}=await this._callRefreshToken(t.refresh_token);n&&(wd(n)?this._debug(e,`refresh discarded by commit guard`,n):this._debug(e,`refresh failed`,n))}}else if(t.user&&t.user.__isUserNotAvailableProxy===!0)try{let{data:n,error:r}=await this._getUser(t.access_token);!r&&n?.user?(t.user=n.user,await this._saveSession(t),await this._notifyAllSubscribers(`SIGNED_IN`,t)):this._debug(e,`could not get user data, skipping SIGNED_IN notification`)}catch(t){console.error(`Error getting user data:`,t),this._debug(e,`error getting user data, skipping SIGNED_IN notification`,t)}else await this._notifyAllSubscribers(`SIGNED_IN`,t)}catch(t){this._debug(e,`error`,t),Sd(t)?console.warn(t):console.error(t);return}finally{this._debug(e,`end`)}}async _callRefreshToken(e){var t,n;if(!e)throw new pd;if(this.refreshingDeferred)return this.refreshingDeferred.promise;if(this.lastRefreshFailure&&this.lastRefreshFailure.refreshToken===e&&Date.now()<this.lastRefreshFailure.expiresAt)return this._debug(`#_callRefreshToken()`,`returning cached failure (cooldown active)`),this.lastRefreshFailure.result;let r=`#_callRefreshToken()`;this._debug(r,`begin`);try{this.refreshingDeferred=new Jd;let t=await Kd(this.storage,this.storageKey),{data:n,error:i}=await this._refreshAccessToken(e);if(i)throw i;if(!n.session)throw new pd;let a=await Kd(this.storage,this.storageKey);if(t!==null&&(a===null||a.refresh_token!==t.refresh_token)){this._debug(r,`commit guard: storage changed since refresh started, discarding rotated tokens`,{startedWith:`present`,nowHolds:a?`replaced`:`cleared`});let e={data:null,error:new Cd};return this.refreshingDeferred.resolve(e),e}let o=this._sessionRemovalEpoch;if(await this._saveSession(n.session),this._sessionRemovalEpoch!==o){this._debug(r,`commit guard (post-save): _removeSession ran during _saveSession, undoing write`),await qd(this.storage,this.storageKey),this.userStorage&&await qd(this.userStorage,this.storageKey+`-user`);let e={data:null,error:new Cd};return this.refreshingDeferred.resolve(e),e}await this._notifyAllSubscribers(`TOKEN_REFRESHED`,n.session);let s={data:n.session,error:null};return this.lastRefreshFailure=null,this.refreshingDeferred.resolve(s),s}catch(i){if(this._debug(r,`error`,i),W(i)){let n={data:null,error:i};if(!Sd(i)){let e=await Kd(this.storage,this.storageKey);e?.expires_at&&e.expires_at*1e3>Date.now()?this._debug(r,`proactive refresh failed, access token still valid — preserving session`):await this._removeSession()}return this.lastRefreshFailure={refreshToken:e,result:n,expiresAt:Date.now()+ed},(t=this.refreshingDeferred)==null||t.resolve(n),n}throw(n=this.refreshingDeferred)==null||n.reject(i),i}finally{this.refreshingDeferred=null,this._debug(r,`end`)}}async _notifyAllSubscribers(e,t,n=!0){if(this._pendingInitNotifications!==null&&n){this._pendingInitNotifications.push({event:e,session:t,broadcast:n});return}let r=`#_notifyAllSubscribers(${e})`;this._debug(r,`begin`,t,`broadcast = ${n}`);try{this.broadcastChannel&&n&&this.broadcastChannel.postMessage({event:e,session:t});let r=[],i=Array.from(this.stateChangeEmitters.values()).map(async n=>{try{await n.callback(e,t)}catch(e){r.push(e)}});if(await Promise.all(i),r.length>0){for(let e=0;e<r.length;e+=1)console.error(r[e]);throw r[0]}}finally{this._debug(r,`end`)}}async _saveSession(e){this._debug(`#_saveSession()`,e),this.suppressGetSessionWarning=!0;let t=Object.assign({},e),n=t.user&&t.user.__isUserNotAvailableProxy===!0;if(this.userStorage){!n&&t.user&&await Gd(this.userStorage,this.storageKey+`-user`,{user:t.user});let e=Object.assign({},t);delete e.user;let r=wf(e);await Gd(this.storage,this.storageKey,r)}else{let e=wf(t);await Gd(this.storage,this.storageKey,e)}}async _removeSession(){this._sessionRemovalEpoch+=1,this._debug(`#_removeSession()`),this.lastRefreshFailure=null,this.suppressGetSessionWarning=!1,await qd(this.storage,this.storageKey),await ff(this.storage,this.storageKey),await qd(this.storage,this.storageKey+`-user`),this.userStorage&&await qd(this.userStorage,this.storageKey+`-user`),await this._notifyAllSubscribers(`SIGNED_OUT`,null)}_removeVisibilityChangedCallback(){this._debug(`#_removeVisibilityChangedCallback()`);let e=this.visibilityChangedCallback;this.visibilityChangedCallback=null;try{e&&K()&&window!=null&&window.removeEventListener&&window.removeEventListener(`visibilitychange`,e)}
22catch(e){console.error(`removing visibilitychange callback failed`,e)}}async _startAutoRefresh(){await this._stopAutoRefresh(),this._debug(`#_startAutoRefresh()`);let e=setInterval(()=>this._autoRefreshTokenTick(),U);this.autoRefreshTicker=e,e&&typeof e==`object`&&typeof e.unref==`function`?e.unref():typeof Deno<`u`&&typeof Deno.unrefTimer==`function`&&Deno.unrefTimer(e);let t=setTimeout(async()=>{await this.initializePromise,await this._autoRefreshTokenTick()},0);this.autoRefreshTickTimeout=t,t&&typeof t==`object`&&typeof t.unref==`function`?t.unref():typeof Deno<`u`&&typeof Deno.unrefTimer==`function`&&Deno.unrefTimer(t)}async _stopAutoRefresh(){this._debug(`#_stopAutoRefresh()`);let e=this.autoRefreshTicker;this.autoRefreshTicker=null,e&&clearInterval(e);let t=this.autoRefreshTickTimeout;this.autoRefreshTickTimeout=null,t&&clearTimeout(t)}async startAutoRefresh(){this._removeVisibilityChangedCallback(),await this._startAutoRefresh()}async stopAutoRefresh(){this._removeVisibilityChangedCallback(),await this._stopAutoRefresh()}async dispose(){var e;this._removeVisibilityChangedCallback(),await this._stopAutoRefresh(),(e=this.broadcastChannel)==null||e.close(),this.broadcastChannel=null,this.stateChangeEmitters.clear()}async _autoRefreshTokenTick(){if(this._debug(`#_autoRefreshTokenTick()`,`begin`),this.lock!=null){try{await this._acquireLock(0,async()=>{try{let e=Date.now();try{return await this._useSession(async t=>{let{data:{session:n}}=t;if(!n||!n.refresh_token||!n.expires_at){this._debug(`#_autoRefreshTokenTick()`,`no session`);return}let r=Math.floor((n.expires_at*1e3-e)/U);this._debug(`#_autoRefreshTokenTick()`,`access token expires in ${r} ticks, a tick lasts ${U}ms, refresh threshold is 3 ticks`),r<=3&&await this._callRefreshToken(n.refresh_token)})}catch(e){console.error(`Auto refresh tick failed with error. This is likely a transient error.`,e)}}finally{this._debug(`#_autoRefreshTokenTick()`,`end`)}})}catch(e){if(e instanceof Bf)this._debug(`auto refresh token tick lock not available`);else throw e}return}if(this.refreshingDeferred!==null){this._debug(`#_autoRefreshTokenTick()`,`refresh already in flight, skipping`);return}try{let e=Date.now();try{await this._useSession(async t=>{let{data:{session:n}}=t;if(!n||!n.refresh_token||!n.expires_at){this._debug(`#_autoRefreshTokenTick()`,`no session`);return}let r=Math.floor((n.expires_at*1e3-e)/U);this._debug(`#_autoRefreshTokenTick()`,`access token expires in ${r} ticks, a tick lasts ${U}ms, refresh threshold is 3 ticks`),r<=3&&await this._callRefreshToken(n.refresh_token)})}catch(e){console.error(`Auto refresh tick failed with error. This is likely a transient error.`,e)}}finally{this._debug(`#_autoRefreshTokenTick()`,`end`)}}async _handleVisibilityChange(){if(this._debug(`#_handleVisibilityChange()`),!K()||!(window!=null&&window.addEventListener))return this.autoRefreshToken&&this.startAutoRefresh(),!1;try{this.visibilityChangedCallback=async()=>{try{await this._onVisibilityChanged(!1)}catch(e){this._debug(`#visibilityChangedCallback`,`error`,e)}},window==null||window.addEventListener(`visibilitychange`,this.visibilityChangedCallback),await this._onVisibilityChanged(!0)}catch(e){console.error(`_handleVisibilityChange`,e)}}async _onVisibilityChanged(e){let t=`#_onVisibilityChanged(${e})`;if(this._debug(t,`visibilityState`,document.visibilityState),document.visibilityState===`visible`){if(this.autoRefreshToken&&this._startAutoRefresh(),!e)if(await this.initializePromise,this.lock!=null)await this._acquireLock(this.lockAcquireTimeout,async()=>{if(document.visibilityState!==`visible`){this._debug(t,`acquired the lock to recover the session, but the browser visibilityState is no longer visible, aborting`);return}await this._recoverAndRefresh()});else{if(document.visibilityState!==`visible`){this._debug(t,`visibilityState is no longer visible, skipping recovery`);return}await this._recoverAndRefresh()}}else document.visibilityState===`hidden`&&this.autoRefreshToken&&this._stopAutoRefresh()}async _getUrlForProvider(e,t,n){let r=n?.redirectTo,i=null,a=null,o=null;this.flowType===`pkce`&&([i,a,o]=await this._getCodeChallengeAndMethod(),r=this._maybeAppendFlowIdToRedirect(r,o));let s=[`provider=${encodeURIComponent(t)}`];if(r&&s.push(`redirect_to=${encodeURIComponent(r)}`),n?.scopes&&s.push(`scopes=${encodeURIComponent(n.scopes)}`),i!=null&&a!=null){let e=new URLSearchParams({code_challenge:`${encodeURIComponent(i)}`,code_challenge_method:`${encodeURIComponent(a)}`});s.push(e.toString())}if(n?.queryParams){let e=new URLSearchParams(n.queryParams);s.push(e.toString())}return n?.skipBrowserRedirect&&s.push(`skip_http_redirect=${n.skipBrowserRedirect}`),{url:`${e}?${s.join(`&`)}`,flowId:o}}_maybeAppendFlowIdToRedirect(e,t){return!e||!t||!this.experimental.appendPkceFlowIdToRedirects?e??void 0:pf(e,t)}async _getCodeChallengeAndMethod(e=!1){return mf(this.storage,this.storageKey,e,e=>this._debug(`#_getCodeChallengeAndMethod()`,`evicted oldest pending PKCE verifier slot`,e))}async _unenroll(e){try{return await this._useSession(async t=>{let{data:n,error:r}=t;return r?this._returnResult({data:null,error:r}):await q(this.fetch,`DELETE`,`${this.url}/factors/${e.factorId}`,{headers:this.headers,jwt:n?.session?.access_token})})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}async _enroll(e){try{return await this._useSession(async t=>{let{data:n,error:r}=t;if(r)return this._returnResult({data:null,error:r});let i=Object.assign({friendly_name:e.friendlyName,factor_type:e.factorType},e.factorType===`phone`?{phone:e.phone}:e.factorType===`totp`?{issuer:e.issuer}:{}),{data:a,error:o}=await q(this.fetch,`POST`,`${this.url}/factors`,{body:i,headers:this.headers,jwt:n?.session?.access_token});return o?this._returnResult({data:null,error:o}):(e.factorType===`totp`&&a.type===`totp`&&a?.totp?.qr_code&&(a.totp.qr_code=`data:image/svg+xml;utf-8,${a.totp.qr_code}`),this._returnResult({data:a,error:null}))})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}async _verify(e){let t=async()=>{try{return await this._useSession(async t=>{let{data:n,error:r}=t;if(r)return this._returnResult({data:null,error:r});let i=Object.assign({challenge_id:e.challengeId},`webauthn`in e?{webauthn:Object.assign(Object.assign({},e.webauthn),{credential_response:e.webauthn.type===`create`?$f(e.webauthn.credential_response):ep(e.webauthn.credential_response)})}:{code:e.code}),{data:a,error:o}=await q(this.fetch,`POST`,`${this.url}/factors/${e.factorId}/verify`,{body:i,headers:this.headers,jwt:n?.session?.access_token});return o?this._returnResult({data:null,error:o}):(await this._saveSession(Object.assign({expires_at:Math.round(Date.now()/1e3)+a.expires_in},a)),await this._notifyAllSubscribers(`MFA_CHALLENGE_VERIFIED`,a),this._returnResult({data:a,error:o}))})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}};return this.lock==null?t():this._acquireLock(this.lockAcquireTimeout,t)}async _challenge(e){let t=async()=>{try{return await this._useSession(async t=>{let{data:n,error:r}=t;if(r)return this._returnResult({data:null,error:r});let i=await q(this.fetch,`POST`,`${this.url}/factors/${e.factorId}/challenge`,{body:e,headers:this.headers,jwt:n?.session?.access_token});if(i.error)return i;let{data:a}=i;if(a.type!==`webauthn`)return{data:a,error:null};switch(a.webauthn.type){case`create`:return{data:Object.assign(Object.assign({},a),{webauthn:Object.assign(Object.assign({},a.webauthn),{credential_options:Object.assign(Object.assign({},a.webauthn.credential_options),{publicKey:Zf(a.webauthn.credential_options.publicKey)})})}),error:null};case`request`:return{data:Object.assign(Object.assign({},a),{webauthn:Object.assign(Object.assign({},a.webauthn),{credential_options:Object.assign(Object.assign({},a.webauthn.credential_options),{publicKey:Qf(a.webauthn.credential_options.publicKey)})})}),error:null}}})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}};return this.lock==null?t():this._acquireLock(this.lockAcquireTimeout,t)}async _challengeAndVerify(e){let{data:t,error:n}=await this._challenge({factorId:e.factorId});return n?this._returnResult({data:null,error:n}):await this._verify({factorId:e.factorId,challengeId:t.id,code:e.code})}async _listFactors(){let{data:{user:e},error:t}=await this.getUser();if(t)return{data:null,error:t};let n={all:[],phone:[],totp:[],webauthn:[]};for(let t of e?.factors??[])n.all.push(t),t.status===`verified`&&n[t.factor_type].push(t);return{data:n,error:null}}async _getAuthenticatorAssuranceLevel(e){if(e)try{let{payload:t}=Yd(e),n=null;t.aal&&(n=t.aal);let r=n,{data:{user:i},error:a}=await this.getUser(e);if(a)return this._returnResult({data:null,error:a});((i?.factors)?.filter(e=>e.status===`verified`)??[]).length>0&&(r=`aal2`);let o=t.amr||[];return{data:{currentLevel:n,nextLevel:r,currentAuthenticationMethods:o},error:null}}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}let{data:{session:t},error:n}
22=await this.getSession();if(n)return this._returnResult({data:null,error:n});if(!t)return{data:{currentLevel:null,nextLevel:null,currentAuthenticationMethods:[]},error:null};let{payload:r}=Yd(t.access_token),i=null;r.aal&&(i=r.aal);let a=i;(t.user.factors?.filter(e=>e.status===`verified`)??[]).length>0&&(a=`aal2`);let o=r.amr||[];return{data:{currentLevel:i,nextLevel:a,currentAuthenticationMethods:o},error:null}}async _getAuthorizationDetails(e){try{return await this._useSession(async t=>{let{data:{session:n},error:r}=t;return r?this._returnResult({data:null,error:r}):n?await q(this.fetch,`GET`,`${this.url}/oauth/authorizations/${e}`,{headers:this.headers,jwt:n.access_token,xform:e=>({data:e,error:null})}):this._returnResult({data:null,error:new pd})})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}async _approveAuthorization(e,t){try{return await this._useSession(async n=>{let{data:{session:r},error:i}=n;if(i)return this._returnResult({data:null,error:i});if(!r)return this._returnResult({data:null,error:new pd});let a=await q(this.fetch,`POST`,`${this.url}/oauth/authorizations/${e}/consent`,{headers:this.headers,jwt:r.access_token,body:{action:`approve`},xform:e=>({data:e,error:null})});return a.data&&a.data.redirect_url&&K()&&!t?.skipBrowserRedirect&&window.location.assign(a.data.redirect_url),a})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}async _denyAuthorization(e,t){try{return await this._useSession(async n=>{let{data:{session:r},error:i}=n;if(i)return this._returnResult({data:null,error:i});if(!r)return this._returnResult({data:null,error:new pd});let a=await q(this.fetch,`POST`,`${this.url}/oauth/authorizations/${e}/consent`,{headers:this.headers,jwt:r.access_token,body:{action:`deny`},xform:e=>({data:e,error:null})});return a.data&&a.data.redirect_url&&K()&&!t?.skipBrowserRedirect&&window.location.assign(a.data.redirect_url),a})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}async _listOAuthGrants(){try{return await this._useSession(async e=>{let{data:{session:t},error:n}=e;return n?this._returnResult({data:null,error:n}):t?await q(this.fetch,`GET`,`${this.url}/user/oauth/grants`,{headers:this.headers,jwt:t.access_token,xform:e=>({data:e,error:null})}):this._returnResult({data:null,error:new pd})})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}async _revokeOAuthGrant(e){try{return await this._useSession(async t=>{let{data:{session:n},error:r}=t;return r?this._returnResult({data:null,error:r}):n?(await q(this.fetch,`DELETE`,`${this.url}/user/oauth/grants`,{headers:this.headers,jwt:n.access_token,query:{client_id:e.clientId},noResolveJson:!0}),{data:{},error:null}):this._returnResult({data:null,error:new pd})})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}async fetchJwk(e,t={keys:[]}){let n=t.keys.find(t=>t.kid===e);if(n)return n;let r=Date.now();if(n=this.jwks.keys.find(t=>t.kid===e),n&&this.jwks_cached_at+6e5>r)return n;let{data:i,error:a}=await q(this.fetch,`GET`,`${this.url}/.well-known/jwks.json`,{headers:this.headers});if(a)throw a;return!i.keys||i.keys.length===0||(this.jwks=i,this.jwks_cached_at=r,n=i.keys.find(t=>t.kid===e),!n)?null:n}async getClaims(e,t={}){try{let n=e;if(!n){let{data:e,error:t}
22=await this.getSession();if(t||!e.session)return this._returnResult({data:null,error:t});n=e.session.access_token}let{header:r,payload:i,signature:a,raw:{header:o,payload:s}}=Yd(n);if(!t?.allowExpired)try{_f(i.exp)}catch(e){throw new Ed(e instanceof Error?e.message:`JWT validation failed`)}let c=!r.alg||r.alg.startsWith(`HS`)||!r.kid||!(`crypto`in globalThis&&`subtle`in globalThis.crypto)?null:await this.fetchJwk(r.kid,t?.keys?{keys:t.keys}:t?.jwks);if(!c){let{error:e}=await this.getUser(n);if(e)throw e;return{data:{claims:i,header:r,signature:a},error:null}}let l=vf(r.alg),u=await crypto.subtle.importKey(`jwk`,c,l,!0,[`verify`]);if(!await crypto.subtle.verify(l,u,a,Id(`${o}.${s}`)))throw new Ed(`Invalid JWT signature`);return{data:{claims:i,header:r,signature:a},error:null}}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}async signInWithPasskey(e){xf(this.experimental);try{if(!np())return this._returnResult({data:null,error:new dd(`Browser does not support WebAuthn`,null)});let{data:t,error:n}=await this._startPasskeyAuthentication({options:{captchaToken:e?.options?.captchaToken}});if(n||!t)return this._returnResult({data:null,error:n});let{data:r,error:i}=await ip({publicKey:Qf(t.options),signal:e?.options?.signal??Xf.createNewAbortSignal()});if(i||!r)return this._returnResult({data:null,error:i??new dd(`WebAuthn ceremony failed`,null)});let a=ep(r);return this._verifyPasskeyAuthentication({challengeId:t.challenge_id,credential:a})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}async registerPasskey(e){xf(this.experimental);try{if(!np())return this._returnResult({data:null,error:new dd(`Browser does not support WebAuthn`,null)});let{data:t,error:n}=await this._startPasskeyRegistration();if(n||!t)return this._returnResult({data:null,error:n});let{data:r,error:i}=await rp({publicKey:Zf(t.options),signal:e?.options?.signal??Xf.createNewAbortSignal()});if(i||!r)return this._returnResult({data:null,error:i??new dd(`WebAuthn ceremony failed`,null)});let a=$f(r);return this._verifyPasskeyRegistration({challengeId:t.challenge_id,credential:a})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}async _startPasskeyRegistration(){xf(this.experimental);try{return await this._useSession(async e=>{let{data:{session:t},error:n}=e;if(n)return this._returnResult({data:null,error:n});if(!t)return this._returnResult({data:null,error:new pd});let{data:r,error:i}=await q(this.fetch,`POST`,`${this.url}/passkeys/registration/options`,{headers:this.headers,jwt:t.access_token,body:{}});return i?this._returnResult({data:null,error:i}):this._returnResult({data:r,error:null})})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}async _verifyPasskeyRegistration(e){xf(this.experimental);try{return await this._useSession(async t=>{let{data:{session:n},error:r}=t;if(r)return this._returnResult({data:null,error:r});if(!n)return this._returnResult({data:null,error:new pd});let{data:i,error:a}=await q(this.fetch,`POST`,`${this.url}/passkeys/registration/verify`,{headers:this.headers,jwt:n.access_token,body:{challenge_id:e.challengeId,credential:e.credential}});return a?this._returnResult({data:null,error:a}):this._returnResult({data:i,error:null})})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}async _startPasskeyAuthentication(e){xf(this.experimental);try{let{data:t,error:n}=await q(this.fetch,`POST`,`${this.url}/passkeys/authentication/options`,{headers:this.headers,body:{gotrue_meta_security:{captcha_token:e?.options?.captchaToken}}});return n?this._returnResult({data:null,error:n}):this._returnResult({data:t,error:null})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}async _verifyPasskeyAuthentication(e){xf(this.experimental);try{let{data:t,error:n}=await q(this.fetch,`POST`,`${this.url}/passkeys/authentication/verify`,{headers:this.headers,body:{challenge_id:e.challengeId,credential:e.credential},xform:Af});return n?this._returnResult({data:null,error:n}):(t.session&&(await this._saveSession(t.session),await this._notifyAllSubscribers(`SIGNED_IN`,t.session)),this._returnResult({data:t,error:null}))}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}async _listPasskeys(){xf(this.experimental);try{return await this._useSession(async e=>{let{data:{session:t},error:n}=e;if(n)return this._returnResult({data:null,error:n});if(!t)return this._returnResult({data:null,error:new pd});let{data:r,error:i}=await q(this.fetch,`GET`,`${this.url}/passkeys`,{headers:this.headers,jwt:t.access_token,xform:e=>({data:e,error:null})});return i?this._returnResult({data:null,error:i}):this._returnResult({data:r,error:null})})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}async _updatePasskey(e){xf(this.experimental);try{return await this._useSession(async t=>{let{data:{session:n},error:r}=t;if(r)return this._returnResult({data:null,error:r});if(!n)return this._returnResult({data:null,error:new pd});let{data:i,error:a}=await q(this.fetch,`PATCH`,`${this.url}/passkeys/${e.passkeyId}`,{headers:this.headers,jwt:n.access_token,body:{friendly_name:e.friendlyName}});return a?this._returnResult({data:null,error:a}):this._returnResult({data:i,error:null})})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}async _deletePasskey(e){xf(this.experimental);try{return await this._useSession(async t=>{let{data:{session:n},error:r}=t;if(r)return this._returnResult({data:null,error:r});if(!n)return this._returnResult({data:null,error:new pd});let{error:i}=await q(this.fetch,`DELETE`,`${this.url}/passkeys/${e.passkeyId}`,{headers:this.headers,jwt:n.access_token,noResolveJson:!0});return i?this._returnResult({data:null,error:i}):this._returnResult({data:null,error:null})})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}};pp.nextInstanceID={};var mp=pp,hp=`modulepreload`,gp=function(e){return`/`+e},_p={},J=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=gp(t,n),t=s(t),t in _p)return;_p[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:hp,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n
22)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},vp=`2.111.0`,yp=``,bp;if(typeof Deno<`u`)yp=`deno`,bp=Deno.version?.deno;else if(typeof document<`u`)yp=`web`;else if(typeof navigator<`u`&&navigator.product===`ReactNative`)yp=`react-native`;else{var xp;yp=`node`;let e=globalThis.process;bp=e==null||(xp=e.version)==null?void 0:xp.replace(/^v/,``)}var Sp=[`runtime=${yp}`];bp&&Sp.push(`runtime-version=${bp}`);var Cp={headers:{"X-Client-Info":`supabase-js/${vp}; ${Sp.join(`; `)}`}},wp={schema:`public`},Tp={autoRefreshToken:!0,persistSession:!0,detectSessionInUrl:!0,flowType:`implicit`},Ep={},Dp={enabled:!1,respectSamplingDecision:!0};function Op(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})}var kp=null,Ap=`@opentelemetry/api`;function jp(){return kp===null&&(kp=J(()=>import(Ap),[]).catch(()=>null)),kp}function Mp(){return Op(this,void 0,void 0,function*(){try{let e=yield jp();if(!e||!e.propagation||!e.context)return null;let t={};e.propagation.inject(e.context.active(),t);let n=t.traceparent;return n?{traceparent:n,tracestate:t.tracestate,baggage:t.baggage}:null}catch{return null}})}function Np(e){if(!e||typeof e!=`string`)return null;let t=e.split(`-`);if(t.length!==4)return null;let[n,r,i,a]=t;if(n.length!==2||r.length!==32||i.length!==16||a.length!==2)return null;let o=/^[0-9a-f]+$/i;return!o.test(n)||!o.test(r)||!o.test(i)||!o.test(a)||r===`00000000000000000000000000000000`||i===`0000000000000000`?null:{version:n,traceId:r,parentId:i,traceFlags:a,isSampled:(parseInt(a,16)&1)==1}}function Pp(e,t){if(!e||!t||t.length===0)return!1;let n;if(e instanceof URL)n=e;else try{n=new URL(e)}catch{return!1}for(let e of t)try{if(typeof e==`string`){if(Fp(n.hostname,e))return!0}else if(e instanceof RegExp){if(e.test(n.hostname))return!0}else if(typeof e==`function`&&e(n))return!0}catch{continue}return!1}function Fp(e,t){if(t===e)return!0;if(t.startsWith(`*.`)){let n=t.slice(2);if(e.endsWith(n)&&(e===n||e.endsWith(`.`+n)))return!0}return!1}function Ip(e){let t=[];try{let n=new URL(e);t.push(n.hostname)}catch{}return t.push(`*.supabase.co`,`*.supabase.in`),t.push(`localhost`,`127.0.0.1`,`[::1]`),t}function Lp(e){"@babel/helpers - typeof";return Lp=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},Lp(e)}function Rp(e,t){if(Lp(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(Lp(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function zp(e){var t=Rp(e,`string`);return Lp(t)==`symbol`?t:t+``}function Bp(e,t,n){return(t=zp(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Vp(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Hp(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?Vp(Object(n),!0).forEach(function(t){Bp(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Vp(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var Up=e=>e?(...t)=>e(...t):(...e)=>fetch(...e),Wp=()=>Headers,Gp=e=>e.startsWith(`sb_publishable_`)||e.startsWith(`sb_secret_`),Kp=`sb_temp_`,qp=new Set,Jp=e=>{if(!e.startsWith(`sb_`)||Gp(e)||e.startsWith(Kp))return;let t=e.match(/^sb_[a-zA-Z0-9]+_/)?.[0]??`unknown`;
22qp.has(t)||(qp.add(t),console.warn(`@supabase/supabase-js: Unrecognized Supabase API key format. The client will proceed and send this key as-is; if you see authentication errors you may need to upgrade @supabase/supabase-js to a version that recognizes this key type.`))},Yp=(e,t,n,r,i,a)=>{let o=Up(r),s=Wp(),c=i?.enabled===!0,l=i?.respectSamplingDecision!==!1,u=c?Ip(t):null,d=!(a?.omitApiKeyAsBearer&&Gp(e));return async(t,r)=>{let i=await n(),a=new s(r?.headers);if(a.has(`apikey`)||a.set(`apikey`,e),!a.has(`Authorization`)){let t=i??(d?e:null);t&&a.set(`Authorization`,`Bearer ${t}`)}if(u){let e=await Xp(t,u,l);e&&(e.traceparent&&!a.has(`traceparent`)&&a.set(`traceparent`,e.traceparent),e.tracestate&&!a.has(`tracestate`)&&a.set(`tracestate`,e.tracestate),e.baggage&&!a.has(`baggage`)&&a.set(`baggage`,e.baggage))}return o(t,Hp(Hp({},r),{},{headers:a}))}};async function Xp(e,t,n){if(!Pp(typeof e==`string`||e instanceof URL?e:e.url,t))return null;let r=await Mp();if(!r||!r.traceparent)return null;if(n){let e=Np(r.traceparent);if(e&&!e.isSampled)return null}return r}function Zp(e){return typeof e==`boolean`?{enabled:e}:e}function Qp(e){return e.endsWith(`/`)?e:e+`/`}function $p(e,t){let{db:n,auth:r,realtime:i,global:a}=e,{db:o,auth:s,realtime:c,global:l}=t,u=Zp(e.tracePropagation),d=Zp(t.tracePropagation),f={db:Hp(Hp({},o),n),auth:Hp(Hp({},s),r),realtime:Hp(Hp({},c),i),storage:{},global:Hp(Hp(Hp({},l),a),{},{headers:Hp(Hp({},l?.headers??{}),a?.headers??{})}),tracePropagation:{enabled:u?.enabled??d?.enabled??!1,respectSamplingDecision:u?.respectSamplingDecision??d?.respectSamplingDecision??!0},accessToken:async()=>``};return e.accessToken?f.accessToken=e.accessToken:delete f.accessToken,f}function em(e){let t=e?.trim();if(!t)throw Error(`supabaseUrl is required.`);if(!t.match(/^https?:\/\//i))throw Error(`Invalid supabaseUrl: Must be a valid HTTP or HTTPS URL.`);try{return new URL(Qp(t))}catch{throw Error(`Invalid supabaseUrl: Provided URL is malformed.`)}}var tm=class extends mp{constructor(e){super(e)}},nm=class{constructor(e,t,n){this.supabaseUrl=e,this.supabaseKey=t;let r=em(e);if(!t)throw Error(`supabaseKey is required.`);Jp(t),this.realtimeUrl=new URL(`realtime/v1`,r),this.realtimeUrl.protocol=this.realtimeUrl.protocol.replace(`http`,`ws`),this.authUrl=new URL(`auth/v1`,r),this.storageUrl=new URL(`storage/v1`,r),this.functionsUrl=new URL(`functions/v1`,r);let i=`sb-${r.hostname.split(`.`)[0]}-auth-token`,a={db:wp,realtime:Ep,auth:Hp(Hp({},Tp),{},{storageKey:i}),global:Cp,tracePropagation:Dp},o=$p(n??{},a);this.settings=o,this.storageKey=o.auth.storageKey??``,this.headers=o.global.headers??{},o.accessToken?(this.accessToken=o.accessToken,this.auth=new Proxy({},{get:(e,t)=>{throw Error(`@supabase/supabase-js: Supabase Client is configured with the accessToken option, accessing supabase.auth.${String(t)} is not possible`)}})):this.auth=this._initSupabaseAuthClient(o.auth??{},this.headers,o.global.fetch),this.fetch=Yp(t,e,this._getSessionToken.bind(this),o.global.fetch,o.tracePropagation),this.functionsFetch=Yp(t,e,this._getSessionToken.bind(this),o.global.fetch,o.tracePropagation,{omitApiKeyAsBearer:!0}),this.realtime=this._initRealtimeClient(Hp({headers:this.headers,accessToken:this._getAccessToken.bind(this),fetch:this.fetch},o.realtime)),this.accessToken&&Promise.resolve(this.accessToken()).then(e=>this.realtime.setAuth(e)).catch(e=>console.warn(`Failed to set initial Realtime auth token:`,e)),this.rest=new Pc(new URL(`rest/v1`,r).href,{headers:this.headers,schema:o.db.schema,fetch:this.fetch,timeout:o.db.timeout,urlLengthLimit:o.db.urlLengthLimit}),this.storage=new Zu(this.storageUrl.href,this.headers,this.fetch,n?.storage),o.accessToken||this._listenForAuthEvents()}get functions(){return new hc(this.functionsUrl.href,{headers:this.headers,customFetch:this.functionsFetch})}from(e){return this.rest.from(e)}schema(e){return this.rest.schema(e)}rpc(e,t={},n={head:!1,get:!1,count:void 0}){return this.rest.rpc(e,t,n)}channel(e,t={config:{}}){return this.realtime.channel(e,t)}getChannels(){return this.realtime.getChannels()}removeChannel(e){return this.realtime.removeChannel(e)}removeAllChannels(){return this.realtime.removeAllChannels()}async _getSessionToken(){var e=this;if(e.accessToken)return await e.accessToken();let{data:t}=await e.auth.getSession();return t.session?.access_token??null}async _getAccessToken(){var e=this;return await e._getSessionToken()??e.supabaseKey}_initSupabaseAuthClient({autoRefreshToken:e,persistSession:t,detectSessionInUrl:n,storage:r,userStorage:i,storageKey:a,flowType:o,lock:s,debug:c,throwOnError:l,experimental:u,lockAcquireTimeout:d,skipAutoInitialize:f},p,m){let h={Authorization:`Bearer ${this.supabaseKey}`,apikey:`${this.supabaseKey}`};return new tm({url:this.authUrl.href,headers:Hp(Hp({},h),p),storageKey:a,autoRefreshToken:e,persistSession:t,detectSessionInUrl:n,storage:r,userStorage:i,flowType:o,lock:s,debug:c,throwOnError:l,experimental:u,fetch:m,lockAcquireTimeout:d,skipAutoInitialize:f,hasCustomAuthorizationHeader:Object.keys(this.headers).some(e=>e.toLowerCase()===`authorization`)})}_initRealtimeClient(e){return new Zl(this.realtimeUrl.href,Hp(Hp({},e),{}
22,{params:Hp(Hp({},{apikey:this.supabaseKey}),e?.params)}))}_listenForAuthEvents(){return this.auth.onAuthStateChange((e,t)=>{this._handleTokenChanged(e,`CLIENT`,t?.access_token)})}_handleTokenChanged(e,t,n){(e===`TOKEN_REFRESHED`||e===`SIGNED_IN`||e===`INITIAL_SESSION`)&&this.changedAccessToken!==n?(this.changedAccessToken=n,this.realtime.setAuth(n)):e===`SIGNED_OUT`&&(this.realtime.setAuth(),t==`STORAGE`&&this.auth.signOut(),this.changedAccessToken=void 0)}},rm=(e,t,n)=>new nm(e,t,n);function im(){if(typeof window<`u`||globalThis.Deno!==void 0)return!1;let e=globalThis.process;if(!e)return!1;let t=e.version;if(t==null)return!1;let n=t.match(/^v(\d+)\./);return n?parseInt(n[1],10)<=20:!1}im()&&console.warn(`⚠️  Node.js 20 and below are deprecated and will no longer be supported in future versions of @supabase/supabase-js. Please upgrade to Node.js 22 or later. For more information, visit: https://github.com/orgs/supabase/discussions/45715`);var am={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1,TSS_DEV_SERVER:`false`,TSS_DEV_SSR_STYLES_BASEPATH:`/`,TSS_DEV_SSR_STYLES_ENABLED:`true`,TSS_DISABLE_CSRF_MIDDLEWARE_WARNING:`false`,TSS_INLINE_CSS_ENABLED:`false`,TSS_ROUTER_BASEPATH:``,TSS_SERVER_FN_BASE:`/_serverFn/`,VITE_PAYMENTS_CLIENT_TOKEN:`pk_live_51SiTVKQEGRBDkGjXX7psOYWoWFHjFLDUoP7Yb9pxxhFSRoUpbFiSinTbeh6woZIOofEQKYN9P8vdKAO7uHSpTa46000Bt571Xi`,VITE_SUPABASE_PROJECT_ID:`mbeumihpmnudbdsekqik`,VITE_SUPABASE_PUBLISHABLE_KEY:`eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im1iZXVtaWhwbW51ZGJkc2VrcWlrIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzgyOTM0NTEsImV4cCI6MjA5Mzg2OTQ1MX0.atGV315Op2QMd3c-npH1vdJdA2Y8lEfjALyDgzY45AU`,VITE_SUPABASE_URL:`https://mbeumihpmnudbdsekqik.supabase.co`}.VITE_SUPABASE_URL,om={BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1,TSS_DEV_SERVER:`false`,TSS_DEV_SSR_STYLES_BASEPATH:`/`,TSS_DEV_SSR_STYLES_ENABLED:`true`,TSS_DISABLE_CSRF_MIDDLEWARE_WARNING:`false`,TSS_INLINE_CSS_ENABLED:`false`,TSS_ROUTER_BASEPATH:``,TSS_SERVER_FN_BASE:`/_serverFn/`,VITE_PAYMENTS_CLIENT_TOKEN:`pk_live_51SiTVKQEGRBDkGjXX7psOYWoWFHjFLDUoP7Yb9pxxhFSRoUpbFiSinTbeh6woZIOofEQKYN9P8vdKAO7uHSpTa46000Bt571Xi`,VITE_SUPABASE_PROJECT_ID:`mbeumihpmnudbdsekqik`,VITE_SUPABASE_PUBLISHABLE_KEY:`eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im1iZXVtaWhwbW51ZGJkc2VrcWlrIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzgyOTM0NTEsImV4cCI6MjA5Mzg2OTQ1MX0.atGV315Op2QMd3c-npH1vdJdA2Y8lEfjALyDgzY45AU`,VITE_SUPABASE_URL:`https://mbeumihpmnudbdsekqik.supabase.co`}.VITE_SUPABASE_PUBLISHABLE_KEY,sm=rm(am,om,{auth:{storage:typeof window<`u`?window.localStorage:void 0,persistSession:!0,autoRefreshToken:!0}}),cm=oc({type:`function`}).client(async({next:e})=>{let{data:t}=await sm.auth.getSession(),n=t.session?.access_token;return e({headers:n?{Authorization:`Bearer ${n}`}:{}})}),lm=oc(),um=void 0,dm=cc(()=>({functionMiddleware:[cm],requestMiddleware:[lm,um]})),fm=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},pm=new class extends fm{#e;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e();return window.addEventListener(`visibilitychange`,t,!1),()=>{window.removeEventListener(`visibilitychange`,t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(e=>{typeof e==`boolean`?this.setFocused(e):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e==`boolean`?this.#e:globalThis.document?.visibilityState!==`hidden`}},mm={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},hm=new class{#e=mm;setTimeoutProvider(e){this.#e=e}setTimeout(e,t){return this.#e.setTimeout(e,t)}clearTimeout(e){this.#e.clearTimeout(e)}setInterval(e,t){return this.#e.setInterval(e,t)}clearInterval(e){this.#e.clearInterval(e)}};function gm(e){setTimeout(e,0)}var _m=typeof window>`u`||`Deno`in globalThis;function vm(){}function ym(e,t){return typeof e==`function`?e(t):e}function bm(e){return typeof e==`number`&&e>=0&&e!==1/0}function xm(e,t){return Math.max(e+(t||0)-Date.now(),0)}function Sm(e,t){return typeof e==`function`?e(t):e}function Cm(e,t){return typeof e==`function`?e(t):e}function wm(e,t){let{type:n=`all`,exact:r,fetchStatus:i,predicate:a,queryKey:o,stale:s}=e;if(o){if(r){if(t.queryHash!==Em(o,t.options))return!1}else if(!Om(t.queryKey,o))return!1}if(n!==`all`){let e=t.isActive();if(n===`active`&&!e||n===`inactive`&&e)return!1}return!(typeof s==`boolean`&&t.isStale()!==s||i&&i!==t.state.fetchStatus||a&&!a(t))}function Tm(e,t){let{exact:n,status:r,predicate:i,mutationKey:a}=e;if(a){if(!t.options.mutationKey)return!1;if(n){if(Dm(t.options.mutationKey)!==Dm(a))return!1}else if(!Om(t.options.mutationKey,a))return!1}return!(r&&t.state.status!==r||i&&!i(t))}function Em(e,t){return(t?.queryKeyHashFn||Dm)(e)}function Dm(e){return JSON.stringify(e,(e,t)=>Mm(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}
22function Om(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(e&&t&&typeof e==`object`&&typeof t==`object`){if(Array.isArray(e)&&Array.isArray(t)){for(let n=0;n<t.length;n++)if(!Om(e[n],t[n]))return!1;return!0}let n=Object.keys(t);for(let r of n)if(!Om(e[r],t[r]))return!1;return!0}return!1}var km=Object.prototype.hasOwnProperty;function Am(e,t,n=0){if(e===t)return e;if(n>500)return t;let r=jm(e)&&jm(t);if(!r&&!(Mm(e)&&Mm(t)))return t;let i=(r?e:Object.keys(e)).length,a=r?t:Object.keys(t),o=a.length,s=r?Array(o):{},c=0;for(let l=0;l<o;l++){let o=r?l:a[l],u=e[o],d=t[o];if(u===d){s[o]=u,(r?l<i:km.call(e,o))&&c++;continue}if(u===null||d===null||typeof u!=`object`||typeof d!=`object`){s[o]=d;continue}let f=Am(u,d,n+1);s[o]=f,f===u&&c++}return i===o&&c===i?e:s}function jm(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function Mm(e){if(!Nm(e))return!1;let t=e.constructor;if(t===void 0)return!0;let n=t.prototype;return!(!Nm(n)||!n.hasOwnProperty(`isPrototypeOf`)||Object.getPrototypeOf(e)!==Object.prototype)}function Nm(e){return Object.prototype.toString.call(e)===`[object Object]`}function Pm(e){return new Promise(t=>{hm.setTimeout(t,e)})}function Fm(e,t,n){return typeof n.structuralSharing==`function`?n.structuralSharing(e,t):n.structuralSharing===!1?t:Am(e,t)}function Im(e,t,n=0){let r=[...e,t];return n&&r.length>n?r.slice(1):r}function Lm(e,t,n=0){let r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var Rm=Symbol();function zm(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===Rm?()=>Promise.reject(Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function Bm(e,t,n){let r=!1,i;return Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(i??=t(),r?i:(r=!0,i.aborted?n():i.addEventListener(`abort`,n,{once:!0}),i))}),e}var Vm=(()=>{let e=()=>_m;return{isServer(){return e()},setIsServer(t){e=t}}})();function Hm(){let e,t,n=new Promise((n,r)=>{e=n,t=r});n.status=`pending`,n.catch(()=>{});function r(e){Object.assign(n,e),delete n.resolve,delete n.reject}return n.resolve=t=>{r({status:`fulfilled`,value:t}),e(t)},n.reject=e=>{r({status:`rejected`,reason:e}),t(e)},n}var Um=gm;function Wm(){let e=[],t=0,n=e=>{e()},r=e=>{e()},i=Um,a=r=>{t?e.push(r):i(()=>{n(r)})},o=()=>{let t=e;e=[],t.length&&i(()=>{r(()=>{t.forEach(e=>{n(e)})})})};return{batch:e=>{let n;t++;try{n=e()}finally{t--,t||o()}return n},batchCalls:e=>(...t)=>{a(()=>{e(...t)})},schedule:a,setNotifyFunction:e=>{n=e},setBatchNotifyFunction:e=>{r=e},setScheduler:e=>{i=e}}}var Gm=Wm(),Km=new class extends fm{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e(!0),n=()=>e(!1);return window.addEventListener(`online`,t,!1),window.addEventListener(`offline`,n,!1),()=>{window.removeEventListener(`online`,t),window.removeEventListener(`offline`,n)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(t=>{t(e)}))}isOnline(){return this.#e}};function qm(e){return Math.min(1e3*2**e,3e4)}function Jm(e){return(e??`online`)!==`online`||Km.isOnline()}var Ym=class extends Error{constructor(e){super(`CancelledError`),this.revert=e?.revert,this.silent=e?.silent}};function Xm(e){let t=!1,n=0,r,i=Hm(),a=()=>i.status!==`pending`,o=t=>{if(!a()){let n=new Ym(t);f(n),e.onCancel?.(n)}},s=()=>{t=!0},c=()=>{t=!1},l=()=>pm.isFocused()&&(e.networkMode===`always`||Km.isOnline())&&e.canRun(),u=()=>Jm(e.networkMode)&&e.canRun(),d=e=>{a()||(r?.(),i.resolve(e))},f=e=>{a()||(r?.(),i.reject(e))},p=()=>new Promise(t=>{r=e=>{(a()||l())&&t(e)},e.onPause?.()}).then(()=>{r=void 0,a()||e.onContinue?.()}),m=()=>{if(a())return;let r,i=n===0?e.initialPromise:void 0;try{r=i??e.fn()}catch(e){r=Promise.reject(e)}Promise.resolve(r).then(d).catch(r=>{if(a())return;let i=e.retry??(Vm.isServer()?0:3),o=e.retryDelay??qm,s=typeof o==`function`?o(n,r):o,c=i===!0||typeof i==`number`&&n<i||typeof i==`function`&&i(n,r);if(t||!c){f(r);return}n++,e.onFail?.(n,r),Pm(s).then(()=>l()?void 0:p()).then(()=>{t?f(r):m()})})};return{promise:i,status:()=>i.status,cancel:o,continue:()=>(r?.(),i),cancelRetry:s,continueRetry:c,canStart:u,start:()=>(u()?m():p().then(m),i)}}var Zm=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),bm(this.gcTime)&&(this.#e=hm.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(Vm.isServer()?1/0:3e5))}clearGcTimeout(){this.#e!==void 0&&(hm.clearTimeout(this.#e),this.#e=void 0)}};function Qm(e){return{onFetch:(t,n)=>
22{let r=t.options,i=t.fetchOptions?.meta?.fetchMore?.direction,a=t.state.data?.pages||[],o=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,l=async()=>{let n=!1,l=e=>{Bm(e,()=>t.signal,()=>n=!0)},u=zm(t.options,t.fetchOptions),d=async(e,r,i)=>{if(n)return Promise.reject(t.signal.reason);if(r==null&&e.pages.length)return Promise.resolve(e);let a=(()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:r,direction:i?`backward`:`forward`,meta:t.options.meta};return l(e),e})(),o=await u(a),{maxPages:s}=t.options,c=i?Lm:Im;return{pages:c(e.pages,o,s),pageParams:c(e.pageParams,r,s)}};if(i&&a.length){let e=i===`backward`,t=e?eh:$m,n={pages:a,pageParams:o};s=await d(n,t(r,n),e)}else{let t=e??a.length;do{let e=c===0?o[0]??r.initialPageParam:$m(r,s);if(c>0&&e==null)break;s=await d(s,e),c++}while(c<t)}return s};t.fetchFn=t.options.persister?()=>t.options.persister?.(l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):l}}}function $m(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function eh(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}var th=class extends Zm{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e){super(),this.#s=!1,this.#o=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#i=e.client,this.#r=this.#i.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#t=ih(this.options),this.state=e.state??this.#t,this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return this.#e}get promise(){return this.#a?.promise}setOptions(e){if(this.options={...this.#o,...e},e?._type&&(this.#e=e._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){let e=ih(this.options);e.data!==void 0&&(this.setState(rh(e.data,e.dataUpdatedAt)),this.#t=e)}}optionalRemove(){!this.observers.length&&this.state.fetchStatus===`idle`&&this.#r.remove(this)}setData(e,t){let n=Fm(this.state.data,e,this.options);return this.#l({data:n,type:`success`,dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e){this.#l({type:`setState`,state:e})}cancel(e){let t=this.#a?.promise;return this.#a?.cancel(e),t?t.then(vm).catch(vm):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return this.#t}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>Cm(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===Rm||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0&&this.observers.some(e=>Sm(e.options.staleTime,this)===`static`)}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e===`static`?!1:this.state.isInvalidated?!0:!xm(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(e=>e.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#a?.continue()}onOnline(){this.observers.find(e=>e.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#a?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#r.notify({type:`observerAdded`,query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(this.#a&&(this.#s||this.#c()?this.#a.cancel({revert:!0}):this.#a.cancelRetry()),this.scheduleGc()),this.#r.notify({type:`observerRemoved`,query:this,observer:e}))}getObserversCount(){return this.observers.length}#c(){return this.state.fetchStatus===`paused`&&this.state.status===`pending`}invalidate(){this.state.isInvalidated||this.#l({type:`invalidate`})}async fetch(e,t){if(this.state.fetchStatus!==`idle`&&this.#a?.status()!==`rejected`){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#a)return this.#a.continueRetry(),this.#a.promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.observers.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let n=new AbortController,r=e=>{Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(this.#s=!0,n.signal)}
22)},i=()=>{let e=zm(this.options,t),n=(()=>{let e={client:this.#i,queryKey:this.queryKey,meta:this.meta};return r(e),e})();return this.#s=!1,this.options.persister?this.options.persister(e,n,this):e(n)},a=(()=>{let e={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:this.#i,state:this.state,fetchFn:i};return r(e),e})();(this.#e===`infinite`?Qm(this.options.pages):this.options.behavior)?.onFetch(a,this),this.#n=this.state,(this.state.fetchStatus===`idle`||this.state.fetchMeta!==a.fetchOptions?.meta)&&this.#l({type:`fetch`,meta:a.fetchOptions?.meta}),this.#a=Xm({initialPromise:t?.initialPromise,fn:a.fetchFn,onCancel:e=>{e instanceof Ym&&e.revert&&this.setState({...this.#n,fetchStatus:`idle`}),n.abort()},onFail:(e,t)=>{this.#l({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#l({type:`pause`})},onContinue:()=>{this.#l({type:`continue`})},retry:a.options.retry,retryDelay:a.options.retryDelay,networkMode:a.options.networkMode,canRun:()=>!0});try{let e=await this.#a.start();if(e===void 0)throw Error(`${this.queryHash} data is undefined`);return this.setData(e),this.#r.config.onSuccess?.(e,this),this.#r.config.onSettled?.(e,this.state.error,this),e}catch(e){if(e instanceof Ym){if(e.silent)return this.#a.promise;if(e.revert){if(this.state.data===void 0)throw e;return this.state.data}}throw this.#l({type:`error`,error:e}),this.#r.config.onError?.(e,this),this.#r.config.onSettled?.(this.state.data,e,this),e}finally{this.scheduleGc()}}#l(e){let t=t=>{switch(e.type){case`failed`:return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case`pause`:return{...t,fetchStatus:`paused`};case`continue`:return{...t,fetchStatus:`fetching`};case`fetch`:return{...t,...nh(t.data,this.options),fetchMeta:e.meta??null};case`success`:let n={...t,...rh(e.data,e.dataUpdatedAt),dataUpdateCount:t.dataUpdateCount+1,...!e.manual&&{fetchStatus:`idle`,fetchFailureCount:0,fetchFailureReason:null}};return this.#n=e.manual?n:void 0,n;case`error`:let r=e.error;return{...t,error:r,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:r,fetchStatus:`idle`,status:`error`,isInvalidated:!0};case`invalidate`:return{...t,isInvalidated:!0};case`setState`:return{...t,...e.state}}};this.state=t(this.state),Gm.batch(()=>{this.observers.forEach(e=>{e.onQueryUpdate()}),this.#r.notify({query:this,type:`updated`,action:e})})}};function nh(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:Jm(t.networkMode)?`fetching`:`paused`,...e===void 0&&{error:null,status:`pending`}}}function rh(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:`success`}}function ih(e){let t=typeof e.initialData==`function`?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt==`function`?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?`success`:`pending`,fetchStatus:`idle`}}var ah=class extends Zm{#e;#t;#n;#r;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#t=[],this.state=e.state||oh(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#n.notify({type:`observerRemoved`,mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status===`pending`?this.scheduleGc():this.#n.remove(this))}continue(){return this.#r?.continue()??this.execute(this.state.variables)}async execute(e){let t=()=>{this.#i({type:`continue`})},n={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#r=Xm({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(Error(`No mutationFn found`)),onFail:(e,t)=>{this.#i({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#i({type:`pause`})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)});
vendor: 2,869 bytes, line 22
22let r=this.state.status===`pending`,i=!this.#r.canStart();try{if(r)t();else{this.#i({type:`pending`,variables:e,isPaused:i}),this.#n.config.onMutate&&await this.#n.config.onMutate(e,this,n);let t=await this.options.onMutate?.(e,n);t!==this.state.context&&this.#i({type:`pending`,context:t,variables:e,isPaused:i})}let a=await this.#r.start();return await this.#n.config.onSuccess?.(a,e,this.state.context,this,n),await this.options.onSuccess?.(a,e,this.state.context,n),await this.#n.config.onSettled?.(a,null,this.state.variables,this.state.context,this,n),await this.options.onSettled?.(a,null,e,this.state.context,n),this.#i({type:`success`,data:a}),a}catch(t){try{await this.#n.config.onError?.(t,e,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onError?.(t,e,this.state.context,n)}catch(e){Promise.reject(e)}try{await this.#n.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,t,e,this.state.context,n)}catch(e){Promise.reject(e)}throw this.#i({type:`error`,error:t}),t}finally{this.#n.runNext(this)}}#i(e){let t=t=>{switch(e.type){case`failed`:return{...t,failureCount:e.failureCount,failureReason:e.error};case`pause`:return{...t,isPaused:!0};case`continue`:return{...t,isPaused:!1};case`pending`:return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:`pending`,variables:e.variables,submittedAt:Date.now()};case`success`:return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:`success`,isPaused:!1};case`error`:return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:`error`}}};this.state=t(this.state),Gm.batch(()=>{this.#t.forEach(t=>{t.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:`updated`,action:e})})}};function oh(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:`idle`,variables:void 0,submittedAt:0}}var sh=class extends fm{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}#e;#t;#n;build(e,t,n){let r=new ah({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=ch(e);if(typeof t==`string`){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:`added`,mutation:e})}remove(e){if(this.#e.delete(e)){let t=ch(e);if(typeof t==`string`){let n=this.#t.get(t);if(n)if(n.length>1){let t=n.indexOf(e);t!==-1&&n.splice(t,1)}else n[0]===e&&this.#t.delete(t)}}this.notify({type:`removed`,mutation:e})}canRun(e){let t=ch(e);if(typeof t==`string`){let n=this.#t.get(t)?.find(e=>e.state.status===`pending`);return!n||n===e}return!0}runNext(e){let t=ch(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>
22t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){Gm.batch(()=>{this.#e.forEach(e=>{this.notify({type:`removed`,mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(e=>Tm(t,e))}findAll(e={}){return this.getAll().filter(t=>Tm(e,t))}notify(e){Gm.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return Gm.batch(()=>Promise.all(e.map(e=>e.continue().catch(vm))))}};function ch(e){return e.options.scope?.id}var lh=class extends fm{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,i=t.queryHash??Em(r,t),a=this.get(i);return a||(a=new th({client:e,queryKey:r,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(a)),a}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:`added`,query:e}))}remove(e){let t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:`removed`,query:e}))}clear(){Gm.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>wm(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>wm(e,t)):t}notify(e){Gm.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){Gm.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){Gm.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},uh=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new lh,this.#t=e.mutationCache||new sh,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=pm.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=Km.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#a--,this.#a===0&&(this.#o?.(),this.#o=void 0,this.#s?.(),this.#s=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:`fetching`}).length}isMutating(e){return this.#t.findAll({...e,status:`pending`}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(Sm(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:e,state:t})=>[e,t.data])}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=ym(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return Gm.batch(()=>this.#e.findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;Gm.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return Gm.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,...e},t)))}cancelQueries(e,t={}){let n={revert:!0,...t},r=Gm.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(vm).catch(vm)}invalidateQueries(e,t={}){return Gm.batch(()=>(this.#e.findAll(e).forEach(e=>{e.invalidate()}),e?.refetchType===`none`?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??`active`},t)))}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=Gm.batch(()=>this.#e.findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(vm)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(vm)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(Sm(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(vm).catch(vm)}fetchInfiniteQuery(e){return e._type=`infinite`,this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(vm).catch(vm)}ensureInfiniteQueryData(e){return e._type=`infinite`,this.ensureQueryData(e)}resumePausedMutations(){return Km.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(Dm(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{Om(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(Dm(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{Om(e,t.mutationKey)&&Object.assign(n,t.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||=Em(t.queryKey,t),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!==`always`),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode=`offlineFirst`),t.queryFn===Rm&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}},dh=I.createContext(void 0),fh=({client:e,children:t})=>(I.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),(0,L.jsx)(dh.Provider,{value:e,children:t}));function ph(e){let t=(0,I.useRef)(null);return t.current===null&&(t.current=e()),t.current}function mh(e,t){if(e?.inherit&&t){let{inherit:n,...r}=e;return{...t,...r}}return e}var hh=e=>!!(e&&e.getVelocity),gh=(0,I.createContext)({transformPagePoint:e=>e,isStatic:!1,reducedMotion:`never`}),_h=new Set(`animate.exit.variants.initial.style.values.variants.transition.transformTemplate.custom.inherit.onBeforeLayoutMeasure.onAnimationStart.onAnimationComplete.onUpdate.onDragStart.onDrag.onDragEnd.onMeasureDragConstraints.onDirectionLock.onDragTransitionEnd._dragX._dragY.onHoverStart.onHoverEnd.onViewportEnter.onViewportLeave.globalTapTarget.propagate.ignoreStrict.viewport`.split(`.`));function vh(e){return e.startsWith(`while`)||e.startsWith(`drag`)&&e!==`draggable`||e.startsWith(`layout`)||e.startsWith(`onTap`)||e.startsWith(`onPan`)||e.startsWith(`onLayout`)||_h.has(e)}var yh=t({default:()=>bh}),bh,xh=i((()=>{throw bh={},Error(`Could not resolve "@emotion/is-prop-valid" imported by "framer-motion". Is it installed?`)})),Sh=e=>!vh(e);function Ch(e){typeof e==`function`&&(Sh=t=>t.startsWith(`on`)?!vh(t):e(t))}try{Ch((xh(),e(yh)).default)}catch{}
22function wh(e,t,n){let r={};for(let i in e)(i!==`values`||typeof e.values!=`object`)&&(hh(e[i])||(Sh(i)||n===!0&&vh(i)||!t&&!vh(i)||e.draggable&&i.startsWith(`onDrag`))&&(r[i]=e[i]));return r}function Th({children:e,isValidProp:t,...n}){t&&Ch(t);let r=(0,I.useContext)(gh);n={...r,...n},n.transition=mh(n.transition,r.transition),n.isStatic=ph(()=>n.isStatic);let i=(0,I.useMemo)(()=>n,[JSON.stringify(n.transition),n.transformPagePoint,n.reducedMotion,n.skipAnimations]);return(0,L.jsx)(gh.Provider,{value:i,children:e})}var Eh=1,Dh=1e6,Oh=0;function kh(){return Oh=(Oh+1)%(2**53-1),Oh.toString()}var Ah=new Map,jh=e=>{if(Ah.has(e))return;let t=setTimeout(()=>{Ah.delete(e),Fh({type:`REMOVE_TOAST`,toastId:e})},Dh);Ah.set(e,t)},Mh=(e,t)=>{switch(t.type){case`ADD_TOAST`:return{...e,toasts:[t.toast,...e.toasts].slice(0,Eh)};case`UPDATE_TOAST`:return{...e,toasts:e.toasts.map(e=>e.id===t.toast.id?{...e,...t.toast}:e)};case`DISMISS_TOAST`:{let{toastId:n}=t;return n?jh(n):e.toasts.forEach(e=>{jh(e.id)}),{...e,toasts:e.toasts.map(e=>e.id===n||n===void 0?{...e,open:!1}:e)}}case`REMOVE_TOAST`:return t.toastId===void 0?{...e,toasts:[]}:{...e,toasts:e.toasts.filter(e=>e.id!==t.toastId)}}},Nh=[],Ph={toasts:[]};
22function Fh(e){Ph=Mh(Ph,e),Nh.forEach(e=>{e(Ph)})}function Ih({...e}){let t=kh(),n=e=>Fh({type:`UPDATE_TOAST`,toast:{...e,id:t}}),r=()=>Fh({type:`DISMISS_TOAST`,toastId:t});return Fh({type:`ADD_TOAST`,toast:{...e,id:t,open:!0,onOpenChange:e=>{e||r()}}}),{id:t,dismiss:r,update:n}}function Lh(){let[e,t]=I.useState(Ph);return I.useEffect(()=>(Nh.push(t),()=>{let e=Nh.indexOf(t);e>-1&&Nh.splice(e,1)}),[e]),{...e,toast:Ih,dismiss:e=>Fh({type:`DISMISS_TOAST`,...e===void 0?{}:{toastId:e}})}}var Rh=Object.defineProperty,zh=(e,t)=>Rh(e,`name`,{value:t,configurable:!0});function Bh(e){let t=e+`CollectionProvider`,[n,r]=Oe(t),[i,a]=n(t,{collectionRef:{current:null},itemMap:new Map}),o=zh(e=>{let{scope:t,children:n}=e,r=I.useRef(null),a=I.useRef(new Map).current;return(0,L.jsx)(i,{scope:t,itemMap:a,collectionRef:r,children:n})},`CollectionProvider`);o.displayName=t;let s=e+`CollectionSlot`,c=Pe(s),l=I.forwardRef((e,t)=>{let{scope:n,children:r}=e,i=a(s,n),o=Me(t,i.collectionRef);return(0,L.jsx)(c,{ref:o,children:r})});l.displayName=s;let u=e+`CollectionItemSlot`,d=`data-radix-collection-item`,f=Pe(u),p=I.forwardRef((e,t)=>{let{scope:n,children:r,...i}=e,o=I.useRef(null),s=Me(t,o),c=a(u,n);return I.useEffect(()=>(c.itemMap.set(o,{ref:o,...i}),()=>void c.itemMap.delete(o))),(0,L.jsx)(f,{[d]:``,ref:s,children:r})});p.displayName=u;function m(t){let n=a(e+`CollectionConsumer`,t);return I.useCallback(()=>{let e=n.collectionRef.current;if(!e)return[];let t=Array.from(e.querySelectorAll(`[${d}]`));return Array.from(n.itemMap.values()).sort((e,n)=>t.indexOf(e.ref.current)-t.indexOf(n.ref.current))},[n.collectionRef,n.itemMap])}return zh(m,`useCollection`),[{Provider:o,Slot:l,ItemSlot:p},m,r]}zh(Bh,`createCollection`);var Vh=new WeakMap,Hh=class e extends Map{static{zh(this,`OrderedDict`)}#e;constructor(e){super(e),this.#e=[...super.keys()],Vh.set(this,!0)}set(e,t){return Vh.get(this)&&(this.has(e)?this.#e[this.#e.indexOf(e)]=e:this.#e.push(e)),super.set(e,t),this}insert(e,t,n){let r=this.has(t),i=this.#e.length,a=Gh(e),o=a>=0?a:i+a,s=o<0||o>=i?-1:o;if(s===this.size||r&&s===this.size-1||s===-1)return this.set(t,n),this;let c=this.size+ +!r;a<0&&o++;let l=[...this.#e],u,d=!1;for(let e=o;e<c;e++)if(o===e){let i=l[e];l[e]===t&&(i=l[e+1]),r&&this.delete(t),u=this.get(i),this.set(t,n)}else{!d&&l[e-1]===t&&(d=!0);let n=l[d?e:e-1],r=u;u=this.get(n),this.delete(n),this.set(n,r)}return this}with(t,n,r){let i=new e(this);return i.insert(t,n,r),i}before(e){let t=this.#e.indexOf(e)-1;if(!(t<0))return this.entryAt(t)}setBefore(e,t,n){let r=this.#e.indexOf(e);return r===-1?this:this.insert(r,t,n)}after(e){let t=this.#e.indexOf(e);if(t=t===-1||t===this.size-1?-1:t+1,t!==-1)return this.entryAt(t)}setAfter(e,t,n){let r=this.#e.indexOf(e);return r===-1?this:this.insert(r+1,t,n)}first(){return this.entryAt(0)}last(){return this.entryAt(-1)}clear(){return this.#e=[],super.clear()}delete(e){let t=super.delete(e);return t&&this.#e.splice(this.#e.indexOf(e),1),t}deleteAt(e){let t=this.keyAt(e);return t!==void 0&&this.delete(t)}at(e){let t=Uh(this.#e,e);if(t!==void 0)return this.get(t)}entryAt(e){let t=Uh(this.#e,e);if(t!==void 0)return[t,this.get(t)]}indexOf(e){return this.#e.indexOf(e)}keyAt(e){return Uh(this.#e,e)}from(e,t){let n=this.indexOf(e);if(n===-1)return;let r=n+t;return r<0&&(r=0),r>=this.size&&(r=this.size-1),this.at(r)}keyFrom(e,t){let n=this.indexOf(e);if(n===-1)return;let r=n+t;return r<0&&(r=0),r>=this.size&&(r=this.size-1),this.keyAt(r)}find(e,t){let n=0;for(let r of this){if(Reflect.apply(e,t,[r,n,this]))return r;n++}}findIndex(e,t){let n=0;for(let r of this){if(Reflect.apply(e,t,[r,n,this]))return n;n++}return-1}filter(t,n){let r=[],i=0;for(let e of this)Reflect.apply(t,n,[e,i,this])&&r.push(e),i++;return new e(r)}map(t,n){let r=[],i=0;for(let e of this)r.push([e[0],Reflect.apply(t,n,[e,i,this])]),i++;return new e(r)}reduce(...e){let[t,n]=e,r=0,i=n??this.at(0);for(let n of this)i=r===0&&e.length===1?n:Reflect.apply(t,this,[i,n,r,this]),r++;return i}reduceRight(...e){let[t,n]=e,r=n??this.at(-1);for(let n=this.size-1;n>=0;n--){let i=this.at(n);r=n===this.size-1&&e.length===1?i:Reflect.apply(t,this,[r,i,n,this])}return r}toSorted(t){let n=[...this.entries()].sort(t);return new e(n)}toReversed(){let t=new e;for(let e=this.size-1;e>=0;e--){let n=this.keyAt(e),r=this.get(n);t.set(n,r)}return t}toSpliced(...t){let n=[...this.entries()];return n.splice(...t),new e(n)}slice(t,n){let r=new e,i=this.size-1;if(t===void 0)return r;t<0&&(t+=this.size),n!==void 0&&n>0&&(i=n-1);for(let e=t;e<=i;e++){let t=this.keyAt(e),n=this.get(t);r.set(t,n)}return r}every(e,t){let n=0;for(let r of this){if(!Reflect.apply(e,t,[r,n,this]))return!1;n++}return!0}some(e,t){let n=0;for(let r of this){if(Reflect.apply(e,t,[r,n,this]))return!0;n++}return!1}};function Uh(e,t){if(`at`in Array.prototype)return Array.prototype.at.call(e,t);let n=Wh(e,t);return n===-1?void 0:e[n]}zh(Uh,`at`);function Wh(e,t){let n=e.length,r=Gh(t),i=r>=0?r:n+r;return i<0||i>=n?-1:i}zh(Wh,`toSafeIndex`);function Gh(e){return e!==e||e===0?0:Math.trunc(e)}zh(Gh,`toSafeInteger`);function Kh(e){let t=e+`CollectionProvider`,[n,r]=Oe(t),[i,a]=n(t,{collectionElement:null,collectionRef:{current:null},collectionRefObject:{current:null},itemMap:new Hh,setItemMap:zh(()=>void 0,`setItemMap`)}),o=zh(({state:e,...t})=>e?(0,L.jsx)(c,{...t,state:e}):(0,L.jsx)(s,{...t}),`CollectionProvider`);o.displayName=t;let s=zh(e=>{let t=h();return(0,L.jsx)(c,{...e,state:t})},`CollectionInit`);s.displayName=t+`Init`;let c=zh(e=>{let{scope:t,children:n,state:r}=e,a=I.useRef(null),[o,s]=I.useState(null),c=Me(a,s),[l,u]=r;return I.useEffect(()=>{if(!o)return;let e=Xh(()=>{});return e.observe(o,{childList:!0,subtree:!0}),()=>{e.disconnect()}},[o]),(0,L.jsx)(i,{scope:t,itemMap:l,setItemMap:u,collectionRef:c,collectionRefObject:a,collectionElement:o,children:n})},`CollectionProviderImpl`);c.displayName=t+`Impl`;let l=e+`CollectionSlot`,u=Pe(l),d=I.forwardRef((e,t)=>
22{let{scope:n,children:r}=e,i=a(l,n),o=Me(t,i.collectionRef);return(0,L.jsx)(u,{ref:o,children:r})});d.displayName=l;let f=e+`CollectionItemSlot`,p=Pe(f),m=I.forwardRef((e,t)=>{let{scope:n,children:r,...i}=e,o=I.useRef(null),[s,c]=I.useState(null),l=Me(t,o,c),{setItemMap:u}=a(f,n),d=I.useRef(i);qh(d.current,i)||(d.current=i);let m=d.current;return I.useEffect(()=>{let e=m;return u(t=>s?t.has(s)?t.set(s,{...e,element:s}).toSorted(Yh):(t.set(s,{...e,element:s}),t.toSorted(Yh)):t),()=>{u(e=>!s||!e.has(s)?e:(e.delete(s),new Hh(e)))}},[s,m,u]),(0,L.jsx)(p,{"data-radix-collection-item":``,ref:l,children:r})});m.displayName=f;function h(){return I.useState(new Hh)}zh(h,`useInitCollection`);function g(t){let{itemMap:n}=a(e+`CollectionConsumer`,t);return n}return zh(g,`useCollection`),[{Provider:o,Slot:d,ItemSlot:m},{createCollectionScope:r,useCollection:g,useInitCollection:h}]}zh(Kh,`createCollection`);function qh(e,t){if(e===t)return!0;if(typeof e!=`object`||typeof t!=`object`||e==null||t==null)return!1;let n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let r of n)if(!Object.prototype.hasOwnProperty.call(t,r)||e[r]!==t[r])return!1;return!0}zh(qh,`shallowEqual`);function Jh(e,t){return!!(t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_PRECEDING)}zh(Jh,`isElementPreceding`);function Yh(e,t){return!e[1].element||!t[1].element?0:Jh(e[1].element,t[1].element)?-1:1}zh(Yh,`sortByDocumentPosition`);function Xh(e){return new MutationObserver(t=>{for(let n of t)if(n.type===`childList`){e();return}})}zh(Xh,`getChildListObserver`);var Zh=r(o(),1),Qh=Object.defineProperty,$h=(e,t)=>Qh(e,`name`,{value:t,configurable:!0}),eg=[`a`,`button`,`div`,`form`,`h2`,`h3`,`img`,`input`,`label`,`li`,`nav`,`ol`,`p`,`select`,`span`,`svg`,`ul`].reduce((e,t)=>{let n=Pe(`Primitive.${t}`),r=I.forwardRef((e,r)=>{let{asChild:i,...a}=e,o=i?n:t;return typeof window<`u`&&(window[Symbol.for(`radix-ui`)]=!0),(0,L.jsx)(o,{...a,ref:r})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function tg(e,t){e&&Zh.flushSync(()=>e.dispatchEvent(t))}$h(tg,`dispatchDiscreteCustomEvent`);var ng=Object.defineProperty,rg=(e,t)=>ng(e,`name`,{value:t,configurable:!0});function ig(e){let t=I.useRef(e);return I.useEffect(()=>{t.current=e}),I.useMemo(()=>((...e)=>t.current?.(...e)),[])}rg(ig,`useCallbackRef`);var ag=Object.defineProperty,og=(e,t)=>ag(e,`name`,{value:t,configurable:!0}),sg=`dismissableLayer.update`,cg=`dismissableLayer.pointerDownOutside`,lg=`dismissableLayer.focusOutside`,ug,dg=I.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set,dismissableSurfaces:new Set}),fg=I.forwardRef(og(function(e,t){let{disableOutsidePointerEvents:n=!1,deferPointerDownOutside:r=!1,onEscapeKeyDown:i,onPointerDownOutside:a,onFocusOutside:o,onInteractOutside:s,onDismiss:c,...l}=e,u=I.useContext(dg),[d,f]=I.useState(null),p=d?.ownerDocument??globalThis?.document,[,m]=I.useState({}),h=Me(t,f),g=Array.from(u.layers),[_]=[...u.layersWithOutsidePointerEventsDisabled].slice(-1),v=_?g.indexOf(_):-1,y=d?g.indexOf(d):-1,b=u.layersWithOutsidePointerEventsDisabled.size>0,x=y>=v,S=I.useRef(!1),C=gg(e=>{a?.(e),s?.(e),e.defaultPrevented||c?.()},{ownerDocument:p,deferPointerDownOutside:r,isDeferredPointerDownOutsideRef:S,dismissableSurfaces:u.dismissableSurfaces,shouldHandlePointerDownOutside:I.useCallback(e=>{if(!(e instanceof Node))return!1;let t=[...u.branches].some(t=>t.contains(e));return x&&!t},[u.branches,x])}),w=_g(e=>{if(r&&S.current)return;let t=e.target;[...u.branches].some(e=>e.contains(t))||(o?.(e),s?.(e),e.defaultPrevented||c?.())},p),T=d?y===g.length-1:!1,E=ig(e=>{e.key===`Escape`&&(i?.(e),!e.defaultPrevented&&c&&(e.preventDefault(),c()))});return I.useEffect(()=>{if(T)return p.addEventListener(`keydown`,E,{capture:!0}),()=>p.removeEventListener(`keydown`,E,{capture:!0})},[p,T,E]),I.useEffect(()=>{if(d)return n&&(u.layersWithOutsidePointerEventsDisabled.size===0&&(ug=p.body.style.pointerEvents,p.body.style.pointerEvents=`none`),u.layersWithOutsidePointerEventsDisabled.add(d)),u.layers.add(d),vg(),()=>
22{n&&(u.layersWithOutsidePointerEventsDisabled.delete(d),u.layersWithOutsidePointerEventsDisabled.size===0&&(p.body.style.pointerEvents=ug))}},[d,p,n,u]),I.useEffect(()=>()=>{d&&(u.layers.delete(d),u.layersWithOutsidePointerEventsDisabled.delete(d),vg())},[d,u]),I.useEffect(()=>{let e=og(()=>m({}),`handleUpdate`);return document.addEventListener(sg,e),()=>document.removeEventListener(sg,e)},[]),(0,L.jsx)(eg.div,{...l,ref:h,style:{pointerEvents:b?x?`auto`:`none`:void 0,...e.style},onFocusCapture:De(e.onFocusCapture,w.onFocusCapture),onBlurCapture:De(e.onBlurCapture,w.onBlurCapture),onPointerDownCapture:De(e.onPointerDownCapture,C.onPointerDownCapture)})},`DismissableLayer`)),pg=I.forwardRef(og(function(e,t){let n=I.useContext(dg),r=I.useRef(null),i=Me(t,r);return I.useEffect(()=>{let e=r.current;if(e)return n.branches.add(e),()=>{n.branches.delete(e)}},[n.branches]),(0,L.jsx)(eg.div,{...e,ref:i})},`DismissableLayerBranch`));function mg(){let e=I.useContext(dg),[t,n]=I.useState(null);return I.useEffect(()=>{if(t)return e.dismissableSurfaces.add(t),()=>{e.dismissableSurfaces.delete(t)}},[t,e.dismissableSurfaces]),n}og(mg,`useDismissableLayerSurface`);var hg=og(()=>!0,`IS_TRUE`);function gg(e,t){let{ownerDocument:n=globalThis?.document,deferPointerDownOutside:r=!1,isDeferredPointerDownOutsideRef:i,dismissableSurfaces:a,shouldHandlePointerDownOutside:o=hg}=t,s=ig(e),c=I.useRef(!1),l=I.useRef(!1),u=I.useRef(new Map),d=I.useRef(()=>{});return I.useEffect(()=>{function e(){l.current=!1,i.current=!1,u.current.clear()}og(e,`resetOutsideInteraction`);function t(){return Array.from(u.current.values()).some(Boolean)}og(t,`isOutsideInteractionIntercepted`);function f(e){if(!l.current)return;let t=e.target;t instanceof Node&&[...a].some(e=>e.contains(t))||u.current.set(e.type,!0),e.type===`click`&&window.setTimeout(()=>{l.current&&d.current()},0)}og(f,`handleInteractionCapture`);function p(e){l.current&&u.current.set(e.type,!1)}og(p,`handleInteractionBubble`);let m=og(a=>{if(a.target&&!c.current){let f=function(){n.removeEventListener(`click`,d.current);let r=t();e(),r||yg(cg,s,p,{discrete:!0})};if(og(f,`handleAndDispatchPointerDownOutsideEvent`),!o(a.target)){n.removeEventListener(`click`,d.current),e(),c.current=!1;return}let p={originalEvent:a};l.current=!0,i.current=r&&a.button===0,u.current.clear(),!r||a.button!==0?f():(n.removeEventListener(`click`,d.current),d.current=f,n.addEventListener(`click`,d.current,{once:!0}))}else n.removeEventListener(`click`,d.current),e();c.current=!1},`handlePointerDown`),h=[`pointerup`,`mousedown`,`mouseup`,`touchstart`,`touchend`,`click`];for(let e of h)n.addEventListener(e,f,!0),n.addEventListener(e,p);let g=window.setTimeout(()=>{n.addEventListener(`pointerdown`,m)},0);return()=>{window.clearTimeout(g),n.removeEventListener(`pointerdown`,m),n.removeEventListener(`click`,d.current);for(let e of h)n.removeEventListener(e,f,!0),n.removeEventListener(e,p)}},[n,s,r,i,a,o]),{onPointerDownCapture:og(()=>c.current=!0,`onPointerDownCapture`)}}og(gg,`usePointerDownOutside`);function _g(e,t=globalThis?.document){let n=ig(e),r=I.useRef(!1);return I.useEffect(()=>{let e=og(e=>{e.target&&!r.current&&yg(lg,n,{originalEvent:e},{discrete:!1})},`handleFocus`);return t.addEventListener(`focusin`,e),()=>t.removeEventListener(`focusin`,e)},[t,n]),{onFocusCapture:og(()=>r.current=!0,`onFocusCapture`),onBlurCapture:og(()=>r.current=!1,`onBlurCapture`)}}og(_g,`useFocusOutside`);function vg(){let e=new CustomEvent(sg);document.dispatchEvent(e)}og(vg,`dispatchUpdate`);function yg(e,t,n,{discrete:r}){let i=n.originalEvent.target,a=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&i.addEventListener(e,t,{once:!0}),r?tg(i,a):i.dispatchEvent(a)}og(yg,`handleAndDispatchCustomEvent`);var bg=fg,xg=pg,Sg=Object.defineProperty,Cg=I.forwardRef(((e,t)=>Sg(e,`name`,{value:t,configurable:!0}))(function(e,t){let{container:n,...r}=e,[i,a]=I.useState(!1);Ae(()=>a(!0),[]);let o=n||i&&globalThis?.document?.body;return o?Zh.createPortal((0,L.jsx)(eg.div,{...r,ref:t}),o):null},`Portal`)),wg=Object.defineProperty,Tg=(e,t)=>wg(e,`name`,{value:t,configurable:!0});function Eg(e,t){return I.useReducer((e,n)=>t[e][n]??e,e)}Tg(Eg,`useStateMachine`);var Dg=Tg(e=>{let{present:t,children:n}=e,r=Og(t),i=typeof n==`function`?n({present:r.isPresent}):I.Children.only(n),a=Ag(r.ref,Mg(i));return typeof n==`function`||r.isPresent?I.cloneElement(i,{ref:a}):null},`Presence`);function Og(e){let[t,n]=I.useState(),r=I.useRef(null),i=I.useRef(e),a=I.useRef(`none`),o=I.useRef(void 0),[s,c]=Eg(e?`mounted`:`unmounted`,{mou
22nted:{UNMOUNT:`unmounted`,ANIMATION_OUT:`unmountSuspended`},unmountSuspended:{MOUNT:`mounted`,ANIMATION_END:`unmounted`},unmounted:{MOUNT:`mounted`}});return I.useEffect(()=>{s===`mounted`?(a.current=o.current??jg(r.current),o.current=void 0):a.current=`none`},[s]),Ae(()=>{let t=r.current,n=i.current;if(n!==e){let r=a.current,s=jg(t);e?(o.current=s,c(`MOUNT`)):s===`none`||t?.display===`none`?c(`UNMOUNT`):c(n&&r!==s?`ANIMATION_OUT`:`UNMOUNT`),i.current=e}},[e,c]),Ae(()=>{if(t){let e,n=t.ownerDocument.defaultView??window,o=Tg(a=>{let o=jg(r.current).includes(CSS.escape(a.animationName));if(a.target===t&&o&&(c(`ANIMATION_END`),!i.current)){let r=t.style.animationFillMode;t.style.animationFillMode=`forwards`,e=n.setTimeout(()=>{t.style.animationFillMode===`forwards`&&(t.style.animationFillMode=r)})}},`handleAnimationEnd`),s=Tg(e=>{e.target===t&&(a.current=jg(r.current))},`handleAnimationStart`);return t.addEventListener(`animationstart`,s),t.addEventListener(`animationcancel`,o),t.addEventListener(`animationend`,o),()=>{n.clearTimeout(e),t.removeEventListener(`animationstart`,s),t.removeEventListener(`animationcancel`,o),t.removeEventListener(`animationend`,o)}}c(`ANIMATION_END`)},[t,c]),{isPresent:[`mounted`,`unmountSuspended`].includes(s),ref:I.useCallback(e=>{if(e){let t=getComputedStyle(e);r.current=t,o.current=jg(t)}else r.current=null;n(e)},[])}}Tg(Og,`usePresence`);function kg(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}Tg(kg,`setRef`);function Ag(...e){let t=I.useRef(e);return t.current=e,I.useCallback(e=>{let n=t.current,r=!1,i=n.map(t=>{let n=kg(t,e);return!r&&typeof n==`function`&&(r=!0),n});if(r)return()=>{for(let e=0;e<i.length;e++){let t=i[e];typeof t==`function`?t():kg(n[e],null)}}},[])}Tg(Ag,`useStableComposedRefs`);function jg(e){return e?.animationName||`none`}Tg(jg,`getAnimationName`);function Mg(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}Tg(Mg,`getElementRef`);var Ng=Object.defineProperty,Pg=(e,t)=>Ng(e,`name`,{value:t,configurable:!0}),Fg=Object.freeze({position:`absolute`,border:0,width:1,height:1,padding:0,margin:-1,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,whiteSpace:`nowrap`,wordWrap:`normal`}),Ig=I.forwardRef(Pg(function(e,t){return(0,L.jsx)(eg.span,{...e,ref:t,style:{...Fg,...e.style}})},`VisuallyHidden`)),Lg=Ig,Rg=Object.defineProperty,zg=(e,t)=>Rg(e,`name`,{value:t,configurable:!0}),Bg=`ToastProvider`,[Vg,Hg,Ug]=Bh(`Toast`),[Wg,Gg]=Oe(`Toast`,[Ug]),[Kg,qg]=Wg(Bg),Jg=zg(e=>{let{__scopeToast:t,label:n=`Notification`,duration:r=5e3,swipeDirection:i=`right`,swipeThreshold:a=50,announcerContainer:o,children:s}=e,[c,l]=I.useState(null),[u,d]=I.useState(0),f=I.useRef(!1);return n.trim()||console.error(`Invalid prop \`label\` supplied to \`${Bg}\`. Expected non-empty \`string\`.`),(0,L.jsx)(Vg.Provider,{scope:t,children:(0,L.jsx)(Kg,{scope:t,label:n,duration:r,swipeDirection:i,swipeThreshold:a,toastCount:u,viewport:c,onViewportChange:l,onToastAdd:I.useCallback(()=>d(e=>e+1),[]),onToastRemove:I.useCallback(()=>d(e=>e-1),[]),isClosePausedRef:f,announcerContainer:o,children:s})})},`ToastProvider`),Yg=`ToastViewport`,Xg=[`F8`],Zg=`toast.viewportPause`,Qg=`toast.viewportResume`,$g=I.forwardRef(zg(function(e,t){let{__scopeToast:n,hotkey:r=Xg,label:i=`Notifications ({hotkey})`,...a}=e,o=qg(Yg,n),s=Hg(n),c=I.useRef(null),l=I.useRef(null),u=I.useRef(null),d=I.useRef(null),f=Me(t,d,o.onViewportChange),p=r.join(`+`).replace(/Key/g,``).replace(/Digit/g,``),m=o.toastCount>0;I.useEffect(()=>{let e=zg(e=>{r.length!==0&&r.every(t=>e[t]||e.code===t)&&d.current?.focus()},`handleKeyDown`);return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[r]),I.useEffect(()=>{let e=c.current,t=d.current;if(m&&e&&t){let n=zg(()=>{if(!o.isClosePausedRef.current){let e=new CustomEvent(Zg);t.dispatchEvent(e),o.isClosePausedRef.current=!0}},`handlePause`),r=zg(()=>{if(o.isClosePausedRef.current){let e=new CustomEvent(Qg);t.dispatchEvent(e),o.isClosePausedRef.current=!1}},`handleResume`),i=zg(t=>{e.contains(t.relatedTarget)||r()},`handleFocusOutResume`),a=zg(()=>{e.contains(document.activeElement)||r()},`handlePointerLeaveResume`);return e.addEventListener(`focusin`,n),e.addEventListener(`focusout`,i),e.addEventListener(`pointermove`,n),e.addEventListener(`pointerleave`,a),window.addEventListener(`blur`,n),window.addEventListener(`focus`,r),()=>{e.removeEventListener(`focusin`,n),e.removeEventListener(`focusout`,i),e.removeEventListener(`pointermove`,n),e.removeEventListener(`pointerleave`,a),window.removeEventListener(`blur`,n),window.removeEventListener(`focus`,r)}}},[m,o.isClosePausedRef]);let h=I.useCallback(({tabbingDirection:e})=>{let t=s().map(t=>{let n=t.ref.current,r=[n,...w_(n)];return e===`forwards`?r:r.reverse()});return(e===`forwards`?t.reverse():t).flat()},[s]);return I.useEffect(()=>{let e=d.current;if(e){let t=zg(t=>{let n=t.altKey||t.ctrlKey||t.metaKey;if(t.key===`Tab`&&!n){let n=document.activeElement,r=t.shiftKey;if(t.target===e&&r){l.current?.focus();return}let i=h({tabbingDirection:r?`backwards`:`forwards`}),a=i.findIndex(e=>e===n);T_(i.slice(a+1))?t.preventDefault():r?l.current?.focus():u.current?.focus()}},`handleKeyDown`);
22return e.addEventListener(`keydown`,t),()=>e.removeEventListener(`keydown`,t)}},[s,h]),(0,L.jsxs)(xg,{ref:c,role:`region`,"aria-label":i.replace(`{hotkey}`,p),tabIndex:-1,style:{pointerEvents:m?void 0:`none`},children:[m&&(0,L.jsx)(t_,{ref:l,onFocusFromOutsideViewport:()=>{T_(h({tabbingDirection:`forwards`}))}}),(0,L.jsx)(Vg.Slot,{scope:n,children:(0,L.jsx)(eg.ol,{tabIndex:-1,...a,ref:f})}),m&&(0,L.jsx)(t_,{ref:u,onFocusFromOutsideViewport:()=>{T_(h({tabbingDirection:`backwards`}))}})]})},`ToastViewport`)),e_=`ToastFocusProxy`,t_=I.forwardRef(zg(function(e,t){let{__scopeToast:n,onFocusFromOutsideViewport:r,...i}=e,a=qg(e_,n);return(0,L.jsx)(Ig,{tabIndex:0,...i,ref:t,style:{position:`fixed`},onFocus:e=>{let t=e.relatedTarget;a.viewport?.contains(t)||r()}})},`ToastFocusProxy`)),n_=`Toast`,r_=`toast.swipeStart`,i_=`toast.swipeMove`,a_=`toast.swipeCancel`,o_=`toast.swipeEnd`,s_=I.forwardRef(zg(function(e,t){let{forceMount:n,open:r,defaultOpen:i,onOpenChange:a,...o}=e,[s,c]=ke({prop:r,defaultProp:i??!0,onChange:a,caller:n_});return(0,L.jsx)(Dg,{present:n||s,children:(0,L.jsx)(u_,{open:s,...o,ref:t,onClose:()=>c(!1),onPause:ig(e.onPause),onResume:ig(e.onResume),onSwipeStart:De(e.onSwipeStart,e=>{e.currentTarget.setAttribute(`data-swipe`,`start`)}),onSwipeMove:De(e.onSwipeMove,e=>{let{x:t,y:n}=e.detail.delta;e.currentTarget.setAttribute(`data-swipe`,`move`),e.currentTarget.style.setProperty(`--radix-toast-swipe-move-x`,`${t}px`),e.currentTarget.style.setProperty(`--radix-toast-swipe-move-y`,`${n}px`)}),onSwipeCancel:De(e.onSwipeCancel,e=>{e.currentTarget.setAttribute(`data-swipe`,`cancel`),e.currentTarget.style.removeProperty(`--radix-toast-swipe-move-x`),e.currentTarget.style.removeProperty(`--radix-toast-swipe-move-y`),e.currentTarget.style.removeProperty(`--radix-toast-swipe-end-x`),e.currentTarget.style.removeProperty(`--radix-toast-swipe-end-y`)}),onSwipeEnd:De(e.onSwipeEnd,e=>{let{x:t,y:n}=e.detail.delta;e.currentTarget.setAttribute(`data-swipe`,`end`),e.currentTarget.style.removeProperty(`--radix-toast-swipe-move-x`),e.currentTarget.style.removeProperty(`--radix-toast-swipe-move-y`),e.currentTarget.style.setProperty(`--radix-toast-swipe-end-x`,`${t}px`),e.currentTarget.style.setProperty(`--radix-toast-swipe-end-y`,`${n}px`),c(!1)})})})},`Toast`)),[c_,l_]=Wg(n_,{onClose(){}}),u_=I.forwardRef(zg(function(e,t){let{__scopeToast:n,type:r=`foreground`,duration:i,open:a,onClose:o,onEscapeKeyDown:s,onPause:c,onResume:l,onSwipeStart:u,onSwipeMove:d,onSwipeCancel:f,onSwipeEnd:p,...m}=e,h=qg(n_,n),g=Hg(n),[_,v]=I.useState(null),y=Me(t,v),b=I.useRef(null),x=I.useRef(null),S=i||h.duration,C=I.useRef(0),w=I.useRef(S),T=I.useRef(0),{onToastAdd:E,onToastRemove:ee}=h,D=ig(()=>{_?.contains(document.activeElement)&&h.viewport?.focus(),o()}),te=I.useCallback(e=>{!e||e===1/0||(window.clearTimeout(T.current),C.current=new Date().getTime(),T.current=window.setTimeout(D,e))},[D]);I.useEffect(()=>{let e=h.viewport;if(e){let t=zg(()=>{te(w.current),l?.()},`handleResume`),n=zg(()=>{let e=new Date().getTime()-C.current;w.current-=e,window.clearTimeout(T.current),c?.()},`handlePause`);return e.addEventListener(Zg,n),e.addEventListener(Qg,t),()=>{e.removeEventListener(Zg,n),e.removeEventListener(Qg,t)}}},[h.viewport,S,c,l,te]),I.useEffect(()=>{a&&!h.isClosePausedRef.current&&te(S)},[a,S,h.isClosePausedRef,te]),I.useEffect(()=>()=>{window.clearTimeout(T.current)},[]),I.useEffect(()=>(E(),()=>ee()),[E,ee]);let ne=I.useMemo(()=>_?y_(_):null,[_]);return h.viewport?(0,L.jsxs)(L.Fragment,{children:[ne&&(0,L.jsx)(d_,{__scopeToast:n,role:`status`,"aria-live":r===`foreground`?`assertive`:`polite`,children:ne}),(0,L.jsx)(c_,{scope:n,onClose:D,children:Zh.createPortal((0,L.jsx)(Vg.ItemSlot,{scope:n,children:(0,L.jsx)(bg,{asChild:!0,onEscapeKeyDown:De(s,e=>{g().some(t=>t.ref.current?.contains(e.target))||D()}),children:(0,L.jsx)(eg.li,{tabIndex:0,"data-state":a?`open`:`closed`,"data-swipe-direction":h.swipeDirection,...m,ref:y,style:{userSelect:`none`,touchAction:`none`,...e.style},onKeyDown:De(e.onKeyDown,e=>{e.key===`Escape`&&(s?.(e.nativeEvent),e.nativeEvent.defaultPrevented||D())}),onPointerDown:De(e.onPointerDown,e=>{e.button===0&&(b.current={x:e.clientX,y:e.clientY})}),onPointerMove:De(e.onPointerMove,e=>{if(!b.current)return;let t=e.clientX-b.current.x,n=e.clientY-b.current.y,r=!!x.current,i=[`left`,`right`].includes(h.swipeDirection),a=[`left`,`up`].includes(h.swipeDirection)?Math.min:Math.max,o=i?a(0,t):0,s=i?0:a(0,n),c=e.pointerType===`touch`?10:2,l={x:o,y:s},f={originalEvent:e,delta:l};r?(x.current=l,b_(i_,d,f,{discrete:!1})):x_(l,h.swipeDirection,c)?(x.current=l,b_(r_,u,f,{discrete:!1}),e.target.setPointerCapture(e.pointerId)):(Math.abs(t)>c||Math.abs(n)>c)&&(b.current=null)}),onPointerUp:De(e.onPointerUp,e=>{let t=x.current,n=e.target;if(n.hasPointerCapture(e.pointerId)&&n.releasePointerCapture(e.pointerId),x.current=null,b.current=null,t){let n=e.currentTarget,r={originalEvent:e,delta:t};x_(t,h.swipeDirection,h.swipeThreshold)?b_(o_,p,r,{discrete:!0}):b_(a_,f,r,{discrete:!0}),n.addEventListener(`click`,e=>e.preventDefault(),{once:!0})}})})})}),h.viewport)})]}):null},`ToastImpl`)),d_=zg(e=>{let{__scopeToast:t,children:n,...r}=e,i=qg(n_,t),[a,o]=I.useState(!1),[s,c]=I.useState(!1);return S_(()=>o(!0)),I.useEffect(()=>{let e=window.setTimeout(()=>c(!0),1e3);return()=>window.clearTimeout(e)},[]),s?null:(0,L.jsx)(Cg,{asChild:!0,container:i.announcerContainer||void 0,children:(0,L.jsx)(Ig,{...r,children:a&&(0,L.jsxs)(L.Fragment,{children:[i.label,` `,n]})})})},`ToastAnnounce`),f_=I.forwardRef(zg(function(e,t){let{__scopeToast:n,...r}=e;return(0,L.jsx)(eg.div,{...r,ref:t})},`ToastTitle`)),p_=I.forwardRef(zg(function(e,t){let{__scopeToast:n,...r}=e;return(0,L.jsx)(eg.div,{...r,ref:t})},`ToastDescription`)),m_=`ToastAction`,h_=I.forwardRef(zg(function(e,t){let{altText:n,...r}=e;return n.trim()?(0,L.jsx)(v_,{altText:n,asChild:!0,children:(0,L.jsx)(__,{...r,ref:t})}):(console.error(`Invalid prop \`altText\` supplied to \`${m_}\`. Expected non-empty \`string\`.`),null)},`ToastAction`)),g_=`ToastClose`,__=I.forwardRef(zg(function(e,t){let{__scopeToast:n,...r}=e,i=l_(g_,n);return(0,L.jsx)(v_,{asChild:!0,children:(0,L.jsx)(eg.button,{type:`button`,...r,ref:t,onClick:De(e.onClick,i.onClose)})})},`ToastClose`)),v_=I.forwardRef(zg(function(e,t){let{__scopeToast:n,altText:r,...i}=e;return(0,L.jsx)(eg.div,{"data-radix-toast-announce-exclude":``,"data-radix-toast-announce-alt":r||void 0,...i,ref:t})},`ToastAnnounceExclude`));function y_(e){let t=[];
22return Array.from(e.childNodes).forEach(e=>{if(e.nodeType===e.TEXT_NODE&&e.textContent&&t.push(e.textContent),C_(e)){let n=e.ariaHidden||e.hidden||e.style.display===`none`,r=e.dataset.radixToastAnnounceExclude===``;if(!n)if(r){let n=e.dataset.radixToastAnnounceAlt;n&&t.push(n)}else t.push(...y_(e))}}),t}zg(y_,`getAnnounceTextContent`);function b_(e,t,n,{discrete:r}){let i=n.originalEvent.currentTarget,a=new CustomEvent(e,{bubbles:!0,cancelable:!0,detail:n});t&&i.addEventListener(e,t,{once:!0}),r?tg(i,a):i.dispatchEvent(a)}zg(b_,`handleAndDispatchCustomEvent`);var x_=zg((e,t,n=0)=>{let r=Math.abs(e.x),i=Math.abs(e.y),a=r>i;return t===`left`||t===`right`?a&&r>n:!a&&i>n},`isDeltaInDirection`);function S_(e=()=>{}){let t=ig(e);Ae(()=>{let e=0,n=0;return e=window.requestAnimationFrame(()=>n=window.requestAnimationFrame(t)),()=>{window.cancelAnimationFrame(e),window.cancelAnimationFrame(n)}},[t])}zg(S_,`useNextFrame`);function C_(e){return e.nodeType===e.ELEMENT_NODE}zg(C_,`isHTMLElement`);function w_(e){let t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:zg(e=>{let t=e.tagName===`INPUT`&&e.type===`hidden`;return e.disabled||e.hidden||t?NodeFilter.FILTER_SKIP:e.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP},`acceptNode`)});for(;n.nextNode();)t.push(n.currentNode);return t}zg(w_,`getTabbableCandidates`);function T_(e){let t=document.activeElement;return e.some(e=>e===t||(e.focus(),document.activeElement!==t))}zg(T_,`focusFirst`);var E_=Jg,D_=$g,O_=s_,k_=f_,A_=p_,j_=h_,M_=__,N_=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),P_=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),F_=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),I_=e=>{let t=F_(e);return t.charAt(0).toUpperCase()+t.slice(1)},L_={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},R_=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},z_=(0,I.forwardRef)(({color:e=`currentColor`,size:t=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>(0,I.createElement)(`svg`,{ref:c,...L_,width:t,height:t,stroke:e,strokeWidth:r?Number(n)*24/Number(t):n,className:N_(`lucide`,i),...!a&&!R_(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>(0,I.createElement)(e,t)),...Array.isArray(a)?a:[a]])),B_=(e,t)=>{let n=(0,I.forwardRef)(({className:n,...r},i)=>(0,I.createElement)(z_,{ref:i,iconNode:t,className:N_(`lucide-${P_(I_(e))}`,`lucide-${e}`,n),...r}));return n.displayName=I_(e),n},V_=B_(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),H_=E_,U_=I.forwardRef(({className:e,...t},n)=>(0,L.jsx)(D_,{ref:n,className:Ie(`fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]`,e),...t}));U_.displayName=D_.displayName;var W_=Fe(`group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full`,{variants:{variant:{default:`border bg-background text-foreground`,destructive:`destructive group border-destructive bg-destructive text-destructive-foreground`}},defaultVariants:{variant:`default`}}),G_=I.forwardRef(({className:e,variant:t,...n},r)=>(0,L.jsx)(O_,{ref:r,className:Ie(W_({variant:t}),e),...n}));G_.displayName=O_.displayName;var K_=I.forwardRef(({className:e,...t},n)=>(0,L.jsx)(j_,{ref:n,className:Ie(`inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors group-[.destructive]:border-muted/40 hover:bg-secondary group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground focus:outline-hidden focu
22s:ring-2 focus:ring-ring focus:ring-offset-2 group-[.destructive]:focus:ring-destructive disabled:pointer-events-none disabled:opacity-50`,e),...t}));K_.displayName=j_.displayName;var q_=I.forwardRef(({className:e,...t},n)=>(0,L.jsx)(M_,{ref:n,className:Ie(`absolute right-2 top-2 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity group-hover:opacity-100 group-[.destructive]:text-red-300 hover:text-foreground group-[.destructive]:hover:text-red-50 focus:opacity-100 focus:outline-hidden focus:ring-2 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600`,e),"toast-close":``,...t,children:(0,L.jsx)(V_,{className:`h-4 w-4`})}));q_.displayName=M_.displayName;var J_=I.forwardRef(({className:e,...t},n)=>(0,L.jsx)(k_,{ref:n,className:Ie(`text-sm font-semibold`,e),...t}));J_.displayName=k_.displayName;var Y_=I.forwardRef(({className:e,...t},n)=>(0,L.jsx)(A_,{ref:n,className:Ie(`text-sm opacity-90`,e),...t}));Y_.displayName=A_.displayName;function X_(){let{toasts:e}=Lh();return(0,L.jsxs)(H_,{children:[e.map(function({id:e,title:t,description:n,action:r,...i}){return(0,L.jsxs)(G_,{...i,children:[(0,L.jsxs)(`div`,{className:`grid gap-1`,children:[t&&(0,L.jsx)(J_,{children:t}),n&&(0,L.jsx)(Y_,{children:n})]}),r,(0,L.jsx)(q_,{})]},e)}),(0,L.jsx)(U_,{})]})}var Z_=[`light`,`dark`],Q_=`(prefers-color-scheme: dark)`,$_=I.createContext(void 0),ev={setTheme:e=>{},themes:[]},tv=()=>I.useContext($_)??ev;I.memo(({forcedTheme:e,storageKey:t,attribute:n,enableSystem:r,enableColorScheme:i,defaultTheme:a,value:o,attrs:s,nonce:c})=>{let l=a===`system`,u=n===`class`?`var d=document.documentElement,c=d.classList;${`c.remove(${s.map(e=>`'${e}'`).join(`,`)})`};`:`var d=document.documentElement,n='${n}',s='setAttribute';`,d=i?Z_.includes(a)&&a?`if(e==='light'||e==='dark'||!e)d.style.colorScheme=e||'${a}'`:`if(e==='light'||e==='dark')d.style.colorScheme=e`:``,f=(e,t=!1,r=!0)=>{let a=o?o[e]:e,s=t?e+`|| ''`:`'${a}'`,c=``;return i&&r&&!t&&Z_.includes(e)&&(c+=`d.style.colorScheme = '${e}';`),n===`class`?c+=t||a?`c.add(${s})`:`null`:a&&(c+=`d[s](n,${s})`),c},p=e?`!function(){${u}${f(e)}}()`:r?`!function(){try{${u}var e=localStorage.getItem('${t}');if('system'===e||(!e&&${l})){var t='${Q_}',m=window.matchMedia(t);if(m.media!==t||m.matches){${f(`dark`)}}else{${f(`light`)}}}else if(e){${o?`var x=${JSON.stringify(o)};`:``}${f(o?`x[e]`:`e`,!0)}}${l?``:`else{`+f(a,!1,!1)+`}`}${d}}catch(e){}}()`:`!function(){try{${u}var e=localStorage.getItem('${t}');if(e){${o?`var x=${JSON.stringify(o)};`:``}${f(o?`x[e]`:`e`,!0)}}else{${f(a,!1,!1)};}${d}}catch(t){}}();`;return I.createElement(`script`,{nonce:c,dangerouslySetInnerHTML:{__html:p}})});function nv(e){if(!e||typeof document>`u`)return;let t=document.head||document.getElementsByTagName(`head`)[0],n=document.createElement(`style`);n.type=`text/css`,t.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}var rv=e=>{switch(e){case`success`:return ov;case`info`:return cv;case`warning`:return sv;case`error`:return lv;default:return null}},iv=Array(12).fill(0),av=({visible:e,className:t})=>I.createElement(`div`,{className:[`sonner-loading-wrapper`,t].filter(Boolean).join(` `),"data-visible":e},I.createElement(`div`,{className:`sonner-spinner`},iv.map((e,t)=>I.createElement(`div`,{className:`sonner-loading-bar`,key:`spinner-bar-${t}`})))),ov=I.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,height:`20`,width:`20`},I.createElement(`path`,{fillRule:`evenodd`,d:`M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z`,clipRule:`evenodd`})),sv=I.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`currentColor`,height:`20`,width:`20`},I.createElement(`path`,{fillRule:`evenodd`,d:`M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z`,clipRule:`evenodd`})),cv=I.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,height:`20`,width:`20`},I.createElement(`path`,{fillRule:`evenodd`,d:`M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z`,clipRule:`evenodd`})),lv=I.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,height:`20`,width:`20`},I.createElement(`path`,{fillRule:`evenodd`,d:`M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z`,clipRule:`evenodd`})),uv=I.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,
22width:`12`,height:`12`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`},I.createElement(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),I.createElement(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})),dv=()=>{let[e,t]=I.useState(document.hidden);return I.useEffect(()=>{let e=()=>{t(document.hidden)};return document.addEventListener(`visibilitychange`,e),()=>window.removeEventListener(`visibilitychange`,e)},[]),e},fv=1,pv=new class{constructor(){this.subscribe=e=>(this.subscribers.push(e),()=>{let t=this.subscribers.indexOf(e);this.subscribers.splice(t,1)}),this.publish=e=>{this.subscribers.forEach(t=>t(e))},this.addToast=e=>{this.publish(e),this.toasts=[...this.toasts,e]},this.create=e=>{let{message:t,...n}=e,r=typeof e?.id==`number`||e.id?.length>0?e.id:fv++,i=this.toasts.find(e=>e.id===r),a=e.dismissible===void 0||e.dismissible;return this.dismissedToasts.has(r)&&this.dismissedToasts.delete(r),i?this.toasts=this.toasts.map(n=>n.id===r?(this.publish({...n,...e,id:r,title:t}),{...n,...e,id:r,dismissible:a,title:t}):n):this.addToast({title:t,...n,dismissible:a,id:r}),r},this.dismiss=e=>(e?(this.dismissedToasts.add(e),requestAnimationFrame(()=>this.subscribers.forEach(t=>t({id:e,dismiss:!0})))):this.toasts.forEach(e=>{this.subscribers.forEach(t=>t({id:e.id,dismiss:!0}))}),e),this.message=(e,t)=>this.create({...t,message:e}),this.error=(e,t)=>this.create({...t,message:e,type:`error`}),this.success=(e,t)=>this.create({...t,type:`success`,message:e}),this.info=(e,t)=>this.create({...t,type:`info`,message:e}),this.warning=(e,t)=>this.create({...t,type:`warning`,message:e}),this.loading=(e,t)=>
22this.create({...t,type:`loading`,message:e}),this.promise=(e,t)=>{if(!t)return;let n;t.loading!==void 0&&(n=this.create({...t,promise:e,type:`loading`,message:t.loading,description:typeof t.description==`function`?void 0:t.description}));let r=Promise.resolve(e instanceof Function?e():e),i=n!==void 0,a,o=r.then(async e=>{if(a=[`resolve`,e],I.isValidElement(e))i=!1,this.create({id:n,type:`default`,message:e});else if(hv(e)&&!e.ok){i=!1;let r=typeof t.error==`function`?await t.error(`HTTP error! status: ${e.status}`):t.error,a=typeof t.description==`function`?await t.description(`HTTP error! status: ${e.status}`):t.description,o=typeof r==`object`&&!I.isValidElement(r)?r:{message:r};this.create({id:n,type:`error`,description:a,...o})}else if(e instanceof Error){i=!1;let r=typeof t.error==`function`?await t.error(e):t.error,a=typeof t.description==`function`?await t.description(e):t.description,o=typeof r==`object`&&!I.isValidElement(r)?r:{message:r};this.create({id:n,type:`error`,description:a,...o})}else if(t.success!==void 0){i=!1;let r=typeof t.success==`function`?await t.success(e):t.success,a=typeof t.description==`function`?await t.description(e):t.description,o=typeof r==`object`&&!I.isValidElement(r)?r:{message:r};this.create({id:n,type:`success`,description:a,...o})}}).catch(async e=>{if(a=[`reject`,e],t.error!==void 0){i=!1;let r=typeof t.error==`function`?await t.error(e):t.error,a=typeof t.description==`function`?await t.description(e):t.description,o=typeof r==`object`&&!I.isValidElement(r)?r:{message:r};this.create({id:n,type:`error`,description:a,...o})}}).finally(()=>{i&&(this.dismiss(n),n=void 0),t.finally==null||t.finally.call(t)}),s=()=>new Promise((e,t)=>o.then(()=>a[0]===`reject`?t(a[1]):e(a[1])).catch(t));return typeof n!=`string`&&typeof n!=`number`?{unwrap:s}:Object.assign(n,{unwrap:s})},this.custom=(e,t)=>{let n=t?.id||fv++;return this.create({jsx:e(n),id:n,...t}),n},this.getActiveToasts=()=>this.toasts.filter(e=>!this.dismissedToasts.has(e.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}},mv=(e,t)=>{let n=t?.id||fv++;return pv.addToast({title:e,...t,id:n}),n},hv=e=>e&&typeof e==`object`&&`ok`in e&&typeof e.ok==`boolean`&&`status`in e&&typeof e.status==`number`,gv=Object.assign(mv,{success:pv.success,info:pv.info,warning:pv.warning,error:pv.error,custom:pv.custom,message:pv.message,promise:pv.promise,dismiss:pv.dismiss,loading:pv.loading},{getHistory:()=>pv.toasts,getToasts:()=>pv.getActiveToasts()});nv(`
vendor: 14,859 bytes, line 22
22[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}
22`);function _v(e){return e.label!==void 0}var vv=3,yv=`24px`,bv=`16px`,xv=4e3,Sv=356,Cv=14,wv=45,Tv=200;function Ev(...e){return e.filter(Boolean).join(` `)}function Dv(e){let[t,n]=e.split(`-`),r=[];return t&&r.push(t),n&&r.push(n),r}var Ov=e=>{let{invert:t,toast:n,unstyled:r,interacting:i,setHeights:a,visibleToasts:o,heights:s,index:c,toasts:l,expanded:u,removeToast:d,defaultRichColors:f,closeButton:p,style:m,cancelButtonStyle:h,actionButtonStyle:g,className:_=``,descriptionClassName:v=``,duration:y,position:b,gap:x,expandByDefault:S,classNames:C,icons:w,closeButtonAriaLabel:T=`Close toast`}=e,[E,ee]=I.useState(null),[D,te]=I.useState(null),[ne,re]=I.useState(!1),[ie,ae]=I.use
22State(!1),[oe,O]=I.useState(!1),[k,se]=I.useState(!1),[ce,le]=I.useState(!1),[ue,de]=I.useState(0),[fe,pe]=I.useState(0),me=I.useRef(n.duration||y||xv),he=I.useRef(null),ge=I.useRef(null),_e=c===0,ve=c+1<=o,ye=n.type,be=n.dismissible!==!1,xe=n.className||``,Se=n.descriptionClassName||``,Ce=I.useMemo(()=>s.findIndex(e=>e.toastId===n.id)||0,[s,n.id]),we=I.useMemo(()=>n.closeButton??p,[n.closeButton,p]),Te=I.useMemo(()=>n.duration||y||xv,[n.duration,y]),Ee=I.useRef(0),De=I.useRef(0),Oe=I.useRef(0),ke=I.useRef(null),[Ae,je]=b.split(`-`),Me=I.useMemo(()=>s.reduce((e,t,n)=>n>=Ce?e:e+t.height,0),[s,Ce]),Ne=dv(),Pe=n.invert||t,Fe=ye===`loading`;De.current=I.useMemo(()=>Ce*x+Me,[Ce,Me]),I.useEffect(()=>{me.current=Te},[Te]),I.useEffect(()=>{re(!0)},[]),I.useEffect(()=>{let e=ge.current;if(e){let t=e.getBoundingClientRect().height;return pe(t),a(e=>[{toastId:n.id,height:t,position:n.position},...e]),()=>a(e=>e.filter(e=>e.toastId!==n.id))}},[a,n.id]),I.useLayoutEffect(()=>{if(!ne)return;let e=ge.current,t=e.style.height;e.style.height=`auto`;let r=e.getBoundingClientRect().height;e.style.height=t,pe(r),a(e=>e.find(e=>e.toastId===n.id)?e.map(e=>e.toastId===n.id?{...e,height:r}:e):[{toastId:n.id,height:r,position:n.position},...e])},[ne,n.title,n.description,a,n.id,n.jsx,n.action,n.cancel]);let Ie=I.useCallback(()=>{ae(!0),de(De.current),a(e=>e.filter(e=>e.toastId!==n.id)),setTimeout(()=>{d(n)},Tv)},[n,d,a,De]);I.useEffect(()=>{if(n.promise&&ye===`loading`||n.duration===1/0||n.type===`loading`)return;let e;return u||i||Ne?(()=>{if(Oe.current<Ee.current){let e=new Date().getTime()-Ee.current;me.current-=e}Oe.current=new Date().getTime()})():me.current!==1/0&&(Ee.current=new Date().getTime(),e=setTimeout(()=>{n.onAutoClose==null||n.onAutoClose.call(n,n),Ie()},me.current)),()=>clearTimeout(e)},[u,i,n,ye,Ne,Ie]),I.useEffect(()=>{n.delete&&(Ie(),n.onDismiss==null||n.onDismiss.call(n,n))},[Ie,n.delete]);function A(){return w?.loading?I.createElement(`div`,{className:Ev(C?.loader,n?.classNames?.loader,`sonner-loader`),"data-visible":ye===`loading`},w.loading):I.createElement(av,{className:Ev(C?.loader,n?.classNames?.loader),visible:ye===`loading`})}let Le=n.icon||w?.[ye]||rv(ye);return I.createElement(`li`,{tabIndex:0,ref:ge,className:Ev(_,xe,C?.toast,n?.classNames?.toast,C?.default,C?.[ye],n?.classNames?.[ye]),"data-sonner-toast":``,"data-rich-colors":n.richColors??f,"data-styled":!(n.jsx||n.unstyled||r),"data-mounted":ne,"data-promise":!!n.promise,"data-swiped":ce,"data-removed":ie,"data-visible":ve,"data-y-position":Ae,"data-x-position":je,"data-index":c,"data-front":_e,"data-swiping":oe,"data-dismissible":be,"data-type":ye,"data-invert":Pe,"data-swipe-out":k,"data-swipe-direction":D,"data-expanded":!!(u||S&&ne),"data-testid":n.testId,style:{"--index":c,"--toasts-before":c,"--z-index":l.length-c,"--offset":`${ie?ue:De.current}px`,"--initial-height":S?`auto`:`${fe}px`,...m,...n.style},onDragEnd:()=>{O(!1),ee(null),ke.current=null},onPointerDown:e=>{e.button!==2&&(Fe||!be||(he.current=new Date,de(De.current),e.target.setPointerCapture(e.pointerId),e.target.tagName!==`BUTTON`&&(O(!0),ke.current={x:e.clientX,y:e.clientY})))},onPointerUp:()=>{if(k||!be)return;ke.current=null;let e=Number(ge.current?.style.getPropertyValue(`--swipe-amount-x`).replace(`px`,``)||0),t=Number(ge.current?.style.getPropertyValue(`--swipe-amount-y`).replace(`px`,``)||0),r=new Date().getTime()-he.current?.getTime(),i=E===`x`?e:t,a=Math.abs(i)/r;if(Math.abs(i)>=wv||a>.11){de(De.current),n.onDismiss==null||n.onDismiss.call(n,n),te(E===`x`?e>0?`right`:`left`:t>0?`down`:`up`),Ie(),se(!0);return}var o,s;(o=ge.current)==null||o.style.setProperty(`--swipe-amount-x`,`0px`),(s=ge.current)==null||s.style.setProperty(`--swipe-amount-y`,`0px`),le(!1),O(!1),ee(null)},onPointerMove:t=>{var n,r;if(!ke.current||!be||window.getSelection()?.toString().length>0)return;let i=t.clientY-ke.current.y,a=t.clientX-ke.current.x,o=e.swipeDirections??Dv(b);!E&&(Math.abs(a)>1||Math.abs(i)>1)&&ee(Math.abs(a)>Math.abs(i)?`x`:`y`);let s={x:0,y:0},c=e=>1/(1.5+Math.abs(e)/20);if(E===`y`){if(o.includes(`top`)||o.includes(`bottom`))if(o.includes(`top`)&&i<0||o.includes(`bottom`)&&i>0)s.y=i;else{let e=i*c(i);s.y=Math.abs(e)<Math.abs(i)?e:i}}else if(E===`x`&&(o.includes(`left`)||o.includes(`right`)))if(o.includes(`left`)&&a<0||o.includes(`right`)&&a>0)s.x=a;else{let e=a*c(a);s.x=Math.abs(e)<Math.abs(a)?e:a}(Math.abs(s.x)>0||Math.abs(s.y)>0)&&le(!0),(n=ge.current)==null||n.style.setProperty(`--swipe-amount-x`,`${s.x}px`),(r=ge.current)==null||r.style.setProperty(`--swipe-amount-y`,`${s.y}px`)}},we&&!n.jsx&&ye!==`loading`?I.createElement(`button`,{"aria-label":T,"data-disabled":Fe,"data-close-button":!0,onClick:Fe||!be?()=>{}:()=>{Ie(),n.onDismiss==null||n.onDismiss.call(n,n)},className:Ev(C?.closeButton,n?.classNames?.closeButton)},w?.close??uv):null,(ye||n.icon||n.promise)&&n.icon!==null&&(w?.[ye]!==null||n.icon)?I.createElement(`div`,{"data-icon":``,className:Ev(C?.icon,n?.classNames?.icon)},n.promise||n.type===`loading`&&!n.icon?n.icon||A():null,n.type===`loading`?null:Le):null,I.createElement(`div`,{"data-content":``,className:Ev(C?.content,n?.classNames?.content)},I.createElement(`div`,{"data-title":``,className:Ev(C?.title,n?.classNames?.title)},n.jsx?n.jsx:typeof n.title==`function`?n.title():n.title),n.description?I.createElement(`div`,{"data-description":``,className:Ev(v,Se,C?.description,n?.classNames?.description)},typeof n.description==`function`?n.description():n.description):null),I.isValidElement(n.cancel)?n.c
22ancel:n.cancel&&_v(n.cancel)?I.createElement(`button`,{"data-button":!0,"data-cancel":!0,style:n.cancelButtonStyle||h,onClick:e=>{_v(n.cancel)&&be&&(n.cancel.onClick==null||n.cancel.onClick.call(n.cancel,e),Ie())},className:Ev(C?.cancelButton,n?.classNames?.cancelButton)},n.cancel.label):null,I.isValidElement(n.action)?n.action:n.action&&_v(n.action)?I.createElement(`button`,{"data-button":!0,"data-action":!0,style:n.actionButtonStyle||g,onClick:e=>{_v(n.action)&&(n.action.onClick==null||n.action.onClick.call(n.action,e),!e.defaultPrevented&&Ie())},className:Ev(C?.actionButton,n?.classNames?.actionButton)},n.action.label):null)};function kv(){if(typeof window>`u`||typeof document>`u`)return`ltr`;let e=document.documentElement.getAttribute(`dir`);return e===`auto`||!e?window.getComputedStyle(document.documentElement).direction:e}function Av(e,t){let n={};return[e,t].forEach((e,t)=>{let r=t===1,i=r?`--mobile-offset`:`--offset`,a=r?bv:yv;function o(e){[`top`,`right`,`bottom`,`left`].forEach(t=>{n[`${i}-${t}`]=typeof e==`number`?`${e}px`:e})}typeof e==`number`||typeof e==`string`?o(e):typeof e==`object`?[`top`,`right`,`bottom`,`left`].forEach(t=>{e[t]===void 0?n[`${i}-${t}`]=a:n[`${i}-${t}`]=typeof e[t]==`number`?`${e[t]}px`:e[t]}):o(a)}),n}var jv=I.forwardRef(function(e,t){let{id:n,invert:r,position:i=`bottom-right`,hotkey:a=[`altKey`,`KeyT`],expand:o,closeButton:s,className:c,offset:l,mobileOffset:u,theme:d=`light`,richColors:f,duration:p,style:m,visibleToasts:h=vv,toastOptions:g,dir:_=kv(),gap:v=Cv,icons:y,containerAriaLabel:b=`Notifications`}=e,[x,S]=I.useState([]),C=I.useMemo(()=>n?x.filter(e=>e.toasterId===n):x.filter(e=>!e.toasterId),[x,n]),w=I.useMemo(()=>Array.from(new Set([i].concat(C.filter(e=>e.position).map(e=>e.position)))),[C,i]),[T,E]=I.useState([]),[ee,D]=I.useState(!1),[te,ne]=I.useState(!1),[re,ie]=I.useState(d===`system`?typeof window<`u`&&window.matchMedia&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:d),ae=I.useRef(null),oe=a.join(`+`).replace(/Key/g,``).replace(/Digit/g,``),O=I.useRef(null),k=I.useRef(!1),se=I.useCallback(e=>{S(t=>(t.find(t=>t.id===e.id)?.delete||pv.dismiss(e.id),t.filter(({id:t})=>t!==e.id)))},[]);return I.useEffect(()=>pv.subscribe(e=>{if(e.dismiss){requestAnimationFrame(()=>{S(t=>t.map(t=>t.id===e.id?{...t,delete:!0}:t))});return}setTimeout(()=>{Zh.flushSync(()=>{S(t=>{let n=t.findIndex(t=>t.id===e.id);return n===-1?[e,...t]:[...t.slice(0,n),{...t[n],...e},...t.slice(n+1)]})})})}),[x]),I.useEffect(()=>{if(d!==`system`){ie(d);return}if(d===`system`&&(window.matchMedia&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?ie(`dark`):ie(`light`)),typeof window>`u`)return;let e=window.matchMedia(`(prefers-color-scheme: dark)`);try{e.addEventListener(`change`,({matches:e})=>{ie(e?`dark`:`light`)})}catch{e.addListener(({matches:e})=>{try{ie(e?`dark`:`light`)}catch(e){console.error(e)}})}},[d]),I.useEffect(()=>{x.length<=1&&D(!1)},[x]),I.useEffect(()=>{let e=e=>{if(a.every(t=>e[t]||e.code===t)){var t;D(!0),(t=ae.current)==null||t.focus()}e.code===`Escape`&&(document.activeElement===ae.current||ae.current?.contains(document.activeElement))&&D(!1)};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[a]),I.useEffect(()=>{if(ae.current)return()=>{O.current&&(O.current.focus({preventScroll:!0}),O.current=null,k.current=!1)}},[ae.current]),I.createElement(`section`,{ref:t,"aria-label":`${b} ${oe}`,tabIndex:-1,"aria-live":`polite`,"aria-relevant":`additions text`,"aria-atomic":`false`,suppressHydrationWarning:!0},w.map((t,n)=>{let[i,a]=t.split(`-`);return C.length?I.createElement(`ol`,{key:t,dir:_===`auto`?kv():_,tabIndex:-1,ref:ae,className:c,"data-sonner-toaster":!0,"data-sonner-theme":re,"data-y-position":i,"data-x-position":a,style:{"--front-toast-height":`${T[0]?.height||0}px`,"--width":`${Sv}px`,"--gap":`${v}px`,...m,...Av(l,u)},onBlur:e=>{k.current&&!e.currentTarget.contains(e.relatedTarget)&&(k.current=!1,O.current&&=(O.current.focus({preventScroll:!0}),null))},onFocus:e=>{e.target instanceof HTMLElement&&e.target.dataset.dismissible===`fal
22se`||k.current||(k.current=!0,O.current=e.relatedTarget)},onMouseEnter:()=>D(!0),onMouseMove:()=>D(!0),onMouseLeave:()=>{te||D(!1)},onDragEnd:()=>D(!1),onPointerDown:e=>{e.target instanceof HTMLElement&&e.target.dataset.dismissible===`false`||ne(!0)},onPointerUp:()=>ne(!1)},C.filter(e=>!e.position&&n===0||e.position===t).map((n,i)=>I.createElement(Ov,{key:n.id,icons:y,index:i,toast:n,defaultRichColors:f,duration:g?.duration??p,className:g?.className,descriptionClassName:g?.descriptionClassName,invert:r,visibleToasts:h,closeButton:g?.closeButton??s,interacting:te,position:t,style:g?.style,unstyled:g?.unstyled,classNames:g?.classNames,cancelButtonStyle:g?.cancelButtonStyle,actionButtonStyle:g?.actionButtonStyle,closeButtonAriaLabel:g?.closeButtonAriaLabel,removeToast:se,toasts:C.filter(e=>e.position==n.position),heights:T.filter(e=>e.position==n.position),setHeights:E,expandByDefault:o,gap:v,expanded:ee,swipeDirections:e.swipeDirections}))):null}))}),Mv=({...e})=>{let{theme:t=`system`}=tv();return(0,L.jsx)(jv,{theme:t??`system`,className:`toaster group`,toastOptions:{classNames:{toast:`group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg`,description:`group-[.toast]:text-muted-foreground`,actionButton:`group-[.toast]:bg-primary group-[.toast]:text-primary-foreground`,cancelButton:`group-[.toast]:bg-muted group-[.toast]:text-muted-foreground`}},...e})},Nv=[`top`,`right`,`bottom`,`left`],Pv=Math.min,Fv=Math.max,Iv=Math.round,Lv=Math.floor,Rv=e=>({x:e,y:e}),zv={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function Bv(e,t,n){return Fv(e,Pv(t,n))}function Vv(e,t){return typeof e==`function`?e(t):e}function Hv(e){return e.split(`-`)[0]}function Uv(e){return e.split(`-`)[1]}function Wv(e){return e===`x`?`y`:`x`}function Gv(e){return e===`y`?`height`:`width`}function Kv(e){let t=e[0];return t===`t`||t===`b`?`y`:`x`}function qv(e){return Wv(Kv(e))}function Jv(e,t,n){n===void 0&&(n=!1);let r=Uv(e),i=qv(e),a=Gv(i),o=i===`x`?r===(n?`end`:`start`)?`right`:`left`:r===`start`?`bottom`:`top`;return t.reference[a]>t.floating[a]&&(o=ry(o)),[o,ry(o)]}function Yv(e){let t=ry(e);return[Xv(e),t,Xv(t)]}function Xv(e){return e.includes(`start`)?e.replace(`start`,`end`):e.replace(`end`,`start`)}var Zv=[`left`,`right`],Qv=[`right`,`left`],$v=[`top`,`bottom`],ey=[`bottom`,`top`];function ty(e,t,n){switch(e){case`top`:case`bottom`:return n?t?Qv:Zv:t?Zv:Qv;case`left`:case`right`:return t?$v:ey;default:return[]}}function ny(e,t,n,r){let i=Uv(e),a=ty(Hv(e),n===`start`,r);return i&&(a=a.map(e=>e+`-`+i),t&&(a=a.concat(a.map(Xv)))),a}function ry(e){let t=Hv(e);return zv[t]+e.slice(t.length)}function iy(e){return{top:e.top??0,right:e.right??0,bottom:e.bottom??0,left:e.left??0}}function ay(e){return typeof e==`number`?{top:e,right:e,bottom:e,left:e}:iy(e)}function oy(e){let{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function sy(e,t,n){let{reference:r,floating:i}=e,a=Kv(t),o=qv(t),s=Gv(o),c=Hv(t),l=a===`y`,u=r.x+r.width/2-i.width/2,d=r.y+r.height/2-i.height/2,f=r[s]/2-i[s]/2,p;switch(c){case`top`:p={x:u,y:r.y-i.height};break;case`bottom`:p={x:u,y:r.y+r.height};break;case`right`:p={x:r.x+r.width,y:d};break;case`left`:p={x:r.x-i.width,y:d};break;default:p={x:r.x,y:r.y}}let m=Uv(t);return m&&(p[o]+=f*(m===`end`?1:-1)*(n&&l?-1:1)),p}async function cy(e,t){t===void 0&&(t={});let{x:n,y:r,platform:i,rects:a,elements:o,strategy:s}=e,{boundary:c=`clippingAncestors`,rootBoundary:l=`viewport`,elementContext:u=`floating`,altBoundary:d=!1,padding:f=0}=Vv(t,e),p=ay(f),m=o[d?u===`floating`?`reference`:`floating`:u],h=oy(await i.getClippingRect({element:await(i.isElement==null?void 0:i.isElement(m))??!0?m:m.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(o.floating)),boundary:c,rootBoundary:l,strategy:s})),g=u===`floating`?{x:n,y:r,width:a.floating.width,height:a.floating.height}:a.reference,_=await(i.getOffsetParent==null?void 0:i.getOffsetParent(o.floating)),v=await(i.isElement==null?void 0:i.isElement(_))&&await(i.getScale==null?void 0:i.getScale(_))||{x:1,y:1},y=oy(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:o,rect:g,offsetParent:_,strategy:s}):g);return{top:(h.top-y.top+p.top)/v.y,bottom:(y.bottom-h.bottom+p.bottom)/v.y,left
vendor: 8,350 bytes, line 22
22:(h.left-y.left+p.left)/v.x,right:(y.right-h.right+p.right)/v.x}}var ly=50,uy=async(e,t,n)=>{let{placement:r=`bottom`,strategy:i=`absolute`,middleware:a=[],platform:o}=n,s=o.detectOverflow?o:{...o,detectOverflow:cy},c=await(o.isRTL==null?void 0:o.isRTL(t)),l=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:d}=sy(l,r,c),f=r,p=0,m={};for(let n=0;n<a.length;n++){let h=a[n];if(!h)continue;let{name:g,fn:_}=h,{x:v,y,data:b,reset:x}=await _({x:u,y:d,initialPlacement:r,placement:f,strategy:i,middlewareData:m,rects:l,platform:s,elements:{reference:e,floating:t}});u=v??u,d=y??d,m[g]={...m[g],...b},x&&p<ly&&(p++,typeof x==`object`&&(x.placement&&(f=x.placement),x.rects&&(l=x.rects===!0?await o.getElementRects({reference:e,floating:t,strategy:i}):x.rects),{x:u,y:d}=sy(l,f,c)),n=-1)}return{x:u,y:d,placement:f,strategy:i,middlewareData:m}},dy=e=>({name:`arrow`,options:e,async fn(t){let{x:n,y:r,placement:i,rects:a,platform:o,elements:s,middlewareData:c}=t,{element:l,padding:u=0}=Vv(e,t)||{};if(l==null)return{};let d=ay(u),f={x:n,y:r},p=qv(i),m=Gv(p),h=await o.getDimensions(l),g=p===`y`,_=g?`top`:`left`,v=g?`bottom`:`right`,y=g?`clientHeight`:`clientWidth`,b=a.reference[m]+a.reference[p]-f[p]-a.floating[m],x=f[p]-a.reference[p],S=await(o.getOffsetParent==null?void 0:o.getOffsetParent(l)),C=S?S[y]:0;(!C||!await(o.isElement==null?void 0:o.isElement(S)))&&(C=s.floating[y]||a.floating[m]);let w=b/2-x/2,T=C/2-h[m]/2-1,E=Pv(d[_],T),ee=Pv(d[v],T),D=C-h[m]-ee,te=C/2-h[m]/2+w,ne=Bv(E,te,D),re=!c.arrow&&Uv(i)!=null&&te!==ne&&a.reference[m]/2-(te<E?E:ee)-h[m]/2<0,ie=re?te<E?te-E:te-D:0;return{[p]:f[p]+ie,data:{[p]:ne,centerOffset:te-ne-ie,...re&&{alignmentOffset:ie}},reset:re}}}),fy=function(e){return e===void 0&&(e={}),{name:`flip`,options:e,async fn(t){var n;let{placement:r,middlewareData:i,rects:a,initialPlacement:o,platform:s,elements:c}=t,{mainAxis:l=!0,crossAxis:u=!0,fallbackPlacements:d,fallbackStrategy:f=`bestFit`,fallbackAxisSideDirection:p=`none`,flipAlignment:m=!0,...h}=Vv(e,t);if((n=i.arrow)!=null&&n.alignmentOffset)return{};let g=Hv(r),_=Kv(o),v=Hv(o)===o,y=await(s.isRTL==null?void 0:s.isRTL(c.floating)),b=d||(v||!m?[ry(o)]:Yv(o)),x=p!==`none`;!d&&x&&b.push(...ny(o,m,p,y));let S=[o,...b],C=await s.detectOverflow(t,h),w=[],T=i.flip?.overflows||[];if(l&&w.push(C[g]),u){let e=Jv(r,a,y);w.push(C[e[0]],C[e[1]])}if(T=[...T,{placement:r,overflows:w}],!w.every(e=>e<=0)){let e=(i.flip?.index||0)+1,t=S[e];if(t&&(u!==`alignment`||_===Kv(t)||T.every(e=>Kv(e.placement)!==_||e.overflows[0]>0)))return{data:{index:e,overflows:T},reset:{placement:t}};let n=T.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0]?.placement;if(!n)switch(f){case`bestFit`:{let e=T.filter(e=>{if(x){let t=Kv(e.placement);return t===_||t===`y`}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0]?.[0];e&&(n=e);break}case`initialPlacement`:n=o}if(r!==n)return{reset:{placement:n}}}return{}}}};function py(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function my(e){return Nv.some(t=>e[t]>=0)}var hy=function(e){return e===void 0&&(e={}),{name:`hide`,options:e,async fn(t){let{rects:n,platform:r}=t,{strategy:i=`referenceHidden`,...a}=Vv(e,t);switch(i){case`referenceHidden`:{let e=py(await r.detectOverflow(t,{...a,elementContext:`reference`}),n.reference);return{data:{referenceHiddenOffsets:e,referenceHidden:my(e)}}}case`escaped`:{let e=py(await r.detectOverflow(t,{...a,altBoundary:!0}),n.floating);return{data:{escapedOffsets:e,escaped:my(e)}}}default:return{}}}}},gy=new Set([`left`,`top`]);async function _y(e,t){let{placement:n,platform:r,elements:i}=e,a=await(r.isRTL==null?void 0:r.isRTL(i.floating)),o=Hv(n),s=Uv(n),c=Kv(n)===`y`,l=gy.has(o)?-1:1,u=a&&c?-1:1,d=Vv(t,e),{mainAxis:f,crossAxis:p,alignmentAxis:m}=typeof d==`number`?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof m==`number`&&(p=s===`end`?m*-1:m),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}var vy=function(e){return e===void 0&&(e=0),{name:`offset`,options:e,async fn(t){var n;let{x:r,y:i,placement:a,middlewareData:o}=t,s=await _y(t,e);return a===o.offset?.placement&&(n=o.arrow)!=null&&n.alignmentOffset?{}:{x:r+s.x,y:i+s.y,data:{...s,placement:a}}}}},yy=function(e){return e===void 0&&(e={}),{name:`shift`,options:e,async fn(t){let{x:n,y:r,placement:i,platform:a}=t,{mainAxis:o=!0,crossAxis:s=!1,limiter:c={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...l}=Vv(e,t),u={x:n,y:r},d=await a.detectOverflow(t,l),f=Kv(i),p=Wv(f),m=u[p],h=u[f],g=(e,t)=>Bv(t+d[e===`y`?`top`:`left`],t,t-d[e===`y`?`bottom`:`right`]);o&&(m=g(p,m)),s&&(h=g(f,h));let _=c.fn({...t,[p]:m,[f]:h});return{..._,data:{x:_.x-n,y:_.y-r,enabled:{[p]:o,[f]:s}}}}}},by=function(e){return e===void 0&&(e={}),{options:e,fn(t){let{x:n,y:r,placement:i,rects:a,middlewareData:o}=t,{offset:s=0,mainAxis:c=!0,crossAxis:l=!0}=Vv(e,t),u={x:n,y:r},d=Kv(i),f=Wv(d),p=u[f],m=u[d],h=Vv(s,t),g=typeof h==`number`?{mainAxis:h,crossAxis:0}:{mainAxis:h.mainAxis??0,crossAxis:h.crossAxis??0};if(c){let e=f===`y`?`height`:`width`,t=a.reference[f]-a.floating[e]+g.mainAxis,n=a.reference[f]+a.reference[e]-g.mainAxis;p<t?p=t:p>n&&(p=n)}if(l){let e=f===`y`?`width`:`height`,t=gy.has(Hv(i)),n=a.reference[d]-a.floating[e]+(t&&o.offset?.[d]||0)+(t?0:g.crossAxis),r=a.reference[d]+a.reference[e]+(t?0:o.offset?.[d]||0)-(t?g.crossAxis:0);m<n?m=n:m>r&&(m=r)}return{[f]:p,[d]:m}}}},xy=function(e){return e===void 0&&(e={}),{name:`size`,options:e,async fn(t){let{placement:n,rects:r,platform:i,elements:a}=t,{apply:o=()=>{},...s}=Vv(e,t),c=await i.detectOverflow(t,s),l=Hv(n),u=Uv(n),d=Kv(n)===`y`,{width:f,height:p}=r.floating,m,h;l===`top`||l===`bottom`?(m=l,h=u===(await(i.isRTL==null?void 0:i.isRTL(a.floating))?`start`:`end`)?`left`:`right`):(h=l,m=u===`end`?`top`:`bottom`);let g=p-c.top-c.bottom,_=f-c.left-c.right,v=Pv(p-c[m],g),y=Pv(f-c[h],_),b=t.middlewareData.shift,x=!b,S=v,C=y;b!=null&&b.enabled.x&&(C=_),b!=null&&b.enabled.y&&(S=g),x&&!u&&(d?C=f-2*Fv(c.left,c.right):S=p-2*Fv(c.top,c.bottom)),await o({...t,availableWidth:C,availableHeight:S});let w=await i.getDimensions(a.floating);return f!==w.width||p!==w.height?{reset:{rects:!0}}:{}}}};function Sy(){return typeof window<`u`}function Cy(e){return Ey(e)?(e.nodeName||``).toLowerCase():`#document`}function wy(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function Ty(e){return((Ey(e)?e.ownerDocument:e.document)||window.document)?.documentElement}function Ey(e){return Sy()?e instanceof Node||e instanceof wy(e).Node:!1}function Dy(e){return Sy()?e instanceof Element||e instanceof wy(e).Element:!1}function Oy(e){return Sy()?e instanceof HTMLElement||e instanceof wy(e).HTMLElement:!1}function ky(e){return!Sy()||typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot||e instanceof wy(e).ShadowRoot}function Ay(e){let{overflow:t,overflowX:n,overflowY:r,display:i}=Vy(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&i!==`inline`&&i!==`contents`}function jy(e){return/^(table|td|th)$/.test(Cy(e))}function My(e){try{if(e.matches(`:popover-open`))return!0}catch{}try{return e.matches(`:modal`)}catch{return!1}}var Ny=/transform|translate|scale|rotate|perspective|filter/,Py=/paint|layout|strict|content/,Fy=e=>!!e&&e!==`none`,Iy;function Ly(e){let t=Dy(e)?Vy(e):e;return Fy(t.transform)||Fy(t.translate)||Fy(t.scale)||Fy(t.rotate)||Fy(t.perspective)||!zy()&&(Fy(t.backdropFilter)||Fy(t.filter))||Ny.test(t.willChange||``)||Py.test(t.contain||``)}function Ry(e){let t=Uy(e);for(;Oy(t)&&!By(t);){if(Ly(t))return t;if(My(t))return null;t=Uy(t)}return null}function zy(){return Iy??=typeof CSS<`u`&&CSS.supports&&CSS.supports(`-webkit-backdrop-filter`,`none`),Iy}function By(e){return/^(html|body|#document)$/.test(Cy(e))}function Vy(e){return wy(e).getComputedStyle(e)}function Hy(e){return Dy(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Uy(e){if(Cy(e)===`html`)return e;let t=e.assignedSlot||e.parentNode||ky(e)&&e.host||Ty(e);return ky(t)?t.host:t}function Wy(e){let t=Uy(e);return By(t)?(e.ownerDocument||e).body:Oy(t)&&Ay(t)?t:Wy(t)}function Gy(e,t,n){t===void 0&&(t=[]),n===void 0&&(n=!0);let r=Wy(e),i=r===e.ownerDocument?.body,a=wy(r);if(i){let e=Ky(a);
vendor: 4,240 bytes, line 22
22return t.concat(a,a.visualViewport||[],Ay(r)?r:[],e&&n?Gy(e):[])}return t.concat(r,Gy(r,[],n))}function Ky(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function qy(e){let t=Vy(e),n=parseFloat(t.width)||0,r=parseFloat(t.height)||0,i=Oy(e),a=i?e.offsetWidth:n,o=i?e.offsetHeight:r,s=Iv(n)!==a||Iv(r)!==o;return s&&(n=a,r=o),{width:n,height:r,$:s}}function Jy(e){return Dy(e)?e:e.contextElement}function Yy(e){let t=Jy(e);if(!Oy(t))return Rv(1);let n=t.getBoundingClientRect(),{width:r,height:i,$:a}=qy(t),o=(a?Iv(n.width):n.width)/r,s=(a?Iv(n.height):n.height)/i;return(!o||!Number.isFinite(o))&&(o=1),(!s||!Number.isFinite(s))&&(s=1),{x:o,y:s}}var Xy=Rv(0);function Zy(e){let t=wy(e);return!zy()||!t.visualViewport?Xy:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function Qy(e,t,n){return t===void 0&&(t=!1),!!n&&t&&n===wy(e)}function $y(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);let i=e.getBoundingClientRect(),a=Jy(e),o=Rv(1);t&&(r?Dy(r)&&(o=Yy(r)):o=Yy(e));let s=Qy(a,n,r)?Zy(a):Rv(0),c=(i.left+s.x)/o.x,l=(i.top+s.y)/o.y,u=i.width/o.x,d=i.height/o.y;if(a&&r){let e=wy(a),t=Dy(r)?wy(r):r,n=e,i=Ky(n);for(;i&&t!==n;){let e=Yy(i),t=i.getBoundingClientRect(),r=Vy(i),a=t.left+(i.clientLeft+parseFloat(r.paddingLeft))*e.x,o=t.top+(i.clientTop+parseFloat(r.paddingTop))*e.y;c*=e.x,l*=e.y,u*=e.x,d*=e.y,c+=a,l+=o,n=wy(i),i=Ky(n)}}return oy({width:u,height:d,x:c,y:l})}function eb(e,t){let n=Hy(e).scrollLeft;return t?t.left+n:$y(Ty(e)).left+n}function tb(e,t){let n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-eb(e,n),y:n.top+t.scrollTop}}function nb(e){let{elements:t,rect:n,offsetParent:r,strategy:i}=e,a=i===`fixed`,o=Ty(r),s=t?My(t.floating):!1;if(r===o||s&&a)return n;let c={scrollLeft:0,scrollTop:0},l=Rv(1),u=Rv(0),d=Oy(r);if((d||!a)&&((Cy(r)!==`body`||Ay(o))&&(c=Hy(r)),d)){let e=$y(r);l=Yy(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}let f=o&&!d&&!a?tb(o,c):Rv(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+u.x+f.x,y:n.y*l.y-c.scrollTop*l.y+u.y+f.y}}function rb(e){return e.getClientRects?Array.from(e.getClientRects()):[]}function ib(e){let t=Hy(e),n=e.ownerDocument.body,r=Fv(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),i=Fv(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight),a=-t.scrollLeft+eb(e),o=-t.scrollTop;return Vy(n).direction===`rtl`&&(a+=Fv(e.clientWidth,n.clientWidth)-r),{width:r,height:i,x:a,y:o}}var ab=25;function ob(e,t,n){n===void 0&&(n=`viewport`);let r=n===`layoutViewport`,i=wy(e),a=Ty(e),o=i.visualViewport,s=a.clientWidth,c=a.clientHeight,l=0,u=0;if(o){let e=!zy()||t===`fixed`;r?e||(l=-o.offsetLeft,u=-o.offsetTop):(s=o.width,c=o.height,e&&(l=o.offsetLeft,u=o.offsetTop))}if(eb(a)<=0){let e=a.ownerDocument,t=e.body,n=getComputedStyle(t),r=e.compatMode===`CSS1Compat`&&parseFloat(n.marginLeft)+parseFloat(n.marginRight)||0,i=Math.abs(a.clientWidth-t.clientWidth-r),o=getComputedStyle(a).scrollbarGutter===`stable both-edges`?i/2:i;o<=ab&&(s-=o)}return{width:s,height:c,x:l,y:u}}function sb(e,t){let n=$y(e,!0,t===`fixed`),r=n.top+e.clientTop,i=n.left+e.clientLeft,a=Yy(e);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:i*a.x,y:r*a.y}}function cb(e,t,n){let r;if(t===`viewport`||t===`layoutViewport`)r=ob(e,n,t);else if(t===`document`)r=ib(Ty(e));else if(Dy(t))r=sb(t,n);else{let n=Zy(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return oy(r)}function lb(e,t){let n=t.get(e);if(n)return n;let r=Gy(e,[],!1).filter(e=>Dy(e)&&Cy(e)!==`body`),i=null,a=Vy(e).position===`fixed`,o=a?Uy(e):e;for(;Dy(o)&&!By(o);){let e=Vy(o),t=Ly(o),n=i?i.position:a?`fixed`:``;!t&&(n===`fixed`||n===`absolute`&&e.position===`static`)?r=r.filter(e=>e!==o):i=e,o=Uy(o)}return t.set(e,r),r}function ub(e){let{element:t,boundary:n,rootBoundary:r,strategy:i}=e,a=[...n===`clippingAncestors`?My(t)?[]:lb(t,this._c):[].concat(n),r],o=cb(t,a[0],i),s=o.top,c=o.right,l=o.bottom,u=o.left;for(let e=1;e<a.length;e++){let n=cb(t,a[e],i);s=Fv(n.top,s),c=Pv(n.right,c),l=Pv(n.bottom,l),u=Fv(n.left,u)}return{width:c-u,height:l-s,x:u,y:s}}function db(e){let{width:t,height:n}=qy(e);return{width:t,height:n}}function fb(e,t,n){let r=Oy(t),i=Ty(t),a=n===`fixed`,o=$y(e,!0,a,t),s={scrollLeft:0,scrollTop:0},c=Rv(0);
vendor: 4,153 bytes, line 22
22if((r||!a)&&((Cy(t)!==`body`||Ay(i))&&(s=Hy(t)),r)){let e=$y(t,!0,a,t);c.x=e.x+t.clientLeft,c.y=e.y+t.clientTop}!r&&i&&(c.x=eb(i));let l=i&&!r&&!a?tb(i,s):Rv(0);return{x:o.left+s.scrollLeft-c.x-l.x,y:o.top+s.scrollTop-c.y-l.y,width:o.width,height:o.height}}function pb(e){return Vy(e).position===`static`}function mb(e,t){if(!Oy(e)||Vy(e).position===`fixed`)return null;if(t)return t(e);let n=e.offsetParent;return Ty(e)===n&&(n=n.ownerDocument.body),n}function hb(e,t){let n=wy(e);if(My(e))return n;if(!Oy(e)){let t=Uy(e);for(;t&&!By(t);){if(Dy(t)&&!pb(t))return t;t=Uy(t)}return n}let r=mb(e,t);for(;r&&jy(r)&&pb(r);)r=mb(r,t);return r&&By(r)&&pb(r)&&!Ly(r)?n:r||Ry(e)||n}var gb=async function(e){let t=this.getOffsetParent||hb,n=this.getDimensions,r=await n(e.floating);return{reference:fb(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function _b(e){return Vy(e).direction===`rtl`}var vb={convertOffsetParentRelativeRectToViewportRelativeRect:nb,getDocumentElement:Ty,getClippingRect:ub,getOffsetParent:hb,getElementRects:gb,getClientRects:rb,getDimensions:db,getScale:Yy,isElement:Dy,isRTL:_b};function yb(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function bb(e,t,n){let r=null,i,a=Ty(e);function o(){var e;clearTimeout(i),(e=r)==null||e.disconnect(),r=null}function s(n,c){n===void 0&&(n=!1),c===void 0&&(c=1),o();let l=e.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=l;if(n||t(),!f||!p)return;let m=Lv(d),h=Lv(a.clientWidth-(u+f)),g=Lv(a.clientHeight-(d+p)),_=Lv(u),v={rootMargin:-m+`px `+-h+`px `+-g+`px `+-_+`px`,threshold:Fv(0,Pv(1,c))||1},y=!0;function b(t){let n=t[0].intersectionRatio;if(!yb(l,e.getBoundingClientRect()))return s();if(n!==c){if(!y)return s();n?s(!1,n):i=setTimeout(()=>{s(!1,1e-7)},1e3)}y=!1}try{r=new IntersectionObserver(b,{...v,root:a.ownerDocument})}catch{r=new IntersectionObserver(b,v)}r.observe(e)}let c=wy(e),l=()=>s(n);return c.addEventListener(`resize`,l),s(!0),()=>{c.removeEventListener(`resize`,l),o()}}function xb(e,t,n,r){r===void 0&&(r={});let{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:o=typeof ResizeObserver==`function`,layoutShift:s=typeof IntersectionObserver==`function`,animationFrame:c=!1}=r,l=Jy(e),u=i||a?[...l?Gy(l):[],...t?Gy(t):[]]:[];u.forEach(e=>{i&&e.addEventListener(`scroll`,n),a&&e.addEventListener(`resize`,n)});let d=l&&s?bb(l,n,a):null,f=-1,p=null;o&&(p=new ResizeObserver(e=>{let[r]=e;r&&r.target===l&&p&&t&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var e;(e=p)==null||e.observe(t)})),n()}),l&&!c&&p.observe(l),t&&p.observe(t));let m,h=c?$y(e):null;c&&g();function g(){let t=$y(e);h&&!yb(h,t)&&n(),h=t,m=requestAnimationFrame(g)}return n(),()=>{var e;u.forEach(e=>{i&&e.removeEventListener(`scroll`,n),a&&e.removeEventListener(`resize`,n)}),d?.(),(e=p)==null||e.disconnect(),p=null,c&&cancelAnimationFrame(m)}}var Sb=vy,Cb=yy,wb=fy,Tb=xy,Eb=hy,Db=dy,Ob=by,kb=(e,t,n)=>{let r=new Map,i=n??{},a={...vb,...i.platform,_c:r};return uy(e,t,{...i,platform:a})},Ab=typeof document<`u`?I.useLayoutEffect:function(){};function jb(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e==`function`&&e.toString()===t.toString())return!0;let n,r,i;if(e&&t&&typeof e==`object`){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(!jb(e[r],t[r]))return!1;return!0}if(i=Object.keys(e),n=i.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!{}.hasOwnProperty.call(t,i[r]))return!1;for(r=n;r--!==0;){let n=i[r];if(!(n===`_owner`&&e.$$typeof)&&!jb(e[n],t[n]))return!1}return!0}return e!==e&&t!==t}function Mb(e){return typeof window>`u`?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Nb(e,t){let n=Mb(e);return Math.round(t*n)/n}function Pb(e){let t=I.useRef(e);return Ab(()=>{t.current=e}),t}function Fb(e){e===void 0&&(e={});let{placement:t=`bottom`,strategy:n=`absolute`,middleware:r=[],platform:i,elements:{reference:a,floating:o}={},transform:s=!0,whileElementsMounted:c,open:l}=e,[u,d]=I.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[f,p]=I.useState(r);jb(f,r)||p(r);
22let[m,h]=I.useState(null),[g,_]=I.useState(null),v=I.useCallback(e=>{e!==S.current&&(S.current=e,h(e))},[]),y=I.useCallback(e=>{e!==C.current&&(C.current=e,_(e))},[]),b=a||m,x=o||g,S=I.useRef(null),C=I.useRef(null),w=I.useRef(u),T=c!=null,E=Pb(c),ee=Pb(i),D=Pb(l),te=I.useCallback(()=>{if(!S.current||!C.current)return;let e={placement:t,strategy:n,middleware:f};ee.current&&(e.platform=ee.current),kb(S.current,C.current,e).then(e=>{let t={...e,isPositioned:D.current!==!1};ne.current&&!jb(w.current,t)&&(w.current=t,Zh.flushSync(()=>{d(t)}))})},[f,t,n,ee,D]);Ab(()=>{l===!1&&w.current.isPositioned&&(w.current.isPositioned=!1,d(e=>({...e,isPositioned:!1})))},[l]);let ne=I.useRef(!1);Ab(()=>(ne.current=!0,()=>{ne.current=!1}),[]),Ab(()=>{if(b&&(S.current=b),x&&(C.current=x),b&&x){if(E.current)return E.current(b,x,te);te()}},[b,x,te,E,T]);let re=I.useMemo(()=>({reference:S,floating:C,setReference:v,setFloating:y}),[v,y]),ie=I.useMemo(()=>({reference:b,floating:x}),[b,x]),ae=I.useMemo(()=>{let e={position:n,left:0,top:0};if(!ie.floating)return e;let t=Nb(ie.floating,u.x),r=Nb(ie.floating,u.y);return s?{...e,transform:`translate(`+t+`px, `+r+`px)`,...Mb(ie.floating)>=1.5&&{willChange:`transform`}}:{position:n,left:t,top:r}},[n,s,ie.floating,u.x,u.y]);return I.useMemo(()=>({...u,update:te,refs:re,elements:ie,floatingStyles:ae}),[u,te,re,ie,ae])}var Ib=e=>{function t(e){return{}.hasOwnProperty.call(e,`current`)}return{name:`arrow`,options:e,fn(n){let{element:r,padding:i}=typeof e==`function`?e(n):e;return r&&t(r)?r.current==null?{}:Db({element:r.current,padding:i}).fn(n):r?Db({element:r,padding:i}).fn(n):{}}}},Lb=(e,t)=>{let n=Sb(e);return{name:n.name,fn:n.fn,options:[e,t]}},Rb=(e,t)=>{let n=Cb(e);return{name:n.name,fn:n.fn,options:[e,t]}},zb=(e,t)=>({fn:Ob(e).fn,options:[e,t]}),Bb=(e,t)=>{let n=wb(e);return{name:n.name,fn:n.fn,options:[e,t]}},Vb=(e,t)=>{let n=Tb(e);return{name:n.name,fn:n.fn,options:[e,t]}},Hb=(e,t)=>{let n=Eb(e);return{name:n.name,fn:n.fn,options:[e,t]}},Ub=(e,t)=>{let n=Ib(e);return{name:n.name,fn:n.fn,options:[e,t]}},Wb=Object.defineProperty,Gb=(e,t)=>Wb(e,`name`,{value:t,configurable:!0}),Kb=`Popper`,[qb,Jb]=Oe(Kb),[Yb,Xb]=qb(Kb),Zb=Gb(e=>{let{__scopePopper:t,children:n}=e,[r,i]=I.useState(null),[a,o]=I.useState(void 0);return(0,L.jsx)(Yb,{scope:t,anchor:r,onAnchorChange:i,placementState:a,setPlacementState:o,children:n})},`Popper`),Qb=`PopperAnchor`,$b=I.forwardRef(Gb(function(e,t){let{__scopePopper:n,virtualRef:r,...i}=e,a=Xb(Qb,n),o=I.useRef(null),s=a.onAnchorChange,c=I.useCallback(e=>{o.current=e,e&&s(e)},[s]),l=Me(t,c),u=I.useRef(null);I.useEffect(()=>{if(!r)return;let e=u.current;u.current=r.current,e!==u.current&&s(u.current)});let d=a.placementState&&ox(a.placementState),f=d?.[0],p=d?.[1];return r?null:(0,L.jsx)(eg.div,{"data-radix-popper-side":f,"data-radix-popper-align":p,...i,ref:l})},`PopperAnchor`)),ex=`PopperContent`,[tx,nx]=qb(ex),rx=I.forwardRef(Gb(function(e,t){let{__scopePopper:n,side:r=`bottom`,sideOffset:i=0,align:a=`center`,alignOffset:o=0,arrowPadding:s=0,avoidCollisions:c=!0,collisionBoundary:l=[],collisionPadding:u=0,sticky:d=`partial`,hideWhenDetached:f=!1,updatePositionStrategy:p=`optimized`,onPlaced:m,...h}=e,g=Xb(ex,n),[_,v]=I.useState(null),y=Me(t,v),[b,x]=I.useState(null),S=je(b),C=S?.width??0,w=S?.height??0,T=r+(a===`center`?``:`-`+a),E=typeof u==`number`?u:{top:0,right:0,bottom:0,left:0,...u},ee=Array.isArray(l)?l:[l],D=ee.length>0,te={padding:E,boundary:ee.filter(ix),altBoundary:D},{refs:ne,floatingStyles:re,placement:ie,isPositioned:ae,middlewareData:oe}=Fb({strategy:`fixed`,placement:T,whileElementsMounted:Gb((...e)=>xb(...e,{animationFrame:p===`always`}),`whileElementsMounted`),elements:{reference:g.anchor},middleware:[Lb({mainAxis:i+w,alignmentAxis:o}),c&&Rb({mainAxis:!0,crossAxis:!1,limiter:d===`partial`?zb():void 0,...te}),c&&Bb({...te}),Vb({...te,apply:Gb(({elements:e,rects:t,availableWidth:n,availableHeight:r})=>{let{width:i,height:a}=t.reference,o=e.floating.style;o.setProperty(`--radix-popper-available-width`,`${n}px`),o.setProperty(`--radix-popper-available-height`,`${r}px`),o.setProperty(`--radix-popper-anchor-width`,`${i}px`),o.setProperty(`--radix-popper-anchor-height`,`${a}px`)},`apply`)}
22),b&&Ub({element:b,padding:s}),ax({arrowWidth:C,arrowHeight:w}),f&&Hb({strategy:`referenceHidden`,...te,boundary:D?te.boundary:void 0})]}),O=g.setPlacementState;Ae(()=>(O(ie),()=>{O(void 0)}),[ie,O]);let[k,se]=ox(ie),ce=ig(m);Ae(()=>{ae&&ce?.()},[ae,ce]);let le=oe.arrow?.x,ue=oe.arrow?.y,de=oe.arrow?.centerOffset!==0,[fe,pe]=I.useState();return Ae(()=>{_&&pe(window.getComputedStyle(_).zIndex)},[_]),(0,L.jsx)(`div`,{ref:ne.setFloating,"data-radix-popper-content-wrapper":``,style:{...re,transform:ae?re.transform:`translate(0, -200%)`,minWidth:`max-content`,zIndex:fe,"--radix-popper-transform-origin":[oe.transformOrigin?.x,oe.transformOrigin?.y].join(` `),...oe.hide?.referenceHidden&&{visibility:`hidden`,pointerEvents:`none`}},dir:e.dir,children:(0,L.jsx)(tx,{scope:n,placedSide:k,placedAlign:se,onArrowChange:x,arrowX:le,arrowY:ue,shouldHideArrow:de,children:(0,L.jsx)(eg.div,{"data-side":k,"data-align":se,...h,ref:y,style:{...h.style,animation:ae?h.style?.animation:`none`}})})})},`PopperContent`));function ix(e){return e!==null}Gb(ix,`isNotNull`);var ax=Gb(e=>({name:`transformOrigin`,options:e,fn(t){let{placement:n,rects:r,middlewareData:i}=t,a=i.arrow?.centerOffset!==0,o=a?0:e.arrowWidth,s=a?0:e.arrowHeight,[c,l]=ox(n),u={start:`0%`,center:`50%`,end:`100%`}[l],d=(i.arrow?.x??0)+o/2,f=(i.arrow?.y??0)+s/2,p=``,m=``;return c===`bottom`?(p=a?u:`${d}px`,m=`${-s}px`):c===`top`?(p=a?u:`${d}px`,m=`${r.floating.height+s}px`):c===`right`?(p=`${-s}px`,m=a?u:`${f}px`):c===`left`&&(p=`${r.floating.width+s}px`,m=a?u:`${f}px`),{data:{x:p,y:m}}}}),`transformOrigin`);function ox(e){let[t,n=`center`]=e.split(`-`);return[t,n]}Gb(ox,`getSideAndAlignFromPlacement`);var sx=Zb,cx=$b,lx=rx,ux=Object.defineProperty,dx=(e,t)=>ux(e,`name`,{value:t,configurable:!0}),[fx,px]=Oe(`Tooltip`,[Jb]),mx=Jb(),hx=`TooltipProvider`,gx=700,_x=`tooltip.open`,[vx,yx]=fx(hx),bx=dx(e=>{let{__scopeTooltip:t,delayDuration:n=gx,skipDelayDuration:r=300,disableHoverableContent:i=!1,children:a}=e,o=I.useRef(!0),s=I.useRef(!1),c=I.useRef(0);return I.useEffect(()=>{let e=c.current;return()=>window.clearTimeout(e)},[]),(0,L.jsx)(vx,{scope:t,isOpenDelayedRef:o,delayDuration:n,onOpen:I.useCallback(()=>{r<=0||(window.clearTimeout(c.current),o.current=!1)},[r]),onClose:I.useCallback(()=>{r<=0||(window.clearTimeout(c.current),c.current=window.setTimeout(()=>o.current=!0,r))},[r]),isPointerInTransitRef:s,onPointerInTransitChange:I.useCallback(e=>{s.current=e},[]),disableHoverableContent:i,children:a})},`TooltipProvider`),[xx,Sx]=fx(`Tooltip`),[Cx,wx]=fx(`TooltipPortal`,{forceMount:void 0}),Tx=`TooltipContent`,Ex=I.forwardRef(dx(function(e,t){let n=wx(Tx,e.__scopeTooltip),{forceMount:r=n.forceMount,side:i=`top`,...a}=e,o=Sx(Tx,e.__scopeTooltip);return(0,L.jsx)(Dg,{present:r||o.open,children:o.disableHoverableContent?(0,L.jsx)(kx,{side:i,...a,ref:t}):(0,L.jsx)(Dx,{side:i,...a,ref:t})})},`TooltipContent`)),Dx=I.forwardRef(dx(function(e,t){let n=Sx(Tx,e.__scopeTooltip),r=yx(Tx,e.__scopeTooltip),i=I.useRef(null),a=Me(t,i),[o,s]=I.useState(null),{trigger:c,onClose:l}=n,u=i.current,{onPointerInTransitChange:d}=r,f=I.useCallback(()=>{s(null),d(!1)},[d]),p=I.useCallback((e,t)=>{let n=e.currentTarget,r={x:e.clientX,y:e.clientY},i=jx(r,Ax(r,n.getBoundingClientRect())),a=Mx(t.getBoundingClientRect()),o=Px([...i,...a]);s(o),d(!0)},[d]);return I.useEffect(()=>()=>f(),[f]),I.useEffect(()=>{if(c&&u){let e=dx(e=>p(e,u),`handleTriggerLeave`),t=dx(e=>p(e,c),`handleContentLeave`);return c.addEventListener(`pointerleave`,e),u.addEventListener(`pointerleave`,t),()=>{c.removeEventListener(`pointerleave`,e),u.removeEventListener(`pointerleave`,t)}}},[c,u,p,f]),I.useEffect(()=>{if(o){let e=dx(e=>{let t=e.target,n={x:e.clientX,y:e.clientY},r=c?.contains(t)||u?.contains(t),i=!Nx(n,o);r?f():i&&(f(),l())},`handleTrackPointerGrace`);return document.addEventListener(`pointermove`,e),()=>document.removeEventListener(`pointermove`,e)}},[c,u,o,l,f]),(0,L.jsx)(kx,{...e,ref:a})},`TooltipContentHoverable`)),Ox=Ne(`TooltipContent`),kx=I.forwardRef(dx(function(e,t){let{__scopeTooltip:n,children:r,"aria-label":i,id:a,onEscapeKeyDown:o,onPointerDownOutside:s,...c}=e,l=Sx(Tx,n),u=mx(n),{onClose:d}=l;I.useEffect(()=>(document.addEventListener(_x,d),()=>document.removeEventListener(_x,d)),[d]),I.useEffect(()=>{if(l.trigger){let e=dx(e=>{e.target instanceof Node&&e.target.contains(l.trigger)&&d()},`handleScroll`);return window.addEventListener(`scroll`,e,{capture:!0}),()=>window.removeEventListener(`scroll`,e,{capture:!0})}},[l.trigger,d]);let{setContentId:f}=l;return Ae(()=>(f(a),()=>{f(void 0)}),[a,f]),(0,L.jsx)(fg,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:o,onPointerDownOutside:s,onFocusOutside:e=>e.preventDefault(),onDismiss:d,children:(0,L.jsxs)(lx,{"data-state":l.stateAttribute,role:i?void 0:`tooltip`,id:i?void 0:l.contentId,...u,...c,ref:t,style:{...c.style,"--radix-tooltip-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-tooltip-content-available-width":`var(--radix-popper-available-width)`,"--radix-tooltip-content-available-height":`var(--radix-popper-available-height)`,"--radix-tooltip-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-tooltip-trigger-height":`var(--radix-popper-anchor-height)`},children:[(0,L.jsx)(Ox,{children:r}),i?(0,L.jsx)(Lg,{id:l.contentId,role:`tooltip`,children:i}):null]})})},`TooltipContentImpl`));function Ax(e,t){let n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),i=Math.abs(t.right-e.x),a=Math.abs(t.left-e.x);switch(Math.min(n,r,i,a)){case a:return`left`;case i:return`right`;case n:return`top`;case r:return`bottom`;default:throw Error(`unreachable`)}}dx(Ax,`getExitSideFromRect`);function jx(e,t,n=5){let r=[];switch(t){case`top`:r.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case`bottom`:r.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case`left`:r.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case`right`:r.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n})}return r}dx(jx,`getPaddedExitPoints`);function Mx(e){let{top:t,right:n,bottom:r,left:i}=e;return[{x:i,y:t},{x:n,y:t},{x:n,y:r},{x:i,y:r}]}dx(Mx,`getPointsFromRect`);function Nx(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let o=t[e],s=t[a],c=o.x,l=o.y,u=s.x,d=s.y;l>r!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}dx(Nx,`isPointInPolygon`);function Px(e){let t=e.slice();return t.sort((e,t)=>
22e.x<t.x?-1:e.x>t.x?1:e.y<t.y?-1:+(e.y>t.y)),Fx(t)}dx(Px,`getHull`);function Fx(e){if(e.length<=1)return e.slice();let t=[];for(let n=0;n<e.length;n++){let r=e[n];for(;t.length>=2;){let e=t[t.length-1],n=t[t.length-2];if((e.x-n.x)*(r.y-n.y)>=(e.y-n.y)*(r.x-n.x))t.pop();else break}t.push(r)}t.pop();let n=[];for(let t=e.length-1;t>=0;t--){let r=e[t];for(;n.length>=2;){let e=n[n.length-1],t=n[n.length-2];if((e.x-t.x)*(r.y-t.y)>=(e.y-t.y)*(r.x-t.x))n.pop();else break}n.push(r)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}dx(Fx,`getHullPresorted`);var Ix=bx,Lx=Ex,Rx=Ix,zx=I.forwardRef(({className:e,sideOffset:t=4,...n},r)=>(0,L.jsx)(Lx,{ref:r,sideOffset:t,className:Ie(`z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2`,e),...n}));zx.displayName=Lx.displayName;function Bx(e,t={}){if(typeof window>`u`)return;window.__lovableEvents?.captureException?.(e,{source:`react_error_boundary`,route:window.location.pathname,...t},{mechanism:`react_error_boundary`,handled:!1,severity:`error`});let n=e instanceof Response?`Response ${e.status}${e.url?` at ${e.url}`:``}`:e instanceof Error?e.message:String(e),r=e instanceof Error?e.stack:void 0;window.__lovableReportRuntimeError?.({message:n,...r!==void 0&&{stack:r},filename:window.location.pathname})}var Vx=t({getAttributionPayload:()=>rS,getFirstTouch:()=>Kx,getLastTouch:()=>qx,getSessionId:()=>Wx,gtag:()=>iS,isAiReferral:()=>Xx,trackEvent:()=>tS,trackGaPageView:()=>aS,trackStrategyCall:()=>nS}),Hx=`cellara_session_id`,Ux=`cellara_first_touch`;function Wx(){if(typeof window>`u`)return``;let e=sessionStorage.getItem(Hx);return e||(e=crypto.randomUUID(),sessionStorage.setItem(Hx,e)),e}function Gx(e){let t=new URLSearchParams(e);return{utm_source:t.get(`utm_source`),utm_medium:t.get(`utm_medium`),utm_campaign:t.get(`utm_campaign`)}}function Kx(){if(typeof window>`u`)return null;let e=localStorage.getItem(Ux);if(e)try{return JSON.parse(e)}catch{}let t={landing_page:window.location.pathname,referrer:document.referrer||null,...Gx(window.location.search),recorded_at:new Date().toISOString()};return localStorage.setItem(Ux,JSON.stringify(t)),t}function qx(){return{landing_page:window.location.pathname,referrer:document.referrer||null,...Gx(window.location.search),recorded_at:new Date().toISOString()}}function Jx(){let e=window.innerWidth;return e<640?`mobile`:e<1024?`tablet`:`desktop`}var Yx=[`chatgpt.com`,`chat.openai.com`,`perplexity.ai`,`claude.ai`,`copilot.microsoft.com`,`gemini.google.com`,`you.com`];function Xx(e){if(!e)return!1;try{let t=new URL(e).hostname.replace(/^www\./,``);return Yx.some(e=>t===e||t.endsWith(`.${e}`))}catch{return!1}}var Zx=!1,Qx=[];function $x(){Zx=!1;let e=Qx.splice(0,Qx.length);e.length!==0&&(async()=>{try{let{trackEvents:t}=await J(async()=>{let{trackEvents:e}=await import(`./track-event.functions-CvV15wyB.js`);return{trackEvents:e}},[]);await t({data:{events:e}})}catch{}})()}function eS(){Zx||(Zx=!0,(typeof window.requestIdleCallback==`function`?window.requestIdleCallback:e=>window.setTimeout(e,800))(()=>$x()))}function tS(e,t={}){if(typeof window>`u`)return;let n=Kx(),r=qx();Qx.push({event:e,path:window.location.pathname,session_id:Wx(),device:Jx(),ai_referral:Xx(r.referrer),first_touch:n,last_touch:r,context:t}),eS()}function nS(e){tS(`strategy_call_clicked`,{label:e}),tS(`calendar_opened`,{label:e})}function rS(){if(typeof window>`u`)return{};let e=Kx(),t=qx();return{session_id:Wx(),page_submitted_from:window.location.pathname,first_touch_landing_page:e?.landing_page??null,first_touch_referrer:e?.referrer??null,first_touch_utm_source:e?.utm_source??null,first_touch_utm_medium:e?.utm_medium??null,first_touch_utm_campaign:e?.utm_campaign??null,last_touch_referrer:t.referrer,last_touch_utm_source:t.utm_source,last_touch_utm_medium:t.utm_medium,last_touch_utm_campaign:t.utm_campaign,ai_referral:Xx(t.referrer)}}function iS(...e){typeof window>`u`||typeof window.gtag==`function`&&window.gtag(...e)}function aS(e){iS(`event`,`page_view`,{page_path:e})}var oS=`https://www.cellaragrowthco.com`,sS={name:`Cellara Growth Co`,shortName:`Cellara`,tagline:`Revenue Systems for Service Businesses`,description:`Cellara Growth Co builds and manages the connected systems between how a service business gets found and how an inquiry becomes booked work.`,city:`Houston`,region:`TX`,address:{street:`12436 FM 1960 Rd W`,unit:`Unit #1465`,city:`Houston`,region:`TX`,postalCode:`77065`,country:`US`,line:`12436 FM 1960 Rd W, Unit #1465, Houston, TX 77065`},phone:`720-761-6933`,email:`[email protected]`,regionName:`Texas`,serviceArea:`United States`,locations:[`Houston, Texas`,`Denver, Colorado`],locationLine:`Based in Greater Houston, with a second base in Denver, Colorado.`,foun
22der:{name:`Krystal Gonzalez`,role:`Founder and Revenue Systems Strategist`,credential:`Master of Science in Marketing, University of Colorado, with a specialization in high-tech entrepreneurial marketing.`}},cS={linkedinCompany:`https://www.linkedin.com/company/143243266`,linkedinFounder:`https://www.linkedin.com/in/8769i8657546/`,googleBusiness:`https://share.google/mABa48dIsUolbxI0w`},lS=[cS.linkedinCompany,cS.googleBusiness],uS=[cS.linkedinFounder],dS=[{name:`Cellara Beauty Pros`,url:`https://beautypros.cellaragrowthco.com`}],Y=`https://api.cellaragrowthco.com/widget/booking/zd6FFrSSbQKTrRxqCmbG`,fS={primary:{label:`Schedule a Strategy Call`,href:Y,external:!0},diagnostic:{label:`Start the Free Growth Gap Diagnostic`,href:`/growth-gap`},flagship:{label:`Build My Revenue System`,href:`/connected-revenue-system`},website:{label:`Explore Website Projects`,href:`/high-performance-websites`},consult:{label:`Talk With Cellara`,href:Y,external:!0},advisory:{label:`View Advisory Options`,href:`/growth-advisory`}},pS={landingPage:{label:A.landingPage.label,from:A.landingPage.amount,display:A.landingPage.display},blueprint:{label:A.blueprint.label,from:A.blueprint.amount,display:A.blueprint.display},website:{label:A.website.label,from:A.website.amount,display:A.website.display},system:{label:A.system.label,from:A.system.amount,display:A.system.display},management:{label:A.management.label,from:A.management.amount,display:A.management.display},advisoryHour:{label:A.advisoryHour.label,from:A.advisoryHour.amount,display:A.advisoryHour.display},advisoryFive:{label:A.advisoryFive.label,from:A.advisoryFive.amount,display:A.advisoryFive.display},operationsReset:{label:A.operationsReset.label,from:A.operationsReset.amount,display:A.operationsReset.display},fractionalOps:{label:A.fractionalOps.label,from:A.fractionalOps.amount,display:A.fractionalOps.display}
22,paidEssentials:{label:A.paidEssentials.label,monthly:A.paidEssentials.amount,display:A.paidEssentials.display,setup:`$197`,mediaRange:`$1,000 to $4,000 a month`},paidGrowth:{label:A.paidGrowth.label,monthly:A.paidGrowth.amount,display:A.paidGrowth.display,setup:`$497`,mediaRange:`$4,000 to $10,000 a month (above $10,000, management is 15% of spend)`},managementNote:Le.managementNote,scopeNote:Le.scope,advisoryNote:Le.advisoryNote},mS=[{slug:`diagnose`,label:`Diagnose and Advise`,headline:`Get a clear read before you spend on a build`,summary:`Focused consulting, diagnostics, and planning. You leave with a written priority order for your own team, whether or not Cellara builds anything.`,bestFor:`Owners who suspect something is leaking but do not yet know which part of the journey to fix first.`,entryPrice:`Starts free`,primaryPath:`/growth-advisory`,offers:[{name:A.diagnostic.label,path:`/growth-gap`,price:`Free`},{name:A.advisoryHour.label,path:`/growth-advisory`,price:A.advisoryHour.display},{name:A.blueprint.label,path:`/pricing`,price:A.blueprint.display}]},{slug:`build`,label:`Build and Connect`,headline:`Install the system between discovery and revenue`,summary:`Websites, paid growth, AI response, CRM, automation, follow-up, reputation, and search visibility, built as connected infrastructure rather than separate projects.`,bestFor:`Businesses ready to replace a foundation that cannot carry the demand they already have.`,entryPrice:`From ${A.reviewRequest.display}`,primaryPath:`/solutions`,offers:[{name:A.missedCallRecovery.label,path:`/growth-systems`,price:A.missedCallRecovery.display},{name:A.reviewRequest.label,path:`/growth-systems`,price:A.reviewRequest.display},{name:A.landingPage.label,path:`/high-performance-websites`,price:`From ${A.landingPage.display}`},{name:A.website.label,path:`/high-performance-websites`,price:`From ${A.website.display}`},{name:A.system.label,path:`/connected-revenue-system`,price:`From ${A.system.display}`}]},{slug:`manage`,label:`Manage and Optimize`,headline:`Keep the system running and improving`,summary:`Ongoing management, performance oversight, coordination, and accountability so the system you paid for keeps producing after launch week.`,bestFor:`Businesses with systems in place and nobody whose actual job is to run them.`,entryPrice:`From ${A.management.display}`,primaryPath:`/fractional-growth-operations`,offers:[{name:A.management.label,path:`/pricing`,price:`From ${A.management.display}`},{name:A.fractionalOps.label,path:`/fractional-growth-operations`,price:`From ${A.fractionalOps.display}`},{name:A.paidGrowth.label,path:`/paid-growth`,price:`From ${A.paidGrowth.display}`}]}],hS=[`Not sure yet, I want a recommendation`,`Diagnose and Advise: consulting, diagnostic, or planning`,`Build and Connect: website, paid growth, or full system`,`Manage and Optimize: ongoing management or fractional operations`],gS=[{slug:`paid-growth`,path:`/paid-growth`,name:`Paid Growth`,navLabel:`Paid Growth`,summary:`Performance advertising across Google and Meta, managed against the entire journey from click to booked customer. Demand created on purpose and measured in revenue.`},{slug:`high-performance-websites`,path:`/high-performance-websites`,name:`High-Performance Websites`,navLabel:`High-Performance Websites`,summary:`The strategic foundation. Positioning, architecture, copy, design, build, and the technical work that makes a site findable and easy to act on.`},{slug:`ai-front-desk`,path:`/ai-front-desk`,name:`AI Front Desk`,navLabel:`AI Front Desk`,summary:`After-hours and overflow coverage included in the Connected Revenue System and Revenue System Management. Qualification, approved answers, routing, and a clean handoff to a person.`},{slug:`revenue-operations`,path:`/revenue-operations`,name:`Revenue Operations`,navLabel:`Revenue Operations`,summary:`The system of record behind the sale. Contact organization, pipelines, routing, follow-up, reminders, and visibility into what is actually in play.`},{slug:`reputation-growth`,path:`/reputation-growth`,name:`Reputation Growth`,navLabel:`Reputation Growth`,summary:`A consistent process for asking for feedback, monitoring what gets published, and keeping your public profile current.`}
22,{slug:`seo-geo`,path:`/seo-geo`,name:`Search Visibility`,navLabel:`SEO and GEO`,summary:`Technical and on-page work so search engines and AI answer systems can find, understand, and retrieve what your business does.`},{slug:`connected-revenue-system`,path:`/connected-revenue-system`,name:`Complete Connected Revenue System`,navLabel:`Complete Connected Revenue System`,summary:`The flagship engagement. Every component installed and connected as one implementation, from the first search through booking, follow-up, reputation, and reporting, with AI Front Desk included.`}],_S=[{slug:`home-services`,path:`/industries/home-services`,name:`Home Services`,navLabel:`Home Services (HVAC, Plumbing, Electrical)`,challenge:`Crews are in the field, the phone rings, and the estimate request goes to voicemail.`,response:`Missed-call response, estimate follow-up, and source-to-booked-job visibility, built around the field software you already use.`,ctaLabel:`Plan My Service System`},{slug:`rental-companies`,path:`/industries/rental-companies`,name:`Equipment Rental`,navLabel:`Commercial and Industrial Equipment Rental`,challenge:`Contractor inquiries stall between availability, quote, and booking, and repeat accounts go quiet.`,response:`A connected path from inquiry to availability, quote, booking, and return, with repeat-account follow-up.`,ctaLabel:`See My Rental Revenue Opportunities`},{slug:`healthcare-aesthetics`,path:`/industries/healthcare-aesthetics`,name:`Healthcare and Aesthetics`,navLabel:`Healthcare and Aesthetics`,challenge:`The front desk is checking in a patient while three consultation calls come in behind it.`,response:`Coverage that answers, explains the service, and books the consultation without pulling staff away from the room.`,ctaLabel:`Plan My Practice System`},{slug:`legal-services`,path:`/industries/legal-services`,name:`Legal Services`,navLabel:`Legal Services`,challenge:`Someone with an urgent matter calls four firms and retains whoever responds first.`,response:`Intake that captures the matter type, routes it to the right practice area, and gets a consultation on the calendar.`,ctaLabel:`Plan My Intake System`},{slug:`beauty-wellness`,path:`/industries/beauty-wellness`,name:`Beauty and Wellness`,navLabel:`Beauty and Wellness`,challenge:`Clients decide to book at nine at night, and a contact form is the only option.`,response:`Service selection and booking that work after hours, with reminders and rebooking that protect the chair.`,ctaLabel:`Plan My Booking System`},{slug:`advisory-firms`,path:`/industries/advisory-firms`,name:`Advisory Firms`,navLabel:`Advisory Firms`,challenge:`The work is referral-driven, and the website does not carry the expertise that wins the room.`,response:`Positioning, methodology, and published thinking that qualify buyers before the discovery call.`,ctaLabel:`Plan My Authority and Revenue System`},{slug:`accounting-firms`,path:`/industries/accounting-firms`,name:`Accounting Firms`,navLabel:`Accounting Firms (CAS, Bookkeeping, Fractional CFO)`,challenge:`Referrals arrive with trust but no intake: no set first response, no fit check before scoping, and no follow-up when a prospect goes quiet.`,response:`A prompt first response, a short qualification step before partner time is committed, and follow-up after scoping calls and proposals.`,ctaLabel:`Plan My Referral Intake System`}],vS=[{label:`Growth Gap Diagnostic`,href:`/growth-gap`,description:`Free. Finds the single constraint holding revenue back.`},{label:`Growth Advisory`,href:`/growth-advisory`,description:`On-demand advisory time, ${A.advisoryHour.display} or ${A.advisoryFive.display} for five hours.`}],yS=[{label:`Revenue Operations Reset`,href:`/revenue-operations-reset`,description:`Repair and reconnect systems you already own, from ${A.operationsReset.display}.`},{label:`Fractional Growth Operations`,href:`/fractional-growth-operations`,description:`Ongoing ownership of the system, from ${A.fractionalOps.display}.`}],bS=[{label:`Entry Systems`,href:`/growth-systems`,description:`Missed Call Recovery and Review Request Automation, from ${A.reviewRequest.display}.`},...gS.map(e=>({label:e.navLabel,href:e.path,description:e.summary}))],xS=[{label:`Solutions`,href:`/solutions`,items:[...vS,...bS,...yS],sections:[{heading:`Diagnose and Advise`,items:vS},{heading:`Build and Connect`,items:bS},{heading:`Manage and Optimize`,items:yS}]},{label:`Industries`,href:`/industries`,items:_S.map(e=>({label:e.navLabel,href:e.path}))},{label:`Client Work`,href:`/case-studies`,items:[{label:`All Client Work`,href:`/case-studies`},{label:`How We Work`,href:`/how-we-work`}]},{label:`Pricing`,href:`/pricing`,items:[{label:`Pricing Overview`,href:`/pricing`},{label:`Entry Systems`,href:`/growth-systems`},{label:`High-Performance Websites`,href:`/high-performance-websites`}]},{label:`Insights`,href:`/insights`,items:[{label:`All Insights`,href:`/insights`},{label:`Website Strategy`,href:`/insights?topic=website-strategy`},{label:`Revenue Operations`,href:`/insights?topic=revenue-operations`},{label:`AI Front Desk`,href:`/insights?topic=ai-front-desk`},{label:`Search Visibility`,href:`/insights?topic=search-visibility`},{label:`Industry Guides`,href:`/insights?topic=industry-guides`}]},{label:`Company`,items:[{label:`About`,href:`/about`},{label:`How We Work`,href:`/how-we-work`},{label:`Frequently Asked Questions`,href:`/faq`},{label:`Contact`,href:`/contact`}]}],SS=e=>_S.find(t=>t.slug===e),CS={brandName:`Cellara Growth Co`,businessStructure:`sole proprietorship`,dbaDisclosure:`Cellara Growth Co is a DBA operating as a sole proprietorship.`,smsDisplayNumber:`(346) 681-5438`,smsE164:`+13466815438`,contactUrl:`https://www.cellaragrowthco.com/contact`,privacyUrl:`https://www.cellaragrowthco.com/privacy`,termsUrl:`https://www.cellaragrowthco.com/terms`,consentVersion:`cellara-a2p-2026-09-v1`}
22,wS={nonMarketing:`I agree to receive non-marketing text messages from Cellara Growth Co regarding my inquiry, appointments or scheduling, service updates, customer support, and account-related communications. Message frequency may vary. Message and data rates may apply. Reply HELP for help or STOP to opt out.`,marketing:`I agree to receive marketing text messages from Cellara Growth Co regarding offers, promotions, service announcements, and other marketing updates. Message frequency may vary. Message and data rates may apply. Reply HELP for help or STOP to opt out.`,optionalNote:`SMS consent is optional and is not a condition of purchasing services.`},TS={nonMarketing:`cellara-sms-non-marketing-2026-09-v1`,marketing:`cellara-sms-marketing-2026-09-v1`},ES=`Text messages from Cellara Growth Co may be sent from ${CS.smsDisplayNumber}.`,DS=`the chat widget available on every page of this website`,OS=`/assets/styles-YJl2gmBC.css`,kS=(0,I.lazy)(()=>J(()=>import(`./DemoAiWidget-BRAry02N.js`).then(e=>e.n),__vite__mapDeps([0,1])));(0,I.lazy)(()=>J(()=>import(`./ExitIntentModal-uKdEzJWQ.js`),__vite__mapDeps([2,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17])));var AS=(0,I.lazy)(()=>J(()=>import(`./NotFound-DHiAWvNi.js`),__vite__mapDeps([18,1,3,19,20,21,22,23,24,25,26,27]))),jS={"@context":`https://schema.org`,"@type":[`Organization`,`ProfessionalService`],"@id":`https://www.cellaragrowthco.com/#organization`,name:`Cellara Growth Co`,url:`https://www.cellaragrowthco.com/`,logo:{"@type":`ImageObject`,url:`https://www.cellaragrowthco.com/favicon.png`,width:512,height:512},image:`https://www.cellaragrowthco.com/social-preview.jpg`,description:`Cellara Growth Co builds high-performance websites and connected revenue systems for service businesses, covering conversion, response coverage, revenue operations, reputation, and search visibility.`,slogan:`Connected Revenue Systems for Service Businesses`,priceRange:`$59 to $7,500+`,sameAs:lS,founder:{"@type":`Person`,"@id":`https://www.cellaragrowthco.com/about#founder`,name:sS.founder.name,jobTitle:sS.founder.role,sameAs:uS},subOrganization:dS.map(e=>({"@type":`Organization`,name:e.name,url:e.url})),address:[{"@type":`PostalAddress`,streetAddress:`12436 FM 1960 Rd W, Unit #1465`,addressLocality:`Houston`,postalCode:`77065`,addressRegion:`TX`,addressCountry:`US`},{"@type":`PostalAddress`,addressLocality:`Denver`,addressRegion:`CO`,addressCountry:`US`}],areaServed:{"@type":`Country`,name:`United States`},contactPoint:[{"@type":`ContactPoint`,contactType:`sales`,url:`https://www.cellaragrowthco.com/contact`,availableLanguage:[`en`],areaServed:`US`}],hasOfferCatalog:{"@type":`OfferCatalog`,name:`Connected Revenue Systems`,itemListElement:[{name:`High-Performance Websites`,url:`https://www.cellaragrowthco.com/high-performance-websites`},{name:`AI Front Desk`,url:`https://www.cellaragrowthco.com/ai-front-desk`},{name:`Revenue Operations`,url:`https://www.cellaragrowthco.com/revenue-operations`},{name:`Reputation Growth`,url:`https://www.cellaragrowthco.com/reputation-growth`},{name:`Search Visibility`,url:`https://www.cellaragrowthco.com/seo-geo`},{name:`Complete Connected Revenue System`,url:`https://www.cellaragrowthco.com/connected-revenue-system`}].map((e,t)=>({"@type":`Offer`,position:t+1,itemOffered:{"@type":`Service`,name:e.name,url:e.url}}))}},MS={"@context":`https://schema.org`,"@type":`WebSite`,"@id":`https://www.cellaragrowthco.com/#website`,name:`Cellara Growth Co`,url:`https://www.cellaragrowthco.com/`,inLanguage:`en-US`,publisher:{"@id":`https://www.cellaragrowthco.com/#organization`}},X=xe()({head:()=>({meta:[{charSet:`UTF-8`},{name:`viewport`,content:`width=device-width, initial-scale=1.0`},{name:`google-site-verification`,content:`RjdMJMOI1Yntcb7TLJc2W5Yu1kuK7r2AAXVBoFt5pPI`},{name:`author`,content:`Cellara Growth Co`},{property:`og:site_name`,content:`Cellara Growth Co`},{property:`og:locale`,content:`en_US`},{property:`og:type`,content:`website`},{name:`twitter:card`,content:`summary_large_image`}],links:[{rel:`stylesheet`,href:OS}
22,{rel:`icon`,type:`image/png`,sizes:`64x64`,href:`/favicon.png`},{rel:`apple-touch-icon`,href:`/favicon.png`},{rel:`alternate`,type:`application/rss+xml`,title:`Cellara Growth Co Insights`,href:`https://www.cellaragrowthco.com/rss.xml`},{rel:`preconnect`,href:`https://fonts.googleapis.com`},{rel:`preconnect`,href:`https://fonts.gstatic.com`,crossOrigin:`anonymous`},{rel:`stylesheet`,href:`https://fonts.googleapis.com/css2?family=DM+Serif+Display&family=Inter:wght@400;500;600;700&display=swap`},{rel:`preload`,as:`font`,type:`font/ttf`,crossOrigin:`anonymous`,href:`https://fonts.gstatic.com/s/dmserifdisplay/v17/-nFnOHM81r4j6k0gjAW3mujVU2B2K_c.ttf`}],scripts:[{children:`
vendor: 323 bytes, line 22
22(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','
22GTM-M3FR3ZK3
vendor: 3 bytes, line 22
22');
22`},{async:!0,src:`https://www.googletagmanager.com/gtag/js?id=G-0VJV27BZHC`},{children:`
vendor: 127 bytes, line 22
22window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', '
22G-0VJV27BZHC
vendor: 3 bytes, line 22
22');
22`},{type:`application/ld+json`,children:JSON.stringify([jS,MS])}]}),shellComponent:NS,component:LS,notFoundComponent:()=>(0,L.jsx)(I.Suspense,{fallback:(0,L.jsx)(`div`,{className:`min-h-screen bg-background`,"aria-hidden":`true`}),children:(0,L.jsx)(AS,{})}),errorComponent:RS});function NS({children:e}){return(0,L.jsxs)(`html`,{lang:`en`,suppressHydrationWarning:!0,children:[(0,L.jsx)(`head`,{children:(0,L.jsx)(Js,{})}),(0,L.jsxs)(`body`,{children:[(0,L.jsx)(`noscript`,{children:(0,L.jsx)(`iframe`,{src:`https://www.googletagmanager.com/ns.html?id=GTM-M3FR3ZK3`,height:`0`,width:`0`,style:{display:`none`,visibility:`hidden`},title:`Google Tag Manager`})}),e,(0,L.jsx)(Ys,{})]})]})}var PS=[`/launch-partner-program`];function FS(){let{pathname:e}=Us();return(0,I.useEffect)(()=>{aS(e)},[e]),null}function IS(){let{pathname:e}=Us(),[t,n]=(0,I.useState)(!1);return(0,I.useEffect)(()=>n(!0),[]),!t||PS.includes(e)?null:(0,L.jsxs)(I.Suspense,{fallback:null,children:[(0,L.jsx)(kS,{}),!1]})}function LS(){let{queryClient:e}=X.useRouteContext();return(0,L.jsx)(fh,{client:e,children:(0,L.jsx)(Th,{reducedMotion:`user`,transition:{duration:.7,ease:[.16,1,.3,1]},children:(0,L.jsxs)(Rx,{children:[(0,L.jsx)(X_,{}),(0,L.jsx)(Mv,{}),(0,L.jsx)(Ps,{}),(0,L.jsx)(FS,{}),(0,L.jsx)(IS,{})]})})})}function RS({error:e,reset:t}){console.error(e);let n=O();return(0,I.useEffect)(()=>{Bx(e,{boundary:`tanstack_root_error_component`})},[e]),(0,L.jsx)(`div`,{className:`flex min-h-screen items-center justify-center bg-background px-6`,children:(0,L.jsxs)(`div`,{className:`w-full max-w-md text-center`,children:[(0,L.jsx)(`h1`,{className:`font-display text-2xl text-foreground`,children:`This page didn't load`}),(0,L.jsx)(`p`,{className:`mt-2 text-muted-foreground`,children:`Something went wrong on our end. You can try again or head back to the homepage.`}),(0,L.jsxs)(`div`,{className:`mt-6 flex flex-wrap items-center justify-center gap-3`,children:[(0,L.jsx)(`button`,{type:`button`,className:`rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:opacity-90`,onClick:()=>{n.invalidate(),t()},children:`Try again`}),(0,L.jsx)(`a`,{href:`/`,className:`rounded-md border border-border bg-card px-4 py-2 text-sm font-medium text-foreground hover:bg-muted`,children:`Go home`})]})]})})}var zS=`${oS}/social-preview.jpg`,BS=1200,VS=640,HS=`${sS.name}: connected revenue systems for service businesses`,US=`en_US`,WS=({title:e,description:t,url:n,image:r,imageAlt:i,imageWidth:a,imageHeight:o,type:s=`website`})=>{let c=r??zS,l=c===zS,u=i??(l?HS:e),d=a??(l?BS:void 0),f=o??(l?VS:void 0);return[{property:`og:site_name`,content:sS.name},{property:`og:locale`,content:US},{property:`og:type`,content:s},{property:`og:title`,content:e},{property:`og:description`,content:t},{property:`og:url`,content:n},{property:`og:image`,content:c},{property:`og:image:secure_url`,content:c},{property:`og:image:alt`,content:u},...d?[{property:`og:image:width`,content:String(d)}]:[],...f?[{property:`og:image:height`,content:String(f)}]:[],...c.endsWith(`.png`)?[{property:`og:image:type`,content:`image/png`}]:[{property:`og:image:type`,content:`image/jpeg`}],{name:`twitter:card`,content:`summary_large_image`},{name:`twitter:title`,content:e},{name:`twitter:description`,content:t},{name:`twitter:image`,content:c},{name:`twitter:image:alt`,content:u}]},GS={"/":{title:`Inquiry-to-Booked-Work Systems for Service Businesses | Cellara`,description:`Cellara Growth Co builds and manages the connected systems between first inquiry and booked work for owner-led service businesses in Greater Houston.`},"/solutions":{title:`Revenue System Solutions: 6 Capabilities | Cellara`,description:`Paid growth, websites, AI front desk, revenue operations, reputation, and search, connected into one system instead of six disconnected vendors.`}
22,"/paid-growth":{title:`Paid Growth | Revenue Systems | Cellara`,description:`Advertising management with the full customer journey in mind. Paid Ads Essentials $397 a month, Paid Growth Management $1,297 a month. Ad spend separate.`},"/paid-growth-fit":{title:`Paid Growth Fit | Revenue Systems | Cellara`,description:`A five-minute assessment that tells you whether Google Ads, Meta Ads, or a combined strategy fits your business, and whether you are ready to advertise.`},"/high-performance-websites":{title:`High-Performance Websites, Built to Convert | Cellara`,description:`A website built for positioning, copy, technical SEO, accessibility, and a full connection to your CRM and calendar, not just design.`},"/ai-front-desk":{title:`AI Front Desk | Revenue Systems | Cellara`,description:`AI receptionist coverage for calls and chat: answering, qualification, scheduling support, and lead capture with a clean handoff to a person.`},"/revenue-operations":{title:`Revenue Operations | Revenue Systems | Cellara`,description:`CRM setup, pipeline design, lead routing, and follow-up workflows so every lead and opportunity is tracked, not remembered.`},"/reputation-growth":{title:`Reputation Growth | Revenue Systems | Cellara`,description:`Consistent review requests for every customer, private feedback alongside them, and ongoing monitoring. No review gating, ever.`},"/seo-geo":{title:`SEO and GEO | Revenue Systems | Cellara`,description:`Technical SEO, on-page work, local search alignment, and generative engine optimization so Google and AI answer tools can find and cite you.`},"/connected-revenue-system":{title:`Connected Revenue System | From $7,500 | Cellara`,description:`The flagship engagement connects your website, lead response, follow-up, booking, reputation, and reporting into one system. From $7,500.`},"/growth-advisory":{title:`Growth Advisory | Revenue Systems | Cellara`,description:`On-demand growth advisory for owners who need direction before a build: $197 an hour or $895 for a five-hour bank, with written recaps.`},"/revenue-operations-reset":{title:`Revenue Operations Reset | From $2,997 | Cellara`,description:`A scoped repair engagement for CRM, automation, follow-up, and tracking you already own. Audit, rebuild, reconnect, document, and hand back. From $2,997.`},"/fractional-growth-operations":{title:`Fractional Growth Operations | From $2,497 a Month`,description:`Ongoing ownership of your revenue system: performance oversight, coordination, accountability, and continuous improvement. From $2,497 a month.`},"/pricing":{title:`Pricing | Revenue Systems | Cellara`,description:`Published pricing: free Growth Gap Diagnostic, entry systems from $59 a month, Revenue System Blueprint $697, Revenue System Core from $4,997, Connected Revenue System from $7,500.`},"/growth-systems":{title:`Missed Call Recovery and Review Requests | Cellara`,description:`Two fixed-scope entry systems for service businesses: Missed Call Recovery at $79 a month and Review Request Automation at $59 a month, plus setup. Month to month.`},"/industries":{title:`Industries | Revenue Systems | Cellara`,description:`Websites, AI front desk coverage, and revenue operations built for how each service business actually gets found, called, and booked.`},"/industries/healthcare-aesthetics":{title:`Med Spa and Clinic Websites That Book Consults | Cellara`,description:`Consultation booking, patient coverage, and reputation systems built for med spas, injectors, dental, and wellness clinics. No clinical data stored.`},"/industries/legal-services":{title:`Law Firm Intake Systems That Retain Clients | Cellara`,description:`Whoever responds to a new client inquiry first usually keeps them. See how Cellara builds intake, routing, and scheduling systems for law firms.`},"/industries/home-services":{title:`HVAC, Plumbing, and Electrical Follow-Up Systems | Cellara`,description:`For HVAC, plumbing, and electrical companies in Greater Houston: missed-call response, estimate follow-up, and visibility from first call to booked job.`},"/industries/beauty-wellness":{title:`Salon, Spa, and Studio Booking Systems | Cellara`,description:`Service selection, after-hours booking, reminders, and rebooking built to protect the chair and fill the calendar for beauty and wellness studios.`},"/industries/rental-companies":{title:`Equipment Rental Quote and Follow-Up Systems | Cellara`,description:`For commercial and industrial equipment rental companies in Greater Houston: a connected path from inquiry to availability, quote, booking, and repeat accounts.`}
22,"/industries/advisory-firms":{title:`Advisory Firm Websites | Cellara`,description:`Positioning, methodology, and published thinking that qualify buyers before the discovery call, built for firms that grow through referral.`},"/industries/accounting-firms":{title:`CAS, Bookkeeping, and Fractional CFO Firm Intake | Cellara`,description:`Fast first response, a short qualification step before scoping calls, and follow-up when referred prospects go quiet, for accounting firms.`},"/assessments":{title:`Free Business Assessments | Cellara`,description:`Three free assessments for service business owners: find the constraint holding revenue back, see whether paid ads fit you yet, or estimate your return.`},"/assessments/estimate-return":{title:`Estimate the Return in 2 Minutes | Cellara`,description:`A free estimator that shows what missed calls, slow follow-up, and silent reviews cost you each month, and how quickly a revenue system pays for itself.`},"/assessments/growth-gap":{title:`Growth Gap Assessment in 3 Minutes | Cellara`,description:`A short summary of the free Growth Gap assessment: what it asks, how long it takes, and the 30-day plan you leave with. Start in one click.`},"/assessments/paid-growth-fit":{title:`Paid Growth Fit Assessment in 5 Minutes | Cellara`,description:`A short summary of the free Paid Growth Fit assessment: whether ads fit your business yet, which platform, and what monthly media range to plan for.`},"/growth-gap":{title:`Growth Gap | Revenue Systems | Cellara`,description:`A free diagnostic that finds the one constraint holding your revenue back, with a 30-day plan you can run yourself. Three minutes to complete.`},"/case-studies":{title:`Verified Client Results | Cellara Case Studies`,description:`Real Cellara engagements: what was built, what changed operationally, and numbers we only publish once the client has verified them.`},"/how-we-work":{title:`How We Work | Revenue Systems | Cellara`,description:`A sequential look at how a Cellara engagement runs, from the first strategy call through launch and ongoing optimization, with honest timelines.`},"/about":{title:`About | Revenue Systems | Cellara`,description:`A revenue systems company based in Greater Houston and Denver, Colorado, founded by Krystal Gonzalez, building websites, AI front desk coverage, and revenue operations for service businesses.`},"/after-launch":{title:`After Launch | Client Support | Cellara`,description:`For current clients: the launch support window, what Cellara measures every month, and how to request ongoing optimization once your system is live.`},"/faq":{title:`FAQ | Revenue Systems | Cellara`,description:`Direct answers on what a website and revenue system costs, how long a build takes, what AI does and does not handle, and who owns the work.`},"/contact":{title:`Contact | Revenue Systems | Cellara`,description:`Book a strategy call or send a message about a website, AI front desk, or revenue system build. Based in Greater Houston and Denver, Colorado, working nationwide.`},"/cellara-launch":{title:`Small Business Website for $297 | Cellara Launch`,description:`A professional one-page website for your service business, built and live in 5 to 7 business days for $297, plus $49 a month for hosting and lead management.`,noindex:!0},"/launch-partner-program":{title:`Launch Partner Program | Cellara Growth Co`,description:`Six service businesses. One professionally built five-page website for $997. Enroll online in minutes or text WEBSITE to claim your spot.`,noindex:!0},"/insights":{title:`The Cellara Journal: Revenue Systems Insights`,description:`Daily research on websites, AI front desk coverage, revenue operations, reputation, and search visibility for service businesses like yours.`},"/privacy":{title:`Privacy Policy | Cellara Growth Co`,description:`How Cellara Growth Co collects, uses, and protects information, including SMS consent practices and your choices about your data.`},"/terms":{title:`Terms of Service | Cellara Growth Co`,description:`The terms governing Cellara Growth Co website and revenue system engagements, including scope, fees, ownership, and limitation of liability.`},"/accessibility":{title:`Accessibility Statement | Cellara Growth Co`,description:`Our WCAG 2.2 AA target, the measures we have taken, known limitations, and how to report a barrier on the Cellara Growth Co website.`},"/auth":{title:`Sign In | Cellara Growth Co`,description:`Sign in to the Cellara Growth Co internal reporting area.`,noindex:!0}
22,"/admin/analytics":{title:`Traffic Reporting | Cellara Growth Co`,description:`Internal traffic reporting for the Cellara Growth Co website.`,noindex:!0},"/admin/leads":{title:`Assessment Leads | Cellara Growth Co`,description:`Internal review area for assessment leads and consult outreach.`,noindex:!0}},KS=e=>`${oS}${e===`/`?`/`:e}`,Z=e=>{let t=GS[e],n=KS(e),r=t.socialTitle??t.title;return{meta:[{title:t.title},{name:`description`,content:t.description},...t.noindex?[{name:`robots`,content:`noindex, nofollow`}]:[],...WS({title:r,description:t.description,url:n,...t.image===void 0?{}:{image:t.image},...t.imageAlt===void 0?{}:{imageAlt:t.imageAlt},type:t.type??`website`})],links:[{rel:`canonical`,href:n}]}},qS=R(`/`)({head:()=>Z(`/`),component:z(()=>J(()=>import(`./routes-DAFRVMvV.js`),__vite__mapDeps([28,1,3,4,5,29,6,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,34,35,36,37,38,11,16,39,40])),`component`)}),JS=R(`/about`)({head:()=>Z(`/about`),component:z(()=>J(()=>import(`./about-DHeWFYbW.js`),__vite__mapDeps([41,3,1,4,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37])),`component`)}),YS=R(`/accessibility`)({head:()=>Z(`/accessibility`),component:z(()=>J(()=>import(`./accessibility-UXI0qk4L.js`),__vite__mapDeps([42,3,1,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37])),`component`)}),XS=R(`/after-launch`)({head:()=>Z(`/after-launch`),component:z(()=>J(()=>import(`./after-launch-BbyB6pLi.js`),__vite__mapDeps([43,3,1,44,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37])),`component`)}),ZS=R(`/ai-agents`)({beforeLoad:()=>{throw _e({to:`/ai-front-desk`,statusCode:301})}}),QS=R(`/ai-front-desk`)({head:()=>Z(`/ai-front-desk`),component:z(()=>J(()=>import(`./ai-front-desk-DXuNNMwZ.js`),__vite__mapDeps([45,3,1,15,46,4,14,9,10,47,48,8,11,16,49,50,39,30,22,23,20,21,31,32,0,19,24,25,26,27,33,36,37])),`component`)}),$S=R(`/ai-receptionist`)({beforeLoad:()=>{throw _e({to:`/ai-front-desk`,statusCode:301})}}),eC=R(`/auth`)({head:()=>Z(`/auth`),validateSearch:e=>typeof e.next==`string`?{next:e.next}:{},component:z(()=>J(()=>import(`./auth-DlbW_OgF.js`),__vite__mapDeps([51,1,3,8,9,10,11,16,19,20,21,22,23,24,25,26,27,52])),`component`)}),tC=R(`/case-studies`)({head:()=>Z(`/case-studies`),component:z(()=>J(()=>import(`./case-studies-CAY--rRV.js`),__vite__mapDeps([53,3,1,6,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37])),`component`)}),nC=R(`/cellara-launch`)({component:z(()=>J(()=>import(`./cellara-launch-C1X8ncIR.js`),__vite__mapDeps([54,3,1])),`component`)}),rC=R(`/client-work`)({beforeLoad:()=>{throw _e({to:`/case-studies`,statusCode:301})}}),iC=R(`/connected-revenue-system`)({head:()=>Z(`/connected-revenue-system`),component:z(()=>J(()=>import(`./connected-revenue-system-DHjZ2l_6.js`),__vite__mapDeps([55,3,1,4,29,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37])),`component`)}),aC=R(`/contact`)({head:()=>Z(`/contact`),component:z(()=>J(()=>import(`./contact-CKnQv0uD.js`),__vite__mapDeps([56,1,3,57,23,58,14,9,10,15,31,59,49,50,30,22,20,21,32,0,8,19,24,25,26,27,33,7,11,16,12,13,17,36,37,60])),`component`)}),oC=R(`/faq`)({head:()=>Z(`/faq`),component:z(()=>J(()=>
22import(`./faq-BDgOeX9n.js`),__vite__mapDeps([61,3,1,31,30,22,23,20,21,32,0,8,9,10,19,24,25,26,27,33,36,37])),`component`)}),sC=R(`/fractional-growth-operations`)({head:()=>Z(`/fractional-growth-operations`),component:z(()=>J(()=>import(`./fractional-growth-operations-CESxrZ6s.js`),__vite__mapDeps([62,3,1,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37,40,4])),`component`)}),cC=R(`/growth-advisory`)({head:()=>Z(`/growth-advisory`),component:z(()=>J(()=>import(`./growth-advisory-BqjOWdSw.js`),__vite__mapDeps([63,3,1,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37,40,4])),`component`)}),lC=R(`/growth-gap`)({head:()=>Z(`/growth-gap`),component:z(()=>J(()=>import(`./growth-gap-D1Zvlxla.js`),__vite__mapDeps([64,1,3,65,20,21,66,67,30,22,23,31,32,0,8,9,10,19,24,25,26,27,33,11,16,12,13,14,15,36,37,68])),`component`)}),uC=R(`/growth-systems`)({head:()=>Z(`/growth-systems`),component:z(()=>J(()=>import(`./growth-systems-B0AZDyo-.js`),__vite__mapDeps([69,3,1,15,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,70,36,37,71])),`component`)}),dC=R(`/high-performance-websites`)({head:()=>Z(`/high-performance-websites`),component:z(()=>J(()=>import(`./high-performance-websites-Dm7wMXPW.js`),__vite__mapDeps([72,3,1,15,46,4,14,9,10,47,48,8,11,16,49,50,39,30,22,23,20,21,31,32,0,19,24,25,26,27,33,36,37])),`component`)}),fC=R(`/how-we-work`)({head:()=>Z(`/how-we-work`),component:z(()=>J(()=>import(`./how-we-work-BmiBwp5u.js`),__vite__mapDeps([73,3,1,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37])),`component`)}),pC=R(`/launch-partner-program`)({component:z(()=>J(()=>import(`./launch-partner-program-C1X8ncIR.js`),__vite__mapDeps([74,3,1])),`component`)}),mC=R(`/paid-growth`)({head:()=>Z(`/paid-growth`),component:z(()=>J(()=>import(`./paid-growth-COWVf0V5.js`),__vite__mapDeps([75,1,3,4,6,15,8,9,10,19,20,21,22,23,24,25,26,27,33])),`component`)}),hC=R(`/paid-growth-fit`)({head:()=>Z(`/paid-growth-fit`),component:z(()=>J(()=>import(`./paid-growth-fit-CbrKNVtJ.js`),__vite__mapDeps([76,1,3,6,15,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,11,16,12,13,14,37,68])),`component`)}),gC=R(`/pricing`)({head:()=>Z(`/pricing`),component:z(()=>J(()=>import(`./pricing-DqdFxqE2.js`),__vite__mapDeps([77,3,1,15,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,70,36,37,71])),`component`)}),_C=R(`/privacy`)({head:()=>Z(`/privacy`),component:z(()=>J(()=>import(`./privacy-CRczGsyD.js`),__vite__mapDeps([78,3,1,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37])),`component`)}),vC=R(`/reputation`)({beforeLoad:()=>{throw _e({to:`/reputation-growth`,statusCode:301})}}),yC=R(`/reputation-growth`)({head:()=>Z(`/reputation-growth`),component:z(()=>J(()=>import(`./reputation-growth-DZ-IT7Wl.js`),__vite__mapDeps([79,3,1,15,46,4,14,9,10,47,48,8,11,16,49,50,39,30,22,23,20,21,31,32,0,19,24,25,26,27,33,36,37])),`component`)}),bC=R(`/revenue-calculator`)({beforeLoad:()=>{throw _e({to:`/growth-gap`,statusCode:301})}}),xC=R(`/revenue-diagnostic`)({beforeLoad:()=>{throw _e({to:`/growth-gap`,statusCode:301})}}),SC=R(`/revenue-operations`)({head:()=>Z(`/revenue-operations`),component:z(()=>J(()=>import(`./revenue-operations-D7kiXENT.js`),__vite__mapDeps([80,3,1,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37])),`component`)}),CC=R(`/revenue-operations-reset`)({head:()=>Z(`/revenue-operations-reset`),component:z(()=>J(()=>import(`./revenue-operations-reset-Be_b5smy.js`),__vite__mapDeps([81,3,1,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37,40,4])),`component`)}),wC=R(`/seo`)({beforeLoad:()=>{throw _e({to:`/seo-geo`,statusCode:301})}}),TC=R(`/seo-geo`)({head:()=>Z(`/seo-geo`),component:z(()=>J(()=>import(`./seo-geo-B18zeAKw.js`),__vite__mapDeps([82,3,1,15,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37])),`component`)}),EC=R(`/services`)({beforeLoad:()=>{throw _e({to:`/solutions`,statusCode:301})}}),DC=R(`/solutions`)({head:()=>Z(`/solutions`),component:z(()=>J(()=>import(`./solutions-CqqHPGTN.js`),__vite__mapDeps([83,3,1,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37])),`component`)}),OC=R(`/terms`)({head:()=>Z(`/terms`),component:z(()=>J(()=>import(`./terms-DvSWbJXf.js`),__vite__mapDeps([84,3,1,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37])),`component`)}),kC=R(`/websites`)({beforeLoad:()=>{throw _e({to:`/high-performance-websites`,statusCode:301})}}),AC=R(`/admin/analytics`)({head:()=>Z(`/admin/analytics`),component:z(()=>J(()=>import(`./analytics-Bag2gdT2.js`),__vite__mapDeps([85,1,22,23,20,21,3,14,9,10,86,32,57,58,15,31,59,49,50,87,8,19,24,25,26,27,52])),`component`)}),jC=R(`/admin/leads`)({head:()=>Z(`/admin/leads`),component:z(()=>J(()=>import(`./leads-DD_Hg5ZM.js`),__vite__mapDeps([88,1,22,23,20,21,3,27,65,66,14,9,10,15,57,58,31,59,49,50,89,87,35,8,11,52])),`component`)}),MC=R(`/assessments/`)({head:()=>Z(`/assessments`),component:z(()=>J(()=>import(`./assessments.index-CWpQJmgV.js`),__vite__mapDeps([90,3,1,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,37])),`component`)}),NC=R(`/assessments/estimate-return`)({head:()=>Z(`/assessments/estimate-return`),component:z(()=>J(()=>import(`./assessments.estimate-return-vCdSZSL-.js`),__vite__mapDeps([91,3,1,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,37,38,6,11,16,39])),`component`)}),PC=R(`/assessments/growth-gap`)({head:()=>Z(`/assessments/growth-gap`),component:z(()=>J(()=>import(`./assessments.growth-gap-dWRaq6hT.js`),__vite__mapDeps([92,3,1,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,93,37])),`component`)}),FC=R(`/assessments/paid-growth-fit`)({head:()=>
22Z(`/assessments/paid-growth-fit`),component:z(()=>J(()=>import(`./assessments.paid-growth-fit-CVdn2EYD.js`),__vite__mapDeps([94,3,1,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,93,37])),`component`)}),IC=R(`/blog/`)({beforeLoad:()=>{throw _e({to:`/insights`,statusCode:301})}}),LC=`/assets/speed-to-lead-BIxzOt-F.jpg`,RC=`/assets/reputation-CnIYzQ82.jpg`,zC=`/assets/med-spa-CBVp8P3f.jpg`,BC=`/assets/missed-calls-ozNAT1yq.jpg`,VC=`/assets/anvil-rentals-D8VztiAp.jpg`,HC=`/assets/ai-invisible-test-B9YFL9LK.jpg`,UC=`/assets/spartan-judicial-home-jk0MKLdu.jpg`,WC=`/assets/resolveiq-home-PH5cMMtC.jpg`,GC=`/assets/resolveiq-mobile-Bv82llZS.jpg`,KC=`/assets/spartan-judicial-mobile-DF8ACtBi.jpg`,qC=`/assets/mc-eye-before-desktop-CdpbmUTK.jpg`,JC=`/assets/mc-eye-before-mobile-MDMdKo7a.jpg`,YC=`/assets/mc-eye-after-desktop-AUeQJ-kg.jpg`,XC=`/assets/mc-eye-after-mobile-C3-ophCn.jpg`,ZC={"client-work":[{src:UC,alt:`The Spartan Judicial homepage shown on a desktop browser`},{src:VC,alt:`Equipment lined up at a rental yard early in the morning`}],"website-strategy":[{src:`/assets/website-strategy-DCw2geO-.jpg`,alt:`Hand-drawn website page wireframes spread across a worn desk in window light`},{src:VC,alt:`Equipment lined up at a rental yard early in the morning`}],"revenue-operations":[{src:`/assets/revenue-operations-D-OMDqe_.jpg`,alt:`A back office desk with a landline phone, sticky notes, and a switched-off monitor`},{src:LC,alt:`An empty reception counter with the desk phone handset left off the hook`},{src:BC,alt:`A phone left on the passenger seat of a work van beside a clipboard`}],"ai-front-desk":[{src:`/assets/ai-receptionist-CllE3jW3.jpg`,alt:`A front desk phone system at a quiet reception counter after hours`},{src:zC,alt:`A treatment room prepared for the next scheduled consultation`}],"search-visibility":[{src:`/assets/search-visibility-BVSs1B_L.jpg`,alt:`A closed laptop and folded paper map on a kitchen counter in morning light`},{src:HC,alt:`A laptop with a dark, switched-off screen on a wooden desk`}],"industry-guides":[{src:zC,alt:`A treatment room prepared for the next scheduled consultation`},{src:RC,alt:`A phone resting face down beside a coffee cup on a cafe table`}]},QC=(e,t)=>{let n=0;for(let t=0;t<e.length;t+=1)n+=e.charCodeAt(t);return n%t},$C=(e,t)=>{let n=ZC[e];return n[QC(t,n.length)]},ew=e=>e.reduce((e,t)=>t.type===`ul`||t.type===`ol`?e+t.items.join(` `).split(/\s+/).length:t.type===`steps`?e+t.items.map(e=>`${e.title} ${e.text} ${e.outcome??``}`).join(` `).split(/\s+/).length:t.type===`table`?e+[t.caption,...t.headers,...t.rows.flat()].join(` `).split(/\s+/).length:t.type===`callout`||t.type===`cta`?e+`${t.title} ${t.text}`.split(/\s+/).length:t.type===`image`?e:e+t.text.split(/\s+/).length,0),Q=e=>{let t=$C(e.category,e.slug),n=ew(e.body);return{author:sS.founder.name,authorCredential:sS.founder.credential,industries:[],services:[],readingMinutes:Math.max(3,Math.round(n/210)),coverImage:t.src,coverAlt:t.alt,sources:[],relatedSlugs:[],primaryCta:{label:fS.primary.label,href:Y},canonicalPath:`/insights/${e.slug}`,index:!0,featured:!1,status:`published`,...e}},tw=[{slug:`client-work`,label:`Client Work`},{slug:`website-strategy`,label:`Website Strategy`},{slug:`revenue-operations`,label:`Revenue Operations`},{slug:`ai-front-desk`,label:`AI Front Desk`},{slug:`search-visibility`,label:`Search Visibility`},{slug:`industry-guides`,label:`Industry Guides`}],nw=sS.founder.name,rw=sS.founder.credential;fS.primary.label;var $=[],iw=()=>new Date().toISOString().slice(0,10),aw=(e,t=iw())=>e.status===`published`?e.publishAt?Date.now()>=new Date(e.publishAt).getTime():e.datePublished<=t:!1,ow=e=>$.find(t=>t.slug===e),sw=e=>{let t=ow(e);return t&&aw(t)?t:void 0},cw=(e,t)=>e.datePublished<t.datePublished?1:-1,lw=()=>$.filter(e=>aw(e)).sort(cw);$.push({slug:`healthcare-aesthetics`,title:`What a Modern Healthcare or Aesthetic Practice Website Must Do Beyond Looking Professional`,shortTitle:`Beyond Looking Professional`,metaTitle:`What a Modern Healthcare or Aesthetic Practice Website Must Do`,metaDescription:`A polished design is not enough. Here is what patient trust, appointment conversion, and front-desk supp
22ort actually require from a practice website.`,excerpt:`A good-looking website is the minimum, not the achievement. Here is the operational checklist that actually moves patients from search result to booked appointment.`,answer:`A modern healthcare or aesthetic practice website must do more than look credible: it needs to answer a prospective patient's real questions, make booking effortless from any device, route the inquiries a human should see, and keep working after hours when the front desk cannot. Design earns the first impression. Structure and follow-through earn the appointment.`,author:nw,authorCredential:rw,datePublished:`2026-07-06`,category:`industry-guides`,industries:[`healthcare-aesthetics`],services:[`high-performance-websites`,`ai-front-desk`],readingMinutes:9,coverImage:zC,coverAlt:`Empty aesthetics clinic treatment room with daylight through window blinds`,body:[{type:`p`,text:`Most practice owners judge their website the way a patient does on the first visit: does it look clean, current, and trustworthy? That instinct is not wrong, it is just incomplete. A site can look excellent in a design review and still lose patients every week because it never answers the questions people actually arrive with, or because the path from curiosity to booked appointment has too many steps, or because nobody follows up on the form that came in at nine at night.`},{type:`p`,text:`Practices that consistently fill their calendar tend to treat the website less like a brochure and more like an extension of the front desk. It has to do a version of everything a good in-person team does: build trust quickly, explain the service in plain language, answer the obvious objections, and make the next step obvious.`},{type:`h2`,text:`Patient trust is built with specifics, not adjectives`},{type:`p`,text:`Words like caring, experienced, and state-of-the-art do very little for a visitor trying to decide whether to book with your practice or the one three tabs over. What actually builds confidence is specificity: which conditions or treatments you see most often, what credentials your providers hold, what a first visit looks like step by step, and what results are realistic to expect in plain, non-promotional language. A visitor who can picture the visit is far more likely to book it.`},{type:`p`,text:`Photography matters here more than most practices budget for. Stock imagery of generic smiling models signals a template. Real photos of your space, your team, and (with consent) your work read as evidence. If your practice cannot yet invest in original photography, a clean, restrained design with strong typography will outperform a busy page dressed up with stock visuals every time.`},{type:`h2`,text:`The booking path has to survive a distracted visitor`},{type:`p`,text:`Assume every visitor is on a phone, has thirty seconds, and is comparing you to two other practices in other tabs. A booking button that is visible without scrolling, a form that asks only for what you need to schedule (not a full medical history), and a confirmation that arrives instantly are the difference between a booked consultation and a visitor who leaves to check the next result.`},{type:`p`,text:`If your booking flow requires a phone call during business hours as the only option, you are filtering out every patient who is deciding at night or on a lunch break, which is a meaningful share of your total demand.`},{type:`h3`,text:`What the booking step should never do`},{type:`ul`,items:[`Ask for insurance details before the visitor has decided you are the right practice`,`Bury the phone number and booking link below multiple scrolls`,`Require a account creation just to request a consultation`,`Send the visitor to a generic contact form with no confirmation message`]},{type:`h2`,text:`Front-desk support needs to extend past business hours`},{type:`p`,text:`A practice with excellent daytime service can still lose a large share of its inbound interest simply because people research treatments, providers, and pricing in the evening. When the only response mechanism is a voicemail, prospective patients often move on to whichever practice answers first, regardless of quality. This is not a staffing failure; it is a coverage gap that most practices have simply accepted as normal.`},{type:`p`,text:`Closing that gap does not require hiring around the clock. It requires a way to acknowledge every inquiry immediately, gather the basic 
22information your team needs, and hand a warm, qualified lead to a person the next morning, or route anything urgent to someone on call.`},{type:`h2`,text:`Service education reduces no-shows and mismatched consultations`},{type:`p`,text:`Patients who understand roughly what to expect, cost ranges, recovery time, and candidacy before they book are more likely to show up and more likely to be a good fit. Pages that explain a procedure honestly, including who is not a good candidate, filter out mismatched inquiries before they ever reach your calendar. That is a better outcome for your team's time than a high volume of consultations that convert poorly.`},{type:`h2`,text:`FAQs answer the question a patient will not ask out loud`},{type:`p`,text:`Cost, pain, downtime, and safety are the four questions almost every prospective patient has and almost none will type into a contact form. A well-built FAQ section, placed near the relevant service rather than buried on a separate page, removes friction at exactly the point a visitor is deciding whether to reach out.`},{type:`h2`,text:`Reviews need a visible, current home`}
22,{type:`p`,text:`A five-star badge with a stale count from two years ago undermines the trust it is meant to build. Reviews should be recent, specific, and easy to find, ideally pulled through automatically rather than manually updated. Practices that make it simple for satisfied patients to leave a review, and simple for prospective patients to read one, compound that advantage over every other marketing channel.`},{type:`h2`,text:`Conversion paths should match how ready the visitor is`},{type:`p`,text:`Not every visitor is ready to book a consultation on the first visit. Some want to download a treatment guide, some want to ask a quick question, some want to see before-and-after examples first. A site with a single conversion path, book now, or nothing, forces visitors who are not ready yet to leave with no way to stay in touch. Offering a lower-commitment next step captures interest that would otherwise be lost.`},{type:`callout`,title:`The human handoff is the part that gets skipped`,text:`Automation should make the handoff to your clinical or aesthetic team smoother, not replace it. The goal is a warm, qualified lead arriving in front of a real person, with the context already gathered, not a chatbot pretending to be your provider.`},{type:`h2`,text:`Search visibility determines whether any of this matters`},{type:`p`,text:`A well-built booking experience is only valuable if prospective patients can find it. That means clear service pages structured around how people actually search, for a specific treatment plus their city, not just your practice name, along with technical basics like fast load times and mobile usability that search engines weigh heavily for local health-related queries.`},{type:`p`,text:`The practices that win the most new-patient volume over time are rarely the ones with the flashiest website. They are the ones where every piece, design, booking flow, education, follow-up, and visibility, is working together as one system rather than existing as separate, disconnected projects.`}],faqs:[{q:`Does a healthcare or aesthetic website need online booking to be effective?`,a:`It needs some way to request an appointment in under a minute without requiring a phone call during business hours. A full self
22-serve calendar helps, but a fast, simple request form with a quick confirmed response can work well too.`},{q:`How much should a practice website say about pricing?`,a:`Enough to filter out mismatched inquiries. A price range or starting investment, paired with what influences the final cost, tends to produce better-qualified consultations than omitting pricing entirely.`},{q:`Can automation handle sensitive patient questions?`,a:`Automation should handle logistics: scheduling, basic service questions, and initial qualification. Clinical judgment and sensitive conversations should always be handed to a qualified team member.`}],sources:[],relatedSlugs:[`what-makes-a-service-business-website-high-converting`,`ai-receptionists-vs-traditional-front-desk`],relatedService:{label:`AI Front Desk`,path:`/ai-front-desk`},relatedIndustry:{label:`Healthcare and Aesthetics`,path:`/industries/healthcare-aesthetics`},primaryCta:{label:`Plan My Practice System`,href:Y},canonicalPath:`/insights/healthcare-aesthetics`,index:!1,featured:!1,status:`published`}),$.push({slug:`legal-services`,title:`How Law Firms Can Build a Faster, More Credible Digital Intake Experience`,shortTitle:`Faster Legal Intake`,metaTitle:`How Law Firms Can Build a Faster, More Credible Digital Intake`,metaDescription:`Speed to response, practice area clarity, and structured intake determine which firm a prospective client retains. Here is how to build that experience.`,excerpt:`The firm that responds first and explains itself most clearly usually wins the retention, not the firm with the most experience. Here is how to build intake that reflects that.`,answer:`Law firms win more of the right cases when their site responds to an inquiry within minutes, states practice areas in language a layperson uses, sets honest expectations about consultations, and routes each matter to the right attorney automatically. Credibility and speed work together: a slow, vague intake process undoes even strong legal reputations.`,author:nw,authorCredential:rw,datePublished:`2026-07-13`,category:`industry-guides`,industries:[`legal-services`],services:[`revenue-operations`,`high-performance-websites`],readingMinutes:10,coverImage:RC,coverAlt:`Smartphone resting face down beside a coffee cup on a worn cafe table`,body:[{type:`p`,text:`Picture someone searching for a lawyer on a Tuesday night. They have a real problem, a lease dispute, a custody question, an injury from a car accident, and they are not browsing casually. Within the hour they will likely have submitted a contact form or made a call to three or four firms. The one that responds first, explains what happens next, and sounds credible while doing it usually gets the consultation. Legal skill decides the case. Intake decides who gets the chance to take it.`},{type:`h2`,text:`Speed to response is the single biggest lever most firms ignore`},{type:`p`,text:`Many firm websites route every inquiry into a general inbox that gets checked once or twice a day. That delay is invisible to the firm and enormous to the prospective client, who has already moved on to whoever answered first. Firms do not need an in-house call center to fix this. They need a system that acknowledges every inquiry within minutes, gathers the basic facts of the matter, and gets it in front of the right person quickly.`},{type:`h2`,text:`Practice area clarity replaces confusion with confidence`},{type:`p`,text:`Prospective clients rarely know the legal term for their situation. Someone searching for help after a workplace injury may not think to search personal injury law. Firms that write their practice area pages around the client's actual situation, what happened, what they are worried about, what usually happens next, convert far better than firms that list practice areas as a bare menu of legal terms.`},{type:`h3`,text:`A practice area page that does its job usually includes`},{type:`ul`,items:[`A plain-language description of the kinds of situations the firm handles`,`What a first consultation covers and how long it typically takes`,`Whether the consultation is free and what happens if the firm cannot take the case`,`A visible, fast way to start the conversation`]},{type:`h2`,text:`Set consultation expectations honestly`},{type:`p`,text:`Vague language like reach out for a free consultation without stating format, length, or next steps creates hesitation. Clients want to know: will this be a phone call or in person, how long will it take, what should they bring, and what happens if the firm decides the case is not a fit. Clarity here reduces no-shows and produces better-prepared conversations.`},{type:`h2`,text:`Respect the ethical limits of intake automation`},{type:`p`,text:`Automated intake can and should gather facts: what happened, when, where, and what the prospective client is hoping to achieve. It should never offer legal advice, predict outcomes, or create an attorney-client relationship before a qualified attorney has reviewed the matter. The line is simple: automation handles logistics and information gathering, attorneys handle judgment.`},{type:`callout`,title:`Where firms get this wrong`,text:`Some firms try to make intake sound like a real conversation with an attorney to build trust faster. That approach creates confusion about who the client is actually speaking with and risks misrepresenting the relationship. Transparency about what stage of the process the client is in works better and holds up over time.`},{type:`h2`,text:`Structure the intake form around routing, not paperwork`},{type:`p`,text:`A ten-field intake form filters out real prospective clients before they finish it. The initial form should collect only what is needed to route the matter correctly: the type of legal issue, a short description, timeline, and contact information. Deeper intake, retainer agreements, detailed history, can happen after a human has confirmed the firm can help.`},{type:`h2`,text:`Authority signals still matter, even with fast intake`},{type:`p`,text:`Speed does not replace credibility, it works alongside it. Attorney bios with real case history (described generally, without confidential details), bar admissions, published results where ethically permitted, and client reviews all give a prospective client reasons to trust the firm enough to submit their information in the first place.`},{type:`h2`,text:`Follow-up determines whether a lead becomes a client`},{type:`p`,text:`Many firms respond quickly to the first message and then go silent if the prospective client does not immediately reply. People considering legal action are often overwhelmed, and a short, respectful follow-up sequence, not aggressive, not repeated daily, meaningfully increases the number of qualified inquiries that turn into signed clients.`},{type:`h2`,text:`Search visibility decides who shows up to compete for the case`},{type:`p`,text:`Local search results for legal queries are dominated by firms with clear, well-structured practice area content and consistent citations across legal directories and Google Business Profile. A firm with strong intake but weak visibility never gets the volume of inquiries needed to prove it. Both pieces need to work together.`},{type:`p`,text:`None of this replaces legal skill or courtroom results. It determines whether the firm with that skill is the one a prospective client actually reaches, and reaches quickly enough to matter.`}],faqs:[{q:`Can a law firm use automation for intake without creating an ethics problem?`,a:`Yes, as long as automation is limited to gathering facts and scheduling, and any language that could be read as legal advice or a promise of representation is reviewed by counsel before it goes live.`},{q:`How fast should a law firm respond to a new inquiry?`,a:`As close to immediately as possible. An acknowledgment within minutes, even before an attorney reviews the matter, keeps the prospective client from mov
22ing to the next firm on their list.`},{q:`Should practice area pages target legal terms or plain language?`,a:`Both, but plain language should come first. Prospective clients search using their situation, not legal terminology, so pages should open with the situation and introduce the legal term afterward.`}],sources:[],relatedSlugs:[`where-service-businesses-lose-leads-after-the-first-inquiry`,`speed-to-lead-determines-revenue`],relatedService:{label:`Revenue Operations`,path:`/revenue-operations`},relatedIndustry:{label:`Legal Services`,path:`/industries/legal-services`},primaryCta:{label:`Plan My Intake System`,href:Y},canonicalPath:`/insights/legal-services`,index:!1,featured:!1,status:`published`}),$.push({slug:`home-services`,title:`The Revenue Journey Home-Service Companies Need When the Team Is in the Field`,shortTitle:`Revenue Journey for Home Services`,metaTitle:`The Revenue Journey Home-Service Companies Need in the Field`,metaDescription:`Missed calls, slow estimate follow-up, and weak service-area qualification cost home-service companies real jobs. Here is the revenue journey that fixes it.`,excerpt:`When your team is on a roof or under a house, the phone still has to get answered. Here is the journey that keeps jobs from slipping away while your crew is in the field.`,answer:`Home-service companies lose the most revenue in the gap between a missed call and a follow-up that never happens. A working revenue journey answers every inquiry immediately, qualifies it by job type and service area, offers a real appointment time, and follows up automatically until the homeowner books or declines, all without pulling a technician off a job to do it.`,author:nw,authorCredential:rw,datePublished:`2026-07-20`,category:`industry-guides`,industries:[`home-services`],services:[`ai-front-desk`,`revenue-operations`],readingMinutes:10,coverImage:BC,coverAlt:`Work van cab with a phone and clipboard left on the passenger seat`,body:[{type:`p`,text:`A home-service business runs on a strange contradiction. The moment a customer needs you most, a leak, a broken unit, a storm-damaged roof, is exactly when your team is least available to answer the phone, because they are out doing the work that earned the last call. Understanding the full revenue journey, not just the phone call, is what separates companies that grow steadily from companies that feel like they are always chasing the next lead.`},{type:`h2`,text:`Step one: the call has to be answered, not just recorded`},{type:`p`,text:`Voicemail is not a neutral option for a homeowner with an urgent problem. Most will simply call the next company on their list rather than wait for a callback. The first fix is not a bigger office staff, it is making sure every call gets a live, helpful response, whether that is a person or a well-built AI system that can answer questions and take down the job details accurately.`},{type:`h2`,text:`Step two: qualify by job type and service area before anyone drives out`},{type:`p`,text:`Not every inquiry is a fit. A company that services three counties does not want a technician's afternoon eaten by a call twenty miles outside their range, and a plumber does not want an HVAC estimate on the calendar by mistake. Capturing job type, urgency, and location at the point of first contact means the estimate that gets booked is one your team can actually take.`},{type:`h3`,text:`What good qualification captures`},{type:`ul`,items:[`What kind of work is needed, described in the homeowner's own words`,`Urgency: is this an emergency or a scheduled project`,`Service address, to confirm the job is in range before anyone commits time`,`The best way and time to reach the homeowner back`]},{type:`h2`,text:`Step three: scheduling has to happen in the same conversation`},{type:`p`,text:`Every extra step between interest and a confirmed appointment is a chance for the homeowner to book with a competitor instead. Offering real appointment windows during the first conversation, rather than promising a callback to schedule later, closes that gap and gives the homeowner something concrete before they hang up.`},{type:`h2`,text:`Step four: automated follow-up recovers jobs that would otherwise disappear`},{type:`p`,text:`Not every estimate request converts on the first contact. Homeowners get busy, compare multiple quotes, or simply forget to call back. A short, well-timed follow-up sequence, a text the next day, a call a few days later, catches a meaningful share of interest that a company relying purely on manual callbacks would otherwise lose entirely.`},{type:`callout`,title:`Storm and peak-season surges test the system hardest`,text:`Call volume during a storm or heat wave can multiply overnight, exactly when your crews are already stretched thin. This is when an always-on answering layer earns its keep the most, because it is the difference between capturing a surge in demand and watching it go to whichever competitor could pick up.`},{type:`h2`,text:`Local SEO decides who gets found before any of this matters`},{type:`p`,text:`Homeowners overwhelmingly search by service and location, roof repair near me, emergency plumber in a specific city, rather than by company name. Showing up in those results depen
22ds on a well-structured Google Business Profile, service pages organized by both trade and service area, and consistent business information across directories. A great follow-up system cannot help a company nobody can find.`},{type:`h2`,text:`Reviews build the trust a stranger needs to let you into their home`},{type:`p`,text:`Home-service work is personal: someone is inviting a technician into their house or onto their property. Recent, specific reviews reduce that hesitation more than almost any other page element. Companies that build review collection into their post-job process, rather than hoping satisfied customers remember to leave one, build this advantage steadily over time.`},{type:`h2`,text:`Mobile experience is not optional, it is the primary experience`},{type:`p`,text:`Most home-service searches happen on a phone, often standing in the affected room. A site that loads slowly, requires zooming to read, or buries the phone number is asking a frustrated homeowner to work harder than they are willing to. Fast load times, a visible call button, and a short estimate request form built for a small screen carry more weight for this industry than almost any other design decision.`},{type:`p`,text:`Put together, these steps form a journey rather than a single fix: found, answered, qualified, scheduled, followed up, and reviewed. Companies that treat each step as connected, instead of solving one piece in isolation, are the ones that keep growing without needing a bigger ad budget every quarter.`}],faqs:[{q:`Do home-service companies need 24/7 phone coverage?`,a:`Not necessarily a live person around the clock, but some way to respond immediately at any hour, since emergency inquiries do not wait for business hours and often go to whichever company answers first.`},{q:`How much information should an estimate request form ask for?`,a:`Enough to qualify the job: type of work, urgency, and location. Anything more detailed can wait until a person confirms the job is a fit, since long forms discourage completion.`},{q:`What is the fastest way to improve local search visibility for a home-service company?`,a:`A complete, accurate, and regularly updated Google Business Profile paired with service-area pages that reflect how customers actually search tends to produce the fastest visible improvement.`}],sources:[],relatedSlugs:[`missed-calls-cost-contractors-thousands`,`ai-receptionists-vs-traditional-front-desk`],relatedService:{label:`AI Front Desk`,path:`/ai-front-desk`},relatedIndustry:{label:`Home Services`,path:`/industries/home-services`},primaryCta:{label:`Plan My Service System`,href:Y},canonicalPath:`/insights/home-services`,index:!1,featured:!1,status:`published`}),$.push({slug:`beauty-wellness`,title:`How Beauty and Wellness Businesses Turn Website Visits Into Booked and Returning Clients`,shortTitle:`Booked and Returning Clients`,metaTitle:`How Beauty and Wellness Businesses Turn Visits Into Bookings`,metaDescription:`Service selection, trust, and rebooking determine whether a beauty or wellness website fills the chair once or keeps it filled.`,excerpt:`Getting a first booking is only half the job. Here is how the website should carry a client from first visit through rebooking.`,answer:`Beauty and wellness businesses convert best when the website makes service selection simple, booking available at any hour, and trust visible through real imagery and reviews, then keeps working after the appointment with reminders and rebooking prompts so the first visit is not the last one.`,author:nw,authorCredential:rw,datePublished:`2026-07-08`,category:`industry-guides`,industries:[`beauty-wellness`],services:[`high-performance-websites`,`revenue-operations`],readingMinutes:9,coverImage:zC,coverAlt:`Empty beauty and wellness treatment room with a folded towel on the chair`,body:[{type:`p`,text:`A salon, spa, or wellness studio lives or dies on a calendar that stays full without constant manual chasing. The website's job is bigger than looking beautiful, though that matters here more than in most industries. It has to help a stranger pick the right service, book it without friction, and want to come back.`},{type:`h2`,text:`Service selection should feel like a conversation, not a menu`},{type:`p`,text:`Long, undifferentiated service lists ask visitors to already know what they want. Grouping services by outcome, relaxation, a specific skin concern, hair goals, and describing what each involves in plain terms helps someone unfamiliar with the industry's vocabulary choose confidently.`},{type:`h2`,text:`Booking has to work at nine at night`},{type:`p`,text:`Most beauty and wellness decisions happen outside business hours, scrolling before bed, deciding after a stressful day. A booking system that only works when someone can call during the day loses that decision window entirely. Live availability and instant confirmation convert far more of that after-hours intent.`},{type:`h2`,text:`Trust is carried by real imagery, not stock photography`},{type:`p`,text:`Clients are choosing who touches their skin, hair, or body. Photos of the actual space, actual team, and, with consent, actual results build far more confidence than polished stock imagery that could belong to any business in any city.`},{type:`h3`,text:`Elements that build trust fastest`},{type:`ul`,items:[`Real photography of the space and providers`,`Specific credentials or training behind each service`,`Clear, current pricing or price ranges`,`Recent reviews visible near the relevant service, not just on a separate page`]},{type:`h2`,text:`FAQs remove hesitation before it becomes a lost booking`},{type:`p`,text:`What should I expect during my first visit, how long does it take, does it hurt, what should I do before or after. Addressing these directly on the service page, rather than making a visitor call to ask, removes the last bit of friction before booking.`},{type:`h2`,text:`Reminders protect the appointment you already won`},{type:`p`,text:`No-shows and late cancellations cost beauty and wellness businesses far more than most owners track closely. Automated reminders sent a day and a few hours before the appointment reduce this meaningfully, and they cost nothing compared to an empty chair.`},{type:`h2`,text:`Rebooking is where recurring revenue actually comes from`},{type:`p`,text:`A single booked appointment is a good outcome. A client who rebooks every four to six weeks is the actual business model. Prompting rebooking at checkout, and following up with a gentle reminder as the next natural appointment window approaches, turns one-time visitors into a recurring client base without relying on the client to remember on their own.`},{type:`callout`,title:`Reviews compound faster in this industry than most`,text:`Because beauty and wellness decisions are visual and personal, prospective clients read reviews unusually closely. A steady stream of recent, specific reviews, not just a high star average, is one of the most efficient investments a business in this space can make.`},{type:`h2`,text:`Local search still decides who gets discovered first`},{type:`p`,text:`Searches like the service plus a neighborhood or city name drive a large share of new client discovery. A complete, active Google Business Profile alongside service pages structured around how people actually search puts a business in front of demand that already exists nearby.`},{type:`p`,text:`None of these pieces work in isolation. A beautifully designed site with no easy booking loses the visit. Easy booking with no rebooking prompt loses the recurring revenue. The businesses that grow steadily treat the whole journey, discovery through rebooking, as one connected system.`}],faqs:[{q:`Should a beauty or wellness business allow online booking for every service?`,a:`Where possible, yes. For services requiring a consultation first, a simple c
22onsultation request with fast confirmation achieves the same effect without offering a slot the provider cannot commit to.`},{q:`How often should rebooking reminders go out?`,a:`Timed to the client's typical service interval, sent a few days before the natural rebooking window, rather than on a generic fixed schedule that ignores what service they had.`},{q:`Do reviews matter more for beauty and wellness than other industries?`,a:`They tend to carry outsized weight because the decision is personal and visual. Recent, specific reviews near the relevant service page usually outperform a general reviews page.`}],sources:[],relatedSlugs:[`reputation-impacts-booking-rates`,`what-makes-a-service-business-website-high-converting`],relatedService:{label:`High-Performance Websites`,path:`/high-performance-websites`},relatedIndustry:{label:`Beauty and Wellness`,path:`/industries/beauty-wellness`},primaryCta:{label:`Plan My Booking System`,href:Y},canonicalPath:`/insights/beauty-wellness`,index:!1,featured:!1,status:`published`}),$.push({slug:`rental-companies`,title:`What a High-Converting Rental Company Website Must Help Customers Do`,shortTitle:`High-Converting Rental Websites`,metaTitle:`What a High-Converting Rental Company Website Must Do`,metaDescription:`Availability, pricing, delivery area, and follow-up are the four questions every rental customer has. Here is how the website should answer them.`,excerpt:`Every rental inquiry starts with the same four questions. Here is how the website should answer them before the phone even rings.`,answer:`A rental company website converts best when it lets a visitor find the right product, understand how availability and delivery work, request a quote with real dates, and get a fast follow-up, all without requiring a phone call just to learn whether something is possible.`,author:nw,authorCredential:rw,datePublished:`2026-07-15`,category:`industry-guides`,industries:[`rental-companies`],services:[`high-performance-websites`,`revenue-operations`],readingMinutes:9,coverImage:LC,coverAlt:`Empty office reception counter with a desk phone handset left off the hook`,body:[{type:`p`,text:`Rental customers, whether they are planning an event, running a job site, or outfitting a short-term project, tend to arrive with the same handful of questions: what do you have, is it available on my dates, what does it cost, and can you deliver where I need it. A rental website earns the inquiry by answering these plainly instead of forcing a phone call to find out.`},{type:`h2`,text:`Help customers find the right product without guesswork`},{type:`p`,text:`Rental catalogs often mirror a warehouse inventory list rather than how a customer actually thinks about their need. Organizing by use case, a wedding, a construction phase, a home renovation, alongside the standard category view helps customers unfamiliar with your inventory choose confidently instead of guessing at model names.`},{type:`h2`,text:`Explain how availability actually works`},{type:`p`,text:`Customers assume rental inventory works like retail stock, available until it's not. Explaining plainly how far in advance to book, how availability is confirmed, and what happens with high-demand items during peak seasons sets expectations and reduces frustrated calls asking the same question repeatedly.`},{type:`h2`,text:`Pricing needs a starting point, even if it varies`},{type:`p`,text:`Rental pricing is often quote-dependent, but a total absence of pricing information pushes cost-conscious customers to a competitor who at least shows a range. A starting price, a typical range, or a clear explanation of what drives the final quote keeps a hesitant visitor engaged long enough to ask.`},{type:`h3`,text:`A quote request should collect`},{type:`ul`,items:[`The specific product or category of interest`,`Start and end dates or the rental window`,`Delivery address or pickup preference`,`Quantity, if relevant to the product`]},{type:`h2`,text:`Confirming delivery area early avoids wasted conversations`},{type:`p`,text:`Nothing frustrates a customer more than completing a detailed quote request only to learn their location is outside the service area. Making delivery zones clear upfront, ideally through a simple address check, saves both the customer's time and 
22your team's.`},{type:`h2`,text:`Date selection should be built into the request, not left to a phone call`},{type:`p`,text:`A calendar-style date picker embedded in the quote form, even if it does not show live inventory, signals that the business understands rental logistics and removes an unnecessary back-and-forth email or call just to establish the dates.`},{type:`h2`,text:`Follow-up turns a quote request into a booked order`},{type:`p`,text:`Quote requests often arrive well before the actual rental date, which means the request can sit and go cold if nobody follows up. A short, automated follow-up sequence, confirming receipt immediately and checking in as the date approaches, keeps the request warm until it becomes a confirmed booking.`},{type:`callout`,title:`Trust matters even for equipment, not just services`,text:`Customers renting expensive or specialized equipment want reassurance about condition, maintenance, and what happens if something goes wrong. Clear policies and visible reviews reduce hesitation the same way they do for service businesses.`},{type:`h2`,text:`Local discoverability decides who gets the request in the first place`},{type:`p`,text:`Rental searches are almost always local and time-sensitive: a category plus a city or region. A well-optimized Google Business Profile and location-specific pages put a rental company in front of customers who are actively planning something right now, not researching for later.`},{type:`p`,text:`Put together, these pieces turn a rental website from a static catalog into a functioning intake system, one that answers the four core questions before a customer ever has to ask them out loud.`}],faqs:[{q:`Should a rental company show exact prices online?`,a:`A starting price or typical range is usually enough to keep cost-conscious visitors engaged, even if the final quote depends on duration, delivery distance, or specific configuration.`},{q:`How far in advance should customers be encouraged to request a quote?`,a:`As early as the site can reasonably encourage, particularly for high-demand items during peak seasons, since a clear explanation of lead times helps set expectations and reduces last-minute disappointment.`},{q:`Does a rental company need live inventory availability on the website?`,a:`It helps but is not required. A clear quote request process with fast, honest follow-up on availability can perform nearly as well as a live system, especially for smaller inventories.`}],sources:[],relatedSlugs:[`what-makes-a-service-business-website-high-converting`,`where-service-businesses-lose-leads-after-the-first-inquiry`],relatedService:{label:`Revenue Operations`,path:`/revenue-operations`},relatedIndustry:{label:`Rental Companies`,path:`/industries/rental-companies`},primaryCta:{label:`See My Rental Revenue Opportunities`,href:Y},canonicalPath:`/insights/rental-companies`,index:!1,featured:!1,status:`published`}),$.push({slug:`anvil-rentals-web-presence`,title:`Anvil Rentals Grew on Word of Mouth. Now It Has a Web Presence to Match.`,shortTitle:`Anvil Rentals Case Study`,metaTitle:`Anvil Rentals Case Study: A Web Presence Built to Be Found`,metaDescription:`Anvil Rentals built a business on referrals. As it grew, it needed to show up for prospects who never heard the name on a jobsite. Here is what Cellara built.`,excerpt:`Anvil Rentals built a business on referrals. As it grew, it needed a way to show up for prospects who had never heard the name on a jobsite. Here is what Cellara built, and why it can actually be found.`,answer:`Anvil Rentals rents dual-climate break trailers and cube units to crews working in and around industrial plants. Cellara built the company a web presence that puts all three rental models, their real specs, and a clear path to a phone call up front, and rendered the full content server-side so search engines and AI assistants can actually read and recommend the site.`,author:`Cellara Growth Co`,authorCredential:`Revenue growth systems for service businesses`,datePublished:`2026-08-02`,dateModified:`2026-08-06`,category:`website-strategy`,industries:[`rental-companies`],services:[`high-performance-websites`,`search-visibility`],readingMinutes:6,coverImage:VC,coverAlt:`Climate-controlled break trailer staged on gravel beside an industrial plant at first light`,body:[{type:`p`,text:`For years, Anvil Rentals didn't need a website. The phone rang because the work did the talking. A crew that spent a hot shift inside one of their climate-controlled trailers would mention it to the next crew, and that was the whole sales department. One good rental led to the next one.`},{type:`p`,text:`That's a great way to start a company. It's a rough way to grow one.`},{type:`p`,text:`As Anvil took on more crews and bigger jobs, the math started working against them. More and more of the people who needed exactly what Anvil offered had never heard the name from a buddy on site. A plant coordinator lining up units for a turnaround. A contractor Anvil wanted to pitch directly instead of waiting around for a referral. Someone who did get the referral but wanted to size the company up before calling. All of them start in the same spot now, which is a search bar. And when they went looking for Anvil, there wasn't much waiting for them.`},{type:`p`,text:`That's the gap Anvil hired us to close.`},{type:`h2`,text:`What Anvil actually does`},{type:`p`,text:`Anvil rents dual-climate trailers and cube units to crews working in and around industrial plants. The units cool in the summer and heat in the winter, so a shutdown crew has somewhere real to take a break, eat lunch, hold a quick meeting, or just get out of the weather for ten minutes. There are three models: a standard 16-foot trailer, a lunchroom setup with microwaves and seating, and a compact cube unit that can be lifted onto an elevated structure when a normal trailer won't fit.`},{type:`p`,text:`Their buyers are practical people making fast calls against real deadlines. They don't want a brochure. They want to know what's available, how many people it holds, what it needs for power, and how soon it can be on their site.`},{type:`h2`,text:`What we built`},{type:`p`,text:`We built Anvil a web presence that answers those questions before anyone has to ask.`},{type:`p`,text:`The site puts all three rental models right up front, each with its real specs, the jobs it fits, and a direct way to ask about it. In this line of work, that kind of plainness is the pitch. A contractor trusts a company that tells them the weight, the capacity, and the power requirements out in the open a lot more than one that makes them call just to learn the basics.`},{type:`p`,text:`Everything on the page steers toward a single action, which is a phone call. Industrial rentals don't close in a shopping cart. They close when somebody talks through dates, placement, and site conditions with the Anvil team. So the site was never meant to replace that call. It's there to make sure the person calling already knows what they want and already knows they're a fit. We even spelled out what to have handy before dialing, so the first conversation actually goe
22s somewhere.`},{type:`h2`,text:`The part you can't see in a screenshot`},{type:`p`,text:`This is the piece most people never check, and it's the one we care about most.`},{type:`p`,text:`A site can look completely finished and still be invisible to the tools people now use to find a vendor. Plenty of websites, especially the ones put together fast, only build their content inside the visitor's browser. A person looking at the page sees everything. Most of the crawlers behind search results and AI assistants see nothing. As of 2026, the engines running tools like ChatGPT and Perplexity don't execute the code that draws those pages. They read the plain version the server hands over, and if that version is blank, the site may as well not exist to them.`},{type:`p`,text:`We built Anvil's site so the full content sits in that plain version from the first byte. Every headline, every spec, every model. So when someone searches, or asks an AI which company rents climate-controlled trailers for industrial jobs, Anvil's site can actually be read and pointed to. For a business that runs on inbound calls, being findable where people actually search is a big part of why the site is worth having at all.`},{type:`callout`,title:`Methodology`,text:`Crawler behavior in this article was verified in August 2026 by requesting pages as the documented user agents for GPTBot, PerplexityBot, and ClaudeBot, then comparing the raw HTML response against the browser-rendered page. Each crawler's rendering behavior is documented by its operator in the sources listed below.`},{type:`h2`,text:`Where this goes next`},{type:`p`,text:`We'll be straight about where things stand. Right now we've built Anvil's web presence, and that's it. We haven't yet added the pieces that keep working after hours: catching missed calls, following up on their own, pulling in reviews, climbing in search over time. Those come next, and once they've had a chance to produce something worth reporting, we'll report the real numbers.`},{type:`p`,text:`But all of that sits on top of a foundation. If the foundation is vague, slow, or invisible, nothing you stack on it holds. Anvil has a foundation now. It's clear, it moves people toward a call, and it can be found. For a company that spent years growing on nothing but word of mouth, that's the piece that lets the next stretch of growth come from something steadier than luck and good timing.`},{type:`callout`,title:`Outgrew word of mouth too?`,text:`Cellara Growth Co builds websites for service businesses and wires them into the answering, follow-up, reputation, and search systems that turn a site into steady work. If your business outgrew word of mouth, book a strategy call and we will map what your foundation is missing.`}],faqs:[{q:`What does Anvil Rentals do?`,a:`Anvil Rentals provides dual-climate break trailers and cube units for crews working in and around industrial plants. The units cool in summer, heat in winter, and come in three models: a standard 16-foot trailer, a lunchroom configuration, and a compact cube unit that can be lifted onto elevated structures.`},{q:`Why does server-rendered content matter for a rental company's website?`,a:`The crawlers behind search results and AI assistants read the plain HTML a server hands over. If a site only builds its content in the visitor's browser, those tools see a blank page. Rendering the full content server-side means the site can be read, indexed, and recommended when someone searches or asks an AI for a vendor.`},{q:`Why did the site focus on driving phone calls instead of online booking?`,a:`Industrial rentals close when someone talks through dates, placement, and site conditions with the rental team, not in a shopping cart. The site's job is to make sure the person calling already knows the specs, knows they are a fit, and has the right details ready so the first conversation goes somewhere.`}],sources:[{label:`Anvil Rentals (the finished build referenced in this article)`,url:`https://www.anvilrentals.com`},{label:`OpenAI: GPTBot crawler documentation`,url:`https://platform.openai.com/docs/bots`},{label:`Perplexity: PerplexityBot crawler documentation`,url:`https://docs.perplexity.ai/guides/bots`},{label:`Google Search Central: Understand the JavaScript SEO basics`,url:`https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics`}],relatedSlugs:[`rental-companies`],relatedService:{label:`High Performance Websites`,path:`/high-performance-websites`},relatedIndustry:{label:`Rental Companies`,path:`/industries/rental-companies`},primaryCta:{label:`Book a Strategy Call`,href:Y},canonicalPath:`/insights/anvil-rentals-web-presence`,index:!0,featured:!0,status:`published`}),$.push({slug:`is-your-website-invisible-to-ai`,title:`Your Website Might Be Invisible to AI. Here's the 10-Second Test to Find Out.`,shortTitle:`The 10-Second AI Visibility Test`,metaTitle:`Is Your Website Invisible to AI? The 10-Second Test`,metaDescription:`Many websites look finished and are still invisible to ChatGPT and AI search. Run this ten-second view-source test to find out if yours is one of them.`,excerpt:`A lot of websites look finished and are still invisible to ChatGPT, Perplexity, and AI search. Here is a ten-second test any business owner can run to find out if theirs is one of them.`,answer:`To check whether AI tools can read your website, open the page, press Ctrl+U (Command+Option+U on a Mac) to view the raw page source, then press Ctrl+F and search for a sentence you can see on the page. If the sentence appears in the source, crawlers and AI assistants can read your content. If it does not, your site only builds its content in the browser and AI crawlers see a blank page. Use View Source, not Inspect, because Inspect shows the page after the browser has already assembled 
22it.`,author:`Cellara Growth Co`,authorCredential:`Revenue growth systems for service businesses`,datePublished:`2026-07-31`,dateModified:`2026-08-06`,category:`search-visibility`,industries:[],services:[`high-performance-websites`,`search-visibility`],readingMinutes:5,coverImage:HC,coverAlt:`Laptop with a dark, switched-off screen on a wooden desk beside a notebook`,body:[{type:`p`,text:`There's a decent chance your website is a blank page to ChatGPT.`},{type:`p`,text:`Not slow. Not badly ranked. Blank. As in, someone asks an AI assistant to recommend a company that does what you do, the tool goes and looks at your site, sees nothing, and moves on to a competitor it can actually read.`},{type:`p`,text:`You'd never know, because on your screen the site looks great. That's the trap. The version you see and the version a machine sees aren't always the same page, and plenty of business owners are paying for the first one while quietly losing work because of the second.`},{type:`p`,text:`The good news is you can check your own site in about ten seconds. No tools, no phone call to your web person. I'll show you how. First, why this happens at all.`},{type:`h2`,text:`Why a finished site can still be empty`},{type:`p`,text:`When you open a website, your browser does a lot of work you never see. A lot of modern sites, especially ones built fast on popular drag-and-drop and app builders, send your browser a mostly empty file and a pile of instructions, and your browser runs those instructions to draw the page. Text, images, buttons, all of it. It feels instant and it looks complete.`},{type:`p`,text:`The catch is that it only works because you have a browser doing the assembling. The crawlers that feed search engines and AI assistants mostly don't assemble anything. They ask for the page, they read whatever plain text comes back, and they leave. Google is the exception that learned to run the code. The AI crawlers, as of 2026, have not. GPTBot, the one behind ChatGPT. PerplexityBot. The crawler Anthropic uses for Claude. They grab the raw file, and if that file is basically empty, that's what they keep. There's no second attempt.`},{type:`p`,text:`So you can have a beautiful, working, fully loaded website that reads like a blank sheet of paper to every AI tool your customers are starting to lean on.`},{type:`h2`,text:`The ten-second test`},{type:`p`,text:`You don't have to take my word for any of this. You can look at exactly what a crawler sees.`},{type:`ol`,items:[`Open your website in a normal browser tab.`,`View the raw source. On Windows, press Ctrl and U together. On a Mac, press Command, Option, and U. A new tab opens full of code. You don't need to understand a word of it.`,`Hit Find (Ctrl+F, or Command+F on a Mac) and type a sentence you can see on your actual page. Your main headline works great, or the first line on your homepage.`]},{type:`p`,text:`Now watch what happens.`},{type:`p`,text:`If that sentence shows up in the code, you pass. Your words live in the raw file, which means crawlers and AI tools can read them.`},{type:`p`,text:`If that sentence is nowhere to be found, there's your problem. The words are on your screen but not in the file. A person sees them. A machine doesn't.`},{type:`callout`,title:`Use View Source, not Inspect`,text:`Inspect and the developer tools panel show you the page after your browser already did the assembling, so they will show your text even on a site that fails. View Source shows the raw file before any of that happens. That difference is the entire test.`},{type:`callout`,title:`Methodology`,text:`This test was run against more than a dozen service business websites during Cellara site audits between May and August 2026. Crawler behavior cited here reflects documentation published by OpenAI, Perplexity, Anthropic, and Google Search Central, listed in the sources below and current as of August 2026.`},{type:`h2`,text:`What passing actually looks like`},{type:`p`,text:`We recently built the web presence for Anvil Rentals, a company that rents climate-controlled trailers to industrial 
22crews. Run the test on their site and every headline, every spec, every model description is sitting right there in the raw source. When somebody searches for that kind of service, or asks an AI which company to call, there's real content for the machine to find and repeat back.`},{type:`p`,text:`Now picture a site thrown together in a weekend, where the raw source is a few lines of code wrapped around an empty container. Same test, opposite result. One of those companies can turn up in an AI answer. The other one can't, no matter how good it is at the actual work.`},{type:`h2`,text:`Why this costs more than it used to`},{type:`p`,text:`For years the only worry with this kind of site was whether Google would figure it out. Google mostly did, so people stopped worrying. But the way customers find vendors is moving. More of them start by asking an AI instead of scrolling a page of blue links, and the AI hands back a short list of a few names. If you're not readable, you're not on that list. You're not even in the running, and you never learn why the phone stayed quiet.`},{type:`p`,text:`For a business that lives on being found, that's real lost work, and the worst kind, because you can't see it happening.`},{type:`h2`,text:`The fix, briefly`},{type:`p`,text:`If your site failed the test, the fix is real, but it isn't a button you flip in five minutes. The site has to serve its content as finished HTML instead of building it in the browser. Depending on how yours was made, that's either a setting your platform already offers, a small service that sits in front of your site and hands crawlers a finished copy, or a rebuild done properly. Skip the shortcuts people are pushing right now, like dropping one little text file on your site and calling it handled. That hides the problem instead of solving it.`},{type:`p`,text:`If you passed, good. Plenty of sites we test don't.`},{type:`callout`,title:`Built to pass from day one`,text:`At Cellara Growth Co we build sites for service businesses that pass this test from day one, because being found is the whole point of having a website. If yours didn't pass, that's a fixable problem, and it happens to be the kind we fix all the time.`}],faqs:[{q:`How do I test whether AI can read my website?`,a:`Open your site, press Ctrl+U on Windows or Command+Option+U on a Mac to view the raw page source, then press Ctrl+F or Command+F and search for a sentence visible on your page. If the sentence is in the source, AI crawlers can read it. If it is missing, they see an empty page.`},{q:`Why does Inspect show my text when View Source does not?`,a:`Inspect and developer tools display the page after your browser has run the site's code and assembled the content. View Source shows the raw file the server sent before any of that happens, which is what search and AI crawlers read.`},{q:`Do AI crawlers run JavaScript?`,a:`As of 2026, the major AI crawlers including GPTBot, PerplexityBot, and Anthropic's crawler read the raw HTML response and do not execute JavaScript to build the page. Google is the exception, since Googlebot renders pages, but AI assistants generally do not.`},{q:`How do you fix a website that fails the test?`,a:`The site has to deliver its content as finished HTML from the server instead of building it in the browser. That means enabling server-side rendering or prerendering if your platform supports it, putting a prerendering service in front of the site, or rebuilding it on a framework that renders server-side by default.`},{q:`Will an llms.txt file fix AI visibility?`,a:`No. Adding a text file does not change what a crawler reads when it requests your pages. If the page content is not in the HTML response, the underlying problem is still there.`}],sources:[{label:`OpenAI: GPTBot crawler documentation`,url:`https://platform.openai.com/docs/bots`},{label:`Perplexity: PerplexityBot crawler documentation`,url:`https://docs.perplexity.ai/guides/bots`},{label:`Anthropic: Does Anthropic crawl data from the web?`,url:`https://support.anthropic.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler`},{label:`Google Search Central: Understand the JavaScript SEO basics`,url:`https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics`}],relatedSlugs:[`anvil-rentals-web-presence`],relatedService:{label:`Search Visibility`,path:`/seo-geo`},relatedIndustry:{label:`Home Services`,path:`/industries/home-services`},primaryCta:{label:fS.primary.label,href:Y},canonicalPath:`/insights/is-your-website-invisible-to-ai`,index:!0,featured:!1,status:`published`}),$.push(Q({slug:`why-your-google-business-profile-outranks-your-website`,title:`Why Your Google Business Profile Outranks Your Own Website, and What to Do About It`,shortTitle:`When Your Profile Outranks Your Site`,metaTitle:`Why Your Google Business Profile Outranks Your Website`,metaDescription:`If your Google listing shows up before your website, your pages are not answering the searches your buyers actually type. Here is how to fix the order.`,excerpt:`For most service businesses, the listing does the ranking and the website does nothing. That is a structure problem, not a luck problem, and it is fixable in a week.`,answer:`A Google Business Profile usually outranks a service business website because the profile carries specific location, category, and review signals while the website offers broad brochure pages that match no particular search. The fix is structural
22: give every service and every service area its own page, answer the questions buyers type, and keep the profile and the site pointing at the same facts.`,datePublished:`2026-08-04`,dateModified:`2026-08-06`,category:`search-visibility`,industries:[`Home Services`,`Healthcare and Aesthetics`,`Legal Services`],services:[`Search Visibility`,`High Performance Websites`],body:[{type:`p`,text:`Search your business name and the service you sell. If the first result is your Google listing and your website shows up somewhere below it, or not at all, you are watching a structure problem play out in public.`},{type:`p`,text:`This is common, and it is not because Google dislikes your site. It is because your listing is specific and your website is not.`},{type:`h2`,text:`Why the listing wins`},{type:`p`,text:`A Google Business Profile states one category, one address, one service area, a phone number, hours, and a stack of reviews that keep refreshing. Every one of those is a specific, verifiable signal tied to a place.`},{type:`p`,text:`A typical service business website says something different. It has a home page that describes everything, a services page that lists eight offerings in a paragraph each, and an about page. Nothing on it matches the exact phrase a buyer types, so nothing on it competes.`},{type:`h2`,text:`What buyers actually type`},{type:`p`,text:`People do not search for your company. They search for the problem, the service, and the place. Emergency water heater replacement in a named suburb. Consultation for a specific treatment. A practice area plus a county.`},{type:`ul`,items:[`One page per service, named the way buyers name it`,`One page per service area you genuinely cover, with content unique to that area`,`Answers to the five questions your front desk gets asked most`,`Pricing structure, even a range, because the searches include cost`]},{type:`h2`,text:`The order this should run in`},{type:`ol`,items:[`List the ten searches a ready buyer would use to find what you sell`,`Map each one to a page that exists, or note that it does not`,`Build the missing pages with real, specific content, not thin copies`,`Match the name, category, hours, and phone number on your site to your Google listing exactly`,`Link your listing to the matching service page rather than only the home page`]},{type:`callout`,title:`The signal you are looking for`,text:`Within a few weeks of doing this properly, your own pages start appearing alongside the listing instead of behind it. The listing keeps its job. The site finally starts doing its own.`},{type:`callout`,title:`Methodology`,text:`These recommendations follow Google's published guidance on improving local rankings and its spam policies on doorway pages, combined with ranking patterns observed across Cellara audits of service business search results in 2025 and 2026. Primary sources are listed below.`},{type:`h2`,text:`What not to do`},{type:`p`,text:`Do not spin up twenty near-identical city pages with the town name swapped out. That pattern is recognized and discounted, and it makes the whole site look thinner. Build pages for the areas you actually serve, and give each one something true and specific to say.`}],faqs:[{q:`Why does my Google listing rank higher than my website?`,a:`The listing carries specific category, location, and review signals tied to one place, while most service business websites offer broad pages that do not match any particular search. Specific beats general.`},{q:`How many service pages should a service business have?`,a:`One for every service you want to be found for, written to answer that service's searches. A single combined services page cannot rank for eight different searches at once.`},{q:`Do location pages still work in 2026?`,a:`Yes, when each page contains genuinely different content about that area, such as the work you do there, response times, and local specifics. Duplicated pages with the city name swapped do not work and can hold the site back.`},{q:`Should my website information match my Google Business Profile?`,a:`Exactly. Name, phone number, hours, address, and service categories should match on both. Conflicting details weaken the connection between the two and make both harder to trust.`}],sources:[{label:`Google Business Profile Help: Tips to improve your local ranking on Google`,url:`https://support.google.com/business/answer/7091?hl=en`},{label:`Google Search Central: Spam policies for Google web search`,url:`https://developers.google.com/search/docs/essentials/spam-policies`},{label:`Whitespark: Local Search Ranking Factors (2025)`,url:`https://whitespark.ca/local-search-ranking-factors/`}],relatedSlugs:[`is-your-website-invisible-to-ai`],relatedService:{label:`Search Visibility`,path:`/seo-geo`},relatedIndustry:{label:`Home Services`,path:`/industries/home-services`}})),$.push(Q({slug:`secret-shop-your-own-business`,title:`Secret Shop Your Own Business: The 15-Minute Test That Shows How Many Customers You're Losing`,shortTitle:`Secret Shop Your Own Business`,metaTitle:`Secret Shop Your Own Business: A 15-Minute Test`,metaDescription:`You do not know what happens when a stranger tries to reach your business. Run this 15-minute test this week to see how many customers you are losing.`,excerpt:`Call your own line after hours, fill out your own form, send a cold text, then watch the clock. It is the most honest review your business will ever get.`,answer:`To secret shop your own business, contact it as a stranger would: call the main line after hours, submit your website contact form, and send a cold text. Record how long each reply takes, or whether one arrives at all. Anything slower than five minutes is costing you customers, because most buyers hire whoever responds first.`,datePublished:`2026-08-03`,dateModified:`2026-08-06`,category:`revenue-operations`,industries:[`Home Services`,`Healthcare and Aesthetics`,`Legal Services`,`Beauty and Wellness`],services:[`AI Front Desk`,`Revenue Operations`],sources:[{label:`Harvard Business Review: The Short Life of O
22nline Sales Leads (March 2011)`,url:`https://hbr.org/2011/03/the-short-life-of-online-sales-leads`},{label:`InsideSales.com, Kellogg School of Management, and MIT: Lead Response Management Study (2007)`,url:`https://www.leadresponsemanagement.org/lrm_study`}],relatedSlugs:[`is-your-website-invisible-to-ai`],relatedService:{label:`AI Front Desk`,path:`/ai-front-desk`},relatedIndustry:{label:`Home Services`,path:`/industries/home-services`},body:[{type:`p`,text:`Tonight, after you have closed up, do something you have probably never done. Call your own business from a number nobody there recognizes. Let it ring. Then go to your website and fill out your contact form like a stranger with a real problem. Send a text too, if you take them. Now put the phone down and start counting.`},{type:`p`,text:`What happens over the next few hours is the most honest review your business will ever get. Most owners have never once sat through it.`},{type:`p`,text:`You think you know how your business treats a new customer. You know how it looks when you are standing there. You know what your team tells you in the morning. You know what the dashboard says. None of that is what a stranger actually runs into at seven o'clock on a Tuesday, when they have got a problem and your name sitting in front of them. The only way to see that is to become the stranger.`},{type:`h2`,text:`Why the first few minutes decide everything`},{type:`p`,text:`When someone reaches out to you, they are almost never only reaching out to you. They found two or three names and you are one of them. So the race is not really about who is best. It is about who answers.`},{type:`p`,text:`The numbers on this are blunt. Roughly 78 percent of people end up hiring the first business that actually gets back to them, not the cheapest one and not the one with the most reviews. Get back to someone within five minutes instead of thirty and you are many times more likely to turn them into a real customer. And here is the opening: almost nobody does it. Only a tiny sliver of businesses respond that fast. That means the bar you have to clear is lower than you would guess, and the reward for clearing it is bigger than you would guess.`},{type:`p`,text:`The phone is where it is ugliest. A large share of calls to service businesses go unanswered, and once someone hangs up without reaching a live person, most of them never try you again. They just dial the next name. You never see it happen. There is no missed call alert for the customer you did not know was calling.`},{type:`h2`,text:`The test`},{type:`p`,text:`Run it once this week. Fifteen minutes of your time, a few hours of waiting. Use a phone and an email that nobody at your business will recognize, or hand the job to a friend and let them play the customer.`},{type:`ol`,items:[`Call after hours. Ring your main line in the evening or on a weekend. Notice whether anyone picks up, whether you land in a voicemail, and whether that voicemail sounds like a real business or a dead end. Do you get a call or text back in the morning? How long did it take?`,`Fill out your own form. Go to your website and send a real inquiry, the kind a nervous first timer would write. Then wait. Note the exact minute you hit send and the exact minute you hear back, if you hear back at all.`,`Send a cold text. If people can text you, text like a stranger would. See how long the reply takes and whether it reads like a person or a script.`,`Watch the clock, not the outcome. This is not about whether you eventually reply. It is about the size of the gap, because your customer is timing you too, even if they would never call it that.`]},{type:`p`,text:`Write down every time. Do not fix a thing yet. Just watch it happen.`},{type:`h2`,text:`How to read what you find`},{type:`p`,text:`Here is the plain version.`},{type:`p`,text:`If a real person answered the after hours call, or you got a genuine callback within a few minutes, you are already ahead of nearly everyone. If your form got a human reply in under five minutes, you are in rare air. Within the hour, you are doing fine. Past that, you are losing people, because the person who filled out your form filled out two others, and one of those shops called them back before dinner.`},{type:`p`,text:`And if the call died in a voicemail nobody returned, or the form dropped into an inbox no one checks, or the text just sat there, then you have just watched, live, exactly how customers slip out of your business. That empty result is not a fluke. It is what happens every day. You just do not usually get a seat to watch it.`},{type:`h2`,text:`What each of those gaps is actually worth`},{type:`p`,text:`Do the math on a single job. Take what one customer is worth to you, and n
22ot for one visit but for as long as they would normally stick around. Now be honest about how many inquiries a week you are either not catching or not answering fast enough. Even one lost job a week turns into a number most owners find hard to look at once it is written down. That is demand you already paid to create, walking straight to a competitor because nobody picked up.`},{type:`p`,text:`That is the part that stings. The lead was already yours. Somebody wanted you. They looked you up, they called or wrote, they raised their hand. The hard, expensive part, getting found, was already done. It fell apart in the last ten feet.`},{type:`h2`,text:`The fix is not to try harder`},{type:`p`,text:`You cannot beat this by promising yourself you will answer faster next time. You will still be on a job, in a meeting, asleep, or at dinner with your family when the next one comes in. It is not a discipline problem. It is a coverage problem, and coverage is something you build, not something you white knuckle.`},{type:`p`,text:`The businesses that pass this test rarely pass it on human effort. They have got something in place that answers the second a call gets missed, that replies to a form in seconds instead of hours, and that keeps following up so a quiet lead does not just sit there cooling off. It runs whether the owner is around or not, which is the entire point, because the customer never cared that you were busy.`},{type:`p`,text:`So run the test first. Get your real numbers. If they are better than you feared, great, that is one less thing to lie awake about. If they are not, at least you now know the exact spot where the money is getting out, and that is a problem with a fix.`},{type:`callout`,title:`After you run it`,text:`At Cellara Growth Co we build the systems that catch the missed calls, answer the forms, and chase down the follow ups you are dropping right now, so all the work of getting found actually turns into booked jobs. Run the test this week, then come tell us what it turned up.`}],faqs:[{q:`How do I secret shop my own business?`,a:`Contact it the way a stranger would. Call the main line after hours from a number nobody recognizes, submit your website contact form as a first time customer, and send a cold text if you accept them. Write down the minute you reached out and the minute you heard back, then compare the gaps.`},{q:`How fast should a business respond to a new lead?`,a:`Within five minutes. Roughly 78 percent of buyers hire the first business that gets back to them, and responding in five minutes rather than thirty multiplies your odds of turning that inquiry into a customer. Under an hour is acceptable. Past that you are usually the second call back.`},{q:`What happens when a service business misses a call?`,a:`Most callers do not try again. They move to the next name on the list, and the business never learns the call existed. There is no alert for a customer you did not know was trying to reach you, which is why missed calls stay invisible in the numbers.`},{q:`How much is a missed lead actually worth?`,a:`Multiply what one customer is worth over the whole time they stay with you by the number of inquiries you miss or answer late each week. Even one lost job per week compounds into a figure most owners find uncomfortable, and it is demand they already paid to create.`},{q:`Why does trying harder not fix slow response times?`,a:`Because inquiries arrive while you are on a job, in a meeting, asleep, or with your family. Response speed is a coverage problem, not a discipline problem. It gets solved with systems that answer missed calls, reply to forms instantly, and follow up on their own.`}]})),$.push(Q({slug:`spartan-judicial-campaign-infrastructure-build`,category:`client-work`,featured:!0,title:`Spartan Judicial: Building the Website and Operating Systems Behind a Judicial Campaign Firm`,shortTitle:`Spartan Judicial Build Story`,metaTitle:`Spartan Judicial Build Story | Revenue Systems for Service Businesses | Cellara`,metaDescription:`How Cellara Growth Co designed, developed, and connected the Spartan Judicial website, intake, CRM, and automation systems for a Harris County judicial campaign firm.`,excerpt:`Spartan Judicial needed a public presence and an operating system that could hold confidential candidate inquiries, route them correctly, and follow up without manual work. Here is what 
22Cellara built and how the system runs.`,answer:`Cellara Growth Co designed and developed the Spartan Judicial website and built the intake, CRM, and automation infrastructure behind it, including a confidential campaign assessment application, structured qualification fields, CRM pipeline routing, instant notification, and automated follow-up for a Harris County judicial campaign strategy firm.`,datePublished:`2026-08-28`,coverImage:UC,coverAlt:`The Spartan Judicial homepage headline and campaign assessment call to action shown in a desktop browser`,relatedService:{label:`High Performance Websites`,path:`/high-performance-websites`},relatedIndustry:{label:`Legal Services`,path:`/industries/legal-services`},sources:[{label:`Spartan Judicial`,url:`https://spartanjudicial.com`}],body:[{type:`p`,text:`Spartan Judicial is a campaign strategy management firm built for judicial candidates in Harris County, Texas. Cellara Growth Co designed and developed the firm's website and built the intake, CRM, and automation systems that run behind it.`},{type:`p`,text:`This is a build story, not a performance report. It describes what was designed, what was engineered, and how the system operates. Campaign outcomes belong to the candidates and the firm, and no result is published here that the client has not verified.`},{type:`h2`,text:`The Starting Situation`},{type:`p`,text:`Spartan Judicial was launching into a category that has historically run on name recognition, personal networks, and improvisation. The firm's positioning was the opposite of that. It sells disciplined infrastructure: fundraising systems, voter data, coalition strategy, and operational execution.`},{type:`p`,text:`That created a specific requirement. The public presence had to look and behave like the product being sold. A campaign firm cannot credibly promise structure to a sitting attorney running for the bench while operating from a template site and an inbox.`},{type:`p`,text:`Three constraints shaped the build from the first conversation.`},{type:`ul`,items:[`The audience is small, senior, and cautious. Judicial candidates, attorneys preparing to file, and campaign teams evaluate a firm quickly and privately.`,`Inquiries are confidential. A candidate who has not filed yet is disclosing intent, fundraising position, and timeline. That information cannot sit in a public form service or an unmanaged inbox.`,`Timing compresses. Filing deadlines and election calendars do not move, so a slow reply is not an inconvenience. It is a lost engagement.`]},{type:`h2`,text:`What Cellara Built`},{type:`p`,text:`The engagement covered custom design and development, the confidential application flow, CRM architecture, and the automation connecting them. Everything was built to be operated by a small team without a technical administrator.`},{type:`h3`,text:`Custom design and development`},{type:`p`,text:`The site was designed from a blank page. No theme, no page builder, no stock template layout. The visual language was chosen to read as institutional rather than promotional: restrained typography, a courthouse and marble palette, generous structure, and no decorative motion competing with the message.`},{type:`p`,text:`The homepage was engineered as a single decision path rather than a brochure. It opens with the positioning line, establishes the modern reality of judicial races, introduces the firm and its founder, then presents the operating model before asking for anything.`},{type:`image`,src:UC,alt:`Spartan Judicial homepage with the headline Dignity on the Bench, Discipline in the Field above a call to action for a complimentary assessment`,caption:`The homepage leads with positioning and a single next step, not a service list.`},{type:`h3`,text:`The three engine architecture`},{type:`p`,text:`Spartan Judicial organizes its work into three operating engines. The site was structured to match that model exactly, so the way the firm sells is the way the firm delivers.`},{type:`table`,caption:`How the site presents the Spartan Judicial operating model`,headers:[`Engine`,`Purpose`,`Representative scope`],rows:[[`The Revenue Engine`,`Fundraising discipline`,`Donor research and segmentation, CRM setup, call-time systems, donor briefs, contribution tracking`],[`The Message Engine`,`Consistent credible visibility`,`Candidate positioning, messaging pillars, content, paid digital, email and SMS sequences, rapid response`],[`The Coalition Engine`,`Trust and voter education`,`Coalition strategy, PAC and slate strategy, endorsements, voter universe planning, field and voter contact`]]},{type:`p`,text:`Below the engines, the site presents the full campaign architecture as a numbered inventory of twenty scope items and then narrows to three focused entry points: an Infrastru
22cture Audit, a Campaign Launch Stack, and a Fundraising Engine Setup. That sequence gives a candidate a way in at any stage without the firm discounting the full engagement.`},{type:`h3`,text:`Coalition architecture by court type`},{type:`p`,text:`Criminal, family, and civil court races require different message architecture and different voter education. Rather than flatten that into one generic pitch, the site carries a dedicated section for each court type so a candidate sees their own race described before they ever speak to the firm.`},{type:`h3`,text:`Mobile as a first class surface`},{type:`p`,text:`Candidates and campaign staff read on phones between hearings and events. The layout, type scale, tap targets, and application flow were built and tested for that context, not adapted to it afterward.`},{type:`image`,src:KC,alt:`The Spartan Judicial site rendered on a mobile phone viewport showing the headline and assessment call to action`,caption:`The same decision path holds on a phone, where most first visits happen.`},{type:`h2`,text:`The Confidential Application System`},{type:`p`,text:`The conversion point is not a contact form. It is a confidential campaign assessment application, and it was engineered to qualify while it captures.`},{type:`p`,text:`The application collects the fields the firm actually needs to evaluate a race before a call: candidate name, email, phone, county, target bench, filing status, current fundraising total, fundraising goal, campaign timeline, biggest campaign challenge, services needed, relationship to the campaign, and preferred follow-up method.`},{type:`p`,text:`Two things happen because of that design. The firm walks into the first conversation already knowing the shape of the race, and the applicant self-selects. A candidate who answers those questions honestly has already decided the race is serious.`},{type:`callout`,title:`Why qualification lives in the form`,text:`Every field in the application maps to a decision the firm has to make anyway: is this race winnable, is the timeline workable, is the fundraising position realistic, and which entry point fits. Asking on the form instead of on the call protects the calendar of a senior operator.`},{type:`p`,text:`Confidentiality is stated at the point of submission rather than buried in a policy page, because that is the moment the concern exists.`},{type:`h2`,text:`CRM and Automation Behind the Form`},{type:`p`,text:`The public site is the visible layer. The operating value sits in what happens after submission.`},{type:`ol`,items:[`The application is validated and processed server side, so campaign details never depend on an unprotected client-side integration.`,`A contact record is created with every qualification field mapped to its own structured field rather than dumped into a single notes blob.`,`The record enters a pipeline stage that reflects filing status and timeline, so an unfiled candidate eighteen months out is not worked the same way as a filed candidate inside six months.`,`Tags capture county, target bench, court type, and services needed, which makes segmented outreach possible later without rebuilding the data.`,`Instant notification reaches the firm so a complimentary assessment can be returned while the candidate is still deciding.`,`Automated follow-up sequences confirm receipt, restate confidentiality, and keep the conversation alive if the first attempt does not connect.`]},{type:`p`,text:`Source attribution is preserved on every submission, including landing page, referring source, and campaign parameters where available. When the firm runs paid digital for its own acquisition, it can see which channels produce serious applications rather than raw form volume.`},{type:`h3`,text:`Built for a small team to operate`},{type:`p`,text:`The system was handed over with the pipeline, fields, tags, notifications, and sequences already configured. No part of daily operation requires editing code, and no part of the intake path depends on someone remembering to check a shared inbox.`},{type:`h2`,text:`What Changed Operationally`},{type:`p`,text:`Before the build, a firm in this position handles inquiries the way most professional services firms do: an email arrives, it gets read when it gets read, details live in the thread, and follow-up depends on memory.`},{type:`p`,text:`After the build, the intake path is fixed. An application produces a structured record, a routed pipeline position, an immediate alert, and an automated confirmation. The firm's attention goes to strategy and call preparation instead of administration, which is the same discipline Spartan Judicial sells to its candidates.`},{type:`quote`,text:`Modern judicial campaigns are not won by visibility alone. They are won through disciplined infrastru
22cture, strategic messaging, and precise voter acquisition.`,attribution:`Spartan Judicial`},{type:`p`,text:`That is the standard the site had to meet. A firm selling infrastructure should be running on it.`},{type:`h2`,text:`Search and Answer Engine Foundations`},{type:`p`,text:`The site was built to be understood by search engines and AI answer engines, not decorated with keywords.`},{type:`ul`,items:[`Semantic structure with one clear heading hierarchy per page, so the operating model is machine readable.`,`Unique titles, meta descriptions, and self-referencing canonical URLs rather than a single shared set of tags.`,`Structured data that matches what is visible on the page, including organization and founder identity.`,`Plain declarative answers to the questions candidates actually ask, which is the format answer engines cite.`,`Fast rendering, compressed imagery, and no third-party bloat, because the audience often loads the site on cellular between hearings.`]},{type:`p`,text:`The firm's authority signals are stated on the site rather than implied. Founder Christopher Chambers is presented with his credentials and councils, and the geographic focus on Harris County is explicit, which is how both a voter-adjacent searcher and an AI model establish relevance.`},{type:`h2`,text:`What Is Being Measured`},{type:`p`,text:`Tracking was installed with the build so the firm can evaluate the system rather than guess at it.`},{type:`ul`,items:[`Application starts compared with completed submissions, which shows whether the qualification depth is helping or costing the firm.`,`Response time from submission to first contact, the metric that decides most competitive engagements.`,`Pipeline movement by filing status and timeline, so long-horizon candidates are nurtured rather than dropped.`,`Channel attribution on every application, separating referral, organic search, and paid acquisition.`,`Entry point demand across the audit, launch stack, and fundraising engine, which informs how the firm packages future work.`]},{type:`p`,text:`Performance figures will be published only when Spartan Judicial has verified them and agreed to share them, alongside the time period and how they were measured.`},{type:`h2`,text:`Why This Build Applies Beyond Campaigns`},{type:`p`,text:`A judicial campaign firm and a surgical practice have more in common than either would assume. Both sell high-consideration services to a small number of qualified people. Both lose more revenue to slow response and unstructured intake than to a shortage of interest.`},{type:`p`,text:`The pattern Cellara installed here is the same pattern that works in legal, medical, home services, and advisory firms.`},{type:`ol`,items:[`Position first, so the site argues one clear thing before it asks for anything.`,`Qualify at the form, so the calendar fills with the right conversations.`,`Structure the data, so every field is usable later instead of trapped in a message thread.`,`Route and follow up automatically, so speed does not depend on availability.`,`Measure the path, so the next decision is made from evidence.`]},{type:`callout`,title:`The Cellara standard`,text:`A website is not a brochure. It is the front end of a revenue system. If the site cannot capture, qualify, route, and follow up without a person watching it, the business is paying for demand it cannot hold.`},{type:`p`,text:`Cellara Growth Co designs and installs that system as one connected build: the site, the intake, the CRM architecture, the automation, and the measurement.`}],faqs:[{q:`What did Cellara Growth Co build for Spartan Judicial?`,a:`Cellara designed and developed the Spartan Judicial website and built the systems behind it, including the confidential campaign assessment application, structured qualification fields, CRM pipeline and tagging architecture, instant notification, automated follow-up sequences, source attribution, and measurement.`},{q:`Who is Spartan Judicial built for?`,a:`Spartan Judicial is a campaign strategy management firm for Republican judicial candidates in Harris County, Texas, including attorneys preparing to run for the bench, filed candidates, and campaign team
22s. The firm was founded by Christopher Chambers.`},{q:`Why does the site use a long application instead of a short contact form?`,a:`Because the firm needs to evaluate the race before the first call. County, target bench, filing status, fundraising position, and timeline all change how a campaign should be built. Collecting them at the form protects the firm's calendar and gives serious candidates a faster, better prepared first conversation.`},{q:`How is candidate information kept confidential?`,a:`Submissions are validated and processed server side rather than through an exposed client-side integration, records are stored in the firm's CRM rather than a shared inbox, and the confidentiality commitment is stated at the point of submission where the concern actually exists.`},{q:`Are campaign results published in this article?`,a:`No. This is a build story describing what was designed and engineered. Performance figures are published only after the client has verified them and agreed to share them, with the measurement period and method stated alongside the number.`},{q:`Can Cellara build this kind of system for a business outside of political campaigns?`,a:`Yes. The same architecture of positioning, qualifying intake, structured CRM data, automated routing and follow-up, and measurement is what Cellara installs for legal, medical and aesthetic, home services, and advisory firms.`}]})),$.push(Q({slug:`mc-eye-center-website-transformation`,category:`client-work`,title:`From Dated Wix Site to a Patient-Centered Digital Experience: The MC Eye Center & Optical Transformation`,shortTitle:`MC Eye Center Transformation`,metaTitle:`MC Eye Center Website Transformation`,metaDescription:`See how Cellara Growth Co transformed MC Eye Center & Optical's dated Wix website into a modern, patient-focused digital experience built for trust, discovery and conversion.`,excerpt:`MC Eye Center had the experience, services and patient relationships behind the business. What it did not have was a digital presence that adequately communicated them. Here is how the new experience was rebuilt around how patients actually search, evaluate and choose an eye care provider.`,answer:`Cellara Growth Co redesigned the website for MC Eye Center & Optical, an optometry and optical practice in Pasadena, Texas. The previous website was built on Wix with a basic information architecture. The redesigned experience organizes information around patient needs, services, provider trust, insurance and appointment pathways, with a technical SEO, local search and GEO readiness foundation.`,datePublished:`2026-08-26`,dateModified:`2026-08-26`,coverImage:YC,coverAlt:`Redesigned MC Eye Center and Optical homepage by Cellara Growth Co shown in a desktop browser`,industries:[`Healthcare`,`Optometry`],services:[`Strategy`,`Website Architecture`,`UX`,`Copywriting`,`Design`,`Development`,`Conversion`,`Technical SEO`,`Local SEO`,`GEO readiness`],relatedService:{label:`High Performance Websites`,path:`/high-performance-websites`},relatedIndustry:{label:`Healthcare & Aesthetics`,path:`/industries/healthcare-aesthetics`},relatedSlugs:[`spartan-judicial-campaign-infrastructure-build`,`healthcare-aesthetics`],sources:[{label:`MC Eye Center & Optical`,url:`https://www.mceyecenter.org/`}],body:[{type:`p`,text:`Client Work, Healthcare. MC Eye Center & Optical, Pasadena, Texas. Strategy, website, UX, SEO and GEO, conversion. Published August 26, 2026.`},{type:`p`,text:`MC Eye Center had the experience, services and patient relationships behind the business. What it did not have was a digital presence that adequately communicated them. Cellara rebuilt the experience around how today's patients search, evaluate and choose an eye care provider.`},{type:`h2`,text:`When the Business Has Outgrown the Website`},{type:`p`,text:`For an established business, an outdated website can create a strange disconnect.`},{type:`p`,text:`The quality of the business may have improved for years. Its expertise may have deepened. Its reputation may have grown. Its services may have expanded.`},{type:`p`,text:`But online, prospective customers are still meeting an older version of the company.`},{type:`quote`,text:`Prospective customers were meeting an older version of the business.`},{type:`p`,text:`That was the challenge facing MC Eye Center & Optical, an established optometry practice in Pasadena, Texas. Cellara Growth Co set out to change that.`},{type:`h2`,text:`The Starting Point: A Website That No Longer Reflected the Practice`},{type:`p`,text:`MC Eye Center's previous website was built on Wix. The experience had a relatively basic information architecture, with a primary navigation that consisted largely of Home, Gallery, About Us and Contact Us.`},{type:`p`,text:`The site provided an online presence, but it did not fully communicate the breadth of the practice or guide prospective patients through a modern healthcare decision journey. The previous homepage also placed significant emphasis on the practice's eyewear offering, including its Ken Okuyama collection.`},{type:`p`,text:`The problem was not the platform. Plenty of good businesses run on Wix. The problem was that the existing implementation and architecture no longer represented the practice adequately. The practice had outgrown the website that represented it.`},{type:`image`,src:qC,alt:`Original MC Eye Center Wix homepage before the Cellara redesign`,caption:`Before. A website that existed, but was not telling the full story.`},{type:`image`,src:JC,alt:`Mobile view of the original MC Eye Center Wix website before the Cellara redesign`,caption:`The same limits carried onto the phone, where most first visits happen.`},{type:`quote`,text:`The practice did not need to become more credible. It needed a website that made its credibility easier to see.`},{type:`h2`,text:`The Cellara Approach: Start With the Patient Journey`},{type:`p`,text:`Cellara does not begin strategic website projects by choosing colors or templates. We start with the business and its customers.`},{type:`p`,text:`For MC Eye Center, the website needed to address the real questions a prospective patient may have before making contact.`},{type:`ul`,items:[`Do they treat what I am experiencing?`,`Can I get a comprehensive eye exam here?`,`Do they provide medical eye care?`,`Can they help with dry eye?`,`What about specialty contact lenses?`,`Do they manage ongoing eye conditions?`,`Can I purchase glasses there?`,`Do they accept my insurance?`,`Who will be treating me?`,`How do I schedule an appointment?`]},{type:`p`,text:`Those questions became part of the architecture of the new experience. Instead of forcing patients to figure out the practice from a handful of general pages, the new website was designed to guide them toward the information most relevant to their needs.`},{type:`table`,caption:`Before and after architecture`,headers:[`Before`,`The Cellara experience`],rows:[[`Home`,`Patient need`],[`Gallery`,`Relevant care`],[`About`,`Provider trust`],[`Contact`,`Insurance and questions`],[``,`Appointment`]]},{type:`p`,text:`The redesign was not simply about adding pages. It was about creating a clearer path from patient question to patient action.`},{type:`h2`,text:`From a Basic Website to a Real Patient Experience`},{type:`p`,text:`The new experience provides significantly richer information around the practice and the patient journey, with dedicated content covering each major area of care.`},{type:`ul`,items:[`Comprehensive eye exams`,`Medical eye care`,`Dry eye`,`Specialty contact lenses`,`Eye disease management`,`Eyewear and optical services`,`Insurance`,`Provider credentials`,`Patient questions`,`Appointment pathways`]},{type:`p`,text:`This gives each major patient need somewhere to go.`},{type:`p`,text:`It also matches how people search. A patient looking for dry eye help has different intent from someone booking a rout
22ine exam. A patient researching specialty contact lenses may need more information before making contact. A prospective patient evaluating medical eye care is often evaluating expertise and trust first.`},{type:`p`,text:`Dedicated content allows the website to meet those patients much closer to the question that brought them there.`},{type:`h2`,text:`Designing Around Concerns, Not Just Services`},{type:`quote`,text:`What have you been noticing?`},{type:`p`,text:`Patients do not always know the clinical terminology for the service they need. They usually begin with what they feel, what they notice, what changed and what concerns them.`},{type:`p`,text:`The website should therefore help patients navigate from their perspective rather than requiring them to understand the practice's internal service categories.`},{type:`callout`,title:`The distinction that shapes the build`,text:`There is a meaningful difference between building a website around the business's organizational structure and building one around the customer's decision process.`},{type:`h2`,text:`After Cellara`},{type:`p`,text:`A patient-focused digital experience built around trust, discovery and action.`},{type:`image`,src:YC,alt:`Redesigned MC Eye Center and Optical homepage by Cellara Growth Co`,caption:`After. The homepage opens with the patient's situation and a clear next step.`},{type:`image`,src:XC,alt:`Mobile version of the redesigned MC Eye Center website`,caption:`The same discovery path holds on mobile, including the appointment pathway.`},{type:`h2`,text:`Making Trust Visible`},{type:`p`,text:`Healthcare decisions require a different level of trust than many ordinary purchases. Patients are not simply comparing products. They are deciding who they are comfortable trusting with their health.`},{type:`p`,text:`The redesigned experience gives greater visibility to the elements patients use to evaluate a practice.`},{type:`ul`,items:[`Provider information`,`Credentials`,`Patient feedback`,`Insurance`,`Frequently asked questions`,`Location context`,`Clear contact pathways`]},{type:`p`,text:`The practice did not suddenly become more credible because Cellara redesigned its website. The credibility was already there. Our job was to make sure the digital experience communicated it.`},{type:`quote`,text:`Good redesign does not manufacture credibility. It makes existing credibility easier to see.`},{type:`h2`,text:`Removing Practical Barriers to Booking`},{type:`p`,text:`Healthcare conversion is not only about persuasion. It is also about removing uncertainty. One of the most common practical questions a patient has is whether the practice takes their plan.`},{type:`p`,text:`The accepted plans presented in the new experience include EyeMed, Spectera, Versant, VSP and HealthSpring Medicare.`},{type:`p`,text:`Making insurance information easier to find answers a practical question that may decide whether someone continues toward an appointment at all.`},{type:`quote`,text:`Conversion is not always about a bigger button. Sometimes it comes from eliminating uncertainty.`},{type:`h2`,text:`Building for Pasadena, Not Everyone Everywhere`},{type:`p`,text:`MC Eye Center serves a real local market from Pasadena, Texas. A local service website has to establish clear relationships among the business, its location, its providers, its services and the patient needs it addresses.`},{type:`p`,text:`Four questions have to be answerable without effort.`},{type:`ol`,items:[`What does this business do?`,`Where does it do it?`,`Who does it serve?`,`What problems can it help solve?`]},{type:`p`,text:`That clarity benefits prospective patients first. Search systems benefit from the same clarity, because they are reading for the same relationships.`},{type:`h2`,text:`Built for Search Today and Discovery Tomorrow`},{type:`p`,text:`Traditional SEO remains important. At the same time, more people are using AI assisted and conversational search to research providers before they ever open a map or a directory. GEO does not replace SEO. It sits on top of the same foundation, and no one can promise an AI system will recommend a specific practice.`},{type:`p`,text:`What a strong architecture can do is give search engines and AI systems clearer, substantive information about how the practice, the provider, the location, the services, the conditions treated, the insurance accepted, the common patient questions and the appointment path relate to each other.`},{type:`p`,text:`Cellara treats technical SEO, local search, structured content, entity clarity, internal linking, schema where appropriate and GEO readiness as part of the digital foundation rather than as an add on after launch.`},{type:`h2`,text:`Modernizing the Practice Without Erasing What Makes It Distinctive`},{type:`p`,text:`The practice's optical offering remains an important part of its identity. The original website prominently featured the Ken Okuyama eyewear collection, and the redesign was not an opportunity to bury the optical side of the business in order to emphasize clinical services.`},{type:`p`,text:`Instead, the new experience communicates the relationship between clinical eye care and optical expertise, because that c
22ombination is part of why patients choose this practice.`},{type:`p`,text:`The goal was not to turn MC Eye Center into a different business. It was to communicate the full business more clearly.`},{type:`h2`,text:`Before and After Cellara`},{type:`p`,text:`Before. A website that existed, but was not telling the full story.`},{type:`ul`,items:[`Limited information architecture`,`Minimal service discovery`,`Basic patient journey`,`Clinical capabilities difficult to explore`,`Limited search-focused content`]},{type:`p`,text:`After. A patient-focused digital experience built around trust, discovery and action.`},{type:`ul`,items:[`Service-specific architecture`,`Concern-based discovery`,`Stronger trust signals`,`Clear insurance information`,`Patient-focused pathways`,`Local search foundation`,`SEO and GEO ready structure`,`Clear appointment opportunities`]},{type:`p`,text:`These points describe architecture, not results. No measurable improvement is claimed here.`},{type:`h2`,text:`A Website Should Reflect the Business You've Built`},{type:`p`,text:`MC Eye Center is an example of a problem we see frequently at Cellara. A business can be significantly better than its website makes it appear.`},{type:`p`,text:`The team has experience. Customers trust them. The service is strong. The business has evolved. But the website is still representing where the company was years ago, and prospective customers do not know that. They only see what is in front of them.`},{type:`callout`,title:`The better question`,text:`A redesign should not begin with how can we make this look newer. It should begin with what does someone need to see, understand and believe before they are ready to choose this business. We build from there.`},{type:`h2`,text:`What Changed Was More Than the Design`},{type:`ol`,items:[`Diagnose. Understand the business, the customer, the existing experience and the gaps.`,`Architect. Design the journey around how customers discover, evaluate and act.`,`Build. Create the messaging, experience, technology and search foundation.`,`Connect and optimize. Connect the website to the larger business system and keep improving where scoped.`]},{type:`h2`,text:`No Manufactured Results`},{type:`p`,text:`At Cellara, we do not attach invented percentages to a new website simply because they make a case study sound more impressive.`},{type:`p`,text:`This build story documents the strategy and transformation we can verify. As meaningful performance data becomes available and is approved for publication, results can be added separately. Until then, the work should be strong enough to speak for itself.`},{type:`h3`,text:`What we can measure from here`},{type:`p`,text:`Once data exists and the client approves publication, measurement can include qualified inquiries, appointment actions, organic search visibility, service page engagement, source attribution, conversion behavior, patient journey behavior and local search visibility.`},{type:`h2`,text:`Is Your Business Better Than Your Website Makes It Look?`},{type:`p`,text:`If your business has grown but your website has not grown with it, the issue may be bigger than outdated design. You may be making prospective customers work too hard to understand why they should choose you.`},{type:`p`,text:`Cellara Growth Co builds High Performance Websites around the actual customer journey, combining strategy, messaging, conversion-focused design, development and SEO and GEO foundations. High Performance Websites start at $3,997, and final scope depends on the business, content, page architecture, integrations and custom functionality.`},{type:`p`,text:`If the problem extends beyond the website, we can go further. Cellara can build and connect CRM systems, AI Front Desk experiences, automation, lead follow-up, reputation infrastructure, paid acquisition, integrations and custom business technology around the way your company actually operates.`},{type:`callout`,title:`You do not need to know which service you need before talking to us`,text:`That is what discovery is for. Book a strategy call, or start with the Growth Gap Assessment at /growth-gap if you would rather see where the revenue is leaking first.`}],faqs:[{q:`Who redesigned the MC Eye Center & Optical website?`,a:`Cellara Growth Co redesigned MC Eye Center & Optical's digital experience around patient discovery, trust, service education, search visibility and conversion.`},{q:`What was wrong with the previous MC Eye Center website?`,a:`The previous Wix website provided a basic online presence, but its limited information architecture no longer communicated the full scope of the practice or supported the patient journey as effectively as the business needed.`},{q:`What makes a healthcare website different from a typical business website?`,a:`Healthcare websites need to support a higher-trust decision. Patients often need information about services, providers, insurance, location, concerns, credentials and appointment options before they feel comfortable taking the next step.`},{q:`Does Cellara Growth Co build websites for healthcare practices?`,a:`Yes. Cellara builds High Performance Websites for healthcare and other service businesses. Projects can include strategy, messaging, UX, development, conversion architecture, technical SEO, local search foundations and GEO readiness.`},{q:`Does Cellara only redesign websites?`,a:`No. Cellara can also build and connect CRM systems, AI Front Desk experiences, workflow automation, lead follow-up, reputation systems, paid acquisition infrastru
22cture, integrations and custom business technology depending on the needs of the business.`},{q:`How much does a Cellara High Performance Website cost?`,a:`High Performance Websites currently start at $3,997. Final scope and investment depend on the business, content requirements, page architecture, integrations and custom functionality.`}]})),$.push(Q({slug:`resolveiq-technology-strategy-construction`,category:`client-work`,datePublished:`2026-08-31`,publishAt:`2026-08-31T14:00:00Z`,title:`ResolveIQ: Technology Strategy That Starts With the Business, Not the Software`,shortTitle:`ResolveIQ Client Story`,metaTitle:`ResolveIQ Technology Advisory for Construction`,metaDescription:`How ResolveIQ advises construction and contracting companies on technology strategy, and how Cellara Growth Co built the web presence that makes that advisory work legible to buyers.`,excerpt:`Most contractors do not have a software problem. They have an unresolved business problem that software was asked to cover. ResolveIQ built its advisory practice around that distinction, and Cellara built the presence that explains it.`,answer:`ResolveIQ is a technology advisory firm serving construction and general contracting companies, with additional capability in healthcare operations. It works through a three-step method: clarify the business need, align the technology strategy, then implement with confidence. Cellara Growth Co designed and developed the ResolveIQ web presence so that method is clear to buyers before the first conversation.`,coverImage:WC,coverAlt:`The ResolveIQ homepage shown in a desktop browser, with its technology advisory headline and primary call to action`,relatedService:{label:`High Performance Websites`,path:`/high-performance-websites`},relatedIndustry:{label:`Home Services`,path:`/industries/home-services`},relatedSlugs:[`spartan-judicial-campaign-infrastructure-build`,`mc-eye-center-website-transformation`],mentions:[{name:`ResolveIQ`,url:`https://resolveiq.biz/`,description:`Technology advisory firm serving construction and general contracting companies, with additional capability in healthcare operations.`}],sources:[{label:`ResolveIQ`,url:`https://resolveiq.biz/`}],body:[{type:`p`,text:`There is a pattern in construction and contracting that almost every operator recognizes. A company buys a platform to fix a problem. Six months later the problem is still there, the platform is half adopted, and the crew has quietly gone back to the group text, the spreadsheet, and the whiteboard in the trailer.`},{type:`p`,text:`The instinct is to blame the software. The more useful read is that the business never defined the problem precisely enough for any software to solve it.`},{type:`p`,text:`[ResolveIQ](https://resolveiq.biz/) built its practice on that distinction. It is a technology advisory firm for construction and general contracting companies, with additional capability in healthcare operations, and it starts every engagement with the business question rather than the product demo.`},{type:`p`,text:`Cellara Growth Co designed and developed the ResolveIQ web presence. This article covers both halves of that work: what ResolveIQ actually does for contractors, and how the presence was built so a serious buyer understands the offer before the first call.`},{type:`h2`,text:`Why Construction Technology Fails So Often`},{type:`p`,text:`Construction is one of the harder environments in which to introduce new technology, and the reasons are structural rather than cultural.`},{type:`ul`,items:[`Work happens in the field, not at a desk, so any tool that assumes a stable seat and a stable connection loses adoption immediately.`,`A single project touches estimating, scheduling, procurement, subcontractors, field crews, change orders, compliance, and billing, so the data has to survive many handoffs.`,`Margins are decided by exceptions. Change orders, delays, rework, and material swings are where money is made or lost, and those are exactly the events most systems record last.`,`Turnover and subcontracted labor mean the process cannot depend on one person remembering how the process works.`,`Buying decisions are often made under time pressure during a busy season, which is the worst moment to evaluate anything carefully.`]},{type:`p`,text:`None of that is solved by a better feature list. It is solved by deciding, in advance and in writing, what the business needs the technology to do, who owns each step, and what a good outcome looks like.`},{type:`p`,text:`That is advisory work. It happens before procurement, and skipping it is 
22what turns a reasonable platform into an expensive shelf item.`},{type:`h2`,text:`The ResolveIQ Position: Business First, Technology Second`},{type:`p`,text:`ResolveIQ is not a reseller and it is not an implementation shop chasing license revenue. Its value sits earlier in the sequence, at the point where the business decides what problem it is actually solving.`},{type:`p`,text:`That ordering matters more than it sounds. When technology leads, the company adapts its operation to the tool and inherits whatever assumptions the vendor built in. When the business leads, the operation is defined first and the tool is selected to serve it. The second path is slower for about two weeks and faster for the following two years.`},{type:`p`,text:`For a contractor, business-first advisory usually means answering questions that have nothing to do with software: which projects are actually profitable, where information stops moving between the office and the field, which approvals create delay, and what the company would need to see weekly to make better calls.`},{type:`p`,text:`Only after those answers exist does a platform decision become straightforward, because the requirements are no longer a wish list. They are a specification.`},{type:`h2`,text:`The Three-Step Method`},{type:`p`,text:`ResolveIQ works through a defined sequence rather than an open-ended engagement. It is published plainly on the firm's site, and the structure is the offer.`},{type:`steps`,items:[{title:`Clarify the Business Need`,text:`Establish what the company is actually trying to change, in operational terms. Where work stalls, which handoffs break, what the cost of the current process is, and what success would look like if nothing about the software changed at all.`,outcome:`A written problem definition the leadership team agrees on before any tool is discussed.`},{title:`Align the Technology Strategy`,text:`Map the defined need to an approach: what systems are involved, what integrates with what, what stays manual on purpose, what sequence the work happens in, and what the business can absorb without stopping production.`,outcome:`A strategy that fits the operation and the calendar, not a platform selected on features alone.`},{title:`Implement with Confidence`,text:`Execute against that plan with defined ownership, so the company is not left holding a license and a login. Confidence here is a technical outcome. It comes from knowing the plan was tested against how the business actually runs.`,outcome:`Adoption that survives the busy season, because the process was designed around the field rather than around the interface.`}]},{type:`p`,text:`The full method, including the questions ResolveIQ works through in each phase, is documented on the [ResolveIQ website](https://resolveiq.biz/#process).`},{type:`h2`,text:`What the Presence Had to Accomplish`},{type:`p`,text:`Advisory is a harder thing to sell online than a product. A product can be shown. Advisory has to be made legible, because the buyer is evaluating judgment before they have experienced any of it.`},{type:`p`,text:`That put a specific set of demands on the build. The site could not read as a brochure, and it could not hide the method behind a contact form.`},{type:`ul`,items:[`State the position in the first screen, so an owner knows within seconds whether this firm is for them.`,`Publish the method rather than gate it, because a defined process is the strongest proof an advisory firm has.`,`Name who the work is for, so the wrong-fit visitor self-selects out and the right-fit visitor recognizes themselves.`,`Answer the obvious objections in public, including cost, timing, and what happens if the company has already bought the wrong tool.`,`Give one clear next step that matches the sales motion, which for advisory is a conversation rather than a checkout.`]},{type:`image`,src:GC,alt:`The ResolveIQ site rendered on a mobile viewport, showing the stacked headline and primary call to action`,caption:`The mobile view carries the same hierarchy as desktop. Contractors read on a phone, often between jobs, so the offer and the next step stay above the fold.`},{type:`h2`,text:`How It Was Built`},{type:`p`,text:`Cellara designed and developed the site as a single-purpose conversion surface rather than a general-purpose website.`},{type:`p`,text:`The structure follows the buyer's questions in order. Position first, then the method, then who it helps, then why this firm, then the objections, then the call. Eac
22h section exists to move the reader one step closer to a decision, and any section that did not do that was cut.`},{type:`p`,text:`Practical details were treated as part of the build, not as afterthoughts. Direct contact by phone and email is available on the page for buyers who prefer it, the primary action routes to a scheduled discovery conversation, and the required legal pages are in place.`},{type:`p`,text:`The frequently asked questions section carries more weight than it usually does. For an advisory buyer, the objection is rarely the price. It is uncertainty about what they are committing to. Answering that in public shortens the sales cycle and improves the quality of the calls that do get booked.`},{type:`h2`,text:`Why This Matters Beyond Construction`},{type:`p`,text:`The ResolveIQ engagement is a client story, but the underlying lesson applies to any service business considering new technology.`},{type:`p`,text:`Software does not create clarity. It enforces whatever clarity already exists. A company with a defined process gets leverage from a new platform. A company without one gets a faster version of its existing confusion, plus a subscription.`},{type:`p`,text:`This is the same principle behind how Cellara approaches [revenue systems](/connected-revenue-system). Before an AI front desk, a follow-up sequence, or a CRM pipeline is built, the operating question has to be answered: what happens when an inquiry arrives, who owns it, how fast does it get answered, and how do we know. The system is the answer written down and made automatic.`},{type:`p`,text:`For contractors specifically, the highest-return work is usually not the newest platform. It is closing the gap between an inquiry arriving and a human responding, then making the handoff from office to field reliable. Both are process decisions first.`},{type:`h2`,text:`Where ResolveIQ Fits`},{type:`p`,text:`If a construction or contracting company is evaluating new software, recovering from an implementation that did not take, or trying to decide whether a process problem is really a technology problem, that is the moment ResolveIQ is built for.`},{type:`p`,text:`The firm's work is deliberately narrow. Construction and general contracting is the primary focus, with additional capability in healthcare operations, and the engagement starts with the business rather than the product. Companies that want to be sold a platform will find it a poor fit. Companies that want the decision made correctly will not.`},{type:`p`,text:`You can review the practice, the method, and the answers to common questions at [resolveiq.biz](https://resolveiq.biz/), or request a [discovery call](https://resolveiq.biz/discovery-call) directly.`},{type:`cta`,eyebrow:`Install the system`,title:`Clear thinking first, then the system that enforces it.`,text:`Cellara Growth Co designs and develops the websites and revenue infrastru
22cture service businesses use to answer every inquiry, follow up without manual work, and turn demand into booked revenue.`,primary:{label:`Book a Strategy Call`,href:Y},secondary:{label:`View Pricing`,href:`/pricing`}}],faqs:[{q:`What does ResolveIQ do?`,a:`ResolveIQ is a technology advisory firm for construction and general contracting companies, with additional capability in healthcare operations. It helps companies clarify the business need, align a technology strategy to it, and implement with confidence, so software decisions are made against a defined problem rather than a feature list.`},{q:`Why do construction technology implementations fail?`,a:`Usually because the business problem was never defined precisely enough for any tool to solve it. Construction work also happens in the field across many handoffs, so a system that assumes a desk, a stable connection, or one person remembering the process loses adoption quickly.`},{q:`What is the difference between technology advisory and IT support?`,a:`IT support keeps existing systems running. Technology advisory decides what should exist in the first place, which platforms fit the operation, what sequence the work happens in, and who owns each step. Advisory happens before procurement.`},{q:`Should a contractor fix its process or buy software first?`,a:`Process first. Software enforces whatever clarity already exists, so a company with a defined process gains leverage from a new platform, while a company without one gets a faster version of its current confusion plus a subscription.`},{q:`Did Cellara Growth Co build the ResolveIQ website?`,a:`Yes. Cellara Growth Co designed and developed the ResolveIQ web presence, structured so the firm's position, method, audience, and objections are clear to a buyer before the first conversation.`},{q:`How do I start a conversation with ResolveIQ?`,a:`ResolveIQ publishes a discovery call request on its site at resolveiq.biz, along with direct phone and email contact for buyers who prefer to reach out that way.`}]})),$.push(Q({slug:`do-advisory-firms-need-online-reviews`,title:`Do Financial Advisors and Consulting Firms Need Online Reviews If Most Clients Come From Referrals?`,shortTitle:`Do Advisory Firms Need Reviews?`,metaTitle:`Do Advisory Firms Need Online Reviews?`,metaDescription:`Referrals still open the door for advisory firms, but prospects check reviews before they call. Here is what SEC rules actually allow.`,excerpt:`Referrals get a prospect to look you up. What they find when they do is what gets them to actually call. Most advisory firms have never built that part on purpose.`,answer:`Yes. Referrals still start most advisory relationships, but prospects now research a firm online before reaching out, and an empty review profile reads as a warning sign. The SEC Marketing Rule has permitted testimonials and reviews since 2021, with clear disclosure requirements, so the old assumption that advisors legally cannot collect them is outdated.`,datePublished:`2026-09-01`,category:`industry-guides`,industries:[`Advisory Firms`],services:[`Reputation Growth`],body:[{type:`p`,text:`A referral gets your name in front of someone. It does not get them to call. Between those two moments, most prospects do one thing first: they look you up.`},{type:`p`,text:`For years, advisory firms treated that step as someone else's problem. Compliance felt like a reason to stay quiet, referrals felt like proof reviews were not needed, and the whole subject got skipped. That gap is now showing up at the exact moment a warm referral turns cold.`},{type:`h2`,text:`Why referrals alone are not enough anymore`},{type:`p`,text:`A referral is trust borrowed from someone else. It gets a prospect to type your name into a search bar. What they see next is trust you have to earn on your own, and for most advisory firms that space is either thin or empty.`},{type:`p`,text:`An empty review profile does not read as neutral. Next to competitors who have twenty recent reviews, a page with none reads as a firm that has not been tested, or one that has something to hide. Neither is true, but the prospect does not know that. They just move to the next name on their list.`},{type:`h2`,text:`Are advisors even allowed to use reviews and testimonials?`},{type:`p`,text:`This is the assumption that stops most firms before they start, and it is out of date. The SEC Marketing Rule, in effect since 2021, permits registered investment advisers to use client testimonials, endorsements, and third-party reviews in marketing. The rule replaced an older, much stricter ban.`},{type:`p`,text:`Permission comes with conditions, not a blank check. A firm using testimonials has to disclose whether the person is a current or former client, whether they were compensated, and any conflicts of interest connected to the statement. Third-party review platforms have to allow both positive and negative feedback, not just the flattering kind. None of that is difficult. It is paperwork, not prohibition.`},{type:`ul`,items:[`Confirm with your compliance officer or counsel which disclosures apply to your firm structure before collecting anything`,`Ask every satisfied client directly, rather than hoping reviews accumulate on their own`,`Use a platform that publishes negative feedback as well as positive, since a filtered page can itself raise compliance questions`,`Keep the disclosure language consistent across every review and testimonial you publish`]},{type:`h2`,text:`The gap this creates for firms that move first`},{type:`p`,text:`Because the old rule is remembered longer than the new one, most advisory firms still are not asking for reviews on purpose. That leaves an open lane for the firms that do it correctly. A profile with recent, specific, properly disclosed reviews does not just look better than an empty one. It answers the exact question a referred prospect is already asking before they pick up the phone.`},{type:`callout`,title:`The structural fix`,text:`Treat review collection like intake: a step that happens after every engagement, not a task someone gets to eventually. A short, compliant ask sent at the right moment, tracked the same way a follow-up call would be, is what turns referrals plus reviews into a system instead of two things that happen to a firm by accident.`}],faqs:[{q:`Can financial advisors legally ask for online reviews?`,a:`Yes. The SEC Marketing Rule, effective since 2021, permits registered investment advisers to use client testimonials and reviews, provided they disclose client status, any compensation, and relevant conflicts of interest.`},{q:`What disclosures does the SEC require for advisor testimonials?`,a:`Advisers must disclose whether the person giving the testimonial is a current or former client, whether they were compensated for it, and any conflicts of interest tied to the relationship. Third-party rating platforms must allow both positive and negative feedback.`},{q:`Do referrals still matter if a firm collects reviews?`,a:`Yes. Referrals and reviews solve different problems. A referral gets a prospect to search your name. Reviews are what they find once they do, and what convinces them to actually reach out.`},{q:`Why would an advisory firm with strong referrals still need reviews?`,a:`Because prospects research a firm online before calling, even when a trusted contact sent them. An advisory firm with no visible reviews next to competitors who have them looks untested, regardless of how strong its referral network actually is.`}],sources:[{label:`SmartAsset: SEC Marketing Rule Frequently Asked Questions for Advisors`,url:`https://smartasset.com/advisor-resources/sec-marketing-rule-faqs`}
22],relatedSlugs:[`how-ai-assistants-recommend-financial-advisors`],relatedService:{label:`Reputation Growth`,path:`/reputation-growth`},relatedIndustry:{label:`Advisory Firms`,path:`/industries/advisory-firms`},primaryCta:{label:`Plan My Firm's Review System`,href:Y}})),$.push(Q({slug:`is-ppc-worth-it-for-law-firms`,title:`Is Pay-Per-Click Advertising Worth the Cost for Law Firms?`,shortTitle:`Is PPC Worth It for Law Firms?`,metaTitle:`Is Pay-Per-Click Advertising Worth It for Law Firms?`,metaDescription:`Legal clicks cost more than almost any other industry. Here is when that spend pays off for a law firm, and what has to be in place first.`,excerpt:`A single click on a legal ad can cost more than a full tank of gas. That is not automatically a bad deal. It depends entirely on what happens after someone clicks.`,answer:`Pay-per-click advertising is worth it for law firms only when case value justifies the cost and the firm can answer and qualify leads immediately. Legal clicks are among the most expensive in any industry, sometimes exceeding two hundred dollars on competitive personal injury terms, so a slow intake process turns an expensive click into a wasted one.`,datePublished:`2026-09-02`,category:`revenue-operations`,industries:[`Legal Services`],services:[`Paid Growth`],body:[{type:`p`,text:`Ask a personal injury attorney what a click costs and most will not know the exact number. They just know the monthly ad bill is large, and they are not entirely sure it is working.`},{type:`p`,text:`That uncertainty is reasonable. Legal advertising sits among the most expensive categories in paid search, and a firm that spends without a plan for what happens after the click can burn through budget fast without ever finding out if the approach was wrong.`},{type:`h2`,text:`Why legal clicks cost so much`},{type:`p`,text:`Law firms are bidding against each other for a small number of searches from people who need help right now, and the value of winning one case can be enormous. That combination pushes bids higher than almost any other industry. Personal injury searches routinely run fifty to two hundred dollars or more per click, with the highest bids concentrated on urgent, near-me, accident-related terms. Other practice areas cost less: family law and divorce searches tend to run twenty to sixty dollars per click, immigration lower still.`},{type:`p`,text:`None of that is a reason to avoid paid search. It is a reason to be precise about it.`},{type:`h2`,text:`When the cost actually makes sense`},{type:`p`,text:`The math is simple to state and easy to get wrong in practice. A single signed personal injury case can be worth tens of thousands of dollars or more to a firm. Against that kind of case value, spending a few hundred dollars to generate the leads that produce one signed client is not expensive. It is the cost of winning cases in a market where every other firm is bidding for the same searches.`},{type:`p`,text:`The math breaks down when the firm cannot convert what the ads bring in. If leads sit in a voicemail box, if intake takes hours instead of minutes, or if nobody follows up on a prospect who did not answer the first call, the firm is still paying premium prices for clicks it never actually converts.`},{type:`h2`,text:`What has to be true before you spend on legal ads`},{type:`ul`,items:[`Every call and form submission gets a response in minutes, not hours, including evenings and weekends`,`Intake staff or systems can qualify a lead on the first contact, not the third callback attempt`,`The landing page the ad points to answers the exact question in the ad, not a general firm homepage`,`Case value and close rate are tracked well enough to know the real cost per signed client, not just cost per click`,`Budget matches the practice area. A firm spending two thousand dollars a month on personal injury terms is underfunding a fight it cannot win`]},{type:`h2`,text:`What most firms get backward`},{type:`p`,text:`Firms that struggle with paid search usually blame the ads. The ads are rarely the actual problem. The problem is a firm that raised its bid without ever building the intake speed and follow-up process that turns an expensive click into a signed client. Fixing the ad account without fixing that pipeline just means losing money faster.`}
22,{type:`callout`,title:`The structural fix`,text:`Do not fund a legal ad campaign until intake can answer, qualify, and follow up on a lead within minutes of it arriving. That coverage layer is what makes a two-hundred-dollar click affordable. Without it, the same click is just an expensive way to reach a voicemail.`}],faqs:[{q:`How much does a click cost for law firm Google Ads?`,a:`It depends heavily on practice area. Personal injury searches often run fifty to two hundred dollars or more per click, family law runs roughly twenty to sixty dollars, and immigration and other lower-competition areas cost less than that.`},{q:`Is PPC worth it for a small law firm?`,a:`It can be, if the case value justifies the spend and the firm can respond to and qualify leads within minutes. It is rarely worth it for a firm still relying on a receptionist or voicemail to catch after-hours inquiries.`},{q:`Why do legal ads cost more than other industries?`,a:`Law firms compete for a limited number of high-value searches, and a single won case can be worth tens of thousands of dollars, so firms bid aggressively. That combination of scarce demand and high case value drives up the price of every click.`},{q:`What causes a law firm's PPC budget to fail?`,a:`Slow response time is the most common cause. If a lead calls or fills out a form and does not hear back within minutes, they move to the next firm on their list, and the ad spend that generated the lead is wasted regardless of how well the ad itself performed.`},{q:`How much should a personal injury firm budget for paid ads?`,a:`Underfunding a competitive practice area is often worse than not advertising at all, since a firm needs enough budget to appear consistently rather than intermittently. The right number depends on the firm's case value and market, which is why it should be set from the economics, not a round budget figure.`}],sources:[{label:`The Valley Marketing Group: Law Firm Google Ads Cost Per Lead 2026`,url:`https://thevalleymarketinggroup.com/blog/law-firm-google-ads-cost-per-lead-2026/`}],relatedSlugs:[`legal-services`,`secret-shop-your-own-business`],relatedService:{label:`Paid Growth`,path:`/paid-growth`},relatedIndustry:{label:`Legal Services`,path:`/industries/legal-services`},primaryCta:{label:`See If Paid Ads Make Sense for My Firm`,href:Y}})),$.push(Q({slug:`how-many-reviews-does-a-salon-need`,title:`How Many Google Reviews Does a Spa or Salon Actually Need to Win Local Bookings?`,shortTitle:`How Many Reviews Does a Salon Need?`,metaTitle:`How Many Google Reviews Does a Salon Need in 2026?`,metaDescription:`The count matters less than how recent it is. Here is how review volume and freshness actually affect a beauty business's local ranking.`,excerpt:`A salon with thirty recent reviews can outrank one with a hundred old ones. The number people chase is usually the wrong number to be chasing.`,answer:`There is no single magic number, but local search visibility tends to build in stages: a handful of reviews helps a business simply appear in local results, roughly forty to fifty reviews is where many businesses see a meaningful ranking jump, and beyond that, how recently reviews arrived matters more than the total count.`,datePublished:`2026-09-03`,category:`search-visibility`,industries:[`Beauty and Wellness`],services:[`Reputation Growth`],body:[{type:`p`,text:`A client asks where to get her lashes done and searches on her phone in the car. Three salons show up before anything else on the screen. She is choosing between them in about four seconds, and she is choosing almost entirely on stars and how many reviews are underneath them.`},{type:`p`,text:`Owners know reviews matter. What most have not sat down and worked out is how many they actually need, and whether the ones they already have are still doing any work.`},{type:`h2`,text:`Review count is a staircase, not a single number`},{type:`p`,text:`Local ranking does not flip on at one magic threshold. It builds in stages. A small handful of reviews is often the difference between showing up in local results at all and not showing up. Getting into the fifteen to twenty-five range starts to make a business competitive for less crowded searches. Many businesses see the clearest jump somewhere around forty to fifty reviews, where the local ranking algorithm appears to weight the business meaningfully higher. Past that point, count still helps, but it stops being the main lever.`},{type:`h2`,text:`Why recency matters more than most owners think`}
22,{type:`p`,text:`A hundred reviews from three years ago do not carry the same weight as thirty from the last few months. Reviews posted in the last thirty days appear to carry the most ranking weight, reviews from the last ninety days still carry meaningful weight, and anything older than about six months contributes less and less over time.`},{type:`p`,text:`That means a business with fewer total reviews but a steady monthly flow can outrank a business with a much larger, older pile. Consistency beats volume.`},{type:`h2`,text:`Why beauty and wellness businesses feel this harder than most`},{type:`p`,text:`Booking decisions in this industry are visual and personal. A client is trusting someone with her hair, her skin, or her face, and she reads reviews more closely than she would for almost any other kind of purchase. A thin or stale review page does not just cost ranking position. It costs the moment of confidence a nervous new client needs before she books.`},{type:`ul`,items:[`Ask for a review at the moment satisfaction is highest, right after the appointment, not days later by email`,`Make the ask specific enough that clients mention the service or stylist by name, which helps future searchers self-select`,`Aim for a steady monthly flow of new reviews rather than an occasional push`,`Respond to every review, positive and negative, since responses are part of what a prospective client actually reads`]},{type:`h2`,text:`What chasing the wrong number looks like`},{type:`p`,text:`Some salons fixate on getting to a round number like one hundred and stop asking once they hit it. That is backward. The businesses that keep winning local bookings are the ones still asking every week, long after the total looks impressive on paper, because the algorithm and the client both care more about last month than about the lifetime count.`},{type:`callout`,title:`The structural fix`,text:`Build the review ask into the checkout moment itself, the same way you would build in a rebooking prompt, so it happens for every client automatically instead of depending on someone remembering to send a text at the end of a busy day.`}],faqs:[{q:`How many Google reviews does a salon need to rank locally?`,a:`There is no fixed number, but a small handful is often enough to appear in local results, fifteen to twenty-five helps for less competitive searches, and many businesses see the clearest ranking jump around forty to fifty reviews.`},{q:`Do old reviews still help a salon's ranking?`,a:`They help less over time. Reviews from the last thirty days carry the most weight, reviews from the last ninety days still matter, and reviews older than about six months contribute far less to current ranking.`},{q:`Is it better to have more reviews or more recent reviews?`,a:`Recent reviews generally matter more for ranking than raw count. A business adding a handful of new reviews every month can outrank a business with a much larger total that has stopped collecting new ones.`},{q:`When is the best time to ask a client for a review?`,a:`Right after the appointment, while satisfaction is highest, rather than through a follow-up email days later. The immediacy of the ask is one of the biggest factors in whether a client actually leaves one.`}],sources:[{label:`Olly Olly: How Many Reviews Do I Need to Start Ranking on Google?`,url:`https://www.ollyolly.com/blog/how-many-reviews-do-i-need-to-start-ranking-on-google-the-magic-numbers-that-change-everything/`}],relatedSlugs:[`beauty-wellness`,`why-your-google-business-profile-outranks-your-website`],relatedService:{label:`Reputation Growth`,path:`/reputation-growth`},relatedIndustry:{label:`Beauty and Wellness`,path:`/industries/beauty-wellness`},primaryCta:{label:`Plan My Salon's Review System`,href:Y}})),$.push(Q({slug:`how-ai-assistants-recommend-financial-advisors`,title:`How Do AI Assistants Like ChatGPT Recommend Financial Advisors and Consulting Firms?`,shortTitle:`How AI Recommends Advisory Firms`,metaTitle:`How AI Assistants Recommend Financial Advisors`,metaDescription:`A growing share of prospects start their advisor search inside an AI assistant. Here is what determines whether your firm gets named.`,excerpt:`Some of your next prospects are not googling your name. They are asking an AI assistant who they should call, and the assistant is answering with or without you.`,answer:`AI assistants tend to recommend advisory firms based on independently verifiable signals rather than a firm's own marketing copy: reviews on third-party platforms, structured information about specialization, and facts that stay consistent across the web. A firm whose only description of itself lives on its own website is much harder for an AI assistant to confidently recommend.`,datePublished:`2026-09-04`,category:`search-visibility`,industries:[`Advisory Firms`],services:[`Search Visibility`],body:[{type:`p`,text:`A share of affluent prospects now start an advisor search inside an AI assistant instead of a search engine. They type a question, get a short list of names, and never see the ten blue links a website used to compete for.`},{type:`p`,text:`That is a new kind of front door, and most advisory firms have not built anything for it. They have a website. They have not thought about what an AI assistant would actually say about them if a prospect asked.`},{type:`h2`,text:`Why AI assistants distrust a firm's own website copy`},{type:`p`,text:`An AI assistant treats a firm's self-description the way a skeptical prospect would: as an interested party's version of events. Claims made only on a firm's own site, with no outside confirmation, get weighted lightly or left out of a recommendation entirely.`},{type:`p`,text:`What the assistant weighs more heavily is anything independently verifiable. Reviews on platforms the firm does not control. Directory listings. Consistent facts about specialization, location, and credentials that show up the same way across multiple sources. A firm that only exists, informationally, on its own homepage is nearly invisible to this kind of recommendation.`},{type:`h2`,text:`What actually earns a mention`},{type:`ul`,items:[`Client reviews on independent platforms, not just testimonials quoted on the firm's own site`,`Clear, specific descriptions of specialization, such as the client types and situations the firm actually handles, rather than generic wealth management language`,`The same name, credentials, and specialization stated consistently across the firm's website, directory listings, and any published bios`,`Content structured so a machine can parse it cleanly, such as a genuine frequently asked questions section, instead of a wall of undifferentiated text`]},{type:`h2`,text:`Why this compounds the earlier a firm moves`},{type:`p`,text:`Very few advisory firms currently do any of this on purpose. Fewer than one in ten publish client testimonials in their marketing at all, which means most of the category is starting from zero. A firm that builds a real, independently verifiable presence now is not just catching up to a trend. It is claiming a spot in a small pool of firms an AI assistant can confidently name, before that pool gets crowded.`},{type:`p`,text:`This does not replace referrals or a strong website. It sits alongside them, as a third channel a firm now has to earn deliberately instead of ignoring.`},{type:`callout`,title:`The structural fix`,text:`Treat AI visibility as a reputation problem before it is a technical one. The firms an assistant recommends confidently are the ones with real, current, independently hosted proof, not the ones with the most polished homepage. Build the proof first, then make sure it is described the same way everywhere it appears.`}],faqs:[{q:`Do AI assistants like ChatGPT actually recommend financial advisors?`,a:`Yes. A meaningful share of affluent prospects now use AI assistants to start an advisor search, and the assistant will name specific firms or advisors when asked, based on the information it can find and verify about them.`},{q:`Why doesn't my firm's website help with AI recommendations?`,a:`AI assistants weigh independently verifiable information, such as third-party reviews and consistent outside listings, more heavily than a firm's own marketing copy, since a firm's website is not a neutral source about itself.`},{q:`What is the fastest way for an advisory firm to improve AI visibility?`,a:`Start with independently verifiable proof: client reviews on platforms the firm does not control, and consistent, specific information about specialization stated the same way across the website and any directory listings.`},{q:`How many financial advisors currently use client testimonials in marketing?`,a:`Adoption is low, with industry research putting it under one in ten advisors. That gap is exactly what creates the opportunity for a firm that builds a real review and visibility presence now.`}],sources:[{label:`Wealthtender: How Financial Advisors Get Found in ChatGPT, Gemini, and AI Search Tools`,url:`https://wealthtender.com/advisors/marketing/how-financial-a
22dvisors-appear-in-chatgpt-ai-search/`}],relatedSlugs:[`do-advisory-firms-need-online-reviews`,`is-your-website-invisible-to-ai`],relatedService:{label:`Search Visibility`,path:`/seo-geo`},relatedIndustry:{label:`Advisory Firms`,path:`/industries/advisory-firms`},primaryCta:{label:`Plan My Firm's AI Visibility`,href:Y}})),$.push(Q({slug:`how-much-should-a-med-spa-spend-on-paid-ads`,title:`How Much Should a Med Spa or Aesthetic Practice Spend on Paid Ads Per New Patient?`,shortTitle:`What Should a Med Spa Spend on Ads?`,metaTitle:`How Much Should a Med Spa Spend on Paid Ads?`,metaDescription:`Cost per new patient varies more by intake speed than by ad platform. Here is what a realistic acquisition cost looks like in 2026.`,excerpt:`Two practices can run the exact same ad campaign and end up with wildly different costs per patient. The gap is almost never the ads. It is what happens after the click.`,answer:`Realistic patient acquisition costs for med spas generally run 150 to 400 dollars per new patient across Google and Meta ads. The difference between the top and bottom of that range comes mostly from how fast and how well a practice follows up, not from which platform was used or how much was spent on the ad itself.`,datePublished:`2026-09-05`,category:`revenue-operations`,industries:[`Healthcare and Aesthetics`],services:[`Paid Growth`],body:[{type:`p`,text:`A practice owner sees two numbers side by side: what competitors seem to be spending on ads, and what a new patient is actually worth. The gap between those numbers is supposed to be the profit. Too often, the real gap gets eaten by everything that happens between the click and the consultation.`},{type:`h2`,text:`What acquisition costs actually look like right now`},{type:`p`,text:`Across current data on med spa and aesthetic practice advertising, cost per booked consultation on Google Ads generally runs somewhere in the 150 to 400 dollar range. Meta ads tend to produce cheaper raw leads, often 80 to 250 dollars, but a meaningful share of those need real follow-up before they qualify into a booked consultation, which raises the effective cost once that work is counted. Practices that route leads into a fast, automated qualification process before a person ever calls tend to land at the lower end of these ranges, sometimes well under it.`},{type:`h2`,text:`Why the same ad budget produces different results`},{type:`p`,text:`The gap between a practice paying under 150 dollars per patient and one paying over 400 for the same kind of campaign is rarely the ad account. It is almost always what happens in the minutes and hours after someone fills out a form or calls in.`},{type:`ul`,items:[`How fast the lead is contacted after they inquire, since elective procedure leads cool off quickly once they stop hearing back`,`Whether unqualified leads get filtered out before they consume front desk time meant for real consultations`,`Whether a missed call or after-hours inquiry gets a response at all, or simply disappears into a voicemail box`,`Whether leads who do not book immediately get a real follow-up sequence instead of a single attempted call`]},{type:`h2`,text:`The order this should be built in`},{type:`p`,text:`Fixing intake before increasing ad spend is the difference between a campaign that compounds and one that just gets more expensive. A practice that raises its budget without fixing follow-up is not buying more patients. It is buying more leads that leak out the same hole.`},{type:`ol`,items:[`Audit how fast the front desk currently responds to a new inquiry, including evenings and weekends`,`Put a qualification step in place so staff time goes to genuinely interested patients, not tire kickers`,`Build a follow-up sequence for leads who do not book on the first contact`,`Only then increase ad spend, once the practice can actually convert what it is already generating`]},{type:`h2`,text:`What a realistic budget looks like`},{type:`p`,text:`There is no single right number, because it depends on procedure mix and average patient value. What is consistent is that practices spending well under the typical range are not doing it with cheaper clicks. They are doing it with faster, more consistent follow-up, which is a system problem, not a media-buying problem.`},{type:`callout`,title:`The structural fix`,text:`Treat intake speed as part of the ad budget, not a separate line item. The fastest way to lower cost per patient is rarely a new campaign. It is closing the gap between when someone clicks and when a real person responds to them.`}],faqs:[{q:`What is a good cost per patient for med spa advertising?`,a:`Current data suggests a realistic range of roughly 150 to 400 dollars per new patient across Google and Meta ads, with practices that follow up quickly and consistently landing toward the lower end of that range.`},{q:`Is Google Ads or Meta better for a med spa?`,a:`Meta ads tend to generate cheaper initial leads, while Google Ads leads tend to arrive further along in the decision process. The bigger factor in either case is how fast and how well the practice follows up after the lead arrives.`},{q:`Why do two similar med spas get different results from the same ad spend?`,a:`The difference is almost always intake speed and follow-up consistency, not the ad campaign itself. A practice with fast, qualified follow-up converts far more of the same leads than one relying on staff to call back when they get a chance.`},{q:`Should a practice increase ad spend if patient volume is low?`,a:`Only after confirming the practice can respond quickly and follow up consistently on the leads it already generates. Increasing spend before fixing intake usually raises the cost per patient rather than the number of patients.`}],sources:[{label:`FocusRunner: Med Spa Patient Acquisition Costs`,url:`https://focusrunner.io/blog/med-spa-patient-acquisition-costs.html`}],relatedSlugs:[`healthcare-aesthetics`,`mc-eye-center-website-transformation`],relatedService:{label:`Paid Growth`,path:`/paid-growth`},relatedIndustry:{label:`Healthcare and Aesthetics`,path:`/industries/healthcare-aesthetics`},primaryCta:{label:`Plan My Practice's Paid Growth`,href:Y}})),$.push(Q({slug:`how-fast-should-a-rental-company-answer-after-hours-calls`,title:`How Fast Should an Equipment Rental Company Answer After-Hours Availability Calls?`,shortTitle:`Answering After-Hours Rental Calls`,metaTitle:`How Fast Should Re
22ntal Companies Answer Calls?`,metaDescription:`Most rental inquiries about weekend and after-hours availability go to whoever answers first. Here is how fast that actually needs to be.`,excerpt:`Someone needs a piece of equipment for Saturday morning and it is already Friday night. They will rent from whoever picks up, not whoever has the better fleet.`,answer:`A rental company should answer availability calls within minutes, at any hour, because most people renting on short notice call the next name the moment one call goes unanswered. Roughly 85 percent of callers who reach a missed call or voicemail do not call back. They call a competitor instead.`,datePublished:`2026-09-11`,category:`ai-front-desk`,industries:[`Rental Companies`],services:[`AI Front Desk`],body:[{type:`p`,text:`A contractor needs a compactor for a Saturday pour and realizes it Friday at 7 p.m. A homeowner needs a lift for a weekend project and starts calling rental yards from the driveway. Neither of them is going to wait until Monday, and neither is going to wait on hold.`},{type:`p`,text:`They are going to call the next number on the list the moment the first one does not pick up. That is the entire buying decision, decided in the time it takes a phone to ring four times.`},{type:`h2`,text:`Why rental demand does not respect business hours`},{type:`p`,text:`Equipment rental runs on projects, and projects do not stop at five o'clock. Weekend jobs, storm cleanup, a piece of equipment that broke down mid-project, a job that got moved up a day. All of that demand shows up exactly when a rental yard's front office is closed, which is also when a caller has the fewest other options and the most urgency.`},{type:`p`,text:`The pattern shows up clearly in call data across service businesses generally: a large share of calls to businesses like these come outside the traditional nine-to-five window, and unanswered-call rates spike sharply on weekends compared to weekdays. Rental follows the same shape, because the jobs that create rental demand run on the same schedule.`},{type:`h2`,text:`What happens when the call is not answered`},{type:`p`,text:`Roughly 85 percent of callers who hit voicemail or a missed call simply call the next business instead of leaving a message. Fewer than 3 percent leave a voicemail at all. That means an unanswered call is not a delayed opportunity. In almost every case, it is a closed one, and the rental yard never even sees it happen.`},{type:`p`,text:`Speed matters even when someone does get through. Businesses that respond to an inquiry within five minutes are dramatically more likely to actually connect with and qualify that lead than ones that wait thirty minutes, and the odds of qualifying a lead drop sharply for every additional ten minutes of delay. In a market where the caller is dialing three yards in a row, the first one to answer usually wins the rental regardless of price or fleet size.`},{type:`h2`,text:`What coverage actually looks like`},{type:`ul`,items:[`Every call gets answered or gets an immediate callback, including evenings, weekends, and holidays`,`Availability and pricing questions get answered on the first contact, not routed to a callback the next business day`,`A missed call still gets a response within minutes, through a call back or a text, instead of going silent`,`The person answering can actually check what is available and reserve it, not just take a message`]},{type:`h2`,text:`Why this is a coverage problem, not a staffing problem`},{type:`p`,text:`Most rental yards cannot justify a full front desk staffed around the clock for the volume of after-hours calls they get, and they should not try to. The fix is not more people. It is making sure every call gets a fast, capable response regardless of when it comes in, whether that is a person on call or a system built to answer, check availability, and reserve equipment without a human having to be sitting by the phone.`},{type:`callout`,title:`The structural fix`,text:`Treat after-hours and weekend coverage as part of the rental operation, not an edge c
22ase. The businesses winning the Friday-night and Saturday-morning calls are not the ones with the biggest fleet. They are the ones that pick up.`}],faqs:[{q:`How fast should a rental company respond to an availability call?`,a:`Within minutes, at any hour. Most people renting equipment on short notice call the next business the moment one call goes unanswered, so a delayed response is often the same as losing the rental entirely.`},{q:`What happens if a rental company misses a call?`,a:`Roughly 85 percent of callers who reach voicemail or a missed call do not call back. They call a competitor instead. Fewer than 3 percent leave a voicemail, so most missed calls leave no trace of the lost business.`},{q:`Why do rental companies get so many after-hours calls?`,a:`Rental demand follows project schedules, not office hours. Weekend jobs, breakdowns, and last-minute needs create urgent demand exactly when a rental yard's office is closed, which is also when the caller has the fewest alternatives.`},{q:`Do we need a 24-hour staffed front desk to cover this?`,a:`No. Most rental yards cannot justify full-time overnight staffing for the call volume involved. The fix is a system that answers, checks availability, and reserves equipment at any hour, not necessarily a person sitting by the phone.`}],sources:[{label:`Hicira: Missed Call Statistics 2026`,url:`https://www.hicira.com/missed-call-statistics`}],relatedSlugs:[`rental-companies`,`secret-shop-your-own-business`],relatedService:{label:`AI Front Desk`,path:`/ai-front-desk`},relatedIndustry:{label:`Rental Companies`,path:`/industries/rental-companies`},primaryCta:{label:`Plan My Rental Yard's Coverage`,href:Y}})),$.push(Q({slug:`what-should-a-salon-do-when-a-client-stops-rebooking`,title:`What Should a Salon or Spa Do When a Regular Client Stops Rebooking?`,shortTitle:`When a Client Stops Rebooking`,metaTitle:`What to Do When a Salon Client Stops Rebooking`,metaDescription:`A quiet client is not a satisfied client. Here is what the rebooking numbers actually mean and how to build a system that catches the drop-off.`,excerpt:`A regular who used to come every six weeks has not called in four months. Nothing happened that anyone noticed. That is exactly the problem.`,answer:`When a regular client stops rebooking, most salons find out too late because nobody was tracking the gap. Average rebooking rates run 30 to 40 percent, and even a modest improvement tends to produce a meaningful revenue increase, so the fix is a system that flags a missed rebooking automatically and follows up before the client tries somewhere else.`,datePublished:`2026-09-12`,category:`revenue-operations`,industries:[`Beauty and Wellness`],services:[`Revenue Operations`],body:[{type:`p`,text:`A stylist notices it in passing. She used to see a client every six weeks like clockwork. Now it has been four months. Nobody called to cancel. Nobody left unhappy. The client just quietly stopped.`},{type:`p`,text:`That is the most common way a salon loses a client, and it is also the easiest one to miss, because nothing dramatic happens. There is no complaint to respond to. There is just an appointment that never got rebooked.`},{type:`h2`,text:`What a healthy rebooking rate actually looks like`},{type:`p`,text:`Industry benchmarks put the average salon rebooking rate somewhere between 30 and 40 percent, meaning most clients are not leaving with their next appointment already on the books. Below 25 percent is generally considered a warning sign that clients are not being asked consistently or that the experience is not landing. Above 50 percent is considered strong performance, and salons in the 65 percent-plus range have usually built rebooking into every part of the visit rather than leaving it to chance at checkout.`},{type:`p`,text:`The revenue difference between those tiers is not small. A meaningful rebooking improvement tends to produce a proportionally larger revenue gain, because retained clients do not just keep showing up. They spend more per visit over time and refer more often.`},{type:`h2`,text:`Why the drop-off is invisible until it is too late`},{type:`p`,text:`Most salons track total appointments and total revenue. Few track which specific clients have gone quiet. That means a 
22stylist has to notice a gap from memory, which works for a handful of favorite clients and fails for everyone else. By the time someone remembers to reach out, the client has often already found a new regular spot.`},{type:`h2`,text:`What to actually do when a client stops rebooking`},{type:`ol`,items:[`Set a clear window for each client based on their typical visit cycle, so a gap becomes visible instead of anecdotal`,`Flag the client automatically once they pass that window without a booked next appointment`,`Reach out with a real, specific message, not a generic marketing blast, ideally from the stylist they normally see`,`Make rebooking part of the checkout conversation for every client, every time, rather than an occasional reminder`,`Track the outcome, so the practice learns which type of outreach actually brings clients back`]},{type:`h2`,text:`Why this is a system problem, not a memory problem`},{type:`p`,text:`Asking every stylist to remember every client's cycle does not scale past a small handful of regulars. What works is a system that tracks the expected return window for each client and flags it the moment that window closes, so outreach happens on schedule instead of whenever someone happens to notice.`},{type:`callout`,title:`The structural fix`,text:`Build the rebooking check into the same system that already handles scheduling, so a missed rebooking triggers an automatic, timely follow-up instead of depending on a busy stylist noticing a gap months later.`}],faqs:[{q:`What is a good rebooking rate for a salon?`,a:`Industry benchmarks put the average around 30 to 40 percent. Above 50 percent is considered strong, and salons above 65 percent have typically built rebooking prompts into every client touchpoint rather than leaving it to chance.`},{q:`Why do clients stop rebooking without complaining?`,a:`Most clients who drift away are not dissatisfied. They simply were not asked to rebook at the right moment, or life got busy and nobody followed up before they tried somewhere else out of convenience.`},{q:`How much does improving rebooking rate actually affect revenue?`,a:`Meaningfully. Retained clients visit more often and spend more per visit over time, so even a modest improvement in rebooking rate tends to produce a larger proportional gain in annual revenue.`},{q:`How can a salon catch a client before they stop coming back entirely?`,a:`By tracking each client's typical visit cycle and flagging it automatically when they pass that window without a scheduled next appointment, rather than relying on a stylist to notice the gap from memory.`}],sources:[{label:`Regulr: Salon Rebooking Rate Benchmarks, Formula, and 5 Ways to Improve It`,url:`https://regulr.ai/blog/salon-rebooking-rate`}],relatedSlugs:[`beauty-wellness`,`how-many-reviews-does-a-salon-need`],relatedService:{label:`Revenue Operations`,path:`/revenue-operations`},relatedIndustry:{label:`Beauty and Wellness`,path:`/industries/beauty-wellness`},primaryCta:{label:`Plan My Salon's Follow-Up System`,href:Y}})),$.push(Q({slug:`should-financial-advisors-run-paid-ads`,title:`Should Financial Advisors and Consulting Firms Run Paid Ads, or Rely Only on Referrals?`,shortTitle:`Should Advisory Firms Run Paid Ads?`,metaTitle:`Should Financial Advisors Run Paid Ads or Just Referrals?`,metaDescription:`Referrals convert far better than cold digital leads. Here is when paid ads still make sense for an advisory firm anyway, and when they do not.`,excerpt:`Referrals close at a rate paid ads rarely touch. That is not an argument against paid ads. It is an argument for being honest about what each one is actually for.`,answer:`Referrals should stay the primary channel for most advisory firms, since referred prospects close at a far higher rate than cold digital leads. Paid ads make sense as a secondary channel when referral volume cannot support growth targets, when a firm wants to reach a niche referrals rarely touch, or when the firm can qualify more colder leads.`,datePublished:`2026-09-08`,category:`revenue-operations`,industries:[`Advisory Firms`],services:[`Paid Growth`],body:[{type:`p`,text:`A firm that grew entirely on referrals is often nervous about paid ads for a reasonable reason: referrals convert extremely well, and a firm can sense that a colder channel would drag its numbers down. That instinct is not wrong. It is just incomplete.`},{type:`h2`,text:`Why referrals are hard to beat`},{type:`p`,text:`Referred prospects typically close at 40 to 70 percent, compared with 5 to 15 percent for cold digital leads. That gap exists because a referral arrives already trusting the firm, based on someone else's experience, while a cold lead is starting from zero. No amount of ad targeting fully closes that trust gap on the first contact.`},{type:`p`,text:`That is the real argument for staying referral-first. It is not that paid ads do not work. It is that a channel converting at 5 to 15 percent will always look worse next to one converting at 40 to 70 percent, and a firm judging paid ads by that comparison alone will usually decide to abandon them too early.`},{type:`h2`,text:`When paid ads earn a place anyway`},{type:`p`,text:`The honest reason to add paid ads is not that they outperform referrals. It is that referral volume has a ceiling, and that ceiling is set by how many satisfied clients a firm currently has, not by how much the firm wants to grow. A firm that has hit that ceiling has three real options: wait for referral volume to grow on its own, add a second channel, or stop growing.`},{type:`ul`,items:[`Referral volume has plateaued below what the firm's growth targets require`,`The firm wants to reach a specific niche or geography that its current referral network does not naturally cover`,`The firm has enough intake capacity to properly qualify a higher volume of colder leads without diluting service to existing clients`,`The firm can track cost per client accurately enough to know whether the channel is actually working, not just producing inquiries`]},{type:`h2`,text:`What makes paid ads fail for advisory firms`},{type:`p`,text:`Most failed paid campaigns in this space fail the same way: the firm treats a cold lead like a warm referral, skips real qualification, and burns advisor time on prospects who were never a fit. A cold lead needs more structure around it, not less, including clear qualification before it ever reaches an advisor's calendar.`},{type:`callout`,title:`The structural fix`,text:`Run paid ads as a deliberately separate pipeline from referrals, with its own qualification step, its own cost tracking, and its own expectations for close rate. Judging it against referral performance guarantees disappointment. Judging it against what it actually costs to grow without it is the fairer test.`}],faqs:[{q:`Do referred clients convert better than paid ad leads for financial advisors?`,a:`Yes, significantly. Referred prospects typically close at 40 to 70 percent, compared with 5 to 15 percent for cold digital leads, because a referral starts with trust the ad has to build from nothing.`},{q:`Should an advisory firm stop running paid ads if referrals convert so much better?`,a:`N
22ot necessarily. The comparison is misleading if referral volume cannot support the firm's growth targets on its own. Paid ads exist to add volume a referral network cannot reach, not to outperform referrals on conversion rate.`},{q:`When does it make sense for a financial advisor to start paid advertising?`,a:`When referral volume has plateaued below growth targets, when the firm wants to reach a niche its referral network does not cover, or when the firm has the intake capacity to properly qualify more colder leads.`},{q:`Why do paid ad campaigns for advisory firms often fail?`,a:`Because firms treat cold leads like warm referrals and skip proper qualification. A cold lead needs more structure and screening before it reaches an advisor, not less, since it starts without the built-in trust a referral carries.`}],sources:[{label:`OJay Media: Lead Generation for Financial Advisors, 7 Channels Ranked`,url:`https://www.ojaymediamarketing.com/blog/lead-generation-for-financial-advisors/`}],relatedSlugs:[`do-advisory-firms-need-online-reviews`,`how-ai-assistants-recommend-financial-advisors`],relatedService:{label:`Paid Growth`,path:`/paid-growth`},relatedIndustry:{label:`Advisory Firms`,path:`/industries/advisory-firms`},primaryCta:{label:`See If Paid Ads Make Sense for My Firm`,href:Y}})),$.push(Q({slug:`do-online-reviews-affect-equipment-rental-decisions`,title:`How Much Do Online Reviews Actually Affect Whether Someone Rents From You?`,shortTitle:`Do Reviews Affect Rental Decisions?`,metaTitle:`Do Online Reviews Affect Equipment Rental Decisions?`,metaDescription:`Renters research equipment providers the same way any other buyer does. Here is how much reviews actually weigh in that decision.`,excerpt:`Renting a piece of equipment feels transactional, but the decision of who to rent it from is not. People are checking reviews before they call.`,answer:`Online reviews carry real weight in equipment rental decisions, even though the purchase feels transactional. Around 93 percent of consumers say reviews influence their purchasing decisions, and roughly 86 percent are more likely to do business with a company that has positive reviews, so thin or outdated reviews put a rental company at a disadvantage before a call comes in.`,datePublished:`2026-09-09`,category:`search-visibility`,industries:[`Rental Companies`],services:[`Reputation Growth`],body:[{type:`p`,text:`Renting a compactor or a lift feels like a purely functional decision. It works or it does not. It is available or it is not. But before someone ever calls to check availability, most of them do one more thing: they look up the company.`},{type:`h2`,text:`Why reviews matter even for a functional rental`},{type:`p`,text:`Consumer research on purchasing behavior consistently shows reviews shaping decisions well beyond retail. Roughly 93 percent of consumers say online reviews influence their purchasing decisions in general, and about 86 percent say they are more likely to do business with a company that has positive reviews and testimonials. Trust in reviews is especially strong among younger buyers, with roughly 91 percent of people age 18 to 34 saying they trust online reviews as much as a personal recommendation.`},{type:`p`,text:`None of that is retail-specific. It describes how people evaluate any business before committing money to it, including a rental company they have never used before.`},{type:`h2`,text:`What reviews are actually doing for a rental customer`},{type:`p`,text:`A renter cannot inspect the equipment before it shows up. They are trusting that it will run, that it will show up on time, and that the company will handle a problem fairly if something goes wrong. Reviews are the closest thing they have to a preview of that experience. A page full of specific, recent reviews mentioning reliable equipment and on-time delivery does more to reduce that uncertainty than any amount of marketing copy.`},{type:`p`,text:`A thin or stale review page does the opposite. It does not read as neutral. Next to a competitor with fifty recent reviews, a rental company with five old ones looks like the riskier choice, even if the equipment and service are just as good.`},{type:`h2`,text:`What to actually do about it`},{type:`ul`,items:[`Ask for a review right after equipment is returned in good condition, while the experience is still fresh`,`Make it easy: a direct link sent by text, not a request buried in a follow-up email nobody opens`,`Respond to every review, including the occasional negative one, since the response is part of what the next renter reads`,`Keep the flow steady rather than running an occasional push, since recent reviews carry more weight than an old pile`]},{type:`callout`,title:`The structural fix`,text:`Build the review ask into the return process the same way a damage check already happens, so it becomes a routine step for every rental instead of something that only happens when someone remembers.`}],faqs:[{q:`Do online reviews really matter for equipment rental companies?`,a:`Yes. Roughly 93 percent of consumers say reviews influence their purchasing decisions generally, and that pattern holds for rental companies, since renter
22s are trusting a company sight unseen before the equipment ever arrives.`},{q:`Why would reviews matter for something as functional as equipment rental?`,a:`Because a renter cannot inspect the equipment in advance and is relying on trust that it will work and arrive on time. Reviews are the closest substitute they have for firsthand experience with the company.`},{q:`How many reviews does a rental company need?`,a:`There is no fixed number, but a thin or outdated review page looks worse next to a competitor with many recent reviews, regardless of whether the actual service quality is comparable.`},{q:`When is the best time to ask a rental customer for a review?`,a:`Right after the equipment is returned in good condition, while the experience is still fresh, sent as a direct and easy link rather than buried in a follow-up email.`}],sources:[{label:`Rux Software: Equipment Rental Marketing Plan, Online Strategies (citing BrightLocal consumer review data)`,url:`https://ruxsoftware.com/insights/equipment-rental-marketing-plan-online-strategies`}],relatedSlugs:[`rental-companies`,`anvil-rentals-web-presence`],relatedService:{label:`Reputation Growth`,path:`/reputation-growth`},relatedIndustry:{label:`Rental Companies`,path:`/industries/rental-companies`},primaryCta:{label:`Plan My Rental Company's Review System`,href:Y}})),$.push(Q({slug:`how-med-spas-should-follow-up-after-a-consultation`,title:`How Should a Medical Aesthetics Practice Follow Up With Patients Who Don't Book After a Consultation?`,shortTitle:`Following Up After a Med Spa Consultation`,metaTitle:`How Should Med Spas Follow Up After a Consultation?`,metaDescription:`A consultation that does not end in a booking is not a lost patient yet. Here is how the follow-up should actually work.`,excerpt:`She came in, asked good questions, seemed genuinely interested, and left without booking. Most practices never contact her again. That is the leak.`,answer:`A medical aesthetics practice should follow up with every consultation that does not book immediately, using a structured sequence rather than one attempted callback, because most patients who do not book on the spot are still deciding rather than saying no. Consistent, prompt follow-up recovers a meaningful share of these patients, while practices with no process simply lose them.`,datePublished:`2026-09-10`,category:`revenue-operations`,industries:[`Healthcare and Aesthetics`],services:[`Revenue Operations`],body:[{type:`p`,text:`A consultation that ends without a booking is not automatically a lost patient. Most of the time, it means the person is still deciding, still checking their budget, or still talking it over with a partner. What actually loses the patient is what happens, or does not happen, in the weeks after.`},{type:`h2`,text:`Why the gap after a consultation matters so much`},{type:`p`,text:`Practices spend real money getting a prospective patient into a consultation in the first place, often somewhere in the range of tens of dollars per lead and well more per booked consultation once ad costs are counted. A consultation that ends without a decision represents that spend sitting unresolved. Treating it as a closed file the moment the person walks out the door wastes the acquisition cost that got them there.`},{type:`p`,text:`Response speed matters just as much on the front end. Leads contacted within five minutes convert at dramatically higher rates than ones contacted after thirty minutes, and that same urgency principle applies to the post-consultation follow-up: the longer a hesitant patient goes without hearing from the practice again, the more that initial interest fades or gets redirected elsewhere.`},{type:`h2`,text:`What a real follow-up sequence looks like`},{type:`ol`,items:[`A same-day or next-day check-in after the consultation, not a generic reminder but a message referencing what was actually discussed`,`A follow-up within the week addressing the specific hesitation the patient raised, whether that was cost, timing, or a question they did not get fully answered`,`A structured touchpoint two to three weeks out for patients who are still considering but have not said no`,`A clear, low-pressure way to book that does not require another phone call if the patient is ready to move forward on their own time`]},{type:`h2`,text:`Why no-show and drop-off rates make this worse than 
22it looks`},{type:`p`,text:`Appointment no-show rates for med spas commonly run 15 to 25 percent without automated reminders, dropping to roughly 8 to 12 percent with consistent text reminders. That same principle, that a small amount of structured, automatic contact meaningfully changes behavior, applies directly to post-consultation follow-up. A practice relying on staff to remember which consultations still need a callback will lose more of them than one running the same reminder discipline it already uses for appointments.`},{type:`h2`,text:`What most practices get wrong`},{type:`p`,text:`The common failure is a single attempted callback a few days later, and if it does not connect, the file gets quietly closed. One attempt is not a follow-up sequence. It is a formality. Patients who were genuinely interested but not ready on consultation day need more than one touch, spread out over weeks, not crammed into a single missed call.`},{type:`callout`,title:`The structural fix`,text:`Treat every non-booked consultation as an open pipeline item with a defined follow-up schedule, the same way a booked appointment gets a defined reminder schedule. The practices recovering the most post-consultation patients are not doing anything exotic. They are simply the ones still following up in week three.`}],faqs:[{q:`Is a patient who doesn't book after a consultation a lost cause?`,a:`No. Most patients who do not book immediately are still deciding rather than declining outright. Consistent, structured follow-up recovers a meaningful share of them, while a single callback attempt loses most of that opportunity.`},{q:`How many times should a med spa follow up after a consultation?`,a:`More than once, spaced out over a few weeks. A same-day check-in, a follow-up addressing the patient's specific hesitation within the week, and a check-in two to three weeks later cover most of the decision window.`},{q:`Do automated reminders actually reduce no-shows at med spas?`,a:`Yes. No-show rates commonly run 15 to 25 percent without automated reminders and drop to roughly 8 to 12 percent with consistent text reminders, showing how much structured, automatic contact changes patient behavior.`},{q:`Why do practices lose patients who seemed genuinely interested?`,a:`Usually because follow-up stops after one attempted callback. Genuinely interested patients who are not ready on consultation day need multiple, spaced-out touchpoints, not a single missed connection treated as a final answer.`}],sources:[{label:`ScaleHaven: 47 Med Spa Industry Statistics for 2026`,url:`https://scalehaven.io/blog/med-spa-industry-statistics/`}],relatedSlugs:[`healthcare-aesthetics`,`how-much-should-a-med-spa-spend-on-paid-ads`],relatedService:{label:`Revenue Operations`,path:`/revenue-operations`},relatedIndustry:{label:`Healthcare and Aesthetics`,path:`/industries/healthcare-aesthetics`},primaryCta:{label:`Plan My Practice's Follow-Up System`,href:Y}})),$.push(Q({slug:`the-5eleven-venue-launch-website-build`,category:`client-work`,title:`The 5Eleven Venue: Launching a New South Houston Event Space With a Website Built to Book It`,shortTitle:`The 5Eleven Venue Launch Story`,metaTitle:`The 5Eleven Venue Launch Story | Cellara Growth Co`,metaDescription:`How Cellara Growth Co built the website, blog, and inquiry system behind The 5Eleven Venue, a brand-new event venue in South Houston, Texas.`,excerpt:`A brand-new venue has no reviews, no history, and no second chance to look credible. Here is how Cellara Growth Co built The 5Eleven Venue's website, blog, and booking system to carry that weight from day one.`,answer:`Cellara Growth Co designed and built the website for The 5Eleven Venue, a new event venue in South Houston, Texas, including five core pages, a data-driven blog with structured data, a qualifying inquiry and availability form, and local SEO and GEO foundations, all built to launch the venue with credibility and bookings from day one.`,datePublished:`2026-09-06`,relatedService:{label:`High Performance Websites`,path:`/high-performance-websites`},relatedIndustry:{label:`Rental Companies`,path:`/industries/rental-companies`},relatedSlugs:[`resolveiq-technology-strategy-construction`,`spartan-judicial-campaign-infrastru
22cture-build`,`mc-eye-center-website-transformation`],mentions:[{name:`The 5Eleven Venue`,url:`https://the5elevenvenue.com/`,description:`A modern event venue in South Houston, Texas, hosting weddings, quinceañeras, birthdays, showers, and corporate events for up to 100 guests.`}],sources:[{label:`The 5Eleven Venue`,url:`https://the5elevenvenue.com/`}],body:[{type:`p`,text:`A brand-new venue starts every conversation from zero. No reviews, no track record of hosted events, no word of mouth built up over years. The first booking, and every one after it for a while, has to be won on what a stranger sees online in the first few minutes.`},{type:`p`,text:`The 5Eleven Venue is a modern event space at 511 College Avenue in South Houston, Texas, built for weddings, quinceañeras, birthdays, showers, and corporate events for up to 100 guests. Cellara Growth Co designed and built the website, the blog system behind it, and the inquiry process that turns a visitor into a booked tour or a held date.`},{type:`p`,text:`This is a build story, not a performance report. The venue is new enough that there are no bookings numbers to publish yet, and no result appears here that has not been verified. What follows is what was built, and why a brand-new business needs it built this specific way.`},{type:`h2`,text:`Why a New Venue Cannot Borrow Trust From a Track Record`},{type:`p`,text:`An established venue can lean on past events, guest reviews, and a Google Business Profile with a real history. A brand-new venue has none of that, which means the site itself has to do the work that reputation would otherwise do.`},{type:`ul`,items:[`Every detail on the site has to be true and specific, because there is no accumulated goodwill to absorb a vague claim or an inflated promise.`,`The first visitors are deciding whether to trust a place they cannot yet find reviews for, so clarity about capacity, amenities, and pricing has to replace social proof.`,`A launch date, in this case a public open house, is one of the only credibility events a new venue gets, and the site has to make full use of it.`,`The booking path has to work correctly the first time, since a new business does not get a second wave of visitors to make up for a broken form or a confusing page.`]},{type:`h2`,text:`What Cellara Built`},{type:`p`,text:`The engagement covered five core pages: Home, The Venue, Events and Pricing, a Blog, and Contact and Availability, along with the structured data, local SEO foundations, and inquiry system connecting them.`},{type:`h3`,text:`A site built around what is actually confirmed`},{type:`p`,text:`The build followed one rule strictly: publish only confirmed information. Capacity, address, starting price, the current reservation promotion, and the amenities list are all stated plainly. Anything not yet finalized by the venue, including deposit and refund terms, alcohol rules, and outside vendor policy, is left for a direct conversation rather than guessed at or invented. That restraint matters more for a new business than an established one, because an invented policy discovered later costs a brand-new venue the only asset it has: being taken at its word.`},{type:`h3`,text:`A qualifying availability form, not a generic contact box`},{type:`p`,text:`The Contact and Availability page collects event type, preferred and alternate dates, estimated guest count, and whether the visitor wants a tour, before anyone on the venue side has to ask a single follow-up question. Every submission routes into a CRM with those details already structured, and a notification reaches the venue immediately so a hot inquiry does not sit unanswered while a prospective host is still comparing venues.`},{type:`h3`,text:`A blog built to grow, not a single static page`},{type:`p`,text:`The first piece of content the venue needed was an article promoting its September 27, 2026 open house and vendor showcase, complete with Event structured data so the date, time, and location are machine readable to search engines and AI assistants. Rather than hand-build that one article and stop, Cellara built the blog as a data-driven system from the start, so every future article the venue publishes, planning guides, seasonal content, vendor spotlights, drops into the same structure without rebuilding the page each time.`},{type:`h2`,text:`The Open House as a Credibility Event`},{type:`p`,text:`A public open house is one of the few moments a brand-new venue can convert strangers into witnesses. The site was built to make that moment do more than announce a date.`},{type:`ul`,items:[`A homepage announcement bar keeps the open house visible on every page until the event passes, then automatically switches to a private tour invitation so the message never goes stale.`,`A dedicated article lists the real vendors participating in the showcase, sourced directly from the venue's own promotional materials rather than a generic vendor list.`,`Event structured data marks the date, time, and location so the open house can surface correctly in search and AI-generated answers, not just to visitors who already knew to look for it.`]},{type:`h2`,text:`Search and Answer Engine Foundations`},{type:`p`,text:`For a venue with no history to rank on, technical clarity is what search engines and AI assistants have to work with instead.`},{type:`ul`,items:[`Organization, LocalBusiness, and Event structured data that match what is actually visible on the page, with no field populated by a guess.`,`Unique titles and meta de
22scriptions on every page, with self-referencing canonical URLs.`,`Direct, answer-first copy that states capacity, location, amenities, and starting price plainly, in the format an AI assistant can quote when someone asks about event venues in South Houston.`,`Consistent naming and address details across every page, so the venue reads as one clear entity rather than a set of loosely connected pages.`]},{type:`callout`,title:`What is being measured`,text:`Because the venue just launched, there is no performance history to report yet. Tracking is in place from day one for form starts versus completions, response time from inquiry to first contact, and which pages and channels bring in tour requests, so the next update to this story will be built on real numbers instead of a guess.`},{type:`h2`,text:`Why This Applies Beyond Event Venues`},{type:`p`,text:`Every brand-new service business faces the same starting problem The 5Eleven Venue did: no reviews, no history, and one chance to look credible to the first visitors who find it. A new med spa, a new law practice, a new home services company, and a new event venue all solve it the same way.`},{type:`ol`,items:[`State only what is confirmed, so nothing published has to be walked back later.`,`Build the inquiry path to qualify and route automatically, so speed does not depend on someone remembering to check an inbox.`,`Build content as a system from the first article, so the site keeps growing without a rebuild every time.`,`Use a real credibility event, a launch, an open house, a grand opening, as more than an announcement.`,`Track the path from day one, so the first real update is built on evidence.`]},{type:`cta`,eyebrow:`Install the system`,title:`A new business gets one chance to look credible. Build the site that earns it.`,text:`Cellara Growth Co designs and builds the websites and revenue infrastru
22cture service businesses use to launch with credibility, capture every inquiry, and follow up without manual work.`,primary:{label:`Book a Strategy Call`,href:Y},secondary:{label:`View Pricing`,href:`/pricing`}}],faqs:[{q:`What did Cellara Growth Co build for The 5Eleven Venue?`,a:`Cellara designed and built a five-page website (Home, The Venue, Events and Pricing, Blog, and Contact and Availability), a data-driven blog system with structured data, a qualifying inquiry and availability form connected to a CRM, and local SEO and GEO foundations.`},{q:`What is The 5Eleven Venue?`,a:`The 5Eleven Venue is a modern event venue at 511 College Avenue in South Houston, Texas, built for weddings, quinceañeras, birthdays, showers, and corporate events for up to 100 guests.`},{q:`Why does a brand-new venue need more than an attractive website?`,a:`A new venue has no reviews or track record to lean on, so the site itself has to carry the credibility a reputation would otherwise provide. That means only confirmed information is published, the booking path has to work correctly the first time, and every visible detail has to be specific and true.`},{q:`Does this article include booking numbers or performance results?`,a:`No. The venue only recently launched, so there is no verified performance history to publish yet. Tracking is in place from day one, and results will be added only once they exist and have been confirmed.`},{q:`Can Cellara Growth Co build this kind of launch system for other new businesses?`,a:`Yes. The same approach, publishing only confirmed information, building a qualifying inquiry system, structuring content to scale, and tracking from day one, applies to any new service business launching without an existing reputation to rely on.`}]})),$.push(Q({slug:`city-cafe-south-houston-local-seo-geo-build`,category:`client-work`,title:`City Cafe: Turning a 70-Year South Houston Diner Into a Local Search and AI-Answer Landmark`,shortTitle:`City Cafe Local SEO and GEO Story`,metaTitle:`City Cafe South Houston: Local SEO and GEO Build`,metaDescription:`How Cellara Growth Co built local SEO and GEO foundations for City Cafe, a South Houston diner serving the same block since 1952.`,excerpt:`A restaurant can be a genuine local landmark and still be invisible to a hungry stranger's phone. Here is how Cellara Growth Co built City Cafe's website to answer that stranger, and the AI assistant they asked, correctly.`,answer:`Cellara Growth Co built the website and local SEO and GEO foundations for City Cafe, a South Houston breakfast and lunch restaurant open since 1952. The build centers on Restaurant structured data, a verified answer-first FAQ set, and consistent name, address, phone, and hours, so search engines and AI assistants can confidently answer real questions.`,datePublished:`2026-09-07`,relatedService:{label:`Search Visibility`,path:`/seo-geo`},relatedIndustry:{label:`Home Services`,path:`/industries/home-services`},relatedSlugs:[`the-5eleven-venue-launch-website-build`,`resolveiq-technology-strategy-construction`,`is-your-website-invisible-to-ai`],mentions:[{name:`City Cafe`,url:`https://www.sohocitycafe.com`,description:`An independent breakfast and lunch restaurant serving South Houston, Texas, at 513 College Ave since 1952.`}],sources:[{label:`City Cafe`,url:`https://www.sohocitycafe.com`}],body:[{type:`p`,text:`City Cafe has served breakfast and lunch at 513 College Ave in South Houston, Texas since 1952. The founding year is still painted on the awning. Regulars have their tables. The steam table changes by the day, the way it always has, and the chicken fried steak has been on the board every weekday for longer than most of its customers have been alive.`},{type:`p`,text:`None of that shows up automatically to someone who has never been there. A local landmark built on seventy years of word of mouth can still be functionally invisible to a stranger standing outside the neighborhood, typing a question into a phone. Cellara Growth Co built City Cafe's website and the local search and GEO foundations behind it to close that gap.`},{type:`p`,text:`This is a build story, not a performance report. The site is new enough that there is no traffic or ranking history to publish yet, and n
22o number appears here that has not been verified.`},{type:`h2`,text:`Why an Established Restaurant Still Needs Local SEO and GEO Work`},{type:`p`,text:`Reputation built over decades lives in people's memory, in regulars who bring their kids, in a roadside sign people navigate by. None of that is readable by a search engine or an AI assistant unless it is also written down, structured, and made consistent everywhere the business appears online.`},{type:`ul`,items:[`A hungry person searching on a phone decides in seconds, based on whatever answers a search result or an AI assistant gives them first.`,`AI assistants and local search results increasingly answer questions directly, such as what a restaurant is known for or whether it is open right now, without the searcher ever clicking through to the website.`,`A business can be a genuine institution in person and still lose that first search to a newer competitor with a clearer, more structured web presence.`,`Getting the basics inconsistent across the website, the Google listing, and other directories actively works against a business, even one with real history to point to.`]},{type:`h2`,text:`What Cellara Built`},{type:`p`,text:`The engagement covered six pages: Home, Menu, Daily Specials, Our Story, Gallery, and Visit, along with the structured data, answer-first content, and photo and story verification system connecting them.`},{type:`h3`,text:`Restaurant structured data that matches the real business exactly`},{type:`p`,text:`The site emits Restaurant, WebSite, and BreadcrumbList structured data built directly from a single source of truth for name, address, phone, hours, cuisine, and price range, so nothing in the schema can drift out of sync with what is printed on the page. Hours are marked as verified and published day by day, rather than left as a vague range.`},{type:`h3`,text:`A verified, answer-first FAQ built for how people actually ask`},{type:`p`,text:`City Cafe's site publishes ten verified questions and answers, in the exact phrasing a person or an AI assistant would use: where the restaurant is, what kind of food it serves, whether breakfast runs all day, what is on the steam table today, where to park, and how to order online. Each answer is short, direct, and specific. An unverified answer simply does not publish, so nothing on the page is a guess dressed up as a fact.`},{type:`h3`,text:`Getting today's hours right, in the restaurant's own time zone`},{type:`p`,text:`Whether a restaurant is open right now is one of the most common questions a search engine or AI assistant has to answer, and one of the easiest to get wrong for a visitor searching from another time zone. City Cafe's site computes today's open or closed status directly against Houston local time, not the visitor's device clock, so the answer stays correct for a local regular and someone flying in through the nearby Hobby Airport alike.`},{type:`h3`,text:`A steam table that actually changes, because it actually changes`},{type:`p`,text:`The daily specials page reflects the real weekday rotation from the printed steam table board, from Monday's roast beef and chicken cordon bleu through Friday's fried catfish and prime rib. That gives the site genuinely new, accurate content every day of the week without anyone having to remember to update it manually.`},{type:`h3`,text:`Photography and stories that only publish once they are real`},{type:`p`,text:`The gallery runs on real photographs only, organized by category and tagged with the specific rights to use each one, and a photo without confirmed rights simply does not render. Customer stories and press mentions follow the same rule: both are built to publish the moment a real, verified one exists, and neither shows anything invented in the meantime.`},{type:`callout`,title:`Two doors apart on College Avenue`,text:`City Cafe sits at 513 College Ave. The 5Eleven Venue, another Cellara build, sits two doors down at 511 College Ave, close enough that the venue's own site uses City Cafe as a landmark for directions. Building both gave Cellara a real, working example of how two independent South Houston businesses on the same block can each have their own accurate, non-overlapping local search presence.`},{type:`h2`,text:`Why This Applies Beyond One Restaurant`},{type:`p`,text:`The pattern here is not specific to diners. Any business with real history and a strong local reputation, a family medical practice, a law firm that has served the same county for decades, a home services company with three generations of customers, faces the same gap: reputation that lives in memory does not automatically become visible to a search engine or an AI assistant.`},{type:`ol`,items:[`Make the basic facts, name, address, phone, hours, and offering, consistent everywhere and structured in schema, not just printed in prose.`,`Answer real questions directly, in the words people actually use, rather than general marketing language.`,`Build recurring content, like a rotating menu or a specials board, into the site itself so it changes on its own.`,`Publish only what is verified: real photos with real rights, real reviews with real permission, nothing invented to fill space.`,`Get the practical details, like current open or closed status, correct for the business's real time zone and hours.`]},{type:`cta`,eyebrow:`Install the system`,title:`Decades of reputation deserve a website that can actually answer for it.`,text:`Cellara Growth Co builds the local SEO and GEO foundations service businesses use to turn real reputation into visibility, in search results and in AI-generated answers alike.`,primary:{label:`Book a Strategy Call`,href:Y},secondary:{label:`View Pricing`,href:`/pricing`}}],faqs:[{q:`What did Cellara Growth Co build for City Cafe?`,a:`Cellara built a six-page website (Home, Menu, Daily Specials, Our Story, Gallery, and Visit) along with Restaurant structured data, a verified answer-first FAQ set, a real-time open status check built for the restaurant's own time zone, and a photo and story verification system that only publishes confirmed material.`},{q:`What is City Cafe?`,a:`City Cafe is an independent breakfast and lunch restaurant at 513 College Ave in South Houston, Texas, open since 1952 and serving American diner and comfort food, including a steam table that rotates by weekday.`},{q:`Why does a 70-year-old restaurant need local SEO and GEO work?`,a:`Decades of in-person reputation are not automatically readable by a search engine or an AI assistant. Unless the same facts are written down, structured, and kept consistent everywhere the business appears online, a newer competitor with a clearer web presence can win the search even against a genuine local institution.`},{q:`What is GEO and why does it matter for a local restaurant?`,a:`GEO, or generative engine optimization, is building a site so AI assistants can answer questions about a business directly and correctly, such as what it serves or whether it is open right now. It relies on the same ingredients as good local SEO: accurate structured data and direct, verified answers.`},{q:`Does this article include traffic or ranking results for City Cafe?`,a:`No. The website is new enough that there is no performance history to report yet. This article describes what was built, not results, and no number appears here that has not been verified.`}]})),$.push(Q({slug:`should-law-firms-use-ai-answering-for-after-hours-intake`,title:`Should Law Firms Use AI Answering to Handle After-Hours Intake Calls?`,shortTitle:`AI Answering for Law Firm Intake`,metaTitle:`Should Law Firms Use AI for After-Hours Intake?`,metaDescription:`Most law firms lose calls to voicemail during and after business hours. Here is what AI answering actually fixes, and what it should not replace.`,excerpt:`A prospective client calls three firms before lunch. The one that picks up gets the case. Here is what that means for how a firm handles the calls it cannot staff.`,answer:`AI answering makes sense for law firms mainly as after-hours and overflow coverage, since a large share of inbound calls to firms go unanswered or to voicemail. It should capture the caller's information, answer basic 
22intake questions, and route urgent matters to a person quickly. It should never give legal advice or make a firm's decisions for it.`,datePublished:`2026-09-13`,category:`ai-front-desk`,industries:[`Legal Services`],services:[`AI Front Desk`],body:[{type:`p`,text:`A prospective client is comparing three or four law firms at once, usually late at night or on a lunch break, calling down a short list until someone picks up. The firm that answers first often gets the case, regardless of which firm actually has the stronger track record.`},{type:`h2`,text:`How many calls are law firms actually missing?`},{type:`p`,text:`Clio's Legal Trends Report found that only 56 percent of calls to law firms were answered by a person, with 39 percent going to voicemail. On email, only 40 percent of firms responded at all, and more than half of firms took longer than 72 hours to respond to a voicemail. None of that is a small gap. It is closer to half of all inbound interest going unanswered or stalling for days.`},{type:`p`,text:`The same report found that 82 percent of prospective clients said timeliness mattered to them, and 79 percent expected a response within 24 hours. Firms are being judged against an expectation that most of them are not currently meeting, on the exact channel, the phone, where a caller has the easiest path to just calling the next firm instead.`},{type:`h2`,text:`Where AI answering actually helps`},{type:`p`,text:`The gap is rarely about attorney time. It is about coverage: nights, weekends, lunch hours, and the moments when everyone on staff is already on another call. AI answering closes that specific gap. It picks up immediately, gathers the caller's name, contact information, and a plain description of what they need, and gets that information in front of a person fast.`},{type:`ul`,items:[`Every call gets answered immediately, at any hour, instead of routing to voicemail`,`Basic intake questions get asked the same way every time, so nothing important gets missed on a rushed call`,`Urgent matters get flagged and routed to a person quickly, rather than waiting in a general queue`,`Every caller's information reaches the firm's system automatically, instead of depending on someone transcribing a voicemail`]},{type:`h2`,text:`What AI answering should never do for a law firm`},{type:`p`,text:`None of this replaces a lawyer. AI answering should never give legal advice, evaluate the merits of a case, or make a commitment on the firm's behalf. Its job is to make sure no caller hits silence, gather accurate information, and get a real person into the conversation quickly. Quality of response still matters as much as speed. Clio's report found that 6 in 10 firms gave an unsatisfactory phone response even when someone did pick up, which is its own separate problem an answering system alone will not fix.`},{type:`callout`,title:`The structural fix`,text:`Treat call coverage as infrastructure, not a task assigned to whoever is free. A system that answers every call, gathers the right information, and hands off urgent matters quickly closes the gap between when someone decides to call a lawyer and when a real one actually responds.`}],faqs:[{q:`How many calls do law firms actually miss?`,a:`Clio's Legal Trends Report found only 56 percent of calls to law firms were answered by a person, with 39 percent going to voicemail, and more than half of firms took over 72 hours to respond to those voicemails.`},{q:`Is it appropriate for a law firm to use AI to answer calls?`,a:`Yes, for coverage and intake. AI answering should capture caller information, answer basic questions, and route urgent matters to a person quickly. It should never give legal advice or evaluate a case, since that requires an attorney.`},{q:`How fast do prospective clients expect a law firm to respond?`,a:`Most expect a response within 24 hours. Clio's report found 82 percent of prospective clients said timeliness mattered and 79 percent expected a response within a day, an expectation most firms are not currently meeting.`},{q:`Does answering the phone fix a law firm's intake problem?`,a:`Not by itself. The same report found 6 in 10 firms gave an unsatisfactory phone response even when a person answered, so the quality of the intake conversation matters as much as whether the call gets picked up.`}],sources:[{label:`Clio: Legal Trends Report Reveals Law Firms Struggle to Respond to Client Inquiries`,url:`https://www.clio.com/about/press/clios-legal-trends-report-reveals-law-firms-struggle-to-respond-to-client-inquiries/`}],relatedSlugs:[`is-ppc-worth-it-for-law-firms`,`legal-services`],relatedService:{label:`AI Front Desk`,path:`/ai-front-desk`},relatedIndustry:{label:`Legal Services`,path:`/industries/legal-services`},primaryCta:{label:`Plan My Firm's Intake Coverage`,href:Y}})),$.push(Q({slug:`how-do-ai-assistants-recommend-a-med-spa`,title:`How Do AI Assistants Like ChatGPT Recommend a Med Spa or Aesthetic Practice?`,shortTitle:`How AI Recommends Med Spas`,metaTitle:`How Do AI Assistants Recommend a Med Spa?`,metaDescription:`AI tools favor medically supervised, well-documented practices over polished homepages. Here is what actually earns the recommendation.`,excerpt:`Someone asks an AI assistant to re
22commend a med spa nearby. The answer it gives is not based on the prettiest homepage. It is based on what the practice can actually prove.`,answer:`AI assistants favor med spas and aesthetic practices that show named, credentialed providers, clear medical supervision, consistent business listings, and recent genuine reviews. They are built to be cautious around medical claims, so vague marketing language and unverifiable promises get passed over in favor of practices with specific, verifiable, and consistently documented information.`,datePublished:`2026-09-14`,category:`search-visibility`,industries:[`Healthcare and Aesthetics`],services:[`Search Visibility`],body:[{type:`p`,text:`A prospective patient asks an AI assistant something like which med spa near me does Botox well. What comes back is not a ranked list of the flashiest websites. It is whichever practice the assistant can most confidently verify, and confidence is earned through specifics, not polish.`},{type:`h2`,text:`Why AI assistants are cautious about medical recommendations`},{type:`p`,text:`Aesthetic treatments sit close enough to medicine that AI systems tend to be deliberately careful about what they recommend and how confidently they say it. They favor sources that read as credible and medically supervised, and they avoid restating overpromising or unverifiable claims, even when a practice's own marketing makes those claims boldly. A page full of vague enthusiasm without a named provider or a clear description of the treatment gives an AI system little it can safely repeat.`},{type:`h2`,text:`What actually earns the mention`},{type:`ul`,items:[`Named providers and medical directors, with real credentials listed, rather than an anonymous team page`,`Clear statements of medical supervision for each treatment offered, not just a general mention of safety`,`Accurate, specific descriptions of each treatment, written in plain language an AI system can quote directly`,`Consistent business information across the website, Google Business Profile, and other listings, since conflicting details reduce confidence in any of them`,`Recent, genuine reviews that mention specific treatments and outcomes, not just a high star average`]},{type:`h2`,text:`The technical piece most practices skip`},{type:`p`,text:`Structured data, the behind-the-scenes markup that labels a page's content as a clinic, a provider, a treatment, a review, or a frequently asked question, gives AI systems a direct, unambiguous way to read a page instead of guessing at its meaning. A practice can have accurate information on the page and still be hard for an AI system to parse correctly if that structure is missing.`},{type:`h2`,text:`What tends to get skipped over`},{type:`p`,text:`Pages built around brand voice instead of specific answers, treatment descriptions that promise outcomes rather than explaining the procedure, and listings with a different address or phone number than the website all work against a practice here. None of these are unusual mistakes. They are just the default way most aesthetic practice websites and profiles get built.`},{type:`callout`,title:`The structural fix`,text:`Build every treatment page around a named provider, a plain-language explanation of what the treatment actually involves, and consistent details that match everywhere the practice is listed. That is what an AI assistant needs to recommend a practice with confidence, and it is also what a nervous first-time patient needs to book with confidence.`}],faqs:[{q:`Why would an AI assistant recommend one med spa over another nearby?`,a:`AI assistants favor practices with named, credentialed providers, clear statements of medical supervision, and consistent, verifiable information across their website and listings, since these give the assistant something specific and safe to repeat.`},{q:`Do reviews affect whether AI assistants recommend a med spa?`,a:`Yes. Recent, genuine reviews that mention specific treatments and outcomes carry more weight than a high star average alone, and they reinforce the credibility signals AI systems already look for.`}
22,{q:`Does having a medical director listed by name actually matter for AI visibility?`,a:`Yes. Named providers and medical directors with real credentials are a key trust signal, since AI systems are cautious about medical claims and favor sources that clearly show medical oversight.`},{q:`What should a med spa avoid when trying to be recommended by AI tools?`,a:`Vague marketing language and unverifiable outcome promises. AI systems are built to avoid overpromising, so pages that lean on enthusiasm instead of specific, accurate treatment information tend to get passed over.`}],sources:[{label:`Kelly WM: Med Spas in AI Search, How to Get Found in ChatGPT and AI Overviews`,url:`https://kellywm.com/blog/med-spa-ai-search`}],relatedSlugs:[`healthcare-aesthetics`,`how-much-should-a-med-spa-spend-on-paid-ads`],relatedService:{label:`Search Visibility`,path:`/seo-geo`},relatedIndustry:{label:`Healthcare and Aesthetics`,path:`/industries/healthcare-aesthetics`},primaryCta:{label:`Plan My Practice's AI Visibility`,href:Y}})),$.push(Q({slug:`should-salons-run-paid-ads-or-rely-on-referrals`,title:`Should Salons and Spas Run Paid Ads, or Rely on Referrals and Word of Mouth?`,shortTitle:`Should Salons Run Paid Ads?`,metaTitle:`Should Salons Run Paid Ads or Rely on Referrals?`,metaDescription:`Paid ads can fill a salon's chair, but the real question is whether the business can keep who it books. Here is when the spend actually pays off.`,excerpt:`A new client from a paid ad costs real money to acquire. Whether that money was well spent depends on something that has nothing to do with the ad.`,answer:`Paid ads can work for salons, but mainly once rebooking is already solid. Acquiring a new client typically costs five to seven times more than retaining one, so a salon with weak rebooking will spend heavily on ads and lose most of those clients anyway. Referrals stay cheaper and more trusted for a salon that can keep who it books.`,datePublished:`2026-09-15`,category:`revenue-operations`,industries:[`Beauty and Wellness`],services:[`Paid Growth`],body:[{type:`p`,text:`A salon spends fifteen hundred dollars a month on paid ads and books thirty new clients. That sounds like a win until half of them never come back for a second visit. The ad worked. The business did not get what it paid for.`},{type:`h2`,text:`What a new client actually costs`},{type:`p`,text:`A realistic range for paid social advertising is 25 to 80 dollars per new client, with higher costs in competitive markets. That is not expensive on its own. It becomes expensive when a large share of those clients never rebook, since the real cost is not per new client, it is per client the salon actually keeps.`},{type:`p`,text:`Acquiring a new client typically costs five to seven times more than retaining an existing one. That ratio does not change because a client came from an ad instead of a referral. It just means a weak rebooking process quietly multiplies the true cost of every paid campaign.`},{type:`h2`,text:`The number that decides whether paid ads make sense`},{type:`p`,text:`A healthy first-to-second-visit rebooking rate runs 40 to 55 percent. Below 30 percent signals a retention problem, meaning most newly acquired clients are not generating recurring value no matter how the salon found them. A salon in that range should fix rebooking before spending more on ads, because the leak is downstream of the ad, not upstream of it.`},{type:`h2`,text:`Why referrals still carry more trust`},{type:`p`,text:`Ninety-three percent of consumers say referrals are more trustworthy than advertisements. That is not a reason to skip paid ads entirely. It is a reason to treat referrals and paid ads as different tools for different jobs. Referrals bring in clients who already trust the salon before they book. Paid ads bring in clients who have to be convinced, first by the ad and then by the actual visit, which is exactly why the second visit matters so much more for that group.`},{type:`h2`,text:`When paid ads are worth running`},{type:`ul`,items:[`Rebooking is already tracked and running above 40 percent, so new clients have a real path to becoming regulars`,`The salon has open chair capacity it needs to fill, not just a wish for more traffic`,`Cost per new client and cost per retained client are both being measured, not just total bookings`,`The follow-up and rebooking prompt happens the same way for every client, regardless of how they found the salon`]},{type:`callout`,title:`The structural fix`,text:`Fix the rebooking system before scaling ad spend, then measure paid ads by cost per retained client, not cost per new booking. A salon that gets this order right turns paid ads into a growth channel instead of an expensive way to meet strangers once.`}],faqs:[{q:`How much does it cost to get a new client through paid ads at a salon?`,a:`A realistic range for paid social advertising is 25 to 80 dollars per new client, with higher costs in competitive urban markets. The real cost depends heavily on what share of those clients actually rebook.`},{q:`Is it cheaper to keep an existing salon client than acquire a new one?`,a:`Yes. Acquiring a new client typically costs five to seven times more than retaining an existing one, which means a weak rebooking process makes every paid ad campaign more expensive than it looks.`},{q:`Should a salon fix rebooking before running paid ads?`,a:`Generally yes. A healthy first-to-second-visit rate runs 40 to 55 percent. Below 30 percent signals most new clients are not becoming regulars, so ad spend is better used after that gap is closed.`},{q:`Do referrals really work better than paid ads for a salon?`,a:`Referrals carry more built-in trust. Ninety-three percent of consumers say referrals are more trustworthy than advertisements, but referrals alone often cannot supply the volume a growing salon needs, which is where paid ads still have a role.`}],sources:[{label:`Dingg: The Rising Cost of Client Acquisition in the US Beauty Industry`,url:`https://dingg.app/blogs/the-rising-cost-of-client-acquisition-in-the-us-beauty-industry-are-your-a
22ds-wasting-money`},{label:`Mangomint: How to Create a Salon Referral Program`,url:`https://www.mangomint.com/blog/salon-referral-program/`}],relatedSlugs:[`what-should-a-salon-do-when-a-client-stops-rebooking`,`how-many-reviews-does-a-salon-need`],relatedService:{label:`Paid Growth`,path:`/paid-growth`},relatedIndustry:{label:`Beauty and Wellness`,path:`/industries/beauty-wellness`},primaryCta:{label:`See If Paid Ads Make Sense for My Salon`,href:Y}})),$.push(Q({slug:`how-many-google-reviews-does-a-home-service-company-need`,title:`How Many Google Reviews Does a Home Service Company Need to Win the Local Pack?`,shortTitle:`Reviews Needed to Win the Local Pack`,metaTitle:`How Many Google Reviews Does a Contractor Need?`,metaDescription:`There is no universal magic number, but review count and recency carry real ranking weight. Here is how to figure out your actual target.`,excerpt:`A homeowner searches for a plumber and Google shows three options before anything else. Getting into that box has a lot to do with reviews, and not just how many.`,answer:`The number of Google reviews a home service company needs depends on its market and its competitors, not a fixed target. Small markets can compete with 25 to 75 reviews, mid-size cities typically need 75 to 200, and major metros often need 200 or more. Review count carries real ranking weight, and steady activity matters as much as the total.`,datePublished:`2026-09-16`,category:`search-visibility`,industries:[`Home Services`],services:[`Reputation Growth`],body:[{type:`p`,text:`A homeowner searches for a plumber, an electrician, or a roofer, and Google shows three businesses before anything else on the page. Getting into that box, usually called the local pack, has a lot to do with reviews. Not just how many exist, but how recent and steady they are.`},{type:`h2`,text:`What review counts actually look like by market`},{type:`p`,text:`There is no single number that works everywhere, because the target moves with the competition. In small or rural markets, 25 to 75 reviews can be enough to compete, with some top performers holding as few as 15 to 30. In mid-size cities, that typically climbs to 75 to 200, with the strongest competitors often above 100. In major metro areas, businesses holding top three positions commonly have 200 to 500 or more.`},{type:`p`,text:`The practical target is not a number from a guide. It is whatever your top three local competitors currently have, since that is the bar Google is actually measuring against.`},{type:`h2`,text:`How much weight reviews actually carry`},{type:`p`,text:`A 2025 study from Search Atlas found review count carries roughly 19.2 percent weight in local search rankings overall, rising to 26 percent specifically for top 10 map pack positions. Proximity to the searcher still ranks highest at 55.2 percent, which is one reason review count alone cannot overcome location. It also means a business cannot ignore reviews and expect service quality or price to make up the difference in visibility.`},{type:`h2`,text:`Why recent reviews matter more than old ones`},{type:`p`,text:`A business with 140 recent reviews and 12 added this month can outrank a competitor with 300 older, stagnant reviews, because Google weighs activity and recency, not just the total on the page. Recommended monthly pace runs 2 to 5 new reviews in small markets, 5 to 10 in mid-size markets, and 10 or more in large ones.`},{type:`ul`,items:[`Check what your top three local competitors currently have, not a generic industry number`,`Ask for a review after every completed job, not just the ones that went unusually well`,`Aim for steady monthly volume over an occasional push, since Google rewards consistent activity`,`Respond to every review, since responses are part of what the next searcher reads`]},{type:`callout`,title:`The structural fix`,text:`Build the review ask into the same workflow that already closes out a job, so it happens for every customer automatically. A steady trickle of recent reviews outperforms an old pile every time, and it is the difference between showing up in the local pack and showing up on page two.`}],faqs:[{q:`How many Google reviews does a home service business need to rank locally?`,a:`It depends on the market. Small markets can compete with 25 to 75 reviews, mid-size cities typically need 75 to 200, and major metro areas often need 200 or more to hold a top three position.`},{q:`Does review count actually affect local search ranking?`,a:`Yes. A 2025 Search Atlas study found review count carries roughly 19.2 percent weight in local rankings overall, rising to 26 percent for top 10 map pack positions, second only to proximity.`},{q:`Is it better to have more reviews or more recent reviews?`,a:`Recency and activity matter more than raw total. A business with 140 recent reviews gaining a steady monthly pace can outrank a competitor with 300 older, inactive reviews.`},{q:`How many new reviews should a home service company aim for each month?`,a:`Roughly 2 to 5 per month in small markets, 5 to 10 in mid-size markets, and 10 or more in large metro markets, based on typical review velocity among top-ranking competitors.`}],sources:[{label:`Hook Agency: How Many Local Reviews Does It Take to Beat the Competition`,url:`https://hookagency.com/blog/how-many-local-reviews-beat-competition/`}],relatedSlugs:[`home-services`,`why-your-google-business-profile-outranks-your-website`],relatedService:{label:`Reputation Growth`,path:`/reputation-growth`},relatedIndustry:{label:`Home Services`,path:`/industries/home-services`},primaryCta:{label:`Plan My Company's Review System`,href:Y}})),$.push(Q({slug:`should-advisory-firms-use-ai-answering-after-hours`,title:`Should Financial Advisory Firms Use AI Answering for Calls Outside Business Hours?`,shortTitle:`AI Answering for Advisory Firms`,metaTitle:`Should Advisory Firms Use AI Call Answering?`,metaDescription:`A prospect who researched for weeks will not wait for a callback. Here is where AI answering fits for advisors, and where compliance draws the line.`,excerpt:`By the time a prospective client actually calls a financial advisor, they have already done weeks of research. Missing that call wastes more than a message would suggest.`,answer:`AI answering can work for financial advisory firms as coverage for after-hours and overflow calls, capturing contact information and basic scheduling needs so a prospect is never met with silence. It should never discuss investment strategy or give advice, and any system used must fit the firm's existing recordkeeping and disclosure obligations, since client communications in this industry are regulated.`,datePublished:`2026-09-17`,category:`ai-front-desk`,industries:[`Advisory Firms`],services:[`AI Front Desk`],body:[{type:`p`,text:`By the time someone actually picks up the phone to call a financial advisor, they have usually already done real homework. That call is not an impulse. It is the last step of a research process that started weeks earlier, which is exactly why missing it costs more than it looks like on the surface.`},{type:`h2`,text:`How much research happens before that first call`},{type:`p`,text:`Even when a prospect arrives through a referral, research shows 96 percent still plan to do further research online before making a hiring decision, and 96 percent plan to interview more than one advisor. About 83 percent specifically research a firm's reputation through online reviews, 72 percent visit the firm's website, and a quarter now use AI tools like ChatGPT or Gemini somewhere in that process.`},{type:`p`,text:`None of that research is casual. A prospect who has already compared fee structures, checked reviews, and read through a website before calling has invested real time in that firm specifically. Reaching a dead end on the call, whether that is voicemail or a slow callback, wastes all of it and pushes them back to the same list of options they were already comparing.`},{type:`h2`,text:`Where AI answering fits`},{type:`ul`,items:[`Every call gets answered immediately during evenings, weekends, and busy hours, instead of routing to voicemail`,`Basic scheduling and contact information get captured accurately and consistently, every time`,`Simple, factual questions about the firm, such as services offered or how to book a first meeting, get answered without delay`,`Anything involving a prospect's specific financial situation gets routed to an advisor, not answered on the spot`]},{type:`h2`,text:`Why this is a compliance question as much as a coverage question`},{type:`p`,text:`Financial advisory firms operate under recordkeeping and disclosure requirements that apply to client communications, including calls and messages. Any system used to answer calls or capture inquiries has to fit inside those existing obligations rather than sit outside them, and it should never venture into actual investment advice or a recommendation, which has to come from a licensed advisor. The goal is coverage, not a substitute for the advisor.`},{type:`callout`,title:`The structural fix`,text:`Treat answering coverage as the last step of the research process a prospect already completed, not the first step of a sales pitch. A system that answers promptly, captures the right information, and routes anything substantive to a licensed advisor protects both the compliance obligation and the weeks of trust the prospect already built before they dialed.`}],faqs:[{q:`Do prospective clients research a financial advisor before calling?`,a:`Yes, extensively. Research shows 96 percent plan to do further online research even after a referral, 83 percent check a firm's reputation through reviews, and 72 percent visit the firm's website before ever making contact.`},{q:`Is it compliant for an advisory firm to use AI to answer calls?`,a:`It can be, as long as the system fits within the firm's existing recordkeeping and disclosure obligations for client communications and never gives investment advice or a recommendation, which must come from a licensed advisor.`},{q:`What should AI answering never do for a financial advisory firm?`,a:`It should never discuss investment strategy, evaluate a prospect's financial situation, or make a recommendation. Its role is coverage and information capture, with anything substantive routed to a licensed advisor.`},{q:`Are AI tools like ChatGPT part of how people find financial advisors now?`,a:`Increasingly, yes. About a quarter of prospects report using AI search tools somewhere in their research process, alongside traditional search engines, advisor directories, and online reviews.`}],sources:[{label:`Wealthtender: How Americans Will Choose Financial Advisors in 2026 and Beyond`,url:`https://wealthtender.com/insights/how-americans-find-and-hire-financial-a
22dvisors/`},{label:`Smarsh: RIA Compliance Requirements and SEC Rules for Advisers`,url:`https://www.smarsh.com/blog/thought-leadership/ria-communications-compliance-requirements/`}],relatedSlugs:[`do-advisory-firms-need-online-reviews`,`should-financial-advisors-run-paid-ads`],relatedService:{label:`AI Front Desk`,path:`/ai-front-desk`},relatedIndustry:{label:`Advisory Firms`,path:`/industries/advisory-firms`},primaryCta:{label:`Plan My Firm's Call Coverage`,href:Y}})),$.push(Q({slug:`should-spas-and-salons-use-ai-answering-for-after-hours-calls`,title:`Should Spas and Salons Use an AI Answering Service for After-Hours Booking Requests?`,shortTitle:`Salon Answering Service`,metaTitle:`Salon Answering Service: Should AI Cover After Hours?`,metaDescription:`A salon answering service has to handle after-hours booking requests. Here is where AI answering works, and where a stylist still needs to step in.`,excerpt:`Clients do not stop wanting to book, reschedule, or ask a quick question just because the salon closed for the night. The businesses that answer anyway are the ones that keep the appointment.`,answer:`An AI answering service works well for spas and salons as after-hours coverage, capturing booking requests, rescheduling needs, and simple questions from calls and messages that arrive after close so nothing waits until morning. It should hand off anything requiring judgment, like a service consultation or a complaint, to a real team member as soon as the salon reopens.`,datePublished:`2026-09-18`,category:`ai-front-desk`,industries:[`Beauty and Wellness`],services:[`AI Front Desk`],body:[{type:`p`,text:`A client who wants to rebook does not check the clock first. She thinks of it on the drive home, or right before bed, or during a lunch break between meetings. If the only way to reach the salon is a phone line that rings through to voicemail, that moment of intent has to survive until the next morning, and a lot of it does not.`},{type:`h2`,text:`How often clients need the salon outside business hours`},{type:`p`,text:`A 2025 to 2026 survey of salon and spa clients found that 81 percent of loyal guests need to manage their appointments outside typical business hours at least some of the time. The same research found that 77 percent still consider calling the easiest way to change an existing appointment, even though the salon is usually closed when they think to call. That gap, wanting to call outside of hours, is exactly where a request goes unanswered.`},{type:`h2`,text:`What gets lost when the call goes to voicemail`},{type:`p`,text:`Booking friction has a real cost. The same research puts abandonment from booking barriers, meaning a client gives up rather than finishes the request, in the range of 69 to 79 percent once something gets in the way, whether that is a confusing online form or a phone line nobody answers. A missed rebooking call is not a neutral event. It is a client who may call the next salon instead.`},{type:`h2`,text:`Where an AI answering service fits for a spa or salon`},{type:`ul`,items:[`Calls and texts after close get answered immediately instead of going to voicemail`,`Common requests, like booking, rescheduling, and hours, get handled without waiting for the front desk to reopen`,`Service questions that need a real recommendation get flagged for a stylist or provider to follow up personally`,`Every after-hours conversation lands in the same system the front desk already uses, so nothing gets missed at opening`]},{type:`h2`,text:`What it should not replace`},{type:`p`,text:`Some conversations need a person. A client deciding between two treatments, or one who had a bad experience, wants to feel heard, not routed through a script. The right setup answers the practical requests immediately and makes sure anything personal reaches a real team member first thing the next business day, instead of sitting in a queue.`},{type:`callout`,title:`The structural fix`,text:`Treat after-hours coverage as part of the booking system, not a separate project. A salon that answers every rebooking request the moment a client thinks of it keeps more of those appointments than one that is simply hoping the client calls back during business hours.`}],faqs:[{q:`Do salon and spa clients actually try to book outside business hours?`,a:`Yes. Survey research on salon and spa clients found 81 percent of loyal guests need to manage appointments outside typical business hours at least some of the time, which is exactly when most salons have no one answering the phone.`},{q:`Is an AI answering service good enough for salon clients instead of the front desk?`,a:`For simple requests like booking, rescheduling, or checking hours, yes, as long as the response is fast and accurate. What clients will not accept is a system that cannot recognize when a question needs a real person.`},{q:`What should AI answering never handle for a salon?`,a:`Anything involving a client's specific service concerns, a complaint, or a decision that benef
22its from a stylist's judgment. Those should be flagged for a real team member, not resolved by a script.`},{q:`How much booking activity is lost to friction, not lack of interest?`,a:`Research on salon and spa booking behavior puts abandonment from booking barriers at 69 to 79 percent once something interrupts the process, whether that is a confusing form or an unanswered call, which is why removing that friction matters as much as attracting new clients.`}],sources:[{label:`Zenoti: 2025 Survey Data, 5 Key Salon and Spa Consumer Trends Shaping Appointment Management in 2026`,url:`https://www.zenoti.com/thecheckin/salon-spa-booking-communication-trends`}],relatedSlugs:[`how-many-reviews-does-a-salon-need`,`what-should-a-salon-do-when-a-client-stops-rebooking`],relatedService:{label:`AI Front Desk`,path:`/ai-front-desk`},relatedIndustry:{label:`Beauty and Wellness`,path:`/industries/beauty-wellness`},primaryCta:{label:`Plan My Salon's Call Coverage`,href:Y}})),$.push(Q({slug:`how-should-a-home-service-company-follow-up-on-estimates-that-dont-close`,title:`Contractor Estimate Follow Up: How Do You Recover Quotes That Don't Close?`,shortTitle:`Contractor Estimate Follow Up`,metaTitle:`Contractor Estimate Follow Up That Closes More Jobs`,metaDescription:`Contractor estimate follow up is where most stalled quotes get recovered. Here is the sequence that wins the job after a homeowner goes quiet.`,excerpt:`A homeowner who requested a quote and went quiet has not always chosen someone else. Often they are still deciding, and whoever follows up next wins the job.`,answer:`Contractor estimate follow up recovers the most stalled quotes when it runs as a structured sequence instead of a single callback. That means scheduled touchpoints over one to three weeks, tracked the same way a new lead would be, so a quiet estimate does not quietly become a lost one.`,datePublished:`2026-09-19`,category:`revenue-operations`,industries:[`Home Services`],services:[`Revenue Operations`],body:[{type:`p`,text:`An estimate goes out, and then nothing. No callback, no email reply, no text. It is tempting to read that silence as a no. Often it is not. The homeowner is comparing a few quotes, waiting on a spouse's opinion, or the estimate simply got buried in an inbox. Whoever reaches back out first, with something more useful than a check-in, usually wins the job.`},{type:`h2`,text:`How much speed already matters before the estimate is even sent`},{type:`p`,text:`Response speed research on contractor leads found that the average company takes four to eight hours to respond to a new inquiry, stretching to twelve to sixteen hours during evenings, weekends, and holidays. The same research found that leads contacted within five minutes qualify at dramatically higher rates than leads contacted within thirty minutes, with qualification rates falling by roughly half once response time passes thirty minutes, then by around three quarters past the one to four hour mark.`},{type:`h2`,text:`Why the estimate itself is not the end of the process`},{type:`p`,text:`That same urgency applies after the estimate goes out, not just before it. A homeowner who requested quotes from three companies is going to hear back from all three eventually. The company that follows up with a clear next step, not just a reminder that the quote exists, is the one still in the conversation when the homeowner is ready to decide.`},{type:`h2`,text:`What a real contractor estimate follow up sequence looks like`},{type:`ul`,items:[`A same-day confirmation that the estimate arrived and a reminder of what it includes`,`A check-in within three to four days that answers a likely question, like financing or timeline, rather than just asking if they have decided`,`A final touchpoint around the two-week mark that creates a real reason to decide, such as a scheduling window closing`,`Every touchpoint logged against that estimate, so no one on the team is guessing whether it already happened`]},{type:`h2`,text:`Why this has to run on a system, not memory`},{type:`p`,text:`A busy estimator with a full week of appointments is not going to remember which quotes from two weeks ago still need a follow-up call. That is not a discipline problem. It is a volume problem. The businesses that recover the most stalled estimates are the ones where the follow-up sequence runs automatically, the same way an appointment reminder does, so it happens for every estimate instead of just the ones someone happens to remember.`},{type:`callout`,title:`The structural fix`,text:`Build estimate follow-up into the same pipeline that already tracks new leads, with scheduled touchpoints instead of a single callback. An estimate that goes quiet for two weeks is not necessarily lost. It is often just waiting for whoever follows up with the right next step.`}],faqs:[{q:`How fast do home service companies typically respond to new leads?`,a:`Research on contractor response times found an average of four to eight hours during business hours, extending to twelve to sixteen hours during evenings, weekends, and holidays, well behind the pace homeowners expect when comparing multiple quotes.`},{q:`Does response speed really affect whether an estimate turns into a job?`,a:`Yes. The same research found leads contacted within five minutes qualify at dramatically higher rates than those contacted within thirty minutes, with qualification rates dropping by roughly half past thirty minutes and by about three quarters past the one to four hour mark.`},{q:`Is a quiet estimate usually a lost job?`,a:`Not necessarily. Many homeowners are still comparing quotes or waiting on a decision at home. A stalled estimate often responds to a structured follow-up with a clear next step, rather than a general check-in.`},{q:`How many follow up touchpoints should a contractor estimate get before it is considered dead?`,a:`A reasonable sequence runs two to three touchpoints over one to three weeks: a same-day confirmation, a mid-week check-in that answers a likely question, and a final touchpoint that gives the homeowner a real reason to decide.`}],sources:[{label:`CustomerFlows: 2026 Contractor Lead Response Time Study`,url:`https://customerflows.com/research/contractor-lead-response-time-study/`}],relatedSlugs:[`secret-shop-your-own-business`,`how-many-google-reviews-does-a-home-service-company-need`],relatedService:{label:`Revenue Operations`,path:`/revenue-operations`},relatedIndustry:{label:`Home Services`,path:`/industries/home-services`},primaryCta:{label:`Fix My Follow-Up System`,href:Y}}
22)),$.push(Q({slug:`what-should-a-financial-advisory-firms-website-actually-do`,title:`What Should a Financial Advisor Website Actually Do?`,shortTitle:`Financial Advisor Website`,metaTitle:`Financial Advisor Website: What It Should Actually Do`,metaDescription:`A financial advisor website has one job: confirm the referral and make the first conversation easy. Here is what that takes, compliance included.`,excerpt:`Most prospective clients find an advisory firm through a referral, then quietly check the website before ever picking up the phone. That visit either confirms the referral or undoes it.`,answer:`A financial advisor website should confirm what a referral already told a prospect: that the firm is credible, qualified, and easy to start a conversation with. That means clear bios with real credentials, compliant testimonials and disclosures, and a simple way to book a first conversation, not marketing claims a compliance team has to walk back later.`,datePublished:`2026-09-20`,category:`website-strategy`,industries:[`Advisory Firms`],services:[`High Performance Websites`],body:[{type:`p`,text:`Most financial advisors and consultants still get their best clients through referrals. But a referral rarely leads straight to a phone call anymore. It leads to a website visit first, a quiet check to see whether the person a friend or colleague recommended is actually who they say they are. If that visit raises more questions than it answers, the referral loses momentum before the firm ever gets a chance to make its case.`},{type:`h2`,text:`What a prospect looks for on a financial advisor website`},{type:`p`,text:`A referred prospect is not evaluating the firm from scratch. They already have a reason to trust it. What they want from the website is confirmation: a real bio with real credentials, a plain explanation of who the firm works with and how it charges, and an easy way to take the next step. A site that buries this behind vague language about holistic strategies makes the prospect do work the referral should have already done for them.`},{type:`h2`,text:`Why testimonials and claims need to be handled carefully`},{type:`p`,text:`Advisory firms operate under marketing rules that most industries do not. The SEC's Marketing Rule sets specific requirements for how registered investment advisers can present performance, and it restricts who can be compensated for a testimonial, particularly anyone with a disqualifying disciplinary history in the past ten years. Getting this wrong is not just a compliance risk. A testimonial page that looks copied from a template, with no real names or context, reads as less credible to a prospect too. The two problems have the same fix: real, specific, properly disclosed proof.`},{type:`h2`,text:`What the site needs beyond the bio page`},{type:`ul`,items:[`A plain-language explanation of who the firm serves and what a first conversation actually covers`,`Fee and service structure described honestly, since vague pricing reads as something to avoid, not something premium`,`A booking path that takes one step, not a contact form that disappears into an inbox for three days`,`Client proof handled the way the SEC Marketing Rule requires, with disclosures included rather than treated as optional`]},{type:`h2`,text:`Where this fits into the rest of the firm's growth`},{type:`p`,text:`A website that does this well is not just a brochure. It is the piece of the system that either confirms a referral or lets it go cold, and it is also the page a prospect lands on if they found the firm through a review, a search, or an AI assistant instead of a referral. The site has to do that job for every source of a new client, not only the warm ones.`},{type:`callout`,title:`The structural fix`,text:`Build the website to confirm what a referral already believes, with real bios, properly disclosed proof, and a one-step way to start a conversation. A prospect who already trusts the referral just needs the site to not get in the way.`}],faqs:[{q:`Do most financial advisory clients still come from referrals?`,a:`Yes, referrals remain the primary source for most advisory and consulting firms, but a referral is rarely the last step anymore. Prospects typically check the firm's website before making contact, which is why that visit matters even when the lead came from someone they trust.`},{q:`What compliance rules apply to a financial advisor's website content?`,a:`Registered investment advisers operate under the SEC Marketing Rule, which sets specific requirements for how performance is presented and restricts compensating certain individuals for testimonials, particularly anyone with a disqualifying disciplinary event in the past ten years.`},{q:`Should an advisory firm's website include client testimonials?`,a:`It can, as long as they are handled the way the SEC Marketing Rule requires, with proper disclosures. Real, specific testimonials with proper disclosure are also simply more credible to a prospect than vague or templated praise.`},{q:`What is the most common mistake on a financial advisor website?`,a:`Vague language about services and fees. A prospect who already trusts a referral is looking for confirmation, not marketing copy, and unclear pricing or credentials reads as something to be cautious about rather than something premium.`}],sources:[{label:`SEC: Marketing Compliance Frequently Asked Questions`,url:`https://www.sec.gov/rules-regulations/staff-guidance/div
22ision-investment-management-frequently-asked-questions/marketing-compliance-frequently-asked-questions`}],relatedSlugs:[`do-advisory-firms-need-online-reviews`,`how-ai-assistants-recommend-financial-advisors`],relatedService:{label:`High Performance Websites`,path:`/high-performance-websites`},relatedIndustry:{label:`Advisory Firms`,path:`/industries/advisory-firms`},primaryCta:{label:`Plan My Firm's Website`,href:Y}})),$.push(Q({slug:`how-do-ai-assistants-recommend-a-law-firm`,title:`How Do AI Assistants Like ChatGPT Recommend a Law Firm?`,shortTitle:`Law Firm AI Visibility`,metaTitle:`Law Firm AI Visibility: How ChatGPT Picks a Firm`,metaDescription:`Law firm AI visibility rests on consistent directory profiles, real reviews, and peer recognition. Here is what ChatGPT checks before recommending one.`,excerpt:`Someone asking an AI assistant to recommend a lawyer is not typing a search term. They are asking a question, and the assistant answers with whichever firm it can actually verify.`,answer:`Law firm AI visibility comes from a broad, consistent pattern of credibility across sources, not just the firm's own website. AI assistants weigh structured attorney profiles, third-party recognition like legal directories and peer awards, consistent details across listings, and real client reviews together rather than trusting any single page.`,datePublished:`2026-09-21`,category:`search-visibility`,industries:[`Legal Services`],services:[`Search Visibility`],body:[{type:`p`,text:`Someone typing a search for the best personal injury lawyer nearby gets a page of links to sort through themselves. Someone asking an AI assistant the same question gets a short, direct answer, usually two or three names, with the assistant doing the sorting instead. That shift changes what actually gets a law firm recommended.`},{type:`h2`,text:`Why AI assistants do not just rank a firm's website`},{type:`p`,text:`A traditional search engine can rank a well-optimized page relatively high on its own. An AI assistant works differently. It looks for a broad, general consensus about what a firm is and does, pulled from multiple sources at once, because it is trying to return one confident answer rather than a list of options for someone to evaluate themselves. A firm with a polished website but nothing to confirm it elsewhere is a harder recommendation for the assistant to make.`},{type:`h2`,text:`What builds that consensus`},{type:`ul`,items:[`Structured attorney profiles with clear practice areas, so the assistant can confirm what the firm actually handles`,`Consistent details across legal directories, such as Avvo, Martindale-Hubbell, and state bar listings, rather than conflicting information in different places`,`Peer recognition, like Super Lawyers or Best Lawyers, which functions as a third-party endorsement the assistant weighs more heavily than the firm's own claims`,`Real client reviews on indexed platforms, where a pattern of specific, recent feedback carries more weight than a high average alone`,`Regularly published content, such as case results or practice-area explainers, that signals the firm is active rather than dormant`]},{type:`h2`,text:`Why law firm AI visibility matters more every year, not less`},{type:`p`,text:`Traditional search volume has been projected to decline as AI assistants handle more of that first research step directly, which means a growing share of the people looking for a lawyer never see a list of website links at all. If the only place a firm's credibility lives is its own site, it is invisible to that entire share of prospective clients. In a metro market like Houston, where dozens of firms handle the same practice area, that consensus is often what separates the two names an assistant returns from everyone else.`},{type:`callout`,title:`The structural fix`,text:`Treat AI visibility as a consistency problem, not a website problem. Get the firm's profile, practice areas, and proof aligned across directories, reviews, and the website itself, so an AI assistant finds the same confident answer everywhere it looks.`}
22],faqs:[{q:`How do AI assistants decide which law firm to recommend?`,a:`Not the way a search engine does. A search engine can rank a single well-optimized page. An AI assistant looks for a broad consensus about a firm across multiple sources, including directories, reviews, and third-party recognition, before it will recommend the firm directly.`},{q:`Do legal directories like Avvo and Martindale-Hubbell still matter?`,a:`Yes, and arguably more than before. Consistent, accurate profiles across these directories are part of what AI assistants check to confirm a firm's credibility before recommending it.`},{q:`Do client reviews affect whether AI assistants recommend a law firm?`,a:`Yes. A pattern of specific, recent reviews on indexed platforms functions as a credibility signal that AI assistants weigh, similar to how peer recognition from legal awards functions as third-party validation.`},{q:`Is traditional search still worth optimizing for if AI assistants are growing?`,a:`Yes, both matter and they reinforce each other. Much of what makes a firm easy for an AI assistant to recommend, like consistent directory listings and real reviews, also improves traditional search visibility.`}],sources:[{label:`The Modern Firm: How AI Is Changing Where Clients Find Lawyers`,url:`https://www.themodernfirm.com/how-ai-is-changing-where-clients-find-lawyers/`}],relatedSlugs:[`should-law-firms-use-ai-answering-for-after-hours-intake`,`is-ppc-worth-it-for-law-firms`,`how-ai-assistants-recommend-financial-advisors`],relatedService:{label:`Search Visibility`,path:`/seo-geo`},relatedIndustry:{label:`Legal Services`,path:`/industries/legal-services`},primaryCta:{label:`Check My Firm's AI Visibility`,href:Y}})),$.push(Q({slug:`is-ppc-advertising-worth-it-for-equipment-rental-companies`,title:`Is Equipment Rental PPC Worth the Cost on Google Ads?`,shortTitle:`Equipment Rental PPC`,metaTitle:`Equipment Rental PPC: Is Google Ads Worth the Cost?`,metaDescription:`Equipment rental PPC only pays off when availability questions get answered fast. Here is what has to be true before Google Ads spend makes sense.`,excerpt:`A rental company can win the click and still lose the job, if whoever answers the phone can't confirm availability fast enough to keep the customer from calling the next yard.`,answer:`Equipment rental PPC can work well on Google Ads, but the return depends on what happens after the click, not the click itself. Because clicks in home and equipment-adjacent categories run expensive, the business needs fast, accurate availability answers and quick follow-up to convert that spend into a booked rental instead of an abandoned inquiry.`,datePublished:`2026-09-22`,category:`revenue-operations`,industries:[`Rental Companies`],services:[`Paid Growth`],body:[{type:`p`,text:`A customer searching for a rental usually needs the equipment soon, sometimes the same day. That urgency is exactly what makes paid search attractive for rental companies, and exactly why a slow or vague response after the click wastes the money spent getting them there.`},{type:`h2`,text:`What that click actually costs`},{type:`p`,text:`Search advertising in home and equipment-adjacent categories is not cheap. WordStream's 2026 Google Ads benchmarks put the average cost per click in the Home and Home Improvement category, the closest published benchmark to equipment rental search terms, at 8.33 dollars. At that price, a rental company cannot afford many clicks that end in a customer who called but could not get a straight answer about availability.`},{type:`h2`,text:`Why the intake moment decides whether the spend pays off`},{type:`p`,text:`Someone who clicks a rental ad is usually comparing two or three yards in the same search. If the call is answered by someone who has to check with another department, or the online form takes a day to get a reply, that customer often books wherever answers first, regardless of who had the better ad. The click did its job. What happened next is what determines the return.`},{type:`h2`,text:`What has to be true before the ad budget grows`},{type:`ul`,items:[`Availability and pricing questions get answered on the first contact, not routed to a callback`,`Delivery area and scheduling questions have a clear, fast answer, since urgency is often the reason someone is searching at all`,`After-hours and weekend inquiries get a real response, since equipment needs do not wait for the yard to reopen`,`Every paid inquiry gets tracked back to whether it actually converted, not just whether it clicked`]},{type:`h2`,text:`The honest read on whether equipment rental PPC is worth it`},{type:`p`,text:`For a rental company with a fleet to fill and a fast, reliable intake process, paid search can be one of the more efficient ways to reach demand that already exists. For a company where a paid click still has to survive a slow callback, the ad spend is mostly paying to generate calls the business was not ready to answer.`}
22,{type:`callout`,title:`The structural fix`,text:`Do not scale rental ad spend until availability, pricing, and scheduling questions get answered immediately, on the first contact. That intake speed is what turns an expensive click into a booked rental instead of a customer who moved on to the next search result.`}],faqs:[{q:`How much does equipment rental PPC cost per click?`,a:`Search clicks in home and equipment-adjacent categories run high. WordStream's 2026 benchmarks put the Home and Home Improvement category, the closest published comparison, at an average of 8.33 dollars per click, which makes a fast, reliable response after the click essential to the return.`},{q:`What matters more for PPC return, the ad or the intake process?`,a:`Intake, once the budget is already reasonably well targeted. A customer comparing two or three rental yards from the same search usually books wherever gets back to them first with a real answer, not necessarily whoever had the better ad.`},{q:`Should a rental company run paid ads if it cannot answer calls quickly?`,a:`Not yet. Paid ads generate inquiries, and a rental company that cannot answer availability and pricing questions on the first contact is mostly paying to generate calls it is not ready to convert.`},{q:`Does after-hours coverage affect whether PPC works for a rental company?`,a:`Yes. Equipment needs often come up outside business hours, and an ad that drives a call to voicemail on a Friday night wastes the spend it took to generate that call in the first place.`}],sources:[{label:`WordStream: Google Ads Benchmarks 2026`,url:`https://www.wordstream.com/blog/2026-google-ads-benchmarks`}],relatedSlugs:[`how-fast-should-a-rental-company-answer-after-hours-calls`,`do-online-reviews-affect-equipment-rental-decisions`,`is-ppc-worth-it-for-law-firms`],relatedService:{label:`Paid Growth`,path:`/paid-growth`},relatedIndustry:{label:`Rental Companies`,path:`/industries/rental-companies`},primaryCta:{label:`See If the PPC Math Works`,href:Y}})),$.push(Q({slug:`how-do-ai-assistants-recommend-a-home-service-company`,title:`AI Visibility for Contractors: How Do Assistants Like ChatGPT Pick a Home Service Company?`,shortTitle:`AI Visibility for Contractors`,metaTitle:`AI Visibility for Contractors: How ChatGPT Picks One`,metaDescription:`AI visibility for contractors comes down to consistent listings, fresh pages, and real specifics. Here is what actually earns the recommendation.`,excerpt:`A homeowner asks an AI assistant which plumber or electrician to call nearby. The answer is not based on the flashiest website. It is based on what the company can actually prove, right now.`,answer:`AI visibility for contractors comes down to consistent business details across listings, recently updated content, and specific answers about service areas, pricing, and availability. AI assistants lean on structured data and steady review activity to judge credibility, so vague marketing pages get passed over in favor of contractors that document their work with real specifics.`,datePublished:`2026-09-23`,category:`search-visibility`,industries:[`Home Services`],services:[`Search Visibility`],body:[{type:`p`,text:`A homeowner's water heater fails on a Tuesday night and they ask an AI assistant which plumber to call nearby. What comes back is not the company that spends the most on advertising. It is whichever business the assistant can verify quickly and confidently, using whatever it can find about that business right now.`},{type:`p`,text:`Contractors have spent years optimizing for Google's blue links. AI assistants read the same web, but they weigh it differently, and most home service websites were never built with that difference in mind.`},{type:`h2`,text:`Why AI assistants need proof, not personality`},{type:`p`,text:`A homepage full of brand voice and stock photography gives an AI system very little it can safely repeat to someone asking for a real recommendation. What it can repeat are specifics: a service area it can name, a price range it can quote, a review it can summarize accurately. Personality wins a click. Specifics win a citation.`},{type:`h2`,text:`What actually earns AI visibility for a contractor`},{type:`ul`,items:[`Matching name, address, phone number, and service area details across the website, Google Business Profile, and other directories`,`Content updated within the last month or two, rather than a service page that has not changed in years`,`Concrete specifics: 
22named zip codes or neighborhoods served, real price ranges, licensing and insurance details, instead of "call for pricing"`,`A steady flow of new customer reviews that mention the specific job done, not just a star rating`,`Structured data that labels the business, its service area, and its reviews so an AI system can read the page directly instead of guessing`]},{type:`h2`,text:`Freshness matters more than most contractors expect`},{type:`p`,text:`Material updated recently tends to earn meaningfully more AI citations than older content, and pages left untouched for six months or longer start losing credibility with answer engines that emphasize recency, particularly Perplexity. A seasonal service page written two years ago and never revisited is easy to outrank simply by being current.`},{type:`h2`,text:`Why review velocity beats review count`},{type:`p`,text:`A steady pace of new reviews, something in the range of five to ten a month for an active contractor, signals to an AI system that the business is operating now, not that it operated well at some point in the past. A large stockpile of old reviews does less for AI trust than a smaller number arriving every week.`},{type:`h2`,text:`What tends to get skipped over`},{type:`p`,text:`Vague service descriptions, a phone number on the website that does not match the one on the Google Business Profile, a service area page that has not been touched since it was built, and generic reviews that never mention what was actually done. None of these are unusual mistakes. They are the default way most contractor websites get built and then left alone.`},{type:`callout`,title:`The structural fix`,text:`Treat the website and every listing as one system that has to agree with itself, then keep updating it on a real schedule. That consistency and freshness is what lets an AI assistant recommend a contractor with confidence, and it is also what a homeowner needs to feel good about calling.`}],faqs:[{q:`How do AI assistants pick which home service company to recommend?`,a:`AI assistants favor companies with consistent, verifiable details across their website and listings, recently updated content, and specific answers about pricing and service areas, since these give the assistant something safe and accurate to repeat.`},{q:`Does a Google Business Profile still matter if someone asks an AI assistant instead of searching directly?`,a:`Yes. Business Profile data is one of the main sources AI systems draw from for local recommendations, so accurate hours, service areas, and photos still carry real weight even when the question never touches a traditional search results page.`},{q:`How often does a contractor's website need to be updated to stay visible to AI tools?`,a:`Content updated within the last month or two tends to earn more AI citations than older material, and pages untouched for six months or longer start losing credibility, so a service page should be revisited on a regular schedule, not written once and forgotten.`},{q:`Do reviews matter for AI recommendations the same way they matter for search rankings?`,a:`Similarly, but with a different emphasis. AI systems weigh a steady pace of new, specific reviews as a sign of current activity, so a business adding a handful of reviews every month can build more AI trust than one with a much larger but stagnant total.`}],sources:[{label:`Geek Powered Studios: AI Visibility for Contractors, 2026 Guide`,url:`https://www.geekpoweredstudios.com/post/ai-visibility-home-service-contractors-2026-guide`},{label:`Cheers: How Local Businesses Can Show Up in Google AI Search`,url:`https://www.cheers.tech/geo-academy/how-local-businesses-can-show-up-in-google-ai-search`}],relatedSlugs:[`home-services`,`should-home-service-companies-use-ai-answering-for-after-hours-calls`],relatedService:{label:`Search Visibility`,path:`/seo-geo`},relatedIndustry:{label:`Home Services`,path:`/industries/home-services`},primaryCta:{label:`Plan My Company's AI Visibility`,href:Y}})),$.push(Q({slug:`how-many-google-reviews-does-a-law-firm-need`,title:`Google Reviews for Law Firms: How Many Do You Need to Win Client Trust?`,shortTitle:`Google Reviews for Law Firms`,metaTitle:`Google Reviews for Law Firms: How Many Do You Need?`,metaDescription:`Google reviews for law firms work in tiers, not one magic number. Here is what the research shows about count, recency, and star rating.`,excerpt:`A prospective client is comparing three law firms before ever picking up the phone. The one with a thin, stale review page loses that comparison before the call happens.`,answer:`Google reviews for law firms work in tiers rather than a single number. Research suggests roughly 47 percent of consumers will not use a business with fewer than 20 reviews, and firms in the local pack's top three positions average around 47 reviews. Staying above a 4.0 star average and adding reviews consistently each month matters more than chasing a round total.`,datePublished:`2026-09-24`,category:`search-visibility`,industries:[`Legal Services`],services:[`Reputation Growth`],body:[{type:`p`,text:`A prospective client is choosing between three law firms in a difficult moment, maybe after an accident or a divorce filing, and doing it quickly. They read reviews before they read the practice-area pages, and a thin or stale review section can move a genuinely qualified firm to the bottom of the list before the phone ever r
22ings.`},{type:`p`,text:`Attorneys often ask how many reviews they actually need, expecting a specific number. The more useful answer has less to do with hitting a target and more to do with staying consistent.`},{type:`h2`,text:`How many Google reviews a law firm needs to rank locally`},{type:`p`,text:`A firm with no reviews has very little chance of showing up in the local map pack at all. Once a firm passes roughly 20 reviews, it becomes competitive in a less crowded market, and the number needed to compete keeps climbing with how contested the market is. There is no universal finish line, only a moving bar set by whoever else is already ranking in that city.`},{type:`h2`,text:`Why 20 reviews is the number that changes minds`},{type:`p`,text:`Research from BrightLocal's 2026 consumer survey found that roughly 47 percent of people will not use a business with fewer than 20 reviews. That number matters as much for client trust as it does for ranking. A firm sitting below it is losing prospective clients who never even call to ask a question.`},{type:`h2`,text:`What it takes to stay near the top`},{type:`p`,text:`Firms occupying the top three local pack positions average somewhere around 47 reviews, based on BrightLocal's ranking factors research, but the total is less important than the pace. In competitive cities, firms report needing something like 20 new reviews a month just to keep pace with the field. In smaller or less contested markets, four a month can be enough to hold position.`},{type:`h2`,text:`Star rating still acts as a filter`},{type:`p`,text:`Firms holding a 4.0 star average or higher tend to perform better in local pack visibility, and the effect is arguably stronger on the client side. Legal decisions carry more perceived risk than most purchases, so a rating that dips below 4.0 can disqualify a firm in a prospective client's mind regardless of how many reviews sit behind it.`},{type:`h2`,text:`Referrals do not replace this`},{type:`p`,text:`A referred client still searches the firm's name before calling, and what they find shapes how confidently they make that call. A strong referral paired with a weak or outdated review page creates hesitation that did not need to exist. The review page is not competing with the referral. It is confirming it.`},{type:`callout`,title:`The structural fix`,text:`Build the review ask into the intake and case-closing process itself, with a defined monthly pace to hit rather than an occasional push, so the count and the recency both keep climbing at the same time instead of one propping up an outdated other.`}],faqs:[{q:`How many Google reviews does a law firm need to show up in the local map pack?`,a:`There is no fixed number, but a firm with zero reviews rarely ranks at all, roughly 20 reviews makes a firm competitive in a less crowded market, and firms in the top three local positions average around 47 reviews.`},{q:`Does a law firm need a five-star rating to compete?`,a:`No. Firms holding a 4.0 star average or higher tend to perform well in local pack visibility and client trust. A perfect score is not required, but slipping below 4.0 can cost a firm client consideration regardless of review count.`},{q:`How many new reviews should a firm collect each month?`,a:`It depends on the market. Firms in competitive cities report needing roughly 20 new reviews a month to keep pace with local competitors, while firms in smaller or less contested markets can often hold position with around four a month.`},{q:`Do reviews still matter for a firm that gets most of its clients from referrals?`,a:`Yes. A referred client typically searches the firm's name before calling, and a thin or outdated review page can create hesitation that undercuts an otherwise strong referral.`}],sources:[{label:`ReplyOnTheFly: How Many Google Reviews Do You Need? Data-Backed Benchmarks`,url:`https://www.replyonthefly.com/blog/how-many-google-reviews-do-you-need`},{label:`OptimizeMyFirm: Google Local Pack Ranking Factors for Law Firms`,url:`https://optimizemyfirm.com/gbp/ranking/`}],relatedSlugs:[`legal-services`,`is-ppc-worth-it-for-law-firms`],relatedService:{label:`Reputation Growth`,path:`/reputation-growth`},relatedIndustry:{label:`Legal Services`,path:`/industries/legal-services`},primaryCta:{label:`Plan My Firm's Review System`,href:Y}})),$.push(Q({slug:`how-do-ai-assistants-recommend-a-spa-or-salon`,title:`AI Visibility for Salons: How Do Assistants Like ChatGPT Recommend a Spa?`,shortTitle:`AI Visibility for Salons and Spas`,metaTitle:`AI Visibility for Salons: How ChatGPT Picks a Spa`,metaDescription:`AI visibility for salons favors consistent listings, named stylists, and recent reviews over polished homepages. Here is what earns the mention.`,excerpt:`Someone asks an AI assistant to re
22commend a lash studio or day spa nearby. The answer is not the prettiest photo feed. It is whichever business the assistant can verify the fastest.`,answer:`AI visibility for salons and spas comes from consistent business details across the website and listings, named stylists or providers, specific service and pricing information, and a steady stream of recent reviews. Vague branding and inconsistent booking details get passed over in favor of businesses that document who does the work and what it actually costs.`,datePublished:`2026-09-25`,category:`search-visibility`,industries:[`Beauty and Wellness`],services:[`Search Visibility`],body:[{type:`p`,text:`Someone asks an AI assistant to recommend a lash studio or a day spa nearby. The assistant is not weighing photo quality or brand aesthetic. It is looking for a business it can describe accurately: who does the work, what it costs, and whether the details it finds agree with each other.`},{type:`p`,text:`Salons and spas tend to invest heavily in visuals and lightly in the plain, structured information an AI system actually needs. That imbalance is why a beautifully designed website can still lose the recommendation to a plainer competitor down the street.`},{type:`h2`,text:`Why a beautiful gallery is not what an AI system reads`},{type:`p`,text:`A page built around mood and imagery gives an AI assistant very little text it can pull from directly. Without service names, real price ranges, and specifics about who performs the work, the page reads as vague, even when the business behind it is excellent.`},{type:`h2`,text:`What actually earns AI visibility for a salon or spa`},{type:`ul`,items:[`Named stylists, estheticians, or providers listed with their specialties, rather than an anonymous team page`,`A specific service menu with real price ranges, not just "contact us for pricing"`,`Consistent hours, location, and booking link across the website, Google Business Profile, and any listing sites`,`Structured data that labels services, providers, and reviews so an AI system can read the page directly`,`Recent reviews that mention a specific service or stylist by name, not just a star average`]},{type:`h2`,text:`Booking friction is a visibility problem too`},{type:`p`,text:`AI assistants are increasingly expected to help complete tasks, not just answer questions, which means a broken or inconsistent booking link does more damage than it used to. A salon whose booking widget fails, redirects incorrectly, or lists different hours than its Google Business Profile gives an AI system a reason to recommend somewhere else instead.`},{type:`h2`,text:`What tends to get skipped over`},{type:`p`,text:`Stock photography standing in for real treatment rooms, a generic "book now" button with no working link behind it, no stylist bios anywhere on the site, and a Google Business Profile that has not been touched since it was claimed. These gaps are common precisely because they do not hurt the way the site looks to a human visitor.`},{type:`callout`,title:`The structural fix`,text:`Pair the visuals with plain, specific text: real names, real prices, real hours, and a booking link that actually works everywhere it is listed. That combination is what lets an AI assistant recommend a salon with confidence, and it is also what a new client needs to book with confidence.`}],faqs:[{q:`How do AI assistants pick which salon or spa to recommend?`,a:`AI assistants favor businesses with consistent, verifiable details across their website and listings, named providers, and specific service and pricing information, since these give the assistant something accurate it can repeat with confidence.`},{q:`Do stylist bios actually matter for AI visibility?`,a:`Yes. Named stylists or providers with listed specialties help an AI system describe who performs the work, which is the kind of specific detail that gets a business mentioned by name rather than skipped over.`},{q:`Does a broken booking link hurt a salon's chances of being recommended by AI tools?`,a:`It can. AI assistants are increasingly used to help complete tasks like booking, so a booking link that fails or shows inconsistent hours compared to other listings g
22ives the assistant a reason to suggest a different business instead.`},{q:`What should a salon avoid when trying to be recommended by AI assistants?`,a:`Relying on mood and imagery instead of specifics. Stock photography, vague pricing language, and an unclaimed or outdated Google Business Profile all leave an AI system with little concrete information to work with.`}],sources:[{label:`Cheers: How Local Businesses Can Show Up in Google AI Search`,url:`https://www.cheers.tech/geo-academy/how-local-businesses-can-show-up-in-google-ai-search`}],relatedSlugs:[`beauty-wellness`,`how-many-reviews-does-a-salon-need`],relatedService:{label:`Search Visibility`,path:`/seo-geo`},relatedIndustry:{label:`Beauty and Wellness`,path:`/industries/beauty-wellness`},primaryCta:{label:`Plan My Salon's AI Visibility`,href:Y}})),$.push(Q({slug:`should-home-service-companies-use-ai-answering-for-after-hours-calls`,title:`Does an After Hours Answering Service Pay Off for HVAC and Home Service Companies?`,shortTitle:`After Hours Answering Service`,metaTitle:`After Hours Answering Service for HVAC and Contractors`,metaDescription:`An after hours answering service decides who wins the nine o'clock emergency call. Here is what it has to do for HVAC and home service companies.`,excerpt:`A pipe bursts at nine at night and the caller starts working down a list of contractors. Whoever picks up first, in whatever form, usually gets the job.`,answer:`An after hours answering service pays off for HVAC and home service companies when it captures the details a dispatcher needs and hands off urgent jobs quickly. Contractors miss a large share of after-hours calls, and most callers move on to the next name rather than leave a voicemail, so answering, gathering job details, and routing urgent calls recovers work that would otherwise go to a competitor.`,datePublished:`2026-09-26`,category:`ai-front-desk`,industries:[`Home Services`],services:[`AI Front Desk`],body:[{type:`p`,text:`A pipe bursts at nine at night, or an air conditioner dies on the hottest afternoon of the year, and the homeowner starts calling down a list. Whoever answers the phone, in whatever form that answer takes, usually gets the job. Almost none of these callers wait until nine the next morning to see who calls back.`},{type:`p`,text:`Home service companies run their crews all day and their phones do not stop when the crews go home. That mismatch is where most missed revenue actually happens, quietly and every single week.`},{type:`h2`,text:`How many calls are actually happening after hours`},{type:`p`,text:`Home service businesses miss an estimated 27 to 62 percent of incoming calls, with the widest gaps showing up for companies whose techs are on job sites and unable to answer. The cost of each missed call is estimated to run from a few hundred dollars to well over a thousand, depending on the trade and the size of the job on the other end of the line.`},{type:`h2`,text:`What happens after a call goes unanswered`},{type:`p`,text:`Roughly 85 percent of people who hit voicemail or a missed call never call back, and an estimated 62 percent contact a competitor immediately instead. A missed call is rarely a delayed opportunity. In most cases, it is simply gone, and the business never even sees the moment it lost the job.`},{type:`h2`,text:`Why speed decides the job, not the sales pitch`},{type:`p`,text:`Businesses that respond within five minutes are dramatically more likely to actually connect with and qualify a caller than ones that wait thirty, and the odds keep dropping with every additional minute of delay. An estimated 78 percent of buyers go with whichever company responds first, which means the fastest response usually wins the job regardless of price or reputation.`},{type:`h2`,text:`What real after hours answering service coverage looks like`},{type:`ul`,items:[`Every call gets answered or gets an immediate callback, including nights, weekends, and holidays`,`Job details get captured on the first contact: address, issue, and urgency, not just a name and number`,`Genuine emergencies get routed to an on-call technician immediately, not queued for the morning`,`Non-urgent requests get booked directly onto the schedule instead of waiting for a callback`]},{type:`h2`,text:`Why this is a coverage problem, not a staffing problem`},{type:`p`,text:`Most home service companies cannot justify paying a dispatcher to sit by the phone all night for the volume of after-hours calls they actually get, and they should not try to. The fix is not more people working odd hours. It is making sure every call gets a fast, capable response no matter when it comes in, whether that is an on-call employee or a system built to answer, gather the details, and route the job without anyone standing by.`},{type:`callout`,title:`The structural fix`,text:`Treat after-hours coverage as part of dispatch, not an inconvenience to work around. The companies winning the nine o'clock emergency calls are not the ones with the biggest crew. They are the ones that pick up.`}],faqs:[{q:`What percentage of calls do home service companies miss outside business hours?`,a:`Estimates put missed calls at somewhere between 27 and 62 percent for home service businesses, with the highest rates at companies whose technicians are on job sites and unable to answer the phone.`},{q:`What happens when a contractor misses an after-hours call?`,a:`Roughly 85 percent of callers who reach voicemail or a missed call never call back, and an estimated 62 percent call a competitor right away instead, so a missed call is usually a lost job rather than a delayed one.`},{q:`Does response speed matter even during normal business hours?`,a:`Yes. Businesses that respond within five minutes are far more likely to connect with and qualify a caller than ones that wait thirty, and an estimated 78 percent of buyers choose whichever company gets back to them first.`},{q:`Does an after hours answering service require a 24-hour staffed dispatcher?`,a:`N
22o. Most companies cannot justify full-time overnight staffing for the call volume involved. The fix is a system that answers, gathers job details, and routes urgent calls at any hour, not necessarily a person sitting by the phone.`}],sources:[{label:`Aira: The Real Cost of Missed Business Calls`,url:`https://www.getaira.io/blog/missed-business-calls-statistics`}],relatedSlugs:[`home-services`,`how-do-ai-assistants-recommend-a-home-service-company`],relatedService:{label:`AI Front Desk`,path:`/ai-front-desk`},relatedIndustry:{label:`Home Services`,path:`/industries/home-services`},primaryCta:{label:`Plan My After-Hours Coverage`,href:Y}})),$.push(Q({slug:`how-do-ai-assistants-recommend-an-equipment-rental-company`,title:`AI Visibility for Equipment Rental: How Do Assistants Like ChatGPT Pick a Yard?`,shortTitle:`AI Visibility for Equipment Rental`,metaTitle:`AI Visibility for Equipment Rental Companies`,metaDescription:`AI visibility for equipment rental companies rests on current availability, consistent listings, and specific answers. Here is what earns the mention.`,excerpt:`Someone asks an AI assistant which rental yard has a lift available this weekend. The answer favors whichever business can prove the equipment is actually there.`,answer:`AI visibility for equipment rental companies rests on accurate, current availability, consistent pricing and location details across the website and listings, and specific answers to questions about rates and equipment specs. Businesses with outdated inventory pages or mismatched information across platforms get passed over for ones an AI system can trust and verify.`,datePublished:`2026-09-27`,category:`search-visibility`,industries:[`Rental Companies`],services:[`Search Visibility`],body:[{type:`p`,text:`Someone asks an AI assistant which rental yard has a scissor lift available this weekend. The assistant is not weighing which website looks more professional. It is trying to figure out which business can actually be trusted to have the equipment sitting in the yard, ready to go.`},{type:`p`,text:`That is a different kind of proof than most rental websites are built to give, and it is why availability and consistency matter more here than almost anywhere else in this industry's marketing.`},{type:`h2`,text:`Why availability is the trust signal that matters most`},{type:`p`,text:`A live or frequently updated inventory feed is one of the strongest signals a rental company can offer an AI system, because it answers the question underneath the question: is this equipment actually available right now, or is the page just old. A static inventory page left unchanged for a season gives an AI assistant no way to answer that with confidence.`},{type:`h2`,text:`What actually earns AI visibility for a rental yard`},{type:`ul`,items:[`Inventory and availability information that gets updated regularly, not a page built once and left alone`,`Consistent pricing, service area, and hours across the website, Google Business Profile, and any listing sites`,`Specific, factual answers to common questions about rental rates, delivery area, and equipment specifications, instead of "call for a quote"`,`Visible safety and maintenance information, since a rental company's authority rests partly on the equipment being well kept`,`Structured data that labels equipment categories and service areas so an AI system can read the page directly`]},{type:`h2`,text:`Why mismatched listings quietly disqualify a yard`},{type:`p`,text:`If the website lists one set of hours or one delivery radius and a directory listing shows something different, the disagreement itself becomes the problem. An AI system reading conflicting information about the same business has no reliable way to know which version is correct, so it tends to favor a competitor whose details agree everywhere they appear.`},{type:`h2`,text:`What tends to get skipped over`},{type:`p`,text:`An inventory page that has not changed since it was built, no documented maintenance or safety information anyw
22here on the site, and generic equipment descriptions that could describe any yard in the state. None of these cost much to fix, but all three quietly work against a rental company that is otherwise well run.`},{type:`callout`,title:`The structural fix`,text:`Keep inventory and pricing current, keep every listing in agreement with the others, and answer the specific questions a renter actually asks. That is what lets an AI assistant recommend a yard with confidence, and it is what a renter needs to book without calling three other places first.`}],faqs:[{q:`How do AI assistants pick which equipment rental company to recommend?`,a:`AI assistants favor rental companies with current, accurate availability information and consistent details across their website and listings, since these give the assistant a reliable basis for recommending equipment it can trust is actually on hand.`},{q:`Does having a real-time inventory feed matter for AI visibility?`,a:`Yes. A live or frequently updated inventory signal is one of the strongest trust indicators an AI system looks for, since it directly answers whether the equipment is actually available rather than just listed.`},{q:`Do mismatched business listings actually hurt a rental company's AI visibility?`,a:`Yes. When a website and a directory listing disagree on hours, pricing, or service area, an AI system has no reliable way to know which is correct, and it tends to favor a competitor whose information is consistent everywhere.`},{q:`What should a rental company avoid when trying to be recommended by AI tools?`,a:`Static inventory pages, vague pricing language like "call for a quote," and generic equipment descriptions that give an AI system nothing specific to verify or repeat.`}],sources:[{label:`Integra Rental: AI Search Optimization for Rental Businesses`,url:`https://www.integrarental.com/blog/ai-search-optimization-rental-businesses/`}],relatedSlugs:[`rental-companies`,`do-online-reviews-affect-equipment-rental-decisions`],relatedService:{label:`Search Visibility`,path:`/seo-geo`},relatedIndustry:{label:`Rental Companies`,path:`/industries/rental-companies`},primaryCta:{label:`Plan My Yard's AI Visibility`,href:Y}})),$.push(Q({slug:`are-local-services-ads-worth-it-for-home-service-companies`,title:`Google Local Services Ads Cost: Are They Worth It for Home Service Companies?`,shortTitle:`Google Local Services Ads Cost`,metaTitle:`Google Local Services Ads Cost: Worth It for Contractors?`,metaDescription:`Google Local Services Ads cost less per lead than standard Google Ads for most trades. Here is what they run by trade, and what has to be true first.`,excerpt:`The pay-per-lead model looks safer than regular pay-per-click. It only stays that way if someone actually answers the lead once it arrives.`,answer:`Google Local Services Ads cost roughly fifty three dollars per lead on average across trades, charged per lead instead of per click, which runs lower than standard Google Ads for most home service companies. They only pay off when calls get answered and booked within minutes, since a paid lead that goes to voicemail is money lost either way.`,datePublished:`2026-09-28`,category:`revenue-operations`,industries:[`Home Services`],services:[`Paid Growth`],body:[{type:`p`,text:`A home service owner who has tried regular Google Ads and gotten burned by clicks that never called is usually cautious about trying paid search again. Local Services Ads get pitched as the safer version. Pay per lead instead of per click, a Google Guarantee badge, and placement above the regular ads. The pitch is mostly true. It still depends on what happens after the lead comes in.`},{type:`h2`,text:`What Google Local Services Ads cost per lead by trade`},{type:`p`,text:`Pricing varies by trade and market, but recent benchmarks put the blended average cost per lead across trades at roughly fifty three dollars, with a booking rate around forty four percent. By trade, electrical tends to run the cheapest, often around thirty nine dollars per lead. HVAC typically falls between fifty one and eighty dollars. Plumbing runs roughly fifty seven to sixty nine dollars. Roofing runs the highest, from about seventy one dollars up to over one hundred sixty dollars in storm-driven markets. Industry estimates put that blended average at roughly half the cost of standard Google Ads and well below non-branded search generally.`},{type:`h2`,text:`Why the per-lead model changes the math`},{type:`p`,text:`With standard pay-per-click, a company pays for every click regardless of whether it turns into a real inquiry. With Local Services Ads, the charge only happens for a lead that actually contacts the business, a phone call, a message, or a booking request. That shifts risk away from wasted clicks and toward a different question: what happens once that lead lands.`},{type:`h2`,text:`What has to be true before it pays off`},{type:`ul`,items:[`Calls get answered live or through a system that can book on the spot, not routed to voicemail during busy hours`,`Leads get a response within minutes, since a paid lead that sits for an hour is often already booked with a competitor`,`The business is verified and background checked for the Google Guarantee badge, which affects both trust and placement`,`Reviews stay current, since profile strength inside Local Services Ads influences how often a business gets shown`,`Someone is tracking cost per booked job, not just cost per lead, to know whether the spend is actually working`]},{type:`h2`,text:`Where the money actually gets lost`},{type:`p`,text:`The companies that call Local Services Ads a waste of money are almost never companies with a real answering problem, they think. Most of the time the leads were paid for and never picked up, or the callback happened the next morning instead of within the hour. A dispatcher stretched across every incoming channel cannot al
22ways drop what they are doing for a lead that has not booked anything yet. That is a staffing and coverage gap, not a flaw in the ad product.`},{type:`callout`,title:`The structural fix`,text:`Treat every Local Services Ads lead like it has a five minute clock attached to it, because in practice it does. A coverage system that answers immediately, every time, is what turns a lower cost per lead into a lower cost per booked job.`}],faqs:[{q:`How much do Google Local Services Ads cost per lead?`,a:`It depends on trade and market, but blended cost per lead across trades runs roughly fifty three dollars on average, with electrical typically cheapest around thirty nine dollars and roofing highest, sometimes exceeding one hundred sixty dollars in storm markets.`},{q:`Are Local Services Ads cheaper than regular Google Ads for contractors?`,a:`Generally yes. Industry benchmarks put the blended cost per lead well below standard Google Ads and non-branded search, largely because Local Services Ads only charge for an actual lead rather than every click.`},{q:`What makes Local Services Ads fail for a home service company?`,a:`Slow or missed response is the most common cause. A lead that goes to voicemail or waits an hour for a callback is often already booked elsewhere, which means the company paid for a lead it never had a real chance to convert.`},{q:`Do reviews affect Local Services Ads performance?`,a:`Yes. Profile strength, including review volume and recency, affects how often a business is shown and how it is ranked among competitors bidding for the same leads.`},{q:`Is the Google Guarantee badge required to run Local Services Ads?`,a:`Businesses need to pass a background check and verification process to earn the Google Guarantee badge, which is a standard part of qualifying to run Local Services Ads and also builds trust with the homeowner reviewing options.`}],sources:[{label:`Booked Friday: Google Local Services Ads Cost Per Lead by Trade (2026)`,url:`https://bookedfriday.com/local-services-ads-cost`}],relatedSlugs:[`secret-shop-your-own-business`,`how-many-google-reviews-does-a-home-service-company-need`],relatedService:{label:`Paid Growth`,path:`/paid-growth`},relatedIndustry:{label:`Home Services`,path:`/industries/home-services`},primaryCta:{label:`See If Paid Ads Make Sense for My Company`,href:Y}})),$.push(Q({slug:`how-many-google-reviews-does-a-med-spa-need`,title:`Med Spa Google Reviews: How Many Do You Need to Show Up in the Map Pack?`,shortTitle:`Med Spa Google Reviews`,metaTitle:`Med Spa Google Reviews: How Many Do You Need?`,metaDescription:`Med spa Google reviews drive map pack ranking more than a good rating does. Here is the count, recency, and weekly pace that actually move a practice up.`,excerpt:`A four point nine average with twelve reviews looks great to a patient. To Google's ranking system, it barely registers next to a competitor with two hundred.`,answer:`Med spa Google reviews usually need to reach at least two hundred to compete for a top three map pack position in an average market, fewer in a smaller market and more in a competitive one like Los Angeles or Miami. A four point five star average or higher, with recent reviews arriving weekly, matters more than an older, larger total.`,datePublished:`2026-09-29`,category:`search-visibility`,industries:[`Healthcare and Aesthetics`],services:[`Reputation Growth`],body:[{type:`p`,text:`A practice manager checking their own Google Business Profile usually looks at one number: the star rating. A four point eight looks strong. It feels like the review question is handled. Then a patient searches for injectables nearby, sees three other practices ahead of theirs in the map pack, and nobody on staff can explain why, because the rating is fine.`},{type:`h2`,text:`How many med spa Google reviews it takes to rank`},{type:`p`,text:`Star rating is only one input. Review count carries real weight too. Benchmarks for aesthetic and med spa practices put a top three map pack position at roughly two hundred reviews or more in an average market. Smaller markets can compete with as few as fifty. Competitive metro markets, Los Angeles and Miami among them, often see top three results holding six hundred reviews or more. A twelve review profile with a perfect average is not in that conversation, regardless of how good the rating looks.`},{type:`h2`,text:`Why rating alone is not the finish line`},{type:`p`,text:`A four star average is generally treated as a floor, not a target. Meaningful ranking lift tends to start closer to four point six, with four point five or higher associated with top three placement. Below that range, a practice is competing on count and recency alone against practices that also have a strong rating.`},{type:`h2`,text:`Why recency beats a big old total`},{type:`p`,text:`A profile with five hundred reviews from two years ago can rank behind a profile with two hundred reviews, most of them recent. Google treats the date of the most recent review as a freshness signal, separate from the total count. A practice that stopped actively asking for reviews eighteen months ago is quietly losing ground even if the total number on the page has not changed.`}
22,{type:`h2`,text:`What a working review system looks like`},{type:`ul`,items:[`A review request goes out within two hours of the appointment, while the experience is still fresh`,`The ask targets three to five new reviews per provider per week, not an occasional bulk push`,`Every review gets a response, since that response is also part of what the next prospective patient reads`,`Requests are tracked per provider, since ranking and trust both depend on reviews staying current across the whole practice, not just one popular injector`]},{type:`callout`,title:`The structural fix`,text:`Build the review request into the checkout step at the front desk, timed to go out within a couple hours of the visit, so recent reviews keep arriving every week instead of depending on someone remembering to ask.`}],faqs:[{q:`How many med spa Google reviews are needed to rank in the map pack?`,a:`Roughly two hundred or more in an average market, fewer in a smaller market, and often six hundred or more in highly competitive metro markets like Los Angeles or Miami.`},{q:`What star rating does a med spa need to rank well on Google?`,a:`Four stars is generally the minimum threshold, but meaningful ranking improvement tends to start around four point six, with four point five or higher associated with top three map pack positions.`},{q:`Do older reviews still help a med spa rank on Google?`,a:`Less than recent ones. Google treats recency as its own signal, so a profile with two hundred recent reviews can outrank one with five hundred older reviews, since the most recent review date functions as a freshness check.`},{q:`How often should a med spa ask patients for reviews?`,a:`A steady weekly pace works better than periodic pushes. A target of three to five new reviews per provider per week, requested within about two hours of the appointment, keeps a profile looking active instead of stale.`},{q:`Does responding to reviews affect a med spa's ranking?`,a:`Responding to reviews is part of the trust signal prospective patients read, and an active, responsive profile reflects the same ongoing attention that supports steady review velocity and freshness.`}],sources:[{label:`Aesthetic Patient Acquisition: Top 10 Google Maps Ranking Factors for Med Spas in 2026`,url:`https://aestheticpatientacquisition.com/blog/top-10-google-maps-ranking-factors-med-spa`}],relatedSlugs:[`healthcare-aesthetics`,`how-med-spas-should-follow-up-after-a-consultation`],relatedService:{label:`Reputation Growth`,path:`/reputation-growth`},relatedIndustry:{label:`Healthcare and Aesthetics`,path:`/industries/healthcare-aesthetics`},primaryCta:{label:`Plan My Practice's Review System`,href:Y}})),$.push(Q({slug:`how-fast-should-advisory-firms-follow-up-with-a-new-lead`,title:`Financial Advisor Lead Response Time: How Fast Before an Inquiry Goes Cold?`,shortTitle:`Financial Advisor Lead Response Time`,metaTitle:`Financial Advisor Lead Response Time: How Fast Is Enough?`,metaDescription:`Financial advisor lead response time decides who gets the client. Here is what the research shows about the five minute window and what it takes to hit it.`,excerpt:`A referral can survive a slow reply. A cold inquiry from your website usually cannot. Most firms are still treating them the same way.`,answer:`Financial advisor lead response time should stay inside five minutes when possible, since research on lead response shows contact rates up to one hundred times higher and qualification rates up to twenty one times higher within that window compared with waiting thirty minutes. Beyond an hour, the odds of ever qualifying that lead drop sharply.`,datePublished:`2026-09-30`,category:`revenue-operations`,industries:[`Advisory Firms`],services:[`Revenue Operations`],body:[{type:`p`,text:`A firm built on referrals can get away with a slower reply than it realizes, because a referred prospect already trusts the firm and is not shopping around. A prospect who found the firm online and filled out a contact form is a different situation entirely. They are often doing the same thing with two or three other firms at the same time, and the first one to actually talk to them has a real advantage.`},{type:`h2`,text:`What the research says about lead response time`},{type:`p`,text:`Lead response research, most of it originating from an MIT study on lead response management and later work published in Harvard Business Review, has held up consistently across industries. Contacting a new lead within five minutes makes a business up to one hundred times more likely to actually reach that person, compared with waiting thirty minutes. The same five minute window is linked to being up to twenty one times more likely to qualify the lead at all. Lead quality itself has been found to drop by roughly eighty percent in just the first five minutes after a form is submitted, and the average business across industries takes something like forty seven hours to respond to a new lead.`}
22,{type:`h2`,text:`Why this hits advisory firms harder than it looks`},{type:`p`,text:`A prospect for a financial advisor is not filling out a form on impulse. They looked at a few firms, compared credentials, and are now testing which one actually responds like a firm that wants their business. A form confirmation email is not a response. Neither is a callback the next afternoon after the prospect already booked a call with someone else.`},{type:`h2`,text:`What actually closes the gap`},{type:`ul`,items:[`A new website or referral inquiry triggers an immediate notification to whoever owns first contact, not a queue someone checks once a day`,`The first contact does not need to be a full planning conversation, just a real human acknowledgment and a specific next step`,`After-hours and weekend inquiries get the same speed standard, since a form submitted on a Saturday still starts that same clock`,`Every lead source gets tracked separately, referral against website against any paid channel, so the firm actually knows where slow response is costing it prospects`]},{type:`h2`,text:`Where compliance fits into this`},{type:`p`,text:`Speed does not mean skipping the parts that matter. First contact can acknowledge the inquiry and set a real appointment without getting into specific advice before a licensed advisor is actually on the call. The goal is closing the response gap, not compressing the compliance process.`},{type:`callout`,title:`The structural fix`,text:`Route every new lead to a real person the moment it arrives, with a defined response window measured in minutes, not hours. A firm that wins the response race usually wins the client, regardless of which firm had the stronger pitch.`}],faqs:[{q:`What is a good lead response time for a financial advisor?`,a:`Within five minutes when possible. Research on lead response shows contact rates up to one hundred times higher and qualification rates up to twenty one times higher when a business responds within five minutes rather than waiting thirty.`},{q:`Does response speed matter for referral leads too, or just website leads?`,a:`It matters less for referrals, since a referred prospect already trusts the firm and is not actively comparing options. Response speed matters most for a prospect who found the firm independently and may be talking to competitors at the same time.`},{q:`How much does lead quality actually drop if a firm waits to respond?`,a:`Studies on lead response have found lead quality can drop by roughly eighty percent within the first five minutes after a lead comes in, which is why an immediate response matters more than a polished one.`},{q:`What is the average business's lead response time?`,a:`Research has put the average response time across industries at roughly forty seven hours, which means a firm that responds within minutes is competing against a very low bar most of the time.`},{q:`Can an advisory firm respond quickly without giving specific financial advice too early?`,a:`Yes. A fast first response can acknowledge the inquiry and set a concrete next appointment without getting into specific recommendations, which keeps the process compliant while still closing the response gap.`}],sources:[{label:`Casey Response: Lead Response Time Statistics (2026), The 5-Minute Rule`,url:`https://caseyresponse.com/blog/lead-response-time-statistics`}],relatedSlugs:[`should-financial-advisors-run-paid-ads`,`do-advisory-firms-need-online-reviews`],relatedService:{label:`Revenue Operations`,path:`/revenue-operations`},relatedIndustry:{label:`Advisory Firms`,path:`/industries/advisory-firms`},primaryCta:{label:`See Where Leads Are Falling Out of My Pipeline`,href:Y}})),$.push(Q({slug:`what-should-a-rental-company-website-help-customers-do`,title:`Equipment Rental Website: What Should It Actually Help a Customer Do?`,shortTitle:`Equipment Rental Website`,metaTitle:`Equipment Rental Website: What It Should Actually Do`,metaDescription:`An equipment rental website should answer availability, price, and delivery area before a call. Most just describe the fleet. Here is what to build instead.`,excerpt:`A photo of the equipment answers a question nobody was asking. The customer wants to know if it is available Friday and what it costs.`,answer:`An equipment rental website should let a customer check real availability, see clear pricing or a fast quote, confirm the delivery area, and request a reservation without calling first. A site that only describes the fleet in general terms pushes every one of those questions back onto a phone call the business may not be staffed to answer quickly.`,datePublished:`2026-10-01`,category:`website-strategy`,industries:[`Rental Companies`],services:[`High Performance Websites`],body:[{type:`p`,text:`Most equipment and event rental websites read like a catalog. Photos of the trailers or the tables and chairs, a short description, maybe a phone number at the top. That answers what the company has. It does not answer the three questions a customer actually has before they book anything: is it available when I need it, what does it cost, and does it deliver to where I am.`},{type:`h2`,text:`The three questions an equipment rental website has to answer`},{type:`p`,text:`A customer researching a rental is not browsing for fun. They have a date and a job that depends on the equipment showing up. A website that makes them call to find out if something is even available for that date has already lost some of them to whichever competitor's site answered the question directly.`},{type:`ul`,items:[`Availability for specific dates, ideally shown on the page itself rather than requiring a phone call to check`,`Pricing that is either published clearly or produced through a fast, specific quote request, not a vague "contact us for pricing" page`,`Delivery area and any delivery fees, stated plainly instead of discovered partway through a phone call`]},{type:`h2`,text:`Why vague pricing pages cost more bookings than they seem to`},{type:`p`,text:`A rental company that hides pricing to "start a conversation" is usually trying to protect margin on custom jobs. That instinct is reasonable for large or unusual rentals. It backfires for the routine ones, where a customer comparing three companies will simply move to the one that told them the number without making them ask.`},{type:`h2`,text:`What a reservation flow should actually do`}
22,{type:`p`,text:`The goal is not necessarily full self-serve checkout, though that works well for standardized items. At minimum, a reservation request should capture the date, the item or job type, and the delivery location in one short form, then route straight to whoever confirms bookings, rather than dropping into a general contact inbox that gets checked once a day.`},{type:`h2`,text:`Where this connects to search and reviews`},{type:`p`,text:`A well-built rental site does double duty. The same specific, current content that helps a customer book also gives search engines and AI assistants something real to read and quote when someone searches for equipment or event rentals nearby. A generic homepage with no specifics does neither job well.`},{type:`callout`,title:`The structural fix`,text:`Build the website around the booking decision a customer is actually trying to make, availability, price, and delivery area, instead of around a general description of the fleet. Every question it answers on the page is one less call your team has to catch before the customer moves on.`}],faqs:[{q:`Should an equipment rental website show pricing?`,a:`In most cases, yes, at least for standard items. Hiding pricing entirely tends to push routine bookings to a competitor who answered the question directly, even when the intent is to protect margin on custom jobs.`},{q:`Does a rental website need real-time availability?`,a:`It helps significantly. A customer who cannot tell whether equipment is free for their date is likely to call several competitors at once, and the company with visible availability has a head start in that comparison.`},{q:`What information does a rental reservation request need to capture?`,a:`At minimum the date needed, the item or job type, and the delivery location, submitted in one short form that routes directly to whoever confirms bookings rather than a general inbox.`},{q:`How does a rental company website affect delivery area confusion?`,a:`Stating the delivery area and any delivery fees plainly on the page avoids a customer discovering midway through a phone call that the company does not actually serve their location, which wastes time for both sides.`},{q:`Does a better rental website help with AI search visibility too?`,a:`Yes. Specific, current content about availability, pricing, and service area gives AI assistants and search engines real information to quote, the same content a customer needs to book.`}],sources:[],relatedSlugs:[`rental-companies`,`how-do-ai-assistants-recommend-an-equipment-rental-company`],relatedService:{label:`High Performance Websites`,path:`/high-performance-websites`},relatedIndustry:{label:`Rental Companies`,path:`/industries/rental-companies`},primaryCta:{label:`Start With a Plan for My Website`,href:Y}})),$.push(Q({slug:`what-should-a-law-firms-website-actually-do`,title:`Law Firm Website: What Should It Do Before a Prospective Client Ever Calls?`,shortTitle:`Law Firm Website`,metaTitle:`Law Firm Website: What It Should Do Before the Call`,metaDescription:`A law firm website earns the shortlist before anyone calls. Here is what it has to prove about experience, reviews, and fees, and what most firms miss.`,excerpt:`By the time a prospective client dials the number, they have usually already decided whether your firm made the shortlist. The website did that work.`,answer:`A law firm website should prove relevant experience with the prospect's specific legal problem, show recent and specific reviews, explain fees clearly, and make contact fast and easy, since research happens before any human conversation starts. A firm that is generic about practice areas or vague about cost loses consideration before the phone ever rings.`,datePublished:`2026-10-02`,category:`website-strategy`,industries:[`Legal Services`],services:[`High Performance Websites`],body:[{type:`p`,text:`Someone dealing with a legal problem rarely calls the first firm they find. They search, they read a few websites, they check reviews, and they narrow the list before they ever pick up the phone. By the time a call comes in, the website has usually already done the work of getting the firm onto that shortlist or leaving it off.`},{type:`h2`,text:`What a prospective client checks on a law firm website`},{type:`p`,text:`Consumer research on hiring an attorney points to a consistent set of factors: relevant experience with their specific type of case, not a generalist practice; a steady stream of recent, specific reviews; clear explanation of cost and fee structure; and a sense that the firm will actually respond quickly once contacted. A polished-looking site that is vague on all four of those still reads as a risk to someone who is already anxious about the legal problem itself.`},{type:`h2`,text:`Why generalist practice pages lose the shortlist`},{type:`p`,text:`A homepage that lists every practice area a firm technically handles reads very differently from a page built specifically around, for example, a contested custody case or a workplace injury. The specific page answers the visitor's actual question. The generalist page makes them guess whether the firm has really done this kind of case before, and guessing usually means moving to the next site. In a metro market like Houston, where dozens of firms handle the same practice area, that specificity is often the only thing separating the two firms that get called from everyone else.`},{type:`h2`,text:`What has to be on the page, not just true somewhere`},{type:`ul`,items:[`A dedicated page per practice area, written in plain language about what the process actually looks like for that specific problem`,`Recent, specific reviews and outcomes displayed where a visitor will actually see them, not buried on a separate testimonials page`,`A clear explanation of how fees work, contingency, flat fee, or hourly, since cost uncertainty is one of the biggest reasons people stall before calling`,`A fast, simple way to make contact, since a form that asks for a dozen fields before anyone hears back adds friction at the exact moment urgency is highest`]},{type:`h2`,text:`Speed still matters after the click`},{type:`p`,text:`A strong website earns the call. What happens after that call comes in decides whether the work was worth it. A prospective client who filled out a contact form is often still comparing firms, and a slow callback hands that shortlist advantage to whichever firm responds first.`},{type:`callout`,title:`The structural fix`,text:`Build the website around the specific problem a prospective client is trying to solve, with real reviews, plain fee explanations, and a fast path to contact, so the shortlist decision gets made in the firm's favor before the phone ever r
22ings.`}],faqs:[{q:`What should a law firm website include?`,a:`Relevant experience with the visitor's specific type of case, recent and specific reviews, a clear explanation of fees, and signs that the firm actually responds quickly once contacted.`},{q:`Should a law firm have a separate page for each practice area?`,a:`Yes. A dedicated page that speaks directly to a specific legal problem answers a visitor's actual question, while a general list of practice areas leaves them guessing whether the firm has real experience with their situation.`},{q:`Why does fee clarity matter on a law firm website?`,a:`Cost uncertainty is one of the most common reasons someone hesitates to call a law firm. A clear explanation of how fees work, whether contingency, flat fee, or hourly, removes a major source of hesitation before contact ever happens.`},{q:`Does responsiveness after a website inquiry actually affect whether a firm gets hired?`,a:`It does. A prospective client who submits a contact form is frequently still comparing firms, and a slow response can hand the decision to whichever firm replies first, regardless of which website made the stronger impression.`},{q:`How much research do people do before contacting a law firm?`,a:`Most of the shortlisting happens before any phone call, through searching, reading firm websites, and checking reviews, which is why the website carries much of the weight in whether a firm gets called at all.`}],sources:[{label:`Martindale-Avvo: What Consumers Look For Before Hiring an Attorney`,url:`https://www.martindale-avvo.com/blog/what-consumers-look-for-before-hiring-an-attorney/`}],relatedSlugs:[`legal-services`,`is-ppc-worth-it-for-law-firms`],relatedService:{label:`High Performance Websites`,path:`/high-performance-websites`},relatedIndustry:{label:`Legal Services`,path:`/industries/legal-services`},primaryCta:{label:`Start With a Plan for My Firm's Website`,href:Y}})),$.push(Q({slug:`accounting-firms`,title:`What a Client Accounting or Fractional CFO Firm Needs Once a Referral Comes In`,shortTitle:`Accounting & CFO Firms`,metaTitle:`Accounting Firm Growth: Beyond Referrals Alone`,metaDescription:`Client accounting and fractional CFO firms are growing fast, but referrals alone rarely include an intake process. Here is what is missing.`,excerpt:`A referral already carries trust. What rarely comes with it is a plan for what happens after the introduction is made.`,answer:`Client accounting, bookkeeping, and fractional CFO firms are growing quickly, and most still get the bulk of new work through referrals. That trust rarely comes with a real process behind it: no defined first response, no qualification before a scoping call, and no follow-up if a strong conversation goes quiet afterward.`,datePublished:`2026-10-03`,category:`industry-guides`,industries:[`Accounting Firms`],services:[`Revenue Operations`],body:[{type:`p`,text:`A CPA's existing client mentions the firm to a growing e-commerce business owner who is drowning in reconciliations. A financial advisor refers a client who just sold a business and needs a fractional CFO. An attorney sends over a client who needs bookkeeping cleaned up before a loan application. Every one of these referrals arrives with something a cold lead never has: real trust, already established. What often does not arrive with it is any plan for what should happen next.`},{type:`h2`,text:`Client accounting and advisory work is growing quickly`},{type:`p`,text:`Client accounting services, ongoing bookkeeping, controller-level work, and fractional CFO engagements, have been one of the fastest-growing parts of the accounting profession in recent years. CPA.com's 2024 CAS Benchmark Survey found practices reporting a median growth rate of 17 percent, continuing a run of double-digit growth in prior years, with firms projecting a median 15 percent growth for the current year alone. Nearly half of respondents, 45 percent, described their pipeline as strong enough that they were actively planning for more growth, while 13 percent said they were struggling to create the capacity to meet the demand already showing up.`},{type:`h2`,text:`Referrals still start most of these relationships, which is exactly why intake gets skipped`},{type:`p`,text:`Because a referral already carries trust, it rarely feels like it needs a process. Nobody is cold-calling this prospect or running an ad campaign to reach them. That is precisely the trap. Without a real workflow behind it, a referral depends entirely on whoever happens to see the email first, and how quickly they get around to replying. A prospect with real trust in the firm still needs an actual next step, and a slow or inconsistent one erodes that trust faster than it built up.`},{type:`h2`,text:`What actually needs to exist between an introduction and a signed engagement`},{type:`ul`,items:[`A first response that goes out quickly and consistently, whether the inquiry comes in by email, a form, or a phone call`,`A short qualification step before a partner gives up an hour for a scoping call, covering business type, rough size, and what the prospect actually needs help with`,`Website and outreach language specific to CAS, bookkeeping, or fractional CFO work, not generic accounting services copy, so a referred prospect recognizes the fit immediately`,`A scheduled follow-up if the prospect goes quiet after a good scoping conversation or a proposal, instead of leaving it to whoever remembers to check back in`]},{type:`h2`,text:`Where capacity strain actually shows up first`},{type:`p`,text:`The same CAS Benchmark Survey found 13 percent of firms struggling to create the capacity to meet current demand, and only 12 percent describing their pipeline as weak. Read together, that means most of the growth pressure in this part of the profession is not a demand problem, it is a capacity and process problem. Hiring is one answer, but it is rarely the fastest one. Making sure partner time only goes toward prospects who are actually qualified, and that nobody falls through after a strong first conversation, recovers capacity without adding headcount.`},{type:`h2`,text:`Why generic accounting positioning underperforms with a referred prospect`},{type:`p`,text:`A referred business owner arrives already believing the firm can help. A homepage that lists bookkeeping, tax, payroll, and advisory services as an undifferentiated menu makes that owner work to confirm the fit themselves. A firm that speaks plainly about monthly close, forecasting, and fractional CFO support, in language that matches what the prospect is actually dealing with, confirms the referral instead of adding friction to it.`},{type:`callout`,title:`The structural fix`,text:`Treat every referral like it deserves an actual process: a fast first response, a short fit check before committing partner time, and a follow-up sequence if a good conversation goes quiet. The trust is already there. The system just has to catch up to it.`}],faqs:[{q:`Is this only useful for large accounting firms?`,a:`No. It matters most for smaller and mid-sized CAS, bookkeeping, and fractional CFO practices, where a partner's time is the scarcest resource and a single missed follow-up can mean losing a good-fit client to a competitor who replied first.`},{q:`Does a qualification step slow down a warm referral?`,a:`A short one does not. A handful of plain questions about business type, size, and need takes a prospect a few minutes and saves a partner from spending an hour scoping a business that was never a fit for ongoing CAS work.`},{q:`How fast is CAS and fractional CFO work actually growing?`,a:`CPA.com's 2024 CAS Be
22nchmark Survey found a median 17 percent growth rate among practices, with firms projecting roughly 15 percent growth for the current year and continued double-digit growth ahead.`},{q:`What if the firm mostly relies on referrals and does not want to advertise?`,a:`That is fine. None of this requires paid advertising. It is about making sure the referrals already arriving get a fast, consistent response and do not go cold after a good first conversation.`},{q:`Should a CAS firm handle tax preparation clients the same way?`,a:`This approach is built around ongoing engagements like monthly bookkeeping, controller work, and fractional CFO support, where the relationship and the qualification step matter more than volume. Tax-only work tends to follow a different, more seasonal intake pattern.`}],sources:[{label:`CPA.com: 2024 CAS Benchmark Survey`,url:`https://www.cpa.com/sites/cpa/files/2024-12/2024-CAS-Benchmark-Survey.pdf`}],relatedSlugs:[`do-advisory-firms-need-online-reviews`,`how-fast-should-advisory-firms-follow-up-with-a-new-lead`],relatedService:{label:`Revenue Operations`,path:`/revenue-operations`},relatedIndustry:{label:`Accounting Firms`,path:`/industries/accounting-firms`},primaryCta:{label:`Plan My Firm's Referral Intake System`,href:Y}})),$.push(Q({slug:`how-fast-should-a-law-firm-respond-to-a-new-client-inquiry`,title:`How Fast Does a Law Firm Actually Need to Respond to a New Inquiry?`,shortTitle:`Law Firm Response Time`,metaTitle:`Law Firm Lead Response Time: How Fast Is Enough?`,metaDescription:`A 2025 study of 1,300+ law firms found a median response time of 13 minutes, and a quarter never respond at all. Here is what that means.`,excerpt:`Somebody comparing law firms after a car accident is not filing one form. They are filing three or four, and whichever firm replies first usually gets the call back.`,answer:`A 2025 study of more than 1,300 law firms found the median response time to a new online inquiry is 13 minutes, with a quarter of firms never responding at all. Firms that respond in minutes rather than hours have a real edge, since most people comparing legal help contact several firms at once and retain whichever one replies first.`,datePublished:`2026-10-04`,category:`revenue-operations`,industries:[`Legal Services`],services:[`Revenue Operations`],body:[{type:`p`,text:`Someone dealing with a car accident, a contested custody case, or a workplace injury rarely fills out one contact form. In the same sitting, they usually fill out three or four, one for every firm that showed up in their search. The case still has to be won on its merits. Getting the chance to work it usually comes down to something much simpler: who replied first.`},{type:`h2`,text:`What a 2025 study of over 1,300 law firms actually found`},{type:`p`,text:`Hennessey Digital's 2025 Lead Form Response Time Study analyzed 1,333 personal injury firms and found real improvement industry-wide: 26 percent of firms still do not respond to online leads at all, down from 40 percent in 2021, and 25 percent now respond in under five minutes, up from 13 percent in 2021. A third of firms, 33 percent, respond within 10 minutes, and 56 percent get back within the hour. The median response time across the study was 13 minutes.`},{type:`h2`,text:`Why the median is not a target worth hitting`},{type:`p`,text:`A firm that matches the 13-minute median is, by definition, in the middle of the pack, not ahead of it. A prospective client comparing four firms is going to hear back from all of them eventually. The firm that replies in five minutes gets a real conversation started while the others are still queued in someone's inbox. Matching the average keeps a firm in the running. Beating it is what actually wins consultations.`},{type:`h2`,text:`The quarter of firms that never respond at all`},{type:`p`,text:`Going from silence to any response is the single biggest jump a firm can make, and it is also the easiest one to fix. Non-response almost always traces back to the same cause: a form that drops into a shared inbox nobody owns, especially for anything submitted at night or on a weekend, when a firm assumes the message can simply wait until Monday.`},{type:`h2`,text:`What actually closes the gap`},{type:`ul`,items:[`A new inquiry notifies a specific person immediately, not a shared inbox that gets checked once or twice a day`,`After-hours and weekend submissions get treated the same as a Tuesday afternoon inquiry, since the prospect's clock does not stop for the firm's`,`The first reply is a real acknowledgment from a person, not only an automated confirmation email`,`The firm actually tracks its own response times instead of assuming intake is working`]},{type:`h2`,text:`Speed gets the consultation, not the case`},{type:`p`,text:`None of this replaces legal skill or a strong track record. It decides whether the firm with that skill and track record is the one that gets the chance to demonstrate it, instead of losing the prospect to whichever firm happened to call back first.`},{type:`callout`,title:`The structural fix`,text:`Route every new inquiry to a specific person the moment it arrives, with after-hours and weekend submissions held to the same standard as business hours. A firm that responds in minutes instead of the 13-minute median is competing for consultations that slower firms have already lost.`}],faqs:[{q:`What is the average law firm response time to a new inquiry?`,a:`A 2025 study of 1,333 personal injury firms found a median response time of 13 minutes, with 25 percent responding in under five minutes and 56 percent responding within the hour.`},{q:`How many law firms simply do not respond to online leads?`,a:`The same study found 26 percent of firms never respond to online leads at all, an improvement from 40 percent in 2021 but still a significant share of firms losing inquiries by default.`},{q:`Does responding within the median response time give a firm an edge?`,a:`Not much of one. A firm matching the 13-minute median is in the middle of the pack. Since prospects typically contact several firms at once, only responding meaningfully faster than average creates a real advantage.`},{q:`Why do so many law firms respond slowly to after-hours inquiries?`,a:`Most non-response traces back to inquiries routing into a shared inbox that only gets checked during business hours, which means anything submitted at night or on a weekend can sit for a full day or longer before anyone sees it.`},{q:`Does fast response replace the need for a strong case record?`,a:`No. Response speed determines whether a firm gets the consultation. The firm's actual experience and track record still determine whether that c
22onsultation turns into a retained case.`}],sources:[{label:`Hennessey Digital: 2025 Lead Form Response Time Study`,url:`https://hennessey.com/2025-lead-form-response-time-study/`}],relatedSlugs:[`should-law-firms-use-ai-answering-for-after-hours-intake`,`what-should-a-law-firms-website-actually-do`],relatedService:{label:`Revenue Operations`,path:`/revenue-operations`},relatedIndustry:{label:`Legal Services`,path:`/industries/legal-services`},primaryCta:{label:`See Where My Firm's Leads Are Slipping`,href:Y}})),$.push(Q({slug:`should-med-spas-use-ai-answering-for-after-hours-consultation-requests`,title:`Should a Med Spa Use AI Answering for After-Hours Consultation Requests?`,shortTitle:`Med Spa After-Hours Answering`,metaTitle:`Med Spa AI Answering: Worth It After Hours?`,metaDescription:`A med spa closes at six, interest in a treatment does not. Here is where AI answering helps after hours, and where a provider has to step in.`,excerpt:`The moment someone decides to ask about a treatment rarely lines up with business hours. What happens between that decision and the next morning determines whether the practice ever hears from them.`,answer:`AI answering works well for a med spa as after-hours coverage: capturing interest, answering routine questions about consultations and logistics, and getting a callback scheduled for the next business day instead of letting the call go to voicemail. It should never answer specific medical questions about a treatment's fit or safety, which still belongs with a licensed provider.`,datePublished:`2026-10-05`,category:`ai-front-desk`,industries:[`Healthcare and Aesthetics`],services:[`AI Front Desk`],body:[{type:`p`,text:`Someone considering a cosmetic treatment rarely decides at 10 a.m. on a Tuesday. More often it happens at night, scrolling before bed, or over a weekend after finally getting around to researching something they have thought about for months. If the only way to reach the practice at that moment is a phone line that rings through to voicemail, that decision has to survive until Monday morning, and for a lot of people, it does not.`},{type:`h2`,text:`This is a considered purchase, not an emergency, and that changes the stakes`},{type:`p`,text:`A missed call for a home repair emergency has an obvious, immediate cost: the customer calls the next company on the list within minutes. A missed call about a consultation is quieter. The person does not necessarily call a competitor right away. More often, the moment of motivation just passes, and the research sits unfinished until something else prompts them to pick it back up, if anything does.`},{type:`h2`,text:`Where AI answering realistically helps`},{type:`ul`,items:[`Capturing basic interest and contact information the moment someone calls or messages, instead of losing it to voicemail`,`Answering routine questions the practice already publishes an answer to, like what a consultation involves or how to prepare for one`,`Getting a callback scheduled for the next business day, so the practice is reaching back out with a specific time instead of a cold return call`,`Doing this every night and every weekend consistently, rather than depending on whoever happens to check voicemail early`]},{type:`h2`,text:`Where it has to stop`},{type:`p`,text:`Any question that touches on whether a specific treatment is right for someone, what results to expect, or anything about safety and side effects belongs with a licensed provider, not an automated system. This is not just a courtesy. A nervous first-time patient asking a real medical question deserves a real answer from someone qualified to give one, and getting that wrong is a trust problem a practice does not recover from easily.`},{type:`h2`,text:`After-hours coverage does not fix a daytime problem`},{type:`p`,text:`If calls and messages already sit unanswered for hours during business hours, adding coverage for nights and weekends only patches part of the gap. The practices that get the most out of after-hours answering are the ones that already treat daytime response speed as a priority too, so the after-hours layer extends a standard that already exists instead of trying to make up for one that does not.`},{type:`callout`,title:`The structural fix`,text:`Treat after-hours coverage as an extension of how the practice already handles calls, not a separate fix bolted onto evenings. A system that captures interest immediately and hands off anything medical to a real provider keeps the decision alive until someone qualified can actually answer it.`}],faqs:[{q:`Is AI answering appropriate for a med spa or aesthetic practice?`,a:`For after-hours coverage and routine questions, yes. It should capture interest, answer logistics, and schedule a callback, while routing any question about treatment fit, results, or safety to a licensed provider.`},{q:`Do patients actually research aesthetic treatments outside business hours?`,a:`Decisions to look into a cosmetic treatment commonly happen at night or on weekends, when someone finally has time to research something they have been considering, which is exactly when most practices have no one answering the phone.`},{q:`What should AI answering never do for a med spa?`,a:`It should never answer specific medical questions about whether a treatment is right for a patient, what results to expect, or safety and side effects. Those answers need to come from a licensed provider.`},{q:`Does a missed after-hours call always mean a lost patient?`,a:`Not necessarily, but it often means the moment of motivation passes. Unlike an emergency call, a missed consultation inquiry does not usually send someone straight to a competitor. It is more likely to just go unresolved.`},{q:`Will after-hours answering fix a med spa's response problem if daytime calls are also slow?`,a:`Not on its own. After-hours coverage works best as an extension of a practice that already responds quickly during the day, not as a substitute for fixing slow daytime response.`}],sources:[],relatedSlugs:[`healthcare-aesthetics`,`how-much-should-a-med-spa-spend-on-paid-ads`],relatedService:{label:`AI Front Desk`,path:`/ai-front-desk`},relatedIndustry:{label:`Healthcare and Aesthetics`,path:`/industries/healthcare-aesthetics`},primaryCta:{label:`Plan My Practice's After-Hours Coverage`,href:Y}})),$.push(Q({slug:`how-should-an-equipment-rental-company-follow-up-on-quotes-that-dont-close`,title:`How Should an Equipment Rental Company Follow Up on a Quote That Goes Quiet?`,shortTitle:`Rental Quote Follow-Up`,metaTitle:`Equipment Rental Quote Follow Up That Actually Works`,metaDescription:`A quiet quote is not always a lost job. Here is a follow-up sequence for rental companies, grounded in the research on lead response speed.`,excerpt:`A quote for a two-week rental goes out, then nothing. That silence gets read as a no more often than it should be.`,answer:`A quote that goes quiet is often still open, not lost, especially when a customer is comparing more than one rental company. A structured follow-up sequence over one to two weeks, with a specific reason to respond at each touchpoint, recovers more of those jobs than a single generic check-in ever does.`,datePublished:`2026-10-06`,category:`revenue-operations`,industries:[`Rental Companies`],services:[`Revenue Operations`],body:[{type:`p`,text:`A quote goes out for a scissor lift needed over a two-week stretch, or a full setup for a weekend event, and then nothing comes back. No call, no email reply. It is easy to read that silence as a no. Often it just means the customer is still comparing options, waiting on their own schedule to firm up, or the quote got buried under everything else on their desk.`},{type:`h2`,text:`What the research on response speed suggests, even without a rental-specific study`},{type:`p`,text:`There is no large published study specific to equipment or event rental quotes. The closest available evidence is older, broader research on sales lead response that has held up across many industries. An analysis of roughly 15,000 sales leads found that contacting a lead within five minutes rather than thirty made contact about 100 times more likely, and made qual
22ifying that lead about 21 times more likely. The data is nearly two decades old and was not built around rentals specifically, but the underlying logic still applies: whoever reaches the customer first, while the decision is still open, usually gets it.`},{type:`h2`,text:`Why this matters as much after the quote as before it`},{type:`p`,text:`That urgency does not end once the quote goes out. A customer requesting quotes from two or three companies is going to hear back from all of them eventually. The company that follows up with something useful, not just a reminder that the quote exists, is the one still in the conversation when the customer is ready to book.`},{type:`h2`,text:`A follow-up sequence that does not feel like nagging`},{type:`ul`,items:[`A same-day confirmation that the quote arrived, restating availability for the dates requested`,`A mid-week check-in that answers a likely question, such as delivery timing or an alternate unit if the exact one requested gets booked elsewhere`,`A final touchpoint timed close to when the job would actually need to start, which creates a real deadline instead of vague urgency`,`Every touchpoint logged against that quote, so nobody on the counter is guessing whether someone already followed up`]},{type:`h2`,text:`Why this has to run on a system, not memory`},{type:`p`,text:`A busy rental counter fielding calls and walk-ins all day is not going to remember which quote from ten days ago still needs a follow-up. That is not a discipline issue, it is a volume issue. The rental companies recovering the most stalled quotes are the ones where follow-up happens automatically for every quote, the same way a return reminder already does, instead of depending on someone remembering.`},{type:`callout`,title:`The structural fix`,text:`Build quote follow-up into the same system that already tracks new inquiries, with scheduled touchpoints instead of one generic callback. A quote that has gone quiet for a week is not necessarily lost. It is often just waiting on whoever follows up with the right next step.`}],faqs:[{q:`Is a quiet rental quote usually a lost job?`,a:`Not necessarily. Many customers are still comparing quotes from other companies or waiting on their own schedule to firm up. A structured follow-up with a specific next step often recovers a quote that looked dead.`},{q:`How many follow-up touchpoints should a rental quote get?`,a:`A reasonable sequence runs two to three touchpoints over one to two weeks: a same-day confirmation, a mid-week check-in that answers a likely question, and a final touchpoint timed close to when the job would need to start.`},{q:`Is there research specific to equipment rental on how fast to respond to a quote request?`,a:`No large published study focuses specifically on rental quotes. The best available evidence is older, broader research on sales lead response, which found responding within five minutes rather than thirty made contact about 100 times more likely, though that data predates the rental industry's current tools and is not rental-specific.`},{q:`Why do rental companies lose track of quote follow-up?`,a:`Counter staff fielding calls and walk-ins all day rarely have time to remember which older quotes still need a check-in. That is a volume problem, which is why follow-up works best when it happens automatically instead of depending on memory.`}],sources:[{label:`Casey Response: Lead Response Time Statistics (2026), The 5-Minute Rule`,url:`https://caseyresponse.com/blog/lead-response-time-statistics`}],relatedSlugs:[`what-should-a-rental-company-website-help-customers-do`,`is-ppc-advertising-worth-it-for-equipment-rental-companies`],relatedService:{label:`Revenue Operations`,path:`/revenue-operations`},relatedIndustry:{label:`Rental Companies`,path:`/industries/rental-companies`},primaryCta:{label:`See My Rental Company's Follow-Up Gaps`,href:Y}})),$.push(Q({slug:`what-should-a-home-service-companys-website-help-a-customer-do`,title:`Home Service Company Website: What Should It Actually Help a Customer Do?`,shortTitle:`Home Service Website`,metaTitle:`Home Service Website: What It Should Help Customers Do`,metaDescription:`Most home service websites describe the company. Few help a homeowner actually book a job. Here is what a service page should do instead.`,excerpt:`A homeowner with a broken water heater on a Saturday is not reading your story. They are trying to find out if you can come today.`,answer:`A home service company website should let a homeowner confirm the company serves their area, understand roughly what a job costs, and request service quickly. A site built around company history and photo galleries, without answering those three questions, pushes homeowners back onto a phone call the business may not answer fast enough.`,datePublished:`2026-10-07`,category:`website-strategy`,industries:[`Home Services`],services:[`High Performance Websites`],body:[{type:`p`,text:`A water heater fails on a Saturday morning, and the homeowner is on their phone within minutes, pulling up three or four company websites in the same few minutes it takes to decide who to call. They are not reading about how long the company has been in business. They are trying to answer three questions fast: do you serve my area, can you actually come today, and roughly what is this going to cost.`},{type:`h2`,text:`The three questions a homeowner is actually asking`},{type:`p`,text:`A homeowner comparing home service companies under time pressure skips past most of what a typical site leads with. What they need first is confirmation that the company covers their specific area, a sense of how quickly someone can actually show up, especially for anything urgent, and some idea of cost before they commit to a call. A site that makes them dig for any of these loses ground to whichever competitor answered faster.`},{type:`h2`,text:`Why a photo gallery answers a different question than urgency does`},{type:`p`,text:`Photos of completed jobs and a company history build reassurance, and reassurance matters for a homeowner choosing who to let into their house. It does not answer urgency. A site needs both: proof the company does good work, and a fast, obvious path to actually request that work, especially for the customer who does not have time to browse.`},{type:`h2`,text:`What a service area page should actually say`},{type:`p`,text:`Vague language like serving the greater metro area leaves a homeowner unsure whether the company actually covers their neighborhood. A page that lists specific cities or zip codes, along with a realistic sense of response time in that area, answers the question directly instead of making someone call just to find out.`},{type:`h2`,text:`Pricing does not require a public price list`},{type:`p`,text:`Full transparency is not always practical for every trade, but staying vague costs more bookings than most companies realize. A published range for common jobs, a clear explanation of how estimates work, or financing options all give a homeowner enough to keep going instead of abandoning the site because the cost feels like a mystery they would have to call to solve.`},{type:`h2`,text:`The request path matters as much as the content`},{type:`p`,text:`A short form that captures the job type, urgency, and location, paired with a phone number that is actually visible instead of buried after several clicks, keeps momentum going. Scheduling should not depend entirely on someone calling during business hours, since a homeowner dealing with an after-hours issue is exactly the person a slow site loses first.`},{type:`callout`,title:`The structural fix`,text:`Build the website around the decision a homeowner is actually trying to make: coverage, cost, and how fast someone can come, instead of around a general description of the company. Every one of those questions the page answers is one less call your team has to catch before the homeowner moves on to the next site.`}],faqs:[{q:`What should a home service website prioritize over company history?`,a:`Service area coverage, realistic response time, and some sense of cost. A homeowner comparing companies under time pressure needs those answered before they care how long the company has been around.`},{q:`Should a home service company publish pricing?`,a:`Full pricing is not always practical, but a published range for common jobs or a clear explanation of how estimates work keeps homeowners from abandoning the site over cost uncertainty.`},{q:`Does a home service website need real-time scheduling?`,a:`It helps, especially for urgent jobs. At minimum, requesting service should not depend entirely on a phone call during business hours, since after-hours issues are exactly when a slow site loses the most homeowners.`},{q:`How specific should a service area page be?`,a:`Specific enough to name the actual cities or zip codes covered, rather than a general phrase like serving the metro area, so a homeowner does not have to call just to find out if the company serves their neighborhood.`}
22,{q:`Do photos of past jobs still matter if the site also needs to be fast to use?`,a:`Yes. Photos and company history build the reassurance a homeowner needs to trust the company with access to their home. They just cannot be the only thing the site offers, since they do not answer the urgency questions a homeowner has first.`}],sources:[],relatedSlugs:[`home-services`,`how-should-a-home-service-company-follow-up-on-estimates-that-dont-close`],relatedService:{label:`High Performance Websites`,path:`/high-performance-websites`},relatedIndustry:{label:`Home Services`,path:`/industries/home-services`},primaryCta:{label:`Start With a Plan for My Website`,href:Y}})),$.push(Q({slug:`what-should-a-med-spa-or-aesthetic-practices-website-actually-do`,title:`What Should a Med Spa or Aesthetic Practice Website Actually Help a Patient Do?`,shortTitle:`Med Spa Website Essentials`,metaTitle:`Med Spa Website: What It Should Help Patients Do`,metaDescription:`A med spa website should make treatments, consultation steps, and booking obvious fast. Here is what that actually looks like on the page.`,excerpt:`A prospective patient lands on a practice's website already comparing it to two or three others open in nearby tabs. What the page does in the next thirty seconds decides whether a consultation gets requested or the tab just closes.`,answer:`A med spa or aesthetic practice website should let a prospective patient confirm the practice treats their concern, understand roughly what a consultation involves, and request one in a few steps. Photo galleries and credentials build trust, but a site that buries treatment details and booking behind a phone-only call loses patients who are comparing several practices at once.`,datePublished:`2026-10-08`,category:`website-strategy`,industries:[`Healthcare and Aesthetics`],services:[`High Performance Websites`],body:[{type:`p`,text:`Someone considering a treatment, whether it is a cosmetic procedure or a wellness service, usually researches several practices before calling any of them. They are reading the same handful of pages on each site: what the practice actually treats, what a consultation involves, and whether booking one feels simple or like a hassle. A site built mostly around credentials and before-and-after photos, without answering those three questions clearly, gets closed in favor of the next tab.`},{type:`h2`,text:`What a prospective patient is actually trying to find out`},{type:`p`,text:`Before a consultation request happens, a visitor wants three things confirmed: that the practice treats the specific concern they have, roughly what the process and recovery look like, and who is actually providing the treatment. Credentials matter, but they answer a trust question, not the practical ones a patient needs answered first.`},{type:`h2`,text:`Treatment pages need specifics, not just a photo gallery`},{type:`p`,text:`A page that lists a treatment by name with a stock description reads the same as every competitor's page. What sets a practice apart is specificity: what the treatment actually addresses, what a typical appointment involves, and what results usually look like in realistic terms, without promising outcomes the practice cannot guarantee.`},{type:`h2`,text:`A consultation request should feel low-risk, not like a sales call`},{type:`p`,text:`Many patients hesitate to request a consultation because it feels like committing to a sale. A page that frames the consultation as a chance to ask questions and get an honest recommendation, rather than a scheduling obligation, removes some of that hesitation before the form is ever filled out.`},{type:`h2`,text:`Pricing does not require an exact number, but it cannot stay silent`},{type:`p`,text:`Few practices can publish a firm price for every procedure, since treatment plans vary by patient. Staying completely silent on cost still pushes patients to a competitor who at least gives a starting range or explains what affects the final price. A general range or a clear explanation of what the consultation will cover on pricing keeps the patient moving instead of guessing.`},{type:`h2`,text:`The booking path matters as much as the content`},{type:`p`,text:`A short, direct way to request a consultation, visible without scrolling through the entire page, keeps momentum from a patient who has already decided to reach out. If that path only works during business hours or requires a phone call with no online alternative, the practice loses the patient who was researching at 9 p.m. and ready to act.`},{type:`callout`,title:`The structural fix`,text:`Build the website around the three questions a prospective patient is actually asking: does this practice treat my concern, what does the process involve, and how do I request a consultation. Everything else on the page should support those answers, not replace them.`}],faqs:[{q:`What should a med spa website prioritize over photo galleries?`,a:`Specific, honest information about what each treatment addresses, what the process involves, and a clear way to request a consultation. Photos build trust, but they do not answer the practical questions a patient needs first.`},{q:`Does a med spa need to publish exact pricing?`,a:`Not necessarily. A general range or a clear explanation of what affects the final price, provided during or before the consultation, keeps patients from leaving to find a practice that at least gives them a starting point.`},{q:`How should a med spa website describe a consultation?`,a:`As a chance to ask questions and get an honest recommendation, not as a sales appointment. Framing it that way lowers the hesitation many patients feel before requesting one.`},{q:`Should a med spa website allow booking outside business hours?`,a:`Yes, ideally. A patient researching treatments in the evening who can only reach the practice by calling during business hours often moves on to a competitor with an online request option.`},{q:`Do before-and-after photos still matter on a med spa website?`,a:`Yes, they build credibility and help set realistic expectations. They just cannot be the only content on the page, since they do not answer what the treatment actually involves or how to request one.`}],sources:[],relatedSlugs:[`healthcare-aesthetics`,`how-much-should-a-med-spa-spend-on-paid-ads`],relatedService:{label:`High Performance Websites`,path:`/high-performance-websites`},relatedIndustry:{label:`Healthcare and Aesthetics`,path:`/industries/healthcare-aesthetics`},primaryCta:{label:`Start With a Plan for My Practice's Website`,href:Y}})),$.push(Q({slug:`how-fast-should-a-salon-or-spa-respond-to-a-new-booking-inquiry`,title:`How Fast Should a Salon or Spa Respond to a New Booking Inquiry Before It Goes Cold?`,shortTitle:`Salon Inquiry Response Speed`,metaTitle:`Salon Booking Inquiry Response Time: How Fast Matters`,metaDescription:`A client messages about a slot, then waits. Here is how fast a salon or spa actually needs to respond before that inquiry goes to someone else.`,excerpt:`A new client messages a salon through Instagram, the website, or a missed call, asking about an opening this week. Whoever answers first usually gets the appointment.`,answer:`A salon or spa should acknowledge a new booking inquiry within minutes, not hours, even if the full answer comes later. Clients comparing a handful of nearby options tend to book with whoever confirms availability first, so a message that sits unread across a busy shift is often a lost appointment rather than a delayed one.`,datePublished:`2026-10-09`,category:`revenue-operations`,industries:[`Beauty and Wellness`],services:[`Revenue Operations`],body:[{type:`p`,text:`A prospective client messages a salon asking about an opening this week, maybe through Instagram, maybe through the website's contact form, maybe a missed call during a busy afternoon. They are usually checking two or three places at once. Whichever one answers first, even with a quick confirmation rather than a full answer, tends to get the booking.`},{type:`h2`,text:`A booking inquiry is a small window, not an emergency, but it still closes fast`},{type:`p`,text:`Nobody is in crisis waiting for a haircut appointment, which makes it tempting to treat these inquiries as low urgency. But because the client usually has other options and no real cost to choosing one over another, the business that responds first has a real advantage. A slow response does not just delay the booking, it often loses it entirely.`},{type:`h2`,text:`Where response speed actually gets lost`},{type:`ul`,items:[`Messages spread across Instagram, a website form, texts, and missed calls, with no single place that tracks all of them`,`A stylist or esthetician mid-service who cannot reasonably check a phone between clients`,`A front desk handling walk-ins and checkout at the same time a new inquiry comes in`,`No clear owner for who responds to which channel, so a message sits assuming someone else saw it`]},{type:`h2`,text:`What a fast response actually needs to include`},{type:`p`,text:`A full, final answer is not required right away. A quick acknowledgment that confirms the business got the message and gives a rough sense of availability, followed by the specific scheduling details shortly after, keeps the client engaged instead of moving on to check 
22somewhere else.`},{type:`h2`,text:`Why this has to run on a system, not whoever happens to be free`},{type:`p`,text:`A salon cannot expect a stylist between clients to also be its fastest responder. The salons that keep up with inquiries route every channel into one place and respond automatically the moment a message comes in, even if that first response is just a confirmation that a real answer is coming soon.`},{type:`callout`,title:`The structural fix`,text:`Route every inquiry channel, Instagram, website, text, missed calls, into one system with an immediate acknowledgment, then follow up with real scheduling details shortly after. The goal is not to answer every detail instantly. It is to make sure nobody checking three salons at once picks someone else first.`}],faqs:[{q:`How quickly should a salon respond to a new booking inquiry?`,a:`Within minutes with at least an acknowledgment, even if the full scheduling answer takes a bit longer. Clients comparing options tend to book with whoever responds first.`},{q:`Why do salons lose bookings even when they eventually respond?`,a:`Because the client often books somewhere else in the time it takes to get a reply. A same-day response can still be too slow if a competitor answered within minutes.`},{q:`Is it realistic for stylists to answer inquiries between clients?`,a:`Not consistently. Expecting staff mid-service to monitor messages leads to inconsistent response times. Routing inquiries into one system that can respond immediately works better than depending on staff availability.`},{q:`Does an automatic acknowledgment actually help if it is not a full answer?`,a:`Yes. Confirming that the message was received and a real answer is coming keeps the client engaged instead of assuming the salon is unresponsive and checking elsewhere.`},{q:`What channels typically cause salons to miss inquiries?`,a:`Instagram direct messages, website contact forms, texts, and missed calls during busy hours are the most common. Without one system tracking all of them, messages get missed simply from volume, not neglect.`}],sources:[],relatedSlugs:[`beauty-wellness`,`what-should-a-salon-do-when-a-client-stops-rebooking`],relatedService:{label:`Revenue Operations`,path:`/revenue-operations`},relatedIndustry:{label:`Beauty and Wellness`,path:`/industries/beauty-wellness`},primaryCta:{label:`See Where My Salon's Inquiries Are Slipping`,href:Y}})),$.push(Q({slug:`should-a-law-firm-screen-reviews-before-they-post`,title:`Should a Law Firm Screen or Filter Reviews Before They Post?`,shortTitle:`Law Firm Review Screening`,metaTitle:`Should Law Firms Screen Reviews Before They Post?`,metaDescription:`Asking only happy clients for reviews feels safe. It is against Google's policy. Here is what review gating risks and what to do instead.`,excerpt:`Only asking clients who seemed satisfied to leave a review, while quietly steering unhappy ones away, feels like reasonable reputation management. Google calls it review gating, and it is against the rules.`,answer:`No. Selectively asking only satisfied clients for reviews, while screening out or discouraging unhappy ones, is review gating, and it violates Google's review policies. The safer approach is a consistent request sent to every closed matter the same way, with a clear process for responding professionally to any negative review that results.`,datePublished:`2026-10-10`,category:`search-visibility`,industries:[`Legal Services`],services:[`Reputation Growth`],body:[{type:`p`,text:`A law firm wraps up a matter, and someone on staff has to decide whether to ask the client for a review. If the matter went smoothly, the ask feels easy. If it did not, the instinct is often to skip it, or to use a private survey first and only forward the happy responses to Google. That second approach has a name, review gating, and it is against the rules that govern how reviews are supposed to work.`},{type:`h2`,text:`What review gating actually means`},{type:`p`,text:`Review gating is selectively soliciting reviews, asking only clients who seem satisfied while filtering out or discouraging anyone who might leave a negative one, often through a private form that routes unhappy responses away from the public review and happy one
22s toward it.`},{type:`h2`,text:`Why this is against Google's review policies`},{type:`p`,text:`Google's review policies prohibit discouraging or filtering out negative reviews, and prohibit selectively soliciting only positive ones. The rule exists because filtering reviews before they post skews the rating and misleads prospective clients about what working with the firm is actually like.`},{type:`h2`,text:`The practical risk beyond the policy itself`},{type:`ul`,items:[`Reviews collected through a gated process can be removed once identified`,`A Google Business Profile can be suspended or penalized for violating the policy`,`A profile with an unusually perfect record, no negative reviews at all, often reads as curated rather than trustworthy to a prospective client doing their own research`]},{type:`h2`,text:`What a consistent review request process looks like instead`},{type:`p`,text:`The request goes out the same way, at the same point in the process, to every client whose matter closes, regardless of how the firm feels the matter went. A short, standard message asking for honest feedback, sent consistently, produces a review profile that actually reflects the firm's work, and gives the firm a real answer when a prospective client asks how it handles the matters that do not go perfectly.`},{type:`h2`,text:`Handling a negative review is part of the same process`},{type:`p`,text:`A negative review is going to happen eventually to any firm handling enough matters. A calm, professional response that addresses the concern without getting defensive does more for a firm's credibility than having no negative reviews would. Prospective clients tend to read how a firm responds as closely as they read the review itself.`},{type:`callout`,title:`The structural fix`,text:`Build one review request step into the process every closed matter goes through, sent the same way regardless of outcome, with no pre-screening. Pair it with a standard approach for responding to any negative review that comes in. That produces a review profile Google will not flag and prospective clients will actually trust.`}],faqs:[{q:`What is review gating?`,a:`Selectively asking only clients who seem satisfied to leave a public review, while filtering out or discouraging unhappy clients, often through a private survey that routes negative feedback away from the public platform.`},{q:`Is review gating illegal, or just against Google's policy?`,a:`It is a violation of Google's review policies, not a law. The consequences come through Google, including removal of affected reviews or penalties to the business profile, rather than through legal action.`},{q:`What happens if Google identifies review gating?`,a:`Google can remove the reviews collected through the gated process and may suspend or otherwise penalize the business's profile, which affects visibility beyond just the review count.`},{q:`How should a law firm respond to a negative review it disagrees with?`,a:`Calmly and professionally, addressing the concern without getting defensive. Prospective clients often read the firm's response as closely as the review itself, and a measured response can do more for credibility than having no negative reviews at all.`},{q:`Does asking every client for a review consistently actually help a firm's review count?`,a:`Yes. A consistent process that does not filter by outcome produces more reviews over time than an inconsistent one, and it builds a record that reflects the firm's actual work instead of a curated version of it.`}],sources:[{label:`DemandHub: Google Review Policy - What Business Owners Can And Can't Do`,url:`https://www.demandhub.co/articles/google-review-policy/`}],relatedSlugs:[`legal-services`,`how-many-google-reviews-does-a-law-firm-need`],relatedService:{label:`Reputation Growth`,path:`/reputation-growth`},relatedIndustry:{label:`Legal Services`,path:`/industries/legal-services`},primaryCta:{label:`Build a Consistent Review Process for My Firm`,href:Y}})),$.push(Q({slug:`how-should-an-equipment-rental-company-handle-call-overflow-during-peak-season`,title:`How Should an Equipment Rental Company Handle Call Overflow During Peak Season?`,shortTitle:`Rental Call Overflow`,metaTitle:`Rental Call Overflow: Handling Peak Season Volume`,metaDescription:`Phones ring nonstop at the counter during peak season. Here is how an equipment rental company should handle calls the team cannot get to.`,excerpt:`During the busiest stretch of the season, the counter is handling walk-ins, loading trucks, and the phone at the same time. Some of those calls are never going to get picked up live.`,answer:`During peak season, an equipment rental company should route calls the counter cannot answer in the moment to an overflow system that confirms basic availability, captures what the customer needs, and books a callback, rather than letting them ring through to voicemail. Complex orders and disputes still need a person, but routine availability questions do not.`,datePublished:`2026-10-11`,category:`ai-front-desk`,industries:[`Rental Companies`],services:[`AI Front Desk`],body:[{type:`p`,text:`During the busiest weeks of the season, a rental counter is running at full capacity: customers picking up and dropping off equipment, staff loading trucks, someone checking in a return while the phone rings for the third time in ten minutes. Eventually a call goes unanswered, not because nobody is there, but because everyone already is doing something else.`},{type:`h2`,text:`This is a staffing math problem, not a coverage gap`},{type:`p`,text:`The business already has people answering phones during business hours. The problem shows up specifically during the volume spikes when call capacity runs out faster than staff capacity does. Hiring enough people to cover the absolute peak, when most of the season does not need that many, rarely makes sense financially.`},{type:`h2`,text:`What happens to a call that rings through to voicemail during a rush`},{type:`p`,text:`A customer calling to check availability for a piece of equipment this weekend is usually comparing more than one rental company. A voicemail during a rush does not get an immediate callback, since the same rush that caused the missed call is also delaying when staff can listen to messages and call back. By the time someone does, the customer has often already booked with whoever answered first.`},{type:`h2`,text:`Where an overflow system fits during peak weeks`},{type:`ul`,items:[`Answering the calls the counter cannot get to live, instead of letting them ring through`,`Confirming basic availability for commonly rented equipment and typical rental windows`,`Capturing what the customer actually needs, including dates, equipment type, and delivery or pickup preference`,`Booking a callback with a specific time instead of leaving the customer to wonder when, or if, someone will call back`]},{type:`h2`,text:`What still needs a person on the phone`},{type:`p`,text:`Negotiating a complex multi-item order, resolving a dispute over damaged equipment, or working through an unusual request still needs someone with real authority and context. An overflow system works best as a way to catch the routine calls the counter cannot get to, not as a replacement for the staff handling the complicated ones.`},{type:`callout`,title:`The structural fix`,text:`Route calls the counter cannot answer during peak hours to a 
22system that confirms availability, captures the details, and books a specific callback time, instead of letting the overflow hit voicemail. That keeps the business in the running for customers who are checking more than one yard at once, without requiring enough staff to cover the absolute busiest hour of the season.`}],faqs:[{q:`Why do rental companies miss calls during peak season if staff are already answering phones?`,a:`Because call volume during the busiest weeks exceeds what the counter can handle alongside walk-ins, loading, and returns. It is a capacity problem during spikes, not a lack of coverage overall.`},{q:`Does a missed call during a rush usually get a timely callback?`,a:`Often not quickly enough. The same rush that caused the missed call also delays when staff can review voicemails, and by then the customer may have already booked elsewhere.`},{q:`What should an overflow system handle during peak season?`,a:`Routine questions like equipment availability and typical rental windows, capturing what the customer needs, and booking a specific callback t
22ime. Complex orders and disputes still need a person.`},{q:`Is hiring more seasonal staff a better solution than call overflow handling?`,a:`It can help, but staffing to cover the absolute peak call volume is expensive for weeks that do not need it. An overflow system catches the spikes without that year-round cost.`},{q:`Does call overflow handling replace the counter staff?`,a:`No. It catches calls the counter cannot get to in the moment, particularly during rushes. Staff still handle walk-ins, complex orders, and anything that needs real judgment.`}],sources:[],relatedSlugs:[`rental-companies`,`how-fast-should-a-rental-company-answer-after-hours-calls`],relatedService:{label:`AI Front Desk`,path:`/ai-front-desk`},relatedIndustry:{label:`Rental Companies`,path:`/industries/rental-companies`},primaryCta:{label:`See How Many Calls My Yard Is Missing During Rushes`,href:Y}})),$.push(Q({slug:`how-should-a-financial-advisory-firm-qualify-a-website-lead-before-the-first-call`,title:`How Should a Financial Advisory Firm Qualify a Website Lead Before the First Call?`,shortTitle:`Advisory Lead Qualification`,metaTitle:`Qualifying a Financial Advisor Website Lead`,metaDescription:`A form fill does not mean a lead is ready for 30 minutes on the calendar. Here is how advisory firms should qualify leads first.`,excerpt:`A prospect fills out a contact form, and a 30-minute call goes on the calendar before anyone knows what they actually need or whether they are ready to move.`,answer:`A financial advisory firm should ask a short set of qualifying questions, what the prospect needs help with, a rough timeline, and whether they already work with an advisor, before a lead reaches the calendar. That context lets the first call start as a real conversation instead of a fact-finding session.`,datePublished:`2026-10-12`,category:`revenue-operations`,industries:[`Advisory Firms`],services:[`Revenue Operations`],body:[{type:`p`,text:`A prospect fills out a contact form on an advisory firm's website, and the next step is often an automatic booking link straight to a 30-minute call. The advisor walks in not knowing whether this is someone ready to move forward, someone comparing a handful of firms, or someone still a year out from actually needing help. The first ten minutes of the call end up spent figuring that out instead of actually helping.`},{type:`h2`,text:`Not every website lead is ready for a 30-minute call`},{type:`p`,text:`A referral who already trusts the firm and a stranger who found the website through a search are not the same lead, even though the booking form treats them identically. Some version of qualification, even brief, separates a prospect who is ready for a real conversation from one who is still early in deciding whether to work with an advisor at all.`},{type:`h2`,text:`What qualification actually needs to capture`},{type:`ul`,items:[`What the prospect is looking for help with, in their own words, not a generic service category`,`A rough timeline for when they want to start working with someone`,`Whether they currently work with an advisor, and if so, what is prompting the change`,`Enough context that the advisor is not starting the call from zero`]},{type:`h2`,text:`Why this has to happen before the calendar booking, not during the call`},{type:`p`,text:`Asking these questions during the call itself still costs the advisor the same ten minutes it was meant to save. A short form or a few questions built into the scheduling step, completed before a time slot confirms, means the advisor walks into the call already knowing what the conversation needs to cover.`},{type:`h2`,text:`A short qualifying step is not the same as gatekeeping`},{type:`p`,text:`There is a difference between a long, intrusive application and a few focused questions that respect everyone's time. A prospect who is genuinely ready to talk will not be deterred by three or four short questions. One who was not seriously considering the firm yet is better served by resources or a lower-commitment next step than by a call neither side was ready for.`},{type:`callout`,title:`The structural fix`,text:`Build a short qualifying step between the contact form and the calendar booking, asking what the prospect needs, their timeline, and whether they already work with an advisor. That turns the first call into a conversation that starts with context, instead of a fact-finding session that costs both sides thirty minutes.`}],faqs:[{q:`Should every website lead get a 30-minute call with an advisor?`,a:`Not necessarily. A short qualifying step helps separate a prospect who is ready for a real conversation from one who is still early in deciding whether to work with an advisor at all.`},{q:`What should a lead qualification step ask?`,a:`What the prospect needs help with, a rough timeline for getting started, and whether they currently work with an advisor. That gives the advisor enough context to use the first call well.`},{q:`Does adding a qualifying step before booking turn prospects away?`,a:`A few focused questions rarely deter someone genuinely ready to talk. It mainly filters out prospects who were not seriously ready yet, which saves time on both sides.`},{q:`Why not just ask qualifying questions during the first call instead?`,a:`Asking during the call still spends the same time the qualifying step was meant to save. Capturing the answers before the call confirms lets the advisor prepare and start with a real conversation.`},{q:`Is lead qualification only useful for cold website leads, not referrals?`,a:`It helps most with leads that have no existing relationship to the firm, but even a referral benefits from the advisor knowing their situation and timeline before the first call.`}],sources:[],relatedSlugs:[`do-advisory-firms-need-online-reviews`,`how-fast-should-advisory-firms-follow-up-with-a-new-lead`],relatedService:{label:`Revenue Operations`,path:`/revenue-operations`}
22,relatedIndustry:{label:`Advisory Firms`,path:`/industries/advisory-firms`},primaryCta:{label:`Build My Firm's Lead Qualification Step`,href:Y}}));var uw=R(`/blog/$slug`)({beforeLoad:({params:e})=>{throw sw(e.slug)?_e({to:`/insights/$slug`,params:{slug:e.slug},statusCode:301}):_e({to:`/insights`,statusCode:301})}}),dw=R(`/cellara-launch/`)({head:()=>Z(`/cellara-launch`),component:z(()=>J(()=>import(`./cellara-launch.index-Ba6Am5UP.js`),__vite__mapDeps([95,1,3,27,20,21,4,6,15,30,22,23,31,32,0,8,9,10,19,24,25,26,33,34,13,14,16,37,96,97,59,50])),`component`)}),fw=R(`/cellara-launch/checkout`)({validateSearch:e=>({pages:Math.max(0,Math.min(10,Math.trunc(Number(e.pages)||0))),boost:e.boost===!0||e.boost===`true`,pro:e.pro===!0||e.pro===`true`}),head:()=>({meta:[{title:`Checkout | Cellara Launch`},{name:`robots`,content:`noindex, nofollow`},{name:`description`,content:`Complete your Cellara Launch website order.`}]}),component:z(()=>J(()=>import(`./cellara-launch.checkout-bIni53KQ.js`),__vite__mapDeps([98,1,3,15,47,48,8,9,10,11,13,14,16,99,100,22,23,20,21,96,101,102])),`component`)}),pw=R(`/cellara-launch/questionnaire`)({validateSearch:e=>({token:typeof e.token==`string`?e.token:``}),head:()=>({meta:[{title:`Website Questionnaire | Cellara Launch`},{name:`robots`,content:`noindex, nofollow`},{name:`description`,content:`Tell us about your business so your website build can begin.`}]}),component:z(()=>J(()=>import(`./cellara-launch.questionnaire-DH-5wAtJ.js`),__vite__mapDeps([103,1,3,14,10,67,6,44,47,8,9,11,13,15,16,100,22,23,20,21,96,102,60])),`component`)}),mw=R(`/cellara-launch/thank-you`)({validateSearch:e=>({session_id:typeof e.session_id==`string`?e.session_id:``}),head:()=>
22({meta:[{title:`Order Confirmed | Cellara Launch`},{name:`robots`,content:`noindex, nofollow`},{name:`description`,content:`Your Cellara Launch website order is confirmed.`}],scripts:[{children:`(function(){var w=window;w.__cgcLeadConv=w.__cgcLeadConv||{};var k=w.location.pathname;if(w.__cgcLeadConv[k])return;w.__cgcLeadConv[k]=true;if(typeof w.gtag!=='function')return;w.gtag('event','conversion_event_submit_lead_form',{page_path:k});})();`}]}),component:z(()=>J(()=>import(`./cellara-launch.thank-you-DxVAN07h.js`),__vite__mapDeps([104,1,3,6,44,89,47,8,9,10,19,20,21,22,23,24,25,26,27,100,96,101,102])),`component`)}),hw=R(`/checkout/$offer`)({head:()=>({meta:[{title:`Secure Checkout | Cellara Growth Co`},{name:`robots`,content:`noindex, nofollow`}]}),component:z(()=>J(()=>import(`./_offer-Puh2wp6c.js`),__vite__mapDeps([105,1,22,23,20,21,3,15,47,48,8,9,10,11,16,99,100,101,106,70])),`component`)}),gw=R(`/checkout/return`)({validateSearch:e=>({session_id:typeof e.session_id==`string`?e.session_id:void 0}),head:()=>
22({meta:[{title:`Order Confirmed | Cellara Growth Co`},{name:`robots`,content:`noindex, nofollow`}],scripts:[{children:`(function(){var w=window;w.__cgcLeadConv=w.__cgcLeadConv||{};var k=w.location.pathname;if(w.__cgcLeadConv[k])return;w.__cgcLeadConv[k]=true;if(typeof w.gtag!=='function')return;w.gtag('event','conversion_event_submit_lead_form',{page_path:k});})();`}]}),component:z(()=>J(()=>import(`./return-C1SHv7Qs.js`),__vite__mapDeps([107,1,22,23,20,21,3,108,66,109,25,26,110,24,111,27,44,47,8,9,10,100,101,106,70])),`component`)}),_w=R(`/industries/`)({head:()=>Z(`/industries`),component:z(()=>J(()=>import(`./industries-n81KgxDd.js`),__vite__mapDeps([112,3,1,113,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37])),`component`)}),vw=R(`/industries/accounting-firms`)({head:()=>Z(`/industries/accounting-firms`),component:z(()=>J(()=>import(`./accounting-firms-CtnJ6gT7.js`),__vite__mapDeps([114,3,1,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37])),`component`)}),yw=R(`/industries/advisory-firms`)({head:()=>Z(`/industries/advisory-firms`),component:z(()=>J(()=>import(`./advisory-firms-CtCUI2ar.js`),__vite__mapDeps([115,3,1,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37])),`component`)}),bw=R(`/industries/beauty-wellness`)({head:()=>Z(`/industries/beauty-wellness`),component:z(()=>J(()=>import(`./beauty-wellness-BM8xwvui.js`),__vite__mapDeps([116,3,1,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37])),`component`)}),xw=R(`/industries/healthcare-aesthetics`)({head:()=>Z(`/industries/healthcare-aesthetics`),component:z(()=>J(()=>import(`./healthcare-aesthetics-DGn47Nxr.js`),__vite__mapDeps([117,3,1,4,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37])),`component`)}),Sw=R(`/industries/home-services`)({head:()=>Z(`/industries/home-services`),component:z(()=>J(()=>import(`./home-services-SA1XUSya.js`),__vite__mapDeps([118,3,1,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37])),`component`)}),Cw=R(`/industries/legal-services`)({head:()=>Z(`/industries/legal-services`),component:z(()=>J(()=>import(`./legal-services-D1ZWAAyL.js`),__vite__mapDeps([119,3,1,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37])),`component`)}),ww=R(`/industries/rental-companies`)({head:()=>Z(`/industries/rental-companies`),component:z(()=>J(()=>import(`./rental-companies-2Z2wCgHU.js`),__vite__mapDeps([120,3,1,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37])),`component`)}),Tw=tc({method:`GET`}).handler(Wo(`b7c6169f0531295fb310e634f737e4d358983cea9909ac6f0e00390e59f8dbeb`)),Ew=tc({method:`GET`}).handler(Wo(`f6e0cab4a851219b2d1265b22245f0d0ea237e16a13dcdd1da6ea9da909eaab7`)),Dw=R(`/insights/`)({head:()=>Z(`/insights`),loader:async()=>({holoArticles:await Tw()}),component:z(()=>J(()=>import(`./insights-AfYSJnzm.js`),__vite__mapDeps([121,1,3,4,6,122,30,22,23,20,21,31,32,0,8,9,10,19,24,25,26,27,33,36,37])),`component`)}),Ow=e=>`${oS}${e===`/`?`/`:e}`,kw=()=>({"@context":`https://schema.org`,"@type":`Organization`,"@id":`${oS}/#organization`,name:sS.name,url:`${oS}/`,description:sS.description,sameAs:lS,founder:{"@type":`Person`,"@id":`${oS}/about#founder`,name:sS.founder.name,jobTitle:sS.founder.role,sameAs:uS},subOrganization:dS.map(e=>({"@type":`Organization`,name:e.name,url:e.url})),address:[{"@type":`PostalAddress`,streetAddress:`12436 FM 1960 Rd W, Unit #1465`,addressLocality:`Houston`,postalCode:`77065`,addressRegion:`TX`,addressCountry:`US`},{"@type":`PostalAddress`,addressLocality:`Denver`,addressRegion:`CO`,addressCountry:`US`}],areaServed:{"@type":`Country`,name:sS.serviceArea},contactPoint:{"@type":`ContactPoint`,contactType:`sales`,telephone:`+1-${sS.phone}`,email:sS.email,url:Y,availableLanguage:[`en`],areaServed:`US`},knowsAbout:[`Website design and development for service businesses`,`Conversion rate optimization`,`Customer relationship management implementation`,`AI assisted call and chat handling`,`Local search visibility`,`Generative engine optimization`]}),Aw=()=>({"@context":`https://schema.org`,"@type":`WebSite`,"@id":`${oS}/#website`,name:sS.name,url:`${oS}/`,publisher:{"@id":`${oS}/#organization`}}),jw=e=>({"@context":`https://schema.org`,"@type":`BreadcrumbList`,itemListElement:e.map((e,t)=>({"@type":`ListItem`,position:t+1,name:e.name,item:Ow(e.path)}))}),Mw=e=>({"@context":`https://schema.org`,"@type":`Service`,name:e.name,description:e.description,serviceType:e.serviceType??e.name,url:Ow(e.path),provider:{"@id":`${oS}/#organization`},areaServed:{"@type":`Country`,name:sS.serviceArea},...e.price?{offers:{"@type":`Offer`,priceCurrency:`USD`,price:e.price,priceSpecification:{"@type":`PriceSpecification`,priceCurrency:`USD`,minPrice:e.price,valueAddedTaxIncluded:!1},url:Y}}:{}}),Nw=e=>({"@context":`https://schema.org`,"@type":`FAQPage`,mainEntity:e.map(e=>
22({"@type":`Question`,name:e.q,acceptedAnswer:{"@type":`Answer`,text:e.a}}))}),Pw=()=>({"@context":`https://schema.org`,"@type":`Person`,"@id":`${oS}/about#founder`,name:sS.founder.name,jobTitle:sS.founder.role,worksFor:{"@id":`${oS}/#organization`},description:sS.founder.credential,sameAs:uS,alumniOf:{"@type":`CollegeOrUniversity`,name:`University of Colorado`}}),Fw=e=>({"@context":`https://schema.org`,"@type":`Article`,headline:e.headline,description:e.description,mainEntityOfPage:{"@type":`WebPage`,"@id":Ow(e.path)},datePublished:e.datePublished,...e.dateModified?{dateModified:e.dateModified}:{},...e.image?{image:e.image.startsWith(`http`)?e.image:Ow(e.image)}:{},...e.mentions&&e.mentions.length>0?{mentions:e.mentions.map(e=>({"@type":`Organization`,name:e.name,url:e.url,...e.description?{description:e.description}:{}}))}:{},author:{"@id":`${oS}/about#founder`},publisher:{"@id":`${oS}/#organization`}}),Iw=R(`/insights/$slug`)({component:z(()=>J(()=>import(`./_slug-D2GH9rm7.js`),__vite__mapDeps([123,3,1,110,25,20,21,26,4,67,6,86,122,30,22,23,31,32,0,8,9,10,19,24,27,33,36,37])),`component`),loader:async({params:e})=>sw(e.slug)?{holo:null}:{holo:await Ew({data:{slug:e.slug}})},head:({params:e,loaderData:t})=>{let n=sw(e.slug);if(!n){let e=t?.holo;if(!e)return{meta:[{title:`Article Not Found | Cellara Growth Co`},{name:`robots`,content:`noindex`}]};let n=`${oS}${e.canonicalPath}`,r=e.excerpt||`${e.title} from the Cellara Journal.`;return{meta:[{title:`${e.title} | Cellara Growth Co`},{name:`description`,content:r},...WS({title:e.title,description:r,url:n,type:`article`}),...e.isoDate?[{property:`article:published_time`,content:e.isoDate}]:[],{property:`article:author`,content:sS.name},{property:`article:section`,content:`Revenue Systems`}],links:[{rel:`canonical`,href:n}],scripts:[{type:`application/ld+json`,children:JSON.stringify([Fw({headline:e.title,description:r,path:e.canonicalPath,datePublished:e.isoDate}),jw([{name:`Home`,path:`/`},{name:`Insights`,path:`/insights`},{name:e.title,path:e.canonicalPath}])])}]}}let r=`${oS}${n.canonicalPath}`,i=n.coverImage.startsWith(`http`)?n.coverImage:`${oS}${n.coverImage}`;return{meta:[{title:`${n.metaTitle} | Cellara Growth Co`},{name:`description`,content:n.metaDescription},...n.index?[]:[{name:`robots`,content:`noindex`}],...WS({title:n.metaTitle,description:n.metaDescription,url:r,image:i,imageAlt:n.coverAlt,type:`article`}),{property:`article:published_time`,content:n.datePublished},{property:`article:author`,content:sS.name},{property:`article:section`,content:`Revenue Systems`},...n.dateModified?[{property:`article:modified_time`,content:n.dateModified}]:[]],links:[{rel:`canonical`,href:r}],scripts:[{type:`application/ld+json`,children:JSON.stringify([Fw({headline:n.title,description:n.metaDescription,path:n.canonicalPath,datePublished:n.datePublished,...n.dateModified===void 0?{}:{dateModified:n.dateModified},...n.mentions===void 0?{}:{mentions:n.mentions},image:i}),jw([{name:`Home`,path:`/`},{name:`Insights`,path:`/insights`},{name:n.shortTitle,path:n.canonicalPath}]),...n.faqs.length>0?[Nw(n.faqs)]:[]])}]}}}),Lw=R(`/launch-partner-program/`)({head:()=>Z(`/launch-partner-program`),component:z(()=>J(()=>import(`./launch-partner-program.index-BPOaYHbY.js`),__vite__mapDeps([124,1,3,111,25,20,21,26,27,4,14,9,10,67,6,113,57,23,58,15,31,59,49,50,44,47,34,8,11,16,12,13,36,33,19,22,24,37,99,101,97,125,126])),`component`)}),Rw=R(`/launch-partner-program/playbook-thank-you`)({head:()=>({meta:[{title:`Your 5-Page Website Playbook | Cellara Growth Co`},{name:`robots`,content:`noindex, nofollow`},{name:`description`,content:`The 5-Page Website Playbook from Cellara Growth Co: the exact structure behind every Cellara launch site.`}],scripts:[{children:`(function(){var w=window;w.__cgcLeadConv=w.__cgcLeadConv||{};var k=w.location.pathname;if(w.__cgcLeadConv[k])return;w.__cgcLeadConv[k]=true;if(typeof w.gtag!=='function')return;w.gtag('event','conversion_event_submit_lead_form',{page_path:k});})();`}]}),component:z(()=>J(()=>import(`./launch-partner-program.playbook-thank-you-os9c7Rdh.js`),__vite__mapDeps([127,1,22,23,20,21,3,6,44,128,125])),`component`)}),zw=R(`/launch-partner-program/thank-you`)({head:()=>
22({meta:[{title:`Enrollment Confirmed | Cellara Growth Co`},{name:`robots`,content:`noindex, nofollow`},{name:`description`,content:`Your August Launch Partner Program enrollment is confirmed.`}],scripts:[{children:`(function(){var w=window;w.__cgcLeadConv=w.__cgcLeadConv||{};var k=w.location.pathname;if(w.__cgcLeadConv[k])return;w.__cgcLeadConv[k]=true;if(typeof w.gtag!=='function')return;w.gtag('event','conversion_event_submit_lead_form',{page_path:k});})();`}]}),component:z(()=>J(()=>import(`./launch-partner-program.thank-you-DtpE3wlu.js`),__vite__mapDeps([129,1,22,23,20,21,3,111,25,26,6,44,47,128,101,125,126])),`component`)}),Bw=()=>sm.auth.oauth,Vw=R(`/.lovable/oauth/consent`)({validateSearch:e=>({authorization_id:typeof e.authorization_id==`string`?e.authorization_id:``}),beforeLoad:async({search:e,location:t})=>{if(!e.authorization_id)throw Error(`Missing authorization_id`);let{data:n}=await sm.auth.getSession();if(!n.session){let e=t.pathname+t.searchStr;throw _e({to:`/auth`,search:{next:e}})}},loader:async({location:e})=>{let t=new URLSearchParams(e.search).get(`authorization_id`),{data:n,error:r}=await Bw().getAuthorizationDetails(t);if(r)throw Error(r.message);let i=n?.redirect_url??n?.redirect_to;if(i&&!n?.client)throw _e({href:i});return n},component:z(()=>J(()=>import(`./_._lovable.oauth.consent-DhT0a6-_.js`),__vite__mapDeps([130,1,3,8,9,10,52])),`component`),errorComponent:z(()=>J(()=>import(`./_._lovable.oauth.consent-CXRKhIGT.js`),__vite__mapDeps([131,3,1,52,10])),`errorComponent`)}),Hw=qS.update({id:`/`,path:`/`,getParentRoute:()=>X}),Uw=JS.update({id:`/about`,path:`/about`,getParentRoute:()=>X}),Ww=YS.update({id:`/accessibility`,path:`/accessibility`,getParentRoute:()=>X}),Gw=XS.update({id:`/after-launch`,path:`/after-launch`,getParentRoute:()=>X}),Kw=ZS.update({id:`/ai-agents`,path:`/ai-agents`,getParentRoute:()=>X}),qw=QS.update({id:`/ai-front-desk`,path:`/ai-front-desk`,getParentRoute:()=>X}),Jw=$S.update({id:`/ai-receptionist`,path:`/ai-receptionist`,getParentRoute:()=>X}),Yw=eC.update({id:`/auth`,path:`/auth`,getParentRoute:()=>X}),Xw=tC.update({id:`/case-studies`,path:`/case-studies`,getParentRoute:()=>X}),Zw=nC.update({id:`/cellara-launch`,path:`/cellara-launch`,getParentRoute:()=>X}),Qw=rC.update({id:`/client-work`,path:`/client-work`,getParentRoute:()=>X}),$w=iC.update({id:`/connected-revenue-system`,path:`/connected-revenue-system`,getParentRoute:()=>X}),eT=aC.update({id:`/contact`,path:`/contact`,getParentRoute:()=>X}),tT=oC.update({id:`/faq`,path:`/faq`,getParentRoute:()=>X}),nT=sC.update({id:`/fractional-growth-operations`,path:`/fractional-growth-operations`,getParentRoute:()=>X}),rT=cC.update({id:`/growth-advisory`,path:`/growth-advisory`,getParentRoute:()=>X}),iT=lC.update({id:`/growth-gap`,path:`/growth-gap`,getParentRoute:()=>X}),aT=uC.update({id:`/growth-systems`,path:`/growth-systems`,getParentRoute:()=>X}),oT=dC.update({id:`/high-performance-websites`,path:`/high-performance-websites`,getParentRoute:()=>X}),sT=fC.update({id:`/how-we-work`,path:`/how-we-work`,getParentRoute:()=>X}),cT=pC.update({id:`/launch-partner-program`,path:`/launch-partner-program`,getParentRoute:()=>X}),lT=mC.update({id:`/paid-growth`,path:`/paid-growth`,getParentRoute:()=>X}),uT=hC.update({id:`/paid-growth-fit`,path:`/paid-growth-fit`,getParentRoute:()=>X}),dT=gC.update({id:`/pricing`,path:`/pricing`,getParentRoute:()=>X}),fT=_C.update({id:`/privacy`,path:`/privacy`,getParentRoute:()=>X}),pT=vC.update({id:`/reputation`,path:`/reputation`,getParentRoute:()=>X}),mT=yC.update({id:`/reputation-growth`,path:`/reputation-growth`,getParentRoute:()=>X}),hT=bC.update({id:`/revenue-calculator`,path:`/revenue-calculator`,getParentRoute:()=>X}),gT=xC.update({id:`/revenue-diagnostic`,path:`/revenue-diagnostic`,getParentRoute:()=>X}),_T=SC.update({id:`/revenue-operations`,path:`/revenue-operations`,getParentRoute:()=>X}),vT=CC.update({id:`/revenue-operations-reset`,path:`/revenue-operations-reset`,getParentRoute:()=>X}),yT=wC.update({id:`/seo`,path:`/seo`,getParentRoute:()=>X}),bT=TC.update({id:`/seo-geo`,path:`/seo-geo`,getParentRoute:()=>X}),xT=EC.update({id:`/services`,path:`/services`,getParentRoute:()=>X}),ST=DC.update({id:`/solutions`,path:`/solutions`,getParentRoute:()=>X}),CT=OC.update({id:`/terms`,path:`/terms`,getParentRoute:()=>X}),wT=kC.update({id:`/websites`,path:`/websites`,getParentRoute:()=>X}),TT=AC.update({id:`/admin/analytics`,path:`/admin/analytics`,getParentRoute:()=>X}),ET=jC.update({id:`/admin/leads`,path:`/admin/leads`,getParentRoute:()=>X}),DT=MC.update({id:`/assessments/`,path:`/assessments/`,getParentRoute:()=>X}),OT=NC.update({id:`/assessments/estimate-return`,path:`/assessments/estimate-return`,getParentRoute:()=>X}),kT=PC.update({id:`/assessments/growth-gap`,path:`/assessments/growth-gap`,getParentRoute:()=>X}),AT=FC.update({id:`/assessments/paid-growth-fit`,path:`/assessments/paid-growth-fit`,getParentRoute:()=>X}),jT=IC.update({id:`/blog/`,path:`/blog/`,getParentRoute:()=>X}),MT=uw.update({id:`/blog/$slug`,path:`/blog/$slug`,getParentRoute:()=>X}),NT=dw.update({id:`/`,path:`/`,getParentRoute:()=>Zw}),PT=fw.update({id:`/checkout`,path:`/checkout`,getParentRoute:()=>Zw}),FT=pw.update({id:`/questionnaire`,path:`/questionnaire`,getParentRoute:()=>Zw}),IT=mw.update({id:`/thank-you`,path:`/thank-you`,getParentRoute:()=>Zw}),LT=hw.update({id:`/checkout/$offer`,path:`/checkout/$offer`,getParentRoute:()=>X}),RT=gw.update({id:`/checkout/return`,path:`/checkout/return`,getParentRoute:()=>X}),zT=_w.update({id:`/industries/`,path:`/industries/`,getParentRoute:()=>X}),BT=vw.update({id:`/industries/accounting-firms`,path:`/industries/accounting-firms`,getParentRoute:()=>X}
22),VT=yw.update({id:`/industries/advisory-firms`,path:`/industries/advisory-firms`,getParentRoute:()=>X}),HT=bw.update({id:`/industries/beauty-wellness`,path:`/industries/beauty-wellness`,getParentRoute:()=>X}),UT=xw.update({id:`/industries/healthcare-aesthetics`,path:`/industries/healthcare-aesthetics`,getParentRoute:()=>X}),WT=Sw.update({id:`/industries/home-services`,path:`/industries/home-services`,getParentRoute:()=>X}),GT=Cw.update({id:`/industries/legal-services`,path:`/industries/legal-services`,getParentRoute:()=>X}),KT=ww.update({id:`/industries/rental-companies`,path:`/industries/rental-companies`,getParentRoute:()=>X}),qT=Dw.update({id:`/insights/`,path:`/insights/`,getParentRoute:()=>X}),JT=Iw.update({id:`/insights/$slug`,path:`/insights/$slug`,getParentRoute:()=>X}),YT=Lw.update({id:`/`,path:`/`,getParentRoute:()=>cT}),XT=Rw.update({id:`/playbook-thank-you`,path:`/playbook-thank-you`,getParentRoute:()=>cT}),ZT=zw.update({id:`/thank-you`,path:`/thank-you`,getParentRoute:()=>cT}),QT=Vw.update({id:`/.lovable/oauth/consent`,path:`/.lovable/oauth/consent`,getParentRoute:()=>X}),$T={CellaraLaunchCheckoutRoute:PT,CellaraLaunchQuestionnaireRoute:FT,CellaraLaunchThankYouRoute:IT,CellaraLaunchIndexRoute:NT},eE=Zw._addFileChildren($T),tE={LaunchPartnerProgramPlaybookThankYouRoute:XT,LaunchPartnerProgramThankYouRoute:ZT,LaunchPartnerProgramIndexRoute:YT},nE={IndexRoute:Hw,AboutRoute:Uw,AccessibilityRoute:Ww,AfterLaunchRoute:Gw,AiAgentsRoute:Kw,AiFrontDeskRoute:qw,AiReceptionistRoute:Jw,AuthRoute:Yw,CaseStudiesRoute:Xw,CellaraLaunchRoute:eE,ClientWorkRoute:Qw,ConnectedRevenueSystemRoute:$w,ContactRoute:eT,FaqRoute:tT,FractionalGrowthOperationsRoute:nT,GrowthAdvisoryRoute:rT,GrowthGapRoute:iT,GrowthSystemsRoute:aT,HighPerformanceWebsitesRoute:oT,HowWeWorkRoute:sT,LaunchPartnerProgramRoute:cT._addFileChildren(tE),PaidGrowthRoute:lT,PaidGrowthFitRoute:uT,PricingRoute:dT,PrivacyRoute:fT,ReputationRoute:pT,ReputationGrowthRoute:mT,RevenueCalculatorRoute:hT,RevenueDiagnosticRoute:gT,RevenueOperationsRoute:_T,RevenueOperationsResetRoute:vT,SeoRoute:yT,SeoGeoRoute:bT,ServicesRoute:xT,SolutionsRoute:ST,TermsRoute:CT,WebsitesRoute:wT,AdminAnalyticsRoute:TT,AdminLeadsRoute:ET,AssessmentsEstimateReturnRoute:OT,AssessmentsGrowthGapRoute:kT,AssessmentsPaidGrowthFitRoute:AT,BlogSlugRoute:MT,CheckoutOfferRoute:LT,CheckoutReturnRoute:RT,IndustriesAccountingFirmsRoute:BT,IndustriesAdvisoryFirmsRoute:VT,IndustriesBeautyWellnessRoute:HT,IndustriesHealthcareAestheticsRoute:UT,IndustriesHomeServicesRoute:WT,IndustriesLegalServicesRoute:GT,IndustriesRentalCompaniesRoute:KT,InsightsSlugRoute:JT,AssessmentsIndexRoute:DT,BlogIndexRoute:jT,IndustriesIndexRoute:zT,InsightsIndexRoute:qT,DotlovableOauthConsentRoute:QT},rE=X._addFileChildren(nE),iE=()=>zs({routeTree:rE,context:{queryClient:new uh},scrollRestoration:!0,defaultPreloadStaleTime:0});async function aE(){let e=await iE(),t;
22if(dm){let n=await dm.getOptions();n.serializationAdapters=n.serializationAdapters??[],window.__TSS_START_OPTIONS__=n,t=n.serializationAdapters,e.options.defaultSsr=n.defaultSsr}else t=[],window.__TSS_START_OPTIONS__={serializationAdapters:t};return t.push(Go),e.options.serializationAdapters&&t.push(...e.options.serializationAdapters),e.update({basepath:``,serializationAdapters:t}),e.stores.matchesId.get().length||await Zo(e),e}var oE=aE;async function sE(){let e=await oE();return window.$_TSR?.h(),e}var cE;function lE(){return cE||=sE(),(0,L.jsx)($o,{promise:cE,children:e=>(0,L.jsx)(Hs,{router:e})})}var uE=Ve();(0,I.startTransition)(()=>{(0,uE.hydrateRoot)(document,(0,L.jsx)(I.StrictMode,{children:(0,L.jsx)(lE,{})}))});export{sx as $,ES as A,gS as B,JC as C,Wo as Ct,wS as D,CS as E,_S as F,qx as G,Vx as H,xS as I,Xx as J,Wx as K,pS as L,sS as M,fS as N,TS as O,mS as P,lx as Q,hS as R,YC as S,Ps as St,VC as T,rS as U,SS as V,Kx as W,nS as X,tS as Y,cx as Z,ow as _,sm as _t,jw as a,Dg as at,lw as b,tc as bt,Pw as c,mg as ct,Dw as d,Bh as dt,Jb as et,hw as f,wh as ft,tw as g,ph as gt,fw as h,mh as ht,Fw as i,Fg as it,Y as j,DS as k,Mw as l,ig as lt,pw as m,hh as mt,Bw as n,V_ as nt,Nw as o,Cg as ot,mw as p,gh as pt,iS as q,Ow as r,B_ as rt,kw as s,fg as st,Vw as t,gv as tt,Aw as u,eg as ut,sw as v,J as vt,qC as w,XC as x,Us as xt,aw as y,oc as yt,oS as z};

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.