@aidotnet/server-linux-arm64 0.9.0 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/bin/astra-server +2 -2
  2. package/bin/wwwroot/assets/ClientsPage-Cwjn83RD.js +11 -0
  3. package/bin/wwwroot/assets/KeyPage-IsBY88jG.js +1 -0
  4. package/bin/wwwroot/assets/ModelDetailPage-BT8_QmLF.js +1 -0
  5. package/bin/wwwroot/assets/ModelsPage-a3SNBXwe.js +1 -0
  6. package/bin/wwwroot/assets/PluginsPage-CXRMCp_F.js +2 -0
  7. package/bin/wwwroot/assets/PrivacyPage-BfdLDJ63.js +1 -0
  8. package/bin/wwwroot/assets/ProviderDetailPage-C9eabWwn.js +3 -0
  9. package/bin/wwwroot/assets/ProvidersPage-CPw-h0Uz.js +2 -0
  10. package/bin/wwwroot/assets/SettingsPage-CTnL166S.js +2 -0
  11. package/bin/wwwroot/assets/TokensPage-TPaxzBMY.js +1 -0
  12. package/bin/wwwroot/assets/TrayPanelPage-BGDBeJs0.js +1 -0
  13. package/bin/wwwroot/assets/{TrayPanelView-CQQDnzsO.js → TrayPanelView-DP-m1Cui.js} +1 -1
  14. package/bin/wwwroot/assets/alert-C-zJo-Vf.js +15 -0
  15. package/bin/wwwroot/assets/{arrow-down-DLYI19GC.js → arrow-down-DTsCyVhl.js} +1 -1
  16. package/bin/wwwroot/assets/{arrow-left-BEIa7s0v.js → arrow-left-BlStTg-u.js} +1 -1
  17. package/bin/wwwroot/assets/{checkbox-DJG4To3W.js → checkbox-B8UTLROZ.js} +1 -1
  18. package/bin/wwwroot/assets/{cloud-download-Dx8D0gGR.js → cloud-download-DoCH2MAL.js} +1 -1
  19. package/bin/wwwroot/assets/confirm-morph-BZdvZ-wI.js +1 -0
  20. package/bin/wwwroot/assets/{download-CKu95INa.js → download-zacBMjpe.js} +1 -1
  21. package/bin/wwwroot/assets/{ellipsis-D-uqKDgA.js → ellipsis-Dwk6_QlF.js} +1 -1
  22. package/bin/wwwroot/assets/{external-link-tQTMyil6.js → external-link-D-L32_ye.js} +1 -1
  23. package/bin/wwwroot/assets/{folder-open-CL6HwOra.js → folder-open-ex39110T.js} +1 -1
  24. package/bin/wwwroot/assets/index-CNdW2eN9.js +17 -0
  25. package/bin/wwwroot/assets/{index-nu-lKbLD.css → index-DSv7xAxU.css} +1 -1
  26. package/bin/wwwroot/assets/{log-out-CZYk_IyX.js → log-out-CZSB5kqp.js} +1 -1
  27. package/bin/wwwroot/assets/overlays-BBHZHl4R.js +41 -0
  28. package/bin/wwwroot/assets/{pencil-CUO0GAyP.js → pencil-C7HWLb95.js} +1 -1
  29. package/bin/wwwroot/assets/{power-USlcjghz.js → power-BggG52OJ.js} +1 -1
  30. package/bin/wwwroot/assets/radio-cards-BWCaBwfU.js +1 -0
  31. package/bin/wwwroot/assets/{rotate-ccw-Daii8PQN.js → rotate-ccw-Xx5_g9bd.js} +1 -1
  32. package/bin/wwwroot/index.html +4 -4
  33. package/package.json +1 -1
  34. package/bin/wwwroot/assets/ClientsPage-CT5PiqS3.js +0 -11
  35. package/bin/wwwroot/assets/KeyPage-DOVrI-UN.js +0 -1
  36. package/bin/wwwroot/assets/ModelDetailPage-Yu2oJf3R.js +0 -1
  37. package/bin/wwwroot/assets/ModelsPage-QefK7LU5.js +0 -1
  38. package/bin/wwwroot/assets/PluginsPage-Dl53KvHU.js +0 -2
  39. package/bin/wwwroot/assets/PrivacyPage-DmSrQ2Mk.js +0 -1
  40. package/bin/wwwroot/assets/ProviderDetailPage-BfK0We2G.js +0 -3
  41. package/bin/wwwroot/assets/ProvidersPage-dKrtvirQ.js +0 -2
  42. package/bin/wwwroot/assets/SettingsPage-4R3aVJB1.js +0 -2
  43. package/bin/wwwroot/assets/TokensPage-C1s3mguI.js +0 -1
  44. package/bin/wwwroot/assets/TrayPanelPage-INGZ1PbI.js +0 -1
  45. package/bin/wwwroot/assets/alert-D4IPjxz3.js +0 -15
  46. package/bin/wwwroot/assets/confirm-morph-BpM-aHP9.js +0 -1
  47. package/bin/wwwroot/assets/index-CdtIrMPt.js +0 -17
  48. package/bin/wwwroot/assets/overlays-BX48Gd4h.js +0 -41
  49. package/bin/wwwroot/assets/radio-cards-CGtNS_WO.js +0 -1
@@ -0,0 +1,15 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,o)=>(o=n==null?{}:e(i(n)),c(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n)),u=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.for(`react.view_transition`),m=Symbol.iterator;function h(e){return typeof e!=`object`||!e?null:(e=m&&e[m]||e[`@@iterator`],typeof e==`function`?e:null)}var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_=Object.assign,v={};function y(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}y.prototype.isReactComponent={},y.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`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`)},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function b(){}b.prototype=y.prototype;function x(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}var S=x.prototype=new b;S.constructor=x,_(S,y.prototype),S.isPureReactComponent=!0;var C=Array.isArray;function ee(){}var w={H:null,A:null,T:null,S:null},te=Object.prototype.hasOwnProperty;function T(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function ne(e,t){return T(e.type,t,e.props)}function re(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function ie(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var ae=/\/+/g;function oe(e,t){return typeof e==`object`&&e&&e.key!=null?ie(``+e.key):t.toString(36)}function se(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(ee,ee):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function ce(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,ce(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+oe(e,0):a,C(o)?(i=``,c!=null&&(i=c.replace(ae,`$&/`)+`/`),ce(o,r,i,``,function(e){return e})):o!=null&&(re(o)&&(o=ne(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(ae,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(C(e))for(var u=0;u<e.length;u++)a=e[u],s=l+oe(a,u),c+=ce(a,r,i,s,o);else if(u=h(e),typeof u==`function`)for(e=u.call(e),u=0;!(a=e.next()).done;)a=a.value,s=l+oe(a,u++),c+=ce(a,r,i,s,o);else if(s===`object`){if(typeof e.then==`function`)return ce(se(e),r,i,a,o);throw r=String(e),Error(`Objects are not valid as a React child (found: `+(r===`[object Object]`?`object with keys {`+Object.keys(e).join(`, `)+`}`:r)+`). If you meant to render a collection of children, use an array instead.`)}return c}function le(e,t,n){if(e==null)return e;var r=[],i=0;return ce(e,r,``,``,function(e){return t.call(n,e,i++)}),r}function ue(e){if(e._status===-1){var t=e._result,n=t();n.then(function(t){(e._status===0||e._status===-1)&&(e._status=1,e._result=t,n.status===void 0&&(n.status=`fulfilled`,n.value=t))},function(t){(e._status===0||e._status===-1)&&(e._status=2,e._result=t,n.status===void 0&&(n.status=`rejected`,n.reason=t))}),e._status===-1&&(e._status=0,e._result=n)}if(e._status===1)return e._result.default;throw e._result}var de=typeof reportError==`function`?reportError:function(e){if(typeof window==`object`&&typeof window.ErrorEvent==`function`){var t=new window.ErrorEvent(`error`,{bubbles:!0,cancelable:!0,message:typeof e==`object`&&e&&typeof e.message==`string`?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process==`object`&&typeof process.emit==`function`){process.emit(`uncaughtException`,e);return}console.error(e)};function fe(e){var t=w.T,n={};n.types=t===null?null:t.types,w.T=n;try{var r=e(),i=w.S;i!==null&&i(n,r),typeof r==`object`&&r&&typeof r.then==`function`&&r.then(ee,de)}catch(e){de(e)}finally{t!==null&&n.types!==null&&(t.types=n.types),w.T=t}}function pe(e){var t=w.T;if(t!==null){var n=t.types;n===null?t.types=[e]:n.indexOf(e)===-1&&n.push(e)}else fe(pe.bind(null,e))}var me={map:le,forEach:function(e,t,n){le(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return le(e,function(){t++}),t},toArray:function(e){return le(e,function(e){return e})||[]},only:function(e){if(!re(e))throw Error(`React.Children.only expected to receive a single React element child.`);return e}};e.Activity=f,e.Children=me,e.Component=y,e.Fragment=r,e.Profiler=a,e.PureComponent=x,e.StrictMode=i,e.Suspense=l,e.ViewTransition=p,e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=w,e.__COMPILER_RUNTIME={__proto__:null,c:function(e){return w.H.useMemoCache(e)}},e.addTransitionType=pe,e.cache=function(e){return function(){return e.apply(null,arguments)}},e.cacheSignal=function(){return null},e.cloneElement=function(e,t,n){if(e==null)throw Error(`The argument must be a React element, but you passed `+e+`.`);var r=_({},e.props),i=e.key;if(t!=null)for(a in t.key!==void 0&&(i=``+t.key),t)!te.call(t,a)||a===`key`||a===`__self`||a===`__source`||a===`ref`&&t.ref===void 0||(r[a]=t[a]);var a=arguments.length-2;if(a===1)r.children=n;else if(1<a){for(var o=Array(a),s=0;s<a;s++)o[s]=arguments[s+2];r.children=o}return T(e.type,i,r)},e.createContext=function(e){return e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:o,_context:e},e},e.createElement=function(e,t,n){var r,i={},a=null;if(t!=null)for(r in t.key!==void 0&&(a=``+t.key),t)te.call(t,r)&&r!==`key`&&r!==`__self`&&r!==`__source`&&(i[r]=t[r]);var o=arguments.length-2;if(o===1)i.children=n;else if(1<o){for(var s=Array(o),c=0;c<o;c++)s[c]=arguments[c+2];i.children=s}if(e&&e.defaultProps)for(r in o=e.defaultProps,o)i[r]===void 0&&(i[r]=o[r]);return T(e,a,i)},e.createRef=function(){return{current:null}},e.forwardRef=function(e){return{$$typeof:c,render:e}},e.isValidElement=re,e.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:ue}},e.memo=function(e,t){return{$$typeof:u,type:e,compare:t===void 0?null:t}},e.startTransition=fe,e.unstable_useCacheRefresh=function(){return w.H.useCacheRefresh()},e.use=function(e){return w.H.use(e)},e.useActionState=function(e,t,n){return w.H.useActionState(e,t,n)},e.useCallback=function(e,t){return w.H.useCallback(e,t)},e.useContext=function(e){return w.H.useContext(e)},e.useDebugValue=function(){},e.useDeferredValue=function(e,t){return w.H.useDeferredValue(e,t)},e.useEffect=function(e,t){return w.H.useEffect(e,t)},e.useEffectEvent=function(e){return w.H.useEffectEvent(e)},e.useId=function(){return w.H.useId()},e.useImperativeHandle=function(e,t,n){return w.H.useImperativeHandle(e,t,n)},e.useInsertionEffect=function(e,t){return w.H.useInsertionEffect(e,t)},e.useLayoutEffect=function(e,t){return w.H.useLayoutEffect(e,t)},e.useMemo=function(e,t){return w.H.useMemo(e,t)},e.useOptimistic=function(e,t){return w.H.useOptimistic(e,t)},e.useReducer=function(e,t,n){return w.H.useReducer(e,t,n)},e.useRef=function(e){return w.H.useRef(e)},e.useState=function(e){return w.H.useState(e)},e.useSyncExternalStore=function(e,t,n){return w.H.useSyncExternalStore(e,t,n)},e.useTransition=function(){return w.H.useTransition()},e.version=`19.3.0`})),d=o(((e,t)=>{t.exports=u()})),f=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),p=o(((e,t)=>{t.exports=f()})),m=l(d(),1),h=p(),g=m.createContext(void 0),_=e=>{let t=m.useContext(g);if(e)return e;if(!t)throw Error(`No QueryClient set, use QueryClientProvider to set one`);return t},v=({client:e,children:t})=>(m.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),(0,h.jsx)(g.Provider,{value:e,children:t})),y={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},b=new class{#e=y;setTimeoutProvider(e){this.#e=e}setTimeout(e,t){return this.#e.setTimeout(e,t)}clearTimeout(e){this.#e.clearTimeout(e)}setInterval(e,t){return this.#e.setInterval(e,t)}clearInterval(e){this.#e.clearInterval(e)}};function x(e){setTimeout(e,0)}var S=typeof window>`u`||`Deno`in globalThis;function C(){}function ee(e,t){return typeof e==`function`?e(t):e}function w(e){return typeof e==`number`&&e>=0&&e!==1/0}function te(e,t){return Math.max(e+(t||0)-Date.now(),0)}function T(e,t){return typeof e==`function`?e(t):e}function ne(e,t){let{type:n=`all`,exact:r,fetchStatus:i,predicate:a,queryKey:o,stale:s}=e;if(o){if(r){if(t.queryHash!==ie(o,t.options))return!1}else if(!oe(t.queryKey,o))return!1}if(n!==`all`){let e=t.isActive();if(n===`active`&&!e||n===`inactive`&&e)return!1}return!(typeof s==`boolean`&&t.isStale()!==s||i&&i!==t.state.fetchStatus||a&&!a(t))}function re(e,t){let{exact:n,status:r,predicate:i,mutationKey:a}=e;if(a){if(!t.options.mutationKey)return!1;if(n){if(ae(t.options.mutationKey)!==ae(a))return!1}else if(!oe(t.options.mutationKey,a))return!1}return!(r&&t.state.status!==r||i&&!i(t))}function ie(e,t){return(t?.queryKeyHashFn||ae)(e)}function ae(e){return JSON.stringify(e,(e,t)=>de(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}function oe(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(e&&t&&typeof e==`object`&&typeof t==`object`){if(Array.isArray(e)&&Array.isArray(t)){if(t.length>e.length)return!1;for(let n=0;n<t.length;n++)if(!oe(e[n],t[n]))return!1;return!0}let n=Object.keys(t);for(let r of n)if(!oe(e[r],t[r]))return!1;return!0}return!1}var se=Object.prototype.hasOwnProperty;function ce(e,t,n=0){if(e===t)return e;if(n>500)return t;let r=ue(e)&&ue(t);if(!r&&!(de(e)&&de(t)))return t;let i=(r?e:Object.keys(e)).length,a=r?t:Object.keys(t),o=a.length,s=r?Array(o):{},c=0;for(let l=0;l<o;l++){let o=r?l:a[l],u=e[o],d=t[o];if(u===d){s[o]=u,(r?l<i:se.call(e,o))&&c++;continue}if(u===null||d===null||typeof u!=`object`||typeof d!=`object`){s[o]=d;continue}let f=ce(u,d,n+1);s[o]=f,f===u&&c++}return i===o&&c===i?e:s}function le(e,t){if(!t||Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(e[n]!==t[n])return!1;return!0}function ue(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function de(e){if(!fe(e))return!1;let t=Object.getPrototypeOf(e),n=t?.constructor;if(n===void 0)return!0;if(typeof n!=`function`)return!1;let r=n.prototype;return!(!fe(r)||!r.hasOwnProperty(`isPrototypeOf`)||t!==Object.prototype)}function fe(e){return Object.prototype.toString.call(e)===`[object Object]`}function pe(e){return new Promise(t=>{b.setTimeout(t,e)})}function me(e,t,n){return typeof n.structuralSharing==`function`?n.structuralSharing(e,t):n.structuralSharing===!1?t:ce(e,t)}function he(e,t,n=0){let r=[...e,t];return n&&r.length>n?r.slice(1):r}function ge(e,t,n=0){let r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var _e=Symbol();function ve(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===_e?()=>Promise.reject(Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function ye(e,t){return typeof e==`function`?e(...t):!!e}function be(e,t,n){let r=!1,i;return Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(i??=t(),r?i:(r=!0,i.aborted?n():i.addEventListener(`abort`,n,{once:!0}),i))}),e}var xe=()=>S,Se=()=>xe(),Ce=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(){}},we=new class extends Ce{#e;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e();return window.addEventListener(`visibilitychange`,t,!1),()=>{window.removeEventListener(`visibilitychange`,t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(e=>{typeof e==`boolean`?this.setFocused(e):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e==`boolean`?this.#e:globalThis.document?.visibilityState!==`hidden`}},Te=x;function Ee(){let e=[],t=0,n=e=>{e()},r=e=>{e()},i=Te,a=r=>{t?e.push(r):i(()=>{n(r)})},o=()=>{let t=e;e=[],t.length&&i(()=>{r(()=>{t.forEach(e=>{n(e)})})})};return{batch:e=>{let n;t++;try{n=e()}finally{t--,t||o()}return n},batchCalls:e=>(...t)=>{a(()=>{e(...t)})},schedule:a,setNotifyFunction:e=>{n=e},setBatchNotifyFunction:e=>{r=e},setScheduler:e=>{i=e}}}var De=Ee(),Oe=new class extends Ce{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e(!0),n=()=>e(!1);return window.addEventListener(`online`,t,!1),window.addEventListener(`offline`,n,!1),()=>{window.removeEventListener(`online`,t),window.removeEventListener(`offline`,n)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(t=>{t(e)}))}isOnline(){return this.#e}};function ke(e){return Math.min(1e3*2**e,3e4)}function Ae(e){return(e??`online`)!==`online`||Oe.isOnline()}var je=class extends Error{constructor(e){super(`CancelledError`),this.revert=e?.revert,this.silent=e?.silent}};function Me(e){let t=!1,n=0,r,i=`pending`,a,o,s=new Promise((e,t)=>{a=e,o=t});s.catch(C);let c=()=>i!==`pending`,l=t=>{if(!c()){let n=new je(t);h(n),e.onCancel?.(n)}},u=()=>{t=!0},d=()=>{t=!1},f=()=>we.isFocused()&&(e.networkMode===`always`||Oe.isOnline())&&e.canRun(),p=()=>Ae(e.networkMode)&&e.canRun(),m=e=>{c()||(r?.(),i=`resolved`,a(e))},h=e=>{c()||(r?.(),i=`rejected`,o(e))},g=()=>new Promise(t=>{r=e=>{(c()||f())&&t(e)},e.onPause?.()}).then(()=>{r=void 0,c()||e.onContinue?.()}),_=()=>{if(c())return;let r,i=n===0?e.initialPromise:void 0;try{r=i??e.fn()}catch(e){r=Promise.reject(e)}Promise.resolve(r).then(m).catch(r=>{if(c())return;let i=e.retry??(Se()?0:3),a=e.retryDelay??ke,o=typeof a==`function`?a(n,r):a,s=i===!0||typeof i==`number`&&n<i||typeof i==`function`&&i(n,r);if(t||!s){h(r);return}n++,e.onFail?.(n,r),pe(o).then(()=>f()?void 0:g()).then(()=>{t?h(r):_()})})};return{promise:s,status:()=>i,cancel:l,continue:()=>(r?.(),s),cancelRetry:u,continueRetry:d,canStart:p,start:()=>(p()?_():g().then(_),s)}}var Ne=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),w(this.gcTime)&&(this.#e=b.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(Se()?1/0:3e5))}clearGcTimeout(){this.#e!==void 0&&(b.clearTimeout(this.#e),this.#e=void 0)}};function Pe(e){return{onFetch:(t,n)=>{let r=t.options,i=t.fetchOptions?.meta?.fetchMore?.direction,a=t.state.data?.pages||[],o=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,l=async()=>{let n=!1,l=e=>{be(e,()=>t.signal,()=>n=!0)},u=ve(t.options,t.fetchOptions),d=async(e,r,i)=>{if(n)return Promise.reject(t.signal.reason);if(r==null&&e.pages.length)return Promise.resolve(e);let a=(()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:r,direction:i?`backward`:`forward`,meta:t.options.meta};return l(e),e})(),o=await u(a),{maxPages:s}=t.options,c=i?ge:he;return{pages:c(e.pages,o,s),pageParams:c(e.pageParams,r,s)}};if(i&&a.length){let e=i===`backward`,t=e?Ie:Fe,n={pages:a,pageParams:o};s=await d(n,t(r,n),e)}else{let t=e??a.length;do{let e=c===0?o[0]??r.initialPageParam:Fe(r,s);if(c>0&&e==null)break;s=await d(s,e),c++}while(c<t)}return s};t.fetchFn=t.options.persister?()=>t.options.persister?.(l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):l}}}function Fe(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function Ie(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}var Le=class extends Ne{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e){super(),this.#s=!1,this.#o=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#i=e.client,this.#r=this.#i.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#t=Be(this.options),this.state=e.state??this.#t,this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return this.#e}get promise(){return this.#a?.promise}setOptions(e){if(this.options={...this.#o,...e},e?._type&&(this.#e=e._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){let e=Be(this.options);e.data!==void 0&&(this.setState(ze(e.data,e.dataUpdatedAt)),this.#t=e)}}optionalRemove(){!this.observers.length&&this.state.fetchStatus===`idle`&&this.#r.remove(this)}setData(e,t){let n=me(this.state.data,e,this.options);return this.#c({data:n,type:`success`,dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e){this.#c({type:`setState`,state:e})}cancel(e){let t=this.#a?.promise;return this.#a?.cancel(e),t?t.then(C).catch(C):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return this.#t}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>T(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===_e||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0&&this.observers.some(e=>T(e.options.staleTime,this)===`static`)}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e===`static`?!1:this.state.isInvalidated?!0:!te(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(e=>e.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#a?.continue()}onOnline(){this.observers.find(e=>e.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#a?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#r.notify({type:`observerAdded`,query:this,observer:e}))}removeObserver(e){let t=this.observers.indexOf(e);t!==-1&&(this.observers.splice(t,1),this.observers.length||(this.#a&&(this.#s||this.state.fetchStatus===`paused`&&this.state.status===`pending`?this.#a.cancel({revert:!0}):this.#a.cancelRetry()),this.scheduleGc()),this.#r.notify({type:`observerRemoved`,query:this,observer:e}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||this.#c({type:`invalidate`})}async fetch(e,t){if(this.state.fetchStatus!==`idle`&&this.#a?.status()!==`rejected`){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#a)return this.#a.continueRetry(),this.#a.promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.observers.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let n=new AbortController,r=e=>{Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(this.#s=!0,n.signal)})},i=()=>{let e=ve(this.options,t),n=(()=>{let e={client:this.#i,queryKey:this.queryKey,meta:this.meta};return r(e),e})();return this.#s=!1,this.options.persister?this.options.persister(e,n,this):e(n)},a=(()=>{let e={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:this.#i,state:this.state,fetchFn:i};return r(e),e})();(this.#e===`infinite`?Pe(this.options.pages):this.options.behavior)?.onFetch(a,this),this.#n=this.state,(this.state.fetchStatus===`idle`||this.state.fetchMeta!==a.fetchOptions?.meta)&&this.#c({type:`fetch`,meta:a.fetchOptions?.meta});let o=this.#a=Me({initialPromise:t?.initialPromise,fn:a.fetchFn,onCancel:e=>{e instanceof je&&e.revert&&this.setState({...this.#n,fetchStatus:`idle`}),n.abort()},onFail:(e,t)=>{this.#c({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#c({type:`pause`})},onContinue:()=>{this.#c({type:`continue`})},retry:a.options.retry,retryDelay:a.options.retryDelay,networkMode:a.options.networkMode,canRun:()=>!0});try{let e=await o.start();if(e===void 0)throw Error(`${this.queryHash} data is undefined`);return this.setData(e),this.#r.config.onSuccess?.(e,this),this.#r.config.onSettled?.(e,this.state.error,this),e}catch(e){if(e instanceof je){if(e.silent)return this.#a.promise;if(e.revert){if(this.state.data===void 0)throw e;return this.state.data}}throw this.#c({type:`error`,error:e}),this.#r.config.onError?.(e,this),this.#r.config.onSettled?.(this.state.data,e,this),e}finally{this.#a===o&&(this.#a=void 0),this.scheduleGc()}}#c(e){let t=t=>{switch(e.type){case`failed`:return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case`pause`:return{...t,fetchStatus:`paused`};case`continue`:return{...t,fetchStatus:`fetching`};case`fetch`:return{...t,...Re(t.data,this.options),fetchMeta:e.meta??null};case`success`:let n={...t,...ze(e.data,e.dataUpdatedAt),dataUpdateCount:t.dataUpdateCount+1,...!e.manual&&{fetchStatus:`idle`,fetchFailureCount:0,fetchFailureReason:null}};return this.#n=e.manual?n:void 0,n;case`error`:let r=e.error;return{...t,error:r,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:r,fetchStatus:`idle`,status:`error`,isInvalidated:!0};case`invalidate`:return{...t,isInvalidated:!0};case`setState`:return{...t,...e.state}}};this.state=t(this.state),De.batch(()=>{this.observers.slice().forEach(e=>{e.onQueryUpdate()}),this.#r.notify({query:this,type:`updated`,action:e})})}};function Re(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:Ae(t.networkMode)?`fetching`:`paused`,...e===void 0&&{error:null,status:`pending`}}}function ze(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:`success`}}function Be(e){let t=typeof e.initialData==`function`?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt==`function`?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?`success`:`pending`,fetchStatus:`idle`}}var Ve=class extends Ce{#e;#t=void 0;#n=void 0;#r=void 0;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p=new Set;constructor(e,t){super(),this.options=t,this.#e=e,this.#o=null,this.bindMethods(),this.setOptions(t)}bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),Ue(this.#t,this.options)?this.#m():this.updateResult(),this.#y())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return We(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return We(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#b(),this.#x(),this.#t.removeObserver(this)}setOptions(e){let t=this.options,n=this.#t;if(this.options=this.#e.defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!=`boolean`&&typeof this.options.enabled!=`function`&&typeof T(this.options.enabled,this.#t)!=`boolean`)throw Error(`Expected enabled to be a boolean or a callback that returns a boolean`);this.#S(),this.#t.setOptions(this.options),t._defaulted&&!le(this.options,t)&&this.#e.getQueryCache().notify({type:`observerOptionsUpdated`,query:this.#t,observer:this});let r=this.hasListeners();r&&Ge(this.#t,n,this.options,t)&&this.#m(),this.updateResult(),r&&(this.#t!==n||T(this.options.enabled,this.#t)!==T(t.enabled,this.#t)||T(this.options.staleTime,this.#t)!==T(t.staleTime,this.#t))&&this.#g();let i=this.#_();r&&(this.#t!==n||T(this.options.enabled,this.#t)!==T(t.enabled,this.#t)||i!==this.#f)&&this.#v(i)}getOptimisticResult(e){let t=this.#e.getQueryCache().build(this.#e,e),n=this.createResult(t,e);return le(this.getCurrentResult(),n)||(this.#r=n,this.#a=this.options,this.#i=this.#t.state),n}getCurrentResult(){return this.#r}trackResult(e,t){return new Proxy(e,{get:(e,n)=>(this.trackProp(n),t?.(n),Reflect.get(e,n))})}trackProp(e){this.#p.add(e)}getCurrentQuery(){return this.#t}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){let t=this.#e.defaultQueryOptions(e),n=this.#e.getQueryCache().build(this.#e,t),r=()=>{},i,a=new Promise(e=>{i=e,r=this.#e.getQueryCache().subscribe(i=>{i.type===`updated`&&i.query.queryHash===n.queryHash&&n.state.data!==void 0&&(r(),e(this.createResult(n,t)))})});return Promise.race([n.fetch().then(()=>{let e=this.createResult(n,t);return i?.(e),e}).finally(()=>{r()}),a])}fetch(e){return this.#m({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#r))}#m(e){this.#S();let t=this.#t.fetch(this.options,e);return e?.throwOnError||(t=t.catch(C)),t}#h(e){return!Se()&&T(this.options.enabled,this.#t)!==!1&&w(e)}#g(){this.#b();let e=T(this.options.staleTime,this.#t);if(this.#r.isStale||!this.#h(e))return;let t=te(this.#r.dataUpdatedAt,e)+1;this.#u=b.setTimeout(()=>{this.#r.isStale||this.updateResult()},t)}#_(){return T(this.options.refetchInterval,this.#t)??!1}#v(e){this.#x(),this.#f=e,this.#f!==0&&this.#h(this.#f)&&(this.#d=b.setInterval(()=>{(this.options.refetchIntervalInBackground||we.isFocused())&&this.#m()},this.#f))}#y(){this.#g(),this.#v(this.#_())}#b(){this.#u!==void 0&&(b.clearTimeout(this.#u),this.#u=void 0)}#x(){this.#d!==void 0&&(b.clearInterval(this.#d),this.#d=void 0)}createResult(e,t){let n=this.#t,r=this.options,i=this.#r,a=this.#i,o=this.#a,s=e===n?this.#n:e.state,{state:c}=e,l={...c},u=!1,d;if(t._optimisticResults){let i=this.hasListeners(),a=!i&&Ue(e,t),o=i&&Ge(e,n,t,r);(a||o)&&(l={...l,...Re(c.data,e.options)}),t._optimisticResults===`isRestoring`&&(l.fetchStatus=`idle`)}let{error:f,errorUpdatedAt:p,status:m}=l;d=l.data;let h=!1;if(t.placeholderData!==void 0&&d===void 0&&m===`pending`){let e;i?.isPlaceholderData&&t.placeholderData===o?.placeholderData?(e=i.data,h=!0):e=typeof t.placeholderData==`function`?t.placeholderData(this.#l?.state.data,this.#l):t.placeholderData,e!==void 0&&(m=`success`,d=me(i?.data,e,t),u=!0)}if(t.select&&d!==void 0&&!h){if(i&&d===a?.data&&t.select===this.#s)d=this.#c;else try{this.#s=t.select,d=t.select(d),d=me(i?.data,d,t),this.#c=d,this.#o=null}catch(e){this.#o=e}}else d===void 0&&(this.#o=null);this.#o&&(f=this.#o,d=this.#c,p=Date.now(),m=`error`,u=!1);let g=l.fetchStatus===`fetching`,_=m===`pending`,v=m===`error`,y=_&&g,b=d!==void 0;return{status:m,fetchStatus:l.fetchStatus,isPending:_,isSuccess:m===`success`,isError:v,isInitialLoading:y,isLoading:y,data:d,dataUpdatedAt:l.dataUpdatedAt,error:f,errorUpdatedAt:p,failureCount:l.fetchFailureCount,failureReason:l.fetchFailureReason,errorUpdateCount:l.errorUpdateCount,isFetched:e.isFetched(),isFetchedAfterMount:l.dataUpdateCount>s.dataUpdateCount||l.errorUpdateCount>s.errorUpdateCount,isFetching:g,isRefetching:g&&!_,isLoadingError:v&&!b,isPaused:l.fetchStatus===`paused`,isPlaceholderData:u,isRefetchError:v&&b,isStale:Ke(e,t),refetch:this.refetch,isEnabled:T(t.enabled,e)!==!1}}updateResult(){let e=this.#r,t=this.createResult(this.#t,this.options);if(this.#i=this.#t.state,this.#a=this.options,this.#i.data!==void 0&&(this.#l=this.#t),le(t,e))return;this.#r=t;let n=(()=>{if(!e)return!0;let{notifyOnChangeProps:t}=this.options,n=typeof t==`function`?t():t;if(n===`all`||!n&&!this.#p.size)return!0;let r=new Set(n??this.#p);return this.options.throwOnError&&r.add(`error`),Object.keys(this.#r).some(t=>{let n=t;return this.#r[n]!==e[n]&&r.has(n)})})();De.batch(()=>{n&&this.listeners.forEach(e=>{e(this.#r)}),this.#e.getQueryCache().notify({query:this.#t,type:`observerResultsUpdated`})})}#S(){let e=this.#e.getQueryCache().build(this.#e,this.options);if(e===this.#t)return;let t=this.#t;this.#t=e,this.#n=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#y()}};function He(e,t){return T(t.enabled,e)!==!1&&e.state.data===void 0&&(e.state.status!==`error`||T(t.retryOnMount,e)!==!1)}function Ue(e,t){return He(e,t)||e.state.data!==void 0&&We(e,t,t.refetchOnMount)}function We(e,t,n){if(T(t.enabled,e)!==!1&&T(t.staleTime,e)!==`static`){let r=T(n,e);return r===`always`||r!==!1&&Ke(e,t)}return!1}function Ge(e,t,n,r){return(e!==t||T(r.enabled,e)===!1)&&(!n.suspense||e.state.status!==`error`)&&Ke(e,n)}function Ke(e,t){return T(t.enabled,e)!==!1&&e.isStaleByTime(T(t.staleTime,e))}var qe=class extends Ne{#e;#t;#n;#r;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#t=[],this.state=e.state||Je(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#n.notify({type:`observerRemoved`,mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status===`pending`?this.scheduleGc():this.#n.remove(this))}continue(){return this.#r?.continue()??(this.state.status===`pending`?this.execute(this.state.variables):Promise.resolve())}async execute(e){let t=()=>{this.#i({type:`continue`})},n={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey},r=this.#r=Me({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(Error(`No mutationFn found`)),onFail:(e,t)=>{this.#i({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#i({type:`pause`})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)}),i=this.state.status===`pending`,a=!r.canStart();try{if(i)t();else{this.#i({type:`pending`,variables:e,isPaused:a}),this.#n.config.onMutate&&await this.#n.config.onMutate(e,this,n);let t=await this.options.onMutate?.(e,n);t!==this.state.context&&this.#i({type:`pending`,context:t,variables:e,isPaused:a})}let o=await r.start();return await this.#n.config.onSuccess?.(o,e,this.state.context,this,n),await this.options.onSuccess?.(o,e,this.state.context,n),await this.#n.config.onSettled?.(o,null,this.state.variables,this.state.context,this,n),await this.options.onSettled?.(o,null,e,this.state.context,n),this.#i({type:`success`,data:o}),o}catch(t){try{await this.#n.config.onError?.(t,e,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onError?.(t,e,this.state.context,n)}catch(e){Promise.reject(e)}try{await this.#n.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,t,e,this.state.context,n)}catch(e){Promise.reject(e)}throw this.#i({type:`error`,error:t}),t}finally{this.#r===r&&(this.#r=void 0),this.#n.runNext(this)}}#i(e){let t=t=>{switch(e.type){case`failed`:return{...t,failureCount:e.failureCount,failureReason:e.error};case`pause`:return{...t,isPaused:!0};case`continue`:return{...t,isPaused:!1};case`pending`:return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:`pending`,variables:e.variables,submittedAt:Date.now()};case`success`:return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:`success`,isPaused:!1};case`error`:return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:`error`}}};this.state=t(this.state),De.batch(()=>{this.#t.forEach(t=>{t.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:`updated`,action:e})})}};function Je(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:`idle`,variables:void 0,submittedAt:0}}var Ye=class extends Ce{#e;#t=void 0;#n;#r;constructor(e,t){super(),this.#e=e,this.setOptions(t),this.bindMethods(),this.#i()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#e.defaultMutationOptions(e),le(this.options,t)||this.#e.getMutationCache().notify({type:`observerOptionsUpdated`,mutation:this.#n,observer:this}),t?.mutationKey&&this.options.mutationKey&&ae(t.mutationKey)!==ae(this.options.mutationKey)?this.reset():this.#n?.state.status===`pending`&&this.#n.setOptions(this.options)}onSubscribe(){this.listeners.size===1&&this.#n&&(this.#n.addObserver(this),this.#i())}onUnsubscribe(){this.hasListeners()||this.#n?.removeObserver(this)}onMutationUpdate(e){this.#i(),this.#a(e)}getCurrentResult(){return this.#t}reset(){this.#n?.removeObserver(this),this.#n=void 0,this.#i(),this.#a()}mutate(e,t){return this.#r=t,this.#n?.removeObserver(this),this.#n=this.#e.getMutationCache().build(this.#e,this.options),this.#n.addObserver(this),this.#n.execute(e)}#i(){let e=this.#n?.state??Je();this.#t={...e,isPending:e.status===`pending`,isSuccess:e.status===`success`,isError:e.status===`error`,isIdle:e.status===`idle`,mutate:this.mutate,reset:this.reset}}#a(e){De.batch(()=>{if(this.#r&&this.hasListeners()){let t=this.#t.variables,n=this.#t.context,r={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};if(e?.type===`success`){try{this.#r.onSuccess?.(e.data,t,n,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(e.data,null,t,n,r)}catch(e){Promise.reject(e)}}else if(e?.type===`error`){try{this.#r.onError?.(e.error,t,n,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(void 0,e.error,t,n,r)}catch(e){Promise.reject(e)}}}this.listeners.forEach(e=>{e(this.#t)})})}},Xe=m.createContext(!1),Ze=()=>m.useContext(Xe);Xe.Provider;function Qe(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}var $e=m.createContext(Qe()),et=()=>m.useContext($e),tt=(e,t,n)=>{let r=n?.state.error&&typeof e.throwOnError==`function`?ye(e.throwOnError,[n.state.error,n]):e.throwOnError;(e.suspense||r)&&(t.isReset()||(e.retryOnMount=!1))},nt=e=>{m.useEffect(()=>{e.clearReset()},[e])},rt=({result:e,errorResetBoundary:t,throwOnError:n,query:r,suspense:i})=>e.isError&&!t.isReset()&&!e.isFetching&&r&&(i&&e.data===void 0||ye(n,[e.error,r])),it=e=>{if(e.suspense){let t=1e3,n=e=>e===`static`?e:Math.max(e??t,t),r=e.staleTime;e.staleTime=typeof r==`function`?(...e)=>n(r(...e)):n(r),typeof e.gcTime==`number`&&(e.gcTime=Math.max(e.gcTime,t))}},at=(e,t)=>e?.suspense&&t.isPending,ot=(e,t,n)=>t.fetchOptimistic(e).catch(()=>{n.clearReset()});function st(e,t,n){let r=Ze(),i=et(),a=_(n),o=a.defaultQueryOptions(e),s=a.getQueryCache().get(o.queryHash),c=e.subscribed!==!1;o._optimisticResults=r?`isRestoring`:c?`optimistic`:void 0,it(o),tt(o,i,s),nt(i);let[l]=m.useState(()=>new t(a,o)),u=l.getOptimisticResult(o),d=!r&&c;if(m.useSyncExternalStore(m.useCallback(e=>{let t=d?l.subscribe(De.batchCalls(e)):C;return l.updateResult(),t},[l,d]),()=>l.getCurrentResult(),()=>l.getCurrentResult()),m.useEffect(()=>{l.setOptions(o)},[o,l]),at(o,u))throw ot(o,l,i);if(rt({result:u,errorResetBoundary:i,throwOnError:o.throwOnError,query:s,suspense:o.suspense}))throw u.error;return o.notifyOnChangeProps?u:l.trackResult(u)}function E(e,t){return st(e,Ve,t)}function D(e,t){let n=_(t),[r]=m.useState(()=>new Ye(n,e));m.useEffect(()=>{r.setOptions(e)},[r,e]);let i=m.useSyncExternalStore(m.useCallback(e=>r.subscribe(De.batchCalls(e)),[r]),()=>r.getCurrentResult(),()=>r.getCurrentResult()),a=m.useCallback((...e)=>{r.mutate(e[0],e[1]).catch(C)},[r]);if(i.error&&ye(r.options.throwOnError,[i.error]))throw i.error;return{...i,mutate:a,mutateAsync:i.mutate}}var ct=(0,m.createContext)({});function lt(e){let t=(0,m.useRef)(null);return t.current===null&&(t.current=e()),t.current}var ut=typeof window<`u`?m.useLayoutEffect:m.useEffect,dt=(0,m.createContext)(null);function ft(e,t){e.indexOf(t)===-1&&e.push(t)}function pt(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}var mt=(e,t,n)=>n>t?t:n<e?e:n,ht={},gt=e=>/^-?(?:\d+(?:\.\d+)?|\.\d+)$/u.test(e),_t=e=>typeof e==`object`&&!!e,vt=e=>/^0[^.\s]+$/u.test(e);function yt(e){let t;return()=>(t===void 0&&(t=e()),t)}var bt=e=>e,xt=(...e)=>e.reduce((e,t)=>n=>t(e(n))),St=(e,t,n)=>{let r=t-e;return r?(n-e)/r:1},Ct=class{constructor(){this.subscriptions=[]}add(e){return ft(this.subscriptions,e),()=>this.remove(e)}remove(e){pt(this.subscriptions,e)}notify(e,t,n){let r=this.subscriptions.length;if(r){if(r===1)this.subscriptions[0](e,t,n);else for(let i=0;i<r;i++){let r=this.subscriptions[i];r&&r(e,t,n)}}}getSize(){return this.subscriptions.length}clear(){this.subscriptions.length=0}},O=e=>e*1e3,wt=e=>e/1e3,Tt=(e,t)=>t?1e3/t*e:0,Et=(e,t,n)=>{let r=t-e;return((n-e)%r+r)%r+e},Dt=(e,t,n)=>(((1-3*n+3*t)*e+(3*n-6*t))*e+3*t)*e,Ot=1e-7,kt=12;function At(e,t,n,r,i){let a,o,s=0;do o=t+(n-t)/2,a=Dt(o,r,i)-e,a>0?n=o:t=o;while(Math.abs(a)>Ot&&++s<kt);return o}function jt(e,t,n,r){if(e===t&&n===r)return bt;let i=t=>At(t,0,1,e,n);return e=>e===0||e===1?e:Dt(i(e),t,r)}var Mt=e=>t=>t<=.5?e(2*t)/2:(2-e(2*(1-t)))/2,Nt=e=>t=>1-e(1-t),Pt=jt(.33,1.53,.69,.99),Ft=Nt(Pt),It=Mt(Ft),Lt=e=>e>=1?1:(e*=2)<1?.5*Ft(e):.5*(2-2**(-10*(e-1))),Rt=e=>1-Math.sin(Math.acos(e)),zt=Nt(Rt),Bt=Mt(Rt),Vt=jt(.42,0,1,1),Ht=jt(0,0,.58,1),Ut=jt(.42,0,.58,1),Wt=e=>Array.isArray(e)&&typeof e[0]!=`number`;function Gt(e,t){return Wt(e)?e[Et(0,e.length,t)]:e}var Kt=e=>Array.isArray(e)&&typeof e[0]==`number`,qt={linear:bt,easeIn:Vt,easeInOut:Ut,easeOut:Ht,circIn:Rt,circInOut:Bt,circOut:zt,backIn:Ft,backInOut:It,backOut:Pt,anticipate:Lt},Jt=e=>typeof e==`string`,Yt=e=>{if(Kt(e)){e.length;let[t,n,r,i]=e;return jt(t,n,r,i)}return Jt(e)?(qt[e],`${e}`,qt[e]):e},k={delta:0,timestamp:0,isProcessing:!1},Xt;function Zt(){Xt=void 0}var A={now:()=>(Xt===void 0&&A.set(k.isProcessing||ht.useManualTiming?k.timestamp:performance.now()),Xt),set:e=>{Xt=e,queueMicrotask(Zt)}},Qt=e=>Math.round(e*1e5)/1e5,$t=e=>t=>typeof t==`string`&&t.startsWith(e),en=$t(`--`),tn=$t(`var(--`),nn=e=>tn(e)?rn.test(e.split(`/*`)[0].trim()):!1,rn=/var\(--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)$/iu;function an(e){return typeof e==`string`&&e.split(`/*`)[0].includes(`var(--`)}var on={test:e=>typeof e==`number`,parse:parseFloat,transform:e=>e},sn={...on,transform:e=>mt(0,1,e)},cn={...on,default:1},ln=/-?(?:\d+(?:\.\d+)?|\.\d+)/gu;function un(e){return e==null}var dn=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))$/iu,fn=(e,t)=>n=>!!(typeof n==`string`&&dn.test(n)&&n.startsWith(e)||t&&!un(n)&&Object.prototype.hasOwnProperty.call(n,t)),pn=(e,t,n)=>r=>{if(typeof r!=`string`)return r;let[i,a,o,s]=r.match(ln);return{[e]:parseFloat(i),[t]:parseFloat(a),[n]:parseFloat(o),alpha:s===void 0?1:parseFloat(s)}},mn=e=>mt(0,255,e),hn={...on,transform:e=>Math.round(mn(e))},gn={test:fn(`rgb`,`red`),parse:pn(`red`,`green`,`blue`),transform:({red:e,green:t,blue:n,alpha:r=1})=>`rgba(`+hn.transform(e)+`, `+hn.transform(t)+`, `+hn.transform(n)+`, `+Qt(sn.transform(r))+`)`};function _n(e){let t=``,n=``,r=``,i=``;return e.length>5?(t=e.substring(1,3),n=e.substring(3,5),r=e.substring(5,7),i=e.substring(7,9)):(t=e.substring(1,2),n=e.substring(2,3),r=e.substring(3,4),i=e.substring(4,5),t+=t,n+=n,r+=r,i+=i),{red:parseInt(t,16),green:parseInt(n,16),blue:parseInt(r,16),alpha:i?parseInt(i,16)/255:1}}var vn={test:fn(`#`),parse:_n,transform:gn.transform},yn=e=>({test:t=>typeof t==`string`&&t.endsWith(e)&&t.split(` `).length===1,parse:parseFloat,transform:t=>`${t}${e}`}),bn=yn(`deg`),xn=yn(`%`),j=yn(`px`),Sn=yn(`vh`),Cn=yn(`vw`),wn={...xn,parse:e=>xn.parse(e)/100,transform:e=>xn.transform(e*100)},Tn={test:fn(`hsl`,`hue`),parse:pn(`hue`,`saturation`,`lightness`),transform:({hue:e,saturation:t,lightness:n,alpha:r=1})=>`hsla(`+Math.round(e)+`, `+xn.transform(Qt(t))+`, `+xn.transform(Qt(n))+`, `+Qt(sn.transform(r))+`)`},M={test:e=>gn.test(e)||vn.test(e)||Tn.test(e),parse:e=>gn.test(e)?gn.parse(e):Tn.test(e)?Tn.parse(e):vn.parse(e),transform:e=>typeof e==`string`?e:e.hasOwnProperty(`red`)?gn.transform(e):Tn.transform(e),getAnimatableNone:e=>{let t=M.parse(e);return t.alpha=0,M.transform(t)}},En=/(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))/giu,Dn=new RegExp(ln.source),On=new RegExp(En.source,`i`);function kn(e){return isNaN(e)&&typeof e==`string`&&(Dn.test(e)||On.test(e))}var An=`number`,jn=`color`,Mn=`var`,Nn=`var(`,Pn="${}",Fn=/var\s*\(\s*--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)|#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\)|-?(?:\d+(?:\.\d+)?|\.\d+)/giu;function In(e){let t=e.toString();return Dn.test(t)||On.test(t)}function Ln(e){let t=e.toString(),n=[],r={color:[],number:[],var:[]},i=[],a=0;return{values:n,split:t.replace(Fn,e=>(M.test(e)?(r.color.push(a),i.push(jn),n.push(M.parse(e))):e.startsWith(Nn)?(r.var.push(a),i.push(Mn),n.push(e)):(r.number.push(a),i.push(An),n.push(parseFloat(e))),++a,Pn)).split(Pn),indexes:r,types:i}}function Rn(e){return Ln(e).values}function zn({split:e,types:t}){let n=e.length;return r=>{let i=``;for(let a=0;a<n;a++)if(i+=e[a],r[a]!==void 0){let e=t[a];i+=e===An?Qt(r[a]):e===jn?M.transform(r[a]):r[a]}return i}}function Bn(e){return zn(Ln(e))}var Vn=e=>typeof e==`number`?0:M.test(e)?M.getAnimatableNone(e):e,Hn=(e,t)=>typeof e==`number`?t?.trim().endsWith(`/`)?e:0:Vn(e);function Un(e){let t=Ln(e);return zn(t)(t.values.map((e,n)=>Hn(e,t.split[n])))}var N={test:kn,parse:Rn,createTransformer:Bn,getAnimatableNone:Un};function Wn(e,t,n){return n<0&&(n+=1),n>1&&--n,n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function Gn({hue:e,saturation:t,lightness:n,alpha:r}){e/=360,t/=100,n/=100;let i=0,a=0,o=0;if(!t)i=a=o=n;else{let r=n<.5?n*(1+t):n+t-n*t,s=2*n-r;i=Wn(s,r,e+1/3),a=Wn(s,r,e),o=Wn(s,r,e-1/3)}return{red:Math.round(i*255),green:Math.round(a*255),blue:Math.round(o*255),alpha:r}}function Kn(e,t){return n=>n>0?t:e}var P=(e,t,n)=>e+(t-e)*n,qn=(e,t,n)=>{let r=e*e,i=n*(t*t-r)+r;return i<0?0:Math.sqrt(i)},Jn=[vn,gn,Tn],Yn=e=>Jn.find(t=>t.test(e));function Xn(e){let t=Yn(e);if(!t)return`${e}`,!1;let n=t.parse(e);return t===Tn&&(n=Gn(n)),n}var Zn=(e,t)=>{let n=Xn(e),r=Xn(t);if(!n||!r)return Kn(e,t);let i={...n};return e=>(i.red=qn(n.red,r.red,e),i.green=qn(n.green,r.green,e),i.blue=qn(n.blue,r.blue,e),i.alpha=P(n.alpha,r.alpha,e),gn.transform(i))},Qn=new Set([`none`,`hidden`]);function $n(e,t){return Qn.has(e)?n=>n<=0?e:t:n=>n>=1?t:e}function er(e,t){return n=>P(e,t,n)}function tr(e){return typeof e==`number`?er:typeof e==`string`?nn(e)?Kn:M.test(e)?Zn:ar:Array.isArray(e)?nr:typeof e==`object`?M.test(e)?Zn:rr:Kn}function nr(e,t){let n=[...e],r=n.length,i=e.map((e,n)=>tr(e)(e,t[n]));return e=>{for(let t=0;t<r;t++)n[t]=i[t](e);return n}}function rr(e,t){let n={...e,...t},r={};for(let i in n)e[i]!==void 0&&t[i]!==void 0&&(r[i]=tr(e[i])(e[i],t[i]));return e=>{for(let t in r)n[t]=r[t](e);return n}}function ir(e,t){let n=[],r={color:0,var:0,number:0};for(let i=0;i<t.values.length;i++){let a=t.types[i],o=e.indexes[a][r[a]],s=e.values[o]??0;n[i]=s,r[a]++}return n}var ar=(e,t)=>{let n=N.createTransformer(t),r=Ln(e),i=Ln(t);return r.indexes.var.length===i.indexes.var.length&&r.indexes.color.length===i.indexes.color.length&&r.indexes.number.length>=i.indexes.number.length?Qn.has(e)&&!i.values.length||Qn.has(t)&&!r.values.length?$n(e,t):xt(nr(ir(r,i),i.values),n):(`${e}${t}`,Kn(e,t))},or=/^(-?(?:\d+(?:\.\d*)?|\.\d+))([a-z%]*)$/iu;function sr(e,t){let n=or.exec(e);if(!n)return;let r=or.exec(t);if(!r||n[2]!==r[2])return;let i=n[2],a=parseFloat(n[1]),o=parseFloat(r[1]);return e=>Qt(P(a,o,e))+i}function cr(e,t,n){if(typeof e==`number`&&typeof t==`number`&&typeof n==`number`)return P(e,t,n);if(typeof e==`string`&&typeof t==`string`){let n=sr(e,t);if(n)return n}return tr(e)(e,t)}var lr=[`setup`,`read`,`resolveKeyframes`,`preUpdate`,`update`,`preRender`,`render`,`postRender`];function ur(e){let t=new Set,n=new Set,r=!1,i=!1,a=new Set,o={delta:0,timestamp:0,isProcessing:!1};function s(t){a.has(t)&&(n.add(t),e()),t(o)}let c={schedule:(e,i=!1,o=!1)=>{let s=o&&r?t:n;return i&&a.add(e),s.add(e),e},cancel:e=>{n.delete(e),a.delete(e)},process:e=>{if(o=e,r){i=!0;return}r=!0;let a=t;t=n,n=a,t.forEach(s),t.clear(),r=!1,i&&(i=!1,c.process(e))}};return c}var dr=40;function fr(e,t,n={delta:0,timestamp:0,isProcessing:!1}){let r=!1,i=!0,a=()=>r=!0,o=lr.reduce((e,t)=>(e[t]=ur(a),e),{}),{setup:s,read:c,resolveKeyframes:l,preUpdate:u,update:d,preRender:f,render:p,postRender:m}=o,h=()=>{let a=ht.useManualTiming,o=a?n.timestamp:performance.now();r=!1,a||(n.delta=i?1e3/60:Math.max(Math.min(o-n.timestamp,dr),1)),n.timestamp=o,n.isProcessing=!0,s.process(n),c.process(n),l.process(n),u.process(n),d.process(n),f.process(n),p.process(n),m.process(n),n.isProcessing=!1,r&&t&&(i=!1,e(h))},g=()=>{r=!0,i=!0,n.isProcessing||e(h)};return{schedule:lr.reduce((e,t)=>{let n=o[t];return e[t]=(e,t=!1,i=!1)=>(r||g(),n.schedule(e,t,i)),e},{}),cancel:e=>{for(let t=0;t<lr.length;t++)o[lr[t]].cancel(e)},state:n,steps:o}}var{schedule:F,cancel:pr,steps:mr}=fr(typeof requestAnimationFrame<`u`?requestAnimationFrame:bt,!0,k),hr=e=>{let t=({timestamp:t})=>e(t);return{start:(e=!0)=>F.update(t,e),stop:()=>pr(t),now:()=>k.isProcessing?k.timestamp:A.now()}},gr=(e,t,n=10)=>{let r=``,i=Math.max(Math.round(t/n),2);for(let t=0;t<i;t++)r+=Math.round(e(t/(i-1))*1e4)/1e4+`, `;return`linear(${r.substring(0,r.length-2)})`},_r=2e4;function vr(e,t=50,n=_r,r){let i=0,a=e.next(i);for(r?.push(a.value);!a.done&&i<n;)i+=t,a=e.next(i),r?.push(a.value);return i>=n?1/0:i}function yr(e,t=100,n){let r=n({...e,keyframes:[0,t]}),i=Math.min(vr(r),_r);return{type:`keyframes`,ease:e=>r.next(i*e).value/t,duration:wt(i)}}var I={stiffness:100,damping:10,mass:1,duration:800,bounce:.3,visualDuration:.3,restSpeed:{granular:.01,default:2},restDelta:{granular:.005,default:.5},minDuration:.01,maxDuration:10,minDamping:.05},br=e=>e<0?1/Math.max(1+e,I.minDamping):Math.max(1-e,I.minDamping);function xr(e,t){if(!(e>1))return 1;let n=Math.sqrt(e*e-1),r=e-n,i=e+n,a=2*n*Math.exp(-t)*(1+t);return wr(e=>i*Math.exp(-r*e)-r*Math.exp(-i*e)-a,e=>Math.exp(-i*e)-Math.exp(-r*e),t)/t}function Sr(e,t){return e*Math.sqrt(1-t*t)}var Cr=12;function wr(e,t,n){let r=n;for(let n=1;n<Cr;n++)r-=e(r)/t(r);return r}var Tr=.001;function Er({duration:e=I.duration,bounce:t=I.bounce}){let n,r;I.maxDuration;let i=br(t);e=mt(I.minDuration,I.maxDuration,wt(e)),i<1?(n=t=>{let n=t*i,r=n*e,a=Sr(t,i),o=Math.exp(-r);return Tr-n/a*o},r=t=>{let r=t*i*e,a=i*i*t*t*e,o=Math.exp(-r),s=Sr(t*t,i);return(-n(t)+Tr>0?-1:1)*-a*o/s}):(n=t=>-.001+Math.exp(-t*e)*(t*e+1),r=t=>Math.exp(-t*e)*(-t*(e*e)));let a=5/e,o=wr(n,r,a),s=o*xr(i,o*e),c=s*s;return{stiffness:c,damping:i*2*Math.sqrt(c),duration:O(e)}}var Dr=(e,t)=>(t?e>=0:e>0)&&e<1/0;function Or(e,t){if(Dr(e,t))return e}function kr(e){let t=Or(e.stiffness),n=Or(e.damping,!0),r=Or(e.mass),i={...e,stiffness:t??I.stiffness,damping:n??I.damping,mass:r??I.mass,isResolvedFromDuration:!1,isTimeDefined:(t??n??r)===void 0&&(e.duration!==void 0||e.bounce!==void 0)};if(i.isTimeDefined){if(e.visualDuration){let t=br(e.bounce||0),n=2*Math.PI/(e.visualDuration*1.2)*xr(t,2*Math.PI/1.2);i.stiffness=n*n,i.damping=2*t*Math.sqrt(i.stiffness)}else Object.assign(i,Er(i)),i.isResolvedFromDuration=!0;(!Dr(i.stiffness)||!Dr(i.damping,!0))&&(i.stiffness=I.stiffness,i.damping=I.damping)}return i}function Ar(e=I.visualDuration,t=I.bounce){let n=typeof e==`object`?e:{visualDuration:e,keyframes:[0,1],bounce:t},r=n.keyframes[0],i=n.keyframes[n.keyframes.length-1],a={done:!1,value:r},{stiffness:o,damping:s,mass:c,duration:l,isResolvedFromDuration:u,isTimeDefined:d}=kr({...n}),f=e=>d?0:-wt(e),p=s/(2*Math.sqrt(o*c)),m=wt(Math.sqrt(o/c)),h=p*m,g={target:i,delta:i-r,velocity:f(n.velocity||0)||0,restSpeed:0,restDelta:0},_=()=>{let e=Math.abs(g.delta)<5;g.restSpeed=n.restSpeed||(e?I.restSpeed.granular:I.restSpeed.default),g.restDelta=n.restDelta||(e?I.restDelta.granular:I.restDelta.default)};_();let v,y,b;if(p<1){let e=Sr(m,p),t={A:0,sinC:0,cosC:0,t:-1,env:0,sin:0,cos:0};b=()=>{t.A=(g.velocity+h*g.delta)/e,t.sinC=h*t.A+g.delta*e,t.cosC=h*g.delta-t.A*e};let n=n=>{n!==t.t&&(t.t=n,t.env=Math.exp(-h*n),t.sin=Math.sin(e*n),t.cos=Math.cos(e*n))};v=e=>(n(e),g.target-t.env*(t.A*t.sin+g.delta*t.cos)),y=e=>(n(e),t.env*(t.sinC*t.sin+t.cosC*t.cos))}else if(p===1){v=e=>g.target-Math.exp(-m*e)*(g.delta+(g.velocity+m*g.delta)*e);let e={C:0};b=()=>{e.C=g.velocity+m*g.delta},y=t=>Math.exp(-m*t)*(m*e.C*t-g.velocity)}else{let e=m*Math.sqrt(p*p-1),t=h-e,n=h+e,r=d?1/0:300/e,i=(e,t)=>Math.exp(t>r?-e*r-h*(t-r):-e*t),a={S:0,F:0};b=()=>{let t=(g.velocity+h*g.delta)/e;a.S=(g.delta+t)/2,a.F=(g.delta-t)/2},v=e=>g.target-a.S*i(t,e)-a.F*i(n,e),y=e=>t*a.S*i(t,e)+n*a.F*i(n,e)}b();let x=u&&l||null,S={calculatedDuration:x,retarget:(e,t)=>{g.target=e[e.length-1],g.delta=g.target-e[0],g.velocity=f(t),n.restSpeed&&n.restDelta||_(),S.calculatedDuration=x,a.done=!1,b()},velocity:e=>O(y(e)),next:e=>{let t=v(e);if(u)a.done=e>=l;else{let n=O(y(e));a.done=Math.abs(n)<=g.restSpeed&&Math.abs(g.target-t)<=g.restDelta}return a.value=a.done?g.target:t,a},toString:()=>{let e=Math.min(vr(S),_r),t=gr(t=>S.next(e*t).value,e,30);return e+`ms `+t},toTransition:()=>{}};return S}Ar.applyToOptions=e=>{let t=yr(e,100,Ar);return e.ease=t.ease,e.duration=O(t.duration),e.type=`keyframes`,e};function jr({keyframes:e,velocity:t=0,power:n=.8,timeConstant:r=325,bounceDamping:i=10,bounceStiffness:a=500,modifyTarget:o,min:s,max:c,restDelta:l=.5,restSpeed:u}){let d=e[0],f={done:!1,value:d},p=e=>e<s||e>c,m=e=>s===void 0?c:c===void 0||Math.abs(s-e)<Math.abs(c-e)?s:c,h=n*t,g=d+h,_=o===void 0?g:o(g);_!==g&&(h=_-d);let v=e=>-h*Math.exp(-e/r),y=e=>{let t=v(e);f.done=Math.abs(t)<=l,f.value=f.done?_:_+t},b,x,S=e=>{p(f.value)&&(b=e,x=Ar({keyframes:[f.value,m(f.value)],velocity:-v(e)/r*1e3,damping:i,stiffness:a,restDelta:l,restSpeed:u}))};return S(0),{calculatedDuration:null,next:e=>{let t=!1;return!x&&b===void 0&&(t=!0,y(e),S(e)),b!==void 0&&e>=b?x.next(e-b):(!t&&y(e),f)}}}function Mr(e,t,n){let r=[],i=n||ht.mix||cr,a=e.length-1;for(let n=0;n<a;n++){let a=i(e[n],e[n+1]);t&&(a=xt(Array.isArray(t)?t[n]||bt:t,a)),r.push(a)}return r}function Nr(e,t,{clamp:n=!0,ease:r,mixer:i}={}){let a=e.length;if(t.length,a===1)return()=>t[0];if(a===2&&t[0]===t[1])return()=>t[1];let o=e[0]===e[1];e[0]>e[a-1]&&(e=[...e].reverse(),t=[...t].reverse());let s=Mr(t,r,i),c=s.length,l=n=>{if(o&&n<e[0])return t[0];let r=0;if(c>1)for(;r<e.length-2&&!(n<e[r+1]);r++);let i=St(e[r],e[r+1],n);return s[r](i)};return n?t=>l(mt(e[0],e[a-1],t)):l}function Pr(e,t){let n=e[e.length-1];for(let r=1;r<=t;r++){let i=St(0,t,r);e.push(P(n,1,i))}}function Fr(e){let t=[0];return Pr(t,e.length-1),t}function Ir(e,t){return e.map(e=>e*t)}function Lr(e,t){return e.map(()=>t||Ut).splice(0,e.length-1)}function Rr({duration:e=300,keyframes:t,times:n,ease:r=`easeInOut`}){let i=Wt(r)?r.map(Yt):Yt(r)||Ut,a={done:!1,value:t[0]};if(t.length===2&&!Array.isArray(i)&&(!n||n.length!==2||n[0]===0&&n[1]===1)){let[n,r]=t,o=n===r?void 0:(ht.mix||cr)(n,r);return{calculatedDuration:e,next:t=>(a.value=o?o(i(e>0?mt(0,1,t/e):1)):r,a.done=t>=e,a)}}let o=Nr(Ir(n&&n.length===t.length?n:Fr(t),e),t,{ease:Array.isArray(i)?i:Lr(t,i)});return{calculatedDuration:e,next:t=>(a.value=o(t),a.done=t>=e,a)}}var zr=5;function Br(e,t,n){let r=Math.max(t-zr,0);return Tt(n-e(r),t-r)}function Vr(e,t,n=0){return t<=0?n:e.velocity?e.velocity(t):Br(t=>e.next(t).value,t,e.next(t).value)}var Hr=e=>e!==null;function Ur(e,{repeat:t,repeatType:n=`loop`},r,i=1){let a=e.filter(Hr),o=i<0||t&&n!==`loop`&&t%2==1?0:a.length-1;return!o||r===void 0?a[o]:r}var Wr={decay:jr,inertia:jr,tween:Rr,keyframes:Rr,spring:Ar};function Gr(e){typeof e.type==`string`&&(e.type=Wr[e.type])}function Kr(e,t){return{kind:e,animation:t,timestamp:A.now(),frameTimestamp:k.timestamp,frameIsProcessing:k.isProcessing}}function qr(e,t,n){let r=globalThis.__MOTION_INSPECT__;if(r)try{r({...Kr(`animation-start`,e),options:n?{...t,...n}:t})}catch{}}function Jr(e,t){let n=globalThis.__MOTION_INSPECT__;if(n)try{n({...Kr(`layout-animation-start`,e),node:t})}catch{}}var Yr=class{constructor(){this.isResolved=!1}get finished(){return this._finished||=this.isResolved?Promise.resolve():new Promise(e=>{this._resolve=e}),this._finished}updateFinished(){this._finished=this._resolve=void 0,this.isResolved=!1}notifyFinished(){this.isResolved=!0,this._resolve?.()}then(e,t){return this.finished.then(e,t)}},Xr=e=>e/100,Zr=class extends Yr{constructor(e){super(),this.state=`idle`,this.startTime=null,this.isStopped=!1,this.currentTime=0,this.holdTime=null,this.playbackSpeed=1,this.delayState={done:!1,value:void 0},this.stop=()=>{let{motionValue:e}=this.options;e&&e.updatedAt!==A.now()&&this.tick(A.now()),this.isStopped=!0,this.state!==`idle`&&(this.teardown(),this.options.onStop?.())},this.options=e,this.initAnimation(),this.play(),e.autoplay===!1&&this.pause(),qr(this,this.options)}initAnimation(){let{options:e}=this;Gr(e);let{type:t=Rr,repeat:n=0,repeatDelay:r=0,repeatType:i,velocity:a=0}=e,{keyframes:o}=e,s=t||Rr;s!==Rr&&typeof o[0]!=`number`&&(this.mixKeyframes=xt(Xr,cr(o[0],o[1])),o=[0,100]);let c=s(o===e.keyframes?e:{...e,keyframes:o});i===`mirror`&&(this.mirroredGenerator=s({...e,keyframes:[...o].reverse(),velocity:-a})),c.calculatedDuration===null&&(c.calculatedDuration=vr(c));let{calculatedDuration:l}=c;this.calculatedDuration=l,this.resolvedDuration=l+r,this.totalDuration=this.resolvedDuration*(n+1)-r,this.generator=c}updateTime(e){let t=Math.round(e-this.startTime)*this.playbackSpeed;this.currentTime=this.holdTime===null?t:this.holdTime}tick(e,t=!1){let{generator:n,totalDuration:r,mixKeyframes:i,mirroredGenerator:a,resolvedDuration:o,calculatedDuration:s}=this;if(this.startTime===null)return n.next(0);let{delay:c=0,keyframes:l,repeat:u,repeatType:d,repeatDelay:f,type:p,onUpdate:m,finalKeyframe:h}=this.options;this.speed>0?this.startTime=Math.min(this.startTime,e):this.speed<0&&(this.startTime=Math.min(e-r/this.speed,this.startTime)),t?this.currentTime=e:this.updateTime(e);let g=this.currentTime-c*(this.playbackSpeed>=0?1:-1),_=this.playbackSpeed>=0?g<0:g>r;this.currentTime=Math.max(g,0),this.state===`finished`&&this.holdTime===null&&(this.currentTime=r);let v=this.currentTime,y=n;if(u){let e=Math.min(this.currentTime,r)/o,t=Math.floor(e),n=e%1;!n&&e>=1&&(n=1),n===1&&t--,t=Math.min(t,u+1),t%2&&(d===`reverse`?(n=1-n,f&&(n-=f/o)):d===`mirror`&&(y=a)),v=mt(0,1,n)*o}let b;_?(this.delayState.value=l[0],b=this.delayState):b=y.next(v),i&&!_&&(b.value=i(b.value));let{done:x}=b;!_&&s!==null&&(x=this.playbackSpeed>=0?this.currentTime>=r:this.currentTime<=0);let S=this.holdTime===null&&(this.state===`finished`||this.state===`running`&&x);return S&&p!==jr&&(b.value=Ur(l,this.options,h,this.speed)),m&&m(b.value),S&&this.finish(),b}then(e,t){return this.finished.then(e,t)}get duration(){return wt(this.calculatedDuration)}get iterationDuration(){let{delay:e=0}=this.options||{};return this.duration+wt(e)}get time(){return wt(this.currentTime)}set time(e){e=O(e),this.currentTime=e,this.startTime===null||this.holdTime!==null||this.playbackSpeed===0?this.holdTime=e:this.driver&&(this.startTime=this.driver.now()-e/this.playbackSpeed),this.driver?this.driver.start(!1):(this.startTime=0,this.state=`paused`,this.holdTime=e,this.tick(e))}getGeneratorVelocity(){return Vr(this.generator,this.currentTime,this.options.velocity)}get speed(){return this.playbackSpeed}set speed(e){let t=this.playbackSpeed!==e;t&&this.driver&&this.updateTime(A.now()),this.playbackSpeed=e,t&&this.driver&&(this.time=wt(this.currentTime))}play(){if(this.isStopped)return;let{driver:e=hr,startTime:t}=this.options;this.driver||=e(e=>this.tick(e)),this.options.onPlay?.();let n=this.driver.now();this.state===`finished`?(this.updateFinished(),this.startTime=n):this.holdTime===null?this.startTime||=t??n:this.startTime=n-this.holdTime,this.state===`finished`&&this.speed<0&&(this.startTime+=this.calculatedDuration),this.holdTime=null,this.state=`running`,this.driver.start()}pause(){this.state=`paused`,this.updateTime(A.now()),this.holdTime=this.currentTime}complete(){this.state!==`running`&&this.play(),this.state=`finished`,this.holdTime=null}finish(){this.notifyFinished(),this.teardown(),this.state=`finished`,this.options.onComplete?.()}cancel(){this.holdTime=null,this.startTime=0,this.tick(0),this.teardown(),this.options.onCancel?.()}teardown(){this.state=`idle`,this.stopDriver(),this.startTime=this.holdTime=null}stopDriver(){this.driver&&=(this.driver.stop(),void 0)}sample(e){return this.startTime=0,this.tick(e,!0)}attachTimeline(e){return this.options.allowFlatten&&(this.options.type=`keyframes`,this.options.ease=`linear`,this.initAnimation()),this.driver?.stop(),e.observe(this)}},Qr=new Set([`brightness`,`contrast`,`saturate`,`opacity`]);function $r(e){let[t,n]=e.slice(0,-1).split(`(`);if(t===`drop-shadow`)return e;let[r]=n.match(ln)||[];if(!r)return e;let i=n.replace(r,``),a=+!!Qr.has(t);return r!==n&&(a*=100),t+`(`+a+i+`)`}var ei=/\b([a-z-]*)\(.*?\)/gu,ti={...N,getAnimatableNone:e=>{let t=e.match(ei);return t?t.map($r).join(` `):e}},ni={...N,getAnimatableNone:e=>{let t=N.parse(e);return N.createTransformer(e)(t.map(e=>typeof e==`number`?0:typeof e==`object`?{...e,alpha:1}:e))}},ri={...on,transform:Math.round},ii={rotate:bn,pathRotation:bn,rotateX:bn,rotateY:bn,rotateZ:bn,scale:cn,scaleX:cn,scaleY:cn,scaleZ:cn,skew:bn,skewX:bn,skewY:bn,distance:j,translateX:j,translateY:j,translateZ:j,x:j,y:j,z:j,perspective:j,transformPerspective:j,opacity:sn,originX:wn,originY:wn,originZ:j},ai={borderWidth:j,borderTopWidth:j,borderRightWidth:j,borderBottomWidth:j,borderLeftWidth:j,borderRadius:j,borderTopLeftRadius:j,borderTopRightRadius:j,borderBottomRightRadius:j,borderBottomLeftRadius:j,width:j,maxWidth:j,height:j,maxHeight:j,top:j,right:j,bottom:j,left:j,inset:j,insetBlock:j,insetBlockStart:j,insetBlockEnd:j,insetInline:j,insetInlineStart:j,insetInlineEnd:j,padding:j,paddingTop:j,paddingRight:j,paddingBottom:j,paddingLeft:j,paddingBlock:j,paddingBlockStart:j,paddingBlockEnd:j,paddingInline:j,paddingInlineStart:j,paddingInlineEnd:j,margin:j,marginTop:j,marginRight:j,marginBottom:j,marginLeft:j,marginBlock:j,marginBlockStart:j,marginBlockEnd:j,marginInline:j,marginInlineStart:j,marginInlineEnd:j,fontSize:j,backgroundPositionX:j,backgroundPositionY:j,...ii,zIndex:ri,fillOpacity:sn,strokeOpacity:sn,numOctaves:ri},oi={...ai,color:M,backgroundColor:M,outlineColor:M,fill:M,stroke:M,borderColor:M,borderTopColor:M,borderRightColor:M,borderBottomColor:M,borderLeftColor:M,filter:ti,WebkitFilter:ti,mask:ni,WebkitMask:ni},si=e=>oi[e],ci=new Set([ti,ni]);function li(e,t){let n=si(e);return ci.has(n)||(n=N),n.getAnimatableNone?n.getAnimatableNone(t):void 0}function ui(e){for(let t=1;t<e.length;t++)e[t]??(e[t]=e[t-1])}var di=e=>e*180/Math.PI,fi=e=>mi(di(Math.atan2(e[1],e[0]))),pi={x:4,y:5,translateX:4,translateY:5,scaleX:0,scaleY:3,scale:e=>(Math.abs(e[0])+Math.abs(e[3]))/2,rotate:fi,rotateZ:fi,skewX:e=>di(Math.atan(e[1])),skewY:e=>di(Math.atan(e[2])),skew:e=>(Math.abs(e[1])+Math.abs(e[2]))/2},mi=e=>(e%=360,e<0&&(e+=360),e),hi=fi,gi=e=>Math.sqrt(e[0]*e[0]+e[1]*e[1]),_i=e=>Math.sqrt(e[4]*e[4]+e[5]*e[5]),vi={x:12,y:13,z:14,translateX:12,translateY:13,translateZ:14,scaleX:gi,scaleY:_i,scale:e=>(gi(e)+_i(e))/2,rotateX:e=>mi(di(Math.atan2(e[6],e[5]))),rotateY:e=>mi(di(Math.atan2(-e[2],e[0]))),rotateZ:hi,rotate:hi,skewX:e=>di(Math.atan(e[4])),skewY:e=>di(Math.atan(e[1])),skew:e=>(Math.abs(e[1])+Math.abs(e[4]))/2};function yi(e){return+!!e.includes(`scale`)}function bi(e,t){if(!e||e===`none`)return yi(t);let n=e.match(/^matrix3d\(([-\d.e\s,]+)\)$/u),r,i;if(n)r=vi,i=n;else{let t=e.match(/^matrix\(([-\d.e\s,]+)\)$/u);r=pi,i=t}if(!i)return yi(t);let a=r[t],o=i[1].split(`,`).map(Si);return typeof a==`function`?a(o):o[a]}var xi=(e,t)=>{let{transform:n=`none`}=getComputedStyle(e);return bi(n,t)};function Si(e){return parseFloat(e.trim())}var Ci=[`transformPerspective`,`x`,`y`,`z`,`translateX`,`translateY`,`translateZ`,`scale`,`scaleX`,`scaleY`,`rotate`,`rotateX`,`rotateY`,`rotateZ`,`skew`,`skewX`,`skewY`],L=new Set([...Ci,`pathRotation`]),wi=e=>e===on||e===j,Ti=new Set([`x`,`y`,`z`]),Ei=Ci.filter(e=>!Ti.has(e));function Di(e){let t=[];return Ei.forEach(n=>{let r=e.getValue(n);if(r!==void 0){let e=r.get(),i=+!!n.startsWith(`scale`);if(e===i)return;t.push([n,e]),r.set(i)}}),t}var Oi=new Set([`bottom`,`right`]);function ki(e,t,n,r,i,a){let o=parseFloat(e);if(!isNaN(o))return o;let{min:s,max:c}=t()[n],l=c-s;return a===`border-box`?l:l-parseFloat(r)-parseFloat(i)}var Ai={width:({width:e,paddingLeft:t=`0`,paddingRight:n=`0`,boxSizing:r},i)=>ki(e,i,`x`,t,n,r),height:({height:e,paddingTop:t=`0`,paddingBottom:n=`0`,boxSizing:r},i)=>ki(e,i,`y`,t,n,r),top:({top:e})=>parseFloat(e),left:({left:e})=>parseFloat(e),bottom:({top:e},t)=>{let{y:n}=t();return parseFloat(e)+(n.max-n.min)},right:({left:e},t)=>{let{x:n}=t();return parseFloat(e)+(n.max-n.min)},x:({transform:e})=>bi(e,`x`),y:({transform:e})=>bi(e,`y`)};Ai.translateX=Ai.x,Ai.translateY=Ai.y;var ji=new Set,Mi=!1,Ni=!1,Pi=!1;function Fi(){if(Ni){let e=[],t=new Set,n=new Set;ji.forEach(r=>{r.needsMeasurement&&(e.push(r),t.add(r.element),Oi.has(r.name)&&n.add(r.element))});let r=new Map;n.forEach(e=>{let t=Di(e);t.length&&(r.set(e,t),e.render())}),e.forEach(e=>e.measureInitialState()),t.forEach(e=>{e.render();let t=r.get(e);t&&t.forEach(([t,n])=>{e.getValue(t)?.set(n)})}),e.forEach(e=>e.measureEndState()),e.forEach(e=>{e.suspendedScrollY!==void 0&&window.scrollTo(0,e.suspendedScrollY)})}Ni=!1,Mi=!1,ji.forEach(e=>e.complete(Pi)),ji.clear()}function Ii(){ji.forEach(e=>{e.readKeyframes(),e.needsMeasurement&&(Ni=!0)})}function Li(){Pi=!0,Ii(),Fi(),Pi=!1}function Ri(e,t,n){if(typeof e==`string`){if(gt(e)||vt(e))return parseFloat(e);if(!N.test(e)&&N.test(n))return li(t,n)}return e??void 0}var zi=class{constructor(e,t,n,r,i,a=!1){this.state=`pending`,this.isAsync=!1,this.needsMeasurement=!1,this.unresolvedKeyframes=[...e],this.onComplete=t,this.name=n,this.motionValue=r,this.element=i,this.isAsync=a}scheduleResolve(){this.state=`scheduled`,this.isAsync?(ji.add(this),Mi||(Mi=!0,F.read(Ii),F.resolveKeyframes(Fi))):(this.readKeyframes(),this.complete())}readKeyframes(){let{unresolvedKeyframes:e,name:t,element:n,motionValue:r}=this;if(e[0]===null){let i=r?.get(),a=e[e.length-1];if(i!==void 0)e[0]=i;else if(n&&t){let r=Ri(n.readValue(t,a),t,a);r!==void 0&&(e[0]=r)}e[0]===void 0&&(e[0]=a),r&&i===void 0&&r.set(e[0])}ui(e)}setFinalKeyframe(){}measureInitialState(){}renderEndStyles(){}measureEndState(){}complete(e=!1){this.state=`complete`,this.onComplete(this.unresolvedKeyframes,this.finalKeyframe,e),ji.delete(this)}cancel(){this.state===`scheduled`&&(ji.delete(this),this.state=`pending`)}resume(){this.state===`pending`&&this.scheduleResolve()}},Bi=e=>e.startsWith(`--`);function Vi(e,t,n){Bi(t)?e.style.setProperty(t,n):e.style[t]=n}var Hi={};function Ui(e,t){let n=yt(e);return()=>Hi[t]??n()}var Wi=Ui(()=>window.ScrollTimeline!==void 0,`scrollTimeline`),Gi=Ui(()=>{try{document.createElement(`div`).animate({opacity:0},{easing:`linear(0, 1)`})}catch{return!1}return!0},`linearEasing`),Ki=([e,t,n,r])=>`cubic-bezier(${e}, ${t}, ${n}, ${r})`,qi={linear:`linear`,ease:`ease`,easeIn:`ease-in`,easeOut:`ease-out`,easeInOut:`ease-in-out`,circIn:Ki([0,.65,.55,1]),circOut:Ki([.55,0,1,.45]),backIn:Ki([.31,.01,.66,-.59]),backOut:Ki([.33,1.53,.69,.99])};function Ji(e,t){if(e)return typeof e==`function`?Gi()?gr(e,t):`ease-out`:Kt(e)?Ki(e):Array.isArray(e)?e.map(e=>Ji(e,t)||qi.easeOut):qi[e]}function Yi(e,t,n,{delay:r=0,duration:i=300,repeat:a=0,repeatType:o=`loop`,ease:s=`easeOut`,times:c}={},l=void 0){let u={[t]:n};c&&(u.offset=c);let d=Ji(s,i);Array.isArray(d)&&(u.easing=d);let f={delay:r,duration:i,easing:Array.isArray(d)?`linear`:d,fill:`both`,iterations:a+1,direction:o===`reverse`?`alternate`:`normal`};return l&&(f.pseudoElement=l),e.animate(u,f)}function Xi(e){return typeof e==`function`&&`applyToOptions`in e}function Zi({type:e,...t}){return Xi(e)&&Gi()?e.applyToOptions(t):(t.duration??=300,t.ease??=`easeOut`,t)}var Qi=class extends Yr{constructor(e){if(super(),this.finishedTime=null,this.isStopped=!1,this.manualStartTime=null,!e)return;let{element:t,name:n,keyframes:r,pseudoElement:i,allowFlatten:a=!1,finalKeyframe:o,onComplete:s}=e;this.isPseudoElement=!!i,this.allowFlatten=a,this.options=e,e.type;let c=Zi(e);this.animation=Yi(t,n,r,c,i),c.autoplay===!1&&this.animation.pause(),this.animation.onfinish=()=>{if(this.finishedTime=this.time,!i){let e=Ur(r,this.options,o,this.speed);this.updateMotionValue&&this.updateMotionValue(e),Vi(t,n,e),this.animation.cancel()}s?.(),this.notifyFinished()},qr(this,e,c)}play(){this.isStopped||(this.manualStartTime=null,this.animation.play(),this.state===`finished`&&this.updateFinished())}pause(){this.animation.pause()}complete(){this.animation.finish?.()}cancel(){try{this.animation.cancel()}catch{}}stop(){if(this.isStopped)return;this.isStopped=!0;let{state:e}=this;e!==`idle`&&e!==`finished`&&(this.updateMotionValue?this.updateMotionValue():this.commitStyles(),this.isPseudoElement||this.cancel())}commitStyles(){let e=this.options?.element;!this.isPseudoElement&&e?.isConnected&&this.animation.commitStyles?.()}get duration(){let e=this.animation.effect?.getComputedTiming?.().duration||0;return wt(Number(e))}get iterationDuration(){let{delay:e=0}=this.options||{};return this.duration+wt(e)}get time(){return wt(Number(this.animation.currentTime)||0)}set time(e){let t=this.finishedTime!==null;this.manualStartTime=null,this.finishedTime=null,this.animation.currentTime=O(e),t&&this.animation.pause()}get speed(){return this.animation.playbackRate}set speed(e){e<0&&(this.finishedTime=null),this.animation.playbackRate=e}get state(){return this.finishedTime===null?this.animation.playState:`finished`}get startTime(){return this.manualStartTime??Number(this.animation.startTime)}set startTime(e){this.manualStartTime=this.animation.startTime=e}attachTimeline({timeline:e,onAttach:t,observe:n}){return this.allowFlatten&&this.animation.effect?.updateTiming({easing:`linear`}),this.animation.onfinish=null,e&&Wi()?(this.animation.timeline=e,t?.(this.animation),bt):n(this)}},$i={anticipate:Lt,backInOut:It,circInOut:Bt};function ea(e){return e in $i}function ta(e){typeof e.ease==`string`&&ea(e.ease)&&(e.ease=$i[e.ease])}var na=10,ra=class extends Qi{constructor(e){ta(e),Gr(e),super(e),e.startTime!==void 0&&e.autoplay!==!1&&(this.startTime=e.startTime),this.options=e}updateMotionValue(e){let{motionValue:t,onUpdate:n,onComplete:r,element:i,...a}=this.options;if(!t)return;if(e!==void 0){t.set(e);return}let o=new Zr({...a,autoplay:!1}),s=Math.max(na,A.now()-this.startTime),c=mt(0,na,s-na),l=o.sample(s).value,{name:u}=this.options;i&&u&&Vi(i,u,l),t.setWithVelocity(o.sample(Math.max(0,s-c)).value,l,c),o.stop()}},ia=(e,t)=>t!==`zIndex`&&!!(typeof e==`number`||Array.isArray(e)||typeof e==`string`&&(N.test(e)||e===`0`)&&!e.startsWith(`url(`));function aa(e){let t=e[0];if(e.length===1)return!0;for(let n=0;n<e.length;n++)if(e[n]!==t)return!0}function oa(e,t,n,r){let i=e[0];if(i===null)return!1;if(t===`display`||t===`visibility`)return!0;let a=e[e.length-1],o=ia(i,t),s=ia(a,t);return!o||!s?(o!==s&&`${t}${i}${a}${o?a:i}`,!1):aa(e)||(n===`spring`||Xi(n))&&r}function sa(e){e.duration=0,e.type=`keyframes`}var ca=new Set([`opacity`,`clipPath`,`filter`,`transform`,`backgroundColor`]),la=/^(?:oklch|oklab|lab|lch|color|color-mix|light-dark)\(/;function ua(e){for(let t=0;t<e.length;t++)if(typeof e[t]==`string`&&la.test(e[t]))return!0;return!1}var da=new Set([`color`,`backgroundColor`,`outlineColor`,`fill`,`stroke`,`borderColor`,`borderTopColor`,`borderRightColor`,`borderBottomColor`,`borderLeftColor`]),fa=yt(()=>Object.hasOwnProperty.call(Element.prototype,`animate`));function pa(e){let{motionValue:t,name:n,repeatDelay:r,repeatType:i,damping:a,type:o,keyframes:s}=e;if(!n||!(ca.has(n)||da.has(n)))return!1;let c=t?.owner?.current;if(!(c instanceof HTMLElement)&&!(c instanceof SVGElement))return!1;let{onUpdate:l,transformTemplate:u}=t.owner.getProps();return fa()&&(ca.has(n)||da.has(n)&&ua(s))&&(n!==`transform`||!u)&&!l&&!r&&i!==`mirror`&&a!==0&&o!==`inertia`}var ma=40,ha=class extends Yr{constructor(e){super(),this.stop=()=>{this._animation&&(this._animation.stop(),this.stopTimeline?.()),this.keyframeResolver?.cancel()},this.createdAt=A.now();let{keyframes:t,name:n,motionValue:r,element:i}=e,a=e;a.autoplay??=!0,a.delay??=0,a.type??=`keyframes`,a.repeat??=0,a.repeatDelay??=0,a.repeatType??=`loop`;let o=i?.KeyframeResolver||zi;this.keyframeResolver=new o(t,(e,t,n)=>this.onKeyframesResolved(e,t,a,!n),n,r,i),this.keyframeResolver?.scheduleResolve()}onKeyframesResolved(e,t,n,r){this.keyframeResolver=void 0;let{name:i,type:a,velocity:o,delay:s,isHandoff:c,onUpdate:l}=n;this.resolvedAt=A.now();let u=!0;oa(e,i,a,o)||(u=!1,(ht.instantAnimations||!s)&&l?.(Ur(e,n,t)),e[0]=e[e.length-1],sa(n),n.repeat=0);let d=r?this.resolvedAt&&this.resolvedAt-this.createdAt>ma?this.resolvedAt:this.createdAt:void 0,{onComplete:f}=n;n.startTime??=d,n.finalKeyframe=t,n.keyframes=e,n.onComplete=()=>{f?.(),this.notifyFinished()};let p=u&&!c&&pa(n),m;if(p){n.element=n.motionValue?.owner?.current;try{m=new ra(n)}catch{m=new Zr(n)}}else m=new Zr(n);this.pendingTimeline&&=(this.stopTimeline=m.attachTimeline(this.pendingTimeline),void 0),this._animation=m}get finished(){return this._animation?this._animation.finished:super.finished}then(e,t){return this.finished.finally(e).then(()=>{})}get animation(){return this._animation||(this.keyframeResolver?.resume(),Li()),this._animation}get duration(){return this.animation.duration}get iterationDuration(){return this.animation.iterationDuration}get time(){return this.animation.time}set time(e){this.animation.time=e}get speed(){return this.animation.speed}get state(){return this.animation.state}set speed(e){this.animation.speed=e}get startTime(){return this.animation.startTime}attachTimeline(e){return this._animation?this.stopTimeline=this.animation.attachTimeline(e):this.pendingTimeline=e,()=>this.stop()}play(){this.animation.play()}pause(){this.animation.pause()}complete(){this.animation.complete()}cancel(){this._animation&&this.animation.cancel(),this.keyframeResolver?.cancel()}},ga=class{constructor(e){this.stop=()=>this.runAll(`stop`),this.animations=e.filter(Boolean)}get finished(){return Promise.all(this.animations.map(e=>e.finished))}getAll(e){return this.animations[0][e]}setAll(e,t){for(let n=0;n<this.animations.length;n++)this.animations[n][e]=t}attachTimeline(e){let t=this.animations.map(t=>t.attachTimeline(e));return()=>{t.forEach((e,t)=>{e&&e(),this.animations[t].stop()})}}get time(){return this.getAll(`time`)}set time(e){this.setAll(`time`,e)}get speed(){return this.getAll(`speed`)}set speed(e){this.setAll(`speed`,e)}get state(){return this.getAll(`state`)}get startTime(){return this.getAll(`startTime`)}get duration(){return _a(this.animations,`duration`)}get iterationDuration(){return _a(this.animations,`iterationDuration`)}runAll(e){this.animations.forEach(t=>t[e]())}play(){this.runAll(`play`)}pause(){this.runAll(`pause`)}cancel(){this.runAll(`cancel`)}complete(){this.runAll(`complete`)}};function _a(e,t){let n=0;for(let r=0;r<e.length;r++){let i=e[r][t];i!==null&&i>n&&(n=i)}return n}var va=class extends ga{then(e,t){return this.finished.finally(e).then(()=>{})}};function ya(e,t,n,r=0,i=1){let a=Array.from(e).sort((e,t)=>e.sortNodePosition(t)).indexOf(t),o=e.size,s=(o-1)*r;return typeof n==`function`?n(a,o):i===1?a*r:s-a*r}var ba=30,xa=e=>!isNaN(parseFloat(e)),Sa={current:void 0},Ca=class{constructor(e,t={}){this.canTrackVelocity=null,this.events={},this.updateAndNotify=e=>{let t=A.now();if(this.updatedAt!==t&&this.setPrevFrameValue(),this.prev=this.current,this.setCurrent(e),this.current!==this.prev&&(this.notifyChange(),this.dependents))for(let e of this.dependents)e.dirty()},this.hasAnimated=!1,this.setCurrent(e),this.owner=t.owner}setCurrent(e){this.current=e,this.updatedAt=A.now(),this.canTrackVelocity===null&&e!==void 0&&(this.canTrackVelocity=xa(this.current))}setPrevFrameValue(e=this.current){this.prevFrameValue=e,this.prevUpdatedAt=this.updatedAt}onChange(e){return this.on(`change`,e)}on(e,t){var n;return e===`change`?this.onChangeSubscribe(t):((n=this.events)[e]||(n[e]=new Ct)).add(t)}onChangeSubscribe(e){let{events:t}=this;return!t.change&&!this.changeSubscriber?this.changeSubscriber=e:(t.change||(t.change=new Ct,t.change.add(this.changeSubscriber),this.changeSubscriber=void 0),t.change.add(e)),()=>{this.changeSubscriber===e?this.changeSubscriber=void 0:t.change?.remove(e),this.stopIfUnobserved()}}stopIfUnobserved(){F.read(()=>{!this.changeSubscriber&&!this.events.change?.getSize()&&this.stop()})}clearListeners(){this.changeSubscriber=void 0;for(let e in this.events)this.events[e].clear()}attach(e,t){this.passiveEffect=e,this.stopPassiveEffect=t}set(e){this.passiveEffect?this.passiveEffect(e,this.updateAndNotify):this.updateAndNotify(e)}setWithVelocity(e,t,n){this.set(t),this.prev=void 0,this.prevFrameValue=e,this.prevUpdatedAt=this.updatedAt-n}jump(e,t=!0){this.updateAndNotify(e),this.prev=e,this.prevUpdatedAt=this.prevFrameValue=void 0,t&&this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}dirty(){this.notifyChange()}notifyChange(){let{current:e,changeSubscriber:t}=this;t?t(e):this.events.change?.notify(e)}addDependent(e){this.dependents||=new Set,this.dependents.add(e)}removeDependent(e){this.dependents&&this.dependents.delete(e)}get(){return Sa.current&&Sa.current.push(this),this.current}getPrevious(){return this.prev}getVelocity(){let e=A.now();if(!this.canTrackVelocity||this.prevFrameValue===void 0||e-this.updatedAt>ba)return 0;let t=Math.min(this.updatedAt-this.prevUpdatedAt,ba);return Tt(parseFloat(this.current)-parseFloat(this.prevFrameValue),t)}start(e){return this.stop(),new Promise(t=>{this.hasAnimated=!0;let n=!1,r;r=e(()=>{n=!0,this.events.animationComplete?.notify(),this.animation===r&&this.clearAnimation(),t()}),n||(this.animation=r),this.events.animationStart?.notify()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){this.animation=void 0}destroy(){this.dependents?.clear(),this.events.destroy?.notify(),this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}};function wa(e,t){return new Ca(e,t)}function Ta(e,t){if(e?.inherit&&t){let{inherit:n,...r}=e;return{...t,...r}}return e}function Ea(e,t){let n=e?.[t]??e?.default??e;return n===e?n:Ta(n,e)}var Da={type:`spring`,stiffness:500,damping:25,restSpeed:10},Oa=e=>({type:`spring`,stiffness:550,damping:e===0?2*Math.sqrt(550):30,restSpeed:10}),ka={type:`keyframes`,duration:.8},Aa={type:`keyframes`,ease:[.25,.1,.35,1],duration:.3},ja=(e,{keyframes:t})=>t.length>2?ka:L.has(e)?e.startsWith(`scale`)?Oa(t[1]):Da:Aa,Ma=new Set([`when`,`delay`,`delayChildren`,`staggerChildren`,`staggerDirection`,`repeat`,`repeatType`,`repeatDelay`,`from`,`elapsed`]);function Na(e){for(let t in e)if(!Ma.has(t))return!0;return!1}var Pa=(e,t,n,r={},i,a)=>o=>{let s=Ea(r,e)||{},c=s.delay||r.delay||0,{elapsed:l=0}=r;l-=O(c);let u={keyframes:Array.isArray(n)?n:[null,n],ease:`easeOut`,velocity:t.getVelocity(),...s,delay:-l,onUpdate:e=>{t.set(e),s.onUpdate&&s.onUpdate(e)},onComplete:()=>{o(),s.onComplete&&s.onComplete()},name:e,motionValue:t,element:a?void 0:i};Na(s)||Object.assign(u,ja(e,u)),u.duration&&=O(u.duration),u.repeatDelay&&=O(u.repeatDelay),u.from!==void 0&&(u.keyframes[0]=u.from);let d=!1;if((u.type===!1||u.duration===0&&!u.repeatDelay)&&(sa(u),u.delay===0&&(d=!0)),(ht.instantAnimations||ht.skipAnimations||i?.shouldSkipAnimations||s.skipAnimations)&&(d=!0,sa(u),u.delay=0),u.allowFlatten=!s.type&&!s.ease,d&&!a&&t.get()!==void 0){let e=Ur(u.keyframes,s);if(e!==void 0){F.update(()=>{u.onUpdate(e),u.onComplete()});return}}return s.isSync?new Zr(u):new ha(u)},Fa=/^var\(--(?:([\w-]+)|([\w-]+), ?([a-zA-Z\d ()%#.,-]+))\)/u;function Ia(e){let t=Fa.exec(e);if(!t)return[,];let[,n,r,i]=t;return[`--${n??r}`,i]}function La(e,t,n=1){`${e}`;let[r,i]=Ia(e);if(!r)return;let a=window.getComputedStyle(t).getPropertyValue(r);if(a){let e=a.trim();return gt(e)?parseFloat(e):e}return nn(i)?La(i,t,n+1):i}function Ra(e){let t=[{},{}];return e?.values.forEach((e,n)=>{t[0][n]=e.get(),t[1][n]=e.getVelocity()}),t}function za(e,t,n,r){let i=t=>typeof t==`function`?t(n===void 0?e.custom:n,...Ra(r)):t;return t=i(t),typeof t==`string`&&(t=e.variants&&e.variants[t]),i(t)}function Ba(e,t,n){return za(e.getProps(),t,n,e)}var Va=(e,t)=>t===`exit`?e.presenceContext?.custom:void 0,Ha=new Set([`width`,`height`,`top`,`left`,`right`,`bottom`,...Ci]),Ua=e=>Array.isArray(e);function Wa(e,t,n){e.hasValue(t)?e.getValue(t).set(n):e.addValue(t,wa(n))}function Ga(e){return Ua(e)?e[e.length-1]||0:e}function Ka(e,t){let{transitionEnd:n={},transition:r={},...i}=Ba(e,t)||{};i={...i,...n};for(let t in i)Wa(e,t,Ga(i[t]))}var R=e=>!!(e&&e.getVelocity);function qa(e){return!!(R(e)&&e.add)}function Ja(e,t){let n=e.getValue(`willChange`);if(qa(n))return n.add(t);if(!n&&ht.WillChange){let n=new ht.WillChange(`auto`);e.addValue(`willChange`,n),n.add(t)}}function Ya(e){return e.replace(/([A-Z])/g,e=>`-${e.toLowerCase()}`)}var Xa=`data-`+Ya(`framerAppearId`);function Za(e){return e.props[Xa]}var Qa=typeof window<`u`;function $a({protectedKeys:e,needsAnimating:t},n){let r=n in e&&!t[n];return t[n]=!1,r}function eo(e,t,{delay:n=0,transitionOverride:r,type:i}={}){let{transition:a,transitionEnd:o,...s}=t,c=e.getDefaultTransition();a=a?Ta(a,c):c;let l=a?.reduceMotion,u=a?.skipAnimations;r&&(a=r);let d=[],f=i&&e.animationState?.getState()[i],p=a?.path;p&&p.animateVisualElement(e,s,a,n,d);for(let t in s){let r=e.getValue(t,e.latestValues[t]??null),i=s[t];if(i===void 0||f&&$a(f,t))continue;let o={delay:n,...Ea(a||{},t)};u&&(o.skipAnimations=!0);let c=r.get();if(c!==void 0&&!r.isAnimating()&&!Array.isArray(i)&&i===c&&!o.velocity){F.update(()=>r.set(i));continue}let p=!1;if(Qa&&window.MotionHandoffAnimation){let n=Za(e);if(n){let e=window.MotionHandoffAnimation(n,t,F);e!==null&&(o.startTime=e,p=!0)}}Ja(e,t);let m=l??e.shouldReduceMotion;r.start(Pa(t,r,i,m&&Ha.has(t)?{type:!1}:o,e,p));let h=r.animation;h&&d.push(h)}if(o){let t=()=>F.update(()=>{o&&Ka(e,o)});d.length?Promise.all(d).then(t):t()}return d}function to(e,t,n={}){let r=Ba(e,t,Va(e,n.type)),i=n.transitionOverride||(r?.transition??(e.getDefaultTransition()||{})),a=()=>Promise.all(r?eo(e,r,n):[]),o=(r=0)=>{let{variantChildren:a}=e,{delayChildren:o=0,staggerChildren:s,staggerDirection:c}=i,l=[];return a?.forEach(e=>{e.notify(`AnimationStart`,t),l.push(to(e,t,{...n,delay:r+(typeof o==`function`?0:o)+ya(a,e,o,s,c)}).then(()=>e.notify(`AnimationComplete`,t)))}),Promise.all(l)},{when:s}=i;return s?s===`beforeChildren`?a().then(()=>o()):o().then(a):Promise.all([a(),o(n.delay)])}function no(e,t,n={}){return e.notify(`AnimationStart`,t),(Array.isArray(t)?Promise.all(t.map(t=>to(e,t,n))):typeof t==`string`?to(e,t,n):Promise.all(eo(e,Ba(e,t,n.custom),n))).then(()=>{e.notify(`AnimationComplete`,t)})}var ro={test:e=>e===`auto`,parse:e=>e},io=e=>t=>t.test(e),ao=[on,j,xn,bn,Cn,Sn,ro],oo=e=>ao.find(io(e));function so(e){return typeof e==`number`?e===0:e===null||e===`none`||e===`0`||vt(e)}var co=new Set([`auto`,`none`,`0`]);function lo(e,t,n){let r=0,i;for(;r<e.length&&!i;){let t=e[r];typeof t==`string`&&!co.has(t)&&In(t)&&(i=e[r]),r++}if(i&&n)for(let r of t)e[r]!==i&&(e[r]=li(n,i))}var uo=class extends zi{constructor(e,t,n,r,i){super(e,t,n,r,i,!0)}readKeyframes(){let{unresolvedKeyframes:e,element:t,name:n}=this;if(!t||!t.current)return;super.readKeyframes();for(let n=0;n<e.length;n++){let r=e[n];if(typeof r==`string`&&(r=r.trim(),nn(r))){let i=La(r,t.current);i!==void 0&&(e[n]=i),n===e.length-1&&(this.finalKeyframe=r)}}if(this.resolveNoneKeyframes(),!Ha.has(n)||e.length!==2)return;let[r,i]=e;if(typeof r==`number`&&typeof i==`number`)return;let a=oo(r),o=oo(i);if(an(r)!==an(i)&&Ai[n]){this.needsMeasurement=!0;return}if(a!==o){if(wi(a)&&wi(o))for(let t=0;t<e.length;t++){let n=e[t];typeof n==`string`&&(e[t]=parseFloat(n))}else Ai[n]&&(this.needsMeasurement=!0)}}resolveNoneKeyframes(){let{unresolvedKeyframes:e,name:t}=this,n=[];for(let t=0;t<e.length;t++)(e[t]===null||so(e[t]))&&n.push(t);n.length&&lo(e,n,t)}measure(){let{element:e,name:t}=this;return Ai[t](window.getComputedStyle(e.current),()=>e.measureViewportBox())}measureInitialState(){let{element:e,unresolvedKeyframes:t,name:n}=this;if(!e||!e.current)return;n===`height`&&(this.suspendedScrollY=window.pageYOffset),this.measuredOrigin=this.measure(),t[0]=this.measuredOrigin;let r=t[t.length-1];r!==void 0&&this.motionValue?.jump(r,!1)}measureEndState(){let{element:e,unresolvedKeyframes:t}=this;if(!e||!e.current)return;this.motionValue?.jump(this.measuredOrigin,!1);let n=t.length-1,r=t[n];t[n]=this.measure(),r!==null&&this.finalKeyframe===void 0&&(this.finalKeyframe=r),this.removedTransforms?.length&&this.removedTransforms.forEach(([t,n])=>{e.getValue(t).set(n)}),this.resolveNoneKeyframes()}},fo=[`borderTopLeftRadius`,`borderTopRightRadius`,`borderBottomRightRadius`,`borderBottomLeftRadius`],po=[];function mo(e){typeof e.test==`function`&&e.read,ho(e),po.unshift(e)}function ho(e){pt(po,e)}function go(e){return po.find(t=>t.test(e))}function _o(e,t,n={},r){let i=[],{velocity:a}=n,o=n.reduceMotion??r?.shouldReduceMotion;for(let s in t){if(s===`transition`||s===`transitionEnd`)continue;let c=t[s];if(c===void 0)continue;let l=e(s),u=l.get();if(u!==void 0&&!l.isAnimating()&&!Array.isArray(c)&&c===u&&!a){F.update(()=>l.set(c));continue}l.start(Pa(s,l,c,o&&Ha.has(s)?{type:!1}:n,r)),l.animation&&i.push(l.animation)}let{transitionEnd:s}=t;if(s){let t=()=>F.update(()=>{for(let t in s)e(t).set(s[t])});i.length?Promise.all(i).then(t):t()}return i}function vo(e,t,n,r,i){return _o(r=>{let a=e.get(t,r);if(!a){let o;if(!i){let i=n[r];o=yo(i)??e.read(t,r,i),`${r}`}a=wa(o,{owner:i}),e(t,{[r]:a})}return a},n,r,i)}function yo(e){let t=Array.isArray(e)?e[0]:void 0;return t===null?void 0:t}function bo(e){return _t(e)&&`offsetHeight`in e&&!(`ownerSVGElement`in e)}function xo(e){return _t(e)&&`ownerSVGElement`in e}var So=(e,t)=>t&&typeof e==`number`?t.transform(e):e;function Co(e,t,n){if(e==null)return[];if(e instanceof EventTarget)return[e];if(typeof e==`string`){let r=document;t&&(r=t.current);let i=n?.[e]??r.querySelectorAll(e);return i?Array.from(i):[]}return Array.from(e).filter(e=>e!=null)}var wo=class{constructor(e=F.render){this.step=e,this.values=new Map,this.pending=[],this.numPending=0,this.flush=()=>{let{pending:e,numPending:t}=this;this.numPending=0;for(let n=0;n<t;n++)e[n]()}}set(e,t,n,r){if(this.values.get(e)?.onRemove(),r)for(let e of this.values.values())e.value===r&&(n=e.render);let i=()=>n&&this.schedule(n);t.get()!==void 0&&i();let a=t.on(`change`,i),o=()=>{a(),n&&!r&&this.cancel(n),this.values.get(e)?.onRemove===o&&this.values.delete(e)};return this.values.set(e,{value:t,render:r?void 0:n,onRemove:o}),o}get(e){return this.values.get(e)?.value}release(){let e=new Map;return this.values.forEach((t,n)=>{e.set(n,t.value),t.onRemove()}),this.transformKeys=this.transformValues=void 0,e}schedule(e){let{pending:t,numPending:n}=this;for(let r=0;r<n;r++)if(t[r]===e)return;n||this.step(this.flush),t[this.numPending++]=e}cancel(e){let{pending:t}=this;for(let n=0;n<this.numPending;n++)if(t[n]===e){t[n]=t[--this.numPending];return}}};function To(e,{step:t,...n}={}){let r=new WeakMap;return Object.assign((n,i)=>{let a=r.get(n)??new wo(t);r.set(n,a);let o=[];for(let t in i){let r=i[t],s=e(n,a,t,r);o.push(s)}return()=>{for(let e of o)e()}},n,{get:(e,t)=>r.get(e)?.get(t),flush:e=>r.get(e)?.flush(),state:e=>r.get(e)})}var Eo={x:`translateX`,y:`translateY`,z:`translateZ`,transformPerspective:`perspective`},Do={};function Oo(e){let t=``,{transformKeys:n=[],transformValues:r={}}=e;for(let e=0;e<n.length;e++){let i=n[e],a=r[i].get();a!==void 0&&(typeof a==`number`?a:parseFloat(a))!==+!!i.startsWith(`scale`)&&(t+=(t&&` `)+(Do[i]||(Do[i]=(Eo[i]||i)+`(`))+So(a,ii[i])+`)`)}let i=e.get(`pathRotation`)?.get();return i&&(t+=(t&&` `)+`rotate(`+So(i,ii.pathRotation)+`)`),t||`none`}var ko=new Set([`originX`,`originY`,`originZ`]),Ao=(e,t)=>So(e.get(t)?.get(),ai[t]),jo=(e,t,n,r)=>{let i,a;if(L.has(n)){if(n!==`pathRotation`){let e=t.transformKeys??=[];(t.transformValues??={})[n]=r,e.includes(n)||(e.push(n),e.sort((e,t)=>Ci.indexOf(e)-Ci.indexOf(t)))}t.get(`transform`)||(!bo(e)&&!t.get(`transformBox`)&&jo(e,t,`transformBox`,new Ca(`fill-box`)),t.set(`transform`,new Ca(`none`),()=>{e.style.transform=Oo(t)})),a=t.get(`transform`)}else ko.has(n)?(t.get(`transformOrigin`)||t.set(`transformOrigin`,new Ca(``),()=>{let n=Ao(t,`originX`)??`50%`,r=Ao(t,`originY`)??`50%`,i=Ao(t,`originZ`)??0;e.style.transformOrigin=`${n} ${r} ${i}`}),a=t.get(`transformOrigin`)):i=Bi(n)?()=>{e.style.setProperty(n,r.get())}:()=>{e.style[n]=So(r.get(),ai[n])};return t.set(n,r,i,a)},Mo=e=>bo(e)||xo(e),No=(e,t)=>{if(L.has(t))return xi(e,t);let n=getComputedStyle(e),r=Bi(t)?n.getPropertyValue(t):n[t];return typeof r==`string`&&r.trim()||0},Po=To(jo,{test:Mo,read:No}),Fo={x:`translateX`,y:`translateY`,z:`translateZ`,transformPerspective:`perspective`},Io=Ci.length;function Lo(e,t,n){let r=``,i=!0;for(let a=0;a<Io;a++){let o=Ci[a],s=e[o];if(s===void 0)continue;let c=!0;if(typeof s==`number`)c=s===+!!o.startsWith(`scale`);else{let e=parseFloat(s);c=o.startsWith(`scale`)?e===1:e===0}if(!c||n){let e=So(s,ai[o]);if(!c){i=!1;let t=Fo[o]||o;r+=`${t}(${e}) `}n&&(t[o]=e)}}let a=e.pathRotation;return a&&(i=!1,r+=`rotate(${So(a,ai.pathRotation)}) `),r=r.trim(),n?r=n(t,i?``:r):i&&(r=`none`),r}function Ro(e,t,n){let{style:r,vars:i,transformOrigin:a}=e,o=!1,s=!1;for(let e in t){let n=t[e];if(L.has(e)){o=!0;continue}if(en(e)){i[e]=n;continue}{let t=So(n,ai[e]);e.startsWith(`origin`)?(s=!0,a[e]=t):r[e]=t}}if(t.transform||(o||n?r.transform=Lo(t,e.transform,n):r.transform&&=`none`),s){let{originX:e=`50%`,originY:t=`50%`,originZ:n=0}=a;r.transformOrigin=`${e} ${t} ${n}`}}var zo={offset:`stroke-dashoffset`,array:`stroke-dasharray`},Bo={offset:`strokeDashoffset`,array:`strokeDasharray`};function Vo(e,t,n=1,r=0,i=!0){e.pathLength=1;let a=i?zo:Bo;e[a.offset]=`${-r}`,e[a.array]=`${t} ${n}`}var Ho=[`transform`,`opacity`,`offsetDistance`,`offsetPath`,`offsetRotate`,`offsetAnchor`];function Uo(e,{attrX:t,attrY:n,attrScale:r,pathLength:i,pathSpacing:a=1,pathOffset:o=0,...s},c,l,u){if(Ro(e,s,l),c){e.style.viewBox&&(e.attrs.viewBox=e.style.viewBox);return}e.attrs=e.style,e.style={};let{attrs:d,style:f}=e;for(let e of Ho)d[e]!==void 0&&(f[e]=d[e],delete d[e]);(f.transform||d.transformOrigin)&&(f.transformOrigin=d.transformOrigin??`50% 50%`,delete d.transformOrigin),f.transform&&(f.transformBox=u?.transformBox??`fill-box`,delete d.transformBox),t!==void 0&&(d.x=t),n!==void 0&&(d.y=n),r!==void 0&&(d.scale=r),i!==void 0&&Vo(d,i,a,o,!1)}function Wo(e,t){if(!(t in e))return!1;let n=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),t)||Object.getOwnPropertyDescriptor(e,t);return n&&typeof n.set==`function`}var Go=(e,t,n,r,i=n)=>{let a=Wo(e,i);!a&&(i.startsWith(`data`)||i.startsWith(`aria`))&&(i=Ya(i));let o=ai[n]||ai[i],s=a?()=>{e[i]=So(r.get(),ai[n])}:()=>{let t=So(r.get(),o);t==null?e.removeAttribute(i):e.setAttribute(i,String(t))};return t.set(n,r,s)};function Ko(e,t,n,r){return F.render(()=>e.setAttribute(`pathLength`,`1`)),n===`pathOffset`?t.set(n,r,()=>{let t=r.get();e.setAttribute(`stroke-dashoffset`,`${-t}`)}):(t.get(`stroke-dasharray`)||t.set(`stroke-dasharray`,new Ca(`1 1`),()=>{let n=t.get(`pathLength`)?.get()??1,r=t.get(`pathSpacing`)?.get();e.setAttribute(`stroke-dasharray`,`${n} ${r??1-Number(n)}`)}),t.set(n,r,void 0,t.get(`stroke-dasharray`)))}var qo=To((e,t,n,r)=>n.startsWith(`path`)?Ko(e,t,n,r):n.startsWith(`attr`)?Go(e,t,n,r,Jo(n)):(L.has(n)||ko.has(n)||Bi(n)||n in e.style?jo:Go)(e,t,n,r),{test:xo,read:(e,t)=>L.has(t)?ai[t]?.default||0:Bi(t)||Ho.includes(t)?No(e,t)||e.getAttribute(Ya(t))||0:(t=Jo(t),e.getAttribute(Ya(t))??e.getAttribute(t)??void 0)});function Jo(e){return e.replace(/^attr([A-Z])/,(e,t)=>t.toLowerCase())}function Yo({top:e,left:t,right:n,bottom:r}){return{x:{min:t,max:n},y:{min:e,max:r}}}function Xo({x:e,y:t}){return{top:t.min,right:e.max,bottom:t.max,left:e.min}}function Zo(e,t){if(!t)return e;let n=t({x:e.left,y:e.top}),r=t({x:e.right,y:e.bottom});return{top:n.y,left:n.x,bottom:r.y,right:r.x}}function Qo(e){return e===void 0||e===1}function $o({scale:e,scaleX:t,scaleY:n}){return!Qo(e)||!Qo(t)||!Qo(n)}function es(e){return $o(e)||ts(e)||e.z||e.rotate||e.rotateX||e.rotateY||e.skewX||e.skewY}function ts(e){return ns(e.x)||ns(e.y)}function ns(e){return e&&e!==`0%`}function rs(e,t,n){return n+t*(e-n)}function is(e,t,n,r,i){return i!==void 0&&(e=rs(e,i,r)),rs(e,n,r)+t}function as(e,t=0,n=1,r,i){e.min=is(e.min,t,n,r,i),e.max=is(e.max,t,n,r,i)}function os(e,{x:t,y:n}){as(e.x,t.translate,t.scale,t.originPoint),as(e.y,n.translate,n.scale,n.originPoint)}var ss=.999999999999,cs=1.0000000000001;function ls(e,t,n,r=!1){let i=n.length;if(!i)return;t.x=t.y=1;let a,o;for(let s=0;s<i;s++){a=n[s],o=a.projectionDelta;let{visualElement:i}=a.options;i&&i.props.style&&i.props.style.display===`contents`||(r&&a.options.layoutScroll&&a.scroll&&a!==a.root&&(us(e.x,-a.scroll.offset.x),us(e.y,-a.scroll.offset.y)),o&&(t.x*=o.x.scale,t.y*=o.y.scale,os(e,o)),r&&es(a.latestValues)&&ps(e,a.latestValues,a.layout?.layoutBox))}t.x<cs&&t.x>ss&&(t.x=1),t.y<cs&&t.y>ss&&(t.y=1)}function us(e,t){e.min+=t,e.max+=t}function ds(e,t,n,r,i=.5){as(e,t,n,P(e.min,e.max,i),r)}function fs(e,t){return typeof e==`string`?parseFloat(e)/100*(t.max-t.min):e}function ps(e,t,n){let r=n??e;ds(e.x,fs(t.x,r.x),t.scaleX,t.scale,t.originX),ds(e.y,fs(t.y,r.y),t.scaleY,t.scale,t.originY)}function ms(e,t){return Yo(Zo(e.getBoundingClientRect(),t))}function hs(e,t,n){let r=ms(e,n),{scroll:i}=t;return i&&(us(r.x,i.offset.x),us(r.y,i.offset.y)),r}var gs={},_s=e=>xo(e)?qo:Po,vs=class{constructor(e,t){this.effect=e,this.current=t,this.KeyframeResolver=uo}getValue(e){return this.effect.get(this.current,e)}readValue(e,t){return this.effect.read(this.current,e,t)}render(){this.effect.flush(this.current)}measureViewportBox(){return ms(this.current)}getProps(){return gs}};function ys(e,t,n,r){if(r)return _o(e=>r.getValue(e,null),t,n,r);let i=_s(e);return vo(i,e,t,n,new vs(i,e))}var bs=To((e,t,n,r)=>t.set(n,r,()=>{e[n]=r.get()}),{test:e=>_t(e),read:(e,t)=>{let n=e[t];return typeof n==`string`||typeof n==`number`?n:void 0}}),{schedule:xs,cancel:Ss}=fr(queueMicrotask,!1),Cs={x:!1,y:!1};function ws(){return Cs.x||Cs.y}function Ts(e){return e===`x`||e===`y`?Cs[e]?null:(Cs[e]=!0,()=>{Cs[e]=!1}):Cs.x||Cs.y?null:(Cs.x=Cs.y=!0,()=>{Cs.x=Cs.y=!1})}function Es(e,t){let n=Co(e),r=new AbortController;return[n,{passive:!0,...t,signal:r.signal},()=>r.abort()]}function Ds(e){return!(e.pointerType===`touch`||ws())}function Os(e,t,n={}){let[r,i,a]=Es(e,n);return r.forEach(e=>{let n=!1,r=!1,a,o=()=>{e.removeEventListener(`pointerleave`,u)},s=e=>{a&&=(a(e),void 0),o()},c=e=>{n=!1,window.removeEventListener(`pointerup`,c),window.removeEventListener(`pointercancel`,c),r&&(r=!1,s(e))},l=()=>{n=!0,window.addEventListener(`pointerup`,c,i),window.addEventListener(`pointercancel`,c,i)},u=e=>{if(e.pointerType!==`touch`){if(n){r=!0;return}s(e)}};e.addEventListener(`pointerenter`,n=>{if(!Ds(n))return;r=!1;let o=t(e,n);typeof o==`function`&&(a=o,e.addEventListener(`pointerleave`,u,i))},i),e.addEventListener(`pointerdown`,l,i)}),a}var ks=(e,t)=>t?e===t||ks(e,t.parentElement):!1,As=e=>e.pointerType===`mouse`?typeof e.button!=`number`||e.button<=0:e.isPrimary!==!1,js=new Set([`BUTTON`,`INPUT`,`SELECT`,`TEXTAREA`,`A`]);function Ms(e){return js.has(e.tagName)||e.isContentEditable===!0}var Ns=new Set([`INPUT`,`SELECT`,`TEXTAREA`]);function Ps(e){return Ns.has(e.tagName)||e.isContentEditable===!0}var Fs=new WeakSet;function Is(e){return t=>{t.key===`Enter`&&e(t)}}function Ls(e,t){e.dispatchEvent(new PointerEvent(`pointer`+t,{isPrimary:!0,bubbles:!0}))}var Rs=(e,t)=>{let n=e.currentTarget;if(!n)return;let r=Is(()=>{if(Fs.has(n))return;Ls(n,`down`);let e=Is(()=>{Ls(n,`up`)});n.addEventListener(`keyup`,e,t),n.addEventListener(`blur`,()=>Ls(n,`cancel`),t)});n.addEventListener(`keydown`,r,t),n.addEventListener(`blur`,()=>n.removeEventListener(`keydown`,r),t)};function zs(e){return As(e)&&!ws()}var Bs=new WeakSet;function Vs(e,t,n={}){let[r,i,a]=Es(e,n),o=e=>{let r=e.currentTarget;if(!zs(e)||Bs.has(e))return;Fs.add(r),n.stopPropagation&&Bs.add(e);let a=t(r,e),o={...i,capture:!0},s=(e,t)=>{window.removeEventListener(`pointerup`,c,o),window.removeEventListener(`pointercancel`,l,o),Fs.has(r)&&Fs.delete(r),zs(e)&&typeof a==`function`&&a(e,{success:t})},c=e=>{s(e,r===window||r===document||n.useGlobalTarget||ks(r,e.target))},l=e=>{s(e,!1)};window.addEventListener(`pointerup`,c,o),window.addEventListener(`pointercancel`,l,o)};return r.forEach(e=>{(n.useGlobalTarget?window:e).addEventListener(`pointerdown`,o,i),bo(e)&&(e.addEventListener(`focus`,e=>Rs(e,i)),!Ms(e)&&!e.hasAttribute(`tabindex`)&&(e.tabIndex=0))}),a}var Hs=new WeakMap,Us,Ws=(e,t,n)=>(r,i)=>i&&i[0]?i[0][e+`Size`]:xo(r)&&`getBBox`in r?r.getBBox()[t]:r[n],Gs=Ws(`inline`,`width`,`offsetWidth`),Ks=Ws(`block`,`height`,`offsetHeight`);function qs({target:e,borderBoxSize:t}){Hs.get(e)?.forEach(n=>{n(e,{get width(){return Gs(e,t)},get height(){return Ks(e,t)}})})}function Js(e){e.forEach(qs)}function Ys(){typeof ResizeObserver<`u`&&(Us=new ResizeObserver(Js))}function Xs(e,t){Us||Ys();let n=Co(e);return n.forEach(e=>{let n=Hs.get(e);n||(n=new Set,Hs.set(e,n)),n.add(t),Us?.observe(e)}),()=>{n.forEach(e=>{let n=Hs.get(e);n?.delete(t),n?.size||Us?.unobserve(e)})}}var Zs=new Set,Qs;function $s(){Qs=()=>{let e={get width(){return window.innerWidth},get height(){return window.innerHeight}};Zs.forEach(t=>t(e))},window.addEventListener(`resize`,Qs)}function ec(e){return Zs.add(e),Qs||$s(),()=>{Zs.delete(e),!Zs.size&&typeof Qs==`function`&&(window.removeEventListener(`resize`,Qs),Qs=void 0)}}function tc(e,t){return typeof e==`function`?ec(e):Xs(e,t)}var nc={value:null,addProjectionMetrics:null};function rc(e){return xo(e)&&e.tagName===`svg`}var ic=e=>typeof e==`number`?e:parseFloat(e),ac=()=>({translate:0,scale:1,origin:0,originPoint:0}),oc=()=>({x:ac(),y:ac()}),sc=()=>({min:0,max:0}),z=()=>({x:sc(),y:sc()}),cc=new WeakMap;function lc(e){return typeof e==`object`&&!!e&&typeof e.start==`function`}function uc(e){return typeof e==`string`||Array.isArray(e)}var dc=[`animate`,`whileInView`,`whileFocus`,`whileHover`,`whileTap`,`whileDrag`,`exit`],fc=[`initial`,...dc];function pc(e){if(lc(e.animate))return!0;for(let t=0;t<fc.length;t++)if(uc(e[fc[t]]))return!0;return!1}function mc(e){return!!(pc(e)||e.variants)}function hc(e,t,n){for(let r in t){let i=t[r],a=n[r];if(R(i))e.addValue(r,i);else if(R(a))e.addValue(r,wa(i,{owner:e}));else if(a!==i){if(e.hasValue(r)){let t=e.getValue(r);t.liveStyle===!0?t.jump(i):t.hasAnimated||t.set(i)}else{let t=e.getStaticValue(r);e.addValue(r,wa(t===void 0?i:t,{owner:e}))}}}for(let r in n)t[r]===void 0&&e.removeValue(r);return t}var gc={current:null},_c={current:!1},vc=typeof window<`u`;function yc(){if(_c.current=!0,vc){if(window.matchMedia){let e=window.matchMedia(`(prefers-reduced-motion)`),t=()=>gc.current=e.matches;e.addEventListener(`change`,t),t()}else gc.current=!1}}var bc=[`AnimationStart`,`AnimationComplete`,`Update`,`BeforeLayoutMeasure`,`LayoutMeasure`,`LayoutAnimationStart`,`LayoutAnimationComplete`],xc={};function Sc(e){xc=e}function Cc(){return xc}var wc=class{scrapeMotionValuesFromProps(e,t,n){return{}}constructor({parent:e,props:t,presenceContext:n,reducedMotionConfig:r,skipAnimations:i,blockInitialAnimation:a,visualState:o},s={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.shouldSkipAnimations=!1,this.values=new Map,this.KeyframeResolver=zi,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.hasBeenMounted=!1,this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify(`Update`,this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.renderScheduledAt=0,this.scheduleRender=()=>{let e=A.now();this.renderScheduledAt<e&&(this.renderScheduledAt=e,F.render(this.render,!1,!0))};let{latestValues:c,renderState:l}=o;this.latestValues=c,this.baseTarget={...c},this.initialValues=t.initial?{...c}:{},this.renderState=l,this.parent=e,this.props=t,this.presenceContext=n,this.depth=e?e.depth+1:0,this.reducedMotionConfig=r,this.skipAnimationsConfig=i,this.options=s,this.blockInitialAnimation=!!a,this.isControllingVariants=pc(t),this.isVariantNode=mc(t),this.isVariantNode&&(this.variantChildren=new Set),this.manuallyAnimateOnMount=!!(e&&e.current);let{willChange:u,...d}=this.scrapeMotionValuesFromProps(t,{},this);for(let e in d){let t=d[e];c[e]!==void 0&&R(t)&&t.set(c[e])}}mount(e){if(this.hasBeenMounted)for(let e in this.initialValues)this.values.get(e)?.jump(this.initialValues[e]),this.latestValues[e]=this.initialValues[e];if(this.current=e,cc.set(e,this),this.projection&&!this.projection.instance&&this.projection.mount(e),this.isVariantNode&&!this.isControllingVariants){let e=this;do e=e.props.inherit!==!1&&e.parent;while(e&&!e.isVariantNode);if(e){let{variantChildren:t}=e;t.add(this),this.removeFromVariantTree=()=>t.delete(this)}}this.values.forEach((e,t)=>this.bindToMotionValue(t,e)),this.reducedMotionConfig===`never`?this.shouldReduceMotion=!1:this.reducedMotionConfig===`always`?this.shouldReduceMotion=!0:(_c.current||yc(),this.shouldReduceMotion=gc.current),this.shouldSkipAnimations=this.skipAnimationsConfig??!1,this.parent?.addChild(this),this.update(this.props,this.presenceContext),this.hasBeenMounted=!0}unmount(){this.projection&&this.projection.unmount(),pr(this.notifyUpdate),pr(this.render),this.valueSubscriptions.forEach(e=>e()),this.valueSubscriptions.clear(),this.removeFromVariantTree&&this.removeFromVariantTree(),this.parent?.removeChild(this);for(let e in this.events)this.events[e].clear();for(let e in this.features){let t=this.features[e];t&&(t.unmount(),t.isMounted=!1)}this.current=null}addChild(e){this.children.add(e),this.enteringChildren??=new Set,this.enteringChildren.add(e)}removeChild(e){this.children.delete(e),this.enteringChildren&&this.enteringChildren.delete(e)}bindToMotionValue(e,t){if(this.valueSubscriptions.has(e)&&this.valueSubscriptions.get(e)(),t.accelerate&&ca.has(e)&&this.current instanceof HTMLElement){let{factory:n,keyframes:r,times:i,ease:a,duration:o}=t.accelerate,s=new Qi({element:this.current,name:e,keyframes:r,times:i,ease:a,duration:O(o)}),c=n(s);this.valueSubscriptions.set(e,()=>{c(),s.cancel()});return}let n=L.has(e);n&&this.onBindTransform&&this.onBindTransform();let r=t.on(`change`,t=>{this.latestValues[e]=t,this.props.onUpdate&&F.preRender(this.notifyUpdate),n&&this.projection&&(this.projection.isTransformDirty=!0),this.scheduleRender()}),i;typeof window<`u`&&window.MotionCheckAppearSync&&(i=window.MotionCheckAppearSync(this,e,t)),this.valueSubscriptions.set(e,()=>{r(),i&&i()})}sortNodePosition(e){return!this.current||!e.current||!this.sortInstanceNodePosition||this.type!==e.type?0:this.sortInstanceNodePosition(this.current,e.current)}updateFeatures(){let e=`animation`;for(e in xc){let t=xc[e];if(!t)continue;let{isEnabled:n,Feature:r}=t;if(!this.features[e]&&r&&n(this.props)&&(this.features[e]=new r(this)),this.features[e]){let t=this.features[e];t.isMounted?t.update():(t.mount(),t.isMounted=!0)}}}triggerBuild(){this.build(this.renderState,this.latestValues,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):z()}getStaticValue(e){return this.latestValues[e]}setStaticValue(e,t){this.latestValues[e]=t}update(e,t){(e.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=e,this.prevPresenceContext=this.presenceContext,this.presenceContext=t;for(let t=0;t<bc.length;t++){let n=bc[t];this.propEventSubscriptions[n]&&(this.propEventSubscriptions[n](),delete this.propEventSubscriptions[n]);let r=e[`on`+n];r&&(this.propEventSubscriptions[n]=this.on(n,r))}this.prevMotionValues=hc(this,this.scrapeMotionValuesFromProps(e,this.prevProps||{},this),this.prevMotionValues),this.handleChildMotionValue&&this.handleChildMotionValue()}getProps(){return this.props}getVariant(e){return this.props.variants?this.props.variants[e]:void 0}getDefaultTransition(){return this.props.transition}getTransformPagePoint(){return this.props.transformPagePoint}addValue(e,t){let n=this.values.get(e);if(t!==n){n&&this.removeValue(e),this.bindToMotionValue(e,t),this.values.set(e,t);let r=t.get();r!==void 0&&(this.latestValues[e]=r)}}removeValue(e){this.values.delete(e);let t=this.valueSubscriptions.get(e);t&&(t(),this.valueSubscriptions.delete(e)),delete this.latestValues[e],this.removeValueFromRenderState(e,this.renderState)}hasValue(e){return this.values.has(e)}getValue(e,t){if(this.props.values&&this.props.values[e])return this.props.values[e];let n=this.values.get(e);return n===void 0&&t!==void 0&&(n=wa(t??this.getDefaultValue?.(e),{owner:this}),this.addValue(e,n)),n}readValue(e,t){let n=this.latestValues[e]!==void 0||!this.current?this.latestValues[e]:this.getBaseTargetFromProps(this.props,e)??this.readValueFromInstance(this.current,e,this.options);return n!=null&&(typeof n==`string`&&(gt(n)||vt(n))?n=parseFloat(n):typeof n!=`number`&&!N.test(n)&&N.test(t)&&(n=li(e,t)),this.setBaseTarget(e,R(n)?n.get():n)),R(n)?n.get():n}setBaseTarget(e,t){this.baseTarget[e]=t}on(e,t){return this.events[e]||(this.events[e]=new Ct),this.events[e].add(t)}notify(e,...t){this.events[e]&&this.events[e].notify(...t)}scheduleRenderMicrotask(){xs.render(this.render)}},Tc=class extends wc{constructor(){super(...arguments),this.KeyframeResolver=uo}sortInstanceNodePosition(e,t){return e.compareDocumentPosition(t)&2?1:-1}getBaseTargetFromProps(e,t){let n=e.style;return n?n[t]:void 0}removeValueFromRenderState(e,{vars:t,style:n}){delete t[e],delete n[e]}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);let{children:e}=this.props;R(e)&&(this.childSubscription=e.on(`change`,e=>{this.current&&(this.current.textContent=`${e}`)}))}},Ec=class{constructor(e){this.isMounted=!1,this.node=e}update(){}};function Dc(e,{style:t,vars:n},r,i){let a=e.style,o;for(o in t)a[o]=t[o];for(o in i?.applyProjectionStyles(a,r),n)a.setProperty(o,n[o])}var Oc={};function kc(e,{layout:t,layoutId:n}){return L.has(e)||e.startsWith(`origin`)||(t||n!==void 0)&&(!!Oc[e]||e===`opacity`)}function Ac(e,t,n){let r=e.style,i=t?.style,a={};if(!r)return a;for(let t in r)(R(r[t])||i&&R(i[t])||kc(t,e)||n?.getValue(t)?.liveStyle!==void 0)&&(a[t]=r[t]);return a}function jc(e){return window.getComputedStyle(e)}var Mc=class extends Tc{constructor(){super(...arguments),this.type=`html`,this.renderInstance=Dc}mount(e){e.style,super.mount(e)}readValueFromInstance(e,t){if(L.has(t))return this.projection?.isProjecting?yi(t):xi(e,t);{let n=jc(e),r=(en(t)?n.getPropertyValue(t):n[t])||0;return typeof r==`string`?r.trim():r}}measureInstanceViewportBox(e,{transformPagePoint:t}){return ms(e,t)}build(e,t,n){Ro(e,t,n.transformTemplate)}scrapeMotionValuesFromProps(e,t,n){return Ac(e,t,n)}},Nc=new Set([`baseFrequency`,`diffuseConstant`,`kernelMatrix`,`kernelUnitLength`,`keySplines`,`keyTimes`,`limitingConeAngle`,`markerHeight`,`markerWidth`,`numOctaves`,`targetX`,`targetY`,`surfaceScale`,`specularConstant`,`specularExponent`,`stdDeviation`,`tableValues`,`viewBox`,`gradientTransform`,`pathLength`,`startOffset`,`textLength`,`lengthAdjust`]),Pc=e=>typeof e==`string`&&e.toLowerCase()===`svg`;function Fc(e,t,n,r){Dc(e,t,void 0,r);for(let n in t.attrs)e.setAttribute(Nc.has(n)?n:Ya(n),t.attrs[n])}function Ic(e,t,n){let r=Ac(e,t,n);for(let n in e)if(R(e[n])||R(t[n])){let t=Ci.indexOf(n)===-1?n:`attr`+n.charAt(0).toUpperCase()+n.substring(1);r[t]=e[n]}return r}var Lc=class extends Tc{constructor(){super(...arguments),this.type=`svg`,this.isSVGTag=!1,this.measureInstanceViewportBox=z}getBaseTargetFromProps(e,t){return L.has(t)?super.getBaseTargetFromProps(e,t)??yi(t):e[t]}getDefaultValue(e){return L.has(e)?this.latestValues[e]??yi(e):void 0}readValueFromInstance(e,t){if(L.has(t)){let e=si(t);return e&&e.default||0}if(Ho.includes(t)){let n=getComputedStyle(e)[t];if(typeof n==`string`&&n)return n.trim()}return t=Nc.has(t)?t:Ya(t),e.getAttribute(t)}scrapeMotionValuesFromProps(e,t,n){return Ic(e,t,n)}build(e,t,n){Uo(e,t,this.isSVGTag,n.transformTemplate,n.style)}renderInstance(e,t,n,r){Fc(e,t,n,r)}mount(e){this.isSVGTag=Pc(e.tagName),super.mount(e)}};function Rc(e,t){if(!Array.isArray(t))return!1;let n=t.length;if(n!==e.length)return!1;for(let r=0;r<n;r++)if(t[r]!==e[r])return!1;return!0}var zc=[...dc].reverse();function Bc(e){let t=t=>Promise.all(t.map(({animation:t,options:n})=>no(e,t,n))),n=Hc(),r=!0,i=!1;function a(a){let{props:o,parent:s,manuallyAnimateOnMount:c}=e,l=r||i,u=[],d=new Set,f={},p=1/0,m=e;do m=m.props.inherit!==!1&&m.parent;while(m&&!m.isControllingVariants);if(zc.forEach((t,r)=>{let i=n[t],h=o[t],g=m&&m.props[t],_=h===void 0?uc(g)||g===!1?g:void 0:h,v=uc(_),y=t===a?i.isActive:null;y===!1&&(p=r);let b=v&&h===void 0&&!(l&&c);if(i.protectedKeys={...f},!i.isActive&&y===null||!_&&!i.prevProp||lc(_)||typeof _==`boolean`)return;if(t===`exit`&&i.isActive&&y!==!0){f={...f,...i.prevResolvedValues};return}let x=Vc(i.prevProp,_),S=x||v&&(y&&!b||r>p),C=!1,ee=Array.isArray(_)?_:[_],w={};if(y!==!1)for(let n of ee){let{transition:r,transitionEnd:i,...a}=Ba(e,n,Va(e,t))||{};w={...w,...a,...i}}let{prevResolvedValues:te}=i;for(let t in{...te,...w}){if(t in f)continue;let n=w[t],r=te[t],a=Array.isArray(n)&&Array.isArray(r)?!Rc(n,r)||x:n!==r;if(a&&n==null)d.add(t);else if(a||n!==void 0&&d.has(t)){S=!0,d.delete(t)&&(C=!0),i.needsAnimating[t]=!0;let n=e.getValue(t);n&&(n.liveStyle=!1)}else i.protectedKeys[t]=!0}if(i.prevProp=_,i.prevResolvedValues=w,i.isActive&&(f={...f,...w}),S&&(!(b&&x)||C))for(let n of ee){let r={type:t};if(typeof n==`string`&&l&&c&&s?.enteringChildren){let t=Ba(s,n)?.transition?.delayChildren;r.delay=ya(s.enteringChildren,e,t)}u.push({animation:n,options:r})}}),d.size){let{initial:t}=o,n={},r=typeof t!=`boolean`&&Ba(e,Array.isArray(t)?t[0]:t,e.presenceContext?.custom);r&&r.transition&&(n.transition=r.transition),d.forEach(i=>{let a=e.getValue(i);a&&(a.liveStyle=!0);let s=r&&!Array.isArray(t)?r[i]:void 0,c=e.getBaseTargetFromProps(o,i);n[i]=(s===void 0?c!==void 0&&!R(c)?c:e.initialValues[i]===void 0?e.baseTarget[i]:void 0:s)??null}),u.push({animation:n})}let h=l&&e.blockInitialAnimation||r&&!c&&(o.initial===!1||o.initial===o.animate);return r=i=!1,!h&&u.length?t(u):Promise.resolve()}function o(t,r){if(n[t].isActive===r)return Promise.resolve();e.variantChildren?.forEach(e=>e.animationState?.setActive(t,r)),n[t].isActive=r;let i=a(t);for(let e in n)n[e].protectedKeys={};return i}return{animateChanges:a,setActive:o,setAnimateFunction:n=>{t=n(e)},getState:()=>n,reset:()=>{n=Hc(),i=!0}}}function Vc(e,t){return typeof t==`string`?t!==e:Array.isArray(t)?!Rc(t,e):!1}function Hc(){let e={};for(let t of dc)e[t]={isActive:t===`animate`,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}};return e}function Uc(e,t){e.min=t.min,e.max=t.max}function Wc(e,t){Uc(e.x,t.x),Uc(e.y,t.y)}function Gc(e,t){e.translate=t.translate,e.scale=t.scale,e.originPoint=t.originPoint,e.origin=t.origin}var Kc=.9999,qc=1.0001,Jc=-.01,Yc=.01;function B(e){return e.max-e.min}function Xc(e,t,n){return Math.abs(e-t)<=n}function Zc(e,t,n,r=.5){e.origin=r,e.originPoint=P(t.min,t.max,e.origin),e.scale=B(n)/B(t),e.translate=P(n.min,n.max,e.origin)-e.originPoint,(e.scale>=Kc&&e.scale<=qc||isNaN(e.scale))&&(e.scale=1),(e.translate>=Jc&&e.translate<=Yc||isNaN(e.translate))&&(e.translate=0)}function Qc(e,t,n,r){Zc(e.x,t.x,n.x,r?r.originX:void 0),Zc(e.y,t.y,n.y,r?r.originY:void 0)}function $c(e,t,n,r=0){e.min=(r?P(n.min,n.max,r):n.min)+t.min,e.max=e.min+B(t)}function el(e,t,n,r){$c(e.x,t.x,n.x,r?.x),$c(e.y,t.y,n.y,r?.y)}function tl(e,t,n,r=0){let i=r?P(n.min,n.max,r):n.min;e.min=t.min-i,e.max=e.min+B(t)}function nl(e,t,n,r){tl(e.x,t.x,n.x,r?.x),tl(e.y,t.y,n.y,r?.y)}function rl(e,t,n,r,i){return e-=t,e=rs(e,1/n,r),i!==void 0&&(e=rs(e,1/i,r)),e}function il(e,t=0,n=1,r=.5,i,a=e,o=e){if(xn.test(t)&&(t=parseFloat(t),t=P(o.min,o.max,t/100)-o.min),typeof t!=`number`)return;let s=P(a.min,a.max,r);e===a&&(s-=t),e.min=rl(e.min,t,n,s,i),e.max=rl(e.max,t,n,s,i)}function al(e,t,[n,r,i],a,o){il(e,t[n],t[r],t[i],t.scale,a,o)}var ol=[`x`,`scaleX`,`originX`],sl=[`y`,`scaleY`,`originY`];function cl(e,t,n,r){al(e.x,t,ol,n?n.x:void 0,r?r.x:void 0),al(e.y,t,sl,n?n.y:void 0,r?r.y:void 0)}function ll(e){return e.translate===0&&e.scale===1}function ul(e){return ll(e.x)&&ll(e.y)}function dl(e,t){return e.min===t.min&&e.max===t.max}function fl(e,t){return dl(e.x,t.x)&&dl(e.y,t.y)}function pl(e,t){return Math.round(e.min)===Math.round(t.min)&&Math.round(e.max)===Math.round(t.max)}function ml(e,t){return pl(e.x,t.x)&&pl(e.y,t.y)}function hl(e){return B(e.x)/B(e.y)}function gl(e,t){return e.translate===t.translate&&e.scale===t.scale&&e.originPoint===t.originPoint}function _l(e){return[e(`x`),e(`y`)]}function vl(e,t){return t.max===t.min?0:e/(t.max-t.min)*100}var yl={correct:(e,t)=>{if(!t.target)return e;if(typeof e==`string`){if(j.test(e))e=parseFloat(e);else return e}return`${vl(e,t.target.x)}% ${vl(e,t.target.y)}%`}},bl={correct:(e,{treeScale:t,projectionDelta:n})=>{let r=e,i=N.parse(e);if(i.length>5)return r;let a=N.createTransformer(e),o=typeof i[0]==`number`?0:1,s=n.x.scale*t.x,c=n.y.scale*t.y;i[0+o]/=s,i[1+o]/=c;let l=P(s,c,.5);return typeof i[2+o]==`number`&&(i[2+o]/=l),typeof i[3+o]==`number`&&(i[3+o]/=l),a(i)}};function xl(e,t,n){let r=``,i=e.x.translate/t.x,a=e.y.translate/t.y,o=n?.z||0;if((i||a||o)&&(r=`translate3d(${i}px, ${a}px, ${o}px) `),(t.x!==1||t.y!==1)&&(r+=`scale(${1/t.x}, ${1/t.y}) `),n){let{transformPerspective:e,rotate:t,pathRotation:i,rotateX:a,rotateY:o,skewX:s,skewY:c}=n;e&&(r=`perspective(${e}px) ${r}`),t&&(r+=`rotate(${t}deg) `),i&&(r+=`rotate(${i}deg) `),a&&(r+=`rotateX(${a}deg) `),o&&(r+=`rotateY(${o}deg) `),s&&(r+=`skewX(${s}deg) `),c&&(r+=`skewY(${c}deg) `)}let s=e.x.scale*t.x,c=e.y.scale*t.y;return(s!==1||c!==1)&&(r+=`scale(${s}, ${c})`),r||`none`}var Sl=fo.length,Cl=e=>typeof e==`number`||j.test(e);function wl(e,t,n,r,i,a){i?(e.opacity=P(0,n.opacity??1,El(r)),e.opacityExit=P(t.opacity??1,0,Dl(r))):a&&(e.opacity=P(t.opacity??1,n.opacity??1,r));for(let i=0;i<Sl;i++){let a=fo[i],o=Tl(t,a),s=Tl(n,a);(o!==void 0||s!==void 0)&&(o||=0,s||=0,o===0||s===0||Cl(o)===Cl(s)?(e[a]=Math.max(P(ic(o),ic(s),r),0),(xn.test(s)||xn.test(o))&&(e[a]+=`%`)):e[a]=s)}(t.rotate||n.rotate)&&(e.rotate=P(t.rotate||0,n.rotate||0,r))}function Tl(e,t){return e[t]===void 0?e.borderRadius:e[t]}var El=Ol(0,.5,zt),Dl=Ol(.5,.95,bt);function Ol(e,t,n){return r=>r<e?0:r>t?1:n(St(e,t,r))}function kl(e,t,n){let r=R(e)?e:wa(e);return r.start(Pa(``,r,t,n)),r.animation}function Al(e,t,n,r={passive:!0}){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)}var jl=(e,t)=>e.depth-t.depth,Ml=class{constructor(){this.children=[],this.isDirty=!1}add(e){ft(this.children,e),this.isDirty=!0}remove(e){pt(this.children,e),this.isDirty=!0}forEach(e){this.isDirty&&this.children.sort(jl),this.isDirty=!1,this.children.forEach(e)}};function Nl(e,t){let n=A.now(),r=({timestamp:i})=>{let a=i-n;a>=t&&(pr(r),e(a-t))};return F.setup(r,!0),()=>pr(r)}function Pl(e){return R(e)?e.get():e}var Fl=class{constructor(){this.members=[]}add(e){ft(this.members,e);for(let t=this.members.length-1;t>=0;t--){let n=this.members[t];if(n===e||n===this.lead||n===this.prevLead)continue;let r=n.instance;(!r||r.isConnected===!1)&&!n.snapshot&&(pt(this.members,n),n.unmount())}e.scheduleRender()}remove(e){if(pt(this.members,e),e===this.prevLead&&(this.prevLead=void 0),e===this.lead){let e=this.members[this.members.length-1];e&&this.promote(e)}}relegate(e){for(let t=this.members.indexOf(e)-1;t>=0;t--){let e=this.members[t];if(e.isPresent!==!1&&e.instance?.isConnected!==!1)return this.promote(e),!0}return!1}promote(e,t){let n=this.lead;if(e!==n&&(this.prevLead=n,this.lead=e,e.show(),n)){n.updateSnapshot(),e.scheduleRender();let{layoutDependency:r}=n.options,{layoutDependency:i}=e.options;(r===void 0||r!==i)&&(e.resumeFrom=n,t&&(n.preserveOpacity=!0),n.snapshot&&(e.snapshot=n.snapshot,e.snapshot.latestValues=n.animationValues||n.latestValues),e.root?.isUpdating&&(e.isLayoutDirty=!0)),e.options.crossfade===!1&&n.hide()}}exitAnimationComplete(){this.members.forEach(e=>{e.options.onExitComplete?.(),e.resumingFrom?.options.onExitComplete?.()})}scheduleRender(){this.members.forEach(e=>e.instance&&e.scheduleRender(!1))}removeLeadSnapshot(){this.lead?.snapshot&&(this.lead.snapshot=void 0)}},Il={borderRadius:{...yl,applyTo:[...fo]},borderTopLeftRadius:yl,borderTopRightRadius:yl,borderBottomLeftRadius:yl,borderBottomRightRadius:yl,boxShadow:bl},Ll={hasAnimatedSinceResize:!0,hasEverUpdated:!1};Object.assign(Oc,{...Il,...Oc});var Rl={nodes:0,calculatedTargetDeltas:0,calculatedProjections:0},zl=[``,`X`,`Y`,`Z`],Bl=1e3,Vl=0;function Hl(e,t,n,r){let{latestValues:i}=t;i[e]&&(n[e]=i[e],t.setStaticValue(e,0),r&&(r[e]=0))}function Ul(e){if(e.hasCheckedOptimisedAppear=!0,e.root===e)return;let{visualElement:t}=e.options;if(!t)return;let n=Za(t);if(window.MotionHasOptimisedAnimation(n,`transform`)){let{layout:t,layoutId:r}=e.options;window.MotionCancelOptimisedAnimation(n,`transform`,F,!(t||r))}let{parent:r}=e;r&&!r.hasCheckedOptimisedAppear&&Ul(r)}function Wl({attachResizeListener:e,defaultParent:t,measureScroll:n,checkIsScrollRoot:r,resetTransform:i}){return class{constructor(e={},n=t?.()){this.id=Vl++,this.animationId=0,this.animationCommitId=0,this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.isProjectionDirty=!1,this.isSharedProjectionDirty=!1,this.isTransformDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.hasCheckedOptimisedAppear=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.hasTreeAnimated=!1,this.updateScheduled=!1,this.scheduleUpdate=()=>this.update(),this.projectionUpdateScheduled=!1,this.checkUpdateFailed=()=>{this.isUpdating&&(this.isUpdating=!1,this.clearAllSnapshots())},this.updateProjection=()=>{this.projectionUpdateScheduled=!1,nc.value&&(Rl.nodes=Rl.calculatedTargetDeltas=Rl.calculatedProjections=0),this.nodes.forEach(ql),this.nodes.forEach(ru),this.nodes.forEach(iu),this.nodes.forEach(Jl),nc.addProjectionMetrics&&nc.addProjectionMetrics(Rl)},this.resolvedRelativeTargetAt=0,this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.latestValues=e,this.root=n?n.root||n:this,this.path=n?[...n.path,n]:[],this.parent=n,this.depth=n?n.depth+1:0;for(let e=0;e<this.path.length;e++)this.path[e].shouldResetTransform=!0;this.root===this&&(this.nodes=new Ml)}addEventListener(e,t){return this.eventHandlers.has(e)||this.eventHandlers.set(e,new Ct),this.eventHandlers.get(e).add(t)}notifyListeners(e,...t){let n=this.eventHandlers.get(e);n&&n.notify(...t)}hasListeners(e){return this.eventHandlers.has(e)}mount(t){if(this.instance)return;this.isSVG=xo(t)&&!rc(t),this.instance=t;let{layoutId:n,layout:r,visualElement:i}=this.options;if(i&&!i.current&&i.mount(t),this.root.nodes.add(this),this.parent&&this.parent.children.add(this),this.root.hasTreeAnimated&&(r||n)&&(this.isLayoutDirty=!0),e){let n,r=0,i=()=>this.root.updateBlockedByResize=!1;F.read(()=>{r=window.innerWidth}),e(t,()=>{let e=window.innerWidth;e!==r&&(r=e,this.root.updateBlockedByResize=!0,n&&n(),n=Nl(i,250),Ll.hasAnimatedSinceResize&&(Ll.hasAnimatedSinceResize=!1,this.nodes.forEach(nu)))})}n&&this.root.registerSharedNode(n,this),this.options.animate!==!1&&i&&(n||r)&&this.addEventListener(`didUpdate`,({delta:e,hasLayoutChanged:t,hasRelativeLayoutChanged:n,layout:r})=>{if(this.isTreeAnimationBlocked()){this.target=void 0,this.relativeTarget=void 0;return}let a=this.options.transition||i.getDefaultTransition()||du,{onLayoutAnimationStart:o,onLayoutAnimationComplete:s}=i.getProps(),c=!this.targetLayout||!ml(this.targetLayout,r),l=!t&&n;if(this.options.layoutRoot||this.resumeFrom||l||t&&(c||!this.currentAnimation)){this.resumeFrom&&(this.resumingFrom=this.resumeFrom,this.resumingFrom.resumingFrom=void 0);let t={...Ea(a,`layout`),onPlay:o,onComplete:s};(i.shouldReduceMotion||this.options.layoutRoot)&&(t.delay=0,t.type=!1),this.startAnimation(t),this.setAnimationOrigin(e,l,t.path)}else t||nu(this),this.isLead()&&this.options.onExitComplete&&this.options.onExitComplete();this.targetLayout=r})}unmount(){this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this);let e=this.getStack();e&&e.remove(this),this.parent&&this.parent.children.delete(this),this.instance=void 0,this.eventHandlers.clear(),pr(this.updateProjection)}blockUpdate(){this.updateManuallyBlocked=!0}unblockUpdate(){this.updateManuallyBlocked=!1}isUpdateBlocked(){return this.updateManuallyBlocked||this.updateBlockedByResize}isTreeAnimationBlocked(){return this.isAnimationBlocked||this.parent&&this.parent.isTreeAnimationBlocked()||!1}startUpdate(){this.isUpdateBlocked()||(this.isUpdating=!0,this.nodes&&this.nodes.forEach(au),this.animationId++)}getTransformTemplate(){let{visualElement:e}=this.options;return e&&e.getProps().transformTemplate}willUpdate(e=!0){if(this.root.hasTreeAnimated=!0,this.root.isUpdateBlocked()){this.options.onExitComplete&&this.options.onExitComplete();return}if(window.MotionCancelOptimisedAnimation&&!this.hasCheckedOptimisedAppear&&Ul(this),!this.root.isUpdating&&this.root.startUpdate(),this.isLayoutDirty)return;this.isLayoutDirty=!0;for(let e=0;e<this.path.length;e++){let t=this.path[e];t.shouldResetTransform=!0,(typeof t.latestValues.x==`string`||typeof t.latestValues.y==`string`)&&(t.isLayoutDirty=!0),t.updateScroll(`snapshot`),t.options.layoutRoot&&t.willUpdate(!1)}let{layoutId:t,layout:n}=this.options;if(t===void 0&&!n)return;let r=this.getTransformTemplate();this.prevTransformTemplateValue=r?r(this.latestValues,``):void 0,this.updateSnapshot(),e&&this.notifyListeners(`willUpdate`)}update(){if(this.updateScheduled=!1,this.isUpdateBlocked()){let e=this.updateBlockedByResize;this.unblockUpdate(),this.updateBlockedByResize=!1,this.clearAllSnapshots(),e&&this.nodes.forEach(Zl),this.nodes.forEach(Xl);return}if(this.animationId<=this.animationCommitId){this.nodes.forEach(Ql);return}this.animationCommitId=this.animationId,this.isUpdating?(this.isUpdating=!1,this.nodes.forEach($l),this.nodes.forEach(eu),this.nodes.forEach(tu),this.nodes.forEach(Gl),this.nodes.forEach(Kl)):this.nodes.forEach(Ql),this.clearAllSnapshots();let e=A.now();k.delta=mt(0,1e3/60,e-k.timestamp),k.timestamp=e,k.isProcessing=!0,mr.update.process(k),mr.preRender.process(k),mr.render.process(k),k.isProcessing=!1}didUpdate(){this.updateScheduled||(this.updateScheduled=!0,xs.read(this.scheduleUpdate))}clearAllSnapshots(){this.nodes.forEach(Yl),this.sharedNodes.forEach(ou)}scheduleUpdateProjection(){this.projectionUpdateScheduled||(this.projectionUpdateScheduled=!0,F.preRender(this.updateProjection,!1,!0))}scheduleCheckAfterUnmount(){F.postRender(()=>{this.isLayoutDirty?this.root.didUpdate():this.root.checkUpdateFailed()})}updateSnapshot(){!this.snapshot&&this.instance&&(this.snapshot=this.measure(),this.snapshot&&!B(this.snapshot.measuredBox.x)&&!B(this.snapshot.measuredBox.y)&&(this.snapshot=void 0))}updateLayout(){if(!this.instance||(this.updateScroll(),!(this.options.alwaysMeasureLayout&&this.isLead())&&!this.isLayoutDirty))return;if(this.resumeFrom&&!this.resumeFrom.instance)for(let e=0;e<this.path.length;e++)this.path[e].updateScroll();let e=this.layout;this.layout=this.measure(!1),this.layoutCorrected||=z(),this.isLayoutDirty=!1,this.projectionDelta=void 0,this.notifyListeners(`measure`,this.layout.layoutBox);let{visualElement:t}=this.options;t&&t.notify(`LayoutMeasure`,this.layout.layoutBox,e?e.layoutBox:void 0)}updateScroll(e=`measure`){let t=!!(this.options.layoutScroll&&this.instance);if(this.scroll&&this.scroll.animationId===this.root.animationId&&this.scroll.phase===e&&(t=!1),t&&this.instance){let t=r(this.instance);this.scroll={animationId:this.root.animationId,phase:e,isRoot:t,offset:n(this.instance),wasRoot:this.scroll?this.scroll.isRoot:t}}}resetTransform(){if(!i)return;let e=this.isLayoutDirty||this.shouldResetTransform||this.options.alwaysMeasureLayout,t=this.projectionDelta&&!ul(this.projectionDelta),n=this.getTransformTemplate(),r=n?n(this.latestValues,``):void 0,a=r!==this.prevTransformTemplateValue;e&&this.instance&&(t||es(this.latestValues)||a)&&(i(this.instance,r),this.shouldResetTransform=!1,this.scheduleRender())}measure(e=!0){let t=this.measurePageBox(),n=this.removeElementScroll(t);return e&&(n=this.removeTransform(n)),hu(n),{animationId:this.root.animationId,measuredBox:t,layoutBox:n,latestValues:{},source:this.id}}measurePageBox(){let{visualElement:e}=this.options;if(!e)return z();let t=e.measureViewportBox();if(!(this.scroll?.wasRoot||this.path.some(_u))){let{scroll:e}=this.root;e&&(us(t.x,e.offset.x),us(t.y,e.offset.y))}return t}removeElementScroll(e){let t=z();if(Wc(t,e),this.scroll?.wasRoot)return t;for(let n=0;n<this.path.length;n++){let r=this.path[n],{scroll:i,options:a}=r;r!==this.root&&i&&a.layoutScroll&&(i.wasRoot&&Wc(t,e),us(t.x,i.offset.x),us(t.y,i.offset.y))}return t}applyTransform(e,t=!1,n){let r=n||z();Wc(r,e);for(let e=0;e<this.path.length;e++){let n=this.path[e];!t&&n.options.layoutScroll&&n.scroll&&n!==n.root&&(us(r.x,-n.scroll.offset.x),us(r.y,-n.scroll.offset.y)),es(n.latestValues)&&ps(r,n.latestValues,n.layout?.layoutBox)}return es(this.latestValues)&&ps(r,this.latestValues,this.layout?.layoutBox),r}removeTransform(e){let t=z();Wc(t,e);for(let e=0;e<this.path.length;e++){let n=this.path[e];if(!es(n.latestValues))continue;let r;n.instance&&($o(n.latestValues)&&n.updateSnapshot(),r=z(),Wc(r,n.measurePageBox())),cl(t,n.latestValues,n.snapshot?.layoutBox,r)}return es(this.latestValues)&&cl(t,this.latestValues),t}setTargetDelta(e){this.targetDelta=e,this.root.scheduleUpdateProjection(),this.isProjectionDirty=!0}setOptions(e){this.options={...this.options,...e,crossfade:e.crossfade===void 0||e.crossfade}}clearMeasurements(){this.scroll=void 0,this.layout=void 0,this.snapshot=void 0,this.prevTransformTemplateValue=void 0,this.targetDelta=void 0,this.target=void 0,this.isLayoutDirty=!1}forceRelativeParentToResolveTarget(){this.relativeParent&&this.relativeParent.resolvedRelativeTargetAt!==k.timestamp&&this.relativeParent.resolveTargetDelta(!0)}resolveTargetDelta(e=!1){let t=this.getLead();this.isProjectionDirty||=t.isProjectionDirty,this.isTransformDirty||=t.isTransformDirty,this.isSharedProjectionDirty||=t.isSharedProjectionDirty;let n=!!this.resumingFrom||this!==t;if(!(e||n&&this.isSharedProjectionDirty||this.isProjectionDirty||this.parent?.isProjectionDirty||this.attemptToResolveRelativeTarget||this.root.updateBlockedByResize))return;let{layout:r,layoutId:i}=this.options;if(!this.layout||!(r||i))return;this.resolvedRelativeTargetAt=k.timestamp;let a=this.getClosestProjectingParent();!this.targetDelta&&!this.relativeTarget&&(this.options.layoutAnchor!==!1&&a&&a.layout?this.createRelativeTarget(a,this.layout.layoutBox,a.layout.layoutBox):this.removeRelativeTarget()),(this.relativeTarget||this.targetDelta)&&(this.target||(this.target=z(),this.targetWithTransforms=z()),this.relativeTarget&&this.relativeTargetOrigin&&this.relativeParent&&this.relativeParent.target?(this.forceRelativeParentToResolveTarget(),el(this.target,this.relativeTarget,this.relativeParent.target,this.options.layoutAnchor||void 0)):this.targetDelta?(this.resumingFrom?this.applyTransform(this.layout.layoutBox,!1,this.target):Wc(this.target,this.layout.layoutBox),os(this.target,this.targetDelta)):Wc(this.target,this.layout.layoutBox),this.attemptToResolveRelativeTarget&&(this.attemptToResolveRelativeTarget=!1,this.options.layoutAnchor!==!1&&a&&!!a.resumingFrom==!!this.resumingFrom&&!a.options.layoutScroll&&a.target&&this.animationProgress!==1?this.createRelativeTarget(a,this.target,a.target):this.relativeParent=this.relativeTarget=void 0),nc.value&&Rl.calculatedTargetDeltas++)}getClosestProjectingParent(){if(!(!this.parent||$o(this.parent.latestValues)||ts(this.parent.latestValues)))return this.parent.isProjecting()?this.parent:this.parent.getClosestProjectingParent()}isProjecting(){return!!((this.relativeTarget||this.targetDelta||this.options.layoutRoot)&&this.layout)}createRelativeTarget(e,t,n){this.relativeParent=e,this.forceRelativeParentToResolveTarget(),this.relativeTarget=z(),this.relativeTargetOrigin=z(),nl(this.relativeTargetOrigin,t,n,this.options.layoutAnchor||void 0),Wc(this.relativeTarget,this.relativeTargetOrigin)}removeRelativeTarget(){this.relativeParent=this.relativeTarget=void 0}calcProjection(){let e=this.getLead(),t=!!this.resumingFrom||this!==e,n=!0;if((this.isProjectionDirty||this.parent?.isProjectionDirty)&&(n=!1),t&&(this.isSharedProjectionDirty||this.isTransformDirty)&&(n=!1),this.resolvedRelativeTargetAt===k.timestamp&&(n=!1),n)return;let{layout:r,layoutId:i}=this.options;if(this.isTreeAnimating=!!(this.parent&&this.parent.isTreeAnimating||this.currentAnimation||this.pendingAnimation),this.isTreeAnimating||(this.targetDelta=this.relativeTarget=void 0),!this.layout||!(r||i))return;Wc(this.layoutCorrected,this.layout.layoutBox);let a=this.treeScale.x,o=this.treeScale.y;ls(this.layoutCorrected,this.treeScale,this.path,t),e.layout&&!e.target&&(this.treeScale.x!==1||this.treeScale.y!==1)&&(e.target=e.layout.layoutBox,e.targetWithTransforms=z());let{target:s}=e;if(!s){this.prevProjectionDelta&&(this.createProjectionDeltas(),this.scheduleRender());return}!this.projectionDelta||!this.prevProjectionDelta?this.createProjectionDeltas():(Gc(this.prevProjectionDelta.x,this.projectionDelta.x),Gc(this.prevProjectionDelta.y,this.projectionDelta.y)),Qc(this.projectionDelta,this.layoutCorrected,s,this.latestValues),(this.treeScale.x!==a||this.treeScale.y!==o||!gl(this.projectionDelta.x,this.prevProjectionDelta.x)||!gl(this.projectionDelta.y,this.prevProjectionDelta.y))&&(this.hasProjected=!0,this.scheduleRender(),this.notifyListeners(`projectionUpdate`,s)),nc.value&&Rl.calculatedProjections++}hide(){this.isVisible=!1}show(){this.isVisible=!0}scheduleRender(e=!0){if(this.options.visualElement?.scheduleRender(),e){let e=this.getStack();e&&e.scheduleRender()}this.resumingFrom&&!this.resumingFrom.instance&&(this.resumingFrom=void 0)}createProjectionDeltas(){this.prevProjectionDelta=oc(),this.projectionDelta=oc(),this.projectionDeltaWithTransform=oc()}setAnimationOrigin(e,t=!1,n){let r=this.snapshot,i=r?r.latestValues:{},a={...this.latestValues},o=oc();(!this.relativeParent||!this.relativeParent.options.layoutRoot)&&(this.relativeTarget=this.relativeTargetOrigin=void 0),this.attemptToResolveRelativeTarget=!t;let s=z(),c=(r?r.source:void 0)!==(this.layout?this.layout.source:void 0),l=this.getStack(),u=!l||l.members.length<=1,d=!(!c||u||this.options.crossfade!==!0||this.path.some(uu));this.animationProgress=0;let f,p=n?.interpolateProjection(e);this.mixTargetDelta=t=>{let n=t/1e3,r=p?.(n);r?(o.x.translate=r.x,o.x.scale=P(e.x.scale,1,n),o.x.origin=e.x.origin,o.x.originPoint=e.x.originPoint,o.y.translate=r.y,o.y.scale=P(e.y.scale,1,n),o.y.origin=e.y.origin,o.y.originPoint=e.y.originPoint):(su(o.x,e.x,n),su(o.y,e.y,n)),this.setTargetDelta(o),this.relativeTarget&&this.relativeTargetOrigin&&this.layout&&this.relativeParent&&this.relativeParent.layout&&(nl(s,this.layout.layoutBox,this.relativeParent.layout.layoutBox,this.options.layoutAnchor||void 0),lu(this.relativeTarget,this.relativeTargetOrigin,s,n),f&&fl(this.relativeTarget,f)&&(this.isProjectionDirty=!1),f||=z(),Wc(f,this.relativeTarget)),c&&(this.animationValues=a,wl(a,i,this.latestValues,n,d,u)),r&&r.rotate!==void 0&&(this.animationValues||=a,this.animationValues.pathRotation=r.rotate),this.root.scheduleUpdateProjection(),this.scheduleRender(),this.animationProgress=n},this.mixTargetDelta(this.options.layoutRoot?1e3:0)}startAnimation(e){this.notifyListeners(`animationStart`),this.currentAnimation?.stop(),this.resumingFrom?.currentAnimation?.stop(),this.pendingAnimation&&=(pr(this.pendingAnimation),void 0),this.pendingAnimation=F.update(()=>{Ll.hasAnimatedSinceResize=!0,this.motionValue||=wa(0),this.motionValue.jump(0,!1),this.currentAnimation=kl(this.motionValue,[0,1e3],{...e,velocity:0,isSync:!0,onUpdate:t=>{this.mixTargetDelta(t),e.onUpdate&&e.onUpdate(t)},onComplete:()=>{e.onComplete&&e.onComplete(),this.completeAnimation()}}),Jr(this.currentAnimation,this),this.resumingFrom&&(this.resumingFrom.currentAnimation=this.currentAnimation),this.pendingAnimation=void 0})}completeAnimation(){this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0);let e=this.getStack();e&&e.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners(`animationComplete`)}finishAnimation(){this.currentAnimation&&(this.mixTargetDelta&&this.mixTargetDelta(Bl),this.currentAnimation.stop()),this.completeAnimation()}applyTransformsToTarget(){let e=this.getLead(),{targetWithTransforms:t,layout:n,latestValues:r}=e,{target:i}=e;if(t&&i&&n){if(this!==e&&this.layout&&n&&gu(this.options.animationType,this.layout.layoutBox,n.layoutBox)){i=this.target||z();let t=B(this.layout.layoutBox.x);i.x.min=e.target.x.min,i.x.max=i.x.min+t;let n=B(this.layout.layoutBox.y);i.y.min=e.target.y.min,i.y.max=i.y.min+n}Wc(t,i),ps(t,r),Qc(this.projectionDeltaWithTransform,this.layoutCorrected,t,r)}}registerSharedNode(e,t){this.sharedNodes.has(e)||this.sharedNodes.set(e,new Fl),this.sharedNodes.get(e).add(t);let n=t.options.initialPromotionConfig;t.promote({transition:n?n.transition:void 0,preserveFollowOpacity:n&&n.shouldPreserveFollowOpacity?n.shouldPreserveFollowOpacity(t):void 0})}isLead(){let e=this.getStack();return!e||e.lead===this}getLead(){let{layoutId:e}=this.options;return e&&this.getStack()?.lead||this}getPrevLead(){let{layoutId:e}=this.options;return e?this.getStack()?.prevLead:void 0}getStack(){let{layoutId:e}=this.options;if(e)return this.root.sharedNodes.get(e)}promote({needsReset:e,transition:t,preserveFollowOpacity:n}={}){let r=this.getStack();r&&r.promote(this,n),e&&(this.projectionDelta=void 0,this.needsReset=!0),t&&this.setOptions({transition:t})}relegate(){let e=this.getStack();return e?e.relegate(this):!1}resetSkewAndRotation(){let{visualElement:e}=this.options;if(!e)return;let t=!1,{latestValues:n}=e;if((n.z||n.rotate||n.rotateX||n.rotateY||n.rotateZ||n.skewX||n.skewY)&&(t=!0),!t)return;let r={};n.z&&Hl(`z`,e,r,this.animationValues);for(let t=0;t<zl.length;t++)Hl(`rotate${zl[t]}`,e,r,this.animationValues),Hl(`skew${zl[t]}`,e,r,this.animationValues);e.render();for(let t in r)e.setStaticValue(t,r[t]),this.animationValues&&(this.animationValues[t]=r[t]);e.scheduleRender()}applyProjectionStyles(e,t){if(!this.instance||this.isSVG)return;if(!this.isVisible){e.visibility=`hidden`;return}let n=this.getTransformTemplate();if(this.needsReset){this.needsReset=!1,e.visibility=``,e.opacity=``,e.pointerEvents=Pl(t?.pointerEvents)||``,e.transform=n?n(this.latestValues,``):`none`;return}let r=this.getLead();if(!this.projectionDelta||!this.layout||!r.target){this.options.layoutId&&(e.opacity=this.latestValues.opacity===void 0?1:this.latestValues.opacity,e.pointerEvents=Pl(t?.pointerEvents)||``),this.hasProjected&&!es(this.latestValues)&&(e.transform=n?n({},``):`none`,this.hasProjected=!1);return}e.visibility=``;let i=r.animationValues||r.latestValues;this.applyTransformsToTarget();let a=xl(this.projectionDeltaWithTransform,this.treeScale,i);n&&(a=n(i,a)),e.transform=a;let{x:o,y:s}=this.projectionDelta;e.transformOrigin=`${o.origin*100}% ${s.origin*100}% 0`,e.opacity=r.animationValues?r===this?i.opacity??this.latestValues.opacity??1:this.preserveOpacity?this.latestValues.opacity:i.opacityExit:r===this?i.opacity===void 0?``:i.opacity:i.opacityExit===void 0?0:i.opacityExit;for(let t in Oc){if(i[t]===void 0)continue;let{correct:n,applyTo:o,isCSSVariable:s}=Oc[t],c=a===`none`?i[t]:n(i[t],r);if(o){let t=o.length;for(let n=0;n<t;n++)e[o[n]]=c}else s?this.options.visualElement.renderState.vars[t]=c:e[t]=c}this.options.layoutId&&(e.pointerEvents=r===this?Pl(t?.pointerEvents)||``:`none`)}clearSnapshot(){this.resumeFrom=this.snapshot=void 0}resetTree(){this.root.nodes.forEach(e=>e.currentAnimation?.stop()),this.root.nodes.forEach(Xl),this.root.sharedNodes.clear()}}}function Gl(e){e.updateLayout()}function Kl(e){let t=e.resumeFrom?.snapshot||e.snapshot;if(e.isLead()&&e.layout&&t&&e.hasListeners(`didUpdate`)){let{layoutBox:n,measuredBox:r}=e.layout,{animationType:i}=e.options,a=t.source!==e.layout.source;if(i===`size`)_l(e=>{let r=a?t.measuredBox[e]:t.layoutBox[e],i=B(r);r.min=n[e].min,r.max=r.min+i});else if(i===`x`||i===`y`){let e=i===`x`?`y`:`x`;Uc(a?t.measuredBox[e]:t.layoutBox[e],n[e])}else gu(i,t.layoutBox,n)&&_l(r=>{let i=a?t.measuredBox[r]:t.layoutBox[r],o=B(n[r]);i.max=i.min+o,e.relativeTarget&&!e.currentAnimation&&(e.isProjectionDirty=!0,e.relativeTarget[r].max=e.relativeTarget[r].min+o)});let o=oc();Qc(o,n,t.layoutBox);let s=oc();a?Qc(s,e.applyTransform(r,!0),t.measuredBox):Qc(s,n,t.layoutBox);let c=!ul(o),l=!1;if(!e.resumeFrom){let r=e.getClosestProjectingParent();if(r&&!r.resumeFrom){let{snapshot:i,layout:a}=r;if(i&&a){let o=e.options.layoutAnchor||void 0,s=z();nl(s,t.layoutBox,i.layoutBox,o);let c=z();nl(c,n,a.layoutBox,o),ml(s,c)||(l=!0),r.options.layoutRoot&&(e.relativeTarget=c,e.relativeTargetOrigin=s,e.relativeParent=r)}}}e.notifyListeners(`didUpdate`,{layout:n,snapshot:t,delta:s,layoutDelta:o,hasLayoutChanged:c,hasRelativeLayoutChanged:l})}else if(e.isLead()){let{onExitComplete:t}=e.options;t&&t()}e.options.transition=void 0}function ql(e){nc.value&&Rl.nodes++,e.parent&&(e.isProjecting()||(e.isProjectionDirty=e.parent.isProjectionDirty),e.isSharedProjectionDirty||=!!(e.isProjectionDirty||e.parent.isProjectionDirty||e.parent.isSharedProjectionDirty),e.isTransformDirty||=e.parent.isTransformDirty)}function Jl(e){e.isProjectionDirty=e.isSharedProjectionDirty=e.isTransformDirty=!1}function Yl(e){e.clearSnapshot()}function Xl(e){e.clearMeasurements()}function Zl(e){e.isLayoutDirty=!0,e.updateLayout()}function Ql(e){e.isLayoutDirty=!1}function $l(e){e.isAnimationBlocked&&e.layout&&!e.isLayoutDirty&&(e.snapshot=e.layout,e.isLayoutDirty=!0)}function eu(e){e.relativeTarget&&e.relativeParent?.isLayoutDirty&&(e.currentAnimation?e.isLayoutDirty=!0:(e.targetDelta=void 0,e.removeRelativeTarget()))}function tu(e){let{visualElement:t}=e.options;t&&t.getProps().onBeforeLayoutMeasure&&t.notify(`BeforeLayoutMeasure`),e.resetTransform()}function nu(e){e.finishAnimation(),e.targetDelta=e.relativeTarget=e.target=void 0,e.isProjectionDirty=!0}function ru(e){e.resolveTargetDelta()}function iu(e){e.calcProjection()}function au(e){e.resetSkewAndRotation()}function ou(e){e.removeLeadSnapshot()}function su(e,t,n){e.translate=P(t.translate,0,n),e.scale=P(t.scale,1,n),e.origin=t.origin,e.originPoint=t.originPoint}function cu(e,t,n,r){e.min=P(t.min,n.min,r),e.max=P(t.max,n.max,r)}function lu(e,t,n,r){cu(e.x,t.x,n.x,r),cu(e.y,t.y,n.y,r)}function uu(e){return e.animationValues&&e.animationValues.opacityExit!==void 0}var du={duration:.45,ease:[.4,0,.1,1]},fu=e=>typeof navigator<`u`&&navigator.userAgent&&navigator.userAgent.toLowerCase().includes(e),pu=fu(`applewebkit/`)&&!fu(`chrome/`)?Math.round:bt;function mu(e){e.min=pu(e.min),e.max=pu(e.max)}function hu(e){mu(e.x),mu(e.y)}function gu(e,t,n){return e===`position`||e===`preserve-aspect`&&!Xc(hl(t),hl(n),.2)}function _u(e){return e!==e.root&&e.scroll?.wasRoot}var vu=Wl({attachResizeListener:(e,t)=>Al(e,`resize`,t),measureScroll:()=>({x:document.documentElement.scrollLeft||document.body?.scrollLeft||0,y:document.documentElement.scrollTop||document.body?.scrollTop||0}),checkIsScrollRoot:()=>!0}),yu=e=>!e.isLayoutDirty&&e.willUpdate(!1);function bu(){let e=new Set,t=new WeakMap,n=()=>e.forEach(yu);return{add:r=>{e.add(r),t.set(r,r.addEventListener(`willUpdate`,n))},remove:r=>{e.delete(r);let i=t.get(r);i&&(i(),t.delete(r)),n()},dirty:n}}var xu={current:void 0},Su=Wl({measureScroll:e=>({x:e.scrollLeft,y:e.scrollTop}),defaultParent:()=>{if(!xu.current){let e=new vu({});e.mount(window),e.setOptions({layoutScroll:!0}),xu.current=e}return xu.current},resetTransform:(e,t)=>{e.style.transform=t===void 0?`none`:t},checkIsScrollRoot:e=>window.getComputedStyle(e).position===`fixed`}),Cu=(0,m.createContext)({transformPagePoint:e=>e,isStatic:!1,reducedMotion:`never`});function wu(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function Tu(...e){return t=>{let n=!1,r=e.map(e=>{let r=wu(e,t);return!n&&typeof r==`function`&&(n=!0),r});if(n)return()=>{for(let t=0;t<r.length;t++){let n=r[t];typeof n==`function`?n():wu(e[t],null)}}}}function Eu(...e){return m.useCallback(Tu(...e),e)}var Du=class extends m.Component{getSnapshotBeforeUpdate(e){let t=this.props.childRef.current;if(bo(t)&&e.isPresent&&!this.props.isPresent&&this.props.pop!==!1){let e=t.offsetParent,n=bo(e)&&e.offsetWidth||0,r=bo(e)&&e.offsetHeight||0,i=getComputedStyle(t),a=this.props.sizeRef.current;a.height=parseFloat(i.height),a.width=parseFloat(i.width),a.top=t.offsetTop,a.left=t.offsetLeft,a.right=n-a.width-a.left,a.bottom=r-a.height-a.top,a.direction=i.direction}return null}componentDidUpdate(){}render(){return this.props.children}};function Ou({children:e,isPresent:t,anchorX:n,anchorY:r,root:i,pop:a}){let o=(0,m.useId)(),s=(0,m.useRef)(null),c=(0,m.useRef)({width:0,height:0,top:0,left:0,right:0,bottom:0,direction:`ltr`}),{nonce:l}=(0,m.useContext)(Cu),u=Eu(s,a===!1?void 0:e.props?.ref??e?.ref);return(0,m.useInsertionEffect)(()=>{let{width:e,height:u,top:d,left:f,right:p,bottom:m,direction:h}=c.current;if(t||a===!1||!s.current||!e||!u)return;let g=h===`rtl`,_=n===`left`?g?`right: ${p}`:`left: ${f}`:g?`left: ${f}`:`right: ${p}`,v=r===`bottom`?`bottom: ${m}`:`top: ${d}`;s.current.dataset.motionPopId=o;let y=document.createElement(`style`);l&&(y.nonce=l);let b=i??document.head;return b.appendChild(y),y.sheet&&y.sheet.insertRule(`
2
+ [data-motion-pop-id="${o}"] {
3
+ position: absolute !important;
4
+ width: ${e}px !important;
5
+ height: ${u}px !important;
6
+ ${_}px !important;
7
+ ${v}px !important;
8
+ }
9
+ `),()=>{s.current?.removeAttribute(`data-motion-pop-id`),b.contains(y)&&b.removeChild(y)}},[t]),(0,h.jsx)(Du,{isPresent:t,childRef:s,sizeRef:c,pop:a,children:a===!1?e:m.cloneElement(e,{ref:u})})}var ku=({children:e,initial:t,isPresent:n,onExitComplete:r,custom:i,presenceAffectsLayout:a,mode:o,anchorX:s,anchorY:c,root:l})=>{let u=lt(Au),d=(0,m.useId)(),f=(0,m.useRef)(n),p=(0,m.useRef)(r);ut(()=>{f.current=n,p.current=r});let g=!0,_=(0,m.useMemo)(()=>(g=!1,{id:d,initial:t,isPresent:n,custom:i,onExitComplete:e=>{u.set(e,!0);for(let e of u.values())if(!e)return;r&&r()},register:e=>(u.set(e,!1),()=>{u.delete(e),!f.current&&!u.size&&p.current?.()})}),[n,u,r]);return a&&g&&(_={..._}),(0,m.useMemo)(()=>{u.forEach((e,t)=>u.set(t,!1))},[n]),m.useEffect(()=>{!n&&!u.size&&r&&r()},[n]),e=(0,h.jsx)(Ou,{pop:o===`popLayout`,isPresent:n,anchorX:s,anchorY:c,root:l,children:e}),(0,h.jsx)(dt.Provider,{value:_,children:e})};function Au(){return new Map}function ju(e=!0){let t=(0,m.useContext)(dt);if(t===null)return[!0,null];let{isPresent:n,onExitComplete:r,register:i}=t,a=(0,m.useId)();(0,m.useEffect)(()=>{if(e)return i(a)},[e]);let o=(0,m.useCallback)(()=>e&&r&&r(a),[a,r,e]);return!n&&r?[!1,o]:[!0]}function Mu(){return Nu((0,m.useContext)(dt))}function Nu(e){return e===null||e.isPresent}var Pu=e=>e.key||``;function Fu(e){let t=[];return m.Children.forEach(e,e=>{(0,m.isValidElement)(e)&&t.push(e)}),t}var V=({children:e,custom:t,initial:n=!0,onExitComplete:r,presenceAffectsLayout:i=!0,mode:a=`sync`,propagate:o=!1,anchorX:s=`left`,anchorY:c=`top`,root:l})=>{let[u,d]=ju(o),f=(0,m.useMemo)(()=>Fu(e),[e]),p=o&&!u?[]:f.map(Pu),g=(0,m.useRef)(!0),_=lt(()=>new Map),v=(0,m.useRef)(new Set),[y,b]=(0,m.useState)(f),[x,S]=(0,m.useState)(f);ut(()=>{o&&!u&&!x.length&&d?.()},[u,o,x.length,d]),ut(()=>{g.current=!1;for(let e=0;e<x.length;e++){let t=Pu(x[e]);p.includes(t)?(_.delete(t),v.current.delete(t)):_.get(t)!==!0&&_.set(t,!1)}},[x,p.length,p.join(`-`)]);let C=[];if(f!==y){let e=[...f],t=0;for(let n of x){let r=p.indexOf(Pu(n));r===-1?(e.splice(t++,0,n),C.push(n)):t=r+C.length+1}return C.every(e=>_.get(Pu(e)))?e=f:a===`wait`&&(e=C),S(Fu(e)),b(f),null}let{forceRender:ee}=(0,m.useContext)(ct);return(0,h.jsx)(h.Fragment,{children:x.map(e=>{let m=Pu(e),y=o&&!u?!1:f===x||p.includes(m);return(0,h.jsx)(ku,{isPresent:y,initial:!g.current||n?void 0:!1,custom:t,presenceAffectsLayout:i,mode:a,root:l,onExitComplete:y?void 0:()=>{if(v.current.has(m))return;if(_.has(m))v.current.add(m),_.set(m,!0);else return;let e=!0;_.forEach(t=>{t||(e=!1)}),e&&(ee?.(),b([]),o&&d?.(),r&&r())},anchorX:s,anchorY:c,children:e},m)})})},Iu=(0,m.createContext)(null);function Lu(){let e=(0,m.useRef)(!1);return ut(()=>(e.current=!0,()=>{e.current=!1}),[]),e}function Ru(){let e=Lu(),[t,n]=(0,m.useState)(0),r=(0,m.useCallback)(()=>{e.current&&n(t+1)},[t]);return[(0,m.useCallback)(()=>F.postRender(r),[r]),t]}var zu=e=>e===!0,Bu=e=>zu(e===!0)||e===`id`,Vu=({children:e,id:t,inherit:n=!0})=>{let r=(0,m.useContext)(ct),i=(0,m.useContext)(Iu),[a,o]=Ru(),s=(0,m.useRef)(null),c=r.id||i;s.current===null&&(Bu(n)&&c&&(t=t?c+`-`+t:c),s.current={id:t,group:zu(n)&&r.group||bu()});let l=(0,m.useMemo)(()=>({...s.current,forceRender:a}),[o]);return(0,h.jsx)(ct.Provider,{value:l,children:e})},Hu=(0,m.createContext)({strict:!1}),Uu={animation:[`animate`,`variants`,`whileHover`,`whileTap`,`exit`,`whileInView`,`whileFocus`,`whileDrag`],exit:[`exit`],drag:[`drag`,`dragControls`],focus:[`whileFocus`],hover:[`whileHover`,`onHoverStart`,`onHoverEnd`],tap:[`whileTap`,`onTap`,`onTapStart`,`onTapCancel`],pan:[`onPan`,`onPanStart`,`onPanSessionStart`,`onPanEnd`],inView:[`whileInView`,`onViewportEnter`,`onViewportLeave`],layout:[`layout`,`layoutId`]},Wu=!1;function Gu(){if(Wu)return;let e={};for(let t in Uu)e[t]={isEnabled:e=>Uu[t].some(t=>!!e[t])};Sc(e),Wu=!0}function Ku(){return Gu(),Cc()}function qu(e){let t=Ku();for(let n in e)t[n]={...t[n],...e[n]};Sc(t)}var Ju=(0,m.createContext)({});function Yu(e,t){if(pc(e)){let{initial:t,animate:n}=e;return{initial:t===!1||uc(t)?t:void 0,animate:uc(n)?n:void 0}}return e.inherit===!1?{}:t}function Xu(e){let{initial:t,animate:n}=Yu(e,(0,m.useContext)(Ju));return(0,m.useMemo)(()=>({initial:t,animate:n}),[Zu(t),Zu(n)])}function Zu(e){return Array.isArray(e)?e.join(` `):e}var Qu=()=>({style:{},transform:{},transformOrigin:{},vars:{}});function $u(e,t,n){for(let r in t)!R(t[r])&&!kc(r,n)&&(e[r]=t[r])}function ed({transformTemplate:e},t){return(0,m.useMemo)(()=>{let n=Qu();return Ro(n,t,e),Object.assign({},n.vars,n.style)},[t])}function td(e,t){let n=e.style||{},r={};return $u(r,n,e),Object.assign(r,ed(e,t)),r}function nd(e,t){let n={},r=td(e,t);return e.drag&&e.dragListener!==!1&&(n.draggable=!1,r.userSelect=r.WebkitUserSelect=r.WebkitTouchCallout=`none`,r.touchAction=e.drag===!0?`none`:`pan-${e.drag===`x`?`y`:`x`}`),e.tabIndex===void 0&&(e.onTap||e.onTapStart||e.whileTap)&&(n.tabIndex=0),n.style=r,n}var rd=()=>({...Qu(),attrs:{}});function id(e,t,n,r){let i=(0,m.useMemo)(()=>{let n=rd();return Uo(n,t,Pc(r),e.transformTemplate,e.style),{...n.attrs,style:{...n.style}}},[t]);if(e.style){let t={};$u(t,e.style,e),i.style={...t,...i.style}}return i}var ad=new Set(`animate.exit.variants.initial.style.values.transition.transformTemplate.custom.inherit.onBeforeLayoutMeasure.onAnimationStart.onAnimationComplete.onUpdate.onDragStart.onDrag.onDragEnd.onMeasureDragConstraints.onDirectionLock.onDragTransitionEnd._dragX._dragY.onHoverStart.onHoverEnd.onViewportEnter.onViewportLeave.globalTapTarget.propagate.ignoreStrict.viewport`.split(`.`));function od(e){return e.startsWith(`while`)||e.startsWith(`drag`)&&e!==`draggable`||e.startsWith(`layout`)||e.startsWith(`onTap`)||e.startsWith(`onPan`)||e.startsWith(`onLayout`)||ad.has(e)}function sd(e,t){return e.startsWith(`on`)?!od(e):t?.(e)??!od(e)}function cd(e,t,n,r){let i={};for(let a in e)(a!==`values`||typeof e.values!=`object`)&&(R(e[a])||(sd(a,r)||n===!0&&od(a)||!t&&!od(a)||e.draggable&&a.startsWith(`onDrag`))&&(i[a]=e[a]));return i}var ld=[`animate`,`circle`,`defs`,`desc`,`ellipse`,`g`,`image`,`line`,`filter`,`marker`,`mask`,`metadata`,`path`,`pattern`,`polygon`,`polyline`,`rect`,`stop`,`switch`,`symbol`,`svg`,`text`,`tspan`,`use`,`view`];function ud(e){return typeof e!=`string`||e.includes(`-`)?!1:!!(ld.indexOf(e)>-1||/[A-Z]/u.test(e))}function dd(e,t,n,{latestValues:r},i,a=!1,o,s){let c=(o??ud(e)?id:nd)(t,r,i,e),l=cd(t,typeof e==`string`,a,s),u=e===m.Fragment?{}:{...l,...c,ref:n},{children:d}=t,f=(0,m.useMemo)(()=>R(d)?d.get():d,[d]);return(0,m.createElement)(e,{...u,children:f})}function fd({scrapeMotionValuesFromProps:e,createRenderState:t},n,r,i){return{latestValues:pd(n,r,i,e),renderState:t()}}function pd(e,t,n,r){let i={},a=r(e,{});for(let e in a)i[e]=Pl(a[e]);let{initial:o,animate:s}=e,c=pc(e),l=mc(e);t&&l&&!c&&e.inherit!==!1&&(o===void 0&&(o=t.initial),s===void 0&&(s=t.animate));let u=n?n.initial===!1:!1;u||=o===!1;let d=u?s:o;if(d&&typeof d!=`boolean`&&!lc(d)){let t=Array.isArray(d)?d:[d];for(let n=0;n<t.length;n++){let r=za(e,t[n]);if(r){let{transitionEnd:e,transition:t,...n}=r;for(let e in n){let t=n[e];if(Array.isArray(t)){let e=u?t.length-1:0;t=t[e]}t!==null&&(i[e]=t)}for(let t in e)i[t]=e[t]}}}return i}var md=e=>(t,n)=>{let r=(0,m.useContext)(Ju),i=(0,m.useContext)(dt),a=()=>fd(e,t,r,i);return n?a():lt(a)},hd=md({scrapeMotionValuesFromProps:Ac,createRenderState:Qu}),gd=md({scrapeMotionValuesFromProps:Ic,createRenderState:rd}),_d=Symbol.for(`motionComponentSymbol`);function vd(e,t,n){let r=(0,m.useRef)(n);(0,m.useInsertionEffect)(()=>{r.current=n});let i=(0,m.useRef)(null);return(0,m.useCallback)(n=>{n&&e.onMount?.(n),t&&(n?t.mount(n):t.unmount());let a=r.current;if(typeof a==`function`){if(n){let e=a(n);typeof e==`function`&&(i.current=e)}else i.current?(i.current(),i.current=null):a(n)}else a&&(a.current=n)},[t])}var yd=(0,m.createContext)({});function bd(e){return e&&typeof e==`object`&&Object.prototype.hasOwnProperty.call(e,`current`)}function xd(e,t,n,r,i,a){let{visualElement:o}=(0,m.useContext)(Ju),s=(0,m.useContext)(Hu),c=(0,m.useContext)(dt),l=(0,m.useContext)(Cu),u=l.reducedMotion,d=l.skipAnimations,f=(0,m.useRef)(null),p=(0,m.useRef)(!1);r||=s.renderer,!f.current&&r&&(f.current=r(e,{visualState:t,parent:o,props:n,presenceContext:c,blockInitialAnimation:c?c.initial===!1:!1,reducedMotionConfig:u,skipAnimations:d,isSVG:a}),p.current&&f.current&&(f.current.manuallyAnimateOnMount=!0));let h=f.current,g=(0,m.useContext)(yd);h&&!h.projection&&i&&(h.type===`html`||h.type===`svg`)&&Sd(f.current,n,i,g);let _=(0,m.useRef)(!1);(0,m.useInsertionEffect)(()=>{h&&_.current&&h.update(n,c)});let v=n[Xa],y=(0,m.useRef)(!!v&&typeof window<`u`&&!window.MotionHandoffIsComplete?.(v)&&window.MotionHasOptimisedAnimation?.(v));return ut(()=>{p.current&&h&&(h.animationState?.animateChanges(),h.enteringChildren=void 0)},[]),ut(()=>{p.current=!0,h&&(_.current=!0,window.MotionIsMounted=!0,h.updateFeatures(),h.scheduleRenderMicrotask(),y.current&&h.animationState&&h.animationState.animateChanges())}),(0,m.useEffect)(()=>{h&&(!y.current&&h.animationState&&h.animationState.animateChanges(),y.current&&=(queueMicrotask(()=>{window.MotionHandoffMarkAsComplete?.(v)}),!1),h.enteringChildren=void 0)}),h}function Sd(e,t,n,r){let{layoutId:i,layout:a,drag:o,dragConstraints:s,layoutScroll:c,layoutRoot:l,layoutAnchor:u,layoutCrossfade:d}=t;e.projection=new n(e.latestValues,t[`data-framer-portal-id`]?void 0:Cd(e.parent)),e.projection.setOptions({layoutId:i,layout:a,alwaysMeasureLayout:!!o||s&&bd(s),visualElement:e,animationType:typeof a==`string`?a:`both`,initialPromotionConfig:r,crossfade:d,layoutScroll:c,layoutRoot:l,layoutAnchor:u})}function Cd(e){if(e)return e.options.allowProjection===!1?Cd(e.parent):e.projection}function wd(e,{forwardMotionProps:t=!1,type:n}={},r,i){r&&qu(r);let a=n?n===`svg`:ud(e),o=a?gd:hd;function s(n,s){let c,l={...(0,m.useContext)(Cu),...n,layoutId:Td(n)},{isStatic:u,isValidProp:d}=l,f=Xu(n),p=o(n,u);if(!u&&typeof window<`u`){Ed(l,r);let t=Dd(l);c=t.MeasureLayout,f.visualElement=xd(e,p,l,i,t.ProjectionNode,a)}return(0,h.jsxs)(Ju.Provider,{value:f,children:[c&&f.visualElement?(0,h.jsx)(c,{visualElement:f.visualElement,...l}):null,dd(e,n,vd(p,f.visualElement,s),p,u,t,a,d)]})}s.displayName=`motion.${typeof e==`string`?e:`create(${e.displayName??e.name??``})`}`;let c=(0,m.forwardRef)(s);return c[_d]=e,c}function Td({layoutId:e}){let t=(0,m.useContext)(ct).id;return t&&e!==void 0?t+`-`+e:e}function Ed(e,t){(0,m.useContext)(Hu).strict}function Dd(e){let{drag:t,layout:n}=Ku();if(!t&&!n)return{};let r={...t,...n};return{MeasureLayout:t?.isEnabled(e)||n?.isEnabled(e)?r.MeasureLayout:void 0,ProjectionNode:r.ProjectionNode}}function Od(e,t){if(typeof Proxy>`u`)return wd;let n=new Map,r=(n,r)=>wd(n,r,e,t);return new Proxy((e,t)=>r(e,t),{get:(i,a)=>a===`create`?r:(n.has(a)||n.set(a,wd(a,void 0,e,t)),n.get(a))})}var kd=(e,t)=>t.isSVG??ud(e)?new Lc(t):new Mc(t,{allowProjection:e!==m.Fragment}),Ad=class extends Ec{constructor(e){super(e),e.animationState||=Bc(e)}updateAnimationControlsSubscription(){let{animate:e}=this.node.getProps();lc(e)&&(this.unmountControls=e.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){let{animate:e}=this.node.getProps(),{animate:t}=this.node.prevProps||{};e!==t&&this.updateAnimationControlsSubscription()}unmount(){this.node.animationState.reset(),this.unmountControls?.()}},jd=0,Md={animation:{Feature:Ad},exit:{Feature:class extends Ec{constructor(){super(...arguments),this.id=jd++}update(){let{presenceContext:e,prevPresenceContext:t,animationState:n}=this.node;if(!e||!n)return;let{isPresent:r,onExitComplete:i}=e,a=t?.isPresent;if(r===a)return;if(r&&a===!1){if(this.exit===!0){let{initial:e}=this.node.getProps();if(e&&!Array.isArray(e)){let{transition:t,transitionEnd:n,...r}=Ba(this.node,e)||{};for(let e in r)this.node.getValue(e)?.jump(r[e])}this.node.blockInitialAnimation=!1,n.reset(),n.animateChanges()}else n.setActive(`exit`,!1);this.exit=void 0;return}let o=this.exit=n.setActive(`exit`,!r);i&&!r&&o.then(()=>{this.exit===o&&(this.exit=!0,i(this.id))})}mount(){let{register:e,onExitComplete:t}=this.node.presenceContext||{};t&&t(this.id),e&&(this.unmount=e(this.id))}unmount(){}}}};function Nd(e){return{point:{x:e.pageX,y:e.pageY}}}var Pd=e=>t=>As(t)&&e(t,Nd(t));function Fd(e,t,n,r){return Al(e,t,Pd(n),r)}var Id=({current:e})=>e?e.ownerDocument.defaultView:null,Ld=(e,t)=>Math.abs(e-t);function Rd(e,t){let n=Ld(e.x,t.x),r=Ld(e.y,t.y);return Math.sqrt(n**2+r**2)}var zd=new Set([`auto`,`scroll`]),Bd=class{constructor(e,t,{transformPagePoint:n,contextWindow:r=window,dragSnapToOrigin:i=!1,distanceThreshold:a=3,element:o}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.lastRawMoveEventInfo=null,this.handlers={},this.contextWindow=window,this.scrollPositions=new Map,this.removeScrollListeners=null,this.onElementScroll=e=>{this.handleScroll(e.target)},this.onWindowScroll=()=>{this.handleScroll(window)},this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;this.hasPendingMove=!1,this.lastRawMoveEventInfo&&(this.lastMoveEventInfo=Vd(this.lastRawMoveEventInfo,this.transformPagePoint));let e=Ud(this.lastMoveEventInfo,this.history),t=this.startEvent!==null,n=Rd(e.offset,{x:0,y:0})>=this.distanceThreshold;if(!t&&!n)return;let{point:r}=e;this.history.push({...r,timestamp:A.now()});let{onStart:i,onMove:a}=this.handlers;t||(i&&i(this.lastMoveEvent,e),this.startEvent=this.lastMoveEvent),a&&a(this.lastMoveEvent,e)},this.handlePointerMove=(e,t)=>{this.lastMoveEvent=e,this.lastRawMoveEventInfo=t,this.lastMoveEventInfo=Vd(t,this.transformPagePoint),this.hasPendingMove=!0,F.update(this.updatePoint,!0)},this.handlePointerUp=(e,t)=>{this.hasPendingMove&&this.updatePoint(),this.end();let{onEnd:n,onSessionEnd:r,resumeAnimation:i}=this.handlers;if((this.dragSnapToOrigin||!this.startEvent)&&i&&i(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;let a=Ud(e.type===`pointercancel`?this.lastMoveEventInfo:Vd(t,this.transformPagePoint),this.history);this.startEvent&&n&&n(e,a),r&&r(e,a)},!As(e))return;this.dragSnapToOrigin=i,this.handlers=t,this.transformPagePoint=n,this.distanceThreshold=a,this.contextWindow=r||window;let s=Vd(Nd(e),this.transformPagePoint),{point:c}=s,{timestamp:l}=k;this.history=[{...c,timestamp:l}];let{onSessionStart:u}=t;u&&u(e,Ud(s,this.history));let d={passive:!0,capture:!0};this.removeListeners=xt(Fd(this.contextWindow,`pointermove`,this.handlePointerMove,d),Fd(this.contextWindow,`pointerup`,this.handlePointerUp,d),Fd(this.contextWindow,`pointercancel`,this.handlePointerUp,d)),o&&this.startScrollTracking(o)}startScrollTracking(e){let t=e.parentElement;for(;t;){let e=getComputedStyle(t);(zd.has(e.overflowX)||zd.has(e.overflowY))&&this.scrollPositions.set(t,{x:t.scrollLeft,y:t.scrollTop}),t=t.parentElement}this.scrollPositions.set(window,{x:window.scrollX,y:window.scrollY}),window.addEventListener(`scroll`,this.onElementScroll,{capture:!0}),window.addEventListener(`scroll`,this.onWindowScroll),this.removeScrollListeners=()=>{window.removeEventListener(`scroll`,this.onElementScroll,{capture:!0}),window.removeEventListener(`scroll`,this.onWindowScroll)}}handleScroll(e){let t=this.scrollPositions.get(e);if(!t)return;let n=e===window,r=n?{x:window.scrollX,y:window.scrollY}:{x:e.scrollLeft,y:e.scrollTop},i={x:r.x-t.x,y:r.y-t.y};(i.x!==0||i.y!==0)&&(n?this.lastMoveEventInfo&&(this.lastMoveEventInfo.point.x+=i.x,this.lastMoveEventInfo.point.y+=i.y):this.history.length>0&&(this.history[0].x-=i.x,this.history[0].y-=i.y),this.scrollPositions.set(e,r),F.update(this.updatePoint,!0))}updateHandlers(e){this.handlers=e}end(){this.removeListeners&&this.removeListeners(),this.removeScrollListeners&&this.removeScrollListeners(),this.scrollPositions.clear(),pr(this.updatePoint)}};function Vd(e,t){return t?{point:t(e.point)}:e}function Hd(e,t){return{x:e.x-t.x,y:e.y-t.y}}function Ud({point:e},t){return{point:e,delta:Hd(e,Gd(t)),offset:Hd(e,Wd(t)),velocity:Kd(t,.1)}}function Wd(e){return e[0]}function Gd(e){return e[e.length-1]}function Kd(e,t){if(e.length<2)return{x:0,y:0};let n=e.length-1,r=null,i=Gd(e);for(;n>=0&&(r=e[n],!(i.timestamp-r.timestamp>O(t)));)n--;if(!r)return{x:0,y:0};r===e[0]&&e.length>2&&i.timestamp-r.timestamp>O(t)*2&&(r=e[1]);let a=wt(i.timestamp-r.timestamp);if(a===0)return{x:0,y:0};let o={x:(i.x-r.x)/a,y:(i.y-r.y)/a};return o.x===1/0&&(o.x=0),o.y===1/0&&(o.y=0),o}function qd(e,{min:t,max:n},r){return t!==void 0&&e<t?e=r?P(t,e,r.min):Math.max(e,t):n!==void 0&&e>n&&(e=r?P(n,e,r.max):Math.min(e,n)),e}function Jd(e,t,n){return{min:t===void 0?void 0:e.min+t,max:n===void 0?void 0:e.max+n-(e.max-e.min)}}function Yd(e,{top:t,left:n,bottom:r,right:i}){return{x:Jd(e.x,n,i),y:Jd(e.y,t,r)}}function Xd(e,t){let n=t.min-e.min,r=t.max-e.max;return t.max-t.min<e.max-e.min&&([n,r]=[r,n]),{min:n,max:r}}function Zd(e,t){return{x:Xd(e.x,t.x),y:Xd(e.y,t.y)}}function Qd(e,t){let n=.5,r=B(e),i=B(t);return i>r?n=St(t.min,t.max-r,e.min):r>i&&(n=St(e.min,e.max-i,t.min)),mt(0,1,n)}function $d(e,t){let n={};return t.min!==void 0&&(n.min=t.min-e.min),t.max!==void 0&&(n.max=t.max-e.min),n}var ef=.35;function tf(e=ef){return e===!1?e=0:e===!0&&(e=ef),{x:nf(e,`left`,`right`),y:nf(e,`top`,`bottom`)}}function nf(e,t,n){return{min:rf(e,t),max:rf(e,n)}}function rf(e,t){return typeof e==`number`?e:e[t]||0}var af=new WeakMap,of=class{constructor(e){this.openDragLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=z(),this.latestPointerEvent=null,this.latestPanInfo=null,this.visualElement=e}start(e,{snapToCursor:t=!1,distanceThreshold:n}={}){let{presenceContext:r}=this.visualElement;if(r&&r.isPresent===!1)return;let i=e=>{t&&this.snapToCursor(e),this.stopAnimation()},a=(e,t)=>{let{drag:n,dragPropagation:r,onDragStart:i}=this.getProps();if(n&&!r&&(this.openDragLock&&this.openDragLock(),this.openDragLock=Ts(n),!this.openDragLock))return;this.latestPointerEvent=e,this.latestPanInfo=t,this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),_l(e=>{let t=this.getAxisMotionValue(e).get()||0;if(xn.test(t)){let{projection:n}=this.visualElement;if(n&&n.layout){let r=n.layout.layoutBox[e];r&&(t=B(r)*(parseFloat(t)/100))}}this.originPoint[e]=t}),i&&F.update(()=>i(e,t),!1,!0),Ja(this.visualElement,`transform`);let{animationState:a}=this.visualElement;a&&a.setActive(`whileDrag`,!0)},o=(e,t)=>{this.latestPointerEvent=e,this.latestPanInfo=t;let{dragPropagation:n,dragDirectionLock:r,onDirectionLock:i,onDrag:a}=this.getProps();if(!n&&!this.openDragLock)return;let{offset:o}=t;if(r&&this.currentDirection===null){this.currentDirection=uf(o),this.currentDirection!==null&&i&&i(this.currentDirection);return}this.updateAxis(`x`,t.point,o),this.updateAxis(`y`,t.point,o),this.visualElement.render(),a&&F.update(()=>a(e,t),!1,!0)},s=(e,t)=>{this.latestPointerEvent=e,this.latestPanInfo=t,this.stop(e,t),this.latestPointerEvent=null,this.latestPanInfo=null},c=()=>{let{dragSnapToOrigin:e}=this.getProps();(e||this.constraints)&&this.startAnimation({x:0,y:0})},{dragSnapToOrigin:l}=this.getProps();this.panSession=new Bd(e,{onSessionStart:i,onStart:a,onMove:o,onSessionEnd:s,resumeAnimation:c},{transformPagePoint:this.visualElement.getTransformPagePoint(),dragSnapToOrigin:l,distanceThreshold:n,contextWindow:Id(this.visualElement),element:this.visualElement.current})}stop(e,t){let n=e||this.latestPointerEvent,r=t||this.latestPanInfo,i=this.isDragging;if(this.cancel(),!i||!r||!n)return;let{velocity:a}=r;this.startAnimation(a);let{onDragEnd:o}=this.getProps();o&&F.postRender(()=>o(n,r))}cancel(){this.isDragging=!1;let{projection:e,animationState:t}=this.visualElement;e&&(e.isAnimationBlocked=!1),this.endPanSession();let{dragPropagation:n}=this.getProps();!n&&this.openDragLock&&(this.openDragLock(),this.openDragLock=null),t&&t.setActive(`whileDrag`,!1)}endPanSession(){this.panSession&&this.panSession.end(),this.panSession=void 0}updateAxis(e,t,n){let{drag:r}=this.getProps();if(!n||!lf(e,r,this.currentDirection))return;let i=this.getAxisMotionValue(e),a=this.originPoint[e]+n[e];this.constraints&&this.constraints[e]&&(a=qd(a,this.constraints[e],this.elastic[e])),i.set(a)}resolveConstraints(){let{dragConstraints:e,dragElastic:t}=this.getProps(),n=this.visualElement.projection&&!this.visualElement.projection.layout?this.visualElement.projection.measure(!1):this.visualElement.projection?.layout,r=this.constraints;e&&bd(e)?this.constraints||=this.resolveRefConstraints():this.constraints=e&&n?Yd(n.layoutBox,e):!1,this.elastic=tf(t),r!==this.constraints&&!bd(e)&&n&&this.constraints&&!this.hasMutatedConstraints&&_l(e=>{this.constraints!==!1&&this.getAxisMotionValue(e)&&(this.constraints[e]=$d(n.layoutBox[e],this.constraints[e]))})}resolveRefConstraints(){let{dragConstraints:e,onMeasureDragConstraints:t}=this.getProps();if(!e||!bd(e))return!1;let n=e.current,{projection:r}=this.visualElement;if(!r||!r.layout)return!1;r.root&&(r.root.scroll=void 0,r.root.updateScroll());let i=hs(n,r.root,this.visualElement.getTransformPagePoint()),a=Zd(r.layout.layoutBox,i);if(t){let e=t(Xo(a));this.hasMutatedConstraints=!!e,e&&(a=Yo(e))}return a}startAnimation(e){let{drag:t,dragMomentum:n,dragElastic:r,dragTransition:i,dragSnapToOrigin:a,onDragTransitionEnd:o}=this.getProps(),s=this.constraints||{},c=_l(o=>{if(!lf(o,t,this.currentDirection))return;let c=s&&s[o]||{};(a===!0||a===o)&&(c={min:0,max:0});let l=r?200:1e6,u=r?40:1e7,d={type:`inertia`,velocity:n?e[o]:0,bounceStiffness:l,bounceDamping:u,timeConstant:750,restDelta:1,restSpeed:10,...i,...c};return this.startAxisValueAnimation(o,d)});return Promise.all(c).then(o)}startAxisValueAnimation(e,t){let n=this.getAxisMotionValue(e);return Ja(this.visualElement,e),n.start(Pa(e,n,0,t,this.visualElement,!1))}stopAnimation(){_l(e=>this.getAxisMotionValue(e).stop())}getAxisMotionValue(e){let t=`_drag${e.toUpperCase()}`;return this.visualElement.getProps()[t]||this.visualElement.getValue(e,this.visualElement.latestValues[e]??0)}snapToCursor({clientX:e,clientY:t}){let{drag:n}=this.getProps(),r={x:e,y:t},i=this.visualElement.getTransformPagePoint()?.(r)||r,a=this.visualElement.measureViewportBox();_l(e=>{if(!lf(e,n,this.currentDirection))return;let t=this.getAxisMotionValue(e),{min:r,max:o}=a[e];t.set((t.get()||0)+i[e]-P(r,o,.5))})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;let{drag:e,dragConstraints:t}=this.getProps(),{projection:n}=this.visualElement;if(!bd(t)||!n||!this.constraints)return;this.stopAnimation();let r=this.constraints,i={x:0,y:0};_l(e=>{let t=this.getAxisMotionValue(e).get();i[e]=Qd({min:t,max:t},r[e])});let{transformTemplate:a}=this.visualElement.getProps();this.visualElement.current.style.transform=a?a({},``):`none`,n.root&&n.root.updateScroll(),n.updateLayout(),this.constraints=!1,this.resolveConstraints(),_l(t=>{let n=this.getAxisMotionValue(t);if(!lf(t,e,null)||!n.get())return;let{min:r,max:a}=this.constraints[t];n.set(P(r,a,i[t]))}),this.visualElement.render()}addListeners(){if(!this.visualElement.current)return;af.set(this.visualElement,this);let e=this.visualElement.current,t=Fd(e,`pointerdown`,t=>{let{drag:n,dragListener:r=!0}=this.getProps(),i=t.target,a=i!==e&&Ps(i);n&&r&&!a&&this.start(t)}),n,r=()=>{let{dragConstraints:t}=this.getProps();bd(t)&&t.current&&(this.constraints=this.resolveRefConstraints(),n||=cf(e,t.current,()=>this.scalePositionWithinConstraints()))},{projection:i}=this.visualElement,a=i.addEventListener(`measure`,r);i&&!i.layout&&(i.root&&i.root.updateScroll(),i.updateLayout()),F.read(r);let o=Al(window,`resize`,()=>this.scalePositionWithinConstraints()),s=i.addEventListener(`didUpdate`,(({delta:e,hasLayoutChanged:t})=>{this.isDragging&&t&&(_l(t=>{let n=this.getAxisMotionValue(t);n&&(this.originPoint[t]+=e[t].translate,n.set(n.get()+e[t].translate))}),this.visualElement.render())}));return()=>{o(),t(),a(),s&&s(),n&&n()}}getProps(){let e=this.visualElement.getProps(),{drag:t=!1,dragDirectionLock:n=!1,dragPropagation:r=!1,dragConstraints:i=!1,dragElastic:a=ef,dragMomentum:o=!0}=e;return{...e,drag:t,dragDirectionLock:n,dragPropagation:r,dragConstraints:i,dragElastic:a,dragMomentum:o}}};function sf(e){let t=!0;return()=>{if(t){t=!1;return}e()}}function cf(e,t,n){let r=tc(e,sf(n)),i=tc(t,sf(n));return()=>{r(),i()}}function lf(e,t,n){return(t===!0||t===e)&&(n===null||n===e)}function uf(e,t=10){let n=null;return Math.abs(e.y)>t?n=`y`:Math.abs(e.x)>t&&(n=`x`),n}var df=class extends Ec{constructor(e){super(e),this.removeGroupControls=bt,this.removeListeners=bt,this.controls=new of(e)}mount(){let{dragControls:e}=this.node.getProps();e&&(this.removeGroupControls=e.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||bt}update(){let{dragControls:e}=this.node.getProps(),{dragControls:t}=this.node.prevProps||{};e!==t&&(this.removeGroupControls(),e&&(this.removeGroupControls=e.subscribe(this.controls)))}unmount(){this.removeGroupControls(),this.removeListeners(),this.controls.isDragging||this.controls.endPanSession()}},ff=e=>(t,n)=>{e&&F.update(()=>e(t,n),!1,!0)},pf=class extends Ec{constructor(){super(...arguments),this.removePointerDownListener=bt}onPointerDown(e){this.session=new Bd(e,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint(),contextWindow:Id(this.node)})}createPanHandlers(){let{onPanSessionStart:e,onPanStart:t,onPan:n,onPanEnd:r}=this.node.getProps();return{onSessionStart:ff(e),onStart:ff(t),onMove:ff(n),onEnd:(e,t)=>{delete this.session,r&&F.postRender(()=>r(e,t))}}}mount(){this.removePointerDownListener=Fd(this.node.current,`pointerdown`,e=>this.onPointerDown(e))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}},mf=!1,hf=class extends m.Component{componentDidMount(){let{visualElement:e,layoutGroup:t,switchLayoutGroup:n,layoutId:r}=this.props,{projection:i}=e;i&&(t.group&&t.group.add(i),n&&n.register&&r&&n.register(i),mf&&i.root.didUpdate(),i.addEventListener(`animationComplete`,()=>{this.safeToRemove()}),i.setOptions({...i.options,layoutDependency:this.props.layoutDependency,onExitComplete:()=>this.safeToRemove()})),Ll.hasEverUpdated=!0}getSnapshotBeforeUpdate(e){let{layoutDependency:t,visualElement:n,drag:r,isPresent:i}=this.props,{projection:a}=n;return a?(a.isPresent=i,e.layoutDependency!==t&&a.setOptions({...a.options,layoutDependency:t}),mf=!0,r||e.layoutDependency!==t||t===void 0||e.isPresent!==i?a.willUpdate():this.safeToRemove(),e.isPresent!==i&&(i?a.promote():a.relegate()||F.postRender(()=>{let e=a.getStack();(!e||!e.members.length)&&this.safeToRemove()})),null):null}componentDidUpdate(){let{visualElement:e,layoutAnchor:t}=this.props,{projection:n}=e;n&&(n.options.layoutAnchor=t,n.root.didUpdate(),xs.postRender(()=>{!n.currentAnimation&&n.isLead()&&this.safeToRemove()}))}componentWillUnmount(){let{visualElement:e,layoutGroup:t,switchLayoutGroup:n}=this.props,{projection:r}=e;mf=!0,r&&(r.scheduleCheckAfterUnmount(),t&&t.group&&t.group.remove(r),n&&n.deregister&&n.deregister(r))}safeToRemove(){let{safeToRemove:e}=this.props;e&&e()}render(){return null}};function gf(e){let[t,n]=ju(),r=(0,m.useContext)(ct);return(0,h.jsx)(hf,{...e,layoutGroup:r,switchLayoutGroup:(0,m.useContext)(yd),isPresent:t,safeToRemove:n})}var _f={pan:{Feature:pf},drag:{Feature:df,ProjectionNode:Su,MeasureLayout:gf}};function vf(e,t,n){let{props:r}=e;e.animationState&&r.whileHover&&e.animationState.setActive(`whileHover`,n===`Start`);let i=r[`onHover`+n];i&&F.postRender(()=>i(t,Nd(t)))}var yf=class extends Ec{mount(){let{current:e}=this.node;e&&(this.unmount=Os(e,(e,t)=>(vf(this.node,t,`Start`),e=>vf(this.node,e,`End`))))}unmount(){}},bf=class extends Ec{constructor(){super(...arguments),this.isActive=!1}onFocus(){let e=!1;try{e=this.node.current.matches(`:focus-visible`)}catch{e=!0}e&&this.node.animationState&&(this.node.animationState.setActive(`whileFocus`,!0),this.isActive=!0)}onBlur(){this.isActive&&this.node.animationState&&(this.node.animationState.setActive(`whileFocus`,!1),this.isActive=!1)}mount(){this.unmount=xt(Al(this.node.current,`focus`,()=>this.onFocus()),Al(this.node.current,`blur`,()=>this.onBlur()))}unmount(){}};function xf(e,t,n){let{props:r}=e;if(e.current instanceof HTMLButtonElement&&e.current.disabled)return;e.animationState&&r.whileTap&&e.animationState.setActive(`whileTap`,n===`Start`);let i=r[`onTap`+(n===`End`?``:n)];i&&F.postRender(()=>i(t,Nd(t)))}var Sf=class extends Ec{mount(){let{current:e}=this.node;if(!e)return;let{globalTapTarget:t,propagate:n}=this.node.props;this.unmount=Vs(e,(e,t)=>(xf(this.node,t,`Start`),(e,{success:t})=>xf(this.node,e,t?`End`:`Cancel`)),{useGlobalTarget:t,stopPropagation:n?.tap===!1})}unmount(){}},Cf=new WeakMap,wf=new WeakMap,Tf=e=>{let t=Cf.get(e.target);t&&t(e)},Ef=e=>{e.forEach(Tf)};function Df({root:e,...t}){let n=e||document;wf.has(n)||wf.set(n,{});let r=wf.get(n),i=JSON.stringify(t);return r[i]||(r[i]=new IntersectionObserver(Ef,{root:e,...t})),r[i]}function Of(e,t,n){let r=Df(t);return Cf.set(e,n),r.observe(e),()=>{Cf.delete(e),r.unobserve(e)}}var kf={some:0,all:1},Af=class extends Ec{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.stopObserver?.();let{viewport:e={}}=this.node.getProps(),{root:t,margin:n,amount:r=`some`,once:i}=e,a={root:t?t.current:void 0,rootMargin:n,threshold:typeof r==`number`?r:kf[r]},o=e=>{let{isIntersecting:t}=e;if(this.isInView===t||(this.isInView=t,i&&!t&&this.hasEnteredView))return;t&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive(`whileInView`,t);let{onViewportEnter:n,onViewportLeave:r}=this.node.getProps(),a=t?n:r;a&&a(e)};this.stopObserver=Of(this.node.current,a,o)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>`u`)return;let{props:e,prevProps:t}=this.node;[`amount`,`margin`,`root`].some(jf(e,t))&&this.startObserver()}unmount(){this.stopObserver?.(),this.hasEnteredView=!1,this.isInView=!1}};function jf({viewport:e={}},{viewport:t={}}={}){return n=>e[n]!==t[n]}var Mf={inView:{Feature:Af},tap:{Feature:Sf},focus:{Feature:bf},hover:{Feature:yf}},Nf={layout:{ProjectionNode:Su,MeasureLayout:gf}},Pf=Od({...Md,...Mf,..._f,...Nf},kd);function Ff(e){let t=lt(()=>wa(e)),{isStatic:n}=(0,m.useContext)(Cu);if(n){let[,n]=(0,m.useState)(e);(0,m.useEffect)(()=>t.on(`change`,n),[])}return t}function H(){!_c.current&&yc();let[e]=(0,m.useState)(gc.current);return e}function If(e){return typeof e==`object`&&!Array.isArray(e)}function Lf(e,t,n,r){return e==null?[]:typeof e==`string`&&If(t)?Co(e,n,r):e instanceof NodeList?Array.from(e):Array.isArray(e)?e.filter(e=>e!=null):[e]}function Rf(e,t,n){return e*(t+1)+n*t}function zf(e,t,n,r){return typeof t==`number`?t:t.startsWith(`-`)||t.startsWith(`+`)?Math.max(0,e+parseFloat(t)):t===`<`?n:t.startsWith(`<`)?Math.max(0,n+parseFloat(t.slice(1))):r.get(t)??e}function Bf(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];i.at>t&&i.at<n&&(pt(e,i),r--)}}function Vf(e,t,n,r,i,a){Bf(e,i,a);for(let o=0;o<t.length;o++)e.push({value:t[o],at:P(i,a,r[o]),easing:Gt(n,o)})}function Hf(e,t,n=0){let r=t+1+t*n;for(let t=0;t<e.length;t++)e[t]=e[t]/r}function Uf(e,t){return e.at===t.at?e.value===null?1:t.value===null?-1:0:e.at-t.at}var Wf=`easeInOut`,Gf=20;function Kf(e,{defaultTransition:t={},...n}={},r,i){let a=t.duration||.3,o=new Map,s=new Map,c={},l=new Map,u=0,d=0,f=0;for(let n=0;n<e.length;n++){let o=e[n];if(typeof o==`string`){l.set(o,d);continue}if(!Array.isArray(o)){l.set(o.name,zf(d,o.at,u,l));continue}let[p,m,h={}]=o;h.at!==void 0&&(d=zf(d,h.at,u,l));let g=0,_=(e,n,r,o=0,s=0)=>{let c=Yf(e),{delay:l=0,times:u=Fr(c),type:p=t.type||`keyframes`,repeat:m,repeatType:h,repeatDelay:_=0,...v}=n,{ease:y=t.ease||`easeOut`,duration:b}=n,x=typeof l==`function`?l(o,s):l,S=c.length,C=Xi(p)?p:i?.[p||`keyframes`];if(S<=2&&C){let e=100;if(S===2&&Qf(c)){let t=c[1]-c[0];e=Math.abs(t)}let n={...t,...v};b!==void 0&&(n.duration=O(b));let r=yr(n,e,C);y=r.ease,b=r.duration}b??=a;let ee=d+x;u.length===1&&u[0]===0&&(u[1]=1);let w=u.length-c.length;if(w>0&&Pr(u,w),c.length===1&&c.unshift(null),m&&`${m}${Gf}`,m&&m<Gf){let e=b>0?_/b:0;b=Rf(b,m,_);let t=[...c],n=[...u];y=Array.isArray(y)?[...y]:[y];let r=[...y],i=h===`reverse`||h===`mirror`,a=t,o=r;i&&(a=[...t].reverse(),h===`reverse`&&(o=[...r].reverse().map(e=>typeof e==`function`?Nt(e):e)));for(let s=0;s<m;s++){let l=i&&s%2==0,d=l?a:t,f=l?o:r,p=(s+1)*(1+e);e>0&&(c.push(c[c.length-1]),u.push(p),y.push(`linear`)),c.push(...d);for(let e=0;e<d.length;e++)u.push(n[e]+p),y.push(e===0?`linear`:Gt(f,e-1))}Hf(u,m,e)}let te=ee+b;Vf(r,c,y,u,ee,te),g=Math.max(x+b,g),f=Math.max(te,f)};if(R(p)){let e=qf(p,s);_(m,h,Jf(`default`,e))}else{let e=Lf(p,m,r,c),t=e.length;for(let n=0;n<t;n++){m=m,h=h;let r=e[n],i=qf(r,s);for(let e in m)_(m[e],Xf(h,e),Jf(e,i),n,t)}}u=d,d+=g}return s.forEach((e,r)=>{for(let i in e){let a=e[i];a.sort(Uf);let s=[],c=[],l=[];for(let e=0;e<a.length;e++){let{at:t,value:n,easing:r}=a[e];s.push(n),c.push(St(0,f,t)),l.push(r||`easeOut`)}c[0]!==0&&(c.unshift(0),s.unshift(s[0]),l.unshift(Wf)),c[c.length-1]!==1&&(c.push(1),s.push(null)),o.has(r)||o.set(r,{keyframes:{},transition:{}});let u=o.get(r);u.keyframes[i]=s;let{type:d,...p}=t;u.transition[i]={...p,duration:f,ease:l,times:c,...n}}}),o}function qf(e,t){return!t.has(e)&&t.set(e,{}),t.get(e)}function Jf(e,t){return t[e]||(t[e]=[]),t[e]}function Yf(e){return Array.isArray(e)?e:[e]}function Xf(e,t){return e&&e[t]?{...e,...e[t]}:{...e}}var Zf=e=>typeof e==`number`,Qf=e=>e.every(Zf);function $f(e,t){return R(e)||typeof e==`number`||typeof e==`string`&&!If(t)}function ep(e,t,n,r){let i=[];if($f(e,t))i.push(kl(e,If(t)&&t.default||t,n&&(n.default||n)));else{if(e==null)return i;let a=Lf(e,t,r),o=a.length;for(let e=0;e<o;e++){let r=a[e],s={...n};`delay`in s&&typeof s.delay==`function`&&(s.delay=s.delay(e,o)),r instanceof Element?i.push(...ys(r,t,s,cc.get(r))):i.push(...vo(go(r)??bs,r,t,s))}}return i}function tp(e,t,n){let r=[];return Kf(e.map(e=>{if(Array.isArray(e)&&typeof e[0]==`function`){let t=e[0],n=wa(0);return n.on(`change`,t),e.length===1?[n,[0,1]]:e.length===2?[n,[0,1],e[1]]:[n,e[1],e[2]]}return e}),t,n,{spring:Ar}).forEach(({keyframes:e,transition:t},n)=>{r.push(...ep(n,e,t))}),r}function np(e){return Array.isArray(e)&&e.some(Array.isArray)}function rp(e={}){let{scope:t,reduceMotion:n,skipAnimations:r}=e;function i(e,i,a){let o=[],s,c={};if(n!==void 0&&(c.reduceMotion=n),r!==void 0&&(c.skipAnimations=r),np(e)){let{onComplete:n,...r}=i||{};typeof n==`function`&&(s=n),o=tp(e,{...c,...r},t)}else{let{onComplete:n,...r}=a||{};typeof n==`function`&&(s=n),o=ep(e,i,{...c,...r},t)}let l=new va(o);return s&&l.finished.then(s),t&&(t.animations.push(l),l.finished.then(()=>{pt(t.animations,l)})),l}return i}var ip=Object.assign(rp(),{addEffect:mo,removeEffect:ho}),U=Pf,ap=o((e=>{var t=d();function n(e){var t=`https://react.dev/errors/`+e;if(1<arguments.length){t+=`?args[]=`+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+=`&args[]=`+encodeURIComponent(arguments[n])}return`Minified React error #`+e+`; visit `+t+` for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`}function r(){}var i={d:{f:r,r:function(){throw Error(n(522))},D:r,C:r,L:r,m:r,X:r,S:r,M:r},p:0,findDOMNode:null},a=Symbol.for(`react.portal`),o=Symbol.for(`react.recoverable`),s=Symbol.for(`react.optimistic_key`);function c(e,t,n){var r=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:a,key:r==null?null:r===s?s:``+r,children:e,containerInfo:t,implementation:n}}var l=t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function u(e,t){if(e===`font`)return``;if(typeof t==`string`)return t===`use-credentials`?t:``}e.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=i,e.browser=function(e){return{$$typeof:o,_reason:e}},e.createPortal=function(e,t){var r=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!t||t.nodeType!==1&&t.nodeType!==9&&t.nodeType!==11)throw Error(n(299));return c(e,t,null,r)},e.flushSync=function(e){var t=l.T,n=i.p;try{if(l.T=null,i.p=2,e)return e()}finally{l.T=t,i.p=n,i.d.f()}},e.preconnect=function(e,t){typeof e==`string`&&(t?(t=t.crossOrigin,t=typeof t==`string`?t===`use-credentials`?t:``:void 0):t=null,i.d.C(e,t))},e.prefetchDNS=function(e){typeof e==`string`&&i.d.D(e)},e.preinit=function(e,t){if(typeof e==`string`&&t&&typeof t.as==`string`){var n=t.as,r=u(n,t.crossOrigin),a=typeof t.integrity==`string`?t.integrity:void 0,o=typeof t.fetchPriority==`string`?t.fetchPriority:void 0;n===`style`?i.d.S(e,typeof t.precedence==`string`?t.precedence:void 0,{crossOrigin:r,integrity:a,fetchPriority:o}):n===`script`&&i.d.X(e,{crossOrigin:r,integrity:a,fetchPriority:o,nonce:typeof t.nonce==`string`?t.nonce:void 0})}},e.preinitModule=function(e,t){if(typeof e==`string`){if(typeof t==`object`&&t){if(t.as==null||t.as===`script`){var n=u(t.as,t.crossOrigin);i.d.M(e,{crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0,fetchPriority:typeof t.fetchPriority==`string`?t.fetchPriority:void 0})}}else t??i.d.M(e)}},e.preload=function(e,t){if(typeof e==`string`&&typeof t==`object`&&t&&typeof t.as==`string`){var n=t.as,r=u(n,t.crossOrigin);i.d.L(e,n,{crossOrigin:r,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0,type:typeof t.type==`string`?t.type:void 0,fetchPriority:typeof t.fetchPriority==`string`?t.fetchPriority:void 0,referrerPolicy:typeof t.referrerPolicy==`string`?t.referrerPolicy:void 0,imageSrcSet:typeof t.imageSrcSet==`string`?t.imageSrcSet:void 0,imageSizes:typeof t.imageSizes==`string`?t.imageSizes:void 0,media:typeof t.media==`string`?t.media:void 0})}},e.preloadModule=function(e,t){if(typeof e==`string`){if(t){var n=u(t.as,t.crossOrigin);i.d.m(e,{as:typeof t.as==`string`&&t.as!==`script`?t.as:void 0,crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0,fetchPriority:typeof t.fetchPriority==`string`?t.fetchPriority:void 0})}else i.d.m(e)}},e.requestFormReset=function(e){i.d.r(e)},e.unstable_batchedUpdates=function(e,t){return e(t)},e.useFormState=function(e,t,n){return l.H.useFormState(e,t,n)},e.useFormStatus=function(){return l.H.useHostTransitionStatus()},e.version=`19.3.0`})),op=o(((e,t)=>{function n(){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<`u`&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE==`function`)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=ap()})),sp=[`none`,`requests`,`tokens`,`cost`,`quota`,`alerts`];function cp(){return typeof window>`u`?void 0:window.__ASTRA__}function lp(e=cp()){return e?.shell===`desktop`?`desktop`:`web`}function up(e=cp(),t=globalThis.navigator){if(e?.platform)return e.platform;let n=`${t?.userAgent??``} ${t?.platform??``}`.toLowerCase();return n.includes(`mac`)?`darwin`:n.includes(`win`)?`win32`:n.includes(`linux`)?`linux`:`other`}function dp(e=globalThis.navigator){let t=e?.userAgent??``;return/Chrome\/|Electron\//.test(t)}var fp=lp(),pp=up(),mp=fp===`desktop`,hp=pp===`darwin`;function gp(e=mp,t=pp){return e&&t===`darwin`?78:68}function _p(e=document.documentElement){e.dataset.shell=fp,e.dataset.platform=pp,dp()&&e.classList.add(`refract`)}var vp=hp?`⌘`:`Ctrl+`,yp=class extends Error{status;details;constructor(e,t,n){super(e),this.status=t,this.details=n,this.name=`ApiError`}get isNetwork(){return this.status===0}};function bp(){return cp()?.apiBase.replace(/\/+$/,``)??``}async function W(e,t,n,r){let i={Accept:`application/json`};e!==`GET`&&(i[`X-Astra-Admin`]=`1`),n!==void 0&&(i[`Content-Type`]=`application/json`);let a;try{a=await fetch(bp()+t,{method:e,headers:i,body:n===void 0?void 0:JSON.stringify(n),credentials:`include`,signal:r})}catch(e){throw e?.name===`AbortError`?e:new yp(e?.message||`Network error`,0)}if(a.status===204)return;let o=await a.text(),s;if(o)try{s=JSON.parse(o)}catch{s=o}if(!a.ok){let e=s&&typeof s==`object`?s:{};throw new yp(e.error||typeof s==`string`&&s||`HTTP ${a.status}`,a.status,e.details)}return s}function G(e){let t=new URLSearchParams;for(let[n,r]of Object.entries(e))r!=null&&r!==``&&t.set(n,String(r));let n=t.toString();return n?`?${n}`:``}var K=encodeURIComponent;function xp(){let e=``;return t=>{e+=t;let n=[];for(;;){let t=/\r\n\r\n|\n\n|\r\r/.exec(e);if(!t)return n;let r=e.slice(0,t.index);e=e.slice(t.index+t[0].length);let i=``,a=[];for(let e of r.split(/\r\n|\n|\r/)){if(e.startsWith(`:`))continue;let t=e.indexOf(`:`),n=t<0?e:e.slice(0,t),r=t<0?``:e.slice(t+1);r.startsWith(` `)&&(r=r.slice(1)),n===`event`?i=r:n===`data`&&a.push(r)}if(a.length===0)continue;let o=a.join(`
10
+ `),s=o;try{s=JSON.parse(o)}catch{}n.push({event:i,data:s})}}}async function Sp(e,t,n,r){return wp(`POST`,e,t,n,r)}async function Cp(e,t,n,r){return wp(`GET`,e,void 0,t,n,r)}async function wp(e,t,n,r,i,a){let o;try{o=await fetch(bp()+t,{method:e,headers:e===`POST`?{Accept:`text/event-stream`,"Content-Type":`application/json`,"X-Astra-Admin":`1`}:{Accept:`text/event-stream`},body:e===`POST`?JSON.stringify(n):void 0,credentials:`include`,signal:i})}catch(e){throw e?.name===`AbortError`?e:new yp(e?.message||`Network error`,0)}if(!o.ok||!o.body){let e=await o.text().catch(()=>``),t;if(e)try{t=JSON.parse(e)}catch{t=e}let n=t&&typeof t==`object`?t:{};throw new yp(n.error||typeof t==`string`&&t||`HTTP ${o.status}`,o.status,n.details)}a?.();let s=o.body.getReader(),c=new TextDecoder,l=xp();for(;;){let{done:e,value:t}=await s.read();if(e)break;for(let e of l(c.decode(t,{stream:!0})))r(e)}for(let e of l(c.decode()))r(e)}var q={health:[`health`],version:[`version`],auth:[`auth`],settings:[`settings`],tunnel:[`tunnel`],update:[`update`],models:(e,t)=>[`models`,e??``,t??``],model:e=>[`model`,e],priceKeys:[`price-keys`],templates:[`provider-templates`],quotaTemplates:[`provider-quota-templates`],providers:[`providers`],importSources:[`import-sources`],provider:e=>[`provider`,e],providerModels:e=>[`provider-models`,e],remoteModels:e=>[`remote-models`,e],templateUpdate:e=>[`template-update`,e],clients:[`clients`],claudeDirect:[`claude-direct`],claudeDirectRequests:e=>[`claude-direct-requests`,e],tokens:[`tokens`],webhooks:[`webhooks`],webhookDeliveries:e=>[`webhook-deliveries`,e],alertEvents:[`alert-events`],alertRules:[`alert-rules`],alertStates:[`alert-states`],clientModels:e=>[`client-models`,e],backups:e=>[`backups`,e],clientInstallJob:e=>[`client-install-job`,e],privacy:[`privacy`],privacyEvents:e=>[`privacy-events`,e],privacyEventStats:(...e)=>[`privacy-event-stats`,...e],providerAccounts:e=>[`provider-accounts`,e],subscriptionPolicy:e=>[`subscription-policy`,e],localCodexLogin:[`local-codex-login`],localCopilotLogin:[`local-copilot-login`],plugins:[`plugins`],pluginJob:e=>[`plugin-job`,e],pluginHost:[`plugin-host`],pluginMarket:[`plugin-market`],pluginSearch:e=>[`plugin-search`,e],pluginMethods:e=>[`plugin-methods`,e],pluginSignIn:(e,t)=>[`plugin-sign-in`,e,t],pluginUsage:(e,t)=>[`plugin-usage`,e,t],pluginCheckin:e=>[`plugin-checkin`,e],magpieImport:[`magpie-import`],accountImportInfo:e=>[`account-import-info`,e],resetCredits:e=>[`reset-credits`,e],requests:e=>[`requests`,e],request:e=>[`request`,e],stats:(e,...t)=>[`stats`,e,...t]},Tp=()=>E({queryKey:q.health,queryFn:({signal:e})=>W(`GET`,`/api/health`,void 0,e),refetchInterval:5e3,retry:!1}),Ep=()=>E({queryKey:q.version,queryFn:()=>W(`GET`,`/api/version`),staleTime:1/0}),Dp=()=>E({queryKey:q.auth,queryFn:()=>W(`GET`,`/api/auth/status`),retry:!1});function Op(){let e=_();return D({mutationFn:e=>W(`POST`,`/api/auth/login`,{password:e}),onSuccess:()=>e.invalidateQueries()})}function kp(){let e=_();return D({mutationFn:()=>W(`POST`,`/api/auth/logout`),onSuccess:()=>e.invalidateQueries({queryKey:q.auth})})}var Ap=()=>E({queryKey:q.settings,queryFn:()=>W(`GET`,`/api/settings`)});function jp(){let e=_();return D({mutationFn:e=>W(`PATCH`,`/api/settings`,e),onSuccess:t=>e.setQueryData(q.settings,t)})}function Mp(){let e=_();return D({mutationFn:e=>W(`POST`,`/api/auth/password`,{password:e}),onSuccess:()=>e.invalidateQueries({queryKey:q.tunnel})})}var Np=[`downloading`,`starting`,`reconnecting`],Pp=(e=!0)=>E({queryKey:q.tunnel,queryFn:({signal:e})=>W(`GET`,`/api/tunnel`,void 0,e),enabled:e,refetchInterval:e=>{let t=e.state.data;return t&&Np.includes(t.state)?1500:t?.enabled?15e3:6e4}});function Fp(){let e=_();return D({mutationFn:e=>W(`PUT`,`/api/tunnel`,e),onSuccess:t=>e.setQueryData(q.tunnel,t)})}function Ip(){return D({mutationFn:()=>W(`POST`,`/api/tunnel/cloudflared/detect`)})}function Lp(){let e=_();return D({mutationFn:e=>W(`POST`,e?`/api/tunnel/start`:`/api/tunnel/stop`),onSuccess:t=>e.setQueryData(q.tunnel,t)})}var Rp=()=>E({queryKey:q.update,queryFn:({signal:e})=>W(`GET`,`/api/update/status`,void 0,e),refetchInterval:3e5});function zp(){let e=_();return D({mutationFn:()=>W(`POST`,`/api/update/check`),onSuccess:t=>e.setQueryData(q.update,t)})}var Bp=(e,t)=>E({queryKey:q.models(e,t),queryFn:()=>W(`GET`,`/api/models${G({search:e,vendor:t})}`),placeholderData:e=>e}),Vp=e=>E({queryKey:q.model(e??``),queryFn:()=>W(`GET`,`/api/models/${K(e)}`),enabled:!!e}),Hp=()=>E({queryKey:q.priceKeys,queryFn:()=>W(`GET`,`/api/price-keys`)});function Up(e,t){e.invalidateQueries({queryKey:[`models`]}),e.invalidateQueries({queryKey:t?q.model(t):[`model`]}),e.invalidateQueries({queryKey:q.priceKeys}),e.invalidateQueries({queryKey:[`provider-models`]}),e.invalidateQueries({queryKey:[`client-models`]}),e.invalidateQueries({queryKey:[`remote-models`]})}function Wp(){let e=_();return D({mutationFn:e=>W(`POST`,`/api/models`,e),onSuccess:t=>Up(e,t.id)})}function Gp(e){let t=_();return D({mutationFn:t=>W(`PUT`,`/api/models/${K(e)}`,t),onSuccess:()=>Up(t,e)})}function Kp(){let e=_();return D({mutationFn:e=>W(`DELETE`,`/api/models/${K(e)}`),onSuccess:()=>Up(e)})}function qp(e){let t=_();return D({mutationFn:t=>W(`POST`,`/api/models/${K(e)}/reset-field`,{field:t}),onSuccess:()=>Up(t,e)})}function Jp(e){let t=_();return D({mutationFn:t=>W(`PUT`,`/api/models/${K(e)}/prices/${K(t.priceKey)}`,{upstreamModelId:t.upstreamModelId??null,pricing:t.pricing}),onSuccess:()=>Up(t,e)})}function Yp(e){let t=_();return D({mutationFn:t=>W(`DELETE`,`/api/models/${K(e)}/prices/${K(t)}`),onSuccess:()=>Up(t,e)})}var Xp=()=>D({mutationFn:()=>W(`POST`,`/api/models/sync/preview`)});function Zp(){let e=_();return D({mutationFn:e=>W(`POST`,`/api/models/sync/apply`,{changeIds:e}),onSuccess:()=>Up(e)})}var Qp=()=>D({mutationFn:e=>W(`POST`,`/api/billing/simulate`,e)}),$p=()=>E({queryKey:q.templates,queryFn:()=>W(`GET`,`/api/provider-templates`),staleTime:3e5}),em=()=>E({queryKey:q.providers,queryFn:()=>W(`GET`,`/api/providers`)}),tm=e=>E({queryKey:q.provider(e??``),queryFn:()=>W(`GET`,`/api/providers/${K(e)}`),enabled:!!e});function nm(e,t){e.invalidateQueries({queryKey:q.providers}),e.invalidateQueries({queryKey:t?q.provider(t):[`provider`]}),e.invalidateQueries({queryKey:q.clients}),e.invalidateQueries({queryKey:[`client-models`]})}var rm=e=>E({queryKey:q.importSources,queryFn:()=>W(`GET`,`/api/providers/import/sources`),enabled:e,staleTime:0,gcTime:0});function im(){let e=_();return D({mutationFn:e=>W(`POST`,`/api/providers/import`,e),onSuccess:()=>{nm(e),e.invalidateQueries({queryKey:q.importSources})}})}function am(){let e=_();return D({mutationFn:e=>W(`POST`,`/api/providers`,e),onSuccess:t=>nm(e,t.id)})}function om(e){let t=_();return D({mutationFn:t=>W(`PATCH`,`/api/providers/${K(e)}`,t),onSuccess:n=>{t.setQueryData(q.provider(e),n),nm(t,e),t.invalidateQueries({queryKey:q.providerModels(e)}),t.invalidateQueries({queryKey:q.remoteModels(e)})}})}function sm(e){let t=_();return D({mutationFn:t=>W(`PUT`,`/api/providers/${K(e)}/model-map`,{map:t}),onSuccess:n=>{t.setQueryData(q.provider(e),n),nm(t,e)}})}function cm(){let e=_();return D({mutationFn:e=>W(`DELETE`,`/api/providers/${K(e)}`),onSuccess:()=>nm(e)})}var lm=()=>E({queryKey:q.quotaTemplates,queryFn:()=>W(`GET`,`/api/provider-quota/templates`),staleTime:1/0});function um(e,t,n){let r=e=>e.id===t?{...e,quotaConfig:n.config,quota:n.snapshot??null,quotaCheckedAtUtc:n.checkedAtUtc??null}:e;e.setQueryData(q.provider(t),e=>e&&r(e)),e.setQueryData(q.providers,e=>e?.map(r))}function dm(){let e=_();return D({mutationFn:e=>W(`POST`,`/api/providers/${K(e)}/quota`),onSuccess:(t,n)=>um(e,n,t),onError:(t,n)=>void e.invalidateQueries({queryKey:q.provider(n)})})}function fm(e){let t=_();return D({mutationFn:t=>W(`PUT`,`/api/providers/${K(e)}/quota/config`,t),onSuccess:n=>um(t,e,n)})}var pm=e=>D({mutationFn:t=>W(`POST`,`/api/providers/${K(e)}/quota/test`,t)});function mm(){let e=_();return D({mutationFn:e=>W(`POST`,`/api/providers/${K(e)}/duplicate`),onSuccess:()=>nm(e)})}function hm(e,t,n,r){return Sp(`/api/providers/${K(e)}/test`,t,n,r)}var gm=(e,t)=>E({queryKey:q.remoteModels(e),queryFn:()=>W(`GET`,`/api/providers/${K(e)}/remote-models`),enabled:t,retry:!1}),_m=(e,t)=>E({queryKey:q.templateUpdate(e),queryFn:()=>W(`GET`,`/api/providers/${K(e)}/template-update`),enabled:t});function vm(e){let t=_();return D({mutationFn:()=>W(`POST`,`/api/providers/${K(e)}/template-update`),onSuccess:()=>{nm(t,e),t.invalidateQueries({queryKey:q.providerModels(e)}),t.invalidateQueries({queryKey:q.remoteModels(e)}),t.invalidateQueries({queryKey:q.templateUpdate(e)})}})}var ym=e=>E({queryKey:q.providerModels(e??``),queryFn:()=>W(`GET`,`/api/providers/${K(e)}/models`),enabled:!!e});function bm(e,t){e.invalidateQueries({queryKey:q.providerModels(t)}),e.invalidateQueries({queryKey:q.remoteModels(t)}),e.invalidateQueries({queryKey:[`model`]}),nm(e,t)}function xm(e){let t=_();return D({mutationFn:t=>W(`POST`,`/api/providers/${K(e)}/models`,{modelIds:t}),onSuccess:()=>bm(t,e)})}function Sm(e){let t=_();return D({mutationFn:t=>{let{pmId:n,...r}=t;return W(`PATCH`,`/api/providers/${K(e)}/models/${n}`,r)},onSuccess:()=>bm(t,e)})}function Cm(e){let t=_();return D({mutationFn:t=>W(`DELETE`,`/api/providers/${K(e)}/models/${t}`),onSuccess:()=>bm(t,e)})}var wm=()=>E({queryKey:q.privacy,queryFn:()=>W(`GET`,`/api/privacy`)});function Tm(){let e=_();return D({mutationFn:e=>W(`PUT`,`/api/privacy`,e),onSuccess:t=>e.setQueryData(q.privacy,e=>e&&{...e,settings:t})})}var Em=()=>D({mutationFn:e=>W(`POST`,`/api/privacy/dry-run`,e)}),Dm=(e,t)=>E({queryKey:q.privacyEvents(e),queryFn:()=>W(`GET`,`/api/privacy/events${G({...e})}`),placeholderData:e=>e,refetchInterval:t?5e3:!1}),Om=e=>E({queryKey:q.privacyEventStats(e),queryFn:()=>W(`GET`,`/api/privacy/events/stats${G({range:e})}`),refetchInterval:15e3,placeholderData:e=>e}),km=(e,t=!0)=>E({queryKey:q.providerAccounts(e??``),queryFn:()=>W(`GET`,`/api/providers/${K(e)}/accounts`),enabled:!!e&&t});function Am(e,t){e.invalidateQueries({queryKey:q.providerAccounts(t)})}function jm(e){let t=_();return D({mutationFn:e=>W(`POST`,`/api/provider-accounts/${K(e)}/refresh`),onSuccess:()=>Am(t,e)})}function Mm(e){let t=_();return D({mutationFn:e=>W(`POST`,`/api/provider-accounts/${K(e)}/quota`),onSuccess:()=>Am(t,e)})}function Nm(e,t){let n=_();return D({mutationFn:t,onSuccess:t=>n.setQueryData(q.providerAccounts(e),t)})}var Pm=e=>Nm(e,e=>W(`POST`,`/api/provider-accounts/${K(e)}/activate`)),Fm=e=>Nm(e,({id:e,...t})=>W(`PATCH`,`/api/provider-accounts/${K(e)}`,t)),Im=e=>Nm(e,t=>W(`PUT`,`/api/providers/${K(e)}/accounts/order`,{ids:t})),Lm=(e,t=!0)=>E({queryKey:q.subscriptionPolicy(e),queryFn:()=>W(`GET`,`/api/providers/${K(e)}/subscription-policy`),enabled:t});function Rm(e){let t=_();return D({mutationFn:t=>W(`PUT`,`/api/providers/${K(e)}/subscription-policy`,t),onSuccess:n=>{t.setQueryData(q.subscriptionPolicy(e),n),t.invalidateQueries({queryKey:q.provider(e)})}})}function zm(e){let t=_();return D({mutationFn:e=>W(`DELETE`,`/api/provider-accounts/${K(e)}`),onSuccess:()=>Am(t,e)})}var Bm=e=>D({mutationFn:(t={})=>W(`POST`,`/api/providers/${K(e)}/accounts/login`,{accountId:t.accountId||void 0,httpProxy:t.httpProxy?.trim()||void 0})}),Vm=e=>D({mutationFn:t=>W(`POST`,`/api/providers/${K(e)}/accounts/login/${K(t)}/poll`)}),Hm=(e=!0)=>E({queryKey:q.localCodexLogin,queryFn:()=>W(`GET`,`/api/subscription/codex/local-login`),enabled:e,retry:!1});function Um(e){let t=_();return D({mutationFn:()=>W(`POST`,`/api/providers/${K(e)}/accounts/import-codex`,{}),onSuccess:()=>Am(t,e)})}var Wm=e=>D({mutationFn:t=>W(`POST`,`/api/providers/${K(e)}/accounts/login/${K(t.state)}/complete`,{code:t.code})}),Gm=(e=!0)=>E({queryKey:q.localCopilotLogin,queryFn:()=>W(`GET`,`/api/subscription/copilot/local-login`),enabled:e,retry:!1});function Km(e){let t=_();return D({mutationFn:t=>W(`POST`,`/api/providers/${K(e)}/accounts/import-copilot`,{token:t&&t.trim().length>0?t.trim():null}),onSuccess:(n,r)=>{Am(t,e),t.invalidateQueries({queryKey:q.localCopilotLogin})}})}var qm=(e,t=!0)=>E({queryKey:q.accountImportInfo(e),queryFn:()=>W(`GET`,`/api/providers/${K(e)}/accounts/import-info`),enabled:t,staleTime:1/0});function Jm(e){let t=_();return D({mutationFn:t=>W(`POST`,`/api/providers/${K(e)}/accounts/import`,t),onSuccess:(n,r)=>{r.dryRun||Am(t,e)}})}var Ym=(e,t=!0)=>E({queryKey:q.resetCredits(e??``),queryFn:()=>W(`GET`,`/api/provider-accounts/${K(e)}/reset-credits`),enabled:!!e&&t,retry:!1});function Xm(e){let t=_();return D({mutationFn:e=>W(`POST`,`/api/provider-accounts/${K(e.accountId)}/reset-credits/${K(e.creditId)}/consume`,{}),onSuccess:(n,r)=>{Am(t,e),t.invalidateQueries({queryKey:q.resetCredits(r.accountId)})}})}var Zm=()=>E({queryKey:q.clients,queryFn:()=>W(`GET`,`/api/clients`),refetchInterval:e=>e.state.data?.some(e=>e.install?.busy)?2e3:!1}),Qm=()=>th(()=>W(`POST`,`/api/clients/reapply`,{})),$m=(e,t=!0)=>E({queryKey:q.clientModels(e??``),queryFn:()=>W(`GET`,`/api/clients/${e}/models`),enabled:!!e&&t,retry:!1}),eh=(e,t=!0)=>E({queryKey:q.backups(e??``),queryFn:()=>W(`GET`,`/api/clients/${e}/backups`),enabled:!!e&&t});function th(e,t=()=>[]){let n=_();return D({mutationFn:e,onSuccess:(e,r)=>{n.invalidateQueries({queryKey:q.clients}),n.invalidateQueries({queryKey:q.providers}),n.invalidateQueries({queryKey:[`provider`]}),n.invalidateQueries({queryKey:[`client-models`]});for(let e of t(r))n.invalidateQueries({queryKey:e})}})}var nh=()=>th(e=>W(`PUT`,`/api/clients/${e.kind}/binding`,{providerId:e.providerId,accountId:e.accountId}),e=>[q.clientModels(e.kind)]),rh=()=>th(e=>W(`PUT`,`/api/clients/${e.kind}/bindings`,{bindings:e.bindings}),e=>[q.clientModels(e.kind)]),ih=()=>D({mutationFn:e=>W(`POST`,`/api/clients/${e.kind}/preview-enable`,e.req)}),ah=()=>th(e=>W(`POST`,`/api/clients/${e.kind}/enable`,e.req),e=>[q.backups(e.kind)]),oh=()=>th(e=>W(`POST`,`/api/clients/${e}/disable`)),sh=()=>th(e=>W(`POST`,`/api/clients/${e}/force-restore`)),ch=()=>th(e=>W(`POST`,`/api/clients/${e.kind}/backups/${K(e.id)}/restore`),e=>[q.backups(e.kind)]);function lh(){let e=_();return D({mutationFn:e=>W(`POST`,`/api/clients/check-updates`,{force:e}),onSuccess:t=>e.setQueryData(q.clients,t)})}var uh=(e,t=!0)=>E({queryKey:q.clientInstallJob(e??``),queryFn:()=>W(`GET`,`/api/clients/${e}/install`),enabled:!!e&&t,retry:!1,refetchInterval:e=>e.state.data?.state===`running`&&800});function dh(){let e=_();return D({mutationFn:e=>W(`POST`,`/api/clients/${e.kind}/install`,{action:e.action,elevated:e.elevated??!1}),onSuccess:t=>{e.setQueryData(q.clientInstallJob(t.kind),t),e.invalidateQueries({queryKey:q.clients})}})}function fh(){let e=_();return D({mutationFn:e=>W(`POST`,`/api/clients/${e}/install/cancel`,{}),onSuccess:t=>e.setQueryData(q.clientInstallJob(t.kind),t)})}var ph=`/api/clients/claude-code/direct`,mh=e=>E({queryKey:q.claudeDirect,queryFn:()=>W(`GET`,ph),enabled:e,retry:!1});function hh(){let e=_();return D({mutationFn:e=>W(`PUT`,ph,e),onSuccess:t=>{e.setQueryData(q.claudeDirect,t),e.invalidateQueries({queryKey:[`claude-direct-requests`]})}})}var gh=(e,t)=>E({queryKey:q.claudeDirectRequests(e??``),queryFn:()=>W(`GET`,`${ph}/accounts/${K(e)}/requests`),enabled:!!e,retry:!1,refetchInterval:t?5e3:!1}),_h=()=>E({queryKey:q.tokens,queryFn:()=>W(`GET`,`/api/tokens`),refetchInterval:15e3});function vh(e){let t=_();return D({mutationFn:e,onSuccess:()=>{t.invalidateQueries({queryKey:q.tokens}),t.invalidateQueries({queryKey:q.clients})}})}var yh=()=>vh(e=>W(`POST`,`/api/tokens`,e)),bh=()=>vh(e=>{let{id:t,...n}=e;return W(`PATCH`,`/api/tokens/${K(t)}`,n)}),xh=()=>vh(e=>W(`POST`,`/api/tokens/${K(e)}/reset`)),Sh=()=>vh(e=>W(`DELETE`,`/api/tokens/${K(e)}`)),Ch=()=>D({mutationFn:e=>W(`POST`,`/api/tokens/${K(e)}/reveal`)}),wh=(e,t)=>E({queryKey:q.requests(e),queryFn:()=>W(`GET`,`/api/requests${G({...e})}`),placeholderData:e=>e,refetchInterval:t?5e3:!1}),Th=e=>E({queryKey:q.request(e??``),queryFn:()=>W(`GET`,`/api/requests/${K(e)}`),enabled:!!e,refetchInterval:e=>e.state.data?.status===`pending`&&1e3}),Eh=e=>E({queryKey:q.stats(`rate`,e),queryFn:()=>W(`GET`,`/api/stats/rate${G({...e})}`),placeholderData:e=>e,refetchInterval:5e3}),Dh=()=>-new Date().getTimezoneOffset(),Oh=(e,t,n)=>E({queryKey:q.stats(`summary`,e,t??``,n??``),queryFn:()=>W(`GET`,`/api/stats/summary${G({range:e,client:t,token:n})}`),refetchInterval:15e3,placeholderData:e=>e}),kh=(e,t,n,r,i)=>E({queryKey:q.stats(`timeseries`,e,t,n,r??``,i??``,Dh()),queryFn:()=>W(`GET`,`/api/stats/timeseries${G({range:e,groupBy:t,by:n,client:r,token:i,tzOffset:Dh()})}`),refetchInterval:3e4,placeholderData:e=>e}),Ah=(e,t,n=8,r)=>E({queryKey:q.stats(`top`,e,t??``,n,r??``),queryFn:()=>W(`GET`,`/api/stats/top-models${G({range:e,limit:n,client:t,token:r})}`),refetchInterval:3e4,placeholderData:e=>e}),jh=(e=365,t,n)=>E({queryKey:q.stats(`activity`,e,t??``,n??``,Dh()),queryFn:()=>W(`GET`,`/api/stats/activity-heatmap${G({days:e,client:t,token:n,tzOffset:Dh()})}`),refetchInterval:6e4,placeholderData:e=>e}),Mh=()=>E({queryKey:q.plugins,queryFn:()=>W(`GET`,`/api/plugins`),refetchInterval:1e4}),Nh=(e=!0)=>E({queryKey:q.pluginHost,queryFn:()=>W(`GET`,`/api/plugins/host`),enabled:e,refetchInterval:15e3}),Ph=e=>E({queryKey:q.pluginJob(e??``),queryFn:()=>W(`GET`,`/api/plugins/jobs/${K(e)}`),enabled:!!e,refetchInterval:e=>e.state.data?.state===`running`||!e.state.data?1e3:!1});function Fh(e){let t=_();return D({mutationFn:e,onSuccess:()=>{t.invalidateQueries({queryKey:q.plugins}),t.invalidateQueries({queryKey:q.pluginHost}),t.invalidateQueries({queryKey:q.clients}),t.invalidateQueries({queryKey:q.providers})}})}var Ih=()=>Fh(e=>W(`POST`,`/api/plugins`,e)),Lh=()=>Fh(e=>W(`POST`,`/api/plugins/update`,{spec:e})),Rh=()=>Fh(e=>W(`DELETE`,`/api/plugins${G({spec:e})}`)),zh=()=>Fh(e=>W(`PATCH`,`/api/plugins${G({spec:e.spec})}`,{enabled:e.enabled,options:e.options})),Bh=()=>Fh(e=>W(`PUT`,`/api/plugins/order`,{specs:e})),Vh=()=>Fh(e=>W(`POST`,`/api/plugins/prefer`,e)),Hh=()=>Fh(()=>W(`POST`,`/api/plugins/runtime/install`)),Uh=(e=!0)=>E({queryKey:q.pluginMarket,queryFn:()=>W(`GET`,`/api/plugins/market`),enabled:e,staleTime:6e5}),Wh=e=>E({queryKey:q.pluginSearch(e),queryFn:()=>W(`GET`,`/api/plugins/search${G({q:e})}`),enabled:e.trim().length>=2,staleTime:6e5}),Gh=(e,t=!0)=>E({queryKey:q.pluginMethods(e),queryFn:()=>W(`GET`,`/api/plugin-providers/${K(e)}/methods`),enabled:t}),Kh=(e,t,n)=>W(`POST`,`/api/plugin-providers/${K(e)}/prompt`,{method:t,inputs:n}),qh=(e,t,n,r)=>W(`POST`,`/api/plugin-providers/${K(e)}/validate`,{method:t,key:n,value:r});function Jh(e,t){e.invalidateQueries({queryKey:q.providerAccounts(t)}),e.invalidateQueries({queryKey:q.providers})}var Yh=e=>D({mutationFn:t=>W(`POST`,`/api/plugin-providers/${K(e)}/sign-in`,t)}),Xh=(e,t)=>{let n=_();return E({queryKey:q.pluginSignIn(e,t??``),queryFn:async()=>{let r=await W(`GET`,`/api/plugin-providers/${K(e)}/sign-in/${K(t)}`);return r.state===`done`&&Jh(n,e),r},enabled:!!t,refetchInterval:e=>e.state.data?.state===`waiting`||!e.state.data?1500:!1})},Zh=e=>{let t=_();return D({mutationFn:t=>W(`POST`,`/api/plugin-providers/${K(e)}/sign-in/${K(t.flow)}/code`,{code:t.code}),onSuccess:n=>{t.setQueryData(q.pluginSignIn(e,n.id),n),n.state===`done`&&Jh(t,e)}})},Qh=e=>{let t=_();return D({mutationFn:t=>W(`POST`,`/api/plugin-providers/${K(e)}/api-key`,t),onSuccess:()=>Jh(t,e)})},$h=e=>{let t=_();return D({mutationFn:t=>W(`POST`,`/api/plugin-providers/${K(e)}/accounts/${K(t)}/sign-out`),onSuccess:()=>Jh(t,e)})},eg=(e,t,n)=>E({queryKey:q.pluginUsage(e,t),queryFn:()=>W(`GET`,`/api/plugin-providers/${K(e)}/accounts/${K(t)}/usage`),enabled:n,staleTime:6e4,retry:!1}),tg=e=>E({queryKey:q.pluginCheckin(e),queryFn:()=>W(`GET`,`/api/plugin-providers/${K(e)}/checkin`)}),ng=e=>{let t=_();return D({mutationFn:t=>t===void 0?W(`POST`,`/api/plugin-providers/${K(e)}/checkin`):W(`PUT`,`/api/plugin-providers/${K(e)}/checkin`,{on:t}),onSuccess:n=>t.setQueryData(q.pluginCheckin(e),n)})},rg=(e=!0)=>E({queryKey:q.magpieImport,queryFn:()=>W(`GET`,`/api/plugins/import-magpie`),enabled:e,staleTime:6e4}),ig=()=>Fh(e=>W(`POST`,`/api/plugins/import-magpie`,{signIns:e})),ag=()=>E({queryKey:q.webhooks,queryFn:()=>W(`GET`,`/api/webhooks`)});function og(e){let t=_();return D({mutationFn:e,onSuccess:()=>{t.invalidateQueries({queryKey:q.webhooks}),t.invalidateQueries({queryKey:q.alertRules}),t.invalidateQueries({queryKey:q.alertStates}),t.invalidateQueries({queryKey:[`webhook-deliveries`]})}})}var sg=()=>og(e=>W(`POST`,`/api/webhooks`,e)),cg=()=>og(({id:e,...t})=>W(`PATCH`,`/api/webhooks/${K(e)}`,t)),lg=()=>og(e=>W(`DELETE`,`/api/webhooks/${K(e)}`)),ug=()=>og(e=>W(`POST`,`/api/webhooks/${K(e)}/secret`)),dg=()=>og(e=>W(`POST`,`/api/webhooks/${K(e)}/test`)),fg=e=>E({queryKey:q.webhookDeliveries(e??``),queryFn:()=>W(`GET`,`/api/webhooks/${K(e)}/deliveries`),enabled:!!e}),pg=()=>og(e=>W(`POST`,`/api/webhook-deliveries/${K(e)}/redeliver`)),mg=()=>E({queryKey:q.alertEvents,queryFn:()=>W(`GET`,`/api/alerts/events`),staleTime:1/0}),hg=()=>E({queryKey:q.alertRules,queryFn:()=>W(`GET`,`/api/alerts/rules`)}),gg=(e=!1)=>E({queryKey:[...q.alertStates,e],queryFn:()=>W(`GET`,`/api/alerts/states${e?`?firing=true`:``}`),refetchInterval:6e4}),_g=()=>og(e=>W(`POST`,`/api/alerts/rules`,e)),vg=()=>og(({id:e,...t})=>W(`PATCH`,`/api/alerts/rules/${K(e)}`,t)),yg=()=>og(e=>W(`DELETE`,`/api/alerts/rules/${K(e)}`));async function bg(e){let t=await fetch(`${bp()}/v1/astra/key`,{headers:{Authorization:`Bearer ${e}`}});if(!t.ok)throw new xg(t.status);return await t.json()}var xg=class extends Error{status;constructor(e){super(`HTTP ${e}`),this.status=e}},Sg=e=>e?.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase();function Cg(e,t,n=[]){if(t==null)throw Error(`[lucide]: iconNode is required when icon name is used`);return{name:Sg(e),size:24,node:t,...n.length>0?{aliases:n}:{}}}var wg=e=>{let t=``,n=!1;for(let r of e){if(r===`-`||r===`_`||r<=` `){n=t.length>0;continue}t.length===0?t+=r.toLowerCase():t+=n?r.toUpperCase():r,n=!1}return t},Tg=e=>{let t=wg(e);return t.charAt(0).toUpperCase()+t.slice(1)},Eg=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),Dg={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":2,"stroke-linecap":`round`,"stroke-linejoin":`round`};function Og(e){return e!=null}function kg(e,t={}){let n=t.attributeNames??{},r=e=>n[e]??e,i=e.size??e.width??Dg.width,a=e.size??e.height??Dg.height,o=e.aliases?.filter(e=>typeof e==`string`&&e.trim()!==``).map(e=>`lucide-${e}`)??[],s=[...e.name?[`lucide-${e.name}`]:[],...o],c=t.className?.split(` `).filter(Boolean)??[],l=t.includeDefaultClasses===!1?Eg(...c):Eg(`lucide`,...s,...c),u=t.absoluteStrokeWidth?Number(t.strokeWidth??Dg[`stroke-width`])*Number(e.size??e.width??Dg.width)/Number(t.size??t.width??Dg.width):t.strokeWidth??Dg[`stroke-width`];return[`svg`,{...Object.entries(Dg).reduce((e,[t,n])=>(e[r(t)]=n,e),{}),...`color`in t&&t.color&&{[r(`stroke`)]:t.color},...`size`in t&&Og(t.size)&&{[r(`width`)]:t.size,[r(`height`)]:t.size},...`width`in t&&Og(t.width)&&{[r(`width`)]:t.width},...`height`in t&&Og(t.height)&&{[r(`height`)]:t.height},[r(`stroke-width`)]:u,...l&&{[r(`class`)]:l},[r(`viewBox`)]:`0 0 ${i} ${a}`,...t.hasA11yProp===!1?{[r(`aria-hidden`)]:`true`}:{},...`attributes`in t&&t.attributes},e.node.map(e=>{let[n,i,a]=e,o=t.nonScalingStroke?{[r(`vector-effect`)]:`non-scaling-stroke`,...i}:i;return a?[n,o,a]:[n,o]})]}function Ag(e,t={}){return kg(e,{...t,attributeNames:{...t.attributeNames,class:`className`,"stroke-width":`strokeWidth`,"stroke-linecap":`strokeLinecap`,"stroke-linejoin":`strokeLinejoin`,"vector-effect":`vectorEffect`}})}var jg=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},Mg=(0,m.createContext)({}),Ng=()=>(0,m.useContext)(Mg),Pg=(0,m.forwardRef)(({color:e,size:t,width:n,height:r,strokeWidth:i,absoluteStrokeWidth:a,nonScalingStroke:o,className:s=``,children:c,iconNode:l=[],icon:u={node:l,aliases:[],size:24},...d},f)=>{let{size:p=24,strokeWidth:h=2,absoluteStrokeWidth:g=!1,nonScalingStroke:_=!1,color:v=`currentColor`,className:y=``}=Ng()??{},b=!!c||jg(d),[x,S,C=[]]=Ag(u,{color:e??v,width:n??t??p,height:r??t??p,strokeWidth:i??h,absoluteStrokeWidth:a??g,nonScalingStroke:o??_,className:Eg(y,s),hasA11yProp:b,attributes:d});return(0,m.createElement)(x,{ref:f,...S},[...C.map(([e,t])=>(0,m.createElement)(e,t)),...Array.isArray(c)?c:[c]])});function J(e,t=[],n=[]){let r=typeof e==`string`?Cg(e,t,n):e,i=(0,m.forwardRef)(({className:e,...t},n)=>(0,m.createElement)(Pg,{ref:n,icon:r,className:e,...t}));return r.name&&(i.displayName=Tg(r.name)),i}var Fg={name:`check`,size:24,node:[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]};Fg.node;var Ig=J(Fg),Lg={name:`chevron-down`,size:24,node:[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]};Lg.node;var Rg=J(Lg),zg={name:`circle-alert`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]],aliases:[`alert-circle`]};zg.node;var Bg=J(zg),Vg={name:`circle-x`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m15 9-6 6`,key:`1uzhvr`}],[`path`,{d:`m9 9 6 6`,key:`z0biqf`}]],aliases:[`x-circle`]};Vg.node;var Hg=J(Vg),Ug={name:`copy`,size:24,node:[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]};Ug.node;var Wg=J(Ug),Gg={name:`file-code-corner`,size:24,node:[[`path`,{d:`M4 12.15V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-3.35`,key:`1wthlu`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`m5 16-3 3 3 3`,key:`331omg`}],[`path`,{d:`m9 22 3-3-3-3`,key:`lsp7cz`}]],aliases:[`file-code-2`]};Gg.node;var Kg=J(Gg),qg={name:`folder`,size:24,node:[[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`,key:`1kt360`}]]};qg.node;var Jg=J(qg),Yg={name:`globe`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20`,key:`13o1zl`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}]]};Yg.node;var Xg=J(Yg),Zg={name:`info`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]};Zg.node;var Qg=J(Zg),$g={name:`puzzle`,size:24,node:[[`path`,{d:`M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z`,key:`w46dr5`}]]};$g.node;var e_=J($g),t_={name:`search`,size:24,node:[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]};t_.node;var n_=J(t_),r_={name:`triangle-alert`,size:24,node:[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]],aliases:[`alert-triangle`]};r_.node;var i_=J(r_),a_={name:`x`,size:24,node:[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]};a_.node;var o_=J(a_),s_={"common.cancel":`取消`,"common.confirm":`确定`,"common.close":`关闭`,"common.save":`保存`,"common.saved":`已保存`,"common.revert":`还原`,"common.apply":`应用`,"common.delete":`删除`,"common.edit":`编辑`,"common.add":`添加`,"common.create":`创建`,"common.back":`返回`,"common.done":`完成`,"common.more":`更多`,"common.copy":`复制`,"common.copied":`已复制到剪贴板`,"common.refresh":`刷新`,"common.enabled":`启用`,"common.yes":`是`,"common.no":`否`,"common.prev":`上一页`,"common.next":`下一页`,"common.noData":`暂无数据`,"common.selectAll":`全选`,"common.unsaved":`有未保存的更改`,"common.invalidJson":`JSON 格式不正确`,"common.search":`搜索`,"common.clearSearch":`清空搜索`,"common.select":`请选择`,"common.noResults":`没有匹配项`,"common.error":`操作失败`,"pricing.tierMode":`计费方式`,"pricing.outputPolicy":`输出价格`,"pricing.editMode":`编辑方式`,"pricing.days":`生效日`,"models.sync.change":`变更`,"models.sync.changeOne":`项变更`,"models.sync.changeOther":`项变更`,"common.continue":`继续`,"providers.step.template":`选择模板`,"providers.step.details":`填写信息`,"clients.current":`当前提供商`,"common.deleting":`正在删除`,"common.deleted":`已删除`,"common.retry":`重试`,"providers.modelIds":`模型 ID`,"nav.overview":`概览`,"nav.requests":`请求日志`,"nav.clients":`客户端`,"nav.providers":`提供商`,"nav.models":`模型`,"nav.settings":`设置`,"nav.privacy":`隐私护栏`,"nav.tokens":`令牌`,"nav.group.config":`配置`,"nav.group.system":`系统`,"shell.running":`服务运行中`,"shell.discord":`Discord 社区`,"shell.github":`GitHub 仓库`,"shell.connecting":`正在连接…`,"shell.disconnected":`未连接到服务`,"shell.startService":`启动服务`,"shell.startFailed":`服务启动失败`,"shell.collapseSidebar":`收起侧边栏`,"shell.expandSidebar":`展开侧边栏`,"banner.downDesktop":`无法连接 Astra 服务。可以在这里启动,或从菜单栏图标启动。`,"banner.downWeb":`无法连接 Astra 服务,正在重连…(可在终端运行 astra start)`,"banner.mismatch":`服务端 API 版本与界面不一致,请运行 astra update 后重启。`,"banner.clientsOutdated":`{names} 的配置还是旧的 Astra 地址或设置(例如 Astra 换了端口),更新后才能正常连接。`,"banner.clientsUpdate":`一键更新`,"banner.clientsUpdated":`已更新 {names},部分客户端需要重启后生效`,"login.subtitle":`该服务对外监听,请输入管理密码`,"login.password":`管理密码`,"login.submit":`登录`,"range.today":`今日`,"range.7d":`7 天`,"range.30d":`30 天`,"range.90d":`90 天`,"range.all":`全部`,"overview.cost":`费用`,"overview.requests":`请求数`,"overview.successRate":`成功率`,"overview.tokens":`Token`,"overview.avgTtft":`平均 TTFT`,"overview.costTrend":`费用趋势`,"overview.range":`时间范围`,"overview.measure":`指标`,"overview.trend":`趋势`,"overview.tokensContext":`输入 {input} · 输出 {output}`,"overview.hourlyAverage":`每小时平均`,"overview.dailyAverage":`每日平均`,"overview.total":`合计`,"overview.hour":`小时`,"overview.day":`日期`,"overview.by.model":`模型`,"overview.by.provider":`提供商`,"overview.by.client":`客户端`,"overview.by.token":`令牌`,"overview.other":`其他`,"overview.topModels":`费用最高的模型`,"overview.topModelDetail":`{requests} 次请求 · {tokens} tokens`,"overview.empty.title":`还没有请求`,"overview.empty.detail":`在「客户端」中启用一个客户端,或把任意 OpenAI / Anthropic / Gemini 兼容工具指向下面的网关地址。`,"overview.clientFilter":`按客户端筛选`,"overview.allClients":`全部`,"overview.tokenFilter":`按令牌筛选`,"overview.allTokens":`全部令牌`,"overview.clientEmpty.title":`{client} 暂无请求`,"overview.clientEmpty.detail":`{range}内没有来自该客户端的请求,可切换到其他客户端或时间范围。`,"overview.tokenEmpty.title":`{token} 暂无请求`,"overview.tokenEmpty.detail":`{range}内没有使用该令牌的请求,可切换到其他令牌或时间范围。`,"overview.totalCost":`总成本`,"overview.totalRequests":`总请求数`,"overview.usageTrend":`使用趋势`,"overview.breakdown":`明细`,"overview.viewAll":`查看全部`,"overview.col.input":`输入`,"overview.col.output":`输出`,"overview.col.cacheHit":`缓存命中`,"overview.col.speed":`速度`,"overview.col.share":`占比`,"overview.activity":`活跃度`,"overview.activitySummary":`{from} ~ {to} · {active} / {days} 天有活动`,"overview.activityPeak":`最多 {count} 次/天`,"overview.activityUnit":`次请求`,"overview.activityNone":`无活动`,"overview.activityLegend.less":`少`,"overview.activityLegend.more":`多`,"requests.total":`共 {count} 条`,"requests.totalCost":`消费总额`,"requests.totalCost.hint":`当前筛选条件下全部请求(含所有分页)的费用合计;进行中的请求完成后计入。`,"requests.rate.rpm":`RPM`,"requests.rate.tpm":`TPM`,"requests.rate.hint":`最近 {window} 秒的平均每分钟请求数(RPM)、令牌数(TPM,仅已完成请求)与缓存命中率;跟随当前筛选,每 5 秒自动刷新。`,"requests.elapsed":`已等待(尚未收到首个 token)`,"requests.searchModel":`搜索模型 ID(支持关键字)`,"requests.noFilters":`未设置筛选`,"requests.clearFilters":`清空筛选`,"requests.backToFilters":`返回筛选字段`,"requests.removeFilter":`移除筛选:{filter}`,"requests.filterAdded":`已添加筛选:{filter}`,"requests.filterChanged":`已修改筛选:{filter}`,"requests.filterRemoved":`已移除筛选:{filter}`,"requests.filtersCleared":`已清空全部筛选`,"requests.filteredEmpty":`没有符合筛选条件的记录`,"requests.filteredEmpty.detail":`试试其他模型关键字,或清空筛选条件。`,"requests.returnedModel":`返回:{model}`,"requests.modelMatch":`一致`,"requests.modelMismatch":`不一致`,"requests.modelComparison":`请求:{requested};上游发送:{upstream};API 返回:{returned}`,"requests.modelNotRecorded":`未记录`,"requests.modelNotRecorded.hint":`历史记录或 API 未返回模型 ID;不会用请求模型代替。`,"requests.allClients":`全部客户端`,"requests.allTokens":`全部令牌`,"requests.col.token":`令牌`,"requests.detail.account":`订阅账号`,"requests.direct":`直连`,"requests.allProviders":`全部提供商`,"requests.allStatus":`全部状态`,"requests.col.time":`时间`,"requests.col.client":`客户端`,"requests.col.model":`模型`,"requests.col.provider":`提供商`,"requests.col.status":`状态`,"requests.col.ttft":`TTFT`,"requests.col.tps":`TPS`,"requests.col.tokens":`输入/输出`,"requests.col.cost":`费用`,"requests.empty":`没有请求记录`,"requests.empty.detail":`经过 Astra 的每次请求都会记录在这里,包括逐项 token 与计费明细。`,"requests.page":`第 {page} / {pages} 页`,"requests.filters":`当前筛选`,"requests.addFilter":`添加筛选`,"requests.openDetail":`查看 {model} 的请求详情`,"requests.viewError":`点击查看错误信息`,"requests.detail.title":`请求详情`,"requests.detail.summary":`概要`,"requests.detail.protocol":`协议`,"requests.detail.requestedModel":`请求模型`,"requests.detail.upstreamModel":`上游发送模型`,"requests.detail.responseModel":`API 返回模型`,"requests.detail.systemModel":`系统模型`,"requests.detail.stream":`流式`,"requests.detail.upstreamId":`上游请求 ID`,"requests.detail.timing":`耗时`,"requests.detail.generation":`生成耗时`,"requests.detail.total":`总耗时`,"requests.detail.tps":`输出速度`,"requests.detail.error":`错误`,"requests.detail.privacy":`隐私护栏`,"requests.detail.privacyBlocked":`该请求被拦截`,"requests.detail.privacyDryRun":`试运行(未处理)`,"requests.detail.privacyRedacted":`已脱敏 {count} 处`,"requests.detail.billing":`计费`,"requests.detail.usageMissing":`上游未返回用量,本次请求记为 0。`,"requests.detail.usageRaw":`原始 usage`,"requests.detail.pricingSnapshot":`价格快照`,"requests.body.clientRequest":`客户端请求体`,"requests.body.upstreamRequest":`上游请求体`,"requests.body.upstreamRequestHeaders":`上游请求头(发往提供商,凭据脱敏)`,"requests.body.upstreamResponse":`上游响应体`,"requests.body.clientResponse":`返回客户端的响应体`,"requests.reasoning":`推理`,"requests.reasoning.notRecorded":`未记录`,"requests.reasoning.budget":`预算 {tokens}`,"requests.reasoning.hint":`客户端请求中明确设置的推理配置;未记录表示该请求未设置或为旧日志,不会用预算或提供商默认值推断。`,"requests.detail.reasoning":`推理强度`,"status.success":`成功`,"status.blocked":`已拦截`,"status.upstream_error":`上游错误`,"status.gateway_error":`网关错误`,"status.client_cancelled":`已取消`,"status.pending":`进行中`,"billing.unpriced":`未配置价格`,"billing.type":`类型`,"billing.tokens":`数量`,"billing.unitPrice":`单价 /1M`,"billing.tier":`档位`,"billing.cost":`费用`,"pricingSource.override":`提供商自定义价`,"pricingSource.provider":`提供商价格 · {key}`,"pricingSource.default":`官方默认价`,"pricingSource.none":`无价格`,"simulator.official":`官方默认价`,"simulator.serviceTier":`service_tier`,"simulator.time":`请求时间(用于时段计费)`,"simulator.run":`计算`,"pricing.none":`尚未配置价格`,"pricing.add":`添加价格`,"pricing.remove":`移除价格`,"pricing.mode.form":`表单`,"pricing.unit":`USD / 百万 tokens`,"pricing.base":`基础价格`,"pricing.perRequest":`每次请求`,"pricing.notes":`备注`,"pricing.name":`名称`,"pricing.contextTiers":`上下文分档`,"pricing.contextTiers.hint":`输入 token 超过阈值时改用另一档价格(如 Claude >200K)。`,"pricing.addTier":`添加分档`,"pricing.threshold":`阈值`,"pricing.mode.whole":`整单套用`,"pricing.mode.progressive":`分段累进`,"pricing.output.highest":`输出按最高档`,"pricing.output.base":`输出按基础价`,"pricing.timeWindows":`时段规则`,"pricing.timeWindows.hint":`按时区和时段调整价格(如 DeepSeek 夜间优惠),可排除节假日。`,"pricing.addWindow":`添加时段`,"pricing.excludeDates":`排除日期 yyyy-MM-dd, …`,"pricing.serviceTiers":`服务等级`,"pricing.serviceTiers.hint":`按 service_tier(flex / priority)调整价格。`,"pricing.addServiceTier":`添加等级`,"pricing.hasOwnPrices":`含独立价格(JSON 编辑)`,"pricing.ruleNameTaken":`该服务等级名称已存在`,"pricing.timezone":`时区`,"pricing.invalidTimezone":`请输入有效的 IANA 时区`,"pricing.start":`开始时间`,"pricing.end":`结束时间`,"pricing.multiplier":`倍率`,"clients.subtitle":`让本机的 AI 客户端通过 Astra 访问模型`,"clients.comingSoon":`即将支持`,"clients.comingSoonDetail":`该客户端的配置方式尚未确认`,"clients.drifted":`配置已被修改`,"clients.enabled":`已启用`,"clients.disabled":`未启用`,"clients.detected":`已检测到 {version}`,"clients.notDetected":`未检测到安装`,"clients.group.installed":`已安装`,"clients.group.notInstalled":`未检测到`,"clients.group.comingSoon":`即将支持`,"clients.checkUpdates":`检查更新`,"clients.updatesFound":`{count} 个客户端有新版本`,"clients.allUpToDate":`所有客户端都是最新版本`,"clients.updateBadge":`可更新`,"clients.shadowedBadge":`需调整 PATH`,"clients.updateTo":`更新到 {version}`,"clients.install":`安装`,"clients.download":`下载`,"clients.installRunning":`进行中…`,"clients.versionTitle":`版本与更新`,"clients.currentVersion":`当前版本`,"clients.latestVersion":`最新版本`,"clients.versionUnknown":`版本未知`,"clients.notInstalled":`未安装`,"clients.latestUnknown":`未检查`,"clients.checkedAt":`检查于 {time}`,"clients.installMethod":`安装方式`,"clients.method.npm":`npm 全局包 {package}`,"clients.method.vscode-extension":`VS Code 扩展 {package}`,"clients.method.script":`官方安装脚本`,"clients.method.manual":`从官网下载安装`,"clients.homepage":`官网`,"clients.blocker.npm-missing":`没有找到 npm。先安装 Node.js(自带 npm),再回来安装。`,"clients.blocker.vscode-missing":`没有找到 VS Code 的 code 命令,请先安装 VS Code。`,"clients.blocker.script-missing":`这个系统上没有对应的安装脚本,请从官网手动安装。`,"clients.blocker.external-install":`{path} 不是通过 npm 安装的,请用原来的安装方式更新。`,"clients.blocker.shadowed":`最新版本已经装在另一个位置,再更新一次也不会改变终端里运行的版本;按上面的提示调整 PATH 即可。`,"clients.installLog":`安装日志`,"clients.noInstallLog":`还没有安装记录`,"clients.job.running":`正在运行…`,"clients.job.succeeded":`已完成`,"clients.job.failed":`失败`,"clients.job.cancelled":`已停止`,"clients.hint.permission-denied":`npm 没有权限写入全局目录(通常是之前用 sudo 安装过,目录属于系统管理员)。`,"clients.hint.admin-cancelled":`已取消管理员授权,没有做任何修改。`,"clients.hint.shadowed":`新版本装到了另一个位置,终端里运行的仍是旧的那一份。具体位置见下面的日志。`,"clients.hint.unchanged":`命令执行成功,但版本没有变化。`,"clients.hint.not-on-path":`装好的命令不在终端的 PATH 里,终端里无法直接运行。具体位置见下面的日志。`,"clients.job.notEffective":`已完成,但没有生效`,"clients.notEffectiveToast":`{name} 的命令执行成功,但没有生效,请查看安装日志`,"clients.otherCopy":`其他副本`,"clients.otherCopyNewer":`更新`,"clients.shadowed.title":`已有新版本 {version},但终端里用不到`,"clients.shadowed.detail":`终端运行的是 {path}({version}),更新的版本在 {other},它在 PATH 中排在后面或不在 PATH 里。把 {dir} 放到 PATH 最前面,或删掉旧的那一份,就会用上新版本。`,"clients.notOnPath.title":`不在终端的 PATH 里`,"clients.notOnPath.detail":`这个客户端装在 {dir},但终端的 PATH 里没有这个目录。把它加入 PATH(例如写进 ~/.zshrc)后,才能在终端直接运行。`,"clients.hint.timeout":`超过 15 分钟没有完成,已停止。`,"clients.admin.badge":`需管理员权限`,"clients.admin.tip":`npm 的全局目录属于系统管理员,安装时 macOS 会弹出授权框,需要输入开机密码`,"clients.admin.tipManual":`npm 的全局目录属于系统管理员,需要在终端用 sudo 运行`,"clients.admin.title":`需要管理员权限`,"clients.admin.prompt":`npm 的全局目录属于系统管理员。点击「授权并开始」后,系统会弹出授权框,输入开机密码(或使用触控 ID)即可;Astra 不会接触你的密码。`,"clients.admin.manual":`npm 的全局目录属于系统管理员,这里无法弹出授权框。请复制下面的命令,在终端中运行。`,"clients.admin.start":`授权并开始`,"clients.admin.copyCommand":`复制命令`,"clients.admin.retry":`以管理员身份重试`,"clients.admin.retryHint":`可以点「以管理员身份重试」,系统会弹出授权框。`,"clients.admin.running":`正在以管理员身份运行,命令结束后才会显示输出,运行中无法停止。`,"clients.admin.fixTip":`想以后安装、更新都不再需要管理员权限,可以在终端执行一次下面的命令,把 npm 全局目录交还给当前用户:`,"clients.installTitle":`安装 {name}`,"clients.updateTitle":`更新 {name}`,"clients.installRunDetail":`将在本机运行下面的命令,输出会实时显示在这里。`,"clients.installStart":`开始`,"clients.installStop":`停止`,"clients.installUnavailable":`当前无法执行这个操作`,"clients.installNpmNote":`全局安装会写入 npm 的全局目录;关闭窗口不会中断安装。`,"clients.installedToast":`{name} 已安装`,"clients.updatedToast":`{name} 已更新`,"clients.enable":`启用…`,"clients.disable":`禁用`,"clients.disableRestore":`禁用并还原`,"clients.pickProviderFirst":`请先在下方选择一个提供商`,"clients.appliedAt":`于 {time} 写入配置`,"clients.bound":`已切换到 {provider},立即生效`,"clients.boundModelsSynced":`已切换到 {provider},并同步了 {client} 配置里的模型列表`,"clients.disableConfirm":`禁用 {name}?`,"clients.disableDetail":`会撤销 Astra 写入的配置项,恢复为启用前的状态。`,"clients.disabledToast":`{name} 已禁用并还原配置`,"clients.driftTitle":`部分配置已被手动修改`,"clients.driftDetail":`以下配置项在启用后被改动过,未自动还原:{keys}。是否强制还原?`,"clients.forceRestore":`强制还原`,"clients.providerTitle":`使用的提供商`,"clients.providerFooter":`可以添加多个提供商并拖动排序:请求的模型(按模型 ID 精确匹配,或提供商的模型映射)由排在最前、提供该模型的提供商处理;都没有时交给第一个。修改立即生效,客户端的模型列表会自动包含所有提供商的模型。`,"clients.primaryProvider":`首选`,"clients.dragToReorder":`拖动调整 {provider} 的顺序`,"clients.removeProvider":`移除 {provider}`,"clients.providerDisabledBadge":`已停用`,"clients.moreProvidersTitle":`可添加的提供商`,"clients.providerAdded":`已添加 {provider},立即生效`,"clients.providerRemoved":`已移除 {provider}`,"clients.providerOrderSaved":`已更新提供商顺序,立即生效`,"clients.providersModelsSynced":`已更新提供商,并同步了 {client} 配置里的模型列表`,"clients.accountTitle":`订阅账号`,"clients.accountFooter":`绑定到具体账号,用量按账号统计;留空使用该提供商的默认账号。`,"clients.account":`账号`,"clients.accountDefault":`默认账号`,"clients.noProviders":`还没有可用的提供商`,"clients.noProvidersDetail":`先添加一个 AI 提供商,再为客户端选择它。`,"clients.modelTitle":`模型`,"clients.modelFooter":`启用时写入客户端配置的默认模型;不设置则使用客户端自己的默认值。`,"clients.modelFooterEnabled":`修改默认模型需要重新写入客户端配置。`,"clients.modelSlotsFooter":`选中的模型会写进 Claude Code 的配置(默认模型 ANTHROPIC_MODEL,各档位 ANTHROPIC_DEFAULT_*_MODEL);留空就不写入,配置文件里已有的同名设置也不会被改动。`,"clients.modelSlotsFooterEnabled":`修改后需要重新写入客户端配置。`,"clients.options.title":`专属设置`,"clients.options.footer":`这些设置只对当前客户端生效;写入客户端配置的项目会在启用时一并写入,“网关”类的项目由 Astra 在转发该客户端请求时处理。`,"clients.options.footerEnabled":`修改后需要重新应用。`,"clients.options.unset":`不设置`,"clients.option.context1m":`1M 上下文`,"clients.option.context1m.hint":`给 Claude Code 的模型名自动加 [1m] 后缀(Haiku 档和已知窗口不足 1M 的模型除外)。需要上游支持 1M 上下文。`,"clients.option.cacheTtl":`缓存时长`,"clients.option.cacheTtl.hint":`给客户端已有的 cache_control 补上 5 分钟或 1 小时的 ttl,不增删缓存断点。1 小时的写入价更高,适合长会话。`,"clients.option.maxThinkingTokens":`思考 token 上限`,"clients.option.maxThinkingTokens.hint":`写入 MAX_THINKING_TOKENS;留空则不设置。`,"clients.option.disablePromptCaching":`关闭提示缓存`,"clients.option.disablePromptCaching.hint":`写入 DISABLE_PROMPT_CACHING=1,客户端不再发送缓存断点。`,"clients.option.contextWindow":`上下文窗口`,"clients.option.contextWindow.hint":`写入 model_context_window;留空则用 Codex 默认值。`,"clients.option.autoCompactTokenLimit":`自动压缩阈值`,"clients.option.autoCompactTokenLimit.hint":`写入 model_auto_compact_token_limit,达到后自动压缩会话;留空则不设置。`,"clients.option.reasoningEffort":`推理强度`,"clients.option.reasoningEffort.hint":`写入 model_reasoning_effort;默认则不设置。`,"clients.option.modelCatalog":`写入模型目录`,"clients.option.modelCatalog.hint":`把所绑定提供商的模型追加到 Codex 的模型目录(~/.codex/astra-models.json,由 model_catalog_json 指向),原有模型全部保留。需要先运行过一次 Codex(生成 models_cache.json);Codex 只在启动时读取目录,模型变化后需重启 Codex。`,"clients.optionChoice.default":`默认`,"clients.optionChoice.5m":`5 分钟`,"clients.optionChoice.1h":`1 小时`,"clients.optionChoice.minimal":`最低`,"clients.optionChoice.low":`低`,"clients.optionChoice.medium":`中`,"clients.optionChoice.high":`高`,"clients.modelSlot.ANTHROPIC_MODEL":`默认模型`,"clients.modelSlot.ANTHROPIC_DEFAULT_OPUS_MODEL":`Opus 档位`,"clients.modelSlot.ANTHROPIC_DEFAULT_SONNET_MODEL":`Sonnet 档位`,"clients.modelSlot.ANTHROPIC_DEFAULT_HAIKU_MODEL":`Haiku 档位(快速/后台)`,"clients.defaultModel":`默认模型`,"clients.modelPlaceholder":`选择模型`,"clients.modelUnset":`不设置`,"clients.roleMapTitle":`角色映射`,"clients.roleMapFooter":`Claude Desktop 只认 Sonnet / Opus / Haiku 这类角色模型,Astra 会把它们换成这里选的提供商模型。至少设置一个;没设置的角色使用第一个已设置的。`,"clients.roleMapFooterEnabled":`映射在网关中实时生效,点击应用后保存。`,"clients.roleMapRequired":`请至少为一个角色选择模型`,"clients.role.sonnet":`Sonnet`,"clients.role.opus":`Opus`,"clients.role.haiku":`Haiku`,"clients.maintenance":`维护`,"clients.openConfigDir":`在访达中打开配置目录`,"clients.copyConfigPath":`复制配置文件路径`,"clients.backups":`配置备份`,"clients.backupsDetail":`每次修改前自动备份,可随时恢复。`,"clients.noBackups":`还没有备份`,"clients.firstWrite":`首次修改前`,"clients.restore":`恢复`,"clients.restoreConfirm":`用这个备份覆盖当前配置?`,"clients.restored":`已从备份恢复`,"clients.tokenTitle":`令牌`,"clients.token":`写入配置的令牌`,"clients.tokenFooter":`启用时把「令牌.客户端」写入客户端配置,用量按令牌统计。多个客户端可以共用一个令牌。`,"clients.tokenFooterEnabled":`更换令牌需要重新写入客户端配置。`,"clients.tokenDisabled":`{name}(已停用)`,"clients.manageTokens":`管理令牌`,"clients.claudeDirect.configure":`直连设置`,"clients.claudeDirect.modeTitle":`连接方式(Astra 启动器)`,"clients.claudeDirect.mode":`连接方式`,"clients.claudeDirect.gateway":`网关`,"clients.claudeDirect.direct":`官方直连`,"clients.claudeDirect.gatewayDetail":`使用原有网关配置;启用接管后,默认 Claude Code 请求经过 Astra。astra claude 仅用于直连模式。`,"clients.claudeDirect.directDetail":`用下面选中的 Claude 订阅账号直连 Anthropic 官方,不经过网关。`,"clients.claudeDirect.modeNote":`这里只影响 Astra 启动器自己的会话;直接运行 claude 仍是原来的默认配置。`,"clients.claudeDirect.modeFooter":`切换只改变启动方式,不会热切换已经运行的会话,也不会修改用户默认的 ~/.claude 配置。`,"clients.claudeDirect.loadFailed":`无法读取直连设置`,"clients.claudeDirect.gatewayOnTitle":`网关接管已启用,直连会被覆盖`,"clients.claudeDirect.gatewayOnDetail":`当前 Claude Code 已由 Astra 接管:直连会被立刻写回网关配置。要真正直连,请先在上方「禁用并还原」,再切到官方直连。`,"clients.claudeDirect.noAccount":`还没有可用的 Claude 订阅账号`,"clients.claudeDirect.noAccountDetail":`直连用的是「Claude 订阅(Pro/Max)」提供商下已登录的账号;去「提供商」登录一个,再回到这里选择。`,"clients.claudeDirect.goProviders":`去提供商登录`,"clients.claudeDirect.needAccountToast":`先在「提供商」里登录 Claude 订阅账号`,"clients.claudeDirect.accountsTitle":`订阅账号`,"clients.claudeDirect.accountsFooter":`直连使用该订阅账号的短期令牌直连 Anthropic 官方,不经过网关;令牌留在 Astra 本机,不会写进命令或客户端配置。`,"clients.claudeDirect.account":`使用的账号`,"clients.claudeDirect.accountDisabledSuffix":`{status}(未启用)`,"clients.claudeDirect.launchTitle":`启动`,"clients.claudeDirect.launchNote":`需要本机已安装新版 Astra CLI(npm i -g astragate)。命令会用所选订阅账号启动官方 Claude Code,直连 Anthropic 官方、不经过网关;Astra 只把短期令牌交给它,刷新令牌留在 Astra。直接运行 claude 仍是你原来的配置。令牌到期后需要重新运行命令(会话中途不能续期)。若改用环境变量提供令牌,官方客户端里依赖 claude.ai 登录的功能(连接器、/schedule 等)将不可用。`,"clients.claudeDirect.statsTitle":`本机统计`,"clients.claudeDirect.statsConsent":`收集本机统计`,"clients.claudeDirect.statsConsentDetail":`默认关闭。开启后由 Claude Code 自己把用量数据发到本机 Astra:只有模型、时间、token 数和它自己估算的费用,没有对话正文、提示词和工具内容。`,"clients.claudeDirect.statsFooter":`Astra 仅在本机保存统计,留存时间沿用请求日志设置。关闭后立即停止接收;运行中会话仍可能尝试导出,重启后停止。估算不代表订阅扣费。组织策略可能覆盖客户端设置;直连不执行网关的拦截和脱敏。`,"clients.claudeDirect.statsEmpty":`还没有统计数据`,"clients.claudeDirect.statsEmptyDetail":`开启统计后,用上面的命令启动一次会话,数据会在几秒内出现在这里。`,"clients.claudeDirect.statsFailed":`无法读取统计`,"clients.claudeDirect.statsTotals":`最近 {count} 条`,"clients.claudeDirect.statsInDetail":`总输入(含缓存读 {cache}):{input} · 总输出:{output}`,"clients.claudeDirect.statsCost":`估算费用`,"clients.claudeDirect.statsCostDetail":`客户端自己估算,不代表实际订阅扣费。`,"clients.claudeDirect.statsFailedCount":`其中失败 {count} 条`,"clients.claudeDirect.statusError":`失败`,"clients.claudeDirect.tokensDetail":`输入 {input} / 输出 {output}`,"tokens.subtitle":`客户端和直接调用都通过令牌访问 Astra,用量按令牌统计`,"tokens.add":`新建令牌`,"tokens.default":`默认`,"tokens.disabledBadge":`已停用`,"tokens.copy":`复制令牌`,"tokens.copied":`已复制令牌`,"tokens.clients":`使用的客户端`,"tokens.noClients":`暂无客户端使用`,"tokens.directProvider":`直连提供商`,"tokens.directNone":`不允许直接调用`,"tokens.directAccount":`直连订阅账号`,"tokens.directHint":`在其他工具中填写网关地址 {url} 和该令牌即可直接调用,请求会发往直连提供商。`,"tokens.today":`今日`,"tokens.total":`累计`,"tokens.cost":`消耗`,"tokens.requests":`请求`,"tokens.cacheHit":`缓存命中率`,"tokens.tps":`TPS`,"tokens.tpsContext":`加权输出速度`,"tokens.tokens":`Token`,"tokens.inOut":`输入 / 输出`,"tokens.details":`展开详情`,"tokens.requestsContext":`{count} 次请求`,"tokens.lastUsedTitle":`最近使用`,"tokens.limits":`限额`,"tokens.limitsHint":`超出后网关拒绝该令牌的请求:周期额度返回 429 并告知重置时间,总额度返回 403。正在进行的请求可能让用量略超上限。周期按设置中的时区计算。`,"tokens.unlimited":`不限`,"tokens.addLimit":`添加限额`,"tokens.removeLimit":`删除限额`,"tokens.limitMetric":`指标`,"tokens.limitPeriod":`周期`,"tokens.limitValue":`上限`,"tokens.metric.cost":`费用(USD)`,"tokens.metric.requests":`请求数`,"tokens.metric.tokens":`Token 数`,"tokens.period.day":`每日`,"tokens.period.week":`每周`,"tokens.period.month":`每月`,"tokens.period.total":`总计`,"tokens.rpm":`每分钟请求数`,"tokens.rpmHint":`留空表示不限。`,"tokens.rpmUsage":`近 1 分钟 {used} / {limit}`,"tokens.limitUsed":`{used} / {limit}`,"tokens.limitResets":`{time} 重置`,"tokens.limitExhausted":`已用完`,"tokens.limitDuplicate":`同一指标和周期只能设置一次`,"tokens.allowedClients":`允许的客户端`,"tokens.allowedClientsAny":`所有客户端`,"tokens.allowedClientsOnly":`仅以下客户端`,"tokens.allowedClientsHint":`限制密钥后缀(令牌.客户端)可用的客户端。都不勾选时只能直连(还需要设置直连提供商)。`,"tokens.directOnly":`仅直连`,"tokens.selfService":`自助查询`,"tokens.selfServiceHint":`持有该令牌的人可以用它查询自己的额度和用量(看不到上游信息):打开 {url}/key 页面,或调用 {url}/v1/astra/key;也兼容 OpenAI 旧版余额接口 {url}/v1/dashboard/billing/subscription。`,"settings.tab.notifications":`通知`,"settings.quota.subscriptionInterval":`订阅账号查询间隔`,"settings.quota.subscriptionIntervalHint":`已登录的订阅账号按这个间隔在后台刷新额度,0 表示关闭,最短 10 分钟(上游接口有频率限制)。`,"alerts.webhooks":`Webhook`,"alerts.webhooks.hint":`告警以 JSON POST 发往这些地址。设置了签名密钥时带 X-Astra-Signature(HMAC-SHA256,对「时间戳.请求体」签名)。`,"alerts.webhooks.empty":`还没有 Webhook`,"alerts.webhooks.add":`添加 Webhook`,"alerts.webhooks.edit":`编辑 Webhook`,"alerts.webhooks.name":`名称`,"alerts.webhooks.url":`地址`,"alerts.webhooks.timeout":`超时(秒)`,"alerts.webhooks.useProxy":`使用网络代理`,"alerts.webhooks.useProxyHint":`开启时跟随设置里的网络代理;关闭则始终直连。`,"alerts.webhooks.enabled":`启用`,"alerts.webhooks.headers":`自定义请求头`,"alerts.webhooks.headersHint":`例如 Authorization。保存后只显示名称;编辑时值留空表示保持原值。`,"alerts.webhooks.addHeader":`添加请求头`,"alerts.webhooks.headerName":`请求头名称`,"alerts.webhooks.headerValue":`请求头的值`,"alerts.webhooks.headerKept":`留空保持原值`,"alerts.webhooks.signed":`签名`,"alerts.webhooks.signedHint":`生成签名密钥,接收方可以用它校验请求确实来自 Astra。`,"alerts.webhooks.secretTitle":`签名密钥`,"alerts.webhooks.secretShown":`请立即保存这个密钥,它只显示这一次。`,"alerts.webhooks.resetSecret":`重新生成签名密钥`,"alerts.webhooks.resetSecretConfirm":`重新生成 {name} 的签名密钥?`,"alerts.webhooks.resetSecretDetail":`旧密钥立即失效,接收方需要换成新密钥。`,"alerts.webhooks.test":`发送测试`,"alerts.webhooks.testOk":`测试通知已送达(HTTP {status})`,"alerts.webhooks.testFailed":`测试失败:{error}`,"alerts.webhooks.deliveries":`投递记录`,"alerts.webhooks.deleteConfirm":`删除 Webhook {name}?`,"alerts.webhooks.deleteDetail":`引用它的告警规则不再发往这里,投递记录一并删除。`,"alerts.webhooks.deleted":`已删除 {name}`,"alerts.webhooks.disabledBadge":`已停用`,"alerts.webhooks.unsigned":`未签名`,"alerts.webhooks.format":`格式`,"alerts.webhooks.format.generic":`通用 JSON`,"alerts.webhooks.format.generic.hint":`Astra 自己的 JSON 载荷,带 X-Astra-Signature 签名,适合自己写接收服务。`,"alerts.webhooks.format.feishu":`飞书`,"alerts.webhooks.format.feishu.hint":`飞书群的自定义机器人:群设置 → 群机器人 → 添加自定义机器人,复制 Webhook 地址。开启了签名校验时填入它的签名密钥。`,"alerts.webhooks.format.dingtalk":`钉钉`,"alerts.webhooks.format.dingtalk.hint":`钉钉群的自定义机器人:群设置 → 机器人 → 自定义,复制 Webhook 地址。安全设置选「加签」时填入 SEC 开头的密钥;选「自定义关键词」时关键词需要包含「Astra」。`,"alerts.webhooks.format.wecom":`企业微信`,"alerts.webhooks.format.wecom.hint":`企业微信群机器人:群聊 → 添加群机器人,复制 Webhook 地址。`,"alerts.webhooks.format.slack":`Slack`,"alerts.webhooks.format.slack.hint":`Slack 的 Incoming Webhook 地址。`,"alerts.webhooks.format.discord":`Discord`,"alerts.webhooks.format.discord.hint":`Discord 频道设置 → 整合 → Webhook,复制 Webhook 地址。`,"alerts.webhooks.botSecret":`机器人签名密钥`,"alerts.webhooks.botSecretHint":`机器人安全设置里的签名密钥,加密保存,保存后不再显示。`,"alerts.webhooks.botSignedHint":`机器人开启了签名校验时打开,并填入它的签名密钥。`,"alerts.delivery.status.pending":`等待重试`,"alerts.delivery.status.success":`成功`,"alerts.delivery.status.failed":`失败`,"alerts.delivery.attempts":`已尝试 {count} 次`,"alerts.delivery.next":`下次重试 {time}`,"alerts.delivery.empty":`暂无投递记录`,"alerts.delivery.payload":`载荷`,"alerts.delivery.response":`响应`,"alerts.delivery.redeliver":`重新投递`,"alerts.delivery.redelivered":`已重新加入投递队列`,"alerts.rules":`告警规则`,"alerts.rules.hint":`每条规则 = 事件 + 条件 + 范围 → Webhook。同一对象只在进入触发状态时通知一次,可选持续提醒和恢复通知。`,"alerts.rules.empty":`还没有告警规则`,"alerts.rules.add":`添加规则`,"alerts.rules.edit":`编辑规则`,"alerts.rules.name":`名称`,"alerts.rules.event":`事件`,"alerts.rules.subjects":`范围`,"alerts.rules.subjectsAll":`全部`,"alerts.rules.subjectsOnly":`仅选中的`,"alerts.rules.webhooks":`通知到`,"alerts.rules.noWebhooks":`还没有 Webhook,先在上面添加一个。`,"alerts.rules.notifyResolved":`恢复时也通知`,"alerts.rules.repeat":`重复提醒(分钟)`,"alerts.rules.repeatHint":`持续触发时每隔多久再提醒一次;留空只提醒一次。`,"alerts.rules.cooldown":`防抖(分钟)`,"alerts.rules.cooldownHint":`恢复后这么久之内再次触发不通知,避免来回抖动刷屏。`,"alerts.rules.firing":`{count} 个触发中`,"alerts.rules.deleteConfirm":`删除告警规则 {name}?`,"alerts.rules.deleted":`已删除 {name}`,"alerts.rules.disabledBadge":`已停用`,"alerts.rules.enabled":`启用`,"alerts.firing":`触发中的告警`,"alerts.firing.empty":`当前没有触发中的告警`,"alerts.event.provider.balance.low":`提供商余额不足`,"alerts.event.provider.balance.low.hint":`已开启用量查询的 API Key 提供商,余额低于阈值(按套餐单位)或已用百分比达到阈值。`,"alerts.event.provider.quota.failed":`提供商余额查询失败`,"alerts.event.provider.quota.failed.hint":`余额查询连续失败达到次数。`,"alerts.event.account.quota.high":`订阅账号额度紧张`,"alerts.event.account.quota.high.hint":`订阅账号的 5 小时 / 每周 / 点数窗口已用百分比达到阈值。`,"alerts.event.account.auth.invalid":`订阅账号失效`,"alerts.event.account.auth.invalid.hint":`账号登录过期或被撤销,需要重新登录。`,"alerts.event.account.quota.failed":`订阅账号额度查询失败`,"alerts.event.account.quota.failed.hint":`后台额度同步连续失败达到次数。`,"alerts.event.token.usage.high":`令牌额度用量高`,"alerts.event.token.usage.high.hint":`令牌某项限额的已用百分比达到阈值。`,"alerts.event.token.limit.reached":`令牌额度用完`,"alerts.event.token.limit.reached.hint":`令牌某项限额已用完,或请求被每分钟请求数拦截。`,"alerts.param.metric":`比较`,"alerts.param.value":`阈值`,"alerts.param.plan":`套餐`,"alerts.param.plan.placeholder":`留空表示第一个有数据的套餐`,"alerts.param.window":`窗口`,"alerts.param.budget":`限额`,"alerts.param.budget.placeholder":`留空表示任一限额,例如 cost:month`,"alerts.choice.metric.remaining":`余额低于`,"alerts.choice.metric.usedPercent":`已用百分比达到`,"alerts.choice.window.any":`任一窗口`,"alerts.choice.window.session":`5 小时`,"alerts.choice.window.weekly":`每周`,"alerts.choice.window.credits":`点数`,"alerts.subject.provider":`提供商`,"alerts.subject.account":`订阅账号`,"alerts.subject.token":`令牌`,"key.title":`令牌额度查询`,"key.subtitle":`输入 Astra 令牌,查看它的额度和用量。只显示这个令牌自己的信息。`,"key.placeholder":`sk-astra-…`,"key.submit":`查询`,"key.invalid":`令牌无效或不存在`,"key.error":`查询失败:{error}`,"key.disabled":`这个令牌已停用`,"key.limits":`限额`,"key.unlimited":`不限额`,"key.rpm":`每分钟请求数:近 1 分钟 {used} / {limit}`,"key.usage":`用量`,"key.today":`今日`,"key.week":`本周`,"key.month":`本月`,"key.total":`累计`,"key.requests":`请求`,"key.cost":`费用`,"key.tokens":`Token`,"key.daily":`近 30 天费用`,"key.clients":`可用客户端`,"key.clientsAny":`所有客户端`,"key.directOnly":`仅直连`,"key.timeZone":`周期按 {zone} 计算`,"key.forget":`换一个令牌`,"key.resets":`{time} 重置`,"key.exhausted":`已用完`,"tokens.neverUsed":`尚未使用`,"tokens.settings":`设置`,"tokens.name":`名称`,"tokens.namePlaceholder":`例如:工作电脑`,"tokens.enable":`启用`,"tokens.disable":`停用`,"tokens.disableConfirm":`停用 {name}?`,"tokens.disableDetail":`使用该令牌的客户端和直接调用都会被拒绝,直到重新启用。不会修改客户端配置。`,"tokens.reset":`重置密钥`,"tokens.resetConfirm":`重置 {name} 的密钥?`,"tokens.resetDetail":`旧密钥立即失效。使用该令牌的已启用客户端会自动改写配置;被手动修改过的配置会跳过,需要重新启用。`,"tokens.resetDone":`已重置密钥,改写了 {count} 个客户端配置`,"tokens.skipped":`以下客户端未能自动更新,需要在「客户端」页面重新启用:{clients}`,"tokens.delete":`删除令牌`,"tokens.deleteConfirm":`删除 {name}?`,"tokens.deleteDetail":`使用它的客户端会切换到默认令牌并自动改写配置。历史请求日志保留该令牌的名称。`,"tokens.deleted":`已删除 {name}`,"tokens.created":`已创建 {name}`,"tokens.createTitle":`新建令牌`,"tokens.settingsTitle":`令牌设置 · {name}`,"tokens.empty":`还没有令牌`,"clients.enableTitle":`启用 {name}`,"clients.enableDetail":`以下是将要写入的改动。Astra 只新增或修改自己的配置项,并在首次修改前备份原文件。`,"clients.enabledToast":`{name} 已启用`,"clients.enabledRestart":`{name} 已启用,请重启客户端使配置生效`,"clients.noChanges":`配置已是最新,无需改动。`,"providers.add":`添加提供商`,"providers.count":`{count} 个提供商`,"providers.empty":`还没有提供商`,"providers.emptyDetail":`从内置模板添加 OpenAI、Anthropic、DeepSeek、OpenRouter 等,或接入自定义的兼容接口。`,"providers.import":`从其他应用导入`,"import.title":`从其他应用导入提供商`,"import.detail":`只读扫描 CC Switch、Alma、Claude Code、Codex、Magpie 的本地配置,不会修改它们;API Key 由服务端直接读取并加密保存,不经过浏览器。`,"import.search":`搜索名称或地址`,"import.path":`读取位置:{path}`,"import.notFound":`未找到`,"import.sourceError":`读取失败:{error}`,"import.noItems":`没有可导入的提供商`,"import.noMatch":`没有匹配的提供商`,"import.scanning":`正在扫描…`,"import.status.new":`新增`,"import.status.same":`已存在`,"import.status.sameHost":`同地址`,"import.status.off":`已停用`,"import.status.skip":`无法导入`,"import.existing":`已有提供商「{name}」`,"import.sameHostHint":`已有同地址提供商「{name}」,将作为新的提供商导入`,"import.noKey":`无 Key`,"import.models":`{count} 个模型`,"import.template":`模板:{id}`,"import.ignored":`将忽略:{fields}`,"import.skip.official-login":`官方登录(令牌绑定来源应用,不可导入)`,"import.skip.no-base-url":`缺少接口地址`,"import.skip.unsupported-protocol":`协议不支持`,"import.skip.points-to-astra":`指向 Astra 自身`,"import.skip.invalid-base-url":`接口地址无效`,"import.skip.no-inline-key":`Key 来自环境变量,不会读取`,"import.selected":`导入所选({count})`,"import.done":`已导入 {count} 个提供商`,"import.doneSkipped":`已导入 {count} 个提供商,跳过 {skipped} 个`,"import.footnote":`路由、限流、余额查询、会话与用量等设置不会导入;导入不会改动任何客户端配置,也不会发起上游请求。`,"import.rescan":`重新扫描`,"providers.modelCount":`{count} 个模型`,"providers.priceKeyShort":`价格:{key}`,"providers.templateUpdate":`模板更新`,"providers.noKey":`未设置密钥`,"providers.card.active":`已启用`,"providers.card.disabled":`已停用`,"providers.card.subscription":`订阅账号`,"providers.card.noAuth":`无需密钥`,"providers.card.requests7d":`近 7 天请求`,"providers.card.noRequests":`暂无请求`,"providers.created":`已添加 {name}`,"providers.addTitle":`选择提供商模板`,"providers.addTitleDetails":`填写提供商信息`,"providers.addDetail":`模板包含接口地址、协议和默认模型列表。`,"providers.custom":`自定义提供商`,"providers.customDetail":`任意 OpenAI / Anthropic / Gemini 兼容接口`,"providers.searchTemplates":`搜索模板`,"providers.category.recommended":`推荐`,"providers.category.official":`官方`,"providers.category.subscription":`订阅`,"providers.category.cn":`国内`,"providers.category.aggregator":`聚合平台`,"providers.category.local":`本地`,"providers.category.custom":`其他`,"providers.category.plugin":`插件`,"providers.pluginProvided":`由插件提供 · 打开后登录账号`,"providers.pluginHint":`安装 OpenCode / magpie 提供商插件后,它提供的提供商会出现在这里。`,"providers.create":`添加`,"providers.name":`名称`,"providers.variant":`区域 / 版本`,"providers.variantDefault":`默认区域`,"providers.baseUrl":`接口地址`,"providers.baseUrlHint":`通常以 /v1 结尾`,"providers.protocol":`协议`,"providers.authScheme":`认证方式`,"providers.apiKey":`API Key`,"providers.apiKeyHint":`加密保存在本机`,"providers.subscriptionWizardHint":`无需 API Key——使用订阅账号登录`,"providers.subscriptionWizardDetail":`创建提供商后,在其「账户」标签页点击「添加账户」,用浏览器完成授权即可。不同订阅的服务条款与配额以官方为准。`,"providers.subscriptionAdded":`已添加 · 在该提供商内添加账号`,"providers.subscription.quotaSession":`5h 已用 {percent}%`,"providers.subscription.quotaWeekly":`每周已用 {percent}%`,"providers.subscription.quotaCredits":`额度已用 {percent}%`,"providers.subscription.quotaBalance":`余额 {balance}`,"providers.subscription.quotaRefresh":`刷新额度`,"providers.subscription.quotaUnsupported":`该订阅暂不支持额度查询`,"providers.subscription.quotaResets":`重置于 {when}`,"providers.subscription.quotaLoading":`正在获取额度…`,"providers.subscription.quotaNoAccount":`账号已失效,重新登录后可查看额度`,"providers.subscription.quotaWindowPremium":`高级请求`,"providers.subscription.quotaPremiumCount":`已用 {used} / {total} 次高级请求`,"providers.subscription.quotaOverage":`额外 {count} 次`,"providers.subscription.quotaOverageOff":`未开启超额使用`,"providers.subscription.quotaFetchedAt":`更新于 {when}`,"providers.subscription.quotaNoWindows":`该账号没有可展示的额度窗口`,"providers.subscription.quotaWindowSession":`会话窗口`,"providers.subscription.quotaWindowWeekly":`每周窗口`,"providers.subscription.quotaWindowCredits":`额度`,"providers.quota.title":`用量查询`,"providers.quota.footer":`按模板查询该提供商的余额或套餐用量,结果显示在提供商卡片和托盘里。查询失败只会显示错误,不会影响提供商本身的使用。`,"providers.quota.enable":`启用用量查询`,"providers.quota.enableHint":`开启后按间隔在后台刷新`,"providers.quota.template":`查询模板`,"providers.quota.templateAuto":`自动({name})`,"providers.quota.templateNone":`自动(没有匹配的模板)`,"providers.quota.custom":`自定义`,"providers.quota.kind.balance":`余额`,"providers.quota.kind.plan":`套餐用量`,"providers.quota.param.userId":`用户 ID`,"providers.quota.param.accessToken":`系统访问令牌`,"providers.quota.paramsHint":`New API / One API 在个人设置里生成的系统访问令牌和用户 ID,不是 sk- 开头的 API Key。`,"providers.quota.secretStored":`已保存,留空不修改`,"providers.quota.interval":`自动查询间隔(分钟)`,"providers.quota.intervalHint":`留空跟随全局设置,0 表示不在后台查询。当前:{value}`,"providers.quota.intervalEvery":`每 {minutes} 分钟`,"providers.quota.intervalOff":`不在后台查询`,"providers.quota.timeout":`超时(秒)`,"providers.quota.baseUrl":`查询地址`,"providers.quota.baseUrlHint":`留空使用提供商的接口地址({{origin}} / {{baseUrl}} 由它得出)`,"providers.quota.method":`方法`,"providers.quota.url":`URL`,"providers.quota.urlHint":`可用占位符:{{origin}}、{{baseUrl}}、{{host}}、{{apiKey}} 以及上面的参数名`,"providers.quota.auth":`认证`,"providers.quota.auth.provider":`使用提供商的 API Key`,"providers.quota.auth.none":`只用下面的请求头`,"providers.quota.headers":`请求头(JSON)`,"providers.quota.extract":`提取规则(JSON)`,"providers.quota.extractHint":`字符串是响应里的路径(如 data.balance),数字是常量;数组按顺序取第一个存在的值;支持 $const、$add、$sub、$mul、$div、$scale、$pctUsed、$eq、$not、$case、$var、$time。取不到的字段不会被当成 0。`,"providers.quota.invalidJson":`{field} 不是有效的 JSON 对象`,"providers.quota.test":`测试查询`,"providers.quota.testDesc":`用当前(未保存)的配置发一次真实请求`,"providers.quota.fetch":`立即查询`,"providers.quota.refresh":`刷新余额`,"providers.quota.fetchedAt":`更新于 {time}`,"providers.quota.never":`尚未查询`,"providers.quota.off":`未启用用量查询`,"providers.quota.rawResponse":`原始响应(已脱敏)`,"providers.quota.requestUrl":`请求地址`,"providers.quota.httpStatus":`HTTP 状态`,"providers.quota.testOk":`查询成功`,"providers.quota.testFailed":`查询失败`,"providers.quota.extracted":`提取结果`,"providers.quota.balance":`余额 {amount}`,"providers.quota.usedPercent":`已用 {percent}%`,"providers.quota.window":`{window}已用 {percent}%`,"providers.quota.totalUsed":`已用 {used} / 共 {total}`,"providers.quota.resets":`{time}重置`,"providers.quota.invalid":`账户不可用`,"providers.quota.failed":`用量查询失败:{error}`,"providers.quota.lastGood":`下面是上次成功的结果`,"providers.quota.error.config":`查询配置不完整`,"providers.quota.error.no_key":`该提供商没有 API Key`,"providers.quota.error.unauthorized":`上游拒绝了额度查询(凭据无效或没有权限)`,"providers.quota.error.no_endpoint":`该地址没有额度接口,请换一个模板或使用自定义查询`,"providers.quota.error.rate_limited":`上游限流,请调大查询间隔`,"providers.quota.error.upstream":`上游返回错误`,"providers.quota.error.timeout":`查询超时`,"providers.quota.error.network":`无法连接上游`,"providers.quota.error.not_json":`响应不是 JSON`,"providers.quota.error.too_large":`响应过大`,"providers.quota.error.empty":`查询成功,但没有取到额度字段`,"settings.proxy":`网络代理`,"settings.proxy.footer":`网关转发、订阅登录、额度查询、更新检查和客户端安装都按这里的设置联网;本机地址始终直连,单独配置了代理的提供商以提供商为准。`,"settings.proxy.mode":`代理方式`,"settings.proxy.mode.system":`跟随系统`,"settings.proxy.mode.custom":`自定义`,"settings.proxy.mode.direct":`不使用`,"settings.proxy.mode.system.hint":`优先使用 HTTPS_PROXY 等环境变量,其次是操作系统的代理设置`,"settings.proxy.mode.custom.hint":`所有出站请求使用下面填写的代理`,"settings.proxy.mode.direct.hint":`忽略环境变量和系统代理,一律直连`,"settings.proxy.url":`代理地址`,"settings.proxy.urlHint":`支持 http、https、socks5,需包含端口`,"settings.proxy.username":`用户名`,"settings.proxy.password":`密码`,"settings.proxy.optional":`可选`,"settings.proxy.passwordSaved":`已保存,留空则不修改`,"settings.proxy.bypass":`不走代理的地址`,"settings.proxy.bypassHint":`用逗号分隔,同时匹配子域名`,"settings.proxy.saved":`代理设置已保存`,"settings.pluginMarket":`插件市场`,"settings.pluginMarket.footer":`插件市场默认读取 Astra 官网的清单(含社区仓库的插件和官网发布的插件包)。官网不可达时依次用上次拿到的副本和内置副本。环境变量 ASTRA_PLUGIN_MARKET 优先于这里的设置。`,"settings.pluginMarket.url":`市场地址`,"settings.pluginMarket.urlHint":`清单(registry.json)的 http(s) 地址;留空并保存则恢复默认。`,"settings.pluginMarket.offline":`只用本地副本`,"settings.pluginMarket.offlineHint":`不联网取清单,也没有搜索,只显示上次拿到的副本或内置副本。`,"settings.pluginMarket.saved":`插件市场地址已保存`,"settings.pluginMarket.reset":`恢复默认`,"settings.quota":`提供商用量查询`,"settings.quota.autoInterval":`后台查询间隔`,"settings.quota.autoIntervalHint":`已启用用量查询的提供商按这个间隔在后台刷新余额,0 表示关闭;单个提供商可以另行设置。`,"settings.usageTimeZone":`令牌额度时区`,"settings.usageTimeZone.system":`服务器时区({zone})`,"settings.usageTimeZone.hint":`令牌的每日、每周、每月额度在这个时区的零点重置,每日用量也按它统计。容器里默认是 UTC。`,"settings.minutes":`分钟`,"tray.quotaBalance":`余额`,"providers.subscription.relogin":`重新登录`,"providers.getKey":`获取 API Key ↗`,"providers.priceKey":`价格表`,"providers.priceKeyHint":`决定使用哪个提供商的模型价格;同一模型在不同提供商价格不同。`,"providers.priceKeyNone":`仅用官方默认价`,"providers.priceKeyDefault":`默认({id})`,"providers.templateModels":`将添加模板中的 {count} 个模型,之后可增删。`,"providers.tab.models":`模型`,"providers.tab.settings":`设置`,"providers.tab.accounts":`账户`,"providers.tab.apiKey":`API Key`,"providers.test":`测试连接`,"providers.testDialog.title":`测试 {name}`,"providers.testDialog.subtitle":`应用隐私策略并记录请求,不重试`,"providers.testDialog.modeSingle":`单模型`,"providers.testDialog.modeBatch":`批量模型`,"providers.testDialog.config":`测试配置`,"providers.testDialog.model":`测试模型`,"providers.testDialog.modelPlaceholder":`输入任意模型 ID`,"providers.testDialog.showModels":`显示模型列表`,"providers.testDialog.protocol":`测试协议`,"providers.testDialog.stream":`流式响应`,"providers.testDialog.maxTokens":`最大输出 tokens`,"providers.testDialog.prompt":`测试提示词(可选)`,"providers.testDialog.promptHint":`留空时使用默认提示词。`,"providers.testDialog.realRequest":`真实请求,可能消耗额度`,"providers.testDialog.savedCredentials":`使用此提供商已保存的连接与凭据。`,"providers.testDialog.start":`开始测试`,"providers.testDialog.retest":`重新测试`,"providers.testDialog.stop":`停止`,"providers.testDialog.stopRest":`停止后续`,"providers.testDialog.testN":`测试 {count} 个模型`,"providers.testDialog.metrics.http":`HTTP 响应`,"providers.testDialog.metrics.firstWait":`首字等待`,"providers.testDialog.metrics.ttft":`首字总延迟`,"providers.testDialog.metrics.total":`完整耗时`,"providers.testDialog.metricsHelp":`HTTP 响应:从发出请求到收到上游响应头。首字:到回答的第一个字节。等待从响应头到达算起,总延迟从发出请求算起。`,"providers.testDialog.reply":`API 提供商回复`,"providers.testDialog.preview":`预览`,"providers.testDialog.raw":`原文`,"providers.testDialog.rawNote":`网关处理后的响应正文(凭据已脱敏)`,"providers.testDialog.rawTruncated":`已截断:原文超过 256 KiB`,"providers.testDialog.reasoning":`推理过程`,"providers.testDialog.noText":`上游没有返回文本。`,"providers.testDialog.headers":`响应头`,"providers.testDialog.headersCount":`{count} 个`,"providers.testDialog.headersEmpty":`上游没有返回响应头。`,"providers.testDialog.emptyTitle":`尚未测试`,"providers.testDialog.emptyDetail":`点击开始测试,向上游发送一条真实请求。`,"providers.testDialog.status.idle":`等待测试`,"providers.testDialog.status.running":`测试中`,"providers.testDialog.status.success":`测试成功`,"providers.testDialog.status.failed":`测试失败`,"providers.testDialog.selected":`已选 {n} / {total}`,"providers.testDialog.progress":`已完成 {done} / {total} · 成功 {ok} · 失败 {failed}`,"providers.testDialog.progressDone":`本批已完成 {total} / {total} · 成功 {ok} · 失败 {failed}`,"providers.testDialog.clearSelection":`清空选择`,"providers.testDialog.searchModels":`搜索或输入模型 ID`,"providers.testDialog.addModel":`添加「{id}」`,"providers.testDialog.view":`查看`,"providers.testDialog.noModels":`该提供商还没有模型;在上方输入模型 ID 即可测试。`,"providers.testDialog.status.queued":`排队中`,"providers.testDialog.status.cancelled":`已取消`,"providers.testDialog.statusColumn":`状态`,"providers.testDialog.ownFilter":`输入模型 ID 可添加列表中没有的模型`,"providers.duplicate":`复制提供商`,"providers.deleteConfirm":`删除 {name}?`,"providers.deleteDetail":`提供商及其模型设置会被删除,请求记录保留。`,"providers.deleted":`已删除`,"providers.deleteBound":`仍有客户端在使用:{clients}。请先为它们切换提供商。`,"providers.templateVersions":`当前版本 {current},最新版本 {latest}`,"providers.templateApplied":`已更新到最新模板`,"providers.templateUpToDate":`已是最新模板。`,"providers.searchModels":`搜索模型`,"providers.addModels":`添加模型`,"providers.addModelsDetail":`输入模型 ID,每行一个或用逗号分隔;会自动关联到系统模型以继承参数和价格。`,"providers.fetchRemote":`从上游获取`,"providers.fetchRemoteDetail":`读取提供商的模型列表,自动关联到系统模型以继承参数和价格。`,"providers.noModels":`还没有模型`,"providers.noModelsDetail":`从上游获取模型列表,或手动输入模型 ID。`,"providers.modelsFooter":`模型默认只需要 ID:未覆盖的字段继承关联的系统模型,价格按此提供商的价格表计算。`,"providers.modelMap.title":`模型映射`,"providers.modelMap.footer":`把客户端请求的模型 ID 转成本提供商的模型,例如 deepseek-v4.1 → deepseek-chat。映射的 ID 会出现在客户端的模型列表里;客户端绑定了多个提供商时,请求这个 ID 也会路由到这里。计费按实际发送的模型计算。`,"providers.modelMap.add":`添加映射`,"providers.modelMap.addDetail":`客户端请求左边的模型 ID 时,Astra 改为向本提供商请求右边的模型。`,"providers.modelMap.needModels":`先给提供商添加模型`,"providers.modelMap.from":`请求的模型 ID`,"providers.modelMap.to":`本提供商的模型`,"providers.modelMap.toPlaceholder":`选择模型`,"providers.modelMap.remove":`删除映射 {from}`,"providers.modelMap.saved":`已保存模型映射`,"providers.modelMap.missingTarget":`目标模型不存在`,"providers.unlinked":`未关联`,"providers.modelsAdded":`已添加 {count} 个模型`,"providers.addSelected":`添加 {count} 个`,"providers.linksTo":`关联到 {id}`,"providers.noLink":`不关联系统模型`,"providers.added":`已添加`,"providers.linkedModel":`关联的系统模型`,"providers.linkedModelHint":`未覆盖的字段和价格都从这里继承。`,"providers.overrides":`字段覆盖`,"providers.price":`价格`,"providers.customPrice":`自定义价格`,"providers.customPriceHint":`自定义价格完全替换继承的价格,不乘提供商倍率。`,"providers.inheritedPriceHint":`当前生效的价格(继承,已按提供商价格表解析):`,"providers.removeModel":`从提供商移除 {id}?`,"providers.removeModelShort":`移除此模型`,"providers.section.basic":`基本信息`,"providers.section.auth":`认证`,"providers.section.endpoints":`接口`,"providers.section.billing":`计费`,"providers.section.advanced":`高级`,"providers.section.info":`信息`,"providers.subscription":`订阅账号`,"providers.subscription.footer":`令牌加密保存在本机;即将过期时自动刷新。`,"providers.subscription.login":`登录订阅`,"providers.subscription.loginDesc":`按提供商的授权流程完成登录,令牌只保存在本机。`,"providers.subscription.logout":`登出并删除`,"providers.subscription.logoutConfirm":`登出账号「{name}」?绑定该账号的客户端将回退到默认账号。`,"providers.subscription.refreshToken":`刷新令牌`,"providers.subscription.tokenRefreshed":`令牌已刷新`,"providers.subscription.expires":`到期`,"providers.subscription.status.active":`有效`,"providers.subscription.status.expired":`已过期`,"providers.subscription.status.revoked":`已失效`,"providers.subscription.none":`尚未登录订阅账号`,"providers.subscription.openAuthorize":`打开授权页`,"providers.subscription.doneAuthorize":`我已完成授权`,"providers.subscription.waiting":`等待授权…`,"providers.subscription.waitingDetail":`已在浏览器打开授权页;完成后本页会自动检测到新账号。`,"providers.subscription.cliDetail":`在浏览器完成授权后本页会自动完成登录(服务端轮询,无需回调地址)。`,"providers.subscription.checkNow":`我已授权,立即验证`,"providers.subscription.checkNowHint":`在浏览器完成授权后点一下;本页也会每几秒自动检查一次。`,"providers.subscription.pasteTitle":`把授权页显示的授权码粘回来`,"providers.subscription.pasteDetail":`Claude 的回调地址是它自己注册的地址(不是本机),所以无法自动跳回来:授权页上会显示一个授权码。点「打开授权页」完成授权,再把授权码整段复制粘贴到下面。`,"providers.subscription.pastePlaceholder":`粘贴授权码(形如 xxxx#yyyy)`,"providers.subscription.pasteCode":`授权码`,"providers.subscription.pasteSubmit":`完成登录`,"providers.subscription.stillWaiting":`还没收到授权,请确认浏览器里已完成确认。`,"providers.subscription.deviceCode":`设备码`,"providers.subscription.visitPage":`打开验证页面`,"providers.subscription.loginOk":`授权成功:{name}`,"providers.subscription.loginFailed":`登录失败`,"providers.subscription.importCodex":`导入本机 Codex 登录`,"providers.subscription.importCodexHint":`把本机 ~/.codex/auth.json 里已有的 codex 登录态接进来,不用再走一遍浏览器授权`,"providers.subscription.importOk":`已导入本机 Codex 账号:{name}`,"providers.subscription.importCopilot":`导入本机 GitHub 授权`,"providers.subscription.importCopilotHint":`接入本机已有的 GitHub 授权(VS Code 的 GitHub 会话、GH_TOKEN 或 Copilot 插件配置)来建 Copilot 账号,不用再走一遍设备码授权`,"providers.subscription.importCopilotPlaceholder":`或粘贴 GitHub token(gho_…)`,"providers.subscription.importCopilotToken":`GitHub token`,"providers.subscription.localCopilotFound":`检测到本机 GitHub 授权:{source}`,"providers.subscription.importBatch":`批量导入 token`,"providers.subscription.importBatchTitle":`批量导入 GitHub token`,"providers.subscription.importBatchLabel":`GitHub token 列表(每行一个)`,"providers.subscription.importBatchDesc":`粘贴 GitHub token(gho_ / ghp_ / github_pat_),每行一个。每个 token 会建成一个 Copilot 账号;重复的、没有 Copilot 订阅的 token 只会报告结果,不会导入。也可以直接粘贴可用的 Copilot 令牌(tid=…;exp=…),它不需要置换,但无法自动续期,到期后需重新导入。`,"providers.subscription.importBatchPlaceholder":`gho_xxxxxxxxxxxx
11
+ tid=xxxx;exp=1760000000;sku=...
12
+ # 以 # 开头的行会被忽略`,"providers.subscription.importBatchCount":`已识别 {n} 个 token`,"providers.subscription.importBatchRun":`导入`,"providers.subscription.importBatchSummary":`已导入 {ok} 个,重复 {dup} 个,失败 {fail} 个`,"providers.subscription.importBatchStatus.imported":`已导入`,"providers.subscription.importBatchStatus.duplicate":`重复`,"providers.subscription.importBatchStatus.invalid_format":`格式错误`,"providers.subscription.importBatchStatus.failed":`失败`,"providers.subscription.importBatchStatus.updated":`已更新`,"providers.subscription.importBatchStatus.ready":`可导入`,"providers.accounts.statTotal":`{n} 个账户`,"providers.accounts.statUsable":`{n} 可用`,"providers.accounts.statCooling":`{n} 冷却中`,"providers.accounts.statDead":`{n} 失效`,"providers.accounts.providerProxy":`提供商代理:{proxy}`,"providers.accounts.filter.all":`全部`,"providers.accounts.filter.usable":`可用`,"providers.accounts.filter.cooling":`冷却`,"providers.accounts.filter.dead":`失效`,"providers.accounts.filter.disabled":`停用`,"providers.accounts.filterLabel":`按状态筛选`,"providers.accounts.search":`搜索邮箱 / 名称 / Key`,"providers.accounts.add":`添加账户`,"providers.accounts.addLogin":`浏览器登录`,"providers.accounts.addLoginProxy":`浏览器登录(指定代理)…`,"providers.accounts.addToken":`粘贴令牌…`,"providers.accounts.addApiKey":`添加 API Key…`,"providers.accounts.batchImport":`批量导入`,"providers.accounts.noMatch":`没有符合条件的账户`,"providers.accounts.select":`选择 {name}`,"providers.accounts.selected":`已选 {n} 个账户`,"providers.accounts.clearSelection":`取消选择`,"providers.accounts.bulkDeleteConfirm":`删除选中的 {n} 个账户?`,"providers.accounts.bulkDeleteDetail":`令牌会从本机删除;绑定这些账户的客户端将回退到默认账户。`,"providers.accounts.bulkDone":`已处理 {n} 个账户`,"providers.accounts.kind.oauth":`OAuth`,"providers.accounts.kind.api_key":`API Key`,"providers.accounts.source.login":`浏览器登录`,"providers.accounts.source.local":`本机导入`,"providers.accounts.source.token":`粘贴导入`,"providers.accounts.source.batch":`批量导入`,"providers.accounts.expiresAt":`{when} 到期`,"providers.accounts.neverExpires":`不过期`,"providers.accounts.proxyBadge":`独立代理`,"providers.accounts.signedOut":`登录已失效`,"providers.accounts.quotaShortWeekly":`周`,"providers.accounts.quotaShortSession":`会话`,"providers.accounts.quotaShortCredits":`额度`,"providers.accounts.quotaShortPremium":`高级`,"providers.accounts.order":`#{n}`,"providers.accounts.detail.identity":`账户`,"providers.accounts.detail.name":`名称`,"providers.accounts.detail.proxy":`账户代理`,"providers.accounts.detail.proxyHint":`此账户的请求、令牌刷新与额度查询都走这里;留空则跟随提供商({fallback})。`,"providers.accounts.detail.quota":`额度`,"providers.accounts.detail.credentials":`凭据`,"providers.accounts.detail.kind":`类型`,"providers.accounts.detail.source":`来源`,"providers.accounts.detail.status":`状态`,"providers.accounts.detail.expires":`令牌到期`,"providers.accounts.detail.lastRefresh":`最近刷新`,"providers.accounts.detail.created":`添加时间`,"providers.accounts.detail.order":`故障转移顺序`,"providers.accounts.detail.lastError":`最近错误`,"providers.accounts.detail.key":`API Key`,"providers.accounts.proxyFallbackSystem":`系统代理`,"providers.accounts.renamed":`已重命名`,"providers.accounts.proxySaved":`账户代理已保存`,"providers.accounts.loginProxyTitle":`使用指定代理登录`,"providers.accounts.loginProxyDesc":`新账户从登录起就通过这个代理访问上游(换码、刷新、请求都走它)。授权页仍在你的浏览器里打开。`,"providers.accounts.loginProxyStart":`开始登录`,"providers.accounts.import.batchTitle":`批量导入账户`,"providers.accounts.import.tokenTitle":`粘贴令牌`,"providers.accounts.import.apiKeyTitle":`添加 API Key`,"providers.accounts.import.desc":`令牌只在本机加密保存,结果里只显示首尾几位。`,"providers.accounts.import.label":`要导入的令牌(每行一条)`,"providers.accounts.import.apiKeyLabel":`API Key(每行一把)`,"providers.accounts.import.formats":`支持:{formats}`,"providers.accounts.import.count":`已识别 {n} 条`,"providers.accounts.import.preview":`预览`,"providers.accounts.import.run":`导入`,"providers.accounts.import.proxy":`账户代理(可选)`,"providers.accounts.import.summary":`已导入 {ok} 条,重复 {dup} 条,失败 {fail} 条`,"providers.accounts.import.previewSummary":`可导入 {ok} 条,重复 {dup} 条,无法识别 {fail} 条`,"providers.accounts.import.rotateWarning":`refresh token 通常只能用一次:导入后,原来使用它的客户端(Claude Code、Codex 等)可能需要重新登录。`,"providers.accounts.credential.refresh_token":`refresh token`,"providers.accounts.credential.setup_token":`setup-token`,"providers.accounts.credential.api_key":`API Key`,"providers.accounts.credential.github_token":`GitHub token`,"providers.accounts.credential.copilot_token":`Copilot 令牌`,"providers.accounts.credential.claude_credentials":`.credentials.json`,"providers.accounts.credential.codex_auth_json":`auth.json`,"providers.accounts.format.claude-refresh-token":`refresh token(sk-ant-ort01-…)`,"providers.accounts.format.claude-setup-token":`claude setup-token(sk-ant-oat01-…)`,"providers.accounts.format.claude-credentials-json":`Claude Code 的 .credentials.json`,"providers.accounts.format.codex-auth-json":`~/.codex/auth.json 的内容`,"providers.accounts.format.refresh-token":`refresh token`,"providers.accounts.format.grok-sso":`Grok Web SSO(sso cookie / email----password----…----sso)`,"providers.accounts.format.kimi-api-key":`Kimi Code API Key(sk-kimi-…)`,"providers.accounts.format.zai-api-key":`Z.AI Coding Plan API Key`,"providers.accounts.format.bigmodel-api-key":`智谱 Coding Plan API Key`,"providers.accounts.format.github-token":`GitHub token(gho_ / ghp_ / github_pat_)`,"providers.accounts.format.copilot-token":`Copilot 令牌(tid=…;exp=…)`,"providers.subscription.localCopilotHint":`点「导入本机 GitHub 授权」时会读取 VS Code 的系统凭据(macOS 会弹授权框),也可以直接粘贴一个 GitHub token`,"providers.subscription.localCodexFound":`检测到本机 Codex 登录:{who}`,"providers.subscription.unknownAccount":`未知账号`,"providers.subscription.credits.title":`额度重置卡`,"providers.subscription.credits.footer":`codex 的额度重置卡:用一张可以立刻解除当前被限流的窗口。`,"providers.subscription.credits.none":`这个账号没有重置卡`,"providers.subscription.credits.unavailable":`暂时读不到重置卡(账号可能未登录,或上游不可达)。`,"providers.subscription.credits.availableCount":`可用 {count} 张`,"providers.subscription.credits.consume":`使用`,"providers.subscription.credits.consumeConfirm":`使用重置卡「{title}」?`,"providers.subscription.credits.consumeDetail":`会立刻解除当前被限流的窗口,且无法撤销。`,"providers.subscription.credits.consumed":`重置卡已使用,额度已刷新`,"providers.subscription.credits.consumeFailed":`使用重置卡失败`,"providers.subscription.credits.expires":`有效期至 {when}`,"providers.subscription.credits.redeemedAt":`已于 {when} 使用`,"providers.subscription.credits.notInPlan":`当前套餐不支持`,"providers.subscription.credits.status.available":`可用`,"providers.subscription.credits.status.redeemed":`已使用`,"providers.subscription.credits.status.expired":`已过期`,"providers.subscription.needsVerification":`即将支持:该订阅的登录流程尚未核实,暂不能登录`,"providers.subscription.current":`当前使用`,"providers.subscription.disabled":`已停用`,"providers.subscription.activate":`切换到此账号`,"providers.subscription.activated":`已切换到 {name},下一个请求起生效`,"providers.subscription.enable":`启用`,"providers.subscription.disable":`停用`,"providers.subscription.moveUp":`上移`,"providers.subscription.moveDown":`下移`,"providers.subscription.cooldown":`限流冷却至 {when}`,"providers.subscription.policy.title":`使用策略`,"providers.subscription.policy.footer":`切换账号对下一个请求立即生效,无需重启客户端;在客户端或令牌上固定了账号的请求不受影响。`,"providers.subscription.policy.claudeCodeOnly":`仅限 Claude Code`,"providers.subscription.policy.claudeCodeOnlyDetail":`只接受 Claude Code(含 IDE 插件与 Agent SDK)的请求,并原样转发它的请求头;其他客户端会收到 403。`,"providers.subscription.policy.anyWarning":`已允许其他客户端使用:Astra 只补齐 OAuth 必需的请求头,不会伪装成 Claude Code。Anthropic 可能把这些请求计入额外用量、直接拒绝,或视为违反服务条款。`,"providers.subscription.policy.mimic":`其他客户端模拟 Claude Code`,"providers.subscription.policy.mimicDetail":`非 Claude Code 客户端的请求会带上 Claude Code 的身份(system 身份块、claude-cli User-Agent、X-Stainless 指纹与完整 beta 集),否则订阅令牌的非 Haiku 模型会被上游拒绝。默认关闭。`,"providers.subscription.policy.mimicWarning":`已开启模拟 Claude Code:请求会伪装成官方 CLI。这违反 Anthropic 的使用条款,可能导致账号被限制或封禁,风险由你自己的账号承担。`,"providers.subscription.policy.switchMode":`账号切换`,"providers.subscription.policy.manual":`手动`,"providers.subscription.policy.failover":`自动故障转移`,"providers.subscription.policy.manualDetail":`只在你切换账号,或当前账号失效、被停用时更换。`,"providers.subscription.policy.failoverDetail":`当前账号被限流(429)或登录失效时,自动换到下一个可用账号并继续使用它。`,"providers.subscription.policy.balanced":`均衡分配`,"providers.subscription.policy.balancedDetail":`把请求分摊到所有可用账号,优先选当前并发最少的。同一会话(相同 prompt_cache_key 或 Claude Code 会话)固定使用同一个账号,保证上游提示词缓存命中;被限流或失效的账号会被跳过。绑定关系只保存在内存里。`,"providers.notes":`备注`,"providers.apiKeyStored":`API Key 加密保存在本机,留空表示不修改。`,"providers.replaceKey":`输入新密钥以替换`,"providers.endpointsFooter":`每种协议一个地址;客户端协议与上游不同时,Astra 自动转换。`,"providers.fullUrl":`完整 URL`,"providers.addEndpoint":`添加接口`,"providers.preferred":`上游协议优先级`,"providers.preferredHint":`需要转换协议时按此顺序选择上游接口`,"providers.preferredMissing":`{protocol} 没有配置接口地址,排在优先级里也不会被选中`,"providers.billingFooter":`倍率只作用于继承来的价格;模型上的自定义价格不乘倍率。`,"providers.multiplier":`价格倍率`,"providers.multiplierHint":`例如中转站按官方价 ×1.1 计费`,"providers.proxy":`HTTP 代理`,"providers.proxyHint":`此提供商的请求、订阅登录、令牌刷新与额度查询都走这里;订阅账户可在「账户」里单独设置`,"providers.headers":`额外请求头`,"providers.addHeader":`添加请求头`,"providers.addHeaderDetail":`随每个发往该提供商的请求一起发送;保存后生效。`,"providers.headerName":`名称`,"providers.headerValue":`值`,"providers.addEndpointDetail":`为一种协议配置接口地址;保存后生效。`,"providers.fullUrlHint":`地址即完整请求 URL,不再追加路径`,"providers.adapterSettings":`适配器设置(JSON)`,"providers.adapter":`适配器`,"providers.boundClients":`使用中的客户端`,"origin.inherited":`继承`,"origin.overridden":`已覆盖`,"origin.unset":`未设置`,"origin.reset":`重置为继承`,"models.count":`{count} 个模型`,"models.search":`搜索模型、别名`,"models.allVendors":`全部厂商`,"models.sync":`同步模型目录`,"models.syncDetail":`从官网目录(astra-gate.si)获取最新的模型参数和价格,用户修改过的字段不会被覆盖。`,"models.new":`新建模型`,"models.newDetail":`为系统中没有的模型添加参数和默认价格。`,"models.col.model":`模型`,"models.col.vendor":`厂商`,"models.col.context":`上下文`,"models.col.price":`输入 / 输出`,"models.col.providerPrices":`提供商价格`,"models.empty":`没有匹配的模型`,"models.source.seed":`内置`,"models.source.sync":`同步`,"models.source.user":`自定义`,"models.modified":`已修改`,"models.providerPriceCount":`{count} 个提供商`,"models.updated":`更新于 {time}`,"models.resetField":`恢复为内置值`,"models.fieldReset":`已恢复为内置值`,"models.deleteConfirm":`删除模型 {id}?`,"models.section.basic":`基本参数`,"models.section.capabilities":`能力`,"models.section.pricing":`官方默认价格`,"models.section.providerPrices":`各提供商价格`,"models.section.overrides":`提供商自定义价格`,"models.section.simulator":`计费模拟器`,"models.modifiedFooter":`标记为「已修改」的字段不会被后续的内置数据或同步覆盖。`,"models.pricingHint":`模型厂商的官方价格;没有对应提供商价格时使用(会乘提供商倍率)。`,"models.providerPricesFooter":`同一模型在不同 AI 提供商的价格(按价格表区分),优先于官方默认价。`,"models.overridesFooter":`这些提供商为该模型单独设置了价格,优先级最高。`,"models.noProviderPrices":`没有提供商专属价格`,"models.hasTimeWindows":`含时段规则`,"models.hasTiers":`含分档`,"models.deletePrice":`删除 {key} 的价格?`,"models.addPrice":`添加提供商价格`,"models.editPrice":`编辑 {key} 的价格`,"models.priceSheetDetail":`该价格只在价格表匹配的提供商上生效。`,"models.pickPriceKey":`选择价格表`,"models.customPriceKey":`或输入自定义价格表 ID`,"models.upstreamId":`该提供商的模型 ID`,"models.upstreamIdHint":`与系统模型 ID 不同时填写,用于自动关联`,"models.simulatorUnsaved":`有未保存的更改:模拟使用编辑中的价格。`,"models.field.id":`模型 ID`,"models.field.idHint":`客户端请求时使用的名称`,"models.field.displayName":`显示名称`,"models.field.vendor":`厂商`,"models.field.family":`系列`,"models.field.aliases":`别名`,"models.field.contextWindow":`上下文窗口`,"models.field.maxOutputTokens":`最大输出`,"models.field.inputPrice":`输入价格 /1M`,"models.field.outputPrice":`输出价格 /1M`,"models.sync.newModel":`新模型`,"models.sync.price":`价格 · {key}`,"models.sync.field":`字段 · {field}`,"models.sync.applied":`已应用 {count} 项更改`,"models.sync.apply":`应用 {count} 项`,"models.sync.check":`检查更新`,"models.sync.none":`没有可用的更新`,"models.sync.userModified":`已被用户修改`,"models.sync.more":`还有 {n} 处变更`,"models.sync.selectAll":`全选`,"models.sync.selectedOf":`已选 {n} / {total} 项 · {models} 个模型`,"models.sync.groupCount":`{n} 项`,"cap.vision":`图像输入`,"cap.tools":`工具调用`,"cap.reasoning":`推理`,"cap.promptCache":`提示缓存`,"cap.audio":`音频`,"cap.pdf":`PDF`,"cap.structuredOutput":`结构化输出`,"requests.col.cache":`缓存命中 / 写入`,"usage.title":`Token 用量`,"usage.inputTotal":`输入总量`,"usage.outputTotal":`输出总量`,"usage.input":`普通输入`,"usage.output":`普通输出`,"usage.uncachedInput":`未缓存输入`,"usage.regularOutput":`非推理输出`,"usage.cacheRead":`缓存命中`,"usage.cacheWrite":`缓存写入`,"usage.cacheWrite5m":`缓存写入 · 5 分钟`,"usage.cacheWrite1h":`缓存写入 · 1 小时`,"usage.reasoning":`推理 / 思考`,"usage.inputAudio":`音频输入`,"usage.outputAudio":`音频输出`,"usage.inputImage":`图像输入`,"usage.outputImage":`图像输出`,"usage.hitShort":`命中`,"usage.writeShort":`写入`,"usage.reasoningShort":`推理`,"usage.hitRate":`缓存命中率`,"usage.noCache":`上游未报告缓存读取或写入 Token`,"usage.missing":`上游未报告用量,缓存命中率未知。`,"usage.hitTooltip":`缓存命中 {read} / 输入总量 {total} tokens`,"usage.writeTooltip":`共写入 {tokens} tokens;5m / 1h 在详情中分别列出`,"usage.totalsHint":`输入总量已包含缓存命中和写入;输出总量已包含推理 Token,不重复相加。命中率 = 缓存读取 / 输入总量。`,"usage.cacheAmounts":`命中 {read} · 写入 {write}`,"settings.appearance":`外观`,"settings.theme":`主题`,"settings.theme.system":`跟随系统`,"settings.theme.light":`浅色`,"settings.theme.dark":`深色`,"settings.accent":`强调色`,"settings.accent.system":`跟随系统`,"settings.accent.followingSystem":`正在使用系统强调色`,"settings.accent.systemUnavailable":`无法读取系统强调色,使用默认蓝色`,"settings.accent.blue":`蓝色`,"settings.accent.purple":`紫色`,"settings.accent.pink":`粉色`,"settings.accent.red":`红色`,"settings.accent.orange":`橙色`,"settings.accent.yellow":`黄色`,"settings.accent.green":`绿色`,"settings.accent.graphite":`石墨色`,"settings.language":`语言`,"settings.languageHint":`同时决定新请求计费说明的语言`,"settings.gateway":`网关`,"settings.requireKey":`要求访问密钥`,"settings.requireKeyHint":`默认开启。关闭后,不带密钥(或密钥无效)的请求也能使用网关,按默认令牌的提供商处理。`,"settings.requireKeyOffConfirm":`关闭访问密钥验证?`,"settings.requireKeyOffDetail":`关闭后,任何能访问本网关地址的程序或设备都可以直接使用你的提供商额度,无需密钥。仅建议在仅限本机访问的可信环境中关闭。`,"settings.requireKeyOff":`仍然关闭`,"settings.gatewayFooter":`端口与监听地址通过终端修改:astra start --port <端口>`,"settings.gatewayUrl":`网关地址`,"settings.listen":`监听`,"settings.dataDir":`数据目录`,"settings.openFolder":`打开目录`,"settings.streamIdle":`流式空闲超时`,"settings.streamIdleHint":`上游超过该时间无数据则断开`,"settings.requestCompression":`上游请求压缩`,"settings.requestCompressionHint":`需要压缩请求体的提供商(如 ChatGPT 订阅默认用 zstd)使用的格式;其他提供商始终发原文`,"settings.requestCompression.default":`按提供商默认`,"settings.requestCompression.none":`不压缩`,"settings.logging":`记录`,"settings.debugBodies":`保存请求与响应内容`,"settings.debugBodiesHint":`用于排查问题;内容保存在本机数据目录,不含密钥。`,"settings.bodyRetention":`内容保留`,"settings.requestRetention":`自动清理请求记录`,"settings.keepForever":`永久保留`,"settings.days":`天`,"settings.effort":`推理强度换算`,"settings.effortHint":`在 OpenAI reasoning effort 与 Anthropic / Gemini thinking budget 之间转换时使用。`,"settings.privacy":`隐私护栏`,"settings.privacy.footer":`请求发往提供商之前在本机检测敏感信息。原值只保存在请求内存中,不会写入数据库。`,"settings.privacy.enabled":`启用隐私护栏`,"settings.privacy.enabledHint":`关闭后所有请求原样转发`,"settings.privacy.dryRun":`只检测不处理`,"settings.privacy.dryRunHint":`记录命中但放行请求,用于观察效果`,"settings.privacy.restore":`还原响应占位符`,"settings.privacy.restoreHint":`响应中的占位符会替换回原值,客户端无感知`,"settings.privacy.recordSamples":`记录命中样本`,"settings.privacy.recordSamplesHint":`日志中保存遮罩后的样本(如 john••••om),原值永不入库`,"settings.privacy.defaultAction":`默认动作`,"settings.privacy.action.off":`关闭`,"settings.privacy.action.warn":`仅警告`,"settings.privacy.action.block":`拦截`,"settings.privacy.action.redact":`脱敏`,"settings.privacy.categories":`检测类别`,"settings.privacy.category.api_key":`API 密钥`,"settings.privacy.category.aws_key":`AWS 密钥`,"settings.privacy.category.jwt":`JWT 令牌`,"settings.privacy.category.private_key":`私钥`,"settings.privacy.category.email":`邮箱地址`,"settings.privacy.category.phone":`手机号`,"settings.privacy.category.intranet":`内网地址`,"settings.privacy.category.custom":`自定义`,"settings.privacy.category.credit_card":`银行卡号`,"settings.privacy.category.national_id":`证件号码`,"settings.privacy.category.credential":`凭据 / 连接串`,"settings.privacy.enableCategory":`启用`,"settings.privacy.customRules":`自定义规则`,"settings.privacy.noCustomRules":`暂无自定义规则`,"settings.privacy.addRule":`添加规则`,"settings.privacy.ruleName":`规则名称`,"settings.privacy.rulePattern":`正则表达式`,"settings.privacy.rulePatternHint":`对请求中的每个字符串值逐个匹配`,"settings.privacy.ruleTemplates":`从模板填入`,"settings.privacy.ruleTemplatesHint":`选择常用规则模板,名称与表达式可再修改`,"settings.privacy.ruleTemplateNone":`自定义(手动输入)`,"settings.privacy.template.ipv4All":`所有 IPv4 地址`,"settings.privacy.template.ipv4AllHint":`含公网地址;内置「内网地址」只覆盖私有网段`,"settings.privacy.template.landline":`座机号码(中国大陆)`,"settings.privacy.template.licensePlate":`车牌号(中国大陆)`,"settings.privacy.template.passportCn":`护照号(中国)`,"settings.privacy.template.uscc":`统一社会信用代码`,"settings.privacy.template.longToken":`通用长令牌(32 位以上随机串)`,"settings.privacy.template.longTokenHint":`命中面较宽,建议搭配「仅警告」使用`,"settings.privacy.template.macAddress":`MAC 地址`,"settings.privacy.template.unixHome":`Unix / macOS 用户目录路径`,"settings.privacy.template.windowsProfile":`Windows 用户目录路径`,"settings.privacy.template.unixHomeHint":`路径中会暴露本机用户名`,"settings.privacy.template.genericHint":`可按需要再调整表达式`,"settings.privacy.template.cloudAccessKey":`云厂商 AccessKey(阿里云 LTAI… / 腾讯云 AKID…)`,"settings.privacy.template.awsSecretKey":`AWS Secret Access Key(40 位)`,"settings.privacy.template.imWebhook":`IM 机器人 Webhook(钉钉 / 企微 / 飞书 / Slack)`,"settings.privacy.template.imWebhookHint":`Webhook 地址本身就是凭证,泄露后任何人都能向群里发消息`,"settings.privacy.template.internalService":`内部系统域名(gitlab. / jenkins. / jira. …)`,"settings.privacy.template.jdbcConn":`JDBC 连接串(含账号密码)`,"settings.privacy.template.jdbcHint":`连接串里的账号密码通常是明文`,"settings.privacy.template.smtpConn":`邮件服务器连接串(smtp://user:pass@…)`,"settings.privacy.template.keyFileRef":`密钥文件引用(.pem / .key / .pfx / .jks)`,"settings.privacy.template.confidentialMarker":`内部 / 机密标记(机密、Confidential…)`,"settings.privacy.template.confidentialHint":`按文档密级标记做警告或拦截`,"settings.privacy.template.employeeId":`员工工号(EMP-123456 / 工号123456)`,"settings.privacy.template.labeledNumber":`带标签编号(合同编号 / 订单编号 / 工单编号…)`,"settings.privacy.invalidPattern":`正则表达式无效`,"settings.privacy.deleteRuleConfirm":`删除规则「{name}」?`,"settings.privacy.tester":`试用检测`,"settings.privacy.testerHint":`按当前策略检测下面的文本(不影响真实请求)`,"settings.privacy.testerPlaceholder":`粘贴一段请求文本或 JSON…`,"settings.privacy.runTest":`检测`,"settings.privacy.noHits":`没有命中任何规则`,"settings.privacy.wouldBlock":`会拦截请求`,"settings.privacy.wouldRedact":`将脱敏 {count} 处`,"privacy.tab.overview":`概览`,"privacy.tab.logs":`拦截日志`,"privacy.tab.rules":`检测规则`,"privacy.tab.tester":`试用检测`,"privacy.stats":`防护统计`,"privacy.stats.events":`护栏事件`,"privacy.stats.blocked":`拦截请求`,"privacy.stats.dryRun":`只检测请求`,"privacy.stats.redactions":`脱敏处数`,"privacy.stats.byCategory":`类别命中`,"privacy.stats.col.category":`类别`,"privacy.stats.col.requests":`请求数`,"privacy.stats.col.hits":`命中数`,"privacy.stats.col.warn":`警告`,"privacy.stats.col.block":`拦截`,"privacy.stats.col.redact":`脱敏`,"privacy.logs.total":`共 {count} 条事件`,"privacy.logs.empty":`还没有隐私事件`,"privacy.logs.empty.detail":`护栏检测到敏感内容后,对应的请求会出现在这里`,"privacy.logs.col.outcome":`处置结果`,"privacy.logs.col.action":`命中动作`,"privacy.logs.col.hits":`命中详情`,"privacy.logs.outcome.blocked":`已拦截`,"privacy.logs.outcome.redacted":`脱敏 {count} 处`,"privacy.logs.outcome.dryRun":`只检测`,"privacy.logs.blockedOnly":`仅拦截`,"privacy.logs.passedOnly":`仅放行`,"privacy.logs.moreHits":`+{count} 类`,"privacy.logs.viewRequest":`查看请求 {model}`,"settings.effort.low":`low`,"settings.effort.medium":`medium`,"settings.effort.high":`high`,"settings.about":`关于`,"settings.serverVersion":`服务版本`,"settings.desktopVersion":`桌面端版本`,"settings.logs":`打开日志目录`,"settings.logout":`退出登录`,"settings.checkUpdates":`检查更新`,"settings.upToDate":`已是最新版本`,"settings.updateAvailable":`有可用更新 {version}`,"settings.updateCheckFailed":`检查失败:{error}`,"settings.updateApplyHint":`可从 Astra 托盘菜单安装,或在终端运行 astra update`,"settings.updateApply":`立即更新`,"settings.updateApplied":`服务已更新并重启`,"settings.updateDesktopRelaunch":`桌面端将重启以完成更新`,"settings.lastChecked":`上次检查:{time}`,"settings.autoCheck":`自动检查更新`,"settings.tab.general":`常规`,"settings.tab.tray":`托盘面板`,"settings.tray.titleHeading":`菜单栏常驻文字`,"settings.tray.titleHint":`显示在菜单栏图标旁,不用点开就能看到。Windows 与 Linux 显示在图标提示中。`,"settings.tray.title.none":`不显示`,"settings.tray.title.none.hint":`只显示图标`,"settings.tray.title.requests":`今日调用`,"settings.tray.title.requests.hint":`例如 7`,"settings.tray.title.tokens":`今日 tokens`,"settings.tray.title.tokens.hint":`例如 68.8K`,"settings.tray.title.cost":`今日费用`,"settings.tray.title.cost.hint":`例如 $0.37`,"settings.tray.title.quota":`订阅窗口`,"settings.tray.title.quota.hint":`剩余最少的订阅窗口,例如 64%`,"settings.tray.title.alerts":`仅异常提示`,"settings.tray.title.alerts.hint":`有失败请求、额度告急或网关停止时才显示`,"settings.tray.usageHeading":`用量信息`,"settings.tray.clientsHeading":`客户端`,"settings.tray.section.overview":`今日概览`,"settings.tray.section.overview.hint":`调用次数、tokens 与失败数`,"settings.tray.section.cost":`预估费用`,"settings.tray.section.cost.hint":`按官方 API 价格折算,不替代账单`,"settings.tray.section.chart":`今日趋势`,"settings.tray.section.chart.hint":`每小时调用次数柱状图`,"settings.tray.section.topModel":`常用模型`,"settings.tray.section.topModel.hint":`今日 tokens 占比最高的模型`,"settings.tray.section.compareYesterday":`对比昨天`,"settings.tray.section.compareYesterday.hint":`今日 tokens 相对昨日全天的变化`,"settings.tray.section.cacheHitRate":`缓存命中率`,"settings.tray.section.cacheHitRate.hint":`缓存读取占输入 tokens 的比例`,"settings.tray.section.quota":`额度与余额`,"settings.tray.section.quota.hint":`Codex、Claude 等订阅的窗口用量与重置时间,以及已启用用量查询的 API 提供商余额`,"settings.tray.section.clients":`客户端提供商`,"settings.tray.section.clients.hint":`已启用客户端当前使用的提供商,点击可切换`,"settings.tray.previewHeading":`面板预览`,"settings.tray.previewHint":`点击托盘图标展开的面板。改动立即生效,预览即实际效果。`,"settings.tray.previewFooter":`使用当前真实数据渲染。`,"settings.tray.reset":`恢复默认`,"tray.status.running":`网关运行中`,"tray.status.stopped":`网关未运行`,"tray.status.starting":`正在启动网关…`,"tray.status.stopping":`正在停止网关…`,"tray.status.restarting":`正在重启网关…`,"tray.stoppedHint":`网关停止期间,客户端无法通过 Astra 调用模型。`,"tray.mismatch":`API 版本不匹配`,"tray.update":`有可用更新`,"tray.copyAddress":`复制网关地址`,"tray.settings":`托盘面板设置`,"tray.more":`更多操作`,"tray.today":`今日`,"tray.failures":`{count} 次失败`,"tray.justNow":`刚刚`,"tray.updated":`更新于{time}`,"tray.loadFailed":`无法读取用量数据`,"tray.requests":`次调用`,"tray.tokens":`tokens`,"tray.cost":`预估费用`,"tray.topModel":`常用模型`,"tray.cacheHit":`缓存命中`,"tray.vsYesterday":`较昨日`,"tray.chartLabel":`今日每小时调用次数`,"tray.hourBar":`{hour} · {count} 次调用`,"tray.quota":`额度与余额`,"tray.quotaRemaining":`剩余`,"tray.quotaReset":`重置`,"tray.quotaCredits":`额度`,"tray.quotaPending":`正在获取额度…`,"tray.clients":`客户端`,"tray.unbound":`未绑定`,"tray.switchProvider":`切换 {client} 的提供商`,"tray.disabledProvider":`{name}(已停用)`,"tray.restart":`重启网关`,"tray.stop":`停止网关`,"tray.quit":`退出`,"tray.open":`打开 Astra`,"tray.title.requests":`今日调用 {count} 次`,"tray.title.tokens":`今日 tokens {count}`,"tray.title.cost":`今日预估费用 {amount}`,"tray.title.quota":`{plan} {window}窗口剩余 {remaining}`,"tray.title.failures":`今日 {count} 次失败`,"tray.tab.overview":`概览`,"tray.tab.quota":`额度`,"tray.alert.failures":`{count} 次失败 · 占今日 {share}`,"tray.alert.quota":`{plan} {window}窗口仅剩 {remaining}`,"tray.quotaTightest":`额度 · 最紧张`,"tray.viewAll":`查看全部`,"nav.plugins":`插件`,"providers.card.plugin":`插件登录`,"plugins.subtitle":`兼容 magpie 的插件:提供商插件(OpenCode 插件,在 Bun 插件宿主中运行)、网关中间件与客户端(Agent)插件。`,"plugins.add":`添加插件`,"plugins.updateAll":`全部更新`,"plugins.tab.installed":`已安装`,"plugins.tab.market":`插件市场`,"plugins.tab.runtime":`运行环境`,"plugins.empty":`还没有安装插件`,"plugins.emptyDetail":`在「插件市场」中挑选,或添加 npm 包、GitHub 仓库或本地文件夹。`,"plugins.orderHint":`列表顺序即网关中间件的执行顺序。`,"plugins.kind.provider":`提供商`,"plugins.kind.middleware":`中间件`,"plugins.kind.agent":`客户端`,"plugins.kind.pi":`pi 扩展`,"plugins.local":`本地`,"plugins.moveUp":`上移`,"plugins.moveDown":`下移`,"plugins.enabled":`启用`,"plugins.options":`选项`,"plugins.update":`更新`,"plugins.removeConfirm":`删除插件 {name}?`,"plugins.removeDetail":`插件会被卸载;它添加的客户端会先恢复原来的配置。`,"plugins.cantLoad":`插件无法加载`,"plugins.hostCantLoad":`插件宿主没能加载它`,"plugins.mw.error":`中间件没能加载:{error}`,"plugins.mw.stats":`中间件 {hooks} · 调用 {calls} 次 · 平均 {micros} µs · 失败 {failures} 次`,"plugins.mw.lastError":`最近一次失败:{error}`,"plugins.agent.adds":`添加了客户端「{name}」,前往「客户端」页面启用`,"plugins.agent.error":`客户端没能加载:{error}`,"plugins.provides":`登录到:{providers}`,"plugins.servedBy":`{provider} 由另一个插件 {other} 提供`,"plugins.useFor":`用它提供 {provider}`,"plugins.picked":`已被选定为这些提供商的提供者。`,"plugins.optionsTitle":`{name} 的选项`,"plugins.optionsExample":`尚未设置,以下是插件给出的示例。`,"plugins.optionsNone":`尚未设置。插件以 JSON 对象读取选项(中间件的 ctx.options)。`,"plugins.optionsClear":`清除选项`,"plugins.optionsSaved":`选项已保存`,"plugins.optionsObject":`选项必须是一个 JSON 对象`,"plugins.addTitle":`添加插件`,"plugins.addDetail":`npm 包(可带版本)、Git 仓库(github:用户/仓库)或本机文件、文件夹的绝对路径。`,"plugins.spec":`插件`,"plugins.specHint":`例如 @astragate-community/middleware-word-guard、github:someone/plugin、/Users/me/my-plugin`,"plugins.install":`安装`,"plugins.installed":`已安装`,"plugins.installConfirm":`安装 {name}?`,"plugins.trustTitle":`插件会以你的权限运行代码`,"plugins.trustDetail":`提供商插件在插件宿主中拥有完整权限,能看到经过它的请求内容;中间件能读取并修改所有请求与回复。只安装你信任的插件。`,"plugins.job.title":`插件任务`,"plugins.job.running":`正在处理 {target}…`,"plugins.job.done":`{target} 已完成`,"plugins.job.failed":`{target} 失败`,"plugins.job.failedTitle":`没能完成`,"plugins.searchPlaceholder":`搜索 npm 与 GitHub 上的插件…`,"plugins.searchResults":`搜索结果`,"plugins.noResults":`没有找到插件`,"plugins.marketNote":`插件市场来自 Astra 官网(astra-gate.si)的清单:社区仓库(astragate-community/astra-gate-plugins)里的插件,加上官网发布的插件。插件包按清单里的地址下载,并按清单里的哈希校验。`,"plugins.origin.astra":`Astra`,"plugins.minVersion":`需要 Astra {version}+`,"plugins.linkInvalid":`链接里的插件既不是包名也不是 GitHub 仓库,已忽略。`,"plugins.bunDetail":`提供商插件运行在 Bun 上。Astra 会在第一次需要时下载固定版本的 Bun 并校验其 SHA-256;中间件与客户端插件不需要 Bun。`,"plugins.bunPath":`位置`,"plugins.bunMissing":`尚未下载`,"plugins.bunVersion":`版本`,"plugins.bunTarget":`构建`,"plugins.bunNoBuild":`这台机器没有可用的 Bun 构建`,"plugins.bunFailed":`下载 Bun 失败`,"plugins.bunDownload":`下载 Bun {version}`,"plugins.bunDownloading":`正在下载…`,"plugins.host":`插件宿主`,"plugins.hostDetail":`提供商插件在一个独立的 Bun 进程(magpie 的 host.js)中运行,插件或代理改变时自动重启。`,"plugins.hostState":`状态`,"plugins.hostRunning":`运行中`,"plugins.hostStopped":`未运行(需要时启动)`,"plugins.hostStartFailed":`启动失败`,"plugins.hostGone":`宿主已退出`,"plugins.hostPluginError":`没能加载:{error}`,"pluginAccounts.noPlugin":`插件不可用`,"pluginAccounts.apiKey":`API 密钥`,"pluginAccounts.browser":`浏览器登录`,"pluginAccounts.empty":`还没有登录账号`,"pluginAccounts.emptyDetail":`用上面的方式登录,登录信息由插件保存。`,"pluginAccounts.current":`当前`,"pluginAccounts.active":`可用`,"pluginAccounts.lapsed":`需重新登录`,"pluginAccounts.lapsedDetail":`供应商拒绝了这个账号的登录,请重新登录。`,"pluginAccounts.usage":`额度`,"pluginAccounts.signOut":`退出登录`,"pluginAccounts.signOutConfirm":`退出 {name} 的登录?`,"pluginAccounts.plan":`套餐`,"pluginAccounts.until":`到期`,"pluginAccounts.resets":`{at} 重置`,"pluginAccounts.signedIn":`已登录`,"pluginAccounts.signInTitle":`登录 {name}`,"pluginAccounts.continue":`继续`,"pluginAccounts.key":`密钥`,"pluginAccounts.signIn":`登录`,"pluginAccounts.openPage":`打开登录页面`,"pluginAccounts.openAgain":`再次打开登录页面`,"pluginAccounts.deviceCode":`确认码`,"pluginAccounts.code":`页面显示的代码`,"pluginAccounts.waiting":`在浏览器中完成登录后,这里会自动继续。`,"pluginAccounts.failed":`登录失败`,"pluginAccounts.checkin":`每日签到`,"pluginAccounts.checkinOn":`自动签到`,"pluginAccounts.checkinNow":`立即签到`,"pluginAccounts.checkinDetail":`插件会按北京时间每天为每个可用账号签到一次;失败的会在 30 分钟后重试。Astra 不会处理验证码。`,"pluginAccounts.checkinNever":`今天还没有签到`,"pluginAccounts.credit":`+{credit}`,"pluginAccounts.streak":`连续 {days} 天`,"pluginAccounts.outcome.claimed":`已签到`,"pluginAccounts.outcome.done":`今天已签过`,"pluginAccounts.outcome.ineligible":`不符合条件`,"pluginAccounts.outcome.inactive":`现在没有签到活动`,"pluginAccounts.outcome.captcha":`需要验证码,请在它自己的应用里签到`,"pluginAccounts.outcome.failed":`失败`,"plugins.browseMarket":`浏览插件市场`,"plugins.off":`插件已在服务端关闭`,"plugins.hostRecent":`插件最近的提示`,"plugins.offDetail":`服务以 ASTRA_PLUGINS=off 启动:已安装的插件都不运行,也不能安装新插件。去掉这个环境变量并重启即可恢复。`,"plugins.bunReady":`已就绪`,"plugins.kind.all":`全部`,"plugins.kindFilter":`按类型筛选`,"plugins.magpie.banner":`这台电脑上的 magpie 装有 {count} 个 Astra 还没有的插件。`,"plugins.magpie.import":`从 magpie 导入`,"plugins.magpie.off":`已停用`,"plugins.magpie.signIns":`同时复制 {count} 个登录信息`,"plugins.magpie.title":`从 magpie 导入插件`,"plugins.magpie.signInsDetail":`把 magpie 的 plugin-auth.json 中的插件登录复制到 Astra(两者都以明文保存);Astra 已有的同名账号保持不变,magpie 的文件不会被修改。`,"plugins.openProviders":`在「提供商」中登录`,"plugins.searchNote":`搜索结果包含插件市场自己的条目,以及 npm 与 GitHub 的 magpie-plugin 主题;后两者未经审核,安装前请确认来源可信。`,"settings.tab.remote":`远程访问`,"settings.remote.status":`状态`,"settings.remote.statusFooter":`通过 Cloudflare Tunnel 把网关开放到公网,无需公网 IP 或路由器端口转发。cloudflared 由 Astra 首次开启时自动下载并托管运行。`,"settings.remote.enable":`远程访问`,"settings.remote.state.off":`未开启`,"settings.remote.state.downloading":`正在下载 cloudflared…`,"settings.remote.state.starting":`正在连接 Cloudflare…`,"settings.remote.state.connected":`已连接`,"settings.remote.state.reconnecting":`连接中断,正在重连…`,"settings.remote.connectedSince":`已连接 {time}`,"settings.remote.publicUrl":`远程网关地址`,"settings.remote.publicUrlHint":`在其他设备的客户端里填这个地址,并使用 Astra 令牌。`,"settings.remote.openPage":`在浏览器中打开`,"settings.remote.download":`下载进度`,"settings.remote.enableConfirm":`开启远程访问?`,"settings.remote.enableDetail":`任何知道地址的人都能访问你的网关入口(仍需 Astra 令牌才能调用)。请只把地址和令牌分享给信任的人。`,"settings.remote.enableAction":`开启`,"settings.remote.disableSelfConfirm":`关闭远程访问?`,"settings.remote.disableSelfDetail":`你正在通过远程地址访问此页面,关闭后会立即断开,只能回到这台电脑上重新开启。`,"settings.remote.disableAction":`关闭`,"settings.remote.cloudflaredMissing":`首次开启时自动下载 {version}(约 20–55 MB)`,"settings.remote.cloudflaredUnsupported":`这台机器没有可用的 cloudflared 版本`,"settings.remote.password":`管理员密码`,"settings.remote.passwordSet":`已设置`,"settings.remote.passwordMissing":`未设置 · 只有远程开放管理后台时才需要`,"settings.remote.passwordChange":`修改`,"settings.remote.passwordSetAction":`设置密码`,"settings.remote.passwordNew":`新密码(至少 8 位)`,"settings.remote.passwordSaved":`管理员密码已保存`,"settings.remote.block.token":`固定域名模式需要填写隧道令牌。`,"settings.remote.block.hostname":`固定域名模式需要填写公网域名。`,"settings.remote.block.password":`远程开放管理后台前,请先设置管理员密码。`,"settings.remote.mode":`连接方式`,"settings.remote.modeLabel":`隧道类型`,"settings.remote.mode.quick":`临时地址`,"settings.remote.mode.named":`固定域名`,"settings.remote.mode.quick.hint":`无需 Cloudflare 账号,分配一个 *.trycloudflare.com 地址`,"settings.remote.mode.named.hint":`使用你在 Cloudflare 创建的隧道和自己的域名`,"settings.remote.quickWarning":`临时地址不支持流式输出(SSE),大多数编程客户端会因此无法正常工作;每次启动地址都会变化,也没有可用性保证。仅适合临时试用,长期使用请选择固定域名。`,"settings.remote.token":`隧道令牌`,"settings.remote.tokenHint":`安装命令中 --token 后面的值`,"settings.remote.tokenSaved":`已保存,留空则保持不变`,"settings.remote.hostname":`公网域名`,"settings.remote.hostnameHint":`在隧道的「公网主机名」里配置的域名`,"settings.remote.origin":`服务地址`,"settings.remote.originHint":`公网主机名的服务(Service)指向这里`,"settings.remote.namedFooter":`在 Cloudflare Zero Trust → Networks → Tunnels 创建隧道,复制安装命令里的令牌;再为隧道添加公网主机名,把服务指向上面的服务地址。服务端口变化时需要同步修改。`,"settings.remote.saved":`远程访问设置已保存`,"settings.remote.guide":`查看配置教程`,"settings.remote.scope":`远程开放范围`,"settings.remote.scopeFooter":`远程请求经 Cloudflare 转发,会单独识别:本机的「强制令牌」开关不影响它们。`,"settings.remote.scope.gateway":`网关 API`,"settings.remote.scope.gatewayHint":`/v1、/v1beta 以及令牌自助查询页 /key`,"settings.remote.scope.gatewayBadge":`始终需要令牌`,"settings.remote.scope.admin":`管理后台`,"settings.remote.scope.adminHint":`需要管理员密码;登录失败会被限速`,"settings.remote.adminConfirm":`允许远程登录管理后台?`,"settings.remote.adminDetail":`知道地址和管理员密码的人可以修改所有设置、提供商和插件。请确认密码足够强。`,"settings.remote.adminAction":`允许`,"settings.remote.log":`运行日志`,"settings.remote.logEmpty":`暂无输出`,"settings.remote.unsupported":`容器内不托管远程访问`,"settings.remote.unsupportedDetail":`在 Docker 中请把 cloudflared 作为 sidecar 容器运行,并设置管理员密码。详见文档「Docker 部署」。`,"shell.remoteOn":`远程访问已开启`,"login.remoteBlocked":`远程管理已关闭`,"login.remoteBlockedDetail":`这个地址只开放网关 API。如需远程管理,请在这台电脑上的「设置 → 远程访问」中开启「管理后台」。`,"settings.remote.connectedJustNow":`刚刚连接`,"settings.remote.connectedFor":`已连接 {duration}`,"settings.remote.copyMenu":`复制地址`,"settings.remote.copy.openai":`OpenAI / Gemini 地址(带 /v1)`,"settings.remote.copy.anthropic":`Anthropic 地址(不带 /v1,Claude Code 等使用)`,"settings.remote.copy.key":`令牌自助查询页(/key)`,"settings.remote.logWithVersion":`运行日志 · cloudflared {version}`,"settings.remote.err.token":`隧道令牌无效,请在 Cloudflare 后台重新复制。`,"settings.remote.err.tokenLost":`已保存的隧道令牌无法读取(数据目录的密钥已变化),请重新填写。`,"settings.remote.err.network":`连不上 Cloudflare,请检查网络或代理(cloudflared 需要访问 Cloudflare 的 7844 端口)。`,"settings.remote.err.rate":`Cloudflare 暂时不再分配临时地址(请求过多),稍后会自动重试。`,"settings.remote.err.download":`cloudflared 下载失败。可以在下方「cloudflared」里换一个下载来源,或改用已安装的 cloudflared。`,"settings.remote.err.generic":`连接出错,正在自动重试`,"settings.remote.err.origin":`Cloudflare 连不上 Astra:请确认 Cloudflare 后台的服务地址是 {origin}。`,"settings.remote.modeSwitchConfirm":`切换连接方式?`,"settings.remote.modeSwitchDetail":`隧道会重新连接,正在通过远程地址进行的连接会中断;临时地址每次都会变化。`,"settings.remote.modeSwitchStopDetail":`固定域名还没有填写隧道令牌和公网域名,切换后远程访问会关闭。`,"settings.remote.modeSwitchAction":`切换`,"settings.remote.savedRestart":`已保存,隧道正在重新连接`,"settings.remote.adminOffSelfConfirm":`关闭远程管理?`,"settings.remote.adminOffSelfDetail":`你正在通过远程地址使用管理后台,关闭后会立即失去访问,只能回到这台电脑上重新开启。`,"tokens.remoteHint":`远程访问已开启:其他设备使用 {url};令牌持有者可以打开 {key} 查看额度和用量。`,"requests.col.origin":`来源`,"requests.allOrigins":`全部来源`,"requests.origin.remote":`远程`,"requests.origin.local":`本机`,"requests.origin.remoteFrom":`远程 · {ip}`,"settings.remote.state.downloadingFrom":`正在从 {source} 下载 cloudflared…`,"settings.remote.cf.footer":`无论从哪个来源下载,文件都会按固定的 SHA-256 校验,来源本身不需要可信。`,"settings.remote.cf.program":`程序`,"settings.remote.cf.downloaded":`已下载 · {version}`,"settings.remote.cf.notDownloaded":`首次开启时下载 {version}`,"settings.remote.cf.installedProgram":`本机安装 · {version}`,"settings.remote.cf.installedUnknown":`本机安装 · 版本未知`,"settings.remote.cf.fromEnv":`由环境变量 ASTRA_CLOUDFLARED 指定,下方设置不生效`,"settings.remote.cf.source":`下载来源`,"settings.remote.cf.source.auto":`自动`,"settings.remote.cf.source.github":`GitHub`,"settings.remote.cf.source.astra":`Astra 官网镜像`,"settings.remote.cf.source.custom":`自定义地址`,"settings.remote.cf.source.auto.hint":`先从 GitHub 下载,失败或卡住时改用 Astra 官网镜像`,"settings.remote.cf.source.github.hint":`只从 GitHub Releases 下载`,"settings.remote.cf.source.astra.hint":`从 astra-gate.si 下载,国内网络通常更快`,"settings.remote.cf.source.custom.hint":`从你指定的地址下载,例如 GitHub 加速代理`,"settings.remote.cf.baseUrl":`下载地址`,"settings.remote.cf.baseUrlHint":`按「地址/版本号/文件名」下载,与 GitHub Releases 的目录结构相同`,"settings.remote.cf.installed":`已安装的 cloudflared`,"settings.remote.cf.installedHint":`不下载,直接运行这台电脑上已有的 cloudflared`,"settings.remote.cf.installedPath":`cloudflared 程序路径`,"settings.remote.cf.choose":`使用已安装的`,"settings.remote.cf.detect":`自动查找`,"settings.remote.cf.detectNone":`没有在 PATH 中找到 cloudflared`,"settings.remote.cf.use":`使用`,"settings.remote.cf.useDownloaded":`改用下载版本`,"settings.remote.cf.saved":`cloudflared 设置已保存`},c_={"common.cancel":`Cancel`,"common.confirm":`OK`,"common.close":`Close`,"common.save":`Save`,"common.saved":`Saved`,"common.revert":`Revert`,"common.apply":`Apply`,"common.delete":`Delete`,"common.edit":`Edit`,"common.add":`Add`,"common.create":`Create`,"common.back":`Back`,"common.done":`Done`,"common.more":`More`,"common.copy":`Copy`,"common.copied":`Copied to clipboard`,"common.refresh":`Refresh`,"common.enabled":`Enabled`,"common.yes":`Yes`,"common.no":`No`,"common.prev":`Previous page`,"common.next":`Next page`,"common.noData":`No data`,"common.selectAll":`Select all`,"common.unsaved":`Unsaved changes`,"common.invalidJson":`Invalid JSON`,"common.search":`Search`,"common.clearSearch":`Clear search`,"common.select":`Select an option`,"common.noResults":`No matches`,"common.error":`Something went wrong`,"pricing.tierMode":`Billing mode`,"pricing.outputPolicy":`Output price`,"pricing.editMode":`Editing mode`,"pricing.days":`Days`,"models.sync.change":`Change`,"models.sync.changeOne":`change`,"models.sync.changeOther":`changes`,"common.continue":`Continue`,"providers.step.template":`Choose a template`,"providers.step.details":`Enter details`,"clients.current":`Current provider`,"common.deleting":`Deleting`,"common.deleted":`Deleted`,"common.retry":`Retry`,"providers.modelIds":`Model IDs`,"nav.overview":`Overview`,"nav.requests":`Requests`,"nav.clients":`Clients`,"nav.providers":`Providers`,"nav.models":`Models`,"nav.settings":`Settings`,"nav.privacy":`Privacy guard`,"nav.tokens":`Tokens`,"nav.group.config":`Configuration`,"nav.group.system":`System`,"shell.running":`Service running`,"shell.discord":`Discord community`,"shell.github":`GitHub repository`,"shell.connecting":`Connecting…`,"shell.disconnected":`Not connected`,"shell.startService":`Start service`,"shell.startFailed":`Failed to start the service`,"shell.collapseSidebar":`Collapse sidebar`,"shell.expandSidebar":`Expand sidebar`,"banner.downDesktop":`Cannot reach the Astra service. Start it here or from the menu bar icon.`,"banner.downWeb":"Cannot reach the Astra service. Reconnecting… (run `astra start` in a terminal)","banner.mismatch":"The server API version does not match this UI. Run `astra update` and restart.","banner.clientsOutdated":`{names} still use an old Astra address or setting (for example, Astra moved to another port). Update them to reconnect.`,"banner.clientsUpdate":`Update now`,"banner.clientsUpdated":`Updated {names}; some clients need a restart to pick it up`,"login.subtitle":`This server is reachable remotely. Enter the admin password.`,"login.password":`Admin password`,"login.submit":`Sign in`,"range.today":`Today`,"range.7d":`7 days`,"range.30d":`30 days`,"range.90d":`90 days`,"range.all":`All time`,"overview.cost":`Cost`,"overview.requests":`Requests`,"overview.successRate":`Success rate`,"overview.tokens":`Tokens`,"overview.avgTtft":`Avg TTFT`,"overview.costTrend":`Cost trend`,"overview.range":`Time range`,"overview.measure":`Measure`,"overview.trend":`Trend`,"overview.tokensContext":`{input} in · {output} out`,"overview.hourlyAverage":`Hourly average`,"overview.dailyAverage":`Daily average`,"overview.total":`Total`,"overview.hour":`Hour`,"overview.day":`Day`,"overview.by.model":`Model`,"overview.by.provider":`Provider`,"overview.by.client":`Client`,"overview.by.token":`Token`,"overview.other":`Other`,"overview.topModels":`Top models by cost`,"overview.topModelDetail":`{requests} requests · {tokens} tokens`,"overview.empty.title":`No requests yet`,"overview.empty.detail":`Enable a client under Clients, or point any OpenAI / Anthropic / Gemini compatible tool at the gateway address below.`,"overview.clientFilter":`Filter by client`,"overview.allClients":`All`,"overview.tokenFilter":`Filter by token`,"overview.allTokens":`All tokens`,"overview.clientEmpty.title":`No requests from {client}`,"overview.clientEmpty.detail":`This client sent no requests in the selected period ({range}). Pick another client or time range.`,"overview.tokenEmpty.title":`No requests with {token}`,"overview.tokenEmpty.detail":`No request used this token in the selected period ({range}). Pick another token or time range.`,"overview.totalCost":`Total cost`,"overview.totalRequests":`Total requests`,"overview.usageTrend":`Usage trend`,"overview.breakdown":`Breakdown`,"overview.viewAll":`View all`,"overview.col.input":`Input`,"overview.col.output":`Output`,"overview.col.cacheHit":`Cache hit`,"overview.col.speed":`Speed`,"overview.col.share":`Share`,"overview.activity":`Activity`,"overview.activitySummary":`{from} ~ {to} · {active} / {days} days active`,"overview.activityPeak":`{count}/day at most`,"overview.activityUnit":`requests`,"overview.activityNone":`no activity`,"overview.activityLegend.less":`Less`,"overview.activityLegend.more":`More`,"requests.total":`{count} total`,"requests.totalCost":`Total spend`,"requests.totalCost.hint":`Summed cost of every request matching the active filters, across all pages; in-flight requests count once they finish.`,"requests.rate.rpm":`RPM`,"requests.rate.tpm":`TPM`,"requests.rate.hint":`Requests (RPM), tokens (TPM, completed requests only) and the cache-hit ratio per minute over the last {window}s; follows the active filters, refreshes every 5s.`,"requests.elapsed":`Waiting (no first token yet)`,"requests.searchModel":`Search model IDs (keyword)`,"requests.noFilters":`No filters applied`,"requests.clearFilters":`Clear filters`,"requests.backToFilters":`Back to filter fields`,"requests.removeFilter":`Remove filter: {filter}`,"requests.filterAdded":`Added filter: {filter}`,"requests.filterChanged":`Changed filter: {filter}`,"requests.filterRemoved":`Removed filter: {filter}`,"requests.filtersCleared":`All filters cleared`,"requests.filteredEmpty":`No matching requests`,"requests.filteredEmpty.detail":`Try another model keyword or clear the filters.`,"requests.returnedModel":`Returned: {model}`,"requests.modelMatch":`Match`,"requests.modelMismatch":`Mismatch`,"requests.modelComparison":`Requested: {requested}; sent upstream: {upstream}; API returned: {returned}`,"requests.modelNotRecorded":`Not recorded`,"requests.modelNotRecorded.hint":`An older log or the API omitted the model ID; the requested model is not used as a substitute.`,"requests.allClients":`All clients`,"requests.allTokens":`All tokens`,"requests.col.token":`Token`,"requests.detail.account":`Subscription account`,"requests.direct":`Direct`,"requests.allProviders":`All providers`,"requests.allStatus":`Any status`,"requests.col.time":`Time`,"requests.col.client":`Client`,"requests.col.model":`Model`,"requests.col.provider":`Provider`,"requests.col.status":`Status`,"requests.col.ttft":`TTFT`,"requests.col.tps":`TPS`,"requests.col.tokens":`In/Out`,"requests.col.cost":`Cost`,"requests.empty":`No requests`,"requests.empty.detail":`Every request through Astra is logged here with per-token-type billing details.`,"requests.page":`Page {page} of {pages}`,"requests.filters":`Active filters`,"requests.addFilter":`Add filter`,"requests.openDetail":`Open request details for {model}`,"requests.viewError":`Click to view the error`,"requests.detail.title":`Request details`,"requests.detail.summary":`Summary`,"requests.detail.protocol":`Protocol`,"requests.detail.requestedModel":`Requested model`,"requests.detail.upstreamModel":`Sent upstream model`,"requests.detail.responseModel":`API returned model`,"requests.detail.systemModel":`System model`,"requests.detail.stream":`Streaming`,"requests.detail.upstreamId":`Upstream request ID`,"requests.detail.timing":`Timing`,"requests.detail.generation":`Generation`,"requests.detail.total":`Total`,"requests.detail.tps":`Output speed`,"requests.detail.error":`Error`,"requests.detail.privacy":`Privacy guard`,"requests.detail.privacyBlocked":`Request blocked`,"requests.detail.privacyDryRun":`Dry run (not enforced)`,"requests.detail.privacyRedacted":`Redacted {count} place(s)`,"requests.detail.billing":`Billing`,"requests.detail.usageMissing":`The upstream returned no usage; this request was billed as 0.`,"requests.detail.usageRaw":`Raw usage`,"requests.detail.pricingSnapshot":`Pricing snapshot`,"requests.body.clientRequest":`Client request body`,"requests.body.upstreamRequest":`Upstream request body`,"requests.body.upstreamRequestHeaders":`Upstream request headers (as sent to the provider, credentials redacted)`,"requests.body.upstreamResponse":`Upstream response body`,"requests.body.clientResponse":`Response sent to client`,"requests.reasoning":`Reasoning`,"requests.reasoning.notRecorded":`Not recorded`,"requests.reasoning.budget":`budget {tokens}`,"requests.reasoning.hint":`Reasoning settings the client explicitly sent; “Not recorded” means unset or an older log — never inferred from budgets or provider defaults.`,"requests.detail.reasoning":`Reasoning`,"status.success":`Success`,"status.blocked":`Blocked`,"status.upstream_error":`Upstream error`,"status.gateway_error":`Gateway error`,"status.client_cancelled":`Cancelled`,"status.pending":`In progress`,"billing.unpriced":`No price configured`,"billing.type":`Type`,"billing.tokens":`Amount`,"billing.unitPrice":`Unit /1M`,"billing.tier":`Tier`,"billing.cost":`Cost`,"pricingSource.override":`Provider custom price`,"pricingSource.provider":`Provider price · {key}`,"pricingSource.default":`Official default`,"pricingSource.none":`No price`,"simulator.official":`Official default price`,"simulator.serviceTier":`service_tier`,"simulator.time":`Request time (for time-of-day pricing)`,"simulator.run":`Calculate`,"pricing.none":`No pricing configured`,"pricing.add":`Add pricing`,"pricing.remove":`Remove pricing`,"pricing.mode.form":`Form`,"pricing.unit":`USD / 1M tokens`,"pricing.base":`Base prices`,"pricing.perRequest":`Per request`,"pricing.notes":`Notes`,"pricing.name":`Name`,"pricing.contextTiers":`Context tiers`,"pricing.contextTiers.hint":`Switch prices once input tokens exceed a threshold (e.g. Claude >200K).`,"pricing.addTier":`Add tier`,"pricing.threshold":`Threshold`,"pricing.mode.whole":`Whole request`,"pricing.mode.progressive":`Progressive`,"pricing.output.highest":`Output at highest tier`,"pricing.output.base":`Output at base price`,"pricing.timeWindows":`Time windows`,"pricing.timeWindows.hint":`Adjust prices by timezone and time of day (e.g. DeepSeek off-peak); holidays can be excluded.`,"pricing.addWindow":`Add window`,"pricing.excludeDates":`Exclude dates yyyy-MM-dd, …`,"pricing.serviceTiers":`Service tiers`,"pricing.serviceTiers.hint":`Adjust prices by service_tier (flex / priority).`,"pricing.addServiceTier":`Add tier`,"pricing.hasOwnPrices":`Has own prices (edit as JSON)`,"pricing.ruleNameTaken":`This service tier name already exists`,"pricing.timezone":`Timezone`,"pricing.invalidTimezone":`Enter a valid IANA timezone`,"pricing.start":`Start time`,"pricing.end":`End time`,"pricing.multiplier":`Multiplier`,"clients.subtitle":`Route the AI clients on this machine through Astra`,"clients.comingSoon":`Coming soon`,"clients.comingSoonDetail":`The configuration format for this client is not confirmed yet`,"clients.drifted":`Config changed`,"clients.enabled":`Enabled`,"clients.disabled":`Not enabled`,"clients.detected":`Detected {version}`,"clients.notDetected":`Not detected`,"clients.group.installed":`Installed`,"clients.group.notInstalled":`Not detected`,"clients.group.comingSoon":`Coming soon`,"clients.checkUpdates":`Check for updates`,"clients.updatesFound":`{count} client update(s) available`,"clients.allUpToDate":`All clients are up to date`,"clients.updateBadge":`Update`,"clients.shadowedBadge":`Fix PATH`,"clients.updateTo":`Update to {version}`,"clients.install":`Install`,"clients.download":`Download`,"clients.installRunning":`In progress…`,"clients.versionTitle":`Version and updates`,"clients.currentVersion":`Installed version`,"clients.latestVersion":`Latest version`,"clients.versionUnknown":`Unknown version`,"clients.notInstalled":`Not installed`,"clients.latestUnknown":`Not checked`,"clients.checkedAt":`Checked {time}`,"clients.installMethod":`Installed with`,"clients.method.npm":`Global npm package {package}`,"clients.method.vscode-extension":`VS Code extension {package}`,"clients.method.script":`Official vendor install script`,"clients.method.manual":`Download from the official site`,"clients.homepage":`Website`,"clients.blocker.npm-missing":`npm was not found. Install Node.js (it ships npm), then come back to install.`,"clients.blocker.vscode-missing":`VS Code's code command was not found. Install VS Code first.`,"clients.blocker.script-missing":`No install script for this system; install it from the official site.`,"clients.blocker.external-install":`{path} was not installed with npm. Update it the way you installed it.`,"clients.blocker.shadowed":`The latest version is already installed elsewhere; updating again won't change what the terminal runs. Fix PATH as described above.`,"clients.installLog":`Install log`,"clients.noInstallLog":`No install runs yet`,"clients.job.running":`Running…`,"clients.job.succeeded":`Finished`,"clients.job.failed":`Failed`,"clients.job.cancelled":`Stopped`,"clients.hint.permission-denied":`npm can't write to its global directory (usually because something was installed with sudo before, so the directory belongs to the administrator).`,"clients.hint.admin-cancelled":`Administrator authorization was cancelled. Nothing was changed.`,"clients.hint.shadowed":`The new version went to another location; the terminal still runs the old copy. See the log below for where.`,"clients.hint.unchanged":`The command succeeded, but the version did not change.`,"clients.hint.not-on-path":`The installed command is not on the terminal's PATH, so the terminal can't run it directly. See the log below for where.`,"clients.job.notEffective":`Finished, but not in effect`,"clients.notEffectiveToast":`{name}: the command succeeded but didn't take effect. Check the install log.`,"clients.otherCopy":`Other copy`,"clients.otherCopyNewer":`Newer`,"clients.shadowed.title":`Version {version} is installed, but the terminal does not use it`,"clients.shadowed.detail":`The terminal runs {path} ({version}); the newer copy at {other} comes later on PATH or isn't on it. Put {dir} first on PATH, or remove the old copy, to use the new version.`,"clients.notOnPath.title":`Not on the terminal's PATH`,"clients.notOnPath.detail":`This client is installed in {dir}, which is not on the terminal's PATH. Add it to PATH (e.g. in ~/.zshrc) to run it from a terminal.`,"clients.admin.badge":`Admin required`,"clients.admin.tip":`npm's global directory belongs to the administrator. macOS will ask for your login password.`,"clients.admin.tipManual":`npm's global directory belongs to the administrator. Run it with sudo in a terminal.`,"clients.admin.title":`Administrator rights needed`,"clients.admin.prompt":`npm's global directory belongs to the administrator. After you click “Authorize and start”, the system asks for your login password (or Touch ID); Astra never sees it.`,"clients.admin.manual":`npm's global directory belongs to the administrator and no authorization prompt is available here. Copy the command below and run it in a terminal.`,"clients.admin.start":`Authorize and start`,"clients.admin.copyCommand":`Copy command`,"clients.admin.retry":`Retry as administrator`,"clients.admin.retryHint":` Click “Retry as administrator” to get the system authorization prompt.`,"clients.admin.running":`Running as administrator. The output appears when the command ends, and it cannot be stopped midway.`,"clients.admin.fixTip":`To stop needing administrator rights for installs and updates, run this once in a terminal to give npm’s global directory back to your user:`,"clients.hint.timeout":`Stopped after 15 minutes without finishing.`,"clients.installTitle":`Install {name}`,"clients.updateTitle":`Update {name}`,"clients.installRunDetail":`Astra will run this command on this machine and show its output here.`,"clients.installStart":`Start`,"clients.installStop":`Stop`,"clients.installUnavailable":`This action is not available right now`,"clients.installNpmNote":`A global install writes to npm's global directory. Closing this window does not stop it.`,"clients.installedToast":`{name} installed`,"clients.updatedToast":`{name} updated`,"clients.enable":`Enable…`,"clients.disable":`Disable`,"clients.disableRestore":`Disable & restore`,"clients.pickProviderFirst":`Pick a provider below first`,"clients.appliedAt":`Config written {time}`,"clients.bound":`Switched to {provider}; effective immediately`,"clients.boundModelsSynced":`Switched to {provider} and updated the model list in the {client} config`,"clients.disableConfirm":`Disable {name}?`,"clients.disableDetail":`The entries Astra wrote are reverted to their state before enabling.`,"clients.disabledToast":`{name} disabled and config restored`,"clients.driftTitle":`Some settings were edited by hand`,"clients.driftDetail":`These entries changed after enabling and were not restored: {keys}. Force restore?`,"clients.forceRestore":`Force restore`,"clients.providerTitle":`Provider`,"clients.providerFooter":`Add several providers and drag to order them: a request goes to the first provider that offers its model (exact model ID match, or the provider's model mapping), else to the first one. Changes take effect immediately, and the client's model list includes every provider's models.`,"clients.primaryProvider":`Primary`,"clients.dragToReorder":`Drag to reorder {provider}`,"clients.removeProvider":`Remove {provider}`,"clients.providerDisabledBadge":`Disabled`,"clients.moreProvidersTitle":`Available providers`,"clients.providerAdded":`Added {provider}; effective immediately`,"clients.providerRemoved":`Removed {provider}`,"clients.providerOrderSaved":`Provider order updated; effective immediately`,"clients.providersModelsSynced":`Providers updated and the model list in the {client} config synced`,"clients.accountTitle":`Subscription account`,"clients.accountFooter":`Pin a specific account to attribute usage; leave empty for the provider default.`,"clients.account":`Account`,"clients.accountDefault":`Default account`,"clients.noProviders":`No providers yet`,"clients.noProvidersDetail":`Add an AI provider first, then choose it for this client.`,"clients.modelTitle":`Model`,"clients.modelFooter":`Default model written to the client config when enabling; leave unset to keep the client default.`,"clients.modelFooterEnabled":`Changing the default model rewrites the client config.`,"clients.modelSlotsFooter":`A chosen model is written into the Claude Code config (default model ANTHROPIC_MODEL, tiers ANTHROPIC_DEFAULT_*_MODEL); a slot left empty is never written, and an existing setting of the same name in the file is left alone.`,"clients.modelSlotsFooterEnabled":`Changing a model rewrites the client config.`,"clients.options.title":`Client options`,"clients.options.footer":`These apply to this client only: options written to the client config are written when you enable it, and gateway options are handled by Astra when forwarding this client's requests.`,"clients.options.footerEnabled":`Changes need to be applied again.`,"clients.options.unset":`Not set`,"clients.option.context1m":`1M context`,"clients.option.context1m.hint":`Appends [1m] to Claude Code's model names (not the Haiku tier, nor models known to have a smaller window). The upstream must support 1M context.`,"clients.option.cacheTtl":`Cache TTL`,"clients.option.cacheTtl.hint":`Fills in a 5-minute or 1-hour ttl on the cache_control blocks the client already sends; never adds or removes breakpoints. 1-hour writes cost more and suit long sessions.`,"clients.option.maxThinkingTokens":`Max thinking tokens`,"clients.option.maxThinkingTokens.hint":`Writes MAX_THINKING_TOKENS; leave empty to not set it.`,"clients.option.disablePromptCaching":`Disable prompt caching`,"clients.option.disablePromptCaching.hint":`Writes DISABLE_PROMPT_CACHING=1 so the client stops sending cache breakpoints.`,"clients.option.contextWindow":`Context window`,"clients.option.contextWindow.hint":`Writes model_context_window; leave empty to use Codex's default.`,"clients.option.autoCompactTokenLimit":`Auto-compact threshold`,"clients.option.autoCompactTokenLimit.hint":`Writes model_auto_compact_token_limit, the size at which the session is compacted; leave empty to not set it.`,"clients.option.reasoningEffort":`Reasoning effort`,"clients.option.reasoningEffort.hint":`Writes model_reasoning_effort; Default leaves it unset.`,"clients.option.modelCatalog":`Write model catalog`,"clients.option.modelCatalog.hint":`Appends the bound providers' models to Codex's model catalog (~/.codex/astra-models.json, pointed to by model_catalog_json); every existing model is kept. Run Codex once first (it writes models_cache.json). Codex reads the catalog only at startup, so restart it after the models change.`,"clients.optionChoice.default":`Default`,"clients.optionChoice.5m":`5 minutes`,"clients.optionChoice.1h":`1 hour`,"clients.optionChoice.minimal":`Minimal`,"clients.optionChoice.low":`Low`,"clients.optionChoice.medium":`Medium`,"clients.optionChoice.high":`High`,"clients.modelSlot.ANTHROPIC_MODEL":`Default model`,"clients.modelSlot.ANTHROPIC_DEFAULT_OPUS_MODEL":`Opus tier`,"clients.modelSlot.ANTHROPIC_DEFAULT_SONNET_MODEL":`Sonnet tier`,"clients.modelSlot.ANTHROPIC_DEFAULT_HAIKU_MODEL":`Haiku tier (fast/background)`,"clients.defaultModel":`Default model`,"clients.modelPlaceholder":`Choose a model`,"clients.modelUnset":`Not set`,"clients.roleMapTitle":`Role mapping`,"clients.roleMapFooter":`Claude Desktop only accepts role models such as Sonnet, Opus and Haiku; Astra swaps them for the provider models chosen here. Set at least one; unset roles use the first one that is set.`,"clients.roleMapFooterEnabled":`The mapping takes effect in the gateway right away once you apply it.`,"clients.roleMapRequired":`Choose a model for at least one role`,"clients.role.sonnet":`Sonnet`,"clients.role.opus":`Opus`,"clients.role.haiku":`Haiku`,"clients.maintenance":`Maintenance`,"clients.openConfigDir":`Open config folder`,"clients.copyConfigPath":`Copy config file path`,"clients.backups":`Config backups`,"clients.backupsDetail":`Taken automatically before every change; restore any time.`,"clients.noBackups":`No backups yet`,"clients.firstWrite":`Before first change`,"clients.restore":`Restore`,"clients.restoreConfirm":`Overwrite the current config with this backup?`,"clients.restored":`Restored from backup`,"clients.tokenTitle":`Token`,"clients.token":`Token written to the config`,"clients.tokenFooter":`Enabling writes "token.client" into the client config; usage is counted per token. Several clients can share one token.`,"clients.tokenFooterEnabled":`Changing the token rewrites the client config.`,"clients.tokenDisabled":`{name} (disabled)`,"clients.manageTokens":`Manage tokens`,"clients.claudeDirect.configure":`Direct settings`,"clients.claudeDirect.modeTitle":`Connection (Astra launcher)`,"clients.claudeDirect.mode":`Connection`,"clients.claudeDirect.gateway":`Gateway`,"clients.claudeDirect.direct":`Official direct`,"clients.claudeDirect.gatewayDetail":`Use the existing gateway configuration. Once enabled, default Claude Code requests go through Astra. astra claude is only for direct mode.`,"clients.claudeDirect.directDetail":`Talk to Anthropic directly with the Claude subscription account selected below, not through the gateway.`,"clients.claudeDirect.modeNote":`This affects only the Astra launcher's own sessions; running claude directly still uses your default configuration.`,"clients.claudeDirect.modeFooter":`Switching only changes how you launch it. Running sessions are never switched live, and your default ~/.claude configuration is not modified.`,"clients.claudeDirect.loadFailed":`Could not read the direct settings`,"clients.claudeDirect.gatewayOnTitle":`Gateway take-over is on — direct would be overridden`,"clients.claudeDirect.gatewayOnDetail":`Astra currently takes this client over, so direct would be written straight back to the gateway configuration. To really go direct, use "Disable & restore" above first, then switch.`,"clients.claudeDirect.noAccount":`No Claude subscription account yet`,"clients.claudeDirect.noAccountDetail":`Direct uses the accounts already signed in under the "Claude subscription (Pro/Max)" provider; sign one in under Providers, then pick it here.`,"clients.claudeDirect.goProviders":`Sign in under Providers`,"clients.claudeDirect.needAccountToast":`Sign in a Claude subscription account under Providers first`,"clients.claudeDirect.accountsTitle":`Subscription account`,"clients.claudeDirect.accountsFooter":`Direct talks to Anthropic with this account's short-lived token, not through the gateway. The token stays on this machine: it is never written into the command or a client config.`,"clients.claudeDirect.account":`Account to use`,"clients.claudeDirect.accountDisabledSuffix":`{status} (disabled)`,"clients.claudeDirect.launchTitle":`Launch`,"clients.claudeDirect.launchNote":`Needs a recent Astra CLI on this machine (npm i -g astragate). The command launches the official Claude Code with the selected subscription account, talking to Anthropic directly, not through the gateway; Astra hands it only a short-lived token, the refresh token stays in Astra. Running claude directly still uses your own configuration. Once the token expires, run the command again — it cannot be renewed mid-session. With a token from the environment, features of the official client that rely on the claude.ai sign-in (connectors, /schedule, …) are unavailable.`,"clients.claudeDirect.statsTitle":`Local statistics`,"clients.claudeDirect.statsConsent":`Collect local statistics`,"clients.claudeDirect.statsConsentDetail":`Off by default. When on, Claude Code reports usage to the local Astra itself: model, time, token counts and its own cost estimate — no message bodies, prompts or tool content.`,"clients.claudeDirect.statsFooter":`Astra stores statistics locally under the request-log retention setting. Disabling stops ingestion immediately; running sessions may keep trying to export until restarted. Estimates are not subscription charges. Organization policies may override client settings; gateway blocking and redaction do not apply to direct traffic.`,"clients.claudeDirect.statsEmpty":`No statistics yet`,"clients.claudeDirect.statsEmptyDetail":`After turning statistics on, start a session with the command above; data shows up here within seconds.`,"clients.claudeDirect.statsFailed":`Could not read the statistics`,"clients.claudeDirect.statsTotals":`Latest {count}`,"clients.claudeDirect.statsInDetail":`Total input (cache read {cache}): {input} · total output: {output}`,"clients.claudeDirect.statsCost":`Estimated cost`,"clients.claudeDirect.statsCostDetail":`The client's own estimate, not what your subscription is actually billed.`,"clients.claudeDirect.statsFailedCount":`{count} of them failed`,"clients.claudeDirect.statusError":`Failed`,"clients.claudeDirect.tokensDetail":`In {input} / Out {output}`,"tokens.subtitle":`Clients and direct calls reach Astra with a token; usage is counted per token`,"tokens.add":`New token`,"tokens.default":`Default`,"tokens.disabledBadge":`Disabled`,"tokens.copy":`Copy token`,"tokens.copied":`Token copied`,"tokens.clients":`Used by`,"tokens.noClients":`No client uses it yet`,"tokens.directProvider":`Direct-call provider`,"tokens.directNone":`Direct calls not allowed`,"tokens.directAccount":`Direct-call subscription account`,"tokens.directHint":`Point any other tool at {url} with this token to call Astra directly; requests go to the direct-call provider.`,"tokens.today":`Today`,"tokens.total":`Lifetime`,"tokens.cost":`Cost`,"tokens.requests":`Requests`,"tokens.cacheHit":`Cache hit rate`,"tokens.tps":`TPS`,"tokens.tpsContext":`Weighted output speed`,"tokens.tokens":`Tokens`,"tokens.inOut":`In / Out`,"tokens.details":`Show details`,"tokens.requestsContext":`{count} requests`,"tokens.lastUsedTitle":`Last used`,"tokens.limits":`Limits`,"tokens.limitsHint":`Once a limit is reached the gateway refuses this token: 429 with the reset time for a periodic limit, 403 for a total one. Requests in flight may push usage slightly past a limit. Periods follow the time zone in Settings.`,"tokens.unlimited":`Unlimited`,"tokens.addLimit":`Add limit`,"tokens.removeLimit":`Remove limit`,"tokens.limitMetric":`Metric`,"tokens.limitPeriod":`Period`,"tokens.limitValue":`Limit`,"tokens.metric.cost":`Cost (USD)`,"tokens.metric.requests":`Requests`,"tokens.metric.tokens":`Tokens`,"tokens.period.day":`Daily`,"tokens.period.week":`Weekly`,"tokens.period.month":`Monthly`,"tokens.period.total":`Total`,"tokens.rpm":`Requests per minute`,"tokens.rpmHint":`Leave empty for no limit.`,"tokens.rpmUsage":`Last minute {used} / {limit}`,"tokens.limitUsed":`{used} / {limit}`,"tokens.limitResets":`Resets {time}`,"tokens.limitExhausted":`Used up`,"tokens.limitDuplicate":`Each metric and period can be set once`,"tokens.allowedClients":`Allowed clients`,"tokens.allowedClientsAny":`Any client`,"tokens.allowedClientsOnly":`Only these clients`,"tokens.allowedClientsHint":`Restricts which clients the key suffix (token.client) may name. With none checked the token only works for direct calls (which also need a direct-call provider).`,"tokens.directOnly":`Direct calls only`,"tokens.selfService":`Self-service`,"tokens.selfServiceHint":`Whoever holds this token can look up its own limits and usage with it (nothing upstream is shown): open {url}/key, or call {url}/v1/astra/key — the legacy OpenAI balance API {url}/v1/dashboard/billing/subscription works too.`,"settings.tab.notifications":`Notifications`,"settings.quota.subscriptionInterval":`Subscription account interval`,"settings.quota.subscriptionIntervalHint":`Signed-in subscription accounts refresh their quota at this interval; 0 turns it off, minimum 10 minutes (the upstream endpoints rate-limit).`,"alerts.webhooks":`Webhooks`,"alerts.webhooks.hint":`Alerts are POSTed to these addresses as JSON. With a signing secret they carry X-Astra-Signature (HMAC-SHA256 over "timestamp.body").`,"alerts.webhooks.empty":`No webhooks yet`,"alerts.webhooks.add":`Add webhook`,"alerts.webhooks.edit":`Edit webhook`,"alerts.webhooks.name":`Name`,"alerts.webhooks.url":`URL`,"alerts.webhooks.timeout":`Timeout (seconds)`,"alerts.webhooks.useProxy":`Use the network proxy`,"alerts.webhooks.useProxyHint":`On: follows the proxy in Settings. Off: always direct.`,"alerts.webhooks.enabled":`Enabled`,"alerts.webhooks.headers":`Custom headers`,"alerts.webhooks.headersHint":`For example Authorization. Only names are shown once saved; leave a value empty when editing to keep it.`,"alerts.webhooks.addHeader":`Add header`,"alerts.webhooks.headerName":`Header name`,"alerts.webhooks.headerValue":`Header value`,"alerts.webhooks.headerKept":`Empty keeps the stored value`,"alerts.webhooks.signed":`Sign`,"alerts.webhooks.signedHint":`Generates a signing secret the receiver can use to verify a request came from Astra.`,"alerts.webhooks.secretTitle":`Signing secret`,"alerts.webhooks.secretShown":`Save this secret now — it is shown only once.`,"alerts.webhooks.resetSecret":`Regenerate signing secret`,"alerts.webhooks.resetSecretConfirm":`Regenerate the signing secret of {name}?`,"alerts.webhooks.resetSecretDetail":`The old secret stops working at once; the receiver needs the new one.`,"alerts.webhooks.test":`Send test`,"alerts.webhooks.testOk":`Test notification delivered (HTTP {status})`,"alerts.webhooks.testFailed":`Test failed: {error}`,"alerts.webhooks.deliveries":`Deliveries`,"alerts.webhooks.deleteConfirm":`Delete webhook {name}?`,"alerts.webhooks.deleteDetail":`Rules using it stop sending here; its deliveries are deleted too.`,"alerts.webhooks.deleted":`Deleted {name}`,"alerts.webhooks.disabledBadge":`Disabled`,"alerts.webhooks.unsigned":`Unsigned`,"alerts.webhooks.format":`Format`,"alerts.webhooks.format.generic":`Generic JSON`,"alerts.webhooks.format.generic.hint":`Astra's own JSON payload, signed with X-Astra-Signature — for a receiver you write yourself.`,"alerts.webhooks.format.feishu":`Feishu / Lark`,"alerts.webhooks.format.feishu.hint":`A Feishu group's custom bot: group settings → Bots → Add custom bot, then copy its webhook URL. With signature verification on, enter its signing secret.`,"alerts.webhooks.format.dingtalk":`DingTalk`,"alerts.webhooks.format.dingtalk.hint":`A DingTalk group's custom robot: group settings → Robots → Custom, then copy its webhook URL. With "sign" security, enter the SEC… secret; with custom keywords, include "Astra".`,"alerts.webhooks.format.wecom":`WeCom`,"alerts.webhooks.format.wecom.hint":`A WeCom group robot: group chat → Add group robot, then copy its webhook URL.`,"alerts.webhooks.format.slack":`Slack`,"alerts.webhooks.format.slack.hint":`A Slack incoming webhook URL.`,"alerts.webhooks.format.discord":`Discord`,"alerts.webhooks.format.discord.hint":`Discord channel settings → Integrations → Webhooks, then copy the webhook URL.`,"alerts.webhooks.botSecret":`Bot signing secret`,"alerts.webhooks.botSecretHint":`The signing secret from the bot's security settings; stored encrypted and never shown again.`,"alerts.webhooks.botSignedHint":`Turn on when the bot verifies signatures, and enter its signing secret.`,"alerts.delivery.status.pending":`Retrying`,"alerts.delivery.status.success":`Delivered`,"alerts.delivery.status.failed":`Failed`,"alerts.delivery.attempts":`{count} attempts`,"alerts.delivery.next":`Next try {time}`,"alerts.delivery.empty":`No deliveries yet`,"alerts.delivery.payload":`Payload`,"alerts.delivery.response":`Response`,"alerts.delivery.redeliver":`Redeliver`,"alerts.delivery.redelivered":`Queued for delivery again`,"alerts.rules":`Alert rules`,"alerts.rules.hint":`Each rule is an event + condition + scope → webhooks. A subject notifies once when it starts firing; repeats and recovery notices are optional.`,"alerts.rules.empty":`No alert rules yet`,"alerts.rules.add":`Add rule`,"alerts.rules.edit":`Edit rule`,"alerts.rules.name":`Name`,"alerts.rules.event":`Event`,"alerts.rules.subjects":`Scope`,"alerts.rules.subjectsAll":`All`,"alerts.rules.subjectsOnly":`Only selected`,"alerts.rules.webhooks":`Notify`,"alerts.rules.noWebhooks":`No webhooks yet — add one above first.`,"alerts.rules.notifyResolved":`Also notify on recovery`,"alerts.rules.repeat":`Repeat (minutes)`,"alerts.rules.repeatHint":`While still firing, notify again this often; leave empty to notify once.`,"alerts.rules.cooldown":`Cooldown (minutes)`,"alerts.rules.cooldownHint":`A new firing this soon after recovering is not notified, so flapping does not flood you.`,"alerts.rules.firing":`{count} firing`,"alerts.rules.deleteConfirm":`Delete alert rule {name}?`,"alerts.rules.deleted":`Deleted {name}`,"alerts.rules.disabledBadge":`Disabled`,"alerts.rules.enabled":`Enabled`,"alerts.firing":`Firing alerts`,"alerts.firing.empty":`Nothing is firing right now`,"alerts.event.provider.balance.low":`Provider balance low`,"alerts.event.provider.balance.low.hint":`An API-key provider with the usage query on: balance below the threshold (in the plan's unit) or used share reaching it.`,"alerts.event.provider.quota.failed":`Provider balance query failing`,"alerts.event.provider.quota.failed.hint":`The balance query failed this many times in a row.`,"alerts.event.account.quota.high":`Subscription quota running high`,"alerts.event.account.quota.high.hint":`A subscription account's 5-hour / weekly / credits window reached this used percentage.`,"alerts.event.account.auth.invalid":`Subscription account invalid`,"alerts.event.account.auth.invalid.hint":`The sign-in expired or was revoked; it needs to sign in again.`,"alerts.event.account.quota.failed":`Subscription quota query failing`,"alerts.event.account.quota.failed.hint":`The background quota sync failed this many times in a row.`,"alerts.event.token.usage.high":`Token limit running high`,"alerts.event.token.usage.high.hint":`A token budget reached this used percentage.`,"alerts.event.token.limit.reached":`Token limit reached`,"alerts.event.token.limit.reached.hint":`A token budget is used up, or requests were refused by its per-minute limit.`,"alerts.param.metric":`Compare`,"alerts.param.value":`Threshold`,"alerts.param.plan":`Plan`,"alerts.param.plan.placeholder":`Empty = the first plan with data`,"alerts.param.window":`Window`,"alerts.param.budget":`Budget`,"alerts.param.budget.placeholder":`Empty = any budget, e.g. cost:month`,"alerts.choice.metric.remaining":`Balance below`,"alerts.choice.metric.usedPercent":`Used percent at least`,"alerts.choice.window.any":`Any window`,"alerts.choice.window.session":`5-hour`,"alerts.choice.window.weekly":`Weekly`,"alerts.choice.window.credits":`Credits`,"alerts.subject.provider":`Providers`,"alerts.subject.account":`Subscription accounts`,"alerts.subject.token":`Tokens`,"key.title":`Token usage`,"key.subtitle":`Enter an Astra token to see its limits and usage. Only this token's own figures are shown.`,"key.placeholder":`sk-astra-…`,"key.submit":`Look up`,"key.invalid":`Unknown or invalid token`,"key.error":`Lookup failed: {error}`,"key.disabled":`This token is disabled`,"key.limits":`Limits`,"key.unlimited":`No limits`,"key.rpm":`Requests per minute: {used} / {limit} in the last minute`,"key.usage":`Usage`,"key.today":`Today`,"key.week":`This week`,"key.month":`This month`,"key.total":`Total`,"key.requests":`Requests`,"key.cost":`Cost`,"key.tokens":`Tokens`,"key.daily":`Cost, last 30 days`,"key.clients":`Clients`,"key.clientsAny":`Any client`,"key.directOnly":`Direct calls only`,"key.timeZone":`Periods follow {zone}`,"key.forget":`Use another token`,"key.resets":`Resets {time}`,"key.exhausted":`Used up`,"tokens.neverUsed":`Never used`,"tokens.settings":`Settings`,"tokens.name":`Name`,"tokens.namePlaceholder":`e.g. Work laptop`,"tokens.enable":`Enable`,"tokens.disable":`Disable`,"tokens.disableConfirm":`Disable {name}?`,"tokens.disableDetail":`Clients and direct calls using this token are rejected until it is enabled again. Client configs are not changed.`,"tokens.reset":`Reset key`,"tokens.resetConfirm":`Reset the key of {name}?`,"tokens.resetDetail":`The old key stops working immediately. Enabled clients using this token get their config rewritten; configs edited by hand are skipped and need to be re-enabled.`,"tokens.resetDone":`Key reset; {count} client configs rewritten`,"tokens.skipped":`These clients could not be updated and need to be re-enabled on the Clients page: {clients}`,"tokens.delete":`Delete token`,"tokens.deleteConfirm":`Delete {name}?`,"tokens.deleteDetail":`Its clients switch to the default token and get their config rewritten. The request log keeps the token name.`,"tokens.deleted":`Deleted {name}`,"tokens.created":`Created {name}`,"tokens.createTitle":`New token`,"tokens.settingsTitle":`Token settings · {name}`,"tokens.empty":`No tokens yet`,"clients.enableTitle":`Enable {name}`,"clients.enableDetail":`These are the edits Astra will make. It only adds or changes its own entries and backs up the original file first.`,"clients.enabledToast":`{name} enabled`,"clients.enabledRestart":`{name} enabled — restart the client to apply`,"clients.noChanges":`The config is already up to date.`,"providers.add":`Add provider`,"providers.count":`{count} providers`,"providers.empty":`No providers yet`,"providers.emptyDetail":`Add OpenAI, Anthropic, DeepSeek, OpenRouter and more from built-in templates, or any compatible endpoint.`,"providers.import":`Import from other apps`,"import.title":`Import providers from other apps`,"import.detail":`Read-only scan of the local configuration of CC Switch, Alma, Claude Code, Codex and Magpie. Nothing there is modified; API keys are read and encrypted by the server and never pass through the browser.`,"import.search":`Search by name or address`,"import.path":`Read from: {path}`,"import.notFound":`Not found`,"import.sourceError":`Could not be read: {error}`,"import.noItems":`No providers to import`,"import.noMatch":`No matching providers`,"import.scanning":`Scanning…`,"import.status.new":`New`,"import.status.same":`Already added`,"import.status.sameHost":`Same address`,"import.status.off":`Disabled`,"import.status.skip":`Cannot import`,"import.existing":`Already added as "{name}"`,"import.sameHostHint":`"{name}" already uses this address; this will be imported as a new provider`,"import.noKey":`No key`,"import.models":`{count} models`,"import.template":`Template: {id}`,"import.ignored":`Will ignore: {fields}`,"import.skip.official-login":`Official login (tokens are bound to the source app)`,"import.skip.no-base-url":`No base URL`,"import.skip.unsupported-protocol":`Unsupported protocol`,"import.skip.points-to-astra":`Points at Astra itself`,"import.skip.invalid-base-url":`Invalid base URL`,"import.skip.no-inline-key":`Key comes from an environment variable and is not read`,"import.selected":`Import selected ({count})`,"import.done":`Imported {count} providers`,"import.doneSkipped":`Imported {count} providers, skipped {skipped}`,"import.footnote":`Routing, rate limits, balance queries, sessions and usage are not imported. Importing never changes any client configuration and makes no upstream requests.`,"import.rescan":`Rescan`,"providers.modelCount":`{count} models`,"providers.priceKeyShort":`Prices: {key}`,"providers.templateUpdate":`Template update`,"providers.noKey":`No API key`,"providers.card.active":`Active`,"providers.card.disabled":`Disabled`,"providers.card.subscription":`Subscription`,"providers.card.noAuth":`No key needed`,"providers.card.requests7d":`Requests, last 7 days`,"providers.card.noRequests":`No requests yet`,"providers.created":`Added {name}`,"providers.addTitle":`Choose a provider template`,"providers.addTitleDetails":`Provider details`,"providers.addDetail":`Templates include endpoints, protocols and a default model list.`,"providers.custom":`Custom provider`,"providers.customDetail":`Any OpenAI / Anthropic / Gemini compatible endpoint`,"providers.searchTemplates":`Search templates`,"providers.category.recommended":`Recommended`,"providers.category.official":`Official`,"providers.category.subscription":`Subscriptions`,"providers.category.cn":`China`,"providers.category.aggregator":`Aggregators`,"providers.category.local":`Local`,"providers.category.custom":`Other`,"providers.category.plugin":`Plugins`,"providers.pluginProvided":`From a plugin · open it to sign in`,"providers.pluginHint":`Install an OpenCode / magpie provider plugin and the providers it serves show up here.`,"providers.create":`Add`,"providers.name":`Name`,"providers.variant":`Region / edition`,"providers.variantDefault":`Default region`,"providers.baseUrl":`Base URL`,"providers.baseUrlHint":`Usually ends with /v1`,"providers.protocol":`Protocol`,"providers.authScheme":`Authentication`,"providers.apiKey":`API key`,"providers.apiKeyHint":`Stored encrypted on this machine`,"providers.subscriptionWizardHint":`No API key needed — sign in with your subscription`,"providers.subscriptionWizardDetail":`After creating the provider, click "Add account" on its Accounts tab and authorize in the browser. The vendor's terms and quotas apply.`,"providers.subscriptionAdded":`Added · add accounts inside the provider`,"providers.subscription.quotaSession":`5h used {percent}%`,"providers.subscription.quotaWeekly":`Weekly used {percent}%`,"providers.subscription.quotaCredits":`Credits used {percent}%`,"providers.subscription.quotaBalance":`Balance {balance}`,"providers.subscription.quotaRefresh":`Refresh quota`,"providers.subscription.quotaUnsupported":`Quota is not available for this subscription yet`,"providers.subscription.quotaResets":`resets {when}`,"providers.subscription.quotaLoading":`Fetching quota…`,"providers.subscription.quotaNoAccount":`Account is not usable — sign in again to see quota`,"providers.subscription.quotaWindowPremium":`Premium requests`,"providers.subscription.quotaPremiumCount":`{used} of {total} premium requests used`,"providers.subscription.quotaOverage":`{count} overage`,"providers.subscription.quotaOverageOff":`overage not enabled`,"providers.subscription.quotaFetchedAt":`updated {when}`,"providers.subscription.quotaNoWindows":`This account reports no quota windows`,"providers.subscription.quotaWindowSession":`Session window`,"providers.subscription.quotaWindowWeekly":`Weekly window`,"providers.subscription.quotaWindowCredits":`Credits`,"providers.quota.title":`Usage query`,"providers.quota.footer":`Queries this provider's balance or plan usage with a template; results appear on the provider card and in the tray. A failed query only shows an error and never affects the provider itself.`,"providers.quota.enable":`Enable usage query`,"providers.quota.enableHint":`Refreshed in the background once enabled`,"providers.quota.template":`Template`,"providers.quota.templateAuto":`Automatic ({name})`,"providers.quota.templateNone":`Automatic (no matching template)`,"providers.quota.custom":`Custom`,"providers.quota.kind.balance":`Balance`,"providers.quota.kind.plan":`Plan usage`,"providers.quota.param.userId":`User ID`,"providers.quota.param.accessToken":`System access token`,"providers.quota.paramsHint":`The system access token and user ID generated in New API / One API personal settings — not the sk- API key.`,"providers.quota.secretStored":`Saved — leave empty to keep`,"providers.quota.interval":`Auto refresh (minutes)`,"providers.quota.intervalHint":`Empty follows the global setting; 0 never refreshes in the background. Now: {value}`,"providers.quota.intervalEvery":`every {minutes} min`,"providers.quota.intervalOff":`no background refresh`,"providers.quota.timeout":`Timeout (seconds)`,"providers.quota.baseUrl":`Query address`,"providers.quota.baseUrlHint":`Empty uses the provider endpoint ({{origin}} / {{baseUrl}} come from it)`,"providers.quota.method":`Method`,"providers.quota.url":`URL`,"providers.quota.urlHint":`Placeholders: {{origin}}, {{baseUrl}}, {{host}}, {{apiKey}} and the parameter names above`,"providers.quota.auth":`Authentication`,"providers.quota.auth.provider":`Use the provider API key`,"providers.quota.auth.none":`Only the headers below`,"providers.quota.headers":`Headers (JSON)`,"providers.quota.extract":`Extraction rules (JSON)`,"providers.quota.extractHint":`A string is a path into the response (e.g. data.balance), a number is a constant; an array takes the first value present; supports $const, $add, $sub, $mul, $div, $scale, $pctUsed, $eq, $not, $case, $var, $time. Missing fields are never treated as 0.`,"providers.quota.invalidJson":`{field} is not a valid JSON object`,"providers.quota.test":`Test query`,"providers.quota.testDesc":`Sends one real request with the current (unsaved) configuration`,"providers.quota.fetch":`Query now`,"providers.quota.refresh":`Refresh balance`,"providers.quota.fetchedAt":`Updated {time}`,"providers.quota.never":`Not queried yet`,"providers.quota.off":`Usage query is off`,"providers.quota.rawResponse":`Raw response (redacted)`,"providers.quota.requestUrl":`Request URL`,"providers.quota.httpStatus":`HTTP status`,"providers.quota.testOk":`Query succeeded`,"providers.quota.testFailed":`Query failed`,"providers.quota.extracted":`Extracted`,"providers.quota.balance":`Balance {amount}`,"providers.quota.usedPercent":`{percent}% used`,"providers.quota.window":`{window}: {percent}% used`,"providers.quota.totalUsed":`{used} used of {total}`,"providers.quota.resets":`resets {time}`,"providers.quota.invalid":`Account unavailable`,"providers.quota.failed":`Usage query failed: {error}`,"providers.quota.lastGood":`Showing the last successful result`,"providers.quota.error.config":`The query configuration is incomplete`,"providers.quota.error.no_key":`This provider has no API key`,"providers.quota.error.unauthorized":`The upstream refused the quota query (invalid credentials or no permission)`,"providers.quota.error.no_endpoint":`No quota endpoint at this address; pick another template or use a custom query`,"providers.quota.error.rate_limited":`Rate limited upstream; use a longer interval`,"providers.quota.error.upstream":`The upstream returned an error`,"providers.quota.error.timeout":`The query timed out`,"providers.quota.error.network":`Could not reach the upstream`,"providers.quota.error.not_json":`The response is not JSON`,"providers.quota.error.too_large":`The response is too large`,"providers.quota.error.empty":`The query succeeded but no quota field was found`,"settings.proxy":`Network proxy`,"settings.proxy.footer":`Gateway forwarding, subscription sign-in, quota queries, update checks and client installs all connect through this setting. Local addresses always connect directly; a provider with its own proxy uses that instead.`,"settings.proxy.mode":`Proxy`,"settings.proxy.mode.system":`System`,"settings.proxy.mode.custom":`Custom`,"settings.proxy.mode.direct":`None`,"settings.proxy.mode.system.hint":`HTTPS_PROXY-style environment variables first, then the operating system proxy`,"settings.proxy.mode.custom.hint":`All outbound requests use the proxy below`,"settings.proxy.mode.direct.hint":`Ignore environment variables and the system proxy; always connect directly`,"settings.proxy.url":`Proxy URL`,"settings.proxy.urlHint":`http, https or socks5, including the port`,"settings.proxy.username":`Username`,"settings.proxy.password":`Password`,"settings.proxy.optional":`Optional`,"settings.proxy.passwordSaved":`Saved; leave blank to keep it`,"settings.proxy.bypass":`Bypass for`,"settings.proxy.bypassHint":`Comma separated; subdomains match too`,"settings.proxy.saved":`Proxy settings saved`,"settings.pluginMarket":`Plugin market`,"settings.pluginMarket.footer":`The plugin market reads the Astra site's registry by default (the community repository's plugins plus the packages published on the site). When the site can't be reached it uses the copy fetched last, then the built-in one. The ASTRA_PLUGIN_MARKET environment variable wins over this setting.`,"settings.pluginMarket.url":`Registry address`,"settings.pluginMarket.urlHint":`The http(s) address of the registry (registry.json); save it empty to go back to the default.`,"settings.pluginMarket.offline":`Use local copies only`,"settings.pluginMarket.offlineHint":`Never fetch the registry and no search: only the copy fetched last, or the built-in one, is shown.`,"settings.pluginMarket.saved":`Plugin market address saved`,"settings.pluginMarket.reset":`Reset to default`,"settings.quota":`Provider usage query`,"settings.quota.autoInterval":`Background refresh`,"settings.quota.autoIntervalHint":`Providers with the usage query enabled refresh their balance at this interval; 0 turns it off. A provider can set its own.`,"settings.usageTimeZone":`Token limit time zone`,"settings.usageTimeZone.system":`Server time zone ({zone})`,"settings.usageTimeZone.hint":`Tokens' daily, weekly and monthly limits reset at midnight in this zone, and daily usage is counted in it. Containers default to UTC.`,"settings.minutes":`min`,"tray.quotaBalance":`Balance`,"providers.subscription.relogin":`Sign in again`,"providers.getKey":`Get an API key ↗`,"providers.priceKey":`Price table`,"providers.priceKeyHint":`Which provider's model prices apply; the same model costs differently at different providers.`,"providers.priceKeyNone":`Official default prices only`,"providers.priceKeyDefault":`Default ({id})`,"providers.templateModels":`The template's {count} models will be added; you can change them later.`,"providers.tab.models":`Models`,"providers.tab.settings":`Settings`,"providers.tab.accounts":`Accounts`,"providers.tab.apiKey":`API key`,"providers.test":`Test`,"providers.testDialog.title":`Test {name}`,"providers.testDialog.subtitle":`Applies the privacy policy and logs the request; never retried`,"providers.testDialog.modeSingle":`Single model`,"providers.testDialog.modeBatch":`Batch`,"providers.testDialog.config":`Test configuration`,"providers.testDialog.model":`Test model`,"providers.testDialog.modelPlaceholder":`Type any model ID`,"providers.testDialog.showModels":`Show model list`,"providers.testDialog.protocol":`Test protocol`,"providers.testDialog.stream":`Streamed response`,"providers.testDialog.maxTokens":`Max output tokens`,"providers.testDialog.prompt":`Test prompt (optional)`,"providers.testDialog.promptHint":`The default prompt is used when left empty.`,"providers.testDialog.realRequest":`A real request; it may consume quota`,"providers.testDialog.savedCredentials":`Uses the connection and credentials saved for this provider.`,"providers.testDialog.start":`Start test`,"providers.testDialog.retest":`Test again`,"providers.testDialog.stop":`Stop`,"providers.testDialog.stopRest":`Stop the rest`,"providers.testDialog.testN":`Test {count} models`,"providers.testDialog.metrics.http":`HTTP response`,"providers.testDialog.metrics.firstWait":`First token wait`,"providers.testDialog.metrics.ttft":`First token total`,"providers.testDialog.metrics.total":`Total time`,"providers.testDialog.metricsHelp":`HTTP response: time to the upstream response headers. First token: time to the first piece of the answer. Wait is measured from the headers arriving, the total from the request being sent.`,"providers.testDialog.reply":`Provider reply`,"providers.testDialog.preview":`Preview`,"providers.testDialog.raw":`Raw`,"providers.testDialog.rawNote":`Response body as processed by the gateway (credentials redacted)`,"providers.testDialog.rawTruncated":`Truncated: the raw body was longer than 256 KiB`,"providers.testDialog.reasoning":`Reasoning`,"providers.testDialog.noText":`The upstream returned no text.`,"providers.testDialog.headers":`Response headers`,"providers.testDialog.headersCount":`{count} headers`,"providers.testDialog.headersEmpty":`The upstream returned no response headers.`,"providers.testDialog.emptyTitle":`No test yet`,"providers.testDialog.emptyDetail":`Start a test to send one real request to this provider.`,"providers.testDialog.status.idle":`Waiting for a test`,"providers.testDialog.status.running":`Testing`,"providers.testDialog.status.success":`Test succeeded`,"providers.testDialog.status.failed":`Test failed`,"providers.testDialog.selected":`Selected {n} / {total}`,"providers.testDialog.progress":`Finished {done} / {total} · {ok} succeeded · {failed} failed`,"providers.testDialog.progressDone":`This batch finished {total} / {total} · {ok} succeeded · {failed} failed`,"providers.testDialog.clearSelection":`Clear selection`,"providers.testDialog.searchModels":`Search or type a model ID`,"providers.testDialog.addModel":`Add "{id}"`,"providers.testDialog.view":`View`,"providers.testDialog.noModels":`This provider has no models yet; type an ID above to test one.`,"providers.testDialog.status.queued":`Queued`,"providers.testDialog.status.cancelled":`Cancelled`,"providers.testDialog.statusColumn":`Status`,"providers.testDialog.ownFilter":`Select all models of this provider`,"providers.duplicate":`Duplicate`,"providers.deleteConfirm":`Delete {name}?`,"providers.deleteDetail":`The provider and its model settings are removed; request history is kept.`,"providers.deleted":`Deleted`,"providers.deleteBound":`Still used by: {clients}. Switch them to another provider first.`,"providers.templateVersions":`Current version {current}, latest {latest}`,"providers.templateApplied":`Updated to the latest template`,"providers.templateUpToDate":`Already on the latest template.`,"providers.searchModels":`Search models`,"providers.addModels":`Add models`,"providers.addModelsDetail":`Enter model IDs, one per line or comma separated; they are linked to system models to inherit parameters and prices.`,"providers.fetchRemote":`Fetch from upstream`,"providers.fetchRemoteDetail":`Reads the provider's model list and links models to the system catalog so they inherit parameters and prices.`,"providers.noModels":`No models yet`,"providers.noModelsDetail":`Fetch the model list from upstream, or enter model IDs manually.`,"providers.modelsFooter":`A model needs only an ID: fields you don't override are inherited from the linked system model, priced with this provider's price table.`,"providers.modelMap.title":`Model mapping`,"providers.modelMap.footer":`Turns a model ID clients ask for into one of this provider's models, e.g. deepseek-v4.1 → deepseek-chat. Mapped IDs appear in the clients' model lists, and clients bound to several providers route them here. Billing follows the model actually sent.`,"providers.modelMap.add":`Add mapping`,"providers.modelMap.addDetail":`When a client asks for the model ID on the left, Astra requests the model on the right from this provider instead.`,"providers.modelMap.needModels":`Add models to this provider first`,"providers.modelMap.from":`Requested model ID`,"providers.modelMap.to":`This provider's model`,"providers.modelMap.toPlaceholder":`Choose a model`,"providers.modelMap.remove":`Remove mapping {from}`,"providers.modelMap.saved":`Model mapping saved`,"providers.modelMap.missingTarget":`Target model missing`,"providers.unlinked":`Unlinked`,"providers.modelsAdded":`Added {count} models`,"providers.addSelected":`Add {count}`,"providers.linksTo":`Links to {id}`,"providers.noLink":`No system model`,"providers.added":`Added`,"providers.linkedModel":`Linked system model`,"providers.linkedModelHint":`Fields and prices that are not overridden are inherited from it.`,"providers.overrides":`Overrides`,"providers.price":`Price`,"providers.customPrice":`Custom price`,"providers.customPriceHint":`A custom price fully replaces the inherited one and is not scaled by the provider multiplier.`,"providers.inheritedPriceHint":`Effective price (inherited, resolved with this provider's price table):`,"providers.removeModel":`Remove {id} from this provider?`,"providers.removeModelShort":`Remove model`,"providers.section.basic":`Basics`,"providers.section.auth":`Authentication`,"providers.section.endpoints":`Endpoints`,"providers.section.billing":`Billing`,"providers.section.advanced":`Advanced`,"providers.section.info":`Info`,"providers.subscription":`Subscription accounts`,"providers.subscription.footer":`Tokens are stored encrypted on this machine and refreshed before they expire.`,"providers.subscription.login":`Sign in`,"providers.subscription.loginDesc":`Finish the provider's authorization flow; tokens stay on this machine.`,"providers.subscription.logout":`Sign out & delete`,"providers.subscription.logoutConfirm":`Sign out account "{name}"? Clients pinned to it fall back to the default account.`,"providers.subscription.refreshToken":`Refresh token`,"providers.subscription.tokenRefreshed":`Token refreshed`,"providers.subscription.expires":`Expires`,"providers.subscription.status.active":`Active`,"providers.subscription.status.expired":`Expired`,"providers.subscription.status.revoked":`Revoked`,"providers.subscription.none":`No subscription account signed in yet`,"providers.subscription.openAuthorize":`Open authorization page`,"providers.subscription.doneAuthorize":`I've finished authorizing`,"providers.subscription.waiting":`Waiting for authorization…`,"providers.subscription.waitingDetail":`The authorization page opened in your browser; this page detects the new account automatically.`,"providers.subscription.cliDetail":`Finish the authorization in your browser; sign-in completes here automatically (server-side polling, no callback URL needed).`,"providers.subscription.checkNow":`I authorized — check now`,"providers.subscription.checkNowHint":`Click after finishing in the browser; this page also checks every few seconds on its own.`,"providers.subscription.pasteTitle":`Paste the code shown on the authorization page`,"providers.subscription.pasteDetail":`Claude's registered redirect URI is not a loopback address, so the browser cannot come back here: the authorization page displays a code instead. Open it, authorize, then paste the code below.`,"providers.subscription.pastePlaceholder":`Paste the authorization code (like xxxx#yyyy)`,"providers.subscription.pasteCode":`Authorization code`,"providers.subscription.pasteSubmit":`Finish sign-in`,"providers.subscription.stillWaiting":`No authorization yet — make sure you confirmed in the browser.`,"providers.subscription.deviceCode":`Device code`,"providers.subscription.visitPage":`Open verification page`,"providers.subscription.loginOk":`Authorized: {name}`,"providers.subscription.loginFailed":`Sign-in failed`,"providers.subscription.importCodex":`Import local Codex sign-in`,"providers.subscription.importCodexHint":`Adopt the codex sign-in already stored in ~/.codex/auth.json; no browser round-trip needed`,"providers.subscription.importOk":`Imported the local Codex account: {name}`,"providers.subscription.importCopilot":`Import local GitHub authorization`,"providers.subscription.importCopilotHint":`Adopt a GitHub authorization already on this machine (the VS Code GitHub session, GH_TOKEN, or the Copilot plugin config) as a Copilot account, instead of repeating the device flow`,"providers.subscription.importCopilotPlaceholder":`or paste a GitHub token (gho_…)`,"providers.subscription.importCopilotToken":`GitHub token`,"providers.subscription.localCopilotFound":`Found a local GitHub authorization: {source}`,"providers.subscription.importBatch":`Batch import tokens`,"providers.subscription.importBatchTitle":`Batch import GitHub tokens`,"providers.subscription.importBatchLabel":`GitHub tokens (one per line)`,"providers.subscription.importBatchDesc":`Paste GitHub tokens (gho_ / ghp_ / github_pat_), one per line. Each one becomes a Copilot account; duplicates and tokens without a Copilot subscription are reported, not imported. You can also paste a ready-to-use Copilot token (tid=…;exp=…): it is used as is, but cannot renew itself and must be re-imported after it expires.`,"providers.subscription.importBatchPlaceholder":`gho_xxxxxxxxxxxx
13
+ tid=xxxx;exp=1760000000;sku=...
14
+ # lines starting with # are ignored`,"providers.subscription.importBatchCount":`{n} token(s) recognised`,"providers.subscription.importBatchRun":`Import`,"providers.subscription.importBatchSummary":`Imported {ok}, duplicates {dup}, failed {fail}`,"providers.subscription.importBatchStatus.imported":`Imported`,"providers.subscription.importBatchStatus.duplicate":`Duplicate`,"providers.subscription.importBatchStatus.invalid_format":`Invalid format`,"providers.subscription.importBatchStatus.failed":`Failed`,"providers.subscription.importBatchStatus.updated":`Updated`,"providers.subscription.importBatchStatus.ready":`Ready`,"providers.accounts.statTotal":`{n} accounts`,"providers.accounts.statUsable":`{n} usable`,"providers.accounts.statCooling":`{n} cooling down`,"providers.accounts.statDead":`{n} signed out`,"providers.accounts.providerProxy":`Provider proxy: {proxy}`,"providers.accounts.filter.all":`All`,"providers.accounts.filter.usable":`Usable`,"providers.accounts.filter.cooling":`Cooling`,"providers.accounts.filter.dead":`Signed out`,"providers.accounts.filter.disabled":`Disabled`,"providers.accounts.filterLabel":`Filter by status`,"providers.accounts.search":`Search email / name / key`,"providers.accounts.add":`Add account`,"providers.accounts.addLogin":`Sign in with browser`,"providers.accounts.addLoginProxy":`Sign in through a proxy…`,"providers.accounts.addToken":`Paste a token…`,"providers.accounts.addApiKey":`Add API key…`,"providers.accounts.batchImport":`Batch import`,"providers.accounts.noMatch":`No accounts match`,"providers.accounts.select":`Select {name}`,"providers.accounts.selected":`{n} selected`,"providers.accounts.clearSelection":`Clear selection`,"providers.accounts.bulkDeleteConfirm":`Delete the {n} selected accounts?`,"providers.accounts.bulkDeleteDetail":`Their tokens are removed from this machine; clients bound to them fall back to the default account.`,"providers.accounts.bulkDone":`{n} accounts updated`,"providers.accounts.kind.oauth":`OAuth`,"providers.accounts.kind.api_key":`API key`,"providers.accounts.source.login":`Browser sign-in`,"providers.accounts.source.local":`Local import`,"providers.accounts.source.token":`Pasted`,"providers.accounts.source.batch":`Batch import`,"providers.accounts.expiresAt":`expires {when}`,"providers.accounts.neverExpires":`never expires`,"providers.accounts.proxyBadge":`Own proxy`,"providers.accounts.signedOut":`Signed out`,"providers.accounts.quotaShortWeekly":`Week`,"providers.accounts.quotaShortSession":`Session`,"providers.accounts.quotaShortCredits":`Credits`,"providers.accounts.quotaShortPremium":`Premium`,"providers.accounts.order":`#{n}`,"providers.accounts.detail.identity":`Account`,"providers.accounts.detail.name":`Name`,"providers.accounts.detail.proxy":`Account proxy`,"providers.accounts.detail.proxyHint":`This account's requests, token refreshes and quota checks go through it; empty follows the provider ({fallback}).`,"providers.accounts.detail.quota":`Quota`,"providers.accounts.detail.credentials":`Credentials`,"providers.accounts.detail.kind":`Kind`,"providers.accounts.detail.source":`Source`,"providers.accounts.detail.status":`Status`,"providers.accounts.detail.expires":`Token expires`,"providers.accounts.detail.lastRefresh":`Last refresh`,"providers.accounts.detail.created":`Added`,"providers.accounts.detail.order":`Failover order`,"providers.accounts.detail.lastError":`Last error`,"providers.accounts.detail.key":`API key`,"providers.accounts.proxyFallbackSystem":`system proxy`,"providers.accounts.renamed":`Renamed`,"providers.accounts.proxySaved":`Account proxy saved`,"providers.accounts.loginProxyTitle":`Sign in through a proxy`,"providers.accounts.loginProxyDesc":`The new account reaches the upstream through this proxy from the sign-in on (code exchange, refreshes and requests). The authorization page still opens in your browser.`,"providers.accounts.loginProxyStart":`Start sign-in`,"providers.accounts.import.batchTitle":`Batch import accounts`,"providers.accounts.import.tokenTitle":`Paste a token`,"providers.accounts.import.apiKeyTitle":`Add API key`,"providers.accounts.import.desc":`Tokens are stored encrypted on this machine; results only show their first and last characters.`,"providers.accounts.import.label":`Tokens to import (one per line)`,"providers.accounts.import.apiKeyLabel":`API keys (one per line)`,"providers.accounts.import.formats":`Accepted: {formats}`,"providers.accounts.import.count":`{n} entries recognised`,"providers.accounts.import.preview":`Preview`,"providers.accounts.import.run":`Import`,"providers.accounts.import.proxy":`Account proxy (optional)`,"providers.accounts.import.summary":`{ok} imported, {dup} duplicates, {fail} failed`,"providers.accounts.import.previewSummary":`{ok} ready, {dup} duplicates, {fail} unrecognised`,"providers.accounts.import.rotateWarning":`Refresh tokens are usually single-use: after the import, the client that used it (Claude Code, Codex, …) may have to sign in again.`,"providers.accounts.credential.refresh_token":`refresh token`,"providers.accounts.credential.setup_token":`setup-token`,"providers.accounts.credential.api_key":`API key`,"providers.accounts.credential.github_token":`GitHub token`,"providers.accounts.credential.copilot_token":`Copilot token`,"providers.accounts.credential.claude_credentials":`.credentials.json`,"providers.accounts.credential.codex_auth_json":`auth.json`,"providers.accounts.format.claude-refresh-token":`refresh token (sk-ant-ort01-…)`,"providers.accounts.format.claude-setup-token":`claude setup-token (sk-ant-oat01-…)`,"providers.accounts.format.claude-credentials-json":`Claude Code's .credentials.json`,"providers.accounts.format.codex-auth-json":`the contents of ~/.codex/auth.json`,"providers.accounts.format.refresh-token":`refresh token`,"providers.accounts.format.grok-sso":`Grok Web SSO (sso cookie / email----password----…----sso)`,"providers.accounts.format.kimi-api-key":`Kimi Code API key (sk-kimi-…)`,"providers.accounts.format.zai-api-key":`Z.AI Coding Plan API key`,"providers.accounts.format.bigmodel-api-key":`Zhipu Coding Plan API key`,"providers.accounts.format.github-token":`GitHub token (gho_ / ghp_ / github_pat_)`,"providers.accounts.format.copilot-token":`Copilot token (tid=…;exp=…)`,"providers.subscription.localCopilotHint":`Import reads the VS Code entry in the system credential store (macOS shows a consent prompt); you can also paste a GitHub token directly`,"providers.subscription.localCodexFound":`Found a local Codex sign-in: {who}`,"providers.subscription.unknownAccount":`unknown account`,"providers.subscription.credits.title":`Rate-limit reset cards`,"providers.subscription.credits.footer":`codex reset cards: spending one clears the current rate-limit window immediately.`,"providers.subscription.credits.none":`This account has no reset cards`,"providers.subscription.credits.unavailable":`Reset cards are unavailable right now (signed out, or the upstream is unreachable).`,"providers.subscription.credits.availableCount":`{count} available`,"providers.subscription.credits.consume":`Use`,"providers.subscription.credits.consumeConfirm":`Use reset card “{title}”?`,"providers.subscription.credits.consumeDetail":`Clears the current rate-limit window immediately and cannot be undone.`,"providers.subscription.credits.consumed":`Reset card used; quota refreshed`,"providers.subscription.credits.consumeFailed":`Could not use the reset card`,"providers.subscription.credits.expires":`expires {when}`,"providers.subscription.credits.redeemedAt":`used {when}`,"providers.subscription.credits.notInPlan":`not in the current plan`,"providers.subscription.credits.status.available":`Available`,"providers.subscription.credits.status.redeemed":`Used`,"providers.subscription.credits.status.expired":`Expired`,"providers.subscription.needsVerification":`Coming soon: this subscription's sign-in flow has not been verified yet`,"providers.subscription.current":`In use`,"providers.subscription.disabled":`Disabled`,"providers.subscription.activate":`Switch to this account`,"providers.subscription.activated":`Switched to {name}; applies from the next request`,"providers.subscription.enable":`Enable`,"providers.subscription.disable":`Disable`,"providers.subscription.moveUp":`Move up`,"providers.subscription.moveDown":`Move down`,"providers.subscription.cooldown":`Rate-limited until {when}`,"providers.subscription.policy.title":`Usage policy`,"providers.subscription.policy.footer":`Switching accounts applies from the next request, no client restart needed. Requests from a client or token pinned to an account are not affected.`,"providers.subscription.policy.claudeCodeOnly":`Claude Code only`,"providers.subscription.policy.claudeCodeOnlyDetail":`Only requests from Claude Code (including its IDE extensions and Agent SDK) are accepted, with its headers forwarded as-is; other clients get a 403.`,"providers.subscription.policy.anyWarning":`Other clients are allowed: Astra only adds the headers OAuth requires and does not impersonate Claude Code. Anthropic may bill these requests as extra usage, reject them, or treat them as a terms-of-service violation.`,"providers.subscription.policy.mimic":`Other clients impersonate Claude Code`,"providers.subscription.policy.mimicDetail":`Requests from clients other than Claude Code carry the Claude Code identity (system identity blocks, the claude-cli User-Agent, X-Stainless fingerprints and the full beta set); without it the subscription token's non-Haiku models are rejected upstream. Off by default.`,"providers.subscription.policy.mimicWarning":`Claude Code impersonation is on: requests present the official CLI identity. This violates Anthropic’s terms of service and may get the account limited or banned — the risk is yours.`,"providers.subscription.policy.switchMode":`Account switching`,"providers.subscription.policy.manual":`Manual`,"providers.subscription.policy.failover":`Automatic failover`,"providers.subscription.policy.manualDetail":`Changes only when you switch, or when the current account dies or is disabled.`,"providers.subscription.policy.failoverDetail":`When the current account is rate-limited (429) or its sign-in dies, the next usable account takes over and stays in use.`,"providers.subscription.policy.balanced":`Balanced`,"providers.subscription.policy.balancedDetail":`Spreads requests over all usable accounts, fewest in flight first. A conversation (same prompt_cache_key or Claude Code session) stays on one account so the upstream prompt cache keeps hitting; a rate-limited or dead account is skipped. Bindings are kept in memory only.`,"providers.notes":`Notes`,"providers.apiKeyStored":`The API key is stored encrypted on this machine. Leave empty to keep it.`,"providers.replaceKey":`Enter a new key to replace`,"providers.endpointsFooter":`One URL per protocol; Astra translates when the client protocol differs from upstream.`,"providers.fullUrl":`Full URL`,"providers.addEndpoint":`Add endpoint`,"providers.preferred":`Upstream protocol order`,"providers.preferredHint":`Used to pick an upstream endpoint when translation is needed`,"providers.preferredMissing":`{protocol} has no endpoint address, so it is never selected from this order`,"providers.billingFooter":`The multiplier only scales inherited prices; custom model prices are not multiplied.`,"providers.multiplier":`Price multiplier`,"providers.multiplierHint":`e.g. a reseller charging official price ×1.1`,"providers.proxy":`HTTP proxy`,"providers.proxyHint":`This provider's requests, subscription sign-ins, token refreshes and quota checks; subscription accounts can override it under Accounts`,"providers.headers":`Extra headers`,"providers.addHeader":`Add header`,"providers.addHeaderDetail":`Sent with every request to this provider; applied when you save.`,"providers.headerName":`Name`,"providers.headerValue":`Value`,"providers.addEndpointDetail":`The URL for one protocol; applied when you save.`,"providers.fullUrlHint":`The URL is the complete request URL; no path is appended`,"providers.adapterSettings":`Adapter settings (JSON)`,"providers.adapter":`Adapter`,"providers.boundClients":`Used by`,"origin.inherited":`Inherited`,"origin.overridden":`Overridden`,"origin.unset":`Unset`,"origin.reset":`Reset to inherited`,"models.count":`{count} models`,"models.search":`Search models, aliases`,"models.allVendors":`All vendors`,"models.sync":`Sync model catalog`,"models.syncDetail":`Fetch the latest parameters and prices from the official catalog (astra-gate.si). Fields you modified are never overwritten.`,"models.new":`New model`,"models.newDetail":`Add parameters and a default price for a model the catalog does not have.`,"models.col.model":`Model`,"models.col.vendor":`Vendor`,"models.col.context":`Context`,"models.col.price":`Input / output`,"models.col.providerPrices":`Provider prices`,"models.empty":`No matching models`,"models.source.seed":`Built-in`,"models.source.sync":`Synced`,"models.source.user":`Custom`,"models.modified":`Modified`,"models.providerPriceCount":`{count} providers`,"models.updated":`updated {time}`,"models.resetField":`Restore built-in value`,"models.fieldReset":`Restored built-in value`,"models.deleteConfirm":`Delete model {id}?`,"models.section.basic":`Parameters`,"models.section.capabilities":`Capabilities`,"models.section.pricing":`Official default price`,"models.section.providerPrices":`Prices by provider`,"models.section.overrides":`Provider custom prices`,"models.section.simulator":`Billing simulator`,"models.modifiedFooter":`Fields marked "Modified" are never overwritten by built-in data or syncs.`,"models.pricingHint":`The vendor's official price; used when a provider has no price of its own (scaled by the provider multiplier).`,"models.providerPricesFooter":`The same model priced at different AI providers (by price table); takes precedence over the official default.`,"models.overridesFooter":`These providers set their own price for this model; it has the highest priority.`,"models.noProviderPrices":`No provider-specific prices`,"models.hasTimeWindows":`time windows`,"models.hasTiers":`tiers`,"models.deletePrice":`Delete the {key} price?`,"models.addPrice":`Add provider price`,"models.editPrice":`Edit {key} price`,"models.priceSheetDetail":`Applies only to providers using this price table.`,"models.pickPriceKey":`Choose a price table`,"models.customPriceKey":`or enter a custom price table ID`,"models.upstreamId":`Provider's model ID`,"models.upstreamIdHint":`Set when it differs from the system ID; used for auto-linking`,"models.simulatorUnsaved":`Unsaved changes: simulating with the edited price.`,"models.field.id":`Model ID`,"models.field.idHint":`The name clients send`,"models.field.displayName":`Display name`,"models.field.vendor":`Vendor`,"models.field.family":`Family`,"models.field.aliases":`Aliases`,"models.field.contextWindow":`Context window`,"models.field.maxOutputTokens":`Max output`,"models.field.inputPrice":`Input /1M`,"models.field.outputPrice":`Output /1M`,"models.sync.newModel":`New model`,"models.sync.price":`Price · {key}`,"models.sync.field":`Field · {field}`,"models.sync.applied":`Applied {count} changes`,"models.sync.apply":`Apply {count}`,"models.sync.check":`Check for updates`,"models.sync.none":`Everything is up to date`,"models.sync.userModified":`Modified by you`,"models.sync.more":`+{n} more`,"models.sync.selectAll":`Select all`,"models.sync.selectedOf":`{n} / {total} selected · {models} models`,"models.sync.groupCount":`{n} changes`,"cap.vision":`Image input`,"cap.tools":`Tool calling`,"cap.reasoning":`Reasoning`,"cap.promptCache":`Prompt caching`,"cap.audio":`Audio`,"cap.pdf":`PDF`,"cap.structuredOutput":`Structured output`,"requests.col.cache":`Cache read / write`,"usage.title":`Token usage`,"usage.inputTotal":`Total input`,"usage.outputTotal":`Total output`,"usage.input":`Input`,"usage.output":`Output`,"usage.uncachedInput":`Uncached input`,"usage.regularOutput":`Non-reasoning output`,"usage.cacheRead":`Cache hit`,"usage.cacheWrite":`Cache write`,"usage.cacheWrite5m":`Cache write · 5 minutes`,"usage.cacheWrite1h":`Cache write · 1 hour`,"usage.reasoning":`Reasoning / thinking`,"usage.inputAudio":`Audio input`,"usage.outputAudio":`Audio output`,"usage.inputImage":`Image input`,"usage.outputImage":`Image output`,"usage.hitShort":`Hit`,"usage.writeShort":`Write`,"usage.reasoningShort":`Think`,"usage.hitRate":`Cache hit rate`,"usage.noCache":`No cache read or write tokens reported by upstream`,"usage.missing":`No usage reported by upstream; the cache hit rate is unknown.`,"usage.hitTooltip":`Cache hits {read} / total input {total} tokens`,"usage.writeTooltip":`{tokens} tokens written; 5m / 1h are listed separately in details`,"usage.totalsHint":`Input already includes cache reads and writes; output includes reasoning. These counters are not added twice. Hit rate = cache read / total input.`,"usage.cacheAmounts":`Hit {read} · Write {write}`,"settings.appearance":`Appearance`,"settings.theme":`Theme`,"settings.theme.system":`System`,"settings.theme.light":`Light`,"settings.theme.dark":`Dark`,"settings.accent":`Accent color`,"settings.accent.system":`System`,"settings.accent.followingSystem":`Using the system accent color`,"settings.accent.systemUnavailable":`System accent unavailable; using default blue`,"settings.accent.blue":`Blue`,"settings.accent.purple":`Purple`,"settings.accent.pink":`Pink`,"settings.accent.red":`Red`,"settings.accent.orange":`Orange`,"settings.accent.yellow":`Yellow`,"settings.accent.green":`Green`,"settings.accent.graphite":`Graphite`,"settings.language":`Language`,"settings.languageHint":`Also the language of billing descriptions for new requests`,"settings.gateway":`Gateway`,"settings.requireKey":`Require access key`,"settings.requireKeyHint":`On by default. When off, requests without a key (or with an invalid one) are still served, through the default token's provider.`,"settings.requireKeyOffConfirm":`Turn off access key verification?`,"settings.requireKeyOffDetail":`Once off, any program or device that can reach this gateway address can use your provider quota without a key. Only do this in a trusted, local-only environment.`,"settings.requireKeyOff":`Turn off anyway`,"settings.gatewayFooter":`Change the port and listen address from a terminal: astra start --port <port>`,"settings.gatewayUrl":`Gateway URL`,"settings.listen":`Listening on`,"settings.dataDir":`Data folder`,"settings.openFolder":`Open folder`,"settings.streamIdle":`Stream idle timeout`,"settings.streamIdleHint":`Disconnect when the upstream sends nothing for this long`,"settings.requestCompression":`Upstream request compression`,"settings.requestCompressionHint":`Format for providers that compress request bodies (ChatGPT subscription defaults to zstd); other providers always get plain bodies`,"settings.requestCompression.default":`Provider default`,"settings.requestCompression.none":`No compression`,"settings.logging":`Logging`,"settings.debugBodies":`Save request & response bodies`,"settings.debugBodiesHint":`For troubleshooting. Stored in the local data folder, without secrets.`,"settings.bodyRetention":`Keep bodies`,"settings.requestRetention":`Auto-delete request history`,"settings.keepForever":`Kept forever`,"settings.days":`days`,"settings.effort":`Reasoning effort mapping`,"settings.effortHint":`Used when translating OpenAI reasoning effort to Anthropic / Gemini thinking budgets and back.`,"settings.privacy":`Privacy guard`,"settings.privacy.footer":`Sensitive content is detected on this machine before requests leave. Original values live only in request memory and are never stored.`,"settings.privacy.enabled":`Enable privacy guard`,"settings.privacy.enabledHint":`When off, requests are forwarded untouched`,"settings.privacy.dryRun":`Detect only`,"settings.privacy.dryRunHint":`Record matches but let requests through, to observe the effect`,"settings.privacy.restore":`Restore placeholders in responses`,"settings.privacy.restoreHint":`Placeholders are swapped back to the original values; clients never notice`,"settings.privacy.recordSamples":`Record masked samples`,"settings.privacy.recordSamplesHint":`Logs keep masked samples (e.g. john••••om); originals are never saved`,"settings.privacy.defaultAction":`Default action`,"settings.privacy.action.off":`Off`,"settings.privacy.action.warn":`Warn only`,"settings.privacy.action.block":`Block`,"settings.privacy.action.redact":`Redact`,"settings.privacy.categories":`Detection categories`,"settings.privacy.category.api_key":`API keys`,"settings.privacy.category.aws_key":`AWS keys`,"settings.privacy.category.jwt":`JWT tokens`,"settings.privacy.category.private_key":`Private keys`,"settings.privacy.category.email":`Email addresses`,"settings.privacy.category.phone":`Phone numbers`,"settings.privacy.category.intranet":`Intranet addresses`,"settings.privacy.category.custom":`Custom`,"settings.privacy.category.credit_card":`Card numbers`,"settings.privacy.category.national_id":`National IDs`,"settings.privacy.category.credential":`Credentials & connection strings`,"settings.privacy.enableCategory":`Enable`,"settings.privacy.customRules":`Custom rules`,"settings.privacy.noCustomRules":`No custom rules yet`,"settings.privacy.addRule":`Add rule`,"settings.privacy.ruleName":`Rule name`,"settings.privacy.rulePattern":`Regular expression`,"settings.privacy.rulePatternHint":`Matched against every string value in the request`,"settings.privacy.ruleTemplates":`Fill from template`,"settings.privacy.ruleTemplatesHint":`Pick a common template; name and pattern stay editable`,"settings.privacy.ruleTemplateNone":`Custom (enter manually)`,"settings.privacy.template.ipv4All":`All IPv4 addresses`,"settings.privacy.template.ipv4AllHint":`Includes public ranges; the built-in intranet rule covers private ranges only`,"settings.privacy.template.landline":`Landline numbers (China)`,"settings.privacy.template.licensePlate":`License plates (China)`,"settings.privacy.template.passportCn":`Passport numbers (China)`,"settings.privacy.template.uscc":`Unified social credit codes`,"settings.privacy.template.longToken":`Generic long tokens (32+ chars)`,"settings.privacy.template.longTokenHint":`Broad matches; pair with the "warn" action`,"settings.privacy.template.macAddress":`MAC addresses`,"settings.privacy.template.unixHome":`Unix / macOS home paths`,"settings.privacy.template.windowsProfile":`Windows profile paths`,"settings.privacy.template.unixHomeHint":`These paths expose the local username`,"settings.privacy.template.genericHint":`Adjust the expression as needed`,"settings.privacy.template.cloudAccessKey":`Cloud AccessKey IDs (Alibaba LTAI…, Tencent AKID…)`,"settings.privacy.template.awsSecretKey":`AWS secret access keys (40 chars)`,"settings.privacy.template.imWebhook":`IM bot webhooks (DingTalk / WeCom / Feishu / Slack)`,"settings.privacy.template.imWebhookHint":`A webhook URL is itself a credential — anyone holding it can post to the group`,"settings.privacy.template.internalService":`Internal service hosts (gitlab., jenkins., jira., …)`,"settings.privacy.template.jdbcConn":`JDBC connection strings with credentials`,"settings.privacy.template.jdbcHint":`Credentials inside connection strings are usually plain text`,"settings.privacy.template.smtpConn":`Mail server URLs with credentials (smtp://user:pass@…)`,"settings.privacy.template.keyFileRef":`Key file references (.pem / .key / .pfx / .jks)`,"settings.privacy.template.confidentialMarker":`Confidentiality markers (机密, Confidential, …)`,"settings.privacy.template.confidentialHint":`Warn or block on document classification markers`,"settings.privacy.template.employeeId":`Employee IDs (EMP-123456)`,"settings.privacy.template.labeledNumber":`Labeled numbers (contract / order / ticket numbers)`,"settings.privacy.invalidPattern":`Invalid regular expression`,"settings.privacy.deleteRuleConfirm":`Delete rule "{name}"?`,"settings.privacy.tester":`Dry run`,"settings.privacy.testerHint":`Check the text below against the current policy (no real request is affected)`,"settings.privacy.testerPlaceholder":`Paste request text or JSON…`,"settings.privacy.runTest":`Check`,"settings.privacy.noHits":`No rule matched`,"settings.privacy.wouldBlock":`Would block the request`,"settings.privacy.wouldRedact":`Would redact {count} place(s)`,"privacy.tab.overview":`Overview`,"privacy.tab.logs":`Interception log`,"privacy.tab.rules":`Detection rules`,"privacy.tab.tester":`Dry run`,"privacy.stats":`Guard statistics`,"privacy.stats.events":`Guard events`,"privacy.stats.blocked":`Blocked requests`,"privacy.stats.dryRun":`Detect-only requests`,"privacy.stats.redactions":`Redacted places`,"privacy.stats.byCategory":`Hits by category`,"privacy.stats.col.category":`Category`,"privacy.stats.col.requests":`Requests`,"privacy.stats.col.hits":`Hits`,"privacy.stats.col.warn":`Warn`,"privacy.stats.col.block":`Block`,"privacy.stats.col.redact":`Redact`,"privacy.logs.total":`{count} events`,"privacy.logs.empty":`No privacy events yet`,"privacy.logs.empty.detail":`Requests where the guard detected sensitive content show up here`,"privacy.logs.col.outcome":`Outcome`,"privacy.logs.col.action":`Hit action`,"privacy.logs.col.hits":`Hits`,"privacy.logs.outcome.blocked":`Blocked`,"privacy.logs.outcome.redacted":`{count} redacted`,"privacy.logs.outcome.dryRun":`Detect only`,"privacy.logs.blockedOnly":`Blocked only`,"privacy.logs.passedOnly":`Passed only`,"privacy.logs.moreHits":`+{count} more`,"privacy.logs.viewRequest":`View request {model}`,"settings.effort.low":`low`,"settings.effort.medium":`medium`,"settings.effort.high":`high`,"settings.about":`About`,"settings.serverVersion":`Server version`,"settings.desktopVersion":`Desktop version`,"settings.logs":`Open logs folder`,"settings.logout":`Sign out`,"settings.checkUpdates":`Check for updates`,"settings.upToDate":`Up to date`,"settings.updateAvailable":`Update {version} available`,"settings.updateCheckFailed":`Check failed: {error}`,"settings.updateApplyHint":`Install from the Astra tray menu, or run astra update in a terminal`,"settings.updateApply":`Update now`,"settings.updateApplied":`Server updated and restarted`,"settings.updateDesktopRelaunch":`The desktop app will relaunch to finish the update`,"settings.lastChecked":`Last checked: {time}`,"settings.autoCheck":`Check for updates automatically`,"settings.tab.general":`General`,"settings.tab.tray":`Tray panel`,"settings.tray.titleHeading":`Menu bar text`,"settings.tray.titleHint":`Shown next to the menu bar icon, visible without opening anything. On Windows and Linux it appears in the icon tooltip.`,"settings.tray.title.none":`Nothing`,"settings.tray.title.none.hint":`Icon only`,"settings.tray.title.requests":`Calls today`,"settings.tray.title.requests.hint":`e.g. 7`,"settings.tray.title.tokens":`Tokens today`,"settings.tray.title.tokens.hint":`e.g. 68.8K`,"settings.tray.title.cost":`Cost today`,"settings.tray.title.cost.hint":`e.g. $0.37`,"settings.tray.title.quota":`Subscription window`,"settings.tray.title.quota.hint":`The window with the least left, e.g. 64%`,"settings.tray.title.alerts":`Alerts only`,"settings.tray.title.alerts.hint":`Only on failed requests, low quota, or a stopped gateway`,"settings.tray.usageHeading":`Usage`,"settings.tray.clientsHeading":`Clients`,"settings.tray.section.overview":`Today at a glance`,"settings.tray.section.overview.hint":`Calls, tokens and failures`,"settings.tray.section.cost":`Estimated cost`,"settings.tray.section.cost.hint":`At official API prices; not a bill`,"settings.tray.section.chart":`Today's trend`,"settings.tray.section.chart.hint":`Calls per hour as bars`,"settings.tray.section.topModel":`Top model`,"settings.tray.section.topModel.hint":`The model with the largest share of today's tokens`,"settings.tray.section.compareYesterday":`Compare with yesterday`,"settings.tray.section.compareYesterday.hint":`Today's tokens against all of yesterday`,"settings.tray.section.cacheHitRate":`Cache hit rate`,"settings.tray.section.cacheHitRate.hint":`Cache reads as a share of input tokens`,"settings.tray.section.quota":`Quota & balance`,"settings.tray.section.quota.hint":`Window usage and reset times of Codex, Claude and other subscriptions, plus balances of API providers with the usage query on`,"settings.tray.section.clients":`Client providers`,"settings.tray.section.clients.hint":`The provider each enabled client uses; click to switch`,"settings.tray.previewHeading":`Panel preview`,"settings.tray.previewHint":`The panel that opens from the tray icon. Changes apply at once; the preview is what you get.`,"settings.tray.previewFooter":`Rendered with live data.`,"settings.tray.reset":`Restore defaults`,"tray.status.running":`Gateway running`,"tray.status.stopped":`Gateway not running`,"tray.status.starting":`Starting gateway…`,"tray.status.stopping":`Stopping gateway…`,"tray.status.restarting":`Restarting gateway…`,"tray.stoppedHint":`While the gateway is stopped, clients cannot reach models through Astra.`,"tray.mismatch":`API version mismatch`,"tray.update":`Update available`,"tray.copyAddress":`Copy gateway URL`,"tray.settings":`Tray panel settings`,"tray.more":`More actions`,"tray.today":`Today`,"tray.failures":`{count} failed`,"tray.justNow":`just now`,"tray.updated":`Updated {time}`,"tray.loadFailed":`Could not load usage`,"tray.requests":`calls`,"tray.tokens":`tokens`,"tray.cost":`Est. cost`,"tray.topModel":`Top model`,"tray.cacheHit":`Cache hits`,"tray.vsYesterday":`vs yesterday`,"tray.chartLabel":`Calls per hour today`,"tray.hourBar":`{hour} · {count} calls`,"tray.quota":`Quota & balance`,"tray.quotaRemaining":`Left`,"tray.quotaReset":`Resets`,"tray.quotaCredits":`Credits`,"tray.quotaPending":`Fetching quota…`,"tray.clients":`Clients`,"tray.unbound":`Not bound`,"tray.switchProvider":`Switch the provider of {client}`,"tray.disabledProvider":`{name} (disabled)`,"tray.restart":`Restart gateway`,"tray.stop":`Stop gateway`,"tray.quit":`Quit`,"tray.open":`Open Astra`,"tray.title.requests":`{count} calls today`,"tray.title.tokens":`{count} tokens today`,"tray.title.cost":`{amount} estimated today`,"tray.title.quota":`{plan} {window} window: {remaining} left`,"tray.title.failures":`{count} failed today`,"tray.tab.overview":`Overview`,"tray.tab.quota":`Quota`,"tray.alert.failures":`{count} failed · {share} of today`,"tray.alert.quota":`{plan} {window} window: only {remaining} left`,"tray.quotaTightest":`Quota · tightest`,"tray.viewAll":`View all`,"nav.plugins":`Plugins`,"providers.card.plugin":`Plugin sign-in`,"plugins.subtitle":`magpie-compatible plugins: provider plugins (OpenCode plugins, run in the Bun plugin host), gateway middleware and client (agent) plugins.`,"plugins.add":`Add plugin`,"plugins.updateAll":`Update all`,"plugins.tab.installed":`Installed`,"plugins.tab.market":`Market`,"plugins.tab.runtime":`Runtime`,"plugins.empty":`No plugins installed`,"plugins.emptyDetail":`Pick one in the Market, or add an npm package, a GitHub repository or a local folder.`,"plugins.orderHint":`The list order is the order gateway middleware runs in.`,"plugins.kind.provider":`Provider`,"plugins.kind.middleware":`Middleware`,"plugins.kind.agent":`Client`,"plugins.kind.pi":`pi extension`,"plugins.local":`Local`,"plugins.moveUp":`Move up`,"plugins.moveDown":`Move down`,"plugins.enabled":`Enabled`,"plugins.options":`Options`,"plugins.update":`Update`,"plugins.removeConfirm":`Remove plugin {name}?`,"plugins.removeDetail":`The plugin is uninstalled; a client it added gets its original configuration back first.`,"plugins.cantLoad":`The plugin can't load`,"plugins.hostCantLoad":`The plugin host couldn't load it`,"plugins.mw.error":`Middleware didn't load: {error}`,"plugins.mw.stats":`Middleware {hooks} · {calls} calls · {micros} µs avg · {failures} failures`,"plugins.mw.lastError":`Last failure: {error}`,"plugins.agent.adds":`Adds the client "{name}": enable it on the Clients page`,"plugins.agent.error":`The client didn't load: {error}`,"plugins.provides":`Signs in to: {providers}`,"plugins.servedBy":`{provider} is served by another plugin, {other}`,"plugins.useFor":`Use for {provider}`,"plugins.picked":`Picked to serve these providers.`,"plugins.optionsTitle":`Options of {name}`,"plugins.optionsExample":`Not set yet: this is the example the plugin gives.`,"plugins.optionsNone":`Not set. The plugin reads its options as a JSON object (ctx.options for middleware).`,"plugins.optionsClear":`Clear options`,"plugins.optionsSaved":`Options saved`,"plugins.optionsObject":`Options must be a JSON object`,"plugins.addTitle":`Add plugin`,"plugins.addDetail":`An npm package (optionally with a version), a git repository (github:owner/repo) or the absolute path to a file or folder.`,"plugins.spec":`Plugin`,"plugins.specHint":`e.g. @astragate-community/middleware-word-guard, github:someone/plugin, /Users/me/my-plugin`,"plugins.install":`Install`,"plugins.installed":`Installed`,"plugins.installConfirm":`Install {name}?`,"plugins.trustTitle":`Plugins run code with your permissions`,"plugins.trustDetail":`Provider plugins run with full permissions in the plugin host and see the requests that go through them; middleware can read and change every request and reply. Only install plugins you trust.`,"plugins.job.title":`Plugin task`,"plugins.job.running":`Working on {target}…`,"plugins.job.done":`{target} done`,"plugins.job.failed":`{target} failed`,"plugins.job.failedTitle":`It didn't finish`,"plugins.searchPlaceholder":`Search plugins on npm and GitHub…`,"plugins.searchResults":`Search results`,"plugins.noResults":`No plugins found`,"plugins.marketNote":`The market is the Astra site's registry (astra-gate.si): the community repository's plugins (astragate-community/astra-gate-plugins) plus those published there. Plugin packages are downloaded from the address the registry lists and checked against its hashes.`,"plugins.origin.astra":`Astra`,"plugins.minVersion":`Astra {version}+`,"plugins.linkInvalid":`The plugin named in that link isn't a package or a GitHub repository, so it was ignored.`,"plugins.bunDetail":`Provider plugins run on Bun. Astra downloads a pinned Bun the first time one is needed and checks its SHA-256; middleware and client plugins don't need Bun.`,"plugins.bunPath":`Location`,"plugins.bunMissing":`Not downloaded yet`,"plugins.bunVersion":`Version`,"plugins.bunTarget":`Build`,"plugins.bunNoBuild":`Bun has no build for this machine`,"plugins.bunFailed":`Downloading Bun failed`,"plugins.bunDownload":`Download Bun {version}`,"plugins.bunDownloading":`Downloading…`,"plugins.host":`Plugin host`,"plugins.hostDetail":`Provider plugins run in a separate Bun process (magpie's host.js), restarted when the plugins or the proxy change.`,"plugins.hostState":`State`,"plugins.hostRunning":`Running`,"plugins.hostStopped":`Not running (starts when needed)`,"plugins.hostStartFailed":`Failed to start`,"plugins.hostGone":`The host exited`,"plugins.hostPluginError":`Didn't load: {error}`,"pluginAccounts.noPlugin":`The plugin is unavailable`,"pluginAccounts.apiKey":`API key`,"pluginAccounts.browser":`Browser sign-in`,"pluginAccounts.empty":`No accounts signed in`,"pluginAccounts.emptyDetail":`Sign in with one of the methods above; the plugin keeps the sign-in.`,"pluginAccounts.current":`Current`,"pluginAccounts.active":`Usable`,"pluginAccounts.lapsed":`Sign in again`,"pluginAccounts.lapsedDetail":`The vendor refused this account's sign-in: sign in again.`,"pluginAccounts.usage":`Usage`,"pluginAccounts.signOut":`Sign out`,"pluginAccounts.signOutConfirm":`Sign {name} out?`,"pluginAccounts.plan":`Plan`,"pluginAccounts.until":`Until`,"pluginAccounts.resets":`resets {at}`,"pluginAccounts.signedIn":`Signed in`,"pluginAccounts.signInTitle":`Sign in to {name}`,"pluginAccounts.continue":`Continue`,"pluginAccounts.key":`Key`,"pluginAccounts.signIn":`Sign in`,"pluginAccounts.openPage":`Open the sign-in page`,"pluginAccounts.openAgain":`Open the sign-in page again`,"pluginAccounts.deviceCode":`Code to confirm`,"pluginAccounts.code":`The code the page shows`,"pluginAccounts.waiting":`Finish signing in in the browser; this continues on its own.`,"pluginAccounts.failed":`Sign-in failed`,"pluginAccounts.checkin":`Daily check-in`,"pluginAccounts.checkinOn":`Check in daily`,"pluginAccounts.checkinNow":`Check in now`,"pluginAccounts.checkinDetail":`The plugin checks each usable account in once a Beijing day; a failure is tried again after 30 minutes. Astra never solves captchas.`,"pluginAccounts.checkinNever":`Not checked in today`,"pluginAccounts.credit":`+{credit}`,"pluginAccounts.streak":`{days}-day streak`,"pluginAccounts.outcome.claimed":`Checked in`,"pluginAccounts.outcome.done":`Already in today`,"pluginAccounts.outcome.ineligible":`Not eligible`,"pluginAccounts.outcome.inactive":`No check-in running now`,"pluginAccounts.outcome.captcha":`Wants a captcha: check in in its own app`,"pluginAccounts.outcome.failed":`Failed`,"plugins.browseMarket":`Browse the market`,"plugins.off":`Plugins are switched off on the server`,"plugins.hostRecent":`Recent plugin messages`,"plugins.offDetail":`The server was started with ASTRA_PLUGINS=off: installed plugins don't run and none can be installed. Remove the variable and restart to bring them back.`,"plugins.bunReady":`Ready`,"plugins.kind.all":`All`,"plugins.kindFilter":`Filter by kind`,"plugins.magpie.banner":`magpie on this computer has {count} plugins Astra doesn't have yet.`,"plugins.magpie.import":`Import from magpie`,"plugins.magpie.off":`Off`,"plugins.magpie.signIns":`Also copy {count} sign-ins`,"plugins.magpie.title":`Import plugins from magpie`,"plugins.magpie.signInsDetail":`Copies the plugin sign-ins in magpie's plugin-auth.json into Astra's (both keep them as plain text); an account Astra already has under the same key is kept, and magpie's file isn't changed.`,"plugins.openProviders":`Sign in under Providers`,"plugins.searchNote":`Search results come from the market's own entries, npm and GitHub's magpie-plugin topic. The last two aren't reviewed: check where a plugin comes from before installing it.`,"settings.tab.remote":`Remote access`,"settings.remote.status":`Status`,"settings.remote.statusFooter":`Opens the gateway to the internet through a Cloudflare Tunnel — no public IP or port forwarding needed. Astra downloads cloudflared the first time and runs it for you.`,"settings.remote.enable":`Remote access`,"settings.remote.state.off":`Off`,"settings.remote.state.downloading":`Downloading cloudflared…`,"settings.remote.state.starting":`Connecting to Cloudflare…`,"settings.remote.state.connected":`Connected`,"settings.remote.state.reconnecting":`Connection lost, reconnecting…`,"settings.remote.connectedSince":`Connected {time}`,"settings.remote.publicUrl":`Remote gateway URL`,"settings.remote.publicUrlHint":`Use this address with an Astra token in clients on other devices.`,"settings.remote.openPage":`Open in browser`,"settings.remote.download":`Download`,"settings.remote.enableConfirm":`Turn on remote access?`,"settings.remote.enableDetail":`Anyone with the address can reach your gateway (calls still need an Astra token). Share the address and tokens only with people you trust.`,"settings.remote.enableAction":`Turn on`,"settings.remote.disableSelfConfirm":`Turn off remote access?`,"settings.remote.disableSelfDetail":`You are using this page through the remote address. Turning it off disconnects you at once; it can only be turned on again on this computer.`,"settings.remote.disableAction":`Turn off`,"settings.remote.cloudflaredMissing":`Downloads {version} the first time (about 20–55 MB)`,"settings.remote.cloudflaredUnsupported":`There is no cloudflared build for this machine`,"settings.remote.password":`Admin password`,"settings.remote.passwordSet":`Set`,"settings.remote.passwordMissing":`Not set · only needed to open the admin UI remotely`,"settings.remote.passwordChange":`Change`,"settings.remote.passwordSetAction":`Set password`,"settings.remote.passwordNew":`New password (8+ characters)`,"settings.remote.passwordSaved":`Admin password saved`,"settings.remote.block.token":`A named tunnel needs its tunnel token.`,"settings.remote.block.hostname":`A named tunnel needs its public hostname.`,"settings.remote.block.password":`Set an admin password before opening the admin UI remotely.`,"settings.remote.mode":`Connection`,"settings.remote.modeLabel":`Tunnel type`,"settings.remote.mode.quick":`Temporary address`,"settings.remote.mode.named":`Your domain`,"settings.remote.mode.quick.hint":`No Cloudflare account; you get a *.trycloudflare.com address`,"settings.remote.mode.named.hint":`A tunnel you created in Cloudflare, on your own domain`,"settings.remote.quickWarning":`Temporary addresses don't carry streamed responses (SSE), so most coding clients won't work through them; the address changes on every start and has no uptime guarantee. Use it to try things out; for regular use pick your own domain.`,"settings.remote.token":`Tunnel token`,"settings.remote.tokenHint":`The value after --token in the install command`,"settings.remote.tokenSaved":`Saved; leave blank to keep it`,"settings.remote.hostname":`Public hostname`,"settings.remote.hostnameHint":`The hostname set up under the tunnel's public hostnames`,"settings.remote.origin":`Service URL`,"settings.remote.originHint":`Point the public hostname's service here`,"settings.remote.namedFooter":`Create a tunnel under Cloudflare Zero Trust → Networks → Tunnels and copy the token from its install command; then add a public hostname to the tunnel with its service pointing at the service URL above. Update it if the server port changes.`,"settings.remote.saved":`Remote access settings saved`,"settings.remote.guide":`Setup guide`,"settings.remote.scope":`What remote access reaches`,"settings.remote.scopeFooter":`Requests forwarded by Cloudflare are recognised as remote: the local "require token" switch never applies to them.`,"settings.remote.scope.gateway":`Gateway API`,"settings.remote.scope.gatewayHint":`/v1, /v1beta and the token self-service page /key`,"settings.remote.scope.gatewayBadge":`Token always required`,"settings.remote.scope.admin":`Admin UI`,"settings.remote.scope.adminHint":`Needs the admin password; failed sign-ins are rate-limited`,"settings.remote.adminConfirm":`Allow remote admin sign-in?`,"settings.remote.adminDetail":`Anyone with the address and the admin password can change every setting, provider and plugin. Make sure the password is strong.`,"settings.remote.adminAction":`Allow`,"settings.remote.log":`Output`,"settings.remote.logEmpty":`No output yet`,"settings.remote.unsupported":`Remote access isn't managed inside a container`,"settings.remote.unsupportedDetail":`With Docker, run cloudflared as a sidecar container and set an admin password. See "Docker" in the docs.`,"shell.remoteOn":`Remote access on`,"login.remoteBlocked":`Remote admin is off`,"login.remoteBlockedDetail":`This address only serves the gateway API. To manage Astra remotely, turn on "Admin UI" under Settings → Remote access on the computer running it.`,"settings.remote.connectedJustNow":`Connected just now`,"settings.remote.connectedFor":`Connected for {duration}`,"settings.remote.copyMenu":`Copy address`,"settings.remote.copy.openai":`OpenAI / Gemini base URL (with /v1)`,"settings.remote.copy.anthropic":`Anthropic base URL (no /v1, for Claude Code and others)`,"settings.remote.copy.key":`Token self-service page (/key)`,"settings.remote.logWithVersion":`Output · cloudflared {version}`,"settings.remote.err.token":`The tunnel token was rejected; copy it again from the Cloudflare dashboard.`,"settings.remote.err.tokenLost":`The saved tunnel token can no longer be read (the data directory's keys changed); enter it again.`,"settings.remote.err.network":`Can't reach Cloudflare; check the network or proxy (cloudflared needs Cloudflare's port 7844).`,"settings.remote.err.rate":`Cloudflare is not handing out temporary addresses right now (too many requests); it will retry shortly.`,"settings.remote.err.download":`Downloading cloudflared failed. Pick another download source under cloudflared below, or use an installed cloudflared.`,"settings.remote.err.generic":`Connection failed; retrying`,"settings.remote.err.origin":`Cloudflare can't reach Astra: make sure the service URL in the Cloudflare dashboard is {origin}.`,"settings.remote.modeSwitchConfirm":`Switch the connection?`,"settings.remote.modeSwitchDetail":`The tunnel reconnects and connections through the remote address drop; a temporary address changes every time.`,"settings.remote.modeSwitchStopDetail":`Your domain has no tunnel token or hostname yet, so switching turns remote access off.`,"settings.remote.modeSwitchAction":`Switch`,"settings.remote.savedRestart":`Saved; the tunnel is reconnecting`,"settings.remote.adminOffSelfConfirm":`Turn off remote admin?`,"settings.remote.adminOffSelfDetail":`You are using the admin UI through the remote address. Turning it off locks you out at once; it can only be turned on again on this computer.`,"tokens.remoteHint":`Remote access is on: other devices use {url}; token holders can open {key} for their limits and usage.`,"requests.col.origin":`Origin`,"requests.allOrigins":`All origins`,"requests.origin.remote":`Remote`,"requests.origin.local":`Local`,"requests.origin.remoteFrom":`Remote · {ip}`,"settings.remote.state.downloadingFrom":`Downloading cloudflared from {source}…`,"settings.remote.cf.footer":`Whatever the source, the file is checked against pinned SHA-256 checksums, so the source itself needn't be trusted.`,"settings.remote.cf.program":`Program`,"settings.remote.cf.downloaded":`Downloaded · {version}`,"settings.remote.cf.notDownloaded":`Downloads {version} the first time`,"settings.remote.cf.installedProgram":`Installed · {version}`,"settings.remote.cf.installedUnknown":`Installed · unknown version`,"settings.remote.cf.fromEnv":`Chosen by ASTRA_CLOUDFLARED; the settings below have no effect`,"settings.remote.cf.source":`Download source`,"settings.remote.cf.source.auto":`Automatic`,"settings.remote.cf.source.github":`GitHub`,"settings.remote.cf.source.astra":`Astra site mirror`,"settings.remote.cf.source.custom":`Custom address`,"settings.remote.cf.source.auto.hint":`GitHub first; the Astra site's mirror when it fails or stalls`,"settings.remote.cf.source.github.hint":`Only GitHub Releases`,"settings.remote.cf.source.astra.hint":`From astra-gate.si; often faster where GitHub is slow`,"settings.remote.cf.source.custom.hint":`From an address you choose, such as a GitHub proxy`,"settings.remote.cf.baseUrl":`Download address`,"settings.remote.cf.baseUrlHint":`Fetched as address/version/file, the same layout as GitHub Releases`,"settings.remote.cf.installed":`Installed cloudflared`,"settings.remote.cf.installedHint":`Run the cloudflared already on this computer instead of downloading one`,"settings.remote.cf.installedPath":`Path to cloudflared`,"settings.remote.cf.choose":`Use installed`,"settings.remote.cf.detect":`Find it`,"settings.remote.cf.detectNone":`No cloudflared on PATH`,"settings.remote.cf.use":`Use`,"settings.remote.cf.useDownloaded":`Use the downloaded one`,"settings.remote.cf.saved":`cloudflared settings saved`},l_=`astra.locale`,u_={zh:s_,en:c_};function d_(){try{let e=localStorage.getItem(l_);if(e===`zh`||e===`en`)return e}catch{}return(globalThis.navigator?.language??`zh`).toLowerCase().startsWith(`zh`)?`zh`:`en`}function f_(e,t){return t?e.replace(/\{(\w+)\}/g,(e,n)=>n in t?String(t[n]):e):e}function p_(e,t,n){return f_(u_[e][t]??u_.zh[t]??t,n)}var m_=(0,m.createContext)(null);function h_({children:e}){let[t,n]=(0,m.useState)(d_),r=(0,m.useCallback)(e=>{n(e),document.documentElement.lang=e===`zh`?`zh-CN`:`en`;try{localStorage.setItem(l_,e)}catch{}},[]),i=(0,m.useMemo)(()=>({locale:t,setLocale:r,t:(e,n)=>p_(t,e,n)}),[t,r]);return(0,h.jsx)(m_.Provider,{value:i,children:e})}function g_(){let e=(0,m.useContext)(m_);if(!e)throw Error(`useI18n outside I18nProvider`);return e}function __(){return g_().t}function v_(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;t<i;t++)e[t]&&(n=v_(e[t]))&&(r&&(r+=` `),r+=n)}else for(n in e)e[n]&&(r&&(r+=` `),r+=n)}return r}function y_(){for(var e,t,n=0,r=``,i=arguments.length;n<i;n++)(e=arguments[n])&&(t=v_(e))&&(r&&(r+=` `),r+=t);return r}function b_(...e){return y_(e)}var x_=1e9;function S_(e){return e/x_}function C_(e,t={}){if(e==null||Number.isNaN(e))return`—`;let n=Math.abs(e);return n===0?`$0`:t.compact&&n>=1e3?`$${new Intl.NumberFormat(`en-US`,{notation:`compact`,maximumFractionDigits:1}).format(e)}`:n>=1?`$${new Intl.NumberFormat(`en-US`,{minimumFractionDigits:2,maximumFractionDigits:2}).format(e)}`:`$${new Intl.NumberFormat(`en-US`,{maximumSignificantDigits:3,maximumFractionDigits:10}).format(e)}`}function w_(e){return e===0?`$0`:Math.abs(e)>=1e3?C_(e,{compact:!0}):`$${new Intl.NumberFormat(`en-US`,{maximumSignificantDigits:2,maximumFractionDigits:10}).format(e)}`}function T_(e){return e==null?`—`:C_(S_(e))}function E_(e){if(e==null||e===``)return`—`;let t=typeof e==`string`?Number(e):e;return Number.isNaN(t)?String(e):`$${Number(t.toPrecision(8))}`}function D_(e,t=!1){return e==null?`—`:t&&Math.abs(e)>=1e4?new Intl.NumberFormat(`en-US`,{notation:`compact`,maximumFractionDigits:1}).format(e):new Intl.NumberFormat(`en-US`).format(e)}function O_(e){return e==null?`—`:e>=1e4?`${(e/1e3).toFixed(1)} s`:`${Math.round(e)} ms`}function k_(e){return e==null||!Number.isFinite(e)||e<0?`—`:`${e.toFixed(1)} tok/s`}function A_(e){return e==null||Number.isNaN(e)?`—`:`${(e*100).toFixed(e>=.999||e===0?0:1)}%`}function j_(e){return e?e>=1e6?`${Number((e/1e6).toFixed(2))}M`:e>=1e3?`${Math.round(e/1e3)}K`:String(e):`—`}function M_(e,t){let n=new Date(e),r=new Date,i=n.toDateString()===r.toDateString();return new Intl.DateTimeFormat(t===`zh`?`zh-CN`:`en-US`,{...i?{second:`2-digit`}:{month:`2-digit`,day:`2-digit`},hour:`2-digit`,minute:`2-digit`,hour12:!1}).format(n)}function N_(e,t){let n=Math.max(1,Math.floor(e/6e4)),[r,i]=n<120?[n,`minute`]:n<2880?[Math.floor(n/60),`hour`]:[Math.floor(n/1440),`day`];return new Intl.NumberFormat(t===`zh`?`zh-CN`:`en-US`,{style:`unit`,unit:i,unitDisplay:`long`}).format(r)}function P_(e,t){return e?new Intl.DateTimeFormat(t===`zh`?`zh-CN`:`en-US`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,hour12:!1}).format(new Date(e)):`—`}var F_=e=>e===`zh`?`zh-CN`:`en-US`;function I_(e){let[t,n,r]=e.split(`-`).map(Number);return new Date(t,n-1,r)}function L_(e,t,n,r,i){return`${new Intl.DateTimeFormat(F_(n),{weekday:`short`,month:`short`,day:`numeric`,year:`numeric`}).format(I_(e))} · ${t>0?`${t} ${r}`:i}`}var R_=(e,t)=>new Intl.DateTimeFormat(F_(t),{month:`short`}).format(new Date(2026,e-1,1)),z_=(e,t,n)=>new Intl.DateTimeFormat(F_(n),{month:`short`,year:`numeric`}).format(new Date(t,e-1,1)),B_=(e,t)=>new Intl.DateTimeFormat(F_(t),{weekday:`short`}).format(new Date(2026,7,3+e));function V_(e){if(!e?.base)return`—`;let t=e.base.input,n=e.base.output;return t==null&&n==null?`—`:`${E_(t)} / ${E_(n)}`}function H_(e){if(e==null)return``;if(typeof e==`string`)try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}return JSON.stringify(e,null,2)}var U_=Object.defineProperty,Y=(e,t)=>U_(e,`name`,{value:t,configurable:!0});function W_(e,t){let n=m.createContext(t);n.displayName=e+`Context`;let r=Y(e=>{let{children:t,...r}=e,i=m.useMemo(()=>r,Object.values(r));return(0,h.jsx)(n.Provider,{value:i,children:t})},`Provider`);r.displayName=e+`Provider`;function i(r,i={}){let{optional:a=!1}=i,o=m.useContext(n);if(o)return o;if(t!==void 0)return t;if(!a)throw Error(`\`${r}\` must be used within \`${e}\``)}return Y(i,`useContext`),[r,i]}Y(W_,`createContext`);function G_(e,t=[]){let n=[];function r(t,r){let i=m.createContext(r);i.displayName=t+`Context`;let a=n.length;n=[...n,r];let o=Y(t=>{let{scope:n,children:r,...o}=t,s=n?.[e]?.[a]||i,c=m.useMemo(()=>o,Object.values(o));return(0,h.jsx)(s.Provider,{value:c,children:r})},`Provider`);o.displayName=t+`Provider`;function s(n,o,s={}){let{optional:c=!1}=s,l=o?.[e]?.[a]||i,u=m.useContext(l);if(u)return u;if(r!==void 0)return r;if(!c)throw Error(`\`${n}\` must be used within \`${t}\``)}return Y(s,`useContext`),[o,s]}Y(r,`createContext`);let i=Y(()=>{let t=n.map(e=>m.createContext(e));return Y(function(n){let r=n?.[e]||t;return m.useMemo(()=>({[`__scope${e}`]:{...n,[e]:r}}),[n,r])},`useScope`)},`createScope`);return i.scopeName=e,[r,K_(i,...t)]}Y(G_,`createContextScope`);function K_(...e){let t=e[0];if(e.length===1)return t;let n=Y(()=>{let n=e.map(e=>({useScope:e(),scopeName:e.scopeName}));return Y(function(e){let r=n.reduce((t,{useScope:n,scopeName:r})=>{let i=n(e)[`__scope${r}`];return{...t,...i}},{});return m.useMemo(()=>({[`__scope${t.scopeName}`]:r}),[r])},`useComposedScopes`)},`createScope`);return n.scopeName=t.scopeName,n}Y(K_,`composeContextScopes`);var q_=Object.defineProperty,J_=(e,t)=>q_(e,`name`,{value:t,configurable:!0});function Y_(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}J_(Y_,`setRef`);function X_(...e){return t=>{let n=!1,r=e.map(e=>{let r=Y_(e,t);return!n&&typeof r==`function`&&(n=!0),r});if(n)return()=>{for(let t=0;t<r.length;t++){let n=r[t];typeof n==`function`?n():Y_(e[t],null)}}}}J_(X_,`composeRefs`);function Z_(...e){return m.useCallback(X_(...e),e)}J_(Z_,`useComposedRefs`);var Q_=Object.defineProperty,$_=(e,t)=>Q_(e,`name`,{value:t,configurable:!0});function ev(e){let t=m.forwardRef((t,n)=>{let{children:r,...i}=t,a=null,o=!1,s=[];cv(r)&&typeof pv==`function`&&(r=pv(r._payload)),m.Children.forEach(r,e=>{if(ov(e)){o=!0;let t=e,n=`child`in t.props?t.props.child:t.props.children;cv(n)&&typeof pv==`function`&&(n=pv(n._payload)),a=rv(t,n),s.push(a?.props?.children)}else s.push(e)}),a?a=m.cloneElement(a,void 0,s):!o&&m.Children.count(r)===1&&m.isValidElement(r)&&(a=r);let c=a?av(a):void 0,l=Z_(n,c);if(!a){if(r||r===0)throw Error(o?fv(e):dv(e));return r}let u=iv(i,a.props??{});return a.type!==m.Fragment&&(u.ref=n?l:c),m.cloneElement(a,u)});return t.displayName=`${e}.Slot`,t}$_(ev,`createSlot`);var tv=Symbol.for(`radix.slottable`);function nv(e){let t=$_(e=>`child`in e?e.children(e.child):e.children,`Slottable`);return t.displayName=`${e}.Slottable`,t.__radixId=tv,t}$_(nv,`createSlottable`);var rv=$_((e,t)=>{if(`child`in e.props){let t=e.props.child;return m.isValidElement(t)?m.cloneElement(t,void 0,e.props.children(t.props.children)):null}return m.isValidElement(t)?t:null},`getSlottableElementFromSlottable`);function iv(e,t){let n={...t};for(let r in t){let i=e[r],a=t[r];/^on[A-Z]/.test(r)?i&&a?n[r]=(...e)=>{let t=a(...e);return i(...e),t}:i&&(n[r]=i):r===`style`?n[r]={...i,...a}:r===`className`?n[r]=[i,a].filter(Boolean).join(` `):r===`aria-describedby`&&(n[r]=uv(a,i))}return{...e,...n}}$_(iv,`mergeProps`);function av(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}$_(av,`getElementRef`);function ov(e){return m.isValidElement(e)&&typeof e.type==`function`&&`__radixId`in e.type&&e.type.__radixId===tv}$_(ov,`isSlottable`);var sv=Symbol.for(`react.lazy`);function cv(e){return typeof e==`object`&&!!e&&`$$typeof`in e&&e.$$typeof===sv&&`_payload`in e&&lv(e._payload)}$_(cv,`isLazyComponent`);function lv(e){return typeof e==`object`&&!!e&&`then`in e}$_(lv,`isPromiseLike`);function uv(...e){let t=new Set;for(let n of e)if(typeof n==`string`)for(let e of String(n).trim().split(/\s+/))e&&t.add(e);return t.size>0?Array.from(t).join(` `):void 0}$_(uv,`concatAriaDescribedby`);var dv=$_(e=>`${e} failed to slot onto its children. Expected a single React element child or \`Slottable\`.`,`createSlotError`),fv=$_(e=>`${e} failed to slot onto its \`Slottable\`. Expected \`Slottable\` to receive a single React element child.`,`createSlottableError`),pv=m.use,mv=Object.defineProperty,X=(e,t)=>mv(e,`name`,{value:t,configurable:!0});function hv(e){let t=e+`CollectionProvider`,[n,r]=G_(t),[i,a]=n(t,{collectionRef:{current:null},itemMap:new Map}),o=X(e=>{let{scope:t,children:n}=e,r=m.useRef(null),a=m.useRef(new Map).current;return(0,h.jsx)(i,{scope:t,itemMap:a,collectionRef:r,children:n})},`CollectionProvider`);o.displayName=t;let s=e+`CollectionSlot`,c=ev(s),l=m.forwardRef((e,t)=>{let{scope:n,children:r}=e,i=Z_(t,a(s,n).collectionRef);return(0,h.jsx)(c,{ref:i,children:r})});l.displayName=s;let u=e+`CollectionItemSlot`,d=`data-radix-collection-item`,f=ev(u),p=m.forwardRef((e,t)=>{let{scope:n,children:r,...i}=e,o=m.useRef(null),s=Z_(t,o),c=a(u,n);return m.useEffect(()=>(c.itemMap.set(o,{ref:o,...i}),()=>void c.itemMap.delete(o))),(0,h.jsx)(f,{[d]:``,ref:s,children:r})});p.displayName=u;function g(t){let n=a(e+`CollectionConsumer`,t);return m.useCallback(()=>{let e=n.collectionRef.current;if(!e)return[];let t=Array.from(e.querySelectorAll(`[${d}]`));return Array.from(n.itemMap.values()).sort((e,n)=>t.indexOf(e.ref.current)-t.indexOf(n.ref.current))},[n.collectionRef,n.itemMap])}return X(g,`useCollection`),[{Provider:o,Slot:l,ItemSlot:p},g,r]}X(hv,`createCollection`);var gv=new WeakMap,_v=class e extends Map{static{X(this,`OrderedDict`)}#e;constructor(e){super(e),this.#e=[...super.keys()],gv.set(this,!0)}set(e,t){return gv.get(this)&&(this.has(e)?this.#e[this.#e.indexOf(e)]=e:this.#e.push(e)),super.set(e,t),this}insert(e,t,n){let r=this.has(t),i=this.#e.length,a=bv(e),o=a>=0?a:i+a,s=o<0||o>=i?-1:o;if(s===this.size||r&&s===this.size-1||s===-1)return this.set(t,n),this;let c=this.size+ +!r;a<0&&o++;let l=[...this.#e],u,d=!1;for(let e=o;e<c;e++)if(o===e){let i=l[e];l[e]===t&&(i=l[e+1]),r&&this.delete(t),u=this.get(i),this.set(t,n)}else{!d&&l[e-1]===t&&(d=!0);let n=l[d?e:e-1],r=u;u=this.get(n),this.delete(n),this.set(n,r)}return this}with(t,n,r){let i=new e(this);return i.insert(t,n,r),i}before(e){let t=this.#e.indexOf(e)-1;if(!(t<0))return this.entryAt(t)}setBefore(e,t,n){let r=this.#e.indexOf(e);return r===-1?this:this.insert(r,t,n)}after(e){let t=this.#e.indexOf(e);if(t=t===-1||t===this.size-1?-1:t+1,t!==-1)return this.entryAt(t)}setAfter(e,t,n){let r=this.#e.indexOf(e);return r===-1?this:this.insert(r+1,t,n)}first(){return this.entryAt(0)}last(){return this.entryAt(-1)}clear(){return this.#e=[],super.clear()}delete(e){let t=super.delete(e);return t&&this.#e.splice(this.#e.indexOf(e),1),t}deleteAt(e){let t=this.keyAt(e);return t!==void 0&&this.delete(t)}at(e){let t=vv(this.#e,e);if(t!==void 0)return this.get(t)}entryAt(e){let t=vv(this.#e,e);if(t!==void 0)return[t,this.get(t)]}indexOf(e){return this.#e.indexOf(e)}keyAt(e){return vv(this.#e,e)}from(e,t){let n=this.indexOf(e);if(n===-1)return;let r=n+t;return r<0&&(r=0),r>=this.size&&(r=this.size-1),this.at(r)}keyFrom(e,t){let n=this.indexOf(e);if(n===-1)return;let r=n+t;return r<0&&(r=0),r>=this.size&&(r=this.size-1),this.keyAt(r)}find(e,t){let n=0;for(let r of this){if(Reflect.apply(e,t,[r,n,this]))return r;n++}}findIndex(e,t){let n=0;for(let r of this){if(Reflect.apply(e,t,[r,n,this]))return n;n++}return-1}filter(t,n){let r=[],i=0;for(let e of this)Reflect.apply(t,n,[e,i,this])&&r.push(e),i++;return new e(r)}map(t,n){let r=[],i=0;for(let e of this)r.push([e[0],Reflect.apply(t,n,[e,i,this])]),i++;return new e(r)}reduce(...e){let[t,n]=e,r=0,i=n??this.at(0);for(let n of this)i=r===0&&e.length===1?n:Reflect.apply(t,this,[i,n,r,this]),r++;return i}reduceRight(...e){let[t,n]=e,r=n??this.at(-1);for(let n=this.size-1;n>=0;n--){let i=this.at(n);r=n===this.size-1&&e.length===1?i:Reflect.apply(t,this,[r,i,n,this])}return r}toSorted(t){let n=[...this.entries()].sort(t);return new e(n)}toReversed(){let t=new e;for(let e=this.size-1;e>=0;e--){let n=this.keyAt(e),r=this.get(n);t.set(n,r)}return t}toSpliced(...t){let n=[...this.entries()];return n.splice(...t),new e(n)}slice(t,n){let r=new e,i=this.size-1;if(t===void 0)return r;t<0&&(t+=this.size),n!==void 0&&n>0&&(i=n-1);for(let e=t;e<=i;e++){let t=this.keyAt(e),n=this.get(t);r.set(t,n)}return r}every(e,t){let n=0;for(let r of this){if(!Reflect.apply(e,t,[r,n,this]))return!1;n++}return!0}some(e,t){let n=0;for(let r of this){if(Reflect.apply(e,t,[r,n,this]))return!0;n++}return!1}};function vv(e,t){if(`at`in Array.prototype)return Array.prototype.at.call(e,t);let n=yv(e,t);return n===-1?void 0:e[n]}X(vv,`at`);function yv(e,t){let n=e.length,r=bv(t),i=r>=0?r:n+r;return i<0||i>=n?-1:i}X(yv,`toSafeIndex`);function bv(e){return e!==e||e===0?0:Math.trunc(e)}X(bv,`toSafeInteger`);function xv(e){let t=e+`CollectionProvider`,[n,r]=G_(t),[i,a]=n(t,{collectionElement:null,collectionRef:{current:null},collectionRefObject:{current:null},itemMap:new _v,setItemMap:X(()=>void 0,`setItemMap`)}),o=X(({state:e,...t})=>e?(0,h.jsx)(c,{...t,state:e}):(0,h.jsx)(s,{...t}),`CollectionProvider`);o.displayName=t;let s=X(e=>{let t=_();return(0,h.jsx)(c,{...e,state:t})},`CollectionInit`);s.displayName=t+`Init`;let c=X(e=>{let{scope:t,children:n,state:r}=e,a=m.useRef(null),[o,s]=m.useState(null),c=Z_(a,s),[l,u]=r;return m.useEffect(()=>{if(!o)return;let e=Tv(()=>{});return e.observe(o,{childList:!0,subtree:!0}),()=>{e.disconnect()}},[o]),(0,h.jsx)(i,{scope:t,itemMap:l,setItemMap:u,collectionRef:c,collectionRefObject:a,collectionElement:o,children:n})},`CollectionProviderImpl`);c.displayName=t+`Impl`;let l=e+`CollectionSlot`,u=ev(l),d=m.forwardRef((e,t)=>{let{scope:n,children:r}=e,i=Z_(t,a(l,n).collectionRef);return(0,h.jsx)(u,{ref:i,children:r})});d.displayName=l;let f=e+`CollectionItemSlot`,p=ev(f),g=m.forwardRef((e,t)=>{let{scope:n,children:r,...i}=e,o=m.useRef(null),[s,c]=m.useState(null),l=Z_(t,o,c),{setItemMap:u}=a(f,n),d=m.useRef(i);Sv(d.current,i)||(d.current=i);let g=d.current;return m.useEffect(()=>{let e=g;return u(t=>s?t.has(s)?t.set(s,{...e,element:s}).toSorted(wv):(t.set(s,{...e,element:s}),t.toSorted(wv)):t),()=>{u(e=>!s||!e.has(s)?e:(e.delete(s),new _v(e)))}},[s,g,u]),(0,h.jsx)(p,{"data-radix-collection-item":``,ref:l,children:r})});g.displayName=f;function _(){return m.useState(new _v)}X(_,`useInitCollection`);function v(t){let{itemMap:n}=a(e+`CollectionConsumer`,t);return n}return X(v,`useCollection`),[{Provider:o,Slot:d,ItemSlot:g},{createCollectionScope:r,useCollection:v,useInitCollection:_}]}X(xv,`createCollection`);function Sv(e,t){if(e===t)return!0;if(typeof e!=`object`||typeof t!=`object`||e==null||t==null)return!1;let n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let r of n)if(!Object.prototype.hasOwnProperty.call(t,r)||e[r]!==t[r])return!1;return!0}X(Sv,`shallowEqual`);function Cv(e,t){return!!(t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_PRECEDING)}X(Cv,`isElementPreceding`);function wv(e,t){return!e[1].element||!t[1].element?0:Cv(e[1].element,t[1].element)?-1:1}X(wv,`sortByDocumentPosition`);function Tv(e){return new MutationObserver(t=>{for(let n of t)if(n.type===`childList`){e();return}})}X(Tv,`getChildListObserver`);var Ev=Object.defineProperty,Dv=(e,t)=>Ev(e,`name`,{value:t,configurable:!0}),Ov=!!(typeof window<`u`&&window.document&&window.document.createElement);function kv(e,t,{checkForDefaultPrevented:n=!0}={}){return Dv(function(r){if(e?.(r),n===!1||!r||!r.defaultPrevented)return t?.(r)},`handleEvent`)}Dv(kv,`composeEventHandlers`);function Av(e){if(!Ov)throw Error(`Cannot access window outside of the DOM`);return e?.ownerDocument?.defaultView??window}Dv(Av,`getOwnerWindow`);function jv(e){if(!Ov)throw Error(`Cannot access document outside of the DOM`);return e?.ownerDocument??document}Dv(jv,`getOwnerDocument`);function Mv(e,t=!1){let{activeElement:n}=jv(e);if(!n?.nodeName)return null;if(Nv(n)&&n.contentDocument)return Mv(n.contentDocument.body,t);if(t){let e=n.getAttribute(`aria-activedescendant`);if(e){let t=jv(n).getElementById(e);if(t)return t}}return n}Dv(Mv,`getActiveElement`);function Nv(e){return e.tagName===`IFRAME`}Dv(Nv,`isFrame`);var Pv=globalThis?.document?m.useLayoutEffect:()=>{},Fv=Object.defineProperty,Iv=(e,t)=>Fv(e,`name`,{value:t,configurable:!0}),Lv=m.useEffectEvent,Rv=m.useInsertionEffect;function zv(e){if(typeof Lv==`function`)return Lv(e);let t=m.useRef(()=>{throw Error(`Cannot call an event handler while rendering.`)});return typeof Rv==`function`?Rv(()=>{t.current=e}):Pv(()=>{t.current=e}),m.useMemo(()=>((...e)=>t.current?.(...e)),[])}Iv(zv,`useEffectEvent`);var Bv=Object.defineProperty,Vv=(e,t)=>Bv(e,`name`,{value:t,configurable:!0}),Hv=m.useInsertionEffect||Pv;function Uv({prop:e,defaultProp:t,onChange:n=Vv(()=>{},`onChange`),caller:r}){let[i,a,o]=Wv({defaultProp:t,onChange:n}),s=e!==void 0;return[s?e:i,m.useCallback(t=>{if(s){let n=Gv(t)?t(e):t;n!==e&&o.current?.(n)}else a(t)},[s,e,a,o])]}Vv(Uv,`useControllableState`);function Wv({defaultProp:e,onChange:t}){let[n,r]=m.useState(e),i=m.useRef(n),a=m.useRef(t);return Hv(()=>{a.current=t},[t]),m.useEffect(()=>{i.current!==n&&(a.current?.(n),i.current=n)},[n,i]),[n,r,a]}Vv(Wv,`useUncontrolledState`);function Gv(e){return typeof e==`function`}Vv(Gv,`isFunction`);var Kv=Symbol(`RADIX:SYNC_STATE`);function qv(e,t,n,r){let{prop:i,defaultProp:a,onChange:o,caller:s}=t,c=i!==void 0,l=zv(o),u=[{...n,state:a}];r&&u.push(r);let[d,f]=m.useReducer((t,n)=>{if(n.type===Kv)return{...t,state:n.state};let r=e(t,n);return c&&!Object.is(r.state,t.state)&&l(r.state),r},...u),p=d.state,h=m.useRef(p);m.useEffect(()=>{h.current!==p&&(h.current=p,c||l(p))},[p,h,c]);let g=m.useMemo(()=>i===void 0?d:{...d,state:i},[d,i]);return m.useEffect(()=>{c&&!Object.is(i,d.state)&&f({type:Kv,state:i})},[i,d.state,c]),[g,f]}Vv(qv,`useControllableStateReducer`);var Jv=l(op(),1),Yv=Object.defineProperty,Xv=(e,t)=>Yv(e,`name`,{value:t,configurable:!0}),Zv=[`a`,`button`,`div`,`form`,`h2`,`h3`,`img`,`input`,`label`,`li`,`nav`,`ol`,`p`,`select`,`span`,`svg`,`ul`].reduce((e,t)=>{let n=ev(`Primitive.${t}`),r=m.forwardRef((e,r)=>{let{asChild:i,...a}=e,o=i?n:t;return typeof window<`u`&&(window[Symbol.for(`radix-ui`)]=!0),(0,h.jsx)(o,{...a,ref:r})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function Qv(e,t){e&&Jv.flushSync(()=>e.dispatchEvent(t))}Xv(Qv,`dispatchDiscreteCustomEvent`);var $v=Object.defineProperty,ey=(e,t)=>$v(e,`name`,{value:t,configurable:!0});function ty(e,t){return m.useReducer((e,n)=>t[e][n]??e,e)}ey(ty,`useStateMachine`);var ny=ey(e=>{let{present:t,children:n}=e,r=ry(t),i=typeof n==`function`?n({present:r.isPresent}):m.Children.only(n),a=ay(r.ref,sy(i));return typeof n==`function`||r.isPresent?m.cloneElement(i,{ref:a}):null},`Presence`);function ry(e){let[t,n]=m.useState(),r=m.useRef(null),i=m.useRef(e),a=m.useRef(`none`),o=m.useRef(void 0),[s,c]=ty(e?`mounted`:`unmounted`,{mounted:{UNMOUNT:`unmounted`,ANIMATION_OUT:`unmountSuspended`},unmountSuspended:{MOUNT:`mounted`,ANIMATION_END:`unmounted`},unmounted:{MOUNT:`mounted`}});return m.useEffect(()=>{s===`mounted`?(a.current=o.current??oy(r.current),o.current=void 0):a.current=`none`},[s]),Pv(()=>{let t=r.current,n=i.current;if(n!==e){let r=a.current,s=oy(t);e?(o.current=s,c(`MOUNT`)):s===`none`||t?.display===`none`?c(`UNMOUNT`):c(n&&r!==s?`ANIMATION_OUT`:`UNMOUNT`),i.current=e}},[e,c]),Pv(()=>{if(t){let e,n=t.ownerDocument.defaultView??window,o=ey(a=>{let o=oy(r.current).includes(CSS.escape(a.animationName));if(a.target===t&&o&&(c(`ANIMATION_END`),!i.current)){let r=t.style.animationFillMode;t.style.animationFillMode=`forwards`,e=n.setTimeout(()=>{t.style.animationFillMode===`forwards`&&(t.style.animationFillMode=r)})}},`handleAnimationEnd`),s=ey(e=>{e.target===t&&(a.current=oy(r.current))},`handleAnimationStart`);return t.addEventListener(`animationstart`,s),t.addEventListener(`animationcancel`,o),t.addEventListener(`animationend`,o),()=>{n.clearTimeout(e),t.removeEventListener(`animationstart`,s),t.removeEventListener(`animationcancel`,o),t.removeEventListener(`animationend`,o)}}c(`ANIMATION_END`)},[t,c]),{isPresent:[`mounted`,`unmountSuspended`].includes(s),ref:m.useCallback(e=>{if(e){let t=getComputedStyle(e);r.current=t,o.current=oy(t)}else r.current=null;n(e)},[])}}ey(ry,`usePresence`);function iy(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}ey(iy,`setRef`);function ay(...e){let t=m.useRef(e);return t.current=e,m.useCallback(e=>{let n=t.current,r=!1,i=n.map(t=>{let n=iy(t,e);return!r&&typeof n==`function`&&(r=!0),n});if(r)return()=>{for(let e=0;e<i.length;e++){let t=i[e];typeof t==`function`?t():iy(n[e],null)}}},[])}ey(ay,`useStableComposedRefs`);function oy(e){return e?.animationName||`none`}ey(oy,`getAnimationName`);function sy(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}ey(sy,`getElementRef`);var cy=Object.defineProperty,ly=(e,t)=>cy(e,`name`,{value:t,configurable:!0}),uy=m.useId||(()=>void 0),dy=0;function fy(e){let[t,n]=m.useState(uy());return Pv(()=>{e||n(e=>e??String(dy++))},[e]),e||(t?`radix-${t}`:``)}ly(fy,`useId`);var py=Object.defineProperty,my=(e,t)=>py(e,`name`,{value:t,configurable:!0}),hy=`Collapsible`,[gy,_y]=G_(hy),[vy,yy]=gy(hy),by=m.forwardRef(my(function(e,t){let{__scopeCollapsible:n,open:r,defaultOpen:i,disabled:a,onOpenChange:o,...s}=e,[c,l]=Uv({prop:r,defaultProp:i??!1,onChange:o,caller:hy});return(0,h.jsx)(vy,{scope:n,disabled:a,contentId:fy(),open:c,onOpenToggle:m.useCallback(()=>l(e=>!e),[l]),children:(0,h.jsx)(Zv.div,{"data-state":Ey(c),"data-disabled":a?``:void 0,...s,ref:t})})},`Collapsible`)),xy=`CollapsibleTrigger`,Sy=m.forwardRef(my(function(e,t){let{__scopeCollapsible:n,...r}=e,i=yy(xy,n);return(0,h.jsx)(Zv.button,{type:`button`,"aria-controls":i.open?i.contentId:void 0,"aria-expanded":i.open||!1,"data-state":Ey(i.open),"data-disabled":i.disabled?``:void 0,disabled:i.disabled,...r,ref:t,onClick:kv(e.onClick,i.onOpenToggle)})},`CollapsibleTrigger`)),Cy=`CollapsibleContent`,wy=m.forwardRef(my(function(e,t){let{forceMount:n,...r}=e,i=yy(Cy,e.__scopeCollapsible);return(0,h.jsx)(ny,{present:n||i.open,children:({present:e})=>(0,h.jsx)(Ty,{...r,ref:t,present:e})})},`CollapsibleContent`)),Ty=m.forwardRef(my(function(e,t){let{__scopeCollapsible:n,present:r,children:i,...a}=e,o=yy(Cy,n),[s,c]=m.useState(r),l=m.useRef(null),u=Z_(t,l),d=m.useRef(0),f=d.current,p=m.useRef(0),g=p.current,_=o.open||s,v=m.useRef(_),y=m.useRef(void 0);return m.useEffect(()=>{let e=requestAnimationFrame(()=>v.current=!1);return()=>cancelAnimationFrame(e)},[]),Pv(()=>{let e=l.current;if(e){y.current=y.current||{transitionDuration:e.style.transitionDuration,animationName:e.style.animationName},e.style.transitionDuration=`0s`,e.style.animationName=`none`;let t=e.getBoundingClientRect();d.current=t.height,p.current=t.width,v.current||(e.style.transitionDuration=y.current.transitionDuration,e.style.animationName=y.current.animationName),c(r)}},[o.open,r]),(0,h.jsx)(Zv.div,{"data-state":Ey(o.open),"data-disabled":o.disabled?``:void 0,id:o.contentId,hidden:!_,...a,ref:u,style:{"--radix-collapsible-content-height":f?`${f}px`:void 0,"--radix-collapsible-content-width":g?`${g}px`:void 0,...e.style},children:_&&i})},`CollapsibleContentImpl`));function Ey(e){return e?`open`:`closed`}my(Ey,`getState`);var Dy=Object.defineProperty,Oy=(e,t)=>Dy(e,`name`,{value:t,configurable:!0}),ky={LTR:`ltr`,RTL:`rtl`},Ay=m.createContext(void 0);function jy(e){let t=m.useContext(Ay);return e||t||ky.LTR}Oy(jy,`useDirection`);var My=Object.defineProperty,Z=(e,t)=>My(e,`name`,{value:t,configurable:!0}),Ny={Single:`single`,Multiple:`multiple`},Py={Vertical:`vertical`,Horizontal:`horizontal`},Fy={LTR:`ltr`,RTL:`rtl`},Iy=`Accordion`,Ly=[`Home`,`End`,`ArrowDown`,`ArrowUp`,`ArrowLeft`,`ArrowRight`],[Ry,zy,By]=hv(Iy),[Vy,Hy]=G_(Iy,[By,_y]),Uy=_y(),Wy=m.forwardRef(Z(function(e,t){let{type:n,...r}=e,i=r,a=r;return(0,h.jsx)(Ry.Provider,{scope:e.__scopeAccordion,children:n===Ny.Multiple?(0,h.jsx)(Xy,{...a,ref:t}):(0,h.jsx)(Yy,{...i,ref:t})})},`Accordion`)),[Gy,Ky]=Vy(Iy),[qy,Jy]=Vy(Iy,{collapsible:!1}),Yy=m.forwardRef(Z(function(e,t){let{value:n,defaultValue:r,onValueChange:i=Z(()=>{},`onValueChange`),collapsible:a=!1,...o}=e,[s,c]=Uv({prop:n,defaultProp:r??``,onChange:i,caller:Iy});return(0,h.jsx)(Gy,{scope:e.__scopeAccordion,value:m.useMemo(()=>s?[s]:[],[s]),onItemOpen:c,onItemClose:m.useCallback(()=>a&&c(``),[a,c]),children:(0,h.jsx)(qy,{scope:e.__scopeAccordion,collapsible:a,children:(0,h.jsx)($y,{...o,ref:t})})})},`AccordionImplSingle`)),Xy=m.forwardRef(Z(function(e,t){let{value:n,defaultValue:r,onValueChange:i=Z(()=>{},`onValueChange`),...a}=e,[o,s]=Uv({prop:n,defaultProp:r??[],onChange:i,caller:Iy}),c=m.useCallback(e=>s((t=[])=>[...t,e]),[s]),l=m.useCallback(e=>s((t=[])=>t.filter(t=>t!==e)),[s]);return(0,h.jsx)(Gy,{scope:e.__scopeAccordion,value:o,onItemOpen:c,onItemClose:l,children:(0,h.jsx)(qy,{scope:e.__scopeAccordion,collapsible:!0,children:(0,h.jsx)($y,{...a,ref:t})})})},`AccordionImplMultiple`)),[Zy,Qy]=Vy(Iy),$y=m.forwardRef(Z(function(e,t){let{__scopeAccordion:n,disabled:r,dir:i,orientation:a=Py.Vertical,...o}=e,s=Z_(m.useRef(null),t),c=zy(n),l=jy(i)===Fy.LTR,u=kv(e.onKeyDown,e=>{if(!Ly.includes(e.key))return;let t=e.target,n=c().filter(e=>!e.ref.current?.disabled),r=n.findIndex(e=>e.ref.current===t),i=n.length;if(r===-1)return;e.preventDefault();let o=r,s=i-1,u=Z(()=>{o=r+1,o>s&&(o=0)},`moveNext`),d=Z(()=>{o=r-1,o<0&&(o=s)},`movePrev`);switch(e.key){case`Home`:o=0;break;case`End`:o=s;break;case`ArrowRight`:a===Py.Horizontal&&(l?u():d());break;case`ArrowDown`:a===Py.Vertical&&u();break;case`ArrowLeft`:a===Py.Horizontal&&(l?d():u());break;case`ArrowUp`:a===Py.Vertical&&d()}n[o%i].ref.current?.focus()});return(0,h.jsx)(Zy,{scope:n,disabled:r,direction:i,orientation:a,children:(0,h.jsx)(Ry.Slot,{scope:n,children:(0,h.jsx)(Zv.div,{...o,"data-orientation":a,ref:s,onKeyDown:r?void 0:u})})})},`AccordionImpl`)),eb=`AccordionItem`,[tb,nb]=Vy(eb),rb=m.forwardRef(Z(function(e,t){let{__scopeAccordion:n,value:r,...i}=e,a=Qy(eb,n),o=Ky(eb,n),s=Uy(n),c=fy(),l=r&&o.value.includes(r)||!1,u=a.disabled||e.disabled;return(0,h.jsx)(tb,{scope:n,open:l,disabled:u,triggerId:c,children:(0,h.jsx)(by,{"data-orientation":a.orientation,"data-state":ub(l),...s,...i,ref:t,disabled:u,open:l,onOpenChange:e=>{e?o.onItemOpen(r):o.onItemClose(r)}})})},`AccordionItem`)),ib=`AccordionHeader`,ab=m.forwardRef(Z(function(e,t){let{__scopeAccordion:n,...r}=e,i=Qy(Iy,n),a=nb(ib,n);return(0,h.jsx)(Zv.h3,{"data-orientation":i.orientation,"data-state":ub(a.open),"data-disabled":a.disabled?``:void 0,...r,ref:t})},`AccordionHeader`)),ob=`AccordionTrigger`,sb=m.forwardRef(Z(function(e,t){let{__scopeAccordion:n,...r}=e,i=Qy(Iy,n),a=nb(ob,n),o=Jy(ob,n),s=Uy(n);return(0,h.jsx)(Ry.ItemSlot,{scope:n,children:(0,h.jsx)(Sy,{"aria-disabled":a.open&&!o.collapsible||void 0,"data-orientation":i.orientation,id:a.triggerId,...s,...r,ref:t})})},`AccordionTrigger`)),cb=`AccordionContent`,lb=m.forwardRef(Z(function(e,t){let{__scopeAccordion:n,...r}=e,i=Qy(Iy,n),a=nb(cb,n),o=Uy(n);return(0,h.jsx)(wy,{role:`region`,"aria-labelledby":a.triggerId,"data-orientation":i.orientation,...o,...r,ref:t,style:{"--radix-accordion-content-height":`var(--radix-collapsible-content-height)`,"--radix-accordion-content-width":`var(--radix-collapsible-content-width)`,...e.style}})},`AccordionContent`));function ub(e){return e?`open`:`closed`}Z(ub,`getState`);var Q={duration:{instant:.12,fast:.16,exit:.18,standard:.24,considered:.48},ease:{enter:[.16,1,.3,1],exit:[.7,0,.84,0],standard:[.22,1,.36,1],inOut:[.65,0,.35,1]},spring:{responsive:{type:`spring`,stiffness:520,damping:38},gentle:{type:`spring`,stiffness:340,damping:34},snappy:{type:`spring`,visualDuration:.26,bounce:.12},smooth:{type:`spring`,visualDuration:.4,bounce:0},morph:{type:`spring`,visualDuration:.42,bounce:.16}},stagger:{char:.016,word:.04,line:.08,item:.035},blur:{subtle:2,soft:4,text:8}},db={accordion:`_accordion_17mmv_1`,item:`_item_17mmv_2`,header:`_header_17mmv_3`,trigger:`_trigger_17mmv_4`,icon:`_icon_17mmv_5`,panel:`_panel_17mmv_9`,panelInner:`_panelInner_17mmv_10`,lg:`_lg_17mmv_11`},fb={height:`auto`,opacity:1,visibility:`visible`},pb={height:0,opacity:0,transitionEnd:{visibility:`hidden`}},mb={y:0,filter:`blur(0px)`,transitionEnd:{filter:`none`}},hb={y:-6,filter:`blur(${Q.blur.subtle}px)`},gb={open:{...fb,transition:{height:Q.spring.smooth,opacity:{duration:Q.duration.standard,ease:[...Q.ease.enter]}}},closed:{...pb,transition:{height:Q.spring.smooth,opacity:{duration:Q.duration.fast,ease:[...Q.ease.standard]}}}},_b={open:{...mb,transition:{y:Q.spring.smooth,filter:{duration:Q.duration.standard,ease:[...Q.ease.enter]}}},closed:{...hb,transition:{duration:Q.duration.fast,ease:[...Q.ease.standard]}}},vb={open:{...fb,transition:{duration:0}},closed:{...pb,transition:{duration:0}}},yb={open:{...mb,transition:{duration:0}},closed:{...hb,transition:{duration:0}}};function bb({items:e,defaultOpen:t=0,size:n=`md`}){let r=t>=0&&t<e.length?String(t):``,[i,a]=(0,m.useState)(r),o=H();return(0,h.jsx)(Wy,{className:[db.accordion,n===`lg`?db.lg:``].filter(Boolean).join(` `),type:`single`,collapsible:!0,value:i,onValueChange:a,children:e.map((e,t)=>{let n=i===String(t);return(0,h.jsxs)(rb,{className:db.item,value:String(t),children:[(0,h.jsx)(ab,{className:db.header,children:(0,h.jsxs)(sb,{className:db.trigger,children:[(0,h.jsx)(`span`,{children:e.title}),(0,h.jsx)(U.span,{className:db.icon,initial:!1,animate:{rotate:n?180:0},transition:o?{duration:0}:Q.spring.snappy,children:(0,h.jsx)(Rg,{width:17,height:17,"aria-hidden":`true`})})]})}),(0,h.jsx)(lb,{forceMount:!0,asChild:!0,children:(0,h.jsx)(U.div,{className:db.panel,initial:!1,animate:n?`open`:`closed`,variants:o?vb:gb,children:(0,h.jsx)(U.div,{className:db.panelInner,variants:o?yb:_b,children:e.content})})})]},`${e.title}-${t}`)})})}var xb={badge:`_badge_qjt90_1`,sm:`_sm_qjt90_23`,md:`_md_qjt90_24`,body:`_body_qjt90_26`,content:`_content_qjt90_27`,label:`_label_qjt90_29`,glyph:`_glyph_qjt90_29`,text:`_text_qjt90_30`,icon:`_icon_qjt90_32`,neutral:`_neutral_qjt90_44`,success:`_success_qjt90_45`,info:`_info_qjt90_46`,warning:`_warning_qjt90_47`,danger:`_danger_qjt90_48`},Sb={duration:Q.duration.fast,ease:[...Q.ease.standard]},Cb={opacity:0,y:`0.3em`,filter:`blur(${Q.blur.soft}px)`},wb={opacity:0,y:`-0.3em`,filter:`blur(${Q.blur.subtle}px)`,transition:Sb},Tb={opacity:0,scale:.6,filter:`blur(${Q.blur.subtle}px)`},Eb={opacity:1,y:`0em`,scale:1,filter:`blur(0px)`},Db={opacity:0,transition:{duration:Q.duration.instant}};function Ob(e){let t=Mu();return(0,h.jsx)(U.span,{...e,"aria-hidden":!t||e[`aria-hidden`]})}function kb(e){if(!(0,m.isValidElement)(e))return`icon`;let t=e.type;return typeof t==`string`?t:t.displayName??t.name??`icon`}function Ab({tone:e=`neutral`,size:t=`md`,icon:n,className:r,children:i,...a}){let o=H(),s=typeof i==`string`||typeof i==`number`?String(i):null,c=n?kb(n):``,l=(0,m.useRef)(null),u=(0,m.useRef)(null),d=Ff(`auto`),f=(0,m.useRef)(0);(0,m.useLayoutEffect)(()=>{f.current=performance.now()},[s,c]),(0,m.useEffect)(()=>{let e=u.current;if(!e||typeof ResizeObserver>`u`)return;let t,n,r=()=>{d.jump(`auto`),l.current&&(l.current.style.width=`auto`)},i=new ResizeObserver(([i])=>{let a=i.borderBoxSize?.[0]?.inlineSize??e.offsetWidth,s=d.get(),c=typeof s==`number`?s:t;if(t=a,n?.stop(),o||c===void 0||c===a||performance.now()-f.current>120)return r();l.current&&(l.current.style.width=`${c}px`),n=ip(d,[c,a],{...Q.spring.morph,onComplete:r})});return i.observe(e),()=>{i.disconnect(),n?.stop()}},[d,o]);let p=o?{duration:Q.duration.instant}:{duration:Q.duration.standard,ease:[...Q.ease.enter]},g=[xb.badge,xb[e],xb[t],r].filter(Boolean).join(` `);return(0,h.jsx)(`span`,{...a,className:g,children:(0,h.jsx)(U.span,{ref:l,className:xb.body,style:{width:d},children:(0,h.jsxs)(`span`,{ref:u,className:xb.content,children:[n?(0,h.jsx)(`span`,{className:xb.icon,"aria-hidden":`true`,children:(0,h.jsx)(V,{mode:`popLayout`,initial:!1,children:(0,h.jsx)(Ob,{className:xb.glyph,initial:o?{opacity:0}:Tb,animate:Eb,exit:o?Db:{...Tb,transition:Sb},transition:o?p:Q.spring.snappy,children:n},c)})}):null,s===null?i:(0,h.jsx)(`span`,{className:xb.label,children:(0,h.jsx)(V,{mode:`popLayout`,initial:!1,children:(0,h.jsx)(Ob,{className:xb.text,initial:o?{opacity:0}:Cb,animate:Eb,exit:o?Db:wb,transition:p,children:s},s)})})]})})})}var jb={button:`_button_14khe_1`,labelSlot:`_labelSlot_14khe_8`,labelContent:`_labelContent_14khe_10`,labelPhase:`_labelPhase_14khe_11`,primary:`_primary_14khe_13`,secondary:`_secondary_14khe_14`,ghost:`_ghost_14khe_15`,danger:`_danger_14khe_16`,sm:`_sm_14khe_27`,md:`_md_14khe_28`,lg:`_lg_14khe_29`,loader:`_loader_14khe_30`,spinner:`_spinner_14khe_31`,spin:`_spin_14khe_31`,loadingLabel:`_loadingLabel_14khe_32`},Mb={pressed:e=>{let t=e.current?.offsetWidth??0;return{scale:t>220?.985:t&&t<=48?.96:.97,transition:{duration:Q.duration.instant,ease:[...Q.ease.standard]}}}},Nb={opacity:1,y:0,scale:1,filter:`blur(0px)`},Pb={opacity:0,y:4,filter:`blur(${Q.blur.soft}px)`},Fb={opacity:0,y:-3,filter:`blur(${Q.blur.soft}px)`,transition:{duration:Q.duration.fast,ease:[...Q.ease.standard]}},Ib={opacity:0,scale:.6,filter:`blur(${Q.blur.subtle}px)`},Lb={opacity:0,scale:.6,filter:`blur(${Q.blur.subtle}px)`,transition:{duration:Q.duration.fast,ease:[...Q.ease.standard]}},Rb={...Nb,opacity:0},zb={opacity:0,transition:{duration:Q.duration.instant}},Bb={...Q.spring.snappy,opacity:{duration:Q.duration.fast,ease:[...Q.ease.enter]},filter:{duration:Q.duration.fast,ease:[...Q.ease.enter]}};function Vb(e){if(e==null||typeof e==`boolean`)return``;if(typeof e==`string`||typeof e==`number`||typeof e==`bigint`)return String(e);if(Array.isArray(e))return e.map(Vb).join(``);if(!(0,m.isValidElement)(e))return``;let t=e.type;return`<${typeof t==`string`?t:t?.displayName??t?.name??``}>${Vb(e.props.children)}`}function Hb(e,t,n){let r=Ff(`auto`),i=(0,m.useRef)(t),a=(0,m.useRef)(0);return(0,m.useLayoutEffect)(()=>{i.current!==t&&(i.current=t,a.current=performance.now()+700)},[t]),(0,m.useEffect)(()=>{let t=e.current,i=t?.parentElement;if(!t||!i||typeof ResizeObserver>`u`)return;let o=!1,s=new ResizeObserver(([e])=>{let t=e.contentRect.width;if(!t||!o||n||performance.now()>a.current){o=t>0,r.jump(t||`auto`),delete i.dataset.morphing;return}i.dataset.morphing=``,ip(r,t,{...Q.spring.morph,onComplete:()=>{delete i.dataset.morphing}})});return s.observe(t),()=>s.disconnect()},[e,n,r]),r}function Ub({children:e,icon:t,reduced:n,ref:r}){let i=Mu();return(0,h.jsx)(U.span,{ref:r,className:jb.labelPhase,"aria-hidden":!i||void 0,initial:n?Rb:t?Ib:Pb,animate:Nb,exit:n?zb:t?Lb:Fb,transition:n?{duration:Q.duration.instant}:t?Bb:{duration:Q.duration.standard,ease:[...Q.ease.enter]},children:e})}var Wb=(0,m.forwardRef)(function({className:e,variant:t=`primary`,size:n=`md`,loading:r=!1,disabled:i,children:a,onClick:o,...s},c){let l=H()??!1,u=(0,m.useRef)(null),d=(0,m.useRef)(null),f=Vb(a),p=Hb(d,f,l),g=(0,m.useCallback)(e=>{u.current=e,typeof c==`function`?c(e):c&&(c.current=e)},[c]),_=s[`aria-haspopup`],v=_!==void 0&&_!==!1&&_!==`false`||s.role===`combobox`||s[`data-state`]!==void 0,y=i||r||s[`aria-disabled`]===!0||s[`aria-disabled`]===`true`,b=[jb.button,jb[t],jb[n],e].filter(Boolean).join(` `);return(0,h.jsxs)(U.button,{ref:g,tabIndex:s.tabIndex??0,className:b,disabled:i,"aria-busy":r||void 0,custom:u,variants:Mb,whileTap:l||v||y?void 0:`pressed`,transition:Q.spring.snappy,...s,"aria-disabled":r||s[`aria-disabled`]||void 0,onClick:r?e=>e.preventDefault():o,children:[(0,h.jsx)(V,{initial:!1,children:r?(0,h.jsx)(U.span,{className:jb.loader,"aria-hidden":`true`,initial:l?{opacity:0}:{opacity:0,scale:.6},animate:{opacity:1,scale:1},exit:l?zb:{...Lb,scale:.8},transition:l?{duration:Q.duration.instant}:Bb,children:(0,h.jsx)(`span`,{className:jb.spinner})},`loader`):null}),(0,h.jsx)(U.span,{className:[jb.labelSlot,r?jb.loadingLabel:``].filter(Boolean).join(` `),style:{width:p},children:(0,h.jsx)(`span`,{ref:d,className:jb.labelContent,children:(0,h.jsx)(V,{mode:`popLayout`,initial:!1,children:(0,h.jsx)(Ub,{icon:!/\S/.test(f.replace(/<[^>]*>/g,``)),reduced:l,children:a},f)})})})]})});Wb.displayName=`Button`;function Gb(e=1900){let[t,n]=(0,m.useState)(`idle`),[r,i]=(0,m.useState)(null),a=(0,m.useRef)(null),o=(0,m.useCallback)(()=>{a.current&&clearTimeout(a.current),a.current=null,n(`idle`),i(null)},[]);return(0,m.useEffect)(()=>()=>{a.current&&clearTimeout(a.current)},[]),{state:t,activeKey:r,copy:(0,m.useCallback)(async(t,r=`default`)=>{a.current&&clearTimeout(a.current),i(r);try{return await navigator.clipboard.writeText(t),n(`copied`),a.current=setTimeout(o,e),!0}catch{return n(`error`),a.current=setTimeout(o,e),!1}},[e,o]),reset:o}}var Kb={button:`_button_17pbi_1`,iconOnly:`_iconOnly_17pbi_3`,plain:`_plain_17pbi_4`,icon:`_icon_17pbi_3`,iconInner:`_iconInner_17pbi_8`,label:`_label_17pbi_12`,measure:`_measure_17pbi_13`,glyphs:`_glyphs_17pbi_13`,glyph:`_glyph_17pbi_13`,srOnly:`_srOnly_17pbi_19`},qb={type:`spring`,visualDuration:.5,bounce:.06},Jb={duration:.36,ease:[...Q.ease.enter]},Yb={duration:.2,ease:[...Q.ease.standard]},Xb={duration:Q.duration.instant},Zb=`blur(${Q.blur.soft}px)`,Qb={opacity:1,y:0,scale:1,filter:`blur(0px)`},$b={...Qb,opacity:0},ex={opacity:0,transition:Xb},tx={opacity:0,scale:.6,filter:Zb},nx={opacity:0,scale:.6,filter:Zb,transition:{duration:.24,ease:[...Q.ease.standard]}},rx={scale:qb,opacity:{...Jb,delay:.03},filter:{...Jb,delay:.03}},ix={opacity:0,y:4,filter:Zb},ax={opacity:0,y:-3,filter:Zb,transition:Yb};function ox({reduced:e}){return(0,h.jsx)(`svg`,{width:16,height:16,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:1.75,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,h.jsx)(U.path,{d:`M4 12l5 5L20 6`,initial:!e&&{pathLength:0,opacity:0},animate:{pathLength:1,opacity:1},transition:{pathLength:{duration:.5,ease:[...Q.ease.standard],delay:.05},opacity:{duration:.01,delay:.05}}})})}var sx=(e,t)=>e.map((e,n)=>({id:`${t}:${n}`,char:e,order:n}));function cx(e){let[t,n]=(0,m.useState)(()=>({text:e,seq:0,glyphs:sx([...e],0)}));if(t.text===e)return t.glyphs;let r=[...t.text],i=[...e],a=0,o=0;for(;a<r.length&&a<i.length&&r[a]===i[a];)a++;for(;o<r.length-a&&o<i.length-a&&r[r.length-1-o]===i[i.length-1-o];)o++;a<2&&(a=0),o<2&&(o=0);let s=t.seq+1,c=[...t.glyphs.slice(0,a),...sx(i.slice(a,i.length-o),s),...t.glyphs.slice(t.glyphs.length-o)];return n({text:e,seq:s,glyphs:c}),c}function lx({text:e,reduced:t}){let n=cx(e);return(0,h.jsx)(U.span,{className:Kb.glyphs,layoutRoot:!0,children:(0,h.jsx)(V,{mode:`popLayout`,initial:!1,children:n.map(n=>(0,h.jsx)(U.span,{className:Kb.glyph,layout:!t&&`position`,layoutDependency:e,initial:t?$b:ix,animate:Qb,exit:t?ex:ax,transition:t?Xb:{...Jb,delay:Math.min(n.order*.02,.12),layout:qb},children:n.char},n.id))})})}function ux({value:e,label:t=`Copy`,className:n,iconOnly:r=!1,variant:i=`outline`,disabled:a,onCopied:o}){let{state:s,copy:c}=Gb(),l=H()??!1,u=s===`copied`?`Copied`:s===`error`?`Failed`:t;async function d(){await c(e)&&o?.()}return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsxs)(`button`,{type:`button`,className:[Kb.button,r&&Kb.iconOnly,i===`plain`&&Kb.plain,n].filter(Boolean).join(` `),onClick:()=>void d(),"aria-label":t,"data-copy-state":s,disabled:a,children:[(0,h.jsx)(`span`,{className:Kb.icon,"aria-hidden":`true`,children:(0,h.jsx)(V,{initial:!1,children:(0,h.jsx)(U.span,{className:Kb.iconInner,"data-state":s,initial:l?$b:tx,animate:Qb,exit:l?ex:nx,transition:l?Xb:rx,children:s===`copied`?(0,h.jsx)(ox,{reduced:l}):s===`error`?(0,h.jsx)(Bg,{size:16,strokeWidth:1.75}):(0,h.jsx)(Wg,{size:16,strokeWidth:1.75})},s)})}),!r&&(0,h.jsxs)(`span`,{className:Kb.label,"aria-hidden":`true`,children:[(0,h.jsx)(`span`,{className:Kb.measure,children:t}),(0,h.jsx)(`span`,{className:Kb.measure,children:`Copied`}),(0,h.jsx)(`span`,{className:Kb.measure,children:`Failed`}),(0,h.jsx)(lx,{text:u,reduced:l})]})]}),(0,h.jsx)(`span`,{className:Kb.srOnly,role:`status`,"aria-live":`polite`,children:s===`idle`?``:s===`error`?`${t}: Could not copy`:`${t}: Copied`})]})}var $={block:`_block_zsn8w_1`,header:`_header_zsn8w_2`,file:`_file_zsn8w_4`,filename:`_filename_zsn8w_6`,swap:`_swap_zsn8w_8`,swapStack:`_swapStack_zsn8w_9`,swapText:`_swapText_zsn8w_11`,reserve:`_reserve_zsn8w_12`,sizer:`_sizer_zsn8w_13`,srOnly:`_srOnly_zsn8w_14`,language:`_language_zsn8w_15`,viewport:`_viewport_zsn8w_18`,pre:`_pre_zsn8w_19`,code:`_code_zsn8w_21`,expand:`_expand_zsn8w_22`,chevron:`_chevron_zsn8w_23`,comment:`_comment_zsn8w_25`,string:`_string_zsn8w_26`,number:`_number_zsn8w_27`,keyword:`_keyword_zsn8w_28`,type:`_type_zsn8w_29`,function:`_function_zsn8w_30`,property:`_property_zsn8w_31`,tag:`_tag_zsn8w_32`,punctuation:`_punctuation_zsn8w_33`},dx=/^(?:abstract|as|async|await|break|case|catch|class|const|continue|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|of|private|protected|public|readonly|return|set|static|switch|throw|try|type|typeof|var|void|while|with|yield|SELECT|FROM|WHERE|INSERT|UPDATE|DELETE)$/,fx=/^(?:true|false|null|undefined|NaN|Infinity)$/,px=/^(?:Array|Boolean|Date|Error|Map|Number|Promise|Record|Set|String|ReactNode|HTMLElement|HTMLButtonElement|Event|unknown|never|void|any|boolean|number|string|object)$/,mx=/\/\*[\s\S]*?\*\/|\/\/[^\n]*|<!--[\s\S]*?-->|`(?:\\.|[^`\\])*`|"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\b\d+(?:\.\d+)?\b|\b[A-Za-z_$][\w$-]*\b|[{}[\]();,.<>:=+*/!?|&-]/g;function hx(e){return e.toLowerCase().replace(/^\./,``)}function gx(e,t,n,r){if(e.startsWith(`//`)||e.startsWith(`/*`)||e.startsWith(`<!--`))return`comment`;if(e.startsWith(`"`)||e.startsWith(`'`)||e.startsWith("`"))return r===`json`&&/^\s*:/.test(t.slice(n+e.length))?`property`:`string`;if(/^\d/.test(e))return`number`;if(dx.test(e)||fx.test(e))return`keyword`;if(px.test(e))return`type`;if(/^[{}[\]();,.<>:=+*/!?|&-]$/.test(e))return`punctuation`;let i=t.slice(0,n),a=t.slice(n+e.length);if((r===`tsx`||r===`jsx`||r===`html`||r===`vue`)&&/<\/?$/.test(i))return`tag`;if(/^\s*\(/.test(a)&&r!==`json`)return`function`;if((r===`css`||r===`tsx`||r===`jsx`)&&/^\s*[:=]/.test(a))return`property`}function _x(e,t){let n=[],r=0;for(let i of e.matchAll(mx)){let a=i[0],o=i.index??0;r<o&&n.push(e.slice(r,o));let s=gx(a,e,o,t);n.push(s?(0,h.jsx)(`span`,{className:$[s],children:a},`${o}-${a}`):(0,h.jsx)(m.Fragment,{children:a},`${o}-${a}`)),r=o+a.length}return r<e.length&&n.push(e.slice(r)),n}var vx={duration:Q.duration.standard,ease:[...Q.ease.enter]},yx={duration:Q.duration.instant,ease:[...Q.ease.standard]};function bx({value:e,reduced:t}){return(0,h.jsx)(V,{initial:!1,children:(0,h.jsx)(U.span,{className:$.swapText,initial:!t&&{opacity:0,y:`0.3em`,filter:`blur(${Q.blur.soft}px)`},animate:{opacity:1,y:0,filter:`blur(0px)`},exit:t?{opacity:0,transition:{duration:0}}:{opacity:0,y:`-0.3em`,filter:`blur(${Q.blur.subtle}px)`,transition:yx},transition:t?{duration:0}:vx,children:e},e)})}function xx({name:e,reduced:t}){let n=(0,m.useRef)(null),r=(0,m.useRef)(0),i=Ff(`auto`);return(0,m.useEffect)(()=>{let e=n.current;if(!e)return;let t=new ResizeObserver(()=>{r.current=e.offsetWidth});return t.observe(e),()=>t.disconnect()},[]),(0,m.useLayoutEffect)(()=>{let e=i.get(),a=n.current?.offsetWidth??0,o=typeof e==`number`?e:r.current;if(r.current=a,t||!o||!a||Math.abs(o-a)<1){i.jump(`auto`);return}i.jump(o);let s=ip(i,a,{...Q.spring.morph,onComplete:()=>i.jump(`auto`)});return()=>s.stop()},[e,t,i]),(0,h.jsxs)(U.span,{className:`${$.swap} ${$.filename}`,style:{width:i},children:[(0,h.jsx)(`span`,{ref:n,className:$.sizer,"aria-hidden":`true`,children:e}),(0,h.jsx)(`span`,{className:$.swapStack,"aria-hidden":`true`,children:(0,h.jsx)(bx,{value:e,reduced:t})}),(0,h.jsx)(`span`,{className:$.srOnly,children:e})]})}function Sx({code:e,filename:t,language:n=`tsx`,maxLines:r}){let i=hx(n),a=H()??!1,o=(0,m.useId)(),s=e.split(`
15
+ `).length,c=r!=null&&r>0&&s>r,[l,u]=(0,m.useState)(!1),d=!c||l,f=(0,m.useRef)(null),p=(0,m.useRef)(null),g=Ff(d?`auto`:`var(--code-collapsed)`),_=(0,m.useRef)({open:d,reduced:a}),v=(0,m.useRef)(()=>{});(0,m.useLayoutEffect)(()=>{let e=f.current;if(!e)return;let t=e=>{let t=p.current;if(!t)return;let n=_.current.open?t.full:t.collapsed;e||_.current.reduced||typeof g.get()!=`number`?g.jump(n):ip(g,n,Q.spring.smooth)},n=new ResizeObserver(()=>{let n=getComputedStyle(e),i=e.offsetHeight,a=r?Math.min(i,Math.round(r*parseFloat(n.lineHeight)+parseFloat(n.paddingTop)+parseFloat(n.paddingBottom))):i,o=!p.current;p.current={full:i,collapsed:a},t(o)});return n.observe(e),v.current=t,()=>n.disconnect()},[g,r]),(0,m.useLayoutEffect)(()=>{_.current={open:d,reduced:a},v.current(!1)},[d,a]);let y=[`Show all ${s} lines`,`Show fewer lines`];return(0,h.jsxs)(`section`,{className:$.block,"aria-label":t?`${t} source code`:`${i} source code`,style:r?{"--code-lines":r}:void 0,children:[(0,h.jsxs)(`header`,{className:$.header,children:[(0,h.jsxs)(`div`,{className:$.file,children:[(0,h.jsx)(Kg,{size:16,strokeWidth:1.75,"aria-hidden":`true`}),(0,h.jsx)(xx,{name:t??`Source code`,reduced:a}),(0,h.jsx)(`span`,{className:$.language,children:i})]}),(0,h.jsx)(ux,{value:e,label:`Copy code`})]}),(0,h.jsx)(U.div,{className:$.viewport,style:{height:g},children:(0,h.jsx)(`pre`,{ref:f,id:o,className:$.pre,tabIndex:0,"aria-label":`Selectable source code`,children:(0,h.jsx)(V,{initial:!1,mode:`popLayout`,children:(0,h.jsx)(U.code,{className:$.code,initial:!a&&{opacity:0,y:4},animate:{opacity:1,y:0},exit:a?{opacity:0,transition:{duration:0}}:{opacity:0,transition:yx},transition:a?{duration:0}:vx,children:_x(e,i)},e)})})}),c&&(0,h.jsxs)(`button`,{type:`button`,className:$.expand,"aria-expanded":l,"aria-controls":o,onClick:()=>u(e=>!e),children:[(0,h.jsxs)(`span`,{className:$.swap,"aria-hidden":`true`,children:[y.map(e=>(0,h.jsx)(`span`,{className:$.reserve,children:e},e)),(0,h.jsx)(`span`,{className:$.swapStack,children:(0,h.jsx)(bx,{value:y[+!!l],reduced:a})})]}),(0,h.jsx)(`span`,{className:$.srOnly,children:y[+!!l]}),(0,h.jsx)(U.span,{className:$.chevron,"aria-hidden":`true`,initial:!1,animate:{rotate:l?180:0},transition:a?{duration:0}:Q.spring.snappy,children:(0,h.jsx)(Rg,{size:16,strokeWidth:1.75})})]})]})}var Cx={root:`_root_1uufz_1`,icon:`_icon_1uufz_2`,"empty-state-icon":`_empty-state-icon_1uufz_1`,glyph:`_glyph_1uufz_3`,frame:`_frame_1uufz_4`,copy:`_copy_1uufz_5`,line:`_line_1uufz_9`,action:`_action_1uufz_10`},wx={duration:Q.duration.fast,ease:[...Q.ease.standard]},Tx={opacity:0,y:`0.3em`,filter:`blur(${Q.blur.soft}px)`},Ex={opacity:0,y:`-0.3em`,filter:`blur(${Q.blur.subtle}px)`,transition:wx},Dx={opacity:0,scale:.6,filter:`blur(${Q.blur.subtle}px)`},Ox={opacity:1,y:`0em`,scale:1,filter:`blur(0px)`},kx={opacity:0,transition:{duration:Q.duration.instant}};function Ax(e){let t=Mu();return(0,h.jsx)(U.span,{...e,"aria-hidden":!t||e[`aria-hidden`]})}function jx(e){if(!(0,m.isValidElement)(e))return`icon`;let t=e.type;return typeof t==`string`?t:t.displayName??t.name??`icon`}function Mx({reduce:e,morphKey:t,children:n}){let r=(0,m.useRef)(null),i=(0,m.useRef)(null),a=Ff(`auto`),o=(0,m.useRef)(0);return(0,m.useLayoutEffect)(()=>{o.current=performance.now()},[t]),(0,m.useEffect)(()=>{let t=i.current;if(!t||typeof ResizeObserver>`u`)return;let n,s,c=()=>{a.jump(`auto`),r.current&&Object.assign(r.current.style,{overflow:``,height:`auto`})},l=new ResizeObserver(([i])=>{let l=i.borderBoxSize?.[0]?.blockSize??t.offsetHeight,u=a.get(),d=typeof u==`number`?u:n;if(n=l,s?.stop(),e||d===void 0||d===l||performance.now()-o.current>120)return c();r.current&&Object.assign(r.current.style,{overflow:`hidden`,height:`${d}px`}),s=ip(a,[d,l],{...Q.spring.smooth,onComplete:c})});return l.observe(t),()=>{l.disconnect(),s?.stop()}},[a,e]),(0,h.jsx)(U.div,{ref:r,className:Cx.frame,style:{height:a},children:(0,h.jsx)(`div`,{ref:i,className:Cx.copy,children:n})})}function Nx({title:e,description:t,action:n,icon:r,className:i,label:a}){let o=H(),s=r??(0,h.jsx)(Jg,{width:24,height:24,strokeWidth:1.5}),c=o?{duration:Q.duration.instant}:{duration:Q.duration.standard,ease:[...Q.ease.enter]},l={initial:o?{opacity:0}:Tx,animate:Ox,exit:o?kx:Ex,transition:c};return(0,h.jsxs)(`section`,{className:[Cx.root,i].filter(Boolean).join(` `),"aria-label":a,children:[(0,h.jsx)(`div`,{className:Cx.icon,"aria-hidden":`true`,children:(0,h.jsx)(V,{mode:`popLayout`,initial:!1,children:(0,h.jsx)(Ax,{className:Cx.glyph,initial:o?{opacity:0}:Dx,animate:Ox,exit:o?kx:{...Dx,transition:wx},transition:o?c:Q.spring.snappy,children:s},jx(s))})}),(0,h.jsxs)(Mx,{reduce:o,morphKey:`${e}\n${t}`,children:[(0,h.jsx)(`h3`,{children:(0,h.jsx)(V,{mode:`popLayout`,initial:!1,children:(0,h.jsx)(Ax,{className:Cx.line,...l,children:e},e)})}),(0,h.jsx)(`p`,{children:(0,h.jsx)(V,{mode:`popLayout`,initial:!1,children:(0,h.jsx)(Ax,{className:Cx.line,...l,children:t},t)})})]}),n&&(0,h.jsx)(`div`,{className:Cx.action,children:n})]})}var Px={field:`_field_6ayfd_1`,label:`_label_6ayfd_2`,input:`_input_6ayfd_4`,messageSlot:`_messageSlot_6ayfd_11`,description:`_description_6ayfd_12`,error:`_error_6ayfd_12`,words:`_words_6ayfd_15`,word:`_word_6ayfd_15`,column:`_column_6ayfd_18`,srOnly:`_srOnly_6ayfd_20`},Fx={enter:e=>({opacity:0,y:`${e*.6}em`,filter:`blur(${Q.blur.subtle}px)`}),center:{opacity:1,y:0,filter:`blur(0px)`},exit:e=>({opacity:0,y:`${e*-.6}em`,filter:`blur(${Q.blur.subtle}px)`})},Ix=e=>/^\d[\d.,/:]*%?$/.test(e);function Lx({word:e}){let t=H(),[n,r]=(0,m.useState)({word:e,direction:1});n.word!==e&&r({word:e,direction:parseFloat(e.replace(/,/g,``))<parseFloat(n.word.replace(/,/g,``))?-1:1});let i=e.split(``),a=t?{duration:0}:{y:Q.spring.snappy,width:Q.spring.morph,opacity:{duration:Q.duration.fast},filter:{duration:Q.duration.fast}};return(0,h.jsx)(V,{initial:!1,children:i.map((e,t)=>(0,h.jsx)(U.span,{className:Px.column,initial:{width:0,opacity:0},animate:{width:`auto`,opacity:1},exit:{width:0,opacity:0},transition:a,children:(0,h.jsx)(V,{initial:!1,mode:`popLayout`,custom:n.direction,children:(0,h.jsx)(U.span,{custom:n.direction,variants:Fx,initial:`enter`,animate:`center`,exit:`exit`,transition:a,children:e},e)})},i.length-t))})}function Rx({text:e}){let t=H(),n=e.split(` `);return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`span`,{className:Px.srOnly,children:e}),(0,h.jsx)(`span`,{className:Px.words,"aria-hidden":`true`,children:(0,h.jsx)(V,{initial:!1,mode:`popLayout`,children:n.map((e,r)=>(0,h.jsxs)(U.span,{className:Px.word,initial:t?{opacity:0}:{opacity:0,y:`0.35em`,filter:`blur(${Q.blur.soft}px)`},animate:{opacity:1,y:0,filter:`blur(0px)`},exit:t?{opacity:0,transition:{duration:0}}:{opacity:0,y:`-0.35em`,filter:`blur(${Q.blur.subtle}px)`,transition:{duration:Q.duration.exit,ease:[...Q.ease.standard]}},transition:t?{duration:Q.duration.instant}:{duration:Q.duration.standard,ease:[...Q.ease.enter]},children:[Ix(e)?(0,h.jsx)(Lx,{word:e}):e,r<n.length-1?` `:null]},`${r}:${Ix(e)?`#`:e}`))})})]})}function zx({id:e,text:t,className:n,alert:r}){return(0,h.jsx)(V,{initial:!1,children:t?(0,h.jsx)(Bx,{id:e,text:t,className:n,alert:r},`message`):null})}function Bx({id:e,text:t,className:n,alert:r}){let i=H(),a=(0,m.useRef)(null),[o,s]=(0,m.useState)(`auto`);return(0,m.useEffect)(()=>{let e=a.current;if(!e||typeof ResizeObserver>`u`)return;let t=new ResizeObserver(([t])=>s(t.borderBoxSize?.[0]?.blockSize??e.offsetHeight));return t.observe(e),()=>t.disconnect()},[]),(0,h.jsx)(U.span,{className:Px.messageSlot,initial:!i&&{height:0,opacity:0},animate:{height:o,opacity:1},exit:{height:0,opacity:0,transition:i?{duration:0}:{height:Q.spring.smooth,opacity:{duration:Q.duration.instant}}},transition:i?{duration:0}:{height:Q.spring.smooth,opacity:{duration:Q.duration.fast}},children:(0,h.jsx)(U.span,{ref:a,id:e,className:n,role:r?`alert`:void 0,initial:!i&&{y:`0.35em`,filter:`blur(${Q.blur.soft}px)`},animate:{y:0,filter:`blur(0px)`},transition:{duration:i?0:Q.duration.standard,ease:[...Q.ease.enter]},children:(0,h.jsx)(Rx,{text:t})})})}var Vx=(0,m.forwardRef)(function({label:e,description:t,error:n,id:r,className:i,...a},o){let s=(0,m.useId)(),c=r??s,l=t?`${c}-description`:void 0,u=n?`${c}-error`:void 0,d=[a[`aria-describedby`],l,u].filter(Boolean).join(` `)||void 0;return(0,h.jsxs)(`div`,{className:Px.field,children:[(0,h.jsx)(`label`,{className:Px.label,htmlFor:c,children:e}),(0,h.jsx)(`input`,{...a,id:c,ref:o,className:[Px.input,i].filter(Boolean).join(` `),"aria-invalid":n?!0:a[`aria-invalid`],"aria-describedby":d}),(0,h.jsx)(zx,{id:l,text:t,className:Px.description}),(0,h.jsx)(zx,{id:u,text:n,className:Px.error,alert:!0})]})});Vx.displayName=`Input`;var Hx={field:`_field_1t891_1`,shell:`_shell_1t891_4`,input:`_input_1t891_10`,clearSlot:`_clearSlot_1t891_14`},Ux=(0,m.forwardRef)(function({label:e,value:t,onValueChange:n,clearLabel:r=`Clear search`,id:i,className:a,...o},s){let c=(0,m.useId)(),l=i??c,u=H(),d=(0,m.useRef)(null),f=e=>{d.current=e,typeof s==`function`?s(e):s&&(s.current=e)};function p(){n(``),d.current?.focus()}return(0,h.jsxs)(`div`,{className:Hx.field,children:[(0,h.jsx)(`label`,{htmlFor:l,children:e}),(0,h.jsxs)(`div`,{className:Hx.shell,"data-filled":t?`true`:void 0,children:[(0,h.jsx)(n_,{width:18,height:18,"aria-hidden":`true`}),(0,h.jsx)(`input`,{...o,ref:f,id:l,type:`search`,value:t,onChange:e=>n(e.target.value),className:[Hx.input,a].filter(Boolean).join(` `)}),(0,h.jsx)(`span`,{className:Hx.clearSlot,children:(0,h.jsx)(V,{initial:!1,children:t?(0,h.jsx)(U.button,{type:`button`,tabIndex:0,onClick:p,"aria-label":r,initial:u?{opacity:0}:{opacity:0,scale:.8,filter:`blur(${Q.blur.subtle}px)`},animate:{opacity:1,scale:1,filter:`blur(0px)`},exit:u?{opacity:0,transition:{duration:0}}:{opacity:0,scale:.8,filter:`blur(${Q.blur.subtle}px)`,transition:{duration:Q.duration.instant,ease:[...Q.ease.standard]}},whileTap:u?void 0:{scale:.96,transition:{duration:Q.duration.instant,ease:[...Q.ease.standard]}},transition:u?{duration:Q.duration.instant}:{...Q.spring.snappy,opacity:{duration:Q.duration.fast},filter:{duration:Q.duration.fast}},children:(0,h.jsx)(o_,{width:16,height:16,"aria-hidden":`true`})},`clear`):null})})]})]})}),Wx={root:`_root_1ftc5_1`,track:`_track_1ftc5_3`,button:`_button_1ftc5_8`,selection:`_selection_1ftc5_11`,label:`_label_1ftc5_12`};function Gx({options:e,value:t,onValueChange:n,label:r,onOptionIntent:i,className:a}){let o=(0,m.useId)(),s=H(),c=(0,m.useRef)(null);(0,m.useLayoutEffect)(()=>{let e=c.current;if(!e)return;let t=()=>{let t=e.scrollWidth-e.clientWidth-e.scrollLeft;e.toggleAttribute(`data-fade-start`,e.scrollLeft>1),e.toggleAttribute(`data-fade-end`,t>1)};t(),e.addEventListener(`scroll`,t,{passive:!0});let n=typeof ResizeObserver>`u`?null:new ResizeObserver(t);return n?.observe(e),()=>{e.removeEventListener(`scroll`,t),n?.disconnect()}},[e.length]);let l=(0,m.useRef)(!0);(0,m.useEffect)(()=>{let e=c.current,t=e?.querySelector(`[aria-pressed="true"]`);if(!e||!t||e.scrollWidth<=e.clientWidth){l.current=!1;return}let n=t.offsetLeft-20,r=t.offsetLeft+t.offsetWidth+20-e.clientWidth,i=e.scrollLeft>n?n:e.scrollLeft<r?r:e.scrollLeft;i!==e.scrollLeft&&e.scrollTo({left:Math.max(0,i),behavior:l.current||s?`auto`:`smooth`}),l.current=!1},[t,s]);let u=Math.max(0,e.findIndex(e=>e.value===t)),d=t=>{let r=e.length-1,i=t.key===`ArrowRight`||t.key===`ArrowDown`?u===r?0:u+1:t.key===`ArrowLeft`||t.key===`ArrowUp`?u===0?r:u-1:t.key===`Home`?0:t.key===`End`?r:-1;i<0||!e[i]||(t.preventDefault(),n(e[i].value),c.current?.querySelector(`[data-value="${CSS.escape(e[i].value)}"]`)?.focus({preventScroll:!0}))};return(0,h.jsx)(`div`,{className:`${Wx.root} ${a??``}`,role:`group`,"aria-label":r,children:(0,h.jsx)(Vu,{id:o,children:(0,h.jsx)(U.div,{ref:c,layoutScroll:!0,className:Wx.track,children:e.map((e,r)=>(0,h.jsxs)(`button`,{id:`${o}-${e.value}`,className:Wx.button,type:`button`,"data-value":e.value,"aria-pressed":t===e.value,tabIndex:r===u?0:-1,onClick:()=>n(e.value),onKeyDown:d,onPointerEnter:i?()=>i(e.value):void 0,onFocus:i?()=>i(e.value):void 0,children:[t===e.value&&(0,h.jsx)(U.span,{className:Wx.selection,layoutId:`selection`,layoutDependency:t,transition:s?{duration:0}:Q.spring.morph,"aria-hidden":`true`}),(0,h.jsxs)(`span`,{className:Wx.label,children:[e.label,e.accessory]})]},e.value))})})})}var Kx={root:`_root_zuvxk_1`,avatar:`_avatar_zuvxk_3`,line:`_line_zuvxk_3`,"skeleton-pulse":`_skeleton-pulse_zuvxk_1`,lines:`_lines_zuvxk_5`,frame:`_frame_zuvxk_9`};function qx({className:e,busy:t,reduce:n,children:r}){let i=(0,m.useRef)(null),a=(0,m.useRef)(null),o=Ff(`auto`),s=(0,m.useRef)(0);return(0,m.useLayoutEffect)(()=>{s.current=performance.now()},[t]),(0,m.useEffect)(()=>{let e=a.current;if(!e||typeof ResizeObserver>`u`)return;let t,r,c=()=>{o.jump(`auto`),i.current&&Object.assign(i.current.style,{overflow:``,height:`auto`})},l=new ResizeObserver(([a])=>{let l=a.borderBoxSize?.[0]?.blockSize??e.offsetHeight,u=o.get(),d=typeof u==`number`?u:t;if(t=l,r?.stop(),n||d===void 0||d===l||performance.now()-s.current>120)return c();i.current&&Object.assign(i.current.style,{overflow:`hidden`,height:`${d}px`}),r=ip(o,[d,l],{...Q.spring.smooth,onComplete:c})});return l.observe(e),()=>{l.disconnect(),r?.stop()}},[o,n]),(0,h.jsx)(U.div,{ref:i,className:e,"aria-busy":t,style:{height:o},children:(0,h.jsx)(`div`,{ref:a,className:Kx.frame,children:r})})}function Jx({label:e=`Loading content`,lines:t=3,avatar:n=!1,className:r,children:i,loading:a=!0}){let o=H(),s=Math.min(Math.max(Math.floor(t),1),6),c=t=>(0,h.jsxs)(`div`,{className:[Kx.root,t].filter(Boolean).join(` `),role:`status`,"aria-label":e,"aria-busy":`true`,children:[n&&(0,h.jsx)(`span`,{className:Kx.avatar,"aria-hidden":`true`}),(0,h.jsx)(`span`,{className:Kx.lines,"aria-hidden":`true`,children:Array.from({length:s},(e,t)=>(0,h.jsx)(`span`,{className:Kx.line,style:{"--index":t+ +!!n}},t))})]});return i===void 0?c(r):(0,h.jsx)(qx,{className:r,busy:a,reduce:o,children:(0,h.jsx)(V,{mode:`popLayout`,initial:!1,children:a?(0,h.jsx)(U.div,{initial:{opacity:0},animate:{opacity:1},transition:{duration:o?Q.duration.instant:Q.duration.fast,ease:[...Q.ease.standard]},exit:{opacity:0,transition:{duration:o?Q.duration.instant:Q.duration.fast}},children:c()},`placeholder`):(0,h.jsx)(U.div,{initial:o?{opacity:0}:{opacity:0,y:4},animate:{opacity:1,y:0},exit:{opacity:0,transition:{duration:o?Q.duration.instant:Q.duration.fast}},transition:{duration:o?Q.duration.instant:Q.duration.standard,ease:[...Q.ease.enter]},children:i},`content`)})})}var Yx=Object.defineProperty,Xx=(e,t)=>Yx(e,`name`,{value:t,configurable:!0});function Zx(e){let[t,n]=m.useState(void 0);return Pv(()=>{if(e){n({width:e.offsetWidth,height:e.offsetHeight});let t=0,r=new ResizeObserver(r=>{if(!Array.isArray(r)||!r.length)return;let i=r[0];window.cancelAnimationFrame(t),t=window.requestAnimationFrame(()=>{let t,r;if(`borderBoxSize`in i){let e=i.borderBoxSize,n=Array.isArray(e)?e[0]:e;t=n.inlineSize,r=n.blockSize}else t=e.offsetWidth,r=e.offsetHeight;n({width:t,height:r})})});return r.observe(e,{box:`border-box`}),()=>{window.cancelAnimationFrame(t),r.unobserve(e)}}n(void 0)},[e]),t}Xx(Zx,`useSize`);var Qx=Object.defineProperty,$x=(e,t)=>Qx(e,`name`,{value:t,configurable:!0}),eS=`Switch`,[tS,nS]=G_(eS),[rS,iS]=tS(eS);function aS(e){let{__scopeSwitch:t,checked:n,children:r,defaultChecked:i,disabled:a,form:o,name:s,onCheckedChange:c,required:l,value:u=`on`,internal_do_not_use_render:d}=e,[f,p]=Uv({prop:n,defaultProp:i??!1,onChange:c,caller:eS}),[g,_]=m.useState(null),[v,y]=m.useState(null),b=m.useRef(!1),[x,S]=m.useReducer(e=>e+1,0),C={checked:f,setChecked:p,disabled:a,control:g,setControl:_,name:s,form:o,value:u,hasConsumerStoppedPropagationRef:b,userInteractionCount:x,onUserInteraction:S,required:l,defaultChecked:i,isFormControl:!g||!!o||!!g.closest(`form`),bubbleInput:v,setBubbleInput:y};return(0,h.jsx)(rS,{scope:t,...C,children:dS(d)?d(C):r})}$x(aS,`SwitchProvider`);var oS=`SwitchTrigger`,sS=m.forwardRef($x(function({__scopeSwitch:e,onClick:t,...n},r){let{control:i,form:a,value:o,disabled:s,checked:c,required:l,setControl:u,setChecked:d,hasConsumerStoppedPropagationRef:f,onUserInteraction:p,isFormControl:g,bubbleInput:_}=iS(oS,e),v=Z_(r,u),y=m.useRef(c);return m.useEffect(()=>{let e=a?i?.ownerDocument.getElementById(a):i?.form;if(e instanceof HTMLFormElement){let t=$x(()=>d(y.current),`reset`);return e.addEventListener(`reset`,t),()=>e.removeEventListener(`reset`,t)}},[i,a,d]),(0,h.jsx)(Zv.button,{type:`button`,role:`switch`,"aria-checked":c,"aria-required":l,"data-state":fS(c),"data-disabled":s?``:void 0,disabled:s,value:o,...n,ref:v,onClick:kv(t,e=>{p(),d(e=>!e),_&&g&&(f.current=e.isPropagationStopped(),f.current||e.stopPropagation())})})},`SwitchTrigger`)),cS=m.forwardRef($x(function(e,t){let{__scopeSwitch:n,name:r,checked:i,defaultChecked:a,required:o,disabled:s,value:c,onCheckedChange:l,form:u,...d}=e;return(0,h.jsx)(aS,{__scopeSwitch:n,checked:i,defaultChecked:a,disabled:s,required:o,onCheckedChange:l,name:r,form:u,value:c,internal_do_not_use_render:({isFormControl:e})=>(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(sS,{...d,ref:t,__scopeSwitch:n}),e&&(0,h.jsx)(uS,{__scopeSwitch:n})]})})},`Switch`)),lS=`SwitchBubbleInput`,uS=m.forwardRef($x(function({__scopeSwitch:e,onClick:t,...n},r){let{control:i,hasConsumerStoppedPropagationRef:a,userInteractionCount:o,checked:s,defaultChecked:c,required:l,disabled:u,name:d,value:f,form:p,bubbleInput:g,setBubbleInput:_}=iS(lS,e),v=Z_(r,_),y=Zx(i),b=m.useRef(!1),x=m.useRef(s),S=m.useRef(o);m.useEffect(()=>{let e=g;if(!e)return;let t=window.HTMLInputElement.prototype,n=Object.getOwnPropertyDescriptor(t,`checked`).set,r=o!==S.current;S.current=o;let i=x.current!==s;x.current=s;let c=!(r&&a.current);if(i&&n){b.current=!r;let t=new Event(`click`,{bubbles:c});n.call(e,s),e.dispatchEvent(t),b.current=!1}},[g,s,a,o]);let C=m.useRef(s);return(0,h.jsx)(Zv.input,{type:`checkbox`,"aria-hidden":!0,defaultChecked:c??C.current,required:l,disabled:u,name:d,value:f,form:p,...n,tabIndex:-1,ref:v,onClick:kv(t,e=>{b.current&&e.stopPropagation()}),style:{...n.style,...y,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0,transform:`translateX(-100%)`}})},`SwitchBubbleInput`));function dS(e){return typeof e==`function`}$x(dS,`isFunction`);function fS(e){return e?`checked`:`unchecked`}$x(fS,`getState`);var pS={switch:`_switch_ktcw0_1`,track:`_track_ktcw0_4`,thumb:`_thumb_ktcw0_7`,label:`_label_ktcw0_11`},mS=18,hS=18,gS=5,_S={type:`spring`,visualDuration:.3,bounce:0},vS=(0,m.forwardRef)(function({label:e,className:t,checked:n,defaultChecked:r,onCheckedChange:i,onPointerDown:a,onPointerUp:o,onPointerLeave:s,onPointerCancel:c,onKeyDown:l,onKeyUp:u,onBlur:d,...f},p){let g=H(),[_,v]=(0,m.useState)(r??!1),[y,b]=(0,m.useState)(!1),x=n??_,S=Ff(1),C=(0,m.useRef)(x),ee=(0,m.useRef)(-1/0);(0,m.useEffect)(()=>{if(C.current===x)return;C.current=x;let e=performance.now()-ee.current<250;if(g||e)return;let t=ip(S,[1,1.16,1],{duration:.34,times:[0,.4,1],ease:[`easeOut`,`easeInOut`]});return()=>t.stop()},[x,g,S]);let w=y&&!g&&!f.disabled?gS:0,te=[pS.switch,t].filter(Boolean).join(` `);return(0,h.jsxs)(cS,{...f,ref:p,checked:x,onCheckedChange:e=>{n===void 0&&v(e),i?.(e)},onPointerDown:e=>{a?.(e),e.button===0&&b(!0)},onPointerUp:e=>{o?.(e),y&&!f.disabled&&(ee.current=performance.now()),b(!1)},onPointerLeave:e=>{s?.(e),b(!1)},onPointerCancel:e=>{c?.(e),b(!1)},onKeyDown:e=>{l?.(e),e.key===` `&&b(!0)},onKeyUp:e=>{u?.(e),y&&!f.disabled&&(ee.current=performance.now()),b(!1)},onBlur:e=>{d?.(e),b(!1)},className:te,"aria-label":f[`aria-label`]??e,children:[(0,h.jsx)(`span`,{className:pS.track,children:(0,h.jsx)(U.span,{className:pS.thumb,style:{scaleX:S},initial:!1,animate:{x:x?hS-w:0,width:mS+w},transition:g?{duration:0}:{x:_S,width:Q.spring.snappy}})}),e?(0,h.jsx)(`span`,{className:pS.label,children:e}):null]})});vS.displayName=`Switch`;var yS={field:`_field_mxljp_1`,control:`_control_mxljp_4`,messageSlot:`_messageSlot_mxljp_11`,hint:`_hint_mxljp_12`,error:`_error_mxljp_12`,words:`_words_mxljp_15`,word:`_word_mxljp_15`,column:`_column_mxljp_18`,srOnly:`_srOnly_mxljp_20`},bS={enter:e=>({opacity:0,y:`${e*.6}em`,filter:`blur(${Q.blur.subtle}px)`}),center:{opacity:1,y:0,filter:`blur(0px)`},exit:e=>({opacity:0,y:`${e*-.6}em`,filter:`blur(${Q.blur.subtle}px)`})},xS=e=>/^\d[\d.,/:]*%?$/.test(e);function SS({word:e}){let t=H(),[n,r]=(0,m.useState)({word:e,direction:1});n.word!==e&&r({word:e,direction:parseFloat(e.replace(/,/g,``))<parseFloat(n.word.replace(/,/g,``))?-1:1});let i=e.split(``),a=t?{duration:0}:{y:Q.spring.snappy,width:Q.spring.morph,opacity:{duration:Q.duration.fast},filter:{duration:Q.duration.fast}};return(0,h.jsx)(V,{initial:!1,children:i.map((e,t)=>(0,h.jsx)(U.span,{className:yS.column,initial:{width:0,opacity:0},animate:{width:`auto`,opacity:1},exit:{width:0,opacity:0},transition:a,children:(0,h.jsx)(V,{initial:!1,mode:`popLayout`,custom:n.direction,children:(0,h.jsx)(U.span,{custom:n.direction,variants:bS,initial:`enter`,animate:`center`,exit:`exit`,transition:a,children:e},e)})},i.length-t))})}function CS({text:e}){let t=H(),n=e.split(` `);return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`span`,{className:yS.srOnly,children:e}),(0,h.jsx)(`span`,{className:yS.words,"aria-hidden":`true`,children:(0,h.jsx)(V,{initial:!1,mode:`popLayout`,children:n.map((e,r)=>(0,h.jsxs)(U.span,{className:yS.word,initial:t?{opacity:0}:{opacity:0,y:`0.35em`,filter:`blur(${Q.blur.soft}px)`},animate:{opacity:1,y:0,filter:`blur(0px)`},exit:t?{opacity:0,transition:{duration:0}}:{opacity:0,y:`-0.35em`,filter:`blur(${Q.blur.subtle}px)`,transition:{duration:Q.duration.fast,ease:[...Q.ease.standard]}},transition:t?{duration:Q.duration.instant}:{duration:Q.duration.standard,ease:[...Q.ease.enter]},children:[xS(e)?(0,h.jsx)(SS,{word:e}):e,r<n.length-1?` `:null]},`${r}:${xS(e)?`#`:e}`))})})]})}function wS({id:e,text:t,className:n,alert:r}){return(0,h.jsx)(V,{initial:!1,children:t?(0,h.jsx)(TS,{id:e,text:t,className:n,alert:r},`message`):null})}function TS({id:e,text:t,className:n,alert:r}){let i=H(),a=(0,m.useRef)(null),[o,s]=(0,m.useState)(`auto`);return(0,m.useEffect)(()=>{let e=a.current;if(!e||typeof ResizeObserver>`u`)return;let t=new ResizeObserver(([t])=>s(t.borderBoxSize?.[0]?.blockSize??e.offsetHeight));return t.observe(e),()=>t.disconnect()},[]),(0,h.jsx)(U.span,{className:yS.messageSlot,initial:!i&&{height:0,opacity:0},animate:{height:o,opacity:1},exit:{height:0,opacity:0,transition:i?{duration:0}:{height:Q.spring.smooth,opacity:{duration:Q.duration.instant}}},transition:i?{duration:0}:{height:Q.spring.smooth,opacity:{duration:Q.duration.fast}},children:(0,h.jsx)(U.span,{ref:a,id:e,className:n,role:r?`alert`:void 0,initial:!i&&{y:`0.35em`,filter:`blur(${Q.blur.soft}px)`},animate:{y:0,filter:`blur(0px)`},transition:{duration:i?0:Q.duration.standard,ease:[...Q.ease.enter]},children:(0,h.jsx)(CS,{text:t})})})}var ES=(0,m.forwardRef)(function({label:e,description:t,error:n,id:r,className:i,...a},o){let s=(0,m.useId)(),c=r??s,l=t?`${c}-description`:void 0,u=n?`${c}-error`:void 0;return(0,h.jsxs)(`div`,{className:yS.field,children:[(0,h.jsx)(`label`,{htmlFor:c,children:e}),(0,h.jsx)(`textarea`,{...a,id:c,ref:o,className:[yS.control,i].filter(Boolean).join(` `),"aria-invalid":n?!0:a[`aria-invalid`],"aria-describedby":[a[`aria-describedby`],l,u].filter(Boolean).join(` `)||void 0}),(0,h.jsx)(wS,{id:l,text:t,className:yS.hint}),(0,h.jsx)(wS,{id:u,text:n,className:yS.error,alert:!0})]})}),DS=(0,m.createContext)(null);function OS(e,t){let n=(0,m.useContext)(DS);return{field:n,label:e??n?.label??t??``,hidden:e===void 0&&n===null}}function kS({label:e,hint:t,error:n,children:r,className:i}){let a=typeof t==`string`?t:void 0;return(0,h.jsxs)(`div`,{className:b_(`flex min-w-0 flex-col`,i),children:[(0,h.jsx)(DS.Provider,{value:{label:e,description:a,error:n},children:r}),t!==void 0&&a===void 0&&!n&&(0,h.jsx)(`div`,{className:`mt-2 text-[11px] text-[var(--text-muted)]`,children:t})]})}var AS={primary:`primary`,glass:`secondary`,plain:`ghost`,destructive:`danger`},jS=(0,m.forwardRef)(function({variant:e=`glass`,size:t=`md`,icon:n,children:r,style:i,type:a=`button`,...o},s){let c=r==null||r===!1,l={...e===`primary`&&{background:`var(--accent)`,borderColor:`var(--accent)`,color:`var(--on-accent)`},...c&&{paddingInline:0,width:t===`sm`?`var(--control-height-sm)`:`var(--control-height-md)`},...i};return(0,h.jsxs)(Wb,{ref:s,type:a,variant:AS[e],size:t,style:l,...o,children:[n,r]})});function MS({items:e,value:t,onChange:n,className:r,ariaLabel:i}){return(0,h.jsx)(Gx,{className:r,label:i,value:t,onValueChange:e=>n(e),options:e.map(e=>({value:e.value,label:e.label,accessory:e.accessory}))})}function NS({checked:e,onChange:t,disabled:n,label:r}){return(0,h.jsx)(vS,{checked:e,onCheckedChange:t,disabled:n,"aria-label":r,onClick:e=>e.stopPropagation()})}function PS({title:e,footer:t,children:n,className:r}){return(0,h.jsxs)(`section`,{className:b_(`mb-5`,r),children:[e&&(0,h.jsx)(`h3`,{className:`mb-2 px-1 text-[12px] font-medium text-[var(--text-secondary)]`,children:e}),(0,h.jsx)(`div`,{className:`card divide-y divide-[var(--border)]`,children:n}),t&&(0,h.jsx)(`p`,{className:`mt-2 px-1 text-[11px] text-[var(--text-muted)]`,children:t})]})}function FS({label:e,detail:t,icon:n,children:r,onClick:i,selected:a,className:o}){return(0,h.jsxs)(`div`,{...i?{role:`button`,tabIndex:0,onClick:i,onKeyDown:e=>{e.target===e.currentTarget&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),i())}}:{},className:b_(`flex min-h-11 w-full items-center gap-3 px-4 py-2 text-left`,i&&`cursor-default transition-colors hover:bg-[var(--surface-muted)]`,a&&`bg-[var(--accent-subtle)]`,o),children:[n,(0,h.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,h.jsx)(`div`,{className:`truncate text-[13px]`,children:e}),t&&(0,h.jsx)(`div`,{className:`truncate text-[11px] text-[var(--text-secondary)]`,children:t})]}),r!==void 0&&(0,h.jsx)(`div`,{className:`flex shrink-0 items-center gap-2`,children:r})]})}var IS={fontFamily:`var(--font-mono)`,fontSize:`12px`},LS=(0,m.forwardRef)(function({className:e,invalid:t,label:n,mono:r,style:i,...a},o){let s=OS(n,a[`aria-label`]??a.placeholder);return(0,h.jsx)(`div`,{className:b_(`min-w-0`,s.hidden&&`astra-label-hidden`,e),children:(0,h.jsx)(Vx,{ref:o,label:s.label,description:s.field?.description,error:s.field?.error,"aria-invalid":t||void 0,style:r?{...IS,...i}:i,...a})})}),RS=(0,m.forwardRef)(function({className:e,invalid:t,label:n,mono:r,style:i,...a},o){let s=OS(n,a[`aria-label`]??a.placeholder);return(0,h.jsx)(`div`,{className:b_(`min-w-0`,s.hidden&&`astra-label-hidden`,e),children:(0,h.jsx)(ES,{ref:o,label:s.label,description:s.field?.description,error:s.field?.error,"aria-invalid":t||void 0,style:r?{...IS,...i}:i,...a})})});function zS({value:e,onChange:t,className:n,placeholder:r,step:i,min:a,label:o}){return(0,h.jsx)(LS,{type:`number`,inputMode:`decimal`,step:i??`any`,min:a,"aria-label":o,placeholder:r,className:n,style:{fontVariantNumeric:`tabular-nums`,textAlign:`right`},value:e??``,onChange:e=>{let n=e.target.value;if(n===``)return t(null);let r=Number(n);Number.isNaN(r)||t(r)}})}function BS({value:e,onChange:t,placeholder:n,inputRef:r,className:i,clearLabel:a}){return(0,h.jsx)(`div`,{className:b_(`astra-label-hidden min-w-0`,i),children:(0,h.jsx)(Ux,{ref:r,label:n??`Search`,placeholder:n,value:e,onValueChange:t,clearLabel:a})})}var VS={neutral:`neutral`,accent:`info`,green:`success`,orange:`warning`,red:`danger`};function HS({tone:e=`neutral`,children:t,className:n,title:r}){return(0,h.jsx)(Ab,{tone:VS[e],size:`sm`,className:b_(`shrink-0`,n),title:r,children:t})}function US({tone:e}){let t={green:`var(--success)`,orange:`var(--warning)`,red:`var(--danger)`,neutral:`var(--text-muted)`}[e];return(0,h.jsx)(`span`,{className:`inline-block size-2 shrink-0 rounded-full`,style:{background:t}})}function WS({children:e,size:t=20,className:n}){return(0,h.jsx)(`span`,{className:b_(`inline-flex shrink-0 items-center justify-center text-[var(--text-secondary)]`,n),style:{width:t,height:t},children:e})}function GS({label:e,children:t,mono:n}){return(0,h.jsxs)(`div`,{className:`flex items-baseline justify-between gap-3 py-1 text-[12px]`,children:[(0,h.jsx)(`span`,{className:`shrink-0 text-[var(--text-secondary)]`,children:e}),(0,h.jsx)(`span`,{className:b_(`min-w-0 truncate text-right selectable`,n&&`font-mono text-[11px]`),children:t})]})}function KS({children:e,maxHeight:t=320,language:n=`json`,filename:r}){return(0,h.jsx)(Sx,{code:e,language:n,filename:r,maxLines:Math.max(4,Math.round(t/22))})}function qS({className:e,lines:t=2}){return(0,h.jsx)(Jx,{className:e,lines:t})}function JS({icon:e,title:t,detail:n,action:r}){return(0,h.jsx)(`div`,{className:`px-6 py-12`,children:(0,h.jsx)(Nx,{icon:e,title:t,description:n??``,action:r})})}function YS({children:e,action:t}){return(0,h.jsxs)(`div`,{className:`mb-2 flex items-center justify-between gap-2 px-1`,children:[(0,h.jsx)(`h2`,{className:`text-[13px] font-medium`,children:e}),t]})}function XS({title:e,action:t,children:n,className:r}){return(0,h.jsxs)(`section`,{className:r,children:[(0,h.jsxs)(`div`,{className:`mb-2 flex items-center justify-between gap-2`,children:[(0,h.jsx)(`h3`,{className:`text-[12px] font-medium text-[var(--text-secondary)]`,children:e}),t]}),n]})}function ZS({title:e,children:t}){return(0,h.jsx)(bb,{items:[{title:e,content:t}],defaultOpen:-1})}var QS={presence:`_presence_1m2d3_1`,alert:`_alert_1m2d3_2`,icon:`_icon_1m2d3_3`,glyph:`_glyph_1m2d3_3`,copy:`_copy_1m2d3_6`,content:`_content_1m2d3_7`,title:`_title_1m2d3_8`,line:`_line_1m2d3_9`,description:`_description_1m2d3_10`,info:`_info_1m2d3_11`,success:`_success_1m2d3_11`,warning:`_warning_1m2d3_11`,danger:`_danger_1m2d3_11`,dismiss:`_dismiss_1m2d3_12`},$S={info:Qg,success:Ig,warning:i_,danger:Hg},eC={duration:Q.duration.fast,ease:[...Q.ease.standard]},tC={opacity:0,y:`0.3em`,filter:`blur(${Q.blur.soft}px)`},nC={opacity:0,y:`-0.3em`,filter:`blur(${Q.blur.subtle}px)`,transition:eC},rC={opacity:0,scale:.6,filter:`blur(${Q.blur.subtle}px)`},iC={opacity:1,y:`0em`,scale:1,filter:`blur(0px)`},aC={opacity:0,transition:{duration:Q.duration.instant}};function oC(e){let t=Mu();return(0,h.jsx)(U.span,{...e,"aria-hidden":!t||e[`aria-hidden`]})}function sC({className:e,reduce:t,morphKey:n,children:r}){let i=(0,m.useRef)(null),a=(0,m.useRef)(null),o=Ff(`auto`),s=(0,m.useRef)(0);return(0,m.useLayoutEffect)(()=>{s.current=performance.now()},[n]),(0,m.useEffect)(()=>{let e=a.current;if(!e||typeof ResizeObserver>`u`)return;let n,r,c=()=>{o.jump(`auto`),i.current&&Object.assign(i.current.style,{overflow:``,height:`auto`})},l=new ResizeObserver(([a])=>{let l=a.borderBoxSize?.[0]?.blockSize??e.offsetHeight,u=o.get(),d=typeof u==`number`?u:n;if(n=l,r?.stop(),t||d===void 0||d===l||performance.now()-s.current>120)return c();i.current&&Object.assign(i.current.style,{overflow:`hidden`,height:`${d}px`}),r=ip(o,[d,l],{...Q.spring.smooth,onComplete:c})});return l.observe(e),()=>{l.disconnect(),r?.stop()}},[o,t]),(0,h.jsx)(U.div,{ref:i,className:e,style:{height:o},children:(0,h.jsx)(`div`,{ref:a,className:QS.content,children:r})})}function cC({tone:e=`info`,title:t,children:n,className:r,reduce:i,onDismiss:a,animateIcon:o=!1,...s}){let c=$S[e],l=typeof n==`string`||typeof n==`number`?String(n):null,u=n!=null&&n!==!1&&n!==``,d=i?{duration:Q.duration.instant}:{duration:Q.duration.standard,ease:[...Q.ease.enter]},f={initial:i?{opacity:0}:tC,animate:iC,exit:i?aC:nC,transition:d};return(0,h.jsxs)(`div`,{...s,className:[QS.alert,QS[e],r].filter(Boolean).join(` `),role:e===`danger`?`alert`:`status`,children:[(0,h.jsx)(U.span,{className:QS.icon,initial:o&&!i?rC:!1,animate:iC,transition:Q.spring.snappy,children:(0,h.jsx)(V,{mode:`popLayout`,initial:!1,children:(0,h.jsx)(oC,{className:QS.glyph,initial:i?{opacity:0}:rC,animate:iC,exit:i?aC:{...rC,transition:eC},transition:i?d:Q.spring.snappy,children:(0,h.jsx)(c,{width:18,height:18,"aria-hidden":`true`})},e)})}),(0,h.jsxs)(sC,{className:QS.copy,reduce:i,morphKey:`${t}\n${u}\n${l??``}`,children:[(0,h.jsx)(`strong`,{className:QS.title,children:(0,h.jsx)(V,{mode:`popLayout`,initial:!1,children:(0,h.jsx)(oC,{className:QS.line,...f,children:t},t)})}),(0,h.jsx)(V,{mode:`popLayout`,initial:!1,children:u&&(0,h.jsx)(U.p,{className:QS.description,...f,children:l===null?n:(0,h.jsx)(V,{mode:`popLayout`,initial:!1,children:(0,h.jsx)(oC,{className:QS.line,...f,children:l},l)})},`details`)})]}),a&&(0,h.jsx)(`button`,{type:`button`,className:QS.dismiss,"aria-label":`Dismiss: ${t}`,onClick:a,children:(0,h.jsx)(o_,{width:16,height:16,strokeWidth:1.75,"aria-hidden":`true`})})]})}function lC({open:e,onDismiss:t,...n}){let r=H(),[i,a]=(0,m.useState)(!1),o=(0,m.useRef)(null),s=e=>{o.current&&(o.current.style.overflow=e)};if(e===void 0&&!t)return(0,h.jsx)(cC,{...n,reduce:r});let c=e??!i,l=t&&(()=>e===void 0?a(!0):t()),u=r?{duration:0}:{height:Q.spring.smooth,opacity:{duration:Q.duration.standard,ease:[...Q.ease.enter]}},d={height:0,opacity:0,transition:r?{duration:0}:{height:Q.spring.smooth,opacity:eC}};return(0,h.jsx)(V,{initial:!1,onExitComplete:()=>{e===void 0&&t?.()},children:c&&(0,h.jsx)(U.div,{className:QS.presence,initial:{height:0,opacity:0},animate:{height:`auto`,opacity:1},exit:d,transition:u,ref:o,onAnimationStart:()=>s(`hidden`),onAnimationComplete:()=>s(``),children:(0,h.jsx)(cC,{...n,reduce:r,onDismiss:l,animateIcon:!0})},`alert`)})}export{R_ as $,re as $i,Qm as $n,Jp as $r,Yp as $t,Zv as A,F as Ai,ng as An,Xp as Ar,mg as At,j_ as B,nt as Bi,Vm as Bn,vg as Br,gh as Bt,Zx as C,ju as Ci,kp as Cn,dh as Cr,qh as Ct,jy as D,Sa as Di,zh as Dn,Zh as Dr,jh as Dt,Q as E,Ta as Ei,Bp as En,Oh as Er,Pm as Et,hv as F,it as Fi,Wh as Fn,kh as Fr,eh as Ft,T_ as G,Le as Gi,Em as Gn,Fm as Gr,Xm as Gt,L_ as H,Ze as Hi,ih as Hn,Lh as Hr,$m as Ht,ev as I,ot as Ii,Xh as In,Lp as Ir,fh as It,D_ as J,we as Ji,tm as Jn,Rp as Jr,am as Jt,A_ as K,Oe as Ki,Om as Kn,Sm as Kr,_g as Kt,nv as L,at as Li,$h as Ln,_h as Lr,lh as Lt,Uv as M,lt as Mi,Ph as Mn,$p as Mr,gg as Mt,Pv as N,D as Ni,Uh as Nn,pm as Nr,vm as Nt,fy as O,Nr as Oi,Qh as On,Lm as Or,Ih as Ot,kv as P,E as Pi,Gh as Pn,dg as Pr,Dp as Pt,w_ as Q,ie as Qi,lm as Qn,cg as Qr,Kp as Qt,Z_ as R,tt as Ri,eg as Rn,Ah as Rr,zp as Rt,OS as S,Mu as Si,Op as Sn,Qp as Sr,Kh as St,bb as T,Co as Ti,Vp as Tn,Bm as Tr,qm as Tt,N_ as U,qe as Ui,Hp as Un,Tm as Ur,Zm as Ut,P_ as V,et as Vi,Vh as Vn,Gp as Vr,uh as Vt,O_ as W,Ve as Wi,wm as Wn,om as Wr,Wm as Wt,E_ as X,ee as Xi,ym as Xn,bh as Xr,sg as Xt,k_ as Y,Ce as Yi,km as Yn,Rm as Yr,yh as Yt,C_ as Z,ae as Zi,em as Zn,Fp as Zr,yg as Zt,MS as _,ip as _i,im as _n,Mp as _r,Ig as _t,XS as a,le as aa,Cp as ai,Ip as an,Im as ar,h_ as at,RS as b,Vu as bi,Hm as bn,sm as br,bg as bt,JS as c,_ as ca,_p as ci,ah as cn,wh as cr,o_ as ct,LS as d,o as da,hp as di,sh as dn,xh as dr,e_ as dt,ne as ea,Ep as ei,cm as en,pg as er,z_ as et,GS as f,s as fa,vp as fi,Tp as fn,ug as fr,Xg as ft,YS as g,U as gi,ig as gn,hh as gr,Rg as gt,BS as h,op as hi,Km as hn,fm as hr,Bg as ht,KS as i,T as ia,W as ii,lg as in,Bh as ir,b_ as it,Qv as j,ut as ji,Nh as jn,_m as jr,hg as jt,ny as k,pr as ki,tg as kn,Zp as kr,xm as kt,kS as l,p as la,cp as li,Mm as ln,Ym as lr,i_ as lt,FS as m,gp as mi,Um as mn,Ch as mr,Hg as mt,HS as n,oe as na,ag as ni,Cm as nn,gm as nr,V_ as nt,ZS as o,_e as oa,K as oi,oh as on,Th as or,g_ as ot,zS as p,l as pa,pp as pi,Jm as pn,ch as pr,Wg as pt,M_ as q,De as qi,Dm as qn,jp as qr,Wp as qt,jS as r,ce as ra,yp as ri,Sh as rn,Rh as rr,B_ as rt,US as s,v as sa,sp as si,mm as sn,Eh as sr,__ as st,lC as t,C as ta,fg as ti,zm as tn,jm as tr,H_ as tt,PS as u,d as ua,mp as ui,dm as un,qp as ur,n_ as ut,qS as v,H as vi,rm as vn,nh as vr,J as vt,ux as w,Cu as wi,rg as wn,Yh as wr,hm as wt,WS as x,V as xi,Gm as xn,Ap as xr,q as xt,NS as y,Ff as yi,Hh as yn,rh as yr,xg as yt,G_ as z,rt as zi,Mh as zn,Pp as zr,mh as zt};