@aidotnet/server-darwin-arm64 0.9.4 → 0.9.7

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 (54) hide show
  1. package/bin/astra-server +2 -2
  2. package/bin/wwwroot/assets/ClientsPage-DEetiYfc.js +9 -0
  3. package/bin/wwwroot/assets/KeyPage-cq7HprCR.js +1 -0
  4. package/bin/wwwroot/assets/ModelDetailPage-Uj6p-r8V.js +1 -0
  5. package/bin/wwwroot/assets/ModelsPage-B-l5oEGF.js +1 -0
  6. package/bin/wwwroot/assets/PluginsPage-BH9KjyfC.js +2 -0
  7. package/bin/wwwroot/assets/PrivacyPage-C5XhVKZd.js +1 -0
  8. package/bin/wwwroot/assets/ProviderDetailPage-uLPHWm2i.js +3 -0
  9. package/bin/wwwroot/assets/ProvidersPage-CNU_ji4e.js +2 -0
  10. package/bin/wwwroot/assets/SettingsPage-B3tbYdLW.js +2 -0
  11. package/bin/wwwroot/assets/TokenDetailPage-BVyb_-ev.js +1 -0
  12. package/bin/wwwroot/assets/TokenPoolEditor-7LX143SO.js +1 -0
  13. package/bin/wwwroot/assets/TokensPage-vRrXvqkK.js +1 -0
  14. package/bin/wwwroot/assets/{TracesPage-Bzy2gUvV.js → TracesPage-C9mYB_7E.js} +2 -2
  15. package/bin/wwwroot/assets/{TrayPanelPage-BZS_htv0.js → TrayPanelPage-NIkRrLCt.js} +1 -1
  16. package/bin/wwwroot/assets/{TrayPanelView-CYoAUUiY.js → TrayPanelView-BpQQa0qi.js} +1 -1
  17. package/bin/wwwroot/assets/alert-CN1yWco4.js +15 -0
  18. package/bin/wwwroot/assets/{arrow-down-7oFM4dM3.js → arrow-down-DP0xP3tk.js} +1 -1
  19. package/bin/wwwroot/assets/{arrow-left-Dn6_YDkh.js → arrow-left-UUQiUGQ1.js} +1 -1
  20. package/bin/wwwroot/assets/{checkbox-DzIMWhhw.js → checkbox-BEWRhO5r.js} +1 -1
  21. package/bin/wwwroot/assets/{cloud-download-Bvry8vmS.js → cloud-download-DebyBXx2.js} +1 -1
  22. package/bin/wwwroot/assets/confirm-morph-DwiVsert.js +1 -0
  23. package/bin/wwwroot/assets/{download-5xAFYJ6Q.js → download-C4--ZCHf.js} +1 -1
  24. package/bin/wwwroot/assets/{ellipsis-Dxds5r72.js → ellipsis-D250KISp.js} +1 -1
  25. package/bin/wwwroot/assets/{external-link-Bq_1v6I1.js → external-link-Bnshhxip.js} +1 -1
  26. package/bin/wwwroot/assets/{folder-open-BXsxEYtm.js → folder-open-BzVuhS53.js} +1 -1
  27. package/bin/wwwroot/assets/{index-mlmGhWY4.js → index-CBrXkG99.js} +10 -10
  28. package/bin/wwwroot/assets/index-DE_l9Wt4.css +1 -0
  29. package/bin/wwwroot/assets/{log-out-B9HHsF8m.js → log-out-DEZofPIg.js} +1 -1
  30. package/bin/wwwroot/assets/minus-BAoIEc33.js +1 -0
  31. package/bin/wwwroot/assets/overlays-D2pWmtov.js +41 -0
  32. package/bin/wwwroot/assets/{pencil-BAzRd1Ro.js → pencil-DuD1bQje.js} +1 -1
  33. package/bin/wwwroot/assets/{power-DrpargJA.js → power-LE8gLJKc.js} +1 -1
  34. package/bin/wwwroot/assets/radio-cards-D1yOuSfh.js +1 -0
  35. package/bin/wwwroot/assets/{rotate-ccw-D6r7Boub.js → rotate-ccw-Cx9vNOkF.js} +1 -1
  36. package/bin/wwwroot/assets/sortable.esm-B0eMzUNN.js +5 -0
  37. package/bin/wwwroot/index.html +4 -4
  38. package/package.json +1 -1
  39. package/bin/wwwroot/assets/ClientsPage-DzZnCU7V.js +0 -12
  40. package/bin/wwwroot/assets/KeyPage-CtHw5I7A.js +0 -1
  41. package/bin/wwwroot/assets/ModelDetailPage-KY2k0x3l.js +0 -1
  42. package/bin/wwwroot/assets/ModelsPage-Bo8oA3Zb.js +0 -1
  43. package/bin/wwwroot/assets/PluginsPage-BMP78mVY.js +0 -2
  44. package/bin/wwwroot/assets/PrivacyPage-BgldsSQj.js +0 -1
  45. package/bin/wwwroot/assets/ProviderDetailPage-B6EfUhXb.js +0 -3
  46. package/bin/wwwroot/assets/ProvidersPage-DclHIvR2.js +0 -2
  47. package/bin/wwwroot/assets/SettingsPage-D29CZiaV.js +0 -2
  48. package/bin/wwwroot/assets/TokensPage-CaF-wXlr.js +0 -1
  49. package/bin/wwwroot/assets/alert-CGUFPyGb.js +0 -15
  50. package/bin/wwwroot/assets/confirm-morph-DnwMPT3r.js +0 -1
  51. package/bin/wwwroot/assets/index-BXZibBui.css +0 -1
  52. package/bin/wwwroot/assets/minus-BVd6Aw9t.js +0 -1
  53. package/bin/wwwroot/assets/overlays-B1a0OZYb.js +0 -41
  54. package/bin/wwwroot/assets/radio-cards-Cr0tP9In.js +0 -1
