var EC=Object.defineProperty;var Qm=e=>{throw TypeError(e)};var IC=(e,t,n)=>t in e?EC(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var vr=(e,t,n)=>IC(e,typeof t!="symbol"?t+"":t,n),Zu=(e,t,n)=>t.has(e)||Qm("Cannot "+n);var H=(e,t,n)=>(Zu(e,t,"read from private field"),n?n.call(e):t.get(e)),Re=(e,t,n)=>t.has(e)?Qm("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),me=(e,t,n,r)=>(Zu(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n),jt=(e,t,n)=>(Zu(e,t,"access private method"),n);var pl=(e,t,n,r)=>({set _(i){me(e,t,i,n)},get _(){return H(e,t,r)}});function NC(e,t){for(var n=0;nr[i]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const a of o.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&r(a)}).observe(document,{childList:!0,subtree:!0});function n(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(i){if(i.ep)return;i.ep=!0;const o=n(i);fetch(i.href,o)}})();var yc=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function po(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var fx={exports:{}},cu={},px={exports:{}},Te={};/** * @license React * react.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */var el=Symbol.for("react.element"),_C=Symbol.for("react.portal"),PC=Symbol.for("react.fragment"),RC=Symbol.for("react.strict_mode"),FC=Symbol.for("react.profiler"),MC=Symbol.for("react.provider"),OC=Symbol.for("react.context"),DC=Symbol.for("react.forward_ref"),LC=Symbol.for("react.suspense"),zC=Symbol.for("react.memo"),BC=Symbol.for("react.lazy"),Gm=Symbol.iterator;function HC(e){return e===null||typeof e!="object"?null:(e=Gm&&e[Gm]||e["@@iterator"],typeof e=="function"?e:null)}var mx={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},gx=Object.assign,yx={};function Aa(e,t,n){this.props=e,this.context=t,this.refs=yx,this.updater=n||mx}Aa.prototype.isReactComponent={};Aa.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};Aa.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function vx(){}vx.prototype=Aa.prototype;function Gf(e,t,n){this.props=e,this.context=t,this.refs=yx,this.updater=n||mx}var Kf=Gf.prototype=new vx;Kf.constructor=Gf;gx(Kf,Aa.prototype);Kf.isPureReactComponent=!0;var Km=Array.isArray,wx=Object.prototype.hasOwnProperty,Zf={current:null},xx={key:!0,ref:!0,__self:!0,__source:!0};function bx(e,t,n){var r,i={},o=null,a=null;if(t!=null)for(r in t.ref!==void 0&&(a=t.ref),t.key!==void 0&&(o=""+t.key),t)wx.call(t,r)&&!xx.hasOwnProperty(r)&&(i[r]=t[r]);var s=arguments.length-2;if(s===1)i.children=n;else if(1>>1,ne=M[oe];if(0>>1;oei(Ee,S))yei(Z,Ee)?(M[oe]=Z,M[ye]=S,oe=ye):(M[oe]=Ee,M[le]=S,oe=le);else if(yei(Z,S))M[oe]=Z,M[ye]=S,oe=ye;else break e}}return L}function i(M,L){var S=M.sortIndex-L.sortIndex;return S!==0?S:M.id-L.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var a=Date,s=a.now();e.unstable_now=function(){return a.now()-s}}var c=[],u=[],d=1,h=null,p=3,f=!1,v=!1,m=!1,b=typeof setTimeout=="function"?setTimeout:null,g=typeof clearTimeout=="function"?clearTimeout:null,y=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function w(M){for(var L=n(u);L!==null;){if(L.callback===null)r(u);else if(L.startTime<=M)r(u),L.sortIndex=L.expirationTime,t(c,L);else break;L=n(u)}}function k(M){if(m=!1,w(M),!v)if(n(c)!==null)v=!0,U(A);else{var L=n(u);L!==null&&K(k,L.startTime-M)}}function A(M,L){v=!1,m&&(m=!1,g(F),F=-1),f=!0;var S=p;try{for(w(L),h=n(c);h!==null&&(!(h.expirationTime>L)||M&&!R());){var oe=h.callback;if(typeof oe=="function"){h.callback=null,p=h.priorityLevel;var ne=oe(h.expirationTime<=L);L=e.unstable_now(),typeof ne=="function"?h.callback=ne:h===n(c)&&r(c),w(L)}else r(c);h=n(c)}if(h!==null)var T=!0;else{var le=n(u);le!==null&&K(k,le.startTime-L),T=!1}return T}finally{h=null,p=S,f=!1}}var C=!1,I=null,F=-1,D=5,j=-1;function R(){return!(e.unstable_now()-jM||125oe?(M.sortIndex=S,t(u,M),n(c)===null&&M===n(u)&&(m?(g(F),F=-1):m=!0,K(k,S-oe))):(M.sortIndex=ne,t(c,M),v||f||(v=!0,U(A))),M},e.unstable_shouldYield=R,e.unstable_wrapCallback=function(M){var L=p;return function(){var S=p;p=L;try{return M.apply(this,arguments)}finally{p=S}}}})(Tx);Ax.exports=Tx;var XC=Ax.exports;/** * @license React * react-dom.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */var JC=x,cn=XC;function q(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),ch=Object.prototype.hasOwnProperty,eA=/^[: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]*$/,Xm={},Jm={};function tA(e){return ch.call(Jm,e)?!0:ch.call(Xm,e)?!1:eA.test(e)?Jm[e]=!0:(Xm[e]=!0,!1)}function nA(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function rA(e,t,n,r){if(t===null||typeof t>"u"||nA(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function $t(e,t,n,r,i,o,a){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=i,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=a}var Ct={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Ct[e]=new $t(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Ct[t]=new $t(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Ct[e]=new $t(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Ct[e]=new $t(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Ct[e]=new $t(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Ct[e]=new $t(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Ct[e]=new $t(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Ct[e]=new $t(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Ct[e]=new $t(e,5,!1,e.toLowerCase(),null,!1,!1)});var ep=/[\-:]([a-z])/g;function tp(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(ep,tp);Ct[t]=new $t(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(ep,tp);Ct[t]=new $t(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(ep,tp);Ct[t]=new $t(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Ct[e]=new $t(e,1,!1,e.toLowerCase(),null,!1,!1)});Ct.xlinkHref=new $t("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Ct[e]=new $t(e,1,!1,e.toLowerCase(),null,!0,!0)});function np(e,t,n,r){var i=Ct.hasOwnProperty(t)?Ct[t]:null;(i!==null?i.type!==0:r||!(2s||i[a]!==o[s]){var c=` `+i[a].replace(" at new "," at ");return e.displayName&&c.includes("")&&(c=c.replace("",e.displayName)),c}while(1<=a&&0<=s);break}}}finally{ed=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?ns(e):""}function iA(e){switch(e.tag){case 5:return ns(e.type);case 16:return ns("Lazy");case 13:return ns("Suspense");case 19:return ns("SuspenseList");case 0:case 2:case 15:return e=td(e.type,!1),e;case 11:return e=td(e.type.render,!1),e;case 1:return e=td(e.type,!0),e;default:return""}}function fh(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Ro:return"Fragment";case Po:return"Portal";case uh:return"Profiler";case rp:return"StrictMode";case dh:return"Suspense";case hh:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Ix:return(e.displayName||"Context")+".Consumer";case Ex:return(e._context.displayName||"Context")+".Provider";case ip:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case op:return t=e.displayName||null,t!==null?t:fh(e.type)||"Memo";case Gr:t=e._payload,e=e._init;try{return fh(e(t))}catch{}}return null}function oA(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return fh(t);case 8:return t===rp?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function bi(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function _x(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function aA(e){var t=_x(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var i=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(a){r=""+a,o.call(this,a)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(a){r=""+a},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function yl(e){e._valueTracker||(e._valueTracker=aA(e))}function Px(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=_x(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function vc(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function ph(e,t){var n=t.checked;return Xe({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function tg(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=bi(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Rx(e,t){t=t.checked,t!=null&&np(e,"checked",t,!1)}function mh(e,t){Rx(e,t);var n=bi(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?gh(e,t.type,n):t.hasOwnProperty("defaultValue")&&gh(e,t.type,bi(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function ng(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function gh(e,t,n){(t!=="number"||vc(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var rs=Array.isArray;function Vo(e,t,n,r){if(e=e.options,t){t={};for(var i=0;i"+t.valueOf().toString()+"",t=vl.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Cs(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var ls={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},sA=["Webkit","ms","Moz","O"];Object.keys(ls).forEach(function(e){sA.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ls[t]=ls[e]})});function Dx(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||ls.hasOwnProperty(e)&&ls[e]?(""+t).trim():t+"px"}function Lx(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,i=Dx(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,i):e[n]=i}}var lA=Xe({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function wh(e,t){if(t){if(lA[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(q(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(q(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(q(61))}if(t.style!=null&&typeof t.style!="object")throw Error(q(62))}}function xh(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";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 bh=null;function ap(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var kh=null,qo=null,Uo=null;function og(e){if(e=rl(e)){if(typeof kh!="function")throw Error(q(280));var t=e.stateNode;t&&(t=pu(t),kh(e.stateNode,e.type,t))}}function zx(e){qo?Uo?Uo.push(e):Uo=[e]:qo=e}function Bx(){if(qo){var e=qo,t=Uo;if(Uo=qo=null,og(e),t)for(e=0;e>>=0,e===0?32:31-(wA(e)/xA|0)|0}var wl=64,xl=4194304;function is(e){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: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 e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function kc(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,i=e.suspendedLanes,o=e.pingedLanes,a=n&268435455;if(a!==0){var s=a&~i;s!==0?r=is(s):(o&=a,o!==0&&(r=is(o)))}else a=n&~i,a!==0?r=is(a):o!==0&&(r=is(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&i)&&(i=r&-r,o=t&-t,i>=o||i===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function tl(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Wn(t),e[t]=n}function CA(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=us),pg=" ",mg=!1;function ab(e,t){switch(e){case"keyup":return XA.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function sb(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Fo=!1;function eT(e,t){switch(e){case"compositionend":return sb(t);case"keypress":return t.which!==32?null:(mg=!0,pg);case"textInput":return e=t.data,e===pg&&mg?null:e;default:return null}}function tT(e,t){if(Fo)return e==="compositionend"||!pp&&ab(e,t)?(e=ib(),Xl=dp=ai=null,Fo=!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)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=wg(n)}}function db(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?db(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function hb(){for(var e=window,t=vc();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=vc(e.document)}return t}function mp(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")}function uT(e){var t=hb(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&db(n.ownerDocument.documentElement,n)){if(r!==null&&mp(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var i=n.textContent.length,o=Math.min(r.start,i);r=r.end===void 0?o:Math.min(r.end,i),!e.extend&&o>r&&(i=r,r=o,o=i),i=xg(n,o);var a=xg(n,r);i&&a&&(e.rangeCount!==1||e.anchorNode!==i.node||e.anchorOffset!==i.offset||e.focusNode!==a.node||e.focusOffset!==a.offset)&&(t=t.createRange(),t.setStart(i.node,i.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(a.node,a.offset)):(t.setEnd(a.node,a.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Mo=null,Eh=null,hs=null,Ih=!1;function bg(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Ih||Mo==null||Mo!==vc(r)||(r=Mo,"selectionStart"in r&&mp(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),hs&&Ns(hs,r)||(hs=r,r=Ac(Eh,"onSelect"),0Lo||(e.current=Mh[Lo],Mh[Lo]=null,Lo--)}function $e(e,t){Lo++,Mh[Lo]=e.current,e.current=t}var ki={},Rt=Ei(ki),Gt=Ei(!1),no=ki;function da(e,t){var n=e.type.contextTypes;if(!n)return ki;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var i={},o;for(o in n)i[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function Kt(e){return e=e.childContextTypes,e!=null}function jc(){qe(Gt),qe(Rt)}function Eg(e,t,n){if(Rt.current!==ki)throw Error(q(168));$e(Rt,t),$e(Gt,n)}function bb(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var i in r)if(!(i in t))throw Error(q(108,oA(e)||"Unknown",i));return Xe({},n,r)}function Ec(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||ki,no=Rt.current,$e(Rt,e),$e(Gt,Gt.current),!0}function Ig(e,t,n){var r=e.stateNode;if(!r)throw Error(q(169));n?(e=bb(e,t,no),r.__reactInternalMemoizedMergedChildContext=e,qe(Gt),qe(Rt),$e(Rt,e)):qe(Gt),$e(Gt,n)}var Sr=null,mu=!1,md=!1;function kb(e){Sr===null?Sr=[e]:Sr.push(e)}function kT(e){mu=!0,kb(e)}function Ii(){if(!md&&Sr!==null){md=!0;var e=0,t=Oe;try{var n=Sr;for(Oe=1;e>=a,i-=a,Ar=1<<32-Wn(t)+i|n<F?(D=I,I=null):D=I.sibling;var j=p(g,I,w[F],k);if(j===null){I===null&&(I=D);break}e&&I&&j.alternate===null&&t(g,I),y=o(j,y,F),C===null?A=j:C.sibling=j,C=j,I=D}if(F===w.length)return n(g,I),Ye&&Li(g,F),A;if(I===null){for(;FF?(D=I,I=null):D=I.sibling;var R=p(g,I,j.value,k);if(R===null){I===null&&(I=D);break}e&&I&&R.alternate===null&&t(g,I),y=o(R,y,F),C===null?A=R:C.sibling=R,C=R,I=D}if(j.done)return n(g,I),Ye&&Li(g,F),A;if(I===null){for(;!j.done;F++,j=w.next())j=h(g,j.value,k),j!==null&&(y=o(j,y,F),C===null?A=j:C.sibling=j,C=j);return Ye&&Li(g,F),A}for(I=r(g,I);!j.done;F++,j=w.next())j=f(I,g,F,j.value,k),j!==null&&(e&&j.alternate!==null&&I.delete(j.key===null?F:j.key),y=o(j,y,F),C===null?A=j:C.sibling=j,C=j);return e&&I.forEach(function(_){return t(g,_)}),Ye&&Li(g,F),A}function b(g,y,w,k){if(typeof w=="object"&&w!==null&&w.type===Ro&&w.key===null&&(w=w.props.children),typeof w=="object"&&w!==null){switch(w.$$typeof){case gl:e:{for(var A=w.key,C=y;C!==null;){if(C.key===A){if(A=w.type,A===Ro){if(C.tag===7){n(g,C.sibling),y=i(C,w.props.children),y.return=g,g=y;break e}}else if(C.elementType===A||typeof A=="object"&&A!==null&&A.$$typeof===Gr&&Pg(A)===C.type){n(g,C.sibling),y=i(C,w.props),y.ref=$a(g,C,w),y.return=g,g=y;break e}n(g,C);break}else t(g,C);C=C.sibling}w.type===Ro?(y=eo(w.props.children,g.mode,k,w.key),y.return=g,g=y):(k=ac(w.type,w.key,w.props,null,g.mode,k),k.ref=$a(g,y,w),k.return=g,g=k)}return a(g);case Po:e:{for(C=w.key;y!==null;){if(y.key===C)if(y.tag===4&&y.stateNode.containerInfo===w.containerInfo&&y.stateNode.implementation===w.implementation){n(g,y.sibling),y=i(y,w.children||[]),y.return=g,g=y;break e}else{n(g,y);break}else t(g,y);y=y.sibling}y=Sd(w,g.mode,k),y.return=g,g=y}return a(g);case Gr:return C=w._init,b(g,y,C(w._payload),k)}if(rs(w))return v(g,y,w,k);if(Da(w))return m(g,y,w,k);jl(g,w)}return typeof w=="string"&&w!==""||typeof w=="number"?(w=""+w,y!==null&&y.tag===6?(n(g,y.sibling),y=i(y,w),y.return=g,g=y):(n(g,y),y=kd(w,g.mode,k),y.return=g,g=y),a(g)):n(g,y)}return b}var fa=Tb(!0),jb=Tb(!1),_c=Ei(null),Pc=null,Ho=null,wp=null;function xp(){wp=Ho=Pc=null}function bp(e){var t=_c.current;qe(_c),e._currentValue=t}function Lh(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Qo(e,t){Pc=e,wp=Ho=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Qt=!0),e.firstContext=null)}function An(e){var t=e._currentValue;if(wp!==e)if(e={context:e,memoizedValue:t,next:null},Ho===null){if(Pc===null)throw Error(q(308));Ho=e,Pc.dependencies={lanes:0,firstContext:e}}else Ho=Ho.next=e;return t}var Wi=null;function kp(e){Wi===null?Wi=[e]:Wi.push(e)}function Eb(e,t,n,r){var i=t.interleaved;return i===null?(n.next=n,kp(t)):(n.next=i.next,i.next=n),t.interleaved=n,Nr(e,r)}function Nr(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var Kr=!1;function Sp(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Ib(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function jr(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function pi(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,_e&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,Nr(e,n)}return i=r.interleaved,i===null?(t.next=t,kp(r)):(t.next=i.next,i.next=t),r.interleaved=t,Nr(e,n)}function ec(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,lp(e,n)}}function Rg(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var a={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?i=o=a:o=o.next=a,n=n.next}while(n!==null);o===null?i=o=t:o=o.next=t}else i=o=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Rc(e,t,n,r){var i=e.updateQueue;Kr=!1;var o=i.firstBaseUpdate,a=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,u=c.next;c.next=null,a===null?o=u:a.next=u,a=c;var d=e.alternate;d!==null&&(d=d.updateQueue,s=d.lastBaseUpdate,s!==a&&(s===null?d.firstBaseUpdate=u:s.next=u,d.lastBaseUpdate=c))}if(o!==null){var h=i.baseState;a=0,d=u=c=null,s=o;do{var p=s.lane,f=s.eventTime;if((r&p)===p){d!==null&&(d=d.next={eventTime:f,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var v=e,m=s;switch(p=t,f=n,m.tag){case 1:if(v=m.payload,typeof v=="function"){h=v.call(f,h,p);break e}h=v;break e;case 3:v.flags=v.flags&-65537|128;case 0:if(v=m.payload,p=typeof v=="function"?v.call(f,h,p):v,p==null)break e;h=Xe({},h,p);break e;case 2:Kr=!0}}s.callback!==null&&s.lane!==0&&(e.flags|=64,p=i.effects,p===null?i.effects=[s]:p.push(s))}else f={eventTime:f,lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},d===null?(u=d=f,c=h):d=d.next=f,a|=p;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(!0);if(d===null&&(c=h),i.baseState=c,i.firstBaseUpdate=u,i.lastBaseUpdate=d,t=i.shared.interleaved,t!==null){i=t;do a|=i.lane,i=i.next;while(i!==t)}else o===null&&(i.shared.lanes=0);oo|=a,e.lanes=a,e.memoizedState=h}}function Fg(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=yd.transition;yd.transition={};try{e(!1),t()}finally{Oe=n,yd.transition=r}}function Ub(){return Tn().memoizedState}function TT(e,t,n){var r=gi(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Yb(e))Qb(t,n);else if(n=Eb(e,t,n,r),n!==null){var i=Bt();Vn(n,e,r,i),Gb(n,t,r)}}function jT(e,t,n){var r=gi(e),i={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Yb(e))Qb(t,i);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var a=t.lastRenderedState,s=o(a,n);if(i.hasEagerState=!0,i.eagerState=s,Un(s,a)){var c=t.interleaved;c===null?(i.next=i,kp(t)):(i.next=c.next,c.next=i),t.interleaved=i;return}}catch{}finally{}n=Eb(e,t,i,r),n!==null&&(i=Bt(),Vn(n,e,r,i),Gb(n,t,r))}}function Yb(e){var t=e.alternate;return e===Ze||t!==null&&t===Ze}function Qb(e,t){fs=Mc=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Gb(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,lp(e,n)}}var Oc={readContext:An,useCallback:Et,useContext:Et,useEffect:Et,useImperativeHandle:Et,useInsertionEffect:Et,useLayoutEffect:Et,useMemo:Et,useReducer:Et,useRef:Et,useState:Et,useDebugValue:Et,useDeferredValue:Et,useTransition:Et,useMutableSource:Et,useSyncExternalStore:Et,useId:Et,unstable_isNewReconciler:!1},ET={readContext:An,useCallback:function(e,t){return tr().memoizedState=[e,t===void 0?null:t],e},useContext:An,useEffect:Og,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,nc(4194308,4,Hb.bind(null,t,e),n)},useLayoutEffect:function(e,t){return nc(4194308,4,e,t)},useInsertionEffect:function(e,t){return nc(4,2,e,t)},useMemo:function(e,t){var n=tr();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=tr();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=TT.bind(null,Ze,e),[r.memoizedState,e]},useRef:function(e){var t=tr();return e={current:e},t.memoizedState=e},useState:Mg,useDebugValue:_p,useDeferredValue:function(e){return tr().memoizedState=e},useTransition:function(){var e=Mg(!1),t=e[0];return e=AT.bind(null,e[1]),tr().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=Ze,i=tr();if(Ye){if(n===void 0)throw Error(q(407));n=n()}else{if(n=t(),vt===null)throw Error(q(349));io&30||Rb(r,t,n)}i.memoizedState=n;var o={value:n,getSnapshot:t};return i.queue=o,Og(Mb.bind(null,r,o,e),[e]),r.flags|=2048,Ls(9,Fb.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=tr(),t=vt.identifierPrefix;if(Ye){var n=Tr,r=Ar;n=(r&~(1<<32-Wn(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=Os++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=a.createElement(n,{is:r.is}):(e=a.createElement(n),n==="select"&&(a=e,r.multiple?a.multiple=!0:r.size&&(a.size=r.size))):e=a.createElementNS(e,n),e[sr]=t,e[Rs]=r,o0(e,t,!1,!1),t.stateNode=e;e:{switch(a=xh(n,r),n){case"dialog":Ve("cancel",e),Ve("close",e),i=r;break;case"iframe":case"object":case"embed":Ve("load",e),i=r;break;case"video":case"audio":for(i=0;iga&&(t.flags|=128,r=!0,Wa(o,!1),t.lanes=4194304)}else{if(!r)if(e=Fc(a),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Wa(o,!0),o.tail===null&&o.tailMode==="hidden"&&!a.alternate&&!Ye)return It(t),null}else 2*rt()-o.renderingStartTime>ga&&n!==1073741824&&(t.flags|=128,r=!0,Wa(o,!1),t.lanes=4194304);o.isBackwards?(a.sibling=t.child,t.child=a):(n=o.last,n!==null?n.sibling=a:t.child=a,o.last=a)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=rt(),t.sibling=null,n=Ke.current,$e(Ke,r?n&1|2:n&1),t):(It(t),null);case 22:case 23:return Dp(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?nn&1073741824&&(It(t),t.subtreeFlags&6&&(t.flags|=8192)):It(t),null;case 24:return null;case 25:return null}throw Error(q(156,t.tag))}function OT(e,t){switch(yp(t),t.tag){case 1:return Kt(t.type)&&jc(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return pa(),qe(Gt),qe(Rt),Tp(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Ap(t),null;case 13:if(qe(Ke),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(q(340));ha()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return qe(Ke),null;case 4:return pa(),null;case 10:return bp(t.type._context),null;case 22:case 23:return Dp(),null;case 24:return null;default:return null}}var Il=!1,_t=!1,DT=typeof WeakSet=="function"?WeakSet:Set,re=null;function $o(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){nt(e,t,r)}else n.current=null}function Yh(e,t,n){try{n()}catch(r){nt(e,t,r)}}var Yg=!1;function LT(e,t){if(Nh=Sc,e=hb(),mp(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var i=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var a=0,s=-1,c=-1,u=0,d=0,h=e,p=null;t:for(;;){for(var f;h!==n||i!==0&&h.nodeType!==3||(s=a+i),h!==o||r!==0&&h.nodeType!==3||(c=a+r),h.nodeType===3&&(a+=h.nodeValue.length),(f=h.firstChild)!==null;)p=h,h=f;for(;;){if(h===e)break t;if(p===n&&++u===i&&(s=a),p===o&&++d===r&&(c=a),(f=h.nextSibling)!==null)break;h=p,p=h.parentNode}h=f}n=s===-1||c===-1?null:{start:s,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(_h={focusedElem:e,selectionRange:n},Sc=!1,re=t;re!==null;)if(t=re,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,re=e;else for(;re!==null;){t=re;try{var v=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(v!==null){var m=v.memoizedProps,b=v.memoizedState,g=t.stateNode,y=g.getSnapshotBeforeUpdate(t.elementType===t.type?m:Fn(t.type,m),b);g.__reactInternalSnapshotBeforeUpdate=y}break;case 3:var w=t.stateNode.containerInfo;w.nodeType===1?w.textContent="":w.nodeType===9&&w.documentElement&&w.removeChild(w.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(q(163))}}catch(k){nt(t,t.return,k)}if(e=t.sibling,e!==null){e.return=t.return,re=e;break}re=t.return}return v=Yg,Yg=!1,v}function ps(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var i=r=r.next;do{if((i.tag&e)===e){var o=i.destroy;i.destroy=void 0,o!==void 0&&Yh(t,n,o)}i=i.next}while(i!==r)}}function vu(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function Qh(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function l0(e){var t=e.alternate;t!==null&&(e.alternate=null,l0(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[sr],delete t[Rs],delete t[Fh],delete t[xT],delete t[bT])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function c0(e){return e.tag===5||e.tag===3||e.tag===4}function Qg(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||c0(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.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Gh(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Tc));else if(r!==4&&(e=e.child,e!==null))for(Gh(e,t,n),e=e.sibling;e!==null;)Gh(e,t,n),e=e.sibling}function Kh(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&&(e=e.child,e!==null))for(Kh(e,t,n),e=e.sibling;e!==null;)Kh(e,t,n),e=e.sibling}var bt=null,Ln=!1;function Hr(e,t,n){for(n=n.child;n!==null;)u0(e,t,n),n=n.sibling}function u0(e,t,n){if(dr&&typeof dr.onCommitFiberUnmount=="function")try{dr.onCommitFiberUnmount(uu,n)}catch{}switch(n.tag){case 5:_t||$o(n,t);case 6:var r=bt,i=Ln;bt=null,Hr(e,t,n),bt=r,Ln=i,bt!==null&&(Ln?(e=bt,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):bt.removeChild(n.stateNode));break;case 18:bt!==null&&(Ln?(e=bt,n=n.stateNode,e.nodeType===8?pd(e.parentNode,n):e.nodeType===1&&pd(e,n),Es(e)):pd(bt,n.stateNode));break;case 4:r=bt,i=Ln,bt=n.stateNode.containerInfo,Ln=!0,Hr(e,t,n),bt=r,Ln=i;break;case 0:case 11:case 14:case 15:if(!_t&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){i=r=r.next;do{var o=i,a=o.destroy;o=o.tag,a!==void 0&&(o&2||o&4)&&Yh(n,t,a),i=i.next}while(i!==r)}Hr(e,t,n);break;case 1:if(!_t&&($o(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){nt(n,t,s)}Hr(e,t,n);break;case 21:Hr(e,t,n);break;case 22:n.mode&1?(_t=(r=_t)||n.memoizedState!==null,Hr(e,t,n),_t=r):Hr(e,t,n);break;default:Hr(e,t,n)}}function Gg(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new DT),t.forEach(function(r){var i=YT.bind(null,e,r);n.has(r)||(n.add(r),r.then(i,i))})}}function _n(e,t){var n=t.deletions;if(n!==null)for(var r=0;ri&&(i=a),r&=~o}if(r=i,r=rt()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*BT(r/1960))-r,10e?16:e,si===null)var r=!1;else{if(e=si,si=null,zc=0,_e&6)throw Error(q(331));var i=_e;for(_e|=4,re=e.current;re!==null;){var o=re,a=o.child;if(re.flags&16){var s=o.deletions;if(s!==null){for(var c=0;crt()-Mp?Ji(e,0):Fp|=n),Zt(e,t)}function v0(e,t){t===0&&(e.mode&1?(t=xl,xl<<=1,!(xl&130023424)&&(xl=4194304)):t=1);var n=Bt();e=Nr(e,t),e!==null&&(tl(e,t,n),Zt(e,n))}function UT(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),v0(e,n)}function YT(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,i=e.memoizedState;i!==null&&(n=i.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(q(314))}r!==null&&r.delete(t),v0(e,n)}var w0;w0=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||Gt.current)Qt=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Qt=!1,FT(e,t,n);Qt=!!(e.flags&131072)}else Qt=!1,Ye&&t.flags&1048576&&Sb(t,Nc,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;rc(e,t),e=t.pendingProps;var i=da(t,Rt.current);Qo(t,n),i=Ep(null,t,r,e,i,n);var o=Ip();return t.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Kt(r)?(o=!0,Ec(t)):o=!1,t.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,Sp(t),i.updater=yu,t.stateNode=i,i._reactInternals=t,Bh(t,r,e,n),t=Wh(null,t,r,!0,o,n)):(t.tag=0,Ye&&o&&gp(t),Ot(null,t,i,n),t=t.child),t;case 16:r=t.elementType;e:{switch(rc(e,t),e=t.pendingProps,i=r._init,r=i(r._payload),t.type=r,i=t.tag=GT(r),e=Fn(r,e),i){case 0:t=$h(null,t,r,e,n);break e;case 1:t=Vg(null,t,r,e,n);break e;case 11:t=$g(null,t,r,e,n);break e;case 14:t=Wg(null,t,r,Fn(r.type,e),n);break e}throw Error(q(306,r,""))}return t;case 0:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:Fn(r,i),$h(e,t,r,i,n);case 1:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:Fn(r,i),Vg(e,t,r,i,n);case 3:e:{if(n0(t),e===null)throw Error(q(387));r=t.pendingProps,o=t.memoizedState,i=o.element,Ib(e,t),Rc(t,r,null,n);var a=t.memoizedState;if(r=a.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:a.cache,pendingSuspenseBoundaries:a.pendingSuspenseBoundaries,transitions:a.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){i=ma(Error(q(423)),t),t=qg(e,t,r,n,i);break e}else if(r!==i){i=ma(Error(q(424)),t),t=qg(e,t,r,n,i);break e}else for(on=fi(t.stateNode.containerInfo.firstChild),an=t,Ye=!0,zn=null,n=jb(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(ha(),r===i){t=_r(e,t,n);break e}Ot(e,t,r,n)}t=t.child}return t;case 5:return Nb(t),e===null&&Dh(t),r=t.type,i=t.pendingProps,o=e!==null?e.memoizedProps:null,a=i.children,Ph(r,i)?a=null:o!==null&&Ph(r,o)&&(t.flags|=32),t0(e,t),Ot(e,t,a,n),t.child;case 6:return e===null&&Dh(t),null;case 13:return r0(e,t,n);case 4:return Cp(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=fa(t,null,r,n):Ot(e,t,r,n),t.child;case 11:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:Fn(r,i),$g(e,t,r,i,n);case 7:return Ot(e,t,t.pendingProps,n),t.child;case 8:return Ot(e,t,t.pendingProps.children,n),t.child;case 12:return Ot(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,i=t.pendingProps,o=t.memoizedProps,a=i.value,$e(_c,r._currentValue),r._currentValue=a,o!==null)if(Un(o.value,a)){if(o.children===i.children&&!Gt.current){t=_r(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var s=o.dependencies;if(s!==null){a=o.child;for(var c=s.firstContext;c!==null;){if(c.context===r){if(o.tag===1){c=jr(-1,n&-n),c.tag=2;var u=o.updateQueue;if(u!==null){u=u.shared;var d=u.pending;d===null?c.next=c:(c.next=d.next,d.next=c),u.pending=c}}o.lanes|=n,c=o.alternate,c!==null&&(c.lanes|=n),Lh(o.return,n,t),s.lanes|=n;break}c=c.next}}else if(o.tag===10)a=o.type===t.type?null:o.child;else if(o.tag===18){if(a=o.return,a===null)throw Error(q(341));a.lanes|=n,s=a.alternate,s!==null&&(s.lanes|=n),Lh(a,n,t),a=o.sibling}else a=o.child;if(a!==null)a.return=o;else for(a=o;a!==null;){if(a===t){a=null;break}if(o=a.sibling,o!==null){o.return=a.return,a=o;break}a=a.return}o=a}Ot(e,t,i.children,n),t=t.child}return t;case 9:return i=t.type,r=t.pendingProps.children,Qo(t,n),i=An(i),r=r(i),t.flags|=1,Ot(e,t,r,n),t.child;case 14:return r=t.type,i=Fn(r,t.pendingProps),i=Fn(r.type,i),Wg(e,t,r,i,n);case 15:return Jb(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:Fn(r,i),rc(e,t),t.tag=1,Kt(r)?(e=!0,Ec(t)):e=!1,Qo(t,n),Kb(t,r,i),Bh(t,r,i,n),Wh(null,t,r,!0,e,n);case 19:return i0(e,t,n);case 22:return e0(e,t,n)}throw Error(q(156,t.tag))};function x0(e,t){return Yx(e,t)}function QT(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.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 Sn(e,t,n,r){return new QT(e,t,n,r)}function zp(e){return e=e.prototype,!(!e||!e.isReactComponent)}function GT(e){if(typeof e=="function")return zp(e)?1:0;if(e!=null){if(e=e.$$typeof,e===ip)return 11;if(e===op)return 14}return 2}function yi(e,t){var n=e.alternate;return n===null?(n=Sn(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&14680064,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}function ac(e,t,n,r,i,o){var a=2;if(r=e,typeof e=="function")zp(e)&&(a=1);else if(typeof e=="string")a=5;else e:switch(e){case Ro:return eo(n.children,i,o,t);case rp:a=8,i|=8;break;case uh:return e=Sn(12,n,t,i|2),e.elementType=uh,e.lanes=o,e;case dh:return e=Sn(13,n,t,i),e.elementType=dh,e.lanes=o,e;case hh:return e=Sn(19,n,t,i),e.elementType=hh,e.lanes=o,e;case Nx:return xu(n,i,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Ex:a=10;break e;case Ix:a=9;break e;case ip:a=11;break e;case op:a=14;break e;case Gr:a=16,r=null;break e}throw Error(q(130,e==null?e:typeof e,""))}return t=Sn(a,n,t,i),t.elementType=e,t.type=r,t.lanes=o,t}function eo(e,t,n,r){return e=Sn(7,e,r,t),e.lanes=n,e}function xu(e,t,n,r){return e=Sn(22,e,r,t),e.elementType=Nx,e.lanes=n,e.stateNode={isHidden:!1},e}function kd(e,t,n){return e=Sn(6,e,null,t),e.lanes=n,e}function Sd(e,t,n){return t=Sn(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function KT(e,t,n,r,i){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=rd(0),this.expirationTimes=rd(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=rd(0),this.identifierPrefix=r,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function Bp(e,t,n,r,i,o,a,s,c){return e=new KT(e,t,n,s,c),t===1?(t=1,o===!0&&(t|=8)):t=0,o=Sn(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Sp(o),e}function ZT(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(C0)}catch(e){console.error(e)}}C0(),Cx.exports=dn;var yo=Cx.exports;const A0=po(yo);var T0,ry=yo;T0=ry.createRoot,ry.hydrateRoot;var nj=typeof Element<"u",rj=typeof Map=="function",ij=typeof Set=="function",oj=typeof ArrayBuffer=="function"&&!!ArrayBuffer.isView;function sc(e,t){if(e===t)return!0;if(e&&t&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return!1;var n,r,i;if(Array.isArray(e)){if(n=e.length,n!=t.length)return!1;for(r=n;r--!==0;)if(!sc(e[r],t[r]))return!1;return!0}var o;if(rj&&e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(o=e.entries();!(r=o.next()).done;)if(!t.has(r.value[0]))return!1;for(o=e.entries();!(r=o.next()).done;)if(!sc(r.value[1],t.get(r.value[0])))return!1;return!0}if(ij&&e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(o=e.entries();!(r=o.next()).done;)if(!t.has(r.value[0]))return!1;return!0}if(oj&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(t)){if(n=e.length,n!=t.length)return!1;for(r=n;r--!==0;)if(e[r]!==t[r])return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf&&typeof e.valueOf=="function"&&typeof t.valueOf=="function")return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString&&typeof e.toString=="function"&&typeof t.toString=="function")return e.toString()===t.toString();if(i=Object.keys(e),n=i.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!Object.prototype.hasOwnProperty.call(t,i[r]))return!1;if(nj&&e instanceof Element)return!1;for(r=n;r--!==0;)if(!((i[r]==="_owner"||i[r]==="__v"||i[r]==="__o")&&e.$$typeof)&&!sc(e[i[r]],t[i[r]]))return!1;return!0}return e!==e&&t!==t}var aj=function(t,n){try{return sc(t,n)}catch(r){if((r.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw r}};const sj=po(aj);var lj=function(e,t,n,r,i,o,a,s){if(!e){var c;if(t===void 0)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,i,o,a,s],d=0;c=new Error(t.replace(/%s/g,function(){return u[d++]})),c.name="Invariant Violation"}throw c.framesToPop=1,c}},cj=lj;const iy=po(cj);var uj=function(t,n,r,i){var o=r?r.call(i,t,n):void 0;if(o!==void 0)return!!o;if(t===n)return!0;if(typeof t!="object"||!t||typeof n!="object"||!n)return!1;var a=Object.keys(t),s=Object.keys(n);if(a.length!==s.length)return!1;for(var c=Object.prototype.hasOwnProperty.bind(n),u=0;u(e.BASE="base",e.BODY="body",e.HEAD="head",e.HTML="html",e.LINK="link",e.META="meta",e.NOSCRIPT="noscript",e.SCRIPT="script",e.STYLE="style",e.TITLE="title",e.FRAGMENT="Symbol(react.fragment)",e))(j0||{}),Cd={link:{rel:["amphtml","canonical","alternate"]},script:{type:["application/ld+json"]},meta:{charset:"",name:["generator","robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]}},oy=Object.values(j0),Vp={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},hj=Object.entries(Vp).reduce((e,[t,n])=>(e[n]=t,e),{}),$n="data-rh",Ko={DEFAULT_TITLE:"defaultTitle",DEFER:"defer",ENCODE_SPECIAL_CHARACTERS:"encodeSpecialCharacters",ON_CHANGE_CLIENT_STATE:"onChangeClientState",TITLE_TEMPLATE:"titleTemplate",PRIORITIZE_SEO_TAGS:"prioritizeSeoTags"},Zo=(e,t)=>{for(let n=e.length-1;n>=0;n-=1){const r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},fj=e=>{let t=Zo(e,"title");const n=Zo(e,Ko.TITLE_TEMPLATE);if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,()=>t);const r=Zo(e,Ko.DEFAULT_TITLE);return t||r||void 0},pj=e=>Zo(e,Ko.ON_CHANGE_CLIENT_STATE)||(()=>{}),Ad=(e,t)=>t.filter(n=>typeof n[e]<"u").map(n=>n[e]).reduce((n,r)=>({...n,...r}),{}),mj=(e,t)=>t.filter(n=>typeof n.base<"u").map(n=>n.base).reverse().reduce((n,r)=>{if(!n.length){const i=Object.keys(r);for(let o=0;oconsole&&typeof console.warn=="function"&&console.warn(e),qa=(e,t,n)=>{const r={};return n.filter(i=>Array.isArray(i[e])?!0:(typeof i[e]<"u"&&gj(`Helmet: ${e} should be of type "Array". Instead found type "${typeof i[e]}"`),!1)).map(i=>i[e]).reverse().reduce((i,o)=>{const a={};o.filter(c=>{let u;const d=Object.keys(c);for(let p=0;pi.push(c));const s=Object.keys(a);for(let c=0;c{if(Array.isArray(e)&&e.length){for(let n=0;n({baseTag:mj(["href"],e),bodyAttributes:Ad("bodyAttributes",e),defer:Zo(e,Ko.DEFER),encode:Zo(e,Ko.ENCODE_SPECIAL_CHARACTERS),htmlAttributes:Ad("htmlAttributes",e),linkTags:qa("link",["rel","href"],e),metaTags:qa("meta",["name","charset","http-equiv","property","itemprop"],e),noscriptTags:qa("noscript",["innerHTML"],e),onChangeClientState:pj(e),scriptTags:qa("script",["src","innerHTML"],e),styleTags:qa("style",["cssText"],e),title:fj(e),titleAttributes:Ad("titleAttributes",e),prioritizeSeoTags:yj(e,Ko.PRIORITIZE_SEO_TAGS)}),E0=e=>Array.isArray(e)?e.join(""):e,wj=(e,t)=>{const n=Object.keys(e);for(let r=0;rArray.isArray(e)?e.reduce((n,r)=>(wj(r,t)?n.priority.push(r):n.default.push(r),n),{priority:[],default:[]}):{default:e,priority:[]},ay=(e,t)=>({...e,[t]:void 0}),xj=["noscript","script","style"],tf=(e,t=!0)=>t===!1?String(e):String(e).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"),I0=e=>Object.keys(e).reduce((t,n)=>{const r=typeof e[n]<"u"?`${n}="${e[n]}"`:`${n}`;return t?`${t} ${r}`:r},""),bj=(e,t,n,r)=>{const i=I0(n),o=E0(t);return i?`<${e} ${$n}="true" ${i}>${tf(o,r)}`:`<${e} ${$n}="true">${tf(o,r)}`},kj=(e,t,n=!0)=>t.reduce((r,i)=>{const o=i,a=Object.keys(o).filter(u=>!(u==="innerHTML"||u==="cssText")).reduce((u,d)=>{const h=typeof o[d]>"u"?d:`${d}="${tf(o[d],n)}"`;return u?`${u} ${h}`:h},""),s=o.innerHTML||o.cssText||"",c=xj.indexOf(e)===-1;return`${r}<${e} ${$n}="true" ${a}${c?"/>":`>${s}`}`},""),N0=(e,t={})=>Object.keys(e).reduce((n,r)=>{const i=Vp[r];return n[i||r]=e[r],n},t),Sj=(e,t,n)=>{const r={key:t,[$n]:!0},i=N0(n,r);return[W.createElement("title",i,t)]},lc=(e,t)=>t.map((n,r)=>{const i={key:r,[$n]:!0};return Object.keys(n).forEach(o=>{const s=Vp[o]||o;if(s==="innerHTML"||s==="cssText"){const c=n.innerHTML||n.cssText;i.dangerouslySetInnerHTML={__html:c}}else i[s]=n[o]}),W.createElement(e,i)}),vn=(e,t,n=!0)=>{switch(e){case"title":return{toComponent:()=>Sj(e,t.title,t.titleAttributes),toString:()=>bj(e,t.title,t.titleAttributes,n)};case"bodyAttributes":case"htmlAttributes":return{toComponent:()=>N0(t),toString:()=>I0(t)};default:return{toComponent:()=>lc(e,t),toString:()=>kj(e,t,n)}}},Cj=({metaTags:e,linkTags:t,scriptTags:n,encode:r})=>{const i=Td(e,Cd.meta),o=Td(t,Cd.link),a=Td(n,Cd.script);return{priorityMethods:{toComponent:()=>[...lc("meta",i.priority),...lc("link",o.priority),...lc("script",a.priority)],toString:()=>`${vn("meta",i.priority,r)} ${vn("link",o.priority,r)} ${vn("script",a.priority,r)}`},metaTags:i.default,linkTags:o.default,scriptTags:a.default}},Aj=e=>{const{baseTag:t,bodyAttributes:n,encode:r=!0,htmlAttributes:i,noscriptTags:o,styleTags:a,title:s="",titleAttributes:c,prioritizeSeoTags:u}=e;let{linkTags:d,metaTags:h,scriptTags:p}=e,f={toComponent:()=>{},toString:()=>""};return u&&({priorityMethods:f,linkTags:d,metaTags:h,scriptTags:p}=Cj(e)),{priority:f,base:vn("base",t,r),bodyAttributes:vn("bodyAttributes",n,r),htmlAttributes:vn("htmlAttributes",i,r),link:vn("link",d,r),meta:vn("meta",h,r),noscript:vn("noscript",o,r),script:vn("script",p,r),style:vn("style",a,r),title:vn("title",{title:s,titleAttributes:c},r)}},nf=Aj,Pl=[],_0=!!(typeof window<"u"&&window.document&&window.document.createElement),rf=class{constructor(e,t){vr(this,"instances",[]);vr(this,"canUseDOM",_0);vr(this,"context");vr(this,"value",{setHelmet:e=>{this.context.helmet=e},helmetInstances:{get:()=>this.canUseDOM?Pl:this.instances,add:e=>{(this.canUseDOM?Pl:this.instances).push(e)},remove:e=>{const t=(this.canUseDOM?Pl:this.instances).indexOf(e);(this.canUseDOM?Pl:this.instances).splice(t,1)}}});this.context=e,this.canUseDOM=t||!1,t||(e.helmet=nf({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))}},Tj={},P0=W.createContext(Tj),Ui,R0=(Ui=class extends x.Component{constructor(n){super(n);vr(this,"helmetData");this.helmetData=new rf(this.props.context||{},Ui.canUseDOM)}render(){return W.createElement(P0.Provider,{value:this.helmetData.value},this.props.children)}},vr(Ui,"canUseDOM",_0),Ui),So=(e,t)=>{const n=document.head||document.querySelector("head"),r=n.querySelectorAll(`${e}[${$n}]`),i=[].slice.call(r),o=[];let a;return t&&t.length&&t.forEach(s=>{const c=document.createElement(e);for(const u in s)if(Object.prototype.hasOwnProperty.call(s,u))if(u==="innerHTML")c.innerHTML=s.innerHTML;else if(u==="cssText")c.styleSheet?c.styleSheet.cssText=s.cssText:c.appendChild(document.createTextNode(s.cssText));else{const d=u,h=typeof s[d]>"u"?"":s[d];c.setAttribute(u,h)}c.setAttribute($n,"true"),i.some((u,d)=>(a=d,c.isEqualNode(u)))?i.splice(a,1):o.push(c)}),i.forEach(s=>{var c;return(c=s.parentNode)==null?void 0:c.removeChild(s)}),o.forEach(s=>n.appendChild(s)),{oldTags:i,newTags:o}},of=(e,t)=>{const n=document.getElementsByTagName(e)[0];if(!n)return;const r=n.getAttribute($n),i=r?r.split(","):[],o=[...i],a=Object.keys(t);for(const s of a){const c=t[s]||"";n.getAttribute(s)!==c&&n.setAttribute(s,c),i.indexOf(s)===-1&&i.push(s);const u=o.indexOf(s);u!==-1&&o.splice(u,1)}for(let s=o.length-1;s>=0;s-=1)n.removeAttribute(o[s]);i.length===o.length?n.removeAttribute($n):n.getAttribute($n)!==a.join(",")&&n.setAttribute($n,a.join(","))},jj=(e,t)=>{typeof e<"u"&&document.title!==e&&(document.title=E0(e)),of("title",t)},sy=(e,t)=>{const{baseTag:n,bodyAttributes:r,htmlAttributes:i,linkTags:o,metaTags:a,noscriptTags:s,onChangeClientState:c,scriptTags:u,styleTags:d,title:h,titleAttributes:p}=e;of("body",r),of("html",i),jj(h,p);const f={baseTag:So("base",n),linkTags:So("link",o),metaTags:So("meta",a),noscriptTags:So("noscript",s),scriptTags:So("script",u),styleTags:So("style",d)},v={},m={};Object.keys(f).forEach(b=>{const{newTags:g,oldTags:y}=f[b];g.length&&(v[b]=g),y.length&&(m[b]=f[b].oldTags)}),t&&t(),c(e,v,m)},Ua=null,Ej=e=>{Ua&&cancelAnimationFrame(Ua),e.defer?Ua=requestAnimationFrame(()=>{sy(e,()=>{Ua=null})}):(sy(e),Ua=null)},Ij=Ej,ly=class extends x.Component{constructor(){super(...arguments);vr(this,"rendered",!1)}shouldComponentUpdate(t){return!dj(t,this.props)}componentDidUpdate(){this.emitChange()}componentWillUnmount(){const{helmetInstances:t}=this.props.context;t.remove(this),this.emitChange()}emitChange(){const{helmetInstances:t,setHelmet:n}=this.props.context;let r=null;const i=vj(t.get().map(o=>{const a={...o.props};return delete a.context,a}));R0.canUseDOM?Ij(i):nf&&(r=nf(i)),n(r)}init(){if(this.rendered)return;this.rendered=!0;const{helmetInstances:t}=this.props.context;t.add(this),this.emitChange()}render(){return this.init(),null}},lh,Kn=(lh=class extends x.Component{shouldComponentUpdate(e){return!sj(ay(this.props,"helmetData"),ay(e,"helmetData"))}mapNestedChildrenToProps(e,t){if(!t)return null;switch(e.type){case"script":case"noscript":return{innerHTML:t};case"style":return{cssText:t};default:throw new Error(`<${e.type} /> elements are self-closing and can not contain children. Refer to our API for more information.`)}}flattenArrayTypeChildren(e,t,n,r){return{...t,[e.type]:[...t[e.type]||[],{...n,...this.mapNestedChildrenToProps(e,r)}]}}mapObjectTypeChildren(e,t,n,r){switch(e.type){case"title":return{...t,[e.type]:r,titleAttributes:{...n}};case"body":return{...t,bodyAttributes:{...n}};case"html":return{...t,htmlAttributes:{...n}};default:return{...t,[e.type]:{...n}}}}mapArrayTypeChildrenToProps(e,t){let n={...t};return Object.keys(e).forEach(r=>{n={...n,[r]:e[r]}}),n}warnOnInvalidChildren(e,t){return iy(oy.some(n=>e.type===n),typeof e.type=="function"?"You may be attempting to nest components within each other, which is not allowed. Refer to our API for more information.":`Only elements types ${oy.join(", ")} are allowed. Helmet does not support rendering <${e.type}> elements. Refer to our API for more information.`),iy(!t||typeof t=="string"||Array.isArray(t)&&!t.some(n=>typeof n!="string"),`Helmet expects a string as a child of <${e.type}>. Did you forget to wrap your children in braces? ( <${e.type}>{\`\`} ) Refer to our API for more information.`),!0}mapChildrenToProps(e,t){let n={};return W.Children.forEach(e,r=>{if(!r||!r.props)return;const{children:i,...o}=r.props,a=Object.keys(o).reduce((c,u)=>(c[hj[u]||u]=o[u],c),{});let{type:s}=r;switch(typeof s=="symbol"?s=s.toString():this.warnOnInvalidChildren(r,i),s){case"Symbol(react.fragment)":t=this.mapChildrenToProps(i,t);break;case"link":case"meta":case"noscript":case"script":case"style":n=this.flattenArrayTypeChildren(r,n,a,i);break;default:t=this.mapObjectTypeChildren(r,t,a,i);break}}),this.mapArrayTypeChildrenToProps(n,t)}render(){const{children:e,...t}=this.props;let n={...t},{helmetData:r}=t;if(e&&(n=this.mapChildrenToProps(e,n)),r&&!(r instanceof rf)){const i=r;r=new rf(i.context,!0),delete n.helmetData}return r?W.createElement(ly,{...n,context:r.value}):W.createElement(P0.Consumer,null,i=>W.createElement(ly,{...n,context:i}))}},vr(lh,"defaultProps",{defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1}),lh);const Nj=1,_j=1e6;let jd=0;function Pj(){return jd=(jd+1)%Number.MAX_SAFE_INTEGER,jd.toString()}const Ed=new Map,cy=e=>{if(Ed.has(e))return;const t=setTimeout(()=>{Ed.delete(e),ys({type:"REMOVE_TOAST",toastId:e})},_j);Ed.set(e,t)},Rj=(e,t)=>{switch(t.type){case"ADD_TOAST":return{...e,toasts:[t.toast,...e.toasts].slice(0,Nj)};case"UPDATE_TOAST":return{...e,toasts:e.toasts.map(n=>n.id===t.toast.id?{...n,...t.toast}:n)};case"DISMISS_TOAST":{const{toastId:n}=t;return n?cy(n):e.toasts.forEach(r=>{cy(r.id)}),{...e,toasts:e.toasts.map(r=>r.id===n||n===void 0?{...r,open:!1}:r)}}case"REMOVE_TOAST":return t.toastId===void 0?{...e,toasts:[]}:{...e,toasts:e.toasts.filter(n=>n.id!==t.toastId)}}},cc=[];let uc={toasts:[]};function ys(e){uc=Rj(uc,e),cc.forEach(t=>{t(uc)})}function Fj({...e}){const t=Pj(),n=i=>ys({type:"UPDATE_TOAST",toast:{...i,id:t}}),r=()=>ys({type:"DISMISS_TOAST",toastId:t});return ys({type:"ADD_TOAST",toast:{...e,id:t,open:!0,onOpenChange:i=>{i||r()}}}),{id:t,dismiss:r,update:n}}function Mj(){const[e,t]=x.useState(uc);return x.useEffect(()=>(cc.push(t),()=>{const n=cc.indexOf(t);n>-1&&cc.splice(n,1)}),[e]),{...e,toast:Fj,dismiss:n=>ys({type:"DISMISS_TOAST",toastId:n})}}function ge(e,t,{checkForDefaultPrevented:n=!0}={}){return function(i){if(e==null||e(i),n===!1||!i.defaultPrevented)return t==null?void 0:t(i)}}function uy(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function F0(...e){return t=>{let n=!1;const r=e.map(i=>{const o=uy(i,t);return!n&&typeof o=="function"&&(n=!0),o});if(n)return()=>{for(let i=0;i{const{children:a,...s}=o,c=x.useMemo(()=>s,Object.values(s));return l.jsx(n.Provider,{value:c,children:a})};r.displayName=e+"Provider";function i(o){const a=x.useContext(n);if(a)return a;if(t!==void 0)return t;throw new Error(`\`${o}\` must be used within \`${e}\``)}return[r,i]}function vo(e,t=[]){let n=[];function r(o,a){const s=x.createContext(a),c=n.length;n=[...n,a];const u=h=>{var g;const{scope:p,children:f,...v}=h,m=((g=p==null?void 0:p[e])==null?void 0:g[c])||s,b=x.useMemo(()=>v,Object.values(v));return l.jsx(m.Provider,{value:b,children:f})};u.displayName=o+"Provider";function d(h,p){var m;const f=((m=p==null?void 0:p[e])==null?void 0:m[c])||s,v=x.useContext(f);if(v)return v;if(a!==void 0)return a;throw new Error(`\`${h}\` must be used within \`${o}\``)}return[u,d]}const i=()=>{const o=n.map(a=>x.createContext(a));return function(s){const c=(s==null?void 0:s[e])||o;return x.useMemo(()=>({[`__scope${e}`]:{...s,[e]:c}}),[s,c])}};return i.scopeName=e,[r,Dj(i,...t)]}function Dj(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(i=>({useScope:i(),scopeName:i.scopeName}));return function(o){const a=r.reduce((s,{useScope:c,scopeName:u})=>{const h=c(o)[`__scope${u}`];return{...s,...h}},{});return x.useMemo(()=>({[`__scope${t.scopeName}`]:a}),[a])}};return n.scopeName=t.scopeName,n}function ya(e){const t=zj(e),n=x.forwardRef((r,i)=>{const{children:o,...a}=r,s=x.Children.toArray(o),c=s.find(Hj);if(c){const u=c.props.children,d=s.map(h=>h===c?x.Children.count(u)>1?x.Children.only(null):x.isValidElement(u)?u.props.children:null:h);return l.jsx(t,{...a,ref:i,children:x.isValidElement(u)?x.cloneElement(u,void 0,d):null})}return l.jsx(t,{...a,ref:i,children:o})});return n.displayName=`${e}.Slot`,n}var Lj=ya("Slot");function zj(e){const t=x.forwardRef((n,r)=>{const{children:i,...o}=n;if(x.isValidElement(i)){const a=Wj(i),s=$j(o,i.props);return i.type!==x.Fragment&&(s.ref=r?F0(r,a):a),x.cloneElement(i,s)}return x.Children.count(i)>1?x.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var M0=Symbol("radix.slottable");function Bj(e){const t=({children:n})=>l.jsx(l.Fragment,{children:n});return t.displayName=`${e}.Slottable`,t.__radixId=M0,t}function Hj(e){return x.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===M0}function $j(e,t){const n={...t};for(const r in t){const i=e[r],o=t[r];/^on[A-Z]/.test(r)?i&&o?n[r]=(...s)=>{const c=o(...s);return i(...s),c}:i&&(n[r]=i):r==="style"?n[r]={...i,...o}:r==="className"&&(n[r]=[i,o].filter(Boolean).join(" "))}return{...e,...n}}function Wj(e){var r,i;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(i=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:i.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}function O0(e){const t=e+"CollectionProvider",[n,r]=vo(t),[i,o]=n(t,{collectionRef:{current:null},itemMap:new Map}),a=m=>{const{scope:b,children:g}=m,y=W.useRef(null),w=W.useRef(new Map).current;return l.jsx(i,{scope:b,itemMap:w,collectionRef:y,children:g})};a.displayName=t;const s=e+"CollectionSlot",c=ya(s),u=W.forwardRef((m,b)=>{const{scope:g,children:y}=m,w=o(s,g),k=He(b,w.collectionRef);return l.jsx(c,{ref:k,children:y})});u.displayName=s;const d=e+"CollectionItemSlot",h="data-radix-collection-item",p=ya(d),f=W.forwardRef((m,b)=>{const{scope:g,children:y,...w}=m,k=W.useRef(null),A=He(b,k),C=o(d,g);return W.useEffect(()=>(C.itemMap.set(k,{ref:k,...w}),()=>void C.itemMap.delete(k))),l.jsx(p,{[h]:"",ref:A,children:y})});f.displayName=d;function v(m){const b=o(e+"CollectionConsumer",m);return W.useCallback(()=>{const y=b.collectionRef.current;if(!y)return[];const w=Array.from(y.querySelectorAll(`[${h}]`));return Array.from(b.itemMap.values()).sort((C,I)=>w.indexOf(C.ref.current)-w.indexOf(I.ref.current))},[b.collectionRef,b.itemMap])}return[{Provider:a,Slot:u,ItemSlot:f},v,r]}var Vj=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],je=Vj.reduce((e,t)=>{const n=ya(`Primitive.${t}`),r=x.forwardRef((i,o)=>{const{asChild:a,...s}=i,c=a?n:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),l.jsx(c,{...s,ref:o})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function D0(e,t){e&&yo.flushSync(()=>e.dispatchEvent(t))}function Yn(e){const t=x.useRef(e);return x.useEffect(()=>{t.current=e}),x.useMemo(()=>(...n)=>{var r;return(r=t.current)==null?void 0:r.call(t,...n)},[])}function qj(e,t=globalThis==null?void 0:globalThis.document){const n=Yn(e);x.useEffect(()=>{const r=i=>{i.key==="Escape"&&n(i)};return t.addEventListener("keydown",r,{capture:!0}),()=>t.removeEventListener("keydown",r,{capture:!0})},[n,t])}var Uj="DismissableLayer",af="dismissableLayer.update",Yj="dismissableLayer.pointerDownOutside",Qj="dismissableLayer.focusOutside",dy,L0=x.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),ol=x.forwardRef((e,t)=>{const{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:i,onFocusOutside:o,onInteractOutside:a,onDismiss:s,...c}=e,u=x.useContext(L0),[d,h]=x.useState(null),p=(d==null?void 0:d.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,f]=x.useState({}),v=He(t,I=>h(I)),m=Array.from(u.layers),[b]=[...u.layersWithOutsidePointerEventsDisabled].slice(-1),g=m.indexOf(b),y=d?m.indexOf(d):-1,w=u.layersWithOutsidePointerEventsDisabled.size>0,k=y>=g,A=Kj(I=>{const F=I.target,D=[...u.branches].some(j=>j.contains(F));!k||D||(i==null||i(I),a==null||a(I),I.defaultPrevented||s==null||s())},p),C=Zj(I=>{const F=I.target;[...u.branches].some(j=>j.contains(F))||(o==null||o(I),a==null||a(I),I.defaultPrevented||s==null||s())},p);return qj(I=>{y===u.layers.size-1&&(r==null||r(I),!I.defaultPrevented&&s&&(I.preventDefault(),s()))},p),x.useEffect(()=>{if(d)return n&&(u.layersWithOutsidePointerEventsDisabled.size===0&&(dy=p.body.style.pointerEvents,p.body.style.pointerEvents="none"),u.layersWithOutsidePointerEventsDisabled.add(d)),u.layers.add(d),hy(),()=>{n&&u.layersWithOutsidePointerEventsDisabled.size===1&&(p.body.style.pointerEvents=dy)}},[d,p,n,u]),x.useEffect(()=>()=>{d&&(u.layers.delete(d),u.layersWithOutsidePointerEventsDisabled.delete(d),hy())},[d,u]),x.useEffect(()=>{const I=()=>f({});return document.addEventListener(af,I),()=>document.removeEventListener(af,I)},[]),l.jsx(je.div,{...c,ref:v,style:{pointerEvents:w?k?"auto":"none":void 0,...e.style},onFocusCapture:ge(e.onFocusCapture,C.onFocusCapture),onBlurCapture:ge(e.onBlurCapture,C.onBlurCapture),onPointerDownCapture:ge(e.onPointerDownCapture,A.onPointerDownCapture)})});ol.displayName=Uj;var Gj="DismissableLayerBranch",z0=x.forwardRef((e,t)=>{const n=x.useContext(L0),r=x.useRef(null),i=He(t,r);return x.useEffect(()=>{const o=r.current;if(o)return n.branches.add(o),()=>{n.branches.delete(o)}},[n.branches]),l.jsx(je.div,{...e,ref:i})});z0.displayName=Gj;function Kj(e,t=globalThis==null?void 0:globalThis.document){const n=Yn(e),r=x.useRef(!1),i=x.useRef(()=>{});return x.useEffect(()=>{const o=s=>{if(s.target&&!r.current){let c=function(){B0(Yj,n,u,{discrete:!0})};const u={originalEvent:s};s.pointerType==="touch"?(t.removeEventListener("click",i.current),i.current=c,t.addEventListener("click",i.current,{once:!0})):c()}else t.removeEventListener("click",i.current);r.current=!1},a=window.setTimeout(()=>{t.addEventListener("pointerdown",o)},0);return()=>{window.clearTimeout(a),t.removeEventListener("pointerdown",o),t.removeEventListener("click",i.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function Zj(e,t=globalThis==null?void 0:globalThis.document){const n=Yn(e),r=x.useRef(!1);return x.useEffect(()=>{const i=o=>{o.target&&!r.current&&B0(Qj,n,{originalEvent:o},{discrete:!1})};return t.addEventListener("focusin",i),()=>t.removeEventListener("focusin",i)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function hy(){const e=new CustomEvent(af);document.dispatchEvent(e)}function B0(e,t,n,{discrete:r}){const i=n.originalEvent.target,o=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&i.addEventListener(e,t,{once:!0}),r?D0(i,o):i.dispatchEvent(o)}var Xj=ol,Jj=z0,At=globalThis!=null&&globalThis.document?x.useLayoutEffect:()=>{},eE="Portal",Au=x.forwardRef((e,t)=>{var s;const{container:n,...r}=e,[i,o]=x.useState(!1);At(()=>o(!0),[]);const a=n||i&&((s=globalThis==null?void 0:globalThis.document)==null?void 0:s.body);return a?A0.createPortal(l.jsx(je.div,{...r,ref:t}),a):null});Au.displayName=eE;function tE(e,t){return x.useReducer((n,r)=>t[n][r]??n,e)}var wo=e=>{const{present:t,children:n}=e,r=nE(t),i=typeof n=="function"?n({present:r.isPresent}):x.Children.only(n),o=He(r.ref,rE(i));return typeof n=="function"||r.isPresent?x.cloneElement(i,{ref:o}):null};wo.displayName="Presence";function nE(e){const[t,n]=x.useState(),r=x.useRef(null),i=x.useRef(e),o=x.useRef("none"),a=e?"mounted":"unmounted",[s,c]=tE(a,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return x.useEffect(()=>{const u=Rl(r.current);o.current=s==="mounted"?u:"none"},[s]),At(()=>{const u=r.current,d=i.current;if(d!==e){const p=o.current,f=Rl(u);e?c("MOUNT"):f==="none"||(u==null?void 0:u.display)==="none"?c("UNMOUNT"):c(d&&p!==f?"ANIMATION_OUT":"UNMOUNT"),i.current=e}},[e,c]),At(()=>{if(t){let u;const d=t.ownerDocument.defaultView??window,h=f=>{const m=Rl(r.current).includes(f.animationName);if(f.target===t&&m&&(c("ANIMATION_END"),!i.current)){const b=t.style.animationFillMode;t.style.animationFillMode="forwards",u=d.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=b)})}},p=f=>{f.target===t&&(o.current=Rl(r.current))};return t.addEventListener("animationstart",p),t.addEventListener("animationcancel",h),t.addEventListener("animationend",h),()=>{d.clearTimeout(u),t.removeEventListener("animationstart",p),t.removeEventListener("animationcancel",h),t.removeEventListener("animationend",h)}}else c("ANIMATION_END")},[t,c]),{isPresent:["mounted","unmountSuspended"].includes(s),ref:x.useCallback(u=>{r.current=u?getComputedStyle(u):null,n(u)},[])}}function Rl(e){return(e==null?void 0:e.animationName)||"none"}function rE(e){var r,i;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(i=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:i.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var iE=Jf[" useInsertionEffect ".trim().toString()]||At;function Bs({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){const[i,o,a]=oE({defaultProp:t,onChange:n}),s=e!==void 0,c=s?e:i;{const d=x.useRef(e!==void 0);x.useEffect(()=>{const h=d.current;h!==s&&console.warn(`${r} is changing from ${h?"controlled":"uncontrolled"} to ${s?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),d.current=s},[s,r])}const u=x.useCallback(d=>{var h;if(s){const p=aE(d)?d(e):d;p!==e&&((h=a.current)==null||h.call(a,p))}else o(d)},[s,e,o,a]);return[c,u]}function oE({defaultProp:e,onChange:t}){const[n,r]=x.useState(e),i=x.useRef(n),o=x.useRef(t);return iE(()=>{o.current=t},[t]),x.useEffect(()=>{var a;i.current!==n&&((a=o.current)==null||a.call(o,n),i.current=n)},[n,i]),[n,r,o]}function aE(e){return typeof e=="function"}var H0=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"}),sE="VisuallyHidden",Tu=x.forwardRef((e,t)=>l.jsx(je.span,{...e,ref:t,style:{...H0,...e.style}}));Tu.displayName=sE;var lE=Tu,qp="ToastProvider",[Up,cE,uE]=O0("Toast"),[$0,N8]=vo("Toast",[uE]),[dE,ju]=$0(qp),W0=e=>{const{__scopeToast:t,label:n="Notification",duration:r=5e3,swipeDirection:i="right",swipeThreshold:o=50,children:a}=e,[s,c]=x.useState(null),[u,d]=x.useState(0),h=x.useRef(!1),p=x.useRef(!1);return n.trim()||console.error(`Invalid prop \`label\` supplied to \`${qp}\`. Expected non-empty \`string\`.`),l.jsx(Up.Provider,{scope:t,children:l.jsx(dE,{scope:t,label:n,duration:r,swipeDirection:i,swipeThreshold:o,toastCount:u,viewport:s,onViewportChange:c,onToastAdd:x.useCallback(()=>d(f=>f+1),[]),onToastRemove:x.useCallback(()=>d(f=>f-1),[]),isFocusedToastEscapeKeyDownRef:h,isClosePausedRef:p,children:a})})};W0.displayName=qp;var V0="ToastViewport",hE=["F8"],sf="toast.viewportPause",lf="toast.viewportResume",q0=x.forwardRef((e,t)=>{const{__scopeToast:n,hotkey:r=hE,label:i="Notifications ({hotkey})",...o}=e,a=ju(V0,n),s=cE(n),c=x.useRef(null),u=x.useRef(null),d=x.useRef(null),h=x.useRef(null),p=He(t,h,a.onViewportChange),f=r.join("+").replace(/Key/g,"").replace(/Digit/g,""),v=a.toastCount>0;x.useEffect(()=>{const b=g=>{var w;r.length!==0&&r.every(k=>g[k]||g.code===k)&&((w=h.current)==null||w.focus())};return document.addEventListener("keydown",b),()=>document.removeEventListener("keydown",b)},[r]),x.useEffect(()=>{const b=c.current,g=h.current;if(v&&b&&g){const y=()=>{if(!a.isClosePausedRef.current){const C=new CustomEvent(sf);g.dispatchEvent(C),a.isClosePausedRef.current=!0}},w=()=>{if(a.isClosePausedRef.current){const C=new CustomEvent(lf);g.dispatchEvent(C),a.isClosePausedRef.current=!1}},k=C=>{!b.contains(C.relatedTarget)&&w()},A=()=>{b.contains(document.activeElement)||w()};return b.addEventListener("focusin",y),b.addEventListener("focusout",k),b.addEventListener("pointermove",y),b.addEventListener("pointerleave",A),window.addEventListener("blur",y),window.addEventListener("focus",w),()=>{b.removeEventListener("focusin",y),b.removeEventListener("focusout",k),b.removeEventListener("pointermove",y),b.removeEventListener("pointerleave",A),window.removeEventListener("blur",y),window.removeEventListener("focus",w)}}},[v,a.isClosePausedRef]);const m=x.useCallback(({tabbingDirection:b})=>{const y=s().map(w=>{const k=w.ref.current,A=[k,...AE(k)];return b==="forwards"?A:A.reverse()});return(b==="forwards"?y.reverse():y).flat()},[s]);return x.useEffect(()=>{const b=h.current;if(b){const g=y=>{var A,C,I;const w=y.altKey||y.ctrlKey||y.metaKey;if(y.key==="Tab"&&!w){const F=document.activeElement,D=y.shiftKey;if(y.target===b&&D){(A=u.current)==null||A.focus();return}const _=m({tabbingDirection:D?"backwards":"forwards"}),$=_.findIndex(O=>O===F);Id(_.slice($+1))?y.preventDefault():D?(C=u.current)==null||C.focus():(I=d.current)==null||I.focus()}};return b.addEventListener("keydown",g),()=>b.removeEventListener("keydown",g)}},[s,m]),l.jsxs(Jj,{ref:c,role:"region","aria-label":i.replace("{hotkey}",f),tabIndex:-1,style:{pointerEvents:v?void 0:"none"},children:[v&&l.jsx(cf,{ref:u,onFocusFromOutsideViewport:()=>{const b=m({tabbingDirection:"forwards"});Id(b)}}),l.jsx(Up.Slot,{scope:n,children:l.jsx(je.ol,{tabIndex:-1,...o,ref:p})}),v&&l.jsx(cf,{ref:d,onFocusFromOutsideViewport:()=>{const b=m({tabbingDirection:"backwards"});Id(b)}})]})});q0.displayName=V0;var U0="ToastFocusProxy",cf=x.forwardRef((e,t)=>{const{__scopeToast:n,onFocusFromOutsideViewport:r,...i}=e,o=ju(U0,n);return l.jsx(Tu,{"aria-hidden":!0,tabIndex:0,...i,ref:t,style:{position:"fixed"},onFocus:a=>{var u;const s=a.relatedTarget;!((u=o.viewport)!=null&&u.contains(s))&&r()}})});cf.displayName=U0;var al="Toast",fE="toast.swipeStart",pE="toast.swipeMove",mE="toast.swipeCancel",gE="toast.swipeEnd",Y0=x.forwardRef((e,t)=>{const{forceMount:n,open:r,defaultOpen:i,onOpenChange:o,...a}=e,[s,c]=Bs({prop:r,defaultProp:i??!0,onChange:o,caller:al});return l.jsx(wo,{present:n||s,children:l.jsx(wE,{open:s,...a,ref:t,onClose:()=>c(!1),onPause:Yn(e.onPause),onResume:Yn(e.onResume),onSwipeStart:ge(e.onSwipeStart,u=>{u.currentTarget.setAttribute("data-swipe","start")}),onSwipeMove:ge(e.onSwipeMove,u=>{const{x:d,y:h}=u.detail.delta;u.currentTarget.setAttribute("data-swipe","move"),u.currentTarget.style.setProperty("--radix-toast-swipe-move-x",`${d}px`),u.currentTarget.style.setProperty("--radix-toast-swipe-move-y",`${h}px`)}),onSwipeCancel:ge(e.onSwipeCancel,u=>{u.currentTarget.setAttribute("data-swipe","cancel"),u.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"),u.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"),u.currentTarget.style.removeProperty("--radix-toast-swipe-end-x"),u.currentTarget.style.removeProperty("--radix-toast-swipe-end-y")}),onSwipeEnd:ge(e.onSwipeEnd,u=>{const{x:d,y:h}=u.detail.delta;u.currentTarget.setAttribute("data-swipe","end"),u.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"),u.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"),u.currentTarget.style.setProperty("--radix-toast-swipe-end-x",`${d}px`),u.currentTarget.style.setProperty("--radix-toast-swipe-end-y",`${h}px`),c(!1)})})})});Y0.displayName=al;var[yE,vE]=$0(al,{onClose(){}}),wE=x.forwardRef((e,t)=>{const{__scopeToast:n,type:r="foreground",duration:i,open:o,onClose:a,onEscapeKeyDown:s,onPause:c,onResume:u,onSwipeStart:d,onSwipeMove:h,onSwipeCancel:p,onSwipeEnd:f,...v}=e,m=ju(al,n),[b,g]=x.useState(null),y=He(t,O=>g(O)),w=x.useRef(null),k=x.useRef(null),A=i||m.duration,C=x.useRef(0),I=x.useRef(A),F=x.useRef(0),{onToastAdd:D,onToastRemove:j}=m,R=Yn(()=>{var V;(b==null?void 0:b.contains(document.activeElement))&&((V=m.viewport)==null||V.focus()),a()}),_=x.useCallback(O=>{!O||O===1/0||(window.clearTimeout(F.current),C.current=new Date().getTime(),F.current=window.setTimeout(R,O))},[R]);x.useEffect(()=>{const O=m.viewport;if(O){const V=()=>{_(I.current),u==null||u()},U=()=>{const K=new Date().getTime()-C.current;I.current=I.current-K,window.clearTimeout(F.current),c==null||c()};return O.addEventListener(sf,U),O.addEventListener(lf,V),()=>{O.removeEventListener(sf,U),O.removeEventListener(lf,V)}}},[m.viewport,A,c,u,_]),x.useEffect(()=>{o&&!m.isClosePausedRef.current&&_(A)},[o,A,m.isClosePausedRef,_]),x.useEffect(()=>(D(),()=>j()),[D,j]);const $=x.useMemo(()=>b?e1(b):null,[b]);return m.viewport?l.jsxs(l.Fragment,{children:[$&&l.jsx(xE,{__scopeToast:n,role:"status","aria-live":r==="foreground"?"assertive":"polite","aria-atomic":!0,children:$}),l.jsx(yE,{scope:n,onClose:R,children:yo.createPortal(l.jsx(Up.ItemSlot,{scope:n,children:l.jsx(Xj,{asChild:!0,onEscapeKeyDown:ge(s,()=>{m.isFocusedToastEscapeKeyDownRef.current||R(),m.isFocusedToastEscapeKeyDownRef.current=!1}),children:l.jsx(je.li,{role:"status","aria-live":"off","aria-atomic":!0,tabIndex:0,"data-state":o?"open":"closed","data-swipe-direction":m.swipeDirection,...v,ref:y,style:{userSelect:"none",touchAction:"none",...e.style},onKeyDown:ge(e.onKeyDown,O=>{O.key==="Escape"&&(s==null||s(O.nativeEvent),O.nativeEvent.defaultPrevented||(m.isFocusedToastEscapeKeyDownRef.current=!0,R()))}),onPointerDown:ge(e.onPointerDown,O=>{O.button===0&&(w.current={x:O.clientX,y:O.clientY})}),onPointerMove:ge(e.onPointerMove,O=>{if(!w.current)return;const V=O.clientX-w.current.x,U=O.clientY-w.current.y,K=!!k.current,M=["left","right"].includes(m.swipeDirection),L=["left","up"].includes(m.swipeDirection)?Math.min:Math.max,S=M?L(0,V):0,oe=M?0:L(0,U),ne=O.pointerType==="touch"?10:2,T={x:S,y:oe},le={originalEvent:O,delta:T};K?(k.current=T,Fl(pE,h,le,{discrete:!1})):fy(T,m.swipeDirection,ne)?(k.current=T,Fl(fE,d,le,{discrete:!1}),O.target.setPointerCapture(O.pointerId)):(Math.abs(V)>ne||Math.abs(U)>ne)&&(w.current=null)}),onPointerUp:ge(e.onPointerUp,O=>{const V=k.current,U=O.target;if(U.hasPointerCapture(O.pointerId)&&U.releasePointerCapture(O.pointerId),k.current=null,w.current=null,V){const K=O.currentTarget,M={originalEvent:O,delta:V};fy(V,m.swipeDirection,m.swipeThreshold)?Fl(gE,f,M,{discrete:!0}):Fl(mE,p,M,{discrete:!0}),K.addEventListener("click",L=>L.preventDefault(),{once:!0})}})})})}),m.viewport)})]}):null}),xE=e=>{const{__scopeToast:t,children:n,...r}=e,i=ju(al,t),[o,a]=x.useState(!1),[s,c]=x.useState(!1);return SE(()=>a(!0)),x.useEffect(()=>{const u=window.setTimeout(()=>c(!0),1e3);return()=>window.clearTimeout(u)},[]),s?null:l.jsx(Au,{asChild:!0,children:l.jsx(Tu,{...r,children:o&&l.jsxs(l.Fragment,{children:[i.label," ",n]})})})},bE="ToastTitle",Q0=x.forwardRef((e,t)=>{const{__scopeToast:n,...r}=e;return l.jsx(je.div,{...r,ref:t})});Q0.displayName=bE;var kE="ToastDescription",G0=x.forwardRef((e,t)=>{const{__scopeToast:n,...r}=e;return l.jsx(je.div,{...r,ref:t})});G0.displayName=kE;var K0="ToastAction",Z0=x.forwardRef((e,t)=>{const{altText:n,...r}=e;return n.trim()?l.jsx(J0,{altText:n,asChild:!0,children:l.jsx(Yp,{...r,ref:t})}):(console.error(`Invalid prop \`altText\` supplied to \`${K0}\`. Expected non-empty \`string\`.`),null)});Z0.displayName=K0;var X0="ToastClose",Yp=x.forwardRef((e,t)=>{const{__scopeToast:n,...r}=e,i=vE(X0,n);return l.jsx(J0,{asChild:!0,children:l.jsx(je.button,{type:"button",...r,ref:t,onClick:ge(e.onClick,i.onClose)})})});Yp.displayName=X0;var J0=x.forwardRef((e,t)=>{const{__scopeToast:n,altText:r,...i}=e;return l.jsx(je.div,{"data-radix-toast-announce-exclude":"","data-radix-toast-announce-alt":r||void 0,...i,ref:t})});function e1(e){const t=[];return Array.from(e.childNodes).forEach(r=>{if(r.nodeType===r.TEXT_NODE&&r.textContent&&t.push(r.textContent),CE(r)){const i=r.ariaHidden||r.hidden||r.style.display==="none",o=r.dataset.radixToastAnnounceExclude==="";if(!i)if(o){const a=r.dataset.radixToastAnnounceAlt;a&&t.push(a)}else t.push(...e1(r))}}),t}function Fl(e,t,n,{discrete:r}){const i=n.originalEvent.currentTarget,o=new CustomEvent(e,{bubbles:!0,cancelable:!0,detail:n});t&&i.addEventListener(e,t,{once:!0}),r?D0(i,o):i.dispatchEvent(o)}var fy=(e,t,n=0)=>{const r=Math.abs(e.x),i=Math.abs(e.y),o=r>i;return t==="left"||t==="right"?o&&r>n:!o&&i>n};function SE(e=()=>{}){const t=Yn(e);At(()=>{let n=0,r=0;return n=window.requestAnimationFrame(()=>r=window.requestAnimationFrame(t)),()=>{window.cancelAnimationFrame(n),window.cancelAnimationFrame(r)}},[t])}function CE(e){return e.nodeType===e.ELEMENT_NODE}function AE(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const i=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||i?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function Id(e){const t=document.activeElement;return e.some(n=>n===t?!0:(n.focus(),document.activeElement!==t))}var TE=W0,t1=q0,n1=Y0,r1=Q0,i1=G0,o1=Z0,a1=Yp;function s1(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var i=e.length;for(t=0;ttypeof e=="boolean"?`${e}`:e===0?"0":e,my=l1,Qp=(e,t)=>n=>{var r;if((t==null?void 0:t.variants)==null)return my(e,n==null?void 0:n.class,n==null?void 0:n.className);const{variants:i,defaultVariants:o}=t,a=Object.keys(i).map(u=>{const d=n==null?void 0:n[u],h=o==null?void 0:o[u];if(d===null)return null;const p=py(d)||py(h);return i[u][p]}),s=n&&Object.entries(n).reduce((u,d)=>{let[h,p]=d;return p===void 0||(u[h]=p),u},{}),c=t==null||(r=t.compoundVariants)===null||r===void 0?void 0:r.reduce((u,d)=>{let{class:h,className:p,...f}=d;return Object.entries(f).every(v=>{let[m,b]=v;return Array.isArray(b)?b.includes({...o,...s}[m]):{...o,...s}[m]===b})?[...u,h,p]:u},[]);return my(e,a,c,n==null?void 0:n.class,n==null?void 0:n.className)};/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */const jE=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),c1=(...e)=>e.filter((t,n,r)=>!!t&&t.trim()!==""&&r.indexOf(t)===n).join(" ").trim();/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */var EE={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"};/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */const IE=x.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:i="",children:o,iconNode:a,...s},c)=>x.createElement("svg",{ref:c,...EE,width:t,height:t,stroke:e,strokeWidth:r?Number(n)*24/Number(t):n,className:c1("lucide",i),...s},[...a.map(([u,d])=>x.createElement(u,d)),...Array.isArray(o)?o:[o]]));/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */const Ea=(e,t)=>{const n=x.forwardRef(({className:r,...i},o)=>x.createElement(IE,{ref:o,iconNode:t,className:c1(`lucide-${jE(e)}`,r),...i}));return n.displayName=`${e}`,n};/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */const u1=Ea("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */const d1=Ea("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */const NE=Ea("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */const _E=Ea("Pause",[["rect",{x:"14",y:"4",width:"4",height:"16",rx:"1",key:"zuxfzm"}],["rect",{x:"6",y:"4",width:"4",height:"16",rx:"1",key:"1okwgv"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */const PE=Ea("Play",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */const h1=Ea("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]),Gp="-",RE=e=>{const t=ME(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:a=>{const s=a.split(Gp);return s[0]===""&&s.length!==1&&s.shift(),f1(s,t)||FE(a)},getConflictingClassGroupIds:(a,s)=>{const c=n[a]||[];return s&&r[a]?[...c,...r[a]]:c}}},f1=(e,t)=>{var a;if(e.length===0)return t.classGroupId;const n=e[0],r=t.nextPart.get(n),i=r?f1(e.slice(1),r):void 0;if(i)return i;if(t.validators.length===0)return;const o=e.join(Gp);return(a=t.validators.find(({validator:s})=>s(o)))==null?void 0:a.classGroupId},gy=/^\[(.+)\]$/,FE=e=>{if(gy.test(e)){const t=gy.exec(e)[1],n=t==null?void 0:t.substring(0,t.indexOf(":"));if(n)return"arbitrary.."+n}},ME=e=>{const{theme:t,prefix:n}=e,r={nextPart:new Map,validators:[]};return DE(Object.entries(e.classGroups),n).forEach(([o,a])=>{uf(a,r,o,t)}),r},uf=(e,t,n,r)=>{e.forEach(i=>{if(typeof i=="string"){const o=i===""?t:yy(t,i);o.classGroupId=n;return}if(typeof i=="function"){if(OE(i)){uf(i(r),t,n,r);return}t.validators.push({validator:i,classGroupId:n});return}Object.entries(i).forEach(([o,a])=>{uf(a,yy(t,o),n,r)})})},yy=(e,t)=>{let n=e;return t.split(Gp).forEach(r=>{n.nextPart.has(r)||n.nextPart.set(r,{nextPart:new Map,validators:[]}),n=n.nextPart.get(r)}),n},OE=e=>e.isThemeGetter,DE=(e,t)=>t?e.map(([n,r])=>{const i=r.map(o=>typeof o=="string"?t+o:typeof o=="object"?Object.fromEntries(Object.entries(o).map(([a,s])=>[t+a,s])):o);return[n,i]}):e,LE=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,n=new Map,r=new Map;const i=(o,a)=>{n.set(o,a),t++,t>e&&(t=0,r=n,n=new Map)};return{get(o){let a=n.get(o);if(a!==void 0)return a;if((a=r.get(o))!==void 0)return i(o,a),a},set(o,a){n.has(o)?n.set(o,a):i(o,a)}}},p1="!",zE=e=>{const{separator:t,experimentalParseClassName:n}=e,r=t.length===1,i=t[0],o=t.length,a=s=>{const c=[];let u=0,d=0,h;for(let b=0;bd?h-d:void 0;return{modifiers:c,hasImportantModifier:f,baseClassName:v,maybePostfixModifierPosition:m}};return n?s=>n({className:s,parseClassName:a}):a},BE=e=>{if(e.length<=1)return e;const t=[];let n=[];return e.forEach(r=>{r[0]==="["?(t.push(...n.sort(),r),n=[]):n.push(r)}),t.push(...n.sort()),t},HE=e=>({cache:LE(e.cacheSize),parseClassName:zE(e),...RE(e)}),$E=/\s+/,WE=(e,t)=>{const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:i}=t,o=[],a=e.trim().split($E);let s="";for(let c=a.length-1;c>=0;c-=1){const u=a[c],{modifiers:d,hasImportantModifier:h,baseClassName:p,maybePostfixModifierPosition:f}=n(u);let v=!!f,m=r(v?p.substring(0,f):p);if(!m){if(!v){s=u+(s.length>0?" "+s:s);continue}if(m=r(p),!m){s=u+(s.length>0?" "+s:s);continue}v=!1}const b=BE(d).join(":"),g=h?b+p1:b,y=g+m;if(o.includes(y))continue;o.push(y);const w=i(m,v);for(let k=0;k0?" "+s:s)}return s};function VE(){let e=0,t,n,r="";for(;e{if(typeof e=="string")return e;let t,n="";for(let r=0;rh(d),e());return n=HE(u),r=n.cache.get,i=n.cache.set,o=s,s(c)}function s(c){const u=r(c);if(u)return u;const d=WE(c,n);return i(c,d),d}return function(){return o(VE.apply(null,arguments))}}const We=e=>{const t=n=>n[e]||[];return t.isThemeGetter=!0,t},g1=/^\[(?:([a-z-]+):)?(.+)\]$/i,UE=/^\d+\/\d+$/,YE=new Set(["px","full","screen"]),QE=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,GE=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,KE=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,ZE=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,XE=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,wr=e=>Xo(e)||YE.has(e)||UE.test(e),$r=e=>Ia(e,"length",aI),Xo=e=>!!e&&!Number.isNaN(Number(e)),Nd=e=>Ia(e,"number",Xo),Ya=e=>!!e&&Number.isInteger(Number(e)),JE=e=>e.endsWith("%")&&Xo(e.slice(0,-1)),be=e=>g1.test(e),Wr=e=>QE.test(e),eI=new Set(["length","size","percentage"]),tI=e=>Ia(e,eI,y1),nI=e=>Ia(e,"position",y1),rI=new Set(["image","url"]),iI=e=>Ia(e,rI,lI),oI=e=>Ia(e,"",sI),Qa=()=>!0,Ia=(e,t,n)=>{const r=g1.exec(e);return r?r[1]?typeof t=="string"?r[1]===t:t.has(r[1]):n(r[2]):!1},aI=e=>GE.test(e)&&!KE.test(e),y1=()=>!1,sI=e=>ZE.test(e),lI=e=>XE.test(e),cI=()=>{const e=We("colors"),t=We("spacing"),n=We("blur"),r=We("brightness"),i=We("borderColor"),o=We("borderRadius"),a=We("borderSpacing"),s=We("borderWidth"),c=We("contrast"),u=We("grayscale"),d=We("hueRotate"),h=We("invert"),p=We("gap"),f=We("gradientColorStops"),v=We("gradientColorStopPositions"),m=We("inset"),b=We("margin"),g=We("opacity"),y=We("padding"),w=We("saturate"),k=We("scale"),A=We("sepia"),C=We("skew"),I=We("space"),F=We("translate"),D=()=>["auto","contain","none"],j=()=>["auto","hidden","clip","visible","scroll"],R=()=>["auto",be,t],_=()=>[be,t],$=()=>["",wr,$r],O=()=>["auto",Xo,be],V=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],U=()=>["solid","dashed","dotted","double","none"],K=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],M=()=>["start","end","center","between","around","evenly","stretch"],L=()=>["","0",be],S=()=>["auto","avoid","all","avoid-page","page","left","right","column"],oe=()=>[Xo,be];return{cacheSize:500,separator:":",theme:{colors:[Qa],spacing:[wr,$r],blur:["none","",Wr,be],brightness:oe(),borderColor:[e],borderRadius:["none","","full",Wr,be],borderSpacing:_(),borderWidth:$(),contrast:oe(),grayscale:L(),hueRotate:oe(),invert:L(),gap:_(),gradientColorStops:[e],gradientColorStopPositions:[JE,$r],inset:R(),margin:R(),opacity:oe(),padding:_(),saturate:oe(),scale:oe(),sepia:L(),skew:oe(),space:_(),translate:_()},classGroups:{aspect:[{aspect:["auto","square","video",be]}],container:["container"],columns:[{columns:[Wr]}],"break-after":[{"break-after":S()}],"break-before":[{"break-before":S()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...V(),be]}],overflow:[{overflow:j()}],"overflow-x":[{"overflow-x":j()}],"overflow-y":[{"overflow-y":j()}],overscroll:[{overscroll:D()}],"overscroll-x":[{"overscroll-x":D()}],"overscroll-y":[{"overscroll-y":D()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[m]}],"inset-x":[{"inset-x":[m]}],"inset-y":[{"inset-y":[m]}],start:[{start:[m]}],end:[{end:[m]}],top:[{top:[m]}],right:[{right:[m]}],bottom:[{bottom:[m]}],left:[{left:[m]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",Ya,be]}],basis:[{basis:R()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",be]}],grow:[{grow:L()}],shrink:[{shrink:L()}],order:[{order:["first","last","none",Ya,be]}],"grid-cols":[{"grid-cols":[Qa]}],"col-start-end":[{col:["auto",{span:["full",Ya,be]},be]}],"col-start":[{"col-start":O()}],"col-end":[{"col-end":O()}],"grid-rows":[{"grid-rows":[Qa]}],"row-start-end":[{row:["auto",{span:[Ya,be]},be]}],"row-start":[{"row-start":O()}],"row-end":[{"row-end":O()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",be]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",be]}],gap:[{gap:[p]}],"gap-x":[{"gap-x":[p]}],"gap-y":[{"gap-y":[p]}],"justify-content":[{justify:["normal",...M()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...M(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...M(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[y]}],px:[{px:[y]}],py:[{py:[y]}],ps:[{ps:[y]}],pe:[{pe:[y]}],pt:[{pt:[y]}],pr:[{pr:[y]}],pb:[{pb:[y]}],pl:[{pl:[y]}],m:[{m:[b]}],mx:[{mx:[b]}],my:[{my:[b]}],ms:[{ms:[b]}],me:[{me:[b]}],mt:[{mt:[b]}],mr:[{mr:[b]}],mb:[{mb:[b]}],ml:[{ml:[b]}],"space-x":[{"space-x":[I]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[I]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",be,t]}],"min-w":[{"min-w":[be,t,"min","max","fit"]}],"max-w":[{"max-w":[be,t,"none","full","min","max","fit","prose",{screen:[Wr]},Wr]}],h:[{h:[be,t,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[be,t,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[be,t,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[be,t,"auto","min","max","fit"]}],"font-size":[{text:["base",Wr,$r]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",Nd]}],"font-family":[{font:[Qa]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",be]}],"line-clamp":[{"line-clamp":["none",Xo,Nd]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",wr,be]}],"list-image":[{"list-image":["none",be]}],"list-style-type":[{list:["none","disc","decimal",be]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[g]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[g]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...U(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",wr,$r]}],"underline-offset":[{"underline-offset":["auto",wr,be]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:_()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",be]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",be]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[g]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...V(),nI]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",tI]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},iI]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[v]}],"gradient-via-pos":[{via:[v]}],"gradient-to-pos":[{to:[v]}],"gradient-from":[{from:[f]}],"gradient-via":[{via:[f]}],"gradient-to":[{to:[f]}],rounded:[{rounded:[o]}],"rounded-s":[{"rounded-s":[o]}],"rounded-e":[{"rounded-e":[o]}],"rounded-t":[{"rounded-t":[o]}],"rounded-r":[{"rounded-r":[o]}],"rounded-b":[{"rounded-b":[o]}],"rounded-l":[{"rounded-l":[o]}],"rounded-ss":[{"rounded-ss":[o]}],"rounded-se":[{"rounded-se":[o]}],"rounded-ee":[{"rounded-ee":[o]}],"rounded-es":[{"rounded-es":[o]}],"rounded-tl":[{"rounded-tl":[o]}],"rounded-tr":[{"rounded-tr":[o]}],"rounded-br":[{"rounded-br":[o]}],"rounded-bl":[{"rounded-bl":[o]}],"border-w":[{border:[s]}],"border-w-x":[{"border-x":[s]}],"border-w-y":[{"border-y":[s]}],"border-w-s":[{"border-s":[s]}],"border-w-e":[{"border-e":[s]}],"border-w-t":[{"border-t":[s]}],"border-w-r":[{"border-r":[s]}],"border-w-b":[{"border-b":[s]}],"border-w-l":[{"border-l":[s]}],"border-opacity":[{"border-opacity":[g]}],"border-style":[{border:[...U(),"hidden"]}],"divide-x":[{"divide-x":[s]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[s]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[g]}],"divide-style":[{divide:U()}],"border-color":[{border:[i]}],"border-color-x":[{"border-x":[i]}],"border-color-y":[{"border-y":[i]}],"border-color-s":[{"border-s":[i]}],"border-color-e":[{"border-e":[i]}],"border-color-t":[{"border-t":[i]}],"border-color-r":[{"border-r":[i]}],"border-color-b":[{"border-b":[i]}],"border-color-l":[{"border-l":[i]}],"divide-color":[{divide:[i]}],"outline-style":[{outline:["",...U()]}],"outline-offset":[{"outline-offset":[wr,be]}],"outline-w":[{outline:[wr,$r]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:$()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[g]}],"ring-offset-w":[{"ring-offset":[wr,$r]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",Wr,oI]}],"shadow-color":[{shadow:[Qa]}],opacity:[{opacity:[g]}],"mix-blend":[{"mix-blend":[...K(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":K()}],filter:[{filter:["","none"]}],blur:[{blur:[n]}],brightness:[{brightness:[r]}],contrast:[{contrast:[c]}],"drop-shadow":[{"drop-shadow":["","none",Wr,be]}],grayscale:[{grayscale:[u]}],"hue-rotate":[{"hue-rotate":[d]}],invert:[{invert:[h]}],saturate:[{saturate:[w]}],sepia:[{sepia:[A]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[n]}],"backdrop-brightness":[{"backdrop-brightness":[r]}],"backdrop-contrast":[{"backdrop-contrast":[c]}],"backdrop-grayscale":[{"backdrop-grayscale":[u]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[d]}],"backdrop-invert":[{"backdrop-invert":[h]}],"backdrop-opacity":[{"backdrop-opacity":[g]}],"backdrop-saturate":[{"backdrop-saturate":[w]}],"backdrop-sepia":[{"backdrop-sepia":[A]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[a]}],"border-spacing-x":[{"border-spacing-x":[a]}],"border-spacing-y":[{"border-spacing-y":[a]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",be]}],duration:[{duration:oe()}],ease:[{ease:["linear","in","out","in-out",be]}],delay:[{delay:oe()}],animate:[{animate:["none","spin","ping","pulse","bounce",be]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[k]}],"scale-x":[{"scale-x":[k]}],"scale-y":[{"scale-y":[k]}],rotate:[{rotate:[Ya,be]}],"translate-x":[{"translate-x":[F]}],"translate-y":[{"translate-y":[F]}],"skew-x":[{"skew-x":[C]}],"skew-y":[{"skew-y":[C]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",be]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",be]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":_()}],"scroll-mx":[{"scroll-mx":_()}],"scroll-my":[{"scroll-my":_()}],"scroll-ms":[{"scroll-ms":_()}],"scroll-me":[{"scroll-me":_()}],"scroll-mt":[{"scroll-mt":_()}],"scroll-mr":[{"scroll-mr":_()}],"scroll-mb":[{"scroll-mb":_()}],"scroll-ml":[{"scroll-ml":_()}],"scroll-p":[{"scroll-p":_()}],"scroll-px":[{"scroll-px":_()}],"scroll-py":[{"scroll-py":_()}],"scroll-ps":[{"scroll-ps":_()}],"scroll-pe":[{"scroll-pe":_()}],"scroll-pt":[{"scroll-pt":_()}],"scroll-pr":[{"scroll-pr":_()}],"scroll-pb":[{"scroll-pb":_()}],"scroll-pl":[{"scroll-pl":_()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",be]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[wr,$r,Nd]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},uI=qE(cI);function Qe(...e){return uI(l1(e))}const dI=TE,v1=x.forwardRef(({className:e,...t},n)=>l.jsx(t1,{ref:n,className:Qe("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}));v1.displayName=t1.displayName;const hI=Qp("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"}}),w1=x.forwardRef(({className:e,variant:t,...n},r)=>l.jsx(n1,{ref:r,className:Qe(hI({variant:t}),e),...n}));w1.displayName=n1.displayName;const fI=x.forwardRef(({className:e,...t},n)=>l.jsx(o1,{ref:n,className:Qe("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 hover:bg-secondary focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive",e),...t}));fI.displayName=o1.displayName;const x1=x.forwardRef(({className:e,...t},n)=>l.jsx(a1,{ref:n,className:Qe("absolute right-2 top-2 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-2 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600",e),"toast-close":"",...t,children:l.jsx(h1,{className:"h-4 w-4"})}));x1.displayName=a1.displayName;const b1=x.forwardRef(({className:e,...t},n)=>l.jsx(r1,{ref:n,className:Qe("text-sm font-semibold",e),...t}));b1.displayName=r1.displayName;const k1=x.forwardRef(({className:e,...t},n)=>l.jsx(i1,{ref:n,className:Qe("text-sm opacity-90",e),...t}));k1.displayName=i1.displayName;function pI(){const{toasts:e}=Mj();return l.jsxs(dI,{children:[e.map(function({id:t,title:n,description:r,action:i,...o}){return l.jsxs(w1,{...o,children:[l.jsxs("div",{className:"grid gap-1",children:[n&&l.jsx(b1,{children:n}),r&&l.jsx(k1,{children:r})]}),i,l.jsx(x1,{})]},t)}),l.jsx(v1,{})]})}var vy=["light","dark"],mI="(prefers-color-scheme: dark)",gI=x.createContext(void 0),yI={setTheme:e=>{},themes:[]},vI=()=>{var e;return(e=x.useContext(gI))!=null?e:yI};x.memo(({forcedTheme:e,storageKey:t,attribute:n,enableSystem:r,enableColorScheme:i,defaultTheme:o,value:a,attrs:s,nonce:c})=>{let u=o==="system",d=n==="class"?`var d=document.documentElement,c=d.classList;${`c.remove(${s.map(v=>`'${v}'`).join(",")})`};`:`var d=document.documentElement,n='${n}',s='setAttribute';`,h=i?vy.includes(o)&&o?`if(e==='light'||e==='dark'||!e)d.style.colorScheme=e||'${o}'`:"if(e==='light'||e==='dark')d.style.colorScheme=e":"",p=(v,m=!1,b=!0)=>{let g=a?a[v]:v,y=m?v+"|| ''":`'${g}'`,w="";return i&&b&&!m&&vy.includes(v)&&(w+=`d.style.colorScheme = '${v}';`),n==="class"?m||g?w+=`c.add(${y})`:w+="null":g&&(w+=`d[s](n,${y})`),w},f=e?`!function(){${d}${p(e)}}()`:r?`!function(){try{${d}var e=localStorage.getItem('${t}');if('system'===e||(!e&&${u})){var t='${mI}',m=window.matchMedia(t);if(m.media!==t||m.matches){${p("dark")}}else{${p("light")}}}else if(e){${a?`var x=${JSON.stringify(a)};`:""}${p(a?"x[e]":"e",!0)}}${u?"":"else{"+p(o,!1,!1)+"}"}${h}}catch(e){}}()`:`!function(){try{${d}var e=localStorage.getItem('${t}');if(e){${a?`var x=${JSON.stringify(a)};`:""}${p(a?"x[e]":"e",!0)}}else{${p(o,!1,!1)};}${h}}catch(t){}}();`;return x.createElement("script",{nonce:c,dangerouslySetInnerHTML:{__html:f}})});var wI=e=>{switch(e){case"success":return kI;case"info":return CI;case"warning":return SI;case"error":return AI;default:return null}},xI=Array(12).fill(0),bI=({visible:e,className:t})=>W.createElement("div",{className:["sonner-loading-wrapper",t].filter(Boolean).join(" "),"data-visible":e},W.createElement("div",{className:"sonner-spinner"},xI.map((n,r)=>W.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${r}`})))),kI=W.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},W.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"})),SI=W.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},W.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"})),CI=W.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},W.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"})),AI=W.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},W.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"})),TI=W.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},W.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),W.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),jI=()=>{let[e,t]=W.useState(document.hidden);return W.useEffect(()=>{let n=()=>{t(document.hidden)};return document.addEventListener("visibilitychange",n),()=>window.removeEventListener("visibilitychange",n)},[]),e},df=1,EI=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=>{var t;let{message:n,...r}=e,i=typeof(e==null?void 0:e.id)=="number"||((t=e.id)==null?void 0:t.length)>0?e.id:df++,o=this.toasts.find(s=>s.id===i),a=e.dismissible===void 0?!0:e.dismissible;return this.dismissedToasts.has(i)&&this.dismissedToasts.delete(i),o?this.toasts=this.toasts.map(s=>s.id===i?(this.publish({...s,...e,id:i,title:n}),{...s,...e,id:i,dismissible:a,title:n}):s):this.addToast({title:n,...r,dismissible:a,id:i}),i},this.dismiss=e=>(this.dismissedToasts.add(e),e||this.toasts.forEach(t=>{this.subscribers.forEach(n=>n({id:t.id,dismiss:!0}))}),this.subscribers.forEach(t=>t({id:e,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)=>this.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"?t.description:void 0}));let r=e instanceof Promise?e:e(),i=n!==void 0,o,a=r.then(async c=>{if(o=["resolve",c],W.isValidElement(c))i=!1,this.create({id:n,type:"default",message:c});else if(NI(c)&&!c.ok){i=!1;let u=typeof t.error=="function"?await t.error(`HTTP error! status: ${c.status}`):t.error,d=typeof t.description=="function"?await t.description(`HTTP error! status: ${c.status}`):t.description;this.create({id:n,type:"error",message:u,description:d})}else if(t.success!==void 0){i=!1;let u=typeof t.success=="function"?await t.success(c):t.success,d=typeof t.description=="function"?await t.description(c):t.description;this.create({id:n,type:"success",message:u,description:d})}}).catch(async c=>{if(o=["reject",c],t.error!==void 0){i=!1;let u=typeof t.error=="function"?await t.error(c):t.error,d=typeof t.description=="function"?await t.description(c):t.description;this.create({id:n,type:"error",message:u,description:d})}}).finally(()=>{var c;i&&(this.dismiss(n),n=void 0),(c=t.finally)==null||c.call(t)}),s=()=>new Promise((c,u)=>a.then(()=>o[0]==="reject"?u(o[1]):c(o[1])).catch(u));return typeof n!="string"&&typeof n!="number"?{unwrap:s}:Object.assign(n,{unwrap:s})},this.custom=(e,t)=>{let n=(t==null?void 0:t.id)||df++;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}},Ut=new EI,II=(e,t)=>{let n=(t==null?void 0:t.id)||df++;return Ut.addToast({title:e,...t,id:n}),n},NI=e=>e&&typeof e=="object"&&"ok"in e&&typeof e.ok=="boolean"&&"status"in e&&typeof e.status=="number",_I=II,PI=()=>Ut.toasts,RI=()=>Ut.getActiveToasts(),wy=Object.assign(_I,{success:Ut.success,info:Ut.info,warning:Ut.warning,error:Ut.error,custom:Ut.custom,message:Ut.message,promise:Ut.promise,dismiss:Ut.dismiss,loading:Ut.loading},{getHistory:PI,getToasts:RI});function FI(e,{insertAt:t}={}){if(typeof document>"u")return;let n=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css",t==="top"&&n.firstChild?n.insertBefore(r,n.firstChild):n.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}FI(`:where(html[dir="ltr"]),:where([data-sonner-toaster][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%)}:where(html[dir="rtl"]),:where([data-sonner-toaster][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%)}:where([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:none;z-index:999999999;transition:transform .4s ease}:where([data-sonner-toaster][data-lifted="true"]){transform:translateY(-10px)}@media (hover: none) and (pointer: coarse){:where([data-sonner-toaster][data-lifted="true"]){transform:none}}:where([data-sonner-toaster][data-x-position="right"]){right:var(--offset-right)}:where([data-sonner-toaster][data-x-position="left"]){left:var(--offset-left)}:where([data-sonner-toaster][data-x-position="center"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position="top"]){top:var(--offset-top)}:where([data-sonner-toaster][data-y-position="bottom"]){bottom:var(--offset-bottom)}:where([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);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([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 #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position="top"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position="bottom"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([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)}:where([data-sonner-toast][data-promise="true"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([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;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme="dark"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([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);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-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled="true"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping="true"]):before{content:"";position:absolute;left:-50%;right:-50%;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position="top"][data-swiping="true"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position="bottom"][data-swiping="true"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping="false"][data-removed="true"]):before{content:"";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted="true"]){--y: translateY(0);opacity:1}:where([data-sonner-toast][data-expanded="false"][data-front="false"]){--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded="false"][data-front="false"][data-styled="true"])>*{opacity:0}:where([data-sonner-toast][data-visible="false"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted="true"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed="true"][data-front="true"][data-swipe-out="false"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([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}:where([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}:where([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, 0px)) translate(var(--swipe-amount-x, 0px));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{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{0%{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{0%{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-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--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-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-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-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, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--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-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-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],[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],[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],[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],[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:nth-child(1){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)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{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%)} `);function Ml(e){return e.label!==void 0}var MI=3,OI="32px",DI="16px",xy=4e3,LI=356,zI=14,BI=20,HI=200;function Pn(...e){return e.filter(Boolean).join(" ")}function $I(e){let[t,n]=e.split("-"),r=[];return t&&r.push(t),n&&r.push(n),r}var WI=e=>{var t,n,r,i,o,a,s,c,u,d,h;let{invert:p,toast:f,unstyled:v,interacting:m,setHeights:b,visibleToasts:g,heights:y,index:w,toasts:k,expanded:A,removeToast:C,defaultRichColors:I,closeButton:F,style:D,cancelButtonStyle:j,actionButtonStyle:R,className:_="",descriptionClassName:$="",duration:O,position:V,gap:U,loadingIcon:K,expandByDefault:M,classNames:L,icons:S,closeButtonAriaLabel:oe="Close toast",pauseWhenPageIsHidden:ne}=e,[T,le]=W.useState(null),[Ee,ye]=W.useState(null),[Z,we]=W.useState(!1),[Ne,ve]=W.useState(!1),[xe,Se]=W.useState(!1),[ot,wt]=W.useState(!1),[Jt,en]=W.useState(!1),[mn,Dr]=W.useState(0),[gn,E]=W.useState(0),P=W.useRef(f.duration||O||xy),z=W.useRef(null),J=W.useRef(null),X=w===0,G=w+1<=g,N=f.type,B=f.dismissible!==!1,ee=f.className||"",ue=f.descriptionClassName||"",Ce=W.useMemo(()=>y.findIndex(pe=>pe.toastId===f.id)||0,[y,f.id]),Je=W.useMemo(()=>{var pe;return(pe=f.closeButton)!=null?pe:F},[f.closeButton,F]),yn=W.useMemo(()=>f.duration||O||xy,[f.duration,O]),xt=W.useRef(0),Tt=W.useRef(0),Xn=W.useRef(0),Ge=W.useRef(null),[Jn,Wt]=V.split("-"),Um=W.useMemo(()=>y.reduce((pe,De,Ue)=>Ue>=Ce?pe:pe+De.height,0),[y,Ce]),Ym=jI(),TC=f.invert||p,Ku=N==="loading";Tt.current=W.useMemo(()=>Ce*U+Um,[Ce,Um]),W.useEffect(()=>{P.current=yn},[yn]),W.useEffect(()=>{we(!0)},[]),W.useEffect(()=>{let pe=J.current;if(pe){let De=pe.getBoundingClientRect().height;return E(De),b(Ue=>[{toastId:f.id,height:De,position:f.position},...Ue]),()=>b(Ue=>Ue.filter(En=>En.toastId!==f.id))}},[b,f.id]),W.useLayoutEffect(()=>{if(!Z)return;let pe=J.current,De=pe.style.height;pe.style.height="auto";let Ue=pe.getBoundingClientRect().height;pe.style.height=De,E(Ue),b(En=>En.find(In=>In.toastId===f.id)?En.map(In=>In.toastId===f.id?{...In,height:Ue}:In):[{toastId:f.id,height:Ue,position:f.position},...En])},[Z,f.title,f.description,b,f.id]);let Lr=W.useCallback(()=>{ve(!0),Dr(Tt.current),b(pe=>pe.filter(De=>De.toastId!==f.id)),setTimeout(()=>{C(f)},HI)},[f,C,b,Tt]);W.useEffect(()=>{if(f.promise&&N==="loading"||f.duration===1/0||f.type==="loading")return;let pe;return A||m||ne&&Ym?(()=>{if(Xn.current{var De;(De=f.onAutoClose)==null||De.call(f,f),Lr()},P.current)),()=>clearTimeout(pe)},[A,m,f,N,ne,Ym,Lr]),W.useEffect(()=>{f.delete&&Lr()},[Lr,f.delete]);function jC(){var pe,De,Ue;return S!=null&&S.loading?W.createElement("div",{className:Pn(L==null?void 0:L.loader,(pe=f==null?void 0:f.classNames)==null?void 0:pe.loader,"sonner-loader"),"data-visible":N==="loading"},S.loading):K?W.createElement("div",{className:Pn(L==null?void 0:L.loader,(De=f==null?void 0:f.classNames)==null?void 0:De.loader,"sonner-loader"),"data-visible":N==="loading"},K):W.createElement(bI,{className:Pn(L==null?void 0:L.loader,(Ue=f==null?void 0:f.classNames)==null?void 0:Ue.loader),visible:N==="loading"})}return W.createElement("li",{tabIndex:0,ref:J,className:Pn(_,ee,L==null?void 0:L.toast,(t=f==null?void 0:f.classNames)==null?void 0:t.toast,L==null?void 0:L.default,L==null?void 0:L[N],(n=f==null?void 0:f.classNames)==null?void 0:n[N]),"data-sonner-toast":"","data-rich-colors":(r=f.richColors)!=null?r:I,"data-styled":!(f.jsx||f.unstyled||v),"data-mounted":Z,"data-promise":!!f.promise,"data-swiped":Jt,"data-removed":Ne,"data-visible":G,"data-y-position":Jn,"data-x-position":Wt,"data-index":w,"data-front":X,"data-swiping":xe,"data-dismissible":B,"data-type":N,"data-invert":TC,"data-swipe-out":ot,"data-swipe-direction":Ee,"data-expanded":!!(A||M&&Z),style:{"--index":w,"--toasts-before":w,"--z-index":k.length-w,"--offset":`${Ne?mn:Tt.current}px`,"--initial-height":M?"auto":`${gn}px`,...D,...f.style},onDragEnd:()=>{Se(!1),le(null),Ge.current=null},onPointerDown:pe=>{Ku||!B||(z.current=new Date,Dr(Tt.current),pe.target.setPointerCapture(pe.pointerId),pe.target.tagName!=="BUTTON"&&(Se(!0),Ge.current={x:pe.clientX,y:pe.clientY}))},onPointerUp:()=>{var pe,De,Ue,En;if(ot||!B)return;Ge.current=null;let In=Number(((pe=J.current)==null?void 0:pe.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),zr=Number(((De=J.current)==null?void 0:De.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),Fi=new Date().getTime()-((Ue=z.current)==null?void 0:Ue.getTime()),Nn=T==="x"?In:zr,Br=Math.abs(Nn)/Fi;if(Math.abs(Nn)>=BI||Br>.11){Dr(Tt.current),(En=f.onDismiss)==null||En.call(f,f),ye(T==="x"?In>0?"right":"left":zr>0?"down":"up"),Lr(),wt(!0),en(!1);return}Se(!1),le(null)},onPointerMove:pe=>{var De,Ue,En,In;if(!Ge.current||!B||((De=window.getSelection())==null?void 0:De.toString().length)>0)return;let zr=pe.clientY-Ge.current.y,Fi=pe.clientX-Ge.current.x,Nn=(Ue=e.swipeDirections)!=null?Ue:$I(V);!T&&(Math.abs(Fi)>1||Math.abs(zr)>1)&&le(Math.abs(Fi)>Math.abs(zr)?"x":"y");let Br={x:0,y:0};T==="y"?(Nn.includes("top")||Nn.includes("bottom"))&&(Nn.includes("top")&&zr<0||Nn.includes("bottom")&&zr>0)&&(Br.y=zr):T==="x"&&(Nn.includes("left")||Nn.includes("right"))&&(Nn.includes("left")&&Fi<0||Nn.includes("right")&&Fi>0)&&(Br.x=Fi),(Math.abs(Br.x)>0||Math.abs(Br.y)>0)&&en(!0),(En=J.current)==null||En.style.setProperty("--swipe-amount-x",`${Br.x}px`),(In=J.current)==null||In.style.setProperty("--swipe-amount-y",`${Br.y}px`)}},Je&&!f.jsx?W.createElement("button",{"aria-label":oe,"data-disabled":Ku,"data-close-button":!0,onClick:Ku||!B?()=>{}:()=>{var pe;Lr(),(pe=f.onDismiss)==null||pe.call(f,f)},className:Pn(L==null?void 0:L.closeButton,(i=f==null?void 0:f.classNames)==null?void 0:i.closeButton)},(o=S==null?void 0:S.close)!=null?o:TI):null,f.jsx||x.isValidElement(f.title)?f.jsx?f.jsx:typeof f.title=="function"?f.title():f.title:W.createElement(W.Fragment,null,N||f.icon||f.promise?W.createElement("div",{"data-icon":"",className:Pn(L==null?void 0:L.icon,(a=f==null?void 0:f.classNames)==null?void 0:a.icon)},f.promise||f.type==="loading"&&!f.icon?f.icon||jC():null,f.type!=="loading"?f.icon||(S==null?void 0:S[N])||wI(N):null):null,W.createElement("div",{"data-content":"",className:Pn(L==null?void 0:L.content,(s=f==null?void 0:f.classNames)==null?void 0:s.content)},W.createElement("div",{"data-title":"",className:Pn(L==null?void 0:L.title,(c=f==null?void 0:f.classNames)==null?void 0:c.title)},typeof f.title=="function"?f.title():f.title),f.description?W.createElement("div",{"data-description":"",className:Pn($,ue,L==null?void 0:L.description,(u=f==null?void 0:f.classNames)==null?void 0:u.description)},typeof f.description=="function"?f.description():f.description):null),x.isValidElement(f.cancel)?f.cancel:f.cancel&&Ml(f.cancel)?W.createElement("button",{"data-button":!0,"data-cancel":!0,style:f.cancelButtonStyle||j,onClick:pe=>{var De,Ue;Ml(f.cancel)&&B&&((Ue=(De=f.cancel).onClick)==null||Ue.call(De,pe),Lr())},className:Pn(L==null?void 0:L.cancelButton,(d=f==null?void 0:f.classNames)==null?void 0:d.cancelButton)},f.cancel.label):null,x.isValidElement(f.action)?f.action:f.action&&Ml(f.action)?W.createElement("button",{"data-button":!0,"data-action":!0,style:f.actionButtonStyle||R,onClick:pe=>{var De,Ue;Ml(f.action)&&((Ue=(De=f.action).onClick)==null||Ue.call(De,pe),!pe.defaultPrevented&&Lr())},className:Pn(L==null?void 0:L.actionButton,(h=f==null?void 0:f.classNames)==null?void 0:h.actionButton)},f.action.label):null))};function by(){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 VI(e,t){let n={};return[e,t].forEach((r,i)=>{let o=i===1,a=o?"--mobile-offset":"--offset",s=o?DI:OI;function c(u){["top","right","bottom","left"].forEach(d=>{n[`${a}-${d}`]=typeof u=="number"?`${u}px`:u})}typeof r=="number"||typeof r=="string"?c(r):typeof r=="object"?["top","right","bottom","left"].forEach(u=>{r[u]===void 0?n[`${a}-${u}`]=s:n[`${a}-${u}`]=typeof r[u]=="number"?`${r[u]}px`:r[u]}):c(s)}),n}var qI=x.forwardRef(function(e,t){let{invert:n,position:r="bottom-right",hotkey:i=["altKey","KeyT"],expand:o,closeButton:a,className:s,offset:c,mobileOffset:u,theme:d="light",richColors:h,duration:p,style:f,visibleToasts:v=MI,toastOptions:m,dir:b=by(),gap:g=zI,loadingIcon:y,icons:w,containerAriaLabel:k="Notifications",pauseWhenPageIsHidden:A}=e,[C,I]=W.useState([]),F=W.useMemo(()=>Array.from(new Set([r].concat(C.filter(ne=>ne.position).map(ne=>ne.position)))),[C,r]),[D,j]=W.useState([]),[R,_]=W.useState(!1),[$,O]=W.useState(!1),[V,U]=W.useState(d!=="system"?d:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),K=W.useRef(null),M=i.join("+").replace(/Key/g,"").replace(/Digit/g,""),L=W.useRef(null),S=W.useRef(!1),oe=W.useCallback(ne=>{I(T=>{var le;return(le=T.find(Ee=>Ee.id===ne.id))!=null&&le.delete||Ut.dismiss(ne.id),T.filter(({id:Ee})=>Ee!==ne.id)})},[]);return W.useEffect(()=>Ut.subscribe(ne=>{if(ne.dismiss){I(T=>T.map(le=>le.id===ne.id?{...le,delete:!0}:le));return}setTimeout(()=>{A0.flushSync(()=>{I(T=>{let le=T.findIndex(Ee=>Ee.id===ne.id);return le!==-1?[...T.slice(0,le),{...T[le],...ne},...T.slice(le+1)]:[ne,...T]})})})}),[]),W.useEffect(()=>{if(d!=="system"){U(d);return}if(d==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?U("dark"):U("light")),typeof window>"u")return;let ne=window.matchMedia("(prefers-color-scheme: dark)");try{ne.addEventListener("change",({matches:T})=>{U(T?"dark":"light")})}catch{ne.addListener(({matches:le})=>{try{U(le?"dark":"light")}catch(Ee){console.error(Ee)}})}},[d]),W.useEffect(()=>{C.length<=1&&_(!1)},[C]),W.useEffect(()=>{let ne=T=>{var le,Ee;i.every(ye=>T[ye]||T.code===ye)&&(_(!0),(le=K.current)==null||le.focus()),T.code==="Escape"&&(document.activeElement===K.current||(Ee=K.current)!=null&&Ee.contains(document.activeElement))&&_(!1)};return document.addEventListener("keydown",ne),()=>document.removeEventListener("keydown",ne)},[i]),W.useEffect(()=>{if(K.current)return()=>{L.current&&(L.current.focus({preventScroll:!0}),L.current=null,S.current=!1)}},[K.current]),W.createElement("section",{ref:t,"aria-label":`${k} ${M}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},F.map((ne,T)=>{var le;let[Ee,ye]=ne.split("-");return C.length?W.createElement("ol",{key:ne,dir:b==="auto"?by():b,tabIndex:-1,ref:K,className:s,"data-sonner-toaster":!0,"data-theme":V,"data-y-position":Ee,"data-lifted":R&&C.length>1&&!o,"data-x-position":ye,style:{"--front-toast-height":`${((le=D[0])==null?void 0:le.height)||0}px`,"--width":`${LI}px`,"--gap":`${g}px`,...f,...VI(c,u)},onBlur:Z=>{S.current&&!Z.currentTarget.contains(Z.relatedTarget)&&(S.current=!1,L.current&&(L.current.focus({preventScroll:!0}),L.current=null))},onFocus:Z=>{Z.target instanceof HTMLElement&&Z.target.dataset.dismissible==="false"||S.current||(S.current=!0,L.current=Z.relatedTarget)},onMouseEnter:()=>_(!0),onMouseMove:()=>_(!0),onMouseLeave:()=>{$||_(!1)},onDragEnd:()=>_(!1),onPointerDown:Z=>{Z.target instanceof HTMLElement&&Z.target.dataset.dismissible==="false"||O(!0)},onPointerUp:()=>O(!1)},C.filter(Z=>!Z.position&&T===0||Z.position===ne).map((Z,we)=>{var Ne,ve;return W.createElement(WI,{key:Z.id,icons:w,index:we,toast:Z,defaultRichColors:h,duration:(Ne=m==null?void 0:m.duration)!=null?Ne:p,className:m==null?void 0:m.className,descriptionClassName:m==null?void 0:m.descriptionClassName,invert:n,visibleToasts:v,closeButton:(ve=m==null?void 0:m.closeButton)!=null?ve:a,interacting:$,position:ne,style:m==null?void 0:m.style,unstyled:m==null?void 0:m.unstyled,classNames:m==null?void 0:m.classNames,cancelButtonStyle:m==null?void 0:m.cancelButtonStyle,actionButtonStyle:m==null?void 0:m.actionButtonStyle,removeToast:oe,toasts:C.filter(xe=>xe.position==Z.position),heights:D.filter(xe=>xe.position==Z.position),setHeights:j,expandByDefault:o,gap:g,loadingIcon:y,expanded:R,pauseWhenPageIsHidden:A,swipeDirections:e.swipeDirections})})):null}))});const UI=({...e})=>{const{theme:t="system"}=vI();return l.jsx(qI,{theme:t,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})};var YI=Jf[" useId ".trim().toString()]||(()=>{}),QI=0;function Jo(e){const[t,n]=x.useState(YI());return At(()=>{n(r=>r??String(QI++))},[e]),t?`radix-${t}`:""}const GI=["top","right","bottom","left"],Si=Math.min,rn=Math.max,$c=Math.round,Ol=Math.floor,fr=e=>({x:e,y:e}),KI={left:"right",right:"left",bottom:"top",top:"bottom"},ZI={start:"end",end:"start"};function hf(e,t,n){return rn(e,Si(t,n))}function Pr(e,t){return typeof e=="function"?e(t):e}function Rr(e){return e.split("-")[0]}function Na(e){return e.split("-")[1]}function Kp(e){return e==="x"?"y":"x"}function Zp(e){return e==="y"?"height":"width"}const XI=new Set(["top","bottom"]);function cr(e){return XI.has(Rr(e))?"y":"x"}function Xp(e){return Kp(cr(e))}function JI(e,t,n){n===void 0&&(n=!1);const r=Na(e),i=Xp(e),o=Zp(i);let a=i==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return t.reference[o]>t.floating[o]&&(a=Wc(a)),[a,Wc(a)]}function eN(e){const t=Wc(e);return[ff(e),t,ff(t)]}function ff(e){return e.replace(/start|end/g,t=>ZI[t])}const ky=["left","right"],Sy=["right","left"],tN=["top","bottom"],nN=["bottom","top"];function rN(e,t,n){switch(e){case"top":case"bottom":return n?t?Sy:ky:t?ky:Sy;case"left":case"right":return t?tN:nN;default:return[]}}function iN(e,t,n,r){const i=Na(e);let o=rN(Rr(e),n==="start",r);return i&&(o=o.map(a=>a+"-"+i),t&&(o=o.concat(o.map(ff)))),o}function Wc(e){return e.replace(/left|right|bottom|top/g,t=>KI[t])}function oN(e){return{top:0,right:0,bottom:0,left:0,...e}}function S1(e){return typeof e!="number"?oN(e):{top:e,right:e,bottom:e,left:e}}function Vc(e){const{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 Cy(e,t,n){let{reference:r,floating:i}=e;const o=cr(t),a=Xp(t),s=Zp(a),c=Rr(t),u=o==="y",d=r.x+r.width/2-i.width/2,h=r.y+r.height/2-i.height/2,p=r[s]/2-i[s]/2;let f;switch(c){case"top":f={x:d,y:r.y-i.height};break;case"bottom":f={x:d,y:r.y+r.height};break;case"right":f={x:r.x+r.width,y:h};break;case"left":f={x:r.x-i.width,y:h};break;default:f={x:r.x,y:r.y}}switch(Na(t)){case"start":f[a]-=p*(n&&u?-1:1);break;case"end":f[a]+=p*(n&&u?-1:1);break}return f}const aN=async(e,t,n)=>{const{placement:r="bottom",strategy:i="absolute",middleware:o=[],platform:a}=n,s=o.filter(Boolean),c=await(a.isRTL==null?void 0:a.isRTL(t));let u=await a.getElementRects({reference:e,floating:t,strategy:i}),{x:d,y:h}=Cy(u,r,c),p=r,f={},v=0;for(let m=0;m({name:"arrow",options:e,async fn(t){const{x:n,y:r,placement:i,rects:o,platform:a,elements:s,middlewareData:c}=t,{element:u,padding:d=0}=Pr(e,t)||{};if(u==null)return{};const h=S1(d),p={x:n,y:r},f=Xp(i),v=Zp(f),m=await a.getDimensions(u),b=f==="y",g=b?"top":"left",y=b?"bottom":"right",w=b?"clientHeight":"clientWidth",k=o.reference[v]+o.reference[f]-p[f]-o.floating[v],A=p[f]-o.reference[f],C=await(a.getOffsetParent==null?void 0:a.getOffsetParent(u));let I=C?C[w]:0;(!I||!await(a.isElement==null?void 0:a.isElement(C)))&&(I=s.floating[w]||o.floating[v]);const F=k/2-A/2,D=I/2-m[v]/2-1,j=Si(h[g],D),R=Si(h[y],D),_=j,$=I-m[v]-R,O=I/2-m[v]/2+F,V=hf(_,O,$),U=!c.arrow&&Na(i)!=null&&O!==V&&o.reference[v]/2-(O<_?j:R)-m[v]/2<0,K=U?O<_?O-_:O-$:0;return{[f]:p[f]+K,data:{[f]:V,centerOffset:O-V-K,...U&&{alignmentOffset:K}},reset:U}}}),lN=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(t){var n,r;const{placement:i,middlewareData:o,rects:a,initialPlacement:s,platform:c,elements:u}=t,{mainAxis:d=!0,crossAxis:h=!0,fallbackPlacements:p,fallbackStrategy:f="bestFit",fallbackAxisSideDirection:v="none",flipAlignment:m=!0,...b}=Pr(e,t);if((n=o.arrow)!=null&&n.alignmentOffset)return{};const g=Rr(i),y=cr(s),w=Rr(s)===s,k=await(c.isRTL==null?void 0:c.isRTL(u.floating)),A=p||(w||!m?[Wc(s)]:eN(s)),C=v!=="none";!p&&C&&A.push(...iN(s,m,v,k));const I=[s,...A],F=await Hs(t,b),D=[];let j=((r=o.flip)==null?void 0:r.overflows)||[];if(d&&D.push(F[g]),h){const O=JI(i,a,k);D.push(F[O[0]],F[O[1]])}if(j=[...j,{placement:i,overflows:D}],!D.every(O=>O<=0)){var R,_;const O=(((R=o.flip)==null?void 0:R.index)||0)+1,V=I[O];if(V&&(!(h==="alignment"?y!==cr(V):!1)||j.every(M=>M.overflows[0]>0&&cr(M.placement)===y)))return{data:{index:O,overflows:j},reset:{placement:V}};let U=(_=j.filter(K=>K.overflows[0]<=0).sort((K,M)=>K.overflows[1]-M.overflows[1])[0])==null?void 0:_.placement;if(!U)switch(f){case"bestFit":{var $;const K=($=j.filter(M=>{if(C){const L=cr(M.placement);return L===y||L==="y"}return!0}).map(M=>[M.placement,M.overflows.filter(L=>L>0).reduce((L,S)=>L+S,0)]).sort((M,L)=>M[1]-L[1])[0])==null?void 0:$[0];K&&(U=K);break}case"initialPlacement":U=s;break}if(i!==U)return{reset:{placement:U}}}return{}}}};function Ay(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function Ty(e){return GI.some(t=>e[t]>=0)}const cN=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:n}=t,{strategy:r="referenceHidden",...i}=Pr(e,t);switch(r){case"referenceHidden":{const o=await Hs(t,{...i,elementContext:"reference"}),a=Ay(o,n.reference);return{data:{referenceHiddenOffsets:a,referenceHidden:Ty(a)}}}case"escaped":{const o=await Hs(t,{...i,altBoundary:!0}),a=Ay(o,n.floating);return{data:{escapedOffsets:a,escaped:Ty(a)}}}default:return{}}}}},C1=new Set(["left","top"]);async function uN(e,t){const{placement:n,platform:r,elements:i}=e,o=await(r.isRTL==null?void 0:r.isRTL(i.floating)),a=Rr(n),s=Na(n),c=cr(n)==="y",u=C1.has(a)?-1:1,d=o&&c?-1:1,h=Pr(t,e);let{mainAxis:p,crossAxis:f,alignmentAxis:v}=typeof h=="number"?{mainAxis:h,crossAxis:0,alignmentAxis:null}:{mainAxis:h.mainAxis||0,crossAxis:h.crossAxis||0,alignmentAxis:h.alignmentAxis};return s&&typeof v=="number"&&(f=s==="end"?v*-1:v),c?{x:f*d,y:p*u}:{x:p*u,y:f*d}}const dN=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,r;const{x:i,y:o,placement:a,middlewareData:s}=t,c=await uN(t,e);return a===((n=s.offset)==null?void 0:n.placement)&&(r=s.arrow)!=null&&r.alignmentOffset?{}:{x:i+c.x,y:o+c.y,data:{...c,placement:a}}}}},hN=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:r,placement:i}=t,{mainAxis:o=!0,crossAxis:a=!1,limiter:s={fn:b=>{let{x:g,y}=b;return{x:g,y}}},...c}=Pr(e,t),u={x:n,y:r},d=await Hs(t,c),h=cr(Rr(i)),p=Kp(h);let f=u[p],v=u[h];if(o){const b=p==="y"?"top":"left",g=p==="y"?"bottom":"right",y=f+d[b],w=f-d[g];f=hf(y,f,w)}if(a){const b=h==="y"?"top":"left",g=h==="y"?"bottom":"right",y=v+d[b],w=v-d[g];v=hf(y,v,w)}const m=s.fn({...t,[p]:f,[h]:v});return{...m,data:{x:m.x-n,y:m.y-r,enabled:{[p]:o,[h]:a}}}}}},fN=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:n,y:r,placement:i,rects:o,middlewareData:a}=t,{offset:s=0,mainAxis:c=!0,crossAxis:u=!0}=Pr(e,t),d={x:n,y:r},h=cr(i),p=Kp(h);let f=d[p],v=d[h];const m=Pr(s,t),b=typeof m=="number"?{mainAxis:m,crossAxis:0}:{mainAxis:0,crossAxis:0,...m};if(c){const w=p==="y"?"height":"width",k=o.reference[p]-o.floating[w]+b.mainAxis,A=o.reference[p]+o.reference[w]-b.mainAxis;fA&&(f=A)}if(u){var g,y;const w=p==="y"?"width":"height",k=C1.has(Rr(i)),A=o.reference[h]-o.floating[w]+(k&&((g=a.offset)==null?void 0:g[h])||0)+(k?0:b.crossAxis),C=o.reference[h]+o.reference[w]+(k?0:((y=a.offset)==null?void 0:y[h])||0)-(k?b.crossAxis:0);vC&&(v=C)}return{[p]:f,[h]:v}}}},pN=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){var n,r;const{placement:i,rects:o,platform:a,elements:s}=t,{apply:c=()=>{},...u}=Pr(e,t),d=await Hs(t,u),h=Rr(i),p=Na(i),f=cr(i)==="y",{width:v,height:m}=o.floating;let b,g;h==="top"||h==="bottom"?(b=h,g=p===(await(a.isRTL==null?void 0:a.isRTL(s.floating))?"start":"end")?"left":"right"):(g=h,b=p==="end"?"top":"bottom");const y=m-d.top-d.bottom,w=v-d.left-d.right,k=Si(m-d[b],y),A=Si(v-d[g],w),C=!t.middlewareData.shift;let I=k,F=A;if((n=t.middlewareData.shift)!=null&&n.enabled.x&&(F=w),(r=t.middlewareData.shift)!=null&&r.enabled.y&&(I=y),C&&!p){const j=rn(d.left,0),R=rn(d.right,0),_=rn(d.top,0),$=rn(d.bottom,0);f?F=v-2*(j!==0||R!==0?j+R:rn(d.left,d.right)):I=m-2*(_!==0||$!==0?_+$:rn(d.top,d.bottom))}await c({...t,availableWidth:F,availableHeight:I});const D=await a.getDimensions(s.floating);return v!==D.width||m!==D.height?{reset:{rects:!0}}:{}}}};function Eu(){return typeof window<"u"}function _a(e){return A1(e)?(e.nodeName||"").toLowerCase():"#document"}function sn(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function gr(e){var t;return(t=(A1(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function A1(e){return Eu()?e instanceof Node||e instanceof sn(e).Node:!1}function Qn(e){return Eu()?e instanceof Element||e instanceof sn(e).Element:!1}function mr(e){return Eu()?e instanceof HTMLElement||e instanceof sn(e).HTMLElement:!1}function jy(e){return!Eu()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof sn(e).ShadowRoot}const mN=new Set(["inline","contents"]);function sl(e){const{overflow:t,overflowX:n,overflowY:r,display:i}=Gn(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!mN.has(i)}const gN=new Set(["table","td","th"]);function yN(e){return gN.has(_a(e))}const vN=[":popover-open",":modal"];function Iu(e){return vN.some(t=>{try{return e.matches(t)}catch{return!1}})}const wN=["transform","translate","scale","rotate","perspective"],xN=["transform","translate","scale","rotate","perspective","filter"],bN=["paint","layout","strict","content"];function Jp(e){const t=em(),n=Qn(e)?Gn(e):e;return wN.some(r=>n[r]?n[r]!=="none":!1)||(n.containerType?n.containerType!=="normal":!1)||!t&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!t&&(n.filter?n.filter!=="none":!1)||xN.some(r=>(n.willChange||"").includes(r))||bN.some(r=>(n.contain||"").includes(r))}function kN(e){let t=Ci(e);for(;mr(t)&&!va(t);){if(Jp(t))return t;if(Iu(t))return null;t=Ci(t)}return null}function em(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const SN=new Set(["html","body","#document"]);function va(e){return SN.has(_a(e))}function Gn(e){return sn(e).getComputedStyle(e)}function Nu(e){return Qn(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Ci(e){if(_a(e)==="html")return e;const t=e.assignedSlot||e.parentNode||jy(e)&&e.host||gr(e);return jy(t)?t.host:t}function T1(e){const t=Ci(e);return va(t)?e.ownerDocument?e.ownerDocument.body:e.body:mr(t)&&sl(t)?t:T1(t)}function $s(e,t,n){var r;t===void 0&&(t=[]),n===void 0&&(n=!0);const i=T1(e),o=i===((r=e.ownerDocument)==null?void 0:r.body),a=sn(i);if(o){const s=pf(a);return t.concat(a,a.visualViewport||[],sl(i)?i:[],s&&n?$s(s):[])}return t.concat(i,$s(i,[],n))}function pf(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function j1(e){const t=Gn(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const i=mr(e),o=i?e.offsetWidth:n,a=i?e.offsetHeight:r,s=$c(n)!==o||$c(r)!==a;return s&&(n=o,r=a),{width:n,height:r,$:s}}function tm(e){return Qn(e)?e:e.contextElement}function ea(e){const t=tm(e);if(!mr(t))return fr(1);const n=t.getBoundingClientRect(),{width:r,height:i,$:o}=j1(t);let a=(o?$c(n.width):n.width)/r,s=(o?$c(n.height):n.height)/i;return(!a||!Number.isFinite(a))&&(a=1),(!s||!Number.isFinite(s))&&(s=1),{x:a,y:s}}const CN=fr(0);function E1(e){const t=sn(e);return!em()||!t.visualViewport?CN:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function AN(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==sn(e)?!1:t}function so(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);const i=e.getBoundingClientRect(),o=tm(e);let a=fr(1);t&&(r?Qn(r)&&(a=ea(r)):a=ea(e));const s=AN(o,n,r)?E1(o):fr(0);let c=(i.left+s.x)/a.x,u=(i.top+s.y)/a.y,d=i.width/a.x,h=i.height/a.y;if(o){const p=sn(o),f=r&&Qn(r)?sn(r):r;let v=p,m=pf(v);for(;m&&r&&f!==v;){const b=ea(m),g=m.getBoundingClientRect(),y=Gn(m),w=g.left+(m.clientLeft+parseFloat(y.paddingLeft))*b.x,k=g.top+(m.clientTop+parseFloat(y.paddingTop))*b.y;c*=b.x,u*=b.y,d*=b.x,h*=b.y,c+=w,u+=k,v=sn(m),m=pf(v)}}return Vc({width:d,height:h,x:c,y:u})}function nm(e,t){const n=Nu(e).scrollLeft;return t?t.left+n:so(gr(e)).left+n}function I1(e,t,n){n===void 0&&(n=!1);const r=e.getBoundingClientRect(),i=r.left+t.scrollLeft-(n?0:nm(e,r)),o=r.top+t.scrollTop;return{x:i,y:o}}function TN(e){let{elements:t,rect:n,offsetParent:r,strategy:i}=e;const o=i==="fixed",a=gr(r),s=t?Iu(t.floating):!1;if(r===a||s&&o)return n;let c={scrollLeft:0,scrollTop:0},u=fr(1);const d=fr(0),h=mr(r);if((h||!h&&!o)&&((_a(r)!=="body"||sl(a))&&(c=Nu(r)),mr(r))){const f=so(r);u=ea(r),d.x=f.x+r.clientLeft,d.y=f.y+r.clientTop}const p=a&&!h&&!o?I1(a,c,!0):fr(0);return{width:n.width*u.x,height:n.height*u.y,x:n.x*u.x-c.scrollLeft*u.x+d.x+p.x,y:n.y*u.y-c.scrollTop*u.y+d.y+p.y}}function jN(e){return Array.from(e.getClientRects())}function EN(e){const t=gr(e),n=Nu(e),r=e.ownerDocument.body,i=rn(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),o=rn(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let a=-n.scrollLeft+nm(e);const s=-n.scrollTop;return Gn(r).direction==="rtl"&&(a+=rn(t.clientWidth,r.clientWidth)-i),{width:i,height:o,x:a,y:s}}function IN(e,t){const n=sn(e),r=gr(e),i=n.visualViewport;let o=r.clientWidth,a=r.clientHeight,s=0,c=0;if(i){o=i.width,a=i.height;const u=em();(!u||u&&t==="fixed")&&(s=i.offsetLeft,c=i.offsetTop)}return{width:o,height:a,x:s,y:c}}const NN=new Set(["absolute","fixed"]);function _N(e,t){const n=so(e,!0,t==="fixed"),r=n.top+e.clientTop,i=n.left+e.clientLeft,o=mr(e)?ea(e):fr(1),a=e.clientWidth*o.x,s=e.clientHeight*o.y,c=i*o.x,u=r*o.y;return{width:a,height:s,x:c,y:u}}function Ey(e,t,n){let r;if(t==="viewport")r=IN(e,n);else if(t==="document")r=EN(gr(e));else if(Qn(t))r=_N(t,n);else{const i=E1(e);r={x:t.x-i.x,y:t.y-i.y,width:t.width,height:t.height}}return Vc(r)}function N1(e,t){const n=Ci(e);return n===t||!Qn(n)||va(n)?!1:Gn(n).position==="fixed"||N1(n,t)}function PN(e,t){const n=t.get(e);if(n)return n;let r=$s(e,[],!1).filter(s=>Qn(s)&&_a(s)!=="body"),i=null;const o=Gn(e).position==="fixed";let a=o?Ci(e):e;for(;Qn(a)&&!va(a);){const s=Gn(a),c=Jp(a);!c&&s.position==="fixed"&&(i=null),(o?!c&&!i:!c&&s.position==="static"&&!!i&&NN.has(i.position)||sl(a)&&!c&&N1(e,a))?r=r.filter(d=>d!==a):i=s,a=Ci(a)}return t.set(e,r),r}function RN(e){let{element:t,boundary:n,rootBoundary:r,strategy:i}=e;const a=[...n==="clippingAncestors"?Iu(t)?[]:PN(t,this._c):[].concat(n),r],s=a[0],c=a.reduce((u,d)=>{const h=Ey(t,d,i);return u.top=rn(h.top,u.top),u.right=Si(h.right,u.right),u.bottom=Si(h.bottom,u.bottom),u.left=rn(h.left,u.left),u},Ey(t,s,i));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function FN(e){const{width:t,height:n}=j1(e);return{width:t,height:n}}function MN(e,t,n){const r=mr(t),i=gr(t),o=n==="fixed",a=so(e,!0,o,t);let s={scrollLeft:0,scrollTop:0};const c=fr(0);function u(){c.x=nm(i)}if(r||!r&&!o)if((_a(t)!=="body"||sl(i))&&(s=Nu(t)),r){const f=so(t,!0,o,t);c.x=f.x+t.clientLeft,c.y=f.y+t.clientTop}else i&&u();o&&!r&&i&&u();const d=i&&!r&&!o?I1(i,s):fr(0),h=a.left+s.scrollLeft-c.x-d.x,p=a.top+s.scrollTop-c.y-d.y;return{x:h,y:p,width:a.width,height:a.height}}function _d(e){return Gn(e).position==="static"}function Iy(e,t){if(!mr(e)||Gn(e).position==="fixed")return null;if(t)return t(e);let n=e.offsetParent;return gr(e)===n&&(n=n.ownerDocument.body),n}function _1(e,t){const n=sn(e);if(Iu(e))return n;if(!mr(e)){let i=Ci(e);for(;i&&!va(i);){if(Qn(i)&&!_d(i))return i;i=Ci(i)}return n}let r=Iy(e,t);for(;r&&yN(r)&&_d(r);)r=Iy(r,t);return r&&va(r)&&_d(r)&&!Jp(r)?n:r||kN(e)||n}const ON=async function(e){const t=this.getOffsetParent||_1,n=this.getDimensions,r=await n(e.floating);return{reference:MN(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function DN(e){return Gn(e).direction==="rtl"}const LN={convertOffsetParentRelativeRectToViewportRelativeRect:TN,getDocumentElement:gr,getClippingRect:RN,getOffsetParent:_1,getElementRects:ON,getClientRects:jN,getDimensions:FN,getScale:ea,isElement:Qn,isRTL:DN};function P1(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function zN(e,t){let n=null,r;const i=gr(e);function o(){var s;clearTimeout(r),(s=n)==null||s.disconnect(),n=null}function a(s,c){s===void 0&&(s=!1),c===void 0&&(c=1),o();const u=e.getBoundingClientRect(),{left:d,top:h,width:p,height:f}=u;if(s||t(),!p||!f)return;const v=Ol(h),m=Ol(i.clientWidth-(d+p)),b=Ol(i.clientHeight-(h+f)),g=Ol(d),w={rootMargin:-v+"px "+-m+"px "+-b+"px "+-g+"px",threshold:rn(0,Si(1,c))||1};let k=!0;function A(C){const I=C[0].intersectionRatio;if(I!==c){if(!k)return a();I?a(!1,I):r=setTimeout(()=>{a(!1,1e-7)},1e3)}I===1&&!P1(u,e.getBoundingClientRect())&&a(),k=!1}try{n=new IntersectionObserver(A,{...w,root:i.ownerDocument})}catch{n=new IntersectionObserver(A,w)}n.observe(e)}return a(!0),o}function BN(e,t,n,r){r===void 0&&(r={});const{ancestorScroll:i=!0,ancestorResize:o=!0,elementResize:a=typeof ResizeObserver=="function",layoutShift:s=typeof IntersectionObserver=="function",animationFrame:c=!1}=r,u=tm(e),d=i||o?[...u?$s(u):[],...$s(t)]:[];d.forEach(g=>{i&&g.addEventListener("scroll",n,{passive:!0}),o&&g.addEventListener("resize",n)});const h=u&&s?zN(u,n):null;let p=-1,f=null;a&&(f=new ResizeObserver(g=>{let[y]=g;y&&y.target===u&&f&&(f.unobserve(t),cancelAnimationFrame(p),p=requestAnimationFrame(()=>{var w;(w=f)==null||w.observe(t)})),n()}),u&&!c&&f.observe(u),f.observe(t));let v,m=c?so(e):null;c&&b();function b(){const g=so(e);m&&!P1(m,g)&&n(),m=g,v=requestAnimationFrame(b)}return n(),()=>{var g;d.forEach(y=>{i&&y.removeEventListener("scroll",n),o&&y.removeEventListener("resize",n)}),h==null||h(),(g=f)==null||g.disconnect(),f=null,c&&cancelAnimationFrame(v)}}const HN=dN,$N=hN,WN=lN,VN=pN,qN=cN,Ny=sN,UN=fN,YN=(e,t,n)=>{const r=new Map,i={platform:LN,...n},o={...i.platform,_c:r};return aN(e,t,{...i,platform:o})};var QN=typeof document<"u",GN=function(){},dc=QN?x.useLayoutEffect:GN;function qc(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(!qc(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;){const o=i[r];if(!(o==="_owner"&&e.$$typeof)&&!qc(e[o],t[o]))return!1}return!0}return e!==e&&t!==t}function R1(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function _y(e,t){const n=R1(e);return Math.round(t*n)/n}function Pd(e){const t=x.useRef(e);return dc(()=>{t.current=e}),t}function KN(e){e===void 0&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:r=[],platform:i,elements:{reference:o,floating:a}={},transform:s=!0,whileElementsMounted:c,open:u}=e,[d,h]=x.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[p,f]=x.useState(r);qc(p,r)||f(r);const[v,m]=x.useState(null),[b,g]=x.useState(null),y=x.useCallback(M=>{M!==C.current&&(C.current=M,m(M))},[]),w=x.useCallback(M=>{M!==I.current&&(I.current=M,g(M))},[]),k=o||v,A=a||b,C=x.useRef(null),I=x.useRef(null),F=x.useRef(d),D=c!=null,j=Pd(c),R=Pd(i),_=Pd(u),$=x.useCallback(()=>{if(!C.current||!I.current)return;const M={placement:t,strategy:n,middleware:p};R.current&&(M.platform=R.current),YN(C.current,I.current,M).then(L=>{const S={...L,isPositioned:_.current!==!1};O.current&&!qc(F.current,S)&&(F.current=S,yo.flushSync(()=>{h(S)}))})},[p,t,n,R,_]);dc(()=>{u===!1&&F.current.isPositioned&&(F.current.isPositioned=!1,h(M=>({...M,isPositioned:!1})))},[u]);const O=x.useRef(!1);dc(()=>(O.current=!0,()=>{O.current=!1}),[]),dc(()=>{if(k&&(C.current=k),A&&(I.current=A),k&&A){if(j.current)return j.current(k,A,$);$()}},[k,A,$,j,D]);const V=x.useMemo(()=>({reference:C,floating:I,setReference:y,setFloating:w}),[y,w]),U=x.useMemo(()=>({reference:k,floating:A}),[k,A]),K=x.useMemo(()=>{const M={position:n,left:0,top:0};if(!U.floating)return M;const L=_y(U.floating,d.x),S=_y(U.floating,d.y);return s?{...M,transform:"translate("+L+"px, "+S+"px)",...R1(U.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:L,top:S}},[n,s,U.floating,d.x,d.y]);return x.useMemo(()=>({...d,update:$,refs:V,elements:U,floatingStyles:K}),[d,$,V,U,K])}const ZN=e=>{function t(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:e,fn(n){const{element:r,padding:i}=typeof e=="function"?e(n):e;return r&&t(r)?r.current!=null?Ny({element:r.current,padding:i}).fn(n):{}:r?Ny({element:r,padding:i}).fn(n):{}}}},XN=(e,t)=>({...HN(e),options:[e,t]}),JN=(e,t)=>({...$N(e),options:[e,t]}),e_=(e,t)=>({...UN(e),options:[e,t]}),t_=(e,t)=>({...WN(e),options:[e,t]}),n_=(e,t)=>({...VN(e),options:[e,t]}),r_=(e,t)=>({...qN(e),options:[e,t]}),i_=(e,t)=>({...ZN(e),options:[e,t]});var o_="Arrow",F1=x.forwardRef((e,t)=>{const{children:n,width:r=10,height:i=5,...o}=e;return l.jsx(je.svg,{...o,ref:t,width:r,height:i,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?n:l.jsx("polygon",{points:"0,0 30,0 15,10"})})});F1.displayName=o_;var a_=F1;function M1(e){const[t,n]=x.useState(void 0);return At(()=>{if(e){n({width:e.offsetWidth,height:e.offsetHeight});const r=new ResizeObserver(i=>{if(!Array.isArray(i)||!i.length)return;const o=i[0];let a,s;if("borderBoxSize"in o){const c=o.borderBoxSize,u=Array.isArray(c)?c[0]:c;a=u.inlineSize,s=u.blockSize}else a=e.offsetWidth,s=e.offsetHeight;n({width:a,height:s})});return r.observe(e,{box:"border-box"}),()=>r.unobserve(e)}else n(void 0)},[e]),t}var rm="Popper",[O1,_u]=vo(rm),[s_,D1]=O1(rm),L1=e=>{const{__scopePopper:t,children:n}=e,[r,i]=x.useState(null);return l.jsx(s_,{scope:t,anchor:r,onAnchorChange:i,children:n})};L1.displayName=rm;var z1="PopperAnchor",B1=x.forwardRef((e,t)=>{const{__scopePopper:n,virtualRef:r,...i}=e,o=D1(z1,n),a=x.useRef(null),s=He(t,a);return x.useEffect(()=>{o.onAnchorChange((r==null?void 0:r.current)||a.current)}),r?null:l.jsx(je.div,{...i,ref:s})});B1.displayName=z1;var im="PopperContent",[l_,c_]=O1(im),H1=x.forwardRef((e,t)=>{var Z,we,Ne,ve,xe,Se;const{__scopePopper:n,side:r="bottom",sideOffset:i=0,align:o="center",alignOffset:a=0,arrowPadding:s=0,avoidCollisions:c=!0,collisionBoundary:u=[],collisionPadding:d=0,sticky:h="partial",hideWhenDetached:p=!1,updatePositionStrategy:f="optimized",onPlaced:v,...m}=e,b=D1(im,n),[g,y]=x.useState(null),w=He(t,ot=>y(ot)),[k,A]=x.useState(null),C=M1(k),I=(C==null?void 0:C.width)??0,F=(C==null?void 0:C.height)??0,D=r+(o!=="center"?"-"+o:""),j=typeof d=="number"?d:{top:0,right:0,bottom:0,left:0,...d},R=Array.isArray(u)?u:[u],_=R.length>0,$={padding:j,boundary:R.filter(d_),altBoundary:_},{refs:O,floatingStyles:V,placement:U,isPositioned:K,middlewareData:M}=KN({strategy:"fixed",placement:D,whileElementsMounted:(...ot)=>BN(...ot,{animationFrame:f==="always"}),elements:{reference:b.anchor},middleware:[XN({mainAxis:i+F,alignmentAxis:a}),c&&JN({mainAxis:!0,crossAxis:!1,limiter:h==="partial"?e_():void 0,...$}),c&&t_({...$}),n_({...$,apply:({elements:ot,rects:wt,availableWidth:Jt,availableHeight:en})=>{const{width:mn,height:Dr}=wt.reference,gn=ot.floating.style;gn.setProperty("--radix-popper-available-width",`${Jt}px`),gn.setProperty("--radix-popper-available-height",`${en}px`),gn.setProperty("--radix-popper-anchor-width",`${mn}px`),gn.setProperty("--radix-popper-anchor-height",`${Dr}px`)}}),k&&i_({element:k,padding:s}),h_({arrowWidth:I,arrowHeight:F}),p&&r_({strategy:"referenceHidden",...$})]}),[L,S]=V1(U),oe=Yn(v);At(()=>{K&&(oe==null||oe())},[K,oe]);const ne=(Z=M.arrow)==null?void 0:Z.x,T=(we=M.arrow)==null?void 0:we.y,le=((Ne=M.arrow)==null?void 0:Ne.centerOffset)!==0,[Ee,ye]=x.useState();return At(()=>{g&&ye(window.getComputedStyle(g).zIndex)},[g]),l.jsx("div",{ref:O.setFloating,"data-radix-popper-content-wrapper":"",style:{...V,transform:K?V.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:Ee,"--radix-popper-transform-origin":[(ve=M.transformOrigin)==null?void 0:ve.x,(xe=M.transformOrigin)==null?void 0:xe.y].join(" "),...((Se=M.hide)==null?void 0:Se.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:l.jsx(l_,{scope:n,placedSide:L,onArrowChange:A,arrowX:ne,arrowY:T,shouldHideArrow:le,children:l.jsx(je.div,{"data-side":L,"data-align":S,...m,ref:w,style:{...m.style,animation:K?void 0:"none"}})})})});H1.displayName=im;var $1="PopperArrow",u_={top:"bottom",right:"left",bottom:"top",left:"right"},W1=x.forwardRef(function(t,n){const{__scopePopper:r,...i}=t,o=c_($1,r),a=u_[o.placedSide];return l.jsx("span",{ref:o.onArrowChange,style:{position:"absolute",left:o.arrowX,top:o.arrowY,[a]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[o.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[o.placedSide],visibility:o.shouldHideArrow?"hidden":void 0},children:l.jsx(a_,{...i,ref:n,style:{...i.style,display:"block"}})})});W1.displayName=$1;function d_(e){return e!==null}var h_=e=>({name:"transformOrigin",options:e,fn(t){var b,g,y;const{placement:n,rects:r,middlewareData:i}=t,a=((b=i.arrow)==null?void 0:b.centerOffset)!==0,s=a?0:e.arrowWidth,c=a?0:e.arrowHeight,[u,d]=V1(n),h={start:"0%",center:"50%",end:"100%"}[d],p=(((g=i.arrow)==null?void 0:g.x)??0)+s/2,f=(((y=i.arrow)==null?void 0:y.y)??0)+c/2;let v="",m="";return u==="bottom"?(v=a?h:`${p}px`,m=`${-c}px`):u==="top"?(v=a?h:`${p}px`,m=`${r.floating.height+c}px`):u==="right"?(v=`${-c}px`,m=a?h:`${f}px`):u==="left"&&(v=`${r.floating.width+c}px`,m=a?h:`${f}px`),{data:{x:v,y:m}}}});function V1(e){const[t,n="center"]=e.split("-");return[t,n]}var f_=L1,q1=B1,U1=H1,Y1=W1,[Pu,_8]=vo("Tooltip",[_u]),om=_u(),Q1="TooltipProvider",p_=700,Py="tooltip.open",[m_,G1]=Pu(Q1),K1=e=>{const{__scopeTooltip:t,delayDuration:n=p_,skipDelayDuration:r=300,disableHoverableContent:i=!1,children:o}=e,a=x.useRef(!0),s=x.useRef(!1),c=x.useRef(0);return x.useEffect(()=>{const u=c.current;return()=>window.clearTimeout(u)},[]),l.jsx(m_,{scope:t,isOpenDelayedRef:a,delayDuration:n,onOpen:x.useCallback(()=>{window.clearTimeout(c.current),a.current=!1},[]),onClose:x.useCallback(()=>{window.clearTimeout(c.current),c.current=window.setTimeout(()=>a.current=!0,r)},[r]),isPointerInTransitRef:s,onPointerInTransitChange:x.useCallback(u=>{s.current=u},[]),disableHoverableContent:i,children:o})};K1.displayName=Q1;var Z1="Tooltip",[P8,Ru]=Pu(Z1),mf="TooltipTrigger",g_=x.forwardRef((e,t)=>{const{__scopeTooltip:n,...r}=e,i=Ru(mf,n),o=G1(mf,n),a=om(n),s=x.useRef(null),c=He(t,s,i.onTriggerChange),u=x.useRef(!1),d=x.useRef(!1),h=x.useCallback(()=>u.current=!1,[]);return x.useEffect(()=>()=>document.removeEventListener("pointerup",h),[h]),l.jsx(q1,{asChild:!0,...a,children:l.jsx(je.button,{"aria-describedby":i.open?i.contentId:void 0,"data-state":i.stateAttribute,...r,ref:c,onPointerMove:ge(e.onPointerMove,p=>{p.pointerType!=="touch"&&!d.current&&!o.isPointerInTransitRef.current&&(i.onTriggerEnter(),d.current=!0)}),onPointerLeave:ge(e.onPointerLeave,()=>{i.onTriggerLeave(),d.current=!1}),onPointerDown:ge(e.onPointerDown,()=>{i.open&&i.onClose(),u.current=!0,document.addEventListener("pointerup",h,{once:!0})}),onFocus:ge(e.onFocus,()=>{u.current||i.onOpen()}),onBlur:ge(e.onBlur,i.onClose),onClick:ge(e.onClick,i.onClose)})})});g_.displayName=mf;var y_="TooltipPortal",[R8,v_]=Pu(y_,{forceMount:void 0}),wa="TooltipContent",X1=x.forwardRef((e,t)=>{const n=v_(wa,e.__scopeTooltip),{forceMount:r=n.forceMount,side:i="top",...o}=e,a=Ru(wa,e.__scopeTooltip);return l.jsx(wo,{present:r||a.open,children:a.disableHoverableContent?l.jsx(J1,{side:i,...o,ref:t}):l.jsx(w_,{side:i,...o,ref:t})})}),w_=x.forwardRef((e,t)=>{const n=Ru(wa,e.__scopeTooltip),r=G1(wa,e.__scopeTooltip),i=x.useRef(null),o=He(t,i),[a,s]=x.useState(null),{trigger:c,onClose:u}=n,d=i.current,{onPointerInTransitChange:h}=r,p=x.useCallback(()=>{s(null),h(!1)},[h]),f=x.useCallback((v,m)=>{const b=v.currentTarget,g={x:v.clientX,y:v.clientY},y=C_(g,b.getBoundingClientRect()),w=A_(g,y),k=T_(m.getBoundingClientRect()),A=E_([...w,...k]);s(A),h(!0)},[h]);return x.useEffect(()=>()=>p(),[p]),x.useEffect(()=>{if(c&&d){const v=b=>f(b,d),m=b=>f(b,c);return c.addEventListener("pointerleave",v),d.addEventListener("pointerleave",m),()=>{c.removeEventListener("pointerleave",v),d.removeEventListener("pointerleave",m)}}},[c,d,f,p]),x.useEffect(()=>{if(a){const v=m=>{const b=m.target,g={x:m.clientX,y:m.clientY},y=(c==null?void 0:c.contains(b))||(d==null?void 0:d.contains(b)),w=!j_(g,a);y?p():w&&(p(),u())};return document.addEventListener("pointermove",v),()=>document.removeEventListener("pointermove",v)}},[c,d,a,u,p]),l.jsx(J1,{...e,ref:o})}),[x_,b_]=Pu(Z1,{isInside:!1}),k_=Bj("TooltipContent"),J1=x.forwardRef((e,t)=>{const{__scopeTooltip:n,children:r,"aria-label":i,onEscapeKeyDown:o,onPointerDownOutside:a,...s}=e,c=Ru(wa,n),u=om(n),{onClose:d}=c;return x.useEffect(()=>(document.addEventListener(Py,d),()=>document.removeEventListener(Py,d)),[d]),x.useEffect(()=>{if(c.trigger){const h=p=>{const f=p.target;f!=null&&f.contains(c.trigger)&&d()};return window.addEventListener("scroll",h,{capture:!0}),()=>window.removeEventListener("scroll",h,{capture:!0})}},[c.trigger,d]),l.jsx(ol,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:o,onPointerDownOutside:a,onFocusOutside:h=>h.preventDefault(),onDismiss:d,children:l.jsxs(U1,{"data-state":c.stateAttribute,...u,...s,ref:t,style:{...s.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:[l.jsx(k_,{children:r}),l.jsx(x_,{scope:n,isInside:!0,children:l.jsx(lE,{id:c.contentId,role:"tooltip",children:i||r})})]})})});X1.displayName=wa;var ek="TooltipArrow",S_=x.forwardRef((e,t)=>{const{__scopeTooltip:n,...r}=e,i=om(n);return b_(ek,n).isInside?null:l.jsx(Y1,{...i,...r,ref:t})});S_.displayName=ek;function C_(e,t){const n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),i=Math.abs(t.right-e.x),o=Math.abs(t.left-e.x);switch(Math.min(n,r,i,o)){case o:return"left";case i:return"right";case n:return"top";case r:return"bottom";default:throw new Error("unreachable")}}function A_(e,t,n=5){const 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});break}return r}function T_(e){const{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}]}function j_(e,t){const{x:n,y:r}=e;let i=!1;for(let o=0,a=t.length-1;or!=p>r&&n<(h-u)*(r-d)/(p-d)+u&&(i=!i)}return i}function E_(e){const t=e.slice();return t.sort((n,r)=>n.xr.x?1:n.yr.y?1:0),I_(t)}function I_(e){if(e.length<=1)return e.slice();const t=[];for(let r=0;r=2;){const o=t[t.length-1],a=t[t.length-2];if((o.x-a.x)*(i.y-a.y)>=(o.y-a.y)*(i.x-a.x))t.pop();else break}t.push(i)}t.pop();const n=[];for(let r=e.length-1;r>=0;r--){const i=e[r];for(;n.length>=2;){const o=n[n.length-1],a=n[n.length-2];if((o.x-a.x)*(i.y-a.y)>=(o.y-a.y)*(i.x-a.x))n.pop();else break}n.push(i)}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)}var N_=K1,tk=X1;const __=N_,P_=x.forwardRef(({className:e,sideOffset:t=4,...n},r)=>l.jsx(tk,{ref:r,sideOffset:t,className:Qe("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}));P_.displayName=tk.displayName;var Fu=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(){}},Mu=typeof window>"u"||"Deno"in globalThis;function Mn(){}function R_(e,t){return typeof e=="function"?e(t):e}function F_(e){return typeof e=="number"&&e>=0&&e!==1/0}function M_(e,t){return Math.max(e+(t||0)-Date.now(),0)}function gf(e,t){return typeof e=="function"?e(t):e}function O_(e,t){return typeof e=="function"?e(t):e}function Ry(e,t){const{type:n="all",exact:r,fetchStatus:i,predicate:o,queryKey:a,stale:s}=e;if(a){if(r){if(t.queryHash!==am(a,t.options))return!1}else if(!Vs(t.queryKey,a))return!1}if(n!=="all"){const c=t.isActive();if(n==="active"&&!c||n==="inactive"&&c)return!1}return!(typeof s=="boolean"&&t.isStale()!==s||i&&i!==t.state.fetchStatus||o&&!o(t))}function Fy(e,t){const{exact:n,status:r,predicate:i,mutationKey:o}=e;if(o){if(!t.options.mutationKey)return!1;if(n){if(Ws(t.options.mutationKey)!==Ws(o))return!1}else if(!Vs(t.options.mutationKey,o))return!1}return!(r&&t.state.status!==r||i&&!i(t))}function am(e,t){return((t==null?void 0:t.queryKeyHashFn)||Ws)(e)}function Ws(e){return JSON.stringify(e,(t,n)=>yf(n)?Object.keys(n).sort().reduce((r,i)=>(r[i]=n[i],r),{}):n)}function Vs(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(t).every(n=>Vs(e[n],t[n])):!1}function nk(e,t){if(e===t)return e;const n=My(e)&&My(t);if(n||yf(e)&&yf(t)){const r=n?e:Object.keys(e),i=r.length,o=n?t:Object.keys(t),a=o.length,s=n?[]:{},c=new Set(r);let u=0;for(let d=0;d{setTimeout(t,e)})}function L_(e,t,n){return typeof n.structuralSharing=="function"?n.structuralSharing(e,t):n.structuralSharing!==!1?nk(e,t):t}function z_(e,t,n=0){const r=[...e,t];return n&&r.length>n?r.slice(1):r}function B_(e,t,n=0){const r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var sm=Symbol();function rk(e,t){return!e.queryFn&&(t!=null&&t.initialPromise)?()=>t.initialPromise:!e.queryFn||e.queryFn===sm?()=>Promise.reject(new Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}var Yi,ti,na,ox,H_=(ox=class extends Fu{constructor(){super();Re(this,Yi);Re(this,ti);Re(this,na);me(this,na,t=>{if(!Mu&&window.addEventListener){const n=()=>t();return window.addEventListener("visibilitychange",n,!1),()=>{window.removeEventListener("visibilitychange",n)}}})}onSubscribe(){H(this,ti)||this.setEventListener(H(this,na))}onUnsubscribe(){var t;this.hasListeners()||((t=H(this,ti))==null||t.call(this),me(this,ti,void 0))}setEventListener(t){var n;me(this,na,t),(n=H(this,ti))==null||n.call(this),me(this,ti,t(r=>{typeof r=="boolean"?this.setFocused(r):this.onFocus()}))}setFocused(t){H(this,Yi)!==t&&(me(this,Yi,t),this.onFocus())}onFocus(){const t=this.isFocused();this.listeners.forEach(n=>{n(t)})}isFocused(){var t;return typeof H(this,Yi)=="boolean"?H(this,Yi):((t=globalThis.document)==null?void 0:t.visibilityState)!=="hidden"}},Yi=new WeakMap,ti=new WeakMap,na=new WeakMap,ox),ik=new H_,ra,ni,ia,ax,$_=(ax=class extends Fu{constructor(){super();Re(this,ra,!0);Re(this,ni);Re(this,ia);me(this,ia,t=>{if(!Mu&&window.addEventListener){const n=()=>t(!0),r=()=>t(!1);return window.addEventListener("online",n,!1),window.addEventListener("offline",r,!1),()=>{window.removeEventListener("online",n),window.removeEventListener("offline",r)}}})}onSubscribe(){H(this,ni)||this.setEventListener(H(this,ia))}onUnsubscribe(){var t;this.hasListeners()||((t=H(this,ni))==null||t.call(this),me(this,ni,void 0))}setEventListener(t){var n;me(this,ia,t),(n=H(this,ni))==null||n.call(this),me(this,ni,t(this.setOnline.bind(this)))}setOnline(t){H(this,ra)!==t&&(me(this,ra,t),this.listeners.forEach(r=>{r(t)}))}isOnline(){return H(this,ra)}},ra=new WeakMap,ni=new WeakMap,ia=new WeakMap,ax),Uc=new $_;function W_(){let e,t;const n=new Promise((i,o)=>{e=i,t=o});n.status="pending",n.catch(()=>{});function r(i){Object.assign(n,i),delete n.resolve,delete n.reject}return n.resolve=i=>{r({status:"fulfilled",value:i}),e(i)},n.reject=i=>{r({status:"rejected",reason:i}),t(i)},n}function V_(e){return Math.min(1e3*2**e,3e4)}function ok(e){return(e??"online")==="online"?Uc.isOnline():!0}var ak=class extends Error{constructor(e){super("CancelledError"),this.revert=e==null?void 0:e.revert,this.silent=e==null?void 0:e.silent}};function Rd(e){return e instanceof ak}function sk(e){let t=!1,n=0,r=!1,i;const o=W_(),a=m=>{var b;r||(p(new ak(m)),(b=e.abort)==null||b.call(e))},s=()=>{t=!0},c=()=>{t=!1},u=()=>ik.isFocused()&&(e.networkMode==="always"||Uc.isOnline())&&e.canRun(),d=()=>ok(e.networkMode)&&e.canRun(),h=m=>{var b;r||(r=!0,(b=e.onSuccess)==null||b.call(e,m),i==null||i(),o.resolve(m))},p=m=>{var b;r||(r=!0,(b=e.onError)==null||b.call(e,m),i==null||i(),o.reject(m))},f=()=>new Promise(m=>{var b;i=g=>{(r||u())&&m(g)},(b=e.onPause)==null||b.call(e)}).then(()=>{var m;i=void 0,r||(m=e.onContinue)==null||m.call(e)}),v=()=>{if(r)return;let m;const b=n===0?e.initialPromise:void 0;try{m=b??e.fn()}catch(g){m=Promise.reject(g)}Promise.resolve(m).then(h).catch(g=>{var C;if(r)return;const y=e.retry??(Mu?0:3),w=e.retryDelay??V_,k=typeof w=="function"?w(n,g):w,A=y===!0||typeof y=="number"&&nu()?void 0:f()).then(()=>{t?p(g):v()})})};return{promise:o,cancel:a,continue:()=>(i==null||i(),o),cancelRetry:s,continueRetry:c,canStart:d,start:()=>(d()?v():f().then(v),o)}}var q_=e=>setTimeout(e,0);function U_(){let e=[],t=0,n=s=>{s()},r=s=>{s()},i=q_;const o=s=>{t?e.push(s):i(()=>{n(s)})},a=()=>{const s=e;e=[],s.length&&i(()=>{r(()=>{s.forEach(c=>{n(c)})})})};return{batch:s=>{let c;t++;try{c=s()}finally{t--,t||a()}return c},batchCalls:s=>(...c)=>{o(()=>{s(...c)})},schedule:o,setNotifyFunction:s=>{n=s},setBatchNotifyFunction:s=>{r=s},setScheduler:s=>{i=s}}}var Lt=U_(),Qi,sx,lk=(sx=class{constructor(){Re(this,Qi)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),F_(this.gcTime)&&me(this,Qi,setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(Mu?1/0:5*60*1e3))}clearGcTimeout(){H(this,Qi)&&(clearTimeout(H(this,Qi)),me(this,Qi,void 0))}},Qi=new WeakMap,sx),oa,Gi,wn,Ki,Nt,Xs,Zi,On,br,lx,Y_=(lx=class extends lk{constructor(t){super();Re(this,On);Re(this,oa);Re(this,Gi);Re(this,wn);Re(this,Ki);Re(this,Nt);Re(this,Xs);Re(this,Zi);me(this,Zi,!1),me(this,Xs,t.defaultOptions),this.setOptions(t.options),this.observers=[],me(this,Ki,t.client),me(this,wn,H(this,Ki).getQueryCache()),this.queryKey=t.queryKey,this.queryHash=t.queryHash,me(this,oa,G_(this.options)),this.state=t.state??H(this,oa),this.scheduleGc()}get meta(){return this.options.meta}get promise(){var t;return(t=H(this,Nt))==null?void 0:t.promise}setOptions(t){this.options={...H(this,Xs),...t},this.updateGcTime(this.options.gcTime)}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&H(this,wn).remove(this)}setData(t,n){const r=L_(this.state.data,t,this.options);return jt(this,On,br).call(this,{data:r,type:"success",dataUpdatedAt:n==null?void 0:n.updatedAt,manual:n==null?void 0:n.manual}),r}setState(t,n){jt(this,On,br).call(this,{type:"setState",state:t,setStateOptions:n})}cancel(t){var r,i;const n=(r=H(this,Nt))==null?void 0:r.promise;return(i=H(this,Nt))==null||i.cancel(t),n?n.then(Mn).catch(Mn):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(H(this,oa))}isActive(){return this.observers.some(t=>O_(t.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===sm||this.state.dataUpdateCount+this.state.errorUpdateCount===0}isStatic(){return this.getObserversCount()>0?this.observers.some(t=>gf(t.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(t=>t.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(t=0){return this.state.data===void 0?!0:t==="static"?!1:this.state.isInvalidated?!0:!M_(this.state.dataUpdatedAt,t)}onFocus(){var n;const t=this.observers.find(r=>r.shouldFetchOnWindowFocus());t==null||t.refetch({cancelRefetch:!1}),(n=H(this,Nt))==null||n.continue()}onOnline(){var n;const t=this.observers.find(r=>r.shouldFetchOnReconnect());t==null||t.refetch({cancelRefetch:!1}),(n=H(this,Nt))==null||n.continue()}addObserver(t){this.observers.includes(t)||(this.observers.push(t),this.clearGcTimeout(),H(this,wn).notify({type:"observerAdded",query:this,observer:t}))}removeObserver(t){this.observers.includes(t)&&(this.observers=this.observers.filter(n=>n!==t),this.observers.length||(H(this,Nt)&&(H(this,Zi)?H(this,Nt).cancel({revert:!0}):H(this,Nt).cancelRetry()),this.scheduleGc()),H(this,wn).notify({type:"observerRemoved",query:this,observer:t}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||jt(this,On,br).call(this,{type:"invalidate"})}fetch(t,n){var u,d,h;if(this.state.fetchStatus!=="idle"){if(this.state.data!==void 0&&(n!=null&&n.cancelRefetch))this.cancel({silent:!0});else if(H(this,Nt))return H(this,Nt).continueRetry(),H(this,Nt).promise}if(t&&this.setOptions(t),!this.options.queryFn){const p=this.observers.find(f=>f.options.queryFn);p&&this.setOptions(p.options)}const r=new AbortController,i=p=>{Object.defineProperty(p,"signal",{enumerable:!0,get:()=>(me(this,Zi,!0),r.signal)})},o=()=>{const p=rk(this.options,n),v=(()=>{const m={client:H(this,Ki),queryKey:this.queryKey,meta:this.meta};return i(m),m})();return me(this,Zi,!1),this.options.persister?this.options.persister(p,v,this):p(v)},s=(()=>{const p={fetchOptions:n,options:this.options,queryKey:this.queryKey,client:H(this,Ki),state:this.state,fetchFn:o};return i(p),p})();(u=this.options.behavior)==null||u.onFetch(s,this),me(this,Gi,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((d=s.fetchOptions)==null?void 0:d.meta))&&jt(this,On,br).call(this,{type:"fetch",meta:(h=s.fetchOptions)==null?void 0:h.meta});const c=p=>{var f,v,m,b;Rd(p)&&p.silent||jt(this,On,br).call(this,{type:"error",error:p}),Rd(p)||((v=(f=H(this,wn).config).onError)==null||v.call(f,p,this),(b=(m=H(this,wn).config).onSettled)==null||b.call(m,this.state.data,p,this)),this.scheduleGc()};return me(this,Nt,sk({initialPromise:n==null?void 0:n.initialPromise,fn:s.fetchFn,abort:r.abort.bind(r),onSuccess:p=>{var f,v,m,b;if(p===void 0){c(new Error(`${this.queryHash} data is undefined`));return}try{this.setData(p)}catch(g){c(g);return}(v=(f=H(this,wn).config).onSuccess)==null||v.call(f,p,this),(b=(m=H(this,wn).config).onSettled)==null||b.call(m,p,this.state.error,this),this.scheduleGc()},onError:c,onFail:(p,f)=>{jt(this,On,br).call(this,{type:"failed",failureCount:p,error:f})},onPause:()=>{jt(this,On,br).call(this,{type:"pause"})},onContinue:()=>{jt(this,On,br).call(this,{type:"continue"})},retry:s.options.retry,retryDelay:s.options.retryDelay,networkMode:s.options.networkMode,canRun:()=>!0})),H(this,Nt).start()}},oa=new WeakMap,Gi=new WeakMap,wn=new WeakMap,Ki=new WeakMap,Nt=new WeakMap,Xs=new WeakMap,Zi=new WeakMap,On=new WeakSet,br=function(t){const n=r=>{switch(t.type){case"failed":return{...r,fetchFailureCount:t.failureCount,fetchFailureReason:t.error};case"pause":return{...r,fetchStatus:"paused"};case"continue":return{...r,fetchStatus:"fetching"};case"fetch":return{...r,...Q_(r.data,this.options),fetchMeta:t.meta??null};case"success":return me(this,Gi,void 0),{...r,data:t.data,dataUpdateCount:r.dataUpdateCount+1,dataUpdatedAt:t.dataUpdatedAt??Date.now(),error:null,isInvalidated:!1,status:"success",...!t.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};case"error":const i=t.error;return Rd(i)&&i.revert&&H(this,Gi)?{...H(this,Gi),fetchStatus:"idle"}:{...r,error:i,errorUpdateCount:r.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:r.fetchFailureCount+1,fetchFailureReason:i,fetchStatus:"idle",status:"error"};case"invalidate":return{...r,isInvalidated:!0};case"setState":return{...r,...t.state}}};this.state=n(this.state),Lt.batch(()=>{this.observers.forEach(r=>{r.onQueryUpdate()}),H(this,wn).notify({query:this,type:"updated",action:t})})},lx);function Q_(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:ok(t.networkMode)?"fetching":"paused",...e===void 0&&{error:null,status:"pending"}}}function G_(e){const 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 ir,cx,K_=(cx=class extends Fu{constructor(t={}){super();Re(this,ir);this.config=t,me(this,ir,new Map)}build(t,n,r){const i=n.queryKey,o=n.queryHash??am(i,n);let a=this.get(o);return a||(a=new Y_({client:t,queryKey:i,queryHash:o,options:t.defaultQueryOptions(n),state:r,defaultOptions:t.getQueryDefaults(i)}),this.add(a)),a}add(t){H(this,ir).has(t.queryHash)||(H(this,ir).set(t.queryHash,t),this.notify({type:"added",query:t}))}remove(t){const n=H(this,ir).get(t.queryHash);n&&(t.destroy(),n===t&&H(this,ir).delete(t.queryHash),this.notify({type:"removed",query:t}))}clear(){Lt.batch(()=>{this.getAll().forEach(t=>{this.remove(t)})})}get(t){return H(this,ir).get(t)}getAll(){return[...H(this,ir).values()]}find(t){const n={exact:!0,...t};return this.getAll().find(r=>Ry(n,r))}findAll(t={}){const n=this.getAll();return Object.keys(t).length>0?n.filter(r=>Ry(t,r)):n}notify(t){Lt.batch(()=>{this.listeners.forEach(n=>{n(t)})})}onFocus(){Lt.batch(()=>{this.getAll().forEach(t=>{t.onFocus()})})}onOnline(){Lt.batch(()=>{this.getAll().forEach(t=>{t.onOnline()})})}},ir=new WeakMap,cx),or,Mt,Xi,ar,qr,ux,Z_=(ux=class extends lk{constructor(t){super();Re(this,ar);Re(this,or);Re(this,Mt);Re(this,Xi);this.mutationId=t.mutationId,me(this,Mt,t.mutationCache),me(this,or,[]),this.state=t.state||X_(),this.setOptions(t.options),this.scheduleGc()}setOptions(t){this.options=t,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(t){H(this,or).includes(t)||(H(this,or).push(t),this.clearGcTimeout(),H(this,Mt).notify({type:"observerAdded",mutation:this,observer:t}))}removeObserver(t){me(this,or,H(this,or).filter(n=>n!==t)),this.scheduleGc(),H(this,Mt).notify({type:"observerRemoved",mutation:this,observer:t})}optionalRemove(){H(this,or).length||(this.state.status==="pending"?this.scheduleGc():H(this,Mt).remove(this))}continue(){var t;return((t=H(this,Xi))==null?void 0:t.continue())??this.execute(this.state.variables)}async execute(t){var o,a,s,c,u,d,h,p,f,v,m,b,g,y,w,k,A,C,I,F;const n=()=>{jt(this,ar,qr).call(this,{type:"continue"})};me(this,Xi,sk({fn:()=>this.options.mutationFn?this.options.mutationFn(t):Promise.reject(new Error("No mutationFn found")),onFail:(D,j)=>{jt(this,ar,qr).call(this,{type:"failed",failureCount:D,error:j})},onPause:()=>{jt(this,ar,qr).call(this,{type:"pause"})},onContinue:n,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>H(this,Mt).canRun(this)}));const r=this.state.status==="pending",i=!H(this,Xi).canStart();try{if(r)n();else{jt(this,ar,qr).call(this,{type:"pending",variables:t,isPaused:i}),await((a=(o=H(this,Mt).config).onMutate)==null?void 0:a.call(o,t,this));const j=await((c=(s=this.options).onMutate)==null?void 0:c.call(s,t));j!==this.state.context&&jt(this,ar,qr).call(this,{type:"pending",context:j,variables:t,isPaused:i})}const D=await H(this,Xi).start();return await((d=(u=H(this,Mt).config).onSuccess)==null?void 0:d.call(u,D,t,this.state.context,this)),await((p=(h=this.options).onSuccess)==null?void 0:p.call(h,D,t,this.state.context)),await((v=(f=H(this,Mt).config).onSettled)==null?void 0:v.call(f,D,null,this.state.variables,this.state.context,this)),await((b=(m=this.options).onSettled)==null?void 0:b.call(m,D,null,t,this.state.context)),jt(this,ar,qr).call(this,{type:"success",data:D}),D}catch(D){try{throw await((y=(g=H(this,Mt).config).onError)==null?void 0:y.call(g,D,t,this.state.context,this)),await((k=(w=this.options).onError)==null?void 0:k.call(w,D,t,this.state.context)),await((C=(A=H(this,Mt).config).onSettled)==null?void 0:C.call(A,void 0,D,this.state.variables,this.state.context,this)),await((F=(I=this.options).onSettled)==null?void 0:F.call(I,void 0,D,t,this.state.context)),D}finally{jt(this,ar,qr).call(this,{type:"error",error:D})}}finally{H(this,Mt).runNext(this)}}},or=new WeakMap,Mt=new WeakMap,Xi=new WeakMap,ar=new WeakSet,qr=function(t){const n=r=>{switch(t.type){case"failed":return{...r,failureCount:t.failureCount,failureReason:t.error};case"pause":return{...r,isPaused:!0};case"continue":return{...r,isPaused:!1};case"pending":return{...r,context:t.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:t.isPaused,status:"pending",variables:t.variables,submittedAt:Date.now()};case"success":return{...r,data:t.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...r,data:void 0,error:t.error,failureCount:r.failureCount+1,failureReason:t.error,isPaused:!1,status:"error"}}};this.state=n(this.state),Lt.batch(()=>{H(this,or).forEach(r=>{r.onMutationUpdate(t)}),H(this,Mt).notify({mutation:this,type:"updated",action:t})})},ux);function X_(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var Cr,Dn,Js,dx,J_=(dx=class extends Fu{constructor(t={}){super();Re(this,Cr);Re(this,Dn);Re(this,Js);this.config=t,me(this,Cr,new Set),me(this,Dn,new Map),me(this,Js,0)}build(t,n,r){const i=new Z_({mutationCache:this,mutationId:++pl(this,Js)._,options:t.defaultMutationOptions(n),state:r});return this.add(i),i}add(t){H(this,Cr).add(t);const n=Dl(t);if(typeof n=="string"){const r=H(this,Dn).get(n);r?r.push(t):H(this,Dn).set(n,[t])}this.notify({type:"added",mutation:t})}remove(t){if(H(this,Cr).delete(t)){const n=Dl(t);if(typeof n=="string"){const r=H(this,Dn).get(n);if(r)if(r.length>1){const i=r.indexOf(t);i!==-1&&r.splice(i,1)}else r[0]===t&&H(this,Dn).delete(n)}}this.notify({type:"removed",mutation:t})}canRun(t){const n=Dl(t);if(typeof n=="string"){const r=H(this,Dn).get(n),i=r==null?void 0:r.find(o=>o.state.status==="pending");return!i||i===t}else return!0}runNext(t){var r;const n=Dl(t);if(typeof n=="string"){const i=(r=H(this,Dn).get(n))==null?void 0:r.find(o=>o!==t&&o.state.isPaused);return(i==null?void 0:i.continue())??Promise.resolve()}else return Promise.resolve()}clear(){Lt.batch(()=>{H(this,Cr).forEach(t=>{this.notify({type:"removed",mutation:t})}),H(this,Cr).clear(),H(this,Dn).clear()})}getAll(){return Array.from(H(this,Cr))}find(t){const n={exact:!0,...t};return this.getAll().find(r=>Fy(n,r))}findAll(t={}){return this.getAll().filter(n=>Fy(t,n))}notify(t){Lt.batch(()=>{this.listeners.forEach(n=>{n(t)})})}resumePausedMutations(){const t=this.getAll().filter(n=>n.state.isPaused);return Lt.batch(()=>Promise.all(t.map(n=>n.continue().catch(Mn))))}},Cr=new WeakMap,Dn=new WeakMap,Js=new WeakMap,dx);function Dl(e){var t;return(t=e.options.scope)==null?void 0:t.id}function Dy(e){return{onFetch:(t,n)=>{var d,h,p,f,v;const r=t.options,i=(p=(h=(d=t.fetchOptions)==null?void 0:d.meta)==null?void 0:h.fetchMore)==null?void 0:p.direction,o=((f=t.state.data)==null?void 0:f.pages)||[],a=((v=t.state.data)==null?void 0:v.pageParams)||[];let s={pages:[],pageParams:[]},c=0;const u=async()=>{let m=!1;const b=w=>{Object.defineProperty(w,"signal",{enumerable:!0,get:()=>(t.signal.aborted?m=!0:t.signal.addEventListener("abort",()=>{m=!0}),t.signal)})},g=rk(t.options,t.fetchOptions),y=async(w,k,A)=>{if(m)return Promise.reject();if(k==null&&w.pages.length)return Promise.resolve(w);const I=(()=>{const R={client:t.client,queryKey:t.queryKey,pageParam:k,direction:A?"backward":"forward",meta:t.options.meta};return b(R),R})(),F=await g(I),{maxPages:D}=t.options,j=A?B_:z_;return{pages:j(w.pages,F,D),pageParams:j(w.pageParams,k,D)}};if(i&&o.length){const w=i==="backward",k=w?e5:Ly,A={pages:o,pageParams:a},C=k(r,A);s=await y(A,C,w)}else{const w=e??o.length;do{const k=c===0?a[0]??r.initialPageParam:Ly(r,s);if(c>0&&k==null)break;s=await y(s,k),c++}while(c{var m,b;return(b=(m=t.options).persister)==null?void 0:b.call(m,u,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n)}:t.fetchFn=u}}}function Ly(e,{pages:t,pageParams:n}){const r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function e5(e,{pages:t,pageParams:n}){var r;return t.length>0?(r=e.getPreviousPageParam)==null?void 0:r.call(e,t[0],t,n[0],n):void 0}var et,ri,ii,aa,sa,oi,la,ca,hx,t5=(hx=class{constructor(e={}){Re(this,et);Re(this,ri);Re(this,ii);Re(this,aa);Re(this,sa);Re(this,oi);Re(this,la);Re(this,ca);me(this,et,e.queryCache||new K_),me(this,ri,e.mutationCache||new J_),me(this,ii,e.defaultOptions||{}),me(this,aa,new Map),me(this,sa,new Map),me(this,oi,0)}mount(){pl(this,oi)._++,H(this,oi)===1&&(me(this,la,ik.subscribe(async e=>{e&&(await this.resumePausedMutations(),H(this,et).onFocus())})),me(this,ca,Uc.subscribe(async e=>{e&&(await this.resumePausedMutations(),H(this,et).onOnline())})))}unmount(){var e,t;pl(this,oi)._--,H(this,oi)===0&&((e=H(this,la))==null||e.call(this),me(this,la,void 0),(t=H(this,ca))==null||t.call(this),me(this,ca,void 0))}isFetching(e){return H(this,et).findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return H(this,ri).findAll({...e,status:"pending"}).length}getQueryData(e){var n;const t=this.defaultQueryOptions({queryKey:e});return(n=H(this,et).get(t.queryHash))==null?void 0:n.state.data}ensureQueryData(e){const t=this.defaultQueryOptions(e),n=H(this,et).build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(gf(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return H(this,et).findAll(e).map(({queryKey:t,state:n})=>{const r=n.data;return[t,r]})}setQueryData(e,t,n){const r=this.defaultQueryOptions({queryKey:e}),i=H(this,et).get(r.queryHash),o=i==null?void 0:i.state.data,a=R_(t,o);if(a!==void 0)return H(this,et).build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return Lt.batch(()=>H(this,et).findAll(e).map(({queryKey:r})=>[r,this.setQueryData(r,t,n)]))}getQueryState(e){var n;const t=this.defaultQueryOptions({queryKey:e});return(n=H(this,et).get(t.queryHash))==null?void 0:n.state}removeQueries(e){const t=H(this,et);Lt.batch(()=>{t.findAll(e).forEach(n=>{t.remove(n)})})}resetQueries(e,t){const n=H(this,et);return Lt.batch(()=>(n.findAll(e).forEach(r=>{r.reset()}),this.refetchQueries({type:"active",...e},t)))}cancelQueries(e,t={}){const n={revert:!0,...t},r=Lt.batch(()=>H(this,et).findAll(e).map(i=>i.cancel(n)));return Promise.all(r).then(Mn).catch(Mn)}invalidateQueries(e,t={}){return Lt.batch(()=>(H(this,et).findAll(e).forEach(n=>{n.invalidate()}),(e==null?void 0:e.refetchType)==="none"?Promise.resolve():this.refetchQueries({...e,type:(e==null?void 0:e.refetchType)??(e==null?void 0:e.type)??"active"},t)))}refetchQueries(e,t={}){const n={...t,cancelRefetch:t.cancelRefetch??!0},r=Lt.batch(()=>H(this,et).findAll(e).filter(i=>!i.isDisabled()&&!i.isStatic()).map(i=>{let o=i.fetch(void 0,n);return n.throwOnError||(o=o.catch(Mn)),i.state.fetchStatus==="paused"?Promise.resolve():o}));return Promise.all(r).then(Mn)}fetchQuery(e){const t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);const n=H(this,et).build(this,t);return n.isStaleByTime(gf(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(Mn).catch(Mn)}fetchInfiniteQuery(e){return e.behavior=Dy(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(Mn).catch(Mn)}ensureInfiniteQueryData(e){return e.behavior=Dy(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return Uc.isOnline()?H(this,ri).resumePausedMutations():Promise.resolve()}getQueryCache(){return H(this,et)}getMutationCache(){return H(this,ri)}getDefaultOptions(){return H(this,ii)}setDefaultOptions(e){me(this,ii,e)}setQueryDefaults(e,t){H(this,aa).set(Ws(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){const t=[...H(this,aa).values()],n={};return t.forEach(r=>{Vs(e,r.queryKey)&&Object.assign(n,r.defaultOptions)}),n}setMutationDefaults(e,t){H(this,sa).set(Ws(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){const t=[...H(this,sa).values()],n={};return t.forEach(r=>{Vs(e,r.mutationKey)&&Object.assign(n,r.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;const t={...H(this,ii).queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=am(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===sm&&(t.enabled=!1),t}defaultMutationOptions(e){return e!=null&&e._defaulted?e:{...H(this,ii).mutations,...(e==null?void 0:e.mutationKey)&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){H(this,et).clear(),H(this,ri).clear()}},et=new WeakMap,ri=new WeakMap,ii=new WeakMap,aa=new WeakMap,sa=new WeakMap,oi=new WeakMap,la=new WeakMap,ca=new WeakMap,hx),n5=x.createContext(void 0),r5=({client:e,children:t})=>(x.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),l.jsx(n5.Provider,{value:e,children:t}));/** * @remix-run/router v1.23.0 * * Copyright (c) Remix Software Inc. * * This source code is licensed under the MIT license found in the * LICENSE.md file in the root directory of this source tree. * * @license MIT */function qs(){return qs=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u")throw new Error(t)}function ck(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function o5(){return Math.random().toString(36).substr(2,8)}function By(e,t){return{usr:e.state,key:e.key,idx:t}}function vf(e,t,n,r){return n===void 0&&(n=null),qs({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?Pa(t):t,{state:n,key:t&&t.key||r||o5()})}function Yc(e){let{pathname:t="/",search:n="",hash:r=""}=e;return n&&n!=="?"&&(t+=n.charAt(0)==="?"?n:"?"+n),r&&r!=="#"&&(t+=r.charAt(0)==="#"?r:"#"+r),t}function Pa(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function a5(e,t,n,r){r===void 0&&(r={});let{window:i=document.defaultView,v5Compat:o=!1}=r,a=i.history,s=li.Pop,c=null,u=d();u==null&&(u=0,a.replaceState(qs({},a.state,{idx:u}),""));function d(){return(a.state||{idx:null}).idx}function h(){s=li.Pop;let b=d(),g=b==null?null:b-u;u=b,c&&c({action:s,location:m.location,delta:g})}function p(b,g){s=li.Push;let y=vf(m.location,b,g);u=d()+1;let w=By(y,u),k=m.createHref(y);try{a.pushState(w,"",k)}catch(A){if(A instanceof DOMException&&A.name==="DataCloneError")throw A;i.location.assign(k)}o&&c&&c({action:s,location:m.location,delta:1})}function f(b,g){s=li.Replace;let y=vf(m.location,b,g);u=d();let w=By(y,u),k=m.createHref(y);a.replaceState(w,"",k),o&&c&&c({action:s,location:m.location,delta:0})}function v(b){let g=i.location.origin!=="null"?i.location.origin:i.location.href,y=typeof b=="string"?b:Yc(b);return y=y.replace(/ $/,"%20"),dt(g,"No window.location.(origin|href) available to create URL for href: "+y),new URL(y,g)}let m={get action(){return s},get location(){return e(i,a)},listen(b){if(c)throw new Error("A history only accepts one active listener");return i.addEventListener(zy,h),c=b,()=>{i.removeEventListener(zy,h),c=null}},createHref(b){return t(i,b)},createURL:v,encodeLocation(b){let g=v(b);return{pathname:g.pathname,search:g.search,hash:g.hash}},push:p,replace:f,go(b){return a.go(b)}};return m}var Hy;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(Hy||(Hy={}));function s5(e,t,n){return n===void 0&&(n="/"),l5(e,t,n,!1)}function l5(e,t,n,r){let i=typeof t=="string"?Pa(t):t,o=lm(i.pathname||"/",n);if(o==null)return null;let a=uk(e);c5(a);let s=null;for(let c=0;s==null&&c{let c={relativePath:s===void 0?o.path||"":s,caseSensitive:o.caseSensitive===!0,childrenIndex:a,route:o};c.relativePath.startsWith("/")&&(dt(c.relativePath.startsWith(r),'Absolute route path "'+c.relativePath+'" nested under path '+('"'+r+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),c.relativePath=c.relativePath.slice(r.length));let u=vi([r,c.relativePath]),d=n.concat(c);o.children&&o.children.length>0&&(dt(o.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+u+'".')),uk(o.children,t,d,u)),!(o.path==null&&!o.index)&&t.push({path:u,score:g5(u,o.index),routesMeta:d})};return e.forEach((o,a)=>{var s;if(o.path===""||!((s=o.path)!=null&&s.includes("?")))i(o,a);else for(let c of dk(o.path))i(o,a,c)}),t}function dk(e){let t=e.split("/");if(t.length===0)return[];let[n,...r]=t,i=n.endsWith("?"),o=n.replace(/\?$/,"");if(r.length===0)return i?[o,""]:[o];let a=dk(r.join("/")),s=[];return s.push(...a.map(c=>c===""?o:[o,c].join("/"))),i&&s.push(...a),s.map(c=>e.startsWith("/")&&c===""?"/":c)}function c5(e){e.sort((t,n)=>t.score!==n.score?n.score-t.score:y5(t.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}const u5=/^:[\w-]+$/,d5=3,h5=2,f5=1,p5=10,m5=-2,$y=e=>e==="*";function g5(e,t){let n=e.split("/"),r=n.length;return n.some($y)&&(r+=m5),t&&(r+=h5),n.filter(i=>!$y(i)).reduce((i,o)=>i+(u5.test(o)?d5:o===""?f5:p5),r)}function y5(e,t){return e.length===t.length&&e.slice(0,-1).every((r,i)=>r===t[i])?e[e.length-1]-t[t.length-1]:0}function v5(e,t,n){let{routesMeta:r}=e,i={},o="/",a=[];for(let s=0;s{let{paramName:p,isOptional:f}=d;if(p==="*"){let m=s[h]||"";a=o.slice(0,o.length-m.length).replace(/(.)\/+$/,"$1")}const v=s[h];return f&&!v?u[p]=void 0:u[p]=(v||"").replace(/%2F/g,"/"),u},{}),pathname:o,pathnameBase:a,pattern:e}}function w5(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!0),ck(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let r=[],i="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(a,s,c)=>(r.push({paramName:s,isOptional:c!=null}),c?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(r.push({paramName:"*"}),i+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?i+="\\/*$":e!==""&&e!=="/"&&(i+="(?:(?=\\/|$))"),[new RegExp(i,t?void 0:"i"),r]}function x5(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return ck(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function lm(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&r!=="/"?null:e.slice(n)||"/"}function b5(e,t){t===void 0&&(t="/");let{pathname:n,search:r="",hash:i=""}=typeof e=="string"?Pa(e):e;return{pathname:n?n.startsWith("/")?n:k5(n,t):t,search:A5(r),hash:T5(i)}}function k5(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(i=>{i===".."?n.length>1&&n.pop():i!=="."&&n.push(i)}),n.length>1?n.join("/"):"/"}function Fd(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(r)+"]. Please separate it out to the ")+("`to."+n+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function S5(e){return e.filter((t,n)=>n===0||t.route.path&&t.route.path.length>0)}function hk(e,t){let n=S5(e);return t?n.map((r,i)=>i===n.length-1?r.pathname:r.pathnameBase):n.map(r=>r.pathnameBase)}function fk(e,t,n,r){r===void 0&&(r=!1);let i;typeof e=="string"?i=Pa(e):(i=qs({},e),dt(!i.pathname||!i.pathname.includes("?"),Fd("?","pathname","search",i)),dt(!i.pathname||!i.pathname.includes("#"),Fd("#","pathname","hash",i)),dt(!i.search||!i.search.includes("#"),Fd("#","search","hash",i)));let o=e===""||i.pathname==="",a=o?"/":i.pathname,s;if(a==null)s=n;else{let h=t.length-1;if(!r&&a.startsWith("..")){let p=a.split("/");for(;p[0]==="..";)p.shift(),h-=1;i.pathname=p.join("/")}s=h>=0?t[h]:"/"}let c=b5(i,s),u=a&&a!=="/"&&a.endsWith("/"),d=(o||a===".")&&n.endsWith("/");return!c.pathname.endsWith("/")&&(u||d)&&(c.pathname+="/"),c}const vi=e=>e.join("/").replace(/\/\/+/g,"/"),C5=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),A5=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,T5=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;function j5(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const pk=["post","put","patch","delete"];new Set(pk);const E5=["get",...pk];new Set(E5);/** * React Router v6.30.1 * * Copyright (c) Remix Software Inc. * * This source code is licensed under the MIT license found in the * LICENSE.md file in the root directory of this source tree. * * @license MIT */function Us(){return Us=Object.assign?Object.assign.bind():function(e){for(var t=1;t{s.current=!0}),x.useCallback(function(u,d){if(d===void 0&&(d={}),!s.current)return;if(typeof u=="number"){r.go(u);return}let h=fk(u,JSON.parse(a),o,d.relative==="path");e==null&&t!=="/"&&(h.pathname=h.pathname==="/"?t:vi([t,h.pathname])),(d.replace?r.replace:r.push)(h,d.state,d)},[t,r,a,o,e])}function R5(){let{matches:e}=x.useContext(Ni),t=e[e.length-1];return t?t.params:{}}function yk(e,t){let{relative:n}=t===void 0?{}:t,{future:r}=x.useContext(xo),{matches:i}=x.useContext(Ni),{pathname:o}=Ra(),a=JSON.stringify(hk(i,r.v7_relativeSplatPath));return x.useMemo(()=>fk(e,JSON.parse(a),o,n==="path"),[e,a,o,n])}function F5(e,t){return M5(e,t)}function M5(e,t,n,r){ll()||dt(!1);let{navigator:i}=x.useContext(xo),{matches:o}=x.useContext(Ni),a=o[o.length-1],s=a?a.params:{};a&&a.pathname;let c=a?a.pathnameBase:"/";a&&a.route;let u=Ra(),d;if(t){var h;let b=typeof t=="string"?Pa(t):t;c==="/"||(h=b.pathname)!=null&&h.startsWith(c)||dt(!1),d=b}else d=u;let p=d.pathname||"/",f=p;if(c!=="/"){let b=c.replace(/^\//,"").split("/");f="/"+p.replace(/^\//,"").split("/").slice(b.length).join("/")}let v=s5(e,{pathname:f}),m=B5(v&&v.map(b=>Object.assign({},b,{params:Object.assign({},s,b.params),pathname:vi([c,i.encodeLocation?i.encodeLocation(b.pathname).pathname:b.pathname]),pathnameBase:b.pathnameBase==="/"?c:vi([c,i.encodeLocation?i.encodeLocation(b.pathnameBase).pathname:b.pathnameBase])})),o,n,r);return t&&m?x.createElement(Ou.Provider,{value:{location:Us({pathname:"/",search:"",hash:"",state:null,key:"default"},d),navigationType:li.Pop}},m):m}function O5(){let e=V5(),t=j5(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,i={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return x.createElement(x.Fragment,null,x.createElement("h2",null,"Unexpected Application Error!"),x.createElement("h3",{style:{fontStyle:"italic"}},t),n?x.createElement("pre",{style:i},n):null,null)}const D5=x.createElement(O5,null);class L5 extends x.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,n){return n.location!==t.location||n.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:n.error,location:n.location,revalidation:t.revalidation||n.revalidation}}componentDidCatch(t,n){console.error("React Router caught the following error during render",t,n)}render(){return this.state.error!==void 0?x.createElement(Ni.Provider,{value:this.props.routeContext},x.createElement(mk.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function z5(e){let{routeContext:t,match:n,children:r}=e,i=x.useContext(cm);return i&&i.static&&i.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(i.staticContext._deepestRenderedBoundaryId=n.route.id),x.createElement(Ni.Provider,{value:t},r)}function B5(e,t,n,r){var i;if(t===void 0&&(t=[]),n===void 0&&(n=null),r===void 0&&(r=null),e==null){var o;if(!n)return null;if(n.errors)e=n.matches;else if((o=r)!=null&&o.v7_partialHydration&&t.length===0&&!n.initialized&&n.matches.length>0)e=n.matches;else return null}let a=e,s=(i=n)==null?void 0:i.errors;if(s!=null){let d=a.findIndex(h=>h.route.id&&(s==null?void 0:s[h.route.id])!==void 0);d>=0||dt(!1),a=a.slice(0,Math.min(a.length,d+1))}let c=!1,u=-1;if(n&&r&&r.v7_partialHydration)for(let d=0;d=0?a=a.slice(0,u+1):a=[a[0]];break}}}return a.reduceRight((d,h,p)=>{let f,v=!1,m=null,b=null;n&&(f=s&&h.route.id?s[h.route.id]:void 0,m=h.route.errorElement||D5,c&&(u<0&&p===0?(v=!0,b=null):u===p&&(v=!0,b=h.route.hydrateFallbackElement||null)));let g=t.concat(a.slice(0,p+1)),y=()=>{let w;return f?w=m:v?w=b:h.route.Component?w=x.createElement(h.route.Component,null):h.route.element?w=h.route.element:w=d,x.createElement(z5,{match:h,routeContext:{outlet:d,matches:g,isDataRoute:n!=null},children:w})};return n&&(h.route.ErrorBoundary||h.route.errorElement||p===0)?x.createElement(L5,{location:n.location,revalidation:n.revalidation,component:m,error:f,children:y(),routeContext:{outlet:null,matches:g,isDataRoute:!0}}):y()},null)}var vk=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(vk||{}),Qc=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(Qc||{});function H5(e){let t=x.useContext(cm);return t||dt(!1),t}function $5(e){let t=x.useContext(I5);return t||dt(!1),t}function W5(e){let t=x.useContext(Ni);return t||dt(!1),t}function wk(e){let t=W5(),n=t.matches[t.matches.length-1];return n.route.id||dt(!1),n.route.id}function V5(){var e;let t=x.useContext(mk),n=$5(Qc.UseRouteError),r=wk(Qc.UseRouteError);return t!==void 0?t:(e=n.errors)==null?void 0:e[r]}function q5(){let{router:e}=H5(vk.UseNavigateStable),t=wk(Qc.UseNavigateStable),n=x.useRef(!1);return gk(()=>{n.current=!0}),x.useCallback(function(i,o){o===void 0&&(o={}),n.current&&(typeof i=="number"?e.navigate(i):e.navigate(i,Us({fromRouteId:t},o)))},[e,t])}function U5(e,t){e==null||e.v7_startTransition,e==null||e.v7_relativeSplatPath}function at(e){dt(!1)}function Y5(e){let{basename:t="/",children:n=null,location:r,navigationType:i=li.Pop,navigator:o,static:a=!1,future:s}=e;ll()&&dt(!1);let c=t.replace(/^\/*/,"/"),u=x.useMemo(()=>({basename:c,navigator:o,static:a,future:Us({v7_relativeSplatPath:!1},s)}),[c,s,o,a]);typeof r=="string"&&(r=Pa(r));let{pathname:d="/",search:h="",hash:p="",state:f=null,key:v="default"}=r,m=x.useMemo(()=>{let b=lm(d,c);return b==null?null:{location:{pathname:b,search:h,hash:p,state:f,key:v},navigationType:i}},[c,d,h,p,f,v,i]);return m==null?null:x.createElement(xo.Provider,{value:u},x.createElement(Ou.Provider,{children:n,value:m}))}function Q5(e){let{children:t,location:n}=e;return F5(wf(t),n)}new Promise(()=>{});function wf(e,t){t===void 0&&(t=[]);let n=[];return x.Children.forEach(e,(r,i)=>{if(!x.isValidElement(r))return;let o=[...t,i];if(r.type===x.Fragment){n.push.apply(n,wf(r.props.children,o));return}r.type!==at&&dt(!1),!r.props.index||!r.props.children||dt(!1);let a={id:r.props.id||o.join("-"),caseSensitive:r.props.caseSensitive,element:r.props.element,Component:r.props.Component,index:r.props.index,path:r.props.path,loader:r.props.loader,action:r.props.action,errorElement:r.props.errorElement,ErrorBoundary:r.props.ErrorBoundary,hasErrorBoundary:r.props.ErrorBoundary!=null||r.props.errorElement!=null,shouldRevalidate:r.props.shouldRevalidate,handle:r.props.handle,lazy:r.props.lazy};r.props.children&&(a.children=wf(r.props.children,o)),n.push(a)}),n}/** * React Router DOM v6.30.1 * * Copyright (c) Remix Software Inc. * * This source code is licensed under the MIT license found in the * LICENSE.md file in the root directory of this source tree. * * @license MIT */function xf(){return xf=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&(n[i]=e[i]);return n}function K5(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function Z5(e,t){return e.button===0&&(!t||t==="_self")&&!K5(e)}const X5=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],J5="6";try{window.__reactRouterVersion=J5}catch{}const eP="startTransition",Vy=Jf[eP];function tP(e){let{basename:t,children:n,future:r,window:i}=e,o=x.useRef();o.current==null&&(o.current=i5({window:i,v5Compat:!0}));let a=o.current,[s,c]=x.useState({action:a.action,location:a.location}),{v7_startTransition:u}=r||{},d=x.useCallback(h=>{u&&Vy?Vy(()=>c(h)):c(h)},[c,u]);return x.useLayoutEffect(()=>a.listen(d),[a,d]),x.useEffect(()=>U5(r),[r]),x.createElement(Y5,{basename:t,children:n,location:s.location,navigationType:s.action,navigator:a,future:r})}const nP=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",rP=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Me=x.forwardRef(function(t,n){let{onClick:r,relative:i,reloadDocument:o,replace:a,state:s,target:c,to:u,preventScrollReset:d,viewTransition:h}=t,p=G5(t,X5),{basename:f}=x.useContext(xo),v,m=!1;if(typeof u=="string"&&rP.test(u)&&(v=u,nP))try{let w=new URL(window.location.href),k=u.startsWith("//")?new URL(w.protocol+u):new URL(u),A=lm(k.pathname,f);k.origin===w.origin&&A!=null?u=A+k.search+k.hash:m=!0}catch{}let b=N5(u,{relative:i}),g=iP(u,{replace:a,state:s,target:c,preventScrollReset:d,relative:i,viewTransition:h});function y(w){r&&r(w),w.defaultPrevented||g(w)}return x.createElement("a",xf({},p,{href:v||b,onClick:m||o?r:y,ref:n,target:c}))});var qy;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(qy||(qy={}));var Uy;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(Uy||(Uy={}));function iP(e,t){let{target:n,replace:r,state:i,preventScrollReset:o,relative:a,viewTransition:s}=t===void 0?{}:t,c=_5(),u=Ra(),d=yk(e,{relative:a});return x.useCallback(h=>{if(Z5(h,n)){h.preventDefault();let p=r!==void 0?r:Yc(u)===Yc(d);c(e,{replace:p,state:i,preventScrollReset:o,relative:a,viewTransition:s})}},[u,c,d,r,i,n,e,o,a,s])}const oP=[{to:"/features",label:"Features",external:!0},{to:"/pricing",label:"Pricing",external:!0},{to:"/resources",label:"Resources",external:!0},{to:"/blog",label:"Blog"},{to:"/faq",label:"FAQ",external:!0},{to:"/demo",label:"Book a Demo"}],aP=()=>{const[e,t]=x.useState(!1),n=Ra();return l.jsxs("div",{className:"md:hidden",children:[l.jsx("button",{"aria-label":e?"Close menu":"Open menu","aria-expanded":e,onClick:()=>t(!e),className:"flex items-center justify-center cursor-pointer text-white",style:{background:"transparent",border:"1px solid rgba(255,255,255,0.25)",borderRadius:8,width:38,height:38},children:e?l.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.2",strokeLinecap:"round",children:[l.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"}),l.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"})]}):l.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.2",strokeLinecap:"round",children:[l.jsx("line",{x1:"4",y1:"7",x2:"20",y2:"7"}),l.jsx("line",{x1:"4",y1:"12",x2:"20",y2:"12"}),l.jsx("line",{x1:"4",y1:"17",x2:"20",y2:"17"})]})}),e&&l.jsx("div",{className:"absolute left-0 right-0 z-30",style:{top:"100%",background:"var(--ink-900)",borderBottom:"1px solid rgba(255,255,255,0.12)",boxShadow:"0 16px 32px rgba(0,0,0,0.35)"},children:l.jsxs("div",{className:"flex flex-col px-5 py-3",children:[oP.map(r=>r.external?l.jsx("a",{href:r.to,onClick:()=>t(!1),className:"no-underline py-3 text-[16px] font-medium",style:{color:"rgba(255,255,255,0.82)",borderBottom:"1px solid rgba(255,255,255,0.07)"},children:r.label},r.to):l.jsx(Me,{to:r.to,onClick:()=>{t(!1),window.scrollTo(0,0)},className:"no-underline py-3 text-[16px] font-medium",style:{color:n.pathname===r.to?"#fff":"rgba(255,255,255,0.82)",borderBottom:"1px solid rgba(255,255,255,0.07)"},children:r.label},r.to)),l.jsx("a",{href:"https://dashboard.clinicflowai.com",target:"_blank",rel:"noopener noreferrer",onClick:()=>t(!1),className:"no-underline py-3 text-[16px] font-medium",style:{color:"rgba(255,255,255,0.82)"},children:"Sign in"})]})})]})},sP="/images/e519b8e9-d0a3-4a17-891f-01b2fa327c89.png",Ga="text-white/80 no-underline text-[15px] font-medium hover:text-white transition-colors",ht="block px-[18px] py-2 text-[14px] no-underline whitespace-nowrap hover:bg-[#F2F5F8]",ft={color:"#243040"},Yy=({children:e})=>l.jsx("div",{className:"absolute left-[-14px] top-full hidden group-hover:block group-focus-within:block pt-2.5 min-w-[250px] z-50",children:l.jsx("div",{className:"bg-white rounded-xl py-2.5",style:{border:"1px solid #D4DAE1",boxShadow:"0 8px 28px rgba(14,20,32,0.18)"},children:e})}),Md=()=>l.jsx("div",{style:{height:1,background:"#E7EBF0",margin:"8px 0"}}),Qy=()=>l.jsx("svg",{className:"inline-block ml-1.5",width:"9",height:"9",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.4",strokeLinecap:"round",children:l.jsx("polyline",{points:"6 9 12 15 18 9"})}),fn=()=>l.jsxs("nav",{className:"sticky top-0 z-50 flex items-center justify-between px-4 sm:px-8 lg:px-14 py-3.5",style:{background:"var(--ink-900)",borderBottom:"1px solid rgba(255,255,255,0.08)",fontFamily:"var(--font-sans)"},children:[l.jsxs(Me,{to:"/",className:"flex items-center gap-2.5 no-underline",onClick:()=>window.scrollTo(0,0),children:[l.jsx("img",{src:sP,width:"28",height:"28",alt:"ClinicFlow",className:"block"}),l.jsx("span",{className:"text-[17px] sm:text-[18px] font-semibold text-white",style:{letterSpacing:-.3},children:"ClinicFlow"})]}),l.jsxs("div",{className:"flex gap-3 sm:gap-6 items-center",children:[l.jsxs("div",{className:"relative group hidden md:block",children:[l.jsxs("a",{href:"/features",className:Ga,children:["Features",l.jsx(Qy,{})]}),l.jsxs(Yy,{children:[l.jsx("a",{href:"/features/appointment-scheduling",className:ht,style:ft,children:"24/7 Scheduling"}),l.jsx("a",{href:"/features/after-hours-triage",className:ht,style:ft,children:"After-Hours Triage"}),l.jsx("a",{href:"/features/referral-management",className:ht,style:ft,children:"Referral Management"}),l.jsx("a",{href:"/features/prior-authorization",className:ht,style:ft,children:"Prior Authorization"}),l.jsx("a",{href:"/features/pre-post-op-calls",className:ht,style:ft,children:"Pre/Post-Op Calls"}),l.jsx(Md,{}),l.jsx(Me,{to:"/integrations",className:ht,style:ft,onClick:()=>window.scrollTo(0,0),children:"EMR Integrations"}),l.jsx("a",{href:"/calls",className:ht,style:ft,children:"Call Library"}),l.jsx("a",{href:"/security",className:ht,style:ft,children:"Security & HIPAA"})]})]}),l.jsx("a",{href:"/pricing",className:`hidden md:inline ${Ga}`,children:"Pricing"}),l.jsxs("div",{className:"relative group hidden md:block",children:[l.jsxs("a",{href:"/resources",className:Ga,children:["Resources",l.jsx(Qy,{})]}),l.jsxs(Yy,{children:[l.jsx(Me,{to:"/missed-call-calculator",className:ht,style:ft,onClick:()=>window.scrollTo(0,0),children:"Missed-Call Calculator"}),l.jsx("a",{href:"/wrvu-calculator",className:ht,style:ft,children:"wRVU Calculator"}),l.jsx(Me,{to:"/phone-audit",className:ht,style:ft,onClick:()=>window.scrollTo(0,0),children:"Free Phone Audit"}),l.jsx("a",{href:"/resources/ai-receptionist-rfp-checklist",className:ht,style:ft,children:"RFP Checklist"}),l.jsx("a",{href:"/faq",className:ht,style:ft,children:"FAQ"}),l.jsx("a",{href:"/glossary",className:ht,style:ft,children:"Glossary"}),l.jsx(Md,{}),l.jsx("a",{href:"/resources/icd10-orthopedic-codes",className:ht,style:ft,children:"ICD-10 Codes by Region"}),l.jsx("a",{href:"/resources/orthopedic-cpt-codes",className:ht,style:ft,children:"Common CPT Codes"}),l.jsx("a",{href:"/resources/orthopedic-global-periods",className:ht,style:ft,children:"Global Periods Guide"}),l.jsx("a",{href:"/resources/orthopedic-prior-authorization-guide",className:ht,style:ft,children:"Prior Auth Guide"}),l.jsx(Md,{}),l.jsx("a",{href:"/resources",className:ht,style:ft,children:"All Resources"})]})]}),l.jsx(Me,{to:"/blog",className:`hidden md:inline ${Ga}`,onClick:()=>window.scrollTo(0,0),children:"Blog"}),l.jsx("a",{href:"https://dashboard.clinicflowai.com",target:"_blank",rel:"noopener noreferrer",className:`hidden md:inline ${Ga}`,children:"Sign in"}),l.jsx(Me,{to:"/demo",onClick:()=>window.scrollTo(0,0),className:"text-white text-[13px] sm:text-[15px] font-semibold cursor-pointer no-underline",style:{background:"var(--coral-500)",padding:"9px 16px",borderRadius:8,letterSpacing:-.1,fontFamily:"inherit"},children:"Book a Demo"}),l.jsx(aP,{})]})]}),lP=Qp("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90 shadow-md hover:shadow-lg transition-all duration-200",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-primary/20 bg-background text-primary hover:bg-primary hover:text-primary-foreground shadow-sm hover:shadow-md transition-all duration-200",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline",hero:"bg-gradient-hero text-primary-foreground hover:shadow-xl transform hover:-translate-y-0.5 transition-all duration-300 font-semibold",medical:"bg-accent text-accent-foreground hover:bg-accent/90 shadow-md hover:shadow-lg transition-all duration-200"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),xk=x.forwardRef(({className:e,variant:t,size:n,asChild:r=!1,...i},o)=>{const a=r?Lj:"button";return l.jsx(a,{className:Qe(lP({variant:t,size:n,className:e})),ref:o,...i})});xk.displayName="Button";const bk=({src:e,title:t})=>{const[n,r]=x.useState(!1),[i,o]=x.useState(0),[a,s]=x.useState(0),c=x.useRef(null);x.useEffect(()=>{const p=c.current;if(!p)return;const f=()=>{o(p.duration),s(p.currentTime)},v=()=>s(p.currentTime);return p.addEventListener("loadeddata",f),p.addEventListener("timeupdate",v),()=>{p.removeEventListener("loadeddata",f),p.removeEventListener("timeupdate",v)}},[]);const u=()=>{const p=c.current;p&&(n?p.pause():p.play(),r(!n))},d=()=>{r(!1)},h=()=>{const p=[],f=window.innerWidth<640?25:50;for(let v=0;v0&&v/f0&&l.jsxs("div",{className:"flex justify-between text-xs text-muted-foreground mt-2",children:[l.jsxs("span",{children:[Math.floor(a/60),":",Math.floor(a%60).toString().padStart(2,"0")]}),l.jsxs("span",{children:[Math.floor(i/60),":",Math.floor(i%60).toString().padStart(2,"0")]})]})]})]}),l.jsx("audio",{ref:c,src:e,onEnded:d,preload:"metadata"})]})};var Od="focusScope.autoFocusOnMount",Dd="focusScope.autoFocusOnUnmount",Gy={bubbles:!1,cancelable:!0},cP="FocusScope",um=x.forwardRef((e,t)=>{const{loop:n=!1,trapped:r=!1,onMountAutoFocus:i,onUnmountAutoFocus:o,...a}=e,[s,c]=x.useState(null),u=Yn(i),d=Yn(o),h=x.useRef(null),p=He(t,m=>c(m)),f=x.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;x.useEffect(()=>{if(r){let m=function(w){if(f.paused||!s)return;const k=w.target;s.contains(k)?h.current=k:Ur(h.current,{select:!0})},b=function(w){if(f.paused||!s)return;const k=w.relatedTarget;k!==null&&(s.contains(k)||Ur(h.current,{select:!0}))},g=function(w){if(document.activeElement===document.body)for(const A of w)A.removedNodes.length>0&&Ur(s)};document.addEventListener("focusin",m),document.addEventListener("focusout",b);const y=new MutationObserver(g);return s&&y.observe(s,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",m),document.removeEventListener("focusout",b),y.disconnect()}}},[r,s,f.paused]),x.useEffect(()=>{if(s){Zy.add(f);const m=document.activeElement;if(!s.contains(m)){const g=new CustomEvent(Od,Gy);s.addEventListener(Od,u),s.dispatchEvent(g),g.defaultPrevented||(uP(mP(kk(s)),{select:!0}),document.activeElement===m&&Ur(s))}return()=>{s.removeEventListener(Od,u),setTimeout(()=>{const g=new CustomEvent(Dd,Gy);s.addEventListener(Dd,d),s.dispatchEvent(g),g.defaultPrevented||Ur(m??document.body,{select:!0}),s.removeEventListener(Dd,d),Zy.remove(f)},0)}}},[s,u,d,f]);const v=x.useCallback(m=>{if(!n&&!r||f.paused)return;const b=m.key==="Tab"&&!m.altKey&&!m.ctrlKey&&!m.metaKey,g=document.activeElement;if(b&&g){const y=m.currentTarget,[w,k]=dP(y);w&&k?!m.shiftKey&&g===k?(m.preventDefault(),n&&Ur(w,{select:!0})):m.shiftKey&&g===w&&(m.preventDefault(),n&&Ur(k,{select:!0})):g===y&&m.preventDefault()}},[n,r,f.paused]);return l.jsx(je.div,{tabIndex:-1,...a,ref:p,onKeyDown:v})});um.displayName=cP;function uP(e,{select:t=!1}={}){const n=document.activeElement;for(const r of e)if(Ur(r,{select:t}),document.activeElement!==n)return}function dP(e){const t=kk(e),n=Ky(t,e),r=Ky(t.reverse(),e);return[n,r]}function kk(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const i=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||i?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function Ky(e,t){for(const n of e)if(!hP(n,{upTo:t}))return n}function hP(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function fP(e){return e instanceof HTMLInputElement&&"select"in e}function Ur(e,{select:t=!1}={}){if(e&&e.focus){const n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&fP(e)&&t&&e.select()}}var Zy=pP();function pP(){let e=[];return{add(t){const n=e[0];t!==n&&(n==null||n.pause()),e=Xy(e,t),e.unshift(t)},remove(t){var n;e=Xy(e,t),(n=e[0])==null||n.resume()}}}function Xy(e,t){const n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function mP(e){return e.filter(t=>t.tagName!=="A")}var Ld=0;function Sk(){x.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??Jy()),document.body.insertAdjacentElement("beforeend",e[1]??Jy()),Ld++,()=>{Ld===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(t=>t.remove()),Ld--}},[])}function Jy(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var lr=function(){return lr=Object.assign||function(t){for(var n,r=1,i=arguments.length;r"u")return PP;var t=RP(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},MP=jk(),ta="data-scroll-locked",OP=function(e,t,n,r){var i=e.left,o=e.top,a=e.right,s=e.gap;return n===void 0&&(n="margin"),` .`.concat(yP,` { overflow: hidden `).concat(r,`; padding-right: `).concat(s,"px ").concat(r,`; } body[`).concat(ta,`] { overflow: hidden `).concat(r,`; overscroll-behavior: contain; `).concat([t&&"position: relative ".concat(r,";"),n==="margin"&&` padding-left: `.concat(i,`px; padding-top: `).concat(o,`px; padding-right: `).concat(a,`px; margin-left:0; margin-top:0; margin-right: `).concat(s,"px ").concat(r,`; `),n==="padding"&&"padding-right: ".concat(s,"px ").concat(r,";")].filter(Boolean).join(""),` } .`).concat(hc,` { right: `).concat(s,"px ").concat(r,`; } .`).concat(fc,` { margin-right: `).concat(s,"px ").concat(r,`; } .`).concat(hc," .").concat(hc,` { right: 0 `).concat(r,`; } .`).concat(fc," .").concat(fc,` { margin-right: 0 `).concat(r,`; } body[`).concat(ta,`] { `).concat(vP,": ").concat(s,`px; } `)},tv=function(){var e=parseInt(document.body.getAttribute(ta)||"0",10);return isFinite(e)?e:0},DP=function(){x.useEffect(function(){return document.body.setAttribute(ta,(tv()+1).toString()),function(){var e=tv()-1;e<=0?document.body.removeAttribute(ta):document.body.setAttribute(ta,e.toString())}},[])},LP=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,i=r===void 0?"margin":r;DP();var o=x.useMemo(function(){return FP(i)},[i]);return x.createElement(MP,{styles:OP(o,!t,i,n?"":"!important")})},bf=!1;if(typeof window<"u")try{var Ll=Object.defineProperty({},"passive",{get:function(){return bf=!0,!0}});window.addEventListener("test",Ll,Ll),window.removeEventListener("test",Ll,Ll)}catch{bf=!1}var Co=bf?{passive:!1}:!1,zP=function(e){return e.tagName==="TEXTAREA"},Ek=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!zP(e)&&n[t]==="visible")},BP=function(e){return Ek(e,"overflowY")},HP=function(e){return Ek(e,"overflowX")},nv=function(e,t){var n=t.ownerDocument,r=t;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var i=Ik(e,r);if(i){var o=Nk(e,r),a=o[1],s=o[2];if(a>s)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},$P=function(e){var t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;return[t,n,r]},WP=function(e){var t=e.scrollLeft,n=e.scrollWidth,r=e.clientWidth;return[t,n,r]},Ik=function(e,t){return e==="v"?BP(t):HP(t)},Nk=function(e,t){return e==="v"?$P(t):WP(t)},VP=function(e,t){return e==="h"&&t==="rtl"?-1:1},qP=function(e,t,n,r,i){var o=VP(e,window.getComputedStyle(t).direction),a=o*r,s=n.target,c=t.contains(s),u=!1,d=a>0,h=0,p=0;do{if(!s)break;var f=Nk(e,s),v=f[0],m=f[1],b=f[2],g=m-b-o*v;(v||g)&&Ik(e,s)&&(h+=g,p+=v);var y=s.parentNode;s=y&&y.nodeType===Node.DOCUMENT_FRAGMENT_NODE?y.host:y}while(!c&&s!==document.body||c&&(t.contains(s)||t===s));return(d&&(Math.abs(h)<1||!i)||!d&&(Math.abs(p)<1||!i))&&(u=!0),u},zl=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},rv=function(e){return[e.deltaX,e.deltaY]},iv=function(e){return e&&"current"in e?e.current:e},UP=function(e,t){return e[0]===t[0]&&e[1]===t[1]},YP=function(e){return` .block-interactivity-`.concat(e,` {pointer-events: none;} .allow-interactivity-`).concat(e,` {pointer-events: all;} `)},QP=0,Ao=[];function GP(e){var t=x.useRef([]),n=x.useRef([0,0]),r=x.useRef(),i=x.useState(QP++)[0],o=x.useState(jk)[0],a=x.useRef(e);x.useEffect(function(){a.current=e},[e]),x.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(i));var m=gP([e.lockRef.current],(e.shards||[]).map(iv),!0).filter(Boolean);return m.forEach(function(b){return b.classList.add("allow-interactivity-".concat(i))}),function(){document.body.classList.remove("block-interactivity-".concat(i)),m.forEach(function(b){return b.classList.remove("allow-interactivity-".concat(i))})}}},[e.inert,e.lockRef.current,e.shards]);var s=x.useCallback(function(m,b){if("touches"in m&&m.touches.length===2||m.type==="wheel"&&m.ctrlKey)return!a.current.allowPinchZoom;var g=zl(m),y=n.current,w="deltaX"in m?m.deltaX:y[0]-g[0],k="deltaY"in m?m.deltaY:y[1]-g[1],A,C=m.target,I=Math.abs(w)>Math.abs(k)?"h":"v";if("touches"in m&&I==="h"&&C.type==="range")return!1;var F=nv(I,C);if(!F)return!0;if(F?A=I:(A=I==="v"?"h":"v",F=nv(I,C)),!F)return!1;if(!r.current&&"changedTouches"in m&&(w||k)&&(r.current=A),!A)return!0;var D=r.current||A;return qP(D,b,m,D==="h"?w:k,!0)},[]),c=x.useCallback(function(m){var b=m;if(!(!Ao.length||Ao[Ao.length-1]!==o)){var g="deltaY"in b?rv(b):zl(b),y=t.current.filter(function(A){return A.name===b.type&&(A.target===b.target||b.target===A.shadowParent)&&UP(A.delta,g)})[0];if(y&&y.should){b.cancelable&&b.preventDefault();return}if(!y){var w=(a.current.shards||[]).map(iv).filter(Boolean).filter(function(A){return A.contains(b.target)}),k=w.length>0?s(b,w[0]):!a.current.noIsolation;k&&b.cancelable&&b.preventDefault()}}},[]),u=x.useCallback(function(m,b,g,y){var w={name:m,delta:b,target:g,should:y,shadowParent:KP(g)};t.current.push(w),setTimeout(function(){t.current=t.current.filter(function(k){return k!==w})},1)},[]),d=x.useCallback(function(m){n.current=zl(m),r.current=void 0},[]),h=x.useCallback(function(m){u(m.type,rv(m),m.target,s(m,e.lockRef.current))},[]),p=x.useCallback(function(m){u(m.type,zl(m),m.target,s(m,e.lockRef.current))},[]);x.useEffect(function(){return Ao.push(o),e.setCallbacks({onScrollCapture:h,onWheelCapture:h,onTouchMoveCapture:p}),document.addEventListener("wheel",c,Co),document.addEventListener("touchmove",c,Co),document.addEventListener("touchstart",d,Co),function(){Ao=Ao.filter(function(m){return m!==o}),document.removeEventListener("wheel",c,Co),document.removeEventListener("touchmove",c,Co),document.removeEventListener("touchstart",d,Co)}},[]);var f=e.removeScrollBar,v=e.inert;return x.createElement(x.Fragment,null,v?x.createElement(o,{styles:YP(i)}):null,f?x.createElement(LP,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function KP(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}const ZP=AP(Tk,GP);var dm=x.forwardRef(function(e,t){return x.createElement(Du,lr({},e,{ref:t,sideCar:ZP}))});dm.classNames=Du.classNames;var XP=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},To=new WeakMap,Bl=new WeakMap,Hl={},$d=0,_k=function(e){return e&&(e.host||_k(e.parentNode))},JP=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=_k(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},eR=function(e,t,n,r){var i=JP(t,Array.isArray(e)?e:[e]);Hl[n]||(Hl[n]=new WeakMap);var o=Hl[n],a=[],s=new Set,c=new Set(i),u=function(h){!h||s.has(h)||(s.add(h),u(h.parentNode))};i.forEach(u);var d=function(h){!h||c.has(h)||Array.prototype.forEach.call(h.children,function(p){if(s.has(p))d(p);else try{var f=p.getAttribute(r),v=f!==null&&f!=="false",m=(To.get(p)||0)+1,b=(o.get(p)||0)+1;To.set(p,m),o.set(p,b),a.push(p),m===1&&v&&Bl.set(p,!0),b===1&&p.setAttribute(n,"true"),v||p.setAttribute(r,"true")}catch(g){console.error("aria-hidden: cannot operate on ",p,g)}})};return d(t),s.clear(),$d++,function(){a.forEach(function(h){var p=To.get(h)-1,f=o.get(h)-1;To.set(h,p),o.set(h,f),p||(Bl.has(h)||h.removeAttribute(r),Bl.delete(h)),f||h.removeAttribute(n)}),$d--,$d||(To=new WeakMap,To=new WeakMap,Bl=new WeakMap,Hl={})}},Pk=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),i=XP(e);return i?(r.push.apply(r,Array.from(i.querySelectorAll("[aria-live]"))),eR(r,i,n,"aria-hidden")):function(){return null}},Lu="Dialog",[Rk,F8]=vo(Lu),[tR,Zn]=Rk(Lu),Fk=e=>{const{__scopeDialog:t,children:n,open:r,defaultOpen:i,onOpenChange:o,modal:a=!0}=e,s=x.useRef(null),c=x.useRef(null),[u,d]=Bs({prop:r,defaultProp:i??!1,onChange:o,caller:Lu});return l.jsx(tR,{scope:t,triggerRef:s,contentRef:c,contentId:Jo(),titleId:Jo(),descriptionId:Jo(),open:u,onOpenChange:d,onOpenToggle:x.useCallback(()=>d(h=>!h),[d]),modal:a,children:n})};Fk.displayName=Lu;var Mk="DialogTrigger",nR=x.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,i=Zn(Mk,n),o=He(t,i.triggerRef);return l.jsx(je.button,{type:"button","aria-haspopup":"dialog","aria-expanded":i.open,"aria-controls":i.contentId,"data-state":pm(i.open),...r,ref:o,onClick:ge(e.onClick,i.onOpenToggle)})});nR.displayName=Mk;var hm="DialogPortal",[rR,Ok]=Rk(hm,{forceMount:void 0}),Dk=e=>{const{__scopeDialog:t,forceMount:n,children:r,container:i}=e,o=Zn(hm,t);return l.jsx(rR,{scope:t,forceMount:n,children:x.Children.map(r,a=>l.jsx(wo,{present:n||o.open,children:l.jsx(Au,{asChild:!0,container:i,children:a})}))})};Dk.displayName=hm;var Gc="DialogOverlay",Lk=x.forwardRef((e,t)=>{const n=Ok(Gc,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,o=Zn(Gc,e.__scopeDialog);return o.modal?l.jsx(wo,{present:r||o.open,children:l.jsx(oR,{...i,ref:t})}):null});Lk.displayName=Gc;var iR=ya("DialogOverlay.RemoveScroll"),oR=x.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,i=Zn(Gc,n);return l.jsx(dm,{as:iR,allowPinchZoom:!0,shards:[i.contentRef],children:l.jsx(je.div,{"data-state":pm(i.open),...r,ref:t,style:{pointerEvents:"auto",...r.style}})})}),lo="DialogContent",zk=x.forwardRef((e,t)=>{const n=Ok(lo,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,o=Zn(lo,e.__scopeDialog);return l.jsx(wo,{present:r||o.open,children:o.modal?l.jsx(aR,{...i,ref:t}):l.jsx(sR,{...i,ref:t})})});zk.displayName=lo;var aR=x.forwardRef((e,t)=>{const n=Zn(lo,e.__scopeDialog),r=x.useRef(null),i=He(t,n.contentRef,r);return x.useEffect(()=>{const o=r.current;if(o)return Pk(o)},[]),l.jsx(Bk,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:ge(e.onCloseAutoFocus,o=>{var a;o.preventDefault(),(a=n.triggerRef.current)==null||a.focus()}),onPointerDownOutside:ge(e.onPointerDownOutside,o=>{const a=o.detail.originalEvent,s=a.button===0&&a.ctrlKey===!0;(a.button===2||s)&&o.preventDefault()}),onFocusOutside:ge(e.onFocusOutside,o=>o.preventDefault())})}),sR=x.forwardRef((e,t)=>{const n=Zn(lo,e.__scopeDialog),r=x.useRef(!1),i=x.useRef(!1);return l.jsx(Bk,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:o=>{var a,s;(a=e.onCloseAutoFocus)==null||a.call(e,o),o.defaultPrevented||(r.current||(s=n.triggerRef.current)==null||s.focus(),o.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:o=>{var c,u;(c=e.onInteractOutside)==null||c.call(e,o),o.defaultPrevented||(r.current=!0,o.detail.originalEvent.type==="pointerdown"&&(i.current=!0));const a=o.target;((u=n.triggerRef.current)==null?void 0:u.contains(a))&&o.preventDefault(),o.detail.originalEvent.type==="focusin"&&i.current&&o.preventDefault()}})}),Bk=x.forwardRef((e,t)=>{const{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:o,...a}=e,s=Zn(lo,n),c=x.useRef(null),u=He(t,c);return Sk(),l.jsxs(l.Fragment,{children:[l.jsx(um,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:o,children:l.jsx(ol,{role:"dialog",id:s.contentId,"aria-describedby":s.descriptionId,"aria-labelledby":s.titleId,"data-state":pm(s.open),...a,ref:u,onDismiss:()=>s.onOpenChange(!1)})}),l.jsxs(l.Fragment,{children:[l.jsx(lR,{titleId:s.titleId}),l.jsx(uR,{contentRef:c,descriptionId:s.descriptionId})]})]})}),fm="DialogTitle",Hk=x.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,i=Zn(fm,n);return l.jsx(je.h2,{id:i.titleId,...r,ref:t})});Hk.displayName=fm;var $k="DialogDescription",Wk=x.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,i=Zn($k,n);return l.jsx(je.p,{id:i.descriptionId,...r,ref:t})});Wk.displayName=$k;var Vk="DialogClose",qk=x.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,i=Zn(Vk,n);return l.jsx(je.button,{type:"button",...r,ref:t,onClick:ge(e.onClick,()=>i.onOpenChange(!1))})});qk.displayName=Vk;function pm(e){return e?"open":"closed"}var Uk="DialogTitleWarning",[M8,Yk]=Oj(Uk,{contentName:lo,titleName:fm,docsSlug:"dialog"}),lR=({titleId:e})=>{const t=Yk(Uk),n=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users. If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component. For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return x.useEffect(()=>{e&&(document.getElementById(e)||console.error(n))},[n,e]),null},cR="DialogDescriptionWarning",uR=({contentRef:e,descriptionId:t})=>{const r=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${Yk(cR).contentName}}.`;return x.useEffect(()=>{var o;const i=(o=e.current)==null?void 0:o.getAttribute("aria-describedby");t&&i&&(document.getElementById(t)||console.warn(r))},[r,e,t]),null},dR=Fk,hR=Dk,Qk=Lk,Gk=zk,Kk=Hk,Zk=Wk,fR=qk;const pR=dR,Xk=hR,mm=x.forwardRef(({className:e,...t},n)=>l.jsx(Qk,{ref:n,className:Qe("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",e),...t}));mm.displayName=Qk.displayName;const Jk=x.forwardRef(({className:e,children:t,...n},r)=>l.jsxs(Xk,{children:[l.jsx(mm,{}),l.jsxs(Gk,{ref:r,className:Qe("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",e),...n,children:[t,l.jsxs(fR,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",children:[l.jsx(h1,{className:"h-4 w-4"}),l.jsx("span",{className:"sr-only",children:"Close"})]})]})]}));Jk.displayName=Gk.displayName;const mR=x.forwardRef(({className:e,...t},n)=>l.jsx(Kk,{ref:n,className:Qe("text-lg font-semibold leading-none tracking-tight",e),...t}));mR.displayName=Kk.displayName;const gR=x.forwardRef(({className:e,...t},n)=>l.jsx(Zk,{ref:n,className:Qe("text-sm text-muted-foreground",e),...t}));gR.displayName=Zk.displayName;const yR=()=>l.jsxs("div",{style:{position:"relative",perspective:1400},children:[l.jsxs("div",{className:"bg-white overflow-hidden",style:{borderRadius:14,boxShadow:"0 40px 80px rgba(0,0,0,0.35), 0 16px 32px rgba(0,0,0,0.18)",transform:"rotateY(-6deg) rotateX(2deg)",transformStyle:"preserve-3d",fontFamily:"var(--font-sans)",color:"var(--ink-900)"},children:[l.jsxs("div",{className:"flex items-center gap-1.5",style:{padding:"11px 14px",borderBottom:"1px solid var(--ink-100)",background:"var(--ink-25)"},children:[l.jsx("span",{className:"w-2.5 h-2.5 rounded-full",style:{background:"#FF5F57"}}),l.jsx("span",{className:"w-2.5 h-2.5 rounded-full",style:{background:"#FEBC2E"}}),l.jsx("span",{className:"w-2.5 h-2.5 rounded-full",style:{background:"#28C840"}}),l.jsx("span",{className:"ml-3 text-xs font-medium",style:{color:"var(--ink-500)"},children:"dashboard.clinicflowai.com"})]}),l.jsxs("div",{className:"grid gap-3.5 p-[18px]",children:[[{name:"Maria Gonzalez",reason:"Radicular leg pain",dur:"0:42",status:"Triaging → Spine",color:"var(--coral-500)"},{name:"Robert Chen",reason:"Post-op follow-up",dur:"1:18",status:"Booking · Dr. Patel",color:"var(--teal-500)"},{name:"Anita Patel",reason:"New patient · Ankle fracture",dur:"0:24",status:"Verifying insurance",color:"var(--ink-500)"}].map((e,t)=>l.jsxs("div",{className:"grid items-center",style:{gridTemplateColumns:"36px 1fr auto",gap:12,padding:"10px 12px",border:"1px solid var(--ink-100)",borderRadius:10,background:t===0?"rgba(27,115,181,0.04)":"#fff"},children:[l.jsx("div",{className:"w-8 h-8 rounded-full flex items-center justify-center text-[13px]",style:{background:"var(--ink-50)",color:e.color},children:l.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",children:l.jsx("path",{d:"M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07 19.5 19.5 0 01-6-6 19.79 19.79 0 01-3.07-8.67A2 2 0 014.11 2h3a2 2 0 012 1.72 12.84 12.84 0 00.7 2.81 2 2 0 01-.45 2.11L8.09 9.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45 12.84 12.84 0 002.81.7A2 2 0 0122 16.92z"})})}),l.jsxs("div",{className:"min-w-0",children:[l.jsx("div",{className:"text-[13px] font-semibold",style:{color:"var(--ink-900)"},children:e.name}),l.jsxs("div",{className:"text-[11.5px] mt-px",style:{color:"var(--ink-500)"},children:[e.reason," · ",l.jsx("span",{style:{color:e.color,fontWeight:600},children:e.status})]})]}),l.jsx("div",{className:"text-xs",style:{fontFamily:"var(--font-mono)",color:"var(--ink-500)",fontVariantNumeric:"tabular-nums"},children:e.dur})]},t)),l.jsx("div",{className:"grid grid-cols-3 gap-2.5 mt-1",children:[["Today","147","calls"],["Booked","92","visits"],["Avg","0.8s","pickup"]].map(([e,t,n],r)=>l.jsxs("div",{className:"rounded-lg",style:{padding:"10px 12px",background:"var(--ink-25)"},children:[l.jsx("div",{className:"text-[10px] font-semibold uppercase",style:{letterSpacing:"0.1em",color:"var(--ink-500)"},children:e}),l.jsx("div",{style:{fontFamily:"var(--font-serif)",fontSize:24,color:"var(--coral-500)",lineHeight:1.1,marginTop:2},children:t}),l.jsx("div",{className:"text-[11px]",style:{color:"var(--ink-500)"},children:n})]},r))})]})]}),l.jsxs("div",{className:"absolute flex items-center gap-3",style:{bottom:-28,left:-36,background:"#fff",borderRadius:12,padding:"12px 16px",boxShadow:"0 18px 40px rgba(0,0,0,0.18), 0 4px 12px rgba(0,0,0,0.08)",fontFamily:"var(--font-sans)",color:"var(--ink-900)"},children:[l.jsx("div",{className:"w-8 h-8 rounded-full flex items-center justify-center",style:{background:"rgba(47,143,106,0.12)",color:"#2F8F6A"},children:l.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.4",strokeLinecap:"round",strokeLinejoin:"round",children:l.jsx("polyline",{points:"20 6 9 17 4 12"})})}),l.jsxs("div",{children:[l.jsx("div",{className:"text-[12.5px] font-semibold",children:"Booked into Epic"}),l.jsx("div",{className:"text-[11px]",style:{color:"var(--ink-500)"},children:"Maria G. · Tue 10:30 AM · Dr. Reyes"})]})]})]}),vR=()=>{const[e,t]=x.useState(!1);return l.jsxs(l.Fragment,{children:[l.jsxs("section",{className:"relative text-white overflow-hidden px-4 sm:px-8 lg:px-14",style:{background:"linear-gradient(135deg, #5B7E9E 0%, #3A5A75 60%, #2A3F55 100%)",paddingTop:56,paddingBottom:64,fontFamily:"var(--font-sans)"},children:[l.jsx("div",{className:"absolute pointer-events-none",style:{top:-200,right:-200,width:700,height:700,borderRadius:"50%",background:"radial-gradient(circle, rgba(62,148,207,0.18) 0%, transparent 60%)"}}),l.jsxs("div",{className:"relative grid grid-cols-1 lg:grid-cols-2 items-center mx-auto gap-10 lg:gap-16",style:{maxWidth:1280},children:[l.jsxs("div",{children:[l.jsxs("div",{className:"inline-flex items-center gap-2 mb-7",style:{padding:"6px 14px",borderRadius:999,background:"rgba(255,255,255,0.08)",border:"1px solid rgba(255,255,255,0.14)",fontSize:13,fontWeight:500,letterSpacing:.04},children:[l.jsx("span",{className:"w-1.5 h-1.5 rounded-full",style:{background:"#3FD68F",boxShadow:"0 0 0 4px rgba(63,214,143,0.18)"}}),"Live demo line answering now"]}),l.jsxs("h1",{style:{fontFamily:"var(--font-serif)",fontSize:"clamp(40px, 6vw, 76px)",fontWeight:400,lineHeight:1.04,letterSpacing:"-0.02em",margin:"0 0 24px"},children:["Your AI that",l.jsx("br",{}),"answers ",l.jsx("em",{style:{fontStyle:"italic",color:"var(--coral-300)"},children:"every"})," call."]}),l.jsx("p",{className:"text-base sm:text-[19px]",style:{lineHeight:1.55,color:"rgba(255,255,255,0.78)",margin:"0 0 36px",maxWidth:540,fontWeight:400},children:"ClinicFlow handles inbound calls, qualifies patients, and syncs with your EHR - so your staff doesn't have to."}),l.jsxs("div",{className:"flex gap-3",children:[l.jsxs("button",{onClick:()=>t(!0),className:"inline-flex items-center gap-2.5 text-white text-base font-semibold",style:{background:"var(--coral-500)",border:"none",padding:"15px 26px",borderRadius:10,cursor:"pointer",fontFamily:"inherit",boxShadow:"0 8px 24px rgba(27,115,181,0.4)"},children:["See it in action ",l.jsx("span",{className:"text-lg",children:"→"})]}),l.jsxs("a",{href:"tel:+14159624019",className:"inline-flex items-center gap-2.5 text-white text-base font-medium no-underline",style:{background:"transparent",border:"1px solid rgba(255,255,255,0.3)",padding:"15px 24px",borderRadius:10,fontFamily:"inherit"},children:[l.jsx("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:l.jsx("path",{d:"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.127.96.361 1.903.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0 1 22 16.92z"})}),"Call Our Voice AI Agent"]})]})]}),l.jsx("div",{className:"hidden lg:block",children:l.jsx(yR,{})})]})]}),l.jsx(pR,{open:e,onOpenChange:t,children:l.jsxs(Xk,{children:[l.jsx(mm,{}),l.jsxs(Jk,{style:{maxWidth:680,width:"90vw",padding:"40px 36px 36px",fontFamily:"var(--font-sans)"},children:[l.jsxs("div",{className:"text-center mb-8",children:[l.jsx("h2",{style:{fontFamily:"var(--font-serif)",fontSize:32,fontWeight:400,lineHeight:1.1,letterSpacing:"-0.02em",margin:0,color:"var(--ink-900)"},children:"Listen to ClinicFlow in action"}),l.jsx("p",{className:"text-sm mt-3",style:{color:"var(--ink-600)",lineHeight:1.55},children:"A real AI-powered call - triaging, verifying insurance, and booking an appointment."})]}),l.jsx(bk,{src:"/audio/ai-call-center-demo.mp3",title:"AI Call Center Demo"})]})]})})]})},wR=[{v:"100%",l:"Answer rate · no wait time"},{v:"24 / 7",l:"Availability"},{v:"28",l:"Languages"},{v:"EMR-Integrated",l:"Realtime Sync"}],xR=()=>l.jsxs("section",{className:"text-white px-4 sm:px-8 lg:px-14 py-10 sm:py-12",style:{background:"var(--navy-800)",borderTop:"1px solid rgba(255,255,255,0.06)",borderBottom:"1px solid rgba(255,255,255,0.06)",fontFamily:"var(--font-sans)"},children:[l.jsx("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-6 sm:gap-8 mx-auto",style:{maxWidth:1280},children:wR.map((e,t)=>l.jsxs("div",{children:[l.jsx("div",{style:{fontFamily:"var(--font-serif)",fontSize:32,color:"var(--coral-300)",fontWeight:400,lineHeight:1.05,letterSpacing:"-0.01em"},children:e.v}),l.jsx("div",{className:"uppercase font-semibold mt-1.5",style:{fontSize:12,letterSpacing:"0.12em",color:"rgba(255,255,255,0.55)"},children:e.l})]},t))}),l.jsx("div",{className:"flex flex-wrap items-center gap-x-5 gap-y-2 mx-auto mt-9 pt-7",style:{maxWidth:1280,borderTop:"1px solid rgba(255,255,255,0.10)"},children:l.jsx("span",{className:"uppercase font-semibold",style:{fontSize:11.5,letterSpacing:"0.14em",color:"rgba(255,255,255,0.45)"},children:"Trusted by surgical practices"})})]}),bR=[{icon:l.jsxs("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[l.jsx("path",{d:"M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07 19.5 19.5 0 01-6-6A19.79 19.79 0 012.12 4.18 2 2 0 014.11 2h3a2 2 0 012 1.72 12.84 12.84 0 00.7 2.81 2 2 0 01-.45 2.11L8.09 9.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45 12.84 12.84 0 002.81.7A2 2 0 0122 16.92z"}),l.jsx("line",{x1:"23",y1:"1",x2:"1",y2:"23"})]}),tag:"Missed calls",h:"1 in 5 calls go to voicemail",p:"Industry average answer rate is 70%. Each missed new-patient call is worth $150–200 in lost revenue.",stat:"$80K",sub:"lost per provider, per year"},{icon:l.jsxs("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[l.jsx("path",{d:"M21 11c0 5-9 11-9 11S3 16 3 11a9 9 0 1118 0z"}),l.jsx("circle",{cx:"12",cy:"11",r:"3"})]}),tag:"Triage failures",h:"Front-desk staff are not clinicians",p:"A patient with shooting arm pain needs a spine surgeon, not upper extremity. Wrong routing means burnout, complaints, and liability.",stat:"14%",sub:"of bookings re-routed at intake"},{icon:l.jsxs("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[l.jsx("rect",{x:"3",y:"4",width:"18",height:"18",rx:"2"}),l.jsx("line",{x1:"16",y1:"2",x2:"16",y2:"6"}),l.jsx("line",{x1:"8",y1:"2",x2:"8",y2:"6"}),l.jsx("line",{x1:"3",y1:"10",x2:"21",y2:"10"})]}),tag:"Manual scheduling",h:"Two hours a day on the phone",p:"Verifying insurance, juggling sub-specialty rules, chasing the on-call provider - work that should be automatic.",stat:"2 hrs",sub:"wasted per FTE, per day"}],kR=()=>l.jsx("section",{className:"text-white px-4 sm:px-8 lg:px-14 py-16 md:py-24 lg:py-28",style:{background:"var(--ink-900)",fontFamily:"var(--font-sans)"},children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:1280},children:[l.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-[0.9fr_1.1fr] items-end mb-12 md:mb-[72px] gap-8 md:gap-20",children:[l.jsxs("div",{children:[l.jsx("div",{className:"uppercase font-semibold mb-[18px]",style:{fontSize:18,letterSpacing:"0.16em",color:"var(--coral-300)"},children:"The problem"}),l.jsx("h2",{style:{fontFamily:"var(--font-serif)",fontSize:"clamp(34px, 5vw, 60px)",fontWeight:400,lineHeight:1.05,letterSpacing:"-0.02em",margin:0},children:"The front desk is breaking."})]}),l.jsx("p",{className:"text-base sm:text-lg",style:{lineHeight:1.6,color:"rgba(255,255,255,0.7)",margin:0,maxWidth:560},children:"Surgical practices field hundreds of calls a day across new-patient intake, post-op questions, insurance verification, and after-hours triage. The math doesn't work - and the cost lands on patients."})]}),l.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6",children:bR.map((e,t)=>l.jsxs("div",{className:"grid gap-4",style:{background:"rgba(255,255,255,0.03)",border:"1px solid rgba(255,255,255,0.08)",borderRadius:14,padding:"28px 28px 24px"},children:[l.jsx("div",{className:"w-11 h-11 rounded-full flex items-center justify-center",style:{background:"rgba(62,148,207,0.12)",color:"var(--coral-300)"},children:e.icon}),l.jsxs("div",{children:[l.jsx("div",{className:"uppercase font-semibold text-[11px]",style:{letterSpacing:"0.14em",color:"var(--coral-300)"},children:e.tag}),l.jsx("h3",{className:"text-[22px] font-semibold my-2",style:{letterSpacing:"-0.01em",lineHeight:1.2},children:e.h}),l.jsx("p",{className:"text-[14.5px]",style:{lineHeight:1.55,color:"rgba(255,255,255,0.62)",margin:0},children:e.p})]}),l.jsxs("div",{className:"mt-1 pt-4",style:{borderTop:"1px solid rgba(255,255,255,0.08)"},children:[l.jsx("div",{style:{fontFamily:"var(--font-serif)",fontSize:36,color:"var(--coral-300)",fontWeight:400,lineHeight:1,letterSpacing:"-0.02em"},children:e.stat}),l.jsx("div",{className:"text-xs mt-1",style:{color:"rgba(255,255,255,0.5)"},children:e.sub})]})]},t))})]})}),SR=[{n:"01",t:"Patient Calls",tag:"Inbound",bullets:["24/7/365 · No wait time","50 concurrent calls","Patient history known at start of call"],detail:`"Hi, I've had this lower back pain for three weeks and it's shooting down my left leg…"`},{n:"02",t:"ClinicFlow",tag:"In-call",bullets:["Triages using custom physician profiles","Verifies insurance","Dashboard to instantly control preference"],detail:"Spine · Dr. Reyes · Tue 10:30 AM · Insurance: BCBS PPO"},{n:"03",t:"Scheduled in Minutes",tag:"Post-call",bullets:["Appt booked in EMR with right surgeon","SMS reminders and alerts regarding appt","Non-urgent clinical calls handled"],detail:`Synced to EMR · Encounter ENC-44182 SMS reminder sent`}],CR=()=>l.jsx("section",{className:"px-4 sm:px-8 lg:px-14 py-16 md:py-24 lg:py-32",style:{background:"#fff",fontFamily:"var(--font-sans)",borderBottom:"1px solid var(--ink-100)"},children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:1280},children:[l.jsxs("div",{className:"text-center mb-12 md:mb-20",children:[l.jsx("div",{className:"uppercase font-semibold mb-[18px]",style:{fontSize:18,letterSpacing:"0.16em",color:"var(--coral-500)"},children:"How it works"}),l.jsx("h2",{style:{fontFamily:"var(--font-serif)",fontSize:"clamp(32px, 4.5vw, 56px)",fontWeight:400,lineHeight:1.06,letterSpacing:"-0.02em",margin:0,color:"var(--ink-900)"},children:"Ring to booked, chart updated."})]}),l.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-8 relative",children:[l.jsx("div",{className:"absolute hidden md:block",style:{top:40,left:"16%",right:"16%",height:1,background:"linear-gradient(to right, transparent, var(--coral-200), var(--coral-200), transparent)"}}),SR.map((e,t)=>l.jsxs("div",{className:"relative flex flex-col",children:[l.jsxs("div",{className:"flex items-center gap-3.5 mb-7",children:[l.jsx("div",{className:"relative z-10 flex items-center justify-center",style:{width:80,height:80,borderRadius:40,background:"#fff",border:"1px solid var(--coral-200)",fontFamily:"var(--font-serif)",fontSize:30,color:"var(--coral-500)",boxShadow:"0 4px 16px rgba(27,115,181,0.12)"},children:e.n}),l.jsx("div",{className:"uppercase font-semibold text-[11px]",style:{letterSpacing:"0.14em",color:"var(--ink-500)"},children:e.tag})]}),l.jsx("h3",{className:"text-[26px] font-semibold mb-4",style:{color:"var(--ink-900)",letterSpacing:"-0.015em"},children:e.t}),l.jsx("ul",{className:"list-none p-0 mb-6 flex flex-col gap-2.5",children:e.bullets.map((n,r)=>l.jsxs("li",{className:"flex items-start gap-2.5 text-[15.5px]",style:{lineHeight:1.5,color:"var(--ink-600)"},children:[l.jsx("span",{className:"flex-shrink-0 mt-[9px] w-[5px] h-[5px] rounded-full",style:{background:"var(--coral-400)"}}),l.jsx("span",{children:n})]},r))}),l.jsx("div",{className:"mt-auto whitespace-pre-line",style:{padding:"14px 16px",background:"var(--ink-25)",borderLeft:"2px solid var(--coral-400)",borderRadius:"0 8px 8px 0",fontSize:13.5,color:"var(--ink-700)",fontFamily:"var(--font-mono)",lineHeight:1.5},children:e.detail})]},t))]})]})}),AR=[{t:"Scheduling with correct specialist",p:"24/7 appointments with no wait time",icon:l.jsxs(l.Fragment,{children:[l.jsx("rect",{x:"3",y:"5",width:"18",height:"16",rx:"2"}),l.jsx("line",{x1:"3",y1:"10",x2:"21",y2:"10"}),l.jsx("line",{x1:"8",y1:"3",x2:"8",y2:"7",strokeLinecap:"round"}),l.jsx("line",{x1:"16",y1:"3",x2:"16",y2:"7",strokeLinecap:"round"}),l.jsx("path",{d:"M9.5 15.5l1.8 1.8L15 13.5",strokeLinecap:"round",strokeLinejoin:"round"})]})},{t:"Insurance verification",p:"Real-time eligibility checks",icon:l.jsxs(l.Fragment,{children:[l.jsx("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z",strokeLinejoin:"round"}),l.jsx("polyline",{points:"9 12 11 14 15 10",strokeLinecap:"round",strokeLinejoin:"round"})]})},{t:"After-hours Clinical Call Triage",p:"Handling of urgent clinical calls",icon:l.jsx("path",{d:"M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07 19.5 19.5 0 01-6-6 19.79 19.79 0 01-3.07-8.67A2 2 0 014.11 2h3a2 2 0 012 1.72 12.84 12.84 0 00.7 2.81 2 2 0 01-.45 2.11L8.09 9.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45 12.84 12.84 0 002.81.7A2 2 0 0122 16.92z",strokeLinejoin:"round"})},{t:"Referral Management",p:"Outbound scheduling & marketing insights",icon:l.jsxs(l.Fragment,{children:[l.jsx("path",{d:"M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2",strokeLinecap:"round",strokeLinejoin:"round"}),l.jsx("circle",{cx:"9",cy:"7",r:"4"}),l.jsx("path",{d:"M19 8v6M22 11h-6",strokeLinecap:"round",strokeLinejoin:"round"})]})},{t:"Prior authorization automation",p:"Reduced time approval for imaging & surgery",icon:l.jsxs(l.Fragment,{children:[l.jsx("path",{d:"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z",strokeLinejoin:"round"}),l.jsx("polyline",{points:"14 2 14 8 20 8",strokeLinejoin:"round"}),l.jsx("path",{d:"M9 14l2 2 4-4",strokeLinecap:"round",strokeLinejoin:"round"})]})},{t:"Revenue cycle",p:"Front-end revenue optimization",icon:l.jsxs(l.Fragment,{children:[l.jsx("line",{x1:"12",y1:"2",x2:"12",y2:"22",strokeLinecap:"round"}),l.jsx("path",{d:"M17 6H9.5a3.5 3.5 0 000 7h5a3.5 3.5 0 010 7H6",strokeLinecap:"round",strokeLinejoin:"round"})]})}],TR=[{name:"Epic",src:"/images/emr-epic.png"},{name:"athenahealth",src:"/images/emr-athena-health.png"},{name:"eClinicalWorks",src:"/images/emr-ecw.png"},{name:"AdvancedMD",src:"/images/emr-advancedmd.png"},{name:"ModMed",src:"/images/emr-modmed.png"}],jR=()=>l.jsx("section",{className:"px-4 sm:px-8 lg:px-14 py-16 md:py-24 lg:py-32",style:{background:"var(--ink-25)",fontFamily:"var(--font-sans)"},children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:1280},children:[l.jsxs("div",{className:"mb-10 md:mb-16",children:[l.jsx("div",{className:"uppercase font-semibold mb-[18px]",style:{fontSize:18,letterSpacing:"0.16em",color:"var(--coral-500)"},children:"Capabilities"}),l.jsx("h2",{style:{fontFamily:"var(--font-serif)",fontSize:"clamp(30px, 4.5vw, 56px)",fontWeight:400,lineHeight:1.06,letterSpacing:"-0.02em",margin:0,color:"var(--ink-900)"},children:"Built for surgical practices, not call centers."})]}),l.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-5",children:AR.map((e,t)=>l.jsxs("div",{className:"flex flex-col gap-[22px]",style:{background:"#fff",border:"1px solid var(--ink-100)",borderRadius:16,padding:"36px 32px 40px",boxShadow:"0 1px 2px rgba(14,20,32,0.03)"},children:[l.jsx("div",{className:"flex items-center justify-center",style:{width:56,height:56,borderRadius:14,background:"var(--coral-50)",color:"var(--coral-600)"},children:l.jsx("svg",{width:"28",height:"28",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6",children:e.icon})}),l.jsxs("div",{children:[l.jsx("h3",{className:"text-[22px] font-semibold mb-2.5",style:{color:"var(--ink-900)",letterSpacing:"-0.01em",lineHeight:1.2},children:e.t}),l.jsx("p",{className:"text-[15px]",style:{lineHeight:1.55,color:"var(--ink-600)",margin:0},children:e.p})]})]},t))}),l.jsxs("div",{className:"mt-5",style:{background:"#fff",border:"1px solid var(--ink-100)",borderRadius:16,padding:"36px 40px 40px",boxShadow:"0 1px 2px rgba(14,20,32,0.03)"},children:[l.jsxs("div",{className:"flex items-center gap-[18px] mb-7",children:[l.jsx("div",{className:"flex-shrink-0 flex items-center justify-center",style:{width:56,height:56,borderRadius:14,background:"var(--coral-50)",color:"var(--coral-600)"},children:l.jsxs("svg",{width:"28",height:"28",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6",children:[l.jsx("polyline",{points:"23 4 23 10 17 10",strokeLinecap:"round",strokeLinejoin:"round"}),l.jsx("polyline",{points:"1 20 1 14 7 14",strokeLinecap:"round",strokeLinejoin:"round"}),l.jsx("path",{d:"M3.51 9a9 9 0 0114.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0020.49 15",strokeLinecap:"round",strokeLinejoin:"round"})]})}),l.jsxs("div",{children:[l.jsx("h3",{className:"text-[22px] font-semibold mb-1.5",style:{color:"var(--ink-900)",letterSpacing:"-0.01em",lineHeight:1.2},children:"Real-time EHR Sync"}),l.jsx("p",{className:"text-[15px]",style:{lineHeight:1.55,color:"var(--ink-600)",margin:0},children:"Bidirectional FHIR / HL7 - chart updates within seconds."})]})]}),l.jsx("div",{className:"relative overflow-hidden",style:{maskImage:"linear-gradient(to right, transparent, #000 6%, #000 94%, transparent)",WebkitMaskImage:"linear-gradient(to right, transparent, #000 6%, #000 94%, transparent)"},children:l.jsx("div",{className:"flex animate-ehr-marquee",style:{width:"max-content",gap:0},children:[0,1].flatMap(e=>[...TR,{name:"Custom integration",custom:!0}].map((t,n)=>l.jsx("div",{className:"flex flex-col items-center justify-center",style:{flex:"0 0 220px",height:120,padding:"0 16px"},children:"custom"in t?l.jsxs("div",{className:"flex flex-col items-center justify-center gap-2 w-full h-full rounded-xl",style:{border:"1.5px dashed var(--coral-300)",background:"var(--coral-50)"},children:[l.jsx("div",{className:"flex items-center justify-center",style:{width:36,height:36,borderRadius:9,background:"rgba(var(--coral-500-rgb,231,90,76),0.1)",color:"var(--coral-500)"},children:l.jsxs("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[l.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),l.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})}),l.jsxs("div",{className:"text-[12px] font-semibold text-center",style:{color:"var(--coral-600)",lineHeight:1.3},children:["Custom",l.jsx("br",{}),"integration"]})]}):l.jsx("div",{className:"flex items-center justify-center w-full h-full rounded-xl",style:{background:"#fff",border:"1px solid var(--ink-100)",padding:"10px 16px",boxShadow:"0 1px 3px rgba(14,20,32,0.05)"},children:l.jsx("img",{src:t.src,alt:t.name,style:{width:"100%",height:"100%",objectFit:"contain",objectPosition:"center"}})})},`${e}-${n}`)))})})]})]})}),ov=[{t:"2:14 PM",name:"Maria Gonzalez",n:"+1 (415) 555-0117",reason:"Radicular leg pain",route:"Spine · Dr. Reyes",dur:"4:18",status:"Booked",color:"#2F8F6A"},{t:"2:11 PM",name:"Robert Chen",n:"+1 (510) 555-0186",reason:"Post-op follow-up",route:"Sports · Dr. Patel",dur:"2:42",status:"Booked",color:"#2F8F6A"},{t:"2:08 PM",name:"Anita Patel",n:"+1 (650) 555-0124",reason:"New patient · Ankle fracture",route:"Foot & ankle · Dr. Liu",dur:"5:01",status:"Insurance pending",color:"#C48A1C"},{t:"2:04 PM",name:"James Whitfield",n:"+1 (408) 555-0148",reason:"Rotator cuff tear",route:"Sports · Dr. Patel",dur:"3:36",status:"Booked",color:"#2F8F6A"},{t:"1:58 PM",name:"Linda Park",n:"+1 (510) 555-0192",reason:"Knee pain · arthritis",route:"Joint repl · Dr. Okafor",dur:"6:11",status:"Transferred",color:"#5E6A7B"},{t:"1:53 PM",name:"Carlos Mendez",n:"+1 (415) 555-0162",reason:"Hand laceration · 2 days",route:"Hand & wrist · Dr. Liu",dur:"3:48",status:"Booked",color:"#2F8F6A"}],ER=[["All calls",!0],["Schedule",!1],["Providers",!1],["Sub-specialties",!1],["Insurance",!1],["Settings",!1]],av=[["Calls answered","147","+12 vs avg"],["Booked into EMR","92","63% conv."],["Avg pickup","0.8s","goal: <1s"],["Languages used","7","Spanish · Mandarin · Vietnamese"],["After-hours","14","all routed"]],IR=()=>l.jsx("section",{className:"px-4 sm:px-8 lg:px-14 py-16 md:py-24 lg:py-32",style:{background:"#fff",fontFamily:"var(--font-sans)"},children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:1280},children:[l.jsxs("div",{className:"text-center mb-10 md:mb-14",children:[l.jsx("div",{className:"uppercase font-semibold mb-[18px]",style:{fontSize:18,letterSpacing:"0.16em",color:"var(--coral-500)"},children:"The dashboard"}),l.jsx("h2",{style:{fontFamily:"var(--font-serif)",fontSize:"clamp(28px, 4.5vw, 56px)",fontWeight:400,lineHeight:1.06,letterSpacing:"-0.02em",margin:0,color:"var(--ink-900)"},children:"Every call. Every transcript. Every booking."}),l.jsx("p",{className:"text-base sm:text-[19px] mx-auto mt-5",style:{lineHeight:1.5,color:"var(--ink-500)",maxWidth:640},children:"Control all preferences instantly."})]}),l.jsxs("div",{className:"md:hidden mb-6",children:[l.jsx("div",{className:"uppercase font-semibold mb-3",style:{fontSize:11,letterSpacing:"0.12em",color:"var(--ink-500)"},children:"Today at a glance"}),l.jsx("div",{className:"grid grid-cols-2 gap-2",children:av.map(([e,t,n],r)=>l.jsxs("div",{style:{background:"var(--ink-25)",border:"1px solid var(--ink-100)",borderRadius:10,padding:"12px"},children:[l.jsx("div",{className:"text-[10.5px] mb-1",style:{color:"var(--ink-500)"},children:e}),l.jsx("div",{style:{fontFamily:"var(--font-serif)",fontSize:24,color:"var(--coral-500)",lineHeight:1,fontWeight:400},children:t}),l.jsx("div",{className:"text-[10px] mt-0.5",style:{color:"var(--ink-500)"},children:n})]},r))})]}),l.jsx("div",{className:"overflow-x-auto -mx-4 sm:mx-0 px-4 sm:px-0",children:l.jsxs("div",{className:"dashboard-grid overflow-hidden",style:{background:"#fff",borderRadius:16,border:"1px solid var(--ink-100)",boxShadow:"0 24px 48px rgba(14,20,32,0.08), 0 4px 12px rgba(14,20,32,0.04)",display:"grid",gridTemplateColumns:"236px 1fr 280px",minWidth:780},children:[l.jsxs("div",{className:"dashboard-sidebar",style:{background:"var(--ink-25)",borderRight:"1px solid var(--ink-100)",padding:"20px 16px"},children:[l.jsxs("div",{className:"flex items-center gap-[9px]",style:{padding:"4px 8px 18px"},children:[l.jsx("img",{src:"/images/e519b8e9-d0a3-4a17-891f-01b2fa327c89.png",width:"22",height:"22",alt:""}),l.jsx("span",{className:"text-sm font-semibold",style:{color:"var(--ink-900)"},children:"ClinicFlow"})]}),ER.map(([e,t],n)=>l.jsx("div",{className:"flex items-center justify-between mb-0.5",style:{padding:"8px 10px",borderRadius:8,background:t?"#fff":"transparent",color:t?"var(--ink-900)":"var(--ink-600)",boxShadow:t?"inset 0 0 0 1px var(--ink-100), 0 1px 2px rgba(14,20,32,0.04)":"none",fontSize:13,fontWeight:t?600:500},children:l.jsxs("span",{className:"flex items-center gap-[9px]",children:[l.jsx("span",{className:"w-1.5 h-1.5 rounded-full",style:{background:t?"var(--coral-500)":"var(--ink-300)"}}),e]})},n))]}),l.jsxs("div",{style:{padding:"20px 24px"},children:[l.jsxs("div",{className:"flex items-center justify-between mb-[18px]",children:[l.jsxs("div",{children:[l.jsx("div",{className:"text-lg font-semibold",style:{color:"var(--ink-900)"},children:"All calls"}),l.jsx("div",{className:"text-xs mt-0.5",style:{color:"var(--ink-500)"},children:"Updated 2 seconds ago"})]}),l.jsxs("div",{className:"flex gap-2",children:[l.jsx("button",{className:"cursor-pointer",style:{padding:"7px 12px",borderRadius:8,border:"1px solid var(--ink-200)",background:"#fff",fontSize:12.5,color:"var(--ink-700)",fontWeight:500,fontFamily:"inherit"},children:"Today"}),l.jsx("button",{className:"cursor-pointer",style:{padding:"7px 12px",borderRadius:8,border:"1px solid var(--ink-200)",background:"#fff",fontSize:12.5,color:"var(--ink-700)",fontWeight:500,fontFamily:"inherit"},children:"All providers"}),l.jsx("button",{className:"cursor-pointer",style:{padding:"7px 12px",borderRadius:8,border:"none",background:"var(--coral-500)",color:"#fff",fontSize:12.5,fontWeight:600,fontFamily:"inherit"},children:"Export"})]})]}),l.jsxs("div",{style:{border:"1px solid var(--ink-100)",borderRadius:10,overflow:"hidden"},children:[l.jsxs("div",{className:"uppercase font-semibold",style:{display:"grid",gridTemplateColumns:"70px 1.4fr 1.5fr 1fr 80px 100px",padding:"10px 14px",background:"var(--ink-25)",borderBottom:"1px solid var(--ink-100)",fontSize:11,letterSpacing:"0.1em",color:"var(--ink-500)"},children:[l.jsx("div",{children:"Time"}),l.jsx("div",{children:"Patient"}),l.jsx("div",{children:"Reason → Route"}),l.jsx("div",{children:"Provider"}),l.jsx("div",{children:"Length"}),l.jsx("div",{children:"Status"})]}),ov.map((e,t)=>{var n;return l.jsxs("div",{className:"items-center",style:{display:"grid",gridTemplateColumns:"70px 1.4fr 1.5fr 1fr 80px 100px",padding:"12px 14px",borderBottom:tl.jsxs("div",{style:{padding:"14px 0",borderBottom:r<4?"1px solid var(--ink-100)":"none"},children:[l.jsx("div",{className:"text-xs mb-1",style:{color:"var(--ink-500)"},children:e}),l.jsxs("div",{className:"flex items-baseline gap-2",children:[l.jsx("div",{style:{fontFamily:"var(--font-serif)",fontSize:26,color:"var(--coral-500)",lineHeight:1,fontWeight:400},children:t}),l.jsx("div",{className:"text-[11px]",style:{color:"var(--ink-500)"},children:n})]})]},r))]})]})})]})}),NR=()=>l.jsx("section",{className:"px-4 sm:px-8 lg:px-14 py-16 md:py-24 lg:py-32",style:{background:"var(--ink-25)",fontFamily:"var(--font-sans)"},children:l.jsx("div",{className:"mx-auto",style:{maxWidth:1280},children:l.jsxs("div",{className:"overflow-hidden grid grid-cols-1 md:grid-cols-[1.1fr_0.9fr]",style:{borderRadius:16,boxShadow:"0 16px 40px rgba(14,20,32,0.10)",border:"1px solid var(--ink-100)"},children:[l.jsxs("div",{className:"relative text-white overflow-hidden",style:{background:"linear-gradient(135deg, #5B7E9E 0%, #3A5A75 100%)",padding:"40px 32px"},children:[l.jsx("div",{className:"absolute",style:{top:-120,right:-120,width:360,height:360,borderRadius:"50%",background:"radial-gradient(circle, rgba(62,148,207,0.18), transparent 60%)"}}),l.jsxs("div",{className:"relative",children:[l.jsxs("div",{className:"flex items-center gap-[18px] mb-[22px]",children:[l.jsx("div",{className:"uppercase font-semibold",style:{fontSize:24,letterSpacing:"0.16em",color:"var(--coral-300)"},children:"Case study"}),l.jsx("span",{className:"block",style:{width:1,height:20,background:"rgba(255,255,255,0.25)"}}),l.jsx("img",{src:"/images/sports-medicine-orthopaedic-center-logo.png",alt:"South Mountain Orthopedic Care",style:{height:32,width:"auto",objectFit:"contain"}})]}),l.jsx("div",{className:"mb-7",style:{fontFamily:"var(--font-serif)",fontSize:"clamp(22px, 3vw, 36px)",lineHeight:1.15,letterSpacing:"-0.015em",fontWeight:400,color:"#fff"},children:'"Clinic Flow has increased our revenue by increasing both our surgical and clinic volume, and has decreased our overhead significantly."'}),l.jsxs("div",{className:"flex items-center gap-3.5 pt-6",style:{borderTop:"1px solid rgba(255,255,255,0.18)"},children:[l.jsx("div",{className:"flex-shrink-0 overflow-hidden",style:{width:88,height:88,borderRadius:44,background:"rgba(255,255,255,0.12)",border:"1.5px solid rgba(255,255,255,0.18)"},children:l.jsx("img",{src:"/images/jeremy-l-walters-dpm.webp",alt:"Dr. Jeremy Walters",className:"w-full h-full object-cover block"})}),l.jsxs("div",{children:[l.jsx("div",{className:"text-sm font-semibold",children:"Dr. Jeremy Walters"}),l.jsx("div",{className:"text-[12.5px]",style:{color:"rgba(255,255,255,0.7)"},children:"President · Sports Medicine and Orthopaedic Center"})]})]}),l.jsxs("div",{className:"flex items-center gap-5 mt-7 text-[13px]",style:{color:"rgba(255,255,255,0.55)"},children:[l.jsx("span",{children:"3 locations"}),l.jsx("span",{children:"·"}),l.jsx("span",{children:"18 providers"})]})]})]}),l.jsxs("div",{className:"bg-white",style:{padding:"40px 32px"},children:[l.jsx("div",{className:"uppercase font-semibold mb-6",style:{fontSize:24,letterSpacing:"0.14em",color:"var(--ink-500)"},children:"Six months in"}),[{v:"94 hrs",l:"Reclaimed per week",sub:"across front-desk staff"},{v:"+$180K",l:"Annualized new revenue",sub:"from previously-missed calls"},{v:"100%",l:"Calls answered",sub:"up from 20% baseline"}].map((e,t)=>l.jsxs("div",{className:"items-baseline",style:{display:"grid",gridTemplateColumns:"120px 1fr",gap:16,padding:"18px 0",borderBottom:t<2?"1px solid var(--ink-100)":"none",alignItems:"center"},children:[l.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"flex-start"},children:l.jsx("div",{style:{fontFamily:"var(--font-serif)",fontSize:"clamp(24px, 3vw, 40px)",color:"var(--coral-500)",lineHeight:1,fontWeight:400,letterSpacing:"-0.02em"},children:e.v})}),l.jsxs("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center"},children:[l.jsx("div",{className:"text-sm font-semibold",style:{color:"var(--ink-900)"},children:e.l}),l.jsx("div",{className:"text-[12.5px] mt-[3px]",style:{color:"var(--ink-500)"},children:e.sub})]})]},t)),l.jsxs("a",{href:"#contact-form",className:"inline-flex items-center gap-2 mt-7 no-underline text-sm font-semibold",style:{color:"var(--coral-600)"},children:["Request the full case study ",l.jsx("span",{children:"→"})]})]})]})})}),sv=[["Calls answered","70%","100%"],["Avg pickup time","4.2 min","< 1 sec"],["Front-desk FTE on phones","3.5","0.5"],["Annual call-handling cost","$612,000","$184,000"],["Missed-call revenue loss","$240,000","$0"],["After-hours coverage","Voicemail","Triaged + texted"]],_R=()=>l.jsx("section",{className:"px-4 sm:px-8 lg:px-14 py-16 md:py-24 lg:py-32",style:{background:"var(--ink-25)",fontFamily:"var(--font-sans)"},children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:1080},children:[l.jsxs("div",{className:"text-center mb-10 md:mb-14",children:[l.jsx("div",{className:"uppercase font-semibold mb-[18px]",style:{fontSize:18,letterSpacing:"0.16em",color:"var(--coral-500)"},children:"The ROI"}),l.jsx("h2",{style:{fontFamily:"var(--font-serif)",fontSize:"clamp(28px, 4vw, 52px)",fontWeight:400,lineHeight:1.06,letterSpacing:"-0.02em",margin:0,color:"var(--ink-900)"},children:"Run the math for a 10-surgeon practice."}),l.jsx("p",{className:"text-base mx-auto mt-5",style:{color:"var(--ink-600)",maxWidth:640,lineHeight:1.55},children:"Modeled on 12,000 inbound calls per month, blended new + established patient mix."})]}),l.jsxs("div",{style:{background:"#fff",borderRadius:16,border:"1px solid var(--ink-100)",boxShadow:"0 8px 24px rgba(14,20,32,0.06)"},children:[l.jsxs("div",{className:"hidden md:block overflow-x-auto",children:[l.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1.4fr 1fr 1fr",padding:"20px 28px",background:"var(--ink-25)",borderBottom:"1px solid var(--ink-100)",minWidth:480},children:[l.jsx("div",{className:"uppercase font-semibold text-xs",style:{letterSpacing:"0.12em",color:"var(--ink-500)"},children:"Metric"}),l.jsx("div",{className:"text-[13px] font-semibold",style:{color:"var(--ink-600)"},children:"Without ClinicFlow"}),l.jsxs("div",{className:"text-[13px] font-bold flex items-center gap-2",style:{color:"var(--coral-600)"},children:[l.jsx("img",{src:"/images/e519b8e9-d0a3-4a17-891f-01b2fa327c89.png",width:"18",height:"18",alt:""}),"With ClinicFlow"]})]}),sv.map((e,t)=>l.jsxs("div",{className:"items-center",style:{display:"grid",gridTemplateColumns:"1.4fr 1fr 1fr",padding:"18px 28px",borderBottom:"1px solid var(--ink-100)"},children:[l.jsx("div",{className:"text-[14.5px] font-medium",style:{color:"var(--ink-900)"},children:e[0]}),l.jsx("div",{className:"text-[14.5px]",style:{color:"var(--ink-500)",fontVariantNumeric:"tabular-nums"},children:e[1]}),l.jsx("div",{className:"text-[14.5px] font-semibold",style:{color:"var(--ink-900)",fontVariantNumeric:"tabular-nums"},children:e[2]})]},t)),l.jsxs("div",{className:"items-center",style:{display:"grid",gridTemplateColumns:"1.4fr 1fr 1fr",padding:"24px 28px",background:"var(--coral-50)"},children:[l.jsx("div",{className:"uppercase font-bold text-[13px]",style:{letterSpacing:"0.1em",color:"var(--coral-700)"},children:"Net annual impact"}),l.jsx("div",{className:"text-lg font-medium line-through",style:{color:"var(--ink-500)",fontVariantNumeric:"tabular-nums"},children:"–$852,000"}),l.jsx("div",{style:{fontFamily:"var(--font-serif)",fontSize:36,color:"var(--coral-600)",fontWeight:400,lineHeight:1,letterSpacing:"-0.02em",fontVariantNumeric:"tabular-nums"},children:"+$668,000"})]})]}),l.jsxs("div",{className:"md:hidden",children:[l.jsx("div",{style:{padding:"12px 16px",background:"var(--ink-25)",borderBottom:"1px solid var(--ink-100)"},children:l.jsxs("div",{className:"flex justify-between text-[11px] font-semibold uppercase",style:{letterSpacing:"0.1em"},children:[l.jsx("span",{style:{color:"var(--ink-500)"},children:"Metric"}),l.jsxs("div",{className:"flex gap-6",children:[l.jsx("span",{style:{color:"var(--ink-600)"},children:"Before"}),l.jsx("span",{style:{color:"var(--coral-600)"},children:"With ClinicFlow"})]})]})}),sv.map((e,t)=>l.jsxs("div",{style:{padding:"14px 16px",borderBottom:"1px solid var(--ink-100)"},children:[l.jsx("div",{className:"text-[13px] font-medium mb-1.5",style:{color:"var(--ink-900)"},children:e[0]}),l.jsxs("div",{className:"flex justify-between",children:[l.jsx("span",{className:"text-[13px]",style:{color:"var(--ink-500)"},children:e[1]}),l.jsx("span",{className:"text-[13px] font-semibold",style:{color:"var(--ink-900)"},children:e[2]})]})]},t)),l.jsxs("div",{style:{padding:"16px",background:"var(--coral-50)"},children:[l.jsx("div",{className:"text-[11px] font-bold uppercase mb-2",style:{letterSpacing:"0.1em",color:"var(--coral-700)"},children:"Net annual impact"}),l.jsxs("div",{className:"flex justify-between items-baseline",children:[l.jsx("span",{className:"text-base font-medium line-through",style:{color:"var(--ink-500)"},children:"–$852,000"}),l.jsx("span",{style:{fontFamily:"var(--font-serif)",fontSize:30,color:"var(--coral-600)",fontWeight:400,lineHeight:1},children:"+$668,000"})]})]})]})]}),l.jsx("div",{className:"text-center mt-[18px] text-xs",style:{color:"var(--ink-500)"},children:"Figures modeled, not actuals. Real results vary by sub-specialty mix, EHR, and payer panel."})]})}),PR=[{title:"HIPAA Compliant",sub:"Built around PHI from day one",icon:l.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[l.jsx("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"}),l.jsx("path",{d:"M9 12l2 2 4-4"})]})},{title:"BAA With Every Practice",sub:"Executed during onboarding",icon:l.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[l.jsx("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),l.jsx("path",{d:"M14 2v6h6"}),l.jsx("path",{d:"M9 15l2 2 4-4"})]})},{title:"EMR-Native PHI Handling",sub:"Your EMR stays the system of record",icon:l.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[l.jsx("ellipse",{cx:"12",cy:"5",rx:"9",ry:"3"}),l.jsx("path",{d:"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"}),l.jsx("path",{d:"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"})]})},{title:"Physician-Founded",sub:"Built by a practicing spine surgeon",icon:l.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",children:[l.jsx("path",{d:"M4.8 2.3A.3.3 0 1 0 5 2H4a2 2 0 0 0-2 2v5a6 6 0 0 0 6 6v0a6 6 0 0 0 6-6V4a2 2 0 0 0-2-2h-1a.2.2 0 1 0 .3.3"}),l.jsx("path",{d:"M8 15v1a6 6 0 0 0 6 6v0a6 6 0 0 0 6-6v-4"}),l.jsx("circle",{cx:"20",cy:"10",r:"2"})]})}],RR=()=>l.jsx("section",{className:"px-4 sm:px-8 lg:px-14 py-10 sm:py-12 bg-white",style:{borderTop:"1px solid var(--ink-100)",borderBottom:"1px solid var(--ink-100)",fontFamily:"var(--font-sans)"},children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:1280},children:[l.jsxs("div",{className:"flex flex-wrap items-baseline justify-between gap-3 mb-7",children:[l.jsx("div",{className:"uppercase font-semibold",style:{fontSize:13,letterSpacing:"0.16em",color:"var(--ink-500)"},children:"Trust & Security"}),l.jsx("a",{href:"/security",className:"no-underline text-[13.5px] font-semibold",style:{color:"var(--coral-600)"},children:"Read the full security overview →"})]}),l.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-5 sm:gap-6",children:PR.map((e,t)=>l.jsxs("div",{className:"flex items-start gap-3.5",children:[l.jsx("div",{className:"flex-shrink-0 flex items-center justify-center",style:{width:40,height:40,borderRadius:10,background:"var(--ink-50)",color:"var(--coral-600)"},children:e.icon}),l.jsxs("div",{children:[l.jsx("div",{className:"text-sm font-semibold",style:{color:"var(--ink-900)"},children:e.title}),l.jsx("div",{className:"text-[12.5px] mt-[3px]",style:{color:"var(--ink-500)",lineHeight:1.4},children:e.sub})]})]},t))})]})}),eS=()=>l.jsxs("section",{id:"demo",className:"relative text-white overflow-hidden px-4 sm:px-8 lg:px-14 py-16 md:py-20 lg:py-24",style:{background:"linear-gradient(135deg, #5B7E9E 0%, #3A5A75 100%)",fontFamily:"var(--font-sans)"},children:[l.jsx("div",{className:"absolute pointer-events-none",style:{top:-200,left:-100,width:500,height:500,borderRadius:"50%",background:"radial-gradient(circle, rgba(255,255,255,0.12), transparent 60%)"}}),l.jsx("div",{className:"absolute pointer-events-none",style:{bottom:-200,right:-150,width:600,height:600,borderRadius:"50%",background:"radial-gradient(circle, rgba(13,27,54,0.18), transparent 60%)"}}),l.jsxs("div",{className:"relative grid grid-cols-1 lg:grid-cols-[1.2fr_1fr] items-center mx-auto gap-10 lg:gap-14",style:{maxWidth:1280},children:[l.jsxs("div",{children:[l.jsx("div",{className:"uppercase font-semibold mb-[18px]",style:{fontSize:18,letterSpacing:"0.16em",color:"rgba(255,255,255,0.85)"},children:"Live demo line"}),l.jsx("h2",{style:{fontFamily:"var(--font-serif)",fontSize:"clamp(32px, 4.5vw, 56px)",fontWeight:400,lineHeight:1.05,letterSpacing:"-0.02em",margin:0},children:"Hear ClinicFlow answer a real call."}),l.jsx("p",{className:"text-[17px] mt-5",style:{lineHeight:1.55,color:"rgba(255,255,255,0.85)",maxWidth:520},children:"Pretend you're a patient with a knee injury. Tell ClinicFlow what's wrong. It will triage, ask for your insurance, and book the visit - in real time, in your chosen language."})]}),l.jsxs("div",{style:{background:"rgba(255,255,255,0.10)",backdropFilter:"blur(12px)",border:"1px solid rgba(255,255,255,0.22)",borderRadius:16,padding:"28px 32px"},children:[l.jsxs("div",{className:"flex items-center gap-2.5 mb-[22px]",children:[l.jsx("span",{className:"w-2 h-2 rounded-full bg-white",style:{boxShadow:"0 0 0 4px rgba(255,255,255,0.3)"}}),l.jsx("span",{className:"text-[13px] uppercase font-semibold",style:{letterSpacing:"0.1em"},children:"Answering now"})]}),l.jsx("div",{className:"text-[15px] mb-[22px]",style:{color:"rgba(255,255,255,0.85)"},children:"Live demo line - call now"}),l.jsxs("div",{className:"flex gap-2.5",children:[l.jsx("a",{href:"tel:+14159624019",className:"flex-1 text-center no-underline text-[15px] font-bold cursor-pointer",style:{background:"#fff",color:"#3A5A75",border:"none",padding:"13px 18px",borderRadius:10,fontFamily:"inherit"},children:"Call now"}),l.jsx("button",{onClick:()=>{const e=document.getElementById("contact-form");e==null||e.scrollIntoView({behavior:"smooth"})},className:"flex-1 text-[15px] font-semibold cursor-pointer text-white",style:{background:"transparent",border:"1px solid rgba(255,255,255,0.4)",padding:"13px 18px",borderRadius:10,fontFamily:"inherit"},children:"Book a demo"})]})]})]})]}),FR=()=>l.jsx("section",{className:"px-4 sm:px-8 lg:px-14 py-16 md:py-24",style:{background:"#fff",fontFamily:"var(--font-sans)",borderTop:"1px solid var(--ink-100)"},children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:800},children:[l.jsxs("div",{className:"text-center mb-10",children:[l.jsx("div",{className:"uppercase font-semibold mb-[18px]",style:{fontSize:18,letterSpacing:"0.16em",color:"var(--coral-500)"},children:"Hear it live"}),l.jsx("h2",{style:{fontFamily:"var(--font-serif)",fontSize:"clamp(28px, 3.5vw, 44px)",fontWeight:400,lineHeight:1.08,letterSpacing:"-0.02em",margin:0,color:"var(--ink-900)"},children:"Listen to ClinicFlow in action"}),l.jsx("p",{className:"text-base mt-4",style:{color:"var(--ink-600)",lineHeight:1.55},children:"A real AI-powered call - triaging, verifying insurance, and booking an appointment."})]}),l.jsx(bk,{src:"/audio/ai-call-center-demo.mp3",title:"AI Call Center Demo"})]})});function tS(e){const t=x.useRef({value:e,previous:e});return x.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}var zu="Checkbox",[MR,O8]=vo(zu),[OR,gm]=MR(zu);function DR(e){const{__scopeCheckbox:t,checked:n,children:r,defaultChecked:i,disabled:o,form:a,name:s,onCheckedChange:c,required:u,value:d="on",internal_do_not_use_render:h}=e,[p,f]=Bs({prop:n,defaultProp:i??!1,onChange:c,caller:zu}),[v,m]=x.useState(null),[b,g]=x.useState(null),y=x.useRef(!1),w=v?!!a||!!v.closest("form"):!0,k={checked:p,disabled:o,setChecked:f,control:v,setControl:m,name:s,form:a,value:d,hasConsumerStoppedPropagationRef:y,required:u,defaultChecked:wi(i)?!1:i,isFormControl:w,bubbleInput:b,setBubbleInput:g};return l.jsx(OR,{scope:t,...k,children:LR(h)?h(k):r})}var nS="CheckboxTrigger",rS=x.forwardRef(({__scopeCheckbox:e,onKeyDown:t,onClick:n,...r},i)=>{const{control:o,value:a,disabled:s,checked:c,required:u,setControl:d,setChecked:h,hasConsumerStoppedPropagationRef:p,isFormControl:f,bubbleInput:v}=gm(nS,e),m=He(i,d),b=x.useRef(c);return x.useEffect(()=>{const g=o==null?void 0:o.form;if(g){const y=()=>h(b.current);return g.addEventListener("reset",y),()=>g.removeEventListener("reset",y)}},[o,h]),l.jsx(je.button,{type:"button",role:"checkbox","aria-checked":wi(c)?"mixed":c,"aria-required":u,"data-state":lS(c),"data-disabled":s?"":void 0,disabled:s,value:a,...r,ref:m,onKeyDown:ge(t,g=>{g.key==="Enter"&&g.preventDefault()}),onClick:ge(n,g=>{h(y=>wi(y)?!0:!y),v&&f&&(p.current=g.isPropagationStopped(),p.current||g.stopPropagation())})})});rS.displayName=nS;var ym=x.forwardRef((e,t)=>{const{__scopeCheckbox:n,name:r,checked:i,defaultChecked:o,required:a,disabled:s,value:c,onCheckedChange:u,form:d,...h}=e;return l.jsx(DR,{__scopeCheckbox:n,checked:i,defaultChecked:o,disabled:s,required:a,onCheckedChange:u,name:r,form:d,value:c,internal_do_not_use_render:({isFormControl:p})=>l.jsxs(l.Fragment,{children:[l.jsx(rS,{...h,ref:t,__scopeCheckbox:n}),p&&l.jsx(sS,{__scopeCheckbox:n})]})})});ym.displayName=zu;var iS="CheckboxIndicator",oS=x.forwardRef((e,t)=>{const{__scopeCheckbox:n,forceMount:r,...i}=e,o=gm(iS,n);return l.jsx(wo,{present:r||wi(o.checked)||o.checked===!0,children:l.jsx(je.span,{"data-state":lS(o.checked),"data-disabled":o.disabled?"":void 0,...i,ref:t,style:{pointerEvents:"none",...e.style}})})});oS.displayName=iS;var aS="CheckboxBubbleInput",sS=x.forwardRef(({__scopeCheckbox:e,...t},n)=>{const{control:r,hasConsumerStoppedPropagationRef:i,checked:o,defaultChecked:a,required:s,disabled:c,name:u,value:d,form:h,bubbleInput:p,setBubbleInput:f}=gm(aS,e),v=He(n,f),m=tS(o),b=M1(r);x.useEffect(()=>{const y=p;if(!y)return;const w=window.HTMLInputElement.prototype,A=Object.getOwnPropertyDescriptor(w,"checked").set,C=!i.current;if(m!==o&&A){const I=new Event("click",{bubbles:C});y.indeterminate=wi(o),A.call(y,wi(o)?!1:o),y.dispatchEvent(I)}},[p,m,o,i]);const g=x.useRef(wi(o)?!1:o);return l.jsx(je.input,{type:"checkbox","aria-hidden":!0,defaultChecked:a??g.current,required:s,disabled:c,name:u,value:d,form:h,...t,tabIndex:-1,ref:v,style:{...t.style,...b,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});sS.displayName=aS;function LR(e){return typeof e=="function"}function wi(e){return e==="indeterminate"}function lS(e){return wi(e)?"indeterminate":e?"checked":"unchecked"}const kf=x.forwardRef(({className:e,...t},n)=>l.jsx(ym,{ref:n,className:Qe("peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",e),...t,children:l.jsx(oS,{className:Qe("flex items-center justify-center text-current"),children:l.jsx(u1,{className:"h-4 w-4"})})}));kf.displayName=ym.displayName;const Bi=x.forwardRef(({className:e,type:t,...n},r)=>l.jsx("input",{type:t,className:Qe("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",e),ref:r,...n}));Bi.displayName="Input";var zR="Label",cS=x.forwardRef((e,t)=>l.jsx(je.label,{...e,ref:t,onMouseDown:n=>{var i;n.target.closest("button, input, select, textarea")||((i=e.onMouseDown)==null||i.call(e,n),!n.defaultPrevented&&n.detail>1&&n.preventDefault())}}));cS.displayName=zR;var uS=cS;const BR=Qp("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),Yr=x.forwardRef(({className:e,...t},n)=>l.jsx(uS,{ref:n,className:Qe(BR(),e),...t}));Yr.displayName=uS.displayName;function lv(e,[t,n]){return Math.min(n,Math.max(t,e))}var HR=x.createContext(void 0);function $R(e){const t=x.useContext(HR);return e||t||"ltr"}var WR=[" ","Enter","ArrowUp","ArrowDown"],VR=[" ","Enter"],co="Select",[Bu,Hu,qR]=O0(co),[Fa,D8]=vo(co,[qR,_u]),$u=_u(),[UR,_i]=Fa(co),[YR,QR]=Fa(co),dS=e=>{const{__scopeSelect:t,children:n,open:r,defaultOpen:i,onOpenChange:o,value:a,defaultValue:s,onValueChange:c,dir:u,name:d,autoComplete:h,disabled:p,required:f,form:v}=e,m=$u(t),[b,g]=x.useState(null),[y,w]=x.useState(null),[k,A]=x.useState(!1),C=$R(u),[I,F]=Bs({prop:r,defaultProp:i??!1,onChange:o,caller:co}),[D,j]=Bs({prop:a,defaultProp:s,onChange:c,caller:co}),R=x.useRef(null),_=b?v||!!b.closest("form"):!0,[$,O]=x.useState(new Set),V=Array.from($).map(U=>U.props.value).join(";");return l.jsx(f_,{...m,children:l.jsxs(UR,{required:f,scope:t,trigger:b,onTriggerChange:g,valueNode:y,onValueNodeChange:w,valueNodeHasChildren:k,onValueNodeHasChildrenChange:A,contentId:Jo(),value:D,onValueChange:j,open:I,onOpenChange:F,dir:C,triggerPointerDownPosRef:R,disabled:p,children:[l.jsx(Bu.Provider,{scope:t,children:l.jsx(YR,{scope:e.__scopeSelect,onNativeOptionAdd:x.useCallback(U=>{O(K=>new Set(K).add(U))},[]),onNativeOptionRemove:x.useCallback(U=>{O(K=>{const M=new Set(K);return M.delete(U),M})},[]),children:n})}),_?l.jsxs(MS,{"aria-hidden":!0,required:f,tabIndex:-1,name:d,autoComplete:h,value:D,onChange:U=>j(U.target.value),disabled:p,form:v,children:[D===void 0?l.jsx("option",{value:""}):null,Array.from($)]},V):null]})})};dS.displayName=co;var hS="SelectTrigger",fS=x.forwardRef((e,t)=>{const{__scopeSelect:n,disabled:r=!1,...i}=e,o=$u(n),a=_i(hS,n),s=a.disabled||r,c=He(t,a.onTriggerChange),u=Hu(n),d=x.useRef("touch"),[h,p,f]=DS(m=>{const b=u().filter(w=>!w.disabled),g=b.find(w=>w.value===a.value),y=LS(b,m,g);y!==void 0&&a.onValueChange(y.value)}),v=m=>{s||(a.onOpenChange(!0),f()),m&&(a.triggerPointerDownPosRef.current={x:Math.round(m.pageX),y:Math.round(m.pageY)})};return l.jsx(q1,{asChild:!0,...o,children:l.jsx(je.button,{type:"button",role:"combobox","aria-controls":a.contentId,"aria-expanded":a.open,"aria-required":a.required,"aria-autocomplete":"none",dir:a.dir,"data-state":a.open?"open":"closed",disabled:s,"data-disabled":s?"":void 0,"data-placeholder":OS(a.value)?"":void 0,...i,ref:c,onClick:ge(i.onClick,m=>{m.currentTarget.focus(),d.current!=="mouse"&&v(m)}),onPointerDown:ge(i.onPointerDown,m=>{d.current=m.pointerType;const b=m.target;b.hasPointerCapture(m.pointerId)&&b.releasePointerCapture(m.pointerId),m.button===0&&m.ctrlKey===!1&&m.pointerType==="mouse"&&(v(m),m.preventDefault())}),onKeyDown:ge(i.onKeyDown,m=>{const b=h.current!=="";!(m.ctrlKey||m.altKey||m.metaKey)&&m.key.length===1&&p(m.key),!(b&&m.key===" ")&&WR.includes(m.key)&&(v(),m.preventDefault())})})})});fS.displayName=hS;var pS="SelectValue",mS=x.forwardRef((e,t)=>{const{__scopeSelect:n,className:r,style:i,children:o,placeholder:a="",...s}=e,c=_i(pS,n),{onValueNodeHasChildrenChange:u}=c,d=o!==void 0,h=He(t,c.onValueNodeChange);return At(()=>{u(d)},[u,d]),l.jsx(je.span,{...s,ref:h,style:{pointerEvents:"none"},children:OS(c.value)?l.jsx(l.Fragment,{children:a}):o})});mS.displayName=pS;var GR="SelectIcon",gS=x.forwardRef((e,t)=>{const{__scopeSelect:n,children:r,...i}=e;return l.jsx(je.span,{"aria-hidden":!0,...i,ref:t,children:r||"▼"})});gS.displayName=GR;var KR="SelectPortal",yS=e=>l.jsx(Au,{asChild:!0,...e});yS.displayName=KR;var uo="SelectContent",vS=x.forwardRef((e,t)=>{const n=_i(uo,e.__scopeSelect),[r,i]=x.useState();if(At(()=>{i(new DocumentFragment)},[]),!n.open){const o=r;return o?yo.createPortal(l.jsx(wS,{scope:e.__scopeSelect,children:l.jsx(Bu.Slot,{scope:e.__scopeSelect,children:l.jsx("div",{children:e.children})})}),o):null}return l.jsx(xS,{...e,ref:t})});vS.displayName=uo;var Rn=10,[wS,Pi]=Fa(uo),ZR="SelectContentImpl",XR=ya("SelectContent.RemoveScroll"),xS=x.forwardRef((e,t)=>{const{__scopeSelect:n,position:r="item-aligned",onCloseAutoFocus:i,onEscapeKeyDown:o,onPointerDownOutside:a,side:s,sideOffset:c,align:u,alignOffset:d,arrowPadding:h,collisionBoundary:p,collisionPadding:f,sticky:v,hideWhenDetached:m,avoidCollisions:b,...g}=e,y=_i(uo,n),[w,k]=x.useState(null),[A,C]=x.useState(null),I=He(t,Z=>k(Z)),[F,D]=x.useState(null),[j,R]=x.useState(null),_=Hu(n),[$,O]=x.useState(!1),V=x.useRef(!1);x.useEffect(()=>{if(w)return Pk(w)},[w]),Sk();const U=x.useCallback(Z=>{const[we,...Ne]=_().map(Se=>Se.ref.current),[ve]=Ne.slice(-1),xe=document.activeElement;for(const Se of Z)if(Se===xe||(Se==null||Se.scrollIntoView({block:"nearest"}),Se===we&&A&&(A.scrollTop=0),Se===ve&&A&&(A.scrollTop=A.scrollHeight),Se==null||Se.focus(),document.activeElement!==xe))return},[_,A]),K=x.useCallback(()=>U([F,w]),[U,F,w]);x.useEffect(()=>{$&&K()},[$,K]);const{onOpenChange:M,triggerPointerDownPosRef:L}=y;x.useEffect(()=>{if(w){let Z={x:0,y:0};const we=ve=>{var xe,Se;Z={x:Math.abs(Math.round(ve.pageX)-(((xe=L.current)==null?void 0:xe.x)??0)),y:Math.abs(Math.round(ve.pageY)-(((Se=L.current)==null?void 0:Se.y)??0))}},Ne=ve=>{Z.x<=10&&Z.y<=10?ve.preventDefault():w.contains(ve.target)||M(!1),document.removeEventListener("pointermove",we),L.current=null};return L.current!==null&&(document.addEventListener("pointermove",we),document.addEventListener("pointerup",Ne,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",we),document.removeEventListener("pointerup",Ne,{capture:!0})}}},[w,M,L]),x.useEffect(()=>{const Z=()=>M(!1);return window.addEventListener("blur",Z),window.addEventListener("resize",Z),()=>{window.removeEventListener("blur",Z),window.removeEventListener("resize",Z)}},[M]);const[S,oe]=DS(Z=>{const we=_().filter(xe=>!xe.disabled),Ne=we.find(xe=>xe.ref.current===document.activeElement),ve=LS(we,Z,Ne);ve&&setTimeout(()=>ve.ref.current.focus())}),ne=x.useCallback((Z,we,Ne)=>{const ve=!V.current&&!Ne;(y.value!==void 0&&y.value===we||ve)&&(D(Z),ve&&(V.current=!0))},[y.value]),T=x.useCallback(()=>w==null?void 0:w.focus(),[w]),le=x.useCallback((Z,we,Ne)=>{const ve=!V.current&&!Ne;(y.value!==void 0&&y.value===we||ve)&&R(Z)},[y.value]),Ee=r==="popper"?Sf:bS,ye=Ee===Sf?{side:s,sideOffset:c,align:u,alignOffset:d,arrowPadding:h,collisionBoundary:p,collisionPadding:f,sticky:v,hideWhenDetached:m,avoidCollisions:b}:{};return l.jsx(wS,{scope:n,content:w,viewport:A,onViewportChange:C,itemRefCallback:ne,selectedItem:F,onItemLeave:T,itemTextRefCallback:le,focusSelectedItem:K,selectedItemText:j,position:r,isPositioned:$,searchRef:S,children:l.jsx(dm,{as:XR,allowPinchZoom:!0,children:l.jsx(um,{asChild:!0,trapped:y.open,onMountAutoFocus:Z=>{Z.preventDefault()},onUnmountAutoFocus:ge(i,Z=>{var we;(we=y.trigger)==null||we.focus({preventScroll:!0}),Z.preventDefault()}),children:l.jsx(ol,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:o,onPointerDownOutside:a,onFocusOutside:Z=>Z.preventDefault(),onDismiss:()=>y.onOpenChange(!1),children:l.jsx(Ee,{role:"listbox",id:y.contentId,"data-state":y.open?"open":"closed",dir:y.dir,onContextMenu:Z=>Z.preventDefault(),...g,...ye,onPlaced:()=>O(!0),ref:I,style:{display:"flex",flexDirection:"column",outline:"none",...g.style},onKeyDown:ge(g.onKeyDown,Z=>{const we=Z.ctrlKey||Z.altKey||Z.metaKey;if(Z.key==="Tab"&&Z.preventDefault(),!we&&Z.key.length===1&&oe(Z.key),["ArrowUp","ArrowDown","Home","End"].includes(Z.key)){let ve=_().filter(xe=>!xe.disabled).map(xe=>xe.ref.current);if(["ArrowUp","End"].includes(Z.key)&&(ve=ve.slice().reverse()),["ArrowUp","ArrowDown"].includes(Z.key)){const xe=Z.target,Se=ve.indexOf(xe);ve=ve.slice(Se+1)}setTimeout(()=>U(ve)),Z.preventDefault()}})})})})})})});xS.displayName=ZR;var JR="SelectItemAlignedPosition",bS=x.forwardRef((e,t)=>{const{__scopeSelect:n,onPlaced:r,...i}=e,o=_i(uo,n),a=Pi(uo,n),[s,c]=x.useState(null),[u,d]=x.useState(null),h=He(t,I=>d(I)),p=Hu(n),f=x.useRef(!1),v=x.useRef(!0),{viewport:m,selectedItem:b,selectedItemText:g,focusSelectedItem:y}=a,w=x.useCallback(()=>{if(o.trigger&&o.valueNode&&s&&u&&m&&b&&g){const I=o.trigger.getBoundingClientRect(),F=u.getBoundingClientRect(),D=o.valueNode.getBoundingClientRect(),j=g.getBoundingClientRect();if(o.dir!=="rtl"){const xe=j.left-F.left,Se=D.left-xe,ot=I.left-Se,wt=I.width+ot,Jt=Math.max(wt,F.width),en=window.innerWidth-Rn,mn=lv(Se,[Rn,Math.max(Rn,en-Jt)]);s.style.minWidth=wt+"px",s.style.left=mn+"px"}else{const xe=F.right-j.right,Se=window.innerWidth-D.right-xe,ot=window.innerWidth-I.right-Se,wt=I.width+ot,Jt=Math.max(wt,F.width),en=window.innerWidth-Rn,mn=lv(Se,[Rn,Math.max(Rn,en-Jt)]);s.style.minWidth=wt+"px",s.style.right=mn+"px"}const R=p(),_=window.innerHeight-Rn*2,$=m.scrollHeight,O=window.getComputedStyle(u),V=parseInt(O.borderTopWidth,10),U=parseInt(O.paddingTop,10),K=parseInt(O.borderBottomWidth,10),M=parseInt(O.paddingBottom,10),L=V+U+$+M+K,S=Math.min(b.offsetHeight*5,L),oe=window.getComputedStyle(m),ne=parseInt(oe.paddingTop,10),T=parseInt(oe.paddingBottom,10),le=I.top+I.height/2-Rn,Ee=_-le,ye=b.offsetHeight/2,Z=b.offsetTop+ye,we=V+U+Z,Ne=L-we;if(we<=le){const xe=R.length>0&&b===R[R.length-1].ref.current;s.style.bottom="0px";const Se=u.clientHeight-m.offsetTop-m.offsetHeight,ot=Math.max(Ee,ye+(xe?T:0)+Se+K),wt=we+ot;s.style.height=wt+"px"}else{const xe=R.length>0&&b===R[0].ref.current;s.style.top="0px";const ot=Math.max(le,V+m.offsetTop+(xe?ne:0)+ye)+Ne;s.style.height=ot+"px",m.scrollTop=we-le+m.offsetTop}s.style.margin=`${Rn}px 0`,s.style.minHeight=S+"px",s.style.maxHeight=_+"px",r==null||r(),requestAnimationFrame(()=>f.current=!0)}},[p,o.trigger,o.valueNode,s,u,m,b,g,o.dir,r]);At(()=>w(),[w]);const[k,A]=x.useState();At(()=>{u&&A(window.getComputedStyle(u).zIndex)},[u]);const C=x.useCallback(I=>{I&&v.current===!0&&(w(),y==null||y(),v.current=!1)},[w,y]);return l.jsx(t4,{scope:n,contentWrapper:s,shouldExpandOnScrollRef:f,onScrollButtonChange:C,children:l.jsx("div",{ref:c,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:k},children:l.jsx(je.div,{...i,ref:h,style:{boxSizing:"border-box",maxHeight:"100%",...i.style}})})})});bS.displayName=JR;var e4="SelectPopperPosition",Sf=x.forwardRef((e,t)=>{const{__scopeSelect:n,align:r="start",collisionPadding:i=Rn,...o}=e,a=$u(n);return l.jsx(U1,{...a,...o,ref:t,align:r,collisionPadding:i,style:{boxSizing:"border-box",...o.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});Sf.displayName=e4;var[t4,vm]=Fa(uo,{}),Cf="SelectViewport",kS=x.forwardRef((e,t)=>{const{__scopeSelect:n,nonce:r,...i}=e,o=Pi(Cf,n),a=vm(Cf,n),s=He(t,o.onViewportChange),c=x.useRef(0);return l.jsxs(l.Fragment,{children:[l.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:r}),l.jsx(Bu.Slot,{scope:n,children:l.jsx(je.div,{"data-radix-select-viewport":"",role:"presentation",...i,ref:s,style:{position:"relative",flex:1,overflow:"hidden auto",...i.style},onScroll:ge(i.onScroll,u=>{const d=u.currentTarget,{contentWrapper:h,shouldExpandOnScrollRef:p}=a;if(p!=null&&p.current&&h){const f=Math.abs(c.current-d.scrollTop);if(f>0){const v=window.innerHeight-Rn*2,m=parseFloat(h.style.minHeight),b=parseFloat(h.style.height),g=Math.max(m,b);if(g0?k:0,h.style.justifyContent="flex-end")}}}c.current=d.scrollTop})})})]})});kS.displayName=Cf;var SS="SelectGroup",[n4,r4]=Fa(SS),i4=x.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,i=Jo();return l.jsx(n4,{scope:n,id:i,children:l.jsx(je.div,{role:"group","aria-labelledby":i,...r,ref:t})})});i4.displayName=SS;var CS="SelectLabel",AS=x.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,i=r4(CS,n);return l.jsx(je.div,{id:i.id,...r,ref:t})});AS.displayName=CS;var Kc="SelectItem",[o4,TS]=Fa(Kc),jS=x.forwardRef((e,t)=>{const{__scopeSelect:n,value:r,disabled:i=!1,textValue:o,...a}=e,s=_i(Kc,n),c=Pi(Kc,n),u=s.value===r,[d,h]=x.useState(o??""),[p,f]=x.useState(!1),v=He(t,y=>{var w;return(w=c.itemRefCallback)==null?void 0:w.call(c,y,r,i)}),m=Jo(),b=x.useRef("touch"),g=()=>{i||(s.onValueChange(r),s.onOpenChange(!1))};if(r==="")throw new Error("A must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return l.jsx(o4,{scope:n,value:r,disabled:i,textId:m,isSelected:u,onItemTextChange:x.useCallback(y=>{h(w=>w||((y==null?void 0:y.textContent)??"").trim())},[]),children:l.jsx(Bu.ItemSlot,{scope:n,value:r,disabled:i,textValue:d,children:l.jsx(je.div,{role:"option","aria-labelledby":m,"data-highlighted":p?"":void 0,"aria-selected":u&&p,"data-state":u?"checked":"unchecked","aria-disabled":i||void 0,"data-disabled":i?"":void 0,tabIndex:i?void 0:-1,...a,ref:v,onFocus:ge(a.onFocus,()=>f(!0)),onBlur:ge(a.onBlur,()=>f(!1)),onClick:ge(a.onClick,()=>{b.current!=="mouse"&&g()}),onPointerUp:ge(a.onPointerUp,()=>{b.current==="mouse"&&g()}),onPointerDown:ge(a.onPointerDown,y=>{b.current=y.pointerType}),onPointerMove:ge(a.onPointerMove,y=>{var w;b.current=y.pointerType,i?(w=c.onItemLeave)==null||w.call(c):b.current==="mouse"&&y.currentTarget.focus({preventScroll:!0})}),onPointerLeave:ge(a.onPointerLeave,y=>{var w;y.currentTarget===document.activeElement&&((w=c.onItemLeave)==null||w.call(c))}),onKeyDown:ge(a.onKeyDown,y=>{var k;((k=c.searchRef)==null?void 0:k.current)!==""&&y.key===" "||(VR.includes(y.key)&&g(),y.key===" "&&y.preventDefault())})})})})});jS.displayName=Kc;var as="SelectItemText",ES=x.forwardRef((e,t)=>{const{__scopeSelect:n,className:r,style:i,...o}=e,a=_i(as,n),s=Pi(as,n),c=TS(as,n),u=QR(as,n),[d,h]=x.useState(null),p=He(t,g=>h(g),c.onItemTextChange,g=>{var y;return(y=s.itemTextRefCallback)==null?void 0:y.call(s,g,c.value,c.disabled)}),f=d==null?void 0:d.textContent,v=x.useMemo(()=>l.jsx("option",{value:c.value,disabled:c.disabled,children:f},c.value),[c.disabled,c.value,f]),{onNativeOptionAdd:m,onNativeOptionRemove:b}=u;return At(()=>(m(v),()=>b(v)),[m,b,v]),l.jsxs(l.Fragment,{children:[l.jsx(je.span,{id:c.textId,...o,ref:p}),c.isSelected&&a.valueNode&&!a.valueNodeHasChildren?yo.createPortal(o.children,a.valueNode):null]})});ES.displayName=as;var IS="SelectItemIndicator",NS=x.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e;return TS(IS,n).isSelected?l.jsx(je.span,{"aria-hidden":!0,...r,ref:t}):null});NS.displayName=IS;var Af="SelectScrollUpButton",_S=x.forwardRef((e,t)=>{const n=Pi(Af,e.__scopeSelect),r=vm(Af,e.__scopeSelect),[i,o]=x.useState(!1),a=He(t,r.onScrollButtonChange);return At(()=>{if(n.viewport&&n.isPositioned){let s=function(){const u=c.scrollTop>0;o(u)};const c=n.viewport;return s(),c.addEventListener("scroll",s),()=>c.removeEventListener("scroll",s)}},[n.viewport,n.isPositioned]),i?l.jsx(RS,{...e,ref:a,onAutoScroll:()=>{const{viewport:s,selectedItem:c}=n;s&&c&&(s.scrollTop=s.scrollTop-c.offsetHeight)}}):null});_S.displayName=Af;var Tf="SelectScrollDownButton",PS=x.forwardRef((e,t)=>{const n=Pi(Tf,e.__scopeSelect),r=vm(Tf,e.__scopeSelect),[i,o]=x.useState(!1),a=He(t,r.onScrollButtonChange);return At(()=>{if(n.viewport&&n.isPositioned){let s=function(){const u=c.scrollHeight-c.clientHeight,d=Math.ceil(c.scrollTop)c.removeEventListener("scroll",s)}},[n.viewport,n.isPositioned]),i?l.jsx(RS,{...e,ref:a,onAutoScroll:()=>{const{viewport:s,selectedItem:c}=n;s&&c&&(s.scrollTop=s.scrollTop+c.offsetHeight)}}):null});PS.displayName=Tf;var RS=x.forwardRef((e,t)=>{const{__scopeSelect:n,onAutoScroll:r,...i}=e,o=Pi("SelectScrollButton",n),a=x.useRef(null),s=Hu(n),c=x.useCallback(()=>{a.current!==null&&(window.clearInterval(a.current),a.current=null)},[]);return x.useEffect(()=>()=>c(),[c]),At(()=>{var d;const u=s().find(h=>h.ref.current===document.activeElement);(d=u==null?void 0:u.ref.current)==null||d.scrollIntoView({block:"nearest"})},[s]),l.jsx(je.div,{"aria-hidden":!0,...i,ref:t,style:{flexShrink:0,...i.style},onPointerDown:ge(i.onPointerDown,()=>{a.current===null&&(a.current=window.setInterval(r,50))}),onPointerMove:ge(i.onPointerMove,()=>{var u;(u=o.onItemLeave)==null||u.call(o),a.current===null&&(a.current=window.setInterval(r,50))}),onPointerLeave:ge(i.onPointerLeave,()=>{c()})})}),a4="SelectSeparator",FS=x.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e;return l.jsx(je.div,{"aria-hidden":!0,...r,ref:t})});FS.displayName=a4;var jf="SelectArrow",s4=x.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,i=$u(n),o=_i(jf,n),a=Pi(jf,n);return o.open&&a.position==="popper"?l.jsx(Y1,{...i,...r,ref:t}):null});s4.displayName=jf;var l4="SelectBubbleInput",MS=x.forwardRef(({__scopeSelect:e,value:t,...n},r)=>{const i=x.useRef(null),o=He(r,i),a=tS(t);return x.useEffect(()=>{const s=i.current;if(!s)return;const c=window.HTMLSelectElement.prototype,d=Object.getOwnPropertyDescriptor(c,"value").set;if(a!==t&&d){const h=new Event("change",{bubbles:!0});d.call(s,t),s.dispatchEvent(h)}},[a,t]),l.jsx(je.select,{...n,style:{...H0,...n.style},ref:o,defaultValue:t})});MS.displayName=l4;function OS(e){return e===""||e===void 0}function DS(e){const t=Yn(e),n=x.useRef(""),r=x.useRef(0),i=x.useCallback(a=>{const s=n.current+a;t(s),function c(u){n.current=u,window.clearTimeout(r.current),u!==""&&(r.current=window.setTimeout(()=>c(""),1e3))}(s)},[t]),o=x.useCallback(()=>{n.current="",window.clearTimeout(r.current)},[]);return x.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,i,o]}function LS(e,t,n){const i=t.length>1&&Array.from(t).every(u=>u===t[0])?t[0]:t,o=n?e.indexOf(n):-1;let a=c4(e,Math.max(o,0));i.length===1&&(a=a.filter(u=>u!==n));const c=a.find(u=>u.textValue.toLowerCase().startsWith(i.toLowerCase()));return c!==n?c:void 0}function c4(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var u4=dS,zS=fS,d4=mS,h4=gS,f4=yS,BS=vS,p4=kS,HS=AS,$S=jS,m4=ES,g4=NS,WS=_S,VS=PS,qS=FS;const y4=u4,v4=d4,US=x.forwardRef(({className:e,children:t,...n},r)=>l.jsxs(zS,{ref:r,className:Qe("flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",e),...n,children:[t,l.jsx(h4,{asChild:!0,children:l.jsx(d1,{className:"h-4 w-4 opacity-50"})})]}));US.displayName=zS.displayName;const YS=x.forwardRef(({className:e,...t},n)=>l.jsx(WS,{ref:n,className:Qe("flex cursor-default items-center justify-center py-1",e),...t,children:l.jsx(NE,{className:"h-4 w-4"})}));YS.displayName=WS.displayName;const QS=x.forwardRef(({className:e,...t},n)=>l.jsx(VS,{ref:n,className:Qe("flex cursor-default items-center justify-center py-1",e),...t,children:l.jsx(d1,{className:"h-4 w-4"})}));QS.displayName=VS.displayName;const GS=x.forwardRef(({className:e,children:t,position:n="popper",...r},i)=>l.jsx(f4,{children:l.jsxs(BS,{ref:i,className:Qe("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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",n==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:n,...r,children:[l.jsx(YS,{}),l.jsx(p4,{className:Qe("p-1",n==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:t}),l.jsx(QS,{})]})}));GS.displayName=BS.displayName;const w4=x.forwardRef(({className:e,...t},n)=>l.jsx(HS,{ref:n,className:Qe("py-1.5 pl-8 pr-2 text-sm font-semibold",e),...t}));w4.displayName=HS.displayName;const Io=x.forwardRef(({className:e,children:t,...n},r)=>l.jsxs($S,{ref:r,className:Qe("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),...n,children:[l.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:l.jsx(g4,{children:l.jsx(u1,{className:"h-4 w-4"})})}),l.jsx(m4,{children:t})]}));Io.displayName=$S.displayName;const x4=x.forwardRef(({className:e,...t},n)=>l.jsx(qS,{ref:n,className:Qe("-mx-1 my-1 h-px bg-muted",e),...t}));x4.displayName=qS.displayName;var cl=e=>e.type==="checkbox",qi=e=>e instanceof Date,Dt=e=>e==null;const KS=e=>typeof e=="object";var it=e=>!Dt(e)&&!Array.isArray(e)&&KS(e)&&!qi(e),b4=e=>it(e)&&e.target?cl(e.target)?e.target.checked:e.target.value:e,k4=e=>e.substring(0,e.search(/\.\d+(\.|$)/))||e,S4=(e,t)=>e.has(k4(t)),C4=e=>{const t=e.constructor&&e.constructor.prototype;return it(t)&&t.hasOwnProperty("isPrototypeOf")},wm=typeof window<"u"&&typeof window.HTMLElement<"u"&&typeof document<"u";function gt(e){let t;const n=Array.isArray(e),r=typeof FileList<"u"?e instanceof FileList:!1;if(e instanceof Date)t=new Date(e);else if(!(wm&&(e instanceof Blob||r))&&(n||it(e)))if(t=n?[]:{},!n&&!C4(e))t=e;else for(const i in e)e.hasOwnProperty(i)&&(t[i]=gt(e[i]));else return e;return t}var Wu=e=>/^\w*$/.test(e),ct=e=>e===void 0,xm=e=>Array.isArray(e)?e.filter(Boolean):[],bm=e=>xm(e.replace(/["|']|\]/g,"").split(/\.|\[/)),ie=(e,t,n)=>{if(!t||!it(e))return n;const r=(Wu(t)?[t]:bm(t)).reduce((i,o)=>Dt(i)?i:i[o],e);return ct(r)||r===e?ct(e[t])?n:e[t]:r},rr=e=>typeof e=="boolean",Le=(e,t,n)=>{let r=-1;const i=Wu(t)?[t]:bm(t),o=i.length,a=o-1;for(;++r{const i={defaultValues:t._defaultValues};for(const o in e)Object.defineProperty(i,o,{get:()=>{const a=o;return t._proxyFormState[a]!==Bn.all&&(t._proxyFormState[a]=!r||Bn.all),e[a]}});return i};const j4=typeof window<"u"?W.useLayoutEffect:W.useEffect;var ur=e=>typeof e=="string",E4=(e,t,n,r,i)=>ur(e)?(r&&t.watch.add(e),ie(n,e,i)):Array.isArray(e)?e.map(o=>(r&&t.watch.add(o),ie(n,o))):(r&&(t.watchAll=!0),n),Ef=e=>Dt(e)||!KS(e);function ei(e,t,n=new WeakSet){if(Ef(e)||Ef(t))return e===t;if(qi(e)&&qi(t))return e.getTime()===t.getTime();const r=Object.keys(e),i=Object.keys(t);if(r.length!==i.length)return!1;if(n.has(e)||n.has(t))return!0;n.add(e),n.add(t);for(const o of r){const a=e[o];if(!i.includes(o))return!1;if(o!=="ref"){const s=t[o];if(qi(a)&&qi(s)||it(a)&&it(s)||Array.isArray(a)&&Array.isArray(s)?!ei(a,s,n):a!==s)return!1}}return!0}var ZS=(e,t,n,r,i)=>t?{...n[e],types:{...n[e]&&n[e].types?n[e].types:{},[r]:i||!0}}:{},vs=e=>Array.isArray(e)?e:[e],uv=()=>{let e=[];return{get observers(){return e},next:i=>{for(const o of e)o.next&&o.next(i)},subscribe:i=>(e.push(i),{unsubscribe:()=>{e=e.filter(o=>o!==i)}}),unsubscribe:()=>{e=[]}}},qt=e=>it(e)&&!Object.keys(e).length,km=e=>e.type==="file",Hn=e=>typeof e=="function",Zc=e=>{if(!wm)return!1;const t=e?e.ownerDocument:0;return e instanceof(t&&t.defaultView?t.defaultView.HTMLElement:HTMLElement)},XS=e=>e.type==="select-multiple",Sm=e=>e.type==="radio",I4=e=>Sm(e)||cl(e),Wd=e=>Zc(e)&&e.isConnected;function N4(e,t){const n=t.slice(0,-1).length;let r=0;for(;r{for(const t in e)if(Hn(e[t]))return!0;return!1};function Xc(e,t={}){const n=Array.isArray(e);if(it(e)||n)for(const r in e)Array.isArray(e[r])||it(e[r])&&!JS(e[r])?(t[r]=Array.isArray(e[r])?[]:{},Xc(e[r],t[r])):Dt(e[r])||(t[r]=!0);return t}function e2(e,t,n){const r=Array.isArray(e);if(it(e)||r)for(const i in e)Array.isArray(e[i])||it(e[i])&&!JS(e[i])?ct(t)||Ef(n[i])?n[i]=Array.isArray(e[i])?Xc(e[i],[]):{...Xc(e[i])}:e2(e[i],Dt(t)?{}:t[i],n[i]):n[i]=!ei(e[i],t[i]);return n}var Ka=(e,t)=>e2(e,t,Xc(t));const dv={value:!1,isValid:!1},hv={value:!0,isValid:!0};var t2=e=>{if(Array.isArray(e)){if(e.length>1){const t=e.filter(n=>n&&n.checked&&!n.disabled).map(n=>n.value);return{value:t,isValid:!!t.length}}return e[0].checked&&!e[0].disabled?e[0].attributes&&!ct(e[0].attributes.value)?ct(e[0].value)||e[0].value===""?hv:{value:e[0].value,isValid:!0}:hv:dv}return dv},n2=(e,{valueAsNumber:t,valueAsDate:n,setValueAs:r})=>ct(e)?e:t?e===""?NaN:e&&+e:n&&ur(e)?new Date(e):r?r(e):e;const fv={isValid:!1,value:null};var r2=e=>Array.isArray(e)?e.reduce((t,n)=>n&&n.checked&&!n.disabled?{isValid:!0,value:n.value}:t,fv):fv;function pv(e){const t=e.ref;return km(t)?t.files:Sm(t)?r2(e.refs).value:XS(t)?[...t.selectedOptions].map(({value:n})=>n):cl(t)?t2(e.refs).value:n2(ct(t.value)?e.ref.value:t.value,e)}var P4=(e,t,n,r)=>{const i={};for(const o of e){const a=ie(t,o);a&&Le(i,o,a._f)}return{criteriaMode:n,names:[...e],fields:i,shouldUseNativeValidation:r}},Jc=e=>e instanceof RegExp,Za=e=>ct(e)?e:Jc(e)?e.source:it(e)?Jc(e.value)?e.value.source:e.value:e,mv=e=>({isOnSubmit:!e||e===Bn.onSubmit,isOnBlur:e===Bn.onBlur,isOnChange:e===Bn.onChange,isOnAll:e===Bn.all,isOnTouch:e===Bn.onTouched});const gv="AsyncFunction";var R4=e=>!!e&&!!e.validate&&!!(Hn(e.validate)&&e.validate.constructor.name===gv||it(e.validate)&&Object.values(e.validate).find(t=>t.constructor.name===gv)),F4=e=>e.mount&&(e.required||e.min||e.max||e.maxLength||e.minLength||e.pattern||e.validate),yv=(e,t,n)=>!n&&(t.watchAll||t.watch.has(e)||[...t.watch].some(r=>e.startsWith(r)&&/^\.\w+/.test(e.slice(r.length))));const ws=(e,t,n,r)=>{for(const i of n||Object.keys(e)){const o=ie(e,i);if(o){const{_f:a,...s}=o;if(a){if(a.refs&&a.refs[0]&&t(a.refs[0],i)&&!r)return!0;if(a.ref&&t(a.ref,a.name)&&!r)return!0;if(ws(s,t))break}else if(it(s)&&ws(s,t))break}}};function vv(e,t,n){const r=ie(e,n);if(r||Wu(n))return{error:r,name:n};const i=n.split(".");for(;i.length;){const o=i.join("."),a=ie(t,o),s=ie(e,o);if(a&&!Array.isArray(a)&&n!==o)return{name:n};if(s&&s.type)return{name:o,error:s};if(s&&s.root&&s.root.type)return{name:`${o}.root`,error:s.root};i.pop()}return{name:n}}var M4=(e,t,n,r)=>{n(e);const{name:i,...o}=e;return qt(o)||Object.keys(o).length>=Object.keys(t).length||Object.keys(o).find(a=>t[a]===(!r||Bn.all))},O4=(e,t,n)=>!e||!t||e===t||vs(e).some(r=>r&&(n?r===t:r.startsWith(t)||t.startsWith(r))),D4=(e,t,n,r,i)=>i.isOnAll?!1:!n&&i.isOnTouch?!(t||e):(n?r.isOnBlur:i.isOnBlur)?!e:(n?r.isOnChange:i.isOnChange)?e:!0,L4=(e,t)=>!xm(ie(e,t)).length&&st(e,t),z4=(e,t,n)=>{const r=vs(ie(e,n));return Le(r,"root",t[n]),Le(e,n,r),e},pc=e=>ur(e);function wv(e,t,n="validate"){if(pc(e)||Array.isArray(e)&&e.every(pc)||rr(e)&&!e)return{type:n,message:pc(e)?e:"",ref:t}}var jo=e=>it(e)&&!Jc(e)?e:{value:e,message:""},xv=async(e,t,n,r,i,o)=>{const{ref:a,refs:s,required:c,maxLength:u,minLength:d,min:h,max:p,pattern:f,validate:v,name:m,valueAsNumber:b,mount:g}=e._f,y=ie(n,m);if(!g||t.has(m))return{};const w=s?s[0]:a,k=_=>{i&&w.reportValidity&&(w.setCustomValidity(rr(_)?"":_||""),w.reportValidity())},A={},C=Sm(a),I=cl(a),F=C||I,D=(b||km(a))&&ct(a.value)&&ct(y)||Zc(a)&&a.value===""||y===""||Array.isArray(y)&&!y.length,j=ZS.bind(null,m,r,A),R=(_,$,O,V=xr.maxLength,U=xr.minLength)=>{const K=_?$:O;A[m]={type:_?V:U,message:K,ref:a,...j(_?V:U,K)}};if(o?!Array.isArray(y)||!y.length:c&&(!F&&(D||Dt(y))||rr(y)&&!y||I&&!t2(s).isValid||C&&!r2(s).isValid)){const{value:_,message:$}=pc(c)?{value:!!c,message:c}:jo(c);if(_&&(A[m]={type:xr.required,message:$,ref:w,...j(xr.required,$)},!r))return k($),A}if(!D&&(!Dt(h)||!Dt(p))){let _,$;const O=jo(p),V=jo(h);if(!Dt(y)&&!isNaN(y)){const U=a.valueAsNumber||y&&+y;Dt(O.value)||(_=U>O.value),Dt(V.value)||($=Unew Date(new Date().toDateString()+" "+S),M=a.type=="time",L=a.type=="week";ur(O.value)&&y&&(_=M?K(y)>K(O.value):L?y>O.value:U>new Date(O.value)),ur(V.value)&&y&&($=M?K(y)+_.value,V=!Dt($.value)&&y.length<+$.value;if((O||V)&&(R(O,_.message,$.message),!r))return k(A[m].message),A}if(f&&!D&&ur(y)){const{value:_,message:$}=jo(f);if(Jc(_)&&!y.match(_)&&(A[m]={type:xr.pattern,message:$,ref:a,...j(xr.pattern,$)},!r))return k($),A}if(v){if(Hn(v)){const _=await v(y,n),$=wv(_,w);if($&&(A[m]={...$,...j(xr.validate,$.message)},!r))return k($.message),A}else if(it(v)){let _={};for(const $ in v){if(!qt(_)&&!r)break;const O=wv(await v[$](y,n),w,$);O&&(_={...O,...j($,O.message)},k(O.message),r&&(A[m]=_))}if(!qt(_)&&(A[m]={ref:w,..._},!r))return A}}return k(!0),A};const B4={mode:Bn.onSubmit,reValidateMode:Bn.onChange,shouldFocusError:!0};function H4(e={}){let t={...B4,...e},n={submitCount:0,isDirty:!1,isReady:!1,isLoading:Hn(t.defaultValues),isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{},errors:t.errors||{},disabled:t.disabled||!1},r={},i=it(t.defaultValues)||it(t.values)?gt(t.defaultValues||t.values)||{}:{},o=t.shouldUnregister?{}:gt(i),a={action:!1,mount:!1,watch:!1},s={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set},c,u=0;const d={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1};let h={...d};const p={array:uv(),state:uv()},f=t.criteriaMode===Bn.all,v=E=>P=>{clearTimeout(u),u=setTimeout(E,P)},m=async E=>{if(!t.disabled&&(d.isValid||h.isValid||E)){const P=t.resolver?qt((await I()).errors):await D(r,!0);P!==n.isValid&&p.state.next({isValid:P})}},b=(E,P)=>{!t.disabled&&(d.isValidating||d.validatingFields||h.isValidating||h.validatingFields)&&((E||Array.from(s.mount)).forEach(z=>{z&&(P?Le(n.validatingFields,z,P):st(n.validatingFields,z))}),p.state.next({validatingFields:n.validatingFields,isValidating:!qt(n.validatingFields)}))},g=(E,P=[],z,J,X=!0,G=!0)=>{if(J&&z&&!t.disabled){if(a.action=!0,G&&Array.isArray(ie(r,E))){const N=z(ie(r,E),J.argA,J.argB);X&&Le(r,E,N)}if(G&&Array.isArray(ie(n.errors,E))){const N=z(ie(n.errors,E),J.argA,J.argB);X&&Le(n.errors,E,N),L4(n.errors,E)}if((d.touchedFields||h.touchedFields)&&G&&Array.isArray(ie(n.touchedFields,E))){const N=z(ie(n.touchedFields,E),J.argA,J.argB);X&&Le(n.touchedFields,E,N)}(d.dirtyFields||h.dirtyFields)&&(n.dirtyFields=Ka(i,o)),p.state.next({name:E,isDirty:R(E,P),dirtyFields:n.dirtyFields,errors:n.errors,isValid:n.isValid})}else Le(o,E,P)},y=(E,P)=>{Le(n.errors,E,P),p.state.next({errors:n.errors})},w=E=>{n.errors=E,p.state.next({errors:n.errors,isValid:!1})},k=(E,P,z,J)=>{const X=ie(r,E);if(X){const G=ie(o,E,ct(z)?ie(i,E):z);ct(G)||J&&J.defaultChecked||P?Le(o,E,P?G:pv(X._f)):O(E,G),a.mount&&m()}},A=(E,P,z,J,X)=>{let G=!1,N=!1;const B={name:E};if(!t.disabled){if(!z||J){(d.isDirty||h.isDirty)&&(N=n.isDirty,n.isDirty=B.isDirty=R(),G=N!==B.isDirty);const ee=ei(ie(i,E),P);N=!!ie(n.dirtyFields,E),ee?st(n.dirtyFields,E):Le(n.dirtyFields,E,!0),B.dirtyFields=n.dirtyFields,G=G||(d.dirtyFields||h.dirtyFields)&&N!==!ee}if(z){const ee=ie(n.touchedFields,E);ee||(Le(n.touchedFields,E,z),B.touchedFields=n.touchedFields,G=G||(d.touchedFields||h.touchedFields)&&ee!==z)}G&&X&&p.state.next(B)}return G?B:{}},C=(E,P,z,J)=>{const X=ie(n.errors,E),G=(d.isValid||h.isValid)&&rr(P)&&n.isValid!==P;if(t.delayError&&z?(c=v(()=>y(E,z)),c(t.delayError)):(clearTimeout(u),c=null,z?Le(n.errors,E,z):st(n.errors,E)),(z?!ei(X,z):X)||!qt(J)||G){const N={...J,...G&&rr(P)?{isValid:P}:{},errors:n.errors,name:E};n={...n,...N},p.state.next(N)}},I=async E=>{b(E,!0);const P=await t.resolver(o,t.context,P4(E||s.mount,r,t.criteriaMode,t.shouldUseNativeValidation));return b(E),P},F=async E=>{const{errors:P}=await I(E);if(E)for(const z of E){const J=ie(P,z);J?Le(n.errors,z,J):st(n.errors,z)}else n.errors=P;return P},D=async(E,P,z={valid:!0})=>{for(const J in E){const X=E[J];if(X){const{_f:G,...N}=X;if(G){const B=s.array.has(G.name),ee=X._f&&R4(X._f);ee&&d.validatingFields&&b([J],!0);const ue=await xv(X,s.disabled,o,f,t.shouldUseNativeValidation&&!P,B);if(ee&&d.validatingFields&&b([J]),ue[G.name]&&(z.valid=!1,P))break;!P&&(ie(ue,G.name)?B?z4(n.errors,ue,G.name):Le(n.errors,G.name,ue[G.name]):st(n.errors,G.name))}!qt(N)&&await D(N,P,z)}}return z.valid},j=()=>{for(const E of s.unMount){const P=ie(r,E);P&&(P._f.refs?P._f.refs.every(z=>!Wd(z)):!Wd(P._f.ref))&&Z(E)}s.unMount=new Set},R=(E,P)=>!t.disabled&&(E&&P&&Le(o,E,P),!ei(S(),i)),_=(E,P,z)=>E4(E,s,{...a.mount?o:ct(P)?i:ur(E)?{[E]:P}:P},z,P),$=E=>xm(ie(a.mount?o:i,E,t.shouldUnregister?ie(i,E,[]):[])),O=(E,P,z={})=>{const J=ie(r,E);let X=P;if(J){const G=J._f;G&&(!G.disabled&&Le(o,E,n2(P,G)),X=Zc(G.ref)&&Dt(P)?"":P,XS(G.ref)?[...G.ref.options].forEach(N=>N.selected=X.includes(N.value)):G.refs?cl(G.ref)?G.refs.forEach(N=>{(!N.defaultChecked||!N.disabled)&&(Array.isArray(X)?N.checked=!!X.find(B=>B===N.value):N.checked=X===N.value||!!X)}):G.refs.forEach(N=>N.checked=N.value===X):km(G.ref)?G.ref.value="":(G.ref.value=X,G.ref.type||p.state.next({name:E,values:gt(o)})))}(z.shouldDirty||z.shouldTouch)&&A(E,X,z.shouldTouch,z.shouldDirty,!0),z.shouldValidate&&L(E)},V=(E,P,z)=>{for(const J in P){if(!P.hasOwnProperty(J))return;const X=P[J],G=E+"."+J,N=ie(r,G);(s.array.has(E)||it(X)||N&&!N._f)&&!qi(X)?V(G,X,z):O(G,X,z)}},U=(E,P,z={})=>{const J=ie(r,E),X=s.array.has(E),G=gt(P);Le(o,E,G),X?(p.array.next({name:E,values:gt(o)}),(d.isDirty||d.dirtyFields||h.isDirty||h.dirtyFields)&&z.shouldDirty&&p.state.next({name:E,dirtyFields:Ka(i,o),isDirty:R(E,G)})):J&&!J._f&&!Dt(G)?V(E,G,z):O(E,G,z),yv(E,s)&&p.state.next({...n,name:E}),p.state.next({name:a.mount?E:void 0,values:gt(o)})},K=async E=>{a.mount=!0;const P=E.target;let z=P.name,J=!0;const X=ie(r,z),G=ee=>{J=Number.isNaN(ee)||qi(ee)&&isNaN(ee.getTime())||ei(ee,ie(o,z,ee))},N=mv(t.mode),B=mv(t.reValidateMode);if(X){let ee,ue;const Ce=P.type?pv(X._f):b4(E),Je=E.type===cv.BLUR||E.type===cv.FOCUS_OUT,yn=!F4(X._f)&&!t.resolver&&!ie(n.errors,z)&&!X._f.deps||D4(Je,ie(n.touchedFields,z),n.isSubmitted,B,N),xt=yv(z,s,Je);Le(o,z,Ce),Je?(X._f.onBlur&&X._f.onBlur(E),c&&c(0)):X._f.onChange&&X._f.onChange(E);const Tt=A(z,Ce,Je),Xn=!qt(Tt)||xt;if(!Je&&p.state.next({name:z,type:E.type,values:gt(o)}),yn)return(d.isValid||h.isValid)&&(t.mode==="onBlur"?Je&&m():Je||m()),Xn&&p.state.next({name:z,...xt?{}:Tt});if(!Je&&xt&&p.state.next({...n}),t.resolver){const{errors:Ge}=await I([z]);if(G(Ce),J){const Jn=vv(n.errors,r,z),Wt=vv(Ge,r,Jn.name||z);ee=Wt.error,z=Wt.name,ue=qt(Ge)}}else b([z],!0),ee=(await xv(X,s.disabled,o,f,t.shouldUseNativeValidation))[z],b([z]),G(Ce),J&&(ee?ue=!1:(d.isValid||h.isValid)&&(ue=await D(r,!0)));J&&(X._f.deps&&L(X._f.deps),C(z,ue,ee,Tt))}},M=(E,P)=>{if(ie(n.errors,P)&&E.focus)return E.focus(),1},L=async(E,P={})=>{let z,J;const X=vs(E);if(t.resolver){const G=await F(ct(E)?E:X);z=qt(G),J=E?!X.some(N=>ie(G,N)):z}else E?(J=(await Promise.all(X.map(async G=>{const N=ie(r,G);return await D(N&&N._f?{[G]:N}:N)}))).every(Boolean),!(!J&&!n.isValid)&&m()):J=z=await D(r);return p.state.next({...!ur(E)||(d.isValid||h.isValid)&&z!==n.isValid?{}:{name:E},...t.resolver||!E?{isValid:z}:{},errors:n.errors}),P.shouldFocus&&!J&&ws(r,M,E?X:s.mount),J},S=E=>{const P={...a.mount?o:i};return ct(E)?P:ur(E)?ie(P,E):E.map(z=>ie(P,z))},oe=(E,P)=>({invalid:!!ie((P||n).errors,E),isDirty:!!ie((P||n).dirtyFields,E),error:ie((P||n).errors,E),isValidating:!!ie(n.validatingFields,E),isTouched:!!ie((P||n).touchedFields,E)}),ne=E=>{E&&vs(E).forEach(P=>st(n.errors,P)),p.state.next({errors:E?n.errors:{}})},T=(E,P,z)=>{const J=(ie(r,E,{_f:{}})._f||{}).ref,X=ie(n.errors,E)||{},{ref:G,message:N,type:B,...ee}=X;Le(n.errors,E,{...ee,...P,ref:J}),p.state.next({name:E,errors:n.errors,isValid:!1}),z&&z.shouldFocus&&J&&J.focus&&J.focus()},le=(E,P)=>Hn(E)?p.state.subscribe({next:z=>"values"in z&&E(_(void 0,P),z)}):_(E,P,!0),Ee=E=>p.state.subscribe({next:P=>{O4(E.name,P.name,E.exact)&&M4(P,E.formState||d,mn,E.reRenderRoot)&&E.callback({values:{...o},...n,...P,defaultValues:i})}}).unsubscribe,ye=E=>(a.mount=!0,h={...h,...E.formState},Ee({...E,formState:h})),Z=(E,P={})=>{for(const z of E?vs(E):s.mount)s.mount.delete(z),s.array.delete(z),P.keepValue||(st(r,z),st(o,z)),!P.keepError&&st(n.errors,z),!P.keepDirty&&st(n.dirtyFields,z),!P.keepTouched&&st(n.touchedFields,z),!P.keepIsValidating&&st(n.validatingFields,z),!t.shouldUnregister&&!P.keepDefaultValue&&st(i,z);p.state.next({values:gt(o)}),p.state.next({...n,...P.keepDirty?{isDirty:R()}:{}}),!P.keepIsValid&&m()},we=({disabled:E,name:P})=>{(rr(E)&&a.mount||E||s.disabled.has(P))&&(E?s.disabled.add(P):s.disabled.delete(P))},Ne=(E,P={})=>{let z=ie(r,E);const J=rr(P.disabled)||rr(t.disabled);return Le(r,E,{...z||{},_f:{...z&&z._f?z._f:{ref:{name:E}},name:E,mount:!0,...P}}),s.mount.add(E),z?we({disabled:rr(P.disabled)?P.disabled:t.disabled,name:E}):k(E,!0,P.value),{...J?{disabled:P.disabled||t.disabled}:{},...t.progressive?{required:!!P.required,min:Za(P.min),max:Za(P.max),minLength:Za(P.minLength),maxLength:Za(P.maxLength),pattern:Za(P.pattern)}:{},name:E,onChange:K,onBlur:K,ref:X=>{if(X){Ne(E,P),z=ie(r,E);const G=ct(X.value)&&X.querySelectorAll&&X.querySelectorAll("input,select,textarea")[0]||X,N=I4(G),B=z._f.refs||[];if(N?B.find(ee=>ee===G):G===z._f.ref)return;Le(r,E,{_f:{...z._f,...N?{refs:[...B.filter(Wd),G,...Array.isArray(ie(i,E))?[{}]:[]],ref:{type:G.type,name:E}}:{ref:G}}}),k(E,!1,void 0,G)}else z=ie(r,E,{}),z._f&&(z._f.mount=!1),(t.shouldUnregister||P.shouldUnregister)&&!(S4(s.array,E)&&a.action)&&s.unMount.add(E)}}},ve=()=>t.shouldFocusError&&ws(r,M,s.mount),xe=E=>{rr(E)&&(p.state.next({disabled:E}),ws(r,(P,z)=>{const J=ie(r,z);J&&(P.disabled=J._f.disabled||E,Array.isArray(J._f.refs)&&J._f.refs.forEach(X=>{X.disabled=J._f.disabled||E}))},0,!1))},Se=(E,P)=>async z=>{let J;z&&(z.preventDefault&&z.preventDefault(),z.persist&&z.persist());let X=gt(o);if(p.state.next({isSubmitting:!0}),t.resolver){const{errors:G,values:N}=await I();n.errors=G,X=gt(N)}else await D(r);if(s.disabled.size)for(const G of s.disabled)st(X,G);if(st(n.errors,"root"),qt(n.errors)){p.state.next({errors:{}});try{await E(X,z)}catch(G){J=G}}else P&&await P({...n.errors},z),ve(),setTimeout(ve);if(p.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:qt(n.errors)&&!J,submitCount:n.submitCount+1,errors:n.errors}),J)throw J},ot=(E,P={})=>{ie(r,E)&&(ct(P.defaultValue)?U(E,gt(ie(i,E))):(U(E,P.defaultValue),Le(i,E,gt(P.defaultValue))),P.keepTouched||st(n.touchedFields,E),P.keepDirty||(st(n.dirtyFields,E),n.isDirty=P.defaultValue?R(E,gt(ie(i,E))):R()),P.keepError||(st(n.errors,E),d.isValid&&m()),p.state.next({...n}))},wt=(E,P={})=>{const z=E?gt(E):i,J=gt(z),X=qt(E),G=X?i:J;if(P.keepDefaultValues||(i=z),!P.keepValues){if(P.keepDirtyValues){const N=new Set([...s.mount,...Object.keys(Ka(i,o))]);for(const B of Array.from(N))ie(n.dirtyFields,B)?Le(G,B,ie(o,B)):U(B,ie(G,B))}else{if(wm&&ct(E))for(const N of s.mount){const B=ie(r,N);if(B&&B._f){const ee=Array.isArray(B._f.refs)?B._f.refs[0]:B._f.ref;if(Zc(ee)){const ue=ee.closest("form");if(ue){ue.reset();break}}}}if(P.keepFieldsRef)for(const N of s.mount)U(N,ie(G,N));else r={}}o=t.shouldUnregister?P.keepDefaultValues?gt(i):{}:gt(G),p.array.next({values:{...G}}),p.state.next({values:{...G}})}s={mount:P.keepDirtyValues?s.mount:new Set,unMount:new Set,array:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:""},a.mount=!d.isValid||!!P.keepIsValid||!!P.keepDirtyValues,a.watch=!!t.shouldUnregister,p.state.next({submitCount:P.keepSubmitCount?n.submitCount:0,isDirty:X?!1:P.keepDirty?n.isDirty:!!(P.keepDefaultValues&&!ei(E,i)),isSubmitted:P.keepIsSubmitted?n.isSubmitted:!1,dirtyFields:X?{}:P.keepDirtyValues?P.keepDefaultValues&&o?Ka(i,o):n.dirtyFields:P.keepDefaultValues&&E?Ka(i,E):P.keepDirty?n.dirtyFields:{},touchedFields:P.keepTouched?n.touchedFields:{},errors:P.keepErrors?n.errors:{},isSubmitSuccessful:P.keepIsSubmitSuccessful?n.isSubmitSuccessful:!1,isSubmitting:!1})},Jt=(E,P)=>wt(Hn(E)?E(o):E,P),en=(E,P={})=>{const z=ie(r,E),J=z&&z._f;if(J){const X=J.refs?J.refs[0]:J.ref;X.focus&&(X.focus(),P.shouldSelect&&Hn(X.select)&&X.select())}},mn=E=>{n={...n,...E}},gn={control:{register:Ne,unregister:Z,getFieldState:oe,handleSubmit:Se,setError:T,_subscribe:Ee,_runSchema:I,_focusError:ve,_getWatch:_,_getDirty:R,_setValid:m,_setFieldArray:g,_setDisabledField:we,_setErrors:w,_getFieldArray:$,_reset:wt,_resetDefaultValues:()=>Hn(t.defaultValues)&&t.defaultValues().then(E=>{Jt(E,t.resetOptions),p.state.next({isLoading:!1})}),_removeUnmounted:j,_disableForm:xe,_subjects:p,_proxyFormState:d,get _fields(){return r},get _formValues(){return o},get _state(){return a},set _state(E){a=E},get _defaultValues(){return i},get _names(){return s},set _names(E){s=E},get _formState(){return n},get _options(){return t},set _options(E){t={...t,...E}}},subscribe:ye,trigger:L,register:Ne,handleSubmit:Se,watch:le,setValue:U,getValues:S,reset:Jt,resetField:ot,clearErrors:ne,unregister:Z,setError:T,setFocus:en,getFieldState:oe};return{...gn,formControl:gn}}function $4(e={}){const t=W.useRef(void 0),n=W.useRef(void 0),[r,i]=W.useState({isDirty:!1,isValidating:!1,isLoading:Hn(e.defaultValues),isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,submitCount:0,dirtyFields:{},touchedFields:{},validatingFields:{},errors:e.errors||{},disabled:e.disabled||!1,isReady:!1,defaultValues:Hn(e.defaultValues)?void 0:e.defaultValues});if(!t.current)if(e.formControl)t.current={...e.formControl,formState:r},e.defaultValues&&!Hn(e.defaultValues)&&e.formControl.reset(e.defaultValues,e.resetOptions);else{const{formControl:a,...s}=H4(e);t.current={...s,formState:r}}const o=t.current.control;return o._options=e,j4(()=>{const a=o._subscribe({formState:o._proxyFormState,callback:()=>i({...o._formState}),reRenderRoot:!0});return i(s=>({...s,isReady:!0})),o._formState.isReady=!0,a},[o]),W.useEffect(()=>o._disableForm(e.disabled),[o,e.disabled]),W.useEffect(()=>{e.mode&&(o._options.mode=e.mode),e.reValidateMode&&(o._options.reValidateMode=e.reValidateMode)},[o,e.mode,e.reValidateMode]),W.useEffect(()=>{e.errors&&(o._setErrors(e.errors),o._focusError())},[o,e.errors]),W.useEffect(()=>{e.shouldUnregister&&o._subjects.state.next({values:o._getWatch()})},[o,e.shouldUnregister]),W.useEffect(()=>{if(o._proxyFormState.isDirty){const a=o._getDirty();a!==r.isDirty&&o._subjects.state.next({isDirty:a})}},[o,r.isDirty]),W.useEffect(()=>{e.values&&!ei(e.values,n.current)?(o._reset(e.values,{keepFieldsRef:!0,...o._options.resetOptions}),n.current=e.values,i(a=>({...a}))):o._resetDefaultValues()},[o,e.values]),W.useEffect(()=>{o._state.mount||(o._setValid(),o._state.mount=!0),o._state.watch&&(o._state.watch=!1,o._subjects.state.next({...o._formState})),o._removeUnmounted()}),t.current.formState=T4(r,o),t.current}const bv=(e,t,n)=>{if(e&&"reportValidity"in e){const r=ie(n,t);e.setCustomValidity(r&&r.message||""),e.reportValidity()}},i2=(e,t)=>{for(const n in t.fields){const r=t.fields[n];r&&r.ref&&"reportValidity"in r.ref?bv(r.ref,n,e):r.refs&&r.refs.forEach(i=>bv(i,n,e))}},W4=(e,t)=>{t.shouldUseNativeValidation&&i2(e,t);const n={};for(const r in e){const i=ie(t.fields,r),o=Object.assign(e[r]||{},{ref:i&&i.ref});if(V4(t.names||Object.keys(e),r)){const a=Object.assign({},ie(n,r));Le(a,"root",o),Le(n,r,a)}else Le(n,r,o)}return n},V4=(e,t)=>e.some(n=>n.startsWith(t+"."));var q4=function(e,t){for(var n={};e.length;){var r=e[0],i=r.code,o=r.message,a=r.path.join(".");if(!n[a])if("unionErrors"in r){var s=r.unionErrors[0].errors[0];n[a]={message:s.message,type:s.code}}else n[a]={message:o,type:i};if("unionErrors"in r&&r.unionErrors.forEach(function(d){return d.errors.forEach(function(h){return e.push(h)})}),t){var c=n[a].types,u=c&&c[r.code];n[a]=ZS(a,t,n,i,u?[].concat(u,r.message):r.message)}e.shift()}return n},U4=function(e,t,n){return n===void 0&&(n={}),function(r,i,o){try{return Promise.resolve(function(a,s){try{var c=Promise.resolve(e[n.mode==="sync"?"parse":"parseAsync"](r,t)).then(function(u){return o.shouldUseNativeValidation&&i2({},o),{errors:{},values:n.raw?r:u}})}catch(u){return s(u)}return c&&c.then?c.then(void 0,s):c}(0,function(a){if(function(s){return Array.isArray(s==null?void 0:s.errors)}(a))return{values:{},errors:W4(q4(a.errors,!o.shouldUseNativeValidation&&o.criteriaMode==="all"),o)};throw a}))}catch(a){return Promise.reject(a)}}},Fe;(function(e){e.assertEqual=i=>{};function t(i){}e.assertIs=t;function n(i){throw new Error}e.assertNever=n,e.arrayToEnum=i=>{const o={};for(const a of i)o[a]=a;return o},e.getValidEnumValues=i=>{const o=e.objectKeys(i).filter(s=>typeof i[i[s]]!="number"),a={};for(const s of o)a[s]=i[s];return e.objectValues(a)},e.objectValues=i=>e.objectKeys(i).map(function(o){return i[o]}),e.objectKeys=typeof Object.keys=="function"?i=>Object.keys(i):i=>{const o=[];for(const a in i)Object.prototype.hasOwnProperty.call(i,a)&&o.push(a);return o},e.find=(i,o)=>{for(const a of i)if(o(a))return a},e.isInteger=typeof Number.isInteger=="function"?i=>Number.isInteger(i):i=>typeof i=="number"&&Number.isFinite(i)&&Math.floor(i)===i;function r(i,o=" | "){return i.map(a=>typeof a=="string"?`'${a}'`:a).join(o)}e.joinValues=r,e.jsonStringifyReplacer=(i,o)=>typeof o=="bigint"?o.toString():o})(Fe||(Fe={}));var kv;(function(e){e.mergeShapes=(t,n)=>({...t,...n})})(kv||(kv={}));const ae=Fe.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),Zr=e=>{switch(typeof e){case"undefined":return ae.undefined;case"string":return ae.string;case"number":return Number.isNaN(e)?ae.nan:ae.number;case"boolean":return ae.boolean;case"function":return ae.function;case"bigint":return ae.bigint;case"symbol":return ae.symbol;case"object":return Array.isArray(e)?ae.array:e===null?ae.null:e.then&&typeof e.then=="function"&&e.catch&&typeof e.catch=="function"?ae.promise:typeof Map<"u"&&e instanceof Map?ae.map:typeof Set<"u"&&e instanceof Set?ae.set:typeof Date<"u"&&e instanceof Date?ae.date:ae.object;default:return ae.unknown}},Q=Fe.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);class Fr extends Error{get errors(){return this.issues}constructor(t){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};const n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=t}format(t){const n=t||function(o){return o.message},r={_errors:[]},i=o=>{for(const a of o.issues)if(a.code==="invalid_union")a.unionErrors.map(i);else if(a.code==="invalid_return_type")i(a.returnTypeError);else if(a.code==="invalid_arguments")i(a.argumentsError);else if(a.path.length===0)r._errors.push(n(a));else{let s=r,c=0;for(;cn.message){const n={},r=[];for(const i of this.issues)if(i.path.length>0){const o=i.path[0];n[o]=n[o]||[],n[o].push(t(i))}else r.push(t(i));return{formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}}Fr.create=e=>new Fr(e);const If=(e,t)=>{let n;switch(e.code){case Q.invalid_type:e.received===ae.undefined?n="Required":n=`Expected ${e.expected}, received ${e.received}`;break;case Q.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,Fe.jsonStringifyReplacer)}`;break;case Q.unrecognized_keys:n=`Unrecognized key(s) in object: ${Fe.joinValues(e.keys,", ")}`;break;case Q.invalid_union:n="Invalid input";break;case Q.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${Fe.joinValues(e.options)}`;break;case Q.invalid_enum_value:n=`Invalid enum value. Expected ${Fe.joinValues(e.options)}, received '${e.received}'`;break;case Q.invalid_arguments:n="Invalid function arguments";break;case Q.invalid_return_type:n="Invalid function return type";break;case Q.invalid_date:n="Invalid date";break;case Q.invalid_string:typeof e.validation=="object"?"includes"in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:Fe.assertNever(e.validation):e.validation!=="regex"?n=`Invalid ${e.validation}`:n="Invalid";break;case Q.too_small:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="bigint"?n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:n="Invalid input";break;case Q.too_big:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="bigint"?n=`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:n="Invalid input";break;case Q.custom:n="Invalid input";break;case Q.invalid_intersection_types:n="Intersection results could not be merged";break;case Q.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case Q.not_finite:n="Number must be finite";break;default:n=t.defaultError,Fe.assertNever(e)}return{message:n}};let Y4=If;function Q4(){return Y4}const G4=e=>{const{data:t,path:n,errorMaps:r,issueData:i}=e,o=[...n,...i.path||[]],a={...i,path:o};if(i.message!==void 0)return{...i,path:o,message:i.message};let s="";const c=r.filter(u=>!!u).slice().reverse();for(const u of c)s=u(a,{data:t,defaultError:s}).message;return{...i,path:o,message:s}};function te(e,t){const n=Q4(),r=G4({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,n,n===If?void 0:If].filter(i=>!!i)});e.common.issues.push(r)}class un{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(t,n){const r=[];for(const i of n){if(i.status==="aborted")return he;i.status==="dirty"&&t.dirty(),r.push(i.value)}return{status:t.value,value:r}}static async mergeObjectAsync(t,n){const r=[];for(const i of n){const o=await i.key,a=await i.value;r.push({key:o,value:a})}return un.mergeObjectSync(t,r)}static mergeObjectSync(t,n){const r={};for(const i of n){const{key:o,value:a}=i;if(o.status==="aborted"||a.status==="aborted")return he;o.status==="dirty"&&t.dirty(),a.status==="dirty"&&t.dirty(),o.value!=="__proto__"&&(typeof a.value<"u"||i.alwaysSet)&&(r[o.value]=a.value)}return{status:t.value,value:r}}}const he=Object.freeze({status:"aborted"}),ss=e=>({status:"dirty",value:e}),jn=e=>({status:"valid",value:e}),Sv=e=>e.status==="aborted",Cv=e=>e.status==="dirty",xa=e=>e.status==="valid",eu=e=>typeof Promise<"u"&&e instanceof Promise;var se;(function(e){e.errToObj=t=>typeof t=="string"?{message:t}:t||{},e.toString=t=>typeof t=="string"?t:t==null?void 0:t.message})(se||(se={}));class Ai{constructor(t,n,r,i){this._cachedPath=[],this.parent=t,this.data=n,this._path=r,this._key=i}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const Av=(e,t)=>{if(xa(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const n=new Fr(e.common.issues);return this._error=n,this._error}}};function ke(e){if(!e)return{};const{errorMap:t,invalid_type_error:n,required_error:r,description:i}=e;if(t&&(n||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:i}:{errorMap:(a,s)=>{const{message:c}=e;return a.code==="invalid_enum_value"?{message:c??s.defaultError}:typeof s.data>"u"?{message:c??r??s.defaultError}:a.code!=="invalid_type"?{message:s.defaultError}:{message:c??n??s.defaultError}},description:i}}class Pe{get description(){return this._def.description}_getType(t){return Zr(t.data)}_getOrReturnCtx(t,n){return n||{common:t.parent.common,data:t.data,parsedType:Zr(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}_processInputParams(t){return{status:new un,ctx:{common:t.parent.common,data:t.data,parsedType:Zr(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}}_parseSync(t){const n=this._parse(t);if(eu(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(t){const n=this._parse(t);return Promise.resolve(n)}parse(t,n){const r=this.safeParse(t,n);if(r.success)return r.data;throw r.error}safeParse(t,n){const r={common:{issues:[],async:(n==null?void 0:n.async)??!1,contextualErrorMap:n==null?void 0:n.errorMap},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:Zr(t)},i=this._parseSync({data:t,path:r.path,parent:r});return Av(r,i)}"~validate"(t){var r,i;const n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:Zr(t)};if(!this["~standard"].async)try{const o=this._parseSync({data:t,path:[],parent:n});return xa(o)?{value:o.value}:{issues:n.common.issues}}catch(o){(i=(r=o==null?void 0:o.message)==null?void 0:r.toLowerCase())!=null&&i.includes("encountered")&&(this["~standard"].async=!0),n.common={issues:[],async:!0}}return this._parseAsync({data:t,path:[],parent:n}).then(o=>xa(o)?{value:o.value}:{issues:n.common.issues})}async parseAsync(t,n){const r=await this.safeParseAsync(t,n);if(r.success)return r.data;throw r.error}async safeParseAsync(t,n){const r={common:{issues:[],contextualErrorMap:n==null?void 0:n.errorMap,async:!0},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:Zr(t)},i=this._parse({data:t,path:r.path,parent:r}),o=await(eu(i)?i:Promise.resolve(i));return Av(r,o)}refine(t,n){const r=i=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(i):n;return this._refinement((i,o)=>{const a=t(i),s=()=>o.addIssue({code:Q.custom,...r(i)});return typeof Promise<"u"&&a instanceof Promise?a.then(c=>c?!0:(s(),!1)):a?!0:(s(),!1)})}refinement(t,n){return this._refinement((r,i)=>t(r)?!0:(i.addIssue(typeof n=="function"?n(r,i):n),!1))}_refinement(t){return new ka({schema:this,typeName:fe.ZodEffects,effect:{type:"refinement",refinement:t}})}superRefine(t){return this._refinement(t)}constructor(t){this.spa=this.safeParseAsync,this._def=t,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:n=>this["~validate"](n)}}optional(){return xi.create(this,this._def)}nullable(){return Sa.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return pr.create(this)}promise(){return iu.create(this,this._def)}or(t){return nu.create([this,t],this._def)}and(t){return ru.create(this,t,this._def)}transform(t){return new ka({...ke(this._def),schema:this,typeName:fe.ZodEffects,effect:{type:"transform",transform:t}})}default(t){const n=typeof t=="function"?t:()=>t;return new Pf({...ke(this._def),innerType:this,defaultValue:n,typeName:fe.ZodDefault})}brand(){return new vF({typeName:fe.ZodBranded,type:this,...ke(this._def)})}catch(t){const n=typeof t=="function"?t:()=>t;return new Rf({...ke(this._def),innerType:this,catchValue:n,typeName:fe.ZodCatch})}describe(t){const n=this.constructor;return new n({...this._def,description:t})}pipe(t){return Cm.create(this,t)}readonly(){return Ff.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const K4=/^c[^\s-]{8,}$/i,Z4=/^[0-9a-z]+$/,X4=/^[0-9A-HJKMNP-TV-Z]{26}$/i,J4=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,eF=/^[a-z0-9_-]{21}$/i,tF=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,nF=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,rF=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,iF="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";let Vd;const oF=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,aF=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,sF=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,lF=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,cF=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,uF=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,o2="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",dF=new RegExp(`^${o2}$`);function a2(e){let t="[0-5]\\d";e.precision?t=`${t}\\.\\d{${e.precision}}`:e.precision==null&&(t=`${t}(\\.\\d+)?`);const n=e.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${n}`}function hF(e){return new RegExp(`^${a2(e)}$`)}function fF(e){let t=`${o2}T${a2(e)}`;const n=[];return n.push(e.local?"Z?":"Z"),e.offset&&n.push("([+-]\\d{2}:?\\d{2})"),t=`${t}(${n.join("|")})`,new RegExp(`^${t}$`)}function pF(e,t){return!!((t==="v4"||!t)&&oF.test(e)||(t==="v6"||!t)&&sF.test(e))}function mF(e,t){if(!tF.test(e))return!1;try{const[n]=e.split(".");if(!n)return!1;const r=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),i=JSON.parse(atob(r));return!(typeof i!="object"||i===null||"typ"in i&&(i==null?void 0:i.typ)!=="JWT"||!i.alg||t&&i.alg!==t)}catch{return!1}}function gF(e,t){return!!((t==="v4"||!t)&&aF.test(e)||(t==="v6"||!t)&&lF.test(e))}class ci extends Pe{_parse(t){if(this._def.coerce&&(t.data=String(t.data)),this._getType(t)!==ae.string){const o=this._getOrReturnCtx(t);return te(o,{code:Q.invalid_type,expected:ae.string,received:o.parsedType}),he}const r=new un;let i;for(const o of this._def.checks)if(o.kind==="min")t.data.lengtho.value&&(i=this._getOrReturnCtx(t,i),te(i,{code:Q.too_big,maximum:o.value,type:"string",inclusive:!0,exact:!1,message:o.message}),r.dirty());else if(o.kind==="length"){const a=t.data.length>o.value,s=t.data.lengtht.test(i),{validation:n,code:Q.invalid_string,...se.errToObj(r)})}_addCheck(t){return new ci({...this._def,checks:[...this._def.checks,t]})}email(t){return this._addCheck({kind:"email",...se.errToObj(t)})}url(t){return this._addCheck({kind:"url",...se.errToObj(t)})}emoji(t){return this._addCheck({kind:"emoji",...se.errToObj(t)})}uuid(t){return this._addCheck({kind:"uuid",...se.errToObj(t)})}nanoid(t){return this._addCheck({kind:"nanoid",...se.errToObj(t)})}cuid(t){return this._addCheck({kind:"cuid",...se.errToObj(t)})}cuid2(t){return this._addCheck({kind:"cuid2",...se.errToObj(t)})}ulid(t){return this._addCheck({kind:"ulid",...se.errToObj(t)})}base64(t){return this._addCheck({kind:"base64",...se.errToObj(t)})}base64url(t){return this._addCheck({kind:"base64url",...se.errToObj(t)})}jwt(t){return this._addCheck({kind:"jwt",...se.errToObj(t)})}ip(t){return this._addCheck({kind:"ip",...se.errToObj(t)})}cidr(t){return this._addCheck({kind:"cidr",...se.errToObj(t)})}datetime(t){return typeof t=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:t}):this._addCheck({kind:"datetime",precision:typeof(t==null?void 0:t.precision)>"u"?null:t==null?void 0:t.precision,offset:(t==null?void 0:t.offset)??!1,local:(t==null?void 0:t.local)??!1,...se.errToObj(t==null?void 0:t.message)})}date(t){return this._addCheck({kind:"date",message:t})}time(t){return typeof t=="string"?this._addCheck({kind:"time",precision:null,message:t}):this._addCheck({kind:"time",precision:typeof(t==null?void 0:t.precision)>"u"?null:t==null?void 0:t.precision,...se.errToObj(t==null?void 0:t.message)})}duration(t){return this._addCheck({kind:"duration",...se.errToObj(t)})}regex(t,n){return this._addCheck({kind:"regex",regex:t,...se.errToObj(n)})}includes(t,n){return this._addCheck({kind:"includes",value:t,position:n==null?void 0:n.position,...se.errToObj(n==null?void 0:n.message)})}startsWith(t,n){return this._addCheck({kind:"startsWith",value:t,...se.errToObj(n)})}endsWith(t,n){return this._addCheck({kind:"endsWith",value:t,...se.errToObj(n)})}min(t,n){return this._addCheck({kind:"min",value:t,...se.errToObj(n)})}max(t,n){return this._addCheck({kind:"max",value:t,...se.errToObj(n)})}length(t,n){return this._addCheck({kind:"length",value:t,...se.errToObj(n)})}nonempty(t){return this.min(1,se.errToObj(t))}trim(){return new ci({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new ci({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new ci({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(t=>t.kind==="datetime")}get isDate(){return!!this._def.checks.find(t=>t.kind==="date")}get isTime(){return!!this._def.checks.find(t=>t.kind==="time")}get isDuration(){return!!this._def.checks.find(t=>t.kind==="duration")}get isEmail(){return!!this._def.checks.find(t=>t.kind==="email")}get isURL(){return!!this._def.checks.find(t=>t.kind==="url")}get isEmoji(){return!!this._def.checks.find(t=>t.kind==="emoji")}get isUUID(){return!!this._def.checks.find(t=>t.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(t=>t.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(t=>t.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(t=>t.kind==="cuid2")}get isULID(){return!!this._def.checks.find(t=>t.kind==="ulid")}get isIP(){return!!this._def.checks.find(t=>t.kind==="ip")}get isCIDR(){return!!this._def.checks.find(t=>t.kind==="cidr")}get isBase64(){return!!this._def.checks.find(t=>t.kind==="base64")}get isBase64url(){return!!this._def.checks.find(t=>t.kind==="base64url")}get minLength(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxLength(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuenew ci({checks:[],typeName:fe.ZodString,coerce:(e==null?void 0:e.coerce)??!1,...ke(e)});function yF(e,t){const n=(e.toString().split(".")[1]||"").length,r=(t.toString().split(".")[1]||"").length,i=n>r?n:r,o=Number.parseInt(e.toFixed(i).replace(".","")),a=Number.parseInt(t.toFixed(i).replace(".",""));return o%a/10**i}class Ys extends Pe{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(t){if(this._def.coerce&&(t.data=Number(t.data)),this._getType(t)!==ae.number){const o=this._getOrReturnCtx(t);return te(o,{code:Q.invalid_type,expected:ae.number,received:o.parsedType}),he}let r;const i=new un;for(const o of this._def.checks)o.kind==="int"?Fe.isInteger(t.data)||(r=this._getOrReturnCtx(t,r),te(r,{code:Q.invalid_type,expected:"integer",received:"float",message:o.message}),i.dirty()):o.kind==="min"?(o.inclusive?t.datao.value:t.data>=o.value)&&(r=this._getOrReturnCtx(t,r),te(r,{code:Q.too_big,maximum:o.value,type:"number",inclusive:o.inclusive,exact:!1,message:o.message}),i.dirty()):o.kind==="multipleOf"?yF(t.data,o.value)!==0&&(r=this._getOrReturnCtx(t,r),te(r,{code:Q.not_multiple_of,multipleOf:o.value,message:o.message}),i.dirty()):o.kind==="finite"?Number.isFinite(t.data)||(r=this._getOrReturnCtx(t,r),te(r,{code:Q.not_finite,message:o.message}),i.dirty()):Fe.assertNever(o);return{status:i.value,value:t.data}}gte(t,n){return this.setLimit("min",t,!0,se.toString(n))}gt(t,n){return this.setLimit("min",t,!1,se.toString(n))}lte(t,n){return this.setLimit("max",t,!0,se.toString(n))}lt(t,n){return this.setLimit("max",t,!1,se.toString(n))}setLimit(t,n,r,i){return new Ys({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:se.toString(i)}]})}_addCheck(t){return new Ys({...this._def,checks:[...this._def.checks,t]})}int(t){return this._addCheck({kind:"int",message:se.toString(t)})}positive(t){return this._addCheck({kind:"min",value:0,inclusive:!1,message:se.toString(t)})}negative(t){return this._addCheck({kind:"max",value:0,inclusive:!1,message:se.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:0,inclusive:!0,message:se.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:0,inclusive:!0,message:se.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:se.toString(n)})}finite(t){return this._addCheck({kind:"finite",message:se.toString(t)})}safe(t){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:se.toString(t)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:se.toString(t)})}get minValue(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuet.kind==="int"||t.kind==="multipleOf"&&Fe.isInteger(t.value))}get isFinite(){let t=null,n=null;for(const r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(t===null||r.valuenew Ys({checks:[],typeName:fe.ZodNumber,coerce:(e==null?void 0:e.coerce)||!1,...ke(e)});class Qs extends Pe{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(t){if(this._def.coerce)try{t.data=BigInt(t.data)}catch{return this._getInvalidInput(t)}if(this._getType(t)!==ae.bigint)return this._getInvalidInput(t);let r;const i=new un;for(const o of this._def.checks)o.kind==="min"?(o.inclusive?t.datao.value:t.data>=o.value)&&(r=this._getOrReturnCtx(t,r),te(r,{code:Q.too_big,type:"bigint",maximum:o.value,inclusive:o.inclusive,message:o.message}),i.dirty()):o.kind==="multipleOf"?t.data%o.value!==BigInt(0)&&(r=this._getOrReturnCtx(t,r),te(r,{code:Q.not_multiple_of,multipleOf:o.value,message:o.message}),i.dirty()):Fe.assertNever(o);return{status:i.value,value:t.data}}_getInvalidInput(t){const n=this._getOrReturnCtx(t);return te(n,{code:Q.invalid_type,expected:ae.bigint,received:n.parsedType}),he}gte(t,n){return this.setLimit("min",t,!0,se.toString(n))}gt(t,n){return this.setLimit("min",t,!1,se.toString(n))}lte(t,n){return this.setLimit("max",t,!0,se.toString(n))}lt(t,n){return this.setLimit("max",t,!1,se.toString(n))}setLimit(t,n,r,i){return new Qs({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:se.toString(i)}]})}_addCheck(t){return new Qs({...this._def,checks:[...this._def.checks,t]})}positive(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:se.toString(t)})}negative(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:se.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:se.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:se.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:se.toString(n)})}get minValue(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuenew Qs({checks:[],typeName:fe.ZodBigInt,coerce:(e==null?void 0:e.coerce)??!1,...ke(e)});class Nf extends Pe{_parse(t){if(this._def.coerce&&(t.data=!!t.data),this._getType(t)!==ae.boolean){const r=this._getOrReturnCtx(t);return te(r,{code:Q.invalid_type,expected:ae.boolean,received:r.parsedType}),he}return jn(t.data)}}Nf.create=e=>new Nf({typeName:fe.ZodBoolean,coerce:(e==null?void 0:e.coerce)||!1,...ke(e)});class tu extends Pe{_parse(t){if(this._def.coerce&&(t.data=new Date(t.data)),this._getType(t)!==ae.date){const o=this._getOrReturnCtx(t);return te(o,{code:Q.invalid_type,expected:ae.date,received:o.parsedType}),he}if(Number.isNaN(t.data.getTime())){const o=this._getOrReturnCtx(t);return te(o,{code:Q.invalid_date}),he}const r=new un;let i;for(const o of this._def.checks)o.kind==="min"?t.data.getTime()o.value&&(i=this._getOrReturnCtx(t,i),te(i,{code:Q.too_big,message:o.message,inclusive:!0,exact:!1,maximum:o.value,type:"date"}),r.dirty()):Fe.assertNever(o);return{status:r.value,value:new Date(t.data.getTime())}}_addCheck(t){return new tu({...this._def,checks:[...this._def.checks,t]})}min(t,n){return this._addCheck({kind:"min",value:t.getTime(),message:se.toString(n)})}max(t,n){return this._addCheck({kind:"max",value:t.getTime(),message:se.toString(n)})}get minDate(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t!=null?new Date(t):null}get maxDate(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuenew tu({checks:[],coerce:(e==null?void 0:e.coerce)||!1,typeName:fe.ZodDate,...ke(e)});class Tv extends Pe{_parse(t){if(this._getType(t)!==ae.symbol){const r=this._getOrReturnCtx(t);return te(r,{code:Q.invalid_type,expected:ae.symbol,received:r.parsedType}),he}return jn(t.data)}}Tv.create=e=>new Tv({typeName:fe.ZodSymbol,...ke(e)});class jv extends Pe{_parse(t){if(this._getType(t)!==ae.undefined){const r=this._getOrReturnCtx(t);return te(r,{code:Q.invalid_type,expected:ae.undefined,received:r.parsedType}),he}return jn(t.data)}}jv.create=e=>new jv({typeName:fe.ZodUndefined,...ke(e)});class Ev extends Pe{_parse(t){if(this._getType(t)!==ae.null){const r=this._getOrReturnCtx(t);return te(r,{code:Q.invalid_type,expected:ae.null,received:r.parsedType}),he}return jn(t.data)}}Ev.create=e=>new Ev({typeName:fe.ZodNull,...ke(e)});class Iv extends Pe{constructor(){super(...arguments),this._any=!0}_parse(t){return jn(t.data)}}Iv.create=e=>new Iv({typeName:fe.ZodAny,...ke(e)});class Nv extends Pe{constructor(){super(...arguments),this._unknown=!0}_parse(t){return jn(t.data)}}Nv.create=e=>new Nv({typeName:fe.ZodUnknown,...ke(e)});class Ti extends Pe{_parse(t){const n=this._getOrReturnCtx(t);return te(n,{code:Q.invalid_type,expected:ae.never,received:n.parsedType}),he}}Ti.create=e=>new Ti({typeName:fe.ZodNever,...ke(e)});class _v extends Pe{_parse(t){if(this._getType(t)!==ae.undefined){const r=this._getOrReturnCtx(t);return te(r,{code:Q.invalid_type,expected:ae.void,received:r.parsedType}),he}return jn(t.data)}}_v.create=e=>new _v({typeName:fe.ZodVoid,...ke(e)});class pr extends Pe{_parse(t){const{ctx:n,status:r}=this._processInputParams(t),i=this._def;if(n.parsedType!==ae.array)return te(n,{code:Q.invalid_type,expected:ae.array,received:n.parsedType}),he;if(i.exactLength!==null){const a=n.data.length>i.exactLength.value,s=n.data.lengthi.maxLength.value&&(te(n,{code:Q.too_big,maximum:i.maxLength.value,type:"array",inclusive:!0,exact:!1,message:i.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((a,s)=>i.type._parseAsync(new Ai(n,a,n.path,s)))).then(a=>un.mergeArray(r,a));const o=[...n.data].map((a,s)=>i.type._parseSync(new Ai(n,a,n.path,s)));return un.mergeArray(r,o)}get element(){return this._def.type}min(t,n){return new pr({...this._def,minLength:{value:t,message:se.toString(n)}})}max(t,n){return new pr({...this._def,maxLength:{value:t,message:se.toString(n)}})}length(t,n){return new pr({...this._def,exactLength:{value:t,message:se.toString(n)}})}nonempty(t){return this.min(1,t)}}pr.create=(e,t)=>new pr({type:e,minLength:null,maxLength:null,exactLength:null,typeName:fe.ZodArray,...ke(t)});function No(e){if(e instanceof tt){const t={};for(const n in e.shape){const r=e.shape[n];t[n]=xi.create(No(r))}return new tt({...e._def,shape:()=>t})}else return e instanceof pr?new pr({...e._def,type:No(e.element)}):e instanceof xi?xi.create(No(e.unwrap())):e instanceof Sa?Sa.create(No(e.unwrap())):e instanceof ho?ho.create(e.items.map(t=>No(t))):e}class tt extends Pe{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const t=this._def.shape(),n=Fe.objectKeys(t);return this._cached={shape:t,keys:n},this._cached}_parse(t){if(this._getType(t)!==ae.object){const u=this._getOrReturnCtx(t);return te(u,{code:Q.invalid_type,expected:ae.object,received:u.parsedType}),he}const{status:r,ctx:i}=this._processInputParams(t),{shape:o,keys:a}=this._getCached(),s=[];if(!(this._def.catchall instanceof Ti&&this._def.unknownKeys==="strip"))for(const u in i.data)a.includes(u)||s.push(u);const c=[];for(const u of a){const d=o[u],h=i.data[u];c.push({key:{status:"valid",value:u},value:d._parse(new Ai(i,h,i.path,u)),alwaysSet:u in i.data})}if(this._def.catchall instanceof Ti){const u=this._def.unknownKeys;if(u==="passthrough")for(const d of s)c.push({key:{status:"valid",value:d},value:{status:"valid",value:i.data[d]}});else if(u==="strict")s.length>0&&(te(i,{code:Q.unrecognized_keys,keys:s}),r.dirty());else if(u!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const u=this._def.catchall;for(const d of s){const h=i.data[d];c.push({key:{status:"valid",value:d},value:u._parse(new Ai(i,h,i.path,d)),alwaysSet:d in i.data})}}return i.common.async?Promise.resolve().then(async()=>{const u=[];for(const d of c){const h=await d.key,p=await d.value;u.push({key:h,value:p,alwaysSet:d.alwaysSet})}return u}).then(u=>un.mergeObjectSync(r,u)):un.mergeObjectSync(r,c)}get shape(){return this._def.shape()}strict(t){return se.errToObj,new tt({...this._def,unknownKeys:"strict",...t!==void 0?{errorMap:(n,r)=>{var o,a;const i=((a=(o=this._def).errorMap)==null?void 0:a.call(o,n,r).message)??r.defaultError;return n.code==="unrecognized_keys"?{message:se.errToObj(t).message??i}:{message:i}}}:{}})}strip(){return new tt({...this._def,unknownKeys:"strip"})}passthrough(){return new tt({...this._def,unknownKeys:"passthrough"})}extend(t){return new tt({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new tt({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:fe.ZodObject})}setKey(t,n){return this.augment({[t]:n})}catchall(t){return new tt({...this._def,catchall:t})}pick(t){const n={};for(const r of Fe.objectKeys(t))t[r]&&this.shape[r]&&(n[r]=this.shape[r]);return new tt({...this._def,shape:()=>n})}omit(t){const n={};for(const r of Fe.objectKeys(this.shape))t[r]||(n[r]=this.shape[r]);return new tt({...this._def,shape:()=>n})}deepPartial(){return No(this)}partial(t){const n={};for(const r of Fe.objectKeys(this.shape)){const i=this.shape[r];t&&!t[r]?n[r]=i:n[r]=i.optional()}return new tt({...this._def,shape:()=>n})}required(t){const n={};for(const r of Fe.objectKeys(this.shape))if(t&&!t[r])n[r]=this.shape[r];else{let o=this.shape[r];for(;o instanceof xi;)o=o._def.innerType;n[r]=o}return new tt({...this._def,shape:()=>n})}keyof(){return s2(Fe.objectKeys(this.shape))}}tt.create=(e,t)=>new tt({shape:()=>e,unknownKeys:"strip",catchall:Ti.create(),typeName:fe.ZodObject,...ke(t)});tt.strictCreate=(e,t)=>new tt({shape:()=>e,unknownKeys:"strict",catchall:Ti.create(),typeName:fe.ZodObject,...ke(t)});tt.lazycreate=(e,t)=>new tt({shape:e,unknownKeys:"strip",catchall:Ti.create(),typeName:fe.ZodObject,...ke(t)});class nu extends Pe{_parse(t){const{ctx:n}=this._processInputParams(t),r=this._def.options;function i(o){for(const s of o)if(s.result.status==="valid")return s.result;for(const s of o)if(s.result.status==="dirty")return n.common.issues.push(...s.ctx.common.issues),s.result;const a=o.map(s=>new Fr(s.ctx.common.issues));return te(n,{code:Q.invalid_union,unionErrors:a}),he}if(n.common.async)return Promise.all(r.map(async o=>{const a={...n,common:{...n.common,issues:[]},parent:null};return{result:await o._parseAsync({data:n.data,path:n.path,parent:a}),ctx:a}})).then(i);{let o;const a=[];for(const c of r){const u={...n,common:{...n.common,issues:[]},parent:null},d=c._parseSync({data:n.data,path:n.path,parent:u});if(d.status==="valid")return d;d.status==="dirty"&&!o&&(o={result:d,ctx:u}),u.common.issues.length&&a.push(u.common.issues)}if(o)return n.common.issues.push(...o.ctx.common.issues),o.result;const s=a.map(c=>new Fr(c));return te(n,{code:Q.invalid_union,unionErrors:s}),he}}get options(){return this._def.options}}nu.create=(e,t)=>new nu({options:e,typeName:fe.ZodUnion,...ke(t)});function _f(e,t){const n=Zr(e),r=Zr(t);if(e===t)return{valid:!0,data:e};if(n===ae.object&&r===ae.object){const i=Fe.objectKeys(t),o=Fe.objectKeys(e).filter(s=>i.indexOf(s)!==-1),a={...e,...t};for(const s of o){const c=_f(e[s],t[s]);if(!c.valid)return{valid:!1};a[s]=c.data}return{valid:!0,data:a}}else if(n===ae.array&&r===ae.array){if(e.length!==t.length)return{valid:!1};const i=[];for(let o=0;o{if(Sv(o)||Sv(a))return he;const s=_f(o.value,a.value);return s.valid?((Cv(o)||Cv(a))&&n.dirty(),{status:n.value,value:s.data}):(te(r,{code:Q.invalid_intersection_types}),he)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([o,a])=>i(o,a)):i(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}}ru.create=(e,t,n)=>new ru({left:e,right:t,typeName:fe.ZodIntersection,...ke(n)});class ho extends Pe{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==ae.array)return te(r,{code:Q.invalid_type,expected:ae.array,received:r.parsedType}),he;if(r.data.lengththis._def.items.length&&(te(r,{code:Q.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());const o=[...r.data].map((a,s)=>{const c=this._def.items[s]||this._def.rest;return c?c._parse(new Ai(r,a,r.path,s)):null}).filter(a=>!!a);return r.common.async?Promise.all(o).then(a=>un.mergeArray(n,a)):un.mergeArray(n,o)}get items(){return this._def.items}rest(t){return new ho({...this._def,rest:t})}}ho.create=(e,t)=>{if(!Array.isArray(e))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new ho({items:e,typeName:fe.ZodTuple,rest:null,...ke(t)})};class Pv extends Pe{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==ae.map)return te(r,{code:Q.invalid_type,expected:ae.map,received:r.parsedType}),he;const i=this._def.keyType,o=this._def.valueType,a=[...r.data.entries()].map(([s,c],u)=>({key:i._parse(new Ai(r,s,r.path,[u,"key"])),value:o._parse(new Ai(r,c,r.path,[u,"value"]))}));if(r.common.async){const s=new Map;return Promise.resolve().then(async()=>{for(const c of a){const u=await c.key,d=await c.value;if(u.status==="aborted"||d.status==="aborted")return he;(u.status==="dirty"||d.status==="dirty")&&n.dirty(),s.set(u.value,d.value)}return{status:n.value,value:s}})}else{const s=new Map;for(const c of a){const u=c.key,d=c.value;if(u.status==="aborted"||d.status==="aborted")return he;(u.status==="dirty"||d.status==="dirty")&&n.dirty(),s.set(u.value,d.value)}return{status:n.value,value:s}}}}Pv.create=(e,t,n)=>new Pv({valueType:t,keyType:e,typeName:fe.ZodMap,...ke(n)});class Gs extends Pe{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==ae.set)return te(r,{code:Q.invalid_type,expected:ae.set,received:r.parsedType}),he;const i=this._def;i.minSize!==null&&r.data.sizei.maxSize.value&&(te(r,{code:Q.too_big,maximum:i.maxSize.value,type:"set",inclusive:!0,exact:!1,message:i.maxSize.message}),n.dirty());const o=this._def.valueType;function a(c){const u=new Set;for(const d of c){if(d.status==="aborted")return he;d.status==="dirty"&&n.dirty(),u.add(d.value)}return{status:n.value,value:u}}const s=[...r.data.values()].map((c,u)=>o._parse(new Ai(r,c,r.path,u)));return r.common.async?Promise.all(s).then(c=>a(c)):a(s)}min(t,n){return new Gs({...this._def,minSize:{value:t,message:se.toString(n)}})}max(t,n){return new Gs({...this._def,maxSize:{value:t,message:se.toString(n)}})}size(t,n){return this.min(t,n).max(t,n)}nonempty(t){return this.min(1,t)}}Gs.create=(e,t)=>new Gs({valueType:e,minSize:null,maxSize:null,typeName:fe.ZodSet,...ke(t)});class Rv extends Pe{get schema(){return this._def.getter()}_parse(t){const{ctx:n}=this._processInputParams(t);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}}Rv.create=(e,t)=>new Rv({getter:e,typeName:fe.ZodLazy,...ke(t)});class Fv extends Pe{_parse(t){if(t.data!==this._def.value){const n=this._getOrReturnCtx(t);return te(n,{received:n.data,code:Q.invalid_literal,expected:this._def.value}),he}return{status:"valid",value:t.data}}get value(){return this._def.value}}Fv.create=(e,t)=>new Fv({value:e,typeName:fe.ZodLiteral,...ke(t)});function s2(e,t){return new ba({values:e,typeName:fe.ZodEnum,...ke(t)})}class ba extends Pe{_parse(t){if(typeof t.data!="string"){const n=this._getOrReturnCtx(t),r=this._def.values;return te(n,{expected:Fe.joinValues(r),received:n.parsedType,code:Q.invalid_type}),he}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(t.data)){const n=this._getOrReturnCtx(t),r=this._def.values;return te(n,{received:n.data,code:Q.invalid_enum_value,options:r}),he}return jn(t.data)}get options(){return this._def.values}get enum(){const t={};for(const n of this._def.values)t[n]=n;return t}get Values(){const t={};for(const n of this._def.values)t[n]=n;return t}get Enum(){const t={};for(const n of this._def.values)t[n]=n;return t}extract(t,n=this._def){return ba.create(t,{...this._def,...n})}exclude(t,n=this._def){return ba.create(this.options.filter(r=>!t.includes(r)),{...this._def,...n})}}ba.create=s2;class Mv extends Pe{_parse(t){const n=Fe.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(t);if(r.parsedType!==ae.string&&r.parsedType!==ae.number){const i=Fe.objectValues(n);return te(r,{expected:Fe.joinValues(i),received:r.parsedType,code:Q.invalid_type}),he}if(this._cache||(this._cache=new Set(Fe.getValidEnumValues(this._def.values))),!this._cache.has(t.data)){const i=Fe.objectValues(n);return te(r,{received:r.data,code:Q.invalid_enum_value,options:i}),he}return jn(t.data)}get enum(){return this._def.values}}Mv.create=(e,t)=>new Mv({values:e,typeName:fe.ZodNativeEnum,...ke(t)});class iu extends Pe{unwrap(){return this._def.type}_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==ae.promise&&n.common.async===!1)return te(n,{code:Q.invalid_type,expected:ae.promise,received:n.parsedType}),he;const r=n.parsedType===ae.promise?n.data:Promise.resolve(n.data);return jn(r.then(i=>this._def.type.parseAsync(i,{path:n.path,errorMap:n.common.contextualErrorMap})))}}iu.create=(e,t)=>new iu({type:e,typeName:fe.ZodPromise,...ke(t)});class ka extends Pe{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===fe.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(t){const{status:n,ctx:r}=this._processInputParams(t),i=this._def.effect||null,o={addIssue:a=>{te(r,a),a.fatal?n.abort():n.dirty()},get path(){return r.path}};if(o.addIssue=o.addIssue.bind(o),i.type==="preprocess"){const a=i.transform(r.data,o);if(r.common.async)return Promise.resolve(a).then(async s=>{if(n.value==="aborted")return he;const c=await this._def.schema._parseAsync({data:s,path:r.path,parent:r});return c.status==="aborted"?he:c.status==="dirty"||n.value==="dirty"?ss(c.value):c});{if(n.value==="aborted")return he;const s=this._def.schema._parseSync({data:a,path:r.path,parent:r});return s.status==="aborted"?he:s.status==="dirty"||n.value==="dirty"?ss(s.value):s}}if(i.type==="refinement"){const a=s=>{const c=i.refinement(s,o);if(r.common.async)return Promise.resolve(c);if(c instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return s};if(r.common.async===!1){const s=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return s.status==="aborted"?he:(s.status==="dirty"&&n.dirty(),a(s.value),{status:n.value,value:s.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(s=>s.status==="aborted"?he:(s.status==="dirty"&&n.dirty(),a(s.value).then(()=>({status:n.value,value:s.value}))))}if(i.type==="transform")if(r.common.async===!1){const a=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!xa(a))return he;const s=i.transform(a.value,o);if(s instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:s}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(a=>xa(a)?Promise.resolve(i.transform(a.value,o)).then(s=>({status:n.value,value:s})):he);Fe.assertNever(i)}}ka.create=(e,t,n)=>new ka({schema:e,typeName:fe.ZodEffects,effect:t,...ke(n)});ka.createWithPreprocess=(e,t,n)=>new ka({schema:t,effect:{type:"preprocess",transform:e},typeName:fe.ZodEffects,...ke(n)});class xi extends Pe{_parse(t){return this._getType(t)===ae.undefined?jn(void 0):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}xi.create=(e,t)=>new xi({innerType:e,typeName:fe.ZodOptional,...ke(t)});class Sa extends Pe{_parse(t){return this._getType(t)===ae.null?jn(null):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}Sa.create=(e,t)=>new Sa({innerType:e,typeName:fe.ZodNullable,...ke(t)});class Pf extends Pe{_parse(t){const{ctx:n}=this._processInputParams(t);let r=n.data;return n.parsedType===ae.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}}Pf.create=(e,t)=>new Pf({innerType:e,typeName:fe.ZodDefault,defaultValue:typeof t.default=="function"?t.default:()=>t.default,...ke(t)});class Rf extends Pe{_parse(t){const{ctx:n}=this._processInputParams(t),r={...n,common:{...n.common,issues:[]}},i=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return eu(i)?i.then(o=>({status:"valid",value:o.status==="valid"?o.value:this._def.catchValue({get error(){return new Fr(r.common.issues)},input:r.data})})):{status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new Fr(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}}Rf.create=(e,t)=>new Rf({innerType:e,typeName:fe.ZodCatch,catchValue:typeof t.catch=="function"?t.catch:()=>t.catch,...ke(t)});class Ov extends Pe{_parse(t){if(this._getType(t)!==ae.nan){const r=this._getOrReturnCtx(t);return te(r,{code:Q.invalid_type,expected:ae.nan,received:r.parsedType}),he}return{status:"valid",value:t.data}}}Ov.create=e=>new Ov({typeName:fe.ZodNaN,...ke(e)});class vF extends Pe{_parse(t){const{ctx:n}=this._processInputParams(t),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}}class Cm extends Pe{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.common.async)return(async()=>{const o=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return o.status==="aborted"?he:o.status==="dirty"?(n.dirty(),ss(o.value)):this._def.out._parseAsync({data:o.value,path:r.path,parent:r})})();{const i=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?he:i.status==="dirty"?(n.dirty(),{status:"dirty",value:i.value}):this._def.out._parseSync({data:i.value,path:r.path,parent:r})}}static create(t,n){return new Cm({in:t,out:n,typeName:fe.ZodPipeline})}}class Ff extends Pe{_parse(t){const n=this._def.innerType._parse(t),r=i=>(xa(i)&&(i.value=Object.freeze(i.value)),i);return eu(n)?n.then(i=>r(i)):r(n)}unwrap(){return this._def.innerType}}Ff.create=(e,t)=>new Ff({innerType:e,typeName:fe.ZodReadonly,...ke(t)});tt.lazycreate;var fe;(function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline",e.ZodReadonly="ZodReadonly"})(fe||(fe={}));const Mi=ci.create,Dv=Nf.create;Ti.create;pr.create;const wF=tt.create;tt.strictCreate;nu.create;ru.create;ho.create;ba.create;iu.create;xi.create;Sa.create;class ul{constructor(t=0,n="Network Error"){this.status=t,this.text=n}}const xF=()=>{if(!(typeof localStorage>"u"))return{get:e=>Promise.resolve(localStorage.getItem(e)),set:(e,t)=>Promise.resolve(localStorage.setItem(e,t)),remove:e=>Promise.resolve(localStorage.removeItem(e))}},kt={origin:"https://api.emailjs.com",blockHeadless:!1,storageProvider:xF()},Am=e=>e?typeof e=="string"?{publicKey:e}:e.toString()==="[object Object]"?e:{}:{},bF=(e,t="https://api.emailjs.com")=>{if(!e)return;const n=Am(e);kt.publicKey=n.publicKey,kt.blockHeadless=n.blockHeadless,kt.storageProvider=n.storageProvider,kt.blockList=n.blockList,kt.limitRate=n.limitRate,kt.origin=n.origin||t},l2=async(e,t,n={})=>{const r=await fetch(kt.origin+e,{method:"POST",headers:n,body:t}),i=await r.text(),o=new ul(r.status,i);if(r.ok)return o;throw o},c2=(e,t,n)=>{if(!e||typeof e!="string")throw"The public key is required. Visit https://dashboard.emailjs.com/admin/account";if(!t||typeof t!="string")throw"The service ID is required. Visit https://dashboard.emailjs.com/admin";if(!n||typeof n!="string")throw"The template ID is required. Visit https://dashboard.emailjs.com/admin/templates"},kF=e=>{if(e&&e.toString()!=="[object Object]")throw"The template params have to be the object. Visit https://www.emailjs.com/docs/sdk/send/"},u2=e=>e.webdriver||!e.languages||e.languages.length===0,d2=()=>new ul(451,"Unavailable For Headless Browser"),SF=(e,t)=>{if(!Array.isArray(e))throw"The BlockList list has to be an array";if(typeof t!="string")throw"The BlockList watchVariable has to be a string"},CF=e=>{var t;return!((t=e.list)!=null&&t.length)||!e.watchVariable},AF=(e,t)=>e instanceof FormData?e.get(t):e[t],h2=(e,t)=>{if(CF(e))return!1;SF(e.list,e.watchVariable);const n=AF(t,e.watchVariable);return typeof n!="string"?!1:e.list.includes(n)},f2=()=>new ul(403,"Forbidden"),TF=(e,t)=>{if(typeof e!="number"||e<0)throw"The LimitRate throttle has to be a positive number";if(t&&typeof t!="string")throw"The LimitRate ID has to be a non-empty string"},jF=async(e,t,n)=>{const r=Number(await n.get(e)||0);return t-Date.now()+r},p2=async(e,t,n)=>{if(!t.throttle||!n)return!1;TF(t.throttle,t.id);const r=t.id||e;return await jF(r,t.throttle,n)>0?!0:(await n.set(r,Date.now().toString()),!1)},m2=()=>new ul(429,"Too Many Requests"),EF=async(e,t,n,r)=>{const i=Am(r),o=i.publicKey||kt.publicKey,a=i.blockHeadless||kt.blockHeadless,s=i.storageProvider||kt.storageProvider,c={...kt.blockList,...i.blockList},u={...kt.limitRate,...i.limitRate};return a&&u2(navigator)?Promise.reject(d2()):(c2(o,e,t),kF(n),n&&h2(c,n)?Promise.reject(f2()):await p2(location.pathname,u,s)?Promise.reject(m2()):l2("/api/v1.0/email/send",JSON.stringify({lib_version:"4.4.1",user_id:o,service_id:e,template_id:t,template_params:n}),{"Content-type":"application/json"}))},IF=e=>{if(!e||e.nodeName!=="FORM")throw"The 3rd parameter is expected to be the HTML form element or the style selector of the form"},NF=e=>typeof e=="string"?document.querySelector(e):e,_F=async(e,t,n,r)=>{const i=Am(r),o=i.publicKey||kt.publicKey,a=i.blockHeadless||kt.blockHeadless,s=kt.storageProvider||i.storageProvider,c={...kt.blockList,...i.blockList},u={...kt.limitRate,...i.limitRate};if(a&&u2(navigator))return Promise.reject(d2());const d=NF(n);c2(o,e,t),IF(d);const h=new FormData(d);return h2(c,h)?Promise.reject(f2()):await p2(location.pathname,u,s)?Promise.reject(m2()):(h.append("lib_version","4.4.1"),h.append("service_id",e),h.append("template_id",t),h.append("user_id",o),l2("/api/v1.0/email/send-form",h))},Lv={init:bF,send:EF,sendForm:_F,EmailJSResponseStatus:ul},PF=wF({firstName:Mi().min(1,"First name is required"),lastName:Mi().min(1,"Last name is required"),practiceName:Mi().min(1,"Practice name is required"),jobTitle:Mi().min(1,"Job title is required"),email:Mi().email("Please enter a valid email address"),phone:Mi().min(1,"Phone number is required"),countryCode:Mi().default("+1"),requestDemo:Dv().default(!1),requestCaseStudy:Dv().default(!1)}).refine(e=>e.requestDemo||e.requestCaseStudy,{message:"Please select at least one option",path:["requestDemo"]}),Tm=()=>{const[e,t]=x.useState(!1),{register:n,handleSubmit:r,setValue:i,watch:o,reset:a,formState:{errors:s}}=$4({resolver:U4(PF),defaultValues:{countryCode:"+1",requestDemo:!1,requestCaseStudy:!1}}),c=async u=>{var d;t(!0);try{const h=[];u.requestDemo&&h.push("Request Demo"),u.requestCaseStudy&&h.push("Request Full Case Study");const p={to_email:"management@clinicflowai.com",from_name:`${u.firstName} ${u.lastName}`,from_email:u.email,practice_name:u.practiceName,job_title:u.jobTitle,phone:`${u.countryCode}${u.phone}`,request_type:h.join(", "),message:`New contact form submission from: Name: ${u.firstName} ${u.lastName} Practice/Company: ${u.practiceName} Job Title: ${u.jobTitle} Email: ${u.email} Phone: ${u.countryCode}${u.phone} Request Type: ${h.join(", ")} Submitted: ${new Date().toLocaleString()} This inquiry was submitted through the ClinicFlow AI website contact form.`,reply_to:u.email,subject:`New Contact Form Submission - ClinicFlow AI (${h.join(" & ")})`},f="nII-Mzvnt1qgjupzP",v="service_hfpia47",m="template_ebn9haj";if(f&&v&&m&&f!=="your_emailjs_public_key_here"&&v!=="your_emailjs_service_id_here"&&m!=="your_emailjs_template_id_here"){Lv.init(f);const g=await Lv.send(v,m,p);console.log("Email sent successfully:",g)}try{const g=(d=document.cookie.match(/hubspotutk=([^;]+)/))==null?void 0:d[1],y=await fetch("https://api.hsforms.com/submissions/v3/integration/submit/243581080/3c6ac8bd-e3f4-413d-bf92-39a2aa92f27a",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fields:[{objectTypeId:"0-1",name:"firstname",value:u.firstName},{objectTypeId:"0-1",name:"lastname",value:u.lastName},{objectTypeId:"0-1",name:"email",value:u.email},{objectTypeId:"0-2",name:"name",value:u.practiceName},{objectTypeId:"0-1",name:"jobtitle",value:u.jobTitle},{objectTypeId:"0-1",name:"phone",value:`${u.countryCode}${u.phone}`}],context:{...g?{hutk:g}:{},pageUri:window.location.href,pageName:document.title}})});y.ok||console.warn("HubSpot form submission failed:",y.status,await y.text())}catch(g){console.warn("HubSpot form submission error:",g)}const b=window.gtag;b==null||b("event","generate_lead",{form_id:"contact-form",request_type:h.join(", ")||"none"}),h.includes("Request Demo")&&fetch("https://a.klaviyo.com/client/events/?company_id=SDQctp",{method:"POST",headers:{"Content-Type":"application/json",revision:"2024-10-15"},body:JSON.stringify({data:{type:"event",attributes:{properties:{practiceName:u.practiceName,jobTitle:u.jobTitle},metric:{data:{type:"metric",attributes:{name:"Demo Requested"}}},profile:{data:{type:"profile",attributes:{email:u.email,first_name:u.firstName,last_name:u.lastName,phone_number:`${u.countryCode}${u.phone}`}}}}}})}).catch(()=>{}),wy.success("Thank you for your interest! We'll be in touch soon."),a()}catch(h){console.error("Error submitting form:",h),wy.error("Something went wrong. Please try again or contact us directly at management@clinicflowai.com")}finally{t(!1)}};return l.jsx("section",{id:"contact-form",className:"px-4 sm:px-8 lg:px-14 py-16 md:py-24",style:{background:"#fff",fontFamily:"var(--font-sans)"},children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:640},children:[l.jsxs("div",{className:"text-center mb-12",children:[l.jsx("div",{className:"uppercase font-semibold mb-[18px]",style:{fontSize:18,letterSpacing:"0.16em",color:"var(--coral-500)"},children:"Get started"}),l.jsx("h2",{style:{fontFamily:"var(--font-serif)",fontSize:"clamp(28px, 3.5vw, 44px)",fontWeight:400,lineHeight:1.08,letterSpacing:"-0.02em",margin:0,color:"var(--ink-900)"},children:"Ready to modernize your patient access?"}),l.jsx("p",{className:"text-base mt-4",style:{color:"var(--ink-600)",lineHeight:1.55},children:"Get started with ClinicFlow today and transform your practice operations."})]}),l.jsx("div",{className:"p-5 sm:p-8",style:{background:"#fff",borderRadius:16,border:"1px solid var(--ink-100)",boxShadow:"0 16px 40px rgba(14,20,32,0.08)"},children:l.jsxs("form",{onSubmit:r(c),className:"space-y-6",children:[l.jsxs("div",{className:"grid md:grid-cols-2 gap-6",children:[l.jsxs("div",{className:"space-y-2",children:[l.jsx(Yr,{htmlFor:"firstName",children:"First Name *"}),l.jsx(Bi,{id:"firstName",type:"text",placeholder:"Enter your first name",className:"h-12",...n("firstName")}),s.firstName&&l.jsx("p",{className:"text-sm text-red-500",children:s.firstName.message})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(Yr,{htmlFor:"lastName",children:"Last Name *"}),l.jsx(Bi,{id:"lastName",type:"text",placeholder:"Enter your last name",className:"h-12",...n("lastName")}),s.lastName&&l.jsx("p",{className:"text-sm text-red-500",children:s.lastName.message})]})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(Yr,{htmlFor:"practiceName",children:"Practice / Company Name *"}),l.jsx(Bi,{id:"practiceName",type:"text",placeholder:"Enter your practice or company name",className:"h-12",...n("practiceName")}),s.practiceName&&l.jsx("p",{className:"text-sm text-red-500",children:s.practiceName.message})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(Yr,{htmlFor:"jobTitle",children:"Job Title *"}),l.jsx(Bi,{id:"jobTitle",type:"text",placeholder:"Enter your job title",className:"h-12",...n("jobTitle")}),s.jobTitle&&l.jsx("p",{className:"text-sm text-red-500",children:s.jobTitle.message})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(Yr,{htmlFor:"email",children:"Corporate Email *"}),l.jsx(Bi,{id:"email",type:"email",placeholder:"Enter your corporate email",className:"h-12",...n("email")}),s.email&&l.jsx("p",{className:"text-sm text-red-500",children:s.email.message})]}),l.jsxs("div",{className:"space-y-2",children:[l.jsx(Yr,{htmlFor:"phone",children:"Phone Number *"}),l.jsxs("div",{className:"flex gap-3",children:[l.jsxs(y4,{value:o("countryCode"),onValueChange:u=>i("countryCode",u),children:[l.jsx(US,{className:"w-24 h-12",children:l.jsx(v4,{})}),l.jsxs(GS,{children:[l.jsx(Io,{value:"+1",children:"+1"}),l.jsx(Io,{value:"+44",children:"+44"}),l.jsx(Io,{value:"+33",children:"+33"}),l.jsx(Io,{value:"+49",children:"+49"}),l.jsx(Io,{value:"+91",children:"+91"})]})]}),l.jsx(Bi,{id:"phone",type:"tel",placeholder:"Enter your phone number",className:"flex-1 h-12",...n("phone")})]}),s.phone&&l.jsx("p",{className:"text-sm text-red-500",children:s.phone.message})]}),l.jsxs("div",{className:"space-y-3",children:[l.jsx(Yr,{children:"I'm interested in *"}),l.jsxs("div",{className:"flex flex-col gap-3",children:[l.jsxs("label",{className:"flex items-center gap-3 cursor-pointer select-none",children:[l.jsx(kf,{id:"requestDemo",checked:o("requestDemo"),onCheckedChange:u=>i("requestDemo",!!u,{shouldValidate:!0})}),l.jsx("span",{className:"text-sm",style:{color:"var(--ink-800)"},children:"Request a Demo"})]}),l.jsxs("label",{className:"flex items-center gap-3 cursor-pointer select-none",children:[l.jsx(kf,{id:"requestCaseStudy",checked:o("requestCaseStudy"),onCheckedChange:u=>i("requestCaseStudy",!!u,{shouldValidate:!0})}),l.jsx("span",{className:"text-sm",style:{color:"var(--ink-800)"},children:"Request Full Case Study"})]})]}),s.requestDemo&&l.jsx("p",{className:"text-sm text-red-500",children:s.requestDemo.message})]}),l.jsx("button",{type:"submit",disabled:e,className:"w-full text-lg font-semibold cursor-pointer text-white disabled:opacity-60",style:{height:48,background:"var(--coral-500)",border:"none",borderRadius:10,fontFamily:"inherit",boxShadow:"0 4px 12px rgba(27,115,181,0.3)"},children:e?"Submitting...":"Request Demo"})]})})]})})},pn=()=>l.jsx("footer",{className:"px-4 sm:px-8 lg:px-14 py-8 sm:py-10",style:{background:"var(--ink-900)",color:"rgba(255,255,255,0.85)",fontFamily:"var(--font-sans)"},children:l.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 items-center mx-auto gap-4 sm:gap-8",style:{maxWidth:1280},children:[l.jsxs("div",{className:"flex flex-col gap-2",children:[l.jsxs("div",{className:"flex items-center gap-3",children:[l.jsx("img",{src:"/images/e519b8e9-d0a3-4a17-891f-01b2fa327c89.png",width:"28",height:"28",alt:""}),l.jsx("span",{className:"text-[17px] font-semibold text-white",children:"ClinicFlow"})]}),l.jsxs("div",{className:"flex items-center gap-3 text-[13px] flex-wrap",style:{color:"rgba(255,255,255,0.5)"},children:[l.jsx("span",{children:"© 2026 ClinicFlow, Inc."}),l.jsx(Me,{to:"/",className:"hover:text-white transition-colors no-underline",style:{color:"rgba(255,255,255,0.5)"},onClick:()=>window.scrollTo(0,0),children:"Home"}),l.jsx("a",{href:"/features",className:"hover:text-white transition-colors no-underline",style:{color:"rgba(255,255,255,0.5)"},children:"Features"}),l.jsx("a",{href:"/pricing",className:"hover:text-white transition-colors no-underline",style:{color:"rgba(255,255,255,0.5)"},children:"Pricing"}),l.jsx("a",{href:"/resources",className:"hover:text-white transition-colors no-underline",style:{color:"rgba(255,255,255,0.5)"},children:"Resources"}),l.jsx("a",{href:"/security",className:"hover:text-white transition-colors no-underline",style:{color:"rgba(255,255,255,0.5)"},children:"Security"}),l.jsx("a",{href:"/about",className:"hover:text-white transition-colors no-underline",style:{color:"rgba(255,255,255,0.5)"},children:"About"}),l.jsx("a",{href:"/faq",className:"hover:text-white transition-colors no-underline",style:{color:"rgba(255,255,255,0.5)"},children:"FAQ"}),l.jsx(Me,{to:"/demo",className:"hover:text-white transition-colors no-underline",style:{color:"rgba(255,255,255,0.5)"},onClick:()=>window.scrollTo(0,0),children:"Live Demo"}),l.jsx(Me,{to:"/missed-call-calculator",className:"hover:text-white transition-colors no-underline",style:{color:"rgba(255,255,255,0.5)"},onClick:()=>window.scrollTo(0,0),children:"Calculator"}),l.jsx(Me,{to:"/integrations",className:"hover:text-white transition-colors no-underline",style:{color:"rgba(255,255,255,0.5)"},onClick:()=>window.scrollTo(0,0),children:"Integrations"}),l.jsx(Me,{to:"/vs-answering-services",className:"hover:text-white transition-colors no-underline",style:{color:"rgba(255,255,255,0.5)"},onClick:()=>window.scrollTo(0,0),children:"Compare"}),l.jsx("a",{href:"/medical-answering-service",className:"hover:text-white transition-colors no-underline",style:{color:"rgba(255,255,255,0.5)"},children:"Answering Service"}),l.jsx("a",{href:"/ai-receptionist",className:"hover:text-white transition-colors no-underline",style:{color:"rgba(255,255,255,0.5)"},children:"AI Receptionist"}),l.jsx("a",{href:"/after-hours-answering-service",className:"hover:text-white transition-colors no-underline",style:{color:"rgba(255,255,255,0.5)"},children:"After-Hours"}),l.jsx(Me,{to:"/phone-audit",className:"hover:text-white transition-colors no-underline",style:{color:"rgba(255,255,255,0.5)"},onClick:()=>window.scrollTo(0,0),children:"Phone Audit"}),l.jsx(Me,{to:"/practice-managers",className:"hover:text-white transition-colors no-underline",style:{color:"rgba(255,255,255,0.5)"},onClick:()=>window.scrollTo(0,0),children:"Practice Managers"}),l.jsx(Me,{to:"/orthopedics",className:"hover:text-white transition-colors no-underline",style:{color:"rgba(255,255,255,0.5)"},onClick:()=>window.scrollTo(0,0),children:"Orthopedics"}),l.jsx(Me,{to:"/spine",className:"hover:text-white transition-colors no-underline",style:{color:"rgba(255,255,255,0.5)"},onClick:()=>window.scrollTo(0,0),children:"Spine"}),l.jsx(Me,{to:"/blog",className:"hover:text-white transition-colors no-underline",style:{color:"rgba(255,255,255,0.5)"},onClick:()=>window.scrollTo(0,0),children:"Blog"}),l.jsx(Me,{to:"/privacy-policy",className:"hover:text-white transition-colors no-underline",style:{color:"rgba(255,255,255,0.5)"},onClick:()=>window.scrollTo(0,0),children:"Privacy Policy"}),l.jsx("a",{href:"https://dashboard.clinicflowai.com",target:"_blank",rel:"noopener noreferrer",className:"hover:text-white transition-colors no-underline",style:{color:"rgba(255,255,255,0.5)"},children:"Sign in"})]})]}),l.jsxs("div",{className:"inline-flex items-center gap-2.5 sm:justify-self-center",style:{padding:"8px 14px",border:"1px solid rgba(255,255,255,0.14)",borderRadius:999,background:"rgba(255,255,255,0.04)"},children:[l.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"var(--coral-300)",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[l.jsx("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"}),l.jsx("polyline",{points:"9 12 11 14 15 10"})]}),l.jsx("span",{className:"text-[12.5px] font-semibold",style:{letterSpacing:"0.06em"},children:"HIPAA Compliant"})]}),l.jsx("a",{href:"https://www.linkedin.com/company/clinicflow/",target:"_blank",rel:"noopener noreferrer","aria-label":"LinkedIn",className:"inline-flex items-center justify-center no-underline sm:justify-self-end",style:{width:36,height:36,borderRadius:8,border:"1px solid rgba(255,255,255,0.14)",background:"rgba(255,255,255,0.04)",color:"rgba(255,255,255,0.85)"},children:l.jsx("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:l.jsx("path",{d:"M20.45 20.45h-3.55v-5.57c0-1.33-.03-3.04-1.85-3.04-1.85 0-2.14 1.45-2.14 2.94v5.67H9.36V9h3.41v1.56h.05c.47-.9 1.63-1.85 3.36-1.85 3.59 0 4.26 2.36 4.26 5.43v6.31zM5.34 7.43a2.06 2.06 0 1 1 0-4.13 2.06 2.06 0 0 1 0 4.13zM7.12 20.45H3.56V9h3.56v11.45zM22.22 0H1.77C.79 0 0 .77 0 1.72v20.56C0 23.23.79 24 1.77 24h20.45c.98 0 1.78-.77 1.78-1.72V1.72C24 .77 23.2 0 22.22 0z"})})})]})}),RF=()=>l.jsxs("div",{className:"min-h-screen",children:[l.jsx(fn,{}),l.jsxs("main",{children:[l.jsx(vR,{}),l.jsx(xR,{}),l.jsx(kR,{}),l.jsx(CR,{}),l.jsx(jR,{}),l.jsx(IR,{}),l.jsx(NR,{}),l.jsx(_R,{}),l.jsx(RR,{}),l.jsx(eS,{}),l.jsx(FR,{}),l.jsx(Tm,{})]}),l.jsx(pn,{})]}),FF=()=>l.jsxs("div",{className:"min-h-screen",children:[l.jsx(fn,{}),l.jsx("main",{className:"px-4 sm:px-14 py-10 sm:py-16",style:{background:"var(--ink-25)",fontFamily:"var(--font-sans)"},children:l.jsx("div",{className:"mx-auto",style:{maxWidth:840},children:l.jsxs("div",{className:"bg-white p-10 md:p-12",style:{borderRadius:16,border:"1px solid var(--ink-100)",boxShadow:"0 16px 40px rgba(14,20,32,0.08)"},children:[l.jsx("div",{className:"flex justify-center mb-8",children:l.jsx("img",{src:"/images/e519b8e9-d0a3-4a17-891f-01b2fa327c89.png",alt:"ClinicFlow Logo",className:"h-10 w-auto"})}),l.jsx("h1",{className:"text-4xl font-bold text-primary mb-8 text-center",children:"Privacy Policy & Terms of Use"}),l.jsxs("div",{className:"prose prose-lg max-w-none text-foreground leading-relaxed",children:[l.jsx("p",{className:"text-lg mb-6",children:'By accessing ClinicFlow (referred to herein as "Company," "we," "us," or "our") platform (the "Service"), you agree to abide by these Terms of Use and Privacy Policy (the "Agreement"). Please read this Agreement carefully before using our Service.'}),l.jsxs("section",{className:"mb-8",children:[l.jsx("h2",{className:"text-2xl font-semibold text-primary mb-4",children:"1. Acceptance of Terms"}),l.jsx("p",{className:"mb-4",children:"By accessing or using our Service, you acknowledge that you have read, understood, and agree to be bound by this Agreement."})]}),l.jsxs("section",{className:"mb-8",children:[l.jsx("h2",{className:"text-2xl font-semibold text-primary mb-4",children:"2. Eligibility"}),l.jsx("p",{className:"mb-4",children:"To use our Service, you must have an active agreement with ClinicFlow or an organization authorized to access the service. You must also comply with all applicable laws and regulations."})]}),l.jsxs("section",{className:"mb-8",children:[l.jsx("h2",{className:"text-2xl font-semibold text-primary mb-4",children:"3. Privacy Policy"}),l.jsx("p",{className:"mb-4",children:"Your privacy is important to us. We are committed to maintaining the confidentiality, integrity, and security of personal information and comply with applicable data protection laws and regulations. Please review the following privacy commitments."}),l.jsxs("div",{className:"ml-6",children:[l.jsx("h3",{className:"text-xl font-semibold text-primary-light mb-3",children:"3.1 Information Collection and Use"}),l.jsx("p",{className:"mb-4",children:"We collect personal information you provide, including names, contact details, and any other information necessary to deliver the Service. We use this information to:"}),l.jsxs("ul",{className:"list-disc ml-6 mb-4 space-y-2",children:[l.jsx("li",{children:"Provide and improve the Service"}),l.jsx("li",{children:"Communicate with you regarding your account and service updates"}),l.jsx("li",{children:"Comply with legal obligations"})]}),l.jsx("h3",{className:"text-xl font-semibold text-primary-light mb-3",children:"3.2 Data Retention and Security"}),l.jsx("p",{className:"mb-4",children:"We retain personal information as long as necessary to fulfill the purposes for which it was collected and comply with legal, accounting, or reporting requirements. We use technical and administrative security measures, including encryption, to protect your information."}),l.jsx("h3",{className:"text-xl font-semibold text-primary-light mb-3",children:"3.3 HIPAA Compliance"}),l.jsxs("div",{className:"bg-accent/10 p-6 rounded-lg mb-4 border-l-4 border-accent",children:[l.jsx("p",{className:"mb-4",children:"ClinicFlow is committed to protecting the privacy and security of Protected Health Information (PHI) in compliance with HIPAA regulations. We implement administrative, physical, and technical safeguards to secure PHI. By using the Service, you agree to comply with our HIPAA policies and notify us promptly if there is any unauthorized use or disclosure of PHI."}),l.jsx("p",{className:"text-sm text-muted-foreground",children:"It is the responsibility of the organization to ensure that the proper security compliance settings are set up on a per use basis and users are following security best practices. ClinicFlow is not responsible for breaches occurring due to misuse or improper configuration of security and access."})]}),l.jsx("h3",{className:"text-xl font-semibold text-primary-light mb-3",children:"3.4 Usage Tracking and IP Recording"}),l.jsx("p",{className:"mb-4",children:"To ensure the security and integrity of our Service, we track user interactions with the platform, including recording the IP addresses from which users access the Service. This information is used for the following purposes:"}),l.jsxs("ul",{className:"list-disc ml-6 mb-4 space-y-2",children:[l.jsxs("li",{children:[l.jsx("strong",{children:"Security:"})," Monitoring for suspicious or unauthorized access attempts to protect against unauthorized use or security threats."]}),l.jsxs("li",{children:[l.jsx("strong",{children:"Compliance:"})," Ensuring adherence to this Agreement and to applicable legal requirements."]}),l.jsxs("li",{children:[l.jsx("strong",{children:"Improvement of Service:"})," Analyzing usage patterns to enhance user experience and optimize our system performance."]})]}),l.jsx("p",{className:"mb-4",children:"By using the Service, you consent to this tracking and acknowledge that your IP address and other usage data may be recorded. This information is retained in accordance with our data retention policy and is subject to the safeguards described in this Agreement."}),l.jsx("h3",{className:"text-xl font-semibold text-primary-light mb-3",children:"3.5 Cookies and Website Analytics"}),l.jsx("p",{className:"mb-4",children:"Our public website (clinicflowai.com) uses cookies and similar technologies to understand how visitors use the site and to attribute inquiries to their original source. These technologies are used on our marketing website only and do not involve patient information of any kind."}),l.jsxs("ul",{className:"list-disc ml-6 mb-4 space-y-2",children:[l.jsxs("li",{children:[l.jsx("strong",{children:"Google Analytics:"}),' We use Google Analytics 4 to measure site traffic, such as which pages are visited and which campaigns or search engines visitors arrive from. Google Analytics sets cookies (e.g., "_ga") that distinguish new from returning visitors. Data is reported to us in aggregate.']}),l.jsxs("li",{children:[l.jsx("strong",{children:"HubSpot:"}),' We use HubSpot to manage business inquiries. HubSpot sets cookies (e.g., "hubspotutk") that, when you submit a form on our site, associate your inquiry with your prior visits so we can respond with appropriate context.']}),l.jsxs("li",{children:[l.jsx("strong",{children:"Advertising platforms:"})," We may use advertising platform tags, such as the LinkedIn Insight Tag, to measure the effectiveness of our marketing and to reach audiences who have shown interest in our website. These tags may set third-party cookies governed by the respective platform's privacy policy."]})]}),l.jsx("p",{className:"mb-4",children:"You can control or delete cookies through your browser settings, and the website remains fully functional with cookies disabled. You can also opt out of Google Analytics via Google's browser add-on and adjust advertising preferences directly with the relevant platforms."})]})]}),l.jsxs("section",{className:"mb-8",children:[l.jsx("h2",{className:"text-2xl font-semibold text-primary mb-4",children:"4. Email Security"}),l.jsx("div",{className:"bg-destructive/10 p-6 rounded-lg border-l-4 border-destructive",children:l.jsx("p",{className:"mb-4",children:"Email communications with our Service may not be secure. We do not guarantee the confidentiality of emails sent to us or from us, including emails containing personal information. Users should avoid sending sensitive or confidential information via email unless otherwise instructed."})})]}),l.jsxs("section",{className:"mb-8",children:[l.jsx("h2",{className:"text-2xl font-semibold text-primary mb-4",children:"5. Law Enforcement and Legal Compliance"}),l.jsx("p",{className:"mb-4",children:"We may disclose your information to government or law enforcement authorities if:"}),l.jsxs("ul",{className:"list-disc ml-6 mb-4 space-y-2",children:[l.jsx("li",{children:"Required by law"}),l.jsx("li",{children:"Necessary to comply with a legal process"}),l.jsx("li",{children:"We believe in good faith that disclosure is reasonably necessary to enforce our Agreement, prevent harm, or protect the rights, property, or safety of our Company, users, or others"})]})]}),l.jsxs("section",{className:"mb-8",children:[l.jsx("h2",{className:"text-2xl font-semibold text-primary mb-4",children:"6. User Responsibilities"}),l.jsx("p",{className:"mb-4",children:"You are responsible for maintaining the confidentiality of your account credentials and for all activities that occur under your account. You agree not to:"}),l.jsxs("ul",{className:"list-disc ml-6 mb-4 space-y-2",children:[l.jsx("li",{children:"Share your credentials with anyone"}),l.jsx("li",{children:"Attempt to gain unauthorized access to the Service"}),l.jsx("li",{children:"Misuse or exploit any security vulnerabilities in the Service"}),l.jsx("li",{children:"Enable appropriate security compliance settings"})]})]}),l.jsxs("section",{className:"mb-8",children:[l.jsx("h2",{className:"text-2xl font-semibold text-primary mb-4",children:"7. Intellectual Property Rights"}),l.jsx("p",{className:"mb-4",children:"All content, trademarks, logos, and other intellectual property provided on our Service are owned by ClinicFlow or its licensors. You agree not to copy, distribute, modify, or create derivative works based on any of the Service's content without our express written consent."})]}),l.jsxs("section",{className:"mb-8",children:[l.jsx("h2",{className:"text-2xl font-semibold text-primary mb-4",children:"9. Limitation of Liability"}),l.jsx("p",{className:"mb-4",children:"To the fullest extent permitted by law, ClinicFlow shall not be liable for any indirect, incidental, special, or consequential damages, or any loss of profits, revenue, data, or use, arising from or in connection with the Service, even if advised of the possibility of such damages."})]}),l.jsxs("section",{className:"mb-8",children:[l.jsx("h2",{className:"text-2xl font-semibold text-primary mb-4",children:"10. Suspension and Termination"}),l.jsxs("div",{className:"ml-6",children:[l.jsx("h3",{className:"text-xl font-semibold text-primary-light mb-3",children:"10.1 Suspension of Access"}),l.jsx("p",{className:"mb-4",children:"ClinicFlow reserves the right to suspend your access to the Service at any time if we detect, in our sole discretion, any activity that violates this Agreement or is considered misuse of the Service. Misuse includes, but is not limited to, unauthorized access, sharing credentials, attempting to bypass security features, or engaging in activities that compromise the security or functionality of the Service."}),l.jsx("p",{className:"mb-4",children:"If your access is suspended, we will notify you via the contact information associated with your account. You will have seven (7) calendar days from the date of suspension to address and correct the issue(s) that led to suspension. During this period, you may be required to provide evidence of compliance or take necessary corrective actions."}),l.jsx("h3",{className:"text-xl font-semibold text-primary-light mb-3",children:"10.2 Termination of Access"}),l.jsx("p",{className:"mb-4",children:"If you fail to resolve the issue(s) leading to suspension within seven (7) calendar days, ClinicFlow reserves the right to terminate your access to the Service without further notice. Termination for misuse includes forfeiture of any fees paid, and ClinicFlow shall not be liable for any consequences arising from the termination."}),l.jsx("p",{className:"mb-4",children:"Upon termination, your right to access or use the Service will cease immediately, and all associated data may be permanently deleted in accordance with our data retention policies and applicable law."})]})]}),l.jsxs("section",{className:"mb-8",children:[l.jsx("h2",{className:"text-2xl font-semibold text-primary mb-4",children:"11. Changes to This Agreement"}),l.jsx("p",{className:"mb-4",children:"We may update this Agreement at any time by posting a revised version on our website. You agree to review this Agreement periodically to remain informed of any changes. Continued use of the Service following such changes constitutes your acceptance of the updated Agreement."})]}),l.jsxs("div",{className:"bg-primary/5 p-6 rounded-lg mt-8 text-center border",children:[l.jsx("p",{className:"text-sm text-muted-foreground mb-2",children:"Last updated: May 1, 2025"}),l.jsxs("p",{className:"text-sm text-muted-foreground",children:["If you have any questions about this Privacy Policy, please contact us at"," ",l.jsx("a",{href:"mailto:management@clinicflowai.com",className:"text-primary hover:text-primary-light transition-colors",children:"management@clinicflowai.com"})]})]})]})]})})}),l.jsx(pn,{})]}),MF=`--- title: "After-Hours Call Coverage for Medical Practices: 6 Options Compared (2026)" slug: "after-hours-call-coverage-options" description: "Voicemail, phone trees, answering services, nurse triage lines, direct on-call, and AI coverage: the 6 ways medical practices handle after-hours calls, compared honestly." date: "2026-07-15" author: "ClinicFlow Team" heroImage: "/images/blog/after-hours-call-coverage-options.png" heroAlt: "After-hours call coverage options for medical practices compared" keywords: "after hours answering service medical practice, after hours call coverage, medical practice after hours calls, physician after hours answering" excerpt: "Every practice handles the 5:01 PM call somehow. Most handle it badly. The 6 options, what each really costs, and where each one breaks." --- Every medical practice has an after-hours plan, even if the plan is "voicemail and hope." When we audited how orthopedic and surgical practices actually handle their phones after closing time, calling them the way a patient would, the striking finding was not that coverage was bad. It was that most practices did not know how bad their own coverage was, because nobody had ever called their office at 7 PM and listened. The [methodology of that audit](/research/after-hours-audit-methodology) is public if you want to run the same test on your own line tonight. Here are the 6 options practices choose from, and where each one breaks. ## Option 1: Voicemail The default. Free, simple, and a referral leak with a recording attached. New patients do not leave voicemails; they call the next practice on the list. Post-op patients with concerning symptoms either go to the ER for something a nurse could have settled, or worse, wait until morning for something that could not. Voicemail is not coverage. It is documentation that you were closed. ## Option 2: The phone tree with an emergency option "If this is a medical emergency, hang up and dial 911. To reach the on-call physician, press 2." Slightly better than bare voicemail, and still built on a dangerous assumption: that a worried patient at 11 PM can self-triage. Some press 2 for refill requests and wake the surgeon. Others decide their spreading redness is probably fine and do not press anything. The phone tree outsources clinical judgment to the least equipped person on the call. ## Option 3: The traditional answering service Live human pickup, message taking, and paging per your instructions. This is real coverage, and it is what most surgical practices use today. Its limits are structural. Operators read scripts; they cannot answer clinical questions or book appointments. Billing is usually per minute or per call, with after-hours surcharges layered on, and the [real monthly cost](/blog/medical-answering-service-cost) routinely lands far above the quote. Most importantly, every call ends the same way: a message for someone else to handle tomorrow. For a deeper comparison, see [answering services vs. AI coverage](/vs-answering-services). ## Option 4: The nurse triage line Clinically credible: registered nurses with protocols who can genuinely assess symptoms. For health systems and large groups they work well. For independent practices, 2 problems. Cost scales per call and is significant, and the triage line handles only the clinical slice: no scheduling, no routine questions, no referral capture. Practices that buy nurse triage usually still need an answering layer in front of it. ## Option 5: Direct-to-on-call Small practices sometimes forward the after-hours line straight to the on-call physician's cell. Patients love it. Physicians burn out on it. Every wrong number, refill question, and insurance query rings the same phone as the genuine emergency, and there is no documentation trail for any of it. As a permanent plan it is a recipe for call fatigue and missed context. ## Option 6: AI phone coverage The newest option, and the reason this comparison needed updating in 2026. A healthcare-grade AI agent answers instantly at any hour, in the caller's language, and does not just take messages: patients can book, reschedule, or confirm appointments on the live schedule at 2 AM; routine clinical questions become structured EMR messages waiting at 7 AM; and calls matching the practice's urgency criteria go to the on-call clinician immediately, as a text with a secure link to the full call summary instead of a paraphrased page. The honest caveats: the agent must actually know medicine (generic AI receptionists do not; the [buyer's guide](/blog/ai-receptionist-orthopedic-practices) covers the difference), it must operate under a BAA with PHI in secure channels, and its escalation criteria must be the practice's own protocol, not a vendor default. Our [after-hours answering service](/after-hours-answering-service) page walks through exactly how that flow works, step by step. ## The comparison that matters Strip away features and 3 questions rank every option: 1. **Does every call get answered by something that can help?** Only options 3 through 6 answer at all; only 4 and 6 can help on the call. 2. **Does the urgent call reach the right clinician with context?** Options 3 and 5 reach a human but degrade the context. Option 6 preserves it; option 4 owns the clinical assessment itself. 3. **What does the routine call cost you?** Voicemail costs referrals. Answering services cost per minute. On-call rotation costs your surgeons' sleep. AI coverage is a flat rate, and the routine call becomes completed work instead of morning backlog. Whichever way you lean, run the audit first: call your own practice tonight at 9 PM and listen to what your patients hear. If you would rather we did it, we run a [free phone audit](/phone-audit) and send you the recordings. `,OF=`--- title: "After-Hours Phone Triage Protocol Template for Medical Practices (Free)" slug: "after-hours-triage-protocol-template" description: "A free, copyable after-hours phone triage protocol template for medical practices: caller intake fields, red-flag escalation tiers, documentation requirements, and specialty adaptations for orthopedics and spine." date: "2026-07-18" author: "ClinicFlow Team" heroImage: "/images/blog/after-hours-triage-protocol-template.png" heroAlt: "After-hours phone triage protocol template for medical practices" keywords: "after hours triage protocol template, phone triage protocol medical practice, on call triage protocol, after hours call protocol template, telephone triage template" excerpt: "The template our practices use to decide which after-hours calls wake the surgeon and which wait until morning, free to copy and adapt." --- Every practice has an after-hours triage protocol. Most of them live in one person's head, usually the most senior front-desk staffer or the office manager, and they leave the building when that person does. Writing the protocol down is the single highest-leverage documentation task a practice can do for patient safety and physician sleep. This is the template we use when we onboard a surgical practice, free to copy and adapt. A note before the template: the clinical criteria in any triage protocol belong to your physicians. What follows is a structure, with orthopedic examples, not medical advice. Have your providers review and sign off on every red-flag list before it goes live. ## What an after-hours triage protocol has to do A working protocol answers exactly 4 questions for every call, in order: 1. **Who is calling and how do we reach them back?** Identity and callback capture comes first because calls drop. 2. **Is this an emergency that belongs in the ER right now?** If yes, the answer is 911 or the nearest emergency department, not your on-call provider. 3. **Does this need the on-call provider tonight, or the clinical team tomorrow?** This is the decision the whole protocol exists to make. 4. **How is the call documented?** If it is not written down, it did not happen, and at 2 AM nobody remembers details. ## The template Copy the structure below into your practice's document system and fill in the bracketed sections with your providers. ### Section 1: Caller intake (every call, before anything else) - Patient full name and date of birth - Callback number, confirmed by reading it back - Established patient or new caller - Treating provider, if established - Recent surgery or procedure? Date and procedure type - One-sentence description of the concern, in the caller's words ### Section 2: Immediate ER criteria (send to 911 or the ED, then notify on-call) These bypass triage entirely. Examples our orthopedic and spine practices use: - Chest pain, trouble breathing, stroke symptoms, loss of consciousness - New loss of bowel or bladder control with back pain [cauda equina until proven otherwise] - Rapidly progressing numbness or weakness in arms or legs - A limb that is cold, blue, or pulseless - Uncontrolled bleeding through a surgical dressing - Fever above [your threshold, commonly 101.5 F] with a red, hot surgical site - Pain out of proportion after a cast or splint [compartment syndrome until proven otherwise] ### Section 3: Wake the on-call provider (urgent, tonight) - Post-op patients within [X] days of surgery with new or worsening symptoms - Suspected wound complications that do not meet ER criteria - Severe pain not controlled by the prescribed regimen - Falls or new injuries in a current post-op patient - Any call where the triager is unsure. The default for uncertainty is escalation, never voicemail. ### Section 4: Morning queue (clinical team, next business day) - Medication refill requests [never approved after hours; documented and queued] - Appointment scheduling, rescheduling, cancellations - Billing, insurance, records, and referral questions - Mild symptoms present for days without change, no red flags - Durable medical equipment questions ### Section 5: Documentation requirements (every call) - Time of call, time triage completed, time escalated if escalated - All intake fields from Section 1 - Which section the call was routed under and why, in one sentence - Who was notified and how [text, page, call], with timestamps - Callback outcome if a callback was made ### Section 6: Escalation contacts and failure paths - On-call schedule location and current on-call provider - If the on-call provider does not respond within [X minutes], contact [backup] - If no provider is reachable for an ER-criteria call, instruct the caller to call 911 and document ## Where protocols fail in practice We audited after-hours lines at orthopedic practices across the country, and the failure is almost never the protocol document. It is coverage. The protocol assumes a trained human answers the phone at 11 PM, and at most practices nobody does: the average after-hours pickup goes to voicemail, and voicemail cannot triage. The second failure is drift: the on-call schedule changes, the laminated sheet does not, and an escalation goes to a surgeon who rotated off service two weeks ago. ## Automating the protocol This template is exactly what ClinicFlow's voice AI runs on every after-hours call: structured intake, your physicians' red-flag criteria, tiered escalation with a secure-link text to the on-call surgeon, and full documentation into your EMR. The protocol stays in force at 2 AM on a holiday weekend without a human answering service reading from a binder. You can hear it handle a triage call right now on the live demo line at (415) 962-4019, or read how [after-hours triage](/features/after-hours-triage) works. If you want to know what your current after-hours line actually does to callers, request a [free phone audit](/phone-audit) and we will call it like a patient would. ## Frequently asked questions **Who should write the red-flag lists?** Your physicians, by specialty. The structure above is universal; the clinical criteria are theirs and should be reviewed at least annually. **Should the same protocol run during office hours?** The intake and documentation sections, yes. The routing changes: during clinic hours, urgent calls go to in-office clinical staff rather than the on-call provider. **Is a triage protocol required for compliance?** No regulation mandates a specific template, but documented, consistently applied triage is a strong risk-management position, and your malpractice carrier will agree. ## Related resources - [After-hours call coverage: 6 options compared](/blog/after-hours-call-coverage-options) - [After-hours answering service for medical practices](/after-hours-answering-service) - [What makes an AI answering service HIPAA compliant](/blog/hipaa-ai-answering-service-rules) `,DF=`--- title: "After-Hours Triage Protocols for Spine Practices: Who Calls, What's Urgent, and Who Gets Woken Up" slug: "after-hours-triage-spine-practices" description: "A practical framework for spine practice after-hours call triage: the call types that arrive after 5 p.m., which ones are true urgencies, and how to design escalation so the on-call surgeon is woken for the right reasons." date: "2026-06-10" author: "ClinicFlow Team" heroImage: "/images/blog/after-hours-triage-spine.png" heroAlt: "After-hours triage protocols for spine practices - ClinicFlow" keywords: "after hours triage spine practice, spine on call protocol, post-op spine call triage, after hours answering spine surgery" excerpt: "Spine practices live with a hard tradeoff: wake the surgeon too often and burn out your call schedule; screen too aggressively and miss the call that mattered. A working triage framework." --- Every spine practice lives with the same after-hours tradeoff. Escalate too freely and your on-call surgeon gets woken at 2 a.m. for medication refills. Screen too aggressively and one day the call you bounced to voicemail was the one that mattered. Most practices resolve this with an answering service and a prayer. As a spine surgeon, I think we can do better. Here's a working framework for thinking about after-hours spine triage, whether a human service or an AI agent is doing the answering. ## Who actually calls a spine practice after hours After-hours calls to a spine practice cluster into a few predictable types: - **Post-op concerns** - the most clinically important category: pain control questions, wound issues, fevers, new weakness or numbness, bowel or bladder changes - **New patients in acute pain** - often referred that day, often calling multiple practices until someone answers - **Scheduling traffic** - reschedules, confirmations, directions, insurance questions that simply arrive late because that's when working patients call - **Medication questions** - refills and dosing clarifications, rarely urgent, frequently anxious The volume is bigger than most practices assume. In our own data across the last 1,000 calls answered by ClinicFlow agents, the majority arrived outside business hours. The after-hours line isn't an edge case; it's the main entrance after 5 p.m. ## The triage question is really three questions Good after-hours triage answers three things on every clinical call: **1. Is this an emergency?** A short list of spine red flags should bypass everything and go straight to "call 911 or go to the ED now": new bowel or bladder incontinence with back pain, saddle anesthesia, rapidly progressing weakness, post-op chest pain or breathing trouble. The protocol must state these explicitly, and whoever answers must apply them every time, at 2 p.m. or 2 a.m. **2. Does the on-call surgeon need to know tonight?** This is the judgment layer. A fever of 101.8 three days after a fusion: yes. A wound that looks "a little red" with no fever, in a comfortable patient: documented, flagged for a morning call, surgeon's sleep preserved. Each practice draws this line slightly differently; what matters is that the line is written down, not living in one nurse's head. **3. If it can wait, where does it go?** "It can wait" is only safe when the call is documented somewhere the morning team actually looks. A message slip or voicemail box is where waiting calls go to be forgotten. The destination should be your EMR messaging workflow, with the caller's details and a structured summary attached. ## Why the protocol usually fails in practice Written protocols fail at the handoff points, and after-hours has three of them: - **The answering layer doesn't apply the protocol consistently.** Answering services work from scripts, but a script is only as good as the operator's adherence at 3 a.m. on their sixth call. - **The escalation path has friction.** If reaching the on-call surgeon means paging, waiting, calling back, and re-explaining, urgent calls get slow-walked and non-urgent calls get escalated out of operator anxiety. - **The documentation never lands.** Calls that were handled fine at midnight become invisible by morning because the summary lived in the service's portal, not the EMR. Notice none of these are protocol-content failures. They're execution failures: consistency, speed, and documentation. ## What consistent execution looks like This is exactly the gap voice AI was built to close, and it's why we designed ClinicFlow's after-hours flow the way we did: 1. **Every call answered immediately** - no hold, no callback queue, in 28 languages 2. **The red-flag list applied identically on every call** - software doesn't get tired, anxious, or complacent at 3 a.m., and when it's uncertain, it escalates rather than guesses 3. **Urgent calls reach the on-call surgeon in one step** - a text with a secure link to the full structured summary; no pager relay, no re-explaining 4. **Everything else lands in EMR messaging** - documented, structured, and waiting for the morning team where they already work The surgeon still makes every clinical decision. What changes is that the decision arrives with clean information, only when the protocol says it should. ## Write yours down this week Whatever answering layer you use, the exercise is worth a staff meeting: write your red-flag list, define your "wake the surgeon" line, and name the exact EMR destination for everything that waits. Then audit a week of after-hours calls against it. The gaps you find are your real after-hours protocol, the one your patients actually experience. And if you want the execution layer handled - every call answered, your protocol applied identically every time - [book 15 minutes](https://clinicflowai.com/demo) and we'll walk through your call flows, surgeon to surgeon. `,LF=`--- title: "AI Answering Services for Medical Practices: What Reddit Actually Says" slug: "ai-answering-service-reddit" description: "A candid digest of how physicians and practice managers on Reddit talk about AI answering services: the recurring complaints, the legitimate concerns, what converts skeptics, and how to evaluate any vendor including us." date: "2026-07-18" author: "ClinicFlow Team" heroImage: "/images/blog/ai-answering-service-reddit.png" heroAlt: "What Reddit discussions say about AI answering services for medical practices" keywords: "ai answering service reddit, best ai answering service for medical practice reddit, ai receptionist medical practice reddit, ai phone answering reddit" excerpt: "Physicians on Reddit are the most honest focus group in healthcare. Here is what they consistently say about AI phone coverage, including the criticisms." --- If you search for AI answering services, you have probably also searched the same phrase with "reddit" stapled to the end. It is a rational habit: vendor sites say what vendors want, and physician threads in communities like r/PrivatePracticeDocs say what actually happened after the contract was signed. ClinicFlow was founded by a practicing spine surgeon and we sell an AI answering service, so read this with that disclosure in mind. What follows is an honest digest of the recurring themes in those discussions, including the ones that sting vendors like us. ## The 4 criticisms that come up over and over **1. "Patients hate talking to a robot."** The most common objection, and the most legitimate. Threads are full of stories about rigid phone trees rebranded as AI, agents that cannot handle an interruption, and elderly patients hanging up. The honest response from our side: this criticism is true of bad voice AI, and bad voice AI is common. The distinction that matters is whether the agent can handle a caller saying "actually, wait, can I do Thursday instead" mid-sentence. Some can. Most cannot. This is exactly why we publish a live demo line rather than a scripted video: call (415) 962-4019, interrupt it, change your mind twice, and judge for yourself. **2. "Is this even HIPAA compliant?"** Physicians on Reddit are rightly suspicious of consumer-grade AI tools wrapped around patient calls. The correct questions are the ones we hear from careful practice managers: will the vendor sign a BAA, where does the audio and transcript live, and does PHI end up in a consumer app or your EMR? We wrote a full breakdown of [what makes an AI answering service HIPAA compliant](/blog/hipaa-ai-answering-service-rules), and the same test applies to us as to anyone. **3. "It failed on the weird calls."** Correct, and it always will, which is why the design question is not "can the AI handle everything" but "what happens when it cannot." The acceptable answer is a structured handoff: capture the caller's information, summarize the issue, and route it to a human with context. The unacceptable answer is a loop of "I'm sorry, I didn't get that." Ask any vendor to demonstrate the failure path, not the happy path. **4. "The pricing math did not beat my human answering service."** Sometimes true, especially for tiny call volumes. The threads that go the other way are from practices comparing against the fully loaded cost: per-minute after-hours surcharges, holiday rates, message-relay errors, and the revenue cost of missed calls, which for a surgical practice runs $150 to $200 per missed new patient. We published our own math in [what a medical answering service really costs](/blog/medical-answering-service-cost); run your numbers in the [missed-call calculator](/missed-call-calculator) instead of taking anyone's word for it. ## What converts the skeptics Reading enough of these threads, a pattern emerges in the success stories. The physicians who ended up happy with AI phone coverage share 3 behaviors: they tested the agent themselves before signing, repeatedly and adversarially. They started with a limited scope, usually after-hours coverage or overflow, before touching daytime volume. And they kept their staff in the loop, positioning the AI as absorbing phone volume so humans could handle the front desk, not as a headcount replacement. That last point matters clinically too: the practices that fail with AI phone coverage are usually the ones that tried to make it something it is not. ## The evaluation checklist Reddit would write Compiled from the questions skeptical physicians ask vendors in these threads, and the ones we think they should ask: 1. Can I call a live demo right now, unscripted, and try to break it? 2. Will you sign a BAA, and what exactly does PHI touch in your stack? 3. What happens on a call the AI cannot handle? Show me, do not describe it. 4. Does it write into my EMR, or does my staff re-key everything from a portal? 5. How does it recognize an urgent clinical call, and who set those criteria? 6. What is the all-in monthly cost at my call volume, with zero per-minute surprises? 7. Which practices like mine use it, and can I talk to one? Any vendor that squirms on 2 or more of these is telling you something. That includes us: our answers are on the [FAQ](/faq), the [security overview](/security), and the demo line above. ## The bottom line Reddit's collective verdict on AI answering services is neither hype nor dismissal. It is conditional: the technology works when the vendor is healthcare-specific, honest about failure paths, and willing to be tested live, and it disappoints when a generic bot gets a medical wrapper and a sales deck. That conditionality is the most useful due-diligence framework in the industry, and it costs nothing to apply. ## Related resources - [Best AI phone and answering solutions for orthopedic practices](/blog/best-ai-answering-service-orthopedic-practices) - [AI answering service vs. AI receptionist vs. voice agent](/blog/ai-answering-service-vs-ai-receptionist) - [12 questions to ask before buying an AI phone agent](/blog/hipaa-ai-phone-agent-questions) `,zF=`--- title: "The AI Answering Service RFP Checklist: 27 Questions to Ask Every Vendor" slug: "ai-answering-service-rfp-checklist" description: "A free, copyable RFP checklist for evaluating AI answering services and voice AI vendors for medical practices: 27 questions across compliance, clinical safety, integration, operations, and pricing, with scoring guidance and red flags." date: "2026-07-19" author: "ClinicFlow Team" heroImage: "/images/blog/ai-answering-service-rfp-checklist.png" heroAlt: "AI answering service RFP checklist for medical practices" keywords: "ai answering service rfp, ai receptionist rfp template, voice ai vendor evaluation checklist, medical answering service rfp questions, ai phone vendor due diligence" excerpt: "The 27 questions that separate healthcare-grade voice AI from a generic bot with a medical sales deck, free to copy into your next vendor evaluation." --- Most practices evaluating AI phone coverage have never bought AI before, and vendors know it. The demos are polished, the decks all say HIPAA, and the differences that will actually matter 6 months in never come up on the sales call. This checklist is the fix: 27 questions across 5 categories, written so that a practice manager can run a rigorous evaluation without being an AI expert. Copy it into your RFP or just bring it to the demo. A disclosure before the list: we sell an AI answering service, so we wrote questions we believe good vendors should be able to answer. Every question applies to us too, and our answers are on the [FAQ](/faq), the [security overview](/security), and the live demo line at (415) 962-4019. ## How to use the checklist Ask every vendor the same 27 questions and score each answer 0, 1, or 2: a 0 for no or evasion, 1 for a partial or "on the roadmap" answer, 2 for a clear yes with proof. A vendor scoring under 40 of 54 deserves hard follow-up questions before they get your phone lines. Weight the compliance and clinical safety sections highest; a cheap price does not offset a PHI problem. ## Compliance and security (7 questions) 1. Will you sign a Business Associate Agreement, and can we see your standard BAA before contracting? 2. Where does call audio live, where do transcripts live, and for how long? Name the infrastructure and the region. 3. Does any PHI flow into consumer-grade tools or general-purpose AI accounts outside your BAA chain? 4. How do urgent escalations travel? If the answer involves texting patient details to a personal phone, how is PHI protected in transit and at rest? 5. Which subprocessors touch PHI, and are they listed in the BAA? 6. What happens to our data if we terminate? Deletion timelines, export formats, and proof. 7. Have you had a reportable breach, and what is your incident-response commitment in hours? ## Clinical safety (6 questions) 8. Who defines what counts as an urgent call: your model or our physicians? Show us the configuration. 9. Demonstrate the failure path live: what happens on a call the AI cannot handle? 10. What can the AI never do? The right answer includes approving refills, giving medical advice, and disclosing test results. 11. When the AI is uncertain whether a call is urgent, which way does it default? 12. How are after-hours escalations delivered to the on-call provider, and what happens if that provider does not respond? 13. Can we review transcripts of real triage calls (with PHI redacted) from a practice like ours? ## Integration (5 questions) 14. Does the system write appointments directly into our EMR, or does our staff re-key from a portal? Name the integration method for our specific EMR. 15. Are clinical summaries delivered inside EMR messaging, or in a separate inbox our compliance program does not govern? 16. How does the AI see our real-time availability, provider by provider and location by location? 17. What breaks when our EMR vendor pushes an update, and who notices first? 18. How long from contract to first live call, and what does our team have to do in between? ## Operations (5 questions) 19. Can we hear the production system right now, unscripted, on a number you publish? 20. How does the system handle interruptions, mid-call changes of mind, and callers who ramble? 21. What languages are supported, and is triage logic identical across all of them? 22. What happens at 8 AM Monday when 15 calls arrive in 10 minutes? 23. How do we monitor quality ourselves: call recordings, transcripts, dashboards, and how often? ## Pricing (4 questions) 24. What is the all-in monthly cost at our call volume? Enumerate every per-minute, per-call, after-hours, holiday, or overage fee. 25. What does price look like at 2x our volume, and is that committed in writing? 26. What is the contract term, and what does exit cost? 27. What specifically do we stop paying for elsewhere when this goes live: answering service fees, overtime, missed-call revenue leakage? Make the vendor do this math with you. ## Red flags that end evaluations A few answers should stop the process regardless of score. A vendor that cannot produce a BAA is not a healthcare vendor. A vendor that will not demonstrate the failure path is hiding it. A vendor whose AI approves medication requests has already made your malpractice carrier's argument for them. And a vendor with no live, publicly callable demo is asking you to buy a video. ## Why we publish our own test We built ClinicFlow around the belief that the demo line is the product: (415) 962-4019 rings the same production agent our practices use, and the [Call Library](/calls) documents exactly how each call type is handled, boundaries included. Run the checklist on us and on everyone else. The comparison is the point. ## Related resources - [The AI receptionist RFP checklist (printable resource version)](/resources/ai-receptionist-rfp-checklist) - [12 questions to ask before buying an AI phone agent](/blog/hipaa-ai-phone-agent-questions) - [What makes an AI answering service HIPAA compliant](/blog/hipaa-ai-answering-service-rules) - [What a medical answering service really costs](/blog/medical-answering-service-cost) `,BF=`--- title: "AI Answering Service vs. AI Receptionist vs. Voice Agent: What Medical Practices Are Actually Buying in 2026" slug: "ai-answering-service-vs-ai-receptionist" description: "AI answering service, AI receptionist, AI voice agent: vendors use the labels interchangeably, but the products differ. A buyer's guide for medical practices." date: "2026-07-15" author: "ClinicFlow Team" heroImage: "/images/blog/ai-answering-service-vs-ai-receptionist.png" heroAlt: "AI answering service vs AI receptionist vs voice agent comparison for medical practices" keywords: "ai answering service for medical practice, ai receptionist for medical office, ai voice agent healthcare, medical answering service ai" excerpt: "Vendors use answering service, receptionist, and voice agent interchangeably. The products are not interchangeable. Here is how to tell them apart before you buy." --- Shop for phone coverage in 2026 and you will meet 3 labels that sound like the same thing: the AI answering service, the AI receptionist, and the AI voice agent. Vendors use them interchangeably. The products behind them are not interchangeable, and for a medical practice the differences show up exactly where they hurt: scheduling accuracy, clinical escalation, and compliance. Here is what each label usually means, what to verify regardless of the label, and where each type fits in a medical practice. ## The 3 products behind the labels **The AI answering service** is the direct descendant of the traditional answering service. Its job is coverage: pick up every call, capture who called and why, and pass a message to your team. The AI version does this faster and cheaper than an operator pool, without hold queues, and usually with a transcript. What the basic version does not do is finish the caller's task. The patient who wanted an appointment still needs a callback. **The AI receptionist** aims one level higher: resolve the routine front-desk work on the call itself. Booking, rescheduling, confirming, answering hours-and-directions questions, collecting intake details. The catch is that most AI receptionists are horizontal products built for every small business at once, and a medical office is not a salon. A generic receptionist will happily book a post-op patient into a new-patient slot, because it has no idea what a global period is. If you are evaluating this category, our [AI receptionist guide for medical practices](/ai-receptionist) covers what separates healthcare-grade tools from generic ones. **The AI voice agent** is the broadest label and the one serious healthcare vendors increasingly use, because the product does more than reception. A healthcare voice agent integrates with the EMR, follows the practice's own protocols, and handles clinical call flows operationally: routing refill requests to the right nurse, recognizing urgent symptoms, escalating to the on-call physician with context. It is a receptionist plus the judgment layer a medical practice actually needs at 2 AM. ## What to verify, whatever the label Labels are marketing. Contracts and demos are evidence. For a medical practice, 5 checks separate the categories in practice: 1. **Does it write to your schedule, or just read it?** Many tools claim scheduling but only capture a request for staff to enter later. Real resolution means the appointment exists in the EMR when the call ends. Ask which systems are supported and how; we work alongside Epic, athenahealth, eClinicalWorks, ModMed, and AdvancedMD, and the answer to "how" matters more than the logo wall. 2. **What happens with an urgent clinical call?** A message-taker treats "my calf is swollen after knee surgery" like any other message. A healthcare-grade agent recognizes it against your escalation protocol and reaches the on-call clinician immediately, with a secure summary rather than a paraphrased page. This is the difference we built [after-hours coverage](/after-hours-answering-service) around. 3. **Will the vendor sign a BAA, and how does PHI travel?** If the answer to the first half is hedged, stop. The second half matters just as much: call summaries belong in EMR messaging or secure links, not plain-text messages. Our [HIPAA guide for AI answering services](/hipaa-compliant-ai-answering-service) lists the full set of questions. 4. **Does it know your specialty's scheduling rules?** Injection series spacing, imaging before consult, post-op visit types, workers' comp intake. Generic tools fail here silently, and the failures surface weeks later as unbillable visits. 5. **How is it priced?** Per-minute pricing recreates the answering service's worst incentive. Flat-rate coverage means a busy month is not a surprise invoice. See [what traditional services cost](/blog/medical-answering-service-cost) for the comparison math. ## Which one does a medical practice actually need? For solo and small practices with light call volume, an AI answering service may be enough: every call answered, messages organized, nothing missed. The gap between "message captured" and "task completed" stays manageable when there are 20 calls a day. For surgical and procedural practices, the math changes. Call volume is higher, the scheduling rules are stricter, and the after-hours calls carry clinical risk. That is the territory of the full voice agent, and it is where ClinicFlow lives: an [answering service replacement](/medical-answering-service) that schedules in the EMR, documents every call, and escalates urgent ones to the on-call surgeon. For orthopedic groups specifically, the [orthopedic answering service](/orthopedic-answering-service) page covers the specialty workflows in detail. The simplest evaluation method costs nothing: call the product before you book a demo. Ours is (415) 962-4019. Describe a symptom, book a visit, change it. 5 minutes on the phone tells you more than any comparison table, this one included. `,HF=`--- title: "AI Receptionist for Orthopedic Practices: The 2026 Buyer's Guide" slug: "ai-receptionist-orthopedic-practices" description: "What an AI receptionist actually does in an orthopedic practice, where generic tools fall short, and the 7 requirements a surgical practice should put in every vendor conversation." date: "2026-06-11" author: "ClinicFlow Team" heroImage: "/images/blog/ai-receptionist-orthopedic.png" heroAlt: "AI receptionist for orthopedic practices - 2026 buyer's guide from ClinicFlow" keywords: "AI receptionist for orthopedic practices, orthopedic AI receptionist, voice AI for small orthopedic groups, AI phone agent orthopedics, AI front desk orthopedic surgery" excerpt: "Every vendor now sells an 'AI receptionist.' Most were built for restaurants, salons, or generic clinics. Here is what the phones of a surgical practice actually require, and how to evaluate the options against it." --- "AI receptionist" became a crowded category fast. There are now dozens of products that will answer a business phone with a pleasant synthetic voice, and at least a handful marketing specifically to medical practices. If you run an orthopedic group, you have probably been pitched 3 of them this quarter. I'm a spine surgeon, and I co-founded ClinicFlow after living with the phone problem from inside a surgical practice. So yes, I have a product in this category. But this guide is the evaluation framework I would use even if we didn't exist, because most of the AI receptionist market was built for appointment businesses in general, and an orthopedic practice is not a general appointment business. ## Why orthopedic phones are a harder problem A salon's worst-case phone failure is a missed haircut. An orthopedic practice's worst-case phone failure is a post-op patient with a fever at 11 p.m. who reaches voicemail. That single difference drives everything about how you should evaluate this category: - **Call mix.** An ortho line carries new consults, referrals, imaging follow-ups, workers' comp intake, medication questions, and clinical calls in the same queue. Some are revenue. Some are liability. The system has to tell them apart. - **Urgency is clinical, not conversational.** A calm patient can be urgent; an upset one can be routine. Triage logic has to be designed by people who understand post-op presentations, not by prompt engineers guessing. - **After-hours is a third of the volume.** Nights and weekends aren't an edge case in musculoskeletal care; injuries don't respect office hours. Whatever answers at 2 p.m. Tuesday has to be just as competent at 9 p.m. Saturday. - **The schedule has rules.** Injection visits, global periods, subspecialty matching, location routing. Booking "an appointment" isn't enough; it has to be the right slot type with the right surgeon. ## The 7 requirements to put in every vendor conversation **1. Urgent clinical escalation, in writing.** Ask the vendor to walk you, step by step, through what happens when a patient 3 days out from a lumbar fusion calls at 11 p.m. with worsening leg weakness. The right answer involves recognizing the call as clinical and urgent, reaching the on-call surgeon directly with a secure summary, and documenting all of it. If the answer is "we take a message," you are buying a voicemail box with a nicer voice. **2. Real scheduling, not message-taking.** Many "AI receptionists" don't book anything; they collect callbacks. That converts your missed-call problem into a callback-queue problem, and callback queues leak patients. The agent should book, reschedule, cancel, and confirm directly against your real schedule, respecting your slot rules. **3. EMR-integrated documentation.** Call summaries should land where your team already works (EMR messaging, not a separate portal your staff has to remember to check). Ask which EMRs they integrate with today, not on the roadmap. **4. Clinical triage designed by clinicians.** Ask who wrote the triage logic and what their clinical background is. Then ask how the system decides what it should NOT handle, because the honest answer to "can it handle everything?" is no. You want a system designed to hand ambiguity to humans, by design. **5. Workers' comp and referral handling.** For most orthopedic groups, workers' comp is a meaningful revenue line with intake requirements generic systems mangle (claim numbers, adjusters, employer details, authorization status). Referrals are your growth engine, and they leak when the phone does. Ask specifically how both are handled. **6. Proof from practices like yours.** Ask for orthopedic or surgical references, with numbers. Many vendors in this category claim orthopedics in their marketing without a single named orthopedic customer. A named practice and a verifiable metric beat a wall of logos. **7. Economics that fit your size.** Several well-funded platforms in this space are built, priced, and staffed to sell to 50-provider platforms and health systems. If you run 2 to 15 providers, ask directly: what does your typical customer my size look like, what are the minimums, and how long is implementation? "We'll get back to you" is an answer too. ## Where the generic options fall short Most general-purpose AI receptionists (the ones serving dentists, vets, and med spas with the same product) do calls-to-messages well and may book simple appointments. What they consistently lack for surgical practices: clinical urgency triage with on-call escalation, global-period and injection scheduling logic, workers' comp intake, and EMR-native documentation. They aren't bad products. They were built for a different problem. The healthcare-specific platforms are stronger on integrations and scheduling, and the largest ones are genuinely good at high-volume patient access for big multi-specialty groups. The tradeoffs to probe there are specialty depth (is ortho 1 page out of 20?), practice-size fit, and whether anything clinical happens after hours beyond a message. ## What this looks like when it works In practices running ClinicFlow, every call is answered within seconds, 24/7, in 28 languages. Routine calls get booked or resolved on the spot. Non-urgent clinical calls become structured summaries in EMR messaging, waiting for the care team at 7 a.m. Urgent after-hours calls reach the on-call surgeon by text with a secure link to the full summary, in minutes. Partner practices report up to 70% lower phone operational costs and 20% more surgical revenue from calls that used to leak. You can evaluate it the way I'd want to: call the live demo line as a patient and try to trip it up at [clinicflowai.com/demo](/demo), or put your own numbers into the [missed-call calculator](/missed-call-calculator). ## The bottom line Buy against your hardest call, not your average one. Any modern system can book the 2 p.m. reschedule. The product you want is the one with a defensible answer for the Saturday-night post-op call, the workers' comp intake with a missing claim number, and the referral that arrived by fax while your front desk was at lunch. Make every vendor answer for those 3 calls, and the field narrows quickly. ## Related resources - [AI receptionist for medical practices](/ai-receptionist): what ClinicFlow's receptionist handles and how escalation works. - [The orthopedic answering service, rebuilt with AI](/orthopedic-answering-service): if replacing an answering service is the real project. - [AI answering service vs. AI receptionist vs. voice agent](/blog/ai-answering-service-vs-ai-receptionist): the buyer's map to the 3 labels vendors use. `,$F=`--- title: "AI Receptionist for Surgical Practices: The 2026 Buyer's Guide" slug: "ai-receptionist-surgical-practices" description: "Surgical practices run 3 phone lines in one: revenue, clinical risk, and compliance. The 5 calls that should decide which AI receptionist you buy." date: "2026-07-19" author: "ClinicFlow Team" heroImage: "/images/blog/ai-receptionist-surgical-practices.png" heroAlt: "AI receptionist for surgical practices: 2026 buyer's guide from ClinicFlow" keywords: "AI receptionist for surgical practices, surgical practice AI receptionist, AI phone agent for surgeons, AI front desk surgical practice, voice AI for surgical practices, AI answering service surgical practice" excerpt: "A surgical practice's phone is 3 lines in one: a revenue line, a clinical-risk line, and a compliance line. Most AI receptionists were built for none of them. Here are the 5 calls that should decide your purchase." --- If you searched "AI receptionist for surgical practices," you have already discovered the problem with this category: almost nobody builds for it. You will find AI receptionists for salons, for dentists, for "medical practices" in the broadest sense, and a few enterprise platforms built for hospital call centers. A practice that operates sits in the gap between them. I'm a spine surgeon, and I co-founded ClinicFlow after living with that gap from the inside. So I have a product in this category, and you should weigh that as you read. But the evaluation framework below is the one I would use regardless of vendor, because a surgical practice's phone is a different machine than a clinic's, and most of the market has never had to learn why. ## A surgical practice runs 3 phone lines in one Every call that hits your main number lands on one of 3 lines, and the caller never tells you which. - **The revenue line.** New consults, referrals from primary care and urgent care, imaging follow-ups. In a surgical practice these calls are not appointments, they are cases. One leaked referral is not a missed visit; it is a surgery that happens at the group across town. - **The clinical-risk line.** Post-op patients calling about swelling, fever, wound drainage, or new weakness. Some of these calls are routine reassurance. A few are the call you will be asked about later. The system answering your phone has to know the difference and act on it. - **The compliance line.** Global-period rules, workers' comp intake, prior authorization status, documentation of what was said and when. Getting these wrong doesn't create drama on the call; it creates write-offs and audit exposure months later. A general-purpose AI receptionist is built for exactly none of these. It is built to book a slot and take a message. That is a fine product for a business where the worst-case phone failure is a missed booking. Your worst case is a post-op complication that reached voicemail. ## The 5 calls that should decide your purchase Skip the feature matrix. Put these 5 calls in front of every vendor and make them walk you through, step by step, what their system does. The demos sort themselves quickly. **1. Saturday, 11 p.m.: a patient 4 days out from surgery reports a fever and increasing pain.** This is the call the whole purchase should be underwritten against. The right answer: the system recognizes a post-surgical patient with red-flag symptoms, reaches your on-call surgeon directly with a structured summary through a secure channel, and documents the entire chain. If the vendor's answer is "we take a message and your staff sees it Monday," the evaluation is over. **2. Tuesday, 12:30 p.m.: a referral arrives while your front desk is at lunch.** Referrals are how a surgical practice grows, and they leak at the phone. Ask whether the system can capture the referral, collect the demographics and insurance, confirm the imaging is available, and get the patient scheduled with the right subspecialist, not just promise a callback. Callback queues are where referrals go to die. **3. The night before surgery: a pre-op patient calls with a question about their instructions.** NPO status, medication holds, arrival time. If that patient cannot get an answer, some fraction of them become day-of cancellations, and an empty OR slot is one of the most expensive failures in your business. The system should answer routine pre-op questions from your own protocols and escalate anything clinical to a human. **4. A patient inside a global period calls to book what your scheduler would recognize as a post-op check.** A generic tool books it as a new billable visit. Your billing team catches it weeks later, or doesn't. Ask the vendor whether their scheduling logic understands global periods, visit types, and subspecialty matching, or whether "integration" means it writes whatever the caller asked for into your schedule. **5. A workers' comp adjuster calls about authorization status, 10 minutes after a patient called about the same claim.** Workers' comp is a meaningful revenue line for most surgical groups and a formatting nightmare: claim numbers, adjusters, employers, authorization status. Ask specifically how non-patient callers and comp intake are handled. This is where message-taking products quietly fall apart. ## What to demand before you sign - **A BAA, without negotiation.** If a vendor hesitates on a business associate agreement, they are not a healthcare product. - **The EMR integration list as it exists today.** Not the roadmap. Ask which systems call summaries actually land in, and where scheduling writes happen. - **Named surgical references with numbers.** Plenty of vendors claim "healthcare" with no surgical customer behind the claim. One named practice with a verifiable metric outweighs a logo wall. - **Economics that fit a 2-to-15-provider group.** Several well-funded platforms in this space are priced and staffed for health systems. Ask what their typical customer your size looks like, and what implementation actually involves. - **A clear statement of what the system will not do.** The honest answer to "can it handle everything?" is no. You want a vendor whose design hands ambiguity to humans on purpose. ## Where the market actually is The generic AI receptionists (the same product serving dentists, vets, and med spas) answer reliably and book simple appointments. They have no concept of clinical urgency, global periods, or comp intake. The healthcare platforms built for large multi-specialty groups are strong at high-volume patient access, and worth a look if you are a 50-provider organization; if you are not, probe the minimums and how deep your specialty actually goes in their system. The traditional answering service, the thing many practices are trying to replace, remains a human relay: polite, slow, and blind to your schedule. We compared all 3 models in detail [here](/vs-answering-services). ## What this looks like when it works In practices running ClinicFlow, every call is answered within seconds, 24/7, in 28 languages. Routine calls get booked or resolved on the spot, against the practice's real schedule and its actual rules. Non-urgent clinical calls become structured summaries in EMR messaging, waiting for the care team at 7 a.m. Urgent after-hours calls reach the on-call surgeon by text with a secure link to the full summary, in minutes. Partner practices report up to 70% lower phone operational costs and 20% more surgical revenue from calls that used to leak. You can run the 5-call test on it yourself: call the live demo line at [clinicflowai.com/demo](/demo) and play the Saturday-night post-op patient, or put your own volume into the [missed-call calculator](/missed-call-calculator). ## The bottom line Buy against your hardest call, not your average one. Any modern system can handle the 2 p.m. reschedule. The 5 calls above are where a surgical practice's money and risk actually live, and they are where the field of vendors narrows from dozens to a handful in a single conversation. ## Related resources - [AI receptionist for surgical practices](/ai-receptionist-surgical-practices): what ClinicFlow handles for practices that operate, and how escalation works. - [AI Receptionist for Orthopedic Practices: The 2026 Buyer's Guide](/blog/ai-receptionist-orthopedic-practices): the orthopedic-specific version of this framework. - [What Missed Phone Calls Really Cost a Surgical Practice](/blog/cost-of-missed-calls-surgical-practice): the economics behind call 2 and call 3. `,WF=`--- title: "Assort Health Alternatives for Orthopedic Practices (2026 Comparison)" slug: "assort-health-alternatives-orthopedic" description: "An honest comparison of Assort Health and its alternatives for orthopedic and surgical practices in 2026: ClinicFlow, EliseAI, Hello Patient, and Confido Health, organized by practice size and clinical needs." date: "2026-06-12" author: "ClinicFlow Team" heroImage: "/images/blog/assort-alternatives-orthopedic.png" heroAlt: "Assort Health alternatives for orthopedic practices - 2026 comparison" keywords: "Assort Health alternatives, Assort Health competitors, Assort Health vs ClinicFlow, voice AI orthopedic practice comparison, AI call center orthopedics" excerpt: "Assort Health is the best-known name in orthopedic voice AI, and for large multi-site groups it's a credible choice. But it isn't the right fit for every practice. Here's an honest map of the 2026 alternatives, written by a spine surgeon." --- If your orthopedic practice is evaluating AI for the phones, you have probably come across Assort Health. They are the best-funded company focused on this problem, they have real, named orthopedic customers, and they've published results that got the industry's attention. Full disclosure up front: I'm a spine surgeon and the co-founder of ClinicFlow, which appears in this comparison. I have an obvious interest here. I'm writing this anyway because most "alternatives" articles are written by marketing teams that have never taken surgical call, and the honest answer to "which one should we pick?" genuinely depends on what kind of practice you run. ## The short version - **Large multi-site group or MSO (25+ providers), patient-access focus:** Assort Health is a credible default, and EliseAI is a well-capitalized contender. - **Independent surgical practice (1 to 15 providers) that needs clinical call handling, not just scheduling:** this is the gap most platforms leave behind, and it's exactly where ClinicFlow lives. - **Multi-specialty or non-surgical clinic that wants broad omnichannel messaging:** Hello Patient and Confido Health are worth a look. ## Assort Health: what they do well, and what to probe Assort built its early reputation in orthopedics and has the strongest public ortho proof in the category: named customers like Michigan Orthopedic Surgeons and Peninsula Orthopaedic Associates, with published metrics on hold times and recovered revenue. They integrate with major EMRs, maintain a dedicated orthopedic product page, and in 2025 raised $102M to expand well beyond orthopedics into 20+ specialties, FQHCs, and health systems. If you run a large group, they belong on your shortlist. Questions worth asking in the demo, based on what their public materials emphasize and what they don't: 1. **After-hours clinical calls.** Their public materials center on patient access: scheduling, intake, hold times, outreach. If a post-op patient calls at 11 p.m. with a clinical concern, what exactly happens, and how does the on-call surgeon find out? 2. **Practice-size fit.** Their published case studies and enterprise sales motion center on large organizations. If you run a 5-surgeon group, ask what their typical customer your size looks like, what the minimums are, and how implementation is staffed. 3. **Specialty focus over time.** Orthopedics was their wedge; today it's one of 20+ specialties they serve. Ask how much of their roadmap is ortho-specific. None of these are criticisms of the product. They're fit questions, and good vendors answer them directly. ## ClinicFlow: built by surgeons for surgical practices ClinicFlow is the specialist option in this list, and the one I co-founded. The premise: in a surgical practice the phones are a clinical system, not just a scheduling system, so the product is designed around the calls that carry risk and revenue, not just volume. What that means concretely: - **Every call answered 24/7**, booked, rescheduled, or resolved directly, in 28 languages. - **Urgent after-hours clinical calls** reach the on-call surgeon by text with a secure link to a structured summary, in minutes. This is the workflow most patient-access platforms simply don't have. - **Non-urgent clinical calls** become summaries in EMR messaging, waiting for the care team in the morning. - **Surgical-practice specifics built in:** workers' comp intake, injection and global-period scheduling logic, referral capture, and (rolling out) automated referral fax-to-appointment, pre-op and post-op protocol calls, and prior authorization automation. - **Sized for independent practices.** ClinicFlow is built for 1-15 provider surgical groups, the segment enterprise platforms are structurally priced past. Partner practices report up to 70% lower phone operational costs and 20% more surgical revenue. The honest tradeoffs: we are earlier-stage than Assort or EliseAI, we are deliberately narrow (orthopedics, spine, and surgical specialties, not 20 verticals), and if you need a health-system-wide omnichannel platform, we are not that. You don't have to take any of this on faith: our agent is on a public line you can call like a patient at [clinicflowai.com/demo](/demo). ## EliseAI: enterprise scale, new to orthopedics EliseAI is the largest company on this list ($2.2B valuation, $200M ARR across its businesses). It built its revenue base in property management AI and has been expanding into healthcare, with published results in dermatology and women's health and a stated focus that now includes orthopedics. Strengths: serious capital, mature voice technology, an athenahealth Marketplace listing, and strong published metrics in its core healthcare specialties. The fit questions for an ortho group: their healthcare proof so far is dermatology and OB/GYN rather than surgical practices, their sales motion is enterprise (multi-site groups, custom implementations), and their workflows center on access and front-desk automation rather than clinical call triage. ## Hello Patient: omnichannel breadth, founder-led velocity Hello Patient (founded by an ex-Carbon Health product leader) sells "Mia," an AI assistant spanning voice, text, and chat, with 13+ practice-management integrations. They publish strong results in urgent care and digital health, and they market a templated orthopedics page. Strengths: omnichannel coverage in one product, fast-moving team, modern voice stack. Fit questions: no named orthopedic customers in their public materials, no urgent clinical escalation workflow described, and a breadth strategy (8+ specialties including veterinary and med spas) that means ortho-specific depth will always compete with other verticals for their roadmap. ## Confido Health: multi-specialty automation with a channel motion Confido positions AI "digital workers" across many outpatient specialties, with published customers in nephrology, dental, and community health. They integrate with common ambulatory EMRs including ModMed, which matters in orthopedics. Strengths: broad back-office automation ambitions beyond the phones, ModMed marketplace presence. Fit questions: their named customers and case studies are outside orthopedics, pricing is opaque, and like the other horizontal platforms, there's no published urgent-clinical-call workflow. ## How to run the evaluation Whatever you choose, make every vendor answer the same 3 calls (I walk through the full framework in our [AI receptionist buyer's guide](/blog/ai-receptionist-orthopedic-practices)): 1. The Saturday 9 p.m. post-op call with a clinical concern. 2. The workers' comp intake with a missing claim number. 3. The referral that arrived while the desk was slammed. Then put your own numbers into a calculator (ours is at [clinicflowai.com/missed-call-calculator](/missed-call-calculator)) and weigh the quote against what the missed calls are already costing you. If you run a large multi-site platform, Assort and EliseAI have earned their place in your process. If you run an independent surgical practice and the calls that worry you are clinical, that's the problem ClinicFlow was built for, by people who take call themselves. `,VF=`--- title: "The 7 Best AI Phone & Answering Solutions for Orthopedic Practices (2026)" slug: "best-ai-answering-service-orthopedic-practices" description: "A 2026 buyer's guide to AI phone and answering solutions for orthopedic and spine practices - what to look for, how the top platforms compare, and why surgical specialty fit matters more than generic call handling." date: "2026-04-23" author: "ClinicFlow Team" heroImage: "/images/blog/best-ai-answering-orthopedic-2026.png" heroAlt: "AI phone answering for orthopedic practices - ClinicFlow" keywords: "AI answering service for orthopedic practices, AI phone answering for surgical practices, orthopedic voice AI, after-hours call handling orthopedics" excerpt: "Not all AI receptionists are built for surgical complexity. Here's how the leading 2026 options compare - and what orthopedic and spine practices should evaluate before they buy." --- Orthopedic and spine practices live and die by the phone. A single surgical consult is worth thousands of dollars in downstream revenue, and yet most practices miss 20-35% of inbound calls during busy clinic hours - and effectively all of them after 5 p.m. Patients in pain don't leave voicemails. They call the next practice on their list. That's why AI phone answering has moved from novelty to necessity for surgical specialties. But not all "AI receptionists" are built for the complexity of an orthopedic practice, where the difference between a routine reschedule and a post-op complication is a clinical judgment call. Here's how the leading options compare in 2026, and what to look for before you buy. ## What orthopedic practices should actually evaluate Before the list, the criteria that matter for a surgical specialty - not a dental office or a general clinic: - **Specialty fit.** Does the system understand orthopedic and spine workflows - pre-op and post-op protocols, imaging, prior authorizations, on-call surgeon escalation - or is it a generic script? - **Urgent vs. non-urgent triage.** A post-op patient with a fever needs a different path than someone rescheduling a follow-up. The agent must route urgent after-hours calls to the on-call surgeon and summarize non-urgent ones into the EMR. - **EMR integration.** Call summaries should land in your EMR messaging, not a separate inbox no one checks. - **24/7 coverage.** After-hours is where the revenue leaks. Coverage has to be round-the-clock, not business hours plus voicemail. - **Scheduling depth.** Booking, rescheduling, cancelling, and confirming - not just "we'll have someone call you back." - **Language access.** Multilingual handling widens your patient base without extra staff. Now the landscape. ### 1. ClinicFlow - Best for surgical and orthopedic specialty practices ClinicFlow is built specifically for surgical practices, and it shows. Founded by two practicing surgeons, the platform's AI voice agent answers every call 24/7 in 28 languages and handles scheduling, rescheduling, cancellations, and confirmations end to end. Where it separates from generalist tools is clinical routing: non-urgent clinical calls are summarized and sent to the right team via EMR messaging, while urgent after-hours calls are escalated with a secure link straight to the on-call surgeon. In partner practices, ClinicFlow reports up to **70% lower operational costs** and a **20% increase in surgical revenue** - the latter being the number that matters most when a single recovered consult pays for the service many times over. New capabilities rolling out include referral intake via online fax with automatic patient outreach, pre-op/post-op compliance calls, and automated prior authorization. **Best for:** orthopedic, spine, and other surgical specialty practices that want a purpose-built system rather than a repurposed general receptionist. ### 2. Assort Health - Broad multi-specialty voice AI Assort offers specialty-trained voice agents across more than 20 specialties and operates at large scale. It's a strong, well-funded option for multi-specialty groups and enterprise provider organizations, with a growing outbound outreach product. For a single-specialty orthopedic practice, the trade-off is breadth over depth. **Best for:** large multi-specialty groups and enterprise health systems. ### 3. Emitrr - All-in-one patient communication Emitrr started as a patient-communication platform (texting, reminders, reviews) and layered AI call handling on top. It's a sensible pick for practices that already use Emitrr for messaging and want basic AI calls added to the same stack. It's strongest in dental and veterinary; orthopedic-specific clinical depth is lighter. **Best for:** practices already standardized on Emitrr for texting and reminders. ### 4. Sully.ai - "AI employees" for hospital operations Sully positions itself around a broader suite of AI "employees" for hospital and clinic operations. It's an ambitious platform play; for a practice whose primary pain is phone coverage and scheduling, it can be more than you need. **Best for:** organizations looking to automate across many operational functions, not just the phone. ### 5. Weave / 6. Podium - Communication suites with AI add-ons Both are established practice-communication platforms that have added AI answering features. They're broad horizontal tools; expect general-purpose call handling rather than surgical-specialty triage. **Best for:** practices wanting an all-in-one comms suite where AI calling is one feature among many. ### 7. Generic IVR / answering services Traditional phone trees and human answering services still exist, but they don't book appointments, don't summarize into the EMR, and don't triage clinically. They're a stopgap, not a solution - and as we cover in [what missed calls really cost a surgical practice](/blog/cost-of-missed-calls-surgical-practice), that stopgap leaks more revenue than most practices realize. ## The bottom line for orthopedic practices If you run a multi-specialty enterprise, breadth-first platforms make sense. But if you're an orthopedic or spine practice, the question isn't "which AI receptionist is biggest" - it's "which one understands a post-op call at 11 p.m." Specialty fit, clinical triage, and EMR-native summaries are what turn AI answering from a cost center into recovered surgical revenue. That's the gap ClinicFlow was built to close. *See how ClinicFlow handles a real orthopedic call flow - [book a 15-minute demo](https://clinicflowai.com/demo).* ## Related resources - [The orthopedic answering service, rebuilt with AI](/orthopedic-answering-service): how AI coverage compares to the traditional service line by line, including on-call escalation and pricing. - [AI medical answering service for surgical practices](/medical-answering-service): the broader specialty picture beyond orthopedics. - [After-hours answering that knows what can wait](/after-hours-answering-service): the escalation flow for nights, weekends, and holidays. - [HIPAA compliance for AI answering services](/hipaa-compliant-ai-answering-service): BAAs, PHI flow, and the vendor questions that matter. `,qF=`--- title: "The Best AI Answering Services for Pain Management Practices (2026)" slug: "best-ai-answering-service-pain-management" description: "A 2026 buyer's guide to AI phone answering for pain management practices: refill call volume, controlled-substance boundaries, injection scheduling, and how the leading options compare." date: "2026-07-19" author: "ClinicFlow Team" heroImage: "/images/blog/best-ai-answering-service-pain-management.png" heroAlt: "Best AI answering services for pain management practices compared" keywords: "ai answering service pain management, pain management practice phone answering, pain clinic phone calls, voice ai pain management, refill calls pain management practice" excerpt: "No specialty's phone rings harder than pain management's, and no specialty has stricter rules about what the answerer is allowed to do. The 2026 options, compared." --- Pain management practices run the highest phone volumes per provider in outpatient medicine, and the hardest calls to automate badly. Refill requests dominate the queue, controlled-substance policy sits behind every one of them, injection series come with spacing rules that scheduling has to respect, and a meaningful share of callers are in real distress. An AI that handles these calls sloppily is not a productivity tool; it is a compliance incident waiting for a date. Here is what pain management practices should demand in 2026, and how the options compare. Disclosure: ClinicFlow is our product, and the boundaries described below are engineered into it. ## What makes pain management calls unforgiving **Refill calls are clinical, not clerical.** A refill request can hide an escalating-pain story, a missed-dose pattern, or an aberrant-use signal. The correct automation boundary is absolute: capture the medication, pharmacy, timing, and any symptom change, then route to the prescribing team. The AI never approves, never denies, never promises. Our [refill routing page](/calls/prescription-refill-routing) documents the boundary in detail, because it is the first question any pain practice should ask a vendor. **Controlled-substance policy varies by practice and must be configurable.** Early-refill rules, lost-prescription policy, required visit intervals: the AI has to state your policy accurately and set caller expectations honestly, or your staff inherits the angry callback. **Injection scheduling has structure.** Series spacing, pre-procedure holds on anticoagulants flagged for staff review, procedure-day logistics: booking these correctly requires visit-type rules, not a generic calendar. **Volume is relentless.** The daily queue mixes refills, procedure scheduling, prior-auth status checks, and billing questions at a rate that buries front desks. This is the specialty where [daytime overflow coverage](/calls/daytime-overflow) pays for itself fastest. ## The options ### 1. ClinicFlow: hard clinical boundaries with pain-workflow depth ClinicFlow treats the refill boundary as an engineering constraint, not a prompt suggestion: requests are captured in structure, screened for symptom escalation, routed to the prescribing team through EMR messaging, and never answered with an approval or denial. Injection and procedure visits book against your visit-type rules, urgent presentations escalate on your criteria, and every call lands in the chart. Coverage is 24/7, which converts the after-hours "I'm out of my medication" call from a Monday crisis into a documented, routed request. Partner practices report up to 70% lower operational costs and a 20% increase in surgical revenue. Test the boundary yourself on the live demo line, (415) 962-4019: ask it for a refill and listen to what it does and does not say. **Best for:** pain management and interventional practices that need volume relief without compliance exposure. ### 2. Confido Health: healthcare voice AI A healthcare-focused voice AI vendor worth evaluating; press specifically on controlled-substance call handling and EMR-native documentation. See our [comparison](/compare/confido-health). **Best for:** practices comparison-shopping healthcare voice AI. ### 3. Assort Health: multi-specialty scale Specialty-trained agents across 20+ specialties with enterprise traction. For a dedicated pain practice, verify refill-boundary behavior and injection-series scheduling depth. See our [comparison](/compare/assort-health). **Best for:** multi-specialty groups standardizing one vendor. ### 4. Generic AI receptionists and answering services For most specialties these options are merely shallow; for pain management they are risky. A horizontal bot that improvises around a refill request, or a message-relay service that garbles a medication name, creates exactly the documentation you do not want discovered. The [category breakdown](/blog/ai-answering-service-vs-ai-receptionist) explains the difference; the [HIPAA analysis](/blog/hipaa-ai-answering-service-rules) covers the data-handling questions that matter double here. **Best for:** low-risk settings, which pain management is not. ## The bottom line for pain management Every vendor demo should include the same scripted test: call as a patient requesting an early refill of a controlled medication. The right system captures everything, promises nothing, states your policy, routes to your team, and documents the exchange. Anything else, from any vendor including us, should end the evaluation. Run the full [27-question RFP checklist](/blog/ai-answering-service-rfp-checklist) with the clinical-safety section weighted heaviest. ## Related resources - [Voice AI for pain management practices](/pain-management) - [The refill request call, handled](/calls/prescription-refill-routing) - [What is an AI front desk? The 2026 guide](/blog/what-is-an-ai-front-desk) `,UF=`--- title: "The Best AI Answering Services for Spine Practices (2026 Guide)" slug: "best-ai-answering-service-spine-practices" description: "A 2026 buyer's guide to AI phone answering for spine surgery practices: why spine calls are clinically different, the evaluation criteria that matter, and how the leading options compare." date: "2026-07-19" author: "ClinicFlow Team" heroImage: "/images/blog/best-ai-answering-service-spine-practices.png" heroAlt: "Best AI answering services for spine surgery practices compared" keywords: "ai answering service for spine practice, spine practice phone answering, voice ai for spine surgery, spine surgeon after hours calls, ai receptionist spine practice" excerpt: "Spine calls are the highest-stakes phone calls in outpatient medicine. Here is what to evaluate in an AI answering service, and how the options compare." --- No specialty has more riding on a phone call than spine surgery. The caller describing back pain might need a routine follow-up, or might be describing early cauda equina syndrome, and the difference is a handful of screening questions that a voicemail box will never ask. Add consult values that run thousands of dollars in downstream surgical revenue, imaging-heavy workflows, and prior authorization friction, and spine practices have the strongest case in medicine for getting phone coverage right. Here is how to evaluate AI answering options for a spine practice in 2026. Disclosure up front: ClinicFlow is our product, and it was built by a practicing spine surgeon, which shapes both the product and this guide. ## Why spine calls are different **The red flags are neurological and time-critical.** New bowel or bladder dysfunction with back pain, rapidly progressing weakness or numbness, and post-fusion fever are not "leave a message" symptoms. Any phone coverage, human or AI, needs structured screening for them on every clinical call, with escalation that reaches the on-call surgeon in minutes. Our published [after-hours triage protocol template](/blog/after-hours-triage-protocol-template) shows exactly what those screens look like. **Routing is a sub-specialty problem.** Radiating arm pain belongs with a spine surgeon, not a hand surgeon, and patients do not arrive knowing that. Practices that route by "whoever has an opening" re-book a meaningful share of visits after the first appointment lands with the wrong provider. **The consult math is unforgiving.** A missed new-patient call costs $150 to $200 in first-visit revenue for any practice; for a spine practice, the downstream value of a surgical candidate makes every missed call materially worse. ## The evaluation criteria The same 6 criteria from our [orthopedic buyer's guide](/blog/best-ai-answering-service-orthopedic-practices) apply, sharpened for spine: physician-configured red-flag screening with a demonstrated escalation path to the on-call surgeon, symptom-based routing to the correct sub-specialist, EMR-native scheduling and documentation, true 24/7 coverage, imaging and prior-auth workflow awareness, and hard clinical boundaries (no advice, no refill approvals, no result disclosure). Run any vendor through our [27-question RFP checklist](/blog/ai-answering-service-rfp-checklist); the clinical-safety section is where spine practices should be least forgiving. ## The options ### 1. ClinicFlow: purpose-built for spine and orthopedic surgery ClinicFlow was founded by a practicing spine surgeon, and spine workflows are its home turf: every clinical call is screened against the practice's own red-flag criteria, urgent after-hours calls escalate to the on-call surgeon by secure link, radiating-pain presentations route to the right sub-specialist using rules your surgeons configure, and every call lands in the EMR as a structured summary. Partner practices report up to 70% lower operational costs and a 20% increase in surgical revenue. The [Call Library](/calls) documents how each call type is handled, including the [after-hours urgent triage call](/calls/after-hours-urgent-triage), and the live demo line, (415) 962-4019, is the production agent. **Best for:** spine and orthopedic surgical practices that want clinical triage depth, not just scheduling. ### 2. Assort Health: multi-specialty scale A well-funded, specialty-trained voice AI spanning 20+ specialties. Credible for large multi-specialty groups; the trade-off for a dedicated spine practice is breadth over spine-specific depth. See our [detailed comparison](/compare/assort-health). **Best for:** enterprise and multi-specialty organizations. ### 3. Mira Health: orthopedic-adjacent voice AI A competitor in the orthopedic voice AI space with solid scheduling automation. Evaluate its after-hours clinical escalation model closely against the criteria above. See our [comparison](/compare/mira-health). **Best for:** practices comparison-shopping specialty voice AI vendors. ### 4. Generic AI receptionists Horizontal tools serve every small business and price accordingly, but spine-specific screening is exactly what they lack, and it is not configurable after the fact. Our [AI receptionist breakdown](/blog/ai-answering-service-vs-ai-receptionist) covers the category honestly. **Best for:** low-acuity practices without after-hours clinical exposure. ### 5. Traditional answering services Human operators relay messages; they do not screen, schedule, or document in the EMR, and per-minute after-hours pricing adds up. The [full cost comparison](/blog/medical-answering-service-cost) runs the numbers. **Best for:** practices not ready for AI that still need after-hours message relay. ## The bottom line for spine practices Score every option on one question first: show me, live, what happens when a post-op patient calls at 2 AM describing new leg weakness. The vendor that can demonstrate that call end to end, escalation included, is the short list. Test us on it: (415) 962-4019, or see [how a 3-location orthopedic group got to 100% answered calls](/customers/sports-medicine-orthopaedic-center). ## Related resources - [Voice AI for spine practices](/spine) - [After-hours triage for spine practices](/blog/after-hours-triage-spine-practices) - [Spine ICD-10 code reference](/resources/icd10-orthopedic-codes) `,YF=`--- title: "The Best AI Answering Services for Sports Medicine Practices (2026)" slug: "best-ai-answering-service-sports-medicine" description: "A 2026 buyer's guide to AI phone answering for sports medicine practices: weekend injury surges, urgent-vs-routine screening, athlete and parent callers, and how the leading options compare." date: "2026-07-19" author: "ClinicFlow Team" heroImage: "/images/blog/best-ai-answering-service-sports-medicine.png" heroAlt: "Best AI answering services for sports medicine practices compared" keywords: "ai answering service sports medicine, sports medicine practice phone answering, voice ai sports medicine clinic, after hours calls sports medicine, ai receptionist sports medicine" excerpt: "Sports medicine phone volume spikes exactly when the office is closed: after the Friday game, after the weekend tournament. Here is how the AI options compare." --- Sports medicine has a scheduling problem disguised as a phone problem: injuries happen at games and practices, which means evenings, weekends, and tournament Saturdays, which means the calls arrive precisely when the office is closed. Monday morning then opens with a queue of parents, coaches, and athletes who already called somewhere, and some of them got answered somewhere else. This guide covers what sports medicine practices should demand from AI phone coverage and how the options compare in 2026. Disclosure: ClinicFlow is our product; judge it by the same criteria as everyone else on the list. ## What makes sports medicine calls distinctive **The volume is nocturnal and seasonal.** The Friday-night football injury calls Friday night. Fall sports season doubles call volume without doubling staff. Coverage that follows office hours misses the practice's most valuable calls: new acute injuries, which convert to imaging, procedures, and surgical consults at high rates. **The callers are often not the patient.** Parents call about minors, coaches and athletic trainers call about players, and the intake flow has to capture who is calling, about whom, with what relationship, cleanly enough for the chart. **Urgency screening still matters.** Most weekend calls are sprains and strains that can wait for Monday, but a knee dislocation, a fracture with deformity, or pain out of proportion under a splint cannot. The screening layer is thinner than spine's neurological red flags but must exist, and it must be the practice's own criteria. Our [triage protocol template](/blog/after-hours-triage-protocol-template) shows the structure. **Speed of access is the differentiator.** Athletes and their families choose the practice that can see them this week, not in 3 weeks. Answering the Saturday call and booking Tuesday's visit on the spot is how sports medicine practices win referral loyalty from schools, clubs, and trainers. ## The options ### 1. ClinicFlow: surgical-specialty depth with 24/7 acute-injury intake ClinicFlow answers every call around the clock, which is precisely the sports medicine failure mode solved: the weekend injury call gets answered, screened against your urgency criteria, and booked into the EMR with the right provider before Monday's rush ever forms. Symptom-based routing sends the unstable knee to your sports medicine knee specialist rather than a general slot, insurance is captured on the call, and urgent presentations escalate per your rules. Partner practices report up to 70% lower operational costs and a 20% increase in surgical revenue. Hear it handle a [new-patient injury call](/calls/new-patient-scheduling) on the live demo line: (415) 962-4019. **Best for:** sports medicine and orthopedic practices whose call volume peaks outside office hours. ### 2. Hello Patient: patient-communication AI A growing voice AI player in patient access. Evaluate scheduling depth and after-hours screening against your acute-injury workflow. See our [comparison](/compare/hello-patient). **Best for:** practices prioritizing general patient-communication automation. ### 3. Emitrr: comms suite with AI calling Strong texting and reminder platform with AI call handling layered on; clinical screening depth is lighter, and sports medicine's after-hours acuity deserves scrutiny. See our [comparison](/compare/emitrr). **Best for:** practices already standardized on Emitrr for messaging. ### 4. Generic AI receptionists and answering services The horizontal options answer calls but do not know a Weber B from a wobble board: no urgency screening against clinical criteria, no sub-specialty routing, and for traditional services, per-minute weekend rates during your busiest hours. The [category breakdown](/blog/ai-answering-service-vs-ai-receptionist) and [cost analysis](/blog/medical-answering-service-cost) cover both honestly. **Best for:** low-acuity settings without weekend injury volume. ## The bottom line for sports medicine Ask each vendor for one demonstration: a Saturday-afternoon call from a parent whose kid got hurt at a tournament, ending in a booked Tuesday appointment with the right specialist and a documented chart entry. That call is your revenue engine. The vendor that completes it live earns the pilot. Ours is at (415) 962-4019, and [SMOC's results](/customers/sports-medicine-orthopaedic-center), a practice with sports medicine in its name, show what 100% answered looks like 6 months in. ## Related resources - [Voice AI for sports medicine practices](/sports-medicine) - [The daytime overflow call, handled](/calls/daytime-overflow) - [Best AI phone solutions for orthopedic practices](/blog/best-ai-answering-service-orthopedic-practices) `,QF=`--- title: "The 7 Best AI Receptionists for Surgical Practices, Ranked (2026)" slug: "best-ai-receptionist-surgical-practices" description: "A ranked 2026 comparison of AI receptionists for surgical practices: ClinicFlow, MedReception, Assort Health, Zocdoc Zo, Phreesia, and more, by practice size and fit." date: "2026-07-19" author: "ClinicFlow Team" heroImage: "/images/blog/best-ai-receptionist-surgical-practices.png" heroAlt: "The best AI receptionists for surgical practices in 2026, ranked and compared" keywords: "best AI receptionist for surgical practices, AI receptionist surgical practice, best AI medical receptionist 2026, AI receptionist comparison, surgical practice phone AI" excerpt: "The AI receptionist market splits into 3 camps: generic small-business tools, enterprise patient-access platforms, and specialty-built systems. Here is how the leading options rank for a practice that operates." --- Search "AI receptionist" and you will find dozens of products that answer a phone with a pleasant synthetic voice. Very few of them have an answer for the call that actually keeps surgeons up at night: the post-op patient with a fever on a Saturday. This ranking is specifically for surgical practices, where that call, not the 2 p.m. reschedule, is the reason you are buying. Full disclosure up front: ClinicFlow is our product, and we rank it first for our own segment. We have tried to be precise about who each competitor is genuinely best for, because the honest answer is that the right choice depends heavily on your size and specialty. The market splits into 3 camps: specialty-built systems, enterprise patient-access platforms, and generic small-business receptionists. Match the camp to your practice before you compare features. ## How we ranked them The criteria come from our [surgical buyer's guide](/blog/ai-receptionist-surgical-practices), which boils the evaluation down to 5 calls: the after-hours post-op complication, the lunchtime referral, the night-before pre-op question, the global-period booking, and the workers' comp adjuster. In short: - **Clinical escalation.** Does an urgent after-hours call reach the on-call surgeon, or a message queue? - **Real scheduling.** Booked on your live EMR schedule with your rules, or a callback promise? - **Surgical scheduling logic.** Global periods, visit types, subspecialty matching. - **EMR-native documentation.** Summaries in EMR messaging, not a separate portal. - **Size and economics fit.** Built and priced for your practice, not a health system (or vice versa). ### 1. ClinicFlow: best for surgical practices of 2 to 15 providers ClinicFlow was founded by practicing surgeons and built for one job: running the phones of a practice that operates. Every call is answered within seconds, 24/7, in 28 languages. Scheduling happens directly on the practice's live schedule with surgical rules intact: visit types, subspecialty and location matching, injection series spacing, and global-period awareness. Non-urgent clinical calls become structured summaries in EMR messaging; urgent after-hours calls reach the on-call surgeon by text with a secure summary link in minutes. Referral intake with automated patient outreach, pre-op and post-op compliance calls, and automated prior authorization are rolling out on the same platform. Partner practices report up to 70% lower phone operational costs and a 20% increase in surgical revenue. Pricing is a flat monthly subscription with no per-minute or after-hours fees. **Best for:** orthopedic, spine, and other surgical groups of roughly 2 to 15 providers that need clinical escalation, not just call answering. **Probe:** if you are a 50-provider multi-specialty organization, ask about scale fit. ### 2. MedReception.ai: best for solo surgeons and small practices wanting a physician-built generalist MedReception is physician-built and markets dedicated pages for surgical and orthopedic practices, covering new-injury calls, post-op questions, imaging, and scheduling. It targets solo physicians and single-group practices, which keeps the economics accessible. It is the closest philosophical neighbor to ClinicFlow on this list. **Best for:** solo surgeons and small practices that want physician-designed call handling. **Probe:** depth of EMR scheduling integration and what exactly happens on an urgent after-hours call. ### 3. Assort Health: best for large multi-specialty groups and health systems Assort is the best-funded specialty player, advertising AI agents across 22+ specialties, including orthopedic-specific routing with global-period and body-part triage awareness, and citing 190M+ patient interactions. It is built, staffed, and priced for enterprise patient access at scale. **Best for:** health systems and large multi-specialty groups with call-center-sized volume. **Probe:** minimums, implementation timeline, and how deep your specific specialty goes if you are not their core size. ### 4. Zocdoc Zo: best for practices already living on Zocdoc Zo answers every call instantly, handles multiple conversations at once, and books against your scheduling rules. Its natural home is practices that already source patients through Zocdoc and want the phone handled by the same ecosystem. **Best for:** consumer-facing practices in the Zocdoc ecosystem. **Probe:** surgical triage depth and after-hours clinical escalation, which are not its center of gravity. ### 5. Phreesia VoiceAI: best for organizations standardizing on Phreesia intake Phreesia's VoiceAI answers inbound and makes outbound calls covering scheduling, refills, and billing, verified against patient records, and rides on Phreesia's established intake platform. For organizations already using Phreesia, it is a logical extension. **Best for:** mid-size to large groups already on Phreesia intake. **Probe:** specialty-specific scheduling logic and whether after-hours urgent calls get clinical escalation or messaging. ### 6. DoctorConnect ARIA: best for replacing a phone tree with instant answering ARIA is a HIPAA-compliant AI receptionist focused on eliminating hold times and phone trees: instant answering, FAQ handling, and routing complex calls to human staff. It pairs with DoctorConnect's established reminder and engagement tools. **Best for:** practices whose main pain is hold times and missed daytime calls. **Probe:** surgical scheduling depth and on-call escalation. ### 7. Generic AI receptionists ($99 to $499/month class): best for budget coverage without clinical needs A large class of products (the same software answering for salons, contractors, and dental offices) now offers 24/7 AI answering at low flat rates. They answer reliably and capture messages. They have no concept of a global period, a post-op red flag, or workers' comp intake, and their HIPAA posture varies widely, so verify a BAA before any patient data touches them. **Best for:** overflow or after-hours message capture where nothing clinical is at stake. **Probe:** BAA availability, and be honest with yourself about whether your call mix is really non-clinical. ## What about traditional answering services? The human answering service is the incumbent this whole category replaces: a person takes a message and relays it. No scheduling, no EMR documentation, no triage logic beyond a script, and per-minute pricing that punishes busy months. We compared the models line by line in [answering service vs. AI receptionist](/vs-answering-services), and the cost math in [what a medical answering service really costs](/blog/medical-answering-service-cost). ## The bottom line Pick your camp first. Health systems should shortlist Assort and Phreesia. Practices with no clinical call risk can defensibly buy a $99 generalist. But if you are a surgical group of 2 to 15 providers, the shortlist is the specialty-built camp, and the tiebreaker is the Saturday-night call: demand that every vendor walk you through it step by step, in writing. That test is the entire reason ClinicFlow exists, and you can run it right now against our live demo line at [clinicflowai.com/demo](/demo). ## Related resources - [AI Receptionist for Surgical Practices: The 2026 Buyer's Guide](/blog/ai-receptionist-surgical-practices): the 5-call evaluation framework behind this ranking. - [AI receptionist for surgical practices](/ai-receptionist-surgical-practices): what ClinicFlow handles and how escalation works. - [The 7 Best AI Phone & Answering Solutions for Orthopedic Practices](/blog/best-ai-answering-service-orthopedic-practices): the orthopedic-specific ranking. - [AI receptionist RFP checklist](/resources/ai-receptionist-rfp-checklist): the printable question list for vendor conversations. `,GF=`--- title: "What Missed Phone Calls Really Cost a Surgical Practice - And How Voice AI Recovers That Revenue" slug: "cost-of-missed-calls-surgical-practice" description: "Missed and after-hours calls quietly drain surgical practice revenue. Here's how to quantify the leak - and how 24/7 voice AI turns missed calls into booked consults." date: "2026-04-16" author: "ClinicFlow Team" heroImage: "/images/blog/cost-of-missed-calls-surgical.png" heroAlt: "The cost of missed calls for surgical practices - ClinicFlow" keywords: "missed calls cost surgical practice, after-hours call handling surgical practice, missed appointment revenue orthopedics, voice AI surgical revenue" excerpt: "Every surgical practice has a number it never looks at: the share of calls that go unanswered. Here's how to put a dollar figure on the leak - and close it." --- Every surgical practice has a number it never looks at: the percentage of inbound calls that go unanswered. It doesn't show up on a P&L. There's no line item for "patients who called, got voicemail, and booked somewhere else." But for orthopedic and spine practices, it may be the single largest source of lost revenue in the building. Let's put real numbers to it. ## The math of a missed call Start with call volume. A busy orthopedic practice fields hundreds of inbound calls a week - new patient inquiries, referrals, scheduling, post-op questions. Industry benchmarks for specialty practices put missed-call rates at **20-35% during business hours**, climbing to nearly **100% after hours and on weekends**. Now attach value. Not every call is a surgical consult - but some are, and that's where the leverage lives. A new patient who converts to a surgical case can represent **thousands of dollars** in professional and facility revenue. Miss the call, and you don't just lose that patient - you often lose them to the next practice on their list, because patients in pain don't wait. A simple way to estimate your own leak: > **(Weekly inbound calls) × (missed-call %) × (share that are new-patient/consult opportunities) × (average case value) × 52** Run that for almost any surgical practice and the annual figure is uncomfortable. For many, the after-hours window alone - evenings, nights, weekends - accounts for a third or more of total call volume, and almost none of it is being captured today. ## Why the usual fixes don't work Practices try to plug the leak three ways, and each falls short: - **More front-desk staff.** Expensive, hard to hire, and still capped at business hours. Your busiest call surges (Monday mornings, post-procedure) overwhelm even a full desk. - **Traditional answering services.** They take a message. They don't book the appointment, can't see your schedule, and don't summarize anything into your EMR. The patient still has to be called back - often the next day, often too late. - **Voicemail + IVR phone trees.** The fastest way to send a motivated patient to a competitor. Nobody in pain navigates a five-option menu at 9 p.m. The common failure: none of these convert a call into a booked, documented action in the moment the patient is ready. ## What 24/7 voice AI changes Purpose-built voice AI closes the gap by doing what a great front-desk team would do - at every hour, on every call, without a queue: - **Answers every call immediately**, 24/7, with no hold time and no menu maze. - **Books, reschedules, cancels, and confirms** appointments directly against your schedule - the call ends with an action, not a callback promise. - **Triages clinically.** Non-urgent clinical calls are summarized and routed to the right team via EMR messaging. Urgent after-hours calls are escalated to the on-call surgeon with a secure summary link. - **Speaks the patient's language** - multilingual coverage widens access without adding headcount. The result isn't just "fewer missed calls." It's recovered revenue. ClinicFlow's surgical-practice partners report up to **70% lower operational costs** and a **20% increase in surgical revenue** - because the after-hours consult that used to hit voicemail now gets booked. ## The quiet compounding effect There's a second-order benefit that's easy to miss. When the phone is always answered well, your front-desk team stops drowning. Staff that spent the day triaging the queue can focus on the patients in front of them. Burnout drops. The patients who do reach a human get a better experience. And the practice stops bleeding cases it never knew it was losing. Missed calls are invisible precisely because nothing happens - no complaint, no record, just silence and a patient who went elsewhere. The first step is to make the leak visible. The second is to close it. The fastest way to make it visible: request a [free after-hours phone audit](/phone-audit). We call your practice line the way a patient would and send you the recording plus a scorecard of what we found. If you're weighing your options, our [guide to the best AI answering solutions for orthopedic practices](/blog/best-ai-answering-service-orthopedic-practices) breaks down what to look for. *Want to see what your missed-call leak looks like - and how to close it? [Book a 15-minute ClinicFlow demo](https://clinicflowai.com/demo).* `,KF=`--- title: "Your Front Desk Is Drowning. Here Is What That Costs You." slug: "front-desk-drowning-cost" description: "The front desk of an orthopedic or spine practice carries a relentless phone load. Here is what missed and after-hours calls actually cost, and where AI patient access fits." date: "2026-07-02" author: "ClinicFlow Team" heroImage: "/images/blog/cost-of-missed-calls-surgical.png" heroAlt: "The cost of a drowning front desk for orthopedic and spine practices - ClinicFlow" keywords: "front desk phone volume orthopedic practice, missed calls cost orthopedic practice, after-hours call handling, AI patient access" excerpt: "Walk past your front desk at 9 a.m. and watch what happens. Here is what that phone load actually costs an orthopedic or spine practice, and where AI patient access fits." --- If you run an orthopedic or spine practice, walk past your front desk around 9 a.m. and watch what happens. Two staff members are rooming patients. The phone is ringing off the hook. Someone is on hold asking about an MRI authorization. Another caller wants to know when their pre-op clearance is due. A post-op patient needs an FMLA form filled out. And the new patient with three weeks of radiating back pain, the one who would have become a surgical consult, just hung up because nobody picked up. That last call is the one that should bother you. ## The calls never stop, and they all matter Our front desks carry a heavier phone load than most specialties. The mix is relentless: scheduling and rescheduling, imaging and authorization status, refill requests, FMLA and disability paperwork, pre-op and post-op questions. None of it is optional. All of it interrupts the same two people who are also trying to keep the clinic running. The volume is not steady, either. A bad weekend on the slopes or a Friday night on the highway sends Monday morning through the roof. Workers comp injuries cluster. None of it lines up with your staffing. So calls get missed. They get abandoned on hold. They roll to voicemail nobody clears until lunch. And a good share of them come in after 5 p.m., when your patients are home from work and finally have a minute to call, and your office is dark. ## What missed calls actually cost A patient in real pain will not wait on hold, and will not leave a third voicemail. They call the next practice on the list. Every missed new-patient call is a lost consult, and in our world a lost consult can be a lost surgical case. Your existing patients are not much happier when they cannot get a simple answer about their imaging or their paperwork. You can throw more staff at the phones. Most of us have tried. It is expensive, it is hard to hire for, and it still leaves the after-hours gap wide open. If you want to see the size of the leak at your own practice, run your numbers through our [missed-call calculator](/missed-call-calculator). ## Where AI patient access fits AI patient access answers every call, day or night. It handles the routine work directly: scheduling, basic questions, where-is-my-authorization questions, the things that eat your staff's day. When a call needs a human, it captures the details and routes it to the right person instead of dumping it into a voicemail black hole. After hours, instead of a closed sign, the caller gets a real interaction. The request is captured and waiting for your team in the morning. The new patient with back pain books an appointment at 8 p.m. instead of calling your competitor. Two things change. First, the interruption load on your front desk drops, so your staff can focus on the patients standing in front of them. Second, the after-hours gap closes, so you stop leaking new-patient bookings into voicemail. ## The honest version This is not magic, and it does not replace your team. It takes the repetitive, high-volume calls off their plate and makes sure nothing goes unanswered when the lights are off. Your staff does the work that needs a human. The phones stop running the clinic. If your front desk feels like it is drowning, it probably is. The question is how many consults you are willing to lose before you do something about it. Related reading: [what missed phone calls really cost a surgical practice](/blog/cost-of-missed-calls-surgical-practice) and [how to replace your answering service without disrupting patients](/blog/replace-medical-answering-service-with-ai). Or [hear ClinicFlow on a live call](/demo) and [get a free phone audit](/phone-audit). `,ZF=`--- title: "What Makes an AI Answering Service HIPAA Compliant? BAAs, PHI Flow, and the Questions Vendors Dodge" slug: "hipaa-ai-answering-service-rules" description: "HIPAA compliance for AI answering services explained: why the vendor is a business associate, what the BAA must cover, how PHI should travel, and the questions to ask." date: "2026-07-15" author: "ClinicFlow Team" heroImage: "/images/blog/hipaa-ai-answering-service-rules.png" heroAlt: "HIPAA compliant AI answering service requirements explained" keywords: "hipaa compliant ai answering service, hipaa ai phone agent, BAA ai answering service, hipaa compliant answering service for medical practice" excerpt: "The AI is not the compliance question. The vendor's data handling is. What HIPAA actually requires when an AI answers your patients' calls." --- "Is it HIPAA compliant?" is the first question practices ask about AI phone coverage, and it is usually asked about the wrong thing. HIPAA does not certify software, and an AI model is neither compliant nor non-compliant on its own. Compliance lives in how the vendor handles protected health information and what they will sign. Here is the framework, in plain language, from a practicing surgeon who had to work through it on both sides. ## The vendor is a business associate. Full stop. An AI answering service hears callers describe symptoms, give their names and birthdates, and discuss appointments. It creates, receives, and transmits PHI on the practice's behalf. Under HIPAA that makes the vendor a business associate, which means a Business Associate Agreement is not optional paperwork; it is the legal predicate for the whole arrangement. The practical test is blunt: ask the vendor to sign a BAA before any patient call touches their system. A vendor that hedges, calls itself "HIPAA-friendly," or says a BAA is available "on enterprise plans" has answered your question. ClinicFlow operates with BAAs in place as a baseline, not an upsell, and any serious healthcare vendor should say the same in one sentence. ## The 4 places PHI actually flows, and what to check at each **1. The call itself.** Audio and transcripts are PHI. Where are they stored, for how long, and encrypted how? Retention should be a defined policy you can point to, not "indefinitely by default." **2. Model training.** The question of 2026: is our patients' call data used to train your models? Get the answer in writing, in the BAA or an addendum. "We may use data to improve our services" is not an answer; it is a red flag wearing a suit. **3. The escalation message.** This is the failure mode nobody checks. When the AI escalates an urgent call, what lands on the on-call physician's phone? If it is a plain-text SMS containing a name, callback number, and symptoms, a lost phone becomes a reportable breach. The compliant pattern is a text containing a secure link, with the PHI behind authentication. It is exactly how we built [after-hours escalation](/after-hours-answering-service), and it is worth asking any vendor to show you a real escalation text in a demo. **4. The summary delivery.** Routine call summaries belong in secure, access-controlled channels: EMR messaging, not group email or a shared inbox. HIPAA's minimum-necessary principle applies here too: the refill request should route to the clinical team that handles refills, not broadcast to everyone with a login. ## Beyond the checklist: 3 questions that separate real answers from marketing - **"Who at your company can access call data, and is that access logged?"** Access controls and audit logs are Security Rule basics. Vendors with real infrastructure answer immediately. - **"What happens to our data when we terminate?"** Return-or-destroy terms belong in the BAA. Silence here means your patients' calls outlive your contract. - **"Has your escalation flow ever been reviewed by a covered entity's compliance officer?"** The best vendors have been through this review dozens of times and will offer references. The full 12-question version of this checklist, with the answers you should expect to hear, is in our [buyer's guide to AI phone agents](/blog/hipaa-ai-phone-agent-questions). ## What compliance does not require Two persistent myths. First, HIPAA does not prohibit AI from answering patient calls; it regulates the data handling around them, and a compliant AI deployment is no more exotic legally than a compliant answering service. Second, HIPAA does not require special patient consent for a business associate to handle calls, though state call-recording laws vary and disclosures should match your state and your policies. This is general information rather than legal advice; your compliance officer should review any vendor's terms, ours included. ## The bottom line A HIPAA-compliant AI answering service is a vendor question, not a technology question: a signed BAA, defined retention, no training on your PHI without agreement, secure-link escalation, and EMR-integrated summaries. We keep a plain-language breakdown of how ClinicFlow meets each requirement on our [HIPAA-compliant AI answering service](/hipaa-compliant-ai-answering-service) page, with the full security posture on the [security page](/security). And if you want the fastest possible signal on a vendor: ask for the BAA on the first call. The reaction tells you nearly everything. `,XF=`--- title: "12 Questions to Ask Before Buying an AI Phone Agent for Your Practice (HIPAA Edition)" slug: "hipaa-ai-phone-agent-questions" description: "A practical vendor-evaluation checklist for AI phone agents in healthcare: HIPAA and BAAs, clinical triage, EMR integration, escalation paths, and the questions that expose weak products." date: "2026-05-07" author: "ClinicFlow Team" heroImage: "/images/blog/hipaa-ai-phone-agent-questions.png" heroAlt: "12 questions to ask AI phone agent vendors - ClinicFlow" keywords: "hipaa compliant ai answering service, ai phone agent healthcare, medical ai receptionist hipaa, ai answering service baa, evaluate ai phone vendor" excerpt: "Every AI phone vendor says 'HIPAA compliant' on the website. These 12 questions reveal which ones can actually run a surgical practice's phone line." --- Every AI phone vendor in healthcare has the same two words on their website: "HIPAA compliant." Most demos sound impressive. The differences - the ones that determine whether the system is safe and useful at 11 p.m. with a post-op patient on the line - only show up when you ask the right questions. Here are the 12 we'd ask any vendor, including us. ## Compliance and security **1. Will you sign a Business Associate Agreement (BAA)?** Not "are you HIPAA compliant" - *will you sign a BAA*. A vendor handling PHI without a BAA is a liability you're absorbing. No BAA, no deal. Ask for it before the pilot, not after. **2. Where does call data live, and who can see it?** Recordings, transcripts, and summaries contain PHI. Ask where they're stored, how long they're retained, who at the vendor can access them, and whether data is used to train models. You want specific answers, not "we take security seriously." **3. What happens to PHI in your AI pipeline?** AI phone agents pass audio and text through speech and language models. Ask which third-party processors touch PHI, and whether each one is under a BAA too. The chain matters as much as the front end. ## Clinical safety **4. How does the system tell urgent from routine?** This is the question that separates medical-grade from generic. A reschedule and a fever three days after a fusion are different calls. Ask the vendor to walk you through their triage logic for *your* specialty - and what happens when it's uncertain. (Uncertainty should escalate, never guess.) **5. What exactly happens with an urgent after-hours call?** You want a specific path: who gets contacted, how (text, call, secure link), how fast, and what the fallback is if the on-call surgeon doesn't respond. "We flag it for the morning" is the wrong answer for a surgical practice. **6. Can it handle an emergency redirect?** If a caller describes a true emergency, the agent should immediately direct them to 911 or the ED - reliably, every time. Ask to hear it in a live demo. ## Capability **7. Does it book appointments, or take messages?** Many "AI receptionists" are voicemail with better manners. If the call doesn't end with an appointment on your actual schedule, you've bought a message-taker. As we covered in [the cost guide](/blog/medical-answering-service-cost), price-per-call means nothing if calls don't convert. **8. Does it write into the EMR?** Summaries that land in a separate inbox create a new checking job. Clinical messages should route into your EMR messaging so the right team sees them in their existing workflow. **9. What languages does it cover?** Multilingual coverage isn't a luxury in most markets - it's missed patients. Ask which languages are supported live, not on a roadmap. ## Operational reality **10. What happens during a call surge?** Monday 8 a.m. after a holiday weekend is the real test. Concurrency limits, hold behavior, graceful degradation: ask for specifics. **11. Can we hear it handle our call types before we sign?** A serious vendor will demo against your scenarios - new patient referral, imaging question, post-op concern, prescription refill - not just a scripted happy path. (Ours is a phone number you can call right now.) **12. Who's behind the clinical design?** Ask who designed the triage flows and escalation rules. Software engineers guessing at clinical judgment is how unsafe systems get built. ClinicFlow's flows were designed by practicing surgeons; whoever you pick, someone clinical should own that layer. ## The pattern behind the questions Notice what these questions have in common: they're all about what happens at the edges - the urgent call, the surge, the uncertainty, the 2 a.m. escalation. Any system can handle the average call. You're buying the edges. If you're starting a vendor search, our [2026 buyer's guide for orthopedic practices](/blog/best-ai-answering-service-orthopedic-practices) compares the major options against exactly these criteria. *Want our answers to all 12, live? [Book a 15-minute demo](https://clinicflowai.com/demo) or call the demo line and grill the agent yourself.* `,JF=`--- title: "How Much Does a Medical Answering Service Cost in 2026? (And What AI Changes)" slug: "medical-answering-service-cost" description: "What medical answering services really cost in 2026: per-minute pricing, hidden fees, and how AI phone agents compare on price and on what actually matters - booked appointments." date: "2026-04-30" author: "ClinicFlow Team" heroImage: "/images/blog/medical-answering-service-cost.png" heroAlt: "Medical answering service cost comparison 2026 - ClinicFlow" keywords: "medical answering service cost, answering service for medical office pricing, AI answering service cost, medical virtual receptionist pricing" excerpt: "Per-minute fees, per-call fees, holiday surcharges: answering service pricing is built to be hard to compare. Here's the real math, and how AI changes it." --- If you've ever tried to price a medical answering service, you know the quotes are built to be hard to compare. One vendor bills per minute, another per call, a third per "unit." Holiday coverage costs extra. Patching a call through to the on-call physician costs extra. The result: practices routinely budget for one number and pay a meaningfully higher one. Here's how the pricing actually works in 2026, what it adds up to for a surgical practice, and how AI phone agents change the math. ## How traditional answering services charge Most medical answering services use one of three models: - **Per-minute billing.** The most common model. Operators' time is metered from pickup to hang-up, and rates typically run on the order of $1 per minute, with after-hours and weekend premiums on top. A 4-minute triage call is billed as 4 minutes whether or not anything was resolved. - **Per-call billing.** A flat rate per answered call. Simpler, but "a call" often includes wrong numbers, robocalls, and hang-ups. - **Tiered monthly plans.** A base fee covers a bucket of minutes or calls; overages bill at a premium. Busy months blow through the bucket, and the overage rates are where margins live. Then come the add-ons that rarely appear in the first quote: setup fees, holiday surcharges, fees to text or page the on-call physician, fees for HIPAA-compliant secure messaging, fees per dispatch. For a practice fielding hundreds of after-hours calls a month, it's common to see totals in the **several hundred to few thousand dollars per month** range - for a service that, crucially, only takes messages. ## The cost that doesn't show up on the invoice The bigger issue isn't the bill. It's what the service doesn't do. A traditional answering service answers, takes a message, and queues a callback. It can't see your schedule, can't book the new-patient consult, and can't tell a routine question from a post-op red flag without a rigid script. Every captured message still consumes front-desk time the next morning, and every new-patient call that ends in "someone will call you back" is a patient who may keep dialing down their list. As we showed in [what missed calls really cost a surgical practice](/blog/cost-of-missed-calls-surgical-practice), a single lost surgical consult can be worth more than an entire year of answering service fees. Pricing per minute is the wrong lens. The right question is: **what does it cost to convert a ringing phone into a booked, documented appointment?** ## What staffing the phones costs instead The in-house alternative has its own math. A full-time front-desk hire runs roughly **$40,000 - $55,000 per year fully loaded** in most US markets - for business-hours coverage only, minus PTO, sick days, and turnover. Covering nights and weekends with humans means an answering service anyway, or an on-call rotation that burns out your team. That's why the staffing conversation in surgical practices keeps landing in the same place: more hires don't fix after-hours, and answering services don't book or triage. ## How AI phone agents price - and what changes AI voice agents like ClinicFlow typically price as a **flat monthly subscription** - no per-minute meter, no after-hours surcharge, no per-dispatch fees. The same agent answers at 2 p.m. and 2 a.m. The economics differ in three structural ways: 1. **Marginal cost of a call is near zero.** Call surges (Monday mornings, post-procedure waves) don't generate overage bills - or hold queues. 2. **Calls end in outcomes, not messages.** Booking, rescheduling, cancelling, confirming - directly on your schedule. Non-urgent clinical calls are summarized into your EMR; urgent after-hours calls are escalated to the on-call surgeon with a secure summary link. 3. **Coverage is the same at every hour.** The after-hours window - where a third or more of call volume lives - is covered at no premium. In ClinicFlow's partner practices, that structure has translated to up to **70% lower operational costs** versus their prior staffing-plus-service mix, alongside a **20% increase in surgical revenue** from consults that used to leak to voicemail. ## The comparison that actually matters When you evaluate quotes this season, put them side by side on these questions rather than the per-minute rate: - What does a **fully-handled call** cost - answered, resolved, documented? - Does after-hours coverage cost extra? (It's where the revenue is.) - Does the service **book appointments** or take messages? - Does clinical triage reach the right person - EMR for routine, on-call surgeon for urgent? - What happens during a call surge? A cheap per-minute rate that converts nothing is the most expensive option on the table. For a feature-by-feature breakdown of all 3 options - traditional answering service, generic AI receptionist, and a surgical voice agent - see [ClinicFlow vs. answering services](/vs-answering-services). *Want the math run on your own call volume? [Book a 15-minute demo](https://clinicflowai.com/demo) and we'll walk through it together.* `,eM=`--- title: "Medical Office Phone Scripts: Free Templates for Front Desk, Scheduling, and After-Hours Calls" slug: "medical-office-phone-scripts" description: "Copyable phone scripts for medical offices: greeting, appointment scheduling, insurance verification, after-hours messaging, urgent escalation, and no-show recall. Written for surgical and orthopedic practices." date: "2026-07-18" author: "ClinicFlow Team" heroImage: "/images/blog/medical-office-phone-scripts.png" heroAlt: "Medical office phone script templates for front desk teams" keywords: "medical office phone scripts, front desk phone script medical office, medical receptionist script, appointment scheduling script, after hours phone script medical practice" excerpt: "The scripts that keep a surgical practice's phones consistent: greeting, scheduling, insurance, after-hours, and escalation, free to copy." --- Phone scripts get a bad reputation because bad scripts sound like scripts. A good script is not something staff read word for word. It is a checklist disguised as a conversation, and it exists so that the practice's 10th call of the day sounds as competent as its 1st, and so a brand-new hire captures the same information as a 10-year veteran. These are the scripts we see work in surgical practices, free to copy and adapt. ## The greeting script The first 5 seconds set the caller's expectation of the entire practice. > "Thank you for calling [Practice Name], this is [First Name]. How can I help you today?" Rules that matter more than the exact words: answer before the third ring, say the practice name first so misdials self-identify, give a name so the caller has a person, and never open with "please hold." Industry answer-rate data says roughly 1 in 5 calls to medical practices goes to voicemail, and each missed new-patient call is worth $150 to $200 in first-visit revenue alone. The greeting script only works if someone actually answers. ## The appointment scheduling script The goal is to book the right visit type with the right provider in one call. > "I can help with that. May I have your name and date of birth?" > "Have you been seen here before, and if so, which provider do you usually see?" > "In a sentence or two, what is the visit for?" > [Match to visit type and provider using your scheduling rules] > "I have [day, time] with [provider] at [location]. Does that work?" > "You'll get a confirmation text shortly. Is [mobile number] the best number?" The invisible step is the third line. "What is the visit for" is where scheduling goes wrong in specialty practices: a patient describing radiating leg pain does not belong with the hand surgeon. Your script needs a routing cheat sheet behind it, by symptom and sub-specialty, or the front desk is guessing. In our practices roughly 14% of bookings used to get re-routed at intake because the initial call matched the patient to the wrong provider. ## The insurance verification script > "Which insurance will you be using for this visit?" > "May I have the member ID and the plan name exactly as printed on the card?" > "Is [patient name] the policyholder, or is the policy under another name?" > "Thank you. We'll verify your benefits before the visit and call you if anything needs attention." Verify eligibility before the visit, not in the waiting room. Every surprise denial at check-in is a schedule hole you paid for. ## The after-hours script (and why voicemail is not one) Most practices' after-hours "script" is a voicemail greeting. A voicemail greeting is a script for losing patients: callers with urgent concerns hang up and call the next practice, or worse, sit on a symptom that needed attention. If a human or AI answers after hours, the script is a triage protocol, not a greeting. We published our full [after-hours phone triage protocol template](/blog/after-hours-triage-protocol-template) separately; the short version is structured intake, red-flag screening, and tiered escalation to the on-call provider. If voicemail is genuinely your only option tonight, the greeting must do 3 jobs: > "You've reached [Practice Name]. If this is a medical emergency, hang up and call 911. For urgent concerns that cannot wait until morning, [state your actual urgent path: on-call line, answering service, or ER guidance]. For scheduling and all other questions, leave your name, date of birth, and callback number, and we will return your call the next business day." ## The urgent escalation script For staff who pick up a call that turns urgent: > "I want to make sure this gets clinical attention right away. Stay on the line with me." > [Capture: name, DOB, callback number, one-sentence concern] > "I'm connecting you with [clinical staff / triage nurse] now. If we get disconnected, we will call you back at [number] within a few minutes." The rule underneath the script: the front desk never makes a clinical judgment. They capture, they escalate, and uncertainty always escalates rather than waits. ## The no-show and recall script > "Hi [Name], this is [First Name] from [Practice Name]. We missed you at your appointment [day] with [provider]. Patients recovering from [procedure/condition] do best when follow-ups stay on schedule, so I'd like to get you back on the books. I have [option A] or [option B], which works better?" Lead with the clinical reason, not the scolding. Recall calls framed around the patient's outcome rebook at much higher rates than "you missed your appointment" calls. ## Making scripts stick Print them, yes, but the real mechanisms are call review and consistency. Pull 5 recorded calls a month and score them against the scripts. Update the routing cheat sheet whenever a provider changes what they see. And accept the structural limit: scripts only govern the calls your team actually answers, at the hours they are at the desk. That structural limit is why we built ClinicFlow. Our voice AI runs these plays on every call, 24/7: consistent greeting, correct sub-specialty routing using your physicians' rules, real-time insurance capture, and after-hours triage with escalation to the on-call surgeon. It never freelances the script and never lets a call hit voicemail. You can hear it run a scheduling call right now on the live demo line: (415) 962-4019, or see how the [AI receptionist](/ai-receptionist) works alongside your front desk. ## Related resources - [After-hours phone triage protocol template](/blog/after-hours-triage-protocol-template) - [Medical answering service for surgical practices](/medical-answering-service) - [What a medical answering service really costs](/blog/medical-answering-service-cost) `,tM=`--- title: "Phone Triage Red Flags by Orthopedic Sub-Specialty: The Lists Your Protocol Needs" slug: "orthopedic-phone-triage-red-flags" description: "Example phone triage red-flag lists for every orthopedic sub-specialty: spine, joint replacement, sports medicine, hand and wrist, foot and ankle, and pain management, structured for your physicians to adapt and sign off." date: "2026-07-19" author: "ClinicFlow Team" heroImage: "/images/blog/orthopedic-phone-triage-red-flags.png" heroAlt: "Orthopedic phone triage red flags by sub-specialty" keywords: "orthopedic phone triage red flags, spine triage red flags phone, post op red flags phone call, telephone triage orthopedics, on call triage criteria orthopedic" excerpt: "The sub-specialty red-flag lists that turn a generic triage protocol into one your surgeons will actually sign, structured for adaptation, not adoption." --- Our [after-hours phone triage protocol template](/blog/after-hours-triage-protocol-template) gives practices the structure: intake, ER criteria, wake-the-surgeon criteria, morning queue, documentation. What it deliberately leaves blank is the clinical middle: the sub-specialty red-flag lists that decide which calls escalate. This companion piece fills in worked examples for each orthopedic sub-specialty, written to be adapted and signed off by your physicians, not adopted verbatim. The standing disclaimer applies with force: these are illustrative starting points for a physician-reviewed protocol, not medical advice, and every list below should be edited by the surgeons who take the calls. One rule sits above every list: **uncertainty escalates.** A triager, human or AI, who cannot confidently place a call in a lower tier routes it up. No list survives contact with every caller, and the protocol's job is to make the safe path the default path. ## Spine The neurological red flags, time-critical and unforgiving: - New bowel or bladder dysfunction with back pain [cauda equina until proven otherwise: ER] - Rapidly progressing weakness or numbness in a limb - New saddle anesthesia - Post-op fever above the practice threshold with wound changes after fusion or decompression - Sudden severe headache after a procedure involving dural work [possible CSF leak per your surgeon's criteria] - New numbness or weakness within days of surgery, even without pain ## Joint replacement The first 90 days drive the list: - Calf pain, swelling, or shortness of breath after hip or knee replacement [DVT/PE pathway: ER criteria] - Fever with a warm, red, or draining surgical site [periprosthetic infection until proven otherwise] - Sudden inability to bear weight that was previously tolerated - Audible pop or new deformity around the implant [possible dislocation or periprosthetic fracture] - Wound drainage of any kind beyond the timeframe your surgeons define ## Sports medicine Acute-injury screening for the weekend call: - Visible deformity, or a joint that dislocated and has not been reduced - Inability to bear any weight after an acute injury - Pain out of proportion under a cast, splint, or wrap [compartment syndrome until proven otherwise] - A cold, pale, or numb limb distal to an injury - Locked joint that will not move [displaced meniscal or osteochondral fragment per your criteria] ## Hand and wrist Small structures, short windows: - Any amputation, near-amputation, or devascularized digit [ER, with replantation-center routing per your protocol] - A pale, cold, or pulseless finger after injury or surgery - Signs of flexor tenosynovitis [the practice's chosen criteria, classically fever plus a swollen, flexed, exquisitely tender finger] - High-pressure injection injuries, however trivial the entry wound looks - Tight dressing symptoms unrelieved by elevation ## Foot and ankle - Pain out of proportion in a casted or booted limb - A cold, blue, or insensate foot - Post-op fever with wound drainage - Sudden inability to bear weight in a previously weight-bearing recovery - Diabetic patients with new foot wounds, redness, or warmth [escalation thresholds your surgeons set deliberately low] ## Pain management The list looks different: fewer surgical emergencies, more medication and procedure vigilance: - New neurological deficits after an injection [weakness, numbness, bowel or bladder changes: ER pathway] - Signs of infection at an injection site, or fever after a procedure - Severe headache after an epidural or spinal procedure, worse upright [post-dural-puncture headache per your criteria] - Any suggestion of overdose, oversedation, or aberrant medication use [immediate clinical escalation, never a routed message] - Chest pain, breathing trouble, or anaphylaxis symptoms after any procedure [911] ## Making the lists operational Three implementation notes from watching practices run these protocols. First, every list needs an owner: one physician per sub-specialty who reviews it annually and after any near-miss. Second, the lists only matter if someone applies them on every call, at every hour; a laminated sheet nobody reads at 2 AM is compliance theater. Third, document which criterion triggered each escalation, in one sentence, every time; that discipline is what turns a protocol into a defensible standard of care. This is exactly the configuration ClinicFlow runs: your sub-specialty red-flag lists, applied consistently by the voice AI on [every after-hours call](/calls/after-hours-urgent-triage), with escalation to the on-call surgeon and documentation into the EMR. Hear it screen a call on the live demo line: (415) 962-4019. ## Related resources - [The after-hours phone triage protocol template](/blog/after-hours-triage-protocol-template) - [After-hours triage for spine practices](/blog/after-hours-triage-spine-practices) - [The Call Library: every call type, handled](/calls) `,nM=`--- title: "Orthopedic Referral Leakage: Where Surgical Referrals Slip Away (and How to Stop It)" slug: "orthopedic-referral-leakage" description: "A large share of orthopedic referrals never become appointments. Here's where referrals leak between the referring provider's fax and your schedule - and how automated intake closes the gap." date: "2026-05-14" author: "ClinicFlow Team" heroImage: "/images/blog/orthopedic-referral-leakage.png" heroAlt: "Orthopedic referral leakage - ClinicFlow referral intake" keywords: "orthopedic referral leakage, referral management orthopedics, surgical referral process, referral intake automation, fax referral workflow" excerpt: "The referral arrived. The patient never did. Here's where orthopedic referrals leak between the fax machine and your schedule, and how to close each gap." --- Every orthopedic practice lives downstream of referrals: primary care, urgent care, EDs, physiatrists, chiropractors. And every practice has felt the same quiet failure: the referral arrived, everyone assumed it was handled, and the patient never showed up on the schedule. Industry analyses of specialty referrals have repeatedly found that **a large share - by many estimates, between a quarter and half - never convert into completed appointments.** For a surgical specialty, where one referral can represent a five-figure episode of care, that's not an administrative annoyance. It's the single leakiest part of the revenue funnel. Here's where referrals actually leak, stage by stage - and what closing each gap looks like. ## Stage 1: The fax that sits in a queue Most orthopedic referrals still arrive by fax. That fax lands in a queue - physical tray or e-fax inbox - and waits for a human to notice it, read it, and act. On a busy clinic day, "later today" becomes "tomorrow," and a same-week injury referral quietly ages. Speed matters more than almost anything here. A patient referred for knee pain is most reachable, and most motivated, in the first day or two. Every day of intake delay raises the odds they've called another practice, often one their insurance app suggested. **The fix:** referral intake that starts the moment the fax arrives - parsed, logged, and queued for outreach automatically, not when someone gets to the tray. ## Stage 2: The outreach game of phone tag Once someone does process the referral, the practice calls the patient. The patient is at work and doesn't answer an unknown number. A voicemail goes out. Days pass; a second attempt maybe happens; many practices' workflows quietly end after one or two tries. This stage is where most conversions die - not because anyone failed, but because outbound calling is a queue-based task competing with the front desk's inbound flood. **The fix:** automated, persistent outreach. ClinicFlow's referral feature calls the patient as soon as the referral is received, books the appointment directly on the schedule during that call, and retries intelligently if the first attempt doesn't connect. The phone tag simply doesn't happen - and the front desk never had to find time for it. ## Stage 3: The booking that never happens live Even when the patient answers, a callback-style workflow often ends with "we'll send you some paperwork" or "let me check with scheduling." Every additional touch is another chance to lose them. **The fix:** book in the moment. If the patient is on the phone and the schedule is visible, the appointment should exist before the call ends - confirmed, documented, done. ## Stage 4: Nobody closes the loop with the referrer The quietest leak isn't a lost patient - it's a lost referrer. Referring providers who never hear back drift to competitors who make them look good to their own patients. Most orthopedic practices have no systematic way to tell a referring PCP "your patient was seen within 5 days." **The fix:** treat referring practices as customers. Even simple automated status updates ("received," "scheduled," "seen") measurably change how often a referrer picks you next time. ## What a sealed referral funnel looks like Put together, modern referral intake looks like this: 1. Fax arrives → parsed into the dashboard automatically 2. Patient called within minutes, by an agent that books directly on your schedule 3. No answer → systematic retries, not best-effort callbacks 4. Appointment booked → confirmation to the patient, status visible to your team 5. Referrer gets the loop closed That's the workflow ClinicFlow's referral intake automates end to end - the fax-to-booked-appointment path with no queue in the middle. Combined with [24/7 call answering](/blog/best-ai-answering-service-orthopedic-practices), it covers both directions a patient can arrive from: the ones who call you, and the ones who were sent to you. ## Run the math on your own funnel Take last month's referral count, your show rate, and your average case value. Even a 10-point improvement in referral conversion is usually worth more than any marketing spend a practice makes that quarter - and as with [missed calls](/blog/cost-of-missed-calls-surgical-practice), the leak is invisible until you measure it. *Want to see referral intake automated end to end? [Book a 15-minute demo](https://clinicflowai.com/demo).* `,rM=`--- title: "Injection Series, Global Periods, and the Scheduling Rules Generic Phone Coverage Gets Wrong" slug: "orthopedic-scheduling-injections-global-periods" description: "Orthopedic scheduling has clinical rules: injection series spacing, 90-day global periods, imaging-before-consult. Here's why generic answering services and AI receptionists break them, and what it costs." date: "2026-06-02" author: "ClinicFlow Team" heroImage: "/images/blog/orthopedic-scheduling-rules.png" heroAlt: "Orthopedic scheduling rules: injection series and global periods - ClinicFlow" keywords: "injection scheduling orthopedics, post-op global period scheduling, orthopedic scheduling workflow, 90 day global period appointments, hyaluronic acid injection series scheduling" excerpt: "An orthopedic schedule isn't a calendar, it's a set of clinical rules. Injection series have spacing requirements. Post-op visits live inside global periods. Generic phone coverage knows none of this." readingTime: "7 min read" --- Ask any orthopedic scheduler what makes their job different from scheduling at a dermatology or primary care office, and they won't say volume. They'll say rules. An orthopedic schedule is not a calendar with open slots. It's a set of clinical and billing constraints that determine which patient can take which slot, when, with whom, and with what already completed. Get the rules right and the template hums. Get them wrong and you create wasted surgeon time, denied claims, and patients who show up for visits that can't happen. Here's the problem: most practices hand their phones, and therefore their scheduling, to coverage that doesn't know any of the rules. An after-hours answering service takes a message. A generic AI receptionist happily books "the next available opening." Both fail orthopedics in specific, expensive ways. ## Rule 1: Injection series have clocks attached Injections look simple on a schedule and aren't. A hyaluronic acid knee injection is often a series: 1 injection a week for 3 weeks, with payers requiring the doses to be spaced correctly and many limiting repeat courses to every 6 months. A corticosteroid injection in the same joint typically shouldn't be repeated within roughly 3 months, and most surgeons won't inject a joint they're planning to replace within 3 months of surgery, because of infection risk data. Now listen to what happens when a patient calls a generic scheduler: "I need my second knee injection." The system sees an opening Thursday and books it, 5 days after dose 1 instead of 7, or books a "new injection" 10 weeks into a 6-month payer lockout. The visit happens, the claim denies, and your billing team eats the appeal. A scheduler who knows orthopedics asks the questions that matter: Which joint? Which medication? When was the last dose? Is this part of a series your surgeon already ordered? The booking is only correct if the answers are. ## Rule 2: The global period decides what kind of visit this is Every surgical practice lives inside global periods: the 90 days after a major procedure (or 10 days after a minor one) when routine post-op care is bundled into the surgical fee. That one billing concept quietly governs the phones: - A patient calling 6 weeks after a rotator cuff repair about shoulder stiffness is a **post-op global visit**. It needs the right visit type, with the operating surgeon or their PA, coded as part of the global package. - The same patient calling about their *other* shoulder is a **new problem**, billable, and should be scheduled and documented as one. - A patient calling at week 13 is outside the global window, and the visit type changes again. Generic phone coverage can't make these distinctions because it doesn't know the surgery happened, when, or which side. So post-op patients get booked as new consults (clogging the slots that fill your OR), new problems get booked as post-ops (unbilled work), and your front desk spends mornings re-categorizing yesterday's bookings. ## Rule 3: Some visits are wasted without the imaging The third rule every ortho scheduler knows: a surgical consult without the MRI is often a wasted consult. If the imaging isn't done, or was done at an outside facility and never transferred, the surgeon spends the visit ordering the study they needed to see, and the patient comes back in 3 weeks to have the real conversation. The fix happens on the phone, at booking: confirm what imaging exists, where it was done, and what has to arrive before the visit. That's a clinical screening question, and message-taking services don't ask it. ## What this costs Stack the failure modes and the bill is real. A mis-booked injection is a denied claim plus rework. A post-op booked into a new-patient slot displaces a surgical consult, and surgical consults are the most valuable appointments in the building. A consult without imaging burns a surgeon-hour to accomplish what a 90-second phone question would have. None of these show up on your answering-service invoice, which is precisely why the per-minute rate looks cheap. ## What "knowing the rules" looks like on the phone This is the design difference between a generic AI receptionist and a voice agent built for surgical practices. ClinicFlow's call flows were written by practicing surgeons, so the agent handles an injection call like an injection call: joint, medication, series position, last-dose timing, then the booking. It distinguishes a post-op follow-up from a new complaint and routes each to the right visit type and the right clinician. It asks the imaging question before the consult lands on the schedule. And it does this on every call, at 2 p.m. or 2 a.m., in 28 languages, then documents the summary into your EMR. The rules don't disappear after 5 p.m. Your phone coverage should know them around the clock. *Want to test it against your hardest scheduling scenario? Call the live demo line at (415) 962-4019 and play the patient - second injection, post-op question, the works. Or see what mishandled calls cost with the [missed-call calculator](/missed-call-calculator), and compare your current coverage option by option at [ClinicFlow vs. answering services](/vs-answering-services).* `,iM=`--- title: "Prior Authorization Automation for Orthopedic Surgery: What's Actually Possible in 2026" slug: "prior-authorization-automation-orthopedics" description: "Prior auth burns staff hours and delays orthopedic surgeries. Here's what automation can take over in 2026 - from imaging approvals to surgical auth - and what to look for in a system." date: "2026-05-21" author: "ClinicFlow Team" heroImage: "/images/blog/prior-authorization-automation.png" heroAlt: "Prior authorization automation for orthopedic surgery - ClinicFlow" keywords: "prior authorization automation, prior auth software orthopedics, surgical prior authorization, imaging prior authorization, prior authorization AI" excerpt: "Staff spend hours a day chasing payer portals to get surgeries and MRIs approved. Here's what prior auth automation actually does in 2026 - and where the time goes back." --- Ask any orthopedic practice administrator where their staff's day disappears, and prior authorization is on the short list every time. An MRI needs payer approval. A spinal fusion needs payer approval. Each one means assembling notes and imaging reads, logging into a payer portal (a different portal per payer), submitting, waiting, checking, resubmitting when something's missing, and calling when the portal says nothing at all. Surveys of physician practices have consistently found that prior auth consumes **multiple staff hours per physician per day**, and that delays in authorization regularly translate into delayed care - postponed imaging, pushed surgical dates, frustrated patients, and OR schedules rebuilt at the last minute. It's also one of the most automatable workflows in the entire practice. Here's what automation actually covers in 2026. ## Why prior auth is such a good automation target Prior auth is painful for humans for exactly the reasons software handles it well: - **It's repetitive.** The same payer rules, the same document checklists, the same portal flows, case after case. - **It's deadline-driven but low-judgment.** Most of the work is gathering, formatting, and submitting - not deciding. - **The status-checking is constant.** "Has it moved?" is a question staff ask portals dozens of times a day. - **Errors are expensive.** A missing imaging read or wrong code restarts the clock, and the patient's surgery date with it. The clinical decision stays with the surgeon. Everything around it - assembly, submission, tracking, follow-up - is process. ## What an automated prior auth flow looks like A modern system, like the prior auth automation ClinicFlow is rolling out, handles the cycle end to end: 1. **Case intake.** A surgery or imaging order triggers the auth workflow automatically - no one has to remember to start it. 2. **Document assembly.** The relevant patient notes and imaging reads are gathered and packaged to the payer's requirements. 3. **Submission.** Filed via the payer's portal or, where available, directly through payer APIs - without a staff member clicking through screens. 4. **Status tracking.** The system checks status continuously and surfaces only the exceptions: a denial, a request for more information, an approval that frees a surgical date. 5. **Resubmission support.** When a payer wants more documentation, the request comes back as a specific task, not a mystery. The practical effect: staff stop being portal operators and start being exception handlers. The 20 cases that are moving normally need zero human minutes; the 2 that are stuck get human attention immediately. ## What it means for the surgical schedule The hidden cost of manual prior auth isn't just staff time - it's **OR schedule volatility**. Auths that clear late force reshuffles; auths that quietly stall force cancellations. Automating the chase shortens the time from "surgeon says operate" to "payer says approved," which tightens the whole booking pipeline: dates hold, patients prep on time, and fewer cases slip to next month's schedule. For a practice working on [referral conversion](/blog/orthopedic-referral-leakage) and [call capture](/blog/cost-of-missed-calls-surgical-practice) at the front of the funnel, prior auth is the matching fix at the back: the patient you fought to book shouldn't stall in an approval queue. ## What to look for in a prior auth system If you're evaluating options this year, the questions that separate real automation from a prettier task list: - Does it **submit and track**, or just remind your staff to? - Does it handle **both imaging and surgical** auths? - Can it work **payer portals and payer APIs**, or only one? - Does it pull documentation from your EMR, or does staff still assemble packets? - How does it surface **exceptions** - and only exceptions? - Is it built for a **surgical specialty's** case mix, or generic utilization management? ## The bottom line Prior auth isn't going away - payers are expanding it, not retiring it. The practices that stay ahead won't be the ones that hire more portal operators; they'll be the ones where software does the chasing and people do the judgment calls. That's the direction ClinicFlow is building: automated prior auth alongside 24/7 call handling and referral intake, so the entire path from "patient referred" to "surgery approved" runs without leaks or queues. *Want a look at where our prior auth automation is headed? [Book a 15-minute demo](https://clinicflowai.com/demo).* `,oM=`--- title: "How to Replace Your Medical Answering Service with AI (Without Disrupting Patients)" slug: "replace-medical-answering-service-with-ai" description: "A practical migration guide for practices replacing a traditional medical answering service with an AI voice agent: what to verify first, how call forwarding actually changes, and a 4-week pilot plan that risks nothing." date: "2026-06-06" author: "ClinicFlow Team" heroImage: "/images/blog/replace-answering-service-ai.png" heroAlt: "Replacing a medical answering service with AI - migration guide" keywords: "replace medical answering service with AI, switch from answering service, AI answering service migration, cancel medical answering service, after-hours AI phone coverage" excerpt: "Switching away from an answering service feels risky because the phones can never go down. Here's the migration path that practices actually use: pilot after hours first, keep your numbers, and let the results decide." readingTime: "6 min read" --- Every practice administrator who has thought about replacing their answering service has had the same second thought: *what if something breaks?* The phones are the practice. A botched transition doesn't just cost money, it strands patients. So this is not a post about why AI answers calls better than a message-taking service. We covered the cost math in [what a medical answering service really costs](/blog/medical-answering-service-cost) and the feature-by-feature differences in [ClinicFlow vs. answering services](/vs-answering-services). This is about the *how*: the migration path that doesn't disrupt a single patient call. ## First, understand what actually changes (very little) The part that surprises most administrators: replacing an answering service does not touch your phone numbers, your carrier, or your phone system. Your practice already forwards calls somewhere - to the answering service after hours, on weekends, or on overflow when the front desk is swamped. Switching to an AI voice agent means changing the forwarding destination. That's it. Your published numbers stay the same. Your phone tree, if you keep one, stays the same. The change is invisible to patients except for what happens after the call connects: instead of "I'll take a message," the call ends with a booked appointment. This also means the rollback plan is trivial. If you ever wanted to switch back, it's the same forwarding change in reverse. You are never locked in by infrastructure. ## What to verify before you switch anything Four things to confirm with any AI vendor before a single call forwards, drawn from our longer [12-question HIPAA buyer's guide](/blog/hipaa-ai-phone-agent-questions): 1. **A signed BAA.** Not "HIPAA-compliant technology," an actual Business Associate Agreement with your practice. 2. **Real scheduling, not message-taking.** If the AI can't book, reschedule, cancel, and confirm against your actual schedule, you've bought a more articulate voicemail. 3. **Clinical escalation logic.** Who decides what's urgent, and where does an urgent call go at 2 a.m.? The right answer involves your on-call protocols, not a generic script. (For surgical practices, this is the whole game - see [after-hours triage protocols](/blog/after-hours-triage-spine-practices).) 4. **Documentation flow.** Call summaries should land where your team already works - EMR messaging - not a portal nobody checks. ## The 4-week pilot that risks nothing Here's the adoption pattern we see work at surgical practices, and the one we recommend: **Week 1: after-hours only.** Forward nights and weekends to the AI. This is the window where your current coverage is weakest (a message-taking service or voicemail) so the bar is lowest and the upside is highest. Your daytime operation doesn't change at all. **Week 2: listen and tune.** Review the call summaries and recordings with your team each morning. Every practice has quirks - a satellite office, a particular surgeon's post-op routine, an imaging-before-consult rule (we wrote about [orthopedic scheduling rules](/blog/orthopedic-scheduling-injections-global-periods) for a reason). This is the week the agent learns yours. **Week 3: add overflow.** Keep the front desk answering first during business hours, with calls rolling to the AI after 3 to 4 rings instead of going to hold or voicemail. Monday-morning surges stop producing abandoned calls. **Week 4: compare and decide.** Pull the numbers: answer rate, after-hours bookings, messages vs. appointments, and what your team spent their mornings on. Run them against your old answering-service invoice and the [missed-call calculator](/missed-call-calculator). The data makes the decision; nobody has to argue from anecdote. ## What to do about your answering service contract Check two clauses before you start the pilot: the termination notice period (30 to 60 days is typical) and any auto-renewal date. The clean play is to start the AI pilot while the answering service contract runs out its notice period - you pay for one month of overlap and never have a coverage gap. Practices that skip this step end up paying for 2 services for a quarter, which sours the ROI story for no reason. ## The fastest way to evaluate: don't book a meeting You can hear the difference before talking to anyone. Call ClinicFlow's live demo line at (415) 962-4019, pretend you're a patient with a knee injury, and try to get booked. Then call your own practice's after-hours line and compare what happens. If you want that comparison done systematically, request a [free after-hours phone audit](/phone-audit) - we'll call your line the way a patient would and send you the recording and a scorecard. The practices that switch don't switch because AI is impressive. They switch because they heard both calls. `,aM=`--- title: "What Is an AI Front Desk? The 2026 Guide for Surgical Practices" slug: "what-is-an-ai-front-desk" description: "A complete guide to the AI front desk for surgical and orthopedic practices: what it is, how it differs from answering services, AI receptionists, and IVRs, what it can and cannot do, and how to evaluate one." date: "2026-07-19" author: "ClinicFlow Team" heroImage: "/images/blog/what-is-an-ai-front-desk.png" heroAlt: "What is an AI front desk for surgical practices, explained" keywords: "ai front desk, ai front desk for medical practice, ai front desk surgical practice, what is an ai front desk, ai front office healthcare" excerpt: "The category guide: what an AI front desk actually is, where it ends and your staff begins, and how surgical practices should evaluate one in 2026." --- "AI front desk" has become the term of art for a system that does not just answer a medical practice's phone but completes the work the call was about: booking the visit, capturing the insurance, routing the clinical question, documenting all of it. This guide defines the category precisely, separates it from the things it gets confused with, and gives surgical practices a framework for evaluating one. It is written by a vendor, ClinicFlow, and we mark our own perspective where it appears. ## The definition An AI front desk is a voice AI system that handles a medical practice's inbound phone work end to end: answering every call immediately, completing administrative tasks inside the practice's own systems, screening clinical calls against physician-defined rules, and documenting every interaction in the EMR. The operative word is completing. Anything that merely takes a message, routes a call, or captures a lead is something else wearing the label. ## What it is not **Not an answering service.** A traditional medical answering service employs human operators who take messages and page the on-call list, typically billed per minute or per call. It relays; it does not resolve. The [comparison to answering services](/vs-answering-services) comes down to that verb. **Not a generic AI receptionist.** Horizontal AI receptionists serve every small business from dental offices to plumbing companies. They schedule appointments, but they do not know what a global period is, why an injection series has spacing rules, or what radiating leg pain implies about which surgeon should see the patient. The distinction matters most in specialty care, and we wrote a full breakdown in [AI answering service vs. AI receptionist vs. voice agent](/blog/ai-answering-service-vs-ai-receptionist). **Not an IVR or phone tree.** "Press 2 for scheduling" is call routing, not call handling. An AI front desk holds a conversation, tolerates interruptions, and never makes a caller navigate a menu. **Not a replacement for your front-desk staff.** This is the claim that deserves the most skepticism when vendors make it. The AI absorbs phone volume; humans handle the waiting room, the complex cases, and the judgment calls. Practices that treat it as a headcount deletion tend to fail with it. ## The 6 components that make it real 1. **Instant, always-on answering.** Every call, including nights, weekends, and the Monday surge, with concurrency high enough that busy signals stop existing. ClinicFlow handles 50 simultaneous calls; whatever vendor you evaluate, the number should be a specification, not a shrug. 2. **Task completion in your systems.** Appointments created in the EMR with the correct provider and visit type. Insurance captured and queued for eligibility. If staff re-key anything from a portal, you bought a message-taker. 3. **Clinical screening with physician-owned rules.** Every call gets screened against escalation criteria your physicians define. The AI applies rules; it never invents clinical judgment. Our [after-hours triage protocol template](/blog/after-hours-triage-protocol-template) shows what those rules look like written down. 4. **Tiered escalation.** Routine work resolves on the call. Urgent after-hours calls reach the on-call surgeon with a secure summary. ER-criteria symptoms route to 911 guidance. The design question is always what happens when the AI cannot handle it, and the answer must be a structured handoff. 5. **Documentation by default.** Every call becomes a structured EMR record: what was asked, what was done, who was notified, with timestamps. 6. **Hard boundaries.** A healthcare-grade AI front desk never gives medical advice, never approves or denies medication requests, and never discloses test results. Those boundaries should be engineering constraints, not prompt suggestions. Our [Call Library](/calls) documents where the lines sit on each of the 12 call types we handle. ## What it changes operationally The arithmetic is not subtle. Medical practices average roughly a 70% answer rate, meaning 1 in 5 calls or more lands in voicemail at peak. Each missed new-patient call costs $150 to $200 in first-visit revenue before counting surgical downstream value. Front-desk teams lose about 2 hours per employee per day to phone work that follows a script. An AI front desk moves the answer rate to 100%, returns those hours, and turns after-hours from a liability blind spot into covered, documented time. For the model of what that looks like in practice, see [how a 3-location orthopedic group reached 100% answered calls](/customers/sports-medicine-orthopaedic-center), or [run your own numbers](/missed-call-calculator). ## How to evaluate one Three tests separate contenders from decks. First, call the production system unscripted; a vendor without a public demo line is selling a video. Second, make them demonstrate the failure path, not the happy path. Third, run a structured evaluation; we publish a free [27-question RFP checklist](/blog/ai-answering-service-rfp-checklist) covering compliance, clinical safety, integration, operations, and pricing that works on any vendor, including us. For HIPAA specifics, the [compliance breakdown](/blog/hipaa-ai-answering-service-rules) covers BAAs, PHI flow, and the questions vendors dodge. ## Where the category goes next The front desk is where the phone work is today; the same architecture extends naturally to the surrounding workflows: referral intake that calls the patient when the fax arrives, pre-op and post-op outreach calls, and prior authorization automation. That is our roadmap at ClinicFlow, and the honest state of the category is that inbound coverage is mature while outbound and back-office automation are emerging. ## Frequently asked questions **Is an AI front desk HIPAA compliant?** The category can be; specific vendors have to prove it. The tests are a signed BAA, EMR-native PHI flow, and no consumer-grade tools in the data path. **Do patients accept talking to an AI?** Acceptance tracks quality. Systems that handle interruptions and resolve the task keep callers; rigid phone-tree AI loses them. This is measurable in your own answer-rate and abandonment data during a pilot. **How fast can a practice deploy one?** Onboarding is mostly configuration: providers, locations, visit types, routing rules, and escalation criteria. Weeks, not quarters, for a well-built product. **What does it cost?** Healthcare-grade systems price as flat monthly subscriptions; the comparison point is the fully loaded cost of your current answering service plus the revenue you lose to missed calls. [The cost breakdown](/blog/medical-answering-service-cost) walks through the math. ## Related resources - [The Call Library: every call type, handled](/calls) - [The AI answering service RFP checklist](/blog/ai-answering-service-rfp-checklist) - [Best AI phone solutions for orthopedic practices](/blog/best-ai-answering-service-orthopedic-practices) `,sM=`--- title: "Workers' Comp Intake Is Breaking Your Orthopedic Front Desk (Here's the Fix)" slug: "workers-comp-intake-orthopedics" description: "Workers' comp calls are the longest, most error-prone intake in an orthopedic practice: adjusters, authorizations, employer details, attorneys. Here's how AI call handling fixes the workflow." date: "2026-05-28" author: "ClinicFlow Team" heroImage: "/images/blog/workers-comp-intake.png" heroAlt: "Workers' comp intake for orthopedic practices - ClinicFlow" keywords: "workers comp intake orthopedics, workers compensation orthopedic practice, work comp scheduling, occupational injury intake" excerpt: "A work comp call isn't a normal intake call. Claim numbers, adjusters, employer verification, authorization: it's the longest call your front desk takes, and the easiest to get wrong." --- Ask your front desk which calls they dread, and workers' comp intake is near the top of the list. A standard new-patient call takes a few minutes. A work comp call means collecting a claim number, the date of injury, the employer, the carrier, the adjuster's name and phone number, sometimes a nurse case manager, sometimes an attorney - and confirming authorization before the visit is even bookable. Get any of it wrong and the bill doesn't get paid. Get it slow and the injured worker, who is highly motivated and often legally required to be seen quickly, ends up at the occupational clinic down the road. For orthopedic practices, where work injuries are core volume, this is a workflow problem worth solving deliberately. ## Why work comp intake fails on a busy desk Three structural reasons: - **It's long.** A thorough work comp intake takes 2 to 3 times longer than a standard intake. On a slammed Monday morning, that's exactly the call that gets rushed, and rushing is what produces missing claim numbers and unbilled visits. - **It's interruption-prone.** The caller doesn't always have the claim details. The desk says "call us back with the claim number." Many never do - not because the case went away, but because the loop was left open. - **It has a hidden second customer.** The employer and the carrier care about speed-to-appointment. A practice that books work injuries fast becomes the practice the occupational network refers to by default. A slow one quietly falls off the list. ## What good work comp intake looks like The fix isn't a longer script taped to the monitor. It's structure: 1. **Recognize the call type early.** "This is about a work injury" should trigger a different, complete intake path, not the standard one with extra questions bolted on. 2. **Collect everything, every time.** Claim number, date of injury, employer, carrier, adjuster contact, body part, authorization status. A consistent checklist, executed identically at 10 a.m. and 10 p.m. 3. **Book in the same call.** If authorization status allows it, the appointment should exist before the call ends. If something is missing, the follow-up should be systematic, not "we'll call you back." 4. **Document for billing from minute one.** Everything collected should land where your billing team works, complete, structured, and attached to the right patient. ## Where AI call handling changes the economics This is exactly the kind of call AI voice agents are built for. A structured intake with a fixed checklist is a script a machine executes perfectly every time - no rushing on surge days, no skipped fields at closing time, no "call us back" dead ends. With ClinicFlow, a work injury call gets recognized and handled with the full intake path: every field captured, the appointment booked directly on the schedule, and a complete summary routed to your team via EMR messaging. At any hour - injured workers don't only call between 9 and 5, and as with [every after-hours call](/blog/cost-of-missed-calls-surgical-practice), the practice that answers first wins the case. The downstream effect goes past the front desk: complete intake means cleaner work comp billing, fewer unpaid visits, and a faster speed-to-appointment number - the metric that builds your reputation with employers and carriers feeding you cases. ## The compounding referral effect Work comp is a network business. Adjusters, case managers, and occupational health clinics route injuries to practices that are easy to work with. Every fast, clean intake strengthens the loop; every dropped call weakens it. It's the same dynamic we described with [physician referral leakage](/blog/orthopedic-referral-leakage) - the quiet loyalty of the people who send you patients is built one well-handled call at a time. *Want to hear how ClinicFlow handles a work comp intake end to end? [Book a 15-minute demo](https://clinicflowai.com/demo).* `;function lM(e){const t=/^---\s*\n([\s\S]*?)\n---\s*\n?([\s\S]*)$/.exec(e);if(!t)return{data:{},body:e};const[,n,r]=t,i={};for(const o of n.split(` `)){if(!o.trim()||o.trim().startsWith("#"))continue;const a=o.indexOf(":");if(a===-1)continue;const s=o.slice(0,a).trim();let c=o.slice(a+1).trim();(c.startsWith('"')&&c.endsWith('"')||c.startsWith("'")&&c.endsWith("'"))&&(c=c.slice(1,-1)),i[s]=c}return{data:i,body:r}}function cM(e){const t=e.trim().split(/\s+/).length;return`${Math.max(1,Math.round(t/200))} min read`}function uM(e){const{data:t,body:n}=lM(e);return{title:t.title??"Untitled",slug:t.slug??"",description:t.description??"",date:t.date??"",author:t.author??"ClinicFlow",heroImage:t.heroImage??"/images/main-thumbnail.jpg",heroAlt:t.heroAlt??t.title??"ClinicFlow",keywords:t.keywords??"",excerpt:t.excerpt??t.description??"",readingTime:t.readingTime||cM(n),body:n}}const dM=Object.assign({"../content/blog/after-hours-call-coverage-options.md":MF,"../content/blog/after-hours-triage-protocol-template.md":OF,"../content/blog/after-hours-triage-spine-practices.md":DF,"../content/blog/ai-answering-service-reddit.md":LF,"../content/blog/ai-answering-service-rfp-checklist.md":zF,"../content/blog/ai-answering-service-vs-ai-receptionist.md":BF,"../content/blog/ai-receptionist-orthopedic-practices.md":HF,"../content/blog/ai-receptionist-surgical-practices.md":$F,"../content/blog/assort-health-alternatives-orthopedic.md":WF,"../content/blog/best-ai-answering-service-orthopedic-practices.md":VF,"../content/blog/best-ai-answering-service-pain-management.md":qF,"../content/blog/best-ai-answering-service-spine-practices.md":UF,"../content/blog/best-ai-answering-service-sports-medicine.md":YF,"../content/blog/best-ai-receptionist-surgical-practices.md":QF,"../content/blog/cost-of-missed-calls-surgical-practice.md":GF,"../content/blog/front-desk-drowning-cost.md":KF,"../content/blog/hipaa-ai-answering-service-rules.md":ZF,"../content/blog/hipaa-ai-phone-agent-questions.md":XF,"../content/blog/medical-answering-service-cost.md":JF,"../content/blog/medical-office-phone-scripts.md":eM,"../content/blog/orthopedic-phone-triage-red-flags.md":tM,"../content/blog/orthopedic-referral-leakage.md":nM,"../content/blog/orthopedic-scheduling-injections-global-periods.md":rM,"../content/blog/prior-authorization-automation-orthopedics.md":iM,"../content/blog/replace-medical-answering-service-with-ai.md":oM,"../content/blog/what-is-an-ai-front-desk.md":aM,"../content/blog/workers-comp-intake-orthopedics.md":sM}),g2=Object.values(dM).map(uM).filter(e=>e.slug).sort((e,t)=>e.datet.slug===e)}function Mf(e){if(!e)return"";const t=new Date(e+"T00:00:00");return isNaN(t.getTime())?e:t.toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric"})}const Xa="https://clinicflowai.com",fM=()=>{const e=y2(),t="ClinicFlow Blog — Voice AI for Surgical & Orthopedic Practices",n="Insights on AI phone answering, after-hours call handling, and recovered revenue for orthopedic, spine, and surgical practices.",r={"@context":"https://schema.org","@type":"Blog",name:"ClinicFlow Blog",url:`${Xa}/blog`,blogPost:e.map(i=>({"@type":"BlogPosting",headline:i.title,url:`${Xa}/blog/${i.slug}`,datePublished:i.date,author:{"@type":"Person",name:i.author}}))};return l.jsxs("div",{className:"min-h-screen",children:[l.jsxs(Kn,{children:[l.jsx("title",{children:t}),l.jsx("meta",{name:"description",content:n}),l.jsx("link",{rel:"canonical",href:`${Xa}/blog`}),l.jsx("meta",{property:"og:type",content:"website"}),l.jsx("meta",{property:"og:title",content:t}),l.jsx("meta",{property:"og:description",content:n}),l.jsx("meta",{property:"og:url",content:`${Xa}/blog`}),l.jsx("meta",{property:"og:image",content:`${Xa}/images/main-thumbnail.jpg`}),l.jsx("meta",{name:"twitter:card",content:"summary_large_image"}),l.jsx("meta",{name:"twitter:title",content:t}),l.jsx("meta",{name:"twitter:description",content:n}),l.jsx("script",{type:"application/ld+json",children:JSON.stringify(r)})]}),l.jsx(fn,{}),l.jsx("header",{className:"px-4 sm:px-14 pt-16 pb-14",style:{background:"var(--gradient-hero)",fontFamily:"var(--font-sans)"},children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:840},children:[l.jsx("p",{className:"text-white/70 font-semibold mb-3",style:{fontFamily:"var(--font-mono)",fontSize:13,letterSpacing:"0.08em",textTransform:"uppercase"},children:"ClinicFlow Blog"}),l.jsx("h1",{className:"text-white font-bold",style:{fontSize:"clamp(30px, 5vw, 46px)",lineHeight:1.1,letterSpacing:-.5},children:"Voice AI for surgical & orthopedic practices"}),l.jsx("p",{className:"text-white/80 mt-4",style:{fontSize:18,maxWidth:620},children:n})]})}),l.jsx("main",{className:"px-4 sm:px-14 py-12 sm:py-16",style:{background:"var(--ink-25)",fontFamily:"var(--font-sans)"},children:l.jsx("div",{className:"mx-auto grid gap-7 sm:grid-cols-2",style:{maxWidth:1280},children:e.map(i=>l.jsxs(Me,{to:`/blog/${i.slug}`,onClick:()=>window.scrollTo(0,0),className:"group block no-underline bg-white overflow-hidden",style:{borderRadius:16,border:"1px solid var(--ink-100)",boxShadow:"var(--shadow-md)"},children:[l.jsx("div",{className:"overflow-hidden",style:{aspectRatio:"1200 / 630",background:"var(--gradient-hero)"},children:l.jsx("img",{src:i.heroImage,alt:i.heroAlt,loading:"lazy",className:"w-full h-full object-cover transition-transform duration-300 group-hover:scale-[1.03]"})}),l.jsxs("div",{className:"p-6",children:[l.jsxs("div",{className:"flex items-center gap-2 mb-3",style:{fontFamily:"var(--font-mono)",fontSize:12,color:"var(--ink-400)"},children:[l.jsx("span",{children:Mf(i.date)}),l.jsx("span",{children:"·"}),l.jsx("span",{children:i.readingTime})]}),l.jsx("h2",{className:"font-semibold mb-2 transition-colors",style:{fontSize:20,lineHeight:1.25,color:"var(--ink-900)",letterSpacing:-.3},children:i.title}),l.jsx("p",{style:{color:"var(--ink-500)",fontSize:15,lineHeight:1.55},children:i.excerpt}),l.jsxs("span",{className:"inline-flex items-center gap-1.5 mt-4 font-semibold",style:{color:"var(--coral-500)",fontSize:14.5},children:["Read article",l.jsxs("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.2",strokeLinecap:"round",strokeLinejoin:"round",children:[l.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"}),l.jsx("polyline",{points:"12 5 19 12 12 19"})]})]})]})]},i.slug))})}),l.jsx(pn,{})]})};function pM(e,t){const n={};return(e[e.length-1]===""?[...e,""]:e).join((n.padRight?" ":"")+","+(n.padLeft===!1?"":" ")).trim()}const mM=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,gM=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,yM={};function zv(e,t){return(yM.jsx?gM:mM).test(e)}const vM=/[ \t\n\f\r]/g;function wM(e){return typeof e=="object"?e.type==="text"?Bv(e.value):!1:Bv(e)}function Bv(e){return e.replace(vM,"")===""}class dl{constructor(t,n,r){this.normal=n,this.property=t,r&&(this.space=r)}}dl.prototype.normal={};dl.prototype.property={};dl.prototype.space=void 0;function v2(e,t){const n={},r={};for(const i of e)Object.assign(n,i.property),Object.assign(r,i.normal);return new dl(n,r,t)}function Of(e){return e.toLowerCase()}class Xt{constructor(t,n){this.attribute=n,this.property=t}}Xt.prototype.attribute="";Xt.prototype.booleanish=!1;Xt.prototype.boolean=!1;Xt.prototype.commaOrSpaceSeparated=!1;Xt.prototype.commaSeparated=!1;Xt.prototype.defined=!1;Xt.prototype.mustUseProperty=!1;Xt.prototype.number=!1;Xt.prototype.overloadedBoolean=!1;Xt.prototype.property="";Xt.prototype.spaceSeparated=!1;Xt.prototype.space=void 0;let xM=0;const de=bo(),lt=bo(),Df=bo(),Y=bo(),ze=bo(),to=bo(),tn=bo();function bo(){return 2**++xM}const Lf=Object.freeze(Object.defineProperty({__proto__:null,boolean:de,booleanish:lt,commaOrSpaceSeparated:tn,commaSeparated:to,number:Y,overloadedBoolean:Df,spaceSeparated:ze},Symbol.toStringTag,{value:"Module"})),qd=Object.keys(Lf);class jm extends Xt{constructor(t,n,r,i){let o=-1;if(super(t,n),Hv(this,"space",i),typeof r=="number")for(;++o4&&n.slice(0,4)==="data"&&AM.test(t)){if(t.charAt(4)==="-"){const o=t.slice(5).replace($v,EM);r="data"+o.charAt(0).toUpperCase()+o.slice(1)}else{const o=t.slice(4);if(!$v.test(o)){let a=o.replace(CM,jM);a.charAt(0)!=="-"&&(a="-"+a),t="data"+a}}i=jm}return new i(r,t)}function jM(e){return"-"+e.toLowerCase()}function EM(e){return e.charAt(1).toUpperCase()}const IM=v2([w2,bM,k2,S2,C2],"html"),Em=v2([w2,kM,k2,S2,C2],"svg");function NM(e){return e.join(" ").trim()}var Im={},Wv=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,_M=/\n/g,PM=/^\s*/,RM=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,FM=/^:\s*/,MM=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,OM=/^[;\s]*/,DM=/^\s+|\s+$/g,LM=` `,Vv="/",qv="*",Hi="",zM="comment",BM="declaration";function HM(e,t){if(typeof e!="string")throw new TypeError("First argument must be a string");if(!e)return[];t=t||{};var n=1,r=1;function i(v){var m=v.match(_M);m&&(n+=m.length);var b=v.lastIndexOf(LM);r=~b?v.length-b:r+v.length}function o(){var v={line:n,column:r};return function(m){return m.position=new a(v),u(),m}}function a(v){this.start=v,this.end={line:n,column:r},this.source=t.source}a.prototype.content=e;function s(v){var m=new Error(t.source+":"+n+":"+r+": "+v);if(m.reason=v,m.filename=t.source,m.line=n,m.column=r,m.source=e,!t.silent)throw m}function c(v){var m=v.exec(e);if(m){var b=m[0];return i(b),e=e.slice(b.length),m}}function u(){c(PM)}function d(v){var m;for(v=v||[];m=h();)m!==!1&&v.push(m);return v}function h(){var v=o();if(!(Vv!=e.charAt(0)||qv!=e.charAt(1))){for(var m=2;Hi!=e.charAt(m)&&(qv!=e.charAt(m)||Vv!=e.charAt(m+1));)++m;if(m+=2,Hi===e.charAt(m-1))return s("End of comment missing");var b=e.slice(2,m-2);return r+=2,i(b),e=e.slice(m),r+=2,v({type:zM,comment:b})}}function p(){var v=o(),m=c(RM);if(m){if(h(),!c(FM))return s("property missing ':'");var b=c(MM),g=v({type:BM,property:Uv(m[0].replace(Wv,Hi)),value:b?Uv(b[0].replace(Wv,Hi)):Hi});return c(OM),g}}function f(){var v=[];d(v);for(var m;m=p();)m!==!1&&(v.push(m),d(v));return v}return u(),f()}function Uv(e){return e?e.replace(DM,Hi):Hi}var $M=HM,WM=yc&&yc.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Im,"__esModule",{value:!0});Im.default=qM;const VM=WM($M);function qM(e,t){let n=null;if(!e||typeof e!="string")return n;const r=(0,VM.default)(e),i=typeof t=="function";return r.forEach(o=>{if(o.type!=="declaration")return;const{property:a,value:s}=o;i?t(a,s,o):s&&(n=n||{},n[a]=s)}),n}var Vu={};Object.defineProperty(Vu,"__esModule",{value:!0});Vu.camelCase=void 0;var UM=/^--[a-zA-Z0-9_-]+$/,YM=/-([a-z])/g,QM=/^[^-]+$/,GM=/^-(webkit|moz|ms|o|khtml)-/,KM=/^-(ms)-/,ZM=function(e){return!e||QM.test(e)||UM.test(e)},XM=function(e,t){return t.toUpperCase()},Yv=function(e,t){return"".concat(t,"-")},JM=function(e,t){return t===void 0&&(t={}),ZM(e)?e:(e=e.toLowerCase(),t.reactCompat?e=e.replace(KM,Yv):e=e.replace(GM,Yv),e.replace(YM,XM))};Vu.camelCase=JM;var eO=yc&&yc.__importDefault||function(e){return e&&e.__esModule?e:{default:e}},tO=eO(Im),nO=Vu;function zf(e,t){var n={};return!e||typeof e!="string"||(0,tO.default)(e,function(r,i){r&&i&&(n[(0,nO.camelCase)(r,t)]=i)}),n}zf.default=zf;var rO=zf;const iO=po(rO),A2=T2("end"),Nm=T2("start");function T2(e){return t;function t(n){const r=n&&n.position&&n.position[e]||{};if(typeof r.line=="number"&&r.line>0&&typeof r.column=="number"&&r.column>0)return{line:r.line,column:r.column,offset:typeof r.offset=="number"&&r.offset>-1?r.offset:void 0}}}function oO(e){const t=Nm(e),n=A2(e);if(t&&n)return{start:t,end:n}}function xs(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?Qv(e.position):"start"in e||"end"in e?Qv(e):"line"in e||"column"in e?Bf(e):""}function Bf(e){return Gv(e&&e.line)+":"+Gv(e&&e.column)}function Qv(e){return Bf(e&&e.start)+"-"+Bf(e&&e.end)}function Gv(e){return e&&typeof e=="number"?e:1}class Ft extends Error{constructor(t,n,r){super(),typeof n=="string"&&(r=n,n=void 0);let i="",o={},a=!1;if(n&&("line"in n&&"column"in n?o={place:n}:"start"in n&&"end"in n?o={place:n}:"type"in n?o={ancestors:[n],place:n.position}:o={...n}),typeof t=="string"?i=t:!o.cause&&t&&(a=!0,i=t.message,o.cause=t),!o.ruleId&&!o.source&&typeof r=="string"){const c=r.indexOf(":");c===-1?o.ruleId=r:(o.source=r.slice(0,c),o.ruleId=r.slice(c+1))}if(!o.place&&o.ancestors&&o.ancestors){const c=o.ancestors[o.ancestors.length-1];c&&(o.place=c.position)}const s=o.place&&"start"in o.place?o.place.start:o.place;this.ancestors=o.ancestors||void 0,this.cause=o.cause||void 0,this.column=s?s.column:void 0,this.fatal=void 0,this.file="",this.message=i,this.line=s?s.line:void 0,this.name=xs(o.place)||"1:1",this.place=o.place||void 0,this.reason=this.message,this.ruleId=o.ruleId||void 0,this.source=o.source||void 0,this.stack=a&&o.cause&&typeof o.cause.stack=="string"?o.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}Ft.prototype.file="";Ft.prototype.name="";Ft.prototype.reason="";Ft.prototype.message="";Ft.prototype.stack="";Ft.prototype.column=void 0;Ft.prototype.line=void 0;Ft.prototype.ancestors=void 0;Ft.prototype.cause=void 0;Ft.prototype.fatal=void 0;Ft.prototype.place=void 0;Ft.prototype.ruleId=void 0;Ft.prototype.source=void 0;const _m={}.hasOwnProperty,aO=new Map,sO=/[A-Z]/g,lO=new Set(["table","tbody","thead","tfoot","tr"]),cO=new Set(["td","th"]),j2="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function uO(e,t){if(!t||t.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const n=t.filePath||void 0;let r;if(t.development){if(typeof t.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");r=vO(n,t.jsxDEV)}else{if(typeof t.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof t.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");r=yO(n,t.jsx,t.jsxs)}const i={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:r,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:n,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space==="svg"?Em:IM,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},o=E2(i,e,void 0);return o&&typeof o!="string"?o:i.create(e,i.Fragment,{children:o||void 0},void 0)}function E2(e,t,n){if(t.type==="element")return dO(e,t,n);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return hO(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return pO(e,t,n);if(t.type==="mdxjsEsm")return fO(e,t);if(t.type==="root")return mO(e,t,n);if(t.type==="text")return gO(e,t)}function dO(e,t,n){const r=e.schema;let i=r;t.tagName.toLowerCase()==="svg"&&r.space==="html"&&(i=Em,e.schema=i),e.ancestors.push(t);const o=N2(e,t.tagName,!1),a=wO(e,t);let s=Rm(e,t);return lO.has(t.tagName)&&(s=s.filter(function(c){return typeof c=="string"?!wM(c):!0})),I2(e,a,o,t),Pm(a,s),e.ancestors.pop(),e.schema=r,e.create(t,o,a,n)}function hO(e,t){if(t.data&&t.data.estree&&e.evaluater){const r=t.data.estree.body[0];return r.type,e.evaluater.evaluateExpression(r.expression)}Ks(e,t.position)}function fO(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);Ks(e,t.position)}function pO(e,t,n){const r=e.schema;let i=r;t.name==="svg"&&r.space==="html"&&(i=Em,e.schema=i),e.ancestors.push(t);const o=t.name===null?e.Fragment:N2(e,t.name,!0),a=xO(e,t),s=Rm(e,t);return I2(e,a,o,t),Pm(a,s),e.ancestors.pop(),e.schema=r,e.create(t,o,a,n)}function mO(e,t,n){const r={};return Pm(r,Rm(e,t)),e.create(t,e.Fragment,r,n)}function gO(e,t){return t.value}function I2(e,t,n,r){typeof n!="string"&&n!==e.Fragment&&e.passNode&&(t.node=r)}function Pm(e,t){if(t.length>0){const n=t.length>1?t:t[0];n&&(e.children=n)}}function yO(e,t,n){return r;function r(i,o,a,s){const u=Array.isArray(a.children)?n:t;return s?u(o,a,s):u(o,a)}}function vO(e,t){return n;function n(r,i,o,a){const s=Array.isArray(o.children),c=Nm(r);return t(i,o,a,s,{columnNumber:c?c.column-1:void 0,fileName:e,lineNumber:c?c.line:void 0},void 0)}}function wO(e,t){const n={};let r,i;for(i in t.properties)if(i!=="children"&&_m.call(t.properties,i)){const o=bO(e,i,t.properties[i]);if(o){const[a,s]=o;e.tableCellAlignToStyle&&a==="align"&&typeof s=="string"&&cO.has(t.tagName)?r=s:n[a]=s}}if(r){const o=n.style||(n.style={});o[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=r}return n}function xO(e,t){const n={};for(const r of t.attributes)if(r.type==="mdxJsxExpressionAttribute")if(r.data&&r.data.estree&&e.evaluater){const o=r.data.estree.body[0];o.type;const a=o.expression;a.type;const s=a.properties[0];s.type,Object.assign(n,e.evaluater.evaluateExpression(s.argument))}else Ks(e,t.position);else{const i=r.name;let o;if(r.value&&typeof r.value=="object")if(r.value.data&&r.value.data.estree&&e.evaluater){const s=r.value.data.estree.body[0];s.type,o=e.evaluater.evaluateExpression(s.expression)}else Ks(e,t.position);else o=r.value===null?!0:r.value;n[i]=o}return n}function Rm(e,t){const n=[];let r=-1;const i=e.passKeys?new Map:aO;for(;++ri?0:i+t:t=t>i?i:t,n=n>0?n:0,r.length<1e4)a=Array.from(r),a.unshift(t,n),e.splice(...a);else for(n&&e.splice(t,n);o0?(ln(e,e.length,0,t),e):t}const Xv={}.hasOwnProperty;function P2(e){const t={};let n=-1;for(;++n13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||(n&65535)===65535||(n&65535)===65534||n>1114111?"�":String.fromCodePoint(n)}function qn(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const zt=Ri(/[A-Za-z]/),Pt=Ri(/[\dA-Za-z]/),NO=Ri(/[#-'*+\--9=?A-Z^-~]/);function ou(e){return e!==null&&(e<32||e===127)}const Hf=Ri(/\d/),_O=Ri(/[\dA-Fa-f]/),PO=Ri(/[!-/:-@[-`{-~]/);function ce(e){return e!==null&&e<-2}function Be(e){return e!==null&&(e<0||e===32)}function Ae(e){return e===-2||e===-1||e===32}const qu=Ri(new RegExp("\\p{P}|\\p{S}","u")),fo=Ri(/\s/);function Ri(e){return t;function t(n){return n!==null&&n>-1&&e.test(String.fromCharCode(n))}}function Oa(e){const t=[];let n=-1,r=0,i=0;for(;++n55295&&o<57344){const s=e.charCodeAt(n+1);o<56320&&s>56319&&s<57344?(a=String.fromCharCode(o,s),i=1):a="�"}else a=String.fromCharCode(o);a&&(t.push(e.slice(r,n),encodeURIComponent(a)),r=n+i+1,a=""),i&&(n+=i,i=0)}return t.join("")+e.slice(r)}function Ie(e,t,n,r){const i=r?r-1:Number.POSITIVE_INFINITY;let o=0;return a;function a(c){return Ae(c)?(e.enter(n),s(c)):t(c)}function s(c){return Ae(c)&&o++a))return;const I=t.events.length;let F=I,D,j;for(;F--;)if(t.events[F][0]==="exit"&&t.events[F][1].type==="chunkFlow"){if(D){j=t.events[F][1].end;break}D=!0}for(g(r),C=I;Cw;){const A=n[k];t.containerState=A[1],A[0].exit.call(t,e)}n.length=w}function y(){i.write([null]),o=void 0,i=void 0,t.containerState._closeFlow=void 0}}function DO(e,t,n){return Ie(e,e.attempt(this.parser.constructs.document,t,n),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Ca(e){if(e===null||Be(e)||fo(e))return 1;if(qu(e))return 2}function Uu(e,t,n){const r=[];let i=-1;for(;++i1&&e[n][1].end.offset-e[n][1].start.offset>1?2:1;const h={...e[r][1].end},p={...e[n][1].start};ew(h,-c),ew(p,c),a={type:c>1?"strongSequence":"emphasisSequence",start:h,end:{...e[r][1].end}},s={type:c>1?"strongSequence":"emphasisSequence",start:{...e[n][1].start},end:p},o={type:c>1?"strongText":"emphasisText",start:{...e[r][1].end},end:{...e[n][1].start}},i={type:c>1?"strong":"emphasis",start:{...a.start},end:{...s.end}},e[r][1].end={...a.start},e[n][1].start={...s.end},u=[],e[r][1].end.offset-e[r][1].start.offset&&(u=kn(u,[["enter",e[r][1],t],["exit",e[r][1],t]])),u=kn(u,[["enter",i,t],["enter",a,t],["exit",a,t],["enter",o,t]]),u=kn(u,Uu(t.parser.constructs.insideSpan.null,e.slice(r+1,n),t)),u=kn(u,[["exit",o,t],["enter",s,t],["exit",s,t],["exit",i,t]]),e[n][1].end.offset-e[n][1].start.offset?(d=2,u=kn(u,[["enter",e[n][1],t],["exit",e[n][1],t]])):d=0,ln(e,r-1,n-r+3,u),n=r+u.length-d-2;break}}for(n=-1;++n0&&Ae(C)?Ie(e,y,"linePrefix",o+1)(C):y(C)}function y(C){return C===null||ce(C)?e.check(tw,m,k)(C):(e.enter("codeFlowValue"),w(C))}function w(C){return C===null||ce(C)?(e.exit("codeFlowValue"),y(C)):(e.consume(C),w)}function k(C){return e.exit("codeFenced"),t(C)}function A(C,I,F){let D=0;return j;function j(V){return C.enter("lineEnding"),C.consume(V),C.exit("lineEnding"),R}function R(V){return C.enter("codeFencedFence"),Ae(V)?Ie(C,_,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(V):_(V)}function _(V){return V===s?(C.enter("codeFencedFenceSequence"),$(V)):F(V)}function $(V){return V===s?(D++,C.consume(V),$):D>=a?(C.exit("codeFencedFenceSequence"),Ae(V)?Ie(C,O,"whitespace")(V):O(V)):F(V)}function O(V){return V===null||ce(V)?(C.exit("codeFencedFence"),I(V)):F(V)}}}function GO(e,t,n){const r=this;return i;function i(a){return a===null?n(a):(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),o)}function o(a){return r.parser.lazy[r.now().line]?n(a):t(a)}}const Yd={name:"codeIndented",tokenize:ZO},KO={partial:!0,tokenize:XO};function ZO(e,t,n){const r=this;return i;function i(u){return e.enter("codeIndented"),Ie(e,o,"linePrefix",5)(u)}function o(u){const d=r.events[r.events.length-1];return d&&d[1].type==="linePrefix"&&d[2].sliceSerialize(d[1],!0).length>=4?a(u):n(u)}function a(u){return u===null?c(u):ce(u)?e.attempt(KO,a,c)(u):(e.enter("codeFlowValue"),s(u))}function s(u){return u===null||ce(u)?(e.exit("codeFlowValue"),a(u)):(e.consume(u),s)}function c(u){return e.exit("codeIndented"),t(u)}}function XO(e,t,n){const r=this;return i;function i(a){return r.parser.lazy[r.now().line]?n(a):ce(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),i):Ie(e,o,"linePrefix",5)(a)}function o(a){const s=r.events[r.events.length-1];return s&&s[1].type==="linePrefix"&&s[2].sliceSerialize(s[1],!0).length>=4?t(a):ce(a)?i(a):n(a)}}const JO={name:"codeText",previous:tD,resolve:eD,tokenize:nD};function eD(e){let t=e.length-4,n=3,r,i;if((e[n][1].type==="lineEnding"||e[n][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(r=n;++r=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return tthis.left.length?this.right.slice(this.right.length-r+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-r+this.left.length).reverse())}splice(t,n,r){const i=n||0;this.setCursor(Math.trunc(t));const o=this.right.splice(this.right.length-i,Number.POSITIVE_INFINITY);return r&&Ja(this.left,r),o.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),Ja(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),Ja(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t=4?t(a):e.interrupt(r.parser.constructs.flow,n,t)(a)}}function L2(e,t,n,r,i,o,a,s,c){const u=c||Number.POSITIVE_INFINITY;let d=0;return h;function h(g){return g===60?(e.enter(r),e.enter(i),e.enter(o),e.consume(g),e.exit(o),p):g===null||g===32||g===41||ou(g)?n(g):(e.enter(r),e.enter(a),e.enter(s),e.enter("chunkString",{contentType:"string"}),m(g))}function p(g){return g===62?(e.enter(o),e.consume(g),e.exit(o),e.exit(i),e.exit(r),t):(e.enter(s),e.enter("chunkString",{contentType:"string"}),f(g))}function f(g){return g===62?(e.exit("chunkString"),e.exit(s),p(g)):g===null||g===60||ce(g)?n(g):(e.consume(g),g===92?v:f)}function v(g){return g===60||g===62||g===92?(e.consume(g),f):f(g)}function m(g){return!d&&(g===null||g===41||Be(g))?(e.exit("chunkString"),e.exit(s),e.exit(a),e.exit(r),t(g)):d999||f===null||f===91||f===93&&!c||f===94&&!s&&"_hiddenFootnoteSupport"in a.parser.constructs?n(f):f===93?(e.exit(o),e.enter(i),e.consume(f),e.exit(i),e.exit(r),t):ce(f)?(e.enter("lineEnding"),e.consume(f),e.exit("lineEnding"),d):(e.enter("chunkString",{contentType:"string"}),h(f))}function h(f){return f===null||f===91||f===93||ce(f)||s++>999?(e.exit("chunkString"),d(f)):(e.consume(f),c||(c=!Ae(f)),f===92?p:h)}function p(f){return f===91||f===92||f===93?(e.consume(f),s++,h):h(f)}}function B2(e,t,n,r,i,o){let a;return s;function s(p){return p===34||p===39||p===40?(e.enter(r),e.enter(i),e.consume(p),e.exit(i),a=p===40?41:p,c):n(p)}function c(p){return p===a?(e.enter(i),e.consume(p),e.exit(i),e.exit(r),t):(e.enter(o),u(p))}function u(p){return p===a?(e.exit(o),c(a)):p===null?n(p):ce(p)?(e.enter("lineEnding"),e.consume(p),e.exit("lineEnding"),Ie(e,u,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),d(p))}function d(p){return p===a||p===null||ce(p)?(e.exit("chunkString"),u(p)):(e.consume(p),p===92?h:d)}function h(p){return p===a||p===92?(e.consume(p),d):d(p)}}function bs(e,t){let n;return r;function r(i){return ce(i)?(e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),n=!0,r):Ae(i)?Ie(e,r,n?"linePrefix":"lineSuffix")(i):t(i)}}const uD={name:"definition",tokenize:hD},dD={partial:!0,tokenize:fD};function hD(e,t,n){const r=this;let i;return o;function o(f){return e.enter("definition"),a(f)}function a(f){return z2.call(r,e,s,n,"definitionLabel","definitionLabelMarker","definitionLabelString")(f)}function s(f){return i=qn(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),f===58?(e.enter("definitionMarker"),e.consume(f),e.exit("definitionMarker"),c):n(f)}function c(f){return Be(f)?bs(e,u)(f):u(f)}function u(f){return L2(e,d,n,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(f)}function d(f){return e.attempt(dD,h,h)(f)}function h(f){return Ae(f)?Ie(e,p,"whitespace")(f):p(f)}function p(f){return f===null||ce(f)?(e.exit("definition"),r.parser.defined.push(i),t(f)):n(f)}}function fD(e,t,n){return r;function r(s){return Be(s)?bs(e,i)(s):n(s)}function i(s){return B2(e,o,n,"definitionTitle","definitionTitleMarker","definitionTitleString")(s)}function o(s){return Ae(s)?Ie(e,a,"whitespace")(s):a(s)}function a(s){return s===null||ce(s)?t(s):n(s)}}const pD={name:"hardBreakEscape",tokenize:mD};function mD(e,t,n){return r;function r(o){return e.enter("hardBreakEscape"),e.consume(o),i}function i(o){return ce(o)?(e.exit("hardBreakEscape"),t(o)):n(o)}}const gD={name:"headingAtx",resolve:yD,tokenize:vD};function yD(e,t){let n=e.length-2,r=3,i,o;return e[r][1].type==="whitespace"&&(r+=2),n-2>r&&e[n][1].type==="whitespace"&&(n-=2),e[n][1].type==="atxHeadingSequence"&&(r===n-1||n-4>r&&e[n-2][1].type==="whitespace")&&(n-=r+1===n?2:4),n>r&&(i={type:"atxHeadingText",start:e[r][1].start,end:e[n][1].end},o={type:"chunkText",start:e[r][1].start,end:e[n][1].end,contentType:"text"},ln(e,r,n-r+1,[["enter",i,t],["enter",o,t],["exit",o,t],["exit",i,t]])),e}function vD(e,t,n){let r=0;return i;function i(d){return e.enter("atxHeading"),o(d)}function o(d){return e.enter("atxHeadingSequence"),a(d)}function a(d){return d===35&&r++<6?(e.consume(d),a):d===null||Be(d)?(e.exit("atxHeadingSequence"),s(d)):n(d)}function s(d){return d===35?(e.enter("atxHeadingSequence"),c(d)):d===null||ce(d)?(e.exit("atxHeading"),t(d)):Ae(d)?Ie(e,s,"whitespace")(d):(e.enter("atxHeadingText"),u(d))}function c(d){return d===35?(e.consume(d),c):(e.exit("atxHeadingSequence"),s(d))}function u(d){return d===null||d===35||Be(d)?(e.exit("atxHeadingText"),s(d)):(e.consume(d),u)}}const wD=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],rw=["pre","script","style","textarea"],xD={concrete:!0,name:"htmlFlow",resolveTo:SD,tokenize:CD},bD={partial:!0,tokenize:TD},kD={partial:!0,tokenize:AD};function SD(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function CD(e,t,n){const r=this;let i,o,a,s,c;return u;function u(T){return d(T)}function d(T){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(T),h}function h(T){return T===33?(e.consume(T),p):T===47?(e.consume(T),o=!0,m):T===63?(e.consume(T),i=3,r.interrupt?t:S):zt(T)?(e.consume(T),a=String.fromCharCode(T),b):n(T)}function p(T){return T===45?(e.consume(T),i=2,f):T===91?(e.consume(T),i=5,s=0,v):zt(T)?(e.consume(T),i=4,r.interrupt?t:S):n(T)}function f(T){return T===45?(e.consume(T),r.interrupt?t:S):n(T)}function v(T){const le="CDATA[";return T===le.charCodeAt(s++)?(e.consume(T),s===le.length?r.interrupt?t:_:v):n(T)}function m(T){return zt(T)?(e.consume(T),a=String.fromCharCode(T),b):n(T)}function b(T){if(T===null||T===47||T===62||Be(T)){const le=T===47,Ee=a.toLowerCase();return!le&&!o&&rw.includes(Ee)?(i=1,r.interrupt?t(T):_(T)):wD.includes(a.toLowerCase())?(i=6,le?(e.consume(T),g):r.interrupt?t(T):_(T)):(i=7,r.interrupt&&!r.parser.lazy[r.now().line]?n(T):o?y(T):w(T))}return T===45||Pt(T)?(e.consume(T),a+=String.fromCharCode(T),b):n(T)}function g(T){return T===62?(e.consume(T),r.interrupt?t:_):n(T)}function y(T){return Ae(T)?(e.consume(T),y):j(T)}function w(T){return T===47?(e.consume(T),j):T===58||T===95||zt(T)?(e.consume(T),k):Ae(T)?(e.consume(T),w):j(T)}function k(T){return T===45||T===46||T===58||T===95||Pt(T)?(e.consume(T),k):A(T)}function A(T){return T===61?(e.consume(T),C):Ae(T)?(e.consume(T),A):w(T)}function C(T){return T===null||T===60||T===61||T===62||T===96?n(T):T===34||T===39?(e.consume(T),c=T,I):Ae(T)?(e.consume(T),C):F(T)}function I(T){return T===c?(e.consume(T),c=null,D):T===null||ce(T)?n(T):(e.consume(T),I)}function F(T){return T===null||T===34||T===39||T===47||T===60||T===61||T===62||T===96||Be(T)?A(T):(e.consume(T),F)}function D(T){return T===47||T===62||Ae(T)?w(T):n(T)}function j(T){return T===62?(e.consume(T),R):n(T)}function R(T){return T===null||ce(T)?_(T):Ae(T)?(e.consume(T),R):n(T)}function _(T){return T===45&&i===2?(e.consume(T),U):T===60&&i===1?(e.consume(T),K):T===62&&i===4?(e.consume(T),oe):T===63&&i===3?(e.consume(T),S):T===93&&i===5?(e.consume(T),L):ce(T)&&(i===6||i===7)?(e.exit("htmlFlowData"),e.check(bD,ne,$)(T)):T===null||ce(T)?(e.exit("htmlFlowData"),$(T)):(e.consume(T),_)}function $(T){return e.check(kD,O,ne)(T)}function O(T){return e.enter("lineEnding"),e.consume(T),e.exit("lineEnding"),V}function V(T){return T===null||ce(T)?$(T):(e.enter("htmlFlowData"),_(T))}function U(T){return T===45?(e.consume(T),S):_(T)}function K(T){return T===47?(e.consume(T),a="",M):_(T)}function M(T){if(T===62){const le=a.toLowerCase();return rw.includes(le)?(e.consume(T),oe):_(T)}return zt(T)&&a.length<8?(e.consume(T),a+=String.fromCharCode(T),M):_(T)}function L(T){return T===93?(e.consume(T),S):_(T)}function S(T){return T===62?(e.consume(T),oe):T===45&&i===2?(e.consume(T),S):_(T)}function oe(T){return T===null||ce(T)?(e.exit("htmlFlowData"),ne(T)):(e.consume(T),oe)}function ne(T){return e.exit("htmlFlow"),t(T)}}function AD(e,t,n){const r=this;return i;function i(a){return ce(a)?(e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),o):n(a)}function o(a){return r.parser.lazy[r.now().line]?n(a):t(a)}}function TD(e,t,n){return r;function r(i){return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),e.attempt(hl,t,n)}}const jD={name:"htmlText",tokenize:ED};function ED(e,t,n){const r=this;let i,o,a;return s;function s(S){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(S),c}function c(S){return S===33?(e.consume(S),u):S===47?(e.consume(S),A):S===63?(e.consume(S),w):zt(S)?(e.consume(S),F):n(S)}function u(S){return S===45?(e.consume(S),d):S===91?(e.consume(S),o=0,v):zt(S)?(e.consume(S),y):n(S)}function d(S){return S===45?(e.consume(S),f):n(S)}function h(S){return S===null?n(S):S===45?(e.consume(S),p):ce(S)?(a=h,K(S)):(e.consume(S),h)}function p(S){return S===45?(e.consume(S),f):h(S)}function f(S){return S===62?U(S):S===45?p(S):h(S)}function v(S){const oe="CDATA[";return S===oe.charCodeAt(o++)?(e.consume(S),o===oe.length?m:v):n(S)}function m(S){return S===null?n(S):S===93?(e.consume(S),b):ce(S)?(a=m,K(S)):(e.consume(S),m)}function b(S){return S===93?(e.consume(S),g):m(S)}function g(S){return S===62?U(S):S===93?(e.consume(S),g):m(S)}function y(S){return S===null||S===62?U(S):ce(S)?(a=y,K(S)):(e.consume(S),y)}function w(S){return S===null?n(S):S===63?(e.consume(S),k):ce(S)?(a=w,K(S)):(e.consume(S),w)}function k(S){return S===62?U(S):w(S)}function A(S){return zt(S)?(e.consume(S),C):n(S)}function C(S){return S===45||Pt(S)?(e.consume(S),C):I(S)}function I(S){return ce(S)?(a=I,K(S)):Ae(S)?(e.consume(S),I):U(S)}function F(S){return S===45||Pt(S)?(e.consume(S),F):S===47||S===62||Be(S)?D(S):n(S)}function D(S){return S===47?(e.consume(S),U):S===58||S===95||zt(S)?(e.consume(S),j):ce(S)?(a=D,K(S)):Ae(S)?(e.consume(S),D):U(S)}function j(S){return S===45||S===46||S===58||S===95||Pt(S)?(e.consume(S),j):R(S)}function R(S){return S===61?(e.consume(S),_):ce(S)?(a=R,K(S)):Ae(S)?(e.consume(S),R):D(S)}function _(S){return S===null||S===60||S===61||S===62||S===96?n(S):S===34||S===39?(e.consume(S),i=S,$):ce(S)?(a=_,K(S)):Ae(S)?(e.consume(S),_):(e.consume(S),O)}function $(S){return S===i?(e.consume(S),i=void 0,V):S===null?n(S):ce(S)?(a=$,K(S)):(e.consume(S),$)}function O(S){return S===null||S===34||S===39||S===60||S===61||S===96?n(S):S===47||S===62||Be(S)?D(S):(e.consume(S),O)}function V(S){return S===47||S===62||Be(S)?D(S):n(S)}function U(S){return S===62?(e.consume(S),e.exit("htmlTextData"),e.exit("htmlText"),t):n(S)}function K(S){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(S),e.exit("lineEnding"),M}function M(S){return Ae(S)?Ie(e,L,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(S):L(S)}function L(S){return e.enter("htmlTextData"),a(S)}}const Om={name:"labelEnd",resolveAll:PD,resolveTo:RD,tokenize:FD},ID={tokenize:MD},ND={tokenize:OD},_D={tokenize:DD};function PD(e){let t=-1;const n=[];for(;++t=3&&(u===null||ce(u))?(e.exit("thematicBreak"),t(u)):n(u)}function c(u){return u===i?(e.consume(u),r++,c):(e.exit("thematicBreakSequence"),Ae(u)?Ie(e,s,"whitespace")(u):s(u))}}const Vt={continuation:{tokenize:YD},exit:GD,name:"list",tokenize:UD},VD={partial:!0,tokenize:KD},qD={partial:!0,tokenize:QD};function UD(e,t,n){const r=this,i=r.events[r.events.length-1];let o=i&&i[1].type==="linePrefix"?i[2].sliceSerialize(i[1],!0).length:0,a=0;return s;function s(f){const v=r.containerState.type||(f===42||f===43||f===45?"listUnordered":"listOrdered");if(v==="listUnordered"?!r.containerState.marker||f===r.containerState.marker:Hf(f)){if(r.containerState.type||(r.containerState.type=v,e.enter(v,{_container:!0})),v==="listUnordered")return e.enter("listItemPrefix"),f===42||f===45?e.check(mc,n,u)(f):u(f);if(!r.interrupt||f===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),c(f)}return n(f)}function c(f){return Hf(f)&&++a<10?(e.consume(f),c):(!r.interrupt||a<2)&&(r.containerState.marker?f===r.containerState.marker:f===41||f===46)?(e.exit("listItemValue"),u(f)):n(f)}function u(f){return e.enter("listItemMarker"),e.consume(f),e.exit("listItemMarker"),r.containerState.marker=r.containerState.marker||f,e.check(hl,r.interrupt?n:d,e.attempt(VD,p,h))}function d(f){return r.containerState.initialBlankLine=!0,o++,p(f)}function h(f){return Ae(f)?(e.enter("listItemPrefixWhitespace"),e.consume(f),e.exit("listItemPrefixWhitespace"),p):n(f)}function p(f){return r.containerState.size=o+r.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(f)}}function YD(e,t,n){const r=this;return r.containerState._closeFlow=void 0,e.check(hl,i,o);function i(s){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,Ie(e,t,"listItemIndent",r.containerState.size+1)(s)}function o(s){return r.containerState.furtherBlankLines||!Ae(s)?(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,a(s)):(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(qD,t,a)(s))}function a(s){return r.containerState._closeFlow=!0,r.interrupt=void 0,Ie(e,e.attempt(Vt,t,n),"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(s)}}function QD(e,t,n){const r=this;return Ie(e,i,"listItemIndent",r.containerState.size+1);function i(o){const a=r.events[r.events.length-1];return a&&a[1].type==="listItemIndent"&&a[2].sliceSerialize(a[1],!0).length===r.containerState.size?t(o):n(o)}}function GD(e){e.exit(this.containerState.type)}function KD(e,t,n){const r=this;return Ie(e,i,"listItemPrefixWhitespace",r.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function i(o){const a=r.events[r.events.length-1];return!Ae(o)&&a&&a[1].type==="listItemPrefixWhitespace"?t(o):n(o)}}const iw={name:"setextUnderline",resolveTo:ZD,tokenize:XD};function ZD(e,t){let n=e.length,r,i,o;for(;n--;)if(e[n][0]==="enter"){if(e[n][1].type==="content"){r=n;break}e[n][1].type==="paragraph"&&(i=n)}else e[n][1].type==="content"&&e.splice(n,1),!o&&e[n][1].type==="definition"&&(o=n);const a={type:"setextHeading",start:{...e[r][1].start},end:{...e[e.length-1][1].end}};return e[i][1].type="setextHeadingText",o?(e.splice(i,0,["enter",a,t]),e.splice(o+1,0,["exit",e[r][1],t]),e[r][1].end={...e[o][1].end}):e[r][1]=a,e.push(["exit",a,t]),e}function XD(e,t,n){const r=this;let i;return o;function o(u){let d=r.events.length,h;for(;d--;)if(r.events[d][1].type!=="lineEnding"&&r.events[d][1].type!=="linePrefix"&&r.events[d][1].type!=="content"){h=r.events[d][1].type==="paragraph";break}return!r.parser.lazy[r.now().line]&&(r.interrupt||h)?(e.enter("setextHeadingLine"),i=u,a(u)):n(u)}function a(u){return e.enter("setextHeadingLineSequence"),s(u)}function s(u){return u===i?(e.consume(u),s):(e.exit("setextHeadingLineSequence"),Ae(u)?Ie(e,c,"lineSuffix")(u):c(u))}function c(u){return u===null||ce(u)?(e.exit("setextHeadingLine"),t(u)):n(u)}}const JD={tokenize:e3};function e3(e){const t=this,n=e.attempt(hl,r,e.attempt(this.parser.constructs.flowInitial,i,Ie(e,e.attempt(this.parser.constructs.flow,i,e.attempt(oD,i)),"linePrefix")));return n;function r(o){if(o===null){e.consume(o);return}return e.enter("lineEndingBlank"),e.consume(o),e.exit("lineEndingBlank"),t.currentConstruct=void 0,n}function i(o){if(o===null){e.consume(o);return}return e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),t.currentConstruct=void 0,n}}const t3={resolveAll:$2()},n3=H2("string"),r3=H2("text");function H2(e){return{resolveAll:$2(e==="text"?i3:void 0),tokenize:t};function t(n){const r=this,i=this.parser.constructs[e],o=n.attempt(i,a,s);return a;function a(d){return u(d)?o(d):s(d)}function s(d){if(d===null){n.consume(d);return}return n.enter("data"),n.consume(d),c}function c(d){return u(d)?(n.exit("data"),o(d)):(n.consume(d),c)}function u(d){if(d===null)return!0;const h=i[d];let p=-1;if(h)for(;++p-1){const s=a[0];typeof s=="string"?a[0]=s.slice(r):a.shift()}o>0&&a.push(e[i].slice(0,o))}return a}function y3(e,t){let n=-1;const r=[];let i;for(;++n0){const Je=ee.tokenStack[ee.tokenStack.length-1];(Je[1]||aw).call(ee,void 0,Je[0])}for(B.position={start:Vr(N.length>0?N[0][1].start:{line:1,column:1,offset:0}),end:Vr(N.length>0?N[N.length-2][1].end:{line:1,column:1,offset:0})},Ce=-1;++Ce0&&(r.className=["language-"+i[0]]);let o={type:"element",tagName:"code",properties:r,children:[{type:"text",value:n}]};return t.meta&&(o.data={meta:t.meta}),e.patch(t,o),o=e.applyData(t,o),o={type:"element",tagName:"pre",properties:{},children:[o]},e.patch(t,o),o}function _3(e,t){const n={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function P3(e,t){const n={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function R3(e,t){const n=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",r=String(t.identifier).toUpperCase(),i=Oa(r.toLowerCase()),o=e.footnoteOrder.indexOf(r);let a,s=e.footnoteCounts.get(r);s===void 0?(s=0,e.footnoteOrder.push(r),a=e.footnoteOrder.length):a=o+1,s+=1,e.footnoteCounts.set(r,s);const c={type:"element",tagName:"a",properties:{href:"#"+n+"fn-"+i,id:n+"fnref-"+i+(s>1?"-"+s:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(a)}]};e.patch(t,c);const u={type:"element",tagName:"sup",properties:{},children:[c]};return e.patch(t,u),e.applyData(t,u)}function F3(e,t){const n={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function M3(e,t){if(e.options.allowDangerousHtml){const n={type:"raw",value:t.value};return e.patch(t,n),e.applyData(t,n)}}function q2(e,t){const n=t.referenceType;let r="]";if(n==="collapsed"?r+="[]":n==="full"&&(r+="["+(t.label||t.identifier)+"]"),t.type==="imageReference")return[{type:"text",value:"!["+t.alt+r}];const i=e.all(t),o=i[0];o&&o.type==="text"?o.value="["+o.value:i.unshift({type:"text",value:"["});const a=i[i.length-1];return a&&a.type==="text"?a.value+=r:i.push({type:"text",value:r}),i}function O3(e,t){const n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return q2(e,t);const i={src:Oa(r.url||""),alt:t.alt};r.title!==null&&r.title!==void 0&&(i.title=r.title);const o={type:"element",tagName:"img",properties:i,children:[]};return e.patch(t,o),e.applyData(t,o)}function D3(e,t){const n={src:Oa(t.url)};t.alt!==null&&t.alt!==void 0&&(n.alt=t.alt),t.title!==null&&t.title!==void 0&&(n.title=t.title);const r={type:"element",tagName:"img",properties:n,children:[]};return e.patch(t,r),e.applyData(t,r)}function L3(e,t){const n={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,n);const r={type:"element",tagName:"code",properties:{},children:[n]};return e.patch(t,r),e.applyData(t,r)}function z3(e,t){const n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return q2(e,t);const i={href:Oa(r.url||"")};r.title!==null&&r.title!==void 0&&(i.title=r.title);const o={type:"element",tagName:"a",properties:i,children:e.all(t)};return e.patch(t,o),e.applyData(t,o)}function B3(e,t){const n={href:Oa(t.url)};t.title!==null&&t.title!==void 0&&(n.title=t.title);const r={type:"element",tagName:"a",properties:n,children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function H3(e,t,n){const r=e.all(t),i=n?$3(n):U2(t),o={},a=[];if(typeof t.checked=="boolean"){const d=r[0];let h;d&&d.type==="element"&&d.tagName==="p"?h=d:(h={type:"element",tagName:"p",properties:{},children:[]},r.unshift(h)),h.children.length>0&&h.children.unshift({type:"text",value:" "}),h.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),o.className=["task-list-item"]}let s=-1;for(;++s1}function W3(e,t){const n={},r=e.all(t);let i=-1;for(typeof t.start=="number"&&t.start!==1&&(n.start=t.start);++i0){const a={type:"element",tagName:"tbody",properties:{},children:e.wrap(n,!0)},s=Nm(t.children[1]),c=A2(t.children[t.children.length-1]);s&&c&&(a.position={start:s,end:c}),i.push(a)}const o={type:"element",tagName:"table",properties:{},children:e.wrap(i,!0)};return e.patch(t,o),e.applyData(t,o)}function Q3(e,t,n){const r=n?n.children:void 0,o=(r?r.indexOf(t):1)===0?"th":"td",a=n&&n.type==="table"?n.align:void 0,s=a?a.length:t.children.length;let c=-1;const u=[];for(;++c0,!0),r[0]),i=r.index+r[0].length,r=n.exec(t);return o.push(cw(t.slice(i),i>0,!1)),o.join("")}function cw(e,t,n){let r=0,i=e.length;if(t){let o=e.codePointAt(r);for(;o===sw||o===lw;)r++,o=e.codePointAt(r)}if(n){let o=e.codePointAt(i-1);for(;o===sw||o===lw;)i--,o=e.codePointAt(i-1)}return i>r?e.slice(r,i):""}function Z3(e,t){const n={type:"text",value:K3(String(t.value))};return e.patch(t,n),e.applyData(t,n)}function X3(e,t){const n={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(t,n),e.applyData(t,n)}const J3={blockquote:E3,break:I3,code:N3,delete:_3,emphasis:P3,footnoteReference:R3,heading:F3,html:M3,imageReference:O3,image:D3,inlineCode:L3,linkReference:z3,link:B3,listItem:H3,list:W3,paragraph:V3,root:q3,strong:U3,table:Y3,tableCell:G3,tableRow:Q3,text:Z3,thematicBreak:X3,toml:$l,yaml:$l,definition:$l,footnoteDefinition:$l};function $l(){}const Y2=-1,Yu=0,ks=1,au=2,Dm=3,Lm=4,zm=5,Bm=6,Q2=7,G2=8,eL=typeof self=="object"?self:globalThis,uw=(e,t)=>{switch(e){case"Function":case"SharedWorker":case"Worker":case"eval":case"setInterval":case"setTimeout":throw new TypeError("unable to deserialize "+e)}return new eL[e](t)},tL=(e,t)=>{const n=(i,o)=>(e.set(o,i),i),r=i=>{if(e.has(i))return e.get(i);const[o,a]=t[i];switch(o){case Yu:case Y2:return n(a,i);case ks:{const s=n([],i);for(const c of a)s.push(r(c));return s}case au:{const s=n({},i);for(const[c,u]of a)s[r(c)]=r(u);return s}case Dm:return n(new Date(a),i);case Lm:{const{source:s,flags:c}=a;return n(new RegExp(s,c),i)}case zm:{const s=n(new Map,i);for(const[c,u]of a)s.set(r(c),r(u));return s}case Bm:{const s=n(new Set,i);for(const c of a)s.add(r(c));return s}case Q2:{const{name:s,message:c}=a;return n(uw(s,c),i)}case G2:return n(BigInt(a),i);case"BigInt":return n(Object(BigInt(a)),i);case"ArrayBuffer":return n(new Uint8Array(a).buffer,a);case"DataView":{const{buffer:s}=new Uint8Array(a);return n(new DataView(s),a)}}return n(uw(o,a),i)};return r},dw=e=>tL(new Map,e)(0),Eo="",{toString:nL}={},{keys:rL}=Object,es=e=>{const t=typeof e;if(t!=="object"||!e)return[Yu,t];const n=nL.call(e).slice(8,-1);switch(n){case"Array":return[ks,Eo];case"Object":return[au,Eo];case"Date":return[Dm,Eo];case"RegExp":return[Lm,Eo];case"Map":return[zm,Eo];case"Set":return[Bm,Eo];case"DataView":return[ks,n]}return n.includes("Array")?[ks,n]:n.includes("Error")?[Q2,n]:[au,n]},Wl=([e,t])=>e===Yu&&(t==="function"||t==="symbol"),iL=(e,t,n,r)=>{const i=(a,s)=>{const c=r.push(a)-1;return n.set(s,c),c},o=a=>{if(n.has(a))return n.get(a);let[s,c]=es(a);switch(s){case Yu:{let d=a;switch(c){case"bigint":s=G2,d=a.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+c);d=null;break;case"undefined":return i([Y2],a)}return i([s,d],a)}case ks:{if(c){let p=a;return c==="DataView"?p=new Uint8Array(a.buffer):c==="ArrayBuffer"&&(p=new Uint8Array(a)),i([c,[...p]],a)}const d=[],h=i([s,d],a);for(const p of a)d.push(o(p));return h}case au:{if(c)switch(c){case"BigInt":return i([c,a.toString()],a);case"Boolean":case"Number":case"String":return i([c,a.valueOf()],a)}if(t&&"toJSON"in a)return o(a.toJSON());const d=[],h=i([s,d],a);for(const p of rL(a))(e||!Wl(es(a[p])))&&d.push([o(p),o(a[p])]);return h}case Dm:return i([s,a.toISOString()],a);case Lm:{const{source:d,flags:h}=a;return i([s,{source:d,flags:h}],a)}case zm:{const d=[],h=i([s,d],a);for(const[p,f]of a)(e||!(Wl(es(p))||Wl(es(f))))&&d.push([o(p),o(f)]);return h}case Bm:{const d=[],h=i([s,d],a);for(const p of a)(e||!Wl(es(p)))&&d.push(o(p));return h}}const{message:u}=a;return i([s,{name:c,message:u}],a)};return o},hw=(e,{json:t,lossy:n}={})=>{const r=[];return iL(!(t||n),!!t,new Map,r)(e),r},su=typeof structuredClone=="function"?(e,t)=>t&&("json"in t||"lossy"in t)?dw(hw(e,t)):structuredClone(e):(e,t)=>dw(hw(e,t));function oL(e,t){const n=[{type:"text",value:"↩"}];return t>1&&n.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(t)}]}),n}function aL(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}function sL(e){const t=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",n=e.options.footnoteBackContent||oL,r=e.options.footnoteBackLabel||aL,i=e.options.footnoteLabel||"Footnotes",o=e.options.footnoteLabelTagName||"h2",a=e.options.footnoteLabelProperties||{className:["sr-only"]},s=[];let c=-1;for(;++c0&&v.push({type:"text",value:" "});let y=typeof n=="string"?n:n(c,f);typeof y=="string"&&(y={type:"text",value:y}),v.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+p+(f>1?"-"+f:""),dataFootnoteBackref:"",ariaLabel:typeof r=="string"?r:r(c,f),className:["data-footnote-backref"]},children:Array.isArray(y)?y:[y]})}const b=d[d.length-1];if(b&&b.type==="element"&&b.tagName==="p"){const y=b.children[b.children.length-1];y&&y.type==="text"?y.value+=" ":b.children.push({type:"text",value:" "}),b.children.push(...v)}else d.push(...v);const g={type:"element",tagName:"li",properties:{id:t+"fn-"+p},children:e.wrap(d,!0)};e.patch(u,g),s.push(g)}if(s.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:o,properties:{...su(a),id:"footnote-label"},children:[{type:"text",value:i}]},{type:"text",value:` `},{type:"element",tagName:"ol",properties:{},children:e.wrap(s,!0)},{type:"text",value:` `}]}}const Qu=function(e){if(e==null)return dL;if(typeof e=="function")return Gu(e);if(typeof e=="object")return Array.isArray(e)?lL(e):cL(e);if(typeof e=="string")return uL(e);throw new Error("Expected function, string, or object as test")};function lL(e){const t=[];let n=-1;for(;++n":""))+")"})}return p;function p(){let f=K2,v,m,b;if((!t||o(c,u,d[d.length-1]||void 0))&&(f=mL(n(c,d)),f[0]===Wf))return f;if("children"in c&&c.children){const g=c;if(g.children&&f[0]!==pL)for(m=(r?g.children.length:-1)+a,b=d.concat(g);m>-1&&m0&&n.push({type:"text",value:` `}),n}function fw(e){let t=0,n=e.charCodeAt(t);for(;n===9||n===32;)t++,n=e.charCodeAt(t);return e.slice(t)}function pw(e,t){const n=yL(e,t),r=n.one(e,void 0),i=sL(n),o=Array.isArray(r)?{type:"root",children:r}:r||{type:"root",children:[]};return i&&o.children.push({type:"text",value:` `},i),o}function kL(e,t){return e&&"run"in e?async function(n,r){const i=pw(n,{file:r,...t});await e.run(i,r)}:function(n,r){return pw(n,{file:r,...e||t})}}function mw(e){if(e)throw e}var gc=Object.prototype.hasOwnProperty,X2=Object.prototype.toString,gw=Object.defineProperty,yw=Object.getOwnPropertyDescriptor,vw=function(t){return typeof Array.isArray=="function"?Array.isArray(t):X2.call(t)==="[object Array]"},ww=function(t){if(!t||X2.call(t)!=="[object Object]")return!1;var n=gc.call(t,"constructor"),r=t.constructor&&t.constructor.prototype&&gc.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!n&&!r)return!1;var i;for(i in t);return typeof i>"u"||gc.call(t,i)},xw=function(t,n){gw&&n.name==="__proto__"?gw(t,n.name,{enumerable:!0,configurable:!0,value:n.newValue,writable:!0}):t[n.name]=n.newValue},bw=function(t,n){if(n==="__proto__")if(gc.call(t,n)){if(yw)return yw(t,n).value}else return;return t[n]},SL=function e(){var t,n,r,i,o,a,s=arguments[0],c=1,u=arguments.length,d=!1;for(typeof s=="boolean"&&(d=s,s=arguments[1]||{},c=2),(s==null||typeof s!="object"&&typeof s!="function")&&(s={});ca.length;let c;s&&a.push(i);try{c=e.apply(this,a)}catch(u){const d=u;if(s&&n)throw d;return i(d)}s||(c&&c.then&&typeof c.then=="function"?c.then(o,i):c instanceof Error?i(c):o(c))}function i(a,...s){n||(n=!0,t(a,...s))}function o(a){i(null,a)}}const nr={basename:TL,dirname:jL,extname:EL,join:IL,sep:"/"};function TL(e,t){if(t!==void 0&&typeof t!="string")throw new TypeError('"ext" argument must be a string');fl(e);let n=0,r=-1,i=e.length,o;if(t===void 0||t.length===0||t.length>e.length){for(;i--;)if(e.codePointAt(i)===47){if(o){n=i+1;break}}else r<0&&(o=!0,r=i+1);return r<0?"":e.slice(n,r)}if(t===e)return"";let a=-1,s=t.length-1;for(;i--;)if(e.codePointAt(i)===47){if(o){n=i+1;break}}else a<0&&(o=!0,a=i+1),s>-1&&(e.codePointAt(i)===t.codePointAt(s--)?s<0&&(r=i):(s=-1,r=a));return n===r?r=a:r<0&&(r=e.length),e.slice(n,r)}function jL(e){if(fl(e),e.length===0)return".";let t=-1,n=e.length,r;for(;--n;)if(e.codePointAt(n)===47){if(r){t=n;break}}else r||(r=!0);return t<0?e.codePointAt(0)===47?"/":".":t===1&&e.codePointAt(0)===47?"//":e.slice(0,t)}function EL(e){fl(e);let t=e.length,n=-1,r=0,i=-1,o=0,a;for(;t--;){const s=e.codePointAt(t);if(s===47){if(a){r=t+1;break}continue}n<0&&(a=!0,n=t+1),s===46?i<0?i=t:o!==1&&(o=1):i>-1&&(o=-1)}return i<0||n<0||o===0||o===1&&i===n-1&&i===r+1?"":e.slice(i,n)}function IL(...e){let t=-1,n;for(;++t0&&e.codePointAt(e.length-1)===47&&(n+="/"),t?"/"+n:n}function _L(e,t){let n="",r=0,i=-1,o=0,a=-1,s,c;for(;++a<=e.length;){if(a2){if(c=n.lastIndexOf("/"),c!==n.length-1){c<0?(n="",r=0):(n=n.slice(0,c),r=n.length-1-n.lastIndexOf("/")),i=a,o=0;continue}}else if(n.length>0){n="",r=0,i=a,o=0;continue}}t&&(n=n.length>0?n+"/..":"..",r=2)}else n.length>0?n+="/"+e.slice(i+1,a):n=e.slice(i+1,a),r=a-i-1;i=a,o=0}else s===46&&o>-1?o++:o=-1}return n}function fl(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const PL={cwd:RL};function RL(){return"/"}function Uf(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function FL(e){if(typeof e=="string")e=new URL(e);else if(!Uf(e)){const t=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code="ERR_INVALID_ARG_TYPE",t}if(e.protocol!=="file:"){const t=new TypeError("The URL must be of scheme file");throw t.code="ERR_INVALID_URL_SCHEME",t}return ML(e)}function ML(e){if(e.hostname!==""){const r=new TypeError('File URL host must be "localhost" or empty on darwin');throw r.code="ERR_INVALID_FILE_URL_HOST",r}const t=e.pathname;let n=-1;for(;++n0){let[f,...v]=d;const m=r[p][1];qf(m)&&qf(f)&&(f=Gd(!0,m,f)),r[p]=[u,f,...v]}}}}const zL=new $m().freeze();function Jd(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function eh(e,t){if(typeof t!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function th(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function Sw(e){if(!qf(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function Cw(e,t,n){if(!n)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function Vl(e){return BL(e)?e:new J2(e)}function BL(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function HL(e){return typeof e=="string"||$L(e)}function $L(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const WL="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",Aw=[],Tw={allowDangerousHtml:!0},VL=/^(https?|ircs?|mailto|xmpp)$/i,qL=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function UL(e){const t=YL(e),n=QL(e);return GL(t.runSync(t.parse(n),n),e)}function YL(e){const t=e.rehypePlugins||Aw,n=e.remarkPlugins||Aw,r=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...Tw}:Tw;return zL().use(j3).use(n).use(kL,r).use(t)}function QL(e){const t=e.children||"",n=new J2;return typeof t=="string"&&(n.value=t),n}function GL(e,t){const n=t.allowedElements,r=t.allowElement,i=t.components,o=t.disallowedElements,a=t.skipHtml,s=t.unwrapDisallowed,c=t.urlTransform||KL;for(const d of qL)Object.hasOwn(t,d.from)&&(""+d.from+(d.to?"use `"+d.to+"` instead":"remove it")+WL+d.id,void 0);return t.className&&(e={type:"element",tagName:"div",properties:{className:t.className},children:e.type==="root"?e.children:[e]}),Hm(e,u),uO(e,{Fragment:l.Fragment,components:i,ignoreInvalidStyle:!0,jsx:l.jsx,jsxs:l.jsxs,passKeys:!0,passNode:!0});function u(d,h,p){if(d.type==="raw"&&p&&typeof h=="number")return a?p.children.splice(h,1):p.children[h]={type:"text",value:d.value},h;if(d.type==="element"){let f;for(f in Ud)if(Object.hasOwn(Ud,f)&&Object.hasOwn(d.properties,f)){const v=d.properties[f],m=Ud[f];(m===null||m.includes(d.tagName))&&(d.properties[f]=c(String(v||""),f,d))}}if(d.type==="element"){let f=n?!n.includes(d.tagName):o?o.includes(d.tagName):!1;if(!f&&r&&typeof h=="number"&&(f=!r(d,h,p)),f&&p&&typeof h=="number")return s&&d.children?p.children.splice(h,1,...d.children):p.children.splice(h,1),h}}}function KL(e){const t=e.indexOf(":"),n=e.indexOf("?"),r=e.indexOf("#"),i=e.indexOf("/");return t===-1||i!==-1&&t>i||n!==-1&&t>n||r!==-1&&t>r||VL.test(e.slice(0,t))?e:""}function jw(e,t){const n=String(e);if(typeof t!="string")throw new TypeError("Expected character");let r=0,i=n.indexOf(t);for(;i!==-1;)r++,i=n.indexOf(t,i+t.length);return r}function ZL(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function XL(e,t,n){const i=Qu((n||{}).ignore||[]),o=JL(t);let a=-1;for(;++a0?{type:"text",value:C}:void 0),C===!1?p.lastIndex=k+1:(v!==k&&y.push({type:"text",value:u.value.slice(v,k)}),Array.isArray(C)?y.push(...C):C&&y.push(C),v=k+w[0].length,g=!0),!p.global)break;w=p.exec(u.value)}return g?(v?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let n=t[0],r=n.indexOf(")");const i=jw(e,"(");let o=jw(e,")");for(;r!==-1&&i>o;)e+=n.slice(0,r+1),n=n.slice(r+1),r=n.indexOf(")"),o++;return[e,n]}function eC(e,t){const n=e.input.charCodeAt(e.index-1);return(e.index===0||fo(n)||qu(n))&&(!t||n!==47)}tC.peek=kz;function pz(){this.buffer()}function mz(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function gz(){this.buffer()}function yz(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function vz(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=qn(this.sliceSerialize(e)).toLowerCase(),n.label=t}function wz(e){this.exit(e)}function xz(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=qn(this.sliceSerialize(e)).toLowerCase(),n.label=t}function bz(e){this.exit(e)}function kz(){return"["}function tC(e,t,n,r){const i=n.createTracker(r);let o=i.move("[^");const a=n.enter("footnoteReference"),s=n.enter("reference");return o+=i.move(n.safe(n.associationId(e),{after:"]",before:o})),s(),a(),o+=i.move("]"),o}function Sz(){return{enter:{gfmFootnoteCallString:pz,gfmFootnoteCall:mz,gfmFootnoteDefinitionLabelString:gz,gfmFootnoteDefinition:yz},exit:{gfmFootnoteCallString:vz,gfmFootnoteCall:wz,gfmFootnoteDefinitionLabelString:xz,gfmFootnoteDefinition:bz}}}function Cz(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:n,footnoteReference:tC},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function n(r,i,o,a){const s=o.createTracker(a);let c=s.move("[^");const u=o.enter("footnoteDefinition"),d=o.enter("label");return c+=s.move(o.safe(o.associationId(r),{before:c,after:"]"})),d(),c+=s.move("]:"),r.children&&r.children.length>0&&(s.shift(4),c+=s.move((t?` `:" ")+o.indentLines(o.containerFlow(r,s.current()),t?nC:Az))),u(),c}}function Az(e,t,n){return t===0?e:nC(e,t,n)}function nC(e,t,n){return(n?"":" ")+e}const Tz=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];rC.peek=_z;function jz(){return{canContainEols:["delete"],enter:{strikethrough:Iz},exit:{strikethrough:Nz}}}function Ez(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:Tz}],handlers:{delete:rC}}}function Iz(e){this.enter({type:"delete",children:[]},e)}function Nz(e){this.exit(e)}function rC(e,t,n,r){const i=n.createTracker(r),o=n.enter("strikethrough");let a=i.move("~~");return a+=n.containerPhrasing(e,{...i.current(),before:a,after:"~"}),a+=i.move("~~"),o(),a}function _z(){return"~"}function Pz(e){return e.length}function Rz(e,t){const n=t||{},r=(n.align||[]).concat(),i=n.stringLength||Pz,o=[],a=[],s=[],c=[];let u=0,d=-1;for(;++du&&(u=e[d].length);++gc[g])&&(c[g]=w)}m.push(y)}a[d]=m,s[d]=b}let h=-1;if(typeof r=="object"&&"length"in r)for(;++hc[h]&&(c[h]=y),f[h]=y),p[h]=w}a.splice(1,0,p),s.splice(1,0,f),d=-1;const v=[];for(;++d "),o.shift(2);const a=n.indentLines(n.containerFlow(e,o.current()),Oz);return i(),a}function Oz(e,t,n){return">"+(n?"":" ")+e}function Dz(e,t){return Iw(e,t.inConstruct,!0)&&!Iw(e,t.notInConstruct,!1)}function Iw(e,t,n){if(typeof t=="string"&&(t=[t]),!t||t.length===0)return n;let r=-1;for(;++ra&&(a=o):o=1,i=r+t.length,r=n.indexOf(t,i);return a}function zz(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function Bz(e){const t=e.options.fence||"`";if(t!=="`"&&t!=="~")throw new Error("Cannot serialize code with `"+t+"` for `options.fence`, expected `` ` `` or `~`");return t}function Hz(e,t,n,r){const i=Bz(n),o=e.value||"",a=i==="`"?"GraveAccent":"Tilde";if(zz(e,n)){const h=n.enter("codeIndented"),p=n.indentLines(o,$z);return h(),p}const s=n.createTracker(r),c=i.repeat(Math.max(Lz(o,i)+1,3)),u=n.enter("codeFenced");let d=s.move(c);if(e.lang){const h=n.enter(`codeFencedLang${a}`);d+=s.move(n.safe(e.lang,{before:d,after:" ",encode:["`"],...s.current()})),h()}if(e.lang&&e.meta){const h=n.enter(`codeFencedMeta${a}`);d+=s.move(" "),d+=s.move(n.safe(e.meta,{before:d,after:` `,encode:["`"],...s.current()})),h()}return d+=s.move(` `),o&&(d+=s.move(o+` `)),d+=s.move(c),u(),d}function $z(e,t,n){return(n?"":" ")+e}function Wm(e){const t=e.options.quote||'"';if(t!=='"'&&t!=="'")throw new Error("Cannot serialize title with `"+t+"` for `options.quote`, expected `\"`, or `'`");return t}function Wz(e,t,n,r){const i=Wm(n),o=i==='"'?"Quote":"Apostrophe",a=n.enter("definition");let s=n.enter("label");const c=n.createTracker(r);let u=c.move("[");return u+=c.move(n.safe(n.associationId(e),{before:u,after:"]",...c.current()})),u+=c.move("]: "),s(),!e.url||/[\0- \u007F]/.test(e.url)?(s=n.enter("destinationLiteral"),u+=c.move("<"),u+=c.move(n.safe(e.url,{before:u,after:">",...c.current()})),u+=c.move(">")):(s=n.enter("destinationRaw"),u+=c.move(n.safe(e.url,{before:u,after:e.title?" ":` `,...c.current()}))),s(),e.title&&(s=n.enter(`title${o}`),u+=c.move(" "+i),u+=c.move(n.safe(e.title,{before:u,after:i,...c.current()})),u+=c.move(i),s()),a(),u}function Vz(e){const t=e.options.emphasis||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize emphasis with `"+t+"` for `options.emphasis`, expected `*`, or `_`");return t}function Zs(e){return"&#x"+e.toString(16).toUpperCase()+";"}function lu(e,t,n){const r=Ca(e),i=Ca(t);return r===void 0?i===void 0?n==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:r===1?i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}iC.peek=qz;function iC(e,t,n,r){const i=Vz(n),o=n.enter("emphasis"),a=n.createTracker(r),s=a.move(i);let c=a.move(n.containerPhrasing(e,{after:i,before:s,...a.current()}));const u=c.charCodeAt(0),d=lu(r.before.charCodeAt(r.before.length-1),u,i);d.inside&&(c=Zs(u)+c.slice(1));const h=c.charCodeAt(c.length-1),p=lu(r.after.charCodeAt(0),h,i);p.inside&&(c=c.slice(0,-1)+Zs(h));const f=a.move(i);return o(),n.attentionEncodeSurroundingInfo={after:p.outside,before:d.outside},s+c+f}function qz(e,t,n){return n.options.emphasis||"*"}function Uz(e,t){let n=!1;return Hm(e,function(r){if("value"in r&&/\r?\n|\r/.test(r.value)||r.type==="break")return n=!0,Wf}),!!((!e.depth||e.depth<3)&&Fm(e)&&(t.options.setext||n))}function Yz(e,t,n,r){const i=Math.max(Math.min(6,e.depth||1),1),o=n.createTracker(r);if(Uz(e,n)){const d=n.enter("headingSetext"),h=n.enter("phrasing"),p=n.containerPhrasing(e,{...o.current(),before:` `,after:` `});return h(),d(),p+` `+(i===1?"=":"-").repeat(p.length-(Math.max(p.lastIndexOf("\r"),p.lastIndexOf(` `))+1))}const a="#".repeat(i),s=n.enter("headingAtx"),c=n.enter("phrasing");o.move(a+" ");let u=n.containerPhrasing(e,{before:"# ",after:` `,...o.current()});return/^[\t ]/.test(u)&&(u=Zs(u.charCodeAt(0))+u.slice(1)),u=u?a+" "+u:a,n.options.closeAtx&&(u+=" "+a),c(),s(),u}oC.peek=Qz;function oC(e){return e.value||""}function Qz(){return"<"}aC.peek=Gz;function aC(e,t,n,r){const i=Wm(n),o=i==='"'?"Quote":"Apostrophe",a=n.enter("image");let s=n.enter("label");const c=n.createTracker(r);let u=c.move("![");return u+=c.move(n.safe(e.alt,{before:u,after:"]",...c.current()})),u+=c.move("]("),s(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(s=n.enter("destinationLiteral"),u+=c.move("<"),u+=c.move(n.safe(e.url,{before:u,after:">",...c.current()})),u+=c.move(">")):(s=n.enter("destinationRaw"),u+=c.move(n.safe(e.url,{before:u,after:e.title?" ":")",...c.current()}))),s(),e.title&&(s=n.enter(`title${o}`),u+=c.move(" "+i),u+=c.move(n.safe(e.title,{before:u,after:i,...c.current()})),u+=c.move(i),s()),u+=c.move(")"),a(),u}function Gz(){return"!"}sC.peek=Kz;function sC(e,t,n,r){const i=e.referenceType,o=n.enter("imageReference");let a=n.enter("label");const s=n.createTracker(r);let c=s.move("![");const u=n.safe(e.alt,{before:c,after:"]",...s.current()});c+=s.move(u+"]["),a();const d=n.stack;n.stack=[],a=n.enter("reference");const h=n.safe(n.associationId(e),{before:c,after:"]",...s.current()});return a(),n.stack=d,o(),i==="full"||!u||u!==h?c+=s.move(h+"]"):i==="shortcut"?c=c.slice(0,-1):c+=s.move("]"),c}function Kz(){return"!"}lC.peek=Zz;function lC(e,t,n){let r=e.value||"",i="`",o=-1;for(;new RegExp("(^|[^`])"+i+"([^`]|$)").test(r);)i+="`";for(/[^ \r\n]/.test(r)&&(/^[ \r\n]/.test(r)&&/[ \r\n]$/.test(r)||/^`|`$/.test(r))&&(r=" "+r+" ");++o\u007F]/.test(e.url))}uC.peek=Xz;function uC(e,t,n,r){const i=Wm(n),o=i==='"'?"Quote":"Apostrophe",a=n.createTracker(r);let s,c;if(cC(e,n)){const d=n.stack;n.stack=[],s=n.enter("autolink");let h=a.move("<");return h+=a.move(n.containerPhrasing(e,{before:h,after:">",...a.current()})),h+=a.move(">"),s(),n.stack=d,h}s=n.enter("link"),c=n.enter("label");let u=a.move("[");return u+=a.move(n.containerPhrasing(e,{before:u,after:"](",...a.current()})),u+=a.move("]("),c(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(c=n.enter("destinationLiteral"),u+=a.move("<"),u+=a.move(n.safe(e.url,{before:u,after:">",...a.current()})),u+=a.move(">")):(c=n.enter("destinationRaw"),u+=a.move(n.safe(e.url,{before:u,after:e.title?" ":")",...a.current()}))),c(),e.title&&(c=n.enter(`title${o}`),u+=a.move(" "+i),u+=a.move(n.safe(e.title,{before:u,after:i,...a.current()})),u+=a.move(i),c()),u+=a.move(")"),s(),u}function Xz(e,t,n){return cC(e,n)?"<":"["}dC.peek=Jz;function dC(e,t,n,r){const i=e.referenceType,o=n.enter("linkReference");let a=n.enter("label");const s=n.createTracker(r);let c=s.move("[");const u=n.containerPhrasing(e,{before:c,after:"]",...s.current()});c+=s.move(u+"]["),a();const d=n.stack;n.stack=[],a=n.enter("reference");const h=n.safe(n.associationId(e),{before:c,after:"]",...s.current()});return a(),n.stack=d,o(),i==="full"||!u||u!==h?c+=s.move(h+"]"):i==="shortcut"?c=c.slice(0,-1):c+=s.move("]"),c}function Jz(){return"["}function Vm(e){const t=e.options.bullet||"*";if(t!=="*"&&t!=="+"&&t!=="-")throw new Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function e6(e){const t=Vm(e),n=e.options.bulletOther;if(!n)return t==="*"?"-":"*";if(n!=="*"&&n!=="+"&&n!=="-")throw new Error("Cannot serialize items with `"+n+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(n===t)throw new Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+n+"`) to be different");return n}function t6(e){const t=e.options.bulletOrdered||".";if(t!=="."&&t!==")")throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function hC(e){const t=e.options.rule||"*";if(t!=="*"&&t!=="-"&&t!=="_")throw new Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function n6(e,t,n,r){const i=n.enter("list"),o=n.bulletCurrent;let a=e.ordered?t6(n):Vm(n);const s=e.ordered?a==="."?")":".":e6(n);let c=t&&n.bulletLastUsed?a===n.bulletLastUsed:!1;if(!e.ordered){const d=e.children?e.children[0]:void 0;if((a==="*"||a==="-")&&d&&(!d.children||!d.children[0])&&n.stack[n.stack.length-1]==="list"&&n.stack[n.stack.length-2]==="listItem"&&n.stack[n.stack.length-3]==="list"&&n.stack[n.stack.length-4]==="listItem"&&n.indexStack[n.indexStack.length-1]===0&&n.indexStack[n.indexStack.length-2]===0&&n.indexStack[n.indexStack.length-3]===0&&(c=!0),hC(n)===a&&d){let h=-1;for(;++h-1?t.start:1)+(n.options.incrementListMarker===!1?0:t.children.indexOf(e))+o);let a=o.length+1;(i==="tab"||i==="mixed"&&(t&&t.type==="list"&&t.spread||e.spread))&&(a=Math.ceil(a/4)*4);const s=n.createTracker(r);s.move(o+" ".repeat(a-o.length)),s.shift(a);const c=n.enter("listItem"),u=n.indentLines(n.containerFlow(e,s.current()),d);return c(),u;function d(h,p,f){return p?(f?"":" ".repeat(a))+h:(f?o:o+" ".repeat(a-o.length))+h}}function o6(e,t,n,r){const i=n.enter("paragraph"),o=n.enter("phrasing"),a=n.containerPhrasing(e,r);return o(),i(),a}const a6=Qu(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function s6(e,t,n,r){return(e.children.some(function(a){return a6(a)})?n.containerPhrasing:n.containerFlow).call(n,e,r)}function l6(e){const t=e.options.strong||"*";if(t!=="*"&&t!=="_")throw new Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}fC.peek=c6;function fC(e,t,n,r){const i=l6(n),o=n.enter("strong"),a=n.createTracker(r),s=a.move(i+i);let c=a.move(n.containerPhrasing(e,{after:i,before:s,...a.current()}));const u=c.charCodeAt(0),d=lu(r.before.charCodeAt(r.before.length-1),u,i);d.inside&&(c=Zs(u)+c.slice(1));const h=c.charCodeAt(c.length-1),p=lu(r.after.charCodeAt(0),h,i);p.inside&&(c=c.slice(0,-1)+Zs(h));const f=a.move(i+i);return o(),n.attentionEncodeSurroundingInfo={after:p.outside,before:d.outside},s+c+f}function c6(e,t,n){return n.options.strong||"*"}function u6(e,t,n,r){return n.safe(e.value,r)}function d6(e){const t=e.options.ruleRepetition||3;if(t<3)throw new Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}function h6(e,t,n){const r=(hC(n)+(n.options.ruleSpaces?" ":"")).repeat(d6(n));return n.options.ruleSpaces?r.slice(0,-1):r}const pC={blockquote:Mz,break:Nw,code:Hz,definition:Wz,emphasis:iC,hardBreak:Nw,heading:Yz,html:oC,image:aC,imageReference:sC,inlineCode:lC,link:uC,linkReference:dC,list:n6,listItem:i6,paragraph:o6,root:s6,strong:fC,text:u6,thematicBreak:h6};function f6(){return{enter:{table:p6,tableData:_w,tableHeader:_w,tableRow:g6},exit:{codeText:y6,table:m6,tableData:oh,tableHeader:oh,tableRow:oh}}}function p6(e){const t=e._align;this.enter({type:"table",align:t.map(function(n){return n==="none"?null:n}),children:[]},e),this.data.inTable=!0}function m6(e){this.exit(e),this.data.inTable=void 0}function g6(e){this.enter({type:"tableRow",children:[]},e)}function oh(e){this.exit(e)}function _w(e){this.enter({type:"tableCell",children:[]},e)}function y6(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,v6));const n=this.stack[this.stack.length-1];n.type,n.value=t,this.exit(e)}function v6(e,t){return t==="|"?t:e}function w6(e){const t=e||{},n=t.tableCellPadding,r=t.tablePipeAlign,i=t.stringLength,o=n?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` `,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:p,table:a,tableCell:c,tableRow:s}};function a(f,v,m,b){return u(d(f,m,b),f.align)}function s(f,v,m,b){const g=h(f,m,b),y=u([g]);return y.slice(0,y.indexOf(` `))}function c(f,v,m,b){const g=m.enter("tableCell"),y=m.enter("phrasing"),w=m.containerPhrasing(f,{...b,before:o,after:o});return y(),g(),w}function u(f,v){return Rz(f,{align:v,alignDelimiters:r,padding:n,stringLength:i})}function d(f,v,m){const b=f.children;let g=-1;const y=[],w=v.enter("table");for(;++g0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}const D6={tokenize:q6,partial:!0};function L6(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:$6,continuation:{tokenize:W6},exit:V6}},text:{91:{name:"gfmFootnoteCall",tokenize:H6},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:z6,resolveTo:B6}}}}function z6(e,t,n){const r=this;let i=r.events.length;const o=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let a;for(;i--;){const c=r.events[i][1];if(c.type==="labelImage"){a=c;break}if(c.type==="gfmFootnoteCall"||c.type==="labelLink"||c.type==="label"||c.type==="image"||c.type==="link")break}return s;function s(c){if(!a||!a._balanced)return n(c);const u=qn(r.sliceSerialize({start:a.end,end:r.now()}));return u.codePointAt(0)!==94||!o.includes(u.slice(1))?n(c):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(c),e.exit("gfmFootnoteCallLabelMarker"),t(c))}}function B6(e,t){let n=e.length;for(;n--;)if(e[n][1].type==="labelImage"&&e[n][0]==="enter"){e[n][1];break}e[n+1][1].type="data",e[n+3][1].type="gfmFootnoteCallLabelMarker";const r={type:"gfmFootnoteCall",start:Object.assign({},e[n+3][1].start),end:Object.assign({},e[e.length-1][1].end)},i={type:"gfmFootnoteCallMarker",start:Object.assign({},e[n+3][1].end),end:Object.assign({},e[n+3][1].end)};i.end.column++,i.end.offset++,i.end._bufferIndex++;const o={type:"gfmFootnoteCallString",start:Object.assign({},i.end),end:Object.assign({},e[e.length-1][1].start)},a={type:"chunkString",contentType:"string",start:Object.assign({},o.start),end:Object.assign({},o.end)},s=[e[n+1],e[n+2],["enter",r,t],e[n+3],e[n+4],["enter",i,t],["exit",i,t],["enter",o,t],["enter",a,t],["exit",a,t],["exit",o,t],e[e.length-2],e[e.length-1],["exit",r,t]];return e.splice(n,e.length-n+1,...s),e}function H6(e,t,n){const r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let o=0,a;return s;function s(h){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(h),e.exit("gfmFootnoteCallLabelMarker"),c}function c(h){return h!==94?n(h):(e.enter("gfmFootnoteCallMarker"),e.consume(h),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",u)}function u(h){if(o>999||h===93&&!a||h===null||h===91||Be(h))return n(h);if(h===93){e.exit("chunkString");const p=e.exit("gfmFootnoteCallString");return i.includes(qn(r.sliceSerialize(p)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(h),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):n(h)}return Be(h)||(a=!0),o++,e.consume(h),h===92?d:u}function d(h){return h===91||h===92||h===93?(e.consume(h),o++,u):u(h)}}function $6(e,t,n){const r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let o,a=0,s;return c;function c(v){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(v),e.exit("gfmFootnoteDefinitionLabelMarker"),u}function u(v){return v===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(v),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",d):n(v)}function d(v){if(a>999||v===93&&!s||v===null||v===91||Be(v))return n(v);if(v===93){e.exit("chunkString");const m=e.exit("gfmFootnoteDefinitionLabelString");return o=qn(r.sliceSerialize(m)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(v),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),p}return Be(v)||(s=!0),a++,e.consume(v),v===92?h:d}function h(v){return v===91||v===92||v===93?(e.consume(v),a++,d):d(v)}function p(v){return v===58?(e.enter("definitionMarker"),e.consume(v),e.exit("definitionMarker"),i.includes(o)||i.push(o),Ie(e,f,"gfmFootnoteDefinitionWhitespace")):n(v)}function f(v){return t(v)}}function W6(e,t,n){return e.check(hl,t,e.attempt(D6,t,n))}function V6(e){e.exit("gfmFootnoteDefinition")}function q6(e,t,n){const r=this;return Ie(e,i,"gfmFootnoteDefinitionIndent",5);function i(o){const a=r.events[r.events.length-1];return a&&a[1].type==="gfmFootnoteDefinitionIndent"&&a[2].sliceSerialize(a[1],!0).length===4?t(o):n(o)}}function U6(e){let n=(e||{}).singleTilde;const r={name:"strikethrough",tokenize:o,resolveAll:i};return n==null&&(n=!0),{text:{126:r},insideSpan:{null:[r]},attentionMarkers:{null:[126]}};function i(a,s){let c=-1;for(;++c1?c(v):(a.consume(v),h++,f);if(h<2&&!n)return c(v);const b=a.exit("strikethroughSequenceTemporary"),g=Ca(v);return b._open=!g||g===2&&!!m,b._close=!m||m===2&&!!g,s(v)}}}class Y6{constructor(){this.map=[]}add(t,n,r){Q6(this,t,n,r)}consume(t){if(this.map.sort(function(o,a){return o[0]-a[0]}),this.map.length===0)return;let n=this.map.length;const r=[];for(;n>0;)n-=1,r.push(t.slice(this.map[n][0]+this.map[n][1]),this.map[n][2]),t.length=this.map[n][0];r.push(t.slice()),t.length=0;let i=r.pop();for(;i;){for(const o of i)t.push(o);i=r.pop()}this.map.length=0}}function Q6(e,t,n,r){let i=0;if(!(n===0&&r.length===0)){for(;i-1;){const O=r.events[R][1].type;if(O==="lineEnding"||O==="linePrefix")R--;else break}const _=R>-1?r.events[R][1].type:null,$=_==="tableHead"||_==="tableRow"?C:c;return $===C&&r.parser.lazy[r.now().line]?n(j):$(j)}function c(j){return e.enter("tableHead"),e.enter("tableRow"),u(j)}function u(j){return j===124||(a=!0,o+=1),d(j)}function d(j){return j===null?n(j):ce(j)?o>1?(o=0,r.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(j),e.exit("lineEnding"),f):n(j):Ae(j)?Ie(e,d,"whitespace")(j):(o+=1,a&&(a=!1,i+=1),j===124?(e.enter("tableCellDivider"),e.consume(j),e.exit("tableCellDivider"),a=!0,d):(e.enter("data"),h(j)))}function h(j){return j===null||j===124||Be(j)?(e.exit("data"),d(j)):(e.consume(j),j===92?p:h)}function p(j){return j===92||j===124?(e.consume(j),h):h(j)}function f(j){return r.interrupt=!1,r.parser.lazy[r.now().line]?n(j):(e.enter("tableDelimiterRow"),a=!1,Ae(j)?Ie(e,v,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(j):v(j))}function v(j){return j===45||j===58?b(j):j===124?(a=!0,e.enter("tableCellDivider"),e.consume(j),e.exit("tableCellDivider"),m):A(j)}function m(j){return Ae(j)?Ie(e,b,"whitespace")(j):b(j)}function b(j){return j===58?(o+=1,a=!0,e.enter("tableDelimiterMarker"),e.consume(j),e.exit("tableDelimiterMarker"),g):j===45?(o+=1,g(j)):j===null||ce(j)?k(j):A(j)}function g(j){return j===45?(e.enter("tableDelimiterFiller"),y(j)):A(j)}function y(j){return j===45?(e.consume(j),y):j===58?(a=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(j),e.exit("tableDelimiterMarker"),w):(e.exit("tableDelimiterFiller"),w(j))}function w(j){return Ae(j)?Ie(e,k,"whitespace")(j):k(j)}function k(j){return j===124?v(j):j===null||ce(j)?!a||i!==o?A(j):(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(j)):A(j)}function A(j){return n(j)}function C(j){return e.enter("tableRow"),I(j)}function I(j){return j===124?(e.enter("tableCellDivider"),e.consume(j),e.exit("tableCellDivider"),I):j===null||ce(j)?(e.exit("tableRow"),t(j)):Ae(j)?Ie(e,I,"whitespace")(j):(e.enter("data"),F(j))}function F(j){return j===null||j===124||Be(j)?(e.exit("data"),I(j)):(e.consume(j),j===92?D:F)}function D(j){return j===92||j===124?(e.consume(j),F):F(j)}}function X6(e,t){let n=-1,r=!0,i=0,o=[0,0,0,0],a=[0,0,0,0],s=!1,c=0,u,d,h;const p=new Y6;for(;++nn[2]+1){const v=n[2]+1,m=n[3]-n[2]-1;e.add(v,m,[])}}e.add(n[3]+1,0,[["exit",h,t]])}return i!==void 0&&(o.end=Object.assign({},_o(t.events,i)),e.add(i,0,[["exit",o,t]]),o=void 0),o}function Rw(e,t,n,r,i){const o=[],a=_o(t.events,n);i&&(i.end=Object.assign({},a),o.push(["exit",i,t])),r.end=Object.assign({},a),o.push(["exit",r,t]),e.add(n+1,0,o)}function _o(e,t){const n=e[t],r=n[0]==="enter"?"start":"end";return n[1][r]}const J6={name:"tasklistCheck",tokenize:t8};function e8(){return{text:{91:J6}}}function t8(e,t,n){const r=this;return i;function i(c){return r.previous!==null||!r._gfmTasklistFirstContentOfListItem?n(c):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(c),e.exit("taskListCheckMarker"),o)}function o(c){return Be(c)?(e.enter("taskListCheckValueUnchecked"),e.consume(c),e.exit("taskListCheckValueUnchecked"),a):c===88||c===120?(e.enter("taskListCheckValueChecked"),e.consume(c),e.exit("taskListCheckValueChecked"),a):n(c)}function a(c){return c===93?(e.enter("taskListCheckMarker"),e.consume(c),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),s):n(c)}function s(c){return ce(c)?t(c):Ae(c)?e.check({tokenize:n8},t,n)(c):n(c)}}function n8(e,t,n){return Ie(e,r,"whitespace");function r(i){return i===null?n(i):t(i)}}function r8(e){return P2([E6(),L6(),U6(e),K6(),e8()])}const i8={};function o8(e){const t=this,n=e||i8,r=t.data(),i=r.micromarkExtensions||(r.micromarkExtensions=[]),o=r.fromMarkdownExtensions||(r.fromMarkdownExtensions=[]),a=r.toMarkdownExtensions||(r.toMarkdownExtensions=[]);i.push(r8(n)),o.push(C6()),a.push(A6(n))}const SC=()=>{const e=Ra();return x.useEffect(()=>{console.error("404 Error: User attempted to access non-existent route:",e.pathname)},[e.pathname]),l.jsx("div",{className:"min-h-screen flex items-center justify-center bg-gray-100",children:l.jsxs("div",{className:"text-center",children:[l.jsx("h1",{className:"text-4xl font-bold mb-4",children:"404"}),l.jsx("p",{className:"text-xl text-gray-600 mb-4",children:"Oops! Page not found"}),l.jsx("a",{href:"/",className:"text-blue-500 hover:text-blue-700 underline",children:"Return to Home"})]})})},Ul="https://clinicflowai.com",a8=()=>{const{slug:e}=R5(),t=e?hM(e):void 0;if(!t)return l.jsx(SC,{});const n=`${Ul}/blog/${t.slug}`,r=t.heroImage.startsWith("http")?t.heroImage:`${Ul}${t.heroImage}`,i={"@context":"https://schema.org","@type":"Article",headline:t.title,description:t.description,image:r,datePublished:t.date,dateModified:t.date,author:{"@type":"Person",name:t.author,jobTitle:"Co-CEO and Co-Founder, ClinicFlow",description:"Practicing spine surgeon and co-founder of ClinicFlow, designing the clinical triage logic used in its voice AI.",worksFor:{"@type":"Organization",name:"ClinicFlow",url:Ul},sameAs:["https://www.linkedin.com/company/clinicflow/"]},publisher:{"@type":"Organization",name:"ClinicFlow",logo:{"@type":"ImageObject",url:`${Ul}/images/e519b8e9-d0a3-4a17-891f-01b2fa327c89.png`}},mainEntityOfPage:{"@type":"WebPage","@id":n}},o=y2().filter(a=>a.slug!==t.slug).slice(0,2);return l.jsxs("div",{className:"min-h-screen",children:[l.jsxs(Kn,{children:[l.jsxs("title",{children:[t.title," | ClinicFlow"]}),l.jsx("meta",{name:"description",content:t.description}),t.keywords&&l.jsx("meta",{name:"keywords",content:t.keywords}),l.jsx("meta",{name:"author",content:t.author}),l.jsx("link",{rel:"canonical",href:n}),l.jsx("meta",{property:"og:type",content:"article"}),l.jsx("meta",{property:"og:title",content:t.title}),l.jsx("meta",{property:"og:description",content:t.description}),l.jsx("meta",{property:"og:url",content:n}),l.jsx("meta",{property:"og:image",content:r}),l.jsx("meta",{property:"og:image:width",content:"1200"}),l.jsx("meta",{property:"og:image:height",content:"630"}),l.jsx("meta",{property:"article:published_time",content:t.date}),l.jsx("meta",{name:"twitter:card",content:"summary_large_image"}),l.jsx("meta",{name:"twitter:site",content:"@ClinicFlow"}),l.jsx("meta",{name:"twitter:title",content:t.title}),l.jsx("meta",{name:"twitter:description",content:t.description}),l.jsx("meta",{name:"twitter:image",content:r}),l.jsx("script",{type:"application/ld+json",children:JSON.stringify(i)})]}),l.jsx(fn,{}),l.jsxs("main",{style:{background:"var(--ink-25)",fontFamily:"var(--font-sans)"},children:[l.jsx("header",{className:"px-4 sm:px-14 pt-12 pb-10",style:{background:"var(--gradient-hero)"},children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:760},children:[l.jsxs(Me,{to:"/blog",onClick:()=>window.scrollTo(0,0),className:"inline-flex items-center gap-1.5 text-white/70 no-underline mb-6 hover:text-white transition-colors",style:{fontSize:14,fontFamily:"var(--font-mono)"},children:[l.jsxs("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.2",strokeLinecap:"round",strokeLinejoin:"round",children:[l.jsx("line",{x1:"19",y1:"12",x2:"5",y2:"12"}),l.jsx("polyline",{points:"12 19 5 12 12 5"})]}),"All articles"]}),l.jsxs("div",{className:"flex items-center gap-2 mb-4 text-white/70",style:{fontFamily:"var(--font-mono)",fontSize:13},children:[l.jsx("span",{children:Mf(t.date)}),l.jsx("span",{children:"·"}),l.jsx("span",{children:t.readingTime})]}),l.jsx("h1",{className:"text-white font-bold",style:{fontSize:"clamp(28px, 4.5vw, 42px)",lineHeight:1.12,letterSpacing:-.5},children:t.title}),l.jsxs("p",{className:"text-white/80 mt-4",style:{fontSize:17},children:["By ",t.author]})]})}),l.jsxs("div",{className:"px-4 sm:px-14 py-12 sm:py-16",children:[l.jsxs("article",{className:"mx-auto bg-white p-7 sm:p-12",style:{maxWidth:760,borderRadius:16,border:"1px solid var(--ink-100)",boxShadow:"var(--shadow-md)",marginTop:-56},children:[l.jsx("img",{src:t.heroImage,alt:t.heroAlt,width:1200,height:630,className:"w-full h-auto mb-9",style:{borderRadius:12,border:"1px solid var(--ink-100)"}}),l.jsx("div",{className:`prose prose-lg max-w-none prose-headings:font-semibold prose-headings:tracking-tight prose-h2:text-[26px] prose-h2:mt-10 prose-h2:mb-4 prose-h3:text-[20px] prose-h3:mt-8 prose-h3:mb-3 prose-p:text-[17px] prose-p:leading-[1.7] prose-a:text-primary prose-a:no-underline hover:prose-a:underline prose-strong:text-foreground prose-blockquote:border-l-4 prose-blockquote:border-primary prose-blockquote:bg-secondary prose-blockquote:rounded-r-lg prose-blockquote:py-1 prose-blockquote:px-5 prose-blockquote:not-italic prose-li:text-[17px] prose-li:leading-[1.6]`,style:{color:"var(--ink-700)"},children:l.jsx(UL,{remarkPlugins:[o8],children:t.body})})]}),l.jsxs("div",{className:"mx-auto mt-10 p-8 sm:p-10 text-center",style:{maxWidth:760,borderRadius:16,background:"var(--gradient-hero)"},children:[l.jsx("h3",{className:"text-white font-bold",style:{fontSize:24,letterSpacing:-.3},children:"See ClinicFlow handle a real call flow"}),l.jsx("p",{className:"text-white/80 mt-2.5 mx-auto",style:{fontSize:16,maxWidth:460},children:"Don't book a meeting to find out. Call the live demo line, pretend you're a patient, and hear it triage and book in real time."}),l.jsxs("div",{className:"flex flex-wrap justify-center gap-3 mt-6",children:[l.jsx("a",{href:"tel:+14159624019",className:"inline-block font-semibold no-underline",style:{background:"#fff",color:"var(--coral-700)",padding:"13px 26px",borderRadius:12,fontSize:16,boxShadow:"0 8px 24px rgba(0,0,0,0.18)"},children:"Call Our Voice AI Agent"}),l.jsx("a",{href:"/demo",className:"inline-block font-semibold no-underline text-white",style:{border:"1px solid rgba(255,255,255,0.45)",padding:"13px 26px",borderRadius:12,fontSize:16},children:"Book a 15-minute demo"})]})]}),o.length>0&&l.jsxs("div",{className:"mx-auto mt-14",style:{maxWidth:760},children:[l.jsx("h3",{className:"font-semibold mb-5",style:{fontSize:18,color:"var(--ink-900)"},children:"Keep reading"}),l.jsx("div",{className:"grid gap-5 sm:grid-cols-2",children:o.map(a=>l.jsxs(Me,{to:`/blog/${a.slug}`,onClick:()=>window.scrollTo(0,0),className:"block no-underline bg-white p-5",style:{borderRadius:14,border:"1px solid var(--ink-100)",boxShadow:"var(--shadow-sm)"},children:[l.jsx("p",{style:{fontFamily:"var(--font-mono)",fontSize:11.5,color:"var(--ink-400)"},children:Mf(a.date)}),l.jsx("p",{className:"font-semibold mt-1.5",style:{fontSize:16,color:"var(--ink-900)",lineHeight:1.3},children:a.title})]},a.slug))})]})]})]}),l.jsx(pn,{})]})},Fw="https://clinicflowai.com",s8={orthopedics:{slug:"orthopedics",metaTitle:"Voice AI for Orthopedic Practices | ClinicFlow",metaDescription:"ClinicFlow's AI voice agent answers every call to your orthopedic practice 24/7: booking and rescheduling, acute injury triage, post-op routing into the EMR, and urgent escalation to the on-call surgeon.",eyebrow:"For Orthopedic Practices",h1:"The AI voice agent built for orthopedic call volume",sub:"Acute injuries, post-op questions, referrals, imaging, reschedules. Your phone never stops. ClinicFlow answers every call, 24/7, and handles each one the way your best front-desk hire would.",callTypes:[{title:"Acute injury calls",body:"New-patient injury calls are booked in the moment, not sent to voicemail to call a competitor. Urgency is recognized and routed correctly."},{title:"Post-op questions",body:"Routine post-op questions are summarized into your EMR for the care team. Red flags reach the on-call surgeon immediately with a secure summary link."},{title:"Scheduling, end to end",body:"Booking, rescheduling, cancelling, confirming, directly against your schedule, in 28 languages, with no hold queue even during Monday-morning surges."},{title:"Referrals and imaging",body:"Referral patients get called and booked automatically the moment the fax arrives, and imaging questions get answered or routed without front-desk time."}],faqs:[{q:"Can the AI tell an urgent post-op call from a routine reschedule?",a:"Yes. Clinical triage is the core of ClinicFlow. Non-urgent clinical calls are summarized and sent to the right team through EMR messaging; urgent after-hours calls escalate to the on-call surgeon by text with a secure summary link. When the system is uncertain, it escalates rather than guesses."},{q:"Does ClinicFlow book directly into our schedule?",a:"Yes. The agent books, reschedules, cancels, and confirms appointments directly, so calls end with an appointment, not a callback promise."},{q:"What happens after hours?",a:"The same agent answers 24/7 with no after-hours surcharge. Urgent calls reach your on-call surgeon; everything else is documented and waiting for your team in the morning."},{q:"Is ClinicFlow HIPAA compliant?",a:"Yes. ClinicFlow operates under HIPAA with BAAs in place, and call summaries flow through secure, EMR-integrated channels rather than unsecured inboxes."}],relatedPosts:[{title:"Injection Series, Global Periods, and the Scheduling Rules Generic Phone Coverage Gets Wrong",href:"/blog/orthopedic-scheduling-injections-global-periods"},{title:"The 7 Best AI Phone & Answering Solutions for Orthopedic Practices (2026)",href:"/blog/best-ai-answering-service-orthopedic-practices"},{title:"Orthopedic Referral Leakage: Where Surgical Referrals Slip Away",href:"/blog/orthopedic-referral-leakage"}]},spine:{slug:"spine",metaTitle:"Voice AI for Spine Surgery Practices | ClinicFlow",metaDescription:"Founded by spine surgeons, ClinicFlow answers every call to your spine practice 24/7: booking consults, triaging post-op concerns into the EMR, and escalating urgent after-hours calls to the on-call surgeon.",eyebrow:"For Spine Practices",h1:"Voice AI built by spine surgeons, for spine practices",sub:"A spine consult is one of the most valuable calls in medicine, and one of the easiest to lose to voicemail. ClinicFlow answers every call, 24/7, and treats each one the way we'd want our own patients handled.",callTypes:[{title:"New consult capture",body:"Patients in pain call down a list. Answering first and booking in the moment is how the consult lands on your schedule instead of a competitor's."},{title:"Post-op spine triage",body:"A routine wound question and a new neuro deficit are different calls. Routine goes to the EMR for the morning; concerning findings reach the on-call surgeon now."},{title:"Imaging and prior auth questions",body:"MRI scheduling, authorization status, and imaging questions get answered or routed without consuming front-desk hours."},{title:"Full scheduling coverage",body:"Booking, rescheduling, cancellations, and confirmations handled end to end, in 28 languages, around the clock."}],faqs:[{q:"Who designed ClinicFlow's clinical call flows?",a:"Practicing surgeons. ClinicFlow was founded by spine and orthopedic surgeons who built the triage and escalation logic the way they'd want their own patients handled."},{q:"How are urgent after-hours spine calls handled?",a:"The on-call surgeon receives a text with a secure link to the full call summary immediately. Non-urgent calls are documented into the EMR for the morning team. Uncertainty escalates rather than waits."},{q:"Can it handle our call surges?",a:"Yes. Every call is answered immediately with no hold queue, whether it's one call or thirty at once, at 2 p.m. or 2 a.m."},{q:"Is ClinicFlow HIPAA compliant?",a:"Yes. ClinicFlow operates under HIPAA with BAAs in place, and PHI flows only through secure, EMR-integrated channels."}],relatedPosts:[{title:"What Missed Phone Calls Really Cost a Surgical Practice",href:"/blog/cost-of-missed-calls-surgical-practice"},{title:"12 Questions to Ask Before Buying an AI Phone Agent (HIPAA Edition)",href:"/blog/hipaa-ai-phone-agent-questions"},{title:"Prior Authorization Automation for Orthopedic Surgery",href:"/blog/prior-authorization-automation-orthopedics"}]}},Mw=({specialty:e})=>{const t=s8[e],n=`${Fw}/${t.slug}`,r={"@context":"https://schema.org","@type":"FAQPage",mainEntity:t.faqs.map(i=>({"@type":"Question",name:i.q,acceptedAnswer:{"@type":"Answer",text:i.a}}))};return l.jsxs("div",{className:"min-h-screen",children:[l.jsxs(Kn,{children:[l.jsx("title",{children:t.metaTitle}),l.jsx("meta",{name:"description",content:t.metaDescription}),l.jsx("link",{rel:"canonical",href:n}),l.jsx("meta",{property:"og:type",content:"website"}),l.jsx("meta",{property:"og:title",content:t.metaTitle}),l.jsx("meta",{property:"og:description",content:t.metaDescription}),l.jsx("meta",{property:"og:url",content:n}),l.jsx("meta",{property:"og:image",content:`${Fw}/images/main-thumbnail.jpg`}),l.jsx("meta",{name:"twitter:card",content:"summary_large_image"}),l.jsx("script",{type:"application/ld+json",children:JSON.stringify(r)})]}),l.jsx(fn,{}),l.jsxs("main",{style:{background:"var(--ink-25)",fontFamily:"var(--font-sans)"},children:[l.jsx("header",{className:"px-4 sm:px-14 pt-16 pb-14",style:{background:"var(--gradient-hero)"},children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:840},children:[l.jsx("p",{className:"font-semibold mb-3",style:{fontFamily:"var(--font-mono)",fontSize:13,letterSpacing:"0.08em",textTransform:"uppercase",color:"rgba(255,255,255,0.7)"},children:t.eyebrow}),l.jsx("h1",{className:"text-white font-bold",style:{fontSize:"clamp(30px, 5vw, 46px)",lineHeight:1.1,letterSpacing:-.5},children:t.h1}),l.jsx("p",{className:"text-white/80 mt-4",style:{fontSize:18,maxWidth:640,lineHeight:1.55},children:t.sub}),l.jsxs("div",{className:"flex flex-wrap gap-3 mt-7",children:[l.jsx("a",{href:"tel:+14159624019",className:"inline-block font-semibold no-underline",style:{background:"#fff",color:"var(--coral-700)",padding:"13px 26px",borderRadius:12,fontSize:16,boxShadow:"0 8px 24px rgba(0,0,0,0.18)"},children:"Call Our Voice AI Agent"}),l.jsx("a",{href:"/demo",className:"inline-block font-semibold no-underline text-white",style:{border:"1px solid rgba(255,255,255,0.45)",padding:"13px 26px",borderRadius:12,fontSize:16},children:"Book a 15-minute demo"})]})]})}),l.jsxs("section",{className:"px-4 sm:px-14 py-14",children:[l.jsx("div",{className:"mx-auto grid gap-6 sm:grid-cols-2",style:{maxWidth:1280},children:t.callTypes.map(i=>l.jsxs("div",{className:"bg-white p-7",style:{borderRadius:16,border:"1px solid var(--ink-100)",boxShadow:"var(--shadow-sm)"},children:[l.jsx("h2",{className:"font-semibold mb-2",style:{fontSize:19,color:"var(--ink-900)",letterSpacing:-.3},children:i.title}),l.jsx("p",{style:{color:"var(--ink-500)",fontSize:15.5,lineHeight:1.6},children:i.body})]},i.title))}),l.jsxs("div",{className:"mx-auto mt-10 p-7 text-center",style:{maxWidth:1280,borderRadius:16,background:"var(--gradient-hero)"},children:[l.jsx("p",{className:"text-white font-bold",style:{fontSize:22,letterSpacing:-.3},children:"Up to 70% lower operational costs. 20% increase in surgical revenue."}),l.jsx("p",{className:"text-white/75 mt-2",style:{fontSize:15.5},children:"Reported across ClinicFlow partner practices."})]})]}),l.jsx("section",{className:"px-4 sm:px-14 pb-14",children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:840},children:[l.jsx("h2",{className:"font-semibold mb-6",style:{fontSize:24,color:"var(--ink-900)",letterSpacing:-.3},children:"Common questions"}),l.jsx("div",{className:"space-y-4",children:t.faqs.map(i=>l.jsxs("div",{className:"bg-white p-6",style:{borderRadius:14,border:"1px solid var(--ink-100)"},children:[l.jsx("h3",{className:"font-semibold mb-2",style:{fontSize:17,color:"var(--ink-900)"},children:i.q}),l.jsx("p",{style:{color:"var(--ink-500)",fontSize:15.5,lineHeight:1.6},children:i.a})]},i.q))}),l.jsx("h2",{className:"font-semibold mt-12 mb-5",style:{fontSize:20,color:"var(--ink-900)"},children:"From the blog"}),l.jsx("div",{className:"grid gap-4 sm:grid-cols-3",children:t.relatedPosts.map(i=>l.jsx(Me,{to:i.href,onClick:()=>window.scrollTo(0,0),className:"block no-underline bg-white p-5",style:{borderRadius:14,border:"1px solid var(--ink-100)",boxShadow:"var(--shadow-sm)"},children:l.jsx("p",{className:"font-semibold",style:{fontSize:15,color:"var(--ink-900)",lineHeight:1.35},children:i.title})},i.href))})]})})]}),l.jsx(pn,{})]})},CC="https://clinicflowai.com",Ow=`${CC}/missed-call-calculator`,Dw="Missed-Call Revenue Calculator for Surgical Practices | ClinicFlow",Lw="Estimate what missed and after-hours phone calls cost your practice every year. Enter your call volume and case value to see your annual revenue leak.",zw=e=>e.toLocaleString("en-US",{style:"currency",currency:"USD",maximumFractionDigits:0}),l8=[{label:"Orthopedics",value:"orthopedics"},{label:"Ophthalmology",value:"ophthalmology"},{label:"ENT",value:"ent"},{label:"Dermatology",value:"dermatology"},{label:"Podiatry",value:"podiatry"},{label:"Primary Care",value:"primary_care"},{label:"Multi-Specialty",value:"multi_specialty"},{label:"Other",value:"other"}],c8=["In-house staff","Answering service","Voicemail","Other"],Di={width:"100%",padding:"11px 14px",borderRadius:10,border:"1px solid var(--ink-200)",fontSize:15,fontFamily:"inherit",background:"#fff",color:"var(--ink-900)"},Qr={display:"block",fontSize:13.5,fontWeight:600,color:"var(--ink-600)",marginBottom:6},Yl=({label:e,value:t,set:n,min:r,max:i,step:o,suffix:a})=>l.jsxs("div",{children:[l.jsxs("div",{className:"flex justify-between items-baseline mb-1.5",children:[l.jsx("span",{style:Qr,children:e}),l.jsxs("span",{style:{fontFamily:"var(--font-mono)",fontSize:15,fontWeight:600,color:"var(--coral-500)"},children:[t.toLocaleString(),a]})]}),l.jsx("input",{type:"range",min:r,max:i,step:o,value:t,onChange:s=>n(Number(s.target.value)),className:"w-full",style:{accentColor:"#1B73B5"}})]}),u8=()=>{const[e,t]=x.useState(400),[n,r]=x.useState(25),[i,o]=x.useState(10),[a,s]=x.useState(5e3),[c,u]=x.useState(""),[d,h]=x.useState(""),[p,f]=x.useState(""),[v,m]=x.useState(""),[b,g]=x.useState("orthopedics"),[y,w]=x.useState(""),[k,A]=x.useState("In-house staff"),[C,I]=x.useState("idle"),F=x.useMemo(()=>e*(n/100)*(i/100)*a*52,[e,n,i,a]),D=Math.round(e*4.33),j=async R=>{var _;R.preventDefault(),I("sending");try{const $=(_=document.cookie.match(/hubspotutk=([^;]+)/))==null?void 0:_[1],O=await fetch("https://api.hsforms.com/submissions/v3/integration/submit/243581080/3d950008-53fb-442a-b8f3-d6c9ae6e8906",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fields:[{objectTypeId:"0-1",name:"firstname",value:c},{objectTypeId:"0-1",name:"lastname",value:d},{objectTypeId:"0-1",name:"email",value:p},{objectTypeId:"0-1",name:"company",value:v},{objectTypeId:"0-1",name:"practice_specialty",value:b},{objectTypeId:"0-1",name:"number_of_providers",value:y||"0"},{objectTypeId:"0-1",name:"monthly_call_volume",value:String(D)},{objectTypeId:"0-1",name:"current_phone_solution",value:k}],context:{...$?{hutk:$}:{},pageUri:window.location.href,pageName:document.title}})});if(!O.ok)throw new Error(`HubSpot ${O.status}`);const V=window.gtag;V==null||V("event","generate_lead",{form_id:"missed-call-calculator",value:Math.round(F),currency:"USD"}),I("done")}catch($){console.warn("Calculator submission failed:",$),I("error")}};return l.jsxs("div",{className:"min-h-screen",children:[l.jsxs(Kn,{children:[l.jsx("title",{children:Dw}),l.jsx("meta",{name:"description",content:Lw}),l.jsx("link",{rel:"canonical",href:Ow}),l.jsx("meta",{property:"og:type",content:"website"}),l.jsx("meta",{property:"og:title",content:Dw}),l.jsx("meta",{property:"og:description",content:Lw}),l.jsx("meta",{property:"og:url",content:Ow}),l.jsx("meta",{property:"og:image",content:`${CC}/images/main-thumbnail.jpg`}),l.jsx("meta",{name:"twitter:card",content:"summary_large_image"})]}),l.jsx(fn,{}),l.jsxs("main",{style:{background:"var(--ink-25)",fontFamily:"var(--font-sans)"},children:[l.jsx("header",{className:"px-4 sm:px-14 pt-16 pb-24",style:{background:"var(--gradient-hero)"},children:l.jsxs("div",{className:"mx-auto text-center",style:{maxWidth:760},children:[l.jsx("p",{className:"font-semibold mb-3",style:{fontFamily:"var(--font-mono)",fontSize:13,letterSpacing:"0.08em",textTransform:"uppercase",color:"rgba(255,255,255,0.7)"},children:"Free calculator"}),l.jsx("h1",{className:"text-white font-bold",style:{fontSize:"clamp(30px, 5vw, 44px)",lineHeight:1.1,letterSpacing:-.5},children:"What are missed calls costing your practice?"}),l.jsx("p",{className:"text-white/80 mt-4 mx-auto",style:{fontSize:17,maxWidth:560,lineHeight:1.55},children:"Most surgical practices miss 20% to 35% of calls during business hours and nearly all of them after 5 p.m. Run your own numbers."})]})}),l.jsxs("section",{className:"px-4 sm:px-14 pb-16",children:[l.jsxs("div",{className:"mx-auto grid gap-7 lg:grid-cols-[1.1fr_1fr]",style:{maxWidth:1280,marginTop:-56},children:[l.jsxs("div",{className:"bg-white p-7 sm:p-9 space-y-7",style:{borderRadius:16,border:"1px solid var(--ink-100)",boxShadow:"var(--shadow-lg)"},children:[l.jsx(Yl,{label:"Inbound calls per week",value:e,set:t,min:50,max:2e3,step:25,suffix:""}),l.jsx(Yl,{label:"Share of calls missed",value:n,set:r,min:5,max:60,step:1,suffix:"%"}),l.jsx(Yl,{label:"Calls that are new-patient / consult opportunities",value:i,set:o,min:1,max:30,step:1,suffix:"%"}),l.jsx(Yl,{label:"Average case value",value:a,set:s,min:500,max:2e4,step:250,suffix:""}),l.jsx("p",{style:{fontSize:12.5,color:"var(--ink-400)",lineHeight:1.5},children:"Formula: weekly calls × missed % × consult share × average case value × 52. Defaults reflect typical specialty-practice benchmarks; set them to your own numbers."})]}),l.jsxs("div",{className:"space-y-6",children:[l.jsxs("div",{className:"p-7 sm:p-8 text-center",style:{borderRadius:16,background:"var(--gradient-hero)"},children:[l.jsx("p",{className:"text-white/75 font-semibold",style:{fontSize:13.5,letterSpacing:"0.07em",textTransform:"uppercase"},children:"Estimated annual revenue leak"}),l.jsx("p",{className:"text-white font-extrabold",style:{fontSize:"clamp(38px, 5vw, 52px)",letterSpacing:-1.2,margin:"6px 0 2px"},children:zw(F)}),l.jsxs("p",{className:"text-white/70",style:{fontSize:14},children:[zw(F/12)," per month walking to the next practice on the list"]})]}),l.jsx("div",{className:"bg-white p-7",style:{borderRadius:16,border:"1px solid var(--ink-100)",boxShadow:"var(--shadow-md)"},children:C==="done"?l.jsxs("div",{className:"text-center py-6",children:[l.jsx("p",{className:"font-bold mb-2",style:{fontSize:19,color:"var(--ink-900)"},children:"Breakdown on its way 📬"}),l.jsx("p",{style:{fontSize:15,color:"var(--ink-500)",lineHeight:1.6},children:"We'll follow up with how practices like yours close the leak. Want to skip ahead?"}),l.jsx("a",{href:"/demo",className:"inline-block mt-4 font-semibold no-underline text-white",style:{background:"var(--coral-500)",padding:"12px 22px",borderRadius:10,fontSize:15},children:"Hear the AI handle a live call"})]}):l.jsxs("form",{onSubmit:j,className:"space-y-4",children:[l.jsx("p",{className:"font-bold",style:{fontSize:17,color:"var(--ink-900)"},children:"Email me this breakdown + how to close it"}),l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsxs("div",{children:[l.jsx("label",{style:Qr,children:"First name *"}),l.jsx("input",{style:Di,required:!0,value:c,onChange:R=>u(R.target.value)})]}),l.jsxs("div",{children:[l.jsx("label",{style:Qr,children:"Last name *"}),l.jsx("input",{style:Di,required:!0,value:d,onChange:R=>h(R.target.value)})]})]}),l.jsxs("div",{children:[l.jsx("label",{style:Qr,children:"Work email *"}),l.jsx("input",{style:Di,type:"email",required:!0,value:p,onChange:R=>f(R.target.value)})]}),l.jsxs("div",{children:[l.jsx("label",{style:Qr,children:"Practice / company *"}),l.jsx("input",{style:Di,required:!0,value:v,onChange:R=>m(R.target.value)})]}),l.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[l.jsxs("div",{children:[l.jsx("label",{style:Qr,children:"Specialty *"}),l.jsx("select",{style:Di,value:b,onChange:R=>g(R.target.value),children:l8.map(R=>l.jsx("option",{value:R.value,children:R.label},R.value))})]}),l.jsxs("div",{children:[l.jsx("label",{style:Qr,children:"Providers *"}),l.jsx("input",{style:Di,type:"number",min:1,required:!0,value:y,onChange:R=>w(R.target.value)})]})]}),l.jsxs("div",{children:[l.jsx("label",{style:Qr,children:"How do you handle calls today? *"}),l.jsx("select",{style:Di,value:k,onChange:R=>A(R.target.value),children:c8.map(R=>l.jsx("option",{value:R,children:R},R))})]}),l.jsx("button",{type:"submit",disabled:C==="sending",className:"w-full font-semibold text-white cursor-pointer border-none",style:{background:"var(--coral-500)",padding:"13px 18px",borderRadius:10,fontSize:15.5,opacity:C==="sending"?.7:1},children:C==="sending"?"Sending...":"Send my breakdown"}),C==="error"&&l.jsx("p",{style:{fontSize:13.5,color:"#C0392B"},children:"Something went wrong. Email us at management@clinicflowai.com and we'll run the numbers with you."})]})})]})]}),l.jsx("div",{className:"mx-auto mt-12 text-center",style:{maxWidth:640},children:l.jsxs("p",{style:{fontSize:15.5,color:"var(--ink-500)",lineHeight:1.6},children:["Where do these numbers come from? Read the full breakdown:"," ",l.jsx("a",{href:"/blog/cost-of-missed-calls-surgical-practice",style:{color:"var(--coral-500)",fontWeight:600},children:"What missed calls really cost a surgical practice"})]})})]})]}),l.jsx(pn,{})]})},d8={slug:"epic",name:"Epic",logo:"/images/emr-trimmed/emr-epic.png",metaTitle:"AI Answering Service for Practices on Epic | ClinicFlow",metaDescription:"ClinicFlow answers every call 24/7 for surgical practices on Epic: appointments booked against your schedule, call summaries routed to your team's In Basket workflows, urgent calls escalated to the on-call surgeon. No Epic interface project required.",h1:"Voice AI for practices on Epic",sub:"Epic runs your clinical world. ClinicFlow makes sure the phones keep up: every call answered 24/7, appointments booked, and call documentation routed into the workflows your team already lives in.",points:[{title:"Summaries that reach In Basket workflows",body:"Epic teams live in In Basket. ClinicFlow call summaries are routed into your team's EMR messaging workflows, configured with you at onboarding, so the night's calls are waiting alongside the morning's messages instead of in a separate portal no one checks."},{title:"MyChart doesn't answer the phone",body:"Portals deflect some routine volume, but the calls that matter most (new patients, referrals, someone in pain after surgery) still come in by phone. ClinicFlow answers those live, 24/7, instead of letting them roll to voicemail."},{title:"No Epic interface project required",body:"Going live doesn't mean an Epic build, integration tickets, or a committee. Your numbers forward to ClinicFlow and routing rules are configured with your team. Days, not quarters."},{title:"Scheduling that respects your templates",body:"Epic scheduling templates are intricate by design. ClinicFlow books, reschedules, cancels, and confirms against your schedule rules during the call, in 28 languages, with no hold queue."}],faqs:[{q:"Do we need an Epic integration project to start?",a:"No. ClinicFlow goes live by forwarding your phone numbers and configuring routing rules with your team. There is no Epic interface build or IT project on the critical path."},{q:"How do call summaries reach our Epic workflows?",a:"Clinical calls are summarized by the AI agent and routed to the appropriate team through your EMR messaging workflows, configured during onboarding so documentation lands where your staff already works."},{q:"We already have MyChart. Why do we need ClinicFlow?",a:"MyChart serves patients who use the portal. ClinicFlow serves the ones who call: new patients, referrals, post-op concerns, after-hours worries. Those calls are where surgical revenue and clinical risk live, and a portal cannot pick them up."},{q:"Is ClinicFlow HIPAA compliant?",a:"Yes. ClinicFlow operates under HIPAA with BAAs in place, and PHI flows only through secure, EMR-integrated channels."}]},h8={slug:"athenahealth",name:"athenahealth",logo:"/images/emr-trimmed/emr-athena-health.png",metaTitle:"AI Answering Service for Practices on athenahealth | ClinicFlow",metaDescription:"ClinicFlow answers every call 24/7 for surgical practices on athenahealth: appointments booked, call summaries routed into your athenaOne workflows, urgent calls escalated to the on-call surgeon.",h1:"Voice AI for practices on athenahealth",sub:"athenaOne keeps your practice running lean. ClinicFlow covers the part it can't: a live, clinically-aware answer on every inbound call, at every hour.",points:[{title:"Fits your athenaOne workflows",body:"Call summaries are routed into your team's messaging and task workflows, configured at onboarding, so the front desk starts the day with documented calls instead of a voicemail queue to transcribe."},{title:"Complements athenaCommunicator, not duplicates it",body:"Automated reminders and outbound messages are solved problems. The unsolved one is live inbound coverage: the new-patient call at 6:45 p.m., the post-op question on Saturday. That's the gap ClinicFlow closes."},{title:"Built for lean front offices",body:"athenahealth practices tend to run independent and efficient, with staff wearing several hats. ClinicFlow absorbs the call surges and the after-hours window so a lean team doesn't have to choose between the phone and the patient at the desk."},{title:"No rip-and-replace",body:"athenaOne stays your system of record. Your numbers forward to ClinicFlow, routing is configured with your team, and you're live in days."}],faqs:[{q:"Does ClinicFlow replace athenaCommunicator?",a:"No, they do different jobs. athenaCommunicator handles outbound reminders and patient messaging. ClinicFlow answers live inbound calls 24/7, books appointments during the call, and triages clinical concerns to the right person."},{q:"How do call summaries get into athenaOne?",a:"Clinical calls are summarized by the AI agent and routed to the appropriate team through your EMR messaging workflows, configured during onboarding so documentation lands where your staff already works."},{q:"How long does setup take?",a:"Most practices go live in days. There is no software migration: call flows and routing rules are configured with your team, then your numbers forward to ClinicFlow."},{q:"Is ClinicFlow HIPAA compliant?",a:"Yes. ClinicFlow operates under HIPAA with BAAs in place, and PHI flows only through secure, EMR-integrated channels."}]},f8={slug:"eclinicalworks",name:"eClinicalWorks",logo:"/images/emr-trimmed/emr-ecw.png",metaTitle:"AI Answering Service for Practices on eClinicalWorks | ClinicFlow",metaDescription:"ClinicFlow answers every call 24/7 for surgical practices on eClinicalWorks: appointments booked, structured call summaries that match your telephone-encounter documentation, urgent calls escalated to the on-call surgeon.",h1:"Voice AI for practices on eClinicalWorks",sub:"Your team already documents calls as telephone encounters. ClinicFlow makes sure every call gets answered first, then hands your staff the structured summary.",points:[{title:"Matches your telephone-encounter workflow",body:"eCW teams document phone calls as telephone encounters. ClinicFlow delivers each call as a structured summary routed to the right team, so documentation follows the pattern your staff already uses instead of starting from a voicemail."},{title:"Surgical triage, not generic call handling",body:"EMR vendors increasingly bundle generic phone assistants. ClinicFlow was built by surgeons for surgical practices: it knows a routine reschedule from a post-op red flag, and escalates urgent after-hours calls to the on-call surgeon with a secure summary."},{title:"Multi-location ready",body:"eClinicalWorks is common in multi-office specialty groups. ClinicFlow routes by location and provider, so each office's calls land with the right team under one consistent after-hours policy."},{title:"No rip-and-replace",body:"eCW stays your system of record. Your numbers forward to ClinicFlow, routing is configured with your team, and you're live in days."}],faqs:[{q:"How does ClinicFlow fit our telephone-encounter documentation?",a:"Each clinical call is summarized with the caller's information and routed to the appropriate team through your EMR messaging workflows, so your staff documents from a structured summary rather than reconstructing a voicemail."},{q:"We have multiple locations. Can routing differ per office?",a:"Yes. Call flows, schedules, and escalation rules are configured per location and per provider during onboarding."},{q:"How is this different from a generic AI assistant bundled with an EMR?",a:"Clinical judgment. ClinicFlow's triage and escalation flows were designed by practicing surgeons for surgical call types: post-op concerns, referrals, imaging, workers' comp intake. Generic assistants handle the average call; surgical practices are bought or lost on the edge cases."},{q:"Is ClinicFlow HIPAA compliant?",a:"Yes. ClinicFlow operates under HIPAA with BAAs in place, and PHI flows only through secure, EMR-integrated channels."}]},p8={slug:"modmed",name:"ModMed",logo:"/images/emr-trimmed/emr-modmed.png",metaTitle:"AI Answering Service for Practices on ModMed | ClinicFlow",metaDescription:"ClinicFlow runs in orthopedic partner practices on ModMed EMA today: every call answered 24/7, appointments booked, summaries routed into EMA workflows, urgent calls escalated to the on-call surgeon.",h1:"Voice AI for practices on ModMed",sub:"You chose ModMed because specialty-built software wins. ClinicFlow is the same decision for your phones, and it's already running in orthopedic practices on EMA.",points:[{title:"Proven in ModMed practices today",body:"ClinicFlow's earliest partner practices run ModMed EMA. The call-to-documentation flow isn't a roadmap slide; it answers live orthopedic phone lines right now."},{title:"Specialty logic, like EMA itself",body:"EMA adapts to your specialty instead of forcing generic workflows. ClinicFlow's triage works the same way: a post-op fever, a workers' comp intake, and a Tuesday reschedule each get the path a surgical practice would want."},{title:"Summaries where your team works",body:"Clinical call summaries are routed to the right team through your EMR messaging workflows, configured at onboarding, with urgent after-hours calls escalated to the on-call surgeon by secure text."},{title:"No rip-and-replace",body:"EMA stays your system of record. Your numbers forward to ClinicFlow, routing is configured with your team, and you're live in days."}],faqs:[{q:"Is ClinicFlow actually live with ModMed practices?",a:"Yes. ClinicFlow's earliest partner practices are orthopedic groups running ModMed EMA, with calls answered, booked, and documented through this exact workflow every day."},{q:"How do call summaries reach EMA?",a:"Clinical calls are summarized by the AI agent and routed to the appropriate team through your EMR messaging workflows, configured during onboarding so documentation lands where your staff already works."},{q:"How long does setup take?",a:"Most practices go live in days. There is no software migration: call flows and routing rules are configured with your team, then your numbers forward to ClinicFlow."},{q:"Is ClinicFlow HIPAA compliant?",a:"Yes. ClinicFlow operates under HIPAA with BAAs in place, and PHI flows only through secure, EMR-integrated channels."}]},m8={slug:"advancedmd",name:"AdvancedMD",logo:"/images/emr-trimmed/emr-advancedmd.png",metaTitle:"AI Answering Service for Practices on AdvancedMD | ClinicFlow",metaDescription:"ClinicFlow answers every call 24/7 for surgical practices on AdvancedMD: complete structured intake on every call for cleaner billing, appointments booked, urgent calls escalated to the on-call surgeon.",h1:"Voice AI for practices on AdvancedMD",sub:"AdvancedMD practices run tight billing operations. ClinicFlow feeds them what billing needs most: complete, structured intake on every single call.",points:[{title:"Complete intake means cleaner claims",body:"A rushed phone intake becomes a denied claim. ClinicFlow runs the full intake checklist identically on every call, including the long ones like workers' comp (claim number, adjuster, employer, authorization status), so the data your billing workflow depends on arrives complete."},{title:"Full coverage for lean offices",body:"AdvancedMD practices are typically independent, with front offices that can't staff nights, weekends, or Monday surges. ClinicFlow answers every call at every hour, so coverage stops depending on headcount."},{title:"Summaries where your team works",body:"Clinical call summaries are routed to the right team through your EMR messaging workflows, configured at onboarding, with urgent after-hours calls escalated to the on-call surgeon by secure text."},{title:"No rip-and-replace",body:"AdvancedMD stays your system of record. Your numbers forward to ClinicFlow, routing is configured with your team, and you're live in days."}],faqs:[{q:"How does ClinicFlow help our billing workflow?",a:"Every call follows a complete, structured intake, so demographics, insurance details, and case information (including workers' comp fields) arrive consistent and complete instead of depending on how busy the desk was when the phone rang."},{q:"How do call summaries reach AdvancedMD?",a:"Clinical calls are summarized by the AI agent and routed to the appropriate team through your EMR messaging workflows, configured during onboarding so documentation lands where your staff already works."},{q:"How long does setup take?",a:"Most practices go live in days. There is no software migration: call flows and routing rules are configured with your team, then your numbers forward to ClinicFlow."},{q:"Is ClinicFlow HIPAA compliant?",a:"Yes. ClinicFlow operates under HIPAA with BAAs in place, and PHI flows only through secure, EMR-integrated channels."}]},g8={epic:d8,athenahealth:h8,eclinicalworks:f8,modmed:p8,advancedmd:m8},Ql="https://clinicflowai.com",Qf=g8,ts=({emr:e})=>{const t=Qf[e],n=`${Ql}/integrations/${t.slug}`,r={"@context":"https://schema.org","@type":"FAQPage",mainEntity:t.faqs.map(o=>({"@type":"Question",name:o.q,acceptedAnswer:{"@type":"Answer",text:o.a}}))},i={"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:`${Ql}/`},{"@type":"ListItem",position:2,name:"Integrations",item:`${Ql}/integrations`},{"@type":"ListItem",position:3,name:t.name,item:n}]};return l.jsxs("div",{className:"min-h-screen",children:[l.jsxs(Kn,{children:[l.jsx("title",{children:t.metaTitle}),l.jsx("meta",{name:"description",content:t.metaDescription}),l.jsx("link",{rel:"canonical",href:n}),l.jsx("meta",{property:"og:type",content:"website"}),l.jsx("meta",{property:"og:title",content:t.metaTitle}),l.jsx("meta",{property:"og:description",content:t.metaDescription}),l.jsx("meta",{property:"og:url",content:n}),l.jsx("meta",{property:"og:image",content:`${Ql}/images/main-thumbnail.jpg`}),l.jsx("meta",{name:"twitter:card",content:"summary_large_image"}),l.jsx("script",{type:"application/ld+json",children:JSON.stringify(r)}),l.jsx("script",{type:"application/ld+json",children:JSON.stringify(i)})]}),l.jsx(fn,{}),l.jsxs("main",{style:{background:"var(--ink-25)",fontFamily:"var(--font-sans)"},children:[l.jsx("header",{className:"px-4 sm:px-14 pt-16 pb-14",style:{background:"var(--gradient-hero)"},children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:840},children:[l.jsx("div",{className:"inline-flex items-center gap-3 mb-5 px-4 py-2",style:{background:"rgba(255,255,255,0.92)",borderRadius:12},children:l.jsx("img",{src:t.logo,alt:t.name,style:{width:130,height:34,objectFit:"contain"}})}),l.jsx("h1",{className:"text-white font-bold",style:{fontSize:"clamp(30px, 5vw, 44px)",lineHeight:1.1,letterSpacing:-.5},children:t.h1}),l.jsx("p",{className:"text-white/80 mt-4",style:{fontSize:18,maxWidth:640,lineHeight:1.55},children:t.sub}),l.jsx("a",{href:"/demo",className:"inline-block mt-7 font-semibold no-underline",style:{background:"#fff",color:"var(--coral-700)",padding:"13px 26px",borderRadius:12,fontSize:16,boxShadow:"0 8px 24px rgba(0,0,0,0.18)"},children:"Book a 15-minute demo"})]})}),l.jsx("section",{className:"px-4 sm:px-14 py-14",children:l.jsx("div",{className:"mx-auto grid gap-6 sm:grid-cols-2",style:{maxWidth:1280},children:t.points.map(o=>l.jsxs("div",{className:"bg-white p-7",style:{borderRadius:16,border:"1px solid var(--ink-100)",boxShadow:"var(--shadow-sm)"},children:[l.jsx("h2",{className:"font-semibold mb-2",style:{fontSize:19,color:"var(--ink-900)",letterSpacing:-.3},children:o.title}),l.jsx("p",{style:{color:"var(--ink-500)",fontSize:15.5,lineHeight:1.6},children:o.body})]},o.title))})}),l.jsx("section",{className:"px-4 sm:px-14 pb-14",children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:840},children:[l.jsx("h2",{className:"font-semibold mb-6",style:{fontSize:24,color:"var(--ink-900)",letterSpacing:-.3},children:"Common questions"}),l.jsx("div",{className:"space-y-4",children:t.faqs.map(o=>l.jsxs("div",{className:"bg-white p-6",style:{borderRadius:14,border:"1px solid var(--ink-100)"},children:[l.jsx("h3",{className:"font-semibold mb-2",style:{fontSize:17,color:"var(--ink-900)"},children:o.q}),l.jsx("p",{style:{color:"var(--ink-500)",fontSize:15.5,lineHeight:1.6},children:o.a})]},o.q))}),l.jsxs("div",{className:"mt-10 flex flex-wrap gap-3 items-center",children:[l.jsx("span",{style:{fontSize:14.5,color:"var(--ink-500)"},children:"Other systems:"}),Object.values(Qf).filter(o=>o.slug!==t.slug).map(o=>l.jsx(Me,{to:`/integrations/${o.slug}`,onClick:()=>window.scrollTo(0,0),className:"no-underline px-3 py-1.5 bg-white",style:{borderRadius:10,border:"1px solid var(--ink-100)",fontSize:14,color:"var(--ink-700)",fontWeight:600},children:o.name},o.slug))]})]})})]}),l.jsx(pn,{})]})},ah="https://clinicflowai.com",Bw="EMR Integrations for Ortho Practices | ClinicFlow",Hw="ClinicFlow integrates with Epic, athenahealth, eClinicalWorks, ModMed, and AdvancedMD. See how call summaries and bookings sync to your EMR.",y8=()=>l.jsxs("div",{className:"min-h-screen",children:[l.jsxs(Kn,{children:[l.jsx("title",{children:Bw}),l.jsx("meta",{name:"description",content:Hw}),l.jsx("link",{rel:"canonical",href:`${ah}/integrations`}),l.jsx("meta",{property:"og:type",content:"website"}),l.jsx("meta",{property:"og:title",content:Bw}),l.jsx("meta",{property:"og:description",content:Hw}),l.jsx("meta",{property:"og:url",content:`${ah}/integrations`}),l.jsx("meta",{property:"og:image",content:`${ah}/images/main-thumbnail.jpg`}),l.jsx("meta",{name:"twitter:card",content:"summary_large_image"})]}),l.jsx(fn,{}),l.jsxs("main",{style:{background:"var(--ink-25)",fontFamily:"var(--font-sans)"},children:[l.jsx("header",{className:"px-4 sm:px-14 pt-16 pb-14",style:{background:"var(--gradient-hero)"},children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:840},children:[l.jsx("p",{className:"font-semibold mb-3",style:{fontFamily:"var(--font-mono)",fontSize:13,letterSpacing:"0.08em",textTransform:"uppercase",color:"rgba(255,255,255,0.7)"},children:"Integrations"}),l.jsx("h1",{className:"text-white font-bold",style:{fontSize:"clamp(30px, 5vw, 44px)",lineHeight:1.1,letterSpacing:-.5},children:"Works alongside the EMR you already run"}),l.jsx("p",{className:"text-white/80 mt-4",style:{fontSize:18,maxWidth:620,lineHeight:1.55},children:"No rip-and-replace. ClinicFlow answers your phones, books on your schedule, and routes call summaries into your EMR messaging workflows."})]})}),l.jsx("section",{className:"px-4 sm:px-14 py-14",children:l.jsxs("div",{className:"mx-auto grid gap-6 sm:grid-cols-2 lg:grid-cols-3",style:{maxWidth:1280},children:[Object.values(Qf).map(e=>l.jsxs(Me,{to:`/integrations/${e.slug}`,onClick:()=>window.scrollTo(0,0),className:"block no-underline bg-white p-7 text-center transition-shadow hover:shadow-lg",style:{borderRadius:16,border:"1px solid var(--ink-100)",boxShadow:"var(--shadow-sm)"},children:[l.jsx("div",{style:{height:48,display:"flex",alignItems:"center",justifyContent:"center",marginBottom:12},children:l.jsx("img",{src:e.logo,alt:e.name,style:{width:150,height:44,objectFit:"contain"}})}),l.jsx("p",{className:"font-semibold",style:{fontSize:17,color:"var(--ink-900)"},children:e.name}),l.jsx("p",{className:"mt-1.5",style:{fontSize:14,color:"var(--coral-500)",fontWeight:600},children:"See how it works →"})]},e.slug)),l.jsxs("div",{className:"p-7 text-center flex flex-col justify-center",style:{borderRadius:16,border:"1px dashed var(--ink-200)"},children:[l.jsx("p",{className:"font-semibold",style:{fontSize:16,color:"var(--ink-700)"},children:"On a different system?"}),l.jsxs("p",{className:"mt-1.5",style:{fontSize:14,color:"var(--ink-500)",lineHeight:1.5},children:["ClinicFlow's routing is configurable."," ",l.jsx("a",{href:"/demo",style:{color:"var(--coral-500)",fontWeight:600},children:"Talk to us"})]})]})]})})]}),l.jsx(pn,{})]}),sh="https://clinicflowai.com",$w="Live Demo: Call ClinicFlow's AI Right Now | ClinicFlow",Ww="Don't take our word for it. Call ClinicFlow's live demo line, pretend you're a patient, and hear the AI triage, take your insurance, and book the visit in real time.",v8=()=>l.jsxs("div",{className:"min-h-screen",children:[l.jsxs(Kn,{children:[l.jsx("title",{children:$w}),l.jsx("meta",{name:"description",content:Ww}),l.jsx("link",{rel:"canonical",href:`${sh}/demo`}),l.jsx("meta",{property:"og:type",content:"website"}),l.jsx("meta",{property:"og:title",content:$w}),l.jsx("meta",{property:"og:description",content:Ww}),l.jsx("meta",{property:"og:url",content:`${sh}/demo`}),l.jsx("meta",{property:"og:image",content:`${sh}/images/main-thumbnail.jpg`}),l.jsx("meta",{name:"twitter:card",content:"summary_large_image"})]}),l.jsx(fn,{}),l.jsxs("main",{style:{fontFamily:"var(--font-sans)"},children:[l.jsx(eS,{}),l.jsx(Tm,{})]}),l.jsx(pn,{})]}),AC="https://clinicflowai.com",Vw=`${AC}/compare/assort-health`,qw="ClinicFlow vs. Assort Health: An Honest Comparison (2026)",Uw="Both are healthcare voice AI platforms. Assort Health is built for enterprise scale across 20+ specialties; ClinicFlow is built exclusively for surgical practices by practicing surgeons. Here's how to choose.",w8=[{dim:"Built for",clinicflow:"Surgical practices exclusively: orthopedics, spine, and surgical specialties",assort:"20+ specialties across large medical groups and health systems"},{dim:"Founders",clinicflow:"Practicing surgeons; clinical triage flows designed by the people who take call",assort:"Technology founders; specialty content built with clinical input at scale"},{dim:"Sweet spot",clinicflow:"Independent and physician-owned groups that want depth in surgical call types and direct access to the founding team",assort:"Enterprise organizations that need one vendor across many specialties and locations"},{dim:"After-hours urgent calls",clinicflow:"Core design: urgent calls escalate to the on-call surgeon by text with a secure summary link",assort:"Configurable routing and triage across its platform"},{dim:"Surgical workflows",clinicflow:"Post-op triage, referral fax intake with automatic patient booking, workers' comp intake, prior auth automation (rolling out)",assort:"Broad scheduling and intake coverage across specialties"},{dim:"EMR approach",clinicflow:"Works alongside your EMR: summaries routed into your team's messaging workflows; runs in ModMed EMA practices today",assort:"EHR integrations across major enterprise systems"},{dim:"Scale & funding",clinicflow:"Early-stage and focused; founding team works directly with every practice",assort:"Large venture-backed platform reporting 150M+ patient interactions"},{dim:"Try it yourself",clinicflow:"Public live demo line: call it as a patient right now (clinicflowai.com/demo)",assort:"Demos through their sales process"}],x8=()=>l.jsxs("div",{className:"min-h-screen",children:[l.jsxs(Kn,{children:[l.jsx("title",{children:qw}),l.jsx("meta",{name:"description",content:Uw}),l.jsx("link",{rel:"canonical",href:Vw}),l.jsx("meta",{property:"og:type",content:"website"}),l.jsx("meta",{property:"og:title",content:qw}),l.jsx("meta",{property:"og:description",content:Uw}),l.jsx("meta",{property:"og:url",content:Vw}),l.jsx("meta",{property:"og:image",content:`${AC}/images/main-thumbnail.jpg`}),l.jsx("meta",{name:"twitter:card",content:"summary_large_image"})]}),l.jsx(fn,{}),l.jsxs("main",{style:{background:"var(--ink-25)",fontFamily:"var(--font-sans)"},children:[l.jsx("header",{className:"px-4 sm:px-14 pt-16 pb-14",style:{background:"var(--gradient-hero)"},children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:840},children:[l.jsx("p",{className:"font-semibold mb-3",style:{fontFamily:"var(--font-mono)",fontSize:13,letterSpacing:"0.08em",textTransform:"uppercase",color:"rgba(255,255,255,0.7)"},children:"Comparison"}),l.jsx("h1",{className:"text-white font-bold",style:{fontSize:"clamp(30px, 5vw, 44px)",lineHeight:1.1,letterSpacing:-.5},children:"ClinicFlow vs. Assort Health"}),l.jsx("p",{className:"text-white/80 mt-4",style:{fontSize:18,maxWidth:660,lineHeight:1.55},children:"An honest comparison. Both platforms answer healthcare phone calls with AI. The right choice depends on what kind of organization you are."})]})}),l.jsx("section",{className:"px-4 sm:px-14 py-12",children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:1280},children:[l.jsx("div",{className:"bg-white p-7 mb-8",style:{borderRadius:16,border:"1px solid var(--ink-100)",boxShadow:"var(--shadow-sm)"},children:l.jsx("p",{style:{fontSize:16.5,color:"var(--ink-700)",lineHeight:1.65},children:"First, credit where due: Assort Health is a serious, well-funded platform serving large multi-specialty organizations, and they publicize strong results. If you run an enterprise health system standardizing across 20+ specialties, they belong on your shortlist. ClinicFlow makes a different bet: that surgical practices are not a vertical to support but the entire product, and that the team designing post-op triage should be the people who take call themselves. This page lays out the practical differences so you can decide which bet fits your practice."})}),l.jsx("div",{className:"bg-white overflow-hidden",style:{borderRadius:16,border:"1px solid var(--ink-100)",boxShadow:"var(--shadow-md)"},children:l.jsxs("table",{className:"w-full",style:{borderCollapse:"collapse",fontSize:15},children:[l.jsx("thead",{children:l.jsxs("tr",{style:{background:"var(--ink-900)"},children:[l.jsx("th",{className:"text-left p-4 text-white",style:{width:"20%"}}),l.jsx("th",{className:"text-left p-4",style:{color:"#CFE6F6",fontSize:16},children:"ClinicFlow"}),l.jsx("th",{className:"text-left p-4 text-white/80",style:{fontSize:16},children:"Assort Health"})]})}),l.jsx("tbody",{children:w8.map((e,t)=>l.jsxs("tr",{style:{background:t%2?"var(--ink-25)":"#fff"},children:[l.jsx("td",{className:"p-4 font-semibold align-top",style:{color:"var(--ink-900)",fontSize:14},children:e.dim}),l.jsx("td",{className:"p-4 align-top",style:{color:"var(--ink-700)",lineHeight:1.55},children:e.clinicflow}),l.jsx("td",{className:"p-4 align-top",style:{color:"var(--ink-500)",lineHeight:1.55},children:e.assort})]},e.dim))})]})}),l.jsxs("div",{className:"grid sm:grid-cols-2 gap-6 mt-8",children:[l.jsxs("div",{className:"bg-white p-7",style:{borderRadius:16,border:"1px solid var(--ink-100)"},children:[l.jsx("h2",{className:"font-semibold mb-3",style:{fontSize:19,color:"var(--ink-900)"},children:"Choose Assort Health if..."}),l.jsxs("ul",{className:"space-y-2",style:{fontSize:15,color:"var(--ink-500)",lineHeight:1.6,paddingLeft:18,listStyle:"disc"},children:[l.jsx("li",{children:"You're an enterprise group or health system spanning many specialties"}),l.jsx("li",{children:"You need one standardized vendor across dozens of locations"}),l.jsx("li",{children:"Procurement favors the largest, most-funded option"})]})]}),l.jsxs("div",{className:"bg-white p-7",style:{borderRadius:16,border:"2px solid var(--coral-300)",boxShadow:"var(--shadow-md)"},children:[l.jsx("h2",{className:"font-semibold mb-3",style:{fontSize:19,color:"var(--ink-900)"},children:"Choose ClinicFlow if..."}),l.jsxs("ul",{className:"space-y-2",style:{fontSize:15,color:"var(--ink-700)",lineHeight:1.6,paddingLeft:18,listStyle:"disc"},children:[l.jsx("li",{children:"You're an orthopedic, spine, or surgical practice and want depth, not breadth"}),l.jsx("li",{children:"After-hours urgent escalation to the on-call surgeon is non-negotiable"}),l.jsx("li",{children:"You want the founding surgeons in the room, not a ticket queue"}),l.jsxs("li",{children:["You want to hear it work before a single sales call: ",l.jsx("a",{href:"/demo",style:{color:"var(--coral-500)",fontWeight:600},children:"clinicflowai.com/demo"})]})]})]})]}),l.jsxs("div",{className:"mt-10 p-8 text-center",style:{borderRadius:16,background:"var(--gradient-hero)"},children:[l.jsx("h2",{className:"text-white font-bold",style:{fontSize:23,letterSpacing:-.3},children:"The fastest comparison is hearing it"}),l.jsx("p",{className:"text-white/80 mt-2 mx-auto",style:{fontSize:15.5,maxWidth:480},children:"Call our live demo line as a patient, then book 15 minutes if it holds up."}),l.jsx("a",{href:"/demo",className:"inline-block mt-5 font-semibold no-underline",style:{background:"#fff",color:"var(--coral-700)",padding:"12px 24px",borderRadius:12,fontSize:15.5},children:"Try the live demo"})]}),l.jsx("p",{className:"mt-8",style:{fontSize:12.5,color:"var(--ink-400)",lineHeight:1.5},children:"Information about Assort Health reflects their public materials as of June 2026 and may change; verify details with each vendor. Assort Health is a trademark of its owner; no affiliation or endorsement is implied."})]})})]}),l.jsx(pn,{})]}),Yw="https://clinicflowai.com",Qw="Medical Answering Service vs. AI Receptionist: 2026 Comparison",Gw="Medical answering service, generic AI receptionist, or surgical voice AI: who books appointments, who triages, who reaches your on-call surgeon, and what each really costs.",b8=[{feature:"Answers after hours and weekends",svc:"Yes, live operators (billed per minute)",generic:"Yes",cf:"Yes, 24/7 with no after-hours surcharge"},{feature:"Books directly into your schedule",svc:"No. Takes a message for a callback",generic:"Simple bookings only",cf:"Books, reschedules, cancels, and confirms end to end"},{feature:"Clinical triage",svc:"Reads a script; no clinical logic",generic:"No. Built for salons, dental, home services",cf:"Surgeon-designed triage for ortho, spine, and surgical calls"},{feature:"Urgent call escalation",svc:"Pages whoever is on the list",generic:"Takes a message",cf:"Texts the on-call surgeon a secure link to the full call summary"},{feature:"Documentation into your EMR",svc:"Email or fax message slips",generic:"Email summaries",cf:"Call summaries routed to the right team via EMR messaging"},{feature:"Hold time during surges",svc:"Queues when operators are busy",generic:"None",cf:"None. Every call answered immediately, even 30 at once"},{feature:"Languages",svc:"English, sometimes Spanish",generic:"Varies",cf:"28 languages"},{feature:"Pricing model",svc:"Per minute or per call; after-hours and holiday surcharges",generic:"Per location subscription",cf:"Flat practice subscription; no per-minute meter, no surcharges"},{feature:"Built for surgical practices",svc:"Generalist",generic:"Generalist",cf:"Founded and designed by practicing spine and orthopedic surgeons"},{feature:"HIPAA with BAA",svc:"Usually",generic:"Sometimes",cf:"Yes, with PHI flowing only through secure, EMR-integrated channels"}],Kw=[{q:"Why not just keep our answering service?",a:"An answering service takes a message; the patient still waits for a callback, and many book elsewhere before it comes. ClinicFlow ends the call with an appointment on your schedule, summarizes clinical concerns into your EMR, and escalates true urgencies to your on-call surgeon immediately. It also removes per-minute metering and after-hours surcharges."},{q:"How is ClinicFlow different from a generic AI receptionist?",a:"Generic AI receptionists are built for every business at once: salons, dental offices, contractors. They can book a simple appointment but cannot tell a routine wound question from a new neurologic deficit. ClinicFlow's call flows were designed by practicing surgeons specifically for orthopedic, spine, and surgical call volume, and when the system is uncertain it escalates rather than guesses."},{q:"What does switching involve?",a:"Your phone numbers do not change. Calls forward to ClinicFlow on the schedule you choose: after hours only, overflow only, or all day. Most practices start with after-hours coverage and expand once they hear the call quality."},{q:"Can we hear it before we commit?",a:"Yes, right now. Call the live demo line at (415) 962-4019, pretend you are a patient, and hear it triage and book in real time. No sales call required."}],k8=()=>{const e=`${Yw}/vs-answering-services`,t={"@context":"https://schema.org","@type":"FAQPage",mainEntity:Kw.map(n=>({"@type":"Question",name:n.q,acceptedAnswer:{"@type":"Answer",text:n.a}}))};return l.jsxs("div",{className:"min-h-screen",children:[l.jsxs(Kn,{children:[l.jsxs("title",{children:[Qw," | ClinicFlow"]}),l.jsx("meta",{name:"description",content:Gw}),l.jsx("link",{rel:"canonical",href:e}),l.jsx("meta",{property:"og:type",content:"website"}),l.jsx("meta",{property:"og:title",content:Qw}),l.jsx("meta",{property:"og:description",content:Gw}),l.jsx("meta",{property:"og:url",content:e}),l.jsx("meta",{property:"og:image",content:`${Yw}/images/main-thumbnail.jpg`}),l.jsx("meta",{name:"twitter:card",content:"summary_large_image"}),l.jsx("script",{type:"application/ld+json",children:JSON.stringify(t)})]}),l.jsx(fn,{}),l.jsxs("main",{style:{background:"var(--ink-25)",fontFamily:"var(--font-sans)"},children:[l.jsx("header",{className:"px-4 sm:px-14 pt-16 pb-14",style:{background:"var(--gradient-hero)"},children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:840},children:[l.jsx("p",{className:"font-semibold mb-3",style:{fontFamily:"var(--font-mono)",fontSize:13,letterSpacing:"0.08em",textTransform:"uppercase",color:"rgba(255,255,255,0.7)"},children:"Compare your options"}),l.jsx("h1",{className:"text-white font-bold",style:{fontSize:"clamp(30px, 5vw, 46px)",lineHeight:1.1,letterSpacing:-.5},children:"Medical answering service, generic AI receptionist, or ClinicFlow?"}),l.jsx("p",{className:"text-white/80 mt-4",style:{fontSize:18,maxWidth:640,lineHeight:1.55},children:"Every missed or mishandled call is a consult that books somewhere else. Here is exactly what each option does with your patients' calls, so you can judge for yourself."}),l.jsxs("div",{className:"flex flex-wrap gap-3 mt-7",children:[l.jsx("a",{href:"tel:+14159624019",className:"inline-block font-semibold no-underline",style:{background:"#fff",color:"var(--coral-700)",padding:"13px 26px",borderRadius:12,fontSize:16,boxShadow:"0 8px 24px rgba(0,0,0,0.18)"},children:"Call the live demo: (415) 962-4019"}),l.jsx("a",{href:"/demo",className:"inline-block font-semibold no-underline text-white",style:{border:"1px solid rgba(255,255,255,0.45)",padding:"13px 26px",borderRadius:12,fontSize:16},children:"Book a 15-minute demo"})]})]})}),l.jsx("section",{className:"px-4 sm:px-14 py-14",children:l.jsxs("div",{className:"mx-auto overflow-x-auto",style:{maxWidth:1280},children:[l.jsxs("table",{className:"w-full bg-white",style:{borderRadius:16,border:"1px solid var(--ink-100)",borderCollapse:"separate",borderSpacing:0,overflow:"hidden",boxShadow:"var(--shadow-sm)"},children:[l.jsx("thead",{children:l.jsxs("tr",{style:{background:"var(--ink-900)"},children:[l.jsx("th",{className:"text-left p-4 text-white",style:{fontSize:14.5,minWidth:160}}),l.jsx("th",{className:"text-left p-4 text-white/85",style:{fontSize:14.5,minWidth:170},children:"Traditional answering service"}),l.jsx("th",{className:"text-left p-4 text-white/85",style:{fontSize:14.5,minWidth:170},children:"Generic AI receptionist"}),l.jsx("th",{className:"text-left p-4",style:{fontSize:14.5,minWidth:190,background:"var(--coral-500)",color:"#fff",fontWeight:700},children:"ClinicFlow"})]})}),l.jsx("tbody",{children:b8.map((n,r)=>l.jsxs("tr",{style:{background:r%2?"var(--ink-25)":"#fff"},children:[l.jsx("td",{className:"p-4 font-semibold",style:{fontSize:15,color:"var(--ink-900)",verticalAlign:"top"},children:n.feature}),l.jsx("td",{className:"p-4",style:{fontSize:14.5,color:"var(--ink-500)",lineHeight:1.5,verticalAlign:"top"},children:n.svc}),l.jsx("td",{className:"p-4",style:{fontSize:14.5,color:"var(--ink-500)",lineHeight:1.5,verticalAlign:"top"},children:n.generic}),l.jsx("td",{className:"p-4",style:{fontSize:14.5,color:"var(--ink-900)",lineHeight:1.5,fontWeight:500,verticalAlign:"top",background:"rgba(27,115,181,0.06)"},children:n.cf})]},n.feature))})]}),l.jsxs("p",{className:"mt-4",style:{fontSize:13.5,color:"var(--ink-400)"},children:["Answering service and generic AI columns describe typical offerings in each category; individual vendors vary. Estimate what unanswered calls cost your practice with the"," ",l.jsx(Me,{to:"/missed-call-calculator",style:{color:"var(--coral-700)"},onClick:()=>window.scrollTo(0,0),children:"missed-call calculator"}),"."]})]})}),l.jsx("section",{className:"px-4 sm:px-14 pb-14",children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:840},children:[l.jsx("h2",{className:"font-semibold mb-6",style:{fontSize:24,color:"var(--ink-900)",letterSpacing:-.3},children:"Common questions"}),l.jsx("div",{className:"space-y-4",children:Kw.map(n=>l.jsxs("div",{className:"bg-white p-6",style:{borderRadius:14,border:"1px solid var(--ink-100)"},children:[l.jsx("h3",{className:"font-semibold mb-2",style:{fontSize:17,color:"var(--ink-900)"},children:n.q}),l.jsx("p",{style:{color:"var(--ink-500)",fontSize:15.5,lineHeight:1.6},children:n.a})]},n.q))}),l.jsx("h2",{className:"font-semibold mt-12 mb-5",style:{fontSize:20,color:"var(--ink-900)"},children:"Go deeper"}),l.jsx("div",{className:"grid gap-4 sm:grid-cols-3",children:[{title:"What a Medical Answering Service Really Costs in 2026",href:"/blog/medical-answering-service-cost"},{title:"The 7 Best AI Phone & Answering Solutions for Orthopedic Practices (2026)",href:"/blog/best-ai-answering-service-orthopedic-practices"},{title:"12 Questions to Ask Before Buying an AI Phone Agent (HIPAA Edition)",href:"/blog/hipaa-ai-phone-agent-questions"}].map(n=>l.jsx(Me,{to:n.href,onClick:()=>window.scrollTo(0,0),className:"block no-underline bg-white p-5",style:{borderRadius:14,border:"1px solid var(--ink-100)",boxShadow:"var(--shadow-sm)"},children:l.jsx("p",{className:"font-semibold",style:{fontSize:15,color:"var(--ink-900)",lineHeight:1.35},children:n.title})},n.href))}),l.jsx("div",{className:"grid gap-4 sm:grid-cols-3 mt-4",children:[{title:"The Orthopedic Answering Service, Rebuilt with AI",href:"/orthopedic-answering-service"},{title:"AI Medical Answering Service for Surgical Practices",href:"/medical-answering-service"},{title:"After-Hours Answering That Knows What Can Wait",href:"/after-hours-answering-service"}].map(n=>l.jsx("a",{href:n.href,className:"block no-underline bg-white p-5",style:{borderRadius:14,border:"1px solid var(--ink-100)",boxShadow:"var(--shadow-sm)"},children:l.jsx("p",{className:"font-semibold",style:{fontSize:15,color:"var(--ink-900)",lineHeight:1.35},children:n.title})},n.href))})]})})]}),l.jsx(pn,{})]})},Zw="https://clinicflowai.com",Xw="Free After-Hours Phone Audit for Surgical Practices",Jw="Request a free after-hours phone audit: we call your practice line the way a patient would, record what happens, and send you the recording plus a scorecard of what patients actually experience when your office is closed.",S8=[{title:"1. You authorize the audit",body:"Tell us your practice's main line and the best evening or weekend window. It is your number, audited with your permission. Nothing happens without your sign-off."},{title:"2. We call like a patient would",body:"Our team places test calls to your line after hours: a new-patient booking attempt and a routine post-op question. We navigate your phone tree exactly as a patient in pain at 9 PM would."},{title:"3. You get the recording and scorecard",body:"Within a few business days you receive the call recordings plus a scorecard: rings to answer, voicemail vs. live response, phone-tree depth, whether a patient could actually book, and what it likely costs you."}],ex=[{q:"Is this really free?",a:"Yes. The audit takes us minutes to run and tells you something most practices have never heard: what your own patients experience when the office is closed. If the result is fine, you have peace of mind. If it is not, you will know exactly where calls are leaking."},{q:"Will you call our staff or patients?",a:"No. We only call the practice line you give us, only in the window you authorize, and we identify the calls as audit calls if a person answers. No patient data is involved at any point."},{q:"What do practices usually find?",a:"Most commonly: a voicemail box that fills up, a phone tree that loops, an answering service that takes 4 minutes to reach and only offers a callback, or a hold queue that patients in pain simply do not wait through. Each one is a consult that books with a competitor."}],C8=()=>{const e=`${Zw}/phone-audit`,t={"@context":"https://schema.org","@type":"FAQPage",mainEntity:ex.map(n=>({"@type":"Question",name:n.q,acceptedAnswer:{"@type":"Answer",text:n.a}}))};return l.jsxs("div",{className:"min-h-screen",children:[l.jsxs(Kn,{children:[l.jsxs("title",{children:[Xw," | ClinicFlow"]}),l.jsx("meta",{name:"description",content:Jw}),l.jsx("link",{rel:"canonical",href:e}),l.jsx("meta",{property:"og:type",content:"website"}),l.jsx("meta",{property:"og:title",content:Xw}),l.jsx("meta",{property:"og:description",content:Jw}),l.jsx("meta",{property:"og:url",content:e}),l.jsx("meta",{property:"og:image",content:`${Zw}/images/main-thumbnail.jpg`}),l.jsx("meta",{name:"twitter:card",content:"summary_large_image"}),l.jsx("script",{type:"application/ld+json",children:JSON.stringify(t)})]}),l.jsx(fn,{}),l.jsxs("main",{style:{background:"var(--ink-25)",fontFamily:"var(--font-sans)"},children:[l.jsx("header",{className:"px-4 sm:px-14 pt-16 pb-14",style:{background:"var(--gradient-hero)"},children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:840},children:[l.jsx("p",{className:"font-semibold mb-3",style:{fontFamily:"var(--font-mono)",fontSize:13,letterSpacing:"0.08em",textTransform:"uppercase",color:"rgba(255,255,255,0.7)"},children:"Free after-hours phone audit"}),l.jsx("h1",{className:"text-white font-bold",style:{fontSize:"clamp(30px, 5vw, 46px)",lineHeight:1.1,letterSpacing:-.5},children:"Hear what your patients hear when your office is closed."}),l.jsx("p",{className:"text-white/80 mt-4",style:{fontSize:18,maxWidth:640,lineHeight:1.55},children:"You have never called your own practice at 9 PM. Your patients have. We will call your line after hours the way a patient would, record what happens, and send you the recording with a scorecard. Free, and it takes 2 minutes to request."}),l.jsx("a",{href:"#contact-form",onClick:n=>{var r;n.preventDefault(),(r=document.getElementById("contact-form"))==null||r.scrollIntoView({behavior:"smooth"})},className:"inline-block mt-7 font-semibold no-underline",style:{background:"#fff",color:"var(--coral-700)",padding:"13px 26px",borderRadius:12,fontSize:16,boxShadow:"0 8px 24px rgba(0,0,0,0.18)"},children:"Request my free audit"})]})}),l.jsxs("section",{className:"px-4 sm:px-14 py-14",children:[l.jsx("div",{className:"mx-auto grid gap-6 sm:grid-cols-3",style:{maxWidth:1280},children:S8.map(n=>l.jsxs("div",{className:"bg-white p-7",style:{borderRadius:16,border:"1px solid var(--ink-100)",boxShadow:"var(--shadow-sm)"},children:[l.jsx("h2",{className:"font-semibold mb-2",style:{fontSize:19,color:"var(--ink-900)",letterSpacing:-.3},children:n.title}),l.jsx("p",{style:{color:"var(--ink-500)",fontSize:15.5,lineHeight:1.6},children:n.body})]},n.title))}),l.jsxs("div",{className:"mx-auto mt-10 p-7 text-center",style:{maxWidth:1280,borderRadius:16,background:"var(--gradient-hero)"},children:[l.jsx("p",{className:"text-white font-bold",style:{fontSize:22,letterSpacing:-.3},children:"The audit result is yours either way. No pitch required to get it."}),l.jsx("p",{className:"text-white/75 mt-2",style:{fontSize:15.5},children:'Request it below and mention "phone audit" with your preferred after-hours window.'})]})]}),l.jsx("section",{className:"px-4 sm:px-14 pb-6",children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:840},children:[l.jsx("h2",{className:"font-semibold mb-6",style:{fontSize:24,color:"var(--ink-900)",letterSpacing:-.3},children:"Common questions"}),l.jsx("div",{className:"space-y-4",children:ex.map(n=>l.jsxs("div",{className:"bg-white p-6",style:{borderRadius:14,border:"1px solid var(--ink-100)"},children:[l.jsx("h3",{className:"font-semibold mb-2",style:{fontSize:17,color:"var(--ink-900)"},children:n.q}),l.jsx("p",{style:{color:"var(--ink-500)",fontSize:15.5,lineHeight:1.6},children:n.a})]},n.q))})]})}),l.jsx(Tm,{})]}),l.jsx(pn,{})]})},tx="https://clinicflowai.com",nx="For Practice Managers: Phone Coverage Without the Staffing Math",rx="How practice managers at orthopedic and surgical clinics use ClinicFlow to end front-desk phone overload: every call answered 24/7, booked into the schedule, documented in the EMR, with no per-minute answering service invoice.",A8=[{title:"The front desk can't be in two places",body:"Your team checks in the patient standing in front of them, or answers line 2. Never both. ClinicFlow takes the overflow so checking in a patient no longer costs you an abandoned caller, and Monday mornings stop being triage."},{title:"The answering service invoice keeps growing",body:"Per-minute rates, per-call fees, holiday surcharges, patch-through charges. And after all that, it takes a message. ClinicFlow is a flat subscription that ends calls with a booked appointment, not a callback slip."},{title:"Hiring and turnover never stop",body:"Every front-desk departure means weeks of short staffing and retraining on your phone scripts. The AI never quits, never calls in sick, and handles 30 simultaneous calls during the post-weekend surge."},{title:"Calls leave no paper trail",body:"Sticky notes and half-logged voicemails turn into missed callbacks and finger-pointing. Every ClinicFlow call ends with a structured summary in your EMR messaging, so you can see exactly what was asked and what happened."}],ix=[{q:"What does this mean for my front-desk staffing?",a:"ClinicFlow takes the call volume your team can't get to: after hours, weekends, lunch, and overflow when all lines are busy. Most practices keep their current team and stop backfilling the next departure, redirecting that headcount toward in-office patient work."},{q:"How does setup work and how long does it take?",a:"Your phone numbers don't change. Calls forward to ClinicFlow on the schedule you choose: after hours only, overflow only, or all day. Most practices start with after-hours coverage in the first week and expand once they hear the call quality."},{q:"How do I know what the AI is saying to our patients?",a:"Every call produces a transcript and a structured summary delivered through EMR messaging. You can review any call, and urgent clinical calls escalate to the on-call surgeon by text with a secure summary link rather than being handled by the AI alone."},{q:"What does it cost compared to our answering service?",a:"A flat practice subscription with no per-minute metering and no after-hours or holiday surcharges. Run your own numbers with the missed-call calculator, or send us a recent answering service invoice and we'll do the comparison for you."}],T8=()=>{const e=`${tx}/practice-managers`,t={"@context":"https://schema.org","@type":"FAQPage",mainEntity:ix.map(n=>({"@type":"Question",name:n.q,acceptedAnswer:{"@type":"Answer",text:n.a}}))};return l.jsxs("div",{className:"min-h-screen",children:[l.jsxs(Kn,{children:[l.jsxs("title",{children:[nx," | ClinicFlow"]}),l.jsx("meta",{name:"description",content:rx}),l.jsx("link",{rel:"canonical",href:e}),l.jsx("meta",{property:"og:type",content:"website"}),l.jsx("meta",{property:"og:title",content:nx}),l.jsx("meta",{property:"og:description",content:rx}),l.jsx("meta",{property:"og:url",content:e}),l.jsx("meta",{property:"og:image",content:`${tx}/images/main-thumbnail.jpg`}),l.jsx("meta",{name:"twitter:card",content:"summary_large_image"}),l.jsx("script",{type:"application/ld+json",children:JSON.stringify(t)})]}),l.jsx(fn,{}),l.jsxs("main",{style:{background:"var(--ink-25)",fontFamily:"var(--font-sans)"},children:[l.jsx("header",{className:"px-4 sm:px-14 pt-16 pb-14",style:{background:"var(--gradient-hero)"},children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:840},children:[l.jsx("p",{className:"font-semibold mb-3",style:{fontFamily:"var(--font-mono)",fontSize:13,letterSpacing:"0.08em",textTransform:"uppercase",color:"rgba(255,255,255,0.7)"},children:"For Practice Managers"}),l.jsx("h1",{className:"text-white font-bold",style:{fontSize:"clamp(30px, 5vw, 46px)",lineHeight:1.1,letterSpacing:-.5},children:"You manage the practice. The phones shouldn't manage you."}),l.jsx("p",{className:"text-white/80 mt-4",style:{fontSize:18,maxWidth:640,lineHeight:1.55},children:"Staffing the front desk, auditing the answering service invoice, chasing the voicemail backlog: the phones eat your week. ClinicFlow answers every call 24/7, books it, documents it in your EMR, and gives you the call log to prove it."}),l.jsxs("div",{className:"flex flex-wrap gap-3 mt-7",children:[l.jsx(Me,{to:"/phone-audit",onClick:()=>window.scrollTo(0,0),className:"inline-block font-semibold no-underline",style:{background:"#fff",color:"var(--coral-700)",padding:"13px 26px",borderRadius:12,fontSize:16,boxShadow:"0 8px 24px rgba(0,0,0,0.18)"},children:"Get a free after-hours phone audit"}),l.jsx("a",{href:"tel:+14159624019",className:"inline-block font-semibold no-underline text-white",style:{border:"1px solid rgba(255,255,255,0.45)",padding:"13px 26px",borderRadius:12,fontSize:16},children:"Call Our Voice AI Agent"})]})]})}),l.jsxs("section",{className:"px-4 sm:px-14 py-14",children:[l.jsx("div",{className:"mx-auto grid gap-6 sm:grid-cols-2",style:{maxWidth:1280},children:A8.map(n=>l.jsxs("div",{className:"bg-white p-7",style:{borderRadius:16,border:"1px solid var(--ink-100)",boxShadow:"var(--shadow-sm)"},children:[l.jsx("h2",{className:"font-semibold mb-2",style:{fontSize:19,color:"var(--ink-900)",letterSpacing:-.3},children:n.title}),l.jsx("p",{style:{color:"var(--ink-500)",fontSize:15.5,lineHeight:1.6},children:n.body})]},n.title))}),l.jsxs("div",{className:"mx-auto mt-10 p-7 text-center",style:{maxWidth:1280,borderRadius:16,background:"var(--gradient-hero)"},children:[l.jsx("p",{className:"text-white font-bold",style:{fontSize:22,letterSpacing:-.3},children:"Estimate what unanswered calls cost your practice this year."}),l.jsx(Me,{to:"/missed-call-calculator",onClick:()=>window.scrollTo(0,0),className:"inline-block mt-4 font-semibold no-underline",style:{background:"#fff",color:"var(--coral-700)",padding:"12px 24px",borderRadius:12,fontSize:15.5},children:"Open the missed-call calculator"})]})]}),l.jsx("section",{className:"px-4 sm:px-14 pb-14",children:l.jsxs("div",{className:"mx-auto",style:{maxWidth:840},children:[l.jsx("h2",{className:"font-semibold mb-6",style:{fontSize:24,color:"var(--ink-900)",letterSpacing:-.3},children:"Questions practice managers ask us"}),l.jsx("div",{className:"space-y-4",children:ix.map(n=>l.jsxs("div",{className:"bg-white p-6",style:{borderRadius:14,border:"1px solid var(--ink-100)"},children:[l.jsx("h3",{className:"font-semibold mb-2",style:{fontSize:17,color:"var(--ink-900)"},children:n.q}),l.jsx("p",{style:{color:"var(--ink-500)",fontSize:15.5,lineHeight:1.6},children:n.a})]},n.q))}),l.jsx("h2",{className:"font-semibold mt-12 mb-5",style:{fontSize:20,color:"var(--ink-900)"},children:"Worth your next coffee break"}),l.jsx("div",{className:"grid gap-4 sm:grid-cols-3",children:[{title:"What a Medical Answering Service Really Costs in 2026",href:"/blog/medical-answering-service-cost"},{title:"How to Replace Your Medical Answering Service with AI (Without Disrupting Patients)",href:"/blog/replace-medical-answering-service-with-ai"},{title:"ClinicFlow vs. Answering Services & Generic AI Receptionists",href:"/vs-answering-services"}].map(n=>l.jsx(Me,{to:n.href,onClick:()=>window.scrollTo(0,0),className:"block no-underline bg-white p-5",style:{borderRadius:14,border:"1px solid var(--ink-100)",boxShadow:"var(--shadow-sm)"},children:l.jsx("p",{className:"font-semibold",style:{fontSize:15,color:"var(--ink-900)",lineHeight:1.35},children:n.title})},n.href))})]})})]}),l.jsx(pn,{})]})},j8=new t5,E8=()=>l.jsx(r5,{client:j8,children:l.jsxs(__,{children:[l.jsx(pI,{}),l.jsx(UI,{}),l.jsx(tP,{children:l.jsxs(Q5,{children:[l.jsx(at,{path:"/",element:l.jsx(RF,{})}),l.jsx(at,{path:"/privacy-policy",element:l.jsx(FF,{})}),l.jsx(at,{path:"/blog",element:l.jsx(fM,{})}),l.jsx(at,{path:"/blog/:slug",element:l.jsx(a8,{})}),l.jsx(at,{path:"/orthopedics",element:l.jsx(Mw,{specialty:"orthopedics"})}),l.jsx(at,{path:"/spine",element:l.jsx(Mw,{specialty:"spine"})}),l.jsx(at,{path:"/missed-call-calculator",element:l.jsx(u8,{})}),l.jsx(at,{path:"/demo",element:l.jsx(v8,{})}),l.jsx(at,{path:"/compare/assort-health",element:l.jsx(x8,{})}),l.jsx(at,{path:"/vs-answering-services",element:l.jsx(k8,{})}),l.jsx(at,{path:"/phone-audit",element:l.jsx(C8,{})}),l.jsx(at,{path:"/practice-managers",element:l.jsx(T8,{})}),l.jsx(at,{path:"/integrations",element:l.jsx(y8,{})}),l.jsx(at,{path:"/integrations/epic",element:l.jsx(ts,{emr:"epic"})}),l.jsx(at,{path:"/integrations/athenahealth",element:l.jsx(ts,{emr:"athenahealth"})}),l.jsx(at,{path:"/integrations/eclinicalworks",element:l.jsx(ts,{emr:"eclinicalworks"})}),l.jsx(at,{path:"/integrations/modmed",element:l.jsx(ts,{emr:"modmed"})}),l.jsx(at,{path:"/integrations/advancedmd",element:l.jsx(ts,{emr:"advancedmd"})}),l.jsx(at,{path:"*",element:l.jsx(SC,{})})]})})]})});T0(document.getElementById("root")).render(l.jsx(R0,{children:l.jsx(E8,{})}));