@@ -1,15 +0,0 @@
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,k=e=>e/1e3,wt=(e,t)=>t?1e3/t*e:0,Tt=(e,t,n)=>{let r=t-e;return((n-e)%r+r)%r+e},Et=(e,t,n)=>(((1-3*n+3*t)*e+(3*n-6*t))*e+3*t)*e,Dt=1e-7,Ot=12;function kt(e,t,n,r,i){let a,o,s=0;do o=t+(n-t)/2,a=Et(o,r,i)-e,a>0?n=o:t=o;while(Math.abs(a)>Dt&&++s<Ot);return o}function At(e,t,n,r){if(e===t&&n===r)return bt;let i=t=>kt(t,0,1,e,n);return e=>e===0||e===1?e:Et(i(e),t,r)}var jt=e=>t=>t<=.5?e(2*t)/2:(2-e(2*(1-t)))/2,Mt=e=>t=>1-e(1-t),Nt=At(.33,1.53,.69,.99),Pt=Mt(Nt),Ft=jt(Pt),It=e=>e>=1?1:(e*=2)<1?.5*Pt(e):.5*(2-2**(-10*(e-1))),Lt=e=>1-Math.sin(Math.acos(e)),Rt=Mt(Lt),zt=jt(Lt),Bt=At(.42,0,1,1),Vt=At(0,0,.58,1),Ht=At(.42,0,.58,1),Ut=e=>Array.isArray(e)&&typeof e[0]!=`number`;function Wt(e,t){return Ut(e)?e[Tt(0,e.length,t)]:e}var Gt=e=>Array.isArray(e)&&typeof e[0]==`number`,Kt={linear:bt,easeIn:Bt,easeInOut:Ht,easeOut:Vt,circIn:Lt,circInOut:zt,circOut:Rt,backIn:Pt,backInOut:Ft,backOut:Nt,anticipate:It},qt=e=>typeof e==`string`,Jt=e=>{if(Gt(e)){e.length;let[t,n,r,i]=e;return At(t,n,r,i)}return qt(e)?(Kt[e],`${e}`,Kt[e]):e},A={delta:0,timestamp:0,isProcessing:!1},Yt;function Xt(){Yt=void 0}var j={now:()=>(Yt===void 0&&j.set(A.isProcessing||ht.useManualTiming?A.timestamp:performance.now()),Yt),set:e=>{Yt=e,queueMicrotask(Xt)}},Zt=e=>Math.round(e*1e5)/1e5,Qt=e=>t=>typeof t==`string`&&t.startsWith(e),$t=Qt(`--`),en=Qt(`var(--`),tn=e=>en(e)?nn.test(e.split(`/*`)[0].trim()):!1,nn=/var\(--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)$/iu;function rn(e){return typeof e==`string`&&e.split(`/*`)[0].includes(`var(--`)}var an={test:e=>typeof e==`number`,parse:parseFloat,transform:e=>e},on={...an,transform:e=>mt(0,1,e)},sn={...an,default:1},cn=/-?(?:\d+(?:\.\d+)?|\.\d+)/gu;function ln(e){return e==null}var un=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))$/iu,dn=(e,t)=>n=>!!(typeof n==`string`&&un.test(n)&&n.startsWith(e)||t&&!ln(n)&&Object.prototype.hasOwnProperty.call(n,t)),fn=(e,t,n)=>r=>{if(typeof r!=`string`)return r;let[i,a,o,s]=r.match(cn);return{[e]:parseFloat(i),[t]:parseFloat(a),[n]:parseFloat(o),alpha:s===void 0?1:parseFloat(s)}},pn=e=>mt(0,255,e),mn={...an,transform:e=>Math.round(pn(e))},hn={test:dn(`rgb`,`red`),parse:fn(`red`,`green`,`blue`),transform:({red:e,green:t,blue:n,alpha:r=1})=>`rgba(`+mn.transform(e)+`, `+mn.transform(t)+`, `+mn.transform(n)+`, `+Zt(on.transform(r))+`)`};function gn(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 _n={test:dn(`#`),parse:gn,transform:hn.transform},vn=e=>({test:t=>typeof t==`string`&&t.endsWith(e)&&t.split(` `).length===1,parse:parseFloat,transform:t=>`${t}${e}`}),yn=vn(`deg`),bn=vn(`%`),M=vn(`px`),xn=vn(`vh`),Sn=vn(`vw`),Cn={...bn,parse:e=>bn.parse(e)/100,transform:e=>bn.transform(e*100)},wn={test:dn(`hsl`,`hue`),parse:fn(`hue`,`saturation`,`lightness`),transform:({hue:e,saturation:t,lightness:n,alpha:r=1})=>`hsla(`+Math.round(e)+`, `+bn.transform(Zt(t))+`, `+bn.transform(Zt(n))+`, `+Zt(on.transform(r))+`)`},N={test:e=>hn.test(e)||_n.test(e)||wn.test(e),parse:e=>hn.test(e)?hn.parse(e):wn.test(e)?wn.parse(e):_n.parse(e),transform:e=>typeof e==`string`?e:e.hasOwnProperty(`red`)?hn.transform(e):wn.transform(e),getAnimatableNone:e=>{let t=N.parse(e);return t.alpha=0,N.transform(t)}},Tn=/(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))/giu,En=new RegExp(cn.source),Dn=new RegExp(Tn.source,`i`);function On(e){return isNaN(e)&&typeof e==`string`&&(En.test(e)||Dn.test(e))}var kn=`number`,An=`color`,jn=`var`,Mn=`var(`,Nn="${}",Pn=/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 Fn(e){let t=e.toString();return En.test(t)||Dn.test(t)}function In(e){let t=e.toString(),n=[],r={color:[],number:[],var:[]},i=[],a=0;return{values:n,split:t.replace(Pn,e=>(N.test(e)?(r.color.push(a),i.push(An),n.push(N.parse(e))):e.startsWith(Mn)?(r.var.push(a),i.push(jn),n.push(e)):(r.number.push(a),i.push(kn),n.push(parseFloat(e))),++a,Nn)).split(Nn),indexes:r,types:i}}function Ln(e){return In(e).values}function Rn({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===kn?Zt(r[a]):e===An?N.transform(r[a]):r[a]}return i}}function zn(e){return Rn(In(e))}var Bn=e=>typeof e==`number`?0:N.test(e)?N.getAnimatableNone(e):e,Vn=(e,t)=>typeof e==`number`?t?.trim().endsWith(`/`)?e:0:Bn(e);function Hn(e){let t=In(e);return Rn(t)(t.values.map((e,n)=>Vn(e,t.split[n])))}var P={test:On,parse:Ln,createTransformer:zn,getAnimatableNone:Hn};function Un(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 Wn({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=Un(s,r,e+1/3),a=Un(s,r,e),o=Un(s,r,e-1/3)}return{red:Math.round(i*255),green:Math.round(a*255),blue:Math.round(o*255),alpha:r}}function Gn(e,t){return n=>n>0?t:e}var F=(e,t,n)=>e+(t-e)*n,Kn=(e,t,n)=>{let r=e*e,i=n*(t*t-r)+r;return i<0?0:Math.sqrt(i)},qn=[_n,hn,wn],Jn=e=>qn.find(t=>t.test(e));function Yn(e){let t=Jn(e);if(!t)return`${e}`,!1;let n=t.parse(e);return t===wn&&(n=Wn(n)),n}var Xn=(e,t)=>{let n=Yn(e),r=Yn(t);if(!n||!r)return Gn(e,t);let i={...n};return e=>(i.red=Kn(n.red,r.red,e),i.green=Kn(n.green,r.green,e),i.blue=Kn(n.blue,r.blue,e),i.alpha=F(n.alpha,r.alpha,e),hn.transform(i))},Zn=new Set([`none`,`hidden`]);function Qn(e,t){return Zn.has(e)?n=>n<=0?e:t:n=>n>=1?t:e}function $n(e,t){return n=>F(e,t,n)}function er(e){return typeof e==`number`?$n:typeof e==`string`?tn(e)?Gn:N.test(e)?Xn:ir:Array.isArray(e)?tr:typeof e==`object`?N.test(e)?Xn:nr:Gn}function tr(e,t){let n=[...e],r=n.length,i=e.map((e,n)=>er(e)(e,t[n]));return e=>{for(let t=0;t<r;t++)n[t]=i[t](e);return n}}function nr(e,t){let n={...e,...t},r={};for(let i in n)e[i]!==void 0&&t[i]!==void 0&&(r[i]=er(e[i])(e[i],t[i]));return e=>{for(let t in r)n[t]=r[t](e);return n}}function rr(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 ir=(e,t)=>{let n=P.createTransformer(t),r=In(e),i=In(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?Zn.has(e)&&!i.values.length||Zn.has(t)&&!r.values.length?Qn(e,t):xt(tr(rr(r,i),i.values),n):(`${e}${t}`,Gn(e,t))},ar=/^(-?(?:\d+(?:\.\d*)?|\.\d+))([a-z%]*)$/iu;function or(e,t){let n=ar.exec(e);if(!n)return;let r=ar.exec(t);if(!r||n[2]!==r[2])return;let i=n[2],a=parseFloat(n[1]),o=parseFloat(r[1]);return e=>Zt(F(a,o,e))+i}function sr(e,t,n){if(typeof e==`number`&&typeof t==`number`&&typeof n==`number`)return F(e,t,n);if(typeof e==`string`&&typeof t==`string`){let n=or(e,t);if(n)return n}return er(e)(e,t)}var cr=[`setup`,`read`,`resolveKeyframes`,`preUpdate`,`update`,`preRender`,`render`,`postRender`];function lr(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 ur=40;function dr(e,t,n={delta:0,timestamp:0,isProcessing:!1}){let r=!1,i=!0,a=()=>r=!0,o=cr.reduce((e,t)=>(e[t]=lr(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,ur),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:cr.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<cr.length;t++)o[cr[t]].cancel(e)},state:n,steps:o}}var{schedule:I,cancel:fr,steps:pr}=dr(typeof requestAnimationFrame<`u`?requestAnimationFrame:bt,!0,A),mr=e=>{let t=({timestamp:t})=>e(t);return{start:(e=!0)=>I.update(t,e),stop:()=>fr(t),now:()=>A.isProcessing?A.timestamp:j.now()}},hr=(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)})`},gr=2e4;function _r(e,t=50,n=gr,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 vr(e,t=100,n){let r=n({...e,keyframes:[0,t]}),i=Math.min(_r(r),gr);return{type:`keyframes`,ease:e=>r.next(i*e).value/t,duration:k(i)}}var L={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},yr=e=>e<0?1/Math.max(1+e,L.minDamping):Math.max(1-e,L.minDamping);function br(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 Cr(e=>i*Math.exp(-r*e)-r*Math.exp(-i*e)-a,e=>Math.exp(-i*e)-Math.exp(-r*e),t)/t}function xr(e,t){return e*Math.sqrt(1-t*t)}var Sr=12;function Cr(e,t,n){let r=n;for(let n=1;n<Sr;n++)r-=e(r)/t(r);return r}var wr=.001;function Tr({duration:e=L.duration,bounce:t=L.bounce}){let n,r;L.maxDuration;let i=yr(t);e=mt(L.minDuration,L.maxDuration,k(e)),i<1?(n=t=>{let n=t*i,r=n*e,a=xr(t,i),o=Math.exp(-r);return wr-n/a*o},r=t=>{let r=t*i*e,a=i*i*t*t*e,o=Math.exp(-r),s=xr(t*t,i);return(-n(t)+wr>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=Cr(n,r,a),s=o*br(i,o*e),c=s*s;return{stiffness:c,damping:i*2*Math.sqrt(c),duration:O(e)}}var Er=(e,t)=>(t?e>=0:e>0)&&e<1/0;function Dr(e,t){if(Er(e,t))return e}function Or(e){let t=Dr(e.stiffness),n=Dr(e.damping,!0),r=Dr(e.mass),i={...e,stiffness:t??L.stiffness,damping:n??L.damping,mass:r??L.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=yr(e.bounce||0),n=2*Math.PI/(e.visualDuration*1.2)*br(t,2*Math.PI/1.2);i.stiffness=n*n,i.damping=2*t*Math.sqrt(i.stiffness)}else Object.assign(i,Tr(i)),i.isResolvedFromDuration=!0;(!Er(i.stiffness)||!Er(i.damping,!0))&&(i.stiffness=L.stiffness,i.damping=L.damping)}return i}function kr(e=L.visualDuration,t=L.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}=Or({...n}),f=e=>d?0:-k(e),p=s/(2*Math.sqrt(o*c)),m=k(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?L.restSpeed.granular:L.restSpeed.default),g.restDelta=n.restDelta||(e?L.restDelta.granular:L.restDelta.default)};_();let v,y,b;if(p<1){let e=xr(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(_r(S),gr),t=hr(t=>S.next(e*t).value,e,30);return e+`ms `+t},toTransition:()=>{}};return S}kr.applyToOptions=e=>{let t=vr(e,100,kr);return e.ease=t.ease,e.duration=O(t.duration),e.type=`keyframes`,e};function Ar({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=kr({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 jr(e,t,n){let r=[],i=n||ht.mix||sr,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 Mr(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=jr(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 Nr(e,t){let n=e[e.length-1];for(let r=1;r<=t;r++){let i=St(0,t,r);e.push(F(n,1,i))}}function Pr(e){let t=[0];return Nr(t,e.length-1),t}function Fr(e,t){return e.map(e=>e*t)}function Ir(e,t){return e.map(()=>t||Ht).splice(0,e.length-1)}function Lr({duration:e=300,keyframes:t,times:n,ease:r=`easeInOut`}){let i=Ut(r)?r.map(Jt):Jt(r)||Ht,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||sr)(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=Mr(Fr(n&&n.length===t.length?n:Pr(t),e),t,{ease:Array.isArray(i)?i:Ir(t,i)});return{calculatedDuration:e,next:t=>(a.value=o(t),a.done=t>=e,a)}}var Rr=5;function zr(e,t,n){let r=Math.max(t-Rr,0);return wt(n-e(r),t-r)}function Br(e,t,n=0){return t<=0?n:e.velocity?e.velocity(t):zr(t=>e.next(t).value,t,e.next(t).value)}var Vr=e=>e!==null;function Hr(e,{repeat:t,repeatType:n=`loop`},r,i=1){let a=e.filter(Vr),o=i<0||t&&n!==`loop`&&t%2==1?0:a.length-1;return!o||r===void 0?a[o]:r}var Ur={decay:Ar,inertia:Ar,tween:Lr,keyframes:Lr,spring:kr};function Wr(e){typeof e.type==`string`&&(e.type=Ur[e.type])}function Gr(e,t){return{kind:e,animation:t,timestamp:j.now(),frameTimestamp:A.timestamp,frameIsProcessing:A.isProcessing}}function Kr(e,t,n){let r=globalThis.__MOTION_INSPECT__;if(r)try{r({...Gr(`animation-start`,e),options:n?{...t,...n}:t})}catch{}}function qr(e,t){let n=globalThis.__MOTION_INSPECT__;if(n)try{n({...Gr(`layout-animation-start`,e),node:t})}catch{}}var Jr=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)}},Yr=e=>e/100,Xr=class extends Jr{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!==j.now()&&this.tick(j.now()),this.isStopped=!0,this.state!==`idle`&&(this.teardown(),this.options.onStop?.())},this.options=e,this.initAnimation(),this.play(),e.autoplay===!1&&this.pause(),Kr(this,this.options)}initAnimation(){let{options:e}=this;Wr(e);let{type:t=Lr,repeat:n=0,repeatDelay:r=0,repeatType:i,velocity:a=0}=e,{keyframes:o}=e,s=t||Lr;s!==Lr&&typeof o[0]!=`number`&&(this.mixKeyframes=xt(Yr,sr(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=_r(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!==Ar&&(b.value=Hr(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 k(this.calculatedDuration)}get iterationDuration(){let{delay:e=0}=this.options||{};return this.duration+k(e)}get time(){return k(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 Br(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(j.now()),this.playbackSpeed=e,t&&this.driver&&(this.time=k(this.currentTime))}play(){if(this.isStopped)return;let{driver:e=mr,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(j.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)}},Zr=new Set([`brightness`,`contrast`,`saturate`,`opacity`]);function Qr(e){let[t,n]=e.slice(0,-1).split(`(`);if(t===`drop-shadow`)return e;let[r]=n.match(cn)||[];if(!r)return e;let i=n.replace(r,``),a=+!!Zr.has(t);return r!==n&&(a*=100),t+`(`+a+i+`)`}var $r=/\b([a-z-]*)\(.*?\)/gu,ei={...P,getAnimatableNone:e=>{let t=e.match($r);return t?t.map(Qr).join(` `):e}},ti={...P,getAnimatableNone:e=>{let t=P.parse(e);return P.createTransformer(e)(t.map(e=>typeof e==`number`?0:typeof e==`object`?{...e,alpha:1}:e))}},ni={...an,transform:Math.round},ri={rotate:yn,pathRotation:yn,rotateX:yn,rotateY:yn,rotateZ:yn,scale:sn,scaleX:sn,scaleY:sn,scaleZ:sn,skew:yn,skewX:yn,skewY:yn,distance:M,translateX:M,translateY:M,translateZ:M,x:M,y:M,z:M,perspective:M,transformPerspective:M,opacity:on,originX:Cn,originY:Cn,originZ:M},ii={borderWidth:M,borderTopWidth:M,borderRightWidth:M,borderBottomWidth:M,borderLeftWidth:M,borderRadius:M,borderTopLeftRadius:M,borderTopRightRadius:M,borderBottomRightRadius:M,borderBottomLeftRadius:M,width:M,maxWidth:M,height:M,maxHeight:M,top:M,right:M,bottom:M,left:M,inset:M,insetBlock:M,insetBlockStart:M,insetBlockEnd:M,insetInline:M,insetInlineStart:M,insetInlineEnd:M,padding:M,paddingTop:M,paddingRight:M,paddingBottom:M,paddingLeft:M,paddingBlock:M,paddingBlockStart:M,paddingBlockEnd:M,paddingInline:M,paddingInlineStart:M,paddingInlineEnd:M,margin:M,marginTop:M,marginRight:M,marginBottom:M,marginLeft:M,marginBlock:M,marginBlockStart:M,marginBlockEnd:M,marginInline:M,marginInlineStart:M,marginInlineEnd:M,fontSize:M,backgroundPositionX:M,backgroundPositionY:M,...ri,zIndex:ni,fillOpacity:on,strokeOpacity:on,numOctaves:ni},ai={...ii,color:N,backgroundColor:N,outlineColor:N,fill:N,stroke:N,borderColor:N,borderTopColor:N,borderRightColor:N,borderBottomColor:N,borderLeftColor:N,filter:ei,WebkitFilter:ei,mask:ti,WebkitMask:ti},oi=e=>ai[e],si=new Set([ei,ti]);function ci(e,t){let n=oi(e);return si.has(n)||(n=P),n.getAnimatableNone?n.getAnimatableNone(t):void 0}function li(e){for(let t=1;t<e.length;t++)e[t]??(e[t]=e[t-1])}var ui=e=>e*180/Math.PI,di=e=>pi(ui(Math.atan2(e[1],e[0]))),fi={x:4,y:5,translateX:4,translateY:5,scaleX:0,scaleY:3,scale:e=>(Math.abs(e[0])+Math.abs(e[3]))/2,rotate:di,rotateZ:di,skewX:e=>ui(Math.atan(e[1])),skewY:e=>ui(Math.atan(e[2])),skew:e=>(Math.abs(e[1])+Math.abs(e[2]))/2},pi=e=>(e%=360,e<0&&(e+=360),e),mi=di,hi=e=>Math.sqrt(e[0]*e[0]+e[1]*e[1]),gi=e=>Math.sqrt(e[4]*e[4]+e[5]*e[5]),_i={x:12,y:13,z:14,translateX:12,translateY:13,translateZ:14,scaleX:hi,scaleY:gi,scale:e=>(hi(e)+gi(e))/2,rotateX:e=>pi(ui(Math.atan2(e[6],e[5]))),rotateY:e=>pi(ui(Math.atan2(-e[2],e[0]))),rotateZ:mi,rotate:mi,skewX:e=>ui(Math.atan(e[4])),skewY:e=>ui(Math.atan(e[1])),skew:e=>(Math.abs(e[1])+Math.abs(e[4]))/2};function vi(e){return+!!e.includes(`scale`)}function yi(e,t){if(!e||e===`none`)return vi(t);let n=e.match(/^matrix3d\(([-\d.e\s,]+)\)$/u),r,i;if(n)r=_i,i=n;else{let t=e.match(/^matrix\(([-\d.e\s,]+)\)$/u);r=fi,i=t}if(!i)return vi(t);let a=r[t],o=i[1].split(`,`).map(xi);return typeof a==`function`?a(o):o[a]}var bi=(e,t)=>{let{transform:n=`none`}=getComputedStyle(e);return yi(n,t)};function xi(e){return parseFloat(e.trim())}var Si=[`transformPerspective`,`x`,`y`,`z`,`translateX`,`translateY`,`translateZ`,`scale`,`scaleX`,`scaleY`,`rotate`,`rotateX`,`rotateY`,`rotateZ`,`skew`,`skewX`,`skewY`],R=new Set([...Si,`pathRotation`]),Ci=e=>e===an||e===M,wi=new Set([`x`,`y`,`z`]),Ti=Si.filter(e=>!wi.has(e));function Ei(e){let t=[];return Ti.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 Di=new Set([`bottom`,`right`]);function Oi(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 ki={width:({width:e,paddingLeft:t=`0`,paddingRight:n=`0`,boxSizing:r},i)=>Oi(e,i,`x`,t,n,r),height:({height:e,paddingTop:t=`0`,paddingBottom:n=`0`,boxSizing:r},i)=>Oi(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})=>yi(e,`x`),y:({transform:e})=>yi(e,`y`)};ki.translateX=ki.x,ki.translateY=ki.y;var Ai=new Set,ji=!1,Mi=!1,Ni=!1;function Pi(){if(Mi){let e=[],t=new Set,n=new Set;Ai.forEach(r=>{r.needsMeasurement&&(e.push(r),t.add(r.element),Di.has(r.name)&&n.add(r.element))});let r=new Map;n.forEach(e=>{let t=Ei(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)})}Mi=!1,ji=!1,Ai.forEach(e=>e.complete(Ni)),Ai.clear()}function Fi(){Ai.forEach(e=>{e.readKeyframes(),e.needsMeasurement&&(Mi=!0)})}function Ii(){Ni=!0,Fi(),Pi(),Ni=!1}function Li(e,t,n){if(typeof e==`string`){if(gt(e)||vt(e))return parseFloat(e);if(!P.test(e)&&P.test(n))return ci(t,n)}return e??void 0}var Ri=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?(Ai.add(this),ji||(ji=!0,I.read(Fi),I.resolveKeyframes(Pi))):(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=Li(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])}li(e)}setFinalKeyframe(){}measureInitialState(){}renderEndStyles(){}measureEndState(){}complete(e=!1){this.state=`complete`,this.onComplete(this.unresolvedKeyframes,this.finalKeyframe,e),Ai.delete(this)}cancel(){this.state===`scheduled`&&(Ai.delete(this),this.state=`pending`)}resume(){this.state===`pending`&&this.scheduleResolve()}},zi=e=>e.startsWith(`--`);function Bi(e,t,n){zi(t)?e.style.setProperty(t,n):e.style[t]=n}var Vi={};function Hi(e,t){let n=yt(e);return()=>Vi[t]??n()}var Ui=Hi(()=>window.ScrollTimeline!==void 0,`scrollTimeline`),Wi=Hi(()=>{try{document.createElement(`div`).animate({opacity:0},{easing:`linear(0, 1)`})}catch{return!1}return!0},`linearEasing`),Gi=([e,t,n,r])=>`cubic-bezier(${e}, ${t}, ${n}, ${r})`,Ki={linear:`linear`,ease:`ease`,easeIn:`ease-in`,easeOut:`ease-out`,easeInOut:`ease-in-out`,circIn:Gi([0,.65,.55,1]),circOut:Gi([.55,0,1,.45]),backIn:Gi([.31,.01,.66,-.59]),backOut:Gi([.33,1.53,.69,.99])};function qi(e,t){if(e)return typeof e==`function`?Wi()?hr(e,t):`ease-out`:Gt(e)?Gi(e):Array.isArray(e)?e.map(e=>qi(e,t)||Ki.easeOut):Ki[e]}function Ji(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=qi(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 Yi(e){return typeof e==`function`&&`applyToOptions`in e}function Xi({type:e,...t}){return Yi(e)&&Wi()?e.applyToOptions(t):(t.duration??=300,t.ease??=`easeOut`,t)}var Zi=class extends Jr{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=Xi(e);this.animation=Ji(t,n,r,c,i),c.autoplay===!1&&this.animation.pause(),this.animation.onfinish=()=>{if(this.finishedTime=this.time,!i){let e=Hr(r,this.options,o,this.speed);this.updateMotionValue&&this.updateMotionValue(e),Bi(t,n,e),this.animation.cancel()}s?.(),this.notifyFinished()},Kr(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 k(Number(e))}get iterationDuration(){let{delay:e=0}=this.options||{};return this.duration+k(e)}get time(){return k(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&&Ui()?(this.animation.timeline=e,t?.(this.animation),bt):n(this)}},Qi={anticipate:It,backInOut:Ft,circInOut:zt};function $i(e){return e in Qi}function ea(e){typeof e.ease==`string`&&$i(e.ease)&&(e.ease=Qi[e.ease])}var ta=10,na=class extends Zi{constructor(e){ea(e),Wr(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 Xr({...a,autoplay:!1}),s=Math.max(ta,j.now()-this.startTime),c=mt(0,ta,s-ta),l=o.sample(s).value,{name:u}=this.options;i&&u&&Bi(i,u,l),t.setWithVelocity(o.sample(Math.max(0,s-c)).value,l,c),o.stop()}},ra=(e,t)=>t!==`zIndex`&&!!(typeof e==`number`||Array.isArray(e)||typeof e==`string`&&(P.test(e)||e===`0`)&&!e.startsWith(`url(`));function ia(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 aa(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=ra(i,t),s=ra(a,t);return!o||!s?(o!==s&&`${t}${i}${a}${o?a:i}`,!1):ia(e)||(n===`spring`||Yi(n))&&r}function oa(e){e.duration=0,e.type=`keyframes`}var sa=new Set([`opacity`,`clipPath`,`filter`,`transform`,`backgroundColor`]),ca=/^(?:oklch|oklab|lab|lch|color|color-mix|light-dark)\(/;function la(e){for(let t=0;t<e.length;t++)if(typeof e[t]==`string`&&ca.test(e[t]))return!0;return!1}var ua=new Set([`color`,`backgroundColor`,`outlineColor`,`fill`,`stroke`,`borderColor`,`borderTopColor`,`borderRightColor`,`borderBottomColor`,`borderLeftColor`]),da=yt(()=>Object.hasOwnProperty.call(Element.prototype,`animate`));function fa(e){let{motionValue:t,name:n,repeatDelay:r,repeatType:i,damping:a,type:o,keyframes:s}=e;if(!n||!(sa.has(n)||ua.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 da()&&(sa.has(n)||ua.has(n)&&la(s))&&(n!==`transform`||!u)&&!l&&!r&&i!==`mirror`&&a!==0&&o!==`inertia`}var pa=40,ma=class extends Jr{constructor(e){super(),this.stop=()=>{this._animation&&(this._animation.stop(),this.stopTimeline?.()),this.keyframeResolver?.cancel()},this.createdAt=j.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||Ri;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=j.now();let u=!0;aa(e,i,a,o)||(u=!1,(ht.instantAnimations||!s)&&l?.(Hr(e,n,t)),e[0]=e[e.length-1],oa(n),n.repeat=0);let d=r?this.resolvedAt&&this.resolvedAt-this.createdAt>pa?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&&fa(n),m;if(p){n.element=n.motionValue?.owner?.current;try{m=new na(n)}catch{m=new Xr(n)}}else m=new Xr(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(),Ii()),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()}},ha=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 ga(this.animations,`duration`)}get iterationDuration(){return ga(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 ga(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 _a=class extends ha{then(e,t){return this.finished.finally(e).then(()=>{})}};function va(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 ya=30,ba=e=>!isNaN(parseFloat(e)),xa={current:void 0},Sa=class{constructor(e,t={}){this.canTrackVelocity=null,this.events={},this.updateAndNotify=e=>{let t=j.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=j.now(),this.canTrackVelocity===null&&e!==void 0&&(this.canTrackVelocity=ba(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(){I.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 xa.current&&xa.current.push(this),this.current}getPrevious(){return this.prev}getVelocity(){let e=j.now();if(!this.canTrackVelocity||this.prevFrameValue===void 0||e-this.updatedAt>ya)return 0;let t=Math.min(this.updatedAt-this.prevUpdatedAt,ya);return wt(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 Ca(e,t){return new Sa(e,t)}function wa(e,t){if(e?.inherit&&t){let{inherit:n,...r}=e;return{...t,...r}}return e}function Ta(e,t){let n=e?.[t]??e?.default??e;return n===e?n:wa(n,e)}var Ea={type:`spring`,stiffness:500,damping:25,restSpeed:10},Da=e=>({type:`spring`,stiffness:550,damping:e===0?2*Math.sqrt(550):30,restSpeed:10}),Oa={type:`keyframes`,duration:.8},ka={type:`keyframes`,ease:[.25,.1,.35,1],duration:.3},Aa=(e,{keyframes:t})=>t.length>2?Oa:R.has(e)?e.startsWith(`scale`)?Da(t[1]):Ea:ka,ja=new Set([`when`,`delay`,`delayChildren`,`staggerChildren`,`staggerDirection`,`repeat`,`repeatType`,`repeatDelay`,`from`,`elapsed`]);function Ma(e){for(let t in e)if(!ja.has(t))return!0;return!1}var Na=(e,t,n,r={},i,a)=>o=>{let s=Ta(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};Ma(s)||Object.assign(u,Aa(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)&&(oa(u),u.delay===0&&(d=!0)),(ht.instantAnimations||ht.skipAnimations||i?.shouldSkipAnimations||s.skipAnimations)&&(d=!0,oa(u),u.delay=0),u.allowFlatten=!s.type&&!s.ease,d&&!a&&t.get()!==void 0){let e=Hr(u.keyframes,s);if(e!==void 0){I.update(()=>{u.onUpdate(e),u.onComplete()});return}}return s.isSync?new Xr(u):new ma(u)},Pa=/^var\(--(?:([\w-]+)|([\w-]+), ?([a-zA-Z\d ()%#.,-]+))\)/u;function Fa(e){let t=Pa.exec(e);if(!t)return[,];let[,n,r,i]=t;return[`--${n??r}`,i]}function Ia(e,t,n=1){`${e}`;let[r,i]=Fa(e);if(!r)return;let a=window.getComputedStyle(t).getPropertyValue(r);if(a){let e=a.trim();return gt(e)?parseFloat(e):e}return tn(i)?Ia(i,t,n+1):i}function La(e){let t=[{},{}];return e?.values.forEach((e,n)=>{t[0][n]=e.get(),t[1][n]=e.getVelocity()}),t}function Ra(e,t,n,r){let i=t=>typeof t==`function`?t(n===void 0?e.custom:n,...La(r)):t;return t=i(t),typeof t==`string`&&(t=e.variants&&e.variants[t]),i(t)}function za(e,t,n){return Ra(e.getProps(),t,n,e)}var Ba=(e,t)=>t===`exit`?e.presenceContext?.custom:void 0,Va=new Set([`width`,`height`,`top`,`left`,`right`,`bottom`,...Si]),Ha=e=>Array.isArray(e);function Ua(e,t,n){e.hasValue(t)?e.getValue(t).set(n):e.addValue(t,Ca(n))}function Wa(e){return Ha(e)?e[e.length-1]||0:e}function Ga(e,t){let{transitionEnd:n={},transition:r={},...i}=za(e,t)||{};i={...i,...n};for(let t in i)Ua(e,t,Wa(i[t]))}var z=e=>!!(e&&e.getVelocity);function Ka(e){return!!(z(e)&&e.add)}function qa(e,t){let n=e.getValue(`willChange`);if(Ka(n))return n.add(t);if(!n&&ht.WillChange){let n=new ht.WillChange(`auto`);e.addValue(`willChange`,n),n.add(t)}}function Ja(e){return e.replace(/([A-Z])/g,e=>`-${e.toLowerCase()}`)}var Ya=`data-`+Ja(`framerAppearId`);function Xa(e){return e.props[Ya]}var Za=typeof window<`u`;function Qa({protectedKeys:e,needsAnimating:t},n){let r=n in e&&!t[n];return t[n]=!1,r}function $a(e,t,{delay:n=0,transitionOverride:r,type:i}={}){let{transition:a,transitionEnd:o,...s}=t,c=e.getDefaultTransition();a=a?wa(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&&Qa(f,t))continue;let o={delay:n,...Ta(a||{},t)};u&&(o.skipAnimations=!0);let c=r.get();if(c!==void 0&&!r.isAnimating()&&!Array.isArray(i)&&i===c&&!o.velocity){I.update(()=>r.set(i));continue}let p=!1;if(Za&&window.MotionHandoffAnimation){let n=Xa(e);if(n){let e=window.MotionHandoffAnimation(n,t,I);e!==null&&(o.startTime=e,p=!0)}}qa(e,t);let m=l??e.shouldReduceMotion;r.start(Na(t,r,i,m&&Va.has(t)?{type:!1}:o,e,p));let h=r.animation;h&&d.push(h)}if(o){let t=()=>I.update(()=>{o&&Ga(e,o)});d.length?Promise.all(d).then(t):t()}return d}function eo(e,t,n={}){let r=za(e,t,Ba(e,n.type)),i=n.transitionOverride||(r?.transition??(e.getDefaultTransition()||{})),a=()=>Promise.all(r?$a(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(eo(e,t,{...n,delay:r+(typeof o==`function`?0:o)+va(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 to(e,t,n={}){return e.notify(`AnimationStart`,t),(Array.isArray(t)?Promise.all(t.map(t=>eo(e,t,n))):typeof t==`string`?eo(e,t,n):Promise.all($a(e,za(e,t,n.custom),n))).then(()=>{e.notify(`AnimationComplete`,t)})}var no={test:e=>e===`auto`,parse:e=>e},ro=e=>t=>t.test(e),io=[an,M,bn,yn,Sn,xn,no],ao=e=>io.find(ro(e));function oo(e){return typeof e==`number`?e===0:e===null||e===`none`||e===`0`||vt(e)}var so=new Set([`auto`,`none`,`0`]);function co(e,t,n){let r=0,i;for(;r<e.length&&!i;){let t=e[r];typeof t==`string`&&!so.has(t)&&Fn(t)&&(i=e[r]),r++}if(i&&n)for(let r of t)e[r]!==i&&(e[r]=ci(n,i))}var lo=class extends Ri{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(),tn(r))){let i=Ia(r,t.current);i!==void 0&&(e[n]=i),n===e.length-1&&(this.finalKeyframe=r)}}if(this.resolveNoneKeyframes(),!Va.has(n)||e.length!==2)return;let[r,i]=e;if(typeof r==`number`&&typeof i==`number`)return;let a=ao(r),o=ao(i);if(rn(r)!==rn(i)&&ki[n]){this.needsMeasurement=!0;return}if(a!==o){if(Ci(a)&&Ci(o))for(let t=0;t<e.length;t++){let n=e[t];typeof n==`string`&&(e[t]=parseFloat(n))}else ki[n]&&(this.needsMeasurement=!0)}}resolveNoneKeyframes(){let{unresolvedKeyframes:e,name:t}=this,n=[];for(let t=0;t<e.length;t++)(e[t]===null||oo(e[t]))&&n.push(t);n.length&&co(e,n,t)}measure(){let{element:e,name:t}=this;return ki[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()}},uo=[`borderTopLeftRadius`,`borderTopRightRadius`,`borderBottomRightRadius`,`borderBottomLeftRadius`],fo=[];function po(e){typeof e.test==`function`&&e.read,mo(e),fo.unshift(e)}function mo(e){pt(fo,e)}function ho(e){return fo.find(t=>t.test(e))}function go(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){I.update(()=>l.set(c));continue}l.start(Na(s,l,c,o&&Va.has(s)?{type:!1}:n,r)),l.animation&&i.push(l.animation)}let{transitionEnd:s}=t;if(s){let t=()=>I.update(()=>{for(let t in s)e(t).set(s[t])});i.length?Promise.all(i).then(t):t()}return i}function _o(e,t,n,r,i){return go(r=>{let a=e.get(t,r);if(!a){let o;if(!i){let i=n[r];o=vo(i)??e.read(t,r,i),`${r}`}a=Ca(o,{owner:i}),e(t,{[r]:a})}return a},n,r,i)}function vo(e){let t=Array.isArray(e)?e[0]:void 0;return t===null?void 0:t}function yo(e){return _t(e)&&`offsetHeight`in e&&!(`ownerSVGElement`in e)}function bo(e){return _t(e)&&`ownerSVGElement`in e}var xo=(e,t)=>t&&typeof e==`number`?t.transform(e):e;function So(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 Co=class{constructor(e=I.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 wo(e,{step:t,...n}={}){let r=new WeakMap;return Object.assign((n,i)=>{let a=r.get(n)??new Co(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 To={x:`translateX`,y:`translateY`,z:`translateZ`,transformPerspective:`perspective`},Eo={};function Do(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&&` `)+(Eo[i]||(Eo[i]=(To[i]||i)+`(`))+xo(a,ri[i])+`)`)}let i=e.get(`pathRotation`)?.get();return i&&(t+=(t&&` `)+`rotate(`+xo(i,ri.pathRotation)+`)`),t||`none`}var Oo=new Set([`originX`,`originY`,`originZ`]),ko=(e,t)=>xo(e.get(t)?.get(),ii[t]),Ao=(e,t,n,r)=>{let i,a;if(R.has(n)){if(n!==`pathRotation`){let e=t.transformKeys??=[];(t.transformValues??={})[n]=r,e.includes(n)||(e.push(n),e.sort((e,t)=>Si.indexOf(e)-Si.indexOf(t)))}t.get(`transform`)||(!yo(e)&&!t.get(`transformBox`)&&Ao(e,t,`transformBox`,new Sa(`fill-box`)),t.set(`transform`,new Sa(`none`),()=>{e.style.transform=Do(t)})),a=t.get(`transform`)}else Oo.has(n)?(t.get(`transformOrigin`)||t.set(`transformOrigin`,new Sa(``),()=>{let n=ko(t,`originX`)??`50%`,r=ko(t,`originY`)??`50%`,i=ko(t,`originZ`)??0;e.style.transformOrigin=`${n} ${r} ${i}`}),a=t.get(`transformOrigin`)):i=zi(n)?()=>{e.style.setProperty(n,r.get())}:()=>{e.style[n]=xo(r.get(),ii[n])};return t.set(n,r,i,a)},jo=e=>yo(e)||bo(e),Mo=(e,t)=>{if(R.has(t))return bi(e,t);let n=getComputedStyle(e),r=zi(t)?n.getPropertyValue(t):n[t];return typeof r==`string`&&r.trim()||0},No=wo(Ao,{test:jo,read:Mo}),Po={x:`translateX`,y:`translateY`,z:`translateZ`,transformPerspective:`perspective`},Fo=Si.length;function Io(e,t,n){let r=``,i=!0;for(let a=0;a<Fo;a++){let o=Si[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=xo(s,ii[o]);if(!c){i=!1;let t=Po[o]||o;r+=`${t}(${e}) `}n&&(t[o]=e)}}let a=e.pathRotation;return a&&(i=!1,r+=`rotate(${xo(a,ii.pathRotation)}) `),r=r.trim(),n?r=n(t,i?``:r):i&&(r=`none`),r}function Lo(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(R.has(e)){o=!0;continue}if($t(e)){i[e]=n;continue}{let t=xo(n,ii[e]);e.startsWith(`origin`)?(s=!0,a[e]=t):r[e]=t}}if(t.transform||(o||n?r.transform=Io(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 Ro={offset:`stroke-dashoffset`,array:`stroke-dasharray`},zo={offset:`strokeDashoffset`,array:`strokeDasharray`};function Bo(e,t,n=1,r=0,i=!0){e.pathLength=1;let a=i?Ro:zo;e[a.offset]=`${-r}`,e[a.array]=`${t} ${n}`}var Vo=[`transform`,`opacity`,`offsetDistance`,`offsetPath`,`offsetRotate`,`offsetAnchor`];function Ho(e,{attrX:t,attrY:n,attrScale:r,pathLength:i,pathSpacing:a=1,pathOffset:o=0,...s},c,l,u){if(Lo(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 Vo)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&&Bo(d,i,a,o,!1)}function Uo(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 Wo=(e,t,n,r,i=n)=>{let a=Uo(e,i);!a&&(i.startsWith(`data`)||i.startsWith(`aria`))&&(i=Ja(i));let o=ii[n]||ii[i],s=a?()=>{e[i]=xo(r.get(),ii[n])}:()=>{let t=xo(r.get(),o);t==null?e.removeAttribute(i):e.setAttribute(i,String(t))};return t.set(n,r,s)};function Go(e,t,n,r){return I.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 Sa(`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 Ko=wo((e,t,n,r)=>n.startsWith(`path`)?Go(e,t,n,r):n.startsWith(`attr`)?Wo(e,t,n,r,qo(n)):(R.has(n)||Oo.has(n)||zi(n)||n in e.style?Ao:Wo)(e,t,n,r),{test:bo,read:(e,t)=>R.has(t)?ii[t]?.default||0:zi(t)||Vo.includes(t)?Mo(e,t)||e.getAttribute(Ja(t))||0:(t=qo(t),e.getAttribute(Ja(t))??e.getAttribute(t)??void 0)});function qo(e){return e.replace(/^attr([A-Z])/,(e,t)=>t.toLowerCase())}function Jo({top:e,left:t,right:n,bottom:r}){return{x:{min:t,max:n},y:{min:e,max:r}}}function Yo({x:e,y:t}){return{top:t.min,right:e.max,bottom:t.max,left:e.min}}function Xo(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 Zo(e){return e===void 0||e===1}function Qo({scale:e,scaleX:t,scaleY:n}){return!Zo(e)||!Zo(t)||!Zo(n)}function $o(e){return Qo(e)||es(e)||e.z||e.rotate||e.rotateX||e.rotateY||e.skewX||e.skewY}function es(e){return ts(e.x)||ts(e.y)}function ts(e){return e&&e!==`0%`}function ns(e,t,n){return n+t*(e-n)}function rs(e,t,n,r,i){return i!==void 0&&(e=ns(e,i,r)),ns(e,n,r)+t}function is(e,t=0,n=1,r,i){e.min=rs(e.min,t,n,r,i),e.max=rs(e.max,t,n,r,i)}function as(e,{x:t,y:n}){is(e.x,t.translate,t.scale,t.originPoint),is(e.y,n.translate,n.scale,n.originPoint)}var os=.999999999999,ss=1.0000000000001;function cs(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&&(ls(e.x,-a.scroll.offset.x),ls(e.y,-a.scroll.offset.y)),o&&(t.x*=o.x.scale,t.y*=o.y.scale,as(e,o)),r&&$o(a.latestValues)&&fs(e,a.latestValues,a.layout?.layoutBox))}t.x<ss&&t.x>os&&(t.x=1),t.y<ss&&t.y>os&&(t.y=1)}function ls(e,t){e.min+=t,e.max+=t}function us(e,t,n,r,i=.5){is(e,t,n,F(e.min,e.max,i),r)}function ds(e,t){return typeof e==`string`?parseFloat(e)/100*(t.max-t.min):e}function fs(e,t,n){let r=n??e;us(e.x,ds(t.x,r.x),t.scaleX,t.scale,t.originX),us(e.y,ds(t.y,r.y),t.scaleY,t.scale,t.originY)}function ps(e,t){return Jo(Xo(e.getBoundingClientRect(),t))}function ms(e,t,n){let r=ps(e,n),{scroll:i}=t;return i&&(ls(r.x,i.offset.x),ls(r.y,i.offset.y)),r}var hs={},gs=e=>bo(e)?Ko:No,_s=class{constructor(e,t){this.effect=e,this.current=t,this.KeyframeResolver=lo}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 ps(this.current)}getProps(){return hs}};function vs(e,t,n,r){if(r)return go(e=>r.getValue(e,null),t,n,r);let i=gs(e);return _o(i,e,t,n,new _s(i,e))}var ys=wo((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:bs,cancel:xs}=dr(queueMicrotask,!1),Ss={x:!1,y:!1};function Cs(){return Ss.x||Ss.y}function ws(e){return e===`x`||e===`y`?Ss[e]?null:(Ss[e]=!0,()=>{Ss[e]=!1}):Ss.x||Ss.y?null:(Ss.x=Ss.y=!0,()=>{Ss.x=Ss.y=!1})}function Ts(e,t){let n=So(e),r=new AbortController;return[n,{passive:!0,...t,signal:r.signal},()=>r.abort()]}function Es(e){return!(e.pointerType===`touch`||Cs())}function Ds(e,t,n={}){let[r,i,a]=Ts(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(!Es(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 Os=(e,t)=>t?e===t||Os(e,t.parentElement):!1,ks=e=>e.pointerType===`mouse`?typeof e.button!=`number`||e.button<=0:e.isPrimary!==!1,As=new Set([`BUTTON`,`INPUT`,`SELECT`,`TEXTAREA`,`A`]);function js(e){return As.has(e.tagName)||e.isContentEditable===!0}var Ms=new Set([`INPUT`,`SELECT`,`TEXTAREA`]);function Ns(e){return Ms.has(e.tagName)||e.isContentEditable===!0}var Ps=new WeakSet;function Fs(e){return t=>{t.key===`Enter`&&e(t)}}function Is(e,t){e.dispatchEvent(new PointerEvent(`pointer`+t,{isPrimary:!0,bubbles:!0}))}var Ls=(e,t)=>{let n=e.currentTarget;if(!n)return;let r=Fs(()=>{if(Ps.has(n))return;Is(n,`down`);let e=Fs(()=>{Is(n,`up`)});n.addEventListener(`keyup`,e,t),n.addEventListener(`blur`,()=>Is(n,`cancel`),t)});n.addEventListener(`keydown`,r,t),n.addEventListener(`blur`,()=>n.removeEventListener(`keydown`,r),t)};function Rs(e){return ks(e)&&!Cs()}var zs=new WeakSet;function Bs(e,t,n={}){let[r,i,a]=Ts(e,n),o=e=>{let r=e.currentTarget;if(!Rs(e)||zs.has(e))return;Ps.add(r),n.stopPropagation&&zs.add(e);let a=t(r,e),o={...i,capture:!0},s=(e,t)=>{window.removeEventListener(`pointerup`,c,o),window.removeEventListener(`pointercancel`,l,o),Ps.has(r)&&Ps.delete(r),Rs(e)&&typeof a==`function`&&a(e,{success:t})},c=e=>{s(e,r===window||r===document||n.useGlobalTarget||Os(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),yo(e)&&(e.addEventListener(`focus`,e=>Ls(e,i)),!js(e)&&!e.hasAttribute(`tabindex`)&&(e.tabIndex=0))}),a}var Vs=new WeakMap,Hs,Us=(e,t,n)=>(r,i)=>i&&i[0]?i[0][e+`Size`]:bo(r)&&`getBBox`in r?r.getBBox()[t]:r[n],Ws=Us(`inline`,`width`,`offsetWidth`),Gs=Us(`block`,`height`,`offsetHeight`);function Ks({target:e,borderBoxSize:t}){Vs.get(e)?.forEach(n=>{n(e,{get width(){return Ws(e,t)},get height(){return Gs(e,t)}})})}function qs(e){e.forEach(Ks)}function Js(){typeof ResizeObserver<`u`&&(Hs=new ResizeObserver(qs))}function Ys(e,t){Hs||Js();let n=So(e);return n.forEach(e=>{let n=Vs.get(e);n||(n=new Set,Vs.set(e,n)),n.add(t),Hs?.observe(e)}),()=>{n.forEach(e=>{let n=Vs.get(e);n?.delete(t),n?.size||Hs?.unobserve(e)})}}var Xs=new Set,Zs;function Qs(){Zs=()=>{let e={get width(){return window.innerWidth},get height(){return window.innerHeight}};Xs.forEach(t=>t(e))},window.addEventListener(`resize`,Zs)}function $s(e){return Xs.add(e),Zs||Qs(),()=>{Xs.delete(e),!Xs.size&&typeof Zs==`function`&&(window.removeEventListener(`resize`,Zs),Zs=void 0)}}function ec(e,t){return typeof e==`function`?$s(e):Ys(e,t)}var tc={value:null,addProjectionMetrics:null};function nc(e){return bo(e)&&e.tagName===`svg`}var rc=e=>typeof e==`number`?e:parseFloat(e),ic=()=>({translate:0,scale:1,origin:0,originPoint:0}),ac=()=>({x:ic(),y:ic()}),oc=()=>({min:0,max:0}),B=()=>({x:oc(),y:oc()}),sc=new WeakMap;function cc(e){return typeof e==`object`&&!!e&&typeof e.start==`function`}function lc(e){return typeof e==`string`||Array.isArray(e)}var uc=[`animate`,`whileInView`,`whileFocus`,`whileHover`,`whileTap`,`whileDrag`,`exit`],dc=[`initial`,...uc];function fc(e){if(cc(e.animate))return!0;for(let t=0;t<dc.length;t++)if(lc(e[dc[t]]))return!0;return!1}function pc(e){return!!(fc(e)||e.variants)}function mc(e,t,n){for(let r in t){let i=t[r],a=n[r];if(z(i))e.addValue(r,i);else if(z(a))e.addValue(r,Ca(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,Ca(t===void 0?i:t,{owner:e}))}}}for(let r in n)t[r]===void 0&&e.removeValue(r);return t}var hc={current:null},gc={current:!1},_c=typeof window<`u`;function vc(){if(gc.current=!0,_c){if(window.matchMedia){let e=window.matchMedia(`(prefers-reduced-motion)`),t=()=>hc.current=e.matches;e.addEventListener(`change`,t),t()}else hc.current=!1}}var yc=[`AnimationStart`,`AnimationComplete`,`Update`,`BeforeLayoutMeasure`,`LayoutMeasure`,`LayoutAnimationStart`,`LayoutAnimationComplete`],bc={};function xc(e){bc=e}function Sc(){return bc}var Cc=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=Ri,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=j.now();this.renderScheduledAt<e&&(this.renderScheduledAt=e,I.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=fc(t),this.isVariantNode=pc(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&&z(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,sc.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:(gc.current||vc(),this.shouldReduceMotion=hc.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(),fr(this.notifyUpdate),fr(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&&sa.has(e)&&this.current instanceof HTMLElement){let{factory:n,keyframes:r,times:i,ease:a,duration:o}=t.accelerate,s=new Zi({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=R.has(e);n&&this.onBindTransform&&this.onBindTransform();let r=t.on(`change`,t=>{this.latestValues[e]=t,this.props.onUpdate&&I.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 bc){let t=bc[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):B()}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<yc.length;t++){let n=yc[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=mc(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=Ca(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`&&!P.test(n)&&P.test(t)&&(n=ci(e,t)),this.setBaseTarget(e,z(n)?n.get():n)),z(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(){bs.render(this.render)}},wc=class extends Cc{constructor(){super(...arguments),this.KeyframeResolver=lo}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;z(e)&&(this.childSubscription=e.on(`change`,e=>{this.current&&(this.current.textContent=`${e}`)}))}},Tc=class{constructor(e){this.isMounted=!1,this.node=e}update(){}};function Ec(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 Dc={};function Oc(e,{layout:t,layoutId:n}){return R.has(e)||e.startsWith(`origin`)||(t||n!==void 0)&&(!!Dc[e]||e===`opacity`)}function kc(e,t,n){let r=e.style,i=t?.style,a={};if(!r)return a;for(let t in r)(z(r[t])||i&&z(i[t])||Oc(t,e)||n?.getValue(t)?.liveStyle!==void 0)&&(a[t]=r[t]);return a}function Ac(e){return window.getComputedStyle(e)}var jc=class extends wc{constructor(){super(...arguments),this.type=`html`,this.renderInstance=Ec}mount(e){e.style,super.mount(e)}readValueFromInstance(e,t){if(R.has(t))return this.projection?.isProjecting?vi(t):bi(e,t);{let n=Ac(e),r=($t(t)?n.getPropertyValue(t):n[t])||0;return typeof r==`string`?r.trim():r}}measureInstanceViewportBox(e,{transformPagePoint:t}){return ps(e,t)}build(e,t,n){Lo(e,t,n.transformTemplate)}scrapeMotionValuesFromProps(e,t,n){return kc(e,t,n)}},Mc=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`]),Nc=e=>typeof e==`string`&&e.toLowerCase()===`svg`;function Pc(e,t,n,r){Ec(e,t,void 0,r);for(let n in t.attrs)e.setAttribute(Mc.has(n)?n:Ja(n),t.attrs[n])}function Fc(e,t,n){let r=kc(e,t,n);for(let n in e)if(z(e[n])||z(t[n])){let t=Si.indexOf(n)===-1?n:`attr`+n.charAt(0).toUpperCase()+n.substring(1);r[t]=e[n]}return r}var Ic=class extends wc{constructor(){super(...arguments),this.type=`svg`,this.isSVGTag=!1,this.measureInstanceViewportBox=B}getBaseTargetFromProps(e,t){return R.has(t)?super.getBaseTargetFromProps(e,t)??vi(t):e[t]}getDefaultValue(e){return R.has(e)?this.latestValues[e]??vi(e):void 0}readValueFromInstance(e,t){if(R.has(t)){let e=oi(t);return e&&e.default||0}if(Vo.includes(t)){let n=getComputedStyle(e)[t];if(typeof n==`string`&&n)return n.trim()}return t=Mc.has(t)?t:Ja(t),e.getAttribute(t)}scrapeMotionValuesFromProps(e,t,n){return Fc(e,t,n)}build(e,t,n){Ho(e,t,this.isSVGTag,n.transformTemplate,n.style)}renderInstance(e,t,n,r){Pc(e,t,n,r)}mount(e){this.isSVGTag=Nc(e.tagName),super.mount(e)}};function Lc(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 Rc=[...uc].reverse();function zc(e){let t=t=>Promise.all(t.map(({animation:t,options:n})=>to(e,t,n))),n=Vc(),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(Rc.forEach((t,r)=>{let i=n[t],h=o[t],g=m&&m.props[t],_=h===void 0?lc(g)||g===!1?g:void 0:h,v=lc(_),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||cc(_)||typeof _==`boolean`)return;if(t===`exit`&&i.isActive&&y!==!0){f={...f,...i.prevResolvedValues};return}let x=Bc(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}=za(e,n,Ba(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)?!Lc(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=za(s,n)?.transition?.delayChildren;r.delay=va(s.enteringChildren,e,t)}u.push({animation:n,options:r})}}),d.size){let{initial:t}=o,n={},r=typeof t!=`boolean`&&za(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&&!z(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=Vc(),i=!0}}}function Bc(e,t){return typeof t==`string`?t!==e:Array.isArray(t)?!Lc(t,e):!1}function Vc(){let e={};for(let t of uc)e[t]={isActive:t===`animate`,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}};return e}function Hc(e,t){e.min=t.min,e.max=t.max}function Uc(e,t){Hc(e.x,t.x),Hc(e.y,t.y)}function Wc(e,t){e.translate=t.translate,e.scale=t.scale,e.originPoint=t.originPoint,e.origin=t.origin}var Gc=.9999,Kc=1.0001,qc=-.01,Jc=.01;function V(e){return e.max-e.min}function Yc(e,t,n){return Math.abs(e-t)<=n}function Xc(e,t,n,r=.5){e.origin=r,e.originPoint=F(t.min,t.max,e.origin),e.scale=V(n)/V(t),e.translate=F(n.min,n.max,e.origin)-e.originPoint,(e.scale>=Gc&&e.scale<=Kc||isNaN(e.scale))&&(e.scale=1),(e.translate>=qc&&e.translate<=Jc||isNaN(e.translate))&&(e.translate=0)}function Zc(e,t,n,r){Xc(e.x,t.x,n.x,r?r.originX:void 0),Xc(e.y,t.y,n.y,r?r.originY:void 0)}function Qc(e,t,n,r=0){e.min=(r?F(n.min,n.max,r):n.min)+t.min,e.max=e.min+V(t)}function $c(e,t,n,r){Qc(e.x,t.x,n.x,r?.x),Qc(e.y,t.y,n.y,r?.y)}function el(e,t,n,r=0){let i=r?F(n.min,n.max,r):n.min;e.min=t.min-i,e.max=e.min+V(t)}function tl(e,t,n,r){el(e.x,t.x,n.x,r?.x),el(e.y,t.y,n.y,r?.y)}function nl(e,t,n,r,i){return e-=t,e=ns(e,1/n,r),i!==void 0&&(e=ns(e,1/i,r)),e}function rl(e,t=0,n=1,r=.5,i,a=e,o=e){if(bn.test(t)&&(t=parseFloat(t),t=F(o.min,o.max,t/100)-o.min),typeof t!=`number`)return;let s=F(a.min,a.max,r);e===a&&(s-=t),e.min=nl(e.min,t,n,s,i),e.max=nl(e.max,t,n,s,i)}function il(e,t,[n,r,i],a,o){rl(e,t[n],t[r],t[i],t.scale,a,o)}var al=[`x`,`scaleX`,`originX`],ol=[`y`,`scaleY`,`originY`];function sl(e,t,n,r){il(e.x,t,al,n?n.x:void 0,r?r.x:void 0),il(e.y,t,ol,n?n.y:void 0,r?r.y:void 0)}function cl(e){return e.translate===0&&e.scale===1}function ll(e){return cl(e.x)&&cl(e.y)}function ul(e,t){return e.min===t.min&&e.max===t.max}function dl(e,t){return ul(e.x,t.x)&&ul(e.y,t.y)}function fl(e,t){return Math.round(e.min)===Math.round(t.min)&&Math.round(e.max)===Math.round(t.max)}function pl(e,t){return fl(e.x,t.x)&&fl(e.y,t.y)}function ml(e){return V(e.x)/V(e.y)}function hl(e,t){return e.translate===t.translate&&e.scale===t.scale&&e.originPoint===t.originPoint}function gl(e){return[e(`x`),e(`y`)]}function _l(e,t){return t.max===t.min?0:e/(t.max-t.min)*100}var vl={correct:(e,t)=>{if(!t.target)return e;if(typeof e==`string`){if(M.test(e))e=parseFloat(e);else return e}return`${_l(e,t.target.x)}% ${_l(e,t.target.y)}%`}},yl={correct:(e,{treeScale:t,projectionDelta:n})=>{let r=e,i=P.parse(e);if(i.length>5)return r;let a=P.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=F(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 bl(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 xl=uo.length,Sl=e=>typeof e==`number`||M.test(e);function Cl(e,t,n,r,i,a){i?(e.opacity=F(0,n.opacity??1,Tl(r)),e.opacityExit=F(t.opacity??1,0,El(r))):a&&(e.opacity=F(t.opacity??1,n.opacity??1,r));for(let i=0;i<xl;i++){let a=uo[i],o=wl(t,a),s=wl(n,a);(o!==void 0||s!==void 0)&&(o||=0,s||=0,o===0||s===0||Sl(o)===Sl(s)?(e[a]=Math.max(F(rc(o),rc(s),r),0),(bn.test(s)||bn.test(o))&&(e[a]+=`%`)):e[a]=s)}(t.rotate||n.rotate)&&(e.rotate=F(t.rotate||0,n.rotate||0,r))}function wl(e,t){return e[t]===void 0?e.borderRadius:e[t]}var Tl=Dl(0,.5,Rt),El=Dl(.5,.95,bt);function Dl(e,t,n){return r=>r<e?0:r>t?1:n(St(e,t,r))}function Ol(e,t,n){let r=z(e)?e:Ca(e);return r.start(Na(``,r,t,n)),r.animation}function kl(e,t,n,r={passive:!0}){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)}var Al=(e,t)=>e.depth-t.depth,jl=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(Al),this.isDirty=!1,this.children.forEach(e)}};function Ml(e,t){let n=j.now(),r=({timestamp:i})=>{let a=i-n;a>=t&&(fr(r),e(a-t))};return I.setup(r,!0),()=>fr(r)}function Nl(e){return z(e)?e.get():e}var Pl=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)}},Fl={borderRadius:{...vl,applyTo:[...uo]},borderTopLeftRadius:vl,borderTopRightRadius:vl,borderBottomLeftRadius:vl,borderBottomRightRadius:vl,boxShadow:yl},Il={hasAnimatedSinceResize:!0,hasEverUpdated:!1};Object.assign(Dc,{...Fl,...Dc});var Ll={nodes:0,calculatedTargetDeltas:0,calculatedProjections:0},Rl=[``,`X`,`Y`,`Z`],zl=1e3,Bl=0;function Vl(e,t,n,r){let{latestValues:i}=t;i[e]&&(n[e]=i[e],t.setStaticValue(e,0),r&&(r[e]=0))}function Hl(e){if(e.hasCheckedOptimisedAppear=!0,e.root===e)return;let{visualElement:t}=e.options;if(!t)return;let n=Xa(t);if(window.MotionHasOptimisedAnimation(n,`transform`)){let{layout:t,layoutId:r}=e.options;window.MotionCancelOptimisedAnimation(n,`transform`,I,!(t||r))}let{parent:r}=e;r&&!r.hasCheckedOptimisedAppear&&Hl(r)}function Ul({attachResizeListener:e,defaultParent:t,measureScroll:n,checkIsScrollRoot:r,resetTransform:i}){return class{constructor(e={},n=t?.()){this.id=Bl++,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,tc.value&&(Ll.nodes=Ll.calculatedTargetDeltas=Ll.calculatedProjections=0),this.nodes.forEach(Kl),this.nodes.forEach(nu),this.nodes.forEach(ru),this.nodes.forEach(ql),tc.addProjectionMetrics&&tc.addProjectionMetrics(Ll)},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 jl)}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=bo(t)&&!nc(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;I.read(()=>{r=window.innerWidth}),e(t,()=>{let e=window.innerWidth;e!==r&&(r=e,this.root.updateBlockedByResize=!0,n&&n(),n=Ml(i,250),Il.hasAnimatedSinceResize&&(Il.hasAnimatedSinceResize=!1,this.nodes.forEach(tu)))})}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()||uu,{onLayoutAnimationStart:o,onLayoutAnimationComplete:s}=i.getProps(),c=!this.targetLayout||!pl(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={...Ta(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||tu(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(),fr(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(iu),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&&Hl(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(Xl),this.nodes.forEach(Yl);return}if(this.animationId<=this.animationCommitId){this.nodes.forEach(Zl);return}this.animationCommitId=this.animationId,this.isUpdating?(this.isUpdating=!1,this.nodes.forEach(Ql),this.nodes.forEach($l),this.nodes.forEach(eu),this.nodes.forEach(Wl),this.nodes.forEach(Gl)):this.nodes.forEach(Zl),this.clearAllSnapshots();let e=j.now();A.delta=mt(0,1e3/60,e-A.timestamp),A.timestamp=e,A.isProcessing=!0,pr.update.process(A),pr.preRender.process(A),pr.render.process(A),A.isProcessing=!1}didUpdate(){this.updateScheduled||(this.updateScheduled=!0,bs.read(this.scheduleUpdate))}clearAllSnapshots(){this.nodes.forEach(Jl),this.sharedNodes.forEach(au)}scheduleUpdateProjection(){this.projectionUpdateScheduled||(this.projectionUpdateScheduled=!0,I.preRender(this.updateProjection,!1,!0))}scheduleCheckAfterUnmount(){I.postRender(()=>{this.isLayoutDirty?this.root.didUpdate():this.root.checkUpdateFailed()})}updateSnapshot(){!this.snapshot&&this.instance&&(this.snapshot=this.measure(),this.snapshot&&!V(this.snapshot.measuredBox.x)&&!V(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||=B(),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&&!ll(this.projectionDelta),n=this.getTransformTemplate(),r=n?n(this.latestValues,``):void 0,a=r!==this.prevTransformTemplateValue;e&&this.instance&&(t||$o(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)),mu(n),{animationId:this.root.animationId,measuredBox:t,layoutBox:n,latestValues:{},source:this.id}}measurePageBox(){let{visualElement:e}=this.options;if(!e)return B();let t=e.measureViewportBox();if(!(this.scroll?.wasRoot||this.path.some(gu))){let{scroll:e}=this.root;e&&(ls(t.x,e.offset.x),ls(t.y,e.offset.y))}return t}removeElementScroll(e){let t=B();if(Uc(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&&Uc(t,e),ls(t.x,i.offset.x),ls(t.y,i.offset.y))}return t}applyTransform(e,t=!1,n){let r=n||B();Uc(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&&(ls(r.x,-n.scroll.offset.x),ls(r.y,-n.scroll.offset.y)),$o(n.latestValues)&&fs(r,n.latestValues,n.layout?.layoutBox)}return $o(this.latestValues)&&fs(r,this.latestValues,this.layout?.layoutBox),r}removeTransform(e){let t=B();Uc(t,e);for(let e=0;e<this.path.length;e++){let n=this.path[e];if(!$o(n.latestValues))continue;let r;n.instance&&(Qo(n.latestValues)&&n.updateSnapshot(),r=B(),Uc(r,n.measurePageBox())),sl(t,n.latestValues,n.snapshot?.layoutBox,r)}return $o(this.latestValues)&&sl(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!==A.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=A.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=B(),this.targetWithTransforms=B()),this.relativeTarget&&this.relativeTargetOrigin&&this.relativeParent&&this.relativeParent.target?(this.forceRelativeParentToResolveTarget(),$c(this.target,this.relativeTarget,this.relativeParent.target,this.options.layoutAnchor||void 0)):this.targetDelta?(this.resumingFrom?this.applyTransform(this.layout.layoutBox,!1,this.target):Uc(this.target,this.layout.layoutBox),as(this.target,this.targetDelta)):Uc(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),tc.value&&Ll.calculatedTargetDeltas++)}getClosestProjectingParent(){if(!(!this.parent||Qo(this.parent.latestValues)||es(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=B(),this.relativeTargetOrigin=B(),tl(this.relativeTargetOrigin,t,n,this.options.layoutAnchor||void 0),Uc(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===A.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;Uc(this.layoutCorrected,this.layout.layoutBox);let a=this.treeScale.x,o=this.treeScale.y;cs(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=B());let{target:s}=e;if(!s){this.prevProjectionDelta&&(this.createProjectionDeltas(),this.scheduleRender());return}!this.projectionDelta||!this.prevProjectionDelta?this.createProjectionDeltas():(Wc(this.prevProjectionDelta.x,this.projectionDelta.x),Wc(this.prevProjectionDelta.y,this.projectionDelta.y)),Zc(this.projectionDelta,this.layoutCorrected,s,this.latestValues),(this.treeScale.x!==a||this.treeScale.y!==o||!hl(this.projectionDelta.x,this.prevProjectionDelta.x)||!hl(this.projectionDelta.y,this.prevProjectionDelta.y))&&(this.hasProjected=!0,this.scheduleRender(),this.notifyListeners(`projectionUpdate`,s)),tc.value&&Ll.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=ac(),this.projectionDelta=ac(),this.projectionDeltaWithTransform=ac()}setAnimationOrigin(e,t=!1,n){let r=this.snapshot,i=r?r.latestValues:{},a={...this.latestValues},o=ac();(!this.relativeParent||!this.relativeParent.options.layoutRoot)&&(this.relativeTarget=this.relativeTargetOrigin=void 0),this.attemptToResolveRelativeTarget=!t;let s=B(),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(lu));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=F(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=F(e.y.scale,1,n),o.y.origin=e.y.origin,o.y.originPoint=e.y.originPoint):(ou(o.x,e.x,n),ou(o.y,e.y,n)),this.setTargetDelta(o),this.relativeTarget&&this.relativeTargetOrigin&&this.layout&&this.relativeParent&&this.relativeParent.layout&&(tl(s,this.layout.layoutBox,this.relativeParent.layout.layoutBox,this.options.layoutAnchor||void 0),cu(this.relativeTarget,this.relativeTargetOrigin,s,n),f&&dl(this.relativeTarget,f)&&(this.isProjectionDirty=!1),f||=B(),Uc(f,this.relativeTarget)),c&&(this.animationValues=a,Cl(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&&=(fr(this.pendingAnimation),void 0),this.pendingAnimation=I.update(()=>{Il.hasAnimatedSinceResize=!0,this.motionValue||=Ca(0),this.motionValue.jump(0,!1),this.currentAnimation=Ol(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()}}),qr(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(zl),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&&hu(this.options.animationType,this.layout.layoutBox,n.layoutBox)){i=this.target||B();let t=V(this.layout.layoutBox.x);i.x.min=e.target.x.min,i.x.max=i.x.min+t;let n=V(this.layout.layoutBox.y);i.y.min=e.target.y.min,i.y.max=i.y.min+n}Uc(t,i),fs(t,r),Zc(this.projectionDeltaWithTransform,this.layoutCorrected,t,r)}}registerSharedNode(e,t){this.sharedNodes.has(e)||this.sharedNodes.set(e,new Pl),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&&Vl(`z`,e,r,this.animationValues);for(let t=0;t<Rl.length;t++)Vl(`rotate${Rl[t]}`,e,r,this.animationValues),Vl(`skew${Rl[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=Nl(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=Nl(t?.pointerEvents)||``),this.hasProjected&&!$o(this.latestValues)&&(e.transform=n?n({},``):`none`,this.hasProjected=!1);return}e.visibility=``;let i=r.animationValues||r.latestValues;this.applyTransformsToTarget();let a=bl(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 Dc){if(i[t]===void 0)continue;let{correct:n,applyTo:o,isCSSVariable:s}=Dc[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?Nl(t?.pointerEvents)||``:`none`)}clearSnapshot(){this.resumeFrom=this.snapshot=void 0}resetTree(){this.root.nodes.forEach(e=>e.currentAnimation?.stop()),this.root.nodes.forEach(Yl),this.root.sharedNodes.clear()}}}function Wl(e){e.updateLayout()}function Gl(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`)gl(e=>{let r=a?t.measuredBox[e]:t.layoutBox[e],i=V(r);r.min=n[e].min,r.max=r.min+i});else if(i===`x`||i===`y`){let e=i===`x`?`y`:`x`;Hc(a?t.measuredBox[e]:t.layoutBox[e],n[e])}else hu(i,t.layoutBox,n)&&gl(r=>{let i=a?t.measuredBox[r]:t.layoutBox[r],o=V(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=ac();Zc(o,n,t.layoutBox);let s=ac();a?Zc(s,e.applyTransform(r,!0),t.measuredBox):Zc(s,n,t.layoutBox);let c=!ll(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=B();tl(s,t.layoutBox,i.layoutBox,o);let c=B();tl(c,n,a.layoutBox,o),pl(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 Kl(e){tc.value&&Ll.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 ql(e){e.isProjectionDirty=e.isSharedProjectionDirty=e.isTransformDirty=!1}function Jl(e){e.clearSnapshot()}function Yl(e){e.clearMeasurements()}function Xl(e){e.isLayoutDirty=!0,e.updateLayout()}function Zl(e){e.isLayoutDirty=!1}function Ql(e){e.isAnimationBlocked&&e.layout&&!e.isLayoutDirty&&(e.snapshot=e.layout,e.isLayoutDirty=!0)}function $l(e){e.relativeTarget&&e.relativeParent?.isLayoutDirty&&(e.currentAnimation?e.isLayoutDirty=!0:(e.targetDelta=void 0,e.removeRelativeTarget()))}function eu(e){let{visualElement:t}=e.options;t&&t.getProps().onBeforeLayoutMeasure&&t.notify(`BeforeLayoutMeasure`),e.resetTransform()}function tu(e){e.finishAnimation(),e.targetDelta=e.relativeTarget=e.target=void 0,e.isProjectionDirty=!0}function nu(e){e.resolveTargetDelta()}function ru(e){e.calcProjection()}function iu(e){e.resetSkewAndRotation()}function au(e){e.removeLeadSnapshot()}function ou(e,t,n){e.translate=F(t.translate,0,n),e.scale=F(t.scale,1,n),e.origin=t.origin,e.originPoint=t.originPoint}function su(e,t,n,r){e.min=F(t.min,n.min,r),e.max=F(t.max,n.max,r)}function cu(e,t,n,r){su(e.x,t.x,n.x,r),su(e.y,t.y,n.y,r)}function lu(e){return e.animationValues&&e.animationValues.opacityExit!==void 0}var uu={duration:.45,ease:[.4,0,.1,1]},du=e=>typeof navigator<`u`&&navigator.userAgent&&navigator.userAgent.toLowerCase().includes(e),fu=du(`applewebkit/`)&&!du(`chrome/`)?Math.round:bt;function pu(e){e.min=fu(e.min),e.max=fu(e.max)}function mu(e){pu(e.x),pu(e.y)}function hu(e,t,n){return e===`position`||e===`preserve-aspect`&&!Yc(ml(t),ml(n),.2)}function gu(e){return e!==e.root&&e.scroll?.wasRoot}var _u=Ul({attachResizeListener:(e,t)=>kl(e,`resize`,t),measureScroll:()=>({x:document.documentElement.scrollLeft||document.body?.scrollLeft||0,y:document.documentElement.scrollTop||document.body?.scrollTop||0}),checkIsScrollRoot:()=>!0}),vu=e=>!e.isLayoutDirty&&e.willUpdate(!1);function yu(){let e=new Set,t=new WeakMap,n=()=>e.forEach(vu);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 bu={current:void 0},xu=Ul({measureScroll:e=>({x:e.scrollLeft,y:e.scrollTop}),defaultParent:()=>{if(!bu.current){let e=new _u({});e.mount(window),e.setOptions({layoutScroll:!0}),bu.current=e}return bu.current},resetTransform:(e,t)=>{e.style.transform=t===void 0?`none`:t},checkIsScrollRoot:e=>window.getComputedStyle(e).position===`fixed`}),Su=(0,m.createContext)({transformPagePoint:e=>e,isStatic:!1,reducedMotion:`never`});function Cu(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function wu(...e){return t=>{let n=!1,r=e.map(e=>{let r=Cu(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():Cu(e[t],null)}}}}function Tu(...e){return m.useCallback(wu(...e),e)}var Eu=class extends m.Component{getSnapshotBeforeUpdate(e){let t=this.props.childRef.current;if(yo(t)&&e.isPresent&&!this.props.isPresent&&this.props.pop!==!1){let e=t.offsetParent,n=yo(e)&&e.offsetWidth||0,r=yo(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 Du({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)(Su),u=Tu(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)(Eu,{isPresent:t,childRef:s,sizeRef:c,pop:a,children:a===!1?e:m.cloneElement(e,{ref:u})})}var Ou=({children:e,initial:t,isPresent:n,onExitComplete:r,custom:i,presenceAffectsLayout:a,mode:o,anchorX:s,anchorY:c,root:l})=>{let u=lt(ku),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)(Du,{pop:o===`popLayout`,isPresent:n,anchorX:s,anchorY:c,root:l,children:e}),(0,h.jsx)(dt.Provider,{value:_,children:e})};function ku(){return new Map}function Au(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 ju(){return Mu((0,m.useContext)(dt))}function Mu(e){return e===null||e.isPresent}var Nu=e=>e.key||``;function Pu(e){let t=[];return m.Children.forEach(e,e=>{(0,m.isValidElement)(e)&&t.push(e)}),t}var H=({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]=Au(o),f=(0,m.useMemo)(()=>Pu(e),[e]),p=o&&!u?[]:f.map(Nu),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=Nu(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(Nu(n));r===-1?(e.splice(t++,0,n),C.push(n)):t=r+C.length+1}return C.every(e=>_.get(Nu(e)))?e=f:a===`wait`&&(e=C),S(Pu(e)),b(f),null}let{forceRender:ee}=(0,m.useContext)(ct);return(0,h.jsx)(h.Fragment,{children:x.map(e=>{let m=Nu(e),y=o&&!u?!1:f===x||p.includes(m);return(0,h.jsx)(Ou,{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)})})},Fu=(0,m.createContext)(null);function Iu(){let e=(0,m.useRef)(!1);return ut(()=>(e.current=!0,()=>{e.current=!1}),[]),e}function Lu(){let e=Iu(),[t,n]=(0,m.useState)(0),r=(0,m.useCallback)(()=>{e.current&&n(t+1)},[t]);return[(0,m.useCallback)(()=>I.postRender(r),[r]),t]}var Ru=e=>e===!0,zu=e=>Ru(e===!0)||e===`id`,Bu=({children:e,id:t,inherit:n=!0})=>{let r=(0,m.useContext)(ct),i=(0,m.useContext)(Fu),[a,o]=Lu(),s=(0,m.useRef)(null),c=r.id||i;s.current===null&&(zu(n)&&c&&(t=t?c+`-`+t:c),s.current={id:t,group:Ru(n)&&r.group||yu()});let l=(0,m.useMemo)(()=>({...s.current,forceRender:a}),[o]);return(0,h.jsx)(ct.Provider,{value:l,children:e})},Vu=(0,m.createContext)({strict:!1}),Hu={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`]},Uu=!1;function Wu(){if(Uu)return;let e={};for(let t in Hu)e[t]={isEnabled:e=>Hu[t].some(t=>!!e[t])};xc(e),Uu=!0}function Gu(){return Wu(),Sc()}function Ku(e){let t=Gu();for(let n in e)t[n]={...t[n],...e[n]};xc(t)}var qu=(0,m.createContext)({});function Ju(e,t){if(fc(e)){let{initial:t,animate:n}=e;return{initial:t===!1||lc(t)?t:void 0,animate:lc(n)?n:void 0}}return e.inherit===!1?{}:t}function Yu(e){let{initial:t,animate:n}=Ju(e,(0,m.useContext)(qu));return(0,m.useMemo)(()=>({initial:t,animate:n}),[Xu(t),Xu(n)])}function Xu(e){return Array.isArray(e)?e.join(` `):e}var Zu=()=>({style:{},transform:{},transformOrigin:{},vars:{}});function Qu(e,t,n){for(let r in t)!z(t[r])&&!Oc(r,n)&&(e[r]=t[r])}function $u({transformTemplate:e},t){return(0,m.useMemo)(()=>{let n=Zu();return Lo(n,t,e),Object.assign({},n.vars,n.style)},[t])}function ed(e,t){let n=e.style||{},r={};return Qu(r,n,e),Object.assign(r,$u(e,t)),r}function td(e,t){let n={},r=ed(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 nd=()=>({...Zu(),attrs:{}});function rd(e,t,n,r){let i=(0,m.useMemo)(()=>{let n=nd();return Ho(n,t,Nc(r),e.transformTemplate,e.style),{...n.attrs,style:{...n.style}}},[t]);if(e.style){let t={};Qu(t,e.style,e),i.style={...t,...i.style}}return i}var id=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 ad(e){return e.startsWith(`while`)||e.startsWith(`drag`)&&e!==`draggable`||e.startsWith(`layout`)||e.startsWith(`onTap`)||e.startsWith(`onPan`)||e.startsWith(`onLayout`)||id.has(e)}function od(e,t){return e.startsWith(`on`)?!ad(e):t?.(e)??!ad(e)}function sd(e,t,n,r){let i={};for(let a in e)(a!==`values`||typeof e.values!=`object`)&&(z(e[a])||(od(a,r)||n===!0&&ad(a)||!t&&!ad(a)||e.draggable&&a.startsWith(`onDrag`))&&(i[a]=e[a]));return i}var cd=[`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 ld(e){return typeof e!=`string`||e.includes(`-`)?!1:!!(cd.indexOf(e)>-1||/[A-Z]/u.test(e))}function ud(e,t,n,{latestValues:r},i,a=!1,o,s){let c=(o??ld(e)?rd:td)(t,r,i,e),l=sd(t,typeof e==`string`,a,s),u=e===m.Fragment?{}:{...l,...c,ref:n},{children:d}=t,f=(0,m.useMemo)(()=>z(d)?d.get():d,[d]);return(0,m.createElement)(e,{...u,children:f})}function dd({scrapeMotionValuesFromProps:e,createRenderState:t},n,r,i){return{latestValues:fd(n,r,i,e),renderState:t()}}function fd(e,t,n,r){let i={},a=r(e,{});for(let e in a)i[e]=Nl(a[e]);let{initial:o,animate:s}=e,c=fc(e),l=pc(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`&&!cc(d)){let t=Array.isArray(d)?d:[d];for(let n=0;n<t.length;n++){let r=Ra(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 pd=e=>(t,n)=>{let r=(0,m.useContext)(qu),i=(0,m.useContext)(dt),a=()=>dd(e,t,r,i);return n?a():lt(a)},md=pd({scrapeMotionValuesFromProps:kc,createRenderState:Zu}),hd=pd({scrapeMotionValuesFromProps:Fc,createRenderState:nd}),gd=Symbol.for(`motionComponentSymbol`);function _d(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 vd=(0,m.createContext)({});function yd(e){return e&&typeof e==`object`&&Object.prototype.hasOwnProperty.call(e,`current`)}function bd(e,t,n,r,i,a){let{visualElement:o}=(0,m.useContext)(qu),s=(0,m.useContext)(Vu),c=(0,m.useContext)(dt),l=(0,m.useContext)(Su),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)(vd);h&&!h.projection&&i&&(h.type===`html`||h.type===`svg`)&&xd(f.current,n,i,g);let _=(0,m.useRef)(!1);(0,m.useInsertionEffect)(()=>{h&&_.current&&h.update(n,c)});let v=n[Ya],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 xd(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:Sd(e.parent)),e.projection.setOptions({layoutId:i,layout:a,alwaysMeasureLayout:!!o||s&&yd(s),visualElement:e,animationType:typeof a==`string`?a:`both`,initialPromotionConfig:r,crossfade:d,layoutScroll:c,layoutRoot:l,layoutAnchor:u})}function Sd(e){if(e)return e.options.allowProjection===!1?Sd(e.parent):e.projection}function Cd(e,{forwardMotionProps:t=!1,type:n}={},r,i){r&&Ku(r);let a=n?n===`svg`:ld(e),o=a?hd:md;function s(n,s){let c,l={...(0,m.useContext)(Su),...n,layoutId:wd(n)},{isStatic:u,isValidProp:d}=l,f=Yu(n),p=o(n,u);if(!u&&typeof window<`u`){Td(l,r);let t=Ed(l);c=t.MeasureLayout,f.visualElement=bd(e,p,l,i,t.ProjectionNode,a)}return(0,h.jsxs)(qu.Provider,{value:f,children:[c&&f.visualElement?(0,h.jsx)(c,{visualElement:f.visualElement,...l}):null,ud(e,n,_d(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[gd]=e,c}function wd({layoutId:e}){let t=(0,m.useContext)(ct).id;return t&&e!==void 0?t+`-`+e:e}function Td(e,t){(0,m.useContext)(Vu).strict}function Ed(e){let{drag:t,layout:n}=Gu();if(!t&&!n)return{};let r={...t,...n};return{MeasureLayout:t?.isEnabled(e)||n?.isEnabled(e)?r.MeasureLayout:void 0,ProjectionNode:r.ProjectionNode}}function Dd(e,t){if(typeof Proxy>`u`)return Cd;let n=new Map,r=(n,r)=>Cd(n,r,e,t);return new Proxy((e,t)=>r(e,t),{get:(i,a)=>a===`create`?r:(n.has(a)||n.set(a,Cd(a,void 0,e,t)),n.get(a))})}var Od=(e,t)=>t.isSVG??ld(e)?new Ic(t):new jc(t,{allowProjection:e!==m.Fragment}),kd=class extends Tc{constructor(e){super(e),e.animationState||=zc(e)}updateAnimationControlsSubscription(){let{animate:e}=this.node.getProps();cc(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?.()}},Ad=0,jd={animation:{Feature:kd},exit:{Feature:class extends Tc{constructor(){super(...arguments),this.id=Ad++}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}=za(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 Md(e){return{point:{x:e.pageX,y:e.pageY}}}var Nd=e=>t=>ks(t)&&e(t,Md(t));function Pd(e,t,n,r){return kl(e,t,Nd(n),r)}var Fd=({current:e})=>e?e.ownerDocument.defaultView:null,Id=(e,t)=>Math.abs(e-t);function Ld(e,t){let n=Id(e.x,t.x),r=Id(e.y,t.y);return Math.sqrt(n**2+r**2)}var Rd=new Set([`auto`,`scroll`]),zd=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=Bd(this.lastRawMoveEventInfo,this.transformPagePoint));let e=Hd(this.lastMoveEventInfo,this.history),t=this.startEvent!==null,n=Ld(e.offset,{x:0,y:0})>=this.distanceThreshold;if(!t&&!n)return;let{point:r}=e;this.history.push({...r,timestamp:j.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=Bd(t,this.transformPagePoint),this.hasPendingMove=!0,I.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=Hd(e.type===`pointercancel`?this.lastMoveEventInfo:Bd(t,this.transformPagePoint),this.history);this.startEvent&&n&&n(e,a),r&&r(e,a)},!ks(e))return;this.dragSnapToOrigin=i,this.handlers=t,this.transformPagePoint=n,this.distanceThreshold=a,this.contextWindow=r||window;let s=Bd(Md(e),this.transformPagePoint),{point:c}=s,{timestamp:l}=A;this.history=[{...c,timestamp:l}];let{onSessionStart:u}=t;u&&u(e,Hd(s,this.history));let d={passive:!0,capture:!0};this.removeListeners=xt(Pd(this.contextWindow,`pointermove`,this.handlePointerMove,d),Pd(this.contextWindow,`pointerup`,this.handlePointerUp,d),Pd(this.contextWindow,`pointercancel`,this.handlePointerUp,d)),o&&this.startScrollTracking(o)}startScrollTracking(e){let t=e.parentElement;for(;t;){let e=getComputedStyle(t);(Rd.has(e.overflowX)||Rd.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),I.update(this.updatePoint,!0))}updateHandlers(e){this.handlers=e}end(){this.removeListeners&&this.removeListeners(),this.removeScrollListeners&&this.removeScrollListeners(),this.scrollPositions.clear(),fr(this.updatePoint)}};function Bd(e,t){return t?{point:t(e.point)}:e}function Vd(e,t){return{x:e.x-t.x,y:e.y-t.y}}function Hd({point:e},t){return{point:e,delta:Vd(e,Wd(t)),offset:Vd(e,Ud(t)),velocity:Gd(t,.1)}}function Ud(e){return e[0]}function Wd(e){return e[e.length-1]}function Gd(e,t){if(e.length<2)return{x:0,y:0};let n=e.length-1,r=null,i=Wd(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=k(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 Kd(e,{min:t,max:n},r){return t!==void 0&&e<t?e=r?F(t,e,r.min):Math.max(e,t):n!==void 0&&e>n&&(e=r?F(n,e,r.max):Math.min(e,n)),e}function qd(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 Jd(e,{top:t,left:n,bottom:r,right:i}){return{x:qd(e.x,n,i),y:qd(e.y,t,r)}}function Yd(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 Xd(e,t){return{x:Yd(e.x,t.x),y:Yd(e.y,t.y)}}function Zd(e,t){let n=.5,r=V(e),i=V(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 Qd(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 $d=.35;function ef(e=$d){return e===!1?e=0:e===!0&&(e=$d),{x:tf(e,`left`,`right`),y:tf(e,`top`,`bottom`)}}function tf(e,t,n){return{min:nf(e,t),max:nf(e,n)}}function nf(e,t){return typeof e==`number`?e:e[t]||0}var rf=new WeakMap,af=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=B(),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=ws(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),gl(e=>{let t=this.getAxisMotionValue(e).get()||0;if(bn.test(t)){let{projection:n}=this.visualElement;if(n&&n.layout){let r=n.layout.layoutBox[e];r&&(t=V(r)*(parseFloat(t)/100))}}this.originPoint[e]=t}),i&&I.update(()=>i(e,t),!1,!0),qa(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=lf(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&&I.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 zd(e,{onSessionStart:i,onStart:a,onMove:o,onSessionEnd:s,resumeAnimation:c},{transformPagePoint:this.visualElement.getTransformPagePoint(),dragSnapToOrigin:l,distanceThreshold:n,contextWindow:Fd(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&&I.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||!cf(e,r,this.currentDirection))return;let i=this.getAxisMotionValue(e),a=this.originPoint[e]+n[e];this.constraints&&this.constraints[e]&&(a=Kd(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&&yd(e)?this.constraints||=this.resolveRefConstraints():this.constraints=e&&n?Jd(n.layoutBox,e):!1,this.elastic=ef(t),r!==this.constraints&&!yd(e)&&n&&this.constraints&&!this.hasMutatedConstraints&&gl(e=>{this.constraints!==!1&&this.getAxisMotionValue(e)&&(this.constraints[e]=Qd(n.layoutBox[e],this.constraints[e]))})}resolveRefConstraints(){let{dragConstraints:e,onMeasureDragConstraints:t}=this.getProps();if(!e||!yd(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=ms(n,r.root,this.visualElement.getTransformPagePoint()),a=Xd(r.layout.layoutBox,i);if(t){let e=t(Yo(a));this.hasMutatedConstraints=!!e,e&&(a=Jo(e))}return a}startAnimation(e){let{drag:t,dragMomentum:n,dragElastic:r,dragTransition:i,dragSnapToOrigin:a,onDragTransitionEnd:o}=this.getProps(),s=this.constraints||{},c=gl(o=>{if(!cf(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 qa(this.visualElement,e),n.start(Na(e,n,0,t,this.visualElement,!1))}stopAnimation(){gl(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();gl(e=>{if(!cf(e,n,this.currentDirection))return;let t=this.getAxisMotionValue(e),{min:r,max:o}=a[e];t.set((t.get()||0)+i[e]-F(r,o,.5))})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;let{drag:e,dragConstraints:t}=this.getProps(),{projection:n}=this.visualElement;if(!yd(t)||!n||!this.constraints)return;this.stopAnimation();let r=this.constraints,i={x:0,y:0};gl(e=>{let t=this.getAxisMotionValue(e).get();i[e]=Zd({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(),gl(t=>{let n=this.getAxisMotionValue(t);if(!cf(t,e,null)||!n.get())return;let{min:r,max:a}=this.constraints[t];n.set(F(r,a,i[t]))}),this.visualElement.render()}addListeners(){if(!this.visualElement.current)return;rf.set(this.visualElement,this);let e=this.visualElement.current,t=Pd(e,`pointerdown`,t=>{let{drag:n,dragListener:r=!0}=this.getProps(),i=t.target,a=i!==e&&Ns(i);n&&r&&!a&&this.start(t)}),n,r=()=>{let{dragConstraints:t}=this.getProps();yd(t)&&t.current&&(this.constraints=this.resolveRefConstraints(),n||=sf(e,t.current,()=>this.scalePositionWithinConstraints()))},{projection:i}=this.visualElement,a=i.addEventListener(`measure`,r);i&&!i.layout&&(i.root&&i.root.updateScroll(),i.updateLayout()),I.read(r);let o=kl(window,`resize`,()=>this.scalePositionWithinConstraints()),s=i.addEventListener(`didUpdate`,(({delta:e,hasLayoutChanged:t})=>{this.isDragging&&t&&(gl(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=$d,dragMomentum:o=!0}=e;return{...e,drag:t,dragDirectionLock:n,dragPropagation:r,dragConstraints:i,dragElastic:a,dragMomentum:o}}};function of(e){let t=!0;return()=>{if(t){t=!1;return}e()}}function sf(e,t,n){let r=ec(e,of(n)),i=ec(t,of(n));return()=>{r(),i()}}function cf(e,t,n){return(t===!0||t===e)&&(n===null||n===e)}function lf(e,t=10){let n=null;return Math.abs(e.y)>t?n=`y`:Math.abs(e.x)>t&&(n=`x`),n}var uf=class extends Tc{constructor(e){super(e),this.removeGroupControls=bt,this.removeListeners=bt,this.controls=new af(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()}},df=e=>(t,n)=>{e&&I.update(()=>e(t,n),!1,!0)},ff=class extends Tc{constructor(){super(...arguments),this.removePointerDownListener=bt}onPointerDown(e){this.session=new zd(e,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint(),contextWindow:Fd(this.node)})}createPanHandlers(){let{onPanSessionStart:e,onPanStart:t,onPan:n,onPanEnd:r}=this.node.getProps();return{onSessionStart:df(e),onStart:df(t),onMove:df(n),onEnd:(e,t)=>{delete this.session,r&&I.postRender(()=>r(e,t))}}}mount(){this.removePointerDownListener=Pd(this.node.current,`pointerdown`,e=>this.onPointerDown(e))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}},pf=!1,mf=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),pf&&i.root.didUpdate(),i.addEventListener(`animationComplete`,()=>{this.safeToRemove()}),i.setOptions({...i.options,layoutDependency:this.props.layoutDependency,onExitComplete:()=>this.safeToRemove()})),Il.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}),pf=!0,r||e.layoutDependency!==t||t===void 0||e.isPresent!==i?a.willUpdate():this.safeToRemove(),e.isPresent!==i&&(i?a.promote():a.relegate()||I.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(),bs.postRender(()=>{!n.currentAnimation&&n.isLead()&&this.safeToRemove()}))}componentWillUnmount(){let{visualElement:e,layoutGroup:t,switchLayoutGroup:n}=this.props,{projection:r}=e;pf=!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 hf(e){let[t,n]=Au(),r=(0,m.useContext)(ct);return(0,h.jsx)(mf,{...e,layoutGroup:r,switchLayoutGroup:(0,m.useContext)(vd),isPresent:t,safeToRemove:n})}var gf={pan:{Feature:ff},drag:{Feature:uf,ProjectionNode:xu,MeasureLayout:hf}};function _f(e,t,n){let{props:r}=e;e.animationState&&r.whileHover&&e.animationState.setActive(`whileHover`,n===`Start`);let i=r[`onHover`+n];i&&I.postRender(()=>i(t,Md(t)))}var vf=class extends Tc{mount(){let{current:e}=this.node;e&&(this.unmount=Ds(e,(e,t)=>(_f(this.node,t,`Start`),e=>_f(this.node,e,`End`))))}unmount(){}},yf=class extends Tc{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(kl(this.node.current,`focus`,()=>this.onFocus()),kl(this.node.current,`blur`,()=>this.onBlur()))}unmount(){}};function bf(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&&I.postRender(()=>i(t,Md(t)))}var xf=class extends Tc{mount(){let{current:e}=this.node;if(!e)return;let{globalTapTarget:t,propagate:n}=this.node.props;this.unmount=Bs(e,(e,t)=>(bf(this.node,t,`Start`),(e,{success:t})=>bf(this.node,e,t?`End`:`Cancel`)),{useGlobalTarget:t,stopPropagation:n?.tap===!1})}unmount(){}},Sf=new WeakMap,Cf=new WeakMap,wf=e=>{let t=Sf.get(e.target);t&&t(e)},Tf=e=>{e.forEach(wf)};function Ef({root:e,...t}){let n=e||document;Cf.has(n)||Cf.set(n,{});let r=Cf.get(n),i=JSON.stringify(t);return r[i]||(r[i]=new IntersectionObserver(Tf,{root:e,...t})),r[i]}function Df(e,t,n){let r=Ef(t);return Sf.set(e,n),r.observe(e),()=>{Sf.delete(e),r.unobserve(e)}}var Of={some:0,all:1},kf=class extends Tc{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:Of[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=Df(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(Af(e,t))&&this.startObserver()}unmount(){this.stopObserver?.(),this.hasEnteredView=!1,this.isInView=!1}};function Af({viewport:e={}},{viewport:t={}}={}){return n=>e[n]!==t[n]}var jf={inView:{Feature:kf},tap:{Feature:xf},focus:{Feature:yf},hover:{Feature:vf}},Mf={layout:{ProjectionNode:xu,MeasureLayout:hf}},Nf=Dd({...jd,...jf,...gf,...Mf},Od);function Pf(e){let t=lt(()=>Ca(e)),{isStatic:n}=(0,m.useContext)(Su);if(n){let[,n]=(0,m.useState)(e);(0,m.useEffect)(()=>t.on(`change`,n),[])}return t}function U(){!gc.current&&vc();let[e]=(0,m.useState)(hc.current);return e}function Ff(e){return typeof e==`object`&&!Array.isArray(e)}function If(e,t,n,r){return e==null?[]:typeof e==`string`&&Ff(t)?So(e,n,r):e instanceof NodeList?Array.from(e):Array.isArray(e)?e.filter(e=>e!=null):[e]}function Lf(e,t,n){return e*(t+1)+n*t}function Rf(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 zf(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 Bf(e,t,n,r,i,a){zf(e,i,a);for(let o=0;o<t.length;o++)e.push({value:t[o],at:F(i,a,r[o]),easing:Wt(n,o)})}function Vf(e,t,n=0){let r=t+1+t*n;for(let t=0;t<e.length;t++)e[t]=e[t]/r}function Hf(e,t){return e.at===t.at?e.value===null?1:t.value===null?-1:0:e.at-t.at}var Uf=`easeInOut`,Wf=20;function Gf(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,Rf(d,o.at,u,l));continue}let[p,m,h={}]=o;h.at!==void 0&&(d=Rf(d,h.at,u,l));let g=0,_=(e,n,r,o=0,s=0)=>{let c=Jf(e),{delay:l=0,times:u=Pr(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=Yi(p)?p:i?.[p||`keyframes`];if(S<=2&&C){let e=100;if(S===2&&Zf(c)){let t=c[1]-c[0];e=Math.abs(t)}let n={...t,...v};b!==void 0&&(n.duration=O(b));let r=vr(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&&Nr(u,w),c.length===1&&c.unshift(null),m&&`${m}${Wf}`,m&&m<Wf){let e=b>0?_/b:0;b=Lf(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`?Mt(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`:Wt(f,e-1))}Vf(u,m,e)}let te=ee+b;Bf(r,c,y,u,ee,te),g=Math.max(x+b,g),f=Math.max(te,f)};if(z(p)){let e=Kf(p,s);_(m,h,qf(`default`,e))}else{let e=If(p,m,r,c),t=e.length;for(let n=0;n<t;n++){m=m,h=h;let r=e[n],i=Kf(r,s);for(let e in m)_(m[e],Yf(h,e),qf(e,i),n,t)}}u=d,d+=g}return s.forEach((e,r)=>{for(let i in e){let a=e[i];a.sort(Hf);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(Uf)),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 Kf(e,t){return!t.has(e)&&t.set(e,{}),t.get(e)}function qf(e,t){return t[e]||(t[e]=[]),t[e]}function Jf(e){return Array.isArray(e)?e:[e]}function Yf(e,t){return e&&e[t]?{...e,...e[t]}:{...e}}var Xf=e=>typeof e==`number`,Zf=e=>e.every(Xf);function Qf(e,t){return z(e)||typeof e==`number`||typeof e==`string`&&!Ff(t)}function $f(e,t,n,r){let i=[];if(Qf(e,t))i.push(Ol(e,Ff(t)&&t.default||t,n&&(n.default||n)));else{if(e==null)return i;let a=If(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(...vs(r,t,s,sc.get(r))):i.push(..._o(ho(r)??ys,r,t,s))}}return i}function ep(e,t,n){let r=[];return Gf(e.map(e=>{if(Array.isArray(e)&&typeof e[0]==`function`){let t=e[0],n=Ca(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:kr}).forEach(({keyframes:e,transition:t},n)=>{r.push(...$f(n,e,t))}),r}function tp(e){return Array.isArray(e)&&e.some(Array.isArray)}function np(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),tp(e)){let{onComplete:n,...r}=i||{};typeof n==`function`&&(s=n),o=ep(e,{...c,...r},t)}else{let{onComplete:n,...r}=a||{};typeof n==`function`&&(s=n),o=$f(e,i,{...c,...r},t)}let l=new _a(o);return s&&l.finished.then(s),t&&(t.animations.push(l),l.finished.then(()=>{pt(t.animations,l)})),l}return i}var rp=Object.assign(np(),{addEffect:po,removeEffect:mo}),W=Nf,ip=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`})),ap=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=ip()})),op=[`none`,`requests`,`tokens`,`cost`,`quota`,`alerts`];function sp(){return typeof window>`u`?void 0:window.__ASTRA__}function cp(e=sp()){return e?.shell===`desktop`?`desktop`:`web`}function lp(e=sp(),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 up(e=globalThis.navigator){let t=e?.userAgent??``;return/Chrome\/|Electron\//.test(t)}var dp=cp(),fp=lp(),pp=dp===`desktop`,mp=fp===`darwin`;function hp(e=pp,t=fp){return e&&t===`darwin`?78:68}function gp(e=document.documentElement){e.dataset.shell=dp,e.dataset.platform=fp,up()&&e.classList.add(`refract`)}var _p=mp?`⌘`:`Ctrl+`,vp=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 yp(){return sp()?.apiBase.replace(/\/+$/,``)??``}async function G(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(yp()+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 vp(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 vp(e.error||typeof s==`string`&&s||`HTTP ${a.status}`,a.status,e.details)}return s}function K(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 q=encodeURIComponent;function bp(){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 xp(e,t,n,r){return Cp(`POST`,e,t,n,r)}async function Sp(e,t,n,r){return Cp(`GET`,e,void 0,t,n,r)}async function Cp(e,t,n,r,i,a){let o;try{o=await fetch(yp()+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 vp(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 vp(n.error||typeof t==`string`&&t||`HTTP ${o.status}`,o.status,n.details)}a?.();let s=o.body.getReader(),c=new TextDecoder,l=bp();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 J={health:[`health`],version:[`version`],auth:[`auth`],settings:[`settings`],tunnel:[`tunnel`],listen:[`listen`],autostart:[`autostart`],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],traceTopology:e=>[`traces`,`topology`,e],traceSessions:(e,t)=>[`traces`,`sessions`,e,t??``],traceSession:(e,t)=>[`traces`,`session`,e,t??``],traceRequest:e=>[`traces`,`request`,e]},wp=()=>E({queryKey:J.health,queryFn:({signal:e})=>G(`GET`,`/api/health`,void 0,e),refetchInterval:5e3,retry:!1}),Tp=()=>E({queryKey:J.version,queryFn:()=>G(`GET`,`/api/version`),staleTime:1/0}),Ep=()=>E({queryKey:J.auth,queryFn:()=>G(`GET`,`/api/auth/status`),retry:!1});function Dp(){let e=_();return D({mutationFn:e=>G(`POST`,`/api/auth/login`,{password:e}),onSuccess:()=>e.invalidateQueries()})}function Op(){let e=_();return D({mutationFn:()=>G(`POST`,`/api/auth/logout`),onSuccess:()=>e.invalidateQueries({queryKey:J.auth})})}var kp=()=>E({queryKey:J.settings,queryFn:()=>G(`GET`,`/api/settings`)});function Ap(){let e=_();return D({mutationFn:e=>G(`PATCH`,`/api/settings`,e),onSuccess:t=>e.setQueryData(J.settings,t)})}function jp(){let e=_();return D({mutationFn:e=>G(`POST`,`/api/auth/password`,{password:e}),onSuccess:()=>Promise.all([e.invalidateQueries({queryKey:J.tunnel}),e.invalidateQueries({queryKey:J.listen})])})}var Mp=()=>E({queryKey:J.listen,queryFn:()=>G(`GET`,`/api/server/listen`)});function Np(){let e=_();return D({mutationFn:e=>G(`PUT`,`/api/server/listen`,{host:e}),onSuccess:t=>e.setQueryData(J.listen,t)})}var Pp=()=>E({queryKey:J.autostart,queryFn:()=>G(`GET`,`/api/server/autostart`)});function Fp(){let e=_();return D({mutationFn:e=>G(`PUT`,`/api/server/autostart`,{enabled:e}),onSuccess:t=>e.setQueryData(J.autostart,t)})}var Ip=[`downloading`,`starting`,`reconnecting`],Lp=(e=!0)=>E({queryKey:J.tunnel,queryFn:({signal:e})=>G(`GET`,`/api/tunnel`,void 0,e),enabled:e,refetchInterval:e=>{let t=e.state.data;return t&&Ip.includes(t.state)?1500:t?.enabled?15e3:6e4}});function Rp(){let e=_();return D({mutationFn:e=>G(`PUT`,`/api/tunnel`,e),onSuccess:t=>e.setQueryData(J.tunnel,t)})}function zp(){return D({mutationFn:()=>G(`POST`,`/api/tunnel/cloudflared/detect`)})}function Bp(){let e=_();return D({mutationFn:e=>G(`POST`,e?`/api/tunnel/start`:`/api/tunnel/stop`),onSuccess:t=>e.setQueryData(J.tunnel,t)})}var Vp=()=>E({queryKey:J.update,queryFn:({signal:e})=>G(`GET`,`/api/update/status`,void 0,e),refetchInterval:3e5});function Hp(){let e=_();return D({mutationFn:()=>G(`POST`,`/api/update/check`),onSuccess:t=>e.setQueryData(J.update,t)})}var Up=(e,t)=>E({queryKey:J.models(e,t),queryFn:()=>G(`GET`,`/api/models${K({search:e,vendor:t})}`),placeholderData:e=>e}),Wp=e=>E({queryKey:J.model(e??``),queryFn:()=>G(`GET`,`/api/models/${q(e)}`),enabled:!!e}),Gp=()=>E({queryKey:J.priceKeys,queryFn:()=>G(`GET`,`/api/price-keys`)});function Kp(e,t){e.invalidateQueries({queryKey:[`models`]}),e.invalidateQueries({queryKey:t?J.model(t):[`model`]}),e.invalidateQueries({queryKey:J.priceKeys}),e.invalidateQueries({queryKey:[`provider-models`]}),e.invalidateQueries({queryKey:[`client-models`]}),e.invalidateQueries({queryKey:[`remote-models`]})}function qp(){let e=_();return D({mutationFn:e=>G(`POST`,`/api/models`,e),onSuccess:t=>Kp(e,t.id)})}function Jp(e){let t=_();return D({mutationFn:t=>G(`PUT`,`/api/models/${q(e)}`,t),onSuccess:()=>Kp(t,e)})}function Yp(){let e=_();return D({mutationFn:e=>G(`DELETE`,`/api/models/${q(e)}`),onSuccess:()=>Kp(e)})}function Xp(e){let t=_();return D({mutationFn:t=>G(`POST`,`/api/models/${q(e)}/reset-field`,{field:t}),onSuccess:()=>Kp(t,e)})}function Zp(e){let t=_();return D({mutationFn:t=>G(`PUT`,`/api/models/${q(e)}/prices/${q(t.priceKey)}`,{upstreamModelId:t.upstreamModelId??null,pricing:t.pricing}),onSuccess:()=>Kp(t,e)})}function Qp(e){let t=_();return D({mutationFn:t=>G(`DELETE`,`/api/models/${q(e)}/prices/${q(t)}`),onSuccess:()=>Kp(t,e)})}var $p=()=>D({mutationFn:()=>G(`POST`,`/api/models/sync/preview`)});function em(){let e=_();return D({mutationFn:e=>G(`POST`,`/api/models/sync/apply`,{changeIds:e}),onSuccess:()=>Kp(e)})}var tm=()=>D({mutationFn:e=>G(`POST`,`/api/billing/simulate`,e)}),nm=()=>E({queryKey:J.templates,queryFn:()=>G(`GET`,`/api/provider-templates`),staleTime:3e5}),rm=()=>E({queryKey:J.providers,queryFn:()=>G(`GET`,`/api/providers`)}),im=e=>E({queryKey:J.provider(e??``),queryFn:()=>G(`GET`,`/api/providers/${q(e)}`),enabled:!!e});function am(e,t){e.invalidateQueries({queryKey:J.providers}),e.invalidateQueries({queryKey:t?J.provider(t):[`provider`]}),e.invalidateQueries({queryKey:J.clients}),e.invalidateQueries({queryKey:[`client-models`]})}var om=e=>E({queryKey:J.importSources,queryFn:()=>G(`GET`,`/api/providers/import/sources`),enabled:e,staleTime:0,gcTime:0});function sm(){let e=_();return D({mutationFn:e=>G(`POST`,`/api/providers/import`,e),onSuccess:()=>{am(e),e.invalidateQueries({queryKey:J.importSources})}})}function cm(){let e=_();return D({mutationFn:e=>G(`POST`,`/api/providers`,e),onSuccess:t=>am(e,t.id)})}function lm(e){let t=_();return D({mutationFn:t=>G(`PATCH`,`/api/providers/${q(e)}`,t),onSuccess:n=>{t.setQueryData(J.provider(e),n),am(t,e),t.invalidateQueries({queryKey:J.providerModels(e)}),t.invalidateQueries({queryKey:J.remoteModels(e)})}})}function um(e){let t=_();return D({mutationFn:t=>G(`PUT`,`/api/providers/${q(e)}/model-map`,{map:t}),onSuccess:n=>{t.setQueryData(J.provider(e),n),am(t,e)}})}function dm(){let e=_();return D({mutationFn:e=>G(`DELETE`,`/api/providers/${q(e)}`),onSuccess:()=>am(e)})}var fm=()=>E({queryKey:J.quotaTemplates,queryFn:()=>G(`GET`,`/api/provider-quota/templates`),staleTime:1/0});function pm(e,t,n){let r=e=>e.id===t?{...e,quotaConfig:n.config,quota:n.snapshot??null,quotaCheckedAtUtc:n.checkedAtUtc??null}:e;e.setQueryData(J.provider(t),e=>e&&r(e)),e.setQueryData(J.providers,e=>e?.map(r))}function mm(){let e=_();return D({mutationFn:e=>G(`POST`,`/api/providers/${q(e)}/quota`),onSuccess:(t,n)=>pm(e,n,t),onError:(t,n)=>void e.invalidateQueries({queryKey:J.provider(n)})})}function hm(e){let t=_();return D({mutationFn:t=>G(`PUT`,`/api/providers/${q(e)}/quota/config`,t),onSuccess:n=>pm(t,e,n)})}var gm=e=>D({mutationFn:t=>G(`POST`,`/api/providers/${q(e)}/quota/test`,t)});function _m(){let e=_();return D({mutationFn:e=>G(`POST`,`/api/providers/${q(e)}/duplicate`),onSuccess:()=>am(e)})}function vm(e,t,n,r){return xp(`/api/providers/${q(e)}/test`,t,n,r)}var ym=(e,t)=>E({queryKey:J.remoteModels(e),queryFn:()=>G(`GET`,`/api/providers/${q(e)}/remote-models`),enabled:t,retry:!1}),bm=(e,t)=>E({queryKey:J.templateUpdate(e),queryFn:()=>G(`GET`,`/api/providers/${q(e)}/template-update`),enabled:t});function xm(e){let t=_();return D({mutationFn:()=>G(`POST`,`/api/providers/${q(e)}/template-update`),onSuccess:()=>{am(t,e),t.invalidateQueries({queryKey:J.providerModels(e)}),t.invalidateQueries({queryKey:J.remoteModels(e)}),t.invalidateQueries({queryKey:J.templateUpdate(e)})}})}var Sm=e=>E({queryKey:J.providerModels(e??``),queryFn:()=>G(`GET`,`/api/providers/${q(e)}/models`),enabled:!!e});function Cm(e,t){e.invalidateQueries({queryKey:J.providerModels(t)}),e.invalidateQueries({queryKey:J.remoteModels(t)}),e.invalidateQueries({queryKey:[`model`]}),am(e,t)}function wm(e){let t=_();return D({mutationFn:t=>G(`POST`,`/api/providers/${q(e)}/models`,{modelIds:t}),onSuccess:()=>Cm(t,e)})}function Tm(e){let t=_();return D({mutationFn:t=>{let{pmId:n,...r}=t;return G(`PATCH`,`/api/providers/${q(e)}/models/${n}`,r)},onSuccess:()=>Cm(t,e)})}function Em(e){let t=_();return D({mutationFn:t=>G(`DELETE`,`/api/providers/${q(e)}/models/${t}`),onSuccess:()=>Cm(t,e)})}var Dm=()=>E({queryKey:J.privacy,queryFn:()=>G(`GET`,`/api/privacy`)});function Om(){let e=_();return D({mutationFn:e=>G(`PUT`,`/api/privacy`,e),onSuccess:t=>e.setQueryData(J.privacy,e=>e&&{...e,settings:t})})}var km=()=>D({mutationFn:e=>G(`POST`,`/api/privacy/dry-run`,e)}),Am=(e,t)=>E({queryKey:J.privacyEvents(e),queryFn:()=>G(`GET`,`/api/privacy/events${K({...e})}`),placeholderData:e=>e,refetchInterval:t?5e3:!1}),jm=e=>E({queryKey:J.privacyEventStats(e),queryFn:()=>G(`GET`,`/api/privacy/events/stats${K({range:e})}`),refetchInterval:15e3,placeholderData:e=>e}),Mm=(e,t=!0)=>E({queryKey:J.providerAccounts(e??``),queryFn:()=>G(`GET`,`/api/providers/${q(e)}/accounts`),enabled:!!e&&t});function Nm(e,t){e.invalidateQueries({queryKey:J.providerAccounts(t)})}function Pm(e){let t=_();return D({mutationFn:e=>G(`POST`,`/api/provider-accounts/${q(e)}/refresh`),onSuccess:()=>Nm(t,e)})}function Fm(e){let t=_();return D({mutationFn:e=>G(`POST`,`/api/provider-accounts/${q(e)}/quota`),onSuccess:()=>Nm(t,e)})}function Im(e,t){let n=_();return D({mutationFn:t,onSuccess:t=>n.setQueryData(J.providerAccounts(e),t)})}var Lm=e=>Im(e,e=>G(`POST`,`/api/provider-accounts/${q(e)}/activate`)),Rm=e=>Im(e,({id:e,...t})=>G(`PATCH`,`/api/provider-accounts/${q(e)}`,t)),zm=e=>Im(e,t=>G(`PUT`,`/api/providers/${q(e)}/accounts/order`,{ids:t})),Bm=(e,t=!0)=>E({queryKey:J.subscriptionPolicy(e),queryFn:()=>G(`GET`,`/api/providers/${q(e)}/subscription-policy`),enabled:t});function Vm(e){let t=_();return D({mutationFn:t=>G(`PUT`,`/api/providers/${q(e)}/subscription-policy`,t),onSuccess:n=>{t.setQueryData(J.subscriptionPolicy(e),n),t.invalidateQueries({queryKey:J.provider(e)})}})}function Hm(e){let t=_();return D({mutationFn:e=>G(`DELETE`,`/api/provider-accounts/${q(e)}`),onSuccess:()=>Nm(t,e)})}var Um=e=>D({mutationFn:(t={})=>G(`POST`,`/api/providers/${q(e)}/accounts/login`,{accountId:t.accountId||void 0,httpProxy:t.httpProxy?.trim()||void 0})}),Wm=e=>D({mutationFn:t=>G(`POST`,`/api/providers/${q(e)}/accounts/login/${q(t)}/poll`)}),Gm=(e=!0)=>E({queryKey:J.localCodexLogin,queryFn:()=>G(`GET`,`/api/subscription/codex/local-login`),enabled:e,retry:!1});function Km(e){let t=_();return D({mutationFn:()=>G(`POST`,`/api/providers/${q(e)}/accounts/import-codex`,{}),onSuccess:()=>Nm(t,e)})}var qm=e=>D({mutationFn:t=>G(`POST`,`/api/providers/${q(e)}/accounts/login/${q(t.state)}/complete`,{code:t.code})}),Jm=(e=!0)=>E({queryKey:J.localCopilotLogin,queryFn:()=>G(`GET`,`/api/subscription/copilot/local-login`),enabled:e,retry:!1});function Ym(e){let t=_();return D({mutationFn:t=>G(`POST`,`/api/providers/${q(e)}/accounts/import-copilot`,{token:t&&t.trim().length>0?t.trim():null}),onSuccess:(n,r)=>{Nm(t,e),t.invalidateQueries({queryKey:J.localCopilotLogin})}})}var Xm=(e,t=!0)=>E({queryKey:J.accountImportInfo(e),queryFn:()=>G(`GET`,`/api/providers/${q(e)}/accounts/import-info`),enabled:t,staleTime:1/0});function Zm(e){let t=_();return D({mutationFn:t=>G(`POST`,`/api/providers/${q(e)}/accounts/import`,t),onSuccess:(n,r)=>{r.dryRun||Nm(t,e)}})}var Qm=(e,t=!0)=>E({queryKey:J.resetCredits(e??``),queryFn:()=>G(`GET`,`/api/provider-accounts/${q(e)}/reset-credits`),enabled:!!e&&t,retry:!1});function $m(e){let t=_();return D({mutationFn:e=>G(`POST`,`/api/provider-accounts/${q(e.accountId)}/reset-credits/${q(e.creditId)}/consume`,{}),onSuccess:(n,r)=>{Nm(t,e),t.invalidateQueries({queryKey:J.resetCredits(r.accountId)})}})}var eh=()=>E({queryKey:J.clients,queryFn:()=>G(`GET`,`/api/clients`),refetchInterval:e=>e.state.data?.some(e=>e.install?.busy)?2e3:!1}),th=()=>ih(()=>G(`POST`,`/api/clients/reapply`,{})),nh=(e,t=!0)=>E({queryKey:J.clientModels(e??``),queryFn:()=>G(`GET`,`/api/clients/${e}/models`),enabled:!!e&&t,retry:!1}),rh=(e,t=!0)=>E({queryKey:J.backups(e??``),queryFn:()=>G(`GET`,`/api/clients/${e}/backups`),enabled:!!e&&t});function ih(e,t=()=>[]){let n=_();return D({mutationFn:e,onSuccess:(e,r)=>{n.invalidateQueries({queryKey:J.clients}),n.invalidateQueries({queryKey:J.providers}),n.invalidateQueries({queryKey:[`provider`]}),n.invalidateQueries({queryKey:[`client-models`]});for(let e of t(r))n.invalidateQueries({queryKey:e})}})}var ah=()=>ih(e=>G(`PUT`,`/api/clients/${e.kind}/binding`,{providerId:e.providerId,accountId:e.accountId}),e=>[J.clientModels(e.kind)]),oh=()=>ih(e=>G(`PUT`,`/api/clients/${e.kind}/bindings`,{bindings:e.bindings}),e=>[J.clientModels(e.kind)]),sh=()=>D({mutationFn:e=>G(`POST`,`/api/clients/${e.kind}/preview-enable`,e.req)}),ch=()=>ih(e=>G(`POST`,`/api/clients/${e.kind}/enable`,e.req),e=>[J.backups(e.kind)]),lh=()=>ih(e=>G(`POST`,`/api/clients/${e}/disable`)),uh=()=>ih(e=>G(`POST`,`/api/clients/${e}/force-restore`)),dh=()=>ih(e=>G(`POST`,`/api/clients/${e}/repair`),e=>[J.backups(e)]),fh=()=>ih(e=>G(`POST`,`/api/clients/${e.kind}/backups/${q(e.id)}/restore`),e=>[J.backups(e.kind)]);function ph(){let e=_();return D({mutationFn:e=>G(`POST`,`/api/clients/check-updates`,{force:e}),onSuccess:t=>e.setQueryData(J.clients,t)})}var mh=(e,t=!0)=>E({queryKey:J.clientInstallJob(e??``),queryFn:()=>G(`GET`,`/api/clients/${e}/install`),enabled:!!e&&t,retry:!1,refetchInterval:e=>e.state.data?.state===`running`&&800});function hh(){let e=_();return D({mutationFn:e=>G(`POST`,`/api/clients/${e.kind}/install`,{action:e.action,elevated:e.elevated??!1}),onSuccess:t=>{e.setQueryData(J.clientInstallJob(t.kind),t),e.invalidateQueries({queryKey:J.clients})}})}function gh(){let e=_();return D({mutationFn:e=>G(`POST`,`/api/clients/${e}/install/cancel`,{}),onSuccess:t=>e.setQueryData(J.clientInstallJob(t.kind),t)})}var _h=`/api/clients/claude-code/direct`,vh=e=>E({queryKey:J.claudeDirect,queryFn:()=>G(`GET`,_h),enabled:e,retry:!1});function yh(){let e=_();return D({mutationFn:e=>G(`PUT`,_h,e),onSuccess:t=>{e.setQueryData(J.claudeDirect,t),e.invalidateQueries({queryKey:[`claude-direct-requests`]})}})}var bh=(e,t)=>E({queryKey:J.claudeDirectRequests(e??``),queryFn:()=>G(`GET`,`${_h}/accounts/${q(e)}/requests`),enabled:!!e,retry:!1,refetchInterval:t?5e3:!1}),xh=()=>E({queryKey:J.tokens,queryFn:()=>G(`GET`,`/api/tokens`),refetchInterval:15e3});function Sh(e){let t=_();return D({mutationFn:e,onSuccess:()=>{t.invalidateQueries({queryKey:J.tokens}),t.invalidateQueries({queryKey:J.clients})}})}var Ch=()=>Sh(e=>G(`POST`,`/api/tokens`,e)),wh=()=>Sh(e=>{let{id:t,...n}=e;return G(`PATCH`,`/api/tokens/${q(t)}`,n)}),Th=()=>Sh(e=>G(`POST`,`/api/tokens/${q(e)}/reset`)),Eh=()=>Sh(e=>G(`DELETE`,`/api/tokens/${q(e)}`)),Dh=()=>D({mutationFn:e=>G(`POST`,`/api/tokens/${q(e)}/reveal`)}),Oh=(e,t)=>E({queryKey:J.requests(e),queryFn:()=>G(`GET`,`/api/requests${K({...e})}`),placeholderData:e=>e,refetchInterval:t?5e3:!1}),kh=e=>E({queryKey:J.request(e??``),queryFn:()=>G(`GET`,`/api/requests/${q(e)}`),enabled:!!e,refetchInterval:e=>e.state.data?.status===`pending`&&1e3}),Ah=e=>E({queryKey:J.stats(`rate`,e),queryFn:()=>G(`GET`,`/api/stats/rate${K({...e})}`),placeholderData:e=>e,refetchInterval:5e3}),jh=()=>-new Date().getTimezoneOffset(),Mh=(e,t,n)=>E({queryKey:J.stats(`summary`,e,t??``,n??``),queryFn:()=>G(`GET`,`/api/stats/summary${K({range:e,client:t,token:n})}`),refetchInterval:15e3,placeholderData:e=>e}),Nh=(e,t,n,r,i)=>E({queryKey:J.stats(`timeseries`,e,t,n,r??``,i??``,jh()),queryFn:()=>G(`GET`,`/api/stats/timeseries${K({range:e,groupBy:t,by:n,client:r,token:i,tzOffset:jh()})}`),refetchInterval:3e4,placeholderData:e=>e}),Ph=(e,t,n=8,r)=>E({queryKey:J.stats(`top`,e,t??``,n,r??``),queryFn:()=>G(`GET`,`/api/stats/top-models${K({range:e,limit:n,client:t,token:r})}`),refetchInterval:3e4,placeholderData:e=>e}),Fh=(e=365,t,n)=>E({queryKey:J.stats(`activity`,e,t??``,n??``,jh()),queryFn:()=>G(`GET`,`/api/stats/activity-heatmap${K({days:e,client:t,token:n,tzOffset:jh()})}`),refetchInterval:6e4,placeholderData:e=>e}),Ih=()=>E({queryKey:J.plugins,queryFn:()=>G(`GET`,`/api/plugins`),refetchInterval:1e4}),Lh=(e=!0)=>E({queryKey:J.pluginHost,queryFn:()=>G(`GET`,`/api/plugins/host`),enabled:e,refetchInterval:15e3}),Rh=e=>E({queryKey:J.pluginJob(e??``),queryFn:()=>G(`GET`,`/api/plugins/jobs/${q(e)}`),enabled:!!e,refetchInterval:e=>e.state.data?.state===`running`||!e.state.data?1e3:!1});function zh(e){let t=_();return D({mutationFn:e,onSuccess:()=>{t.invalidateQueries({queryKey:J.plugins}),t.invalidateQueries({queryKey:J.pluginHost}),t.invalidateQueries({queryKey:J.clients}),t.invalidateQueries({queryKey:J.providers})}})}var Bh=()=>zh(e=>G(`POST`,`/api/plugins`,e)),Vh=()=>zh(e=>G(`POST`,`/api/plugins/update`,{spec:e})),Hh=()=>zh(e=>G(`DELETE`,`/api/plugins${K({spec:e})}`)),Uh=()=>zh(e=>G(`PATCH`,`/api/plugins${K({spec:e.spec})}`,{enabled:e.enabled,options:e.options})),Wh=()=>zh(e=>G(`PUT`,`/api/plugins/order`,{specs:e})),Gh=()=>zh(e=>G(`POST`,`/api/plugins/prefer`,e)),Kh=()=>zh(()=>G(`POST`,`/api/plugins/runtime/install`)),qh=(e=!0)=>E({queryKey:J.pluginMarket,queryFn:()=>G(`GET`,`/api/plugins/market`),enabled:e,staleTime:6e5}),Jh=e=>E({queryKey:J.pluginSearch(e),queryFn:()=>G(`GET`,`/api/plugins/search${K({q:e})}`),enabled:e.trim().length>=2,staleTime:6e5}),Yh=(e,t=!0)=>E({queryKey:J.pluginMethods(e),queryFn:()=>G(`GET`,`/api/plugin-providers/${q(e)}/methods`),enabled:t}),Xh=(e,t,n)=>G(`POST`,`/api/plugin-providers/${q(e)}/prompt`,{method:t,inputs:n}),Zh=(e,t,n,r)=>G(`POST`,`/api/plugin-providers/${q(e)}/validate`,{method:t,key:n,value:r});function Qh(e,t){e.invalidateQueries({queryKey:J.providerAccounts(t)}),e.invalidateQueries({queryKey:J.providers})}var $h=e=>D({mutationFn:t=>G(`POST`,`/api/plugin-providers/${q(e)}/sign-in`,t)}),eg=(e,t)=>{let n=_();return E({queryKey:J.pluginSignIn(e,t??``),queryFn:async()=>{let r=await G(`GET`,`/api/plugin-providers/${q(e)}/sign-in/${q(t)}`);return r.state===`done`&&Qh(n,e),r},enabled:!!t,refetchInterval:e=>e.state.data?.state===`waiting`||!e.state.data?1500:!1})},tg=e=>{let t=_();return D({mutationFn:t=>G(`POST`,`/api/plugin-providers/${q(e)}/sign-in/${q(t.flow)}/code`,{code:t.code}),onSuccess:n=>{t.setQueryData(J.pluginSignIn(e,n.id),n),n.state===`done`&&Qh(t,e)}})},ng=e=>{let t=_();return D({mutationFn:t=>G(`POST`,`/api/plugin-providers/${q(e)}/api-key`,t),onSuccess:()=>Qh(t,e)})},rg=e=>{let t=_();return D({mutationFn:t=>G(`POST`,`/api/plugin-providers/${q(e)}/accounts/${q(t)}/sign-out`),onSuccess:()=>Qh(t,e)})},ig=(e,t,n)=>E({queryKey:J.pluginUsage(e,t),queryFn:()=>G(`GET`,`/api/plugin-providers/${q(e)}/accounts/${q(t)}/usage`),enabled:n,staleTime:6e4,retry:!1}),ag=e=>E({queryKey:J.pluginCheckin(e),queryFn:()=>G(`GET`,`/api/plugin-providers/${q(e)}/checkin`)}),og=e=>{let t=_();return D({mutationFn:t=>t===void 0?G(`POST`,`/api/plugin-providers/${q(e)}/checkin`):G(`PUT`,`/api/plugin-providers/${q(e)}/checkin`,{on:t}),onSuccess:n=>t.setQueryData(J.pluginCheckin(e),n)})},sg=(e=!0)=>E({queryKey:J.magpieImport,queryFn:()=>G(`GET`,`/api/plugins/import-magpie`),enabled:e,staleTime:6e4}),cg=()=>zh(e=>G(`POST`,`/api/plugins/import-magpie`,{signIns:e})),lg=()=>E({queryKey:J.webhooks,queryFn:()=>G(`GET`,`/api/webhooks`)});function ug(e){let t=_();return D({mutationFn:e,onSuccess:()=>{t.invalidateQueries({queryKey:J.webhooks}),t.invalidateQueries({queryKey:J.alertRules}),t.invalidateQueries({queryKey:J.alertStates}),t.invalidateQueries({queryKey:[`webhook-deliveries`]})}})}var dg=()=>ug(e=>G(`POST`,`/api/webhooks`,e)),fg=()=>ug(({id:e,...t})=>G(`PATCH`,`/api/webhooks/${q(e)}`,t)),pg=()=>ug(e=>G(`DELETE`,`/api/webhooks/${q(e)}`)),mg=()=>ug(e=>G(`POST`,`/api/webhooks/${q(e)}/secret`)),hg=()=>ug(e=>G(`POST`,`/api/webhooks/${q(e)}/test`)),gg=e=>E({queryKey:J.webhookDeliveries(e??``),queryFn:()=>G(`GET`,`/api/webhooks/${q(e)}/deliveries`),enabled:!!e}),_g=()=>ug(e=>G(`POST`,`/api/webhook-deliveries/${q(e)}/redeliver`)),vg=()=>E({queryKey:J.alertEvents,queryFn:()=>G(`GET`,`/api/alerts/events`),staleTime:1/0}),yg=()=>E({queryKey:J.alertRules,queryFn:()=>G(`GET`,`/api/alerts/rules`)}),bg=(e=!1)=>E({queryKey:[...J.alertStates,e],queryFn:()=>G(`GET`,`/api/alerts/states${e?`?firing=true`:``}`),refetchInterval:6e4}),xg=()=>ug(e=>G(`POST`,`/api/alerts/rules`,e)),Sg=()=>ug(({id:e,...t})=>G(`PATCH`,`/api/alerts/rules/${q(e)}`,t)),Cg=()=>ug(e=>G(`DELETE`,`/api/alerts/rules/${q(e)}`));async function wg(e){let t=await fetch(`${yp()}/v1/astra/key`,{headers:{Authorization:`Bearer ${e}`}});if(!t.ok)throw new Tg(t.status);return await t.json()}var Tg=class extends Error{status;constructor(e){super(`HTTP ${e}`),this.status=e}},Eg=e=>E({queryKey:J.traceTopology(e),queryFn:()=>G(`GET`,`/api/traces/topology${K({range:e})}`),placeholderData:e=>e,refetchInterval:e===`live`?5e3:3e4}),Dg=(e,t)=>E({queryKey:J.traceSessions(e,t),queryFn:()=>G(`GET`,`/api/traces/sessions${K({range:e,client:t})}`),placeholderData:e=>e,refetchInterval:1e4}),Og=(e,t)=>E({queryKey:J.traceSession(e??``,t),queryFn:()=>G(`GET`,`/api/traces/sessions/${q(e)}${K({turn:t})}`),enabled:!!e,placeholderData:e=>e,refetchInterval:e=>e.state.data?.session.active?3e3:!1}),kg=e=>E({queryKey:J.traceRequest(e??``),queryFn:()=>G(`GET`,`/api/traces/requests/${q(e)}`),enabled:!!e,refetchInterval:e=>e.state.data?.inFlight?1e3:!1}),Ag=e=>e?.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase();function jg(e,t,n=[]){if(t==null)throw Error(`[lucide]: iconNode is required when icon name is used`);return{name:Ag(e),size:24,node:t,...n.length>0?{aliases:n}:{}}}var Mg=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},Ng=e=>{let t=Mg(e);return t.charAt(0).toUpperCase()+t.slice(1)},Pg=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),Fg={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 Ig(e){return e!=null}function Lg(e,t={}){let n=t.attributeNames??{},r=e=>n[e]??e,i=e.size??e.width??Fg.width,a=e.size??e.height??Fg.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?Pg(...c):Pg(`lucide`,...s,...c),u=t.absoluteStrokeWidth?Number(t.strokeWidth??Fg[`stroke-width`])*Number(e.size??e.width??Fg.width)/Number(t.size??t.width??Fg.width):t.strokeWidth??Fg[`stroke-width`];return[`svg`,{...Object.entries(Fg).reduce((e,[t,n])=>(e[r(t)]=n,e),{}),...`color`in t&&t.color&&{[r(`stroke`)]:t.color},...`size`in t&&Ig(t.size)&&{[r(`width`)]:t.size,[r(`height`)]:t.size},...`width`in t&&Ig(t.width)&&{[r(`width`)]:t.width},...`height`in t&&Ig(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 Rg(e,t={}){return Lg(e,{...t,attributeNames:{...t.attributeNames,class:`className`,"stroke-width":`strokeWidth`,"stroke-linecap":`strokeLinecap`,"stroke-linejoin":`strokeLinejoin`,"vector-effect":`vectorEffect`}})}var zg=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},Bg=(0,m.createContext)({}),Vg=()=>(0,m.useContext)(Bg),Hg=(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=``}=Vg()??{},b=!!c||zg(d),[x,S,C=[]]=Rg(u,{color:e??v,width:n??t??p,height:r??t??p,strokeWidth:i??h,absoluteStrokeWidth:a??g,nonScalingStroke:o??_,className:Pg(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 Y(e,t=[],n=[]){let r=typeof e==`string`?jg(e,t,n):e,i=(0,m.forwardRef)(({className:e,...t},n)=>(0,m.createElement)(Hg,{ref:n,icon:r,className:e,...t}));return r.name&&(i.displayName=Ng(r.name)),i}var Ug={name:`check`,size:24,node:[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]};Ug.node;var Wg=Y(Ug),Gg={name:`chevron-down`,size:24,node:[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]};Gg.node;var Kg=Y(Gg),qg={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`]};qg.node;var Jg=Y(qg),Yg={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`]};Yg.node;var Xg=Y(Yg),Zg={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`}]]};Zg.node;var Qg=Y(Zg),$g={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`]};$g.node;var e_=Y($g),t_={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`}]]};t_.node;var n_=Y(t_),r_={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`}]]};r_.node;var i_=Y(r_),a_={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`}]]};a_.node;var o_=Y(a_),s_={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`}]]};s_.node;var c_=Y(s_),l_={name:`search`,size:24,node:[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]};l_.node;var u_=Y(l_),d_={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`]};d_.node;var f_=Y(d_),p_={name:`x`,size:24,node:[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]};p_.node;var m_=Y(p_),h_={"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.traces":`链路追踪`,"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.repair.title":`{name} 读不了这个配置文件:它不是标准 JSON`,"clients.repair.problem.trailing-comma":`第 {line} 行有多余的逗号`,"clients.repair.problem.comment":`第 {line} 行有注释`,"clients.repair.hint":`修复只删掉多余的逗号和注释,其余内容不变;修改前会先备份。`,"clients.repair.action":`修复`,"clients.repair.done":`已修复 {name} 的配置文件`,"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.protocols.title":`模型协议`,"clients.protocols.footer":`每个模型默认走它的原生协议,网关原样转发、不做转换;也可以给单个模型指定别的协议,由网关转换。在客户端自己的设置里改的协议也会记录到这里。`,"clients.protocols.footerEnabled":`修改后需要重新应用。`,"clients.protocols.auto":`自动 · {protocol}`,"clients.protocols.autoTranslated":`自动 · {protocol}(网关转换)`,"clients.protocols.native":`原生协议:{protocols}`,"clients.protocols.noNative":`没有这个客户端能用的原生协议,由网关转换`,"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.coding":`编程套餐`,"providers.category.cn":`国内`,"providers.category.aggregator":`聚合平台`,"providers.category.inference":`推理平台`,"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.listen.local":`仅本机`,"settings.listen.lan":`局域网`,"settings.listen.pending":`已改为 {host},重启服务后生效`,"settings.listen.env":`{address} · 由环境变量 ASTRA_HOST 决定,不能在这里修改`,"settings.listen.localOnly":`{address} · 只能在运行 Astra 的这台电脑上修改`,"settings.listen.lanConfirm":`开启局域网访问?`,"settings.listen.lanDetail":`同一网络中的设备将能通过本机 IP 访问 Astra:调用网关必须带令牌,打开管理后台要用管理员密码登录。局域网内的流量不加密,请只在可信网络中开启。`,"settings.listen.lanAction":`开启`,"settings.listen.passwordTitle":`先设置管理员密码`,"settings.listen.passwordDetail":`开启局域网访问后,其他设备打开管理后台必须登录。没有管理员密码,服务不会在局域网上启动。`,"settings.listen.passwordRepeat":`再次输入密码`,"settings.listen.passwordMismatch":`两次输入的密码不一致`,"settings.listen.passwordAction":`设置密码并开启`,"settings.listen.saved":`已保存,重启服务后生效`,"settings.listen.restart":`重启服务`,"settings.listen.restartHint":`在终端运行 astra restart 使新地址生效`,"settings.listen.restarted":`服务已重启`,"settings.listen.networkUrl":`局域网地址`,"settings.startup":`开机自启动`,"settings.startup.app":`桌面端`,"settings.startup.appHint":`登录系统后在托盘 / 菜单栏中打开,不弹出窗口,服务随之启动`,"settings.startup.appUnsupported":`仅安装版桌面端可用`,"settings.startup.service":`后台服务`,"settings.startup.service.launchd":`登录后在后台启动网关,不打开任何窗口(LaunchAgent,与 astra autostart 相同)`,"settings.startup.service.systemd":`登录后由 systemd 用户服务启动网关(与 astra autostart 相同)`,"settings.startup.service.registry":`登录 Windows 后在后台启动网关(注册表 Run 项,与 astra autostart 相同)`,"settings.startup.entry":`已写入 {location}`,"settings.startup.saved":`已开启,下次登录系统时生效`,"settings.startup.failed":`系统没有接受这项更改`,"settings.startup.localOnly":`只能在运行 Astra 的这台电脑上修改`,"settings.startup.unsupported.container":`容器内由容器的重启策略负责启动(例如 compose 的 restart: unless-stopped)`,"settings.startup.unsupported.no-systemd":`这台 Linux 没有 systemd,无法注册开机自启动`,"settings.startup.unsupported.platform":`当前系统不支持开机自启动`,"settings.startup.macFooter":`macOS 可能会在「系统设置 › 通用 › 登录项」中要求允许 Astra 在后台运行。`,"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 设置已保存`,"traces.subtitle":`Agent → Astra → 提供商:每一跳的流量、耗时、重试与改写`,"traces.tab.label":`链路视图`,"traces.tab.topology":`拓扑`,"traces.tab.sessions":`会话`,"traces.tab.requests":`请求`,"traces.range.label":`时间范围`,"traces.range.live":`实时`,"traces.range.1h":`1 小时`,"traces.range.24h":`24 小时`,"traces.range.7d":`7 天`,"traces.canvas.hint":`拖动空白处平移 · 拖动节点调整布局 · ⌘/Ctrl + 滚轮缩放`,"traces.canvas.details":`详情`,"traces.canvas.fit":`适应`,"traces.canvas.resetLayout":`重置布局`,"traces.canvas.zoomIn":`放大`,"traces.canvas.zoomOut":`缩小`,"traces.canvas.close":`关闭详情`,"traces.canvas.minimap":`小地图`,"traces.topology.legend":`线宽 = 请求量 · 橙色线 = 限流 / 切号`,"traces.live.arriving":`鉴权 / 路由中`,"traces.live.upstream":`已发往上游,等待首字节`,"traces.live.streaming":`上游已响应,正在回传`,"traces.live.done":`已完成`,"traces.live.failed":`失败`,"traces.live.badge":`{count} 进行中`,"traces.live.legend.out":`发往上游`,"traces.live.legend.back":`响应回传`,"traces.live.legend.slow":`等待过久`,"traces.live.legend.failed":`失败`,"traces.topology.requestsIn":`个请求({window})`,"traces.topology.perMinute":`{count}/分`,"traces.topology.count":`{count} 次`,"traces.topology.direct":`直接调用`,"traces.topology.activeSessions":`{count} 个会话进行中`,"traces.topology.idle":`空闲`,"traces.topology.accounts":`{count} 个账号`,"traces.topology.cooling":`{count} 个冷却中`,"traces.topology.apiKey":`API Key`,"traces.topology.empty":`这段时间没有经过 Astra 的请求。`,"traces.topology.gateway":`Astra 网关`,"traces.topology.inFlightCount":`进行中 {count}`,"traces.topology.overheadNoteTitle":`自身开销怎么算`,"traces.topology.overheadNote":`第一次发往上游的时刻 − 请求进门的时刻,不含上游与重试。`,"traces.viewSessions":`查看会话`,"traces.kind.agent":`Agent`,"traces.kind.gateway":`网关`,"traces.kind.provider":`提供商`,"traces.kind.tool":`Agent 端工具`,"traces.kind.main":`主代理`,"traces.kind.sidechain":`子代理`,"traces.kind.aux":`辅助调用`,"traces.kv.requests":`请求数`,"traces.kv.errors":`错误`,"traces.kv.errorRate":`错误率`,"traces.kv.inFlight":`进行中`,"traces.kv.rate":`请求/分`,"traces.kv.activeSessions":`活跃会话`,"traces.kv.attempts":`上游尝试`,"traces.kv.rateLimited":`429 次数`,"traces.kv.failovers":`切号`,"traces.kv.ttfbP95":`首字节 P95`,"traces.kv.overheadP50":`自身开销 P50`,"traces.kv.overheadP95":`Astra 开销 P95`,"traces.kv.calls":`调用`,"traces.kv.cost":`费用`,"traces.kv.status":`状态`,"traces.kv.duration":`耗时`,"traces.kv.firstToken":`首 token`,"traces.kv.tokens":`输入 / 输出`,"traces.kv.cacheRead":`缓存读`,"traces.kv.finish":`finish_reason`,"traces.kv.link":`关联方式`,"traces.kv.toolCalls":`工具调用`,"traces.kv.gap":`间隔`,"traces.kv.session":`会话`,"traces.kv.step":`步骤`,"traces.kv.protocols":`协议`,"traces.kv.traceparent":`traceparent`,"traces.kv.token":`令牌`,"traces.kv.client":`客户端`,"traces.kv.bytes":`请求体`,"traces.kv.bodyTime":`读请求体`,"traces.kv.rewritten":`改写了请求`,"traces.kv.hits":`命中`,"traces.kv.categories":`类型`,"traces.kv.restored":`还原占位符`,"traces.kv.dryRun":`只记录不处理`,"traces.kv.provider":`提供商`,"traces.kv.model":`模型`,"traces.kv.capabilities":`能力探测`,"traces.kv.lossy":`有损映射`,"traces.kv.claudeMode":`Claude 订阅头`,"traces.kv.upstreamId":`上游 request-id`,"traces.kv.reads":`读取次数`,"traces.kv.events":`事件数`,"traces.kv.maxGap":`最长停顿`,"traces.kv.http":`HTTP 状态`,"traces.kv.ttfb":`首字节`,"traces.kv.credentials":`凭据准备`,"traces.kv.refreshed":`已刷新令牌`,"traces.kv.retry":`重试原因`,"traces.kv.processing":`上游处理时长`,"traces.kv.rateLimitHeaders":`上游限流响应头`,"traces.stage.gateway.request":`网关请求`,"traces.stage.gateway.route":`鉴权 · 路由 · 限额`,"traces.stage.gateway.body":`读请求体`,"traces.stage.gateway.middleware":`中间件插件`,"traces.stage.gateway.privacy":`隐私护栏`,"traces.stage.gateway.resolve":`提供商 / 模型解析`,"traces.stage.gateway.encode":`协议转换`,"traces.stage.upstream.attempt":`上游尝试`,"traces.stage.gateway.response":`响应回写`,"traces.account.title":`账号(剩余额度来自上游限流响应头)`,"traces.account.ok":`正常`,"traces.account.cooldown":`冷却至 {time}`,"traces.account.expired":`需重新登录`,"traces.account.revoked":`授权已失效`,"traces.account.disabled":`已停用`,"traces.account.remaining":`剩余 {count}`,"traces.link.new_turn":`新一轮(用户输入)`,"traces.link.tool_call":`工具调用 id(精确)`,"traces.link.session":`按会话兜底`,"traces.link.inferred":`推断`,"traces.retry.compression_rejected":`上游不收压缩的请求体`,"traces.retry.auth_refresh":`401 后刷新令牌重试`,"traces.retry.rate_limited_failover":`429 限流,切换账号`,"traces.retry.auth_failover":`令牌失效,切换账号`,"traces.yes":`是`,"traces.no":`否`,"traces.node.entry":`入口`,"traces.node.entryDetail":`鉴权 · 路由 · 限额`,"traces.node.middleware":`中间件`,"traces.node.rewritten":`改写了请求`,"traces.node.unchanged":`未修改`,"traces.node.privacy":`隐私护栏`,"traces.node.hits":`命中 {count}`,"traces.node.resolve":`解析`,"traces.node.passthrough":`直通`,"traces.node.encode":`协议转换`,"traces.node.attempt":`尝试 {n}`,"traces.node.decode":`响应解码`,"traces.node.maxGap":`最长停顿 {ms}`,"traces.node.reencode":`协议回编码`,"traces.node.restore":`占位符还原`,"traces.node.restored":`还原 {count} 处`,"traces.node.middlewareResponse":`中间件 · 响应`,"traces.node.events":`{count} 个事件`,"traces.sessions.empty":`还没有会话。Agent 经过 Astra 发出请求后会出现在这里。`,"traces.sessions.active":`进行中`,"traces.sessions.turnsCalls":`{turns} 轮 · {calls} 次调用`,"traces.sessions.errors":`{count} 个错误`,"traces.session.notFound":`找不到这个会话,可能已超出请求日志的保留期。`,"traces.session.back":`返回会话列表`,"traces.session.empty":`这一轮没有记录到调用。`,"traces.session.turn":`第 {n} 轮`,"traces.session.turnPicker":`选择轮次`,"traces.session.viewLabel":`展示方式`,"traces.session.view.canvas":`画布`,"traces.session.view.timeline":`时间线`,"traces.session.legend.exact":`工具调用 id 精确关联`,"traces.session.legend.inferred":`推断关联`,"traces.session.legend.tool":`连线标签:Agent 端工具与间隔(点击查看)`,"traces.session.tool":`工具`,"traces.session.toolCount":`{count} 个工具调用`,"traces.session.tries":`{count} 次尝试`,"traces.session.inferredSub":`推断:子代理`,"traces.session.inferredAux":`推断:辅助调用`,"traces.session.turnRow":`这一轮`,"traces.session.toolGapRow":`工具 / 等待`,"traces.session.toolNoteTitle":`这段时间里发生了什么`,"traces.session.toolNote":`两次调用之间的间隔:Agent 在执行工具,或在等你确认。要区分两者需要接入 Agent 遥测。`,"traces.session.time.title":`这一轮的时间`,"traces.session.time.model":`模型调用`,"traces.session.time.tools":`工具 / 等待`,"traces.session.time.retries":`重试浪费`,"traces.session.time.needsTelemetry":`细分需 Agent 遥测`,"traces.session.time.overhead":`Astra 自身开销 {ms},已含在模型调用内。`,"traces.session.groupCalls":`{count} 次调用 · {ms}`,"traces.session.groupTools":`{count} 次工具调用 · 点击展开`,"traces.session.expandAll":`全部展开`,"traces.session.nextAnomaly":`跳到异常({count})`,"traces.session.toolRow":`工具 · {names}`,"traces.phase.wait":`等首个输出`,"traces.phase.think":`思考`,"traces.phase.write":`输出`,"traces.phase.tool":`生成工具调用`,"traces.flag.error":`失败`,"traces.flag.retry":`重试`,"traces.flag.slow":`慢`,"traces.agent.label":`Agent`,"traces.agent.upstream":`等待模型响应`,"traces.agent.waiting":`模型开始响应`,"traces.agent.thinking":`思考中`,"traces.agent.writing":`输出中`,"traces.agent.tool":`生成工具调用 {name}`,"traces.agent.tools":`运行工具 {names}`,"traces.agent.idle":`等待你的输入`,"traces.agent.failed":`上次调用失败`,"traces.kv.phases":`阶段`,"traces.kv.reasoning":`思考设置`,"traces.kv.chars":`思考 / 输出字数`,"traces.kv.tools":`调用的工具`,"traces.kv.startAt":`开始于`,"traces.kv.raw":`记录的全部属性与事件`,"traces.kv.messages":`消息数`,"traces.kv.toolDefs":`工具定义`,"traces.kv.systemChars":`system 提示词`,"traces.kv.maxTokens":`输出上限`,"traces.kv.requestId":`请求 id`,"traces.kv.reasoningTokens":`推理 token`,"traces.kv.generation":`生成耗时`,"traces.kv.speed":`输出速度`,"traces.unit.chars":`{count} 字符`,"traces.request.time.generationOther":`生成 · 其他`,"traces.timeline.node":`节点`,"traces.timeline.duration":`耗时`,"traces.request.pick":`选一个请求查看链路`,"traces.request.none":`还没有请求。`,"traces.request.notFound":`找不到这个请求,可能已超出请求日志的保留期。`,"traces.request.pending":`进行中`,"traces.request.inFlight":`请求还在进行中,结束后显示完整链路。`,"traces.request.openSession":`查看所在会话`,"traces.request.parent":`上一步`,"traces.request.child":`下一步`,"traces.request.legend.request":`请求方向`,"traces.request.legend.response":`响应方向`,"traces.request.legend.failed":`失败的尝试`,"traces.request.time.title":`时间去哪了`,"traces.request.time.astra":`Astra 自身`,"traces.request.time.retries":`重试浪费`,"traces.request.time.ttfb":`上游首字节`,"traces.request.time.firstToken":`等首 token`,"traces.request.time.generation":`生成`,"traces.openInLog":`在请求日志中打开`,"traces.openRequest":`打开这次请求的链路`,"traces.openTrace":`查看链路`,"traces.error.title":`加载链路数据失败`,"traces.error.unsupportedTitle":`当前连接的 Astra 服务不支持链路追踪`,"traces.error.unsupported":`这个端口上运行的是还没有链路追踪功能的旧版本 astra-server。停掉旧服务(例如退出 Astra 桌面版),再用新版本重新启动。`},g_={"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.traces":`Traces`,"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.repair.title":`{name} can't read this config file: it isn't valid JSON`,"clients.repair.problem.trailing-comma":`extra comma on line {line}`,"clients.repair.problem.comment":`comment on line {line}`,"clients.repair.hint":`Repair removes only the extra commas and comments and leaves everything else as it is. The file is backed up first.`,"clients.repair.action":`Repair`,"clients.repair.done":`{name}'s config file repaired`,"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.protocols.title":`Model protocols`,"clients.protocols.footer":`Each model uses its native protocol, which the gateway passes through untranslated; you can pick another protocol for a model, and the gateway translates. A protocol changed in the client’s own settings is recorded here too.`,"clients.protocols.footerEnabled":`Changes need to be applied again.`,"clients.protocols.auto":`Auto · {protocol}`,"clients.protocols.autoTranslated":`Auto · {protocol} (translated)`,"clients.protocols.native":`Native protocol: {protocols}`,"clients.protocols.noNative":`No native protocol this client speaks; the gateway translates`,"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.coding":`Coding plans`,"providers.category.cn":`China`,"providers.category.aggregator":`Aggregators`,"providers.category.inference":`Inference platforms`,"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 from this machine without a key (or with an invalid one) are still served, through the default token's provider; LAN and remote requests always need a token.`,"settings.requireKeyOffConfirm":`Turn off access key verification?`,"settings.requireKeyOffDetail":`Once off, any program on this machine can use your provider quota without a key (LAN and remote requests still need a token). Only do this in a trusted environment.`,"settings.requireKeyOff":`Turn off anyway`,"settings.gatewayFooter":`Change the port from a terminal: astra start --port <port>`,"settings.gatewayUrl":`Gateway URL`,"settings.listen":`Listening on`,"settings.listen.local":`This machine`,"settings.listen.lan":`LAN`,"settings.listen.pending":`Changed to {host}; takes effect after the service restarts`,"settings.listen.env":`{address} · set by the ASTRA_HOST environment variable, so it cannot be changed here`,"settings.listen.localOnly":`{address} · can only be changed on the computer running Astra`,"settings.listen.lanConfirm":`Allow LAN access?`,"settings.listen.lanDetail":`Devices on the same network will reach Astra at this machine's IP: gateway calls must carry a token, and the admin UI asks for the admin password. LAN traffic is not encrypted, so only allow this on a trusted network.`,"settings.listen.lanAction":`Allow`,"settings.listen.passwordTitle":`Set an admin password first`,"settings.listen.passwordDetail":`With LAN access on, other devices must sign in to open the admin UI. Without an admin password the service will not start on the LAN.`,"settings.listen.passwordRepeat":`Repeat the password`,"settings.listen.passwordMismatch":`The passwords do not match`,"settings.listen.passwordAction":`Set password and allow`,"settings.listen.saved":`Saved; takes effect after the service restarts`,"settings.listen.restart":`Restart service`,"settings.listen.restartHint":`Run astra restart in a terminal to apply the new address`,"settings.listen.restarted":`Service restarted`,"settings.listen.networkUrl":`LAN address`,"settings.startup":`Start at login`,"settings.startup.app":`Desktop app`,"settings.startup.appHint":`Opens in the tray / menu bar without a window when you log in, and starts the service with it`,"settings.startup.appUnsupported":`Available in the installed app only`,"settings.startup.service":`Background service`,"settings.startup.service.launchd":`Starts the gateway in the background when you log in, with no window (a LaunchAgent, same as astra autostart)`,"settings.startup.service.systemd":`A systemd user service starts the gateway when you log in (same as astra autostart)`,"settings.startup.service.registry":`Starts the gateway in the background when you sign in to Windows (the Run registry key, same as astra autostart)`,"settings.startup.entry":`Entry: {location}`,"settings.startup.saved":`On; takes effect the next time you log in`,"settings.startup.failed":`The system did not accept the change`,"settings.startup.localOnly":`Can only be changed on the computer running Astra`,"settings.startup.unsupported.container":`In a container, the container's restart policy starts the server (e.g. compose restart: unless-stopped)`,"settings.startup.unsupported.no-systemd":`This Linux system has no systemd, so Astra cannot register a login service`,"settings.startup.unsupported.platform":`Not supported on this system`,"settings.startup.macFooter":`macOS may ask you to allow Astra in System Settings › General › Login Items.`,"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 · needed for LAN access or 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`,"traces.subtitle":`Agent → Astra → provider: traffic, time, retries and rewrites at every hop`,"traces.tab.label":`Trace view`,"traces.tab.topology":`Topology`,"traces.tab.sessions":`Sessions`,"traces.tab.requests":`Requests`,"traces.range.label":`Time range`,"traces.range.live":`Live`,"traces.range.1h":`1 hour`,"traces.range.24h":`24 hours`,"traces.range.7d":`7 days`,"traces.canvas.hint":`Drag the background to pan · drag nodes to rearrange · ⌘/Ctrl + scroll to zoom`,"traces.canvas.details":`Details`,"traces.canvas.fit":`Fit`,"traces.canvas.resetLayout":`Reset layout`,"traces.canvas.zoomIn":`Zoom in`,"traces.canvas.zoomOut":`Zoom out`,"traces.canvas.close":`Close details`,"traces.canvas.minimap":`Minimap`,"traces.topology.legend":`Line width = volume · orange line = rate limits / failovers`,"traces.live.arriving":`Authenticating / routing`,"traces.live.upstream":`Sent upstream, waiting for the first byte`,"traces.live.streaming":`Upstream answered, streaming back`,"traces.live.done":`Done`,"traces.live.failed":`Failed`,"traces.live.badge":`{count} in flight`,"traces.live.legend.out":`Going upstream`,"traces.live.legend.back":`Streaming back`,"traces.live.legend.slow":`Waiting long`,"traces.live.legend.failed":`Failed`,"traces.topology.requestsIn":`requests ({window})`,"traces.topology.perMinute":`{count}/min`,"traces.topology.count":`{count}×`,"traces.topology.direct":`Direct calls`,"traces.topology.activeSessions":`{count} active sessions`,"traces.topology.idle":`Idle`,"traces.topology.accounts":`{count} accounts`,"traces.topology.cooling":`{count} cooling down`,"traces.topology.apiKey":`API key`,"traces.topology.empty":`No requests went through Astra in this window.`,"traces.topology.gateway":`Astra gateway`,"traces.topology.inFlightCount":`{count} in flight`,"traces.topology.overheadNoteTitle":`How overhead is measured`,"traces.topology.overheadNote":`First upstream send − arrival; upstream time and retries excluded.`,"traces.viewSessions":`View sessions`,"traces.kind.agent":`Agent`,"traces.kind.gateway":`Gateway`,"traces.kind.provider":`Provider`,"traces.kind.tool":`Agent-side tool`,"traces.kind.main":`Main agent`,"traces.kind.sidechain":`Sub-agent`,"traces.kind.aux":`Side call`,"traces.kv.requests":`Requests`,"traces.kv.errors":`Errors`,"traces.kv.errorRate":`Error rate`,"traces.kv.inFlight":`In flight`,"traces.kv.rate":`Requests/min`,"traces.kv.activeSessions":`Active sessions`,"traces.kv.attempts":`Upstream attempts`,"traces.kv.rateLimited":`429 responses`,"traces.kv.failovers":`Failovers`,"traces.kv.ttfbP95":`First byte P95`,"traces.kv.overheadP50":`Own overhead P50`,"traces.kv.overheadP95":`Astra overhead P95`,"traces.kv.calls":`Calls`,"traces.kv.cost":`Cost`,"traces.kv.status":`Status`,"traces.kv.duration":`Duration`,"traces.kv.firstToken":`First token`,"traces.kv.tokens":`Input / output`,"traces.kv.cacheRead":`Cache read`,"traces.kv.finish":`finish_reason`,"traces.kv.link":`Linked by`,"traces.kv.toolCalls":`Tool calls`,"traces.kv.gap":`Gap`,"traces.kv.session":`Session`,"traces.kv.step":`Step`,"traces.kv.protocols":`Protocols`,"traces.kv.traceparent":`traceparent`,"traces.kv.token":`Token`,"traces.kv.client":`Client`,"traces.kv.bytes":`Body`,"traces.kv.bodyTime":`Body read`,"traces.kv.rewritten":`Rewrote the request`,"traces.kv.hits":`Hits`,"traces.kv.categories":`Categories`,"traces.kv.restored":`Placeholders restored`,"traces.kv.dryRun":`Dry run`,"traces.kv.provider":`Provider`,"traces.kv.model":`Model`,"traces.kv.capabilities":`Capability lookup`,"traces.kv.lossy":`Lossy mappings`,"traces.kv.claudeMode":`Claude subscription headers`,"traces.kv.upstreamId":`Upstream request id`,"traces.kv.reads":`Reads`,"traces.kv.events":`Events`,"traces.kv.maxGap":`Longest pause`,"traces.kv.http":`HTTP status`,"traces.kv.ttfb":`First byte`,"traces.kv.credentials":`Credentials`,"traces.kv.refreshed":`token refreshed`,"traces.kv.retry":`Retried because`,"traces.kv.processing":`Upstream processing`,"traces.kv.rateLimitHeaders":`Upstream rate-limit headers`,"traces.stage.gateway.request":`Gateway request`,"traces.stage.gateway.route":`Auth · routing · limits`,"traces.stage.gateway.body":`Body read`,"traces.stage.gateway.middleware":`Middleware plugins`,"traces.stage.gateway.privacy":`Privacy guard`,"traces.stage.gateway.resolve":`Provider / model resolution`,"traces.stage.gateway.encode":`Protocol conversion`,"traces.stage.upstream.attempt":`Upstream attempt`,"traces.stage.gateway.response":`Response`,"traces.account.title":`Accounts (remaining quota from upstream rate-limit headers)`,"traces.account.ok":`OK`,"traces.account.cooldown":`Cooling down until {time}`,"traces.account.expired":`Sign in again`,"traces.account.revoked":`Revoked`,"traces.account.disabled":`Disabled`,"traces.account.remaining":`{count} left`,"traces.link.new_turn":`New turn (user input)`,"traces.link.tool_call":`Tool call id (exact)`,"traces.link.session":`Session fallback`,"traces.link.inferred":`Inferred`,"traces.retry.compression_rejected":`Upstream rejected the compressed body`,"traces.retry.auth_refresh":`Retried after refreshing the token (401)`,"traces.retry.rate_limited_failover":`Rate limited (429), switched account`,"traces.retry.auth_failover":`Token invalid, switched account`,"traces.yes":`Yes`,"traces.no":`No`,"traces.node.entry":`Entry`,"traces.node.entryDetail":`Auth · routing · limits`,"traces.node.middleware":`Middleware`,"traces.node.rewritten":`Rewrote the request`,"traces.node.unchanged":`Unchanged`,"traces.node.privacy":`Privacy guard`,"traces.node.hits":`{count} hits`,"traces.node.resolve":`Resolve`,"traces.node.passthrough":`Pass-through`,"traces.node.encode":`Conversion`,"traces.node.attempt":`Attempt {n}`,"traces.node.decode":`Response decode`,"traces.node.maxGap":`Longest pause {ms}`,"traces.node.reencode":`Re-encode`,"traces.node.restore":`Restore placeholders`,"traces.node.restored":`{count} restored`,"traces.node.middlewareResponse":`Middleware · response`,"traces.node.events":`{count} events`,"traces.sessions.empty":`No sessions yet. They show up once an agent sends requests through Astra.`,"traces.sessions.active":`Active`,"traces.sessions.turnsCalls":`{turns} turns · {calls} calls`,"traces.sessions.errors":`{count} errors`,"traces.session.notFound":`Session not found — it may be older than the request-log retention.`,"traces.session.back":`Back to sessions`,"traces.session.empty":`No calls recorded for this turn.`,"traces.session.turn":`Turn {n}`,"traces.session.turnPicker":`Choose a turn`,"traces.session.viewLabel":`View`,"traces.session.view.canvas":`Canvas`,"traces.session.view.timeline":`Timeline`,"traces.session.legend.exact":`Linked by tool call id`,"traces.session.legend.inferred":`Inferred link`,"traces.session.legend.tool":`Line label: agent-side tools and the gap (click for details)`,"traces.session.tool":`Tool`,"traces.session.toolCount":`{count} tool calls`,"traces.session.tries":`{count} attempts`,"traces.session.inferredSub":`Inferred: sub-agent`,"traces.session.inferredAux":`Inferred: side call`,"traces.session.turnRow":`This turn`,"traces.session.toolGapRow":`Tools / waiting`,"traces.session.toolNoteTitle":`What happened here`,"traces.session.toolNote":`The gap between two calls: the agent ran tools or waited for you. Telling them apart needs agent telemetry.`,"traces.session.time.title":`Time in this turn`,"traces.session.time.model":`Model calls`,"traces.session.time.tools":`Tools / waiting`,"traces.session.time.retries":`Wasted on retries`,"traces.session.time.needsTelemetry":`Breakdown needs agent telemetry`,"traces.session.time.overhead":`Astra’s own overhead {ms}, included in the model calls.`,"traces.session.groupCalls":`{count} calls · {ms}`,"traces.session.groupTools":`{count} tool calls · click to expand`,"traces.session.expandAll":`Expand all`,"traces.session.nextAnomaly":`Jump to issue ({count})`,"traces.session.toolRow":`Tools · {names}`,"traces.phase.wait":`Before first output`,"traces.phase.think":`Thinking`,"traces.phase.write":`Writing`,"traces.phase.tool":`Writing tool calls`,"traces.flag.error":`Failed`,"traces.flag.retry":`Retried`,"traces.flag.slow":`Slow`,"traces.agent.label":`Agent`,"traces.agent.upstream":`Waiting for the model`,"traces.agent.waiting":`Model responding`,"traces.agent.thinking":`Thinking`,"traces.agent.writing":`Writing`,"traces.agent.tool":`Calling {name}`,"traces.agent.tools":`Running {names}`,"traces.agent.idle":`Waiting for you`,"traces.agent.failed":`Last call failed`,"traces.kv.phases":`Phases`,"traces.kv.reasoning":`Reasoning`,"traces.kv.chars":`Reasoning / text chars`,"traces.kv.tools":`Tools called`,"traces.kv.startAt":`Starts at`,"traces.kv.raw":`Everything recorded`,"traces.kv.messages":`Messages`,"traces.kv.toolDefs":`Tool definitions`,"traces.kv.systemChars":`System prompt`,"traces.kv.maxTokens":`Output cap`,"traces.kv.requestId":`Request id`,"traces.kv.reasoningTokens":`Reasoning tokens`,"traces.kv.generation":`Generation`,"traces.kv.speed":`Output speed`,"traces.unit.chars":`{count} chars`,"traces.request.time.generationOther":`Generation · other`,"traces.timeline.node":`Node`,"traces.timeline.duration":`Duration`,"traces.request.pick":`Pick a request to trace`,"traces.request.none":`No requests yet.`,"traces.request.notFound":`Request not found — it may be older than the request-log retention.`,"traces.request.pending":`In flight`,"traces.request.inFlight":`The request is still running; its full trace appears once it is done.`,"traces.request.openSession":`Open its session`,"traces.request.parent":`Previous step`,"traces.request.child":`Next step`,"traces.request.legend.request":`Request leg`,"traces.request.legend.response":`Response leg`,"traces.request.legend.failed":`Failed attempt`,"traces.request.time.title":`Where the time went`,"traces.request.time.astra":`Astra itself`,"traces.request.time.retries":`Wasted on retries`,"traces.request.time.ttfb":`Upstream first byte`,"traces.request.time.firstToken":`Waiting for the first token`,"traces.request.time.generation":`Generation`,"traces.openInLog":`Open in request log`,"traces.openRequest":`Open this request’s trace`,"traces.openTrace":`View trace`,"traces.error.title":`Could not load trace data`,"traces.error.unsupportedTitle":`The connected Astra server has no tracing`,"traces.error.unsupported":`The astra-server on this port is an older version without tracing. Stop it (for example, quit Astra Desktop) and start the new version.`},__=`astra.locale`,v_={zh:h_,en:g_};function y_(){try{let e=localStorage.getItem(__);if(e===`zh`||e===`en`)return e}catch{}return(globalThis.navigator?.language??`zh`).toLowerCase().startsWith(`zh`)?`zh`:`en`}function b_(e,t){return t?e.replace(/\{(\w+)\}/g,(e,n)=>n in t?String(t[n]):e):e}function x_(e,t,n){return b_(v_[e][t]??v_.zh[t]??t,n)}var S_=(0,m.createContext)(null);function C_({children:e}){let[t,n]=(0,m.useState)(y_),r=(0,m.useCallback)(e=>{n(e),document.documentElement.lang=e===`zh`?`zh-CN`:`en`;try{localStorage.setItem(__,e)}catch{}},[]),i=(0,m.useMemo)(()=>({locale:t,setLocale:r,t:(e,n)=>x_(t,e,n)}),[t,r]);return(0,h.jsx)(S_.Provider,{value:i,children:e})}function w_(){let e=(0,m.useContext)(S_);if(!e)throw Error(`useI18n outside I18nProvider`);return e}function T_(){return w_().t}function E_(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=E_(e[t]))&&(r&&(r+=` `),r+=n)}else for(n in e)e[n]&&(r&&(r+=` `),r+=n)}return r}function D_(){for(var e,t,n=0,r=``,i=arguments.length;n<i;n++)(e=arguments[n])&&(t=E_(e))&&(r&&(r+=` `),r+=t);return r}function O_(...e){return D_(e)}var k_=1e9;function A_(e){return e/k_}function j_(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 M_(e){return e===0?`$0`:Math.abs(e)>=1e3?j_(e,{compact:!0}):`$${new Intl.NumberFormat(`en-US`,{maximumSignificantDigits:2,maximumFractionDigits:10}).format(e)}`}function N_(e){return e==null?`—`:j_(A_(e))}function P_(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 F_(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 I_(e){return e==null?`—`:e>=1e4?`${(e/1e3).toFixed(1)} s`:`${Math.round(e)} ms`}function L_(e){return e==null||!Number.isFinite(e)||e<0?`—`:`${e.toFixed(1)} tok/s`}function R_(e){return e==null||Number.isNaN(e)?`—`:`${(e*100).toFixed(e>=.999||e===0?0:1)}%`}function z_(e){return e?e>=1e6?`${Number((e/1e6).toFixed(2))}M`:e>=1e3?`${Math.round(e/1e3)}K`:String(e):`—`}function B_(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 V_(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 H_(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 U_=e=>e===`zh`?`zh-CN`:`en-US`;function W_(e){let[t,n,r]=e.split(`-`).map(Number);return new Date(t,n-1,r)}function G_(e,t,n,r,i){return`${new Intl.DateTimeFormat(U_(n),{weekday:`short`,month:`short`,day:`numeric`,year:`numeric`}).format(W_(e))} · ${t>0?`${t} ${r}`:i}`}var K_=(e,t)=>new Intl.DateTimeFormat(U_(t),{month:`short`}).format(new Date(2026,e-1,1)),q_=(e,t,n)=>new Intl.DateTimeFormat(U_(n),{month:`short`,year:`numeric`}).format(new Date(t,e-1,1)),J_=(e,t)=>new Intl.DateTimeFormat(U_(t),{weekday:`short`}).format(new Date(2026,7,3+e));function Y_(e){if(!e?.base)return`—`;let t=e.base.input,n=e.base.output;return t==null&&n==null?`—`:`${P_(t)} / ${P_(n)}`}function X_(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 Z_=Object.defineProperty,Q_=(e,t)=>Z_(e,`name`,{value:t,configurable:!0});function $_(e,t){let n=m.createContext(t);n.displayName=e+`Context`;let r=Q_(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 Q_(i,`useContext`),[r,i]}Q_($_,`createContext`);function ev(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=Q_(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 Q_(s,`useContext`),[o,s]}Q_(r,`createContext`);let i=Q_(()=>{let t=n.map(e=>m.createContext(e));return Q_(function(n){let r=n?.[e]||t;return m.useMemo(()=>({[`__scope${e}`]:{...n,[e]:r}}),[n,r])},`useScope`)},`createScope`);return i.scopeName=e,[r,tv(i,...t)]}Q_(ev,`createContextScope`);function tv(...e){let t=e[0];if(e.length===1)return t;let n=Q_(()=>{let n=e.map(e=>({useScope:e(),scopeName:e.scopeName}));return Q_(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}Q_(tv,`composeContextScopes`);var nv=Object.defineProperty,rv=(e,t)=>nv(e,`name`,{value:t,configurable:!0});function iv(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}rv(iv,`setRef`);function av(...e){return t=>{let n=!1,r=e.map(e=>{let r=iv(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():iv(e[t],null)}}}}rv(av,`composeRefs`);function ov(...e){return m.useCallback(av(...e),e)}rv(ov,`useComposedRefs`);var sv=Object.defineProperty,cv=(e,t)=>sv(e,`name`,{value:t,configurable:!0});function lv(e){let t=m.forwardRef((t,n)=>{let{children:r,...i}=t,a=null,o=!1,s=[];_v(r)&&typeof Sv==`function`&&(r=Sv(r._payload)),m.Children.forEach(r,e=>{if(hv(e)){o=!0;let t=e,n=`child`in t.props?t.props.child:t.props.children;_v(n)&&typeof Sv==`function`&&(n=Sv(n._payload)),a=fv(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?mv(a):void 0,l=ov(n,c);if(!a){if(r||r===0)throw Error(o?xv(e):bv(e));return r}let u=pv(i,a.props??{});return a.type!==m.Fragment&&(u.ref=n?l:c),m.cloneElement(a,u)});return t.displayName=`${e}.Slot`,t}cv(lv,`createSlot`);var uv=Symbol.for(`radix.slottable`);function dv(e){let t=cv(e=>`child`in e?e.children(e.child):e.children,`Slottable`);return t.displayName=`${e}.Slottable`,t.__radixId=uv,t}cv(dv,`createSlottable`);var fv=cv((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 pv(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]=yv(a,i))}return{...e,...n}}cv(pv,`mergeProps`);function mv(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)}cv(mv,`getElementRef`);function hv(e){return m.isValidElement(e)&&typeof e.type==`function`&&`__radixId`in e.type&&e.type.__radixId===uv}cv(hv,`isSlottable`);var gv=Symbol.for(`react.lazy`);function _v(e){return typeof e==`object`&&!!e&&`$$typeof`in e&&e.$$typeof===gv&&`_payload`in e&&vv(e._payload)}cv(_v,`isLazyComponent`);function vv(e){return typeof e==`object`&&!!e&&`then`in e}cv(vv,`isPromiseLike`);function yv(...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}cv(yv,`concatAriaDescribedby`);var bv=cv(e=>`${e} failed to slot onto its children. Expected a single React element child or \`Slottable\`.`,`createSlotError`),xv=cv(e=>`${e} failed to slot onto its \`Slottable\`. Expected \`Slottable\` to receive a single React element child.`,`createSlottableError`),Sv=m.use,Cv=Object.defineProperty,X=(e,t)=>Cv(e,`name`,{value:t,configurable:!0});function wv(e){let t=e+`CollectionProvider`,[n,r]=ev(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=lv(s),l=m.forwardRef((e,t)=>{let{scope:n,children:r}=e,i=ov(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=lv(u),p=m.forwardRef((e,t)=>{let{scope:n,children:r,...i}=e,o=m.useRef(null),s=ov(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(wv,`createCollection`);var Tv=new WeakMap,Ev=class e extends Map{static{X(this,`OrderedDict`)}#e;constructor(e){super(e),this.#e=[...super.keys()],Tv.set(this,!0)}set(e,t){return Tv.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=kv(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=Dv(this.#e,e);if(t!==void 0)return this.get(t)}entryAt(e){let t=Dv(this.#e,e);if(t!==void 0)return[t,this.get(t)]}indexOf(e){return this.#e.indexOf(e)}keyAt(e){return Dv(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 Dv(e,t){if(`at`in Array.prototype)return Array.prototype.at.call(e,t);let n=Ov(e,t);return n===-1?void 0:e[n]}X(Dv,`at`);function Ov(e,t){let n=e.length,r=kv(t),i=r>=0?r:n+r;return i<0||i>=n?-1:i}X(Ov,`toSafeIndex`);function kv(e){return e!==e||e===0?0:Math.trunc(e)}X(kv,`toSafeInteger`);function Av(e){let t=e+`CollectionProvider`,[n,r]=ev(t),[i,a]=n(t,{collectionElement:null,collectionRef:{current:null},collectionRefObject:{current:null},itemMap:new Ev,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=ov(a,s),[l,u]=r;return m.useEffect(()=>{if(!o)return;let e=Pv(()=>{});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=lv(l),d=m.forwardRef((e,t)=>{let{scope:n,children:r}=e,i=ov(t,a(l,n).collectionRef);return(0,h.jsx)(u,{ref:i,children:r})});d.displayName=l;let f=e+`CollectionItemSlot`,p=lv(f),g=m.forwardRef((e,t)=>{let{scope:n,children:r,...i}=e,o=m.useRef(null),[s,c]=m.useState(null),l=ov(t,o,c),{setItemMap:u}=a(f,n),d=m.useRef(i);jv(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(Nv):(t.set(s,{...e,element:s}),t.toSorted(Nv)):t),()=>{u(e=>!s||!e.has(s)?e:(e.delete(s),new Ev(e)))}},[s,g,u]),(0,h.jsx)(p,{"data-radix-collection-item":``,ref:l,children:r})});g.displayName=f;function _(){return m.useState(new Ev)}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(Av,`createCollection`);function jv(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(jv,`shallowEqual`);function Mv(e,t){return!!(t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_PRECEDING)}X(Mv,`isElementPreceding`);function Nv(e,t){return!e[1].element||!t[1].element?0:Mv(e[1].element,t[1].element)?-1:1}X(Nv,`sortByDocumentPosition`);function Pv(e){return new MutationObserver(t=>{for(let n of t)if(n.type===`childList`){e();return}})}X(Pv,`getChildListObserver`);var Fv=Object.defineProperty,Iv=(e,t)=>Fv(e,`name`,{value:t,configurable:!0}),Lv=!!(typeof window<`u`&&window.document&&window.document.createElement);function Rv(e,t,{checkForDefaultPrevented:n=!0}={}){return Iv(function(r){if(e?.(r),n===!1||!r||!r.defaultPrevented)return t?.(r)},`handleEvent`)}Iv(Rv,`composeEventHandlers`);function zv(e){if(!Lv)throw Error(`Cannot access window outside of the DOM`);return e?.ownerDocument?.defaultView??window}Iv(zv,`getOwnerWindow`);function Bv(e){if(!Lv)throw Error(`Cannot access document outside of the DOM`);return e?.ownerDocument??document}Iv(Bv,`getOwnerDocument`);function Vv(e,t=!1){let{activeElement:n}=Bv(e);if(!n?.nodeName)return null;if(Hv(n)&&n.contentDocument)return Vv(n.contentDocument.body,t);if(t){let e=n.getAttribute(`aria-activedescendant`);if(e){let t=Bv(n).getElementById(e);if(t)return t}}return n}Iv(Vv,`getActiveElement`);function Hv(e){return e.tagName===`IFRAME`}Iv(Hv,`isFrame`);var Uv=globalThis?.document?m.useLayoutEffect:()=>{},Wv=Object.defineProperty,Gv=(e,t)=>Wv(e,`name`,{value:t,configurable:!0}),Kv=m.useEffectEvent,qv=m.useInsertionEffect;function Jv(e){if(typeof Kv==`function`)return Kv(e);let t=m.useRef(()=>{throw Error(`Cannot call an event handler while rendering.`)});return typeof qv==`function`?qv(()=>{t.current=e}):Uv(()=>{t.current=e}),m.useMemo(()=>((...e)=>t.current?.(...e)),[])}Gv(Jv,`useEffectEvent`);var Yv=Object.defineProperty,Xv=(e,t)=>Yv(e,`name`,{value:t,configurable:!0}),Zv=m.useInsertionEffect||Uv;function Qv({prop:e,defaultProp:t,onChange:n=Xv(()=>{},`onChange`),caller:r}){let[i,a,o]=$v({defaultProp:t,onChange:n}),s=e!==void 0;return[s?e:i,m.useCallback(t=>{if(s){let n=ey(t)?t(e):t;n!==e&&o.current?.(n)}else a(t)},[s,e,a,o])]}Xv(Qv,`useControllableState`);function $v({defaultProp:e,onChange:t}){let[n,r]=m.useState(e),i=m.useRef(n),a=m.useRef(t);return Zv(()=>{a.current=t},[t]),m.useEffect(()=>{i.current!==n&&(a.current?.(n),i.current=n)},[n,i]),[n,r,a]}Xv($v,`useUncontrolledState`);function ey(e){return typeof e==`function`}Xv(ey,`isFunction`);var ty=Symbol(`RADIX:SYNC_STATE`);function ny(e,t,n,r){let{prop:i,defaultProp:a,onChange:o,caller:s}=t,c=i!==void 0,l=Jv(o),u=[{...n,state:a}];r&&u.push(r);let[d,f]=m.useReducer((t,n)=>{if(n.type===ty)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:ty,state:i})},[i,d.state,c]),[g,f]}Xv(ny,`useControllableStateReducer`);var ry=l(ap(),1),iy=Object.defineProperty,ay=(e,t)=>iy(e,`name`,{value:t,configurable:!0}),oy=[`a`,`button`,`div`,`form`,`h2`,`h3`,`img`,`input`,`label`,`li`,`nav`,`ol`,`p`,`select`,`span`,`svg`,`ul`].reduce((e,t)=>{let n=lv(`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 sy(e,t){e&&ry.flushSync(()=>e.dispatchEvent(t))}ay(sy,`dispatchDiscreteCustomEvent`);var cy=Object.defineProperty,ly=(e,t)=>cy(e,`name`,{value:t,configurable:!0});function uy(e,t){return m.useReducer((e,n)=>t[e][n]??e,e)}ly(uy,`useStateMachine`);var dy=ly(e=>{let{present:t,children:n}=e,r=fy(t),i=typeof n==`function`?n({present:r.isPresent}):m.Children.only(n),a=my(r.ref,gy(i));return typeof n==`function`||r.isPresent?m.cloneElement(i,{ref:a}):null},`Presence`);function fy(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]=uy(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??hy(r.current),o.current=void 0):a.current=`none`},[s]),Uv(()=>{let t=r.current,n=i.current;if(n!==e){let r=a.current,s=hy(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]),Uv(()=>{if(t){let e,n=t.ownerDocument.defaultView??window,o=ly(a=>{let o=hy(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=ly(e=>{e.target===t&&(a.current=hy(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=hy(t)}else r.current=null;n(e)},[])}}ly(fy,`usePresence`);function py(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}ly(py,`setRef`);function my(...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=py(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():py(n[e],null)}}},[])}ly(my,`useStableComposedRefs`);function hy(e){return e?.animationName||`none`}ly(hy,`getAnimationName`);function gy(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)}ly(gy,`getElementRef`);var _y=Object.defineProperty,vy=(e,t)=>_y(e,`name`,{value:t,configurable:!0}),yy=m.useId||(()=>void 0),by=0;function xy(e){let[t,n]=m.useState(yy());return Uv(()=>{e||n(e=>e??String(by++))},[e]),e||(t?`radix-${t}`:``)}vy(xy,`useId`);var Sy=Object.defineProperty,Cy=(e,t)=>Sy(e,`name`,{value:t,configurable:!0}),wy=`Collapsible`,[Ty,Ey]=ev(wy),[Dy,Oy]=Ty(wy),ky=m.forwardRef(Cy(function(e,t){let{__scopeCollapsible:n,open:r,defaultOpen:i,disabled:a,onOpenChange:o,...s}=e,[c,l]=Qv({prop:r,defaultProp:i??!1,onChange:o,caller:wy});return(0,h.jsx)(Dy,{scope:n,disabled:a,contentId:xy(),open:c,onOpenToggle:m.useCallback(()=>l(e=>!e),[l]),children:(0,h.jsx)(oy.div,{"data-state":Fy(c),"data-disabled":a?``:void 0,...s,ref:t})})},`Collapsible`)),Ay=`CollapsibleTrigger`,jy=m.forwardRef(Cy(function(e,t){let{__scopeCollapsible:n,...r}=e,i=Oy(Ay,n);return(0,h.jsx)(oy.button,{type:`button`,"aria-controls":i.open?i.contentId:void 0,"aria-expanded":i.open||!1,"data-state":Fy(i.open),"data-disabled":i.disabled?``:void 0,disabled:i.disabled,...r,ref:t,onClick:Rv(e.onClick,i.onOpenToggle)})},`CollapsibleTrigger`)),My=`CollapsibleContent`,Ny=m.forwardRef(Cy(function(e,t){let{forceMount:n,...r}=e,i=Oy(My,e.__scopeCollapsible);return(0,h.jsx)(dy,{present:n||i.open,children:({present:e})=>(0,h.jsx)(Py,{...r,ref:t,present:e})})},`CollapsibleContent`)),Py=m.forwardRef(Cy(function(e,t){let{__scopeCollapsible:n,present:r,children:i,...a}=e,o=Oy(My,n),[s,c]=m.useState(r),l=m.useRef(null),u=ov(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)},[]),Uv(()=>{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)(oy.div,{"data-state":Fy(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 Fy(e){return e?`open`:`closed`}Cy(Fy,`getState`);var Iy=Object.defineProperty,Ly=(e,t)=>Iy(e,`name`,{value:t,configurable:!0}),Ry={LTR:`ltr`,RTL:`rtl`},zy=m.createContext(void 0);function By(e){let t=m.useContext(zy);return e||t||Ry.LTR}Ly(By,`useDirection`);var Vy=Object.defineProperty,Z=(e,t)=>Vy(e,`name`,{value:t,configurable:!0}),Hy={Single:`single`,Multiple:`multiple`},Uy={Vertical:`vertical`,Horizontal:`horizontal`},Wy={LTR:`ltr`,RTL:`rtl`},Gy=`Accordion`,Ky=[`Home`,`End`,`ArrowDown`,`ArrowUp`,`ArrowLeft`,`ArrowRight`],[qy,Jy,Yy]=wv(Gy),[Xy,Zy]=ev(Gy,[Yy,Ey]),Qy=Ey(),$y=m.forwardRef(Z(function(e,t){let{type:n,...r}=e,i=r,a=r;return(0,h.jsx)(qy.Provider,{scope:e.__scopeAccordion,children:n===Hy.Multiple?(0,h.jsx)(ab,{...a,ref:t}):(0,h.jsx)(ib,{...i,ref:t})})},`Accordion`)),[eb,tb]=Xy(Gy),[nb,rb]=Xy(Gy,{collapsible:!1}),ib=m.forwardRef(Z(function(e,t){let{value:n,defaultValue:r,onValueChange:i=Z(()=>{},`onValueChange`),collapsible:a=!1,...o}=e,[s,c]=Qv({prop:n,defaultProp:r??``,onChange:i,caller:Gy});return(0,h.jsx)(eb,{scope:e.__scopeAccordion,value:m.useMemo(()=>s?[s]:[],[s]),onItemOpen:c,onItemClose:m.useCallback(()=>a&&c(``),[a,c]),children:(0,h.jsx)(nb,{scope:e.__scopeAccordion,collapsible:a,children:(0,h.jsx)(cb,{...o,ref:t})})})},`AccordionImplSingle`)),ab=m.forwardRef(Z(function(e,t){let{value:n,defaultValue:r,onValueChange:i=Z(()=>{},`onValueChange`),...a}=e,[o,s]=Qv({prop:n,defaultProp:r??[],onChange:i,caller:Gy}),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)(eb,{scope:e.__scopeAccordion,value:o,onItemOpen:c,onItemClose:l,children:(0,h.jsx)(nb,{scope:e.__scopeAccordion,collapsible:!0,children:(0,h.jsx)(cb,{...a,ref:t})})})},`AccordionImplMultiple`)),[ob,sb]=Xy(Gy),cb=m.forwardRef(Z(function(e,t){let{__scopeAccordion:n,disabled:r,dir:i,orientation:a=Uy.Vertical,...o}=e,s=ov(m.useRef(null),t),c=Jy(n),l=By(i)===Wy.LTR,u=Rv(e.onKeyDown,e=>{if(!Ky.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===Uy.Horizontal&&(l?u():d());break;case`ArrowDown`:a===Uy.Vertical&&u();break;case`ArrowLeft`:a===Uy.Horizontal&&(l?d():u());break;case`ArrowUp`:a===Uy.Vertical&&d()}n[o%i].ref.current?.focus()});return(0,h.jsx)(ob,{scope:n,disabled:r,direction:i,orientation:a,children:(0,h.jsx)(qy.Slot,{scope:n,children:(0,h.jsx)(oy.div,{...o,"data-orientation":a,ref:s,onKeyDown:r?void 0:u})})})},`AccordionImpl`)),lb=`AccordionItem`,[ub,db]=Xy(lb),fb=m.forwardRef(Z(function(e,t){let{__scopeAccordion:n,value:r,...i}=e,a=sb(lb,n),o=tb(lb,n),s=Qy(n),c=xy(),l=r&&o.value.includes(r)||!1,u=a.disabled||e.disabled;return(0,h.jsx)(ub,{scope:n,open:l,disabled:u,triggerId:c,children:(0,h.jsx)(ky,{"data-orientation":a.orientation,"data-state":yb(l),...s,...i,ref:t,disabled:u,open:l,onOpenChange:e=>{e?o.onItemOpen(r):o.onItemClose(r)}})})},`AccordionItem`)),pb=`AccordionHeader`,mb=m.forwardRef(Z(function(e,t){let{__scopeAccordion:n,...r}=e,i=sb(Gy,n),a=db(pb,n);return(0,h.jsx)(oy.h3,{"data-orientation":i.orientation,"data-state":yb(a.open),"data-disabled":a.disabled?``:void 0,...r,ref:t})},`AccordionHeader`)),hb=`AccordionTrigger`,gb=m.forwardRef(Z(function(e,t){let{__scopeAccordion:n,...r}=e,i=sb(Gy,n),a=db(hb,n),o=rb(hb,n),s=Qy(n);return(0,h.jsx)(qy.ItemSlot,{scope:n,children:(0,h.jsx)(jy,{"aria-disabled":a.open&&!o.collapsible||void 0,"data-orientation":i.orientation,id:a.triggerId,...s,...r,ref:t})})},`AccordionTrigger`)),_b=`AccordionContent`,vb=m.forwardRef(Z(function(e,t){let{__scopeAccordion:n,...r}=e,i=sb(Gy,n),a=db(_b,n),o=Qy(n);return(0,h.jsx)(Ny,{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 yb(e){return e?`open`:`closed`}Z(yb,`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}},bb={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`},xb={height:`auto`,opacity:1,visibility:`visible`},Sb={height:0,opacity:0,transitionEnd:{visibility:`hidden`}},Cb={y:0,filter:`blur(0px)`,transitionEnd:{filter:`none`}},wb={y:-6,filter:`blur(${Q.blur.subtle}px)`},Tb={open:{...xb,transition:{height:Q.spring.smooth,opacity:{duration:Q.duration.standard,ease:[...Q.ease.enter]}}},closed:{...Sb,transition:{height:Q.spring.smooth,opacity:{duration:Q.duration.fast,ease:[...Q.ease.standard]}}}},Eb={open:{...Cb,transition:{y:Q.spring.smooth,filter:{duration:Q.duration.standard,ease:[...Q.ease.enter]}}},closed:{...wb,transition:{duration:Q.duration.fast,ease:[...Q.ease.standard]}}},Db={open:{...xb,transition:{duration:0}},closed:{...Sb,transition:{duration:0}}},Ob={open:{...Cb,transition:{duration:0}},closed:{...wb,transition:{duration:0}}};function kb({items:e,defaultOpen:t=0,size:n=`md`}){let r=t>=0&&t<e.length?String(t):``,[i,a]=(0,m.useState)(r),o=U();return(0,h.jsx)($y,{className:[bb.accordion,n===`lg`?bb.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)(fb,{className:bb.item,value:String(t),children:[(0,h.jsx)(mb,{className:bb.header,children:(0,h.jsxs)(gb,{className:bb.trigger,children:[(0,h.jsx)(`span`,{children:e.title}),(0,h.jsx)(W.span,{className:bb.icon,initial:!1,animate:{rotate:n?180:0},transition:o?{duration:0}:Q.spring.snappy,children:(0,h.jsx)(Kg,{width:17,height:17,"aria-hidden":`true`})})]})}),(0,h.jsx)(vb,{forceMount:!0,asChild:!0,children:(0,h.jsx)(W.div,{className:bb.panel,initial:!1,animate:n?`open`:`closed`,variants:o?Db:Tb,children:(0,h.jsx)(W.div,{className:bb.panelInner,variants:o?Ob:Eb,children:e.content})})})]},`${e.title}-${t}`)})})}var Ab={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`},jb={duration:Q.duration.fast,ease:[...Q.ease.standard]},Mb={opacity:0,y:`0.3em`,filter:`blur(${Q.blur.soft}px)`},Nb={opacity:0,y:`-0.3em`,filter:`blur(${Q.blur.subtle}px)`,transition:jb},Pb={opacity:0,scale:.6,filter:`blur(${Q.blur.subtle}px)`},Fb={opacity:1,y:`0em`,scale:1,filter:`blur(0px)`},Ib={opacity:0,transition:{duration:Q.duration.instant}};function Lb(e){let t=ju();return(0,h.jsx)(W.span,{...e,"aria-hidden":!t||e[`aria-hidden`]})}function Rb(e){if(!(0,m.isValidElement)(e))return`icon`;let t=e.type;return typeof t==`string`?t:t.displayName??t.name??`icon`}function zb({tone:e=`neutral`,size:t=`md`,icon:n,className:r,children:i,...a}){let o=U(),s=typeof i==`string`||typeof i==`number`?String(i):null,c=n?Rb(n):``,l=(0,m.useRef)(null),u=(0,m.useRef)(null),d=Pf(`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=rp(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=[Ab.badge,Ab[e],Ab[t],r].filter(Boolean).join(` `);return(0,h.jsx)(`span`,{...a,className:g,children:(0,h.jsx)(W.span,{ref:l,className:Ab.body,style:{width:d},children:(0,h.jsxs)(`span`,{ref:u,className:Ab.content,children:[n?(0,h.jsx)(`span`,{className:Ab.icon,"aria-hidden":`true`,children:(0,h.jsx)(H,{mode:`popLayout`,initial:!1,children:(0,h.jsx)(Lb,{className:Ab.glyph,initial:o?{opacity:0}:Pb,animate:Fb,exit:o?Ib:{...Pb,transition:jb},transition:o?p:Q.spring.snappy,children:n},c)})}):null,s===null?i:(0,h.jsx)(`span`,{className:Ab.label,children:(0,h.jsx)(H,{mode:`popLayout`,initial:!1,children:(0,h.jsx)(Lb,{className:Ab.text,initial:o?{opacity:0}:Mb,animate:Fb,exit:o?Ib:Nb,transition:p,children:s},s)})})]})})})}var Bb={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`},Vb={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]}}}},Hb={opacity:1,y:0,scale:1,filter:`blur(0px)`},Ub={opacity:0,y:4,filter:`blur(${Q.blur.soft}px)`},Wb={opacity:0,y:-3,filter:`blur(${Q.blur.soft}px)`,transition:{duration:Q.duration.fast,ease:[...Q.ease.standard]}},Gb={opacity:0,scale:.6,filter:`blur(${Q.blur.subtle}px)`},Kb={opacity:0,scale:.6,filter:`blur(${Q.blur.subtle}px)`,transition:{duration:Q.duration.fast,ease:[...Q.ease.standard]}},qb={...Hb,opacity:0},Jb={opacity:0,transition:{duration:Q.duration.instant}},Yb={...Q.spring.snappy,opacity:{duration:Q.duration.fast,ease:[...Q.ease.enter]},filter:{duration:Q.duration.fast,ease:[...Q.ease.enter]}};function Xb(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(Xb).join(``);if(!(0,m.isValidElement)(e))return``;let t=e.type;return`<${typeof t==`string`?t:t?.displayName??t?.name??``}>${Xb(e.props.children)}`}function Zb(e,t,n){let r=Pf(`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=``,rp(r,t,{...Q.spring.morph,onComplete:()=>{delete i.dataset.morphing}})});return s.observe(t),()=>s.disconnect()},[e,n,r]),r}function Qb({children:e,icon:t,reduced:n,ref:r}){let i=ju();return(0,h.jsx)(W.span,{ref:r,className:Bb.labelPhase,"aria-hidden":!i||void 0,initial:n?qb:t?Gb:Ub,animate:Hb,exit:n?Jb:t?Kb:Wb,transition:n?{duration:Q.duration.instant}:t?Yb:{duration:Q.duration.standard,ease:[...Q.ease.enter]},children:e})}var $b=(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=U()??!1,u=(0,m.useRef)(null),d=(0,m.useRef)(null),f=Xb(a),p=Zb(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=[Bb.button,Bb[t],Bb[n],e].filter(Boolean).join(` `);return(0,h.jsxs)(W.button,{ref:g,tabIndex:s.tabIndex??0,className:b,disabled:i,"aria-busy":r||void 0,custom:u,variants:Vb,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)(H,{initial:!1,children:r?(0,h.jsx)(W.span,{className:Bb.loader,"aria-hidden":`true`,initial:l?{opacity:0}:{opacity:0,scale:.6},animate:{opacity:1,scale:1},exit:l?Jb:{...Kb,scale:.8},transition:l?{duration:Q.duration.instant}:Yb,children:(0,h.jsx)(`span`,{className:Bb.spinner})},`loader`):null}),(0,h.jsx)(W.span,{className:[Bb.labelSlot,r?Bb.loadingLabel:``].filter(Boolean).join(` `),style:{width:p},children:(0,h.jsx)(`span`,{ref:d,className:Bb.labelContent,children:(0,h.jsx)(H,{mode:`popLayout`,initial:!1,children:(0,h.jsx)(Qb,{icon:!/\S/.test(f.replace(/<[^>]*>/g,``)),reduced:l,children:a},f)})})})]})});$b.displayName=`Button`;function ex(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 tx={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`},nx={type:`spring`,visualDuration:.5,bounce:.06},rx={duration:.36,ease:[...Q.ease.enter]},ix={duration:.2,ease:[...Q.ease.standard]},ax={duration:Q.duration.instant},ox=`blur(${Q.blur.soft}px)`,sx={opacity:1,y:0,scale:1,filter:`blur(0px)`},cx={...sx,opacity:0},lx={opacity:0,transition:ax},ux={opacity:0,scale:.6,filter:ox},dx={opacity:0,scale:.6,filter:ox,transition:{duration:.24,ease:[...Q.ease.standard]}},fx={scale:nx,opacity:{...rx,delay:.03},filter:{...rx,delay:.03}},px={opacity:0,y:4,filter:ox},mx={opacity:0,y:-3,filter:ox,transition:ix};function hx({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)(W.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 gx=(e,t)=>e.map((e,n)=>({id:`${t}:${n}`,char:e,order:n}));function _x(e){let[t,n]=(0,m.useState)(()=>({text:e,seq:0,glyphs:gx([...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),...gx(i.slice(a,i.length-o),s),...t.glyphs.slice(t.glyphs.length-o)];return n({text:e,seq:s,glyphs:c}),c}function vx({text:e,reduced:t}){let n=_x(e);return(0,h.jsx)(W.span,{className:tx.glyphs,layoutRoot:!0,children:(0,h.jsx)(H,{mode:`popLayout`,initial:!1,children:n.map(n=>(0,h.jsx)(W.span,{className:tx.glyph,layout:!t&&`position`,layoutDependency:e,initial:t?cx:px,animate:sx,exit:t?lx:mx,transition:t?ax:{...rx,delay:Math.min(n.order*.02,.12),layout:nx},children:n.char},n.id))})})}function yx({value:e,label:t=`Copy`,className:n,iconOnly:r=!1,variant:i=`outline`,disabled:a,onCopied:o}){let{state:s,copy:c}=ex(),l=U()??!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:[tx.button,r&&tx.iconOnly,i===`plain`&&tx.plain,n].filter(Boolean).join(` `),onClick:()=>void d(),"aria-label":t,"data-copy-state":s,disabled:a,children:[(0,h.jsx)(`span`,{className:tx.icon,"aria-hidden":`true`,children:(0,h.jsx)(H,{initial:!1,children:(0,h.jsx)(W.span,{className:tx.iconInner,"data-state":s,initial:l?cx:ux,animate:sx,exit:l?lx:dx,transition:l?ax:fx,children:s===`copied`?(0,h.jsx)(hx,{reduced:l}):s===`error`?(0,h.jsx)(Jg,{size:16,strokeWidth:1.75}):(0,h.jsx)(Qg,{size:16,strokeWidth:1.75})},s)})}),!r&&(0,h.jsxs)(`span`,{className:tx.label,"aria-hidden":`true`,children:[(0,h.jsx)(`span`,{className:tx.measure,children:t}),(0,h.jsx)(`span`,{className:tx.measure,children:`Copied`}),(0,h.jsx)(`span`,{className:tx.measure,children:`Failed`}),(0,h.jsx)(vx,{text:u,reduced:l})]})]}),(0,h.jsx)(`span`,{className:tx.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`},bx=/^(?: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)$/,xx=/^(?:true|false|null|undefined|NaN|Infinity)$/,Sx=/^(?:Array|Boolean|Date|Error|Map|Number|Promise|Record|Set|String|ReactNode|HTMLElement|HTMLButtonElement|Event|unknown|never|void|any|boolean|number|string|object)$/,Cx=/\/\*[\s\S]*?\*\/|\/\/[^\n]*|<!--[\s\S]*?-->|`(?:\\.|[^`\\])*`|"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\b\d+(?:\.\d+)?\b|\b[A-Za-z_$][\w$-]*\b|[{}[\]();,.<>:=+*/!?|&-]/g;function wx(e){return e.toLowerCase().replace(/^\./,``)}function Tx(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(bx.test(e)||xx.test(e))return`keyword`;if(Sx.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 Ex(e,t){let n=[],r=0;for(let i of e.matchAll(Cx)){let a=i[0],o=i.index??0;r<o&&n.push(e.slice(r,o));let s=Tx(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 Dx={duration:Q.duration.standard,ease:[...Q.ease.enter]},Ox={duration:Q.duration.instant,ease:[...Q.ease.standard]};function kx({value:e,reduced:t}){return(0,h.jsx)(H,{initial:!1,children:(0,h.jsx)(W.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:Ox},transition:t?{duration:0}:Dx,children:e},e)})}function Ax({name:e,reduced:t}){let n=(0,m.useRef)(null),r=(0,m.useRef)(0),i=Pf(`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=rp(i,a,{...Q.spring.morph,onComplete:()=>i.jump(`auto`)});return()=>s.stop()},[e,t,i]),(0,h.jsxs)(W.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)(kx,{value:e,reduced:t})}),(0,h.jsx)(`span`,{className:$.srOnly,children:e})]})}function jx({code:e,filename:t,language:n=`tsx`,maxLines:r}){let i=wx(n),a=U()??!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=Pf(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):rp(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)(e_,{size:16,strokeWidth:1.75,"aria-hidden":`true`}),(0,h.jsx)(Ax,{name:t??`Source code`,reduced:a}),(0,h.jsx)(`span`,{className:$.language,children:i})]}),(0,h.jsx)(yx,{value:e,label:`Copy code`})]}),(0,h.jsx)(W.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)(H,{initial:!1,mode:`popLayout`,children:(0,h.jsx)(W.code,{className:$.code,initial:!a&&{opacity:0,y:4},animate:{opacity:1,y:0},exit:a?{opacity:0,transition:{duration:0}}:{opacity:0,transition:Ox},transition:a?{duration:0}:Dx,children:Ex(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)(kx,{value:y[+!!l],reduced:a})})]}),(0,h.jsx)(`span`,{className:$.srOnly,children:y[+!!l]}),(0,h.jsx)(W.span,{className:$.chevron,"aria-hidden":`true`,initial:!1,animate:{rotate:l?180:0},transition:a?{duration:0}:Q.spring.snappy,children:(0,h.jsx)(Kg,{size:16,strokeWidth:1.75})})]})]})}var Mx={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`},Nx={duration:Q.duration.fast,ease:[...Q.ease.standard]},Px={opacity:0,y:`0.3em`,filter:`blur(${Q.blur.soft}px)`},Fx={opacity:0,y:`-0.3em`,filter:`blur(${Q.blur.subtle}px)`,transition:Nx},Ix={opacity:0,scale:.6,filter:`blur(${Q.blur.subtle}px)`},Lx={opacity:1,y:`0em`,scale:1,filter:`blur(0px)`},Rx={opacity:0,transition:{duration:Q.duration.instant}};function zx(e){let t=ju();return(0,h.jsx)(W.span,{...e,"aria-hidden":!t||e[`aria-hidden`]})}function Bx(e){if(!(0,m.isValidElement)(e))return`icon`;let t=e.type;return typeof t==`string`?t:t.displayName??t.name??`icon`}function Vx({reduce:e,morphKey:t,children:n}){let r=(0,m.useRef)(null),i=(0,m.useRef)(null),a=Pf(`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=rp(a,[d,l],{...Q.spring.smooth,onComplete:c})});return l.observe(t),()=>{l.disconnect(),s?.stop()}},[a,e]),(0,h.jsx)(W.div,{ref:r,className:Mx.frame,style:{height:a},children:(0,h.jsx)(`div`,{ref:i,className:Mx.copy,children:n})})}function Hx({title:e,description:t,action:n,icon:r,className:i,label:a}){let o=U(),s=r??(0,h.jsx)(n_,{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}:Px,animate:Lx,exit:o?Rx:Fx,transition:c};return(0,h.jsxs)(`section`,{className:[Mx.root,i].filter(Boolean).join(` `),"aria-label":a,children:[(0,h.jsx)(`div`,{className:Mx.icon,"aria-hidden":`true`,children:(0,h.jsx)(H,{mode:`popLayout`,initial:!1,children:(0,h.jsx)(zx,{className:Mx.glyph,initial:o?{opacity:0}:Ix,animate:Lx,exit:o?Rx:{...Ix,transition:Nx},transition:o?c:Q.spring.snappy,children:s},Bx(s))})}),(0,h.jsxs)(Vx,{reduce:o,morphKey:`${e}\n${t}`,children:[(0,h.jsx)(`h3`,{children:(0,h.jsx)(H,{mode:`popLayout`,initial:!1,children:(0,h.jsx)(zx,{className:Mx.line,...l,children:e},e)})}),(0,h.jsx)(`p`,{children:(0,h.jsx)(H,{mode:`popLayout`,initial:!1,children:(0,h.jsx)(zx,{className:Mx.line,...l,children:t},t)})})]}),n&&(0,h.jsx)(`div`,{className:Mx.action,children:n})]})}var Ux={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`},Wx={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)`})},Gx=e=>/^\d[\d.,/:]*%?$/.test(e);function Kx({word:e}){let t=U(),[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)(H,{initial:!1,children:i.map((e,t)=>(0,h.jsx)(W.span,{className:Ux.column,initial:{width:0,opacity:0},animate:{width:`auto`,opacity:1},exit:{width:0,opacity:0},transition:a,children:(0,h.jsx)(H,{initial:!1,mode:`popLayout`,custom:n.direction,children:(0,h.jsx)(W.span,{custom:n.direction,variants:Wx,initial:`enter`,animate:`center`,exit:`exit`,transition:a,children:e},e)})},i.length-t))})}function qx({text:e}){let t=U(),n=e.split(` `);return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`span`,{className:Ux.srOnly,children:e}),(0,h.jsx)(`span`,{className:Ux.words,"aria-hidden":`true`,children:(0,h.jsx)(H,{initial:!1,mode:`popLayout`,children:n.map((e,r)=>(0,h.jsxs)(W.span,{className:Ux.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:[Gx(e)?(0,h.jsx)(Kx,{word:e}):e,r<n.length-1?` `:null]},`${r}:${Gx(e)?`#`:e}`))})})]})}function Jx({id:e,text:t,className:n,alert:r}){return(0,h.jsx)(H,{initial:!1,children:t?(0,h.jsx)(Yx,{id:e,text:t,className:n,alert:r},`message`):null})}function Yx({id:e,text:t,className:n,alert:r}){let i=U(),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)(W.span,{className:Ux.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)(W.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)(qx,{text:t})})})}var Xx=(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:Ux.field,children:[(0,h.jsx)(`label`,{className:Ux.label,htmlFor:c,children:e}),(0,h.jsx)(`input`,{...a,id:c,ref:o,className:[Ux.input,i].filter(Boolean).join(` `),"aria-invalid":n?!0:a[`aria-invalid`],"aria-describedby":d}),(0,h.jsx)(Jx,{id:l,text:t,className:Ux.description}),(0,h.jsx)(Jx,{id:u,text:n,className:Ux.error,alert:!0})]})});Xx.displayName=`Input`;var Zx={field:`_field_1t891_1`,shell:`_shell_1t891_4`,input:`_input_1t891_10`,clearSlot:`_clearSlot_1t891_14`},Qx=(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=U(),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:Zx.field,children:[(0,h.jsx)(`label`,{htmlFor:l,children:e}),(0,h.jsxs)(`div`,{className:Zx.shell,"data-filled":t?`true`:void 0,children:[(0,h.jsx)(u_,{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:[Zx.input,a].filter(Boolean).join(` `)}),(0,h.jsx)(`span`,{className:Zx.clearSlot,children:(0,h.jsx)(H,{initial:!1,children:t?(0,h.jsx)(W.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)(m_,{width:16,height:16,"aria-hidden":`true`})},`clear`):null})})]})]})}),$x={root:`_root_1ftc5_1`,track:`_track_1ftc5_3`,button:`_button_1ftc5_8`,selection:`_selection_1ftc5_11`,label:`_label_1ftc5_12`};function eS({options:e,value:t,onValueChange:n,label:r,onOptionIntent:i,className:a}){let o=(0,m.useId)(),s=U(),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:`${$x.root} ${a??``}`,role:`group`,"aria-label":r,children:(0,h.jsx)(Bu,{id:o,children:(0,h.jsx)(W.div,{ref:c,layoutScroll:!0,className:$x.track,children:e.map((e,r)=>(0,h.jsxs)(`button`,{id:`${o}-${e.value}`,className:$x.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)(W.span,{className:$x.selection,layoutId:`selection`,layoutDependency:t,transition:s?{duration:0}:Q.spring.morph,"aria-hidden":`true`}),(0,h.jsxs)(`span`,{className:$x.label,children:[e.label,e.accessory]})]},e.value))})})})}var tS={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 nS({className:e,busy:t,reduce:n,children:r}){let i=(0,m.useRef)(null),a=(0,m.useRef)(null),o=Pf(`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=rp(o,[d,l],{...Q.spring.smooth,onComplete:c})});return l.observe(e),()=>{l.disconnect(),r?.stop()}},[o,n]),(0,h.jsx)(W.div,{ref:i,className:e,"aria-busy":t,style:{height:o},children:(0,h.jsx)(`div`,{ref:a,className:tS.frame,children:r})})}function rS({label:e=`Loading content`,lines:t=3,avatar:n=!1,className:r,children:i,loading:a=!0}){let o=U(),s=Math.min(Math.max(Math.floor(t),1),6),c=t=>(0,h.jsxs)(`div`,{className:[tS.root,t].filter(Boolean).join(` `),role:`status`,"aria-label":e,"aria-busy":`true`,children:[n&&(0,h.jsx)(`span`,{className:tS.avatar,"aria-hidden":`true`}),(0,h.jsx)(`span`,{className:tS.lines,"aria-hidden":`true`,children:Array.from({length:s},(e,t)=>(0,h.jsx)(`span`,{className:tS.line,style:{"--index":t+ +!!n}},t))})]});return i===void 0?c(r):(0,h.jsx)(nS,{className:r,busy:a,reduce:o,children:(0,h.jsx)(H,{mode:`popLayout`,initial:!1,children:a?(0,h.jsx)(W.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)(W.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 iS=Object.defineProperty,aS=(e,t)=>iS(e,`name`,{value:t,configurable:!0});function oS(e){let[t,n]=m.useState(void 0);return Uv(()=>{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}aS(oS,`useSize`);var sS=Object.defineProperty,cS=(e,t)=>sS(e,`name`,{value:t,configurable:!0}),lS=`Switch`,[uS,dS]=ev(lS),[fS,pS]=uS(lS);function mS(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]=Qv({prop:n,defaultProp:i??!1,onChange:c,caller:lS}),[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)(fS,{scope:t,...C,children:bS(d)?d(C):r})}cS(mS,`SwitchProvider`);var hS=`SwitchTrigger`,gS=m.forwardRef(cS(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:_}=pS(hS,e),v=ov(r,u),y=m.useRef(c);return m.useEffect(()=>{let e=a?i?.ownerDocument.getElementById(a):i?.form;if(e instanceof HTMLFormElement){let t=cS(()=>d(y.current),`reset`);return e.addEventListener(`reset`,t),()=>e.removeEventListener(`reset`,t)}},[i,a,d]),(0,h.jsx)(oy.button,{type:`button`,role:`switch`,"aria-checked":c,"aria-required":l,"data-state":xS(c),"data-disabled":s?``:void 0,disabled:s,value:o,...n,ref:v,onClick:Rv(t,e=>{p(),d(e=>!e),_&&g&&(f.current=e.isPropagationStopped(),f.current||e.stopPropagation())})})},`SwitchTrigger`)),_S=m.forwardRef(cS(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)(mS,{__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)(gS,{...d,ref:t,__scopeSwitch:n}),e&&(0,h.jsx)(yS,{__scopeSwitch:n})]})})},`Switch`)),vS=`SwitchBubbleInput`,yS=m.forwardRef(cS(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:_}=pS(vS,e),v=ov(r,_),y=oS(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)(oy.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:Rv(t,e=>{b.current&&e.stopPropagation()}),style:{...n.style,...y,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0,transform:`translateX(-100%)`}})},`SwitchBubbleInput`));function bS(e){return typeof e==`function`}cS(bS,`isFunction`);function xS(e){return e?`checked`:`unchecked`}cS(xS,`getState`);var SS={switch:`_switch_ktcw0_1`,track:`_track_ktcw0_4`,thumb:`_thumb_ktcw0_7`,label:`_label_ktcw0_11`},CS=18,wS=18,TS=5,ES={type:`spring`,visualDuration:.3,bounce:0},DS=(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=U(),[_,v]=(0,m.useState)(r??!1),[y,b]=(0,m.useState)(!1),x=n??_,S=Pf(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=rp(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?TS:0,te=[SS.switch,t].filter(Boolean).join(` `);return(0,h.jsxs)(_S,{...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:SS.track,children:(0,h.jsx)(W.span,{className:SS.thumb,style:{scaleX:S},initial:!1,animate:{x:x?wS-w:0,width:CS+w},transition:g?{duration:0}:{x:ES,width:Q.spring.snappy}})}),e?(0,h.jsx)(`span`,{className:SS.label,children:e}):null]})});DS.displayName=`Switch`;var OS={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`},kS={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)`})},AS=e=>/^\d[\d.,/:]*%?$/.test(e);function jS({word:e}){let t=U(),[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)(H,{initial:!1,children:i.map((e,t)=>(0,h.jsx)(W.span,{className:OS.column,initial:{width:0,opacity:0},animate:{width:`auto`,opacity:1},exit:{width:0,opacity:0},transition:a,children:(0,h.jsx)(H,{initial:!1,mode:`popLayout`,custom:n.direction,children:(0,h.jsx)(W.span,{custom:n.direction,variants:kS,initial:`enter`,animate:`center`,exit:`exit`,transition:a,children:e},e)})},i.length-t))})}function MS({text:e}){let t=U(),n=e.split(` `);return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`span`,{className:OS.srOnly,children:e}),(0,h.jsx)(`span`,{className:OS.words,"aria-hidden":`true`,children:(0,h.jsx)(H,{initial:!1,mode:`popLayout`,children:n.map((e,r)=>(0,h.jsxs)(W.span,{className:OS.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:[AS(e)?(0,h.jsx)(jS,{word:e}):e,r<n.length-1?` `:null]},`${r}:${AS(e)?`#`:e}`))})})]})}function NS({id:e,text:t,className:n,alert:r}){return(0,h.jsx)(H,{initial:!1,children:t?(0,h.jsx)(PS,{id:e,text:t,className:n,alert:r},`message`):null})}function PS({id:e,text:t,className:n,alert:r}){let i=U(),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)(W.span,{className:OS.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)(W.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)(MS,{text:t})})})}var FS=(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:OS.field,children:[(0,h.jsx)(`label`,{htmlFor:c,children:e}),(0,h.jsx)(`textarea`,{...a,id:c,ref:o,className:[OS.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)(NS,{id:l,text:t,className:OS.hint}),(0,h.jsx)(NS,{id:u,text:n,className:OS.error,alert:!0})]})}),IS=(0,m.createContext)(null);function LS(e,t){let n=(0,m.useContext)(IS);return{field:n,label:e??n?.label??t??``,hidden:e===void 0&&n===null}}function RS({label:e,hint:t,error:n,children:r,className:i}){let a=typeof t==`string`?t:void 0;return(0,h.jsxs)(`div`,{className:O_(`flex min-w-0 flex-col`,i),children:[(0,h.jsx)(IS.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 zS={primary:`primary`,glass:`secondary`,plain:`ghost`,destructive:`danger`},BS=(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)($b,{ref:s,type:a,variant:zS[e],size:t,style:l,...o,children:[n,r]})});function VS({items:e,value:t,onChange:n,className:r,ariaLabel:i}){return(0,h.jsx)(eS,{className:r,label:i,value:t,onValueChange:e=>n(e),options:e.map(e=>({value:e.value,label:e.label,accessory:e.accessory}))})}function HS({checked:e,onChange:t,disabled:n,label:r}){return(0,h.jsx)(DS,{checked:e,onCheckedChange:t,disabled:n,"aria-label":r,onClick:e=>e.stopPropagation()})}function US({title:e,footer:t,children:n,className:r}){return(0,h.jsxs)(`section`,{className:O_(`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 WS({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:O_(`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 GS={fontFamily:`var(--font-mono)`,fontSize:`12px`},KS=(0,m.forwardRef)(function({className:e,invalid:t,label:n,mono:r,style:i,...a},o){let s=LS(n,a[`aria-label`]??a.placeholder);return(0,h.jsx)(`div`,{className:O_(`min-w-0`,s.hidden&&`astra-label-hidden`,e),children:(0,h.jsx)(Xx,{ref:o,label:s.label,description:s.field?.description,error:s.field?.error,"aria-invalid":t||void 0,style:r?{...GS,...i}:i,...a})})}),qS=(0,m.forwardRef)(function({className:e,invalid:t,label:n,mono:r,style:i,...a},o){let s=LS(n,a[`aria-label`]??a.placeholder);return(0,h.jsx)(`div`,{className:O_(`min-w-0`,s.hidden&&`astra-label-hidden`,e),children:(0,h.jsx)(FS,{ref:o,label:s.label,description:s.field?.description,error:s.field?.error,"aria-invalid":t||void 0,style:r?{...GS,...i}:i,...a})})});function JS({value:e,onChange:t,className:n,placeholder:r,step:i,min:a,label:o}){return(0,h.jsx)(KS,{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 YS({value:e,onChange:t,placeholder:n,inputRef:r,className:i,clearLabel:a}){return(0,h.jsx)(`div`,{className:O_(`astra-label-hidden min-w-0`,i),children:(0,h.jsx)(Qx,{ref:r,label:n??`Search`,placeholder:n,value:e,onValueChange:t,clearLabel:a})})}var XS={neutral:`neutral`,accent:`info`,green:`success`,orange:`warning`,red:`danger`};function ZS({tone:e=`neutral`,children:t,className:n,title:r}){return(0,h.jsx)(zb,{tone:XS[e],size:`sm`,className:O_(`shrink-0`,n),title:r,children:t})}function QS({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 $S({children:e,size:t=20,className:n}){return(0,h.jsx)(`span`,{className:O_(`inline-flex shrink-0 items-center justify-center text-[var(--text-secondary)]`,n),style:{width:t,height:t},children:e})}function eC({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:O_(`min-w-0 truncate text-right selectable`,n&&`font-mono text-[11px]`),children:t})]})}function tC({children:e,maxHeight:t=320,language:n=`json`,filename:r}){return(0,h.jsx)(jx,{code:e,language:n,filename:r,maxLines:Math.max(4,Math.round(t/22))})}function nC({className:e,lines:t=2}){return(0,h.jsx)(rS,{className:e,lines:t})}function rC({icon:e,title:t,detail:n,action:r}){return(0,h.jsx)(`div`,{className:`px-6 py-12`,children:(0,h.jsx)(Hx,{icon:e,title:t,description:n??``,action:r})})}function iC({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 aC({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 oC({title:e,children:t}){return(0,h.jsx)(kb,{items:[{title:e,content:t}],defaultOpen:-1})}var sC={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`},cC={info:o_,success:Wg,warning:f_,danger:Xg},lC={duration:Q.duration.fast,ease:[...Q.ease.standard]},uC={opacity:0,y:`0.3em`,filter:`blur(${Q.blur.soft}px)`},dC={opacity:0,y:`-0.3em`,filter:`blur(${Q.blur.subtle}px)`,transition:lC},fC={opacity:0,scale:.6,filter:`blur(${Q.blur.subtle}px)`},pC={opacity:1,y:`0em`,scale:1,filter:`blur(0px)`},mC={opacity:0,transition:{duration:Q.duration.instant}};function hC(e){let t=ju();return(0,h.jsx)(W.span,{...e,"aria-hidden":!t||e[`aria-hidden`]})}function gC({className:e,reduce:t,morphKey:n,children:r}){let i=(0,m.useRef)(null),a=(0,m.useRef)(null),o=Pf(`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=rp(o,[d,l],{...Q.spring.smooth,onComplete:c})});return l.observe(e),()=>{l.disconnect(),r?.stop()}},[o,t]),(0,h.jsx)(W.div,{ref:i,className:e,style:{height:o},children:(0,h.jsx)(`div`,{ref:a,className:sC.content,children:r})})}function _C({tone:e=`info`,title:t,children:n,className:r,reduce:i,onDismiss:a,animateIcon:o=!1,...s}){let c=cC[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}:uC,animate:pC,exit:i?mC:dC,transition:d};return(0,h.jsxs)(`div`,{...s,className:[sC.alert,sC[e],r].filter(Boolean).join(` `),role:e===`danger`?`alert`:`status`,children:[(0,h.jsx)(W.span,{className:sC.icon,initial:o&&!i?fC:!1,animate:pC,transition:Q.spring.snappy,children:(0,h.jsx)(H,{mode:`popLayout`,initial:!1,children:(0,h.jsx)(hC,{className:sC.glyph,initial:i?{opacity:0}:fC,animate:pC,exit:i?mC:{...fC,transition:lC},transition:i?d:Q.spring.snappy,children:(0,h.jsx)(c,{width:18,height:18,"aria-hidden":`true`})},e)})}),(0,h.jsxs)(gC,{className:sC.copy,reduce:i,morphKey:`${t}\n${u}\n${l??``}`,children:[(0,h.jsx)(`strong`,{className:sC.title,children:(0,h.jsx)(H,{mode:`popLayout`,initial:!1,children:(0,h.jsx)(hC,{className:sC.line,...f,children:t},t)})}),(0,h.jsx)(H,{mode:`popLayout`,initial:!1,children:u&&(0,h.jsx)(W.p,{className:sC.description,...f,children:l===null?n:(0,h.jsx)(H,{mode:`popLayout`,initial:!1,children:(0,h.jsx)(hC,{className:sC.line,...f,children:l},l)})},`details`)})]}),a&&(0,h.jsx)(`button`,{type:`button`,className:sC.dismiss,"aria-label":`Dismiss: ${t}`,onClick:a,children:(0,h.jsx)(m_,{width:16,height:16,strokeWidth:1.75,"aria-hidden":`true`})})]})}function vC({open:e,onDismiss:t,...n}){let r=U(),[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)(_C,{...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:lC}};return(0,h.jsx)(H,{initial:!1,onExitComplete:()=>{e===void 0&&t?.()},children:c&&(0,h.jsx)(W.div,{className:sC.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)(_C,{...n,reduce:r,onDismiss:l,animateIcon:!0})},`alert`)})}export{K_ as $,Ve as $i,rm as $n,lm as $r,Yp as $t,oy as A,H as Ai,ng as An,Mh as Ar,vg as At,z_ as B,ut as Bi,ig as Bn,Bp as Br,vh as Bt,oS as C,hp as Ci,Jm as Cn,oh as Cr,Zh as Ct,By as D,U as Di,Wp as Dn,hh as Dr,Fh as Dt,Q as E,rp as Ei,sg as En,tm as Er,Lm as Et,wv as F,wa as Fi,qh as Fn,bm as Fr,Pp as Ft,N_ as G,ot as Gi,Gp as Gn,Dg as Gr,qm as Gt,G_ as H,D as Hi,Wm as Hn,Ph as Hr,mh as Ht,lv as I,xa as Ii,Yh as In,nm as Ir,rh as It,F_ as J,rt as Ji,jm as Jn,Sg as Jr,qp as Jt,R_ as K,at as Ki,Dm as Kn,Eg as Kr,$m as Kt,dv as L,Mr as Li,Jh as Ln,gm as Lr,gh as Lt,Qv as M,Au as Mi,og as Mn,Bm as Mr,bg as Mt,Uv as N,Su as Ni,Lh as Nn,em as Nr,xm as Nt,xy as O,Pf as Oi,Up as On,$h as Or,Bh as Ot,Rv as P,So as Pi,Rh as Pn,$p as Pr,Ep as Pt,M_ as Q,qe as Qi,Sm as Qn,Om as Qr,Cg as Qt,ov as R,fr as Ri,eg as Rn,hg as Rr,ph as Rt,LS as S,l as Sa,fp as Si,Gm as Sn,ah as Sr,Xh as St,kb as T,W as Ti,Op as Tn,kp as Tr,Xm as Tt,V_ as U,E as Ui,Gh as Un,kg as Ur,nh as Ut,H_ as V,lt as Vi,Ih as Vn,xh as Vr,bh as Vt,I_ as W,it as Wi,sh as Wn,Og as Wr,eh as Wt,P_ as X,et as Xi,im as Xn,Jp as Xr,Ch as Xt,L_ as Y,nt as Yi,Am as Yn,Np as Yr,cm as Yt,j_ as Z,Ze as Zi,Mm as Zn,Vh as Zr,dg as Zt,VS as _,_ as _a,gp as _i,cg as _n,Dh as _r,Wg as _t,aC as a,ee as aa,wh as ai,pg as an,Hh as ar,C_ as at,qS as b,o as ba,mp as bi,Kh as bn,jp as br,wg as bt,rC as c,re as ca,Zp as ci,_m as cn,dh as cr,m_ as ct,KS as d,oe as da,lg as di,mm as dn,Oh as dr,c_ as dt,Le as ea,Rm as ei,Qp as en,fm as er,q_ as et,eC as f,ce as fa,vp as fi,uh as fn,Qm as fr,i_ as ft,iC as g,v as ga,op as gi,Ym as gn,fh as gr,Kg as gt,YS as h,_e as ha,q as hi,Km as hn,mg as hr,Jg as ht,tC as i,Ce as ia,Vm as ii,Eh as in,ym as ir,O_ as it,sy as j,ju as ji,ag as jn,tg as jr,yg as jt,dy as k,Bu as ki,Uh as kn,Um as kr,wm as kt,RS as l,ne as la,Tp as li,ch as ln,kh as lr,f_ as lt,WS as m,le as ma,Sp as mi,Zm as mn,Th as mr,Xg as mt,ZS as n,De as na,Ap as ni,Hm as nn,_g as nr,Y_ as nt,oC as o,ae as oa,Rp as oi,zp as on,Wh as or,w_ as ot,JS as p,T as pa,G as pi,wp as pn,Xp as pr,Qg as pt,B_ as q,tt as qi,km as qn,Lp as qr,xg as qt,BS as r,we as ra,Vp as ri,Em as rn,Pm as rr,J_ as rt,QS as s,ie as sa,fg as si,lh as sn,zm as sr,T_ as st,vC as t,Oe as ta,Tm as ti,dm as tn,th as tr,X_ as tt,US as u,C as ua,gg as ui,Fm as un,Ah as ur,u_ as ut,nC as v,p as va,sp as vi,sm as vn,hm as vr,Y as vt,yx as w,ap as wi,Dp as wn,um as wr,vm as wt,$S as x,s as xa,_p as xi,Mp as xn,Fp as xr,J as xt,HS as y,d as ya,pp as yi,om as yn,yh as yr,Tg as yt,ev as z,I as zi,rg as zn,Nh as zr,Hp as zt};