const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-F5Ibg_-9.js","assets/vendor-C-P32XZn.js","assets/mcpApi-BiBR_yTV.js","assets/tauri-ByKaj2Gc.js","assets/toast-BwNYBjaq.js","assets/accountProvider-JENuyQSM.js","assets/card-Bhhv-ELS.js","assets/badge-Cp5uAgTs.js","assets/icons-DX4FvdP1.js","assets/i18n-7HYbuL-M.js","assets/index-Db3B5gxw.js","assets/groupTag-CB4VQJ4o.js","assets/checkbox-BjqOKrmZ.js","assets/index-BcWGBViJ.js","assets/tabs-DBGvr14W.js","assets/index-DXxjo5Tn.js","assets/input-CEhDp3sA.js","assets/label-a0F10LQ2.js","assets/AgentConfig-CvPUX6ms.js","assets/textarea-CAksDpcN.js","assets/index-Dh0crZYL.js","assets/SectionCard-Bcq3xCTJ.js","assets/popover-uttIT_WT.js","assets/index-BSvzcSzd.js","assets/index-DFcPySfm.js","assets/index-DPpHSRmx.js","assets/index-C7R6hzZx.js","assets/AuthCallback-T9egDqES.js"])))=>i.map(i=>d[i]); import{r as e,a as t,R as o,b as n,c as a}from"./vendor-C-P32XZn.js";import{i as s,r as i,l as r,g as l,o as c,c as d}from"./tauri-ByKaj2Gc.js";import{X as u,I as g,a as m,C as p,A as f,b as y,c as h,d as w,e as v,S as b,f as k,R as x,F as C,D as S,g as A,H as P,K as T,L as D,h as E,M as I,N as M,i as R,P as L,j as F,k as N,l as j,m as O,U as _,n as U,o as K,G as H,E as B,p as W,q as G}from"./icons-DX4FvdP1.js";import{u as q,i as z,a as V,I as Q}from"./i18n-7HYbuL-M.js";!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))t(e);new MutationObserver(e=>{for(const o of e)if("childList"===o.type)for(const e of o.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&t(e)}).observe(document,{childList:!0,subtree:!0})}function t(e){if(e.ep)return;e.ep=!0;const t=function(e){const t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?t.credentials="include":"anonymous"===e.crossOrigin?t.credentials="omit":t.credentials="same-origin",t}(e);fetch(e.href,t)}}();const $={},J=function(e,t,o){let n=Promise.resolve();if(t&&t.length>0){document.getElementsByTagName("link");const e=document.querySelector("meta[property=csp-nonce]"),o=(null==e?void 0:e.nonce)||(null==e?void 0:e.getAttribute("nonce"));n=Promise.allSettled(t.map(e=>{if((e=function(e){return"/"+e}(e))in $)return;$[e]=!0;const t=e.endsWith(".css"),n=t?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${n}`))return;const a=document.createElement("link");return a.rel=t?"stylesheet":"modulepreload",t||(a.as="script"),a.crossOrigin="",a.href=e,o&&a.setAttribute("nonce",o),document.head.appendChild(a),t?new Promise((t,o)=>{a.addEventListener("load",t),a.addEventListener("error",()=>o(new Error(`Unable to preload CSS for ${e}`)))}):void 0}))}function a(e){const t=new Event("vite:preloadError",{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return n.then(t=>{for(const e of t||[])"rejected"===e.status&&a(e.reason);return e().catch(a)})};var Y={exports:{}},X={},Z=e,ee=Symbol.for("react.element"),te=Symbol.for("react.fragment"),oe=Object.prototype.hasOwnProperty,ne=Z.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,ae={key:!0,ref:!0,__self:!0,__source:!0};function se(e,t,o){var n,a={},s=null,i=null;for(n in void 0!==o&&(s=""+o),void 0!==t.key&&(s=""+t.key),void 0!==t.ref&&(i=t.ref),t)oe.call(t,n)&&!ae.hasOwnProperty(n)&&(a[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps)void 0===a[n]&&(a[n]=t[n]);return{$$typeof:ee,type:e,key:s,ref:i,props:a,_owner:ne.current}}X.Fragment=te,X.jsx=se,X.jsxs=se,Y.exports=X;var ie=Y.exports,re={},le=t;function ce(){return s("check_update")}function de(){return s("show_main_window")}function ue(){return s("check_cli_installation")}function ge(){return s("get_kiro_cli_default_path")}function me(e){return s("read_cli_db_snapshot",{dbPath:e})}function pe(){return s("get_accounts")}function fe(e){return s("get_usage_limits",{id:e})}function ye(e){return s("refresh_token",{id:e})}function he(e){return s("sync_account",{id:e})}function we(e){return s("update_account",{params:e})}function ve(e){return s("delete_account",{id:e})}function be(e,t=!0){return s("delete_account_remote",{id:e,deleteLocal:t})}function ke(e){return s("delete_accounts",{ids:e})}function xe(e,t){return s("set_overage_status",{id:e,enabled:t})}function Ce(e,t=!1){return s("list_available_models",{id:e,forceRefresh:t})}function Se(){return s("quick_switch_next")}function Ae(e){return s("switch_kiro_account",{params:e})}function Pe(){return s("logout_kiro_account")}function Te(e,t){return s("switch_to_cli_account",{accountId:e,dbPath:t})}function De(e){return s("logout_cli_account",{dbPath:e})}function Ee(e){return s("export_accounts",{ids:e})}function Ie(e){return s("test_account_proxy",{proxyConfig:e})}function Me(e){return s("verify_account",{params:e})}re.createRoot=le.createRoot,re.hydrateRoot=le.hydrateRoot;let Re,Le,Fe,Ne={data:""},je=/(?:([\u0080-\uFFFF\w-%@]+) *:? *([^{;]+?);|([^;}{]*?) *{)|(}\s*)/g,Oe=/\/\*[^]*?\*\/| +/g,_e=/\n+/g,Ue=(e,t)=>{let o="",n="",a="";for(let s in e){let i=e[s];"@"==s[0]?"i"==s[1]?o=s+" "+i+";":n+="f"==s[1]?Ue(i,s):s+"{"+Ue(i,"k"==s[1]?"":t)+"}":"object"==typeof i?n+=Ue(i,t?t.replace(/([^,])+/g,e=>s.replace(/([^,]*:\S+\([^)]*\))|([^,])+/g,t=>/&/.test(t)?t.replace(/&/g,e):e?e+" "+t:t)):s):null!=i&&(s=/^--/.test(s)?s:s.replace(/[A-Z]/g,"-$&").toLowerCase(),a+=Ue.p?Ue.p(s,i):s+":"+i+";")}return o+(t&&a?t+"{"+a+"}":a)+n},Ke={},He=e=>{if("object"==typeof e){let t="";for(let o in e)t+=o+He(e[o]);return t}return e};function Be(e){let t=this||{},o=e.call?e(t.p):e;return((e,t,o,n,a)=>{let s=He(e),i=Ke[s]||(Ke[s]=(e=>{let t=0,o=11;for(;t>>0;return"go"+o})(s));if(!Ke[i]){let t=s!==e?e:(e=>{let t,o,n=[{}];for(;t=je.exec(e.replace(Oe,""));)t[4]?n.shift():t[3]?(o=t[3].replace(_e," ").trim(),n.unshift(n[0][o]=n[0][o]||{})):n[0][t[1]]=t[2].replace(_e," ").trim();return n[0]})(e);Ke[i]=Ue(a?{["@keyframes "+i]:t}:t,o?"":"."+i)}let r=o&&Ke.g?Ke.g:null;return o&&(Ke.g=Ke[i]),l=Ke[i],c=t,d=n,(u=r)?c.data=c.data.replace(u,l):-1===c.data.indexOf(l)&&(c.data=d?l+c.data:c.data+l),i;var l,c,d,u})(o.unshift?o.raw?((e,t,o)=>e.reduce((e,n,a)=>{let s=t[a];if(s&&s.call){let e=s(o),t=e&&e.props&&e.props.className||/^go/.test(e)&&e;s=t?"."+t:e&&"object"==typeof e?e.props?"":Ue(e,""):!1===e?"":e}return e+n+(null==s?"":s)},""))(o,[].slice.call(arguments,1),t.p):o.reduce((e,o)=>Object.assign(e,o&&o.call?o(t.p):o),{}):o,(e=>{if("object"==typeof window){let t=(e?e.querySelector("#_goober"):window._goober)||Object.assign(document.createElement("style"),{innerHTML:" ",id:"_goober"});return t.nonce=window.__nonce__,t.parentNode||(e||document.head).appendChild(t),t.firstChild}return e||Ne})(t.target),t.g,t.o,t.k)}Be.bind({g:1});let We=Be.bind({k:1});function Ge(e,t){let o=this||{};return function(){let t=arguments;return function n(a,s){let i=Object.assign({},a),r=i.className||n.className;o.p=Object.assign({theme:Le&&Le()},i),o.o=/ *go\d+/.test(r),i.className=Be.apply(o,t)+(r?" "+r:"");let l=e;return e[0]&&(l=i.as||e,delete i.as),Fe&&l[0]&&Fe(i),Re(l,i)}}}var qe=(e,t)=>(e=>"function"==typeof e)(e)?e(t):e,ze=(()=>{let e=0;return()=>(++e).toString()})(),Ve=(()=>{let e;return()=>{if(void 0===e&&typeof window<"u"){let t=matchMedia("(prefers-reduced-motion: reduce)");e=!t||t.matches}return e}})(),Qe="default",$e=(e,t)=>{let{toastLimit:o}=e.settings;switch(t.type){case 0:return{...e,toasts:[t.toast,...e.toasts].slice(0,o)};case 1:return{...e,toasts:e.toasts.map(e=>e.id===t.toast.id?{...e,...t.toast}:e)};case 2:let{toast:n}=t;return $e(e,{type:e.toasts.find(e=>e.id===n.id)?1:0,toast:n});case 3:let{toastId:a}=t;return{...e,toasts:e.toasts.map(e=>e.id===a||void 0===a?{...e,dismissed:!0,visible:!1}:e)};case 4:return void 0===t.toastId?{...e,toasts:[]}:{...e,toasts:e.toasts.filter(e=>e.id!==t.toastId)};case 5:return{...e,pausedAt:t.time};case 6:let s=t.time-(e.pausedAt||0);return{...e,pausedAt:void 0,toasts:e.toasts.map(e=>({...e,pauseDuration:e.pauseDuration+s}))}}},Je=[],Ye={toasts:[],pausedAt:void 0,settings:{toastLimit:20}},Xe={},Ze=(e,t=Qe)=>{Xe[t]=$e(Xe[t]||Ye,e),Je.forEach(([e,o])=>{e===t&&o(Xe[t])})},et=e=>Object.keys(Xe).forEach(t=>Ze(e,t)),tt=(e=Qe)=>t=>{Ze(t,e)},ot={blank:4e3,error:4e3,success:2e3,loading:1/0,custom:4e3},nt=e=>(t,o)=>{let n=((e,t="blank",o)=>({createdAt:Date.now(),visible:!0,dismissed:!1,type:t,ariaProps:{role:"status","aria-live":"polite"},message:e,pauseDuration:0,...o,id:(null==o?void 0:o.id)||ze()}))(t,e,o);return tt(n.toasterId||(e=>Object.keys(Xe).find(t=>Xe[t].toasts.some(t=>t.id===e)))(n.id))({type:2,toast:n}),n.id},at=(e,t)=>nt("blank")(e,t);at.error=nt("error"),at.success=nt("success"),at.loading=nt("loading"),at.custom=nt("custom"),at.dismiss=(e,t)=>{let o={type:3,toastId:e};t?tt(t)(o):et(o)},at.dismissAll=e=>at.dismiss(void 0,e),at.remove=(e,t)=>{let o={type:4,toastId:e};t?tt(t)(o):et(o)},at.removeAll=e=>at.remove(void 0,e),at.promise=(e,t,o)=>{let n=at.loading(t.loading,{...o,...null==o?void 0:o.loading});return"function"==typeof e&&(e=e()),e.then(e=>{let a=t.success?qe(t.success,e):void 0;return a?at.success(a,{id:n,...o,...null==o?void 0:o.success}):at.dismiss(n),e}).catch(e=>{let a=t.error?qe(t.error,e):void 0;a?at.error(a,{id:n,...o,...null==o?void 0:o.error}):at.dismiss(n)}),e};var st,it,rt,lt,ct=(t,o="default")=>{let{toasts:n,pausedAt:a}=((t={},o=Qe)=>{let[n,a]=e.useState(Xe[o]||Ye),s=e.useRef(Xe[o]);e.useEffect(()=>(s.current!==Xe[o]&&a(Xe[o]),Je.push([o,a]),()=>{let e=Je.findIndex(([e])=>e===o);e>-1&&Je.splice(e,1)}),[o]);let i=n.toasts.map(e=>{var o,n,a;return{...t,...t[e.type],...e,removeDelay:e.removeDelay||(null==(o=t[e.type])?void 0:o.removeDelay)||(null==t?void 0:t.removeDelay),duration:e.duration||(null==(n=t[e.type])?void 0:n.duration)||(null==t?void 0:t.duration)||ot[e.type],style:{...t.style,...null==(a=t[e.type])?void 0:a.style,...e.style}}});return{...n,toasts:i}})(t,o),s=e.useRef(new Map).current,i=e.useCallback((e,t=1e3)=>{if(s.has(e))return;let o=setTimeout(()=>{s.delete(e),r({type:4,toastId:e})},t);s.set(e,o)},[]);e.useEffect(()=>{if(a)return;let e=Date.now(),t=n.map(t=>{if(t.duration===1/0)return;let n=(t.duration||0)+t.pauseDuration-(e-t.createdAt);if(!(n<0))return setTimeout(()=>at.dismiss(t.id,o),n);t.visible&&at.dismiss(t.id)});return()=>{t.forEach(e=>e&&clearTimeout(e))}},[n,a,o]);let r=e.useCallback(tt(o),[o]),l=e.useCallback(()=>{r({type:5,time:Date.now()})},[r]),c=e.useCallback((e,t)=>{r({type:1,toast:{id:e,height:t}})},[r]),d=e.useCallback(()=>{a&&r({type:6,time:Date.now()})},[a,r]),u=e.useCallback((e,t)=>{let{reverseOrder:o=!1,gutter:a=8,defaultPosition:s}=t||{},i=n.filter(t=>(t.position||s)===(e.position||s)&&t.height),r=i.findIndex(t=>t.id===e.id),l=i.filter((e,t)=>te.visible).slice(...o?[l+1]:[0,l]).reduce((e,t)=>e+(t.height||0)+a,0)},[n]);return e.useEffect(()=>{n.forEach(e=>{if(e.dismissed)i(e.id,e.removeDelay);else{let t=s.get(e.id);t&&(clearTimeout(t),s.delete(e.id))}})},[n,i]),{toasts:n,handlers:{updateHeight:c,startPause:l,endPause:d,calculateOffset:u}}},dt=We` from { transform: scale(0) rotate(45deg); opacity: 0; } to { transform: scale(1) rotate(45deg); opacity: 1; }`,ut=We` from { transform: scale(0); opacity: 0; } to { transform: scale(1); opacity: 1; }`,gt=We` from { transform: scale(0) rotate(90deg); opacity: 0; } to { transform: scale(1) rotate(90deg); opacity: 1; }`,mt=Ge("div")` width: 20px; opacity: 0; height: 20px; border-radius: 10px; background: ${e=>e.primary||"#ff4b4b"}; position: relative; transform: rotate(45deg); animation: ${dt} 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards; animation-delay: 100ms; &:after, &:before { content: ''; animation: ${ut} 0.15s ease-out forwards; animation-delay: 150ms; position: absolute; border-radius: 3px; opacity: 0; background: ${e=>e.secondary||"#fff"}; bottom: 9px; left: 4px; height: 2px; width: 12px; } &:before { animation: ${gt} 0.15s ease-out forwards; animation-delay: 180ms; transform: rotate(90deg); } `,pt=We` from { transform: rotate(0deg); } to { transform: rotate(360deg); } `,ft=Ge("div")` width: 12px; height: 12px; box-sizing: border-box; border: 2px solid; border-radius: 100%; border-color: ${e=>e.secondary||"#e0e0e0"}; border-right-color: ${e=>e.primary||"#616161"}; animation: ${pt} 1s linear infinite; `,yt=We` from { transform: scale(0) rotate(45deg); opacity: 0; } to { transform: scale(1) rotate(45deg); opacity: 1; }`,ht=We` 0% { height: 0; width: 0; opacity: 0; } 40% { height: 0; width: 6px; opacity: 1; } 100% { opacity: 1; height: 10px; }`,wt=Ge("div")` width: 20px; opacity: 0; height: 20px; border-radius: 10px; background: ${e=>e.primary||"#61d345"}; position: relative; transform: rotate(45deg); animation: ${yt} 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards; animation-delay: 100ms; &:after { content: ''; box-sizing: border-box; animation: ${ht} 0.2s ease-out forwards; opacity: 0; animation-delay: 200ms; position: absolute; border-right: 2px solid; border-bottom: 2px solid; border-color: ${e=>e.secondary||"#fff"}; bottom: 6px; left: 6px; height: 10px; width: 6px; } `,vt=Ge("div")` position: absolute; `,bt=Ge("div")` position: relative; display: flex; justify-content: center; align-items: center; min-width: 20px; min-height: 20px; `,kt=We` from { transform: scale(0.6); opacity: 0.4; } to { transform: scale(1); opacity: 1; }`,xt=Ge("div")` position: relative; transform: scale(0.6); opacity: 0.4; min-width: 20px; animation: ${kt} 0.3s 0.12s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards; `,Ct=({toast:t})=>{let{icon:o,type:n,iconTheme:a}=t;return void 0!==o?"string"==typeof o?e.createElement(xt,null,o):o:"blank"===n?null:e.createElement(bt,null,e.createElement(ft,{...a}),"loading"!==n&&e.createElement(vt,null,"error"===n?e.createElement(mt,{...a}):e.createElement(wt,{...a})))},St=e=>`\n0% {transform: translate3d(0,${-200*e}%,0) scale(.6); opacity:.5;}\n100% {transform: translate3d(0,0,0) scale(1); opacity:1;}\n`,At=e=>`\n0% {transform: translate3d(0,0,-1px) scale(1); opacity:1;}\n100% {transform: translate3d(0,${-150*e}%,-1px) scale(.6); opacity:0;}\n`,Pt=Ge("div")` display: flex; align-items: center; background: #fff; color: #363636; line-height: 1.3; will-change: transform; box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1), 0 3px 3px rgba(0, 0, 0, 0.05); max-width: 350px; pointer-events: auto; padding: 8px 10px; border-radius: 8px; `,Tt=Ge("div")` display: flex; justify-content: center; margin: 4px 10px; color: inherit; flex: 1 1 auto; white-space: pre-line; `,Dt=e.memo(({toast:t,position:o,style:n,children:a})=>{let s=t.height?((e,t)=>{let o=e.includes("top")?1:-1,[n,a]=Ve()?["0%{opacity:0;} 100%{opacity:1;}","0%{opacity:1;} 100%{opacity:0;}"]:[St(o),At(o)];return{animation:t?`${We(n)} 0.35s cubic-bezier(.21,1.02,.73,1) forwards`:`${We(a)} 0.4s forwards cubic-bezier(.06,.71,.55,1)`}})(t.position||o||"top-center",t.visible):{opacity:0},i=e.createElement(Ct,{toast:t}),r=e.createElement(Tt,{...t.ariaProps},qe(t.message,t));return e.createElement(Pt,{className:t.className,style:{...s,...n,...t.style}},"function"==typeof a?a({icon:i,message:r}):e.createElement(e.Fragment,null,i,r))});st=e.createElement,Ue.p=it,Re=st,Le=rt,Fe=lt;var Et=({id:t,className:o,style:n,onHeightUpdate:a,children:s})=>{let i=e.useCallback(e=>{if(e){let o=()=>{let o=e.getBoundingClientRect().height;a(t,o)};o(),new MutationObserver(o).observe(e,{subtree:!0,childList:!0,characterData:!0})}},[t,a]);return e.createElement("div",{ref:i,className:o,style:n},s)},It=Be` z-index: 9999; > * { pointer-events: auto; } `,Mt=({reverseOrder:t,position:o="top-center",toastOptions:n,gutter:a,children:s,toasterId:i,containerStyle:r,containerClassName:l})=>{let{toasts:c,handlers:d}=ct(n,i);return e.createElement("div",{"data-rht-toaster":i||"",style:{position:"fixed",zIndex:9999,top:16,left:16,right:16,bottom:16,pointerEvents:"none",...r},className:l,onMouseEnter:d.startPause,onMouseLeave:d.endPause},c.map(n=>{let i=n.position||o,r=((e,t)=>{let o=e.includes("top"),n=o?{top:0}:{bottom:0},a=e.includes("center")?{justifyContent:"center"}:e.includes("right")?{justifyContent:"flex-end"}:{};return{left:0,right:0,display:"flex",position:"absolute",transition:Ve()?void 0:"all 230ms cubic-bezier(.21,1.02,.73,1)",transform:`translateY(${t*(o?1:-1)}px)`,...n,...a}})(i,d.calculateOffset(n,{reverseOrder:t,gutter:a,defaultPosition:o}));return e.createElement(Et,{id:n.id,key:n.id,onHeightUpdate:d.updateHeight,className:n.visible?It:"",style:r},"custom"===n.type?qe(n.message,n):s?s(n):e.createElement(Dt,{toast:n,position:i}))}))},Rt=at;function Lt(){return s("get_kiro_local_token")}function Ft(){return s("generate_machine_guid")}function Nt(e){return s("set_custom_machine_guid",{newGuid:e})}function jt(){return s("get_system_machine_guid")}function Ot(){return s("reset_system_machine_guid")}function _t(){return s("restart_as_admin")}const Ut="agentRecentProjects",Kt="agentProjectDir",Ht=e.createContext({projectDir:null,recentDirs:[],setProjectDir:()=>{}});function Bt({children:t}){const[o,n]=e.useState(()=>localStorage.getItem(Kt)),[a,s]=e.useState(()=>{try{return JSON.parse(localStorage.getItem(Ut)||"[]")}catch{return[]}}),i=e.useCallback(e=>{n(e),e?(localStorage.setItem(Kt,e),s(t=>{const o=[e,...t.filter(t=>t!==e)].slice(0,5);return localStorage.setItem(Ut,JSON.stringify(o)),o})):localStorage.removeItem(Kt)},[]);return ie.jsx(Ht.Provider,{value:{projectDir:o,recentDirs:a,setProjectDir:i},children:t})}function Wt(){return e.useContext(Ht)}function Gt(e){var t,o,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t"boolean"==typeof e?`${e}`:0===e?"0":e,Vt=qt,Qt=(e,t)=>o=>{var n;if(null==(null==t?void 0:t.variants))return Vt(e,null==o?void 0:o.class,null==o?void 0:o.className);const{variants:a,defaultVariants:s}=t,i=Object.keys(a).map(e=>{const t=null==o?void 0:o[e],n=null==s?void 0:s[e];if(null===t)return null;const i=zt(t)||zt(n);return a[e][i]}),r=o&&Object.entries(o).reduce((e,t)=>{let[o,n]=t;return void 0===n||(e[o]=n),e},{}),l=null==t||null===(n=t.compoundVariants)||void 0===n?void 0:n.reduce((e,t)=>{let{class:o,className:n,...a}=t;return Object.entries(a).every(e=>{let[t,o]=e;return Array.isArray(o)?o.includes({...s,...r}[t]):{...s,...r}[t]===o})?[...e,o,n]:e},[]);return Vt(e,i,l,null==o?void 0:o.class,null==o?void 0:o.className)};function $t(e,t){if("function"==typeof e)return e(t);null!=e&&(e.current=t)}function Jt(...e){return t=>{let o=!1;const n=e.map(e=>{const n=$t(e,t);return o||"function"!=typeof n||(o=!0),n});if(o)return()=>{for(let t=0;t{let{children:a,...s}=t;eo(a)&&"function"==typeof Zt&&(a=Zt(a._payload));const i=e.Children.toArray(a),r=i.find(so);if(r){const t=r.props.children,a=i.map(o=>o===r?e.Children.count(t)>1?e.Children.only(null):e.isValidElement(t)?t.props.children:null:o);return ie.jsx(o,{...s,ref:n,children:e.isValidElement(t)?e.cloneElement(t,void 0,a):null})}return ie.jsx(o,{...s,ref:n,children:a})});return n.displayName=`${t}.Slot`,n}var oo=to("Slot");function no(t){const o=e.forwardRef((t,o)=>{let{children:n,...a}=t;if(eo(n)&&"function"==typeof Zt&&(n=Zt(n._payload)),e.isValidElement(n)){const t=function(e){var t,o;let n=null==(t=Object.getOwnPropertyDescriptor(e.props,"ref"))?void 0:t.get,a=n&&"isReactWarning"in n&&n.isReactWarning;if(a)return e.ref;if(n=null==(o=Object.getOwnPropertyDescriptor(e,"ref"))?void 0:o.get,a=n&&"isReactWarning"in n&&n.isReactWarning,a)return e.props.ref;return e.props.ref||e.ref}(n),s=function(e,t){const o={...t};for(const n in t){const a=e[n],s=t[n];/^on[A-Z]/.test(n)?a&&s?o[n]=(...e)=>{const t=s(...e);return a(...e),t}:a&&(o[n]=a):"style"===n?o[n]={...a,...s}:"className"===n&&(o[n]=[a,s].filter(Boolean).join(" "))}return{...e,...o}}(a,n.props);return n.type!==e.Fragment&&(s.ref=o?Jt(o,t):t),e.cloneElement(n,s)}return e.Children.count(n)>1?e.Children.only(null):null});return o.displayName=`${t}.SlotClone`,o}var ao=Symbol("radix.slottable");function so(t){return e.isValidElement(t)&&"function"==typeof t.type&&"__radixId"in t.type&&t.type.__radixId===ao}const io=(e=new Map,t=null,o)=>({nextPart:e,validators:t,classGroupId:o}),ro="-",lo=[],co=e=>{const t=mo(e),{conflictingClassGroups:o,conflictingClassGroupModifiers:n}=e;return{getClassGroupId:e=>{if(e.startsWith("[")&&e.endsWith("]"))return go(e);const o=e.split(ro),n=""===o[0]&&o.length>1?1:0;return uo(o,n,t)},getConflictingClassGroupIds:(e,t)=>{if(t){const t=n[e],a=o[e];return t?a?((e,t)=>{const o=new Array(e.length+t.length);for(let n=0;n{if(0===e.length-t)return o.classGroupId;const n=e[t],a=o.nextPart.get(n);if(a){const o=uo(e,t+1,a);if(o)return o}const s=o.validators;if(null===s)return;const i=0===t?e.join(ro):e.slice(t).join(ro),r=s.length;for(let l=0;l-1===e.slice(1,-1).indexOf(":")?void 0:(()=>{const t=e.slice(1,-1),o=t.indexOf(":"),n=t.slice(0,o);return n?"arbitrary.."+n:void 0})(),mo=e=>{const{theme:t,classGroups:o}=e;return po(o,t)},po=(e,t)=>{const o=io();for(const n in e){const a=e[n];fo(a,o,n,t)}return o},fo=(e,t,o,n)=>{const a=e.length;for(let s=0;s{"string"!=typeof e?"function"!=typeof e?vo(e,t,o,n):wo(e,t,o,n):ho(e,t,o)},ho=(e,t,o)=>{(""===e?t:bo(t,e)).classGroupId=o},wo=(e,t,o,n)=>{ko(e)?fo(e(n),t,o,n):(null===t.validators&&(t.validators=[]),t.validators.push(((e,t)=>({classGroupId:e,validator:t}))(o,e)))},vo=(e,t,o,n)=>{const a=Object.entries(e),s=a.length;for(let i=0;i{let o=e;const n=t.split(ro),a=n.length;for(let s=0;s"isThemeGetter"in e&&!0===e.isThemeGetter,xo=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,o=Object.create(null),n=Object.create(null);const a=(a,s)=>{o[a]=s,t++,t>e&&(t=0,n=o,o=Object.create(null))};return{get(e){let t=o[e];return void 0!==t?t:void 0!==(t=n[e])?(a(e,t),t):void 0},set(e,t){e in o?o[e]=t:a(e,t)}}},Co=[],So=(e,t,o,n,a)=>({modifiers:e,hasImportantModifier:t,baseClassName:o,maybePostfixModifierPosition:n,isExternal:a}),Ao=e=>{const{prefix:t,experimentalParseClassName:o}=e;let n=e=>{const t=[];let o,n=0,a=0,s=0;const i=e.length;for(let d=0;ds?o-s:void 0)};if(t){const e=t+":",o=n;n=t=>t.startsWith(e)?o(t.slice(e.length)):So(Co,!1,t,void 0,!0)}if(o){const e=n;n=t=>o({className:t,parseClassName:e})}return n},Po=e=>{const t=new Map;return e.orderSensitiveModifiers.forEach((e,o)=>{t.set(e,1e6+o)}),e=>{const o=[];let n=[];for(let a=0;a0&&(n.sort(),o.push(...n),n=[]),o.push(s)):n.push(s)}return n.length>0&&(n.sort(),o.push(...n)),o}},To=/\s+/,Do=e=>{if("string"==typeof e)return e;let t,o="";for(let n=0;n{let o,n,a,s;const i=e=>{const t=n(e);if(t)return t;const s=((e,t)=>{const{parseClassName:o,getClassGroupId:n,getConflictingClassGroupIds:a,sortModifiers:s}=t,i=[],r=e.trim().split(To);let l="";for(let c=r.length-1;c>=0;c-=1){const e=r[c],{isExternal:t,modifiers:d,hasImportantModifier:u,baseClassName:g,maybePostfixModifierPosition:m}=o(e);if(t){l=e+(l.length>0?" "+l:l);continue}let p=!!m,f=n(p?g.substring(0,m):g);if(!f){if(!p){l=e+(l.length>0?" "+l:l);continue}if(f=n(g),!f){l=e+(l.length>0?" "+l:l);continue}p=!1}const y=0===d.length?"":1===d.length?d[0]:s(d).join(":"),h=u?y+"!":y,w=h+f;if(i.indexOf(w)>-1)continue;i.push(w);const v=a(f,p);for(let o=0;o0?" "+l:l)}return l})(e,o);return a(e,s),s};return s=r=>{const l=t.reduce((e,t)=>t(e),e());return o=(e=>({cache:xo(e.cacheSize),parseClassName:Ao(e),sortModifiers:Po(e),...co(e)}))(l),n=o.cache.get,a=o.cache.set,s=i,i(r)},(...e)=>s(((...e)=>{let t,o,n=0,a="";for(;n{const t=t=>t[e]||Io;return t.isThemeGetter=!0,t},Ro=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Lo=/^\((?:(\w[\w-]*):)?(.+)\)$/i,Fo=/^\d+\/\d+$/,No=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,jo=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,Oo=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,_o=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Uo=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Ko=e=>Fo.test(e),Ho=e=>!!e&&!Number.isNaN(Number(e)),Bo=e=>!!e&&Number.isInteger(Number(e)),Wo=e=>e.endsWith("%")&&Ho(e.slice(0,-1)),Go=e=>No.test(e),qo=()=>!0,zo=e=>jo.test(e)&&!Oo.test(e),Vo=()=>!1,Qo=e=>_o.test(e),$o=e=>Uo.test(e),Jo=e=>!Xo(e)&&!an(e),Yo=e=>gn(e,yn,Vo),Xo=e=>Ro.test(e),Zo=e=>gn(e,hn,zo),en=e=>gn(e,wn,Ho),tn=e=>gn(e,pn,Vo),on=e=>gn(e,fn,$o),nn=e=>gn(e,bn,Qo),an=e=>Lo.test(e),sn=e=>mn(e,hn),rn=e=>mn(e,vn),ln=e=>mn(e,pn),cn=e=>mn(e,yn),dn=e=>mn(e,fn),un=e=>mn(e,bn,!0),gn=(e,t,o)=>{const n=Ro.exec(e);return!!n&&(n[1]?t(n[1]):o(n[2]))},mn=(e,t,o=!1)=>{const n=Lo.exec(e);return!!n&&(n[1]?t(n[1]):o)},pn=e=>"position"===e||"percentage"===e,fn=e=>"image"===e||"url"===e,yn=e=>"length"===e||"size"===e||"bg-size"===e,hn=e=>"length"===e,wn=e=>"number"===e,vn=e=>"family-name"===e,bn=e=>"shadow"===e,kn=Eo(()=>{const e=Mo("color"),t=Mo("font"),o=Mo("text"),n=Mo("font-weight"),a=Mo("tracking"),s=Mo("leading"),i=Mo("breakpoint"),r=Mo("container"),l=Mo("spacing"),c=Mo("radius"),d=Mo("shadow"),u=Mo("inset-shadow"),g=Mo("text-shadow"),m=Mo("drop-shadow"),p=Mo("blur"),f=Mo("perspective"),y=Mo("aspect"),h=Mo("ease"),w=Mo("animate"),v=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom",an,Xo],b=()=>[an,Xo,l],k=()=>[Ko,"full","auto",...b()],x=()=>[Bo,"none","subgrid",an,Xo],C=()=>["auto",{span:["full",Bo,an,Xo]},Bo,an,Xo],S=()=>[Bo,"auto",an,Xo],A=()=>["auto","min","max","fr",an,Xo],P=()=>["auto",...b()],T=()=>[Ko,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...b()],D=()=>[e,an,Xo],E=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom",ln,tn,{position:[an,Xo]}],I=()=>["auto","cover","contain",cn,Yo,{size:[an,Xo]}],M=()=>[Wo,sn,Zo],R=()=>["","none","full",c,an,Xo],L=()=>["",Ho,sn,Zo],F=()=>[Ho,Wo,ln,tn],N=()=>["","none",p,an,Xo],j=()=>["none",Ho,an,Xo],O=()=>["none",Ho,an,Xo],_=()=>[Ho,an,Xo],U=()=>[Ko,"full",...b()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[Go],breakpoint:[Go],color:[qo],container:[Go],"drop-shadow":[Go],ease:["in","out","in-out"],font:[Jo],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[Go],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[Go],shadow:[Go],spacing:["px",Ho],text:[Go],"text-shadow":[Go],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",Ko,Xo,an,y]}],container:["container"],columns:[{columns:[Ho,Xo,an,r]}],"break-after":[{"break-after":["auto","avoid","all","avoid-page","page","left","right","column"]}],"break-before":[{"break-before":["auto","avoid","all","avoid-page","page","left","right","column"]}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:v()}],overflow:[{overflow:["auto","hidden","clip","visible","scroll"]}],"overflow-x":[{"overflow-x":["auto","hidden","clip","visible","scroll"]}],"overflow-y":[{"overflow-y":["auto","hidden","clip","visible","scroll"]}],overscroll:[{overscroll:["auto","contain","none"]}],"overscroll-x":[{"overscroll-x":["auto","contain","none"]}],"overscroll-y":[{"overscroll-y":["auto","contain","none"]}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:k()}],"inset-x":[{"inset-x":k()}],"inset-y":[{"inset-y":k()}],start:[{start:k()}],end:[{end:k()}],top:[{top:k()}],right:[{right:k()}],bottom:[{bottom:k()}],left:[{left:k()}],visibility:["visible","invisible","collapse"],z:[{z:[Bo,"auto",an,Xo]}],basis:[{basis:[Ko,"full","auto",r,...b()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[Ho,Ko,"auto","initial","none",Xo]}],grow:[{grow:["",Ho,an,Xo]}],shrink:[{shrink:["",Ho,an,Xo]}],order:[{order:[Bo,"first","last","none",an,Xo]}],"grid-cols":[{"grid-cols":x()}],"col-start-end":[{col:C()}],"col-start":[{"col-start":S()}],"col-end":[{"col-end":S()}],"grid-rows":[{"grid-rows":x()}],"row-start-end":[{row:C()}],"row-start":[{"row-start":S()}],"row-end":[{"row-end":S()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":A()}],"auto-rows":[{"auto-rows":A()}],gap:[{gap:b()}],"gap-x":[{"gap-x":b()}],"gap-y":[{"gap-y":b()}],"justify-content":[{justify:["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe","normal"]}],"justify-items":[{"justify-items":["start","end","center","stretch","center-safe","end-safe","normal"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch","center-safe","end-safe"]}],"align-content":[{content:["normal","start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"]}],"align-items":[{items:["start","end","center","stretch","center-safe","end-safe",{baseline:["","last"]}]}],"align-self":[{self:["auto","start","end","center","stretch","center-safe","end-safe",{baseline:["","last"]}]}],"place-content":[{"place-content":["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"]}],"place-items":[{"place-items":["start","end","center","stretch","center-safe","end-safe","baseline"]}],"place-self":[{"place-self":["auto","start","end","center","stretch","center-safe","end-safe"]}],p:[{p:b()}],px:[{px:b()}],py:[{py:b()}],ps:[{ps:b()}],pe:[{pe:b()}],pt:[{pt:b()}],pr:[{pr:b()}],pb:[{pb:b()}],pl:[{pl:b()}],m:[{m:P()}],mx:[{mx:P()}],my:[{my:P()}],ms:[{ms:P()}],me:[{me:P()}],mt:[{mt:P()}],mr:[{mr:P()}],mb:[{mb:P()}],ml:[{ml:P()}],"space-x":[{"space-x":b()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":b()}],"space-y-reverse":["space-y-reverse"],size:[{size:T()}],w:[{w:[r,"screen",...T()]}],"min-w":[{"min-w":[r,"screen","none",...T()]}],"max-w":[{"max-w":[r,"screen","none","prose",{screen:[i]},...T()]}],h:[{h:["screen","lh",...T()]}],"min-h":[{"min-h":["screen","lh","none",...T()]}],"max-h":[{"max-h":["screen","lh",...T()]}],"font-size":[{text:["base",o,sn,Zo]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[n,an,en]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",Wo,Xo]}],"font-family":[{font:[rn,Xo,t]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[a,an,Xo]}],"line-clamp":[{"line-clamp":[Ho,"none",an,en]}],leading:[{leading:[s,...b()]}],"list-image":[{"list-image":["none",an,Xo]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",an,Xo]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:D()}],"text-color":[{text:D()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:["solid","dashed","dotted","double","wavy"]}],"text-decoration-thickness":[{decoration:[Ho,"from-font","auto",an,Zo]}],"text-decoration-color":[{decoration:D()}],"underline-offset":[{"underline-offset":[Ho,"auto",an,Xo]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:b()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",an,Xo]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",an,Xo]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:E()}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","space","round"]}]}],"bg-size":[{bg:I()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},Bo,an,Xo],radial:["",an,Xo],conic:[Bo,an,Xo]},dn,on]}],"bg-color":[{bg:D()}],"gradient-from-pos":[{from:M()}],"gradient-via-pos":[{via:M()}],"gradient-to-pos":[{to:M()}],"gradient-from":[{from:D()}],"gradient-via":[{via:D()}],"gradient-to":[{to:D()}],rounded:[{rounded:R()}],"rounded-s":[{"rounded-s":R()}],"rounded-e":[{"rounded-e":R()}],"rounded-t":[{"rounded-t":R()}],"rounded-r":[{"rounded-r":R()}],"rounded-b":[{"rounded-b":R()}],"rounded-l":[{"rounded-l":R()}],"rounded-ss":[{"rounded-ss":R()}],"rounded-se":[{"rounded-se":R()}],"rounded-ee":[{"rounded-ee":R()}],"rounded-es":[{"rounded-es":R()}],"rounded-tl":[{"rounded-tl":R()}],"rounded-tr":[{"rounded-tr":R()}],"rounded-br":[{"rounded-br":R()}],"rounded-bl":[{"rounded-bl":R()}],"border-w":[{border:L()}],"border-w-x":[{"border-x":L()}],"border-w-y":[{"border-y":L()}],"border-w-s":[{"border-s":L()}],"border-w-e":[{"border-e":L()}],"border-w-t":[{"border-t":L()}],"border-w-r":[{"border-r":L()}],"border-w-b":[{"border-b":L()}],"border-w-l":[{"border-l":L()}],"divide-x":[{"divide-x":L()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":L()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:["solid","dashed","dotted","double","hidden","none"]}],"divide-style":[{divide:["solid","dashed","dotted","double","hidden","none"]}],"border-color":[{border:D()}],"border-color-x":[{"border-x":D()}],"border-color-y":[{"border-y":D()}],"border-color-s":[{"border-s":D()}],"border-color-e":[{"border-e":D()}],"border-color-t":[{"border-t":D()}],"border-color-r":[{"border-r":D()}],"border-color-b":[{"border-b":D()}],"border-color-l":[{"border-l":D()}],"divide-color":[{divide:D()}],"outline-style":[{outline:["solid","dashed","dotted","double","none","hidden"]}],"outline-offset":[{"outline-offset":[Ho,an,Xo]}],"outline-w":[{outline:["",Ho,sn,Zo]}],"outline-color":[{outline:D()}],shadow:[{shadow:["","none",d,un,nn]}],"shadow-color":[{shadow:D()}],"inset-shadow":[{"inset-shadow":["none",u,un,nn]}],"inset-shadow-color":[{"inset-shadow":D()}],"ring-w":[{ring:L()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:D()}],"ring-offset-w":[{"ring-offset":[Ho,Zo]}],"ring-offset-color":[{"ring-offset":D()}],"inset-ring-w":[{"inset-ring":L()}],"inset-ring-color":[{"inset-ring":D()}],"text-shadow":[{"text-shadow":["none",g,un,nn]}],"text-shadow-color":[{"text-shadow":D()}],opacity:[{opacity:[Ho,an,Xo]}],"mix-blend":[{"mix-blend":["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity","plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"]}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[Ho]}],"mask-image-linear-from-pos":[{"mask-linear-from":F()}],"mask-image-linear-to-pos":[{"mask-linear-to":F()}],"mask-image-linear-from-color":[{"mask-linear-from":D()}],"mask-image-linear-to-color":[{"mask-linear-to":D()}],"mask-image-t-from-pos":[{"mask-t-from":F()}],"mask-image-t-to-pos":[{"mask-t-to":F()}],"mask-image-t-from-color":[{"mask-t-from":D()}],"mask-image-t-to-color":[{"mask-t-to":D()}],"mask-image-r-from-pos":[{"mask-r-from":F()}],"mask-image-r-to-pos":[{"mask-r-to":F()}],"mask-image-r-from-color":[{"mask-r-from":D()}],"mask-image-r-to-color":[{"mask-r-to":D()}],"mask-image-b-from-pos":[{"mask-b-from":F()}],"mask-image-b-to-pos":[{"mask-b-to":F()}],"mask-image-b-from-color":[{"mask-b-from":D()}],"mask-image-b-to-color":[{"mask-b-to":D()}],"mask-image-l-from-pos":[{"mask-l-from":F()}],"mask-image-l-to-pos":[{"mask-l-to":F()}],"mask-image-l-from-color":[{"mask-l-from":D()}],"mask-image-l-to-color":[{"mask-l-to":D()}],"mask-image-x-from-pos":[{"mask-x-from":F()}],"mask-image-x-to-pos":[{"mask-x-to":F()}],"mask-image-x-from-color":[{"mask-x-from":D()}],"mask-image-x-to-color":[{"mask-x-to":D()}],"mask-image-y-from-pos":[{"mask-y-from":F()}],"mask-image-y-to-pos":[{"mask-y-to":F()}],"mask-image-y-from-color":[{"mask-y-from":D()}],"mask-image-y-to-color":[{"mask-y-to":D()}],"mask-image-radial":[{"mask-radial":[an,Xo]}],"mask-image-radial-from-pos":[{"mask-radial-from":F()}],"mask-image-radial-to-pos":[{"mask-radial-to":F()}],"mask-image-radial-from-color":[{"mask-radial-from":D()}],"mask-image-radial-to-color":[{"mask-radial-to":D()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"]}],"mask-image-conic-pos":[{"mask-conic":[Ho]}],"mask-image-conic-from-pos":[{"mask-conic-from":F()}],"mask-image-conic-to-pos":[{"mask-conic-to":F()}],"mask-image-conic-from-color":[{"mask-conic-from":D()}],"mask-image-conic-to-color":[{"mask-conic-to":D()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:E()}],"mask-repeat":[{mask:["no-repeat",{repeat:["","x","y","space","round"]}]}],"mask-size":[{mask:I()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",an,Xo]}],filter:[{filter:["","none",an,Xo]}],blur:[{blur:N()}],brightness:[{brightness:[Ho,an,Xo]}],contrast:[{contrast:[Ho,an,Xo]}],"drop-shadow":[{"drop-shadow":["","none",m,un,nn]}],"drop-shadow-color":[{"drop-shadow":D()}],grayscale:[{grayscale:["",Ho,an,Xo]}],"hue-rotate":[{"hue-rotate":[Ho,an,Xo]}],invert:[{invert:["",Ho,an,Xo]}],saturate:[{saturate:[Ho,an,Xo]}],sepia:[{sepia:["",Ho,an,Xo]}],"backdrop-filter":[{"backdrop-filter":["","none",an,Xo]}],"backdrop-blur":[{"backdrop-blur":N()}],"backdrop-brightness":[{"backdrop-brightness":[Ho,an,Xo]}],"backdrop-contrast":[{"backdrop-contrast":[Ho,an,Xo]}],"backdrop-grayscale":[{"backdrop-grayscale":["",Ho,an,Xo]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[Ho,an,Xo]}],"backdrop-invert":[{"backdrop-invert":["",Ho,an,Xo]}],"backdrop-opacity":[{"backdrop-opacity":[Ho,an,Xo]}],"backdrop-saturate":[{"backdrop-saturate":[Ho,an,Xo]}],"backdrop-sepia":[{"backdrop-sepia":["",Ho,an,Xo]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":b()}],"border-spacing-x":[{"border-spacing-x":b()}],"border-spacing-y":[{"border-spacing-y":b()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",an,Xo]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[Ho,"initial",an,Xo]}],ease:[{ease:["linear","initial",h,an,Xo]}],delay:[{delay:[Ho,an,Xo]}],animate:[{animate:["none",w,an,Xo]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[f,an,Xo]}],"perspective-origin":[{"perspective-origin":v()}],rotate:[{rotate:j()}],"rotate-x":[{"rotate-x":j()}],"rotate-y":[{"rotate-y":j()}],"rotate-z":[{"rotate-z":j()}],scale:[{scale:O()}],"scale-x":[{"scale-x":O()}],"scale-y":[{"scale-y":O()}],"scale-z":[{"scale-z":O()}],"scale-3d":["scale-3d"],skew:[{skew:_()}],"skew-x":[{"skew-x":_()}],"skew-y":[{"skew-y":_()}],transform:[{transform:[an,Xo,"","none","gpu","cpu"]}],"transform-origin":[{origin:v()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:U()}],"translate-x":[{"translate-x":U()}],"translate-y":[{"translate-y":U()}],"translate-z":[{"translate-z":U()}],"translate-none":["translate-none"],accent:[{accent:D()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:D()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",an,Xo]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":b()}],"scroll-mx":[{"scroll-mx":b()}],"scroll-my":[{"scroll-my":b()}],"scroll-ms":[{"scroll-ms":b()}],"scroll-me":[{"scroll-me":b()}],"scroll-mt":[{"scroll-mt":b()}],"scroll-mr":[{"scroll-mr":b()}],"scroll-mb":[{"scroll-mb":b()}],"scroll-ml":[{"scroll-ml":b()}],"scroll-p":[{"scroll-p":b()}],"scroll-px":[{"scroll-px":b()}],"scroll-py":[{"scroll-py":b()}],"scroll-ps":[{"scroll-ps":b()}],"scroll-pe":[{"scroll-pe":b()}],"scroll-pt":[{"scroll-pt":b()}],"scroll-pr":[{"scroll-pr":b()}],"scroll-pb":[{"scroll-pb":b()}],"scroll-pl":[{"scroll-pl":b()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",an,Xo]}],fill:[{fill:["none",...D()]}],"stroke-w":[{stroke:[Ho,sn,Zo,en]}],stroke:[{stroke:["none",...D()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}});function xn(...e){return kn(qt(e))}const Cn=Qt("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}}),Sn=e.forwardRef(({className:e,variant:t,size:o,asChild:n=!1,...a},s)=>{const i=n?oo:"button";return ie.jsx(i,{ref:s,"data-slot":"button","data-variant":t,"data-size":o,className:xn(Cn({variant:t,size:o,className:e})),...a})});function An(e,t,{checkForDefaultPrevented:o=!0}={}){return function(n){if(null==e||e(n),!1===o||!n.defaultPrevented)return null==t?void 0:t(n)}}function Pn(t,o){const n=e.createContext(o),a=t=>{const{children:o,...a}=t,s=e.useMemo(()=>a,Object.values(a));return ie.jsx(n.Provider,{value:s,children:o})};return a.displayName=t+"Provider",[a,function(a){const s=e.useContext(n);if(s)return s;if(void 0!==o)return o;throw new Error(`\`${a}\` must be used within \`${t}\``)}]}function Tn(t,o=[]){let n=[];const a=()=>{const o=n.map(t=>e.createContext(t));return function(n){const a=(null==n?void 0:n[t])||o;return e.useMemo(()=>({[`__scope${t}`]:{...n,[t]:a}}),[n,a])}};return a.scopeName=t,[function(o,a){const s=e.createContext(a),i=n.length;n=[...n,a];const r=o=>{var n;const{scope:a,children:r,...l}=o,c=(null==(n=null==a?void 0:a[t])?void 0:n[i])||s,d=e.useMemo(()=>l,Object.values(l));return ie.jsx(c.Provider,{value:d,children:r})};return r.displayName=o+"Provider",[r,function(n,r){var l;const c=(null==(l=null==r?void 0:r[t])?void 0:l[i])||s,d=e.useContext(c);if(d)return d;if(void 0!==a)return a;throw new Error(`\`${n}\` must be used within \`${o}\``)}]},Dn(a,...o)]}function Dn(...t){const o=t[0];if(1===t.length)return o;const n=()=>{const n=t.map(e=>({useScope:e(),scopeName:e.scopeName}));return function(t){const a=n.reduce((e,{useScope:o,scopeName:n})=>({...e,...o(t)[`__scope${n}`]}),{});return e.useMemo(()=>({[`__scope${o.scopeName}`]:a}),[a])}};return n.scopeName=o.scopeName,n}function En(t){const o=In(t),n=e.forwardRef((t,n)=>{const{children:a,...s}=t,i=e.Children.toArray(a),r=i.find(Rn);if(r){const t=r.props.children,a=i.map(o=>o===r?e.Children.count(t)>1?e.Children.only(null):e.isValidElement(t)?t.props.children:null:o);return ie.jsx(o,{...s,ref:n,children:e.isValidElement(t)?e.cloneElement(t,void 0,a):null})}return ie.jsx(o,{...s,ref:n,children:a})});return n.displayName=`${t}.Slot`,n}function In(t){const o=e.forwardRef((t,o)=>{const{children:n,...a}=t;if(e.isValidElement(n)){const t=function(e){var t,o;let n=null==(t=Object.getOwnPropertyDescriptor(e.props,"ref"))?void 0:t.get,a=n&&"isReactWarning"in n&&n.isReactWarning;if(a)return e.ref;if(n=null==(o=Object.getOwnPropertyDescriptor(e,"ref"))?void 0:o.get,a=n&&"isReactWarning"in n&&n.isReactWarning,a)return e.props.ref;return e.props.ref||e.ref}(n),s=function(e,t){const o={...t};for(const n in t){const a=e[n],s=t[n];/^on[A-Z]/.test(n)?a&&s?o[n]=(...e)=>{const t=s(...e);return a(...e),t}:a&&(o[n]=a):"style"===n?o[n]={...a,...s}:"className"===n&&(o[n]=[a,s].filter(Boolean).join(" "))}return{...e,...o}}(a,n.props);return n.type!==e.Fragment&&(s.ref=o?Jt(o,t):t),e.cloneElement(n,s)}return e.Children.count(n)>1?e.Children.only(null):null});return o.displayName=`${t}.SlotClone`,o}Sn.displayName="Button";var Mn=Symbol("radix.slottable");function Rn(t){return e.isValidElement(t)&&"function"==typeof t.type&&"__radixId"in t.type&&t.type.__radixId===Mn}var Ln=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"].reduce((t,o)=>{const n=En(`Primitive.${o}`),a=e.forwardRef((e,t)=>{const{asChild:a,...s}=e,i=a?n:o;return"undefined"!=typeof window&&(window[Symbol.for("radix-ui")]=!0),ie.jsx(i,{...s,ref:t})});return a.displayName=`Primitive.${o}`,{...t,[o]:a}},{});function Fn(t){const o=e.useRef(t);return e.useEffect(()=>{o.current=t}),e.useMemo(()=>(...e)=>{var t;return null==(t=o.current)?void 0:t.call(o,...e)},[])}var Nn,jn="dismissableLayer.update",On="dismissableLayer.pointerDownOutside",_n="dismissableLayer.focusOutside",Un=e.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),Kn=e.forwardRef((t,o)=>{var n;const{disableOutsidePointerEvents:a=!1,onEscapeKeyDown:s,onPointerDownOutside:i,onFocusOutside:r,onInteractOutside:l,onDismiss:c,...d}=t,u=e.useContext(Un),[g,m]=e.useState(null),p=null!=(n=null==g?void 0:g.ownerDocument)?n:null==globalThis?void 0:globalThis.document,[,f]=e.useState({}),y=Yt(o,e=>m(e)),h=Array.from(u.layers),[w]=[...u.layersWithOutsidePointerEventsDisabled].slice(-1),v=h.indexOf(w),b=g?h.indexOf(g):-1,k=u.layersWithOutsidePointerEventsDisabled.size>0,x=b>=v,C=function(t,o=(null==globalThis?void 0:globalThis.document)){const n=Fn(t),a=e.useRef(!1),s=e.useRef(()=>{});return e.useEffect(()=>{const e=e=>{if(e.target&&!a.current){let t=function(){Bn(On,n,a,{discrete:!0})};const a={originalEvent:e};"touch"===e.pointerType?(o.removeEventListener("click",s.current),s.current=t,o.addEventListener("click",s.current,{once:!0})):t()}else o.removeEventListener("click",s.current);a.current=!1},t=window.setTimeout(()=>{o.addEventListener("pointerdown",e)},0);return()=>{window.clearTimeout(t),o.removeEventListener("pointerdown",e),o.removeEventListener("click",s.current)}},[o,n]),{onPointerDownCapture:()=>a.current=!0}}(e=>{const t=e.target,o=[...u.branches].some(e=>e.contains(t));x&&!o&&(null==i||i(e),null==l||l(e),e.defaultPrevented||null==c||c())},p),S=function(t,o=(null==globalThis?void 0:globalThis.document)){const n=Fn(t),a=e.useRef(!1);return e.useEffect(()=>{const e=e=>{if(e.target&&!a.current){Bn(_n,n,{originalEvent:e},{discrete:!1})}};return o.addEventListener("focusin",e),()=>o.removeEventListener("focusin",e)},[o,n]),{onFocusCapture:()=>a.current=!0,onBlurCapture:()=>a.current=!1}}(e=>{const t=e.target;[...u.branches].some(e=>e.contains(t))||(null==r||r(e),null==l||l(e),e.defaultPrevented||null==c||c())},p);return function(t,o=(null==globalThis?void 0:globalThis.document)){const n=Fn(t);e.useEffect(()=>{const e=e=>{"Escape"===e.key&&n(e)};return o.addEventListener("keydown",e,{capture:!0}),()=>o.removeEventListener("keydown",e,{capture:!0})},[n,o])}(e=>{b===u.layers.size-1&&(null==s||s(e),!e.defaultPrevented&&c&&(e.preventDefault(),c()))},p),e.useEffect(()=>{if(g)return a&&(0===u.layersWithOutsidePointerEventsDisabled.size&&(Nn=p.body.style.pointerEvents,p.body.style.pointerEvents="none"),u.layersWithOutsidePointerEventsDisabled.add(g)),u.layers.add(g),Hn(),()=>{a&&1===u.layersWithOutsidePointerEventsDisabled.size&&(p.body.style.pointerEvents=Nn)}},[g,p,a,u]),e.useEffect(()=>()=>{g&&(u.layers.delete(g),u.layersWithOutsidePointerEventsDisabled.delete(g),Hn())},[g,u]),e.useEffect(()=>{const e=()=>f({});return document.addEventListener(jn,e),()=>document.removeEventListener(jn,e)},[]),ie.jsx(Ln.div,{...d,ref:y,style:{pointerEvents:k?x?"auto":"none":void 0,...t.style},onFocusCapture:An(t.onFocusCapture,S.onFocusCapture),onBlurCapture:An(t.onBlurCapture,S.onBlurCapture),onPointerDownCapture:An(t.onPointerDownCapture,C.onPointerDownCapture)})});Kn.displayName="DismissableLayer";function Hn(){const e=new CustomEvent(jn);document.dispatchEvent(e)}function Bn(e,o,n,{discrete:a}){const s=n.originalEvent.target,i=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});o&&s.addEventListener(e,o,{once:!0}),a?function(e,o){e&&t.flushSync(()=>e.dispatchEvent(o))}(s,i):s.dispatchEvent(i)}e.forwardRef((t,o)=>{const n=e.useContext(Un),a=e.useRef(null),s=Yt(o,a);return e.useEffect(()=>{const e=a.current;if(e)return n.branches.add(e),()=>{n.branches.delete(e)}},[n.branches]),ie.jsx(Ln.div,{...t,ref:s})}).displayName="DismissableLayerBranch";var Wn=(null==globalThis?void 0:globalThis.document)?e.useLayoutEffect:()=>{},Gn=o[" useId ".trim().toString()]||(()=>{}),qn=0;function zn(t){const[o,n]=e.useState(Gn());return Wn(()=>{n(e=>null!=e?e:String(qn++))},[t]),o?`radix-${o}`:""}const Vn=["top","right","bottom","left"],Qn=Math.min,$n=Math.max,Jn=Math.round,Yn=Math.floor,Xn=e=>({x:e,y:e}),Zn={left:"right",right:"left",bottom:"top",top:"bottom"};function ea(e,t,o){return $n(e,Qn(t,o))}function ta(e,t){return"function"==typeof e?e(t):e}function oa(e){return e.split("-")[0]}function na(e){return e.split("-")[1]}function aa(e){return"x"===e?"y":"x"}function sa(e){return"y"===e?"height":"width"}function ia(e){const t=e[0];return"t"===t||"b"===t?"y":"x"}function ra(e){return aa(ia(e))}function la(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}const ca=["left","right"],da=["right","left"],ua=["top","bottom"],ga=["bottom","top"];function ma(e,t,o,n){const a=na(e);let s=function(e,t,o){switch(e){case"top":case"bottom":return o?t?da:ca:t?ca:da;case"left":case"right":return t?ua:ga;default:return[]}}(oa(e),"start"===o,n);return a&&(s=s.map(e=>e+"-"+a),t&&(s=s.concat(s.map(la)))),s}function pa(e){const t=oa(e);return Zn[t]+e.slice(t.length)}function fa(e){return"number"!=typeof e?function(e){return{top:0,right:0,bottom:0,left:0,...e}}(e):{top:e,right:e,bottom:e,left:e}}function ya(e){const{x:t,y:o,width:n,height:a}=e;return{width:n,height:a,top:o,left:t,right:t+n,bottom:o+a,x:t,y:o}}function ha(e,t,o){let{reference:n,floating:a}=e;const s=ia(t),i=ra(t),r=sa(i),l=oa(t),c="y"===s,d=n.x+n.width/2-a.width/2,u=n.y+n.height/2-a.height/2,g=n[r]/2-a[r]/2;let m;switch(l){case"top":m={x:d,y:n.y-a.height};break;case"bottom":m={x:d,y:n.y+n.height};break;case"right":m={x:n.x+n.width,y:u};break;case"left":m={x:n.x-a.width,y:u};break;default:m={x:n.x,y:n.y}}switch(na(t)){case"start":m[i]-=g*(o&&c?-1:1);break;case"end":m[i]+=g*(o&&c?-1:1)}return m}async function wa(e,t){var o;void 0===t&&(t={});const{x:n,y:a,platform:s,rects:i,elements:r,strategy:l}=e,{boundary:c="clippingAncestors",rootBoundary:d="viewport",elementContext:u="floating",altBoundary:g=!1,padding:m=0}=ta(t,e),p=fa(m),f=r[g?"floating"===u?"reference":"floating":u],y=ya(await s.getClippingRect({element:null==(o=await(null==s.isElement?void 0:s.isElement(f)))||o?f:f.contextElement||await(null==s.getDocumentElement?void 0:s.getDocumentElement(r.floating)),boundary:c,rootBoundary:d,strategy:l})),h="floating"===u?{x:n,y:a,width:i.floating.width,height:i.floating.height}:i.reference,w=await(null==s.getOffsetParent?void 0:s.getOffsetParent(r.floating)),v=await(null==s.isElement?void 0:s.isElement(w))&&await(null==s.getScale?void 0:s.getScale(w))||{x:1,y:1},b=ya(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:r,rect:h,offsetParent:w,strategy:l}):h);return{top:(y.top-b.top+p.top)/v.y,bottom:(b.bottom-y.bottom+p.bottom)/v.y,left:(y.left-b.left+p.left)/v.x,right:(b.right-y.right+p.right)/v.x}}function va(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function ba(e){return Vn.some(t=>e[t]>=0)}const ka=new Set(["left","top"]);function xa(){return"undefined"!=typeof window}function Ca(e){return Pa(e)?(e.nodeName||"").toLowerCase():"#document"}function Sa(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function Aa(e){var t;return null==(t=(Pa(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function Pa(e){return!!xa()&&(e instanceof Node||e instanceof Sa(e).Node)}function Ta(e){return!!xa()&&(e instanceof Element||e instanceof Sa(e).Element)}function Da(e){return!!xa()&&(e instanceof HTMLElement||e instanceof Sa(e).HTMLElement)}function Ea(e){return!(!xa()||"undefined"==typeof ShadowRoot)&&(e instanceof ShadowRoot||e instanceof Sa(e).ShadowRoot)}function Ia(e){const{overflow:t,overflowX:o,overflowY:n,display:a}=Ka(e);return/auto|scroll|overlay|hidden|clip/.test(t+n+o)&&"inline"!==a&&"contents"!==a}function Ma(e){return/^(table|td|th)$/.test(Ca(e))}function Ra(e){try{if(e.matches(":popover-open"))return!0}catch(t){}try{return e.matches(":modal")}catch(t){return!1}}const La=/transform|translate|scale|rotate|perspective|filter/,Fa=/paint|layout|strict|content/,Na=e=>!!e&&"none"!==e;let ja;function Oa(e){const t=Ta(e)?Ka(e):e;return Na(t.transform)||Na(t.translate)||Na(t.scale)||Na(t.rotate)||Na(t.perspective)||!_a()&&(Na(t.backdropFilter)||Na(t.filter))||La.test(t.willChange||"")||Fa.test(t.contain||"")}function _a(){return null==ja&&(ja="undefined"!=typeof CSS&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),ja}function Ua(e){return/^(html|body|#document)$/.test(Ca(e))}function Ka(e){return Sa(e).getComputedStyle(e)}function Ha(e){return Ta(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Ba(e){if("html"===Ca(e))return e;const t=e.assignedSlot||e.parentNode||Ea(e)&&e.host||Aa(e);return Ea(t)?t.host:t}function Wa(e){const t=Ba(e);return Ua(t)?e.ownerDocument?e.ownerDocument.body:e.body:Da(t)&&Ia(t)?t:Wa(t)}function Ga(e,t,o){var n;void 0===t&&(t=[]),void 0===o&&(o=!0);const a=Wa(e),s=a===(null==(n=e.ownerDocument)?void 0:n.body),i=Sa(a);if(s){const e=qa(i);return t.concat(i,i.visualViewport||[],Ia(a)?a:[],e&&o?Ga(e):[])}return t.concat(a,Ga(a,[],o))}function qa(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function za(e){const t=Ka(e);let o=parseFloat(t.width)||0,n=parseFloat(t.height)||0;const a=Da(e),s=a?e.offsetWidth:o,i=a?e.offsetHeight:n,r=Jn(o)!==s||Jn(n)!==i;return r&&(o=s,n=i),{width:o,height:n,$:r}}function Va(e){return Ta(e)?e:e.contextElement}function Qa(e){const t=Va(e);if(!Da(t))return Xn(1);const o=t.getBoundingClientRect(),{width:n,height:a,$:s}=za(t);let i=(s?Jn(o.width):o.width)/n,r=(s?Jn(o.height):o.height)/a;return i&&Number.isFinite(i)||(i=1),r&&Number.isFinite(r)||(r=1),{x:i,y:r}}const $a=Xn(0);function Ja(e){const t=Sa(e);return _a()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:$a}function Ya(e,t,o,n){void 0===t&&(t=!1),void 0===o&&(o=!1);const a=e.getBoundingClientRect(),s=Va(e);let i=Xn(1);t&&(n?Ta(n)&&(i=Qa(n)):i=Qa(e));const r=function(e,t,o){return void 0===t&&(t=!1),!(!o||t&&o!==Sa(e))&&t}(s,o,n)?Ja(s):Xn(0);let l=(a.left+r.x)/i.x,c=(a.top+r.y)/i.y,d=a.width/i.x,u=a.height/i.y;if(s){const e=Sa(s),t=n&&Ta(n)?Sa(n):n;let o=e,a=qa(o);for(;a&&n&&t!==o;){const e=Qa(a),t=a.getBoundingClientRect(),n=Ka(a),s=t.left+(a.clientLeft+parseFloat(n.paddingLeft))*e.x,i=t.top+(a.clientTop+parseFloat(n.paddingTop))*e.y;l*=e.x,c*=e.y,d*=e.x,u*=e.y,l+=s,c+=i,o=Sa(a),a=qa(o)}}return ya({width:d,height:u,x:l,y:c})}function Xa(e,t){const o=Ha(e).scrollLeft;return t?t.left+o:Ya(Aa(e)).left+o}function Za(e,t){const o=e.getBoundingClientRect();return{x:o.left+t.scrollLeft-Xa(e,o),y:o.top+t.scrollTop}}function es(e,t,o){let n;if("viewport"===t)n=function(e,t){const o=Sa(e),n=Aa(e),a=o.visualViewport;let s=n.clientWidth,i=n.clientHeight,r=0,l=0;if(a){s=a.width,i=a.height;const e=_a();(!e||e&&"fixed"===t)&&(r=a.offsetLeft,l=a.offsetTop)}const c=Xa(n);if(c<=0){const e=n.ownerDocument,t=e.body,o=getComputedStyle(t),a="CSS1Compat"===e.compatMode&&parseFloat(o.marginLeft)+parseFloat(o.marginRight)||0,i=Math.abs(n.clientWidth-t.clientWidth-a);i<=25&&(s-=i)}else c<=25&&(s+=c);return{width:s,height:i,x:r,y:l}}(e,o);else if("document"===t)n=function(e){const t=Aa(e),o=Ha(e),n=e.ownerDocument.body,a=$n(t.scrollWidth,t.clientWidth,n.scrollWidth,n.clientWidth),s=$n(t.scrollHeight,t.clientHeight,n.scrollHeight,n.clientHeight);let i=-o.scrollLeft+Xa(e);const r=-o.scrollTop;return"rtl"===Ka(n).direction&&(i+=$n(t.clientWidth,n.clientWidth)-a),{width:a,height:s,x:i,y:r}}(Aa(e));else if(Ta(t))n=function(e,t){const o=Ya(e,!0,"fixed"===t),n=o.top+e.clientTop,a=o.left+e.clientLeft,s=Da(e)?Qa(e):Xn(1);return{width:e.clientWidth*s.x,height:e.clientHeight*s.y,x:a*s.x,y:n*s.y}}(t,o);else{const o=Ja(e);n={x:t.x-o.x,y:t.y-o.y,width:t.width,height:t.height}}return ya(n)}function ts(e,t){const o=Ba(e);return!(o===t||!Ta(o)||Ua(o))&&("fixed"===Ka(o).position||ts(o,t))}function os(e,t,o){const n=Da(t),a=Aa(t),s="fixed"===o,i=Ya(e,!0,s,t);let r={scrollLeft:0,scrollTop:0};const l=Xn(0);function c(){l.x=Xa(a)}if(n||!n&&!s)if(("body"!==Ca(t)||Ia(a))&&(r=Ha(t)),n){const e=Ya(t,!0,s,t);l.x=e.x+t.clientLeft,l.y=e.y+t.clientTop}else a&&c();s&&!n&&a&&c();const d=!a||n||s?Xn(0):Za(a,r);return{x:i.left+r.scrollLeft-l.x-d.x,y:i.top+r.scrollTop-l.y-d.y,width:i.width,height:i.height}}function ns(e){return"static"===Ka(e).position}function as(e,t){if(!Da(e)||"fixed"===Ka(e).position)return null;if(t)return t(e);let o=e.offsetParent;return Aa(e)===o&&(o=o.ownerDocument.body),o}function ss(e,t){const o=Sa(e);if(Ra(e))return o;if(!Da(e)){let t=Ba(e);for(;t&&!Ua(t);){if(Ta(t)&&!ns(t))return t;t=Ba(t)}return o}let n=as(e,t);for(;n&&Ma(n)&&ns(n);)n=as(n,t);return n&&Ua(n)&&ns(n)&&!Oa(n)?o:n||function(e){let t=Ba(e);for(;Da(t)&&!Ua(t);){if(Oa(t))return t;if(Ra(t))return null;t=Ba(t)}return null}(e)||o}const is={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{elements:t,rect:o,offsetParent:n,strategy:a}=e;const s="fixed"===a,i=Aa(n),r=!!t&&Ra(t.floating);if(n===i||r&&s)return o;let l={scrollLeft:0,scrollTop:0},c=Xn(1);const d=Xn(0),u=Da(n);if((u||!u&&!s)&&(("body"!==Ca(n)||Ia(i))&&(l=Ha(n)),u)){const e=Ya(n);c=Qa(n),d.x=e.x+n.clientLeft,d.y=e.y+n.clientTop}const g=!i||u||s?Xn(0):Za(i,l);return{width:o.width*c.x,height:o.height*c.y,x:o.x*c.x-l.scrollLeft*c.x+d.x+g.x,y:o.y*c.y-l.scrollTop*c.y+d.y+g.y}},getDocumentElement:Aa,getClippingRect:function(e){let{element:t,boundary:o,rootBoundary:n,strategy:a}=e;const s=[..."clippingAncestors"===o?Ra(t)?[]:function(e,t){const o=t.get(e);if(o)return o;let n=Ga(e,[],!1).filter(e=>Ta(e)&&"body"!==Ca(e)),a=null;const s="fixed"===Ka(e).position;let i=s?Ba(e):e;for(;Ta(i)&&!Ua(i);){const t=Ka(i),o=Oa(i);o||"fixed"!==t.position||(a=null),(s?!o&&!a:!o&&"static"===t.position&&a&&("absolute"===a.position||"fixed"===a.position)||Ia(i)&&!o&&ts(e,i))?n=n.filter(e=>e!==i):a=t,i=Ba(i)}return t.set(e,n),n}(t,this._c):[].concat(o),n],i=es(t,s[0],a);let r=i.top,l=i.right,c=i.bottom,d=i.left;for(let u=1;u{a&&e.addEventListener("scroll",o,{passive:!0}),s&&e.addEventListener("resize",o)});const u=c&&r?function(e,t){let o,n=null;const a=Aa(e);function s(){var e;clearTimeout(o),null==(e=n)||e.disconnect(),n=null}return function i(r,l){void 0===r&&(r=!1),void 0===l&&(l=1),s();const c=e.getBoundingClientRect(),{left:d,top:u,width:g,height:m}=c;if(r||t(),!g||!m)return;const p={rootMargin:-Yn(u)+"px "+-Yn(a.clientWidth-(d+g))+"px "+-Yn(a.clientHeight-(u+m))+"px "+-Yn(d)+"px",threshold:$n(0,Qn(1,l))||1};let f=!0;function y(t){const n=t[0].intersectionRatio;if(n!==l){if(!f)return i();n?i(!1,n):o=setTimeout(()=>{i(!1,1e-7)},1e3)}1!==n||rs(c,e.getBoundingClientRect())||i(),f=!1}try{n=new IntersectionObserver(y,{...p,root:a.ownerDocument})}catch(h){n=new IntersectionObserver(y,p)}n.observe(e)}(!0),s}(c,o):null;let g,m=-1,p=null;i&&(p=new ResizeObserver(e=>{let[n]=e;n&&n.target===c&&p&&t&&(p.unobserve(t),cancelAnimationFrame(m),m=requestAnimationFrame(()=>{var e;null==(e=p)||e.observe(t)})),o()}),c&&!l&&p.observe(c),t&&p.observe(t));let f=l?Ya(e):null;return l&&function t(){const n=Ya(e);f&&!rs(f,n)&&o();f=n,g=requestAnimationFrame(t)}(),o(),()=>{var e;d.forEach(e=>{a&&e.removeEventListener("scroll",o),s&&e.removeEventListener("resize",o)}),null==u||u(),null==(e=p)||e.disconnect(),p=null,l&&cancelAnimationFrame(g)}}const cs=function(e){return void 0===e&&(e=0),{name:"offset",options:e,async fn(t){var o,n;const{x:a,y:s,placement:i,middlewareData:r}=t,l=await async function(e,t){const{placement:o,platform:n,elements:a}=e,s=await(null==n.isRTL?void 0:n.isRTL(a.floating)),i=oa(o),r=na(o),l="y"===ia(o),c=ka.has(i)?-1:1,d=s&&l?-1:1,u=ta(t,e);let{mainAxis:g,crossAxis:m,alignmentAxis:p}="number"==typeof u?{mainAxis:u,crossAxis:0,alignmentAxis:null}:{mainAxis:u.mainAxis||0,crossAxis:u.crossAxis||0,alignmentAxis:u.alignmentAxis};return r&&"number"==typeof p&&(m="end"===r?-1*p:p),l?{x:m*d,y:g*c}:{x:g*c,y:m*d}}(t,e);return i===(null==(o=r.offset)?void 0:o.placement)&&null!=(n=r.arrow)&&n.alignmentOffset?{}:{x:a+l.x,y:s+l.y,data:{...l,placement:i}}}}},ds=function(e){return void 0===e&&(e={}),{name:"shift",options:e,async fn(t){const{x:o,y:n,placement:a,platform:s}=t,{mainAxis:i=!0,crossAxis:r=!1,limiter:l={fn:e=>{let{x:t,y:o}=e;return{x:t,y:o}}},...c}=ta(e,t),d={x:o,y:n},u=await s.detectOverflow(t,c),g=ia(oa(a)),m=aa(g);let p=d[m],f=d[g];if(i){const e="y"===m?"bottom":"right";p=ea(p+u["y"===m?"top":"left"],p,p-u[e])}if(r){const e="y"===g?"bottom":"right";f=ea(f+u["y"===g?"top":"left"],f,f-u[e])}const y=l.fn({...t,[m]:p,[g]:f});return{...y,data:{x:y.x-o,y:y.y-n,enabled:{[m]:i,[g]:r}}}}}},us=function(e){return void 0===e&&(e={}),{name:"flip",options:e,async fn(t){var o,n;const{placement:a,middlewareData:s,rects:i,initialPlacement:r,platform:l,elements:c}=t,{mainAxis:d=!0,crossAxis:u=!0,fallbackPlacements:g,fallbackStrategy:m="bestFit",fallbackAxisSideDirection:p="none",flipAlignment:f=!0,...y}=ta(e,t);if(null!=(o=s.arrow)&&o.alignmentOffset)return{};const h=oa(a),w=ia(r),v=oa(r)===r,b=await(null==l.isRTL?void 0:l.isRTL(c.floating)),k=g||(v||!f?[pa(r)]:function(e){const t=pa(e);return[la(e),t,la(t)]}(r)),x="none"!==p;!g&&x&&k.push(...ma(r,f,p,b));const C=[r,...k],S=await l.detectOverflow(t,y),A=[];let P=(null==(n=s.flip)?void 0:n.overflows)||[];if(d&&A.push(S[h]),u){const e=function(e,t,o){void 0===o&&(o=!1);const n=na(e),a=ra(e),s=sa(a);let i="x"===a?n===(o?"end":"start")?"right":"left":"start"===n?"bottom":"top";return t.reference[s]>t.floating[s]&&(i=pa(i)),[i,pa(i)]}(a,i,b);A.push(S[e[0]],S[e[1]])}if(P=[...P,{placement:a,overflows:A}],!A.every(e=>e<=0)){var T,D;const e=((null==(T=s.flip)?void 0:T.index)||0)+1,t=C[e];if(t){if(!("alignment"===u&&w!==ia(t))||P.every(e=>ia(e.placement)!==w||e.overflows[0]>0))return{data:{index:e,overflows:P},reset:{placement:t}}}let o=null==(D=P.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0])?void 0:D.placement;if(!o)switch(m){case"bestFit":{var E;const e=null==(E=P.filter(e=>{if(x){const t=ia(e.placement);return t===w||"y"===t}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0])?void 0:E[0];e&&(o=e);break}case"initialPlacement":o=r}if(a!==o)return{reset:{placement:o}}}return{}}}},gs=function(e){return void 0===e&&(e={}),{name:"size",options:e,async fn(t){var o,n;const{placement:a,rects:s,platform:i,elements:r}=t,{apply:l=()=>{},...c}=ta(e,t),d=await i.detectOverflow(t,c),u=oa(a),g=na(a),m="y"===ia(a),{width:p,height:f}=s.floating;let y,h;"top"===u||"bottom"===u?(y=u,h=g===(await(null==i.isRTL?void 0:i.isRTL(r.floating))?"start":"end")?"left":"right"):(h=u,y="end"===g?"top":"bottom");const w=f-d.top-d.bottom,v=p-d.left-d.right,b=Qn(f-d[y],w),k=Qn(p-d[h],v),x=!t.middlewareData.shift;let C=b,S=k;if(null!=(o=t.middlewareData.shift)&&o.enabled.x&&(S=v),null!=(n=t.middlewareData.shift)&&n.enabled.y&&(C=w),x&&!g){const e=$n(d.left,0),t=$n(d.right,0),o=$n(d.top,0),n=$n(d.bottom,0);m?S=p-2*(0!==e||0!==t?e+t:$n(d.left,d.right)):C=f-2*(0!==o||0!==n?o+n:$n(d.top,d.bottom))}await l({...t,availableWidth:S,availableHeight:C});const A=await i.getDimensions(r.floating);return p!==A.width||f!==A.height?{reset:{rects:!0}}:{}}}},ms=function(e){return void 0===e&&(e={}),{name:"hide",options:e,async fn(t){const{rects:o,platform:n}=t,{strategy:a="referenceHidden",...s}=ta(e,t);switch(a){case"referenceHidden":{const e=va(await n.detectOverflow(t,{...s,elementContext:"reference"}),o.reference);return{data:{referenceHiddenOffsets:e,referenceHidden:ba(e)}}}case"escaped":{const e=va(await n.detectOverflow(t,{...s,altBoundary:!0}),o.floating);return{data:{escapedOffsets:e,escaped:ba(e)}}}default:return{}}}}},ps=e=>({name:"arrow",options:e,async fn(t){const{x:o,y:n,placement:a,rects:s,platform:i,elements:r,middlewareData:l}=t,{element:c,padding:d=0}=ta(e,t)||{};if(null==c)return{};const u=fa(d),g={x:o,y:n},m=ra(a),p=sa(m),f=await i.getDimensions(c),y="y"===m,h=y?"top":"left",w=y?"bottom":"right",v=y?"clientHeight":"clientWidth",b=s.reference[p]+s.reference[m]-g[m]-s.floating[p],k=g[m]-s.reference[m],x=await(null==i.getOffsetParent?void 0:i.getOffsetParent(c));let C=x?x[v]:0;C&&await(null==i.isElement?void 0:i.isElement(x))||(C=r.floating[v]||s.floating[p]);const S=b/2-k/2,A=C/2-f[p]/2-1,P=Qn(u[h],A),T=Qn(u[w],A),D=P,E=C-f[p]-T,I=C/2-f[p]/2+S,M=ea(D,I,E),R=!l.arrow&&null!=na(a)&&I!==M&&s.reference[p]/2-(Io&&(m=o)}if(c){var h,w;const e="y"===g?"width":"height",t=ka.has(oa(a)),o=s.reference[u]-s.floating[e]+(t&&(null==(h=i.offset)?void 0:h[u])||0)+(t?0:y.crossAxis),n=s.reference[u]+s.reference[e]+(t?0:(null==(w=i.offset)?void 0:w[u])||0)-(t?y.crossAxis:0);pn&&(p=n)}return{[g]:m,[u]:p}}}},ys=(e,t,o)=>{const n=new Map,a={platform:is,...o},s={...a.platform,_c:n};return(async(e,t,o)=>{const{placement:n="bottom",strategy:a="absolute",middleware:s=[],platform:i}=o,r=i.detectOverflow?i:{...i,detectOverflow:wa},l=await(null==i.isRTL?void 0:i.isRTL(t));let c=await i.getElementRects({reference:e,floating:t,strategy:a}),{x:d,y:u}=ha(c,n,l),g=n,m=0;const p={};for(let f=0;f{o.current=t}),o}const xs=(e,t)=>{const o=cs(e);return{name:o.name,fn:o.fn,options:[e,t]}},Cs=(e,t)=>{const o=ds(e);return{name:o.name,fn:o.fn,options:[e,t]}},Ss=(e,t)=>{const o=us(e);return{name:o.name,fn:o.fn,options:[e,t]}},As=(e,t)=>{const o=gs(e);return{name:o.name,fn:o.fn,options:[e,t]}},Ps=(e,t)=>{const o=ms(e);return{name:o.name,fn:o.fn,options:[e,t]}},Ts=(e,t)=>{const o=(e=>({name:"arrow",options:e,fn(t){const{element:o,padding:n}="function"==typeof e?e(t):e;return o&&(a=o,{}.hasOwnProperty.call(a,"current"))?null!=o.current?ps({element:o.current,padding:n}).fn(t):{}:o?ps({element:o,padding:n}).fn(t):{};var a}}))(e);return{name:o.name,fn:o.fn,options:[e,t]}};var Ds=e.forwardRef((e,t)=>{const{children:o,width:n=10,height:a=5,...s}=e;return ie.jsx(Ln.svg,{...s,ref:t,width:n,height:a,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?o:ie.jsx("polygon",{points:"0,0 30,0 15,10"})})});Ds.displayName="Arrow";var Es=Ds;function Is(t){const[o,n]=e.useState(void 0);return Wn(()=>{if(t){n({width:t.offsetWidth,height:t.offsetHeight});const e=new ResizeObserver(e=>{if(!Array.isArray(e))return;if(!e.length)return;const o=e[0];let a,s;if("borderBoxSize"in o){const e=o.borderBoxSize,t=Array.isArray(e)?e[0]:e;a=t.inlineSize,s=t.blockSize}else a=t.offsetWidth,s=t.offsetHeight;n({width:a,height:s})});return e.observe(t,{box:"border-box"}),()=>e.unobserve(t)}n(void 0)},[t]),o}var Ms="Popper",[Rs,Ls]=Tn(Ms),[Fs,Ns]=Rs(Ms),js=t=>{const{__scopePopper:o,children:n}=t,[a,s]=e.useState(null);return ie.jsx(Fs,{scope:o,anchor:a,onAnchorChange:s,children:n})};js.displayName=Ms;var Os="PopperAnchor",_s=e.forwardRef((t,o)=>{const{__scopePopper:n,virtualRef:a,...s}=t,i=Ns(Os,n),r=e.useRef(null),l=Yt(o,r),c=e.useRef(null);return e.useEffect(()=>{const e=c.current;c.current=(null==a?void 0:a.current)||r.current,e!==c.current&&i.onAnchorChange(c.current)}),a?null:ie.jsx(Ln.div,{...s,ref:l})});_s.displayName=Os;var Us="PopperContent",[Ks,Hs]=Rs(Us),Bs=e.forwardRef((o,n)=>{var a,s,i,r,l,c,d,u;const{__scopePopper:g,side:m="bottom",sideOffset:p=0,align:f="center",alignOffset:y=0,arrowPadding:h=0,avoidCollisions:w=!0,collisionBoundary:v=[],collisionPadding:b=0,sticky:k="partial",hideWhenDetached:x=!1,updatePositionStrategy:C="optimized",onPlaced:S,...A}=o,P=Ns(Us,g),[T,D]=e.useState(null),E=Yt(n,e=>D(e)),[I,M]=e.useState(null),R=Is(I),L=null!=(a=null==R?void 0:R.width)?a:0,F=null!=(s=null==R?void 0:R.height)?s:0,N=m+("center"!==f?"-"+f:""),j="number"==typeof b?b:{top:0,right:0,bottom:0,left:0,...b},O=Array.isArray(v)?v:[v],_=O.length>0,U={padding:j,boundary:O.filter(zs),altBoundary:_},{refs:K,floatingStyles:H,placement:B,isPositioned:W,middlewareData:G}=function(o){void 0===o&&(o={});const{placement:n="bottom",strategy:a="absolute",middleware:s=[],platform:i,elements:{reference:r,floating:l}={},transform:c=!0,whileElementsMounted:d,open:u}=o,[g,m]=e.useState({x:0,y:0,strategy:a,placement:n,middlewareData:{},isPositioned:!1}),[p,f]=e.useState(s);ws(p,s)||f(s);const[y,h]=e.useState(null),[w,v]=e.useState(null),b=e.useCallback(e=>{e!==S.current&&(S.current=e,h(e))},[]),k=e.useCallback(e=>{e!==A.current&&(A.current=e,v(e))},[]),x=r||y,C=l||w,S=e.useRef(null),A=e.useRef(null),P=e.useRef(g),T=null!=d,D=ks(d),E=ks(i),I=ks(u),M=e.useCallback(()=>{if(!S.current||!A.current)return;const e={placement:n,strategy:a,middleware:p};E.current&&(e.platform=E.current),ys(S.current,A.current,e).then(e=>{const o={...e,isPositioned:!1!==I.current};R.current&&!ws(P.current,o)&&(P.current=o,t.flushSync(()=>{m(o)}))})},[p,n,a,E,I]);hs(()=>{!1===u&&P.current.isPositioned&&(P.current.isPositioned=!1,m(e=>({...e,isPositioned:!1})))},[u]);const R=e.useRef(!1);hs(()=>(R.current=!0,()=>{R.current=!1}),[]),hs(()=>{if(x&&(S.current=x),C&&(A.current=C),x&&C){if(D.current)return D.current(x,C,M);M()}},[x,C,M,D,T]);const L=e.useMemo(()=>({reference:S,floating:A,setReference:b,setFloating:k}),[b,k]),F=e.useMemo(()=>({reference:x,floating:C}),[x,C]),N=e.useMemo(()=>{const e={position:a,left:0,top:0};if(!F.floating)return e;const t=bs(F.floating,g.x),o=bs(F.floating,g.y);return c?{...e,transform:"translate("+t+"px, "+o+"px)",...vs(F.floating)>=1.5&&{willChange:"transform"}}:{position:a,left:t,top:o}},[a,c,F.floating,g.x,g.y]);return e.useMemo(()=>({...g,update:M,refs:L,elements:F,floatingStyles:N}),[g,M,L,F,N])}({strategy:"fixed",placement:N,whileElementsMounted:(...e)=>ls(...e,{animationFrame:"always"===C}),elements:{reference:P.anchor},middleware:[xs({mainAxis:p+F,alignmentAxis:y}),w&&Cs({mainAxis:!0,crossAxis:!1,limiter:"partial"===k?{fn:fs(q).fn,options:[q,z]}:void 0,...U}),w&&Ss({...U}),As({...U,apply:({elements:e,rects:t,availableWidth:o,availableHeight:n})=>{const{width:a,height:s}=t.reference,i=e.floating.style;i.setProperty("--radix-popper-available-width",`${o}px`),i.setProperty("--radix-popper-available-height",`${n}px`),i.setProperty("--radix-popper-anchor-width",`${a}px`),i.setProperty("--radix-popper-anchor-height",`${s}px`)}}),I&&Ts({element:I,padding:h}),Vs({arrowWidth:L,arrowHeight:F}),x&&Ps({strategy:"referenceHidden",...U})]});var q,z;const[V,Q]=Qs(B),$=Fn(S);Wn(()=>{W&&(null==$||$())},[W,$]);const J=null==(i=G.arrow)?void 0:i.x,Y=null==(r=G.arrow)?void 0:r.y,X=0!==(null==(l=G.arrow)?void 0:l.centerOffset),[Z,ee]=e.useState();return Wn(()=>{T&&ee(window.getComputedStyle(T).zIndex)},[T]),ie.jsx("div",{ref:K.setFloating,"data-radix-popper-content-wrapper":"",style:{...H,transform:W?H.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:Z,"--radix-popper-transform-origin":[null==(c=G.transformOrigin)?void 0:c.x,null==(d=G.transformOrigin)?void 0:d.y].join(" "),...(null==(u=G.hide)?void 0:u.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:o.dir,children:ie.jsx(Ks,{scope:g,placedSide:V,onArrowChange:M,arrowX:J,arrowY:Y,shouldHideArrow:X,children:ie.jsx(Ln.div,{"data-side":V,"data-align":Q,...A,ref:E,style:{...A.style,animation:W?void 0:"none"}})})})});Bs.displayName=Us;var Ws="PopperArrow",Gs={top:"bottom",right:"left",bottom:"top",left:"right"},qs=e.forwardRef(function(e,t){const{__scopePopper:o,...n}=e,a=Hs(Ws,o),s=Gs[a.placedSide];return ie.jsx("span",{ref:a.onArrowChange,style:{position:"absolute",left:a.arrowX,top:a.arrowY,[s]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[a.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[a.placedSide],visibility:a.shouldHideArrow?"hidden":void 0},children:ie.jsx(Es,{...n,ref:t,style:{...n.style,display:"block"}})})});function zs(e){return null!==e}qs.displayName=Ws;var Vs=e=>({name:"transformOrigin",options:e,fn(t){var o,n,a,s,i;const{placement:r,rects:l,middlewareData:c}=t,d=0!==(null==(o=c.arrow)?void 0:o.centerOffset),u=d?0:e.arrowWidth,g=d?0:e.arrowHeight,[m,p]=Qs(r),f={start:"0%",center:"50%",end:"100%"}[p],y=(null!=(a=null==(n=c.arrow)?void 0:n.x)?a:0)+u/2,h=(null!=(i=null==(s=c.arrow)?void 0:s.y)?i:0)+g/2;let w="",v="";return"bottom"===m?(w=d?f:`${y}px`,v=-g+"px"):"top"===m?(w=d?f:`${y}px`,v=`${l.floating.height+g}px`):"right"===m?(w=-g+"px",v=d?f:`${h}px`):"left"===m&&(w=`${l.floating.width+g}px`,v=d?f:`${h}px`),{data:{x:w,y:v}}}});function Qs(e){const[t,o="center"]=e.split("-");return[t,o]}var $s=js,Js=_s,Ys=Bs,Xs=qs,Zs=e.forwardRef((t,o)=>{var a;const{container:s,...i}=t,[r,l]=e.useState(!1);Wn(()=>l(!0),[]);const c=s||r&&(null==(a=null==globalThis?void 0:globalThis.document)?void 0:a.body);return c?n.createPortal(ie.jsx(Ln.div,{...i,ref:o}),c):null});Zs.displayName="Portal";var ei=t=>{const{present:o,children:n}=t,a=function(t){const[o,n]=e.useState(),a=e.useRef(null),s=e.useRef(t),i=e.useRef("none"),r=t?"mounted":"unmounted",[l,c]=function(t,o){return e.useReducer((e,t)=>{const n=o[e][t];return null!=n?n:e},t)}(r,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return e.useEffect(()=>{const e=ti(a.current);i.current="mounted"===l?e:"none"},[l]),Wn(()=>{const e=a.current,o=s.current;if(o!==t){const n=i.current,a=ti(e);if(t)c("MOUNT");else if("none"===a||"none"===(null==e?void 0:e.display))c("UNMOUNT");else{c(o&&n!==a?"ANIMATION_OUT":"UNMOUNT")}s.current=t}},[t,c]),Wn(()=>{var e;if(o){let t;const n=null!=(e=o.ownerDocument.defaultView)?e:window,r=e=>{const i=ti(a.current).includes(CSS.escape(e.animationName));if(e.target===o&&i&&(c("ANIMATION_END"),!s.current)){const e=o.style.animationFillMode;o.style.animationFillMode="forwards",t=n.setTimeout(()=>{"forwards"===o.style.animationFillMode&&(o.style.animationFillMode=e)})}},l=e=>{e.target===o&&(i.current=ti(a.current))};return o.addEventListener("animationstart",l),o.addEventListener("animationcancel",r),o.addEventListener("animationend",r),()=>{n.clearTimeout(t),o.removeEventListener("animationstart",l),o.removeEventListener("animationcancel",r),o.removeEventListener("animationend",r)}}c("ANIMATION_END")},[o,c]),{isPresent:["mounted","unmountSuspended"].includes(l),ref:e.useCallback(e=>{a.current=e?getComputedStyle(e):null,n(e)},[])}}(o),s="function"==typeof n?n({present:a.isPresent}):e.Children.only(n),i=Yt(a.ref,function(e){var t,o;let n=null==(t=Object.getOwnPropertyDescriptor(e.props,"ref"))?void 0:t.get,a=n&&"isReactWarning"in n&&n.isReactWarning;if(a)return e.ref;if(n=null==(o=Object.getOwnPropertyDescriptor(e,"ref"))?void 0:o.get,a=n&&"isReactWarning"in n&&n.isReactWarning,a)return e.props.ref;return e.props.ref||e.ref}(s));return"function"==typeof n||a.isPresent?e.cloneElement(s,{ref:i}):null};function ti(e){return(null==e?void 0:e.animationName)||"none"}ei.displayName="Presence";var oi=Symbol("radix.slottable");function ni(e){const t=({children:e})=>ie.jsx(ie.Fragment,{children:e});return t.displayName=`${e}.Slottable`,t.__radixId=oi,t}var ai=o[" useInsertionEffect ".trim().toString()]||Wn;function si({prop:t,defaultProp:o,onChange:n=()=>{},caller:a}){const[s,i,r]=function({defaultProp:t,onChange:o}){const[n,a]=e.useState(t),s=e.useRef(n),i=e.useRef(o);return ai(()=>{i.current=o},[o]),e.useEffect(()=>{var e;s.current!==n&&(null==(e=i.current)||e.call(i,n),s.current=n)},[n,s]),[n,a,i]}({defaultProp:o,onChange:n}),l=void 0!==t,c=l?t:s;{const o=e.useRef(void 0!==t);e.useEffect(()=>{const e=o.current;if(e!==l){}o.current=l},[l,a])}const d=e.useCallback(e=>{var o;if(l){const n=function(e){return"function"==typeof e}(e)?e(t):e;n!==t&&(null==(o=r.current)||o.call(r,n))}else i(e)},[l,t,i,r]);return[c,d]}var ii=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),ri=e.forwardRef((e,t)=>ie.jsx(Ln.span,{...e,ref:t,style:{...ii,...e.style}}));ri.displayName="VisuallyHidden";var li=ri,[ci]=Tn("Tooltip",[Ls]),di=Ls(),ui="TooltipProvider",gi=700,mi="tooltip.open",[pi,fi]=ci(ui),yi=t=>{const{__scopeTooltip:o,delayDuration:n=gi,skipDelayDuration:a=300,disableHoverableContent:s=!1,children:i}=t,r=e.useRef(!0),l=e.useRef(!1),c=e.useRef(0);return e.useEffect(()=>{const e=c.current;return()=>window.clearTimeout(e)},[]),ie.jsx(pi,{scope:o,isOpenDelayedRef:r,delayDuration:n,onOpen:e.useCallback(()=>{window.clearTimeout(c.current),r.current=!1},[]),onClose:e.useCallback(()=>{window.clearTimeout(c.current),c.current=window.setTimeout(()=>r.current=!0,a)},[a]),isPointerInTransitRef:l,onPointerInTransitChange:e.useCallback(e=>{l.current=e},[]),disableHoverableContent:s,children:i})};yi.displayName=ui;var hi="Tooltip",[wi,vi]=ci(hi),bi=t=>{const{__scopeTooltip:o,children:n,open:a,defaultOpen:s,onOpenChange:i,disableHoverableContent:r,delayDuration:l}=t,c=fi(hi,t.__scopeTooltip),d=di(o),[u,g]=e.useState(null),m=zn(),p=e.useRef(0),f=null!=r?r:c.disableHoverableContent,y=null!=l?l:c.delayDuration,h=e.useRef(!1),[w,v]=si({prop:a,defaultProp:null!=s&&s,onChange:e=>{e?(c.onOpen(),document.dispatchEvent(new CustomEvent(mi))):c.onClose(),null==i||i(e)},caller:hi}),b=e.useMemo(()=>w?h.current?"delayed-open":"instant-open":"closed",[w]),k=e.useCallback(()=>{window.clearTimeout(p.current),p.current=0,h.current=!1,v(!0)},[v]),x=e.useCallback(()=>{window.clearTimeout(p.current),p.current=0,v(!1)},[v]),C=e.useCallback(()=>{window.clearTimeout(p.current),p.current=window.setTimeout(()=>{h.current=!0,v(!0),p.current=0},y)},[y,v]);return e.useEffect(()=>()=>{p.current&&(window.clearTimeout(p.current),p.current=0)},[]),ie.jsx($s,{...d,children:ie.jsx(wi,{scope:o,contentId:m,open:w,stateAttribute:b,trigger:u,onTriggerChange:g,onTriggerEnter:e.useCallback(()=>{c.isOpenDelayedRef.current?C():k()},[c.isOpenDelayedRef,C,k]),onTriggerLeave:e.useCallback(()=>{f?x():(window.clearTimeout(p.current),p.current=0)},[x,f]),onOpen:k,onClose:x,disableHoverableContent:f,children:n})})};bi.displayName=hi;var ki="TooltipTrigger",xi=e.forwardRef((t,o)=>{const{__scopeTooltip:n,...a}=t,s=vi(ki,n),i=fi(ki,n),r=di(n),l=Yt(o,e.useRef(null),s.onTriggerChange),c=e.useRef(!1),d=e.useRef(!1),u=e.useCallback(()=>c.current=!1,[]);return e.useEffect(()=>()=>document.removeEventListener("pointerup",u),[u]),ie.jsx(Js,{asChild:!0,...r,children:ie.jsx(Ln.button,{"aria-describedby":s.open?s.contentId:void 0,"data-state":s.stateAttribute,...a,ref:l,onPointerMove:An(t.onPointerMove,e=>{"touch"!==e.pointerType&&(d.current||i.isPointerInTransitRef.current||(s.onTriggerEnter(),d.current=!0))}),onPointerLeave:An(t.onPointerLeave,()=>{s.onTriggerLeave(),d.current=!1}),onPointerDown:An(t.onPointerDown,()=>{s.open&&s.onClose(),c.current=!0,document.addEventListener("pointerup",u,{once:!0})}),onFocus:An(t.onFocus,()=>{c.current||s.onOpen()}),onBlur:An(t.onBlur,s.onClose),onClick:An(t.onClick,s.onClose)})})});xi.displayName=ki;var Ci="TooltipPortal",[Si,Ai]=ci(Ci,{forceMount:void 0}),Pi=e=>{const{__scopeTooltip:t,forceMount:o,children:n,container:a}=e,s=vi(Ci,t);return ie.jsx(Si,{scope:t,forceMount:o,children:ie.jsx(ei,{present:o||s.open,children:ie.jsx(Zs,{asChild:!0,container:a,children:n})})})};Pi.displayName=Ci;var Ti="TooltipContent",Di=e.forwardRef((e,t)=>{const o=Ai(Ti,e.__scopeTooltip),{forceMount:n=o.forceMount,side:a="top",...s}=e,i=vi(Ti,e.__scopeTooltip);return ie.jsx(ei,{present:n||i.open,children:i.disableHoverableContent?ie.jsx(Li,{side:a,...s,ref:t}):ie.jsx(Ei,{side:a,...s,ref:t})})}),Ei=e.forwardRef((t,o)=>{const n=vi(Ti,t.__scopeTooltip),a=fi(Ti,t.__scopeTooltip),s=e.useRef(null),i=Yt(o,s),[r,l]=e.useState(null),{trigger:c,onClose:d}=n,u=s.current,{onPointerInTransitChange:g}=a,m=e.useCallback(()=>{l(null),g(!1)},[g]),p=e.useCallback((e,t)=>{const o=e.currentTarget,n={x:e.clientX,y:e.clientY},a=function(e,t,o=5){const n=[];switch(t){case"top":n.push({x:e.x-o,y:e.y+o},{x:e.x+o,y:e.y+o});break;case"bottom":n.push({x:e.x-o,y:e.y-o},{x:e.x+o,y:e.y-o});break;case"left":n.push({x:e.x+o,y:e.y-o},{x:e.x+o,y:e.y+o});break;case"right":n.push({x:e.x-o,y:e.y-o},{x:e.x-o,y:e.y+o})}return n}(n,function(e,t){const o=Math.abs(t.top-e.y),n=Math.abs(t.bottom-e.y),a=Math.abs(t.right-e.x),s=Math.abs(t.left-e.x);switch(Math.min(o,n,a,s)){case s:return"left";case a:return"right";case o:return"top";case n:return"bottom";default:throw new Error("unreachable")}}(n,o.getBoundingClientRect())),s=function(e){const t=e.slice();return t.sort((e,t)=>e.xt.x?1:e.yt.y?1:0),function(e){if(e.length<=1)return e.slice();const t=[];for(let n=0;n=2;){const e=t[t.length-1],n=t[t.length-2];if(!((e.x-n.x)*(o.y-n.y)>=(e.y-n.y)*(o.x-n.x)))break;t.pop()}t.push(o)}t.pop();const o=[];for(let n=e.length-1;n>=0;n--){const t=e[n];for(;o.length>=2;){const e=o[o.length-1],n=o[o.length-2];if(!((e.x-n.x)*(t.y-n.y)>=(e.y-n.y)*(t.x-n.x)))break;o.pop()}o.push(t)}return o.pop(),1===t.length&&1===o.length&&t[0].x===o[0].x&&t[0].y===o[0].y?t:t.concat(o)}(t)}([...a,...function(e){const{top:t,right:o,bottom:n,left:a}=e;return[{x:a,y:t},{x:o,y:t},{x:o,y:n},{x:a,y:n}]}(t.getBoundingClientRect())]);l(s),g(!0)},[g]);return e.useEffect(()=>()=>m(),[m]),e.useEffect(()=>{if(c&&u){const e=e=>p(e,u),t=e=>p(e,c);return c.addEventListener("pointerleave",e),u.addEventListener("pointerleave",t),()=>{c.removeEventListener("pointerleave",e),u.removeEventListener("pointerleave",t)}}},[c,u,p,m]),e.useEffect(()=>{if(r){const e=e=>{const t=e.target,o={x:e.clientX,y:e.clientY},n=(null==c?void 0:c.contains(t))||(null==u?void 0:u.contains(t)),a=!function(e,t){const{x:o,y:n}=e;let a=!1;for(let s=0,i=t.length-1;sn!=u>n&&o<(d-l)*(n-c)/(u-c)+l&&(a=!a)}return a}(o,r);n?m():a&&(m(),d())};return document.addEventListener("pointermove",e),()=>document.removeEventListener("pointermove",e)}},[c,u,r,d,m]),ie.jsx(Li,{...t,ref:i})}),[Ii,Mi]=ci(hi,{isInside:!1}),Ri=ni("TooltipContent"),Li=e.forwardRef((t,o)=>{const{__scopeTooltip:n,children:a,"aria-label":s,onEscapeKeyDown:i,onPointerDownOutside:r,...l}=t,c=vi(Ti,n),d=di(n),{onClose:u}=c;return e.useEffect(()=>(document.addEventListener(mi,u),()=>document.removeEventListener(mi,u)),[u]),e.useEffect(()=>{if(c.trigger){const e=e=>{const t=e.target;(null==t?void 0:t.contains(c.trigger))&&u()};return window.addEventListener("scroll",e,{capture:!0}),()=>window.removeEventListener("scroll",e,{capture:!0})}},[c.trigger,u]),ie.jsx(Kn,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:i,onPointerDownOutside:r,onFocusOutside:e=>e.preventDefault(),onDismiss:u,children:ie.jsxs(Ys,{"data-state":c.stateAttribute,...d,...l,ref:o,style:{...l.style,"--radix-tooltip-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-tooltip-content-available-width":"var(--radix-popper-available-width)","--radix-tooltip-content-available-height":"var(--radix-popper-available-height)","--radix-tooltip-trigger-width":"var(--radix-popper-anchor-width)","--radix-tooltip-trigger-height":"var(--radix-popper-anchor-height)"},children:[ie.jsx(Ri,{children:a}),ie.jsx(Ii,{scope:n,isInside:!0,children:ie.jsx(li,{id:c.contentId,role:"tooltip",children:s||a})})]})})});Di.displayName=Ti;var Fi="TooltipArrow",Ni=e.forwardRef((e,t)=>{const{__scopeTooltip:o,...n}=e,a=di(o);return Mi(Fi,o).isInside?null:ie.jsx(Xs,{...a,...n,ref:t})});Ni.displayName=Fi;var ji=yi,Oi=bi,_i=xi,Ui=Pi,Ki=Di,Hi=Ni;function Bi({delayDuration:e=0,...t}){return ie.jsx(ji,{"data-slot":"tooltip-provider",delayDuration:e,...t})}function Wi({...e}){return ie.jsx(Oi,{"data-slot":"tooltip",...e})}function Gi({...e}){return ie.jsx(_i,{"data-slot":"tooltip-trigger",...e})}function qi({className:e,sideOffset:t=4,children:o,...n}){return ie.jsx(Ui,{children:ie.jsxs(Ki,{"data-slot":"tooltip-content",sideOffset:t,className:xn("z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",e),...n,children:[o,ie.jsx(Hi,{className:"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground"})]})})}var zi=(e,t,o,n,a,s,i,r)=>{let l=document.documentElement,c=["light","dark"];function d(t){(Array.isArray(e)?e:[e]).forEach(e=>{let o="class"===e,n=o&&s?a.map(e=>s[e]||e):a;o?(l.classList.remove(...n),l.classList.add(s&&s[t]?s[t]:t)):l.setAttribute(e,t)}),function(e){r&&c.includes(e)&&(l.style.colorScheme=e)}(t)}if(n)d(n);else try{let e=localStorage.getItem(t)||o;d(i&&"system"===e?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":e)}catch(Tc){}},Vi=["light","dark"],Qi="(prefers-color-scheme: dark)",$i="undefined"==typeof window,Ji=e.createContext(void 0),Yi={setTheme:e=>{},themes:[]},Xi=t=>e.useContext(Ji)?e.createElement(e.Fragment,null,t.children):e.createElement(er,{...t}),Zi=["light","dark"],er=({forcedTheme:t,disableTransitionOnChange:o=!1,enableSystem:n=!0,enableColorScheme:a=!0,storageKey:s="theme",themes:i=Zi,defaultTheme:r=(n?"system":"light"),attribute:l="data-theme",value:c,children:d,nonce:u,scriptProps:g})=>{let[m,p]=e.useState(()=>or(s,r)),[f,y]=e.useState(()=>"system"===m?ar():m),h=c?Object.values(c):i,w=e.useCallback(e=>{let t=e;if(!t)return;"system"===e&&n&&(t=ar());let s=c?c[t]:t,i=o?nr(u):null,d=document.documentElement,g=e=>{"class"===e?(d.classList.remove(...h),s&&d.classList.add(s)):e.startsWith("data-")&&(s?d.setAttribute(e,s):d.removeAttribute(e))};if(Array.isArray(l)?l.forEach(g):g(l),a){let e=Vi.includes(r)?r:null,o=Vi.includes(t)?t:e;d.style.colorScheme=o}null==i||i()},[u]),v=e.useCallback(e=>{let t="function"==typeof e?e(m):e;p(t);try{localStorage.setItem(s,t)}catch(o){}},[m]),b=e.useCallback(e=>{let o=ar(e);y(o),"system"===m&&n&&!t&&w("system")},[m,t]);e.useEffect(()=>{let e=window.matchMedia(Qi);return e.addListener(b),b(e),()=>e.removeListener(b)},[b]),e.useEffect(()=>{let e=e=>{e.key===s&&(e.newValue?p(e.newValue):v(r))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)},[v]),e.useEffect(()=>{w(null!=t?t:m)},[t,m]);let k=e.useMemo(()=>({theme:m,setTheme:v,forcedTheme:t,resolvedTheme:"system"===m?f:m,themes:n?[...i,"system"]:i,systemTheme:n?f:void 0}),[m,v,t,f,n,i]);return e.createElement(Ji.Provider,{value:k},e.createElement(tr,{forcedTheme:t,storageKey:s,attribute:l,enableSystem:n,enableColorScheme:a,defaultTheme:r,value:c,themes:i,nonce:u,scriptProps:g}),d)},tr=e.memo(({forcedTheme:t,storageKey:o,attribute:n,enableSystem:a,enableColorScheme:s,defaultTheme:i,value:r,themes:l,nonce:c,scriptProps:d})=>{let u=JSON.stringify([n,o,i,t,l,r,a,s]).slice(1,-1);return e.createElement("script",{...d,suppressHydrationWarning:!0,nonce:"undefined"==typeof window?c:"",dangerouslySetInnerHTML:{__html:`(${zi.toString()})(${u})`}})}),or=(e,t)=>{if($i)return;let o;try{o=localStorage.getItem(e)||void 0}catch(n){}return o||t},nr=e=>{let t=document.createElement("style");return e&&t.setAttribute("nonce",e),t.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),document.head.appendChild(t),()=>{window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(t)},1)}},ar=e=>(e||(e=window.matchMedia(Qi)),e.matches?"dark":"light");const sr="undefined"!=typeof document?a.useLayoutEffect:()=>{},ir=e=>{var t;return null!==(t=null==e?void 0:e.ownerDocument)&&void 0!==t?t:document},rr=e=>{if(e&&"window"in e&&e.window===e)return e;return ir(e).defaultView||window};function lr(e,t){return!(!t||!e)&&e.contains(t)}const cr=(e=document)=>e.activeElement;function dr(e){return e.target}function ur(e){if(function(){if(null==gr){gr=!1;try{document.createElement("div").focus({get preventScroll(){return gr=!0,!0}})}catch{}}return gr}())e.focus({preventScroll:!0});else{let t=function(e){let t=e.parentNode,o=[],n=document.scrollingElement||document.documentElement;for(;t instanceof HTMLElement&&t!==n;)(t.offsetHeighte.test(t.brand))||e.test(window.navigator.userAgent)}function pr(e){var t;return"undefined"!=typeof window&&null!=window.navigator&&e.test((null===(t=window.navigator.userAgentData)||void 0===t?void 0:t.platform)||window.navigator.platform)}function fr(e){let t=null;return()=>(null==t&&(t=e()),t)}const yr=fr(function(){return pr(/^Mac/i)}),hr=fr(function(){return pr(/^iPad/i)||yr()&&navigator.maxTouchPoints>1}),wr=fr(function(){return mr(/AppleWebKit/i)&&!vr()}),vr=fr(function(){return mr(/Chrome/i)}),br=fr(function(){return mr(/Android/i)}),kr=fr(function(){return mr(/Firefox/i)});function xr(e,t,o=!0){var n,a;let{metaKey:s,ctrlKey:i,altKey:r,shiftKey:l}=t;kr()&&(null===(a=window.event)||void 0===a||null===(n=a.type)||void 0===n?void 0:n.startsWith("key"))&&"_blank"===e.target&&(yr()?s=!0:i=!0);let c=wr()&&yr()&&!hr()?new KeyboardEvent("keydown",{keyIdentifier:"Enter",metaKey:s,ctrlKey:i,altKey:r,shiftKey:l}):new MouseEvent("click",{metaKey:s,ctrlKey:i,altKey:r,shiftKey:l,detail:1,bubbles:!0,cancelable:!0});xr.isOpening=o,ur(e),e.dispatchEvent(c),xr.isOpening=!1}function Cr(){let t=e.useRef(new Map),o=e.useCallback((e,o,n,a)=>{let s=(null==a?void 0:a.once)?(...e)=>{t.current.delete(n),n(...e)}:n;t.current.set(n,{type:o,eventTarget:e,fn:s,options:a}),e.addEventListener(o,s,a)},[]),n=e.useCallback((e,o,n,a)=>{var s;let i=(null===(s=t.current.get(n))||void 0===s?void 0:s.fn)||n;e.removeEventListener(o,i,a),t.current.delete(n)},[]),a=e.useCallback(()=>{t.current.forEach((e,t)=>{n(e.eventTarget,e.type,t,e.options)})},[n]);return e.useEffect(()=>a,[a]),{addGlobalListener:o,removeGlobalListener:n,removeAllGlobalListeners:a}}function Sr(e){let t=e;return t.nativeEvent=e,t.isDefaultPrevented=()=>t.defaultPrevented,t.isPropagationStopped=()=>t.cancelBubble,t.persist=()=>{},t}function Ar(t){let o=e.useRef({isFocused:!1,observer:null});return sr(()=>{const e=o.current;return()=>{e.observer&&(e.observer.disconnect(),e.observer=null)}},[]),e.useCallback(e=>{if(e.target instanceof HTMLButtonElement||e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement||e.target instanceof HTMLSelectElement){o.current.isFocused=!0;let n=e.target,a=e=>{if(o.current.isFocused=!1,n.disabled){let o=Sr(e);null==t||t(o)}o.current.observer&&(o.current.observer.disconnect(),o.current.observer=null)};n.addEventListener("focusout",a,{once:!0}),o.current.observer=new MutationObserver(()=>{if(o.current.isFocused&&n.disabled){var e;null===(e=o.current.observer)||void 0===e||e.disconnect();let t=n===document.activeElement?null:document.activeElement;n.dispatchEvent(new FocusEvent("blur",{relatedTarget:t})),n.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:t}))}}),o.current.observer.observe(n,{attributes:!0,attributeFilter:["disabled"]})}},[t])}xr.isOpening=!1;let Pr=null;const Tr=new Set;let Dr=new Map,Er=!1,Ir=!1;const Mr={Tab:!0,Escape:!0};function Rr(e,t){for(let o of Tr)o(e,t)}function Lr(e){Er=!0,!xr.isOpening&&function(e){return!(e.metaKey||!yr()&&e.altKey||e.ctrlKey||"Control"===e.key||"Shift"===e.key||"Meta"===e.key)}(e)&&(Pr="keyboard",Rr("keyboard",e))}function Fr(e){Pr="pointer",!("pointerType"in e)||e.pointerType,"mousedown"!==e.type&&"pointerdown"!==e.type||(Er=!0,Rr("pointer",e))}function Nr(e){var t;!xr.isOpening&&(""===(t=e).pointerType&&t.isTrusted||(br()&&t.pointerType?"click"===t.type&&1===t.buttons:0===t.detail&&!t.pointerType))&&(Er=!0,Pr="virtual")}function jr(e){e.target!==window&&e.target!==document&&e.isTrusted&&(Er||Ir||(Pr="virtual",Rr("virtual",e)),Er=!1,Ir=!1)}function Or(){Er=!1,Ir=!0}function _r(e){if("undefined"==typeof window||"undefined"==typeof document||Dr.get(rr(e)))return;const t=rr(e),o=ir(e);let n=t.HTMLElement.prototype.focus;t.HTMLElement.prototype.focus=function(){Er=!0,n.apply(this,arguments)},o.addEventListener("keydown",Lr,!0),o.addEventListener("keyup",Lr,!0),o.addEventListener("click",Nr,!0),t.addEventListener("focus",jr,!0),t.addEventListener("blur",Or,!1),"undefined"!=typeof PointerEvent&&(o.addEventListener("pointerdown",Fr,!0),o.addEventListener("pointermove",Fr,!0),o.addEventListener("pointerup",Fr,!0)),t.addEventListener("beforeunload",()=>{Ur(e)},{once:!0}),Dr.set(t,{focus:n})}const Ur=(e,t)=>{const o=rr(e),n=ir(e);t&&n.removeEventListener("DOMContentLoaded",t),Dr.has(o)&&(o.HTMLElement.prototype.focus=Dr.get(o).focus,n.removeEventListener("keydown",Lr,!0),n.removeEventListener("keyup",Lr,!0),n.removeEventListener("click",Nr,!0),o.removeEventListener("focus",jr,!0),o.removeEventListener("blur",Or,!1),"undefined"!=typeof PointerEvent&&(n.removeEventListener("pointerdown",Fr,!0),n.removeEventListener("pointermove",Fr,!0),n.removeEventListener("pointerup",Fr,!0)),Dr.delete(o))};function Kr(){return"pointer"!==Pr}"undefined"!=typeof document&&function(e){const t=ir(e);let o;"loading"!==t.readyState?_r(e):(o=()=>{_r(e)},t.addEventListener("DOMContentLoaded",o))}();const Hr=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]);function Br(t,o,n){_r(),e.useEffect(()=>{if(!1===(null==n?void 0:n.enabled))return;let e=(e,o)=>{(function(e,t,o){let n=ir(null==o?void 0:o.target);const a="undefined"!=typeof window?rr(null==o?void 0:o.target).HTMLInputElement:HTMLInputElement,s="undefined"!=typeof window?rr(null==o?void 0:o.target).HTMLTextAreaElement:HTMLTextAreaElement,i="undefined"!=typeof window?rr(null==o?void 0:o.target).HTMLElement:HTMLElement,r="undefined"!=typeof window?rr(null==o?void 0:o.target).KeyboardEvent:KeyboardEvent;return!((e=e||n.activeElement instanceof a&&!Hr.has(n.activeElement.type)||n.activeElement instanceof s||n.activeElement instanceof i&&n.activeElement.isContentEditable)&&"keyboard"===t&&o instanceof r&&!Mr[o.key])})(!!(null==n?void 0:n.isTextInput),e,o)&&t(Kr())};return Tr.add(e),()=>{Tr.delete(e)}},o)}function Wr(t){let{isDisabled:o,onBlurWithin:n,onFocusWithin:a,onFocusWithinChange:s}=t,i=e.useRef({isFocusWithin:!1}),{addGlobalListener:r,removeAllGlobalListeners:l}=Cr(),c=e.useCallback(e=>{lr(e.currentTarget,e.target)&&i.current.isFocusWithin&&!lr(e.currentTarget,e.relatedTarget)&&(i.current.isFocusWithin=!1,l(),n&&n(e),s&&s(!1))},[n,s,i,l]),d=Ar(c),u=e.useCallback(e=>{if(!lr(e.currentTarget,e.target))return;const t=ir(e.target),o=cr(t);if(!i.current.isFocusWithin&&o===dr(e.nativeEvent)){a&&a(e),s&&s(!0),i.current.isFocusWithin=!0,d(e);let o=e.currentTarget;r(t,"focus",e=>{if(i.current.isFocusWithin&&!lr(o,e.target)){let n=new t.defaultView.FocusEvent("blur",{relatedTarget:e.target});!function(e,t){Object.defineProperty(e,"target",{value:t}),Object.defineProperty(e,"currentTarget",{value:t})}(n,o);let a=Sr(n);c(a)}},{capture:!0})}},[a,s,d,r,c]);return o?{focusWithinProps:{onFocus:void 0,onBlur:void 0}}:{focusWithinProps:{onFocus:u,onBlur:c}}}let Gr=!1,qr=0;function zr(e){"touch"===e.pointerType&&(Gr=!0,setTimeout(()=>{Gr=!1},50))}function Vr(){if("undefined"!=typeof document)return 0===qr&&"undefined"!=typeof PointerEvent&&document.addEventListener("pointerup",zr),qr++,()=>{qr--,qr>0||"undefined"!=typeof PointerEvent&&document.removeEventListener("pointerup",zr)}}function Qr(t){let{onHoverStart:o,onHoverChange:n,onHoverEnd:a,isDisabled:s}=t,[i,r]=e.useState(!1),l=e.useRef({isHovered:!1,ignoreEmulatedMouseEvents:!1,pointerType:"",target:null}).current;e.useEffect(Vr,[]);let{addGlobalListener:c,removeAllGlobalListeners:d}=Cr(),{hoverProps:u,triggerHoverEnd:g}=e.useMemo(()=>{let e=(e,t)=>{let o=l.target;l.pointerType="",l.target=null,"touch"!==t&&l.isHovered&&o&&(l.isHovered=!1,d(),a&&a({type:"hoverend",target:o,pointerType:t}),n&&n(!1),r(!1))},t={};return"undefined"!=typeof PointerEvent&&(t.onPointerEnter=t=>{Gr&&"mouse"===t.pointerType||((t,a)=>{if(l.pointerType=a,s||"touch"===a||l.isHovered||!lr(t.currentTarget,t.target))return;l.isHovered=!0;let i=t.currentTarget;l.target=i,c(ir(t.target),"pointerover",t=>{l.isHovered&&l.target&&!lr(l.target,t.target)&&e(t,t.pointerType)},{capture:!0}),o&&o({type:"hoverstart",target:i,pointerType:a}),n&&n(!0),r(!0)})(t,t.pointerType)},t.onPointerLeave=t=>{!s&&lr(t.currentTarget,t.target)&&e(t,t.pointerType)}),{hoverProps:t,triggerHoverEnd:e}},[o,n,a,s,l,c,d]);return e.useEffect(()=>{s&&g({currentTarget:l.target},l.pointerType)},[s]),{hoverProps:u,isHovered:i}}function $r(t={}){let{autoFocus:o=!1,isTextInput:n,within:a}=t,s=e.useRef({isFocused:!1,isFocusVisible:o||Kr()}),[i,r]=e.useState(!1),[l,c]=e.useState(()=>s.current.isFocused&&s.current.isFocusVisible),d=e.useCallback(()=>c(s.current.isFocused&&s.current.isFocusVisible),[]),u=e.useCallback(e=>{s.current.isFocused=e,s.current.isFocusVisible=Kr(),r(e),d()},[d]);Br(e=>{s.current.isFocusVisible=e,d()},[n,i],{enabled:i,isTextInput:n});let{focusProps:g}=function(t){let{isDisabled:o,onFocus:n,onBlur:a,onFocusChange:s}=t;const i=e.useCallback(e=>{if(e.target===e.currentTarget)return a&&a(e),s&&s(!1),!0},[a,s]),r=Ar(i),l=e.useCallback(e=>{const t=ir(e.target),o=t?cr(t):cr();e.target===e.currentTarget&&o===dr(e.nativeEvent)&&(n&&n(e),s&&s(!0),r(e))},[s,n,r]);return{focusProps:{onFocus:!o&&(n||s||a)?l:void 0,onBlur:o||!a&&!s?void 0:i}}}({isDisabled:a,onFocusChange:u}),{focusWithinProps:m}=Wr({isDisabled:!a,onFocusWithinChange:u});return{isFocused:i,isFocusVisible:l,focusProps:a?m:g}}var Jr=Object.defineProperty,Yr=(e,t,o)=>(((e,t,o)=>{t in e?Jr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o})(e,"symbol"!=typeof t?t+"":t,o),o);let Xr=new class{constructor(){Yr(this,"current",this.detect()),Yr(this,"handoffState","pending"),Yr(this,"currentId",0)}set(e){this.current!==e&&(this.handoffState="pending",this.currentId=0,this.current=e)}reset(){this.set(this.detect())}nextId(){return++this.currentId}get isServer(){return"server"===this.current}get isClient(){return"client"===this.current}detect(){return"undefined"==typeof window||"undefined"==typeof document?"server":"client"}handoff(){"pending"===this.handoffState&&(this.handoffState="complete")}get isHandoffComplete(){return"complete"===this.handoffState}};function Zr(e){var t;return Xr.isServer?null:null==e?document:null!=(t=null==e?void 0:e.ownerDocument)?t:document}function el(e){var t,o;return Xr.isServer?null:null==e?document:null!=(o=null==(t=null==e?void 0:e.getRootNode)?void 0:t.call(e))?o:document}function tl(e){var t,o;return null!=(o=null==(t=el(e))?void 0:t.activeElement)?o:null}function ol(e){"function"==typeof queueMicrotask?queueMicrotask(e):Promise.resolve().then(e).catch(e=>setTimeout(()=>{throw e}))}function nl(){let e=[],t={addEventListener:(e,o,n,a)=>(e.addEventListener(o,n,a),t.add(()=>e.removeEventListener(o,n,a))),requestAnimationFrame(...e){let o=requestAnimationFrame(...e);return t.add(()=>cancelAnimationFrame(o))},nextFrame:(...e)=>t.requestAnimationFrame(()=>t.requestAnimationFrame(...e)),setTimeout(...e){let o=setTimeout(...e);return t.add(()=>clearTimeout(o))},microTask(...e){let o={current:!0};return ol(()=>{o.current&&e[0]()}),t.add(()=>{o.current=!1})},style(e,t,o){let n=e.style.getPropertyValue(t);return Object.assign(e.style,{[t]:o}),this.add(()=>{Object.assign(e.style,{[t]:n})})},group(e){let t=nl();return e(t),this.add(()=>t.dispose())},add:t=>(e.includes(t)||e.push(t),()=>{let o=e.indexOf(t);if(o>=0)for(let t of e.splice(o,1))t()}),dispose(){for(let t of e.splice(0))t()}};return t}function al(){let[t]=e.useState(nl);return e.useEffect(()=>()=>t.dispose(),[t]),t}let sl=(t,o)=>{Xr.isServer?e.useEffect(t,o):e.useLayoutEffect(t,o)};function il(t){let o=e.useRef(t);return sl(()=>{o.current=t},[t]),o}let rl=function(e){let t=il(e);return a.useCallback((...e)=>t.current(...e),[t])};function ll(t){return e.useMemo(()=>t,Object.values(t))}let cl=e.createContext(void 0);function dl(){return e.useContext(cl)}function ul(...e){return Array.from(new Set(e.flatMap(e=>"string"==typeof e?e.split(" "):[]))).filter(Boolean).join(" ")}function gl(e,t,...o){if(e in t){let n=t[e];return"function"==typeof n?n(...o):n}let n=new Error(`Tried to handle "${e}" but there is no handler defined. Only defined handlers are: ${Object.keys(t).map(e=>`"${e}"`).join(", ")}.`);throw Error.captureStackTrace&&Error.captureStackTrace(n,gl),n}var ml,pl=((ml=pl||{})[ml.None=0]="None",ml[ml.RenderStrategy=1]="RenderStrategy",ml[ml.Static=2]="Static",ml),fl=(e=>(e[e.Unmount=0]="Unmount",e[e.Hidden=1]="Hidden",e))(fl||{});function yl(){let t=function(){let t=e.useRef([]),o=e.useCallback(e=>{for(let o of t.current)null!=o&&("function"==typeof o?o(e):o.current=e)},[]);return(...e)=>{if(!e.every(e=>null==e))return t.current=e,o}}();return e.useCallback(e=>function({ourProps:e,theirProps:t,slot:o,defaultTag:n,features:a,visible:s=!0,name:i,mergeRefs:r}){r=null!=r?r:wl;let l=vl(t,e);if(s)return hl(l,o,n,i,r);let c=null!=a?a:0;if(2&c){let{static:e=!1,...t}=l;if(e)return hl(t,o,n,i,r)}if(1&c){let{unmount:e=!0,...t}=l;return gl(e?0:1,{0:()=>null,1:()=>hl({...t,hidden:!0,style:{display:"none"}},o,n,i,r)})}return hl(l,o,n,i,r)}({mergeRefs:t,...e}),[t])}function hl(t,o={},n,a,s){let{as:i=n,children:r,refName:l="ref",...c}=Cl(t,["unmount","static"]),d=void 0!==t.ref?{[l]:t.ref}:{},u="function"==typeof r?r(o):r;"className"in c&&c.className&&"function"==typeof c.className&&(c.className=c.className(o)),c["aria-labelledby"]&&c["aria-labelledby"]===c.id&&(c["aria-labelledby"]=void 0);let g={};if(o){let e=!1,t=[];for(let[n,a]of Object.entries(o))"boolean"==typeof a&&(e=!0),!0===a&&t.push(n.replace(/([A-Z])/g,e=>`-${e.toLowerCase()}`));if(e){g["data-headlessui-state"]=t.join(" ");for(let e of t)g[`data-${e}`]=""}}if(Al(i)&&(Object.keys(xl(c)).length>0||Object.keys(xl(g)).length>0)){if(!(!e.isValidElement(u)||Array.isArray(u)&&u.length>1||function(e){return Al(e.type)}(u))){let t=u.props,o=null==t?void 0:t.className,n="function"==typeof o?(...e)=>ul(o(...e),c.className):ul(o,c.className),a=n?{className:n}:{},i=vl(u.props,xl(Cl(c,["ref"])));for(let e in g)e in i&&delete g[e];return e.cloneElement(u,Object.assign({},i,g,d,{ref:s(Sl(u),d.ref)},a))}if(Object.keys(xl(c)).length>0)throw new Error(['Passing props on "Fragment"!',"",`The current component <${a} /> is rendering a "Fragment".`,"However we need to passthrough the following props:",Object.keys(xl(c)).concat(Object.keys(xl(g))).map(e=>` - ${e}`).join("\n"),"","You can apply a few solutions:",['Add an `as="..."` prop, to ensure that we render an actual element instead of a "Fragment".',"Render a single element as the child so that we can forward the props onto that element."].map(e=>` - ${e}`).join("\n")].join("\n"))}return e.createElement(i,Object.assign({},Cl(c,["ref"]),!Al(i)&&d,!Al(i)&&g),u)}function wl(...e){return e.every(e=>null==e)?void 0:t=>{for(let o of e)null!=o&&("function"==typeof o?o(t):o.current=t)}}function vl(...e){if(0===e.length)return{};if(1===e.length)return e[0];let t={},o={};for(let n of e)for(let e in n)e.startsWith("on")&&"function"==typeof n[e]?(null!=o[e]||(o[e]=[]),o[e].push(n[e])):t[e]=n[e];if(t.disabled||t["aria-disabled"])for(let n in o)/^(on(?:Click|Pointer|Mouse|Key)(?:Down|Up|Press)?)$/.test(n)&&(o[n]=[e=>{var t;return null==(t=null==e?void 0:e.preventDefault)?void 0:t.call(e)}]);for(let n in o)Object.assign(t,{[n](e,...t){let a=o[n];for(let o of a){if((e instanceof Event||(null==e?void 0:e.nativeEvent)instanceof Event)&&e.defaultPrevented)return;o(e,...t)}}});return t}function bl(...e){if(0===e.length)return{};if(1===e.length)return e[0];let t={},o={};for(let n of e)for(let e in n)e.startsWith("on")&&"function"==typeof n[e]?(null!=o[e]||(o[e]=[]),o[e].push(n[e])):t[e]=n[e];for(let n in o)Object.assign(t,{[n](...e){let t=o[n];for(let o of t)null==o||o(...e)}});return t}function kl(t){var o;return Object.assign(e.forwardRef(t),{displayName:null!=(o=t.displayName)?o:t.name})}function xl(e){let t=Object.assign({},e);for(let o in t)void 0===t[o]&&delete t[o];return t}function Cl(e,t=[]){let o=Object.assign({},e);for(let n of t)n in o&&delete o[n];return o}function Sl(e){return a.version.split(".")[0]>="19"?e.props.ref:e.ref}function Al(t){return t===e.Fragment||t===Symbol.for("react.fragment")}let Pl=kl(function(t,o){var n;let a=dl(),{disabled:s=a||!1,autoFocus:i=!1,...r}=t,{isFocusVisible:l,focusProps:c}=$r({autoFocus:i}),{isHovered:d,hoverProps:u}=Qr({isDisabled:s}),{pressed:g,pressProps:m}=function({disabled:t=!1}={}){let o=e.useRef(null),[n,a]=e.useState(!1),s=al(),i=rl(()=>{o.current=null,a(!1),s.dispose()}),r=rl(e=>{if(s.dispose(),null===o.current){o.current=e.currentTarget,a(!0);{let t=Zr(e.currentTarget);s.addEventListener(t,"pointerup",i,!1),s.addEventListener(t,"pointermove",e=>{if(o.current){let t=function(e){let t=e.width/2,o=e.height/2;return{top:e.clientY-o,right:e.clientX+t,bottom:e.clientY+o,left:e.clientX-t}}(e);a(function(e,t){return!(!e||!t||e.rightt.right||e.bottomt.bottom)}(t,o.current.getBoundingClientRect()))}},!1),s.addEventListener(t,"pointercancel",i,!1)}}});return{pressed:n,pressProps:t?{}:{onPointerDown:r,onPointerUp:i,onClick:i}}}({disabled:s}),p=bl({ref:o,type:null!=(n=r.type)?n:"button",disabled:s||void 0,autoFocus:i},c,u,m),f=ll({disabled:s,hover:d,focus:l,active:g,autofocus:i});return yl()({ourProps:p,theirProps:r,slot:f,defaultTag:"button",name:"Button"})});var Tl=(e=>(e[e.None=1]="None",e[e.Focusable=2]="Focusable",e[e.Hidden=4]="Hidden",e))(Tl||{});let Dl=kl(function(e,t){var o;let{features:n=1,...a}=e,s={ref:t,"aria-hidden":!(2&~n)||(null!=(o=a["aria-hidden"])?o:void 0),hidden:!(4&~n)||void 0,style:{position:"fixed",top:1,left:1,width:1,height:0,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0",...!(4&~n)&&!!(2&~n)&&{display:"none"}}};return yl()({ourProps:s,theirProps:a,slot:{},defaultTag:"span",name:"Hidden"})});function El(e){return function(e){return"object"==typeof e&&null!==e&&"nodeType"in e}(e)&&"tagName"in e}function Il(e){return El(e)&&"accessKey"in e}function Ml(e){return El(e)&&"tabIndex"in e}let Rl=Symbol();function Ll(...t){let o=e.useRef(t);e.useEffect(()=>{o.current=t},[t]);let n=rl(e=>{for(let t of o.current)null!=t&&("function"==typeof t?t(e):t.current=e)});return t.every(e=>null==e||(null==e?void 0:e[Rl]))?void 0:n}let Fl=e.createContext(null);function Nl(){let t=e.useContext(Fl);if(null===t){let e=new Error("You used a component, but it is not inside a relevant parent.");throw Error.captureStackTrace&&Error.captureStackTrace(e,Nl),e}return t}Fl.displayName="DescriptionContext";let jl=kl(function(t,o){let n=e.useId(),a=dl(),{id:s=`headlessui-description-${n}`,...i}=t,r=Nl(),l=Ll(o);sl(()=>r.register(s),[s,r.register]);let c=ll({...r.slot,disabled:a||!1}),d={ref:l,...r.props,id:s};return yl()({ourProps:d,theirProps:i,slot:c,defaultTag:"p",name:r.name||"Description"})}),Ol=Object.assign(jl,{});var _l=(e=>(e.Space=" ",e.Enter="Enter",e.Escape="Escape",e.Backspace="Backspace",e.Delete="Delete",e.ArrowLeft="ArrowLeft",e.ArrowUp="ArrowUp",e.ArrowRight="ArrowRight",e.ArrowDown="ArrowDown",e.Home="Home",e.End="End",e.PageUp="PageUp",e.PageDown="PageDown",e.Tab="Tab",e))(_l||{});let Ul=e.createContext(()=>{});function Kl({value:e,children:t}){return a.createElement(Ul.Provider,{value:e},t)}let Hl=kl(function(t,o){let n=e.useContext(Ul);return a.createElement(Pl,{ref:o,...bl({onClick:n},t)})}),Bl=class extends Map{constructor(e){super(),this.factory=e}get(e){let t=super.get(e);return void 0===t&&(t=this.factory(e),this.set(e,t)),t}};var Wl,Gl,ql,zl=Object.defineProperty,Vl=(e,t,o)=>(((e,t,o)=>{t in e?zl(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o})(e,t+"",o),o),Ql=(e,t,o)=>{if(!t.has(e))throw TypeError("Cannot "+o)},$l=(e,t,o)=>(Ql(e,t,"read from private field"),o?o.call(e):t.get(e)),Jl=(e,t,o)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,o)},Yl=(e,t,o,n)=>(Ql(e,t,"write to private field"),t.set(e,o),o);let Xl=class{constructor(e){Jl(this,Wl,{}),Jl(this,Gl,new Bl(()=>new Set)),Jl(this,ql,new Set),Vl(this,"disposables",nl()),Yl(this,Wl,e),Xr.isServer&&this.disposables.microTask(()=>{this.dispose()})}dispose(){this.disposables.dispose()}get state(){return $l(this,Wl)}subscribe(e,t){if(Xr.isServer)return()=>{};let o={selector:e,callback:t,current:e($l(this,Wl))};return $l(this,ql).add(o),this.disposables.add(()=>{$l(this,ql).delete(o)})}on(e,t){return Xr.isServer?()=>{}:($l(this,Gl).get(e).add(t),this.disposables.add(()=>{$l(this,Gl).get(e).delete(t)}))}send(e){let t=this.reduce($l(this,Wl),e);if(t!==$l(this,Wl)){Yl(this,Wl,t);for(let e of $l(this,ql)){let t=e.selector($l(this,Wl));Zl(e.current,t)||(e.current=t,e.callback(t))}for(let t of $l(this,Gl).get(e.type))t($l(this,Wl),e)}}};function Zl(e,t){return!!Object.is(e,t)||"object"==typeof e&&null!==e&&"object"==typeof t&&null!==t&&(Array.isArray(e)&&Array.isArray(t)?e.length===t.length&&ec(e[Symbol.iterator](),t[Symbol.iterator]()):e instanceof Map&&t instanceof Map||e instanceof Set&&t instanceof Set?e.size===t.size&&ec(e.entries(),t.entries()):!(!tc(e)||!tc(t))&&ec(Object.entries(e)[Symbol.iterator](),Object.entries(t)[Symbol.iterator]()))}function ec(e,t){for(;;){let o=e.next(),n=t.next();if(o.done&&n.done)return!0;if(o.done||n.done||!Object.is(o.value,n.value))return!1}}function tc(e){if("[object Object]"!==Object.prototype.toString.call(e))return!1;let t=Object.getPrototypeOf(e);return null===t||null===Object.getPrototypeOf(t)}Wl=new WeakMap,Gl=new WeakMap,ql=new WeakMap;var oc=Object.defineProperty,nc=(e,t,o)=>(((e,t,o)=>{t in e?oc(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o})(e,"symbol"!=typeof t?t+"":t,o),o),ac=(e=>(e[e.Push=0]="Push",e[e.Pop=1]="Pop",e))(ac||{});let sc={0(e,t){let o=t.id,n=e.stack,a=e.stack.indexOf(o);if(-1!==a){let t=e.stack.slice();return t.splice(a,1),t.push(o),n=t,{...e,stack:n}}return{...e,stack:[...e.stack,o]}},1(e,t){let o=t.id,n=e.stack.indexOf(o);if(-1===n)return e;let a=e.stack.slice();return a.splice(n,1),{...e,stack:a}}},ic=class e extends Xl{constructor(){super(...arguments),nc(this,"actions",{push:e=>this.send({type:0,id:e}),pop:e=>this.send({type:1,id:e})}),nc(this,"selectors",{isTop:(e,t)=>e.stack[e.stack.length-1]===t,inStack:(e,t)=>e.stack.includes(t)})}static new(){return new e({stack:[]})}reduce(e,t){return gl(t.type,sc,e,t)}};const rc=new Bl(()=>ic.new());var lc={exports:{}},cc={},dc=e;var uc="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},gc=dc.useSyncExternalStore,mc=dc.useRef,pc=dc.useEffect,fc=dc.useMemo,yc=dc.useDebugValue;cc.useSyncExternalStoreWithSelector=function(e,t,o,n,a){var s=mc(null);if(null===s.current){var i={hasValue:!1,value:null};s.current=i}else i=s.current;s=fc(function(){function e(e){if(!l){if(l=!0,s=e,e=n(e),void 0!==a&&i.hasValue){var t=i.value;if(a(t,e))return r=t}return r=e}if(t=r,uc(s,e))return t;var o=n(e);return void 0!==a&&a(t,o)?(s=e,t):(s=e,r=o)}var s,r,l=!1,c=void 0===o?null:o;return[function(){return e(t())},null===c?void 0:function(){return e(c())}]},[t,o,n,a]);var r=gc(e,s[0],s[1]);return pc(function(){i.hasValue=!0,i.value=r},[r]),yc(r),r},lc.exports=cc;var hc=lc.exports;function wc(e,t,o=Zl){return hc.useSyncExternalStoreWithSelector(rl(t=>e.subscribe(vc,t)),rl(()=>e.state),rl(()=>e.state),rl(t),o)}function vc(e){return e}function bc(t,o){let n=e.useId(),a=rc.get(o),[s,i]=wc(a,e.useCallback(e=>[a.selectors.isTop(e,n),a.selectors.inStack(e,n)],[a,n]));return sl(()=>{if(t)return a.actions.push(n),()=>a.actions.pop(n)},[a,t,n]),!!t&&(!i||s)}let kc=new Map,xc=new Map;function Cc(e){var t;let o=null!=(t=xc.get(e))?t:0;return xc.set(e,o+1),0!==o||(kc.set(e,{"aria-hidden":e.getAttribute("aria-hidden"),inert:e.inert}),e.setAttribute("aria-hidden","true"),e.inert=!0),()=>Sc(e)}function Sc(e){var t;let o=null!=(t=xc.get(e))?t:1;if(1===o?xc.delete(e):xc.set(e,o-1),1!==o)return;let n=kc.get(e);n&&(null===n["aria-hidden"]?e.removeAttribute("aria-hidden"):e.setAttribute("aria-hidden",n["aria-hidden"]),e.inert=n.inert,kc.delete(e))}let Ac=["[contentEditable=true]","[tabindex]","a[href]","area[href]","button:not([disabled])","iframe","input:not([disabled])","select:not([disabled])","details>summary","textarea:not([disabled])"].map(e=>`${e}:not([tabindex='-1'])`).join(","),Pc=["[data-autofocus]"].map(e=>`${e}:not([tabindex='-1'])`).join(",");var Tc,Dc,Ec=((Dc=Ec||{})[Dc.First=1]="First",Dc[Dc.Previous=2]="Previous",Dc[Dc.Next=4]="Next",Dc[Dc.Last=8]="Last",Dc[Dc.WrapAround=16]="WrapAround",Dc[Dc.NoScroll=32]="NoScroll",Dc[Dc.AutoFocus=64]="AutoFocus",Dc),Ic=((Tc=Ic||{})[Tc.Error=0]="Error",Tc[Tc.Overflow=1]="Overflow",Tc[Tc.Success=2]="Success",Tc[Tc.Underflow=3]="Underflow",Tc),Mc=(e=>(e[e.Previous=-1]="Previous",e[e.Next=1]="Next",e))(Mc||{});var Rc=(e=>(e[e.Strict=0]="Strict",e[e.Loose=1]="Loose",e))(Rc||{});var Lc=(e=>(e[e.Keyboard=0]="Keyboard",e[e.Mouse=1]="Mouse",e))(Lc||{});function Fc(e){null==e||e.focus({preventScroll:!0})}"undefined"!=typeof window&&"undefined"!=typeof document&&(document.addEventListener("keydown",e=>{e.metaKey||e.altKey||e.ctrlKey||(document.documentElement.dataset.headlessuiFocusVisible="")},!0),document.addEventListener("click",e=>{1===e.detail?delete document.documentElement.dataset.headlessuiFocusVisible:0===e.detail&&(document.documentElement.dataset.headlessuiFocusVisible="")},!0));let Nc=["textarea","input"].join(",");function jc(e,t,{sorted:o=!0,relativeTo:n=null,skipElements:a=[]}={}){let s=Array.isArray(e)?e.length>0?el(e[0]):document:el(e),i=Array.isArray(e)?o?function(e,t=e=>e){return e.slice().sort((e,o)=>{let n=t(e),a=t(o);if(null===n||null===a)return 0;let s=n.compareDocumentPosition(a);return s&Node.DOCUMENT_POSITION_FOLLOWING?-1:s&Node.DOCUMENT_POSITION_PRECEDING?1:0})}(e):e:64&t?function(e=document.body){return null==e?[]:Array.from(e.querySelectorAll(Pc)).sort((e,t)=>Math.sign((e.tabIndex||Number.MAX_SAFE_INTEGER)-(t.tabIndex||Number.MAX_SAFE_INTEGER)))}(e):function(e=document.body){return null==e?[]:Array.from(e.querySelectorAll(Ac)).sort((e,t)=>Math.sign((e.tabIndex||Number.MAX_SAFE_INTEGER)-(t.tabIndex||Number.MAX_SAFE_INTEGER)))}(e);a.length>0&&i.length>1&&(i=i.filter(e=>!a.some(t=>null!=t&&"current"in t?(null==t?void 0:t.current)===e:t===e))),n=null!=n?n:null==s?void 0:s.activeElement;let r,l=(()=>{if(5&t)return 1;if(10&t)return-1;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),c=(()=>{if(1&t)return 0;if(2&t)return Math.max(0,i.indexOf(n))-1;if(4&t)return Math.max(0,i.indexOf(n))+1;if(8&t)return i.length-1;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),d=32&t?{preventScroll:!0}:{},u=0,g=i.length;do{if(u>=g||u+g<=0)return 0;let e=c+u;if(16&t)e=(e+g)%g;else{if(e<0)return 3;if(e>=g)return 1}r=i[e],null==r||r.focus(d),u+=l}while(r!==tl(r));return 6&t&&function(e){var t,o;return null!=(o=null==(t=null==e?void 0:e.matches)?void 0:t.call(e,Nc))&&o}(r)&&r.select(),2}function Oc(){return/iPhone/gi.test(window.navigator.platform)||/Mac/gi.test(window.navigator.platform)&&window.navigator.maxTouchPoints>0}function _c(){return Oc()||/Android/gi.test(window.navigator.userAgent)}function Uc(t,o,n,a){let s=il(n);e.useEffect(()=>{if(t)return document.addEventListener(o,e,a),()=>document.removeEventListener(o,e,a);function e(e){s.current(e)}},[t,o,a])}function Kc(t,o,n,a){let s=il(n);e.useEffect(()=>{if(t)return window.addEventListener(o,e,a),()=>window.removeEventListener(o,e,a);function e(e){s.current(e)}},[t,o,a])}function Hc(t,o,n){let a=il(n),s=e.useCallback(function(e,t){if(e.defaultPrevented)return;let n=t(e);if(null===n||!n.getRootNode().contains(n)||!n.isConnected)return;let s=function e(t){return"function"==typeof t?e(t()):Array.isArray(t)||t instanceof Set?t:[t]}(o);for(let o of s)if(null!==o&&(o.contains(n)||e.composed&&e.composedPath().includes(o)))return;return!function(e,t=0){var o;return e!==(null==(o=Zr(e))?void 0:o.body)&&gl(t,{0:()=>e.matches(Ac),1(){let t=e;for(;null!==t;){if(t.matches(Ac))return!0;t=t.parentElement}return!1}})}(n,Rc.Loose)&&-1!==n.tabIndex&&e.preventDefault(),a.current(e,n)},[a,o]),i=e.useRef(null);Uc(t,"pointerdown",e=>{var t,o;_c()||(i.current=(null==(o=null==(t=e.composedPath)?void 0:t.call(e))?void 0:o[0])||e.target)},!0),Uc(t,"pointerup",e=>{if(_c()||!i.current)return;let t=i.current;return i.current=null,s(e,()=>t)},!0);let r=e.useRef({x:0,y:0});Uc(t,"touchstart",e=>{r.current.x=e.touches[0].clientX,r.current.y=e.touches[0].clientY},!0),Uc(t,"touchend",e=>{let t=e.changedTouches[0].clientX,o=e.changedTouches[0].clientY;if(!(Math.abs(t-r.current.x)>=30||Math.abs(o-r.current.y)>=30))return s(e,()=>Ml(e.target)?e.target:null)},!0),Kc(t,"blur",e=>s(e,()=>function(e){return Il(e)&&"IFRAME"===e.nodeName}(window.document.activeElement)?window.document.activeElement:null),!0)}function Bc(...t){return e.useMemo(()=>Zr(...t),[...t])}function Wc(t,o,n,a){let s=il(n);e.useEffect(()=>{function e(e){s.current(e)}return(t=null!=t?t:window).addEventListener(o,e,a),()=>t.removeEventListener(o,e,a)},[t,o,a])}function Gc(){let e;return{before({doc:t}){var o;let n=t.documentElement,a=null!=(o=t.defaultView)?o:window;e=Math.max(0,a.innerWidth-n.clientWidth)},after({doc:t,d:o}){let n=t.documentElement,a=Math.max(0,n.clientWidth-n.offsetWidth),s=Math.max(0,e-a);o.style(n,"paddingRight",`${s}px`)}}}function qc(){return Oc()?{before({doc:e,d:t,meta:o}){function n(e){for(let t of o().containers)for(let o of t())if(o.contains(e))return!0;return!1}t.microTask(()=>{var o;if("auto"!==window.getComputedStyle(e.documentElement).scrollBehavior){let o=nl();o.style(e.documentElement,"scrollBehavior","auto"),t.add(()=>t.microTask(()=>o.dispose()))}let a=null!=(o=window.scrollY)?o:window.pageYOffset,s=null;t.addEventListener(e,"click",t=>{if(Ml(t.target))try{let o=t.target.closest("a");if(!o)return;let{hash:a}=new URL(o.href),i=e.querySelector(a);Ml(i)&&!n(i)&&(s=i)}catch{}},!0),t.group(o=>{t.addEventListener(e,"touchstart",e=>{if(o.dispose(),Ml(e.target)&&function(e){return El(e)&&"style"in e}(e.target))if(n(e.target)){let t=e.target;for(;t.parentElement&&n(t.parentElement);)t=t.parentElement;o.style(t,"overscrollBehavior","contain")}else o.style(e.target,"touchAction","none")})}),t.addEventListener(e,"touchmove",e=>{if(Ml(e.target)){if(function(e){return Il(e)&&"INPUT"===e.nodeName}(e.target))return;if(n(e.target)){let t=e.target;for(;t.parentElement&&""!==t.dataset.headlessuiPortal&&!(t.scrollHeight>t.clientHeight||t.scrollWidth>t.clientWidth);)t=t.parentElement;""===t.dataset.headlessuiPortal&&e.preventDefault()}else e.preventDefault()}},{passive:!1}),t.add(()=>{var e;let t=null!=(e=window.scrollY)?e:window.pageYOffset;a!==t&&window.scrollTo(0,a),s&&s.isConnected&&(s.scrollIntoView({block:"nearest"}),s=null)})})}}:{}}function zc(e){let t={};for(let o of e)Object.assign(t,o(t));return t}let Vc=function(e,t){let o=e(),n=new Set;return{getSnapshot:()=>o,subscribe:e=>(n.add(e),()=>n.delete(e)),dispatch(e,...a){let s=t[e].call(o,...a);s&&(o=s,n.forEach(e=>e()))}}}(()=>new Map,{PUSH(e,t){var o;let n=null!=(o=this.get(e))?o:{doc:e,count:0,d:nl(),meta:new Set,computedMeta:{}};return n.count++,n.meta.add(t),n.computedMeta=zc(n.meta),this.set(e,n),this},POP(e,t){let o=this.get(e);return o&&(o.count--,o.meta.delete(t),o.computedMeta=zc(o.meta)),this},SCROLL_PREVENT(e){let t={doc:e.doc,d:e.d,meta:()=>e.computedMeta},o=[qc(),Gc(),{before({doc:e,d:t}){t.style(e.documentElement,"overflow","hidden")}}];o.forEach(({before:e})=>null==e?void 0:e(t)),o.forEach(({after:e})=>null==e?void 0:e(t))},SCROLL_ALLOW({d:e}){e.dispose()},TEARDOWN({doc:e}){this.delete(e)}});function Qc(t,o,n=()=>({containers:[]})){let a=function(t){return e.useSyncExternalStore(t.subscribe,t.getSnapshot,t.getSnapshot)}(Vc),s=o?a.get(o):void 0,i=!!s&&s.count>0;return sl(()=>{if(o&&t)return Vc.dispatch("PUSH",o,n),()=>Vc.dispatch("POP",o,n)},[t,o]),i}Vc.subscribe(()=>{let e=Vc.getSnapshot(),t=new Map;for(let[o]of e)t.set(o,o.documentElement.style.overflow);for(let o of e.values()){let e="hidden"===t.get(o.doc),n=0!==o.count;(n&&!e||!n&&e)&&Vc.dispatch(o.count>0?"SCROLL_PREVENT":"SCROLL_ALLOW",o),0===o.count&&Vc.dispatch("TEARDOWN",o)}});var $c,Jc;"undefined"!=typeof process&&"undefined"!=typeof globalThis&&"undefined"!=typeof Element&&"test"===(null==($c=null==process?void 0:{})?void 0:$c.NODE_ENV)&&void 0===(null==(Jc=null==Element?void 0:Element.prototype)?void 0:Jc.getAnimations)&&(Element.prototype.getAnimations=function(){return[]});var Yc,Xc=((Yc=Xc||{})[Yc.None=0]="None",Yc[Yc.Closed=1]="Closed",Yc[Yc.Enter=2]="Enter",Yc[Yc.Leave=4]="Leave",Yc);function Zc(e){let t={};for(let o in e)!0===e[o]&&(t[`data-${o}`]="");return t}function ed(t,o,n,a){let[s,i]=e.useState(n),{hasFlag:r,addFlag:l,removeFlag:c}=function(t=0){let[o,n]=e.useState(t),a=e.useCallback(e=>n(e),[]),s=e.useCallback(e=>n(t=>t|e),[]),i=e.useCallback(e=>(o&e)===e,[o]),r=e.useCallback(e=>n(t=>t&~e),[]),l=e.useCallback(e=>n(t=>t^e),[]);return{flags:o,setFlag:a,addFlag:s,hasFlag:i,removeFlag:r,toggleFlag:l}}(t&&s?3:0),d=e.useRef(!1),u=e.useRef(!1),g=al();return sl(()=>{var e;if(t)return n&&i(!0),o?(null==(e=null==a?void 0:a.start)||e.call(a,n),function(e,{prepare:t,run:o,done:n,inFlight:a}){let s=nl();return function(e,{inFlight:t,prepare:o}){if(null!=t&&t.current)return void o();let n=e.style.transition;e.style.transition="none",o(),e.offsetHeight,e.style.transition=n}(e,{prepare:t,inFlight:a}),s.nextFrame(()=>{o(),s.requestAnimationFrame(()=>{s.add(function(e,t){var o,n;let a=nl();if(!e)return a.dispose;let s=!1;a.add(()=>{s=!0});let i=null!=(n=null==(o=e.getAnimations)?void 0:o.call(e).filter(e=>e instanceof CSSTransition))?n:[];return 0===i.length?(t(),a.dispose):(Promise.allSettled(i.map(e=>e.finished)).then(()=>{s||t()}),a.dispose)}(e,n))})}),s.dispose}(o,{inFlight:d,prepare(){u.current?u.current=!1:u.current=d.current,d.current=!0,!u.current&&(n?(l(3),c(4)):(l(4),c(2)))},run(){u.current?n?(c(3),l(4)):(c(4),l(3)):n?c(1):l(1)},done(){var e;u.current&&function(e){var t,o;return(null!=(o=null==(t=e.getAnimations)?void 0:t.call(e))?o:[]).some(e=>e instanceof CSSTransition&&"finished"!==e.playState)}(o)||(d.current=!1,c(7),n||i(!1),null==(e=null==a?void 0:a.end)||e.call(a,n))}})):void(n&&l(3))},[t,n,o,g]),t?[s,{closed:r(1),enter:r(2),leave:r(4),transition:r(2)||r(4)}]:[n,{closed:void 0,enter:void 0,leave:void 0,transition:void 0}]}function td(t,o){let n=e.useRef([]),a=rl(t);e.useEffect(()=>{let e=[...n.current];for(let[t,s]of o.entries())if(n.current[t]!==s){let t=a(o,e);return n.current=o,t}},[a,...o])}let od=e.createContext(null);od.displayName="OpenClosedContext";var nd=(e=>(e[e.Open=1]="Open",e[e.Closed=2]="Closed",e[e.Closing=4]="Closing",e[e.Opening=8]="Opening",e))(nd||{});function ad(){return e.useContext(od)}function sd({value:e,children:t}){return a.createElement(od.Provider,{value:e},t)}function id({children:e}){return a.createElement(od.Provider,{value:null},e)}let rd=[];function ld(t){let o=rl(t),n=e.useRef(!1);e.useEffect(()=>(n.current=!1,()=>{n.current=!0,ol(()=>{n.current&&o()})}),[o])}!function(e){function t(){"loading"!==document.readyState&&(e(),document.removeEventListener("DOMContentLoaded",t))}"undefined"!=typeof window&&"undefined"!=typeof document&&(document.addEventListener("DOMContentLoaded",t),t())}(()=>{function e(e){if(!Ml(e.target)||e.target===document.body||rd[0]===e.target)return;let t=e.target;t=t.closest(Ac),rd.unshift(null!=t?t:e.target),rd=rd.filter(e=>null!=e&&e.isConnected),rd.splice(10)}window.addEventListener("click",e,{capture:!0}),window.addEventListener("mousedown",e,{capture:!0}),window.addEventListener("focus",e,{capture:!0}),document.body.addEventListener("click",e,{capture:!0}),document.body.addEventListener("mousedown",e,{capture:!0}),document.body.addEventListener("focus",e,{capture:!0})});let cd=e.createContext(!1);function dd(e){return a.createElement(cd.Provider,{value:e.force},e.children)}function ud(t){let o=e.useContext(cd),n=e.useContext(fd),[a,s]=e.useState(()=>{var e;if(!o&&null!==n)return null!=(e=n.current)?e:null;if(Xr.isServer)return null;let a=null==t?void 0:t.getElementById("headlessui-portal-root");if(a)return a;if(null===t)return null;let s=t.createElement("div");return s.setAttribute("id","headlessui-portal-root"),t.body.appendChild(s)});return e.useEffect(()=>{null!==a&&(null!=t&&t.body.contains(a)||null==t||t.body.appendChild(a))},[a,t]),e.useEffect(()=>{o||null!==n&&s(n.current)},[n,s,o]),a}let gd=e.Fragment,md=kl(function(o,n){let{ownerDocument:s=null,...i}=o,r=e.useRef(null),l=Ll(function(e,t=!0){return Object.assign(e,{[Rl]:t})}(e=>{r.current=e}),n),c=Bc(r.current),d=ud(null!=s?s:c),u=e.useContext(yd),g=al(),m=yl();return ld(()=>{var e;d&&d.childNodes.length<=0&&(null==(e=d.parentElement)||e.removeChild(d))}),d?t.createPortal(a.createElement("div",{"data-headlessui-portal":"",ref:e=>{g.dispose(),u&&e&&g.add(u.register(e))}},m({ourProps:{ref:l},theirProps:i,slot:{},defaultTag:gd,name:"Portal"})),d):null});let pd=e.Fragment,fd=e.createContext(null);let yd=e.createContext(null);let hd=kl(function(e,t){let o=Ll(t),{enabled:n=!0,ownerDocument:s,...i}=e,r=yl();return n?a.createElement(md,{...i,ownerDocument:s,ref:o}):r({ourProps:{ref:o},theirProps:i,slot:{},defaultTag:gd,name:"Portal"})}),wd=kl(function(e,t){let{target:o,...n}=e,s={ref:Ll(t)},i=yl();return a.createElement(fd.Provider,{value:o},i({ourProps:s,theirProps:n,defaultTag:pd,name:"Popover.Group"}))}),vd=Object.assign(hd,{Group:wd});let bd=e.createContext(null);function kd({children:t,node:o}){let[n,s]=e.useState(null),i=xd(null!=o?o:n);return a.createElement(bd.Provider,{value:i},t,null===i&&a.createElement(Dl,{features:Tl.Hidden,ref:e=>{var t,o;if(e)for(let n of null!=(o=null==(t=Zr(e))?void 0:t.querySelectorAll("html > *, body > *"))?o:[])if(n!==document.body&&n!==document.head&&El(n)&&null!=n&&n.contains(e)){s(n);break}}}))}function xd(t=null){var o;return null!=(o=e.useContext(bd))?o:t}function Cd(){let t=function(){let e="undefined"==typeof document;return"useSyncExternalStore"in o&&o.useSyncExternalStore(()=>()=>{},()=>!1,()=>!e)}(),[n,a]=e.useState(Xr.isHandoffComplete);return n&&!1===Xr.isHandoffComplete&&a(!1),e.useEffect(()=>{!0!==n&&a(!0)},[n]),e.useEffect(()=>Xr.handoff(),[]),!t&&n}function Sd(){let t=e.useRef(!1);return sl(()=>(t.current=!0,()=>{t.current=!1}),[]),t}var Ad=(e=>(e[e.Forwards=0]="Forwards",e[e.Backwards=1]="Backwards",e))(Ad||{});function Pd(e){if(!e)return new Set;if("function"==typeof e)return new Set(e());let t=new Set;for(let o of e.current)El(o.current)&&t.add(o.current);return t}var Td=(e=>(e[e.None=0]="None",e[e.InitialFocus=1]="InitialFocus",e[e.TabLock=2]="TabLock",e[e.FocusLock=4]="FocusLock",e[e.RestoreFocus=8]="RestoreFocus",e[e.AutoFocus=16]="AutoFocus",e))(Td||{});let Dd=kl(function(t,o){let n=e.useRef(null),s=Ll(n,o),{initialFocus:i,initialFocusFallback:r,containers:l,features:c=15,...d}=t;Cd()||(c=0);let u=Bc(n.current);!function(t,{ownerDocument:o}){let n=!!(8&t),a=function(t=!0){let o=e.useRef(rd.slice());return td(([e],[t])=>{!0===t&&!1===e&&ol(()=>{o.current.splice(0)}),!1===t&&!0===e&&(o.current=rd.slice())},[t,rd,o]),rl(()=>{var e;return null!=(e=o.current.find(e=>null!=e&&e.isConnected))?e:null})}(n);td(()=>{n||function(e){return tl(e)===e}(null==o?void 0:o.body)&&Fc(a())},[n]),ld(()=>{n&&Fc(a())})}(c,{ownerDocument:u});let g=function(t,{ownerDocument:o,container:n,initialFocus:a,initialFocusFallback:s}){let i=e.useRef(null),r=bc(!!(1&t),"focus-trap#initial-focus"),l=Sd();return td(()=>{if(0===t)return;if(!r)return void(null!=s&&s.current&&Fc(s.current));let e=n.current;e&&ol(()=>{if(!l.current)return;let n=null==o?void 0:o.activeElement;if(null!=a&&a.current){if((null==a?void 0:a.current)===n)return void(i.current=n)}else if(e.contains(n))return void(i.current=n);if(null!=a&&a.current)Fc(a.current);else{if(16&t){if(jc(e,Ec.First|Ec.AutoFocus)!==Ic.Error)return}else if(jc(e,Ec.First)!==Ic.Error)return;if(null!=s&&s.current&&(Fc(s.current),(null==o?void 0:o.activeElement)===s.current))return}i.current=null==o?void 0:o.activeElement})},[s,r,t]),i}(c,{ownerDocument:u,container:n,initialFocus:i,initialFocusFallback:r});!function(e,{ownerDocument:t,container:o,containers:n,previousActiveElement:a}){let s=Sd(),i=!!(4&e);Wc(null==t?void 0:t.defaultView,"focus",e=>{if(!i||!s.current)return;let t=Pd(n);Il(o.current)&&t.add(o.current);let r=a.current;if(!r)return;let l=e.target;Il(l)?Id(t,l)?(a.current=l,Fc(l)):(e.preventDefault(),e.stopPropagation(),Fc(r)):Fc(a.current)},!0)}(c,{ownerDocument:u,container:n,containers:l,previousActiveElement:g});let m=function(){let t=e.useRef(0);return Kc(!0,"keydown",e=>{"Tab"===e.key&&(t.current=e.shiftKey?1:0)},!0),t}(),p=rl(e=>{if(!Il(n.current))return;let t=n.current;gl(m.current,{[Ad.Forwards]:()=>{jc(t,Ec.First,{skipElements:[e.relatedTarget,r]})},[Ad.Backwards]:()=>{jc(t,Ec.Last,{skipElements:[e.relatedTarget,r]})}})}),f=bc(!!(2&c),"focus-trap#tab-lock"),y=al(),h=e.useRef(!1),w={ref:s,onKeyDown(e){"Tab"==e.key&&(h.current=!0,y.requestAnimationFrame(()=>{h.current=!1}))},onBlur(e){if(!(4&c))return;let t=Pd(l);Il(n.current)&&t.add(n.current);let o=e.relatedTarget;Ml(o)&&"true"!==o.dataset.headlessuiFocusGuard&&(Id(t,o)||(h.current?jc(n.current,gl(m.current,{[Ad.Forwards]:()=>Ec.Next,[Ad.Backwards]:()=>Ec.Previous})|Ec.WrapAround,{relativeTo:e.target}):Ml(e.target)&&Fc(e.target)))}},v=yl();return a.createElement(a.Fragment,null,f&&a.createElement(Dl,{as:"button",type:"button","data-headlessui-focus-guard":!0,onFocus:p,features:Tl.Focusable}),v({ourProps:w,theirProps:d,defaultTag:"div",name:"FocusTrap"}),f&&a.createElement(Dl,{as:"button",type:"button","data-headlessui-focus-guard":!0,onFocus:p,features:Tl.Focusable}))}),Ed=Object.assign(Dd,{features:Td});function Id(e,t){for(let o of e)if(o.contains(t))return!0;return!1}function Md(e){var t;return!!(e.enter||e.enterFrom||e.enterTo||e.leave||e.leaveFrom||e.leaveTo)||!Al(null!=(t=e.as)?t:Od)||1===a.Children.count(e.children)}let Rd=e.createContext(null);Rd.displayName="TransitionContext";var Ld=(e=>(e.Visible="visible",e.Hidden="hidden",e))(Ld||{});let Fd=e.createContext(null);function Nd(e){return"children"in e?Nd(e.children):e.current.filter(({el:e})=>null!==e.current).filter(({state:e})=>"visible"===e).length>0}function jd(t,o){let n=il(t),a=e.useRef([]),s=Sd(),i=al(),r=rl((e,t=fl.Hidden)=>{let o=a.current.findIndex(({el:t})=>t===e);-1!==o&&(gl(t,{[fl.Unmount](){a.current.splice(o,1)},[fl.Hidden](){a.current[o].state="hidden"}}),i.microTask(()=>{var e;!Nd(a)&&s.current&&(null==(e=n.current)||e.call(n))}))}),l=rl(e=>{let t=a.current.find(({el:t})=>t===e);return t?"visible"!==t.state&&(t.state="visible"):a.current.push({el:e,state:"visible"}),()=>r(e,fl.Unmount)}),c=e.useRef([]),d=e.useRef(Promise.resolve()),u=e.useRef({enter:[],leave:[]}),g=rl((e,t,n)=>{c.current.splice(0),o&&(o.chains.current[t]=o.chains.current[t].filter(([t])=>t!==e)),null==o||o.chains.current[t].push([e,new Promise(e=>{c.current.push(e)})]),null==o||o.chains.current[t].push([e,new Promise(e=>{Promise.all(u.current[t].map(([e,t])=>t)).then(()=>e())})]),"enter"===t?d.current=d.current.then(()=>null==o?void 0:o.wait.current).then(()=>n(t)):n(t)}),m=rl((e,t,o)=>{Promise.all(u.current[t].splice(0).map(([e,t])=>t)).then(()=>{var e;null==(e=c.current.shift())||e()}).then(()=>o(t))});return e.useMemo(()=>({children:a,register:l,unregister:r,onStart:g,onStop:m,wait:d,chains:u}),[l,r,a,g,m,u,d])}Fd.displayName="NestingContext";let Od=e.Fragment,_d=pl.RenderStrategy;let Ud=kl(function(t,o){let{show:n,appear:s=!1,unmount:i=!0,...r}=t,l=e.useRef(null),c=Ll(...Md(t)?[l,o]:null===o?[]:[o]);Cd();let d=ad();if(void 0===n&&null!==d&&(n=(d&nd.Open)===nd.Open),void 0===n)throw new Error("A is used but it is missing a `show={true | false}` prop.");let[u,g]=e.useState(n?"visible":"hidden"),m=jd(()=>{n||g("hidden")}),[p,f]=e.useState(!0),y=e.useRef([n]);sl(()=>{!1!==p&&y.current[y.current.length-1]!==n&&(y.current.push(n),f(!1))},[y,n]);let h=e.useMemo(()=>({show:n,appear:s,initial:p}),[n,s,p]);sl(()=>{n?g("visible"):!Nd(m)&&null!==l.current&&g("hidden")},[n,m]);let w={unmount:i},v=rl(()=>{var e;p&&f(!1),null==(e=t.beforeEnter)||e.call(t)}),b=rl(()=>{var e;p&&f(!1),null==(e=t.beforeLeave)||e.call(t)}),k=yl();return a.createElement(Fd.Provider,{value:m},a.createElement(Rd.Provider,{value:h},k({ourProps:{...w,as:e.Fragment,children:a.createElement(Kd,{ref:c,...w,...r,beforeEnter:v,beforeLeave:b})},theirProps:{},defaultTag:e.Fragment,features:_d,visible:"visible"===u,name:"Transition"})))}),Kd=kl(function(t,o){var n,s;let{transition:i=!0,beforeEnter:r,afterEnter:l,beforeLeave:c,afterLeave:d,enter:u,enterFrom:g,enterTo:m,entered:p,leave:f,leaveFrom:y,leaveTo:h,...w}=t,[v,b]=e.useState(null),k=e.useRef(null),x=Md(t),C=Ll(...x?[k,o,b]:null===o?[]:[o]),S=null==(n=w.unmount)||n?fl.Unmount:fl.Hidden,{show:A,appear:P,initial:T}=function(){let t=e.useContext(Rd);if(null===t)throw new Error("A is used but it is missing a parent or .");return t}(),[D,E]=e.useState(A?"visible":"hidden"),I=function(){let t=e.useContext(Fd);if(null===t)throw new Error("A is used but it is missing a parent or .");return t}(),{register:M,unregister:R}=I;sl(()=>M(k),[M,k]),sl(()=>{if(S===fl.Hidden&&k.current)return A&&"visible"!==D?void E("visible"):gl(D,{hidden:()=>R(k),visible:()=>M(k)})},[D,k,M,R,A,S]);let L=Cd();sl(()=>{if(x&&L&&"visible"===D&&null===k.current)throw new Error("Did you forget to passthrough the `ref` to the actual DOM node?")},[k,D,L,x]);let F=T&&!P,N=P&&A&&T,j=e.useRef(!1),O=jd(()=>{j.current||(E("hidden"),R(k))},I),_=rl(e=>{j.current=!0;let t=e?"enter":"leave";O.onStart(k,t,e=>{"enter"===e?null==r||r():"leave"===e&&(null==c||c())})}),U=rl(e=>{let t=e?"enter":"leave";j.current=!1,O.onStop(k,t,e=>{"enter"===e?null==l||l():"leave"===e&&(null==d||d())}),"leave"===t&&!Nd(O)&&(E("hidden"),R(k))});e.useEffect(()=>{x&&i||(_(A),U(A))},[A,x,i]);let K=(()=>!(!i||!x||!L||F))(),[,H]=ed(K,v,A,{start:_,end:U}),B=xl({ref:C,className:(null==(s=ul(w.className,N&&u,N&&g,H.enter&&u,H.enter&&H.closed&&g,H.enter&&!H.closed&&m,H.leave&&f,H.leave&&!H.closed&&y,H.leave&&H.closed&&h,!H.transition&&A&&p))?void 0:s.trim())||void 0,...Zc(H)}),W=0;"visible"===D&&(W|=nd.Open),"hidden"===D&&(W|=nd.Closed),A&&"hidden"===D&&(W|=nd.Opening),!A&&"visible"===D&&(W|=nd.Closing);let G=yl();return a.createElement(Fd.Provider,{value:O},a.createElement(sd,{value:W},G({ourProps:B,theirProps:w,defaultTag:Od,features:_d,visible:"visible"===D,name:"Transition.Child"})))}),Hd=kl(function(t,o){let n=null!==e.useContext(Rd),s=null!==ad();return a.createElement(a.Fragment,null,!n&&s?a.createElement(Ud,{ref:o,...t}):a.createElement(Kd,{ref:o,...t}))}),Bd=Object.assign(Ud,{Child:Hd,Root:Ud});var Wd=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(Wd||{}),Gd=(e=>(e[e.SetTitleId=0]="SetTitleId",e))(Gd||{});let qd={0:(e,t)=>e.titleId===t.id?e:{...e,titleId:t.id}},zd=e.createContext(null);function Vd(t){let o=e.useContext(zd);if(null===o){let e=new Error(`<${t} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(e,Vd),e}return o}function Qd(e,t){return gl(t.type,qd,e,t)}zd.displayName="DialogContext";let $d=kl(function(t,o){let n=e.useId(),{id:s=`headlessui-dialog-${n}`,open:i,onClose:r,initialFocus:l,role:c="dialog",autoFocus:d=!0,__demoMode:u=!1,unmount:g=!1,...m}=t,p=e.useRef(!1);c="dialog"===c||"alertdialog"===c?c:(p.current||(p.current=!0),"dialog");let f=ad();void 0===i&&null!==f&&(i=(f&nd.Open)===nd.Open);let y=e.useRef(null),h=Ll(y,o),w=Bc(y.current),v=i?0:1,[b,k]=e.useReducer(Qd,{titleId:null,descriptionId:null,panelRef:e.createRef()}),x=rl(()=>r(!1)),C=rl(e=>k({type:0,id:e})),S=!!Cd()&&0===v,[A,P]=function(){let t=e.useContext(yd),o=e.useRef([]),n=rl(e=>(o.current.push(e),t&&t.register(e),()=>s(e))),s=rl(e=>{let n=o.current.indexOf(e);-1!==n&&o.current.splice(n,1),t&&t.unregister(e)}),i=e.useMemo(()=>({register:n,unregister:s,portals:o}),[n,s,o]);return[o,e.useMemo(()=>function({children:e}){return a.createElement(yd.Provider,{value:i},e)},[i])]}(),T={get current(){var e;return null!=(e=b.panelRef.current)?e:y.current}},D=xd(),{resolveContainers:E}=function({defaultContainers:e=[],portals:t,mainTreeNode:o}={}){let n=rl(()=>{var n,a;let s=Zr(o),i=[];for(let t of e)null!==t&&(El(t)?i.push(t):"current"in t&&El(t.current)&&i.push(t.current));if(null!=t&&t.current)for(let e of t.current)i.push(e);for(let e of null!=(n=null==s?void 0:s.querySelectorAll("html > *, body > *"))?n:[])e!==document.body&&e!==document.head&&El(e)&&"headlessui-portal-root"!==e.id&&(o&&(e.contains(o)||e.contains(null==(a=null==o?void 0:o.getRootNode())?void 0:a.host))||i.some(t=>e.contains(t))||i.push(e));return i});return{resolveContainers:n,contains:rl(e=>n().some(t=>t.contains(e)))}}({mainTreeNode:D,portals:A,defaultContainers:[T]}),I=null!==f&&(f&nd.Closing)===nd.Closing;!function(e,{allowed:t,disallowed:o}={}){let n=bc(e,"inert-others");sl(()=>{var e,a;if(!n)return;let s=nl();for(let t of null!=(e=null==o?void 0:o())?e:[])t&&s.add(Cc(t));let i=null!=(a=null==t?void 0:t())?a:[];for(let t of i){if(!t)continue;let e=Zr(t);if(!e)continue;let o=t.parentElement;for(;o&&o!==e.body;){for(let e of o.children)i.some(t=>e.contains(t))||s.add(Cc(e));o=o.parentElement}}return s.dispose},[n,t,o])}(!u&&!I&&S,{allowed:rl(()=>{var e,t;return[null!=(t=null==(e=y.current)?void 0:e.closest("[data-headlessui-portal]"))?t:null]}),disallowed:rl(()=>{var e;return[null!=(e=null==D?void 0:D.closest("body > *:not(#headlessui-portal-root)"))?e:null]})});let M=rc.get(null);sl(()=>{if(S)return M.actions.push(s),()=>M.actions.pop(s)},[M,s,S]);let R=wc(M,e.useCallback(e=>M.selectors.isTop(e,s),[M,s]));Hc(R,E,e=>{e.preventDefault(),x()}),function(e,t=("undefined"!=typeof document?document.defaultView:null),o){let n=bc(e,"escape");Wc(t,"keydown",e=>{n&&(e.defaultPrevented||e.key===_l.Escape&&o(e))})}(R,null==w?void 0:w.defaultView,e=>{e.preventDefault(),e.stopPropagation(),document.activeElement&&"blur"in document.activeElement&&"function"==typeof document.activeElement.blur&&document.activeElement.blur(),x()}),function(e,t,o=()=>[document.body]){Qc(bc(e,"scroll-lock"),t,e=>{var t;return{containers:[...null!=(t=e.containers)?t:[],o]}})}(!u&&!I&&S,w,E),function(t,o,n){let a=il(e=>{let t=e.getBoundingClientRect();0===t.x&&0===t.y&&0===t.width&&0===t.height&&n()});e.useEffect(()=>{if(!t)return;let e=null===o?null:Il(o)?o:o.current;if(!e)return;let n=nl();if("undefined"!=typeof ResizeObserver){let t=new ResizeObserver(()=>a.current(e));t.observe(e),n.add(()=>t.disconnect())}if("undefined"!=typeof IntersectionObserver){let t=new IntersectionObserver(()=>a.current(e));t.observe(e),n.add(()=>t.disconnect())}return()=>n.dispose()},[o,a,t])}(S,y,x);let[L,F]=function(){let[t,o]=e.useState([]);return[t.length>0?t.join(" "):void 0,e.useMemo(()=>function(t){let n=rl(e=>(o(t=>[...t,e]),()=>o(t=>{let o=t.slice(),n=o.indexOf(e);return-1!==n&&o.splice(n,1),o}))),s=e.useMemo(()=>({register:n,slot:t.slot,name:t.name,props:t.props,value:t.value}),[n,t.slot,t.name,t.props,t.value]);return a.createElement(Fl.Provider,{value:s},t.children)},[o])]}(),N=e.useMemo(()=>[{dialogState:v,close:x,setTitleId:C,unmount:g},b],[v,x,C,g,b]),j=ll({open:0===v}),O={ref:h,id:s,role:c,tabIndex:-1,"aria-modal":u?void 0:0===v||void 0,"aria-labelledby":b.titleId,"aria-describedby":L,unmount:g},_=!function(){var t;let[o]=e.useState(()=>"undefined"!=typeof window&&"function"==typeof window.matchMedia?window.matchMedia("(pointer: coarse)"):null),[n,a]=e.useState(null!=(t=null==o?void 0:o.matches)&&t);return sl(()=>{if(o)return o.addEventListener("change",e),()=>o.removeEventListener("change",e);function e(e){a(e.matches)}},[o]),n}(),U=Td.None;S&&!u&&(U|=Td.RestoreFocus,U|=Td.TabLock,d&&(U|=Td.AutoFocus),_&&(U|=Td.InitialFocus));let K=yl();return a.createElement(id,null,a.createElement(dd,{force:!0},a.createElement(vd,null,a.createElement(zd.Provider,{value:N},a.createElement(wd,{target:y},a.createElement(dd,{force:!1},a.createElement(F,{slot:j},a.createElement(P,null,a.createElement(Ed,{initialFocus:l,initialFocusFallback:y,containers:E,features:U},a.createElement(Kl,{value:x},K({ourProps:O,theirProps:m,slot:j,defaultTag:Jd,features:Yd,visible:0===v,name:"Dialog"})))))))))))}),Jd="div",Yd=pl.RenderStrategy|pl.Static;let Xd=kl(function(e,t){let{transition:o=!1,open:n,...s}=e,i=ad(),r=e.hasOwnProperty("open")||null!==i,l=e.hasOwnProperty("onClose");if(!r&&!l)throw new Error("You have to provide an `open` and an `onClose` prop to the `Dialog` component.");if(!r)throw new Error("You provided an `onClose` prop to the `Dialog`, but forgot an `open` prop.");if(!l)throw new Error("You provided an `open` prop to the `Dialog`, but forgot an `onClose` prop.");if(!i&&"boolean"!=typeof e.open)throw new Error(`You provided an \`open\` prop to the \`Dialog\`, but the value is not a boolean. Received: ${e.open}`);if("function"!=typeof e.onClose)throw new Error(`You provided an \`onClose\` prop to the \`Dialog\`, but the value is not a function. Received: ${e.onClose}`);return void 0===n&&!o||s.static?a.createElement(kd,null,a.createElement($d,{ref:t,open:n,...s})):a.createElement(kd,null,a.createElement(Bd,{show:n,transition:o,unmount:s.unmount},a.createElement($d,{ref:t,...s})))}),Zd=kl(function(t,o){let n=e.useId(),{id:s=`headlessui-dialog-panel-${n}`,transition:i=!1,...r}=t,[{dialogState:l,unmount:c},d]=Vd("Dialog.Panel"),u=Ll(o,d.panelRef),g=ll({open:0===l}),m={ref:u,id:s,onClick:rl(e=>{e.stopPropagation()})},p=i?Hd:e.Fragment,f=i?{unmount:c}:{},y=yl();return a.createElement(p,{...f},y({ourProps:m,theirProps:r,slot:g,defaultTag:"div",name:"Dialog.Panel"}))}),eu=kl(function(t,o){let{transition:n=!1,...s}=t,[{dialogState:i,unmount:r}]=Vd("Dialog.Backdrop"),l=ll({open:0===i}),c={ref:o,"aria-hidden":!0},d=n?Hd:e.Fragment,u=n?{unmount:r}:{},g=yl();return a.createElement(d,{...u},g({ourProps:c,theirProps:s,slot:l,defaultTag:"div",name:"Dialog.Backdrop"}))}),tu=kl(function(t,o){let n=e.useId(),{id:a=`headlessui-dialog-title-${n}`,...s}=t,[{dialogState:i,setTitleId:r}]=Vd("Dialog.Title"),l=Ll(o);e.useEffect(()=>(r(a),()=>r(null)),[a,r]);let c=ll({open:0===i}),d={ref:l,id:a};return yl()({ourProps:d,theirProps:s,slot:c,defaultTag:"h2",name:"Dialog.Title"})}),ou=Object.assign(Xd,{Panel:Zd,Title:tu,Description:Ol});const nu=({open:e,onOpenChange:t,children:o})=>ie.jsx(ou,{open:e,onClose:()=>null==t?void 0:t(!1),className:"relative z-50",children:o}),au=e.forwardRef(({className:e,...t},o)=>ie.jsx(eu,{ref:o,transition:!0,className:xn("fixed inset-0","bg-black/60","duration-300 ease-out","data-[closed]:opacity-0",e),...t}));au.displayName="DialogOverlay";const su=e.forwardRef(({className:e,children:t,maxWidth:o="400px",showClose:n=!0,...a},s)=>ie.jsxs(ie.Fragment,{children:[ie.jsx(au,{}),ie.jsx("div",{className:"fixed inset-0 flex items-center justify-center p-4",children:ie.jsxs(Zd,{ref:s,transition:!0,className:xn("relative w-full max-h-[90vh]","flex flex-col","rounded-2xl border shadow-2xl","duration-300 ease-out","data-[closed]:opacity-0 data-[closed]:scale-95","surface-card","border-border",e),style:{maxWidth:o},...a,children:[t,n&&ie.jsxs(Hl,{className:xn("absolute right-4 top-4 z-10","p-2 rounded-xl","transition-all duration-200","hover:scale-110","focus:outline-none focus:ring-2 focus:ring-blue-500/30","hover:bg-muted/50"),children:[ie.jsx(u,{size:18,className:"text-muted-foreground"}),ie.jsx("span",{className:"sr-only",children:"关闭"})]})]})})]}));su.displayName="DialogContent";const iu=e.forwardRef(({className:e,icon:t,iconColor:o,iconBg:n,children:a,...s},i)=>ie.jsxs("div",{ref:i,className:xn("px-6 pt-6 pb-2",e),...s,children:[t&&ie.jsx("div",{className:"flex items-center gap-3 mb-2",children:ie.jsx("div",{className:xn("w-10 h-10 rounded-xl","flex items-center justify-center","shadow-md",n||"bg-gradient-to-br from-blue-500/20 to-indigo-500/10"),children:ie.jsx(t,{size:20,className:o||"text-blue-400",strokeWidth:2})})}),a]}));iu.displayName="DialogHeader";const ru=e.forwardRef(({className:e,...t},o)=>ie.jsx(tu,{ref:o,className:xn("text-lg font-semibold leading-tight","text-foreground",e),...t}));ru.displayName="DialogTitle";const lu=e.forwardRef(({className:e,...t},o)=>ie.jsx(Ol,{ref:o,className:xn("text-sm mt-1","text-muted-foreground",e),...t}));lu.displayName="DialogDescription";const cu=e.forwardRef(({className:e,gap:t="md",noPadding:o=!1,...n},a)=>ie.jsx("div",{ref:a,className:xn(!o&&"px-6 py-4","overflow-y-auto flex-1 no-scrollbar",{none:"",sm:"space-y-3",md:"space-y-4",lg:"space-y-6",xl:"space-y-8"}[t],e),...n}));cu.displayName="DialogBody";const du=e.forwardRef(({className:e,...t},o)=>ie.jsx("div",{ref:o,className:xn("px-6 py-4","flex justify-end gap-3","bg-muted/10 border-t border-border/30",e),...t}));du.displayName="DialogFooter";const uu=e.forwardRef(({className:e,variant:t="primary",size:o="default",loading:n=!1,icon:a,children:s,disabled:i,...r},l)=>{const c={primary:"bg-gradient-to-r from-blue-500 to-purple-600 shadow-lg shadow-blue-500/30 hover:opacity-90 hover:shadow-xl text-white",secondary:"bg-secondary text-secondary-foreground border",success:"bg-gradient-to-r from-emerald-500 to-teal-600 shadow-lg shadow-emerald-500/30 hover:opacity-90 hover:shadow-xl text-white",danger:"bg-gradient-to-r from-red-500 to-pink-600 shadow-lg shadow-red-500/30 hover:opacity-90 hover:shadow-xl text-white"};return ie.jsxs("button",{ref:l,disabled:i||n,className:xn("font-medium rounded-xl","disabled:opacity-50 disabled:cursor-not-allowed","flex items-center gap-2 justify-center","transition-all duration-200 active:scale-[0.98]",c[t],{default:"px-6 py-2.5 text-sm",sm:"px-4 py-2 text-xs",lg:"px-8 py-3 text-base"}[o],e),...r,children:[n&&ie.jsx("div",{className:"w-4 h-4 border-2 border-white/30 border-t-white rounded-full animate-spin"}),a&&!n&&ie.jsx(a,{size:16}),s]})});function gu(e){return"system"!==e?e:document.documentElement.getAttribute("data-theme")||"dark"}function mu(e){const t=gu(e),o=!["dark","dark-one","tech","midnight"].includes(t),n={light:{gradientFrom:"from-blue-400",gradientTo:"to-blue-600",shadow:"shadow-blue-500/20",bg:"bg-blue-500/10",bgSoft:"bg-blue-500/5",text:"text-blue-600",textSoft:"text-blue-500",ring:"focus:ring-blue-500/30",border:"border-blue-500/20",borderSoft:"border-blue-500/10",solidBg:"bg-blue-600",scopeBadge:"bg-blue-500/15 text-blue-600 border border-blue-500/30"},dark:{gradientFrom:"from-gray-700",gradientTo:"to-gray-900",shadow:"shadow-black/40",bg:"bg-white/10",bgSoft:"bg-white/5",text:"text-white",textSoft:"text-gray-300",ring:"focus:ring-white/20",border:"border-white/20",borderSoft:"border-white/10",solidBg:"bg-white/20",scopeBadge:"bg-white/15 text-white border border-white/30"},purple:{gradientFrom:"from-purple-500",gradientTo:"to-purple-700",shadow:"shadow-purple-500/20",bg:"bg-purple-500/10",bgSoft:"bg-purple-500/5",text:"text-purple-600",textSoft:"text-purple-500",ring:"focus:ring-purple-500/30",border:"border-purple-500/20",borderSoft:"border-purple-500/10",solidBg:"bg-purple-600",scopeBadge:"bg-purple-500/15 text-purple-600 border border-purple-500/30"},tech:{gradientFrom:"from-blue-500",gradientTo:"to-cyan-500",shadow:"shadow-cyan-500/20",bg:"bg-cyan-500/10",bgSoft:"bg-cyan-500/5",text:"text-cyan-400",textSoft:"text-cyan-500",ring:"focus:ring-cyan-500/30",border:"border-cyan-500/20",borderSoft:"border-cyan-500/10",solidBg:"bg-cyan-500",scopeBadge:"bg-cyan-500/15 text-cyan-400 border border-cyan-500/30"}};return n[t]||n[o?"light":"dark"]}function pu(e){return`${e.solidBg} text-white hover:opacity-90`}function fu(e){return"bg-primary text-white hover:shadow-lg shadow-md"}function yu(e){const t=gu(e),o=!["dark","dark-one","tech","midnight"].includes(t);return{editorBg:o?"#ffffff":"#1e1e1e",editorText:o?"#000000":"#d4d4d4",editorBorder:o?"#e5e7eb":"#333333",inputBg:o?"#ffffff":"#1e1e1e",inputBorder:o?"#e5e7eb":"#333333",inputText:o?"#000000":"#d4d4d4",placeholder:o?"#9ca3af":"#6b7280",dropdownBg:o?"#ffffff":"#1e1e1e",dropdownBorder:o?"#e5e7eb":"#333333",pillBg:o?"#f3f4f6":"#374151",pillText:o?"#1f2937":"#e5e7eb",pillBorder:o?"#e5e7eb":"#4b5563"}}function hu({type:t="confirm",title:o,message:n,rawData:a,onConfirm:s,onCancel:i,confirmText:r,cancelText:l,loading:c=!1,customContent:d}){const{t:u,theme:b}=Zu(),[k,x]=e.useState(!1),[C,S]=e.useState(!1),A=e.useMemo(()=>mu(b),[b]),P=e.useMemo(()=>({codeBlock:"bg-muted/30 border border-border text-foreground"}),[]),T=r||u("common.ok"),D=l||u("common.cancel"),E={confirm:{icon:f,iconColor:"text-amber-400",iconBg:"bg-gradient-to-br from-amber-500/20 to-orange-500/10",btnVariant:"primary"},success:{icon:p,iconColor:"text-emerald-400",iconBg:"bg-gradient-to-br from-emerald-500/20 to-green-500/10",btnVariant:"success"},error:{icon:m,iconColor:"text-red-400",iconBg:"bg-gradient-to-br from-red-500/20 to-rose-500/10",btnVariant:"danger"},info:{icon:g,iconColor:A.text,iconBg:A.iconBadgeBg,btnVariant:"primary"}},{icon:I,iconColor:M,iconBg:R,btnVariant:L}=E[t];return ie.jsx(nu,{open:!0,onOpenChange:e=>!e&&i(),children:ie.jsxs(su,{maxWidth:"400px",children:[ie.jsx(iu,{icon:I,iconColor:M,iconBg:R,children:ie.jsx(ru,{children:o})}),ie.jsxs(cu,{children:[ie.jsx("p",{className:"text-sm leading-relaxed whitespace-pre-line text-foreground",children:n}),d,a&&ie.jsxs("div",{className:"mt-4",children:[ie.jsxs("button",{onClick:()=>x(!k),className:"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-primary transition-colors cursor-pointer",children:[k?ie.jsx(y,{size:14}):ie.jsx(h,{size:14}),u(k?"common.hideRawResponse":"common.viewRawResponse")]}),k&&ie.jsxs("div",{className:"mt-2 relative",children:[ie.jsx("button",{onClick:()=>{navigator.clipboard.writeText(JSON.stringify(a,null,2)),S(!0),setTimeout(()=>S(!1),2e3)},className:"absolute top-2 right-2 p-1.5 rounded hover:bg-muted/50 transition-colors cursor-pointer",title:u("common.copy"),children:C?ie.jsx(w,{size:14,className:"text-green-500"}):ie.jsx(v,{size:14,className:"text-muted-foreground"})}),ie.jsx("pre",{className:`text-xs p-3 rounded-lg overflow-auto max-h-48 ${P.codeBlock}`,children:JSON.stringify(a,null,2)})]})]})]}),ie.jsxs(du,{children:["confirm"===t&&ie.jsx(uu,{variant:"secondary",size:"lg",onClick:i,children:D}),ie.jsx(uu,{variant:L,size:"lg",onClick:s,disabled:c,loading:c,children:T})]})]})})}uu.displayName="Button";const wu=e.forwardRef(({className:e,value:t,indicatorClassName:o,...n},a)=>ie.jsx("div",{ref:a,className:xn("relative h-4 w-full overflow-hidden rounded-full bg-secondary",e),...n,children:ie.jsx("div",{className:xn("h-full w-full flex-1 bg-primary transition-all",o),style:{transform:`translateX(-${100-(t||0)}%)`}})}));function vu({updateInfo:t,update:o,onClose:n}){const{t:a}=Zu(),[s,r]=e.useState(!1),[l,c]=e.useState(!1),[d,g]=e.useState(null),[m,p]=e.useState(0),[f,y]=e.useState(""),h=e.useRef(0),w=e.useRef(Date.now()),v=e=>{if(0===e)return"0 B";const t=Math.floor(Math.log(e)/Math.log(1024));return parseFloat((e/Math.pow(1024,t)).toFixed(1))+" "+["B","KB","MB","GB"][t]},P=()=>{s||n()};return ie.jsx(nu,{open:!0,onOpenChange:e=>!e&&P(),children:ie.jsxs(su,{maxWidth:"512px",showClose:!1,className:"gap-0 overflow-hidden",children:[ie.jsxs("div",{className:"bg-gradient-to-r from-blue-500 to-indigo-600 px-6 py-5 relative",children:[ie.jsxs("div",{className:"flex items-center gap-4",children:[ie.jsx("div",{className:"w-14 h-14 bg-white/20 rounded-2xl flex items-center justify-center",children:ie.jsx(b,{size:28,className:"text-white"})}),ie.jsxs("div",{className:"flex flex-col gap-0.5",children:[ie.jsx("h3",{className:"text-xl font-bold text-white",children:a("update.newVersionAvailable")}),ie.jsxs("p",{className:"text-sm text-white/80",children:["v",null==t?void 0:t.version," ",a("update.readyToInstall")]})]})]}),!s&&!l&&ie.jsx("button",{onClick:P,className:"absolute top-4 right-4 p-1.5 rounded-lg hover:bg-black/10 transition-colors",children:ie.jsx(u,{size:20,className:"text-white/80"})})]}),ie.jsxs("div",{className:"p-6",children:[l?ie.jsxs("div",{className:"flex flex-col gap-4",children:[ie.jsxs("div",{className:"flex items-center gap-2",children:[ie.jsx(k,{size:24,className:"text-emerald-500"}),ie.jsx("span",{className:"text-lg font-medium text-emerald-600",children:a("update.downloadComplete")})]}),ie.jsx("p",{className:"text-sm text-muted-foreground",children:a("update.restartToInstall")}),ie.jsxs("div",{className:"flex gap-2",children:[ie.jsx(Sn,{onClick:n,variant:"outline",className:"flex-1",children:a("update.installLater")}),ie.jsxs(Sn,{onClick:async()=>{try{await i()}catch(st){y(st.toString())}},className:"flex-1",children:[ie.jsx(x,{size:16,className:"mr-2"}),a("update.restartNow")]})]})]}):s&&d?ie.jsxs("div",{className:"flex flex-col gap-4",children:[ie.jsxs("div",{className:"flex justify-between items-center",children:[ie.jsxs("span",{className:"text-sm",children:[a("update.downloading"),"..."]}),ie.jsxs("span",{className:"text-sm font-medium text-blue-600",children:[d.percent,"%"]})]}),ie.jsx(wu,{value:d.percent,className:"h-2"}),ie.jsxs("div",{className:"flex justify-between items-center",children:[ie.jsxs("span",{className:"text-xs text-muted-foreground",children:[v(d.downloaded)," / ",v(d.total)]}),ie.jsx("span",{className:"text-xs text-muted-foreground",children:(T=m,v(T)+"/s")})]}),ie.jsxs("div",{className:"flex items-center gap-2",children:[ie.jsx(x,{size:12,className:"animate-spin text-blue-500"}),ie.jsx("span",{className:"text-xs text-muted-foreground",children:a("update.doNotClose")})]})]}):ie.jsxs("div",{className:"flex flex-col gap-4",children:[(null==t?void 0:t.body)&&ie.jsxs("div",{className:"flex flex-col gap-2",children:[ie.jsxs("div",{className:"flex items-center gap-2",children:[ie.jsx(C,{size:16}),ie.jsx("span",{className:"text-sm font-medium",children:a("update.releaseNotes")})]}),ie.jsx("div",{className:"text-sm max-h-40 overflow-y-auto p-3 rounded-lg whitespace-pre-wrap leading-relaxed border bg-muted/50",children:t.body})]}),ie.jsxs("div",{className:"flex gap-2",children:[ie.jsx(Sn,{onClick:n,variant:"outline",className:"flex-1",children:a("update.later")}),ie.jsxs(Sn,{onClick:async()=>{if(o){r(!0),y(""),g({percent:0,downloaded:0,total:0}),h.current=0,w.current=Date.now();try{await o.downloadAndInstall(e=>{"Started"===e.event?g({percent:0,downloaded:0,total:e.data.contentLength||0}):"Progress"===e.event?g(t=>{const o=((null==t?void 0:t.downloaded)||0)+e.data.chunkLength,n=(null==t?void 0:t.total)||0,a=n>0?Math.round(o/n*100):0,s=Date.now(),i=(s-w.current)/1e3;if(i>=.5){const e=(o-h.current)/i;p(e),h.current=o,w.current=s}return{percent:a,downloaded:o,total:n}}):"Finished"===e.event&&(g(e=>({...e,percent:100})),c(!0),r(!1))})}catch(st){y(a("update.installFailed")+": "+st),r(!1),g(null)}}},className:"flex-1",children:[ie.jsx(S,{size:16,className:"mr-2"}),a("update.updateNow")]})]})]}),f&&ie.jsxs("div",{className:"mt-4 p-3 rounded-lg bg-destructive/10 border border-destructive/20 flex items-start gap-2",children:[ie.jsx(A,{size:16,className:"text-destructive mt-0.5 flex-shrink-0"}),ie.jsx("span",{className:"text-sm text-destructive",children:f})]})]})]})});var T}wu.displayName="Progress";const bu=e.createContext(null);function ku({children:t}){const[o,n]=e.useState(null),[a,s]=e.useState(null),[i,r]=e.useState(null),l=e.useCallback((e,t,o={})=>new Promise(a=>{s(()=>a),n({type:"confirm",title:e,message:t,confirmText:o.confirmText,cancelText:o.cancelText})}),[]),c=e.useCallback((e,t,o=null)=>new Promise(a=>{s(()=>a),n({type:"success",title:e,message:t,rawData:o})}),[]),d=e.useCallback((e,t)=>new Promise(o=>{s(()=>o),n({type:"error",title:e,message:t})}),[]),u=e.useCallback((e,t)=>new Promise(o=>{s(()=>o),n({type:"info",title:e,message:t})}),[]),g=e.useCallback((e,t)=>{r({updateInfo:e,update:t})},[]),m=e.useCallback(()=>{r(null)},[]),p=e.useCallback(()=>{a&&a(!0),n(null),s(null)},[a]),f=e.useCallback(()=>{a&&a(!1),n(null),s(null)},[a]),y=e.useMemo(()=>({showConfirm:l,showSuccess:c,showError:d,showInfo:u,showUpdate:g,closeUpdate:m}),[l,c,d,u,g,m]);return ie.jsxs(bu.Provider,{value:y,children:[t,o&&ie.jsx(hu,{type:o.type,title:o.title,message:o.message,rawData:o.rawData,confirmText:o.confirmText,cancelText:o.cancelText,onConfirm:p,onCancel:f}),i&&ie.jsx(vu,{updateInfo:i.updateInfo,update:i.update,onClose:m})]})}function xu(){const t=e.useContext(bu);if(!t)throw new Error("useDialog must be used within a DialogProvider");return t}function Cu(){return s("get_app_settings")}function Su(e){return s("save_app_settings",{settings:e})}function Au(){return s("get_app_data_dir")}function Pu(){return s("open_app_data_dir")}function Tu(){return s("get_kiro_settings")}function Du(){return s("read_cloud_config_enabled")}function Eu(){return s("read_remote_sessions_env_override")}function Iu(e){return s("open_kiro_config_file",{kind:e})}function Mu(e){return s("set_kiro_proxy",{proxy:e})}function Ru(e){return s("set_kiro_model",{model:e})}function Lu(e={}){var t,o;return s("get_permissions",{scope:null!=(t=e.scope)?t:"global",projectPath:null!=(o=e.projectPath)?o:null})}function Fu(e,t={}){var o,n;return s("save_permissions",{policy:e,scope:null!=(o=t.scope)?o:"global",projectPath:null!=(n=t.projectPath)?n:null})}function Nu(){return s("get_permission_capabilities")}function ju(){return s("list_permission_workspace_roots")}function Ou(e,t){return s("set_kiro_notification",{key:e,enabled:t})}function _u(e,t){return s("set_kiro_telemetry",{key:e,enabled:t})}function Uu(e,t){return s("set_kiro_agent_setting",{key:e,value:t})}function Ku(){return s("get_custom_kiro_path")}function Hu(){return s("clear_custom_kiro_path")}function Bu(){return s("check_ide_installation")}function Wu(){return s("detect_installed_browsers")}function Gu(){return s("detect_system_proxy")}function qu(){return s("get_sandbox_config")}function zu(e){return s("save_sandbox_config",{config:e})}function Vu(e){return s("get_effective_sandbox",{workspaceRoot:e})}function Qu(e,t){return s("save_project_sandbox_config",{workspaceRoot:e,config:t})}const $u=e.createContext(null),Ju={lockModel:!1,lockedModel:null,autoRefresh:!0,autoRefreshInterval:50,browserPath:"",privacyMode:!0,autoSwitchEnabled:!1,autoSwitchThreshold:1,autoSwitchInterval:5,switchTarget:"ide",enableCodebaseIndexing:!1,enableTabAutocomplete:!1,usageSummary:!0,enableDebugLogs:!1,notifyActionRequired:!0,notifyFailure:!1,notifySuccess:!1,notifyBilling:!0,referenceTracker:!1,configureMcp:"Enabled",telemetryContentCollection:!1,telemetryUsageAnalytics:!1,telemetryEditStats:!1,telemetryFeedback:!1,telemetryPromptLogging:!1,telemetryEditStatsDetails:!1,telemetryEditStatsDecorations:!1,telemetryEditStatsStatusBar:!1,appProxyMode:"followKiro",density:"comfortable",uiScale:100,reduceMotion:!1};function Yu({children:t}){const[o,n]=e.useState(null),[a,s]=e.useState(!0),i=async()=>{try{const e=await Cu();n(e||Ju)}catch(e){n(Ju)}finally{s(!1)}};return e.useEffect(()=>{i();let e=null;return(async()=>{e=await r("app-settings-changed",e=>{e.payload?n(e.payload):i()})})(),()=>{e&&e()}},[]),e.useEffect(()=>{const e=document.documentElement;e.dataset.density=(null==o?void 0:o.density)||"comfortable",e.style.setProperty("--ui-scale",String(((null==o?void 0:o.uiScale)||100)/100)),e.dataset.reduceMotion=(null==o?void 0:o.reduceMotion)?"true":"false"},[null==o?void 0:o.density,null==o?void 0:o.uiScale,null==o?void 0:o.reduceMotion]),ie.jsx($u.Provider,{value:{settings:o,loading:a,updateSettings:async e=>{try{await Su(e);let t=null;return n(o=>(t={...o||Ju,...e},t)),t}catch(t){return null}},reload:i},children:t})}function Xu(){const t=e.useContext($u);if(null===t)throw new Error("useAppSettings must be used within AppSettingsProvider");return t}function Zu(){const{t:t,i18n:o}=q(),{theme:n,setTheme:a,resolvedTheme:s}=(()=>{var t;return null!=(t=e.useContext(Ji))?t:Yi})(),i=xu(),{settings:r,updateSettings:l,loading:c}=Xu();return{t:t,i18n:o,theme:n||"dark",resolvedTheme:s,setTheme:a,settings:r,updateSettings:l,settingsLoading:c,dialog:i}}const eg=[{id:"home",icon:P,nameKey:"nav.home",component:e.lazy(()=>J(()=>import("./index-F5Ibg_-9.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])))},{id:"accounts",icon:T,nameKey:"nav.accounts",component:e.lazy(()=>J(()=>import("./index-Db3B5gxw.js"),__vite__mapDeps([10,1,3,11,4,8,9,12,13,14,5])))},{id:"desktopOAuth",icon:D,nameKey:"nav.desktopOAuth",descKey:"nav.socialIdC",component:e.lazy(()=>J(()=>import("./index-DXxjo5Tn.js"),__vite__mapDeps([15,1,3,16,17,8,9])))},{id:"agentConfig",icon:E,nameKey:"nav.agentConfig",component:e.lazy(()=>J(()=>import("./AgentConfig-CvPUX6ms.js"),__vite__mapDeps([18,1,3,14,13,2,8,19,20,17,21,6,16,4,7,22,9])))},{id:"sessions",icon:I,nameKey:"nav.sessions",component:e.lazy(()=>J(()=>import("./index-BSvzcSzd.js").then(e=>e.i),__vite__mapDeps([23,1,3,6,7,16,20,12,13,8,4])))},{id:"gateway",icon:M,nameKey:"nav.gateway",component:e.lazy(()=>J(()=>import("./index-DFcPySfm.js"),__vite__mapDeps([24,1,14,13,3,16,17,19,20,8,12,7,6,11,9,22])))},{id:"settings",icon:R,nameKey:"nav.settings",component:e.lazy(()=>J(()=>import("./index-DPpHSRmx.js"),__vite__mapDeps([25,1,3,14,13,21,6,8,16,19,20,9,17])))},{id:"about",icon:g,nameKey:"nav.about",component:e.lazy(()=>J(()=>import("./index-C7R6hzZx.js"),__vite__mapDeps([26,1,3,6,7,21,8,9])))}],tg={callback:e.lazy(()=>J(()=>import("./AuthCallback-T9egDqES.js"),__vite__mapDeps([27,1,3,8,9])))},og=[{key:"system",nameKey:"settings.themeSystem",fallbackName:"Follow system",iconName:"Monitor",color:"from-slate-400 to-slate-600"},{key:"light",nameKey:"settings.light",fallbackName:"Light",iconName:"Sun",color:"from-blue-400 to-blue-600"},{key:"dark",nameKey:"settings.dark",fallbackName:"Dark",iconName:"Moon",color:"from-gray-700 to-gray-900"},{key:"purple",nameKey:"settings.purple",fallbackName:"Purple",iconName:"Palette",color:"from-purple-500 to-purple-700"},{key:"green",nameKey:"settings.green",fallbackName:"Green",iconName:"Palette",color:"from-emerald-500 to-emerald-700"},{key:"tech",nameKey:"settings.tech",fallbackName:"Tech Blue",iconName:"Palette",color:"from-blue-500 to-cyan-500"},{key:"dark-one",nameKey:"settings.darkOne",fallbackName:"Dark One",iconName:"Moon",color:"from-slate-700 to-gray-900"},{key:"business",nameKey:"settings.business",fallbackName:"Business",iconName:"Palette",color:"from-amber-500 to-yellow-600"},{key:"sunset",nameKey:"settings.sunset",fallbackName:"Sunset",iconName:"Palette",color:"from-orange-400 to-red-500"},{key:"ocean",nameKey:"settings.ocean",fallbackName:"Ocean",iconName:"Palette",color:"from-cyan-400 to-blue-500"},{key:"rose",nameKey:"settings.rose",fallbackName:"Rose",iconName:"Palette",color:"from-pink-400 to-rose-500"},{key:"aurora",nameKey:"settings.aurora",fallbackName:"Aurora",iconName:"Palette",color:"from-teal-400 to-emerald-500"},{key:"midnight",nameKey:"settings.midnight",fallbackName:"Midnight",iconName:"Moon",color:"from-gray-900 via-yellow-700 to-black"},{key:"forest",nameKey:"settings.forest",fallbackName:"Forest",iconName:"Palette",color:"from-green-600 to-emerald-900"},{key:"sakura",nameKey:"settings.sakura",fallbackName:"Sakura",iconName:"Palette",color:"from-pink-200 to-rose-400"}],ng=og.map(e=>e.key),ag={Monitor:j,Sun:N,Moon:F,Palette:L};function sg({activeMenu:t,onMenuChange:o}){const[n,a]=e.useState(null),[s,i]=e.useState(""),[r,d]=e.useState(()=>"false"!==localStorage.getItem("sidebar-collapsed")),{t:g,theme:m,setTheme:p}=Zu(),f=function(){const{t:e}=Zu();return eg.map(t=>({id:t.id,icon:t.icon,label:e(t.nameKey),desc:t.descKey?e(t.descKey):void 0}))}();e.useEffect(()=>{Lt().then(a).catch(()=>{}),l().then(i)},[]);const y=()=>{const e=!r;d(e),localStorage.setItem("sidebar-collapsed",String(e))},{projectDir:w,recentDirs:v,setProjectDir:b}=Wt(),[k,x]=e.useState(!1),C=async()=>{try{const e=await c({directory:!0,multiple:!1,title:g("agentConfig.selectProjectDir")});e&&b(e)}catch{}},S=(A=m,og.find(e=>e.key===A));var A;const P=S&&ag[S.iconName]||N,T=S?g(S.nameKey)||S.fallbackName:String(null!=m?m:"");return ie.jsxs("div",{className:xn("flex flex-col relative transition-[width] duration-200 ease-in-out surface-sidebar z-10 overflow-hidden sidebar-top-inset"),style:{width:r?64:192},children:[ie.jsx(Bi,{children:ie.jsxs(Wi,{children:[ie.jsx(Gi,{asChild:!0,children:ie.jsx("div",{className:xn("cursor-pointer select-none",r?"p-2":"p-3","pb-2"),onClick:y,children:ie.jsxs("div",{className:xn("flex items-center mb-2 animate-fade-in-up",r?"justify-center gap-0":"justify-start gap-2"),style:{animationDelay:"0.1s",animationFillMode:"both"},children:[ie.jsx("div",{className:"w-10 h-10 rounded-xl flex items-center justify-center transition-transform hover:scale-105 flex-shrink-0 sidebar-card",children:ie.jsx("svg",{width:"24",height:"24",viewBox:"0 0 40 40",fill:"none",children:ie.jsx("path",{d:"M20 4C12 4 6 10 6 18C6 22 8 25 8 25C8 25 7 28 7 30C7 32 8 34 10 34C11 34 12 33 13 32C14 33 16 34 20 34C24 34 26 33 27 32C28 33 29 34 30 34C32 34 33 32 33 30C33 28 32 25 32 25C32 25 34 22 34 18C34 10 28 4 20 4ZM14 20C12.5 20 11 18.5 11 17C11 15.5 12.5 14 14 14C15.5 14 17 15.5 17 17C17 18.5 15.5 20 14 20ZM26 20C24.5 20 23 18.5 23 17C23 15.5 24.5 14 26 14C27.5 14 29 15.5 29 17C29 18.5 27.5 20 26 20Z",fill:"currentColor",className:"sidebar-foreground"})})}),!r&&ie.jsxs("div",{className:"flex flex-col gap-0",children:[ie.jsx("span",{className:"text-lg font-bold tracking-wider sidebar-foreground",children:"KIRO"}),ie.jsx("span",{className:"text-xs sidebar-muted",children:"Account Manager"})]})]})})}),ie.jsx(qi,{side:"right",children:g(r?"nav.expandSidebar":"nav.collapseSidebar")})]})}),ie.jsx("div",{className:xn("flex flex-col gap-0.5 flex-1 overflow-auto no-scrollbar px-2"),children:f.map((e,n)=>{const a=e.icon,s=t===e.id;return ie.jsx(Bi,{children:ie.jsxs(Wi,{children:[ie.jsx(Gi,{asChild:!0,children:ie.jsxs("button",{onClick:()=>o(e.id),className:xn("flex items-center gap-2.5 px-2.5 py-2.5 rounded-lg transition-all animate-slide-in-left",!s&&"sidebar-foreground sidebar-hover",s&&"sidebar-active font-semibold",!s&&"font-normal"),style:{animationDelay:.15+.05*n+"s",animationFillMode:"both"},children:[s&&ie.jsx("div",{className:"w-0.5 h-4 rounded-full bg-current opacity-80 -ml-0.5 mr-0.5 shrink-0"}),ie.jsx(a,{size:18,strokeWidth:s?2.5:2,className:"shrink-0"}),!r&&ie.jsxs("div",{className:"flex-1 text-left whitespace-nowrap overflow-hidden",children:[ie.jsx("div",{className:"text-sm",children:e.label}),e.desc&&ie.jsx("div",{className:"text-[10px] sidebar-muted leading-tight",children:e.desc})]})]})}),r&&ie.jsx(qi,{side:"right",children:e.label})]})},e.id)})}),r?ie.jsx("div",{className:"flex justify-center mb-2",children:ie.jsx("button",{onClick:C,className:"p-2 rounded-xl sidebar-card sidebar-foreground sidebar-hover cursor-pointer",title:w?w.split(/[/\\]/).pop():g("agentConfig.selectProjectDir"),children:ie.jsx(O,{size:14,className:w?"text-amber-500":"sidebar-muted"})})}):ie.jsxs("div",{className:"relative mx-3 mb-2 p-3 rounded-xl sidebar-card",children:[ie.jsxs("div",{className:"flex items-center gap-2 mb-1.5",children:[ie.jsx(O,{size:12,className:"text-amber-500 flex-shrink-0"}),ie.jsx("span",{className:"text-[10px] font-semibold uppercase tracking-wide sidebar-muted",children:g("agentConfig.projectScope")})]}),ie.jsxs("div",{className:"flex items-center gap-1",children:[ie.jsx("button",{onClick:C,className:"flex items-center gap-1.5 min-w-0 flex-1 px-2 h-7 rounded-md text-xs transition-colors cursor-pointer hover:bg-black/5 dark:hover:bg-white/5 border border-transparent sidebar-foreground",title:g("agentConfig.selectProjectDir"),children:w?ie.jsx("span",{className:"truncate",children:w.split(/[/\\]/).pop()}):ie.jsx("span",{className:"sidebar-muted",children:g("agentConfig.noProjectDir")})}),v.length>0&&ie.jsx("button",{onClick:()=>x(e=>!e),className:"p-1 rounded-md hover:bg-black/5 dark:hover:bg-white/5 transition-colors cursor-pointer flex-shrink-0",title:g("agentConfig.recentProjects"),children:ie.jsx(h,{size:12,className:"sidebar-muted"})}),w&&ie.jsx("button",{onClick:()=>b(null),className:"p-1 rounded-md hover:bg-black/5 dark:hover:bg-white/5 transition-colors cursor-pointer flex-shrink-0",title:g("agentConfig.clearProjectDir"),children:ie.jsx(u,{size:12,className:"sidebar-muted"})})]}),k&&ie.jsxs(ie.Fragment,{children:[ie.jsx("div",{className:"fixed inset-0 z-40",onClick:()=>x(!1)}),ie.jsxs("div",{className:"absolute left-3 right-3 bottom-full mb-1 z-50 rounded-lg bg-background border border-border shadow-xl py-1",children:[ie.jsx("div",{className:"px-3 py-1.5 text-[10px] font-semibold text-muted-foreground uppercase tracking-wide",children:g("agentConfig.recentProjects")}),v.map(e=>ie.jsxs("button",{onClick:()=>{b(e),x(!1)},className:"w-full text-left px-3 py-1.5 text-xs truncate hover:bg-muted/50 cursor-pointer "+(w===e?"text-primary":"text-foreground"),title:e,children:[e.split(/[/\\]/).pop(),w===e&&ie.jsx("span",{className:"ml-1.5 text-[10px] text-primary",children:"●"})]},e)),ie.jsx("div",{className:"border-t border-border my-1"}),ie.jsx("button",{onClick:()=>{x(!1),C()},className:"w-full text-left px-3 py-1.5 text-xs text-muted-foreground hover:bg-muted/50 cursor-pointer",children:g("agentConfig.browseDir")})]})]})]}),n&&ie.jsx("div",{className:xn("mx-3 mb-3 p-3 rounded-xl sidebar-card",r&&"mx-2 px-0 flex justify-center"),children:r?ie.jsx("div",{className:"relative",children:ie.jsx("div",{className:"w-2 h-2 rounded-full bg-green-500"})}):ie.jsxs(ie.Fragment,{children:[ie.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[ie.jsx("div",{className:"relative",children:ie.jsx("div",{className:"w-1.5 h-1.5 rounded-full bg-green-500"})}),ie.jsx("span",{className:"text-xs sidebar-foreground",children:g("nav.kiroConnected")})]}),ie.jsxs("div",{className:"flex items-center gap-3",children:[ie.jsx("div",{className:"w-8 h-8 rounded-lg bg-green-500/25 flex items-center justify-center text-green-600 dark:text-green-400",children:ie.jsx(_,{size:14})}),ie.jsx("div",{className:"flex-1 min-w-0",children:ie.jsx("div",{className:"text-xs font-bold truncate sidebar-foreground",children:n.provider||"Local"})})]})]})}),ie.jsxs("div",{className:xn("px-3 pb-3 flex items-center gap-2",r?"flex-col":"justify-between"),children:[ie.jsxs("div",{className:"flex items-center gap-1",children:[ie.jsx(Bi,{children:ie.jsxs(Wi,{children:[ie.jsx(Gi,{asChild:!0,children:ie.jsx(Sn,{variant:"ghost",size:"icon",onClick:()=>{const e=(ng.indexOf(m)+1)%ng.length;p(ng[e])},className:"sidebar-card sidebar-foreground sidebar-hover h-7 w-7",children:ie.jsx(P,{size:14})})}),ie.jsx(qi,{side:r?"right":"top",children:T})]})}),ie.jsx(Bi,{children:ie.jsxs(Wi,{children:[ie.jsx(Gi,{asChild:!0,children:ie.jsx(Sn,{variant:"ghost",size:"icon",onClick:y,className:"sidebar-foreground sidebar-hover h-7 w-7",children:r?ie.jsx(U,{size:14}):ie.jsx(K,{size:14})})}),ie.jsx(qi,{side:r?"right":"top",children:g(r?"nav.expandSidebar":"nav.collapseSidebar")})]})})]}),!r&&ie.jsxs("span",{className:"text-[10px] ml-auto sidebar-muted font-mono tracking-tighter",children:["v",s||"..."]})]})]})}function ig(){const{showUpdate:t}=xu();return e.useEffect(()=>{(async()=>{try{const e=await ce();if(e.has_update&&e.latest_version){const o=await d();o&&t({version:e.latest_version,body:e.notes},o)}}catch(st){}})()},[]),null}const rg="/assets/alipay-Cahd6Vly.jpg",lg="/assets/wechat-B2jrs65T.jpg",cg=({size:e=14})=>ie.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"currentColor",children:ie.jsx("path",{d:"M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0zm5.562 8.161c-.18 1.897-.962 6.502-1.359 8.627-.168.9-.5 1.201-.82 1.23-.697.064-1.226-.461-1.901-.903-1.056-.692-1.653-1.123-2.678-1.799-1.185-.781-.417-1.21.258-1.911.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.139-5.062 3.345-.479.329-.913.489-1.302.481-.428-.009-1.252-.242-1.865-.442-.752-.244-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.831-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635.099-.002.321.023.465.141.121.099.155.232.171.326.016.094.036.308.02.475z"})});function dg(){const{t:t,theme:o}=Zu(),n=mu(o),[a,s]=e.useState(!1),[i,r]=e.useState(null);e.useEffect(()=>{localStorage.getItem("welcome_last_shown")!==(new Date).toDateString()&&s(!0)},[]);const l=()=>{s(!1);const e=(new Date).toDateString();localStorage.setItem("welcome_last_shown",e)};return a?ie.jsxs("div",{className:"fixed inset-0 bg-black/60 flex items-center justify-center z-50 p-4",children:[ie.jsxs("div",{className:"surface-card rounded-2xl w-[760px] max-w-full shadow-2xl border border-border relative overflow-hidden flex flex-col",children:[ie.jsx("div",{className:`absolute top-0 right-0 w-64 h-64 ${n.bgSoft} rounded-full -translate-y-1/2 translate-x-1/2`}),ie.jsx("button",{onClick:l,className:"absolute right-4 top-4 w-8 h-8 rounded-full flex items-center justify-center transition-colors duration-200 z-10 cursor-pointer focus:ring-2 focus:ring-blue-500/30 hover:bg-muted/50",children:ie.jsx(u,{size:18,className:"text-foreground"})}),ie.jsx("div",{className:"px-6 pt-6 pb-2 relative",children:ie.jsxs("div",{className:"flex items-center gap-4",children:[ie.jsx("div",{className:"relative flex-shrink-0",children:ie.jsx("div",{className:"w-14 h-14 bg-primary rounded-2xl flex items-center justify-center shadow-lg",children:ie.jsx("svg",{width:"28",height:"28",viewBox:"0 0 40 40",fill:"none",children:ie.jsx("path",{d:"M20 4C12 4 6 10 6 18C6 22 8 25 8 25C8 25 7 28 7 30C7 32 8 34 10 34C11 34 12 33 13 32C14 33 16 34 20 34C24 34 26 33 27 32C28 33 29 34 30 34C32 34 33 32 33 30C33 28 32 25 32 25C32 25 34 22 34 18C34 10 28 4 20 4ZM14 20C12.5 20 11 18.5 11 17C11 15.5 12.5 14 14 14C15.5 14 17 15.5 17 17C17 18.5 15.5 20 14 20ZM26 20C24.5 20 23 18.5 23 17C23 15.5 24.5 14 26 14C27.5 14 29 15.5 29 17C29 18.5 27.5 20 26 20Z",fill:"white"})})})}),ie.jsxs("div",{className:"flex-1",children:[ie.jsx("h2",{className:"text-lg font-bold text-foreground mb-0.5",children:t("welcome.appName")}),ie.jsx("p",{className:"text-xs text-muted-foreground",children:t("welcome.permanentlyFree")})]})]})}),ie.jsxs("div",{className:"px-6 py-4 relative grid grid-cols-[1fr_1fr] gap-5",children:[ie.jsxs("div",{className:"flex flex-col gap-3",children:[ie.jsx("div",{className:"border-l-4 border-amber-500 bg-muted/30 rounded-r-xl p-4",children:ie.jsxs("div",{className:"flex items-start gap-3",children:[ie.jsx("div",{className:"flex-shrink-0 w-8 h-8 rounded-lg bg-amber-500/20 flex items-center justify-center",children:ie.jsx(f,{size:16,className:"text-amber-500"})}),ie.jsxs("div",{className:"flex-1",children:[ie.jsx("p",{className:"text-sm font-semibold text-foreground mb-2",children:t("welcome.freeNotice")}),ie.jsxs("div",{className:"text-xs text-muted-foreground space-y-1.5 leading-relaxed",children:[ie.jsx("p",{children:t("welcome.openSourceFree")}),ie.jsx("p",{children:t("welcome.allFeaturesOpen")}),ie.jsx("p",{children:t("welcome.reportIfCharged")})]})]})]})}),ie.jsxs("div",{className:"space-y-2",children:[ie.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:t("welcome.joinUs")}),ie.jsxs("a",{href:"https://github.com/hj01857655/kiro-account-manager",target:"_blank",rel:"noopener noreferrer",className:"group flex items-center gap-3 px-3 py-2 rounded-lg border border-border bg-card hover:bg-muted/40 transition-colors",children:[ie.jsx("div",{className:"w-8 h-8 rounded-md flex items-center justify-center text-foreground bg-foreground/5",children:ie.jsx(H,{size:15})}),ie.jsxs("div",{className:"flex-1 min-w-0",children:[ie.jsx("div",{className:"text-xs font-medium text-foreground truncate",children:"GitHub"}),ie.jsx("div",{className:"text-[11px] text-muted-foreground truncate",children:"kiro-account-manager"})]}),ie.jsx(B,{size:13,className:"text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity flex-shrink-0"})]}),ie.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[ie.jsxs("a",{href:"https://t.me/kiro520",target:"_blank",rel:"noopener noreferrer",className:"group flex items-center gap-2 px-3 py-2 rounded-lg border border-border bg-card hover:bg-muted/40 transition-colors",children:[ie.jsx("div",{className:"w-7 h-7 rounded-md flex items-center justify-center text-blue-500 bg-blue-500/10",children:ie.jsx(cg,{size:14})}),ie.jsx("div",{className:"flex-1 min-w-0",children:ie.jsx("div",{className:"text-xs font-medium text-foreground truncate",children:t("welcome.tgChannel")})}),ie.jsx(B,{size:13,className:"text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity flex-shrink-0"})]}),ie.jsxs("a",{href:"https://t.me/ide520",target:"_blank",rel:"noopener noreferrer",className:"group flex items-center gap-2 px-3 py-2 rounded-lg border border-border bg-card hover:bg-muted/40 transition-colors",children:[ie.jsx("div",{className:"w-7 h-7 rounded-md flex items-center justify-center text-blue-500 bg-blue-500/10",children:ie.jsx(cg,{size:14})}),ie.jsx("div",{className:"flex-1 min-w-0",children:ie.jsx("div",{className:"text-xs font-medium text-foreground truncate",children:t("welcome.tgGroup")})}),ie.jsx(B,{size:13,className:"text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity flex-shrink-0"})]})]})]})]}),ie.jsxs("div",{className:"flex flex-col gap-3",children:[ie.jsxs("div",{className:"bg-muted/30 rounded-xl p-4 flex flex-col",children:[ie.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[ie.jsx(W,{size:16,className:"text-amber-500"}),ie.jsx("p",{className:"text-sm font-semibold text-foreground",children:t("welcome.buyMeCoffee")})]}),ie.jsx("p",{className:"text-xs text-muted-foreground mb-3",children:t("welcome.supportMessage")}),ie.jsxs("div",{className:"flex justify-center gap-3 mb-2",children:[ie.jsxs("button",{onClick:()=>r(rg),className:"flex flex-col items-center gap-1.5 p-2 rounded-lg border border-border bg-card hover:bg-muted/40 cursor-pointer transition-colors focus:outline-none focus:ring-2 focus:ring-primary/30",children:[ie.jsx("img",{src:rg,alt:"支付宝",className:"w-20 h-20 rounded-md"}),ie.jsx("span",{className:"text-xs font-medium text-foreground",children:t("welcome.alipay")})]}),ie.jsxs("button",{onClick:()=>r(lg),className:"flex flex-col items-center gap-1.5 p-2 rounded-lg border border-border bg-card hover:bg-muted/40 cursor-pointer transition-colors focus:outline-none focus:ring-2 focus:ring-primary/30",children:[ie.jsx("img",{src:lg,alt:"WeChat Pay",className:"w-20 h-20 rounded-md"}),ie.jsx("span",{className:"text-xs font-medium text-foreground",children:t("welcome.wechatPay")})]})]}),ie.jsx("p",{className:"text-[11px] text-muted-foreground text-center",children:t("welcome.clickToEnlarge")})]}),ie.jsxs("a",{href:"https://qm.qq.com/q/xzWxJsSUD0",target:"_blank",rel:"noopener noreferrer",className:"group flex items-start gap-3 px-3 py-2.5 rounded-lg border border-border bg-card hover:bg-muted/40 transition-colors",children:[ie.jsx("div",{className:"w-8 h-8 rounded-md flex items-center justify-center text-purple-500 bg-purple-500/10",children:ie.jsx(G,{size:15})}),ie.jsxs("div",{className:"flex-1 min-w-0",children:[ie.jsx("div",{className:"text-xs font-medium text-foreground mb-1",children:t("welcome.sponsorBenefits")}),ie.jsxs("div",{className:"text-[11px] text-muted-foreground leading-relaxed space-y-0.5",children:[ie.jsx("p",{children:t("welcome.priorityFeedback")}),ie.jsx("p",{children:t("welcome.priorityFeatures")}),ie.jsx("p",{children:t("welcome.oneOnOneSupport")})]}),ie.jsx("p",{className:"text-[11px] text-muted-foreground mt-1.5 leading-relaxed",children:t("welcome.sponsorHint")})]}),ie.jsx(B,{size:13,className:"text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity flex-shrink-0 mt-1"})]})]})]}),ie.jsx("div",{className:"px-6 py-3 border-t border-border/50 flex justify-end relative",children:ie.jsx("button",{onClick:l,className:"px-5 py-2 text-sm font-semibold rounded-xl text-white bg-primary hover:bg-primary/90 shadow-lg shadow-primary/25 transition-colors duration-200 cursor-pointer focus:outline-none focus:ring-2 focus:ring-primary/30 active:scale-[0.98]",children:t("welcome.iUnderstand")})})]}),i&&ie.jsx("div",{className:"fixed inset-0 bg-black/80 flex items-center justify-center z-[60] p-4",onClick:()=>r(null),children:ie.jsxs("div",{className:"relative",onClick:e=>e.stopPropagation(),children:[ie.jsx("img",{src:i,alt:t("common.preview"),className:"max-w-[360px] max-h-[360px] rounded-2xl shadow-2xl"}),ie.jsx("button",{className:"absolute -top-3 -right-3 w-10 h-10 rounded-full flex items-center justify-center shadow-lg transition-colors duration-200 cursor-pointer focus:ring-2 focus:ring-blue-500/30 surface-card border border-border",onClick:()=>r(null),children:ie.jsx(u,{size:18,className:"text-foreground"})})]})})]}):null}function ug(e=document){var t;const o=null==(t=null==e?void 0:e.getElementById)?void 0:t.call(e,"boot-splash");return!!o&&(o.dataset.state="hidden",o.remove(),!0)}const gg=new Set(["active"]),mg=new Set(["capped"]),pg=new Set(["overage"]),fg=new Set(["banned"]),yg=new Set(["invalid"]),hg=new Set(["expired"]);function wg(e,t){return e&&"object"==typeof e&&!Array.isArray(e)?{status:e.status||e.status,usageData:e.usageData||t}:{status:e,usageData:t}}function vg(e,t,o){const n=null==e?void 0:e[o];if("number"==typeof n)return n;const a=null==e?void 0:e[t];return"number"==typeof a?a:null}function bg(e,t){const{status:o,usageData:n}=wg(e,t);if(!o)return"unknown";let a=o;return gg.has(o)?a="active":mg.has(o)?a="capped":pg.has(o)?a="overage":fg.has(o)?a="banned":yg.has(o)?a="invalid":hg.has(o)&&(a="expired"),"active"===a&&function(e){var t,o,n,a,s;const i=null==(t=null==e?void 0:e.usageBreakdownList)?void 0:t[0];if(!i)return!1;const r=vg(i,"currentUsage","currentUsageWithPrecision"),l=vg(i,"usageLimit","usageLimitWithPrecision");if("number"!=typeof r||"number"!=typeof l||l<=0)return!1;if(!(r>=l))return!1;const c=null==(o=null==e?void 0:e.subscriptionInfo)?void 0:o.overageCapability,d=null==(n=null==e?void 0:e.overageConfiguration)?void 0:n.overageStatus,u=null!=(a=i.currentOverages)?a:0,g=null!=(s=i.overageCap)?s:0;return"OVERAGE_CAPABLE"!==c||"ENABLED"!==d||g>0&&u>=g}(n)?"capped":a}function kg(e,t){return"capped"===bg(e,t)}function xg(e,t){return"banned"===bg(e,t)}function Cg(e,t){const o=bg(e,t);return"banned"===o||"invalid"===o||"expired"===o}function Sg(e,t,o){var n,a,s,i,r,l,c;const d=bg(e,o);switch(d){case"active":return{key:"active",label:null!=(n=null==t?void 0:t("accounts.active"))?n:"正常",tone:"success"};case"capped":return{key:"capped",label:null!=(a=null==t?void 0:t("accounts.capped"))?a:"封顶",tone:"warning"};case"overage":return{key:"overage",label:null!=(s=null==t?void 0:t("accounts.overage"))?s:"超额中",tone:"warning"};case"banned":return{key:"banned",label:null!=(i=null==t?void 0:t("accounts.banned"))?i:"封禁",tone:"danger"};case"invalid":return{key:"invalid",label:null!=(r=null==t?void 0:t("accounts.invalid"))?r:"失效",tone:"danger"};case"expired":return{key:"expired",label:null!=(l=null==t?void 0:t("accounts.expired"))?l:"过期",tone:"warning"};default:const{status:u}=wg(e,o);return{key:d,label:u||(null!=(c=null==t?void 0:t("common.unknown"))?c:"未知"),tone:"warning"}}}function Ag(...e){for(const t of e)if("string"==typeof t){const e=t.trim();if(e)return e}return""}function Pg(e){const t=Ag(null==e?void 0:e.userId);return Ag(null==e?void 0:e.email,t,null==e?void 0:e.label)||"Unknown"}function Tg(e){const t=e&&"object"==typeof e?e:{};return{...t,email:Ag(t.email),userId:Ag(t.userId),label:Ag(t.label),status:Ag(t.status)||"unknown",provider:Ag(t.provider),authMethod:Ag(t.authMethod),addedAt:Ag(t.addedAt),expiresAt:Ag(t.expiresAt),groupId:Ag(t.groupId)||null,machineId:Ag(t.machineId),tagLinks:(o=t.tagLinks,Array.isArray(o)?o.filter(e=>e&&"object"==typeof e).map(e=>({...e,tagId:Ag(e.tagId),tagName:Ag(e.tagName)||null,linkedAt:Ag(e.linkedAt)})).filter(e=>e.tagId):[]),usageData:t.usageData&&"object"==typeof t.usageData?t.usageData:null};var o}const Dg=e=>Pg(e),Eg=e=>null==e?"0":Number.isInteger(e)?e.toString():parseFloat(e.toFixed(2)).toString(),Ig=e=>{var t,o;return(null==(o=null==(t=e.usageData)?void 0:t.usageBreakdownList)?void 0:o[0])||null},Mg=e=>{var t,o;if(Cg(e)&&!kg(e))return 0;const n=Ig(e);if(!n)return 0;const a=Date.now(),s=null!=(t=n.usageLimit)?t:0,i=n.freeTrialInfo,r="ACTIVE"===(null==i?void 0:i.freeTrialStatus)&&null!=(o=null==i?void 0:i.usageLimit)?o:0,l=Array.isArray(n.bonuses)?n.bonuses:[];let c=0;return l.forEach(e=>{var t;(e.expiresAt?1e3*e.expiresAt:1/0)>a&&"ACTIVE"===e.status&&(c+=null!=(t=e.usageLimit)?t:0)}),s+r+c},Rg=e=>{var t,o;if(Cg(e)&&!kg(e))return 0;const n=Ig(e);if(!n)return 0;const a=Date.now(),s=null!=(t=n.currentUsage)?t:0,i=n.freeTrialInfo,r="ACTIVE"===(null==i?void 0:i.freeTrialStatus)&&null!=(o=null==i?void 0:i.currentUsage)?o:0,l=Array.isArray(n.bonuses)?n.bonuses:[];let c=0;return l.forEach(e=>{var t;(e.expiresAt?1e3*e.expiresAt:1/0)>a&&"ACTIVE"===e.status&&(c+=null!=(t=e.currentUsage)?t:0)}),s+r+c},Lg=e=>{var t,o,n,a;return null!=(a=null!=(n=null==(o=null==(t=e.usageData)?void 0:t.subscriptionInfo)?void 0:o.type)?n:e.subscriptionType)?a:""},Fg=e=>{var t,o,n,a;return null!=(a=null!=(n=null==(o=null==(t=e.usageData)?void 0:t.subscriptionInfo)?void 0:o.subscriptionTitle)?n:e.subscriptionPlan)?a:""};function Ng(e){const t=e.length,o=e.filter(e=>{return"active"===bg(e,t);var t}).length,n=e.filter(e=>xg(e)).length,a=e.filter(e=>Cg(e)).length,s=e.reduce((e,t)=>e+Mg(t),0),i=e.reduce((e,t)=>e+Rg(t),0),r=e.filter(e=>Lg(e).includes("PRO+")||Fg(e).includes("PRO+")).length,l=e.filter(e=>(Lg(e).includes("PRO")||Fg(e).includes("PRO"))&&!(Lg(e).includes("PRO+")||Fg(e).includes("PRO+"))).length;return{total:t,active:o,banned:n,unavailable:a,proPlus:r,pro:l,usagePercent:s>0?Number((i/s*100).toFixed(1)):0,totalQuota:s,totalUsed:i,remaining:s-i,totalQuotaStr:Eg(s),totalUsedStr:Eg(i),remainingStr:Eg(s-i)}}function jg(e,t){return 0===t?0:Math.min(100,e/t*100)}function Og(e,t,o){var n,a,s;const i=null==(n=null==o?void 0:o.usageBreakdownList)?void 0:n[0];if(!i)return{totalQuota:e,totalUsed:t,totalPercent:jg(t,e),freeTrialQuota:0,freeTrialUsed:0,bonusQuota:0,bonusUsed:0};const r=Date.now(),l=i.freeTrialInfo,c="ACTIVE"===(null==l?void 0:l.freeTrialStatus),d=c&&null!=(a=null==l?void 0:l.usageLimit)?a:0,u=c&&null!=(s=null==l?void 0:l.currentUsage)?s:0,g=Array.isArray(i.bonuses)?i.bonuses:[];let m=0,p=0;g.forEach(e=>{var t,o;(e.expiresAt?1e3*e.expiresAt:1/0)>r&&"ACTIVE"===e.status&&(m+=null!=(t=e.usageLimit)?t:0,p+=null!=(o=e.currentUsage)?o:0)});const f=e+d+m,y=t+u+p;return{totalQuota:f,totalUsed:y,totalPercent:jg(y,f),freeTrialQuota:d,freeTrialUsed:u,bonusQuota:m,bonusUsed:p}}function _g(e){var t,o,n,a;const s=null==(o=null==(t=e.usageData)?void 0:t.usageBreakdownList)?void 0:o[0];if(!s)return 0;const i=null!=(n=s.currentUsage)?n:0,r=null!=(a=s.usageLimit)?a:0,{totalUsed:l,totalQuota:c}=Og(r,i,e.usageData);return jg(l,c)}const Ug=e.createContext(null);function Kg({children:t}){const[o,n]=e.useState([]),[a,s]=e.useState(null),[i,l]=e.useState(!0),[c,d]=e.useState(!1),[u,g]=e.useState(null),m=e.useRef(null),p=e.useCallback(async()=>{try{g(null);const[e,t]=await Promise.all([pe(),Lt().catch(()=>null)]);n(e||[]),s(t)}catch(st){g(st)}},[]);e.useEffect(()=>{let e=null,t=null,o=!0;return p().finally(()=>{o&&l(!1)}),(async()=>{e=await r("login-success",()=>{o&&p()}),t=await r("accounts-updated",()=>{o&&p()})})(),()=>{o=!1,e&&e(),t&&t(),m.current&&clearTimeout(m.current)}},[p]);const f=e.useCallback(async()=>{d(!0);try{await p()}finally{m.current&&clearTimeout(m.current),m.current=setTimeout(()=>d(!1),300)}},[p]),y=e.useCallback(async e=>{try{(await fe(e)).warning}catch(st){}await p()},[p]),h=e.useMemo(()=>Ng(o),[o]),w=e.useMemo(()=>a?o.find(e=>a.refreshToken&&e.refreshToken===a.refreshToken||a.accessToken&&e.accessToken===a.accessToken):null,[o,a]),v=e.useMemo(()=>{if(!w)return{quota:0,used:0,percent:0};const e=Mg(w),t=Rg(w);return{quota:e,used:t,percent:e>0?Number((t/e*100).toFixed(1)):0}},[w]),b={accounts:o,localToken:a,loading:i,refreshing:c,error:u,stats:h,currentAccount:w,currentQuotaInfo:v,refresh:f,refreshAccount:y};return ie.jsx(Ug.Provider,{value:b,children:t})}function Hg(){const t=e.useContext(Ug);if(!t)throw new Error("useAccount must be used within AccountProvider");return t}const Bg=e.createContext(null);function Wg({children:t}){const[o,n]=e.useState(!0);e.useEffect(()=>{Cu().then(e=>{var t;n(null==(t=null==e?void 0:e.privacyMode)||t)}).catch(()=>{})},[]);const a=e.useCallback(async e=>{n(e);try{await Su({privacyMode:e})}catch(t){}},[]),s=e.useCallback(e=>{if(!o||!e)return e;const[t,n]=e.split("@");if(!n)return e;let a;a=t.length<=2?"*".repeat(t.length):t.length<=4?t[0]+"***":t.slice(0,2)+"***"+t.slice(-2);const s=n.split(".");return`${a}@${"***."+s[s.length-1]}`},[o]),i=e.useCallback(e=>o&&e?e.length<=2?"*".repeat(e.length):e.length<=4?e[0]+"***":e.slice(0,2)+"***"+e.slice(-2):e,[o]),r=e.useMemo(()=>({privacyMode:o,setPrivacyMode:a,maskEmail:s,maskNickname:i}),[o,s,i]);return ie.jsx(Bg.Provider,{value:r,children:t})}function Gg(){const t=e.useContext(Bg);if(!t)throw new Error("usePrivacy must be used within PrivacyProvider");return t}const qg=new Set(["callback"]);function zg(e){return!qg.has(e)}function Vg(e,t){if(!zg(t))return[t];const o=Array.isArray(e)?e.filter(zg):[];return o.includes(t)?o:[...o,t]}const Qg=Object.fromEntries(eg.map(e=>[e.id,e.component])),$g={...Qg,...tg};function Jg(){const{t:e}=Zu();return ie.jsx("div",{className:"h-full flex items-center justify-center surface-main",children:ie.jsx("div",{className:"animate-pulse text-muted-foreground",children:e("common.loading")})})}function Yg({onReady:t}){const o=e.useRef(!1);return e.useEffect(()=>{o.current||(o.current=!0,t())},[t]),null}function Xg(){const[t,o]=e.useState(null),[n,a]=e.useState(()=>localStorage.getItem("activeMenu")||"home"),[i,l]=e.useState(()=>Vg([],localStorage.getItem("activeMenu")||"home")),{t:c}=Zu(),{settings:d,loading:u}=Xu(),{showError:g,showInfo:m}=xu();e.useEffect(()=>{n&&"callback"!==n&&localStorage.setItem("activeMenu",n)},[n]),e.useEffect(()=>{l(e=>Vg(e,n))},[n]);const[p,f]=e.useState(!1),y=e.useRef(!1);e.useEffect(()=>{y.current||p&&requestAnimationFrame(()=>{requestAnimationFrame(()=>{y.current=!0,ug(),de().catch(e=>{})})})},[p]),e.useEffect(()=>{h();const e=new URL(window.location.href);if("/callback"===e.pathname&&(e.searchParams.has("code")||e.searchParams.has("state")))return void a("callback");let t=null,o=null,n=null,s=null,i=!0;return(async()=>{t=await r("login-success",()=>{i&&(h(),a("accounts"))}),o=await r("account-banned",e=>{i&&g(c("app.accountBanned"),c("app.accountBannedMessage",{email:e.payload.email}))}),n=await r("account-token-invalid",e=>{i&&m(c("app.tokenExpired"),c("app.tokenExpiredMessage",{email:e.payload.email}))}),s=await r("sync-network-error",e=>{i&&g(c("app.networkError"),c("app.networkErrorMessage",{count:e.payload.count,total:e.payload.total}))})})(),()=>{i=!1,t&&t(),o&&o(),n&&n(),s&&s()}},[]);const h=async()=>{try{const e=await s("get_current_user");o(e)}catch(st){}},w=e.useMemo(()=>({home:{onNavigate:a},desktopOAuth:{onLogin:()=>{h(),a("accounts")}},accounts:{onNavigate:a}}),[]);return ie.jsx(Wg,{children:ie.jsx(Kg,{children:ie.jsxs("div",{className:"flex h-screen w-full bg-transparent overflow-hidden",children:[ie.jsx(sg,{activeMenu:n,onMenuChange:a,onLogout:async()=>{await s("logout"),o(null)}}),ie.jsx("main",{className:"flex-1 overflow-hidden surface-main",children:ie.jsx("div",{className:"h-full w-full",children:ie.jsxs(e.Suspense,{fallback:ie.jsx(Jg,{}),children:[(()=>{if(!zg(n)){const e=$g[n]||$g.home;return ie.jsx(e,{...w[n]||{}})}return i.map(e=>{const t=$g[e];return t?ie.jsx("section",{className:"h-full w-full",style:{display:e===n?"block":"none"},"aria-hidden":e===n?"false":"true",children:ie.jsx(t,{...w[e]||{}})},e):null})})(),ie.jsx(Yg,{onReady:()=>f(!0)})]})})}),ie.jsx(ig,{}),ie.jsx(dg,{}),ie.jsx(Mt,{position:"top-center",toastOptions:{style:{marginTop:"80px"}}})]})})})}function Zg({children:e,...t}){return ie.jsx(Xi,{...t,children:e})}const em={"language.english":"English","language.chinese":"Chinese","language.russian":"Русский","nav.home":"Dashboard","nav.accounts":"Account Management","nav.sessions":"Session Management","nav.cliSessions":"CLI Sessions","nav.agentConfig":"Agent Config","nav.desktopOAuth":"Online Login","nav.socialIdC":"Social/IdC","nav.settings":"Settings","nav.gateway":"Kiro API Gateway","nav.about":"About","gateway.config":"Configuration","nav.kiroConnected":"Kiro IDE Connected","nav.collapseSidebar":"Double-click to collapse sidebar","nav.expandSidebar":"Double-click to expand sidebar","home.title":"Kiro Account Manager","home.subtitle":"Account quotas and usage overview","home.totalAccounts":"Total Accounts","home.activeAccounts":"Active Accounts","home.activeVsBanned":"Active/Banned","home.activeVsUnavailable":"Active/Unavailable","home.proAccounts":"PRO Accounts","home.usagePercent":"Quota Usage Rate","home.currentAccount":"Current Logged Account","home.loggedIn":"Logged In","home.notLoggedIn":"Kiro IDE Not Logged In","home.clickToSwitch":"Click 'Switch' in Account Management","home.quotaOverview":"Quota Overview","home.usedTotal":"Used / Total","home.monthlyUsage":"Monthly Usage","home.daysUntilReset":"days until reset","home.resetToday":"Resets today","home.refreshAccount":"Refresh Account","home.subscriptionDetails":"Subscription Details","home.accountInfo":"Account Information","home.quotaDetails":"Quota Details","home.base":"Base","home.trial":"Trial","home.type":"Type","home.overage":"Overage","home.upgrade":"Upgrade","home.status":"Status","home.enabled":"Enabled","home.disabled":"Disabled","home.reset":"Reset","home.rate":"Rate","home.expiresAt":"Expires At","home.unknown":"Unknown","home.loadFailed":"Load Failed","home.loadDataFailed":"Failed to load data","home.mcpTools":"MCP Tools","stats.usageDistribution":"Usage Distribution","stats.lowUsage":"Low Usage","stats.mediumUsage":"Medium Usage","stats.highUsage":"High Usage","stats.accounts":"accounts","stats.accountUsage":"Account Quota Ranking","stats.quotaDistribution":"Quota Distribution","stats.usageTrend":"Usage Trend","stats.totalUsed":"Total Used","settings.title":"Settings","settings.subtitle":"Configure general settings, appearance themes, and Kiro IDE related options","settings.general":"General","settings.language":"Language","settings.displayLanguage":"Display Language","settings.appearance":"Appearance","settings.kiro":"IDE Settings","settings.agent":"Agent","settings.theme":"Theme Settings","settings.tech":"Tech Blue","settings.darkOne":"Deep Blue (One Dark)","settings.business":"Business Gold","settings.sunset":"Sunset Orange","settings.ocean":"Ocean Blue","settings.rose":"Rose Red","settings.aurora":"Aurora Cyan","settings.forest":"Forest Green","settings.midnight":"Midnight Black","settings.sakura":"Sakura Pink","settings.themeDesc":"Choose your preferred interface theme","settings.themeSystem":"Follow system","settings.density":"List density","settings.densityDesc":"Adjust the spacing and compactness of account cards","settings.densityCompact":"Compact","settings.densityComfortable":"Comfortable","settings.densitySpacious":"Spacious","settings.uiScale":"Interface scale","settings.uiScaleDesc":"Scale the whole interface for high-DPI screens and readability","settings.reduceMotion":"Reduce motion","settings.reduceMotionDesc":"Disable UI transition animations for motion sensitivity","settings.reduceMotionLabel":"Disable transition animations","settings.switchTarget":"Switch target","settings.switchTargetIde":"Kiro IDE only","settings.switchTargetCli":"CLI only","settings.switchTargetBoth":"IDE + CLI","settings.switchTargetDesc":"Which side to write when switching or logging out an account","settings.closeBehavior":"Close behavior","settings.restartAsAdmin":"Restart as administrator","settings.confirmRestartAsAdmin":"The app will close and restart with administrator privileges. Your account data will not be affected.","settings.restartAsAdminFailed":"Failed to restart as administrator","settings.light":"Elegant White","settings.dark":"Ultimate Black","settings.purple":"Elegant Purple","settings.green":"Vibrant Green","settings.model":"Model Settings","settings.modelDesc":"Select the default AI model and optionally lock it to prevent changes","settings.aiModel":"AI Model","settings.lockModel":"Lock Model","settings.lockModelDesc":"When enabled, automatically monitors and restores the model setting in Kiro configuration to prevent changes by other operations","settings.account":"Account Settings","settings.accountDesc":"Configure features like automatic account refresh","settings.autoRefresh":"Auto Refresh Token","settings.autoRefreshDesc":"Periodically refresh expired or soon-to-expire account tokens to keep accounts valid","settings.refreshInterval":"Refresh Interval (minutes)","settings.autoRefreshInterval":"Refresh Interval","settings.autoChangeMachineId":"Change Machine ID on Switch","settings.autoChangeMachineIdDesc":"Automatically reset Kiro IDE's machine ID when switching accounts to avoid multi-account association","settings.machineIdMode":"Machine ID on Switch","settings.machineIdNone":"Don't Change","settings.machineIdRandom":"Random Change","settings.machineIdBind":"Bind Change","settings.browser":"Browser Settings","settings.browserDesc":"Configure the browser used for OAuth login (defaults to incognito mode)","settings.browserPath":"Browser Path","settings.browserPlaceholder":"Leave empty to use system default browser","settings.detect":"Detect","settings.apply":"Apply","settings.saving":"Saving...","settings.proxy":"Proxy Settings","settings.proxyDesc":"Configure HTTP proxy for Kiro IDE (syncs with http.proxy in settings.json)","settings.httpProxy":"Kiro IDE HTTP Proxy","settings.appProxyMode":"App API Proxy","settings.appProxyModeDesc":"Controls whether this app's own API requests reuse the Kiro IDE proxy.","settings.appProxyFollowKiro":"Follow Kiro IDE Proxy","settings.appProxyDisabled":"No Proxy","settings.kiroInfo":"Kiro IDE Information","settings.kiroInfoDesc":"Device and session information read from local Kiro IDE","settings.machineId":"Machine ID","settings.machineIdDesc":"Reset Kiro IDE's machine ID","settings.resetMachineId":"Reset Machine ID","settings.systemMachineGuid":"System Machine GUID","settings.backup":"Backup","settings.restore":"Restore","settings.selectBrowser":"Select","settings.detectedBrowsers":"Detected Browsers","settings.close":"Close","settings.browserTip":"Leave empty to use system default browser. Click 'Detect' to automatically find installed browsers","settings.proxyTip":"The Kiro IDE proxy is written to Kiro IDE settings. The app API proxy controls whether this app reuses it for quota, token refresh, and account checks.","settings.saveSuccess":"Saved successfully","settings.saveFailed":"Save failed","settings.proxyApplied":"Proxy settings applied","settings.proxyCleared":"Proxy cleared","settings.browserSaved":"Browser path saved","settings.defaultBrowser":"Restored to system default browser","settings.redeemServer":"Redeem Server","settings.redeemServerDesc":"Configure LicenseSystem service address for card redemption feature","settings.redeemServerSaved":"Redeem server address saved","settings.redeemServerCleared":"Redeem server address cleared","settings.detectFailed":"Detection failed","settings.noBrowserFound":"No browser detected in common paths, please enter path manually","settings.detectSuccess":"Detection successful","settings.systemProxyDetected":"System proxy detected","settings.noProxyDetected":"No proxy detected","settings.noProxyConfigured":"System not configured with proxy, please enter manually","settings.proxyConfigured":"Proxy detected","settings.proxyNotEnabled":"System proxy configured but not enabled","settings.tunModeDetected":"TUN mode detected","settings.tunModeEnabled":"System using TUN mode proxy","settings.tunModeHint":"No proxy configuration needed in TUN mode, network traffic is automatically forwarded","settings.useThisProxy":"Use this proxy?","settings.running":"Running","settings.notRunning":"Not Running","settings.start":"Start","settings.stop":"Stop","settings.deviceId":"Device ID","settings.resetAll":"Reset All","settings.resetting":"Resetting...","settings.resetRequiresClose":"Resetting device ID requires closing Kiro IDE first","settings.currentMachineGuid":"Current system machine GUID","settings.hasBackup":"Backup exists","settings.backupValue":"Backup value","settings.backupTime":"Backup time","settings.computerName":"Computer Name","settings.bindMachineId":"Bind machine ID to account","settings.bindMachineIdDesc":"Each account uses a fixed machine ID, automatically restores corresponding machine ID when switching","settings.useBoundMachineId":"Use bound machine ID","settings.useBoundMachineIdDesc":"When enabled, uses account-bound machine ID; when disabled, generates new random machine ID each time","settings.closeKiroIDE":"Close Kiro IDE","settings.kiroRunningNeedClose":"Kiro IDE is detected running, need to close it before resetting machine ID.\n\nClose Kiro IDE and continue?","settings.closeAndContinue":"Close and Continue","settings.closeKiroFailed":"Failed to close Kiro IDE","settings.confirmResetMachineId":"Are you sure you want to reset all machine IDs?","settings.resetSuccess":"Reset successful","settings.resetFailed":"Reset failed","settings.machineIdResetSuccess":"Machine ID reset!\n\nStart Kiro IDE now?","settings.resetMachineIdFailed":"Failed to reset machine ID","settings.backupSuccess":"Backup successful","settings.backupFailed":"Backup failed","settings.machineGuidBackedUp":"System machine GUID backed up","settings.restoreFailed":"Restore failed","settings.restoreSuccess":"Restore successful","settings.noBackupFound":"No backup found","settings.restoreMachineGuid":"Restore system machine GUID","settings.confirmRestoreMachineGuid":"Are you sure you want to restore system machine GUID to backup value?","settings.requiresAdmin":"This operation requires administrator privileges, may need to run program as administrator.","settings.machineGuidRestored":"System machine GUID restored to","settings.resetSystemMachineGuid":"Reset system machine GUID","settings.confirmResetSystemMachineGuid":"Are you sure you want to generate a new system machine GUID?\n\nThis operation will:\n• Generate a new random UUID\n• Write to system registry\n• May affect some software's authorization verification\n• Requires administrator privileges\n• Recommend backing up current value first","settings.confirmReset":"Confirm Reset","settings.newMachineGuid":"New system machine GUID","settings.detectBrowsersTitle":"Auto-detect installed browsers","settings.detectProxyTitle":"Auto-detect system proxy","settings.machineGuidDescWin":"Manage Windows system MachineGuid (registry HKLM\\SOFTWARE\\Microsoft\\Cryptography)","settings.machineGuidDescMac":"Manage macOS system machine code (implemented by overwriting files, does not affect hardware UUID)","settings.machineGuidDescLinux":"Manage Linux system machine code (/etc/machine-id)","settings.adminWarningTitle":"Important Notes","settings.adminWarning1":"Modifying system machine code requires administrator privileges","settings.adminWarning2":"May affect some software's authorization verification","settings.adminWarning3":"Recommend backing up current value before modification","settings.appDataDir":"App Data Directory","settings.appDataDirDesc":"View and manage application data storage location","settings.currentPath":"Current Path","settings.openInExplorer":"Open in File Explorer","settings.appDataDirTip":"This directory contains account data, configuration files, logs, and other application data","settings.openFailed":"Open failed","settings.kiroIdePath":"Custom Kiro IDE Installation Path","settings.kiroIdePathDesc":"Specify Kiro IDE installation location for account switching feature","settings.customKiroPath":"Custom Path","settings.useDefaultPath":"Use Default Path","settings.kiroPathTip":"Leave empty to use system default installation path. Click 'Browse' to select custom installation location","settings.browse":"Browse","settings.clear":"Clear","settings.usingDefaultPath":"Using default path","settings.kiroPathSaved":"Custom Kiro path saved","settings.kiroPathCleared":"Custom Kiro path cleared","settings.restart":"Restart","settings.restartFailed":"Restart failed","settings.macOSNote":"macOS Note","settings.macOSNoteDesc":"macOS implements machine code modification by writing to Kiro IDE's machineid file, no administrator privileges required.","settings.kiroSettings":"Kiro IDE Settings","settings.kiroSettingsDesc":"Configure Kiro IDE feature options","settings.enableCodebaseIndexing":"Enable Codebase Indexing","settings.enableCodebaseIndexingDesc":"When enabled, Kiro automatically indexes codebase for better code understanding and search functionality","settings.trustedCommands":"Trusted Commands","settings.trustedCommandsNone":"Off - All commands require confirmation","settings.trustedCommandsCommon":"Common - Only read/build/test commands","settings.trustedCommandsAll":"All - All commands auto-execute (dangerous)","settings.trustedCommandsDesc":"Configure trust level when Kiro executes Shell commands (requires IDE restart to take effect)","settings.trustedCommandsAllConfirmTitle":"Confirm Trust All Commands","settings.trustedCommandsAllConfirmMessage":"When enabled, Kiro can automatically execute any Shell commands, including installation scripts, file modifications, and Git destructive operations. This significantly expands risk surface, continue?","settings.trustedCommandsAllConfirmAction":"Still Enable","settings.trustedCommandsWildcardBlocked":"common mode does not allow *, switch to 'All Trust' if you need to trust all","settings.agentSettings":"Agent Settings","settings.agentSettingsDesc":"Configure Kiro Agent's startup view, autonomous mode, and feature toggles","settings.agentAutonomy":"Agent Autonomy Mode","settings.agentSupervised":"Supervised - Changes require confirmation","settings.agentAutopilot":"Autopilot - Auto-execute changes","settings.enableTabAutocomplete":"Enable Tab Autocomplete","settings.usageSummary":"Show Usage Summary","settings.enableDebugLogs":"Enable Debug Logs","settings.notifications":"Notification Settings","settings.notificationsDesc":"Choose which events trigger desktop notifications","settings.notifyActionRequired":"Notify when action required","settings.notifyFailure":"Notify on failure","settings.notifySuccess":"Notify on success","settings.notifyBilling":"Billing notifications","settings.trustedTools":"Trusted Tools","settings.trustedToolsDesc":"List of tools Agent can auto-use, comma-separated (e.g., webFetch, remote_web_search)","settings.trustedToolsPlaceholder":"webFetch, remote_web_search","settings.referenceTracker":"Code Reference Tracker","settings.configureMCP":"MCP Configuration","settings.configureMCPEnabled":"Enabled - Allow Powers to register MCP services","settings.configureMCPDisabled":"Disabled - Do not auto-register MCP services","settings.configureMCPDesc":"Control whether Kiro auto-registers MCP services, and which env vars may expand in MCP config (usually requires an IDE restart)","settings.permissions":"Permission Rules","settings.permissionsDesc":"Kiro IDE 1.0 capability-based permission model. Rules are read from and saved to ~/.kiro/settings/permissions.yaml, which is the single source of truth for permission decisions in this version.","settings.loading":"Loading...","settings.save":"Save","settings.permissionSaveError":"Failed to save permissions, please retry","settings.permissionCapability":"Capability","settings.permissionEffect":"Effect","settings.permissionEffect_allow":"Allow","settings.permissionEffect_deny":"Deny","settings.permissionEffect_ask":"Ask","settings.permissionMatch":"Match","settings.permissionExclude":"Exclude","settings.permissionRemove":"Remove rule","settings.permissionAdd":"Add rule","settings.permissionPolicies":"Policies","settings.permissionPreset":"Presets","settings.permissionPreset_read-all":"Allow reading files anywhere (including outside the workspace) and web access","settings.permissionPreset_read-only-shell":"Allow read-only shell commands (system info, git/cargo/npm queries)","settings.permissionPreset_read-workspace":"Allow reading files within the workspace","settings.permissionShellGroup":"Read-only command group","settings.permissionShellGroupPick":"Append a command group…","settings.permissionNote":"Note: rules with effect 'allow' relax permissions; 'deny' takes precedence over 'allow'; unmatched rules fall back to IDE defaults.","settings.permissionScope_global":"Global","settings.permissionScope_project":"Project","settings.permissionPickProject":"Select a project…","settings.permissionProjectPathPlaceholder":"Enter absolute project path, e.g. E:/code/my-project","settings.permissionNoWorkspaceRoots":"No project-level permission directory found yet (~/.kiro/workspace-roots/*). It is created once you open a project in Kiro.","settings.permissionTargetPath":"Target path","settings.permissionEdit":"Edit","settings.permissionEditTitle":"Edit rule","settings.permissionNew":"New rule","settings.permissionCancel":"Cancel","settings.permissionConfirm":"Confirm","settings.permissionEmpty":"No rules yet. Add a rule to get started.","settings.permissionUnsaved":"Unsaved","settings.permissionExcludeShort":"excl.","settings.agentAdvanced":"Agent advanced","settings.agentAdvancedDesc":"Agent options added in Kiro 1.0, two-way synced with the IDE settings.json","settings.agentToolCardDisplayMode":"Tool card display","settings.agentToolCardDisplayModeDesc":"How tool cards behave in chat after a tool finishes","settings.agentToolCard_collapseOnComplete":"Collapse on complete","settings.agentToolCard_alwaysExpanded":"Always expanded","settings.agentTerminalCommandTimeout":"Terminal command timeout (ms)","settings.agentTerminalCommandTimeoutPlaceholder":"Empty = built-in default","settings.agentTerminalCommandTimeoutDesc":"Max time a terminal command may run; empty uses Kiro's built-in default","settings.agentArtifactsAutoOpen":"Auto-open panel on new artifact","settings.agentIgnoreFiles":"Ignore pattern files","settings.agentIgnoreFilesDesc":"Ignore files (e.g. .gitignore) the Kiro Agent respects when reading the workspace, one per line","settings.agentTrust":"Trust & auto-approval","settings.agentTrustDesc":"Pre-selected pattern and scope when choosing 'Always allow' / 'Always deny', plus commands that are auto-approved without prompting","settings.agentTrustDefaultPattern":"Default command pattern","settings.agentTrustPattern_full":"Full command (full)","settings.agentTrustPattern_partial":"Partial match (partial)","settings.agentTrustPattern_base":"Base command (base)","settings.agentTrustDefaultScope":"Default scope","settings.agentTrustScope_user":"User (user)","settings.agentTrustScope_workspace":"Workspace (workspace)","settings.agentTrustScope_session":"Session (session)","settings.agentAutoApproveCommands":"Auto-approved commands","settings.agentAutoApproveCommandsDesc":"Command patterns approved without confirmation, one per line","settings.agentExperiments":"Experiments & advanced","settings.agentExperimentsDesc":"Kiro experiment flags and advanced options; may change between versions","settings.agentExperimentCloudConfig":"Cloud config (cloudConfig)","settings.agentExperimentWorkspaceManager":"Workspace manager (workspaceManager)","settings.agentMcpApprovedEnvVars":"MCP approved env vars","settings.agentMcpApprovedEnvVarsDesc":"Env vars allowed to expand in MCP config, one per line","settings.agentEditorActionsPrompts":"Editor action prompts (JSON)","settings.agentEditorActionsPromptsDesc":"Custom prompts for editor context-menu actions, as a JSON object; each value replaces the built-in prompt","settings.agentRemoteSessionsEndpoint":"Remote sessions portal URL","settings.agentRemoteSessionsEndpointDesc":'Base URL of the Kiro cloud portal, used for "Open remote session in browser". Leave empty to use the built-in default https://app.kiro.dev. This key is not declared in Kiro\'s configuration schema (it is a hidden key), but it does take effect.',"settings.agentRemoteSessionsEndpointInvalid":"Enter a valid http/https URL, for example https://app.kiro.dev","settings.agentRemoteSessionsEnvOverride":"Current value is overridden by an environment variable","settings.agentRemoteSessionsEnvOverrideDesc":"The environment variable KIRO_REMOTE_SESSIONS_ENDPOINT takes precedence over the URL entered here, and that is what actually takes effect. To make this configuration apply, remove the environment variable and restart Kiro.","settings.agentStartupMode":"Startup mode","settings.agentStartupModeDesc":"Which view Kiro opens by default on launch","settings.agentStartupMode_code":"Code editor","settings.agentStartupMode_agentFocus":"Agent focus","settings.agentNumberInvalid":"Enter a valid non-negative number","settings.agentJsonInvalid":"Invalid JSON","settings.openSettingsFile":"Edit Kiro Settings","settings.telemetry":"Telemetry & Privacy","settings.telemetryDesc":"Control data types collected by Kiro IDE","settings.telemetryContentCollection":"Content collection (for service improvement)","settings.telemetryUsageAnalytics":"Usage analytics and performance metrics","settings.telemetryEditStats":"Edit statistics","settings.telemetryFeedback":"Feedback data","settings.telemetryPromptLogging":"Send prompt logs","settings.telemetryEditStatsDetails":"Edit stats: details","settings.telemetryEditStatsDecorations":"Edit stats: in-editor decorations","settings.telemetryEditStatsStatusBar":"Edit stats: status bar","settings.closeWindowBehavior":"Close Window Behavior","settings.closeWindowBehaviorDesc":"Set behavior when close button is clicked","settings.minimizeToTray":"Minimize to Tray","settings.minimizeToTrayHint":"(Recommended, background tasks continue to run)","settings.minimizeToTrayEnabled":"✓ When closing window, minimize to system tray, background tasks continue to run. Click tray icon to reopen window.","settings.minimizeToTrayDisabled":"✗ When closing window, exit app directly, all background tasks will stop.","settings.invalidProxyFormat":"Invalid proxy format, please use URL starting with http://, https://, or socks5://","settings.invalidBrowserPath":"Invalid browser path, please ensure it's an executable file path (.exe, .app, etc.)","settings.privacyMode":"Privacy Mode","settings.privacyModeDesc":"When enabled, email addresses on the interface will be masked","settings.privacyModeHint":"Email masking","settings.autoSwitch":"Auto-switch on low balance","settings.autoSwitchDesc":"Automatically switch to another available account when current account balance is below threshold","settings.autoSwitchThreshold":"Threshold ≤","settings.autoSwitchInterval":"Check interval","accounts.title":"Account Management","accounts.subtitle":"Manage your Kiro IDE accounts","accounts.search":"Search accounts...","accounts.add":"Add Account","accounts.import":"Import","accounts.export":"Export","accounts.exportSelectFirst":"Please select accounts to export first","accounts.refreshList":"Refresh List","accounts.refresh":"Refresh","accounts.refreshAll":"Batch Refresh","accounts.refreshSelectFirst":"Please select accounts to refresh first","accounts.delete":"Delete","accounts.switch":"Switch","accounts.edit":"Edit","accounts.detail":"Details","accounts.remark":"Remark","accounts.provider":"Provider","accounts.used":"Used","accounts.active":"Active","accounts.banned":"Banned","accounts.invalid":"Invalid","accounts.expired":"Expired","accounts.capped":"Capped","accounts.noAccounts":"No accounts","accounts.addFirst":"Click 'Add Account' above to start","accounts.confirmDelete":"Are you sure you want to delete this account?","accounts.confirmDeleteMultiple":"Are you sure you want to delete selected {{count}} accounts?","accounts.deleteSuccess":"Delete successful","accounts.deleteFailed":"Delete failed","accounts.switchSuccess":"Switch successful","accounts.switchFailed":"Switch failed","accounts.refreshSuccess":"Refresh successful","accounts.refreshFailed":"Refresh failed","accounts.accountBanned":"Account is banned and cannot be used","accounts.tokenInvalid":"Token is invalid, please login again","accounts.importSuccess":"Import successful","accounts.exportSuccess":"Export successful","accounts.exportFailed":"Export failed","accounts.selectAll":"Select All","accounts.deselectAll":"Deselect All","accounts.batchRefresh":"Batch Refresh","accounts.batchDelete":"Batch Delete","accounts.batchOperationMode":"Batch operation mode","accounts.batchEditTagsAndGroups":"Batch edit (tags and groups)","accounts.batchEdit":"Batch Edit","common.deselectAll":"Deselect All","accounts.totalCount":"Total {{count}} accounts","accounts.displayCount":"{{current}} / {{total}} accounts","accounts.email":"Email","accounts.accountType":"Account Type","accounts.subscriptionType":"Subscription Type","accounts.quota":"Quota","accounts.status":"Status","accounts.machineCode":"Machine Code","accounts.expiryTrial":"Expiry/Trial","accounts.group":"Group","accounts.tags":"Tags","accounts.accountCount":"{{count}} accounts","accounts.enterNewGroupName":"Enter new group name...","accounts.noGroup":"No Group","accounts.selected":"Selected","accounts.noTagsSelected":"No tags selected","accounts.searchOrEnterNewTag":"Search or enter new tag...","accounts.pressEnterToCreate":'Press Enter to create "{{name}}"',"accounts.searchOrCreateTagHint":"Enter to search existing tags, or type directly to create new tags","accounts.daysRemaining":"Days remaining","accounts.days":"days","accounts.remaining":"Remaining","accounts.overage":"Overage","accounts.format":"Format","accounts.socialTemplate":"Social Template","accounts.builderIdTemplate":"BuilderId Template","accounts.enterpriseTemplate":"Enterprise Template","accounts.cardView":"Card View","accounts.tableView":"List View","accounts.redeem":"Redeem","accounts.importFromKiroIDE":"Import accounts from Kiro IDE","accounts.importFromKiroIDEDescription":"Automatically read Kiro IDE cached account information (~/.aws/sso/cache/kiro-auth-token.json)","accounts.detectingKiroIDEAccounts":"Detecting Kiro IDE accounts...","accounts.detectionFailed":"Detection failed","accounts.retryDetection":"Retry detection","accounts.detectedAccounts":"Detected {{count}} accounts","accounts.noKiroIDEAccountsDetected":"No Kiro IDE accounts detected","accounts.pleaseLoginToKiroIDEFist":"Please log in to Kiro IDE first","accounts.validationMissingRefreshToken":"Row {{index}}: Missing refreshToken","accounts.validationInvalidRefreshTokenFormat":"Row {{index}}: Invalid refreshToken format (should start with aor)","accounts.validationSocialProviderRequired":"Row {{index}}: Social accounts must specify provider (Google/Github)","accounts.validationInvalidProvider":"Row {{index}}: Provider must be {{providers}}","accounts.validationSocialProviderInvalid":"Row {{index}}: Social account provider should be Google/Github","accounts.validationIdcProviderInvalid":"Row {{index}}: IdC account provider should be BuilderId/Enterprise","accounts.validationEnterpriseRegionRequired":"Row {{index}}: Enterprise accounts must provide region field","accounts.validationEnterpriseStartUrlRequired":"Row {{index}}: Enterprise accounts must provide startUrl field","accounts.jsonParseFailed":"JSON parsing failed: {{message}}","accounts.addedAccounts":"✅ Added {{count}} accounts","accounts.updatedAccounts":"📝 Updated {{count}} accounts","accounts.failedAccounts":"❌ Failed {{count}} accounts","accounts.importingFromKiro":"Importing from Kiro...","accounts.importingFromKiroCli":"Importing from kiro-cli...","accounts.pleaseWait":"Please wait...","accounts.unknownAccount":"Unknown account","accounts.importFailed":"Import failed","accounts.browse":"Browse","accounts.addedAccount":"✅ Added account","accounts.updatedAccount":"📝 Updated account","accounts.reset":"reset","accounts.accountCannotSwitch":"{{status}} account cannot switch","accounts.tag":"Tag","accounts.providerAccountLabel":"Kiro {{provider}} account","accounts.kiroCliImportedLabel":"Imported from kiro-cli ({{tokenKey}})","accounts.networkConnectionFailed":"❌ Network connection failed\n\nPossible reasons:\n• Unstable network\n• Incorrect proxy settings\n• Firewall blocking\n\nSolutions:\n1. Check network connection\n2. Check proxy settings\n3. Disable firewall or add to whitelist","accounts.deleteCurrentAccount":"⚠️ Delete current account","accounts.deleteCurrentAccountMessage":"You are deleting the account currently in use!\n\nAfter deletion, Kiro IDE will not be usable and you will need to log in again.\n\nAre you sure you want to delete?","accounts.deleteRemoteWarning":"Remote deletion will unregister this account from the AWS service!\n\nThis operation cannot be undone and the account will be permanently invalidated.","accounts.batchDeleteIncludesCurrent":"⚠️ Batch delete includes current account","accounts.batchDeleteIncludesCurrentMessage":"You selected {{count}} accounts, including the account currently in use!\n\nAfter deletion, Kiro IDE will not be usable and you will need to log in again.\n\nAre you sure you want to delete?","login.title":"Desktop Authorization Login","login.subtitle":"Choose login method","login.google":"Google","login.github":"Github","login.builderId":"AWS Builder ID","login.idc":"IAM Identity Center","login.logging":"Logging in...","login.success":"Login successful","login.failed":"Login failed","login.cancelled":"Login cancelled","login.cancelFailed":"Cancel login failed","login.cancelling":"Cancelling...","login.timeout":"Login timeout","login.signIn":"Sign In","login.cancel":"Cancel","login.agreement":"By signing in, you agree to","login.awsAgreement":"AWS Customer Agreement","login.serviceTerms":"Service Terms","login.privacy":"Privacy Statement","login.and":"and","login.ipLicense":"AWS Intellectual Property License","login.enterprisePrompt":"Please enter your enterprise's AWS IAM Identity Center Start URL","login.startUrl":"Start URL","login.startUrlExample":"Example: https://d-90661d346f.awsapps.com/start","login.startUrlRequired":"Please enter Start URL","login.startUrlInvalid":"Start URL must start with https://","login.region":"AWS Region","login.regionExample":"Example: us-east-1, ap-southeast-2, eu-west-1","login.waitingTitle":"Waiting for Authorization","login.waitingMessage":"Waiting for you to complete {{provider}} authorization in browser...","login.waitingHint":"If browser doesn't open automatically, please manually open the authorization page.","login.waitingCloseHint":"Clicking cancel will terminate current login process, you can initiate login again later.","login.continue":"Continue","about.title":"About","about.appName":"Kiro Account Manager","about.appDesc":"Intelligently manage Kiro access tokens, one-click switching, quota monitoring","about.version":"Version","about.checkUpdate":"Check for Updates","about.checking":"Checking","about.upToDate":"Already up to date","about.newVersion":"New version {{version}} found","about.download":"Update Now","about.downloading":"Downloading...","about.updateFailed":"Check failed, please try again later","about.techStack":"Tech Stack","about.frontend":"Frontend","about.ui":"UI","about.backend":"Backend","about.links":"Links","about.website":"Website","about.tutorial":"Tutorial","about.tgChannel":"Kiro Account Manager Channel","about.tgGroup":"Kiro Account Manager Community","about.shop":"Kiro Gateway","about.donate":"Buy me a coffee ☕","about.donateDesc":"If this tool helped you, welcome to buy me a coffee. Your support is my motivation to keep updating ❤️","about.sponsorBenefits":"Sponsor Benefits","about.sponsorNote":"Tip: When sponsoring, please note your username or email. Use the same note in the sponsor group join request for quick approval","about.benefit1":"⚡ Priority issue response","about.benefit2":"🎯 Priority feature implementation","about.benefit3":"🔧 One-on-one technical support","about.sponsorGroup":"Sponsor Group","about.sponsorGroupDesc":"Join the exclusive QQ group for sponsors to get priority support","about.qqGroup":"QQ Group","about.joinGroup":"Join Group","about.alipay":"Alipay","about.wechat":"WeChat Pay","about.clickToEnlarge":"Click image to enlarge","about.contactTelegram":"Contact Telegram","about.madeWith":"Made with","about.by":"by","agentConfig.title":"Agent Config","agentConfig.subtitle":"Manage the Agent's MCP services, permission rules, Steering rules, Skills, Hooks, Custom Agents, and Powers","agentConfig.overview":"Overview","agentConfig.groupCapabilities":"Capabilities","agentConfig.groupBehavior":"Behavior","agentConfig.groupSpecs":"Specs","agentConfig.manage":"Manage","agentConfig.mcpToolsWarning":"High MCP tool count may slow tool selection and consume context. Consider disabling unused servers.","agentConfig.checkTitle":"Config Health Check","agentConfig.checkMcpTools":"MCP Tools","agentConfig.checkMcpToolsHigh":"~{n} tools may slow tool selection and increase context usage","agentConfig.checkMcpToolsOk":"~{n} tools, load is fine","agentConfig.checkMcpServers":"MCP Servers","agentConfig.checkMcpNone":"No MCP servers configured","agentConfig.checkMcpOk":"{n} servers enabled","agentConfig.checkMcpDisabled":", {n} disabled","agentConfig.checkPerms":"Permission Surface","agentConfig.checkPermsOpen":"{n} capabilities fully allowed (no scope limit) — confirm this is intended","agentConfig.checkPermsOk":"Allow rules are scope-limited","agentConfig.checkCloud":"Cloud Hosting","agentConfig.checkCloudOn":"Managed by Kiro Cloud, local writes are disabled","agentConfig.checkCloudOff":"Local config is writable","agentConfig.groupBoundaries":"Boundaries","agentConfig.checkMemoryMode":"Memory Mode","agentConfig.checkMemoryOff":"Memory is off — Kiro sessions neither read nor learn; enable it on the Memories tab","agentConfig.checkMemoryOn":"Memory is on — sessions can read and write memories","agentConfig.checkBehaviorAssets":"Behavior Assets","agentConfig.checkBehaviorEmpty":"No hooks, steering, or AGENTS.md yet — start from the Steering templates","agentConfig.checkBehaviorOk":"{n} behavior assets configured","agentConfig.memoryOffBanner":"Memory is off: Kiro sessions neither read nor learn memories; edits here still save to the local store and take effect once enabled.","agentConfig.mcpSource_user":"User","agentConfig.mcpSource_userDesc":"Configured in the user-level mcp.json, applies globally","agentConfig.mcpSource_project":"Project","agentConfig.mcpSource_projectDesc":"Applies to this project only (no user-level entry with this name)","agentConfig.mcpSource_overridden":"Overridden","agentConfig.mcpSource_overriddenDesc":"The project-level entry overrides the user-level one; this is the effective version","agentConfig.mcpSource_redundant":"Redundant","agentConfig.mcpSource_redundantDesc":"Project-level entry is identical to the user-level one — the project copy is redundant and can be removed","agentConfig.mcpSource_power":"Power","agentConfig.mcpSource_powerDesc":"Registered by a Powers plugin (url-type server)","agentConfig.skillInvalid":"Invalid","agentConfig.assetDuplicate":"Duplicate","agentConfig.assetDuplicateDesc":"Same name exists in both user and project scope — consider deduplicating","agentConfig.recentProjects":"Recent Projects","agentConfig.browseDir":"Browse…","agentConfig.projectScope":"Project Scope","agentConfig.memoryPreviewTitle":"Injection Preview (simulated)","agentConfig.memoryPreviewDisabled":"Memory is off — nothing is injected","agentConfig.memoryPreviewResident":"Resident","agentConfig.memoryPreviewManifest":"Manifest","agentConfig.memoryPreviewDropped":"Too long, dropped","agentConfig.memoryPreviewPrefQuota":"Preference quota","agentConfig.memories":"Memories","agentConfig.memoryScopeAll":"All","agentConfig.scopeTagProject":"Project","agentConfig.scopeTagUser":"User","common.format":"Format","mcp.loadFailed":"Failed to load MCP config","mcp.toggleFailed":"Failed to toggle state","mcp.toolCountTitle":"High number of MCP tools","mcp.toolCountDesc":"You have about {{tools}} MCP tools configured ({{servers}} servers). Too many tools can degrade tool selection performance and increase context usage. Consider disabling rarely used servers.","mcp.configLabel":"Config","mcp.autoApproveHint1":"autoApprove supports the wildcard","mcp.autoApproveHint2":"to auto-approve every tool on this server","mcp.quickFill":"Quick fill","mcp.jsonFormatsHint":'Accepts { "name": config } or { "mcpServers": { ... } } format',"mcp.saveToLabel":"Save to:","mcp.saveToGlobal":"Global (user-level)","mcp.saveToProject":"Current project","mcp.dupExistsPrefix":"These servers already exist:","mcp.dupOverwriteNote":"(will be overwritten)","mcp.dupSkipNote":"(will be skipped)","mcp.dupRenameNote":"(will be renamed automatically)","mcp.conflictLabel":"On conflict:","mcp.conflictSkip":"Skip (recommended)","mcp.conflictOverwrite":"Overwrite","mcp.conflictRename":"Auto-rename","mcp.addCount":"Add {{count}}","mcp.errJsonFormat":"Invalid JSON format","mcp.errClipboardJson":"Clipboard content is not valid JSON","mcp.errMissingCommand":"Missing command field","mcp.msgNoValidConfig":"No valid config","mcp.resPartialFailed":"Partially failed: {{names}}","mcp.resSucceeded":"Succeeded: {{names}}","mcp.resSkipped":"Skipped: {{names}}","mcp.resRenamed":"Renamed: {{names}}","mcp.resNoneAdded":"No server added, skipped: {{names}}","mcp.resAdded":"added {{count}}","mcp.resSkippedCount":"skipped {{count}}","mcp.resRenamedCount":"renamed {{count}}","mcp.resProcessed":"MCP servers processed: {{parts}}","mcp.listSep":"; ","steering.savedWithIssuesTitle":"Steering saved, but it has compliance issues","steering.savedWithIssuesDesc":"Kiro 1.1.70 will downgrade or skip this file:\n\n{{detail}}\n\nContinue editing to fix it?","steering.selectMode":"Select mode","skills.savedWithIssuesTitle":"Skill saved, but it has compliance issues","skills.savedWithIssuesDesc":"Kiro 1.1.70 will silently skip a non-compliant skill:\n\n{{issues}}\n\nContinue editing to fix it?","workflows.savedWithIssues":"Workflow saved, but it has schema issues (Kiro pre-run validation will reject it):\n\n• {{issues}}","agents.modelDefault":"Default (follow the main chat)","hooks.commandPlaceholder":"replace with the actual command","mcp.namesEtc":"({{count}} total)","mcp.partsSep":", ","agents.bodyPlaceholder":"Write the agent's system prompt here","skills.bodyPlaceholder":"Write your skill instructions here","steering.bodyPlaceholder":"Add your steering rules here","agentConfig.memoryMode":"Memory Mode","agentConfig.memoryModeDesc":"Controls whether Kiro uses and learns from memories across sessions (writes kiroAgent.memory in settings.json)","agentConfig.memoryMode_off":"Off","agentConfig.memoryMode_useOnly":"Use only","agentConfig.memoryMode_useWithoutLearning":"Use without learning","agentConfig.memoryMode_useAndLearn":"Use and learn","agentConfig.memoriesEmpty":"No memories yet","agentConfig.memoriesDbMissing":"Memory has never been enabled, no store yet","agentConfig.memoryContent":"Content","agentConfig.memoryWhy":"Why","agentConfig.memoryHowToApply":"How to apply","agentConfig.memorySession":"Source session","agentConfig.memoryCreate":"New memory","agentConfig.memoryEdit":"Edit memory","agentConfig.memoryFieldTitle":"Title","agentConfig.memoryFieldTitleHint":"Letters, digits and hyphens only, max 64","agentConfig.memoryFieldType":"Type","agentConfig.memoryFieldScopes":"Scopes (comma separated)","agentConfig.memoryFieldSummary":"Summary (max 250)","agentConfig.memoryLoadMore":"Load more","agentConfig.memoryDeleteConfirmTitle":"Delete Memory","agentConfig.memoryDeleteConfirm":"This memory will be removed from the store (scopes cascade). Continue?","settings.sandboxTitle":"Command Sandbox","settings.sandboxDesc":"Limit what agent-run shell commands and child processes can reach (Kiro IDE 1.3+, separate sandbox.json; projects can only tighten an active global policy)","settings.sandboxEnabled":"Enable command sandbox","settings.sandboxEnabledDesc":"OS boundary around agent-run shell commands and their child processes","settings.sandboxNetwork":"Outbound network","settings.sandboxNetwork_DEFAULT_BLOCKED":"Blocked by default","settings.sandboxNetwork_COMMON_DEPENDENCIES":"Allow common dev services","settings.sandboxNetwork_DEFAULT_ALLOWED":"Allow all","settings.sandboxWindowsHint":"On Windows the last two modes need a one-time admin setup (IDE prompts; CLI: /sandbox setup). Without it commands run without OS isolation","settings.sandboxMcp":"Wrap stdio MCP servers","settings.sandboxMcpDesc":"Start stdio MCP processes inside the same sandbox (toggling restarts local MCP servers, ~1 min)","settings.sandboxProjectRoot":"Project directory (optional)","settings.sandboxProjectHint":"Fill in a project root to manage its sandbox.json. Project config can only tighten: values looser than global are ignored.","settings.sandboxProjectEnabled":"Enable at project level","settings.sandboxProjectEnabledDesc":"Writes /.kiro/settings/sandbox.json; has no effect while global is off","settings.sandboxEffective":"Effective","agentConfig.cloudReadOnly":"Cloud config is read-only","agentConfig.cloudReadOnlyDesc":"Kiro Cloud is managing this configuration (kiroAgent.experiments.cloudConfig is enabled). These items are read-only replicas; writing is disabled here. Edit in Kiro Web instead.","agentConfig.mcp":"MCP Services","agentConfig.steering":"Steering","agentConfig.skills":"Skills","agentConfig.hooks":"Hooks","agentConfig.agents":"Agents","agentConfig.powers":"Powers","agentConfig.specs":"Specs","agentConfig.specEmpty":"No specs yet","agentConfig.specNoSelection":"Select a spec","agentConfig.specNewPlaceholder":"Spec name (letters, digits, hyphen, underscore)","agentConfig.specCreate":"Create","agentConfig.specDeleteConfirm":'Delete spec "{{name}}"? This cannot be undone.',"agentConfig.specRequirements":"Requirements","agentConfig.specDesign":"Design","agentConfig.specTasks":"Tasks","agentConfig.specNotCreated":"Not created yet","agentConfig.specFilePlaceholder":"Enter the content of this file (Markdown)…","agentConfig.workflows":"Workflows","agentConfig.workflowEmpty":"No workflows yet","agentConfig.workflowNoSelection":"Select a workflow","agentConfig.workflowNewPlaceholder":"Workflow file name (e.g. my-flow.workflow.json)","agentConfig.workflowDeleteConfirm":'Delete workflow "{{name}}"? This cannot be undone.',"agentConfig.workflowFilePlaceholder":"Enter the workflow definition (JSON/YAML)…","agentConfig.agentsMd":"AGENTS.md","agentConfig.agentsMdNoProject":"Select a project directory first — nested AGENTS.md is scanned only within the workspace","agentConfig.agentsMdEmpty":"No AGENTS.md found in this project","agentConfig.agentsMdRoot":"Project root","agentConfig.agentsMdIgnoreActive":"Scan applied these ignore rules (rule count):","agentConfig.agentsMdPlaceholder":"Enter instructions for this directory subtree (Markdown)…","agentConfig.loading":"Loading…","agentConfig.save":"Save","agentConfig.saving":"Saving…","agentConfig.unsaved":"Unsaved","agentConfig.selectProjectDir":"Select Project Directory","agentConfig.noProjectDir":"No project selected","agentConfig.clearProjectDir":"Clear Project Directory","agentConfig.scope":"Storage Location","agentConfig.scopeUser":"User-level (~/.kiro/)","agentConfig.scopeProject":"Project-level (/.kiro/)","mcp.title":"MCP Services","mcp.add":"Add Service","mcp.edit":"Edit","mcp.delete":"Delete","mcp.enable":"Enable","mcp.disable":"Disable","mcp.enabled":"Enabled","mcp.disabled":"Disabled","mcp.name":"Name","mcp.command":"Command","mcp.args":"Arguments","mcp.env":"Environment Variables","mcp.addFirst":"Click 'Add Service' to start configuration","mcp.deleteSuccess":"Delete successful","mcp.deleteFailed":"Delete failed","mcp.saveSuccess":"Save successful","mcp.saveFailed":"Save failed","mcp.templates":"Templates","mcp.useTemplate":"Use Template","mcp.confirmDelete":"Confirm Delete","mcp.noServers":"No MCP servers, click 'Add' to start","common.save":"Save","common.cancel":"Cancel","common.continue":"Continue","common.optional":"Optional","common.confirm":"Confirm","common.delete":"Delete","common.edit":"Edit","common.add":"Add","common.import":"Import","common.export":"Export","common.refresh":"Refresh","common.loading":"Loading...","common.success":"Success","common.error":"Error","common.warning":"Warning","common.info":"Info","common.yes":"Yes","common.no":"No","common.ok":"OK","common.close":"Close","common.back":"Back","common.next":"Next","common.previous":"Previous","common.finish":"Finish","common.search":"Search","common.clear":"Clear","common.sort":"Sort","sort.usage":"Usage","sort.added":"Added Time","sort.trial":"Trial Expiry","common.all":"All","common.none":"None","common.select":"Select","common.copy":"Copy","common.copyAll":"Copy All","common.copied":"Copied","common.apply":"Apply","common.minutes":"minutes","common.hours":"hours","common.days":"days","common.recommended":"Recommended","common.later":"Later","common.updateNow":"Update Now","common.downloading":"Downloading","common.preparing":"Preparing","common.newVersionFound":"New version found","common.verifying":"Verifying","common.noLabel":"No label","common.unknown":"Unknown","common.currentlyUsing":"Currently using","common.usage":"Usage","common.remaining":"Remaining","common.reset":"Reset","common.noAccounts":"No accounts","common.addAccountHint":"Please add accounts through sidebar login","common.addAccount":"Add Account","common.selectAll":"Select All","common.selected":"Selected","update.newVersion":"New Version","update.newVersionFound":"New version found","update.newVersionAvailable":"New version available","update.readyToInstall":"Ready to install","update.releaseNotes":"Release Notes","update.later":"Later","update.updateNow":"Update Now","update.downloading":"Downloading update","update.preparing":"Preparing...","update.failed":"Update failed","update.installFailed":"Install update failed","update.doNotClose":"Please do not close the application...","update.downloadComplete":"Download complete!","update.restartToInstall":"Update downloaded, click button below to restart application to complete installation.","update.installLater":"Install later","update.restartNow":"Restart now","addAccount.title":"Manual Add","addAccount.subtitle":"Manually add new account to manager","addAccount.saveLocal":"Save Local Account","addAccount.saveLocalDesc":"Read currently logged account from Kiro IDE","addAccount.orManual":"Or manual input","addAccount.refreshToken":"Refresh Token","addAccount.socialPlaceholder":"Token starting with aor","addAccount.idcPlaceholder":"Token starting with aor","addAccount.clientId":"Client ID","addAccount.clientSecret":"Client Secret","addAccount.awsRegion":"AWS Region","addAccount.add":"Add Account","addAccount.verifying":"Verifying...","addAccount.errorNoToken":"Please enter Refresh Token","addAccount.errorSocialFormat":"Google/Github Token format error, should start with aor","addAccount.errorIdcFormat":"BuilderId/Enterprise Token format error, should start with aor","addAccount.errorNoClientId":"Please enter Client ID and Client Secret","addAccount.machineId":"Machine ID","addAccount.machineIdPlaceholder":"Leave empty to auto-generate","import.title":"Batch Import Accounts","import.subtitle":"Support JSON file, import from Kiro IDE, and import from kiro-cli","import.jsonTab":"JSON Credentials Import","import.ssoTab":"SSO Token Import","import.selectFile":"Select JSON File","import.orPaste":"Or paste JSON content","import.parseSuccess":"Parse successful","import.validRecords":"valid records","import.validationError":"Validation error","import.moreErrors":"...and {{count}} more errors","import.exceedLimit":"Exceeds limit: max {{max}}, current {{count}}","import.successCount":"Successfully imported {{count}} accounts","import.failedCount":"{{count}} failed","import.importing":"Importing...","import.ssoImporting":"Importing via SSO Token...","import.continueImport":"Continue Import","import.done":"Done","import.import":"Import","import.ssoTokenLabel":"x-amz-sso_authn Token","import.ssoTokenHint":"One per line, batch supported","import.ssoTokenPlaceholder":"Paste x-amz-sso_authn Cookie value...","import.regionOptional":"(optional)","import.detectedTokens":"Detected {{count}} tokens","import.ssoGuide":"How to get SSO Token:","import.ssoStep1":"Open view.awsapps.com/start and login","import.ssoStep2":"Press F12 to open DevTools → Application → Cookies","import.ssoStep3":"Find x-amz-sso_authn value","import.ssoStep4":"Copy complete value and paste below (supports multi-line batch import)","import.kiroTab":"Import from Kiro","import.kiroCliTab":"Import from kiro-cli","import.kiroCliTitle":"Import accounts from kiro-cli database","import.kiroCliHint":"Read kiro-cli SQLite database (Windows: %LOCALAPPDATA%\\Kiro-Cli\\data.sqlite3; Linux: ~/.local/share/kiro-cli/data.sqlite3; macOS: ~/Library/Application Support/kiro-cli/data.sqlite3)","import.kiroCliInstallPrefix":"Install command:","import.kiroCliInstallCommand":"curl -fsSL https://cli.kiro.dev/install | bash","import.kiroCliWindowsTitle":"Windows natively supports Kiro CLI 2.0","import.kiroCliWindowsHint":"Database path: %LOCALAPPDATA%\\Kiro-Cli\\data.sqlite3 (usually C:\\Users\\\\AppData\\Local\\Kiro-Cli\\data.sqlite3)","import.kiroCliDetecting":"Detecting kiro-cli database...","import.kiroCliDetected":"kiro-cli database detected","import.kiroCliNotDetected":"kiro-cli database not detected","import.kiroCliPathLabel":"Database path","import.kiroCliPathPlaceholder":"~/.local/share/kiro-cli/data.sqlite3","import.kiroCliPathHintDetected":"Database path auto-detected","import.kiroCliPathHintManual":"Please enter manually or browse to select database file","import.browse":"Browse","editAccount.title":"Edit Account","editAccount.labelPlaceholder":"Enter remark for easy account identification","editAccount.tokenCredentials":"Token Credentials","editAccount.accessToken":"Access Token","editAccount.refreshToken":"Refresh Token","editAccount.ssoCredentials":"AWS SSO OIDC Credentials","editAccount.clientIdHash":"Client ID Hash","editAccount.region":"Region","editAccount.sessionId":"Session ID","editAccount.profileArn":"Profile ARN","editAccount.saveFailed":"Save failed","editAccount.verifyFailed":"Verification failed","editAccount.pleaseFillRefreshToken":"Please fill in Refresh Token","editAccount.pleaseFillClientIdAndSecret":"Please fill in Client ID and Client Secret","editAccount.currentAccountStatus":"Current Account Status","editAccount.verified":"Verified","editAccount.email":"Email","editAccount.subscriptionPlan":"Subscription Plan","editAccount.usageQuota":"Usage Quota","editAccount.refreshTokenRequired":"Required for token refresh","editAccount.verifying":"Verifying...","editAccount.verifyAndRefreshCredentials":"Verify and Refresh Credentials","editAccount.proxyTitle":"Reverse Proxy Account Proxy","editAccount.proxyDescription":"Only used by this app's Reverse Proxy for this account. It does not change Kiro IDE or Kiro CLI login traffic, and it overrides the generic proxy for Reverse Proxy requests.","editAccount.proxyEnabled":"Enabled","editAccount.proxyProtocol":"Protocol","editAccount.proxyHost":"Host","editAccount.proxyPort":"Port","editAccount.proxyUsername":"Username","editAccount.proxyPassword":"Password","editAccount.proxyOptional":"Optional","editAccount.proxyQuickInput":"Paste proxy","editAccount.proxyQuickInputPlaceholder":"http://user:pass@127.0.0.1:7890 or socks5://127.0.0.1:1080","editAccount.proxyQuickInputInvalid":"Use user:pass@host:port, host:port, http://..., or socks5://...","editAccount.proxyQuickInputHint":"Paste a proxy once to populate the fields below. This value is not saved.","editAccount.proxyApplyQuickInput":"Parse","editAccount.proxyTest":"Test Proxy","editAccount.proxyTesting":"Testing...","editAccount.proxyTestSuccess":"Proxy test succeeded","editAccount.proxyTestFailed":"Proxy test failed","editAccount.proxyInvalid":"Invalid proxy","editAccount.proxyHostRequired":"Proxy host is required.","editAccount.proxyPortRequired":"Proxy port must be between 1 and 65535.","editAccount.proxyUsernameRequired":"Proxy password requires a username.","accountCard.LogIn":"Log In","accountCard.LogOut":"Log Out","accountCard.refresh":"Refresh Data","accountCard.refreshQuota":"Refresh Quota","accountCard.refreshToken":"Refresh Token","accountCard.viewDetails":"View Details","accountCard.editRemark":"Edit Account","accountCard.delete":"Delete","accountCard.deleteRemote":"Delete Remote","accountCard.deleteRemoteConfirm":"Are you sure you want to delete this account from AWS server?\n\n⚠️ This operation is irreversible, the account will be permanently deleted!","accountCard.deleteRemoteSuccess":"Account deleted from server","accountCard.deleteRemoteFailed":"Delete failed","accountCard.tokenExpired":"Expired","accountCard.rightClickTip":"Right-click for more operations","accountCard.copyJson":"Copy JSON","accountCard.selectAccount":"Select Account","accountCard.bannedCannotSwitch":"Banned account cannot switch","accountCard.daysRemaining":"{{days}} days remaining in subscription","accountCard.availableModels":"Available Models","accountCard.loadModels":"View Models","accountCard.loadingModels":"Loading","accountCard.modelLoadFailed":"Failed to get models","accountCard.noAvailableModels":"Account did not return available models","accountCard.modelCountSuffix":"models","accountCard.defaultModel":"Default","accountCard.promptCaching":"Cache","accountCard.refreshModels":"Refresh Models","accountCard.cachedAt":"Cache time","refresh.title":"Refresh Account","refresh.progress":"Progress","refresh.refreshing":"Refreshing","refresh.complete":"Refresh complete!","detail.quotaOverview":"Quota Overview","detail.syncQuota":"Sync Quota","detail.mainQuota":"Main Quota","detail.freeTrial":"Free Trial","detail.bonusTotal":"Bonus Total","detail.bonusCount":"bonuses","detail.bonusDetails":"Bonus Details","detail.basicInfo":"Basic Information","detail.emailAddress":"Email Address","detail.remarkLabel":"Remark Label","detail.tokenCredentials":"Token Credentials","detail.ssoCredentials":"AWS SSO OIDC Credentials","detail.refreshFailed":"Refresh failed","detail.accountNormal":"Account normal","detail.accountBanned":"Account banned","detail.used":"Used","detail.precise":"Precise","detail.reset":"Reset","detail.expires":"Expires","detail.expiresAt":"Expires At","detail.redeemed":"Redeemed","detail.addedAt":"Added at","detail.userId":"User ID","detail.email":"Email","detail.subscriptionType":"Subscription Type","detail.upgradeable":"Upgradeable","detail.overageRate":"Overage Rate","detail.overageCap":"Overage Cap","detail.perCredit":"per credit","detail.fields":"fields","detail.availableModels":"Account Available Models","detail.loadingModels":"Loading models...","detail.noModels":"No available models","detail.noDescription":"No description","mcpManager.addMCPServer":"Add MCP Service","mcpManager.disabled":"Disabled","mcpManager.autoApprove":"Auto Approve","mcpManager.tools":"tools","mcpManager.envVars":"environment variables","mcpManager.errorNoCommand":"Please enter startup command","common.details":"Details","common.saving":"Saving...","pagination.perPage":"Per page","pagination.totalItems":", total {{count}} items","pagination.first":"First","pagination.prev":"Previous","pagination.next":"Next","pagination.last":"Last","switch.title":"Switch Account","switch.confirmSwitch":"Confirm switch to","switch.confirmBtn":"Confirm Switch","switch.success":"Switch successful","switch.failed":"Switch failed","switch.missingAuth":"Missing authentication information","switch.logoutTitle":"Log Out","switch.confirmLogout":"Confirm log out of","switch.logoutSuccess":"Logged Out","switch.logoutFailed":"Log out failed","switch.logoutDone":"Current login state cleared; the account remains in the list","switch.quota":"Quota","switch.remaining":"Remaining","switch.type":"Type","switch.cliNotInstalled":"CLI Not Installed","switch.cliNotInstalledMessage":"Kiro CLI 2.0 not detected, please install before trying to switch to CLI","switch.ideNotInstalled":"IDE Not Installed","switch.ideNotInstalledMessage":"Kiro IDE configuration environment (.aws/sso/cache) not detected, please install or login to Kiro IDE first","switch.switchTarget":"Switch Target","detail.aoaPrefix":"aoa prefix","detail.aorPrefix":"aor prefix","detail.eyjPrefix":"eyJ prefix","import.socialTemplate":"Social Template","import.idcTemplate":"IdC Template","theme.light":"Elegant White","theme.dark":"Ultimate Black","theme.dark-one":"Deep Blue (One Dark)","theme.tech":"Tech Blue","theme.midnight":"Midnight Black","theme.purple":"Elegant Purple","theme.green":"Vibrant Green","theme.business":"Business Gold","theme.sunset":"Sunset Orange","theme.ocean":"Ocean Blue","theme.forest":"Forest Green","theme.rose":"Rose Red","theme.aurora":"Aurora Cyan","theme.sakura":"Sakura Pink","common.paste":"Paste","common.refreshFailed":"Refresh failed","steering.title":"Steering Rules","steering.noFiles":"No Steering files","steering.selectToEdit":"Select a file to edit","steering.unsavedChanges":"Unsaved changes","steering.confirmSwitch":"Unsaved changes, confirm switch?","steering.confirmDelete":"Confirm Delete","steering.confirmDeleteFile":'Confirm delete "{{fileName}}"?',"steering.newSteering":"New Steering","steering.fileName":"File Name","steering.fileNamePlaceholder":"e.g., my-rules","steering.fileNameHint":"Auto-add .md suffix","steering.inclusionMode":"Inclusion Mode","steering.inclusionAlwaysDesc":"Loaded in every conversation","steering.inclusionAutoDesc":"Activated on-demand via discloseContext tool","steering.inclusionFileMatchDesc":"Loaded when matching files are read","steering.inclusionManualDesc":"Loaded when manually referenced via #","steering.filePattern":"Match Pattern","steering.filePatternPlaceholder":"e.g., **/*.jsx","steering.saving":"Saving...","steering.save":"Save","steering.unknownTime":"Unknown time","steering.contentPlaceholder":"Enter Markdown content...","steering.fmName":"Name","steering.fmNamePlaceholder":"Rule display name","steering.fmDescription":"Description","steering.fmDescriptionPlaceholder":"Brief description of rule purpose","steering.defaultTemplate":"Default Template","steering.initializeProject":"Initialize Project Rules","steering.refine":"Refine","steering.refining":"Refining...","steering.scopeTitle":"Steering Scope","steering.scopeMessage":"Confirm writing current project rules? Select 'User' to save to global rules directory.","skills.noSkills":"No Skills","skills.noSkillsHint":"Skills stored in ~/.kiro/skills/ directory","skills.createFirst":"Create first Skill","skills.create":"New Skill","skills.newSkill":"New Skill","skills.skillName":"Skill Name","skills.skillNamePlaceholder":"e.g., my-coding-rules","skills.skillNameHint":"Can only contain letters, numbers, underscores, and hyphens","skills.selectToEdit":"Select a Skill to edit","skills.unsavedChanges":"Unsaved changes","skills.confirmSwitch":"Unsaved changes, confirm switch?","skills.unsaved":"Unsaved","skills.saveFailed":"Save failed","skills.deleteFailed":"Delete failed","skills.saving":"Saving...","skills.save":"Save","skills.createFailed":"Create failed","skills.loadFailed":"Failed to load Skills","skills.confirmDelete":"Confirm Delete","skills.confirmDeleteSkill":'Confirm delete Skill "{{name}}"? This will delete the entire directory.',"skills.files":"files","skills.extraFiles":"auxiliary files","skills.contentPlaceholder":"Enter SKILL.md content...","skills.fmName":"Name","skills.fmNamePlaceholder":"Skill display name","skills.fmDescription":"Description","skills.fmDescriptionPlaceholder":"Brief description of Skill purpose","skills.fmDescriptionHint":"Describe Skill function to help Kiro understand when to activate","skills.importLocal":"Import Local Skill","skills.importGithub":"Import from GitHub","skills.importSuccess":"Skill imported successfully","skills.importFailed":"Failed to import local Skill","skills.importGithubFailed":"Failed to import Skill from GitHub","skills.importScopeTitle":"Skill Import Scope","skills.importScopeMessage":"Confirm import to current project scope? Select 'User' to import to global Skills directory.","skills.githubRepoUrl":"Repository URL","skills.githubPath":"Path in repository","skills.githubPathPlaceholder":"Optional, e.g., skills/code-review","skills.githubBranch":"Branch","skills.importTargetName":"Target name","skills.importTargetNamePlaceholder":"Optional, defaults to directory name","hooks.title":"Hooks","hooks.loadFailed":"Failed to load Hooks","hooks.noHooks":"No Hook files","hooks.createFirst":"Create first Hook","hooks.newHook":"New Hook","hooks.fileName":"File Name","hooks.fileNamePlaceholder":"e.g., my-workflow","hooks.fileNameHint":"Can only contain letters, numbers, dots, underscores, hyphens; auto-add .kiro.hook suffix","hooks.fileNamePreview":"Final file name","hooks.fileNameRequired":"Please enter file name","hooks.fileNameInvalid":"Invalid file name format","hooks.fileNameDuplicate":"Hook file name already exists","hooks.scopeHint":"Supports user-level (~/.kiro/hooks/, applies to all projects) and project-level (/.kiro/hooks/)","hooks.scope":"Scope","hooks.scopeProject":"Project level","hooks.scopeUser":"User level","hooks.scopeUserHint":"Writes to ~/.kiro/hooks (Kiro IDE 1.0.182+) and applies to all projects","hooks.scopeProjectHint":"Writes to the current project's .kiro/hooks","hooks.selectToEdit":"Select a Hook file to edit","hooks.unsavedChanges":"Unsaved changes","hooks.confirmSwitch":"Unsaved changes, confirm switch?","hooks.unsaved":"Unsaved","hooks.saveFailed":"Save failed","hooks.deleteFailed":"Delete failed","hooks.createFailed":"Create failed","hooks.confirmDelete":"Confirm Delete","hooks.confirmDeleteFile":'Confirm delete Hook file "{{fileName}}"?',"hooks.saving":"Saving...","hooks.save":"Save","hooks.contentPlaceholder":"Enter .kiro.hook JSON content...","agents.noAgents":"No Custom Agents","agents.noAgentsHint":"Custom Agents are stored in ~/.kiro/agents/","agents.deleteFailed":"Delete failed","agents.createFirst":"Create first Agent","agents.create":"New Agent","agents.newAgent":"New Custom Agent","agents.agentName":"Agent Name","agents.agentNamePlaceholder":"e.g., code-reviewer","agents.agentNameHint":"Auto-add .md suffix, file name is Agent ID","agents.selectToEdit":"Select an Agent to edit","agents.unsavedChanges":"Unsaved changes","agents.confirmSwitch":"Unsaved changes, confirm switch?","agents.unsaved":"Unsaved","agents.saveFailed":"Save failed","agents.saving":"Saving...","agents.save":"Save","agents.createFailed":"Create failed","agents.loadFailed":"Failed to load Custom Agents","agents.confirmDelete":"Confirm Delete","agents.confirmDeleteAgent":'Confirm delete Agent "{{fileName}}"?',"agents.tools":"tools","agents.toolTags":"Tool tags","agents.selectTools":"Select allowed tools...","agents.contentPlaceholder":"Enter Agent system prompt...","agents.fmName":"Name","agents.fmNamePlaceholder":"Agent display name","agents.fmDescription":"Description","agents.fmDescriptionPlaceholder":"Brief description of Agent purpose","agents.model":"Model","agents.includeMcpJson":"Include MCP Config","agents.includePowers":"Include Powers","agents.allTools":"All Tools","agents.includeMcpJsonDesc":"Auto-inject servers defined in mcp.json","callback.processing":"Processing login callback...","callback.missingParams":"Missing required callback parameters","callback.exchangingToken":"Exchanging access token...","callback.success":"Login successful! Account added to application.","callback.failed":"Login failed, please try again","callback.loginSuccess":"Login successful","callback.loginFailed":"Login failed","callback.processingTitle":"Processing...","callback.autoCloseHint":"This window will close automatically, or you can close it manually","callback.closeWindow":"Close Window","tags.title":"Tags","tags.filter":"Filter by tags","tags.all":"All tags","tags.noTags":"No tags","tags.addTag":"Add tag","tags.newTagPlaceholder":"Enter new tag...","tags.manage":"Manage tags","tags.edit":"Edit tag","tags.selectTags":"Select tags","tags.createNew":"Create new tag","tags.deleteTag":"Delete tag","tags.confirmDelete":"Confirm delete tag","tags.duplicateName":"Tag name already exists","tags.batchSet":"Batch tags","tags.selected":"Selected tags","tags.available":"Available tags","tags.mode":"Operation mode","tags.mode_set":"Overwrite","tags.mode_add":"Append","tags.mode_remove":"Remove","tags.searchPlaceholder":"Search tags...","tags.addOrSelect":"Search/Add tags","tags.searchOrCreate":"Search or enter new tag...","tags.hint":"Enter to search existing tags, or directly enter to create new tag","tags.hasTags":"Has tags","groups.title":"Groups","groups.all":"All groups","groups.noGroup":"No group","groups.hasGroup":"Has group","groups.searchPlaceholder":"Search groups...","groups.noGroups":"No groups","groups.newGroupPlaceholder":"Enter new group...","groups.deleteGroup":"Delete group","groups.confirmDelete":"Confirm delete group","groups.duplicateName":"Group name already exists","filter.title":"Advanced Filter","filter.clearAll":"Clear All","filter.subscription":"Subscription Type","filter.status":"Account Status","filter.provider":"Account Type","filter.usageRange":"Usage Range","filter.status_normal":"Normal","filter.status_banned":"Banned","filter.status_expired":"Expired","announcement.title":"Important Notice","announcement.warning":"This software is completely free!","announcement.content1":"If someone charges you for this software, you've been scammed! Please report immediately.","announcement.content2":"This project follows CC BY-NC-SA 4.0 open source license, commercial use is prohibited.","announcement.content3":"Please download from the official GitHub repository, avoid using untrusted versions.","announcement.official":"Official open source address:","announcement.tgGroup":"Telegram Community:","announcement.dontRemind":"Don't remind again","announcement.understand":"I understand","announcement.refillTutorial":"Refill Tutorial","redeem.success":"Redeem successful","redeem.desc":"Enter purchased card key to automatically add account to list","redeem.placeholder":"Please enter card key","redeem.account":"Account","redeem.submit":"Redeem","powers.noPowers":"No installed Powers","powers.noPowersHint":"Powers stored in ~/.kiro/powers/installed/ directory","powers.selectToView":"Select a Power to view details","powers.uninstall":"Uninstall","powers.confirmUninstall":"Confirm Uninstall","powers.confirmUninstallPower":'Confirm uninstall Power "{{name}}"? Can reinstall from registry after uninstall.',"powers.uninstallFailed":"Uninstall failed","powers.autoInstalled":"Auto installed","powers.author":"Author","powers.license":"License","powers.installed":"Installed","powers.recommended":"Recommended","powers.installedBadge":"Installed","powers.alreadyInstalled":"Already installed","powers.viewAndInstall":"View and Install","powers.install":"Install","powers.installing":"Installing...","powers.installSuccess":"Install successful","powers.installFailed":"Install failed","powers.browseRecommended":"Browse Recommended Powers","powers.noRecommended":"Cannot load recommended list","powers.loadFailed":"Failed to load Powers","powers.loadRecommendedFailed":"Failed to load recommended Powers","powers.name":"Name","powers.thirdPartyDisclaimer":"Third-party Powers run independently of Kiro core services and may be subject to their own license terms. Kiro has not tested these tools in all scenarios, please only install from trusted sources and review relevant documentation and licenses.","powers.addCustom":"Add custom Power","powers.importFromFolder":"Import from folder","powers.importFromFolderHint":"Select a local folder containing plugin.json or POWER.md","powers.importFromUrl":"Import from GitHub","powers.importFromUrlHint":"Provide a public GitHub URL to a community Power","powers.importUrlDesc":"Supports https://github.com/owner/repo, optionally with branch and subdirectory: /tree//. Only public github.com repositories are supported.","powers.selectFolder":"Choose a folder containing a power","powers.import":"Import","powers.importing":"Importing...","powers.installSuccessFromFolder":"Installed from folder: {{name}}","powers.installSuccessFromUrl":"Installed from GitHub: {{name}}","powers.importFolderFailed":"Failed to import from folder","powers.importUrlFailed":"Failed to import from GitHub","powers.sourceLocal":"Local","powers.sourceLocalHint":"Custom Power imported from a local folder","powers.sourceRepo":"GitHub","powers.sourceRepoHint":"Custom Power imported from a GitHub URL","toast.loading":"Loading...","toast.processing":"Processing...","toast.success":"Operation successful","toast.error":"Operation failed","status.fallback.normal":"Normal","status.fallback.capped":"Capped","status.fallback.banned":"Banned","status.fallback.invalid":"Invalid","status.fallback.expired":"Expired","status.fallback.unknown":"Unknown","session.title":"Session Management","session.subtitle":"Manage Kiro IDE's chat sessions","session.workspacesAndSessions":"Workspaces and Sessions","session.searchSessions":"Search sessions...","session.noMatchingSessions":"No matching sessions found","session.collapse":"Collapse","session.expand":"Expand","session.delete":"Delete","session.workspaces":"workspaces","session.sessions":"sessions","session.noSessions":"No sessions","session.selectSessionToView":"Select a session to view details","session.sessionHasNoMessages":"This session has no messages","session.conversationSummary":"Conversation Summary (Context Compression)","session.deleteWorkspace":"Delete Workspace","session.deleteSession":"Delete Session","session.deleteWorkspaceConfirm":'Are you sure you want to delete workspace "{{name}}" and all its sessions?\n\nThis action cannot be undone!',"session.deleteSessionConfirm":'Are you sure you want to delete session "{{title}}"?',"session.batchDeleteWorkspaces":"Batch Delete Workspaces","session.batchDeleteConfirm":"Are you sure you want to delete the selected {{count}} workspaces and all their sessions?\n\nWorkspaces: {{names}}\n\nThis action cannot be undone!","session.selectWorkspacesFirst":"Please select workspaces to delete first","session.sessionDeleted":"Session deleted","session.workspaceDeleted":'Successfully deleted workspace "{{name}}"',"session.workspacesDeleted":"Successfully deleted {{count}} workspaces","session.loadSessionsFailed":"Failed to load session list:","session.loadWorkspacesFailed":"Failed to load workspaces:","session.loadFailed":"Failed to load:","session.deleteWorkspaceFailed":"Failed to delete workspace:","session.deleteFailed":"Failed to delete:","session.batchDeleteFailed":"Batch delete failed:","session.exportSuccess":"Export successful!","session.exportFailed":"Export failed:","session.cannotFindWorkspace":"Cannot find the workspace the session belongs to","session.selectAll":"Select All","session.deselectAll":"Deselect All","tray.showWindow":"Show Window","tray.exitApp":"Exit App","tray.tooltip":"Kiro Account Manager","gateway.clientKey":"Client Key","gateway.fixFormErrors":"Please fix form errors before continuing","gateway.gatewayDescription":"Manage the gateway's endpoint status, client access, security boundaries, and request logs; save configuration and start or stop the gateway here.","gateway.responseCache":"Response Cache","gateway.requestCount":"Request Count","gateway.lastSync":"Last Sync","gateway.errorCount":"Error Count","gateway.endpoint":"Endpoint","gateway.write":"Write","gateway.requestBody":"Request Body","gateway.responseBody":"Response Body","gateway.status":"Status","gateway.model":"Model","gateway.account":"Account","gateway.duration":"Duration","gateway.time":"Time","gateway.tokens":"In/Out","gateway.client":"Client","gateway.listenAddress":"Listen Address","gateway.baseUrl":"Base URL","gateway.configureAccountPool":"Configure account pool","gateway.clientConfigured":"✓ Client configured","gateway.selected":"Selected","gateway.accounts":"accounts","gateway.promptFilter":"Prompt Filter","gateway.simplifyCCPrompt":"Simplify CC Prompt","gateway.removeBoundaryMarkers":"Remove Boundary Markers","gateway.removeEnvNoise":"Remove Env Noise","gateway.customRules":"Custom Rules","gateway.noCustomRules":"No custom rules","gateway.manageRules":"Manage Rules","gateway.cacheTTLSeconds":"Cache TTL (seconds)","gateway.thresholdPercent":"Threshold %","gateway.ipWhitelist":"IP Whitelist","gateway.singleAccount":"Single Account","gateway.byGroup":"By Group","gateway.globalPool":"Global Pool","gateway.accountMode":"Account Mode","gateway.priorityQuota":"Priority Quota","gateway.groupMode":"Group Mode","gateway.configuredRules":"Configured Rules ({{count}})","gateway.regex":"Regex","gateway.containKeywords":"Contains Keywords","gateway.match":"Match","gateway.replace":"Replace","gateway.cancel":"Cancel","gateway.saveConfig":"Save Configuration","gateway.customRegexOrKeywordFilterRules":"Custom regex or keyword filter rules to clean up noise content in system prompts","gateway.addPresetRules":"Add Preset Rules","gateway.promptFilterRules":"Prompt Filter Rules","gateway.addRule":"Add Rule","gateway.add":"Add","gateway.enabled":"Enabled","gateway.specifySingleAccount":"Specify single account","gateway.routingStrategy":"Routing Strategy","gateway.roundRobin":"Round Robin","gateway.random":"Random","gateway.weightedRandom":"Weighted Random","gateway.leastConnections":"Least Connections","gateway.selectAGroup":"Select a group","gateway.autoStart":"Auto Start","gateway.authHeader":"Auth Header","gateway.requestLogs":"Request Logs","gateway.protocolTest":"Live Protocol Test","gateway.accountPool":"Account pool","gateway.localOnly":"Local only","gateway.allowRemote":"Allow remote","gateway.running":"Running","gateway.stopped":"Stopped","gateway.restart":"Restart","gateway.restarting":"Restarting…","gateway.copyEntry":"Copy entry address","gateway.copyClientKey":"Copy client key","gateway.requestCountLabel":"Requests","gateway.errorCountLabel":"Errors","gateway.tabOverview":"Overview","gateway.tabRequestLogs":"Request logs","gateway.tabSettings":"Configuration","gateway.connectClients":"Connect a client","gateway.appliesTo":"Applies to","gateway.chooseProtocol":"Choose a protocol","gateway.chooseProtocolHint":"the protocol decides the three fields below","gateway.metricJumpToLogs":"View request log details","gateway.recentRequests":"Recent requests","gateway.noRecentRequests":"No requests yet","gateway.rowToggleDetail":"Click to expand the request and response","gateway.viewRaw":"Raw","gateway.viewJson":"JSON","gateway.viewText":"Text","gateway.tools":"Tools","gateway.noRunningAccountPool":"No usable account in the pool; every request will fail. Configure the pool under Settings → Accounts & Routing.","gateway.noAccountsAtAll":"No account imported yet, so the gateway cannot work. Import a Kiro account under Accounts first.","gateway.viewAllLogs":"View all","gateway.protocolTestDesc":"Build a request in any of the three protocols and send it through this gateway - it consumes account quota","gateway.copyConfig":"Copy config","gateway.copyKey":"Copy key","gateway.groupRouting":"Accounts & routing","gateway.groupAccess":"Access control & startup","gateway.groupRequestHandling":"Request handling","gateway.switchesOn":"enabled","gateway.notSelected":"not selected","gateway.noPoolSelected":"No account selected","gateway.disabled":"Off","gateway.autoStartOn":"Autostart on","gateway.autoStartOff":"Autostart off","gateway.thresholdHint":"Disable the account once usage reaches this percentage","gateway.ipWhitelistHint":"One IP or CIDR per line, e.g. 10.0.0.0/24","gateway.upstreamProxyLabel":"Upstream proxy (Kiro API egress)","gateway.upstreamProxyHint":"Empty = follow account proxy or system proxy; supports http/https/socks5 URLs","gateway.maxToolDescLabel":"Max tool description length","gateway.maxToolDescHint":"Descriptions over this limit are moved into the system prompt's Tool Documentation section; 0 = no limit","gateway.webSearchToggle":"WebSearch sub-requests","gateway.webSearchOn":"WebSearch on","gateway.webSearchOff":"WebSearch off","gateway.toolSearchToggle":"Tool Search discovery","gateway.toolSearchOn":"Tool Search on","gateway.toolSearchOff":"Tool Search off","gateway.poolStatusActive":"Active","gateway.poolStatusOverage":"Overage","gateway.poolStatusCapped":"Capped","gateway.poolStatusBanned":"Banned","gateway.poolStatusInvalid":"Invalid","gateway.strategyBalanced":"Balanced","gateway.strategyMostQuota":"Most Quota","gateway.currentEntry":"Current Entry","gateway.start":"Start","gateway.stop":"Stop","gateway.copiedItem":"Copied {{label}}","gateway.logDir":"Log Directory","gateway.newRuleSection":"Add New Rule","gateway.ruleName":"Rule Name","gateway.ruleType":"Rule Type","gateway.ruleTypeLinesContaining":"Contains keyword (delete matching lines)","gateway.ruleTypeRegex":"Regex (replace matched content)","gateway.matchPattern":"Match Pattern","gateway.replaceContentRegexEmpty":"Replacement (regex only; leave empty to delete)","gateway.ruleNamePlaceholder":"e.g. Filter Git status","gateway.matchPatternPlaceholder":"Keyword mode: git status\nRegex mode: .*?","gateway.replacePlaceholderEmpty":"Leave empty to delete matched content","gateway.filterRuleAdded":"Added filter rule: {{name}}","gateway.presetRulesLoaded":"Successfully loaded {{count}} preset filter rules","gateway.allPresetRulesExist":"All preset rules already exist","gateway.presetFilterGitStatus":"Filter Git status info","gateway.presetFilterRecentCommits":"Filter recent commits info","gateway.presetFilterKnowledgeCutoff":"Filter assistant knowledge cutoff","gateway.presetFilterBillingHeader":"Filter billing header info","gateway.presetFilterFastMode":"Filter fast mode tag","gateway.presetFilterProjectPath":"Filter project path info","gateway.selectGroup":"Select Group","gateway.selectGroupPlaceholder":"Select a group","gateway.accountPoolDescription":"Select accounts to participate in gateway rotation and configure the request distribution strategy.","gateway.selectedAccounts":"Selected Accounts","gateway.baseUrlLabel":"Base URL","gateway.authHeaderLabel":"Auth header","gateway.endpointLabel":"Endpoint","gateway.defaultRoundRobin":"Default: Round Robin","gateway.searchAccounts":"Search accounts...","gateway.statusAll":"All","gateway.selectAll":"Select All","gateway.deselectAll":"Deselect All","gateway.selectAvailable":"Select available","gateway.noAvailableAccounts":"No available accounts. Please add accounts first.","gateway.unknownAccount":"Unknown account","gateway.noQuota":"No quota","gateway.notRefreshed":"Not refreshed","gateway.close":"Close","gateway.tplSimple":"Simple Chat","gateway.tplMultiTurn":"Multi-turn Chat","gateway.tplNonStream":"Non-streaming","gateway.routingAuto":"Auto (by gateway load balancing)","gateway.routingSingle":"Single Account","gateway.routingGroup":"Group Mode","gateway.routingPool":"Account Pool ({{count}})","gateway.jsonFormatError":"JSON format error: {{message}}","gateway.requestFailed":"Request failed: {{message}}","gateway.protocol":"Protocol","gateway.templates":"Templates","gateway.upstreamRegion":"Upstream region","gateway.upstreamRegionHint":"Region used when the gateway calls Kiro upstream; unrelated to local listening","gateway.copyAsCurl":"Copy as curl","gateway.abort":"Abort","gateway.specifiedAccount":"Specified Account","gateway.autoSelect":"Auto select","gateway.autoSelectLb":"Auto select (load balancing)","gateway.noAvailableAccountsForRouting":"No available accounts under current routing","gateway.format":"Format","gateway.inputJsonPlaceholder":"Enter JSON request body...","gateway.responseResult":"Response Result","gateway.receiving":"Receiving...","gateway.copy":"Copy","gateway.responsePlaceholder":"Response will appear here...","gateway.requesting":"Requesting...","gateway.sendRequest":"Send Request","steering.inclusionAlways":"Always","steering.inclusionAuto":"Auto","steering.inclusionFileMatch":"Match","steering.inclusionManual":"Manual","steering.groupAlways":"Always Include","steering.groupAuto":"Auto Activate","steering.groupFileMatch":"File Match","steering.groupManual":"Manual Reference","steering.loadFailed":"Failed to load Steering file","steering.saveFailed":"Failed to save Steering file","steering.deleteFailed":"Failed to delete Steering file","steering.createFailed":"Failed to create Steering file","steering.createDefaultFailed":"Failed to create default Steering template","steering.initializeFailed":"Failed to initialize project Steering","steering.refineFailed":"Failed to refine Steering file","steering.defaultCreated":"Default Steering template created","steering.initialCreated":"Project Steering initialized","steering.refineSuccess":"Steering file refined","skills.saveFailedInternal":"Failed to save Skill","powers.uninstallFailedInternal":"Failed to uninstall Power","powers.installFailedInternal":"Failed to install Power","mcp.toggleFailedInternal":"Failed to toggle MCP status","mcp.deleteFailedInternal":"Failed to delete MCP service","hooks.saveFailedInternal":"Failed to save Hook","hooks.createFailedInternal":"Failed to create Hook","hooks.promptPlaceholder":"Please fill in execution instructions here","agents.saveFailedInternal":"Failed to save Custom Agent","agents.loadFailedInternal":"Failed to load Custom Agents","agents.deleteFailedInternal":"Failed to delete Custom Agent","agents.createFailedInternal":"Failed to create Custom Agent","steering.loadFailedInternal":"Failed to load Steering files","steering.saveFailedInternal":"Failed to save Steering file","steering.deleteFailedInternal":"Failed to delete Steering file","steering.createFailedInternal":"Failed to create Steering file","steering.createDefaultFailedInternal":"Failed to create default Steering template","steering.initializeFailedInternal":"Failed to initialize project Steering","steering.refineFailedInternal":"Failed to refine Steering files","mcp.loadFailedInternal":"Failed to load MCP config","hooks.loadFailedInternal":"Failed to load Hooks","hooks.deleteFailedInternal":"Failed to delete Hook","skills.loadFailedInternal":"Failed to load Skills","skills.deleteFailedInternal":"Failed to delete Skill","skills.createFailedInternal":"Failed to create Skill","skills.importFailedInternal":"Failed to import local Skill","skills.importGithubFailedInternal":"Failed to import Skill from GitHub","powers.loadFailedInternal":"Failed to load Powers","powers.importFolderFailedInternal":"Failed to import Power from folder","powers.importUrlFailedInternal":"Failed to import Power from URL","powers.loadRecommendedFailedInternal":"Failed to load recommended Powers","mcp.invalidFormat":'Please wrap in { "name": { config } } format',"mcp.noValidConfig":"No valid configuration found","settings.copyPath":"Copy path","settings.copy":"Copy","filter.closePanel":"Close filter panel","filter.basic":"Basic filters","filter.advanced":"Advanced filters","group.createNew":"Create new group","group.clickToRemove":"Click to remove","group.addTag":"Add tag","accounts.trialExpiring":"Trial expiring","welcome.importantNotice":"⚠️ Important Notice","welcome.appName":"Kiro Account Manager","welcome.permanentlyFree":"This software is permanently free","welcome.importantNoticeSoftwareFree":"Important Notice: This software is permanently free","welcome.openSourceFree":"• This software is completely open source and free, no one may charge for it in any form","welcome.allFeaturesOpen":"• All features are fully open with no restrictions","welcome.reportIfCharged":"• If someone charges you, please report immediately","welcome.buyMeCoffee":"💖 Buy me a coffee","welcome.supportMessage":"If this tool helps you, feel free to buy me a coffee. Your support is my motivation to keep updating ❤️","welcome.sponsorBenefits":"Sponsor Benefits:","welcome.priorityFeedback":"⚡ Priority feedback handling","welcome.joinUs":"Follow us","welcome.tgChannel":"Telegram Channel","welcome.tgGroup":"Telegram Group","welcome.priorityFeatures":"🎯 Priority feature implementation","welcome.oneOnOneSupport":"🔧 One-on-one technical support","welcome.sponsorHint":"Tip: Please include your GitHub username or email when sponsoring for easy contact","welcome.alipay":"Alipay","welcome.wechatPay":"WeChat Pay","welcome.clickToEnlarge":"Click image to enlarge","welcome.iUnderstand":"I Understand","errors.saveAccountFailed":"Failed to save account data","errors.getEmailFailed":"Failed to get email, please check account status","errors.accountMissingIdentifiers":"Account is missing userId, email or refresh_token","errors.accountNotFound":"Account not found","errors.remoteDeleteNotSupported":"Remote deletion is not supported for this account type","errors.noCliAccounts":"No account data found in database","errors.multipleCliAccounts":"Multiple accounts found in database, please contact the developer","errors.browserPathEmpty":"Browser path is empty","errors.stateMissing":"State parameter not received","errors.stateMismatch":"State mismatch","errors.authTimeout":"Authorization timeout","errors.authCodeMissing":"Authorization code not received","errors.refreshTokenExpired":"Refresh token has expired","errors.startUrlInvalid":"Invalid Start URL. Please check your IAM Identity Center Start URL.\n\nExample format: https://d-1234567890.awsapps.com/start","errors.noAvailableAccount":"No available account found matching the gateway configuration","errors.loadBalancerFailed":"Load balancer failed to select an available account","app.accountBanned":"Account banned","app.accountBannedMessage":"Account {{email}} has been banned and cannot continue to be used","app.tokenExpired":"Token expired","app.tokenExpiredMessage":"Account {{email}} token has expired, please login again","filter.set":"Set","filter.all":"All","filter.statusNormal":"Normal","filter.statusCapped":"Capped","filter.statusBanned":"Banned","filter.statusInvalid":"Invalid","filter.statusExpired":"Expired","home.expires":"expires","agentConfig.selectProjectDirFailed":"Failed to select project directory","common.preview":"Preview","about.closePreview":"Close preview","about.kiroGoDesc":"Kiro API reverse proxy with standard OpenAI and Anthropic interfaces","accountCard.enableDisableAccount":"Enable or disable account","accountCard.overageToggle":"Overage toggle","accountCard.overageEnabled":"Overage enabled","accountCard.cap":"Cap","accountCard.resetDate":"{{date}} reset","common.viewRawResponse":"View raw response","common.hideRawResponse":"Hide raw response","app.networkError":"Network error","app.networkErrorMessage":"{{count}}/{{total}} accounts failed to sync. Please check your network connection","common.pleaseWait":"Please wait...","common.noMatches":"No matches found","home.remaining":"Remaining","sessions.title":"Session Manager","sessions.subtitle":"Browse, search, and export Kiro IDE conversation history","sessions.workspaceCount":"{{count}} workspaces","sessions.loadedSessions":"{{count}} sessions loaded","sessions.selectedCount":"{{count}} selected","sessions.workspacesAndSessions":"Workspaces & Sessions","sessions.deleteCount":"Delete ({{count}})","sessions.selectAll":"Select all","sessions.deselectAll":"Deselect all","sessions.searchPlaceholder":"Search sessions...","sessions.clearSearch":"Clear search","sessions.searchResultCount":"{{count}} sessions found","sessions.noMatch":"No matching sessions found","sessions.deleteSessionTitle":"Delete Session","sessions.deleteSessionConfirm":'Are you sure you want to delete the session "{{title}}"?',"sessions.sessionDeleted":"Session deleted","sessions.deleteFailed":"Delete failed: {{error}}","sessions.deleteWorkspaceTitle":"Delete Workspace","sessions.deleteWorkspaceConfirm":'Are you sure you want to delete workspace "{{name}}" and all its sessions?\n\nThis action cannot be undone!',"sessions.workspaceDeleted":'Workspace "{{name}}" deleted successfully',"sessions.deleteWorkspaceFailed":"Failed to delete workspace: {{error}}","sessions.batchDeleteWorkspaceTitle":"Batch Delete Workspaces","sessions.batchDeleteWorkspaceConfirm":"Are you sure you want to delete the {{count}} selected workspaces and all their sessions?\n\nWorkspaces: {{names}}\n\nThis action cannot be undone!","sessions.batchDeleteSuccess":"Successfully deleted {{count}} workspaces","sessions.batchDeleteFailed":"Batch delete failed: {{error}}","sessions.pleaseSelectWorkspace":"Please select the workspaces to delete first","sessions.sessionNotFound":"Could not find the workspace for this session","sessions.exportSuccess":"Export successful!","sessions.exportFailed":"Export failed: {{error}}","sessions.expand":"Expand","sessions.collapse":"Collapse","sessions.sessionCount":"{{count}} sessions","sessions.refresh":"Refresh list","sessions.loading":"Loading sessions...","sessions.conversationSummary":"Conversation Summary (context compression)","sessions.noMessages":"This session has no messages","sessions.user":"User","sessions.assistant":"Assistant","sessions.selectSessionToView":"Select a session to view details","sessions.selectFromTree":"Choose a conversation from the workspace tree on the left or search results.","sessions.loadingCli":"Loading...","sessions.loadSessionListFailed":"Failed to load session list: {{error}}","sessions.loadWorkspaceFailed":"Failed to load workspaces: {{error}}","sessions.loadFailed":"Failed to load: {{error}}","cliSessions.loadListFailed":"Failed to load CLI sessions: {{error}}","cliSessions.loadDetailFailed":"Failed to load session details: {{error}}","cliSessions.deleteTitle":"Delete Session","cliSessions.deleteConfirm":"Are you sure you want to delete this CLI session? This action cannot be undone.","cliSessions.deleted":"Session deleted","cliSessions.deleteFailed":"Delete failed: {{error}}","cliSessions.exported":"Exported to {{path}}","cliSessions.exportFailed":"Export failed: {{error}}","cliSessions.searchPlaceholder":"Search sessions...","cliSessions.count":"{{count}} CLI sessions","cliSessions.context":"Context: {{pct}}%","cliSessions.user":"User","cliSessions.assistant":"Assistant","cliSessions.selectToView":"Select a CLI session to view details","gatewayLogs.title":"Request Logs Monitor","gatewayLogs.description":"View gateway request records, local cache hits and traffic stats in real time","gatewayLogs.total":"Total","gatewayLogs.success":"Success","gatewayLogs.error":"Error","gatewayLogs.tokensInput":"In","gatewayLogs.tokensOutput":"Out","gatewayLogs.cacheSaved":"(Saved {{pct}}% input cache)","gatewayLogs.cacheLabel":"Cache:","gatewayLogs.cacheItems":"items (Delta: {{delta}} / LRU: {{lru}})","gatewayLogs.logRequests":"Log requests","gatewayLogs.clearCache":"Clear cache","gatewayLogs.searchPlaceholder":"Search account, model, path, upstream or status code...","gatewayLogs.filterAll":"All status codes","gatewayLogs.filterSuccess":"Success responses (2xx/3xx)","gatewayLogs.filterError":"Error responses (4xx/5xx)","gatewayLogs.keepLatest50":"Keep latest 50","gatewayLogs.keepLatest100":"Keep latest 100","gatewayLogs.keepLatest200":"Keep latest 200","gatewayLogs.logLevelTitle":"Gateway log level","gatewayLogs.levelDebug":"Debug level","gatewayLogs.levelInfo":"Info level","gatewayLogs.levelWarn":"Warn level","gatewayLogs.levelError":"Error level","gatewayLogs.openLogDirTitle":"Open local log folder","gatewayLogs.logDir":"Log directory","gatewayLogs.exportTitle":"Export as log text file","gatewayLogs.export":"Export","gatewayLogs.clear":"Clear","gatewayLogs.confirmClear":"Clear now?","gatewayLogs.colTime":"Time","gatewayLogs.colPath":"Endpoint","gatewayLogs.colAccount":"Account","gatewayLogs.colModel":"Target model","gatewayLogs.colClient":"Client","gatewayLogs.colClientTitle":"Client User-Agent (hover for the full value)","gatewayLogs.colStatusTitle":"HTTP status code","gatewayLogs.colStatus":"Status","gatewayLogs.colInput":"Input","gatewayLogs.colOutput":"Output","gatewayLogs.colCacheReadTitle":"Cache read tokens","gatewayLogs.colCacheRead":"Cache read","gatewayLogs.colCacheWriteTitle":"Cache write tokens","gatewayLogs.colCacheWrite":"Cache write","gatewayLogs.colDuration":"Duration","gatewayLogs.waitingTraffic":"Waiting for gateway traffic...","gatewayLogs.noMatch":"No matching request logs","gatewayLogs.cacheHitTitle":"Cache hit","gatewayLogs.streamingTitle":"Streaming response","gatewayLogs.requestPayload":"Request Payload (Request Body)","gatewayLogs.responsePayload":"EventStream Decoded Log (Decoded EventStream)","gatewayLogs.sseDetailHint":"Per-event SSE detail for streamed requests is written to file:","gatewayLogs.openLogDir":"Open log directory","gatewayLogs.sseShowEvents":"Show events","gatewayLogs.sseLoading":"Loading…","gatewayLogs.sseNoEvents":"No SSE events recorded for this request (older log lines carry no req tag, so per-request filtering is impossible)","gatewayLogs.toastSseLoadFailed":"Failed to read SSE detail: {{error}}","gatewayLogs.copy":"Copy","gatewayLogs.toastCacheCleared":"System cache cleared","gatewayLogs.breakdownTitle":"Breakdown","gatewayLogs.healthTitle":"Account health","gatewayLogs.byModel":"By model","gatewayLogs.byEndpoint":"By endpoint","gatewayLogs.byClient":"Who uses it (key × client)","gatewayLogs.colClientTool":"Client tool","gatewayLogs.colCount":"Requests","gatewayLogs.unknownClient":"Unknown","gatewayLogs.noData":"No data","gatewayLogs.cleanupStale":"Clean stale","gatewayLogs.healthUnavailable":"Gateway is not running; health is only available while the gateway is active","gatewayLogs.colHealthScore":"Score","gatewayLogs.colSuccess":"OK","gatewayLogs.colFailure":"Fail","gatewayLogs.colConns":"Conns","gatewayLogs.colAvgMs":"Avg ms","gatewayLogs.colRateLimit":"Throttle","gatewayLogs.rateLimited":"Limited","gatewayLogs.rateLimitedHint":"This account is rate limited; click to clear it now","gatewayLogs.toastRateLimitCleared":"Rate limit cleared for this account","gatewayLogs.resetHealth":"Reset","gatewayLogs.cleanupExpired":"Clean expired","gatewayLogs.cleanupExpiredTitle":"Remove expired cache entries","gatewayLogs.toastExpiredCleaned":"Removed {{count}} expired cache entries","gatewayLogs.toastHealthReset":"Account health has been reset","gatewayLogs.toastHealthResetFailed":"Operation failed: {{error}}","gatewayLogs.toastStaleCleaned":"Stale health entries cleaned","gatewayLogs.toastClearCacheFailed":"Failed to clear cache: {{error}}","gatewayLogs.toastLogsCleared":"Gateway logs cleared","gatewayLogs.toastClearFailed":"Failed to clear: {{error}}","gatewayLogs.toastExported":"Logs exported successfully","gatewayLogs.toastPayloadCopied":"Payload copied","gatewayLogs.toastCopyFailed":"Copy failed","gatewaySummary.field.hostEmpty":"Listen address cannot be empty","gatewaySummary.field.hostInvalid":"Listen address must be localhost, an IPv4 or IPv6 address","gatewaySummary.field.portRange":"Port must be between 1 and 65535","gatewaySummary.field.regionEmpty":"region cannot be empty","gatewaySummary.field.regionUnsupported":"Unsupported region: {{region}}","gatewaySummary.field.accountMode":"accountMode must be single/group/pool","gatewaySummary.field.accountRequired":"single mode requires selecting an account","gatewaySummary.field.groupRequired":"group mode requires selecting a group","gatewaySummary.field.allowlistRequired":"Remote access requires at least one allowlisted source IP","gatewaySummary.field.allowlistInvalid":"Invalid allowlist entry: {{entry}}","gatewaySummary.otherClient":"Other OpenAI-compatible client","gatewaySummary.unknownAccount":"Unknown account","gatewaySummary.exposureLocal":"Local only","gatewaySummary.exposureRemote":"Remote allowed","gatewaySummary.exposureLocalFull":"Local only","gatewaySummary.exposureRemoteFull":"Remote allowed","gatewaySummary.inventory":"{{accounts}} accounts / {{groups}} groups","gatewaySummary.routing.single":"Single account","gatewaySummary.routing.singleDesc":"Always uses one account — good for debugging or binding to a single tenant.","gatewaySummary.routing.group":"Group account pool","gatewaySummary.routing.groupDesc":"Locks an account group, then picks an available account by strategy and threshold.","gatewaySummary.routing.pool":"Account pool","gatewaySummary.routing.poolDesc":"Uses all available accounts, selected automatically by strategy and threshold.","gatewaySummary.routing.currentAccount":"Current account","gatewaySummary.routing.currentGroup":"Current group","gatewaySummary.routing.accountScope":"Account scope","gatewaySummary.routing.noAccount":"No account selected","gatewaySummary.routing.noGroup":"No group selected","gatewaySummary.routing.allAccounts":"All available accounts","gatewaySummary.routing.fixed":"Fixed account, no rotation","gatewaySummary.routing.strategyThreshold":"Strategy {{strategy}} / threshold {{threshold}}%","gatewaySummary.action.fixErrors":"Fix configuration errors first","gatewaySummary.action.fixErrorsDesc":"The form has invalid values; save, start and restart are all blocked until the highlighted fields are fixed.","gatewaySummary.action.restartNeeded":"Configuration changed — restart to apply","gatewaySummary.action.restartNeededDesc":"Still running with the configuration from startup. Save first, then restart to apply the new settings.","gatewaySummary.action.unsavedRunning":"Running configuration is not saved","gatewaySummary.action.unsavedRunningDesc":"The current page configuration is already live but not written back to the config file; save it to keep it for the next launch.","gatewaySummary.action.running":"Running","gatewaySummary.action.runningDesc":"Configuration matches the saved state; stop the service to cut traffic.","gatewaySummary.action.canStart":"Ready to start with current configuration","gatewaySummary.action.canStartDesc":"Starting uses the configuration in the form; save it first if you want the next app launch to reuse these settings.","gatewaySummary.action.stopped":"Not running","gatewaySummary.action.stoppedDesc":"Start the existing configuration directly, or adjust the form first.","gatewaySummary.account.overage":"Overage {{used}}{{cap}}","gatewaySummary.account.remaining":"{{remaining}}/{{quota}} remaining","gatewaySummary.integration.logDirReady":"Log directory located","gatewaySummary.integration.logDirMissing":"Log directory unavailable","gatewaySummary.integration.errorDigest":"{{errors}} errors / {{hits}} hits","gatewayMapping.title":"Model mapping rules","gatewayMapping.description":"Model names requested by the client are mapped to Kiro internal models by rules","gatewayMapping.empty":"No rules yet","gatewayMapping.ruleReplace":"Replace","gatewayMapping.ruleAlias":"Alias","gatewayMapping.ruleLoadBalance":"Load balance","gatewayMapping.addNewRule":"Add new rule","gatewayMapping.sourcePlaceholder":"Source model name","gatewayMapping.targetPlaceholder":"Target model name","gatewayMapping.typeReplace":"Replace (replace)","gatewayMapping.typeAlias":"Alias (alias)","gatewayMapping.add":"Add","gatewayMapping.presetTitle":"Quickly add OpenAI/Codex compatible mappings","gatewayMapping.presetButton":"Preset GPT mappings","gatewayMapping.fetchModelsFailed":"Failed to fetch available models","gatewayMapping.addedRule":"Added mapping rule: {{name}}","gatewayMapping.presetLoaded":"Successfully loaded {{count}} preset mapping rules","gatewayMapping.presetExists":"All preset mapping rules already exist","gatewaySummary.security.keysFixed":"Fixed: kiro","settings.openMcpFile":"Edit MCP Config","settings.openSandboxFile":"Edit Sandbox Config","sessions.timeJustNow":"just now","sessions.timeMinutesAgo":"{n} min ago","sessions.timeHoursAgo":"{n} h ago","sessions.timeDaysAgo":"{n} d ago","sessions.noSessions":"No sessions yet","sessions.noSessionsForProject":"No sessions for this project","sessions.copy":"Copy","sessions.copied":"Copied","welcome.freeNotice":"Free Notice","gateway.credits":"Credits","gatewayLogs.colCredits":"Credits","gatewayLogs.colCreditsTitle":"Real billing cost from the upstream meteringEvent; absent for non-streaming requests","gateway.cacheReadWrite":"Cache R/W","gateway.cacheReadWriteTitle":"Cache-read tokens (hit, saves cost) / cache-write tokens (first time, +25% cost)","gateway.creditsTitle":"Real billing cost from the upstream meteringEvent; absent for non-streaming requests","gateway.sessionAffinityToggle":"Session affinity","gateway.sessionAffinityHint":"Route the same client IP to the same account: upstream cache is per-account, so a fixed route improves cache hits (see the cache-read column in logs)","gateway.logStreamEventsToggle":"Log stream events","gateway.logStreamEventsHint":"Write a per-request SSE event dump file for each streaming request to debug chunk ordering; keep off to save disk","gatewayLogs.colContext":"Context","gatewayLogs.colContextTitle":"Context-window usage percentage (0-100) from the upstream contextUsageEvent; ≥80% is near the limit. Streaming requests only","gatewayLogs.contextLabel":"Context","gatewayLogs.contextPeak":"peak","gatewayLogs.contextPeakTitle":"Highest context usage in the current list","gatewayLogs.contextNearLimit":"{{count}} ≥80%","gatewayUsage.tabUsage":"Usage","gatewayUsage.noData":"No data","gatewayUsage.requests":"{{count}} requests","gatewayUsage.ok":"{{count}} ok","gatewayUsage.failed":"{{count}} failed","gatewayUsage.streamed":"{{count}} streamed","gatewayUsage.tokens":"Tokens in {{input}}K / out {{output}}K","gatewayUsage.cache":"Cache read {{read}}K / write {{write}}K · {{hit}} hits","gatewayUsage.credits":"Credits","gatewayUsage.creditsTitle":"Real billing cost from the upstream meteringEvent (not tokens × list price); absent for non-streaming requests","gatewayUsage.contextAvg":"Context avg","gatewayUsage.contextMax":"peak","gatewayUsage.byModel":"By model","gatewayUsage.byClient":"By client","gatewayUsage.byEndpoint":"By endpoint","gatewayUsage.colCount":"Count","gatewayUsage.colErrors":"Errors","gatewayUsage.colTokens":"Tokens","gatewayUsage.colCacheRead":"Cache read","gatewayUsage.colCredits":"Credits","gatewayMaskRules.title":"Masking rules","gatewayMaskRules.desc":"Tune actions per kind, add custom patterns, and whitelist values that must never be masked. Saved with the gateway config.","gatewayMaskRules.kindsTitle":"Built-in kinds","gatewayMaskRules.kindsHint":"Per kind: Mask (placeholder) / Warn (pass but log) / Block (refuse the request); turning a switch off drops the whole kind.","gatewayMaskRules.customTitle":"Custom rules","gatewayMaskRules.noCustom":"No custom rules. Add regexes for internal token formats, private prefixes, etc.","gatewayMaskRules.addRule":"Add rule","gatewayMaskRules.ruleName":"Rule name (e.g. internal-token)","gatewayMaskRules.patternPlaceholder":"Regex, e.g. \bACME-[A-Z0-9]{12}\b","gatewayMaskRules.neverTitle":"Never mask","gatewayMaskRules.neverHint":"Whitelisted values match exactly and beat every rule — not masked, not warned, not blocked. For tasks where the model must reason about the value itself. Note: whitelist values are stored in plain text in the config file.","gatewayMaskRules.addNever":"Add value","gatewayMaskRules.neverValue":"Value to pass through (exact match)","gatewayMaskRules.neverNote":"Note (what this value is)","gatewayMaskRules.manage":"Rules","gatewayMaskRules.actionMask":"Mask","gatewayMaskRules.actionWarn":"Warn","gatewayMaskRules.actionBlock":"Block","gatewayMaskRules.kindApiKey":"API keys (sk- / AKIA / ghp_ / xox)","gatewayMaskRules.kindPrivateKey":"Private keys (PEM blocks)","gatewayMaskRules.kindToken":"Tokens (Bearer / JWT)","gatewayMaskRules.kindEmail":"Emails","gatewayMaskRules.kindCreditCard":"Credit cards (Luhn-checked)","gatewayMaskRules.kindIdCard":"ID cards (18 digits)","gatewayMaskRules.idRequired":"Rule id must not be empty","gatewayMaskRules.idDuplicate":"Duplicate rule id: {id}","gatewayMaskRules.badPattern":'Rule "{name}" has an invalid regex: {error}',"gatewayMaskRules.saved":"Masking rules saved","gatewayMasking.trendSessionHint":"Masking trend (hourly) · this run only","gatewayMasking.sessionScopeNotice":"Masking records are memory-only by design (never on disk) and clear on restart, so the trend covers this run only. For the 7-day request trend see the Usage tab.","gatewayMasking.tabMasking":"Masking","gatewayMasking.totalMasked":"{{count}} values masked","gatewayMasking.totalWarned":"{{count}} values warned","gatewayMasking.requestsAffected":"{{count}} requests affected","gatewayMasking.tryIt":"Try it: what the vendor would receive for this text","gatewayMasking.tryPlaceholder":"Paste text with a key / email / ID number to try","gatewayMasking.run":"Run","gatewayMasking.noHits":"No rule matched","gatewayMasking.records":"Masking records (metadata only, no real values)","gatewayMasking.noRecords":"No records yet. Turn masking on in Settings; only new requests are recorded.","gatewayMasking.vendorSaw":"What the vendor actually received (placeholders)","gatewayMasking.hits":"Hits","gatewayMasking.shapedBadge":"shaped","gatewayMasking.shapedHint":"Same-shape replacement: the vendor got a made-up key of the real value's form, not a placeholder","gatewayMasking.requestId":"Request ID","gatewayMasking.notice":"Real values live only in the in-memory map and vanish when the process exits; even the original text is not stored here — look it up by request ID in Request Logs for the side-by-side. Records clear on restart.","gatewayMasking.kindPieTitle":"Hits by type","gatewayMasking.trendTitle":"Masking trend (hourly)","gatewayMasking.seriesMasked":"Masked","gatewayMasking.seriesWarned":"Warned","gateway.privacyMaskToggle":"Privacy masking","gateway.privacyMaskHint":"Swap keys/emails/IDs for placeholders before a request leaves this machine, and swap them back in the reply. A value always gets the same placeholder (keeps prompt cache hits); if masking fails the request is refused","gateway.maskShapeToggle":"Same-shape replacement","gateway.maskShapeHint":"When on, keys go out as a made-up key of the same form (same prefix, length and character classes) instead of a placeholder: an agent's or tool's key-format check passes, and the model has no placeholder to remark on. Short keys and values with unusual characters fall back to a placeholder","gatewayUsage.cacheHit":"Hit","gatewayUsage.cacheMiss":"Miss","gatewayUsage.trendTitle":"Traffic (hourly)","gatewayUsage.trendHint":"Requests/errors and tokens in-out (right axis)","gatewayUsage.seriesRequests":"Requests","gatewayUsage.seriesErrors":"Errors","gatewayUsage.seriesInputTokens":"Input tokens","gatewayUsage.seriesOutputTokens":"Output tokens","gatewayUsage.cachePieTitle":"Cache hit share","gatewayUsage.creditsTrendTitle":"Billing trend (credits)","gatewaySessions.tabSessions":"Sessions","gatewaySessions.title":"Session usage","gatewaySessions.session":"Session","gatewaySessions.requests":"Requests","gatewaySessions.models":"Models","gatewaySessions.lastActive":"Last active","gatewaySessions.loadFailed":"Load failed: {error}","gatewaySessions.empty":"No session data yet (requests are grouped per session here)","gatewaySessions.hint":"Grouped by sessionId; clients can tag sessions via the x-session-id header, falling back to an IP|UA derived key.","gatewayBills.tabBills":"Bills","gatewayBills.title":"Bill details","gatewayBills.account":"Account","gatewayBills.model":"Model","gatewayBills.requests":"Requests","gatewayBills.totalRequests":"Total requests","gatewayBills.loadFailed":"Load failed: {error}","gatewayBills.empty":"No bill data yet (account attribution starts when the account_id field landed)","gatewayBills.hint":"Aggregated by account × model; credits are the vendor's real metering values. Requests before the account_id field cannot be attributed.","gatewayQuota.tabQuota":"Quota","gatewayQuota.title":"Quota overview","gatewayQuota.account":"Account","gatewayQuota.upstreamQuota":"Upstream quota","gatewayQuota.creditsUsed":"Credits used","gatewayQuota.status":"Status","gatewayQuota.queryFailed":"Query failed","gatewayQuota.ok":"OK","gatewayQuota.loadFailed":"Load failed: {error}","gatewayQuota.empty":"No accounts in the gateway scope","gatewayQuota.hint":"Upstream quota shares the same source as the accounts page (no token refresh; failures are reported). Local usage is aggregated from on-disk logs per account.","gatewayUsage.cacheRead":"Cache reads","gatewayQuota.overage":"Overage","gatewayQuota.overageCapable":"Overage capable","gatewayQuota.overageIncapable":"No overage","gatewayUsage.subOverview":"Overview","gatewayUsage.subSessions":"Sessions","gatewayUsage.subContext":"Context","gatewayContext.title":"Context usage","gatewayContext.avgScore":"Avg score","gatewayContext.cacheRate":"Cache hit rate","gatewayContext.baseline":"Baseline (fixed start)","gatewayContext.growth":"Growth per turn","gatewayContext.curve":"Session fill curve","gatewayContext.promptTokens":"Prompt tokens","gatewayContext.medianTokens":"Median prompt","gatewayContext.tags":"Tags","gatewayContext.empty":"No prompt-composition data yet (accumulates as new-version logs come in)","gatewayContext.hintSessions":"{{count}} tool sessions; {{compacts}} compactions total.","gatewayContext.hintFull":"Only sessions carrying tool definitions are counted (noise like title generation is excluded); cache hit rate counts only requests the vendor reported usage for; baseline = median of system+tools+memory, growth = median of positive deltas. The window is derived from the model name; when it cannot be determined, the window-dependent score and tags are left out.","gatewayContext.mapTitle":"Context composition","gatewayContext.mapFree":"Free","gatewayContext.mapEmpty":"No prompt-composition data for this session yet","gatewayContext.part.system":"System prompt","gatewayContext.part.tools":"Tool definitions","gatewayContext.part.skills":"Skills","gatewayContext.part.memory":"Memory/instructions","gatewayContext.part.files":"Files","gatewayContext.part.results":"Tool results","gatewayContext.part.chat":"Conversation","gateway.conversationsToggle":"Conversation capture","gateway.conversationsHint":"Persist each turn's input/output parts for replay on the usage page; texts go through privacy masking placeholders first, 7-day retention, 256MB total cap","gatewayReplay.title":"Conversation replay","gatewayReplay.clear":"Clear captures","gatewayReplay.turns":"turns","gatewayReplay.loading":"Loading…","gatewayReplay.empty":"No replayable turns for this session","gatewayReplay.truncated":"truncated"};function tm({children:e}){return ie.jsx(Q,{i18n:z,children:e})}function om(e){var t,o,n,a;try{return function(e){switch(e){case"macos":return"macos";case"windows":return"windows";case"linux":return"linux";default:return"unknown"}}(window.__TAURI_OS_PLUGIN_INTERNALS__.platform)}catch{}return(a=null!=(n=null==(o=null==(t=e.defaultView)?void 0:t.navigator)?void 0:o.userAgent)?n:"")?/Macintosh|Mac OS X/i.test(a)?"macos":/Windows/i.test(a)?"windows":/Linux|X11/i.test(a)?"linux":"unknown":"unknown"}z.use(V).init({lng:localStorage.getItem("app-language")||"zh-CN",fallbackLng:"zh-CN",supportedLngs:["zh-CN","en","ru"],resources:{"zh-CN":{translation:{"language.english":"English","language.chinese":"中文","language.russian":"Русский","nav.home":"仪表盘","nav.accounts":"账号管理","nav.sessions":"会话管理","nav.cliSessions":"CLI 会话","nav.agentConfig":"Agent 配置","nav.desktopOAuth":"在线登录","nav.socialIdC":"Social/IdC","nav.settings":"设置","nav.gateway":"Kiro API 网关","nav.about":"关于","gateway.config":"配置","nav.kiroConnected":"Kiro IDE 已连接","nav.collapseSidebar":"双击折叠侧边栏","nav.expandSidebar":"双击展开侧边栏","home.title":"Kiro Account Manager","home.subtitle":"账号配额与用量总览","home.totalAccounts":"总账号数","home.activeAccounts":"正常账号","home.activeVsBanned":"正常/封禁","home.activeVsUnavailable":"正常/不可用","home.proAccounts":"PRO 账号","home.usagePercent":"配额使用率","home.currentAccount":"当前登录账号","home.loggedIn":"已登录","home.notLoggedIn":"Kiro IDE 未登录","home.clickToSwitch":"在账号管理中点击「切换」","home.quotaOverview":"配额总览","home.usedTotal":"已用 / 总量","home.monthlyUsage":"本月用量","home.daysUntilReset":"天后重置","home.resetToday":"今日重置","home.refreshAccount":"刷新账号","home.subscriptionDetails":"订阅详情","home.accountInfo":"账户信息","home.quotaDetails":"额度明细","home.base":"基础","home.trial":"试用","home.type":"类型","home.overage":"超额","home.upgrade":"升级","home.status":"状态","home.enabled":"已启用","home.disabled":"未启用","home.reset":"重置","home.rate":"费率","home.expiresAt":"过期时间","home.unknown":"未知","home.loadFailed":"加载失败","home.loadDataFailed":"加载数据失败","home.mcpTools":"MCP 工具","stats.usageDistribution":"使用率分布","stats.lowUsage":"低使用率","stats.mediumUsage":"中使用率","stats.highUsage":"高使用率","stats.accounts":"个","stats.accountUsage":"账号配额排行","stats.quotaDistribution":"配额分布","stats.usageTrend":"使用量趋势","stats.totalUsed":"已用量","settings.title":"应用设置","settings.subtitle":"配置应用的通用设置、外观主题和 Kiro IDE 相关选项","settings.general":"通用","settings.language":"语言","settings.displayLanguage":"显示语言","settings.appearance":"外观","settings.kiro":"IDE 设置","settings.agent":"Agent","settings.theme":"主题设置","settings.tech":"科技蓝","settings.darkOne":"深邃蓝 (One Dark)","settings.business":"商务金","settings.sunset":"日落橙","settings.ocean":"海洋蓝","settings.rose":"玫瑰红","settings.aurora":"极光青","settings.forest":"森林绿","settings.midnight":"子夜黑","settings.sakura":"樱花粉","settings.themeDesc":"选择你喜欢的界面主题","settings.themeSystem":"跟随系统","settings.density":"列表密度","settings.densityDesc":"调整账号卡片的间距与紧凑程度","settings.densityCompact":"紧凑","settings.densityComfortable":"舒适","settings.densitySpacious":"宽松","settings.uiScale":"界面缩放","settings.uiScaleDesc":"整体放大或缩小界面,适应高分屏与阅读习惯","settings.reduceMotion":"减少动效","settings.reduceMotionDesc":"关闭界面过渡动画,对动效敏感更友好","settings.reduceMotionLabel":"关闭过渡动画","settings.switchTarget":"切换目标","settings.switchTargetIde":"仅 Kiro IDE","settings.switchTargetCli":"仅 CLI","settings.switchTargetBoth":"IDE + CLI","settings.switchTargetDesc":"切换账号或退出登录时,写入哪一侧","settings.closeBehavior":"关闭行为","settings.restartAsAdmin":"以管理员身份重启","settings.confirmRestartAsAdmin":"将关闭当前窗口并以管理员权限重新启动。你的账号数据不会受影响。","settings.restartAsAdminFailed":"提权启动失败","settings.light":"雅致白","settings.dark":"极致黑","settings.purple":"优雅紫","settings.green":"活力绿","settings.model":"模型设置","settings.modelDesc":"选择默认使用的 AI 模型,并可选择锁定模型防止被修改","settings.aiModel":"AI 模型","settings.lockModel":"锁定模型","settings.lockModelDesc":"启用后,将自动监控并恢复 Kiro 配置中的模型设置,防止被其他操作修改","settings.account":"账号设置","settings.accountDesc":"配置账号自动刷新等功能","settings.autoRefresh":"自动刷新 Token","settings.autoRefreshDesc":"定时刷新过期或即将过期的账号 Token,保持账号始终有效","settings.refreshInterval":"刷新间隔(分钟)","settings.autoRefreshInterval":"刷新间隔","settings.autoChangeMachineId":"切换时更换机器码","settings.autoChangeMachineIdDesc":"切换账号时自动重置 Kiro IDE 的机器 ID,避免多账号关联","settings.machineIdMode":"切换账号时机器码","settings.machineIdNone":"不更换","settings.machineIdRandom":"随机更换","settings.machineIdBind":"绑定更换","settings.browser":"浏览器设置","settings.browserDesc":"配置 OAuth 登录时使用的浏览器(默认无痕模式)","settings.browserPath":"浏览器路径","settings.browserPlaceholder":"留空使用系统默认浏览器","settings.detect":"检测","settings.apply":"应用","settings.saving":"保存中...","settings.proxy":"代理设置","settings.proxyDesc":"配置 Kiro IDE 的 HTTP 代理(与 settings.json 中的 http.proxy 同步)","settings.httpProxy":"Kiro IDE HTTP 代理","settings.appProxyMode":"软件接口代理","settings.appProxyModeDesc":"控制本应用自己的接口请求是否走 Kiro IDE 代理。","settings.appProxyFollowKiro":"跟随 Kiro IDE 代理","settings.appProxyDisabled":"不使用代理","settings.kiroInfo":"Kiro IDE 信息","settings.kiroInfoDesc":"从本地 Kiro IDE 读取的设备和会话信息","settings.machineId":"机器 ID","settings.machineIdDesc":"重置 Kiro IDE 的机器 ID","settings.resetMachineId":"重置机器 ID","settings.systemMachineGuid":"系统机器码","settings.backup":"备份","settings.restore":"恢复","settings.selectBrowser":"选择","settings.detectedBrowsers":"检测到的浏览器","settings.close":"关闭","settings.browserTip":"留空表示使用系统默认浏览器。点击「检测」可自动查找已安装的浏览器","settings.proxyTip":"Kiro IDE 代理会写入 Kiro IDE 设置;软件接口代理控制本应用获取配额、刷新 Token 等请求是否复用该代理。","settings.saveSuccess":"保存成功","settings.saveFailed":"保存失败","settings.proxyApplied":"代理设置已应用","settings.proxyCleared":"代理已清除","settings.browserSaved":"浏览器路径已保存","settings.defaultBrowser":"已恢复使用系统默认浏览器","settings.redeemServer":"卡密兑换服务","settings.redeemServerDesc":"配置 LicenseSystem 服务地址,用于卡密兑换功能","settings.redeemServerSaved":"兑换服务地址已保存","settings.redeemServerCleared":"兑换服务地址已清除","settings.detectFailed":"检测失败","settings.noBrowserFound":"未在常见路径中检测到浏览器,请手动输入路径","settings.detectSuccess":"检测成功","settings.systemProxyDetected":"已检测到系统代理","settings.noProxyDetected":"未检测到代理","settings.noProxyConfigured":"系统未配置代理,请手动输入","settings.proxyConfigured":"检测到代理","settings.proxyNotEnabled":"系统代理已配置但未启用","settings.tunModeDetected":"检测到 TUN 模式","settings.tunModeEnabled":"系统正在使用 TUN 模式代理","settings.tunModeHint":"TUN 模式下无需配置代理,网络流量已自动转发","settings.useThisProxy":"是否使用此代理?","settings.running":"运行中","settings.notRunning":"未运行","settings.start":"启动","settings.stop":"关闭","settings.deviceId":"设备标识","settings.resetAll":"重置全部","settings.resetting":"重置中...","settings.resetRequiresClose":"重置设备标识需要先关闭 Kiro IDE","settings.currentMachineGuid":"当前系统机器码","settings.hasBackup":"已有备份","settings.backupValue":"备份值","settings.backupTime":"备份时间","settings.computerName":"计算机名","settings.bindMachineId":"绑定机器码到账号","settings.bindMachineIdDesc":"每个账号使用固定的机器码,切换时自动恢复对应的机器码","settings.useBoundMachineId":"使用绑定的机器码","settings.useBoundMachineIdDesc":"启用时使用账号绑定的机器码,禁用时每次随机生成新机器码","settings.closeKiroIDE":"关闭 Kiro IDE","settings.kiroRunningNeedClose":"检测到 Kiro IDE 正在运行,需要先关闭才能重置机器 ID。\n\n是否关闭 Kiro IDE 并继续?","settings.closeAndContinue":"关闭并继续","settings.closeKiroFailed":"关闭 Kiro IDE 失败","settings.confirmResetMachineId":"确定要重置所有机器 ID 吗?","settings.resetSuccess":"重置成功","settings.resetFailed":"重置失败","settings.machineIdResetSuccess":"机器 ID 已重置!\n\n是否立即启动 Kiro IDE?","settings.resetMachineIdFailed":"重置机器 ID 失败","settings.backupSuccess":"备份成功","settings.backupFailed":"备份失败","settings.machineGuidBackedUp":"已备份系统机器码","settings.restoreFailed":"恢复失败","settings.restoreSuccess":"恢复成功","settings.noBackupFound":"没有找到备份","settings.restoreMachineGuid":"恢复系统机器码","settings.confirmRestoreMachineGuid":"确定要将系统机器码恢复为备份值吗?","settings.requiresAdmin":"此操作需要管理员权限,可能需要以管理员身份运行程序。","settings.machineGuidRestored":"系统机器码已恢复为","settings.resetSystemMachineGuid":"重置系统机器码","settings.confirmResetSystemMachineGuid":"确定要生成新的系统机器码吗?\n\n此操作会:\n• 生成一个新的随机 UUID\n• 写入系统注册表\n• 可能影响某些软件的授权验证\n• 需要管理员权限才能执行\n• 建议先备份当前值","settings.confirmReset":"确定重置","settings.newMachineGuid":"新的系统机器码","settings.detectBrowsersTitle":"自动检测已安装的浏览器","settings.detectProxyTitle":"自动检测系统代理","settings.machineGuidDescWin":"管理 Windows 系统的 MachineGuid(注册表 HKLM\\SOFTWARE\\Microsoft\\Cryptography)","settings.machineGuidDescMac":"管理 macOS 系统机器码(通过覆盖文件实现,不影响硬件 UUID)","settings.machineGuidDescLinux":"管理 Linux 系统机器码(/etc/machine-id)","settings.adminWarningTitle":"注意事项","settings.adminWarning1":"修改系统机器码需要管理员权限","settings.adminWarning2":"可能影响某些软件的授权验证","settings.adminWarning3":"建议在修改前先备份当前值","settings.appDataDir":"应用数据目录","settings.appDataDirDesc":"查看和管理应用的数据存储位置","settings.currentPath":"当前路径","settings.openInExplorer":"在文件管理器中打开","settings.appDataDirTip":"此目录包含账号数据、配置文件、日志等应用数据","settings.openFailed":"打开失败","settings.kiroIdePath":"自定义 Kiro IDE 安装路径","settings.kiroIdePathDesc":"指定 Kiro IDE 的安装位置,用于账号切换功能","settings.customKiroPath":"自定义路径","settings.useDefaultPath":"使用默认路径","settings.kiroPathTip":"留空表示使用系统默认安装路径。点击「浏览」可选择自定义安装位置","settings.browse":"浏览","settings.clear":"清除","settings.usingDefaultPath":"使用默认路径","settings.kiroPathSaved":"自定义 Kiro 路径已保存","settings.kiroPathCleared":"已清除自定义 Kiro 路径","settings.restart":"重启","settings.restartFailed":"重启失败","settings.macOSNote":"macOS 说明","settings.macOSNoteDesc":"macOS 通过写入 Kiro IDE 的 machineid 文件实现机器码修改,无需管理员权限。","settings.kiroSettings":"Kiro IDE 设置","settings.kiroSettingsDesc":"配置 Kiro IDE 的功能选项","settings.enableCodebaseIndexing":"启用代码库索引","settings.enableCodebaseIndexingDesc":"启用后,Kiro 会自动索引代码库以提供更好的代码理解和搜索功能","settings.trustedCommands":"信任命令","settings.trustedCommandsNone":"关闭 - 所有命令需确认","settings.trustedCommandsCommon":"常用命令 - 仅读取/构建/测试类命令","settings.trustedCommandsAll":"全部信任 - 所有命令自动执行(危险)","settings.trustedCommandsDesc":"配置 Kiro 执行 Shell 命令时的信任级别(需重启 IDE 生效)","settings.trustedCommandsAllConfirmTitle":"确认全部信任命令","settings.trustedCommandsAllConfirmMessage":"开启后,Kiro 可自动执行任意 Shell 命令,包括安装脚本、文件修改和 Git 破坏性操作。这会显著扩大风险面,是否继续?","settings.trustedCommandsAllConfirmAction":"仍然开启","settings.trustedCommandsWildcardBlocked":"common 模式不允许使用 *,如需全部信任请切换到“全部信任”","settings.agentSettings":"Agent 设置","settings.agentSettingsDesc":"配置 Kiro Agent 的启动界面、自主模式与功能开关","settings.agentAutonomy":"Agent 自主模式","settings.agentSupervised":"监督模式 - 修改需确认","settings.agentAutopilot":"自动驾驶 - 自动执行修改","settings.enableTabAutocomplete":"启用 Tab 自动补全","settings.usageSummary":"显示使用量摘要","settings.enableDebugLogs":"启用调试日志","settings.notifications":"通知设置","settings.notificationsDesc":"选择需要桌面通知的事件类型","settings.notifyActionRequired":"需要操作时通知","settings.notifyFailure":"失败时通知","settings.notifySuccess":"成功时通知","settings.notifyBilling":"账单通知","settings.trustedTools":"信任工具","settings.trustedToolsDesc":"允许 Agent 自动使用的工具列表,逗号分隔(如 webFetch, remote_web_search)","settings.trustedToolsPlaceholder":"webFetch, remote_web_search","settings.referenceTracker":"代码引用追踪","settings.configureMCP":"MCP 配置","settings.configureMCPEnabled":"启用 - 允许 Powers 注册 MCP 服务","settings.configureMCPDisabled":"禁用 - 不自动注册 MCP 服务","settings.configureMCPDesc":"控制是否允许 Kiro 自动注册 MCP 服务,以及允许在 MCP 配置中展开的环境变量(修改后通常需重启 IDE 生效)","settings.permissions":"权限规则","settings.permissionsDesc":"Kiro IDE 1.0 基于能力(capability)的权限模型。规则从 ~/.kiro/settings/permissions.yaml 读取与保存,是该版本下权限裁决的唯一真相源。","settings.loading":"加载中...","settings.save":"保存","settings.permissionSaveError":"保存权限失败,请重试","settings.permissionCapability":"能力 (capability)","settings.permissionEffect":"效果","settings.permissionEffect_allow":"允许","settings.permissionEffect_deny":"拒绝","settings.permissionEffect_ask":"询问","settings.permissionMatch":"匹配 (match)","settings.permissionExclude":"排除 (exclude)","settings.permissionRemove":"删除规则","settings.permissionAdd":"新增规则","settings.permissionPolicies":"策略 (policies)","settings.permissionPreset":"内置预设","settings.permissionPreset_read-all":"允许读取任意位置的文件(含工作区外)并访问网络","settings.permissionPreset_read-only-shell":"允许只读 shell 命令(系统信息、git/cargo/npm 等查询)","settings.permissionPreset_read-workspace":"允许读取工作区内的文件","settings.permissionShellGroup":"只读命令组","settings.permissionShellGroupPick":"追加一组命令…","settings.permissionNote":"提示:effect 为 allow 的规则会放宽权限,deny 优先级高于 allow,未匹配的规则将回退到 IDE 默认行为。","settings.permissionScope_global":"全局","settings.permissionScope_project":"项目","settings.permissionPickProject":"选择项目…","settings.permissionProjectPathPlaceholder":"输入项目绝对路径,如 E:/code/my-project","settings.permissionNoWorkspaceRoots":"尚未检测到项目级权限目录(~/.kiro/workspace-roots/*)。在 Kiro 里打开过项目后会自动生成。","settings.permissionTargetPath":"写入位置","settings.permissionEdit":"编辑","settings.permissionEditTitle":"编辑规则","settings.permissionNew":"新建规则","settings.permissionCancel":"取消","settings.permissionConfirm":"确定","settings.permissionEmpty":"暂无规则,点击「新增规则」开始","settings.permissionUnsaved":"未保存","settings.permissionExcludeShort":"排除","settings.agentAdvanced":"Agent 高级设置","settings.agentAdvancedDesc":"Kiro 1.0 新增的 Agent 行为项,与 IDE settings.json 双向同步","settings.agentToolCardDisplayMode":"工具卡片显示","settings.agentToolCardDisplayModeDesc":"工具执行完成后,聊天里工具卡片的展开方式","settings.agentToolCard_collapseOnComplete":"完成后折叠","settings.agentToolCard_alwaysExpanded":"始终展开","settings.agentTerminalCommandTimeout":"终端命令超时(毫秒)","settings.agentTerminalCommandTimeoutPlaceholder":"留空 = 使用内置默认","settings.agentTerminalCommandTimeoutDesc":"终端命令允许运行的最长时间;留空则用 Kiro 内置默认","settings.agentArtifactsAutoOpen":"产出 Artifact 时自动打开面板","settings.agentIgnoreFiles":"忽略模式文件","settings.agentIgnoreFilesDesc":"Kiro Agent 读取工作区时遵循的忽略文件(如 .gitignore),每行一个","settings.agentTrust":"信任与自动批准","settings.agentTrustDesc":"选择「始终允许 / 始终拒绝」时预选的命令模式与作用域,以及可自动批准(不再询问)的命令","settings.agentTrustDefaultPattern":"默认命令模式","settings.agentTrustPattern_full":"完整命令(full)","settings.agentTrustPattern_partial":"部分匹配(partial)","settings.agentTrustPattern_base":"基础命令(base)","settings.agentTrustDefaultScope":"默认作用域","settings.agentTrustScope_user":"用户(user)","settings.agentTrustScope_workspace":"工作区(workspace)","settings.agentTrustScope_session":"会话(session)","settings.agentAutoApproveCommands":"自动批准的命令","settings.agentAutoApproveCommandsDesc":"无需确认即自动批准的命令模式,每行一个","settings.agentExperiments":"实验与高级","settings.agentExperimentsDesc":"Kiro 实验特性开关与高级项,可能随版本变动","settings.agentExperimentCloudConfig":"云端配置(cloudConfig)","settings.agentExperimentWorkspaceManager":"工作区管理器(workspaceManager)","settings.agentMcpApprovedEnvVars":"MCP 允许展开的环境变量","settings.agentMcpApprovedEnvVarsDesc":"允许在 MCP 配置中展开的环境变量,每行一个","settings.agentEditorActionsPrompts":"编辑器动作提示词(JSON)","settings.agentEditorActionsPromptsDesc":"自定义编辑器右键动作的提示词,JSON 对象;每个值替换该动作的内置提示词","settings.agentRemoteSessionsEndpoint":"远程会话门户地址","settings.agentRemoteSessionsEndpointDesc":"Kiro 云门户的地址基址,用于「在浏览器中打开远程会话」。留空则使用内置默认值 https://app.kiro.dev。该键在 Kiro 的配置声明中不存在,属隐藏键,但不影响其生效。","settings.agentRemoteSessionsEndpointInvalid":"请输入合法的 http/https 地址,例如 https://app.kiro.dev","settings.agentRemoteSessionsEnvOverride":"当前值已被环境变量覆盖","settings.agentRemoteSessionsEnvOverrideDesc":"环境变量 KIRO_REMOTE_SESSIONS_ENDPOINT 的优先级高于此处填写的地址,实际生效的是它。要让此处的配置生效,请先移除该环境变量并重启 Kiro。","settings.agentStartupMode":"启动模式","settings.agentStartupModeDesc":"Kiro 启动时默认进入的界面","settings.agentStartupMode_code":"代码编辑器","settings.agentStartupMode_agentFocus":"Agent 聚焦","settings.agentNumberInvalid":"请输入有效的非负数字","settings.agentJsonInvalid":"JSON 格式无效","settings.openSettingsFile":"编辑 Kiro 设置","settings.telemetry":"遥测与隐私","settings.telemetryDesc":"控制 Kiro IDE 收集的数据类型","settings.telemetryContentCollection":"内容收集(用于改进服务)","settings.telemetryUsageAnalytics":"使用分析与性能指标","settings.telemetryEditStats":"编辑统计","settings.telemetryFeedback":"反馈数据","settings.telemetryPromptLogging":"上报提示词日志","settings.telemetryEditStatsDetails":"编辑统计:明细","settings.telemetryEditStatsDecorations":"编辑统计:编辑器内装饰","settings.telemetryEditStatsStatusBar":"编辑统计:状态栏显示","settings.closeWindowBehavior":"关闭窗口行为","settings.closeWindowBehaviorDesc":"设置点击关闭按钮时的行为","settings.minimizeToTray":"最小化到托盘","settings.minimizeToTrayHint":"(推荐,后台任务继续运行)","settings.minimizeToTrayEnabled":"✓ 关闭窗口时最小化到系统托盘,后台任务继续运行。点击托盘图标可重新打开窗口。","settings.minimizeToTrayDisabled":"✗ 关闭窗口时直接退出应用,所有后台任务将停止。","settings.invalidProxyFormat":"代理格式无效,请使用 http://、https:// 或 socks5:// 开头的 URL","settings.invalidBrowserPath":"浏览器路径无效,请确保输入的是可执行文件路径(.exe、.app 等)","settings.privacyMode":"隐私模式","settings.privacyModeDesc":"启用后,界面上的邮箱地址将脱敏显示","settings.privacyModeHint":"邮箱脱敏","settings.autoSwitch":"余额不足自动换号","settings.autoSwitchDesc":"当前账号余额低于阈值时,自动切换到其他可用账号","settings.autoSwitchThreshold":"阈值 ≤","settings.autoSwitchInterval":"检查间隔","accounts.title":"账号管理","accounts.subtitle":"管理你的 Kiro IDE 账号","accounts.search":"搜索账号...","accounts.add":"添加账号","accounts.import":"导入","accounts.export":"导出","accounts.exportSelectFirst":"请先选择要导出的账号","accounts.refreshList":"刷新列表","accounts.refresh":"刷新","accounts.refreshAll":"批量刷新","accounts.refreshSelectFirst":"请先选择要刷新的账号","accounts.delete":"删除","accounts.switch":"切换","accounts.edit":"编辑","accounts.detail":"详情","accounts.remark":"备注","accounts.provider":"提供商","accounts.used":"已用","accounts.active":"正常","accounts.banned":"封禁","accounts.invalid":"失效","accounts.expired":"过期","accounts.capped":"封顶","accounts.noAccounts":"暂无账号","accounts.addFirst":"点击上方「添加账号」开始","accounts.confirmDelete":"确定要删除这个账号吗?","accounts.confirmDeleteMultiple":"确定要删除选中的 {{count}} 个账号吗?","accounts.deleteSuccess":"删除成功","accounts.deleteFailed":"删除失败","accounts.switchSuccess":"切换成功","accounts.switchFailed":"切换失败","accounts.refreshSuccess":"刷新成功","accounts.refreshFailed":"刷新失败","accounts.accountBanned":"账号已被封禁,无法使用","accounts.tokenInvalid":"Token 已失效,请重新登录","accounts.importSuccess":"导入成功","accounts.exportSuccess":"导出成功","accounts.exportFailed":"导出失败","accounts.selectAll":"全选","accounts.deselectAll":"取消全选","accounts.batchRefresh":"批量刷新","accounts.batchDelete":"批量删除","accounts.batchOperationMode":"批量操作模式","accounts.batchEditTagsAndGroups":"批量编辑(标签和分组)","accounts.batchEdit":"批量编辑","common.deselectAll":"取消全选","accounts.totalCount":"共 {{count}} 个账号","accounts.displayCount":"{{current}} / {{total}} 个账号","accounts.email":"邮箱","accounts.accountType":"账号类型","accounts.subscriptionType":"订阅类型","accounts.quota":"配额","accounts.status":"状态","accounts.machineCode":"机器码","accounts.expiryTrial":"过期|试用","accounts.group":"分组","accounts.tags":"标签","accounts.accountCount":"{{count}} 个账号","accounts.enterNewGroupName":"输入新分组名...","accounts.noGroup":"无分组","accounts.selected":"已选择","accounts.noTagsSelected":"未选择标签","accounts.searchOrEnterNewTag":"搜索或输入新标签...","accounts.pressEnterToCreate":'按回车创建 "{{name}}"',"accounts.searchOrCreateTagHint":"输入搜索已有标签,或直接输入创建新标签","accounts.daysRemaining":"剩余天数","accounts.days":"天","accounts.remaining":"剩余","accounts.overage":"超额中","accounts.format":"格式化","accounts.socialTemplate":"Social 模板","accounts.builderIdTemplate":"BuilderId 模板","accounts.enterpriseTemplate":"Enterprise 模板","accounts.cardView":"卡片视图","accounts.tableView":"列表视图","accounts.redeem":"卡密兑换","accounts.importFromKiroIDE":"从 Kiro IDE 导入账号","accounts.importFromKiroIDEDescription":"自动读取 Kiro IDE 缓存的账号信息(~/.aws/sso/cache/kiro-auth-token.json)","accounts.detectingKiroIDEAccounts":"正在检测 Kiro IDE 账号...","accounts.detectionFailed":"检测失败","accounts.retryDetection":"重新检测","accounts.detectedAccounts":"检测到 {{count}} 个账号","accounts.noKiroIDEAccountsDetected":"未检测到 Kiro IDE 账号","accounts.pleaseLoginToKiroIDEFist":"请先在 Kiro IDE 中登录账号","accounts.validationMissingRefreshToken":"第 {{index}} 条: 缺少 refreshToken","accounts.validationInvalidRefreshTokenFormat":"第 {{index}} 条: refreshToken 格式无效(应以 aor 开头)","accounts.validationSocialProviderRequired":"第 {{index}} 条: Social 账号必须指定 provider (Google/Github)","accounts.validationInvalidProvider":"第 {{index}} 条: provider 必须是 {{providers}}","accounts.validationSocialProviderInvalid":"第 {{index}} 条: Social 账号的 provider 应为 Google/Github","accounts.validationIdcProviderInvalid":"第 {{index}} 条: IdC 账号的 provider 应为 BuilderId/Enterprise","accounts.validationEnterpriseRegionRequired":"第 {{index}} 条: Enterprise 账号必须提供 region 字段","accounts.validationEnterpriseStartUrlRequired":"第 {{index}} 条: Enterprise 账号必须提供 startUrl 字段","accounts.jsonParseFailed":"JSON 解析失败: {{message}}","accounts.addedAccounts":"✅ 新增 {{count}} 个账号","accounts.updatedAccounts":"📝 更新 {{count}} 个账号","accounts.failedAccounts":"❌ 失败 {{count}} 个","accounts.importingFromKiro":"正在从 Kiro 导入...","accounts.importingFromKiroCli":"正在从 kiro-cli 导入...","accounts.pleaseWait":"请稍候...","accounts.unknownAccount":"未知账号","accounts.importFailed":"导入失败","accounts.browse":"浏览","accounts.addedAccount":"✅ 新增账号","accounts.updatedAccount":"📝 更新账号","accounts.reset":"重置","accounts.accountCannotSwitch":"{{status}}账号不可切换","accounts.tag":"标签","accounts.providerAccountLabel":"Kiro {{provider}} 账号","accounts.kiroCliImportedLabel":"从 kiro-cli 导入 ({{tokenKey}})","accounts.networkConnectionFailed":"❌ 网络连接失败\n\n可能原因:\n• 网络不稳定\n• 代理设置有误\n• 防火墙拦截\n\n解决方法:\n1. 检查网络连接\n2. 检查代理设置\n3. 关闭防火墙或添加白名单","accounts.deleteCurrentAccount":"⚠️ 删除当前账号","accounts.deleteCurrentAccountMessage":"您正在删除当前使用的账号!\n\n删除后 Kiro IDE 将无法使用,需要重新登录。\n\n确定要删除吗?","accounts.deleteRemoteWarning":"远程删除将从 AWS 服务端注销此账号!\n\n此操作不可恢复,账号将永久失效。","accounts.batchDeleteIncludesCurrent":"⚠️ 批量删除包含当前账号","accounts.batchDeleteIncludesCurrentMessage":"您选择了 {{count}} 个账号,其中包含当前使用的账号!\n\n删除后 Kiro IDE 将无法使用,需要重新登录。\n\n确定要删除吗?","login.title":"桌面授权登录","login.subtitle":"选择登录方式","login.google":"Google","login.github":"Github","login.builderId":"AWS Builder ID","login.idc":"IAM Identity Center","login.logging":"登录中...","login.success":"登录成功","login.failed":"登录失败","login.cancelled":"登录已取消","login.cancelFailed":"取消登录失败","login.cancelling":"取消中...","login.timeout":"登录超时","login.signIn":"登录","login.cancel":"取消","login.agreement":"登录即表示同意","login.awsAgreement":"AWS 客户协议","login.serviceTerms":"服务条款","login.privacy":"隐私声明","login.and":"和","login.ipLicense":"AWS 知识产权许可条款","login.enterprisePrompt":"请输入企业的 AWS IAM Identity Center Start URL","login.startUrl":"Start URL","login.startUrlExample":"示例: https://d-90661d346f.awsapps.com/start","login.startUrlRequired":"请输入 Start URL","login.startUrlInvalid":"Start URL 必须以 https:// 开头","login.region":"AWS Region","login.regionExample":"示例: us-east-1、ap-southeast-2、eu-west-1","login.waitingTitle":"等待授权","login.waitingMessage":"正在等待您在浏览器中完成 {{provider}} 授权...","login.waitingHint":"如果浏览器未自动打开,请手动打开授权页面。","login.waitingCloseHint":"点击取消会终止当前登录流程,之后可以重新发起登录。","login.continue":"继续","about.title":"关于","about.appName":"Kiro Account Manager","about.appDesc":"智能管理 Kiro 访问令牌,一键切换,配额监控","about.version":"版本","about.checkUpdate":"检查更新","about.checking":"检查中","about.upToDate":"已是最新版本","about.newVersion":"发现新版本 {{version}}","about.download":"立即更新","about.downloading":"下载中...","about.updateFailed":"检查失败,请稍后重试","about.techStack":"技术栈","about.frontend":"前端","about.ui":"UI","about.backend":"后端","about.links":"链接","about.website":"官网","about.tutorial":"使用教程","about.tgChannel":"Kiro Account Manager 频道","about.tgGroup":"Kiro Account Manager 交流群","about.shop":"Kiro Gateway","about.donate":"请作者喝杯咖啡 ☕","about.donateDesc":"如果这个工具帮到了你,欢迎请我喝杯咖啡,你的支持是我持续更新的动力 ❤️","about.sponsorBenefits":"赞助用户福利","about.sponsorNote":"提示:赞赏时请备注你的用户名或邮箱;申请加入赞助用户群时请填写同一个备注,方便审核通过","about.benefit1":"⚡ 问题反馈优先处理","about.benefit2":"🎯 功能建议优先实现","about.benefit3":"🔧 一对一技术支持","about.sponsorGroup":"赞助用户群","about.sponsorGroupDesc":"加入赞助用户专属 QQ 群,获取优先支持","about.qqGroup":"QQ 群","about.joinGroup":"加入群聊","about.alipay":"支付宝","about.wechat":"微信支付","about.clickToEnlarge":"点击图片可放大查看","about.contactTelegram":"联系 Telegram","about.madeWith":"Made with","about.by":"by","agentConfig.title":"Agent 配置","agentConfig.subtitle":"管理 Agent 的 MCP 服务、权限规则、Steering 规则、Skills、Hooks、Custom Agents 和 Powers","agentConfig.overview":"总览","agentConfig.groupCapabilities":"能力","agentConfig.groupBehavior":"行为","agentConfig.groupSpecs":"规范","agentConfig.manage":"去管理","agentConfig.mcpToolsWarning":"MCP 工具数量较多,可能导致工具选择性能下降和上下文消耗增加,建议禁用不常用的服务器。","agentConfig.checkTitle":"配置体检","agentConfig.checkMcpTools":"MCP 工具量","agentConfig.checkMcpToolsHigh":"约 {n} 个工具,可能拖慢工具选择并增加上下文消耗","agentConfig.checkMcpToolsOk":"约 {n} 个工具,负担正常","agentConfig.checkMcpServers":"MCP 服务","agentConfig.checkMcpNone":"未配置任何 MCP 服务","agentConfig.checkMcpOk":"{n} 个服务启用中","agentConfig.checkMcpDisabled":",{n} 个已禁用","agentConfig.checkPerms":"权限口子","agentConfig.checkPermsOpen":"{n} 项能力完全放行(无范围限制),确认是否有意为之","agentConfig.checkPermsOk":"放行规则均有范围约束","agentConfig.checkCloud":"云托管","agentConfig.checkCloudOn":"Kiro Cloud 托管中,本地写入无效","agentConfig.checkCloudOff":"本地配置可写","agentConfig.groupBoundaries":"边界","agentConfig.checkMemoryMode":"Memory 模式","agentConfig.checkMemoryOff":"Memory 已关闭,Kiro 会话不读不学;可在记忆页开启","agentConfig.checkMemoryOn":"Memory 已开启,会话可读写记忆","agentConfig.checkBehaviorAssets":"行为资产","agentConfig.checkBehaviorEmpty":"尚未配置 Hooks / Steering / AGENTS.md,可从 Steering 模板开始","agentConfig.checkBehaviorOk":"{n} 个行为资产已配置","agentConfig.memoryOffBanner":"Memory 当前关闭:Kiro 会话不会读取或学习记忆;此处编辑仍会写入本地记忆库,开启后生效。","agentConfig.mcpSource_user":"用户级","agentConfig.mcpSource_userDesc":"配置来自用户级 mcp.json,全局生效","agentConfig.mcpSource_project":"项目级","agentConfig.mcpSource_projectDesc":"仅当前项目生效(用户级无同名配置)","agentConfig.mcpSource_overridden":"项目覆盖","agentConfig.mcpSource_overriddenDesc":"项目级覆盖了用户级同名配置,当前显示的是生效版本","agentConfig.mcpSource_redundant":"冗余覆盖","agentConfig.mcpSource_redundantDesc":"项目级与用户级内容完全相同——项目级副本是冗余的,可删除","agentConfig.mcpSource_power":"插件","agentConfig.mcpSource_powerDesc":"来自 Powers 插件注册的 url 型服务","agentConfig.skillInvalid":"无效","agentConfig.assetDuplicate":"同名","agentConfig.assetDuplicateDesc":"用户级与项目级存在同名资产,注意去重","agentConfig.recentProjects":"最近项目","agentConfig.browseDir":"浏览…","agentConfig.projectScope":"项目作用域","agentConfig.memoryPreviewTitle":"注入预览(模拟)","agentConfig.memoryPreviewDisabled":"Memory 已关闭,无注入","agentConfig.memoryPreviewResident":"常驻层","agentConfig.memoryPreviewManifest":"索引层","agentConfig.memoryPreviewDropped":"超长丢弃","agentConfig.memoryPreviewPrefQuota":"偏好配额","agentConfig.memories":"记忆","agentConfig.scopeTagProject":"项目","agentConfig.scopeTagUser":"用户","common.format":"格式化","mcp.loadFailed":"加载 MCP 配置失败","mcp.toggleFailed":"切换状态失败","mcp.toolCountTitle":"MCP 工具数量较多","mcp.toolCountDesc":"您已配置约 {{tools}} 个 MCP 工具({{servers}} 个服务器)。过多的工具可能导致工具选择性能下降和上下文消耗增加。建议禁用不常用的服务器。","mcp.configLabel":"配置","mcp.autoApproveHint1":"autoApprove 支持通配符","mcp.autoApproveHint2":"自动批准该服务器的所有工具","mcp.quickFill":"快速填充","mcp.jsonFormatsHint":'支持 { "name": config } 或 { "mcpServers": { ... } } 格式',"mcp.saveToLabel":"保存到:","mcp.saveToGlobal":"全局(用户级)","mcp.saveToProject":"当前项目","mcp.dupExistsPrefix":"以下服务已存在:","mcp.dupOverwriteNote":"(将被覆盖)","mcp.dupSkipNote":"(将跳过)","mcp.dupRenameNote":"(将自动重命名)","mcp.conflictLabel":"冲突处理:","mcp.conflictSkip":"跳过(推荐)","mcp.conflictOverwrite":"覆盖","mcp.conflictRename":"自动重命名","mcp.addCount":"添加 {{count}} 个","mcp.errJsonFormat":"JSON 格式错误","mcp.errClipboardJson":"剪贴板内容不是有效的 JSON","mcp.errMissingCommand":"缺少 command 字段","mcp.msgNoValidConfig":"无有效配置","mcp.resPartialFailed":"部分失败: {{names}}","mcp.resSucceeded":"已成功: {{names}}","mcp.resSkipped":"已跳过: {{names}}","mcp.resRenamed":"已重命名: {{names}}","mcp.resNoneAdded":"未添加任何服务,已跳过: {{names}}","mcp.resAdded":"新增 {{count}}","mcp.resSkippedCount":"跳过 {{count}}","mcp.resRenamedCount":"重命名 {{count}}","mcp.resProcessed":"MCP 服务已处理:{{parts}}","mcp.listSep":";","steering.savedWithIssuesTitle":"Steering 已保存,但存在合规问题","steering.savedWithIssuesDesc":"Kiro 1.1.70 将降级或跳过该文件:\n\n{{detail}}\n\n是否继续编辑修复?","steering.selectMode":"选择模式","skills.savedWithIssuesTitle":"Skill 已保存,但存在合规问题","skills.savedWithIssuesDesc":"Kiro 1.1.70 将静默跳过不合规的 skill:\n\n{{issues}}\n\n是否继续编辑修复?","workflows.savedWithIssues":"Workflow 已保存,但存在 schema 问题(Kiro 运行前校验将拒绝):\n\n• {{issues}}","agents.modelDefault":"默认(跟随主对话)","hooks.commandPlaceholder":"替换为实际命令","mcp.namesEtc":"等 {{count}} 个","mcp.partsSep":",","agents.bodyPlaceholder":"在此编写 Agent 的系统提示词","skills.bodyPlaceholder":"在此编写 Skill 指令","steering.bodyPlaceholder":"在此添加你的 steering 规则","agentConfig.memoryMode":"记忆模式","agentConfig.memoryModeDesc":"控制 Kiro 是否跨会话使用与学习记忆(写入 settings.json 的 kiroAgent.memory)","agentConfig.memoryMode_off":"关闭","agentConfig.memoryMode_useOnly":"仅使用","agentConfig.memoryMode_useWithoutLearning":"使用不学习","agentConfig.memoryMode_useAndLearn":"使用并学习","agentConfig.memoriesEmpty":"还没有记忆","agentConfig.memoriesDbMissing":"Memory 从未启用,暂无记忆库","agentConfig.memoryContent":"内容","agentConfig.memoryWhy":"为何","agentConfig.memoryHowToApply":"如何使用","agentConfig.memorySession":"来源会话","agentConfig.memoryCreate":"新建记忆","agentConfig.memoryEdit":"编辑记忆","agentConfig.memoryFieldTitle":"标题","agentConfig.memoryFieldTitleHint":"仅字母、数字和连字符,≤ 64 字","agentConfig.memoryFieldType":"类型","agentConfig.memoryFieldScopes":"作用域(逗号分隔)","agentConfig.memoryFieldSummary":"摘要(≤ 250 字)","agentConfig.memoryLoadMore":"加载更多","agentConfig.memoryScopeAll":"全部","agentConfig.memoryDeleteConfirmTitle":"删除记忆","agentConfig.memoryDeleteConfirm":"这条记忆将从记忆库中删除(关联的作用域一并清除),确定吗?","settings.sandboxTitle":"命令沙箱","settings.sandboxDesc":"限制 agent shell 命令及子进程的可达范围(Kiro IDE 1.3+,独立 sandbox.json;全局激活时项目级只能收紧)","settings.sandboxEnabled":"启用命令沙箱","settings.sandboxEnabledDesc":"对 agent 运行的 shell 命令及其子进程加 OS 边界","settings.sandboxNetwork":"出网模式","settings.sandboxNetwork_DEFAULT_BLOCKED":"默认全部拦截","settings.sandboxNetwork_COMMON_DEPENDENCIES":"放行常用开发服务","settings.sandboxNetwork_DEFAULT_ALLOWED":"全部放行","settings.sandboxWindowsHint":"Windows 下后两档需先完成一次管理员设置(IDE 会提示;CLI 用 /sandbox setup),未设置时命令不受系统级隔离","settings.sandboxMcp":"stdio MCP 一并沙箱","settings.sandboxMcpDesc":"本地 stdio MCP 服务进程进入同一沙箱(切换会重启本地 MCP,约 1 分钟)","settings.sandboxProjectRoot":"项目目录(可选)","settings.sandboxProjectHint":"填写项目根目录以管理项目级 sandbox.json。项目配置只能收紧不能放宽:比全局宽松的值会被忽略。","settings.sandboxProjectEnabled":"项目级启用","settings.sandboxProjectEnabledDesc":"写入 <项目>/.kiro/settings/sandbox.json;全局未启用时不生效","settings.sandboxEffective":"实际生效","agentConfig.cloudReadOnly":"云端配置只读","agentConfig.cloudReadOnlyDesc":"Kiro Cloud 正在管理此配置(kiroAgent.experiments.cloudConfig 已开启)。这些项以只读副本形式同步,本工具已禁用写入,请在 Kiro Web 中编辑。","agentConfig.mcp":"MCP","agentConfig.steering":"引导规则","agentConfig.skills":"技能","agentConfig.hooks":"钩子","agentConfig.agents":"智能体","agentConfig.powers":"插件","agentConfig.agentsMd":"AGENTS.md","agentConfig.agentsMdNoProject":"请先选择项目目录 —— 嵌套 AGENTS.md 只在工作区内扫描","agentConfig.agentsMdEmpty":"该项目内没有找到 AGENTS.md","agentConfig.agentsMdRoot":"项目根","agentConfig.agentsMdIgnoreActive":"扫描已应用以下忽略规则(规则数):","agentConfig.agentsMdPlaceholder":"在此填写针对该目录树的指令(Markdown)…","agentConfig.specs":"规格","agentConfig.specEmpty":"还没有任何 spec","agentConfig.specNoSelection":"请选择一个 spec","agentConfig.specNewPlaceholder":"spec 名称(字母、数字、连字符、下划线)","agentConfig.specCreate":"创建","agentConfig.specDeleteConfirm":"确定删除 spec「{{name}}」吗?此操作不可撤销。","agentConfig.specRequirements":"需求","agentConfig.specDesign":"设计","agentConfig.specTasks":"任务","agentConfig.specNotCreated":"尚未创建","agentConfig.specFilePlaceholder":"在此填写该文件内容(Markdown)…","agentConfig.workflows":"工作流","agentConfig.workflowEmpty":"还没有任何 workflow","agentConfig.workflowNoSelection":"请选择一个 workflow","agentConfig.workflowNewPlaceholder":"workflow 文件名(如 my-flow.workflow.json)","agentConfig.workflowDeleteConfirm":"确定删除 workflow「{{name}}」吗?此操作不可撤销。","agentConfig.workflowFilePlaceholder":"在此填写 workflow 定义(JSON/YAML)…","agentConfig.loading":"加载中…","agentConfig.save":"保存","agentConfig.saving":"保存中…","agentConfig.unsaved":"未保存","agentConfig.selectProjectDir":"选择项目目录","agentConfig.noProjectDir":"未选择项目","agentConfig.clearProjectDir":"清除项目目录","agentConfig.scope":"存储位置","agentConfig.scopeUser":"用户级 (~/.kiro/)","agentConfig.scopeProject":"项目级 (/.kiro/)","mcp.title":"MCP 服务","mcp.add":"添加服务","mcp.edit":"编辑","mcp.delete":"删除","mcp.enable":"启用","mcp.disable":"禁用","mcp.enabled":"已启用","mcp.disabled":"已禁用","mcp.name":"名称","mcp.command":"命令","mcp.args":"参数","mcp.env":"环境变量","mcp.addFirst":"点击「添加服务」开始配置","mcp.deleteSuccess":"删除成功","mcp.deleteFailed":"删除失败","mcp.saveSuccess":"保存成功","mcp.saveFailed":"保存失败","mcp.templates":"模板","mcp.useTemplate":"使用模板","mcp.confirmDelete":"确认删除","mcp.noServers":"暂无 MCP 服务,点击「添加服务」开始","common.save":"保存","common.cancel":"取消","common.continue":"继续","common.optional":"可选","common.confirm":"确定","common.delete":"删除","common.edit":"编辑","common.add":"添加","common.import":"导入","common.export":"导出","common.refresh":"刷新","common.loading":"加载中...","common.success":"成功","common.error":"错误","common.warning":"警告","common.info":"提示","common.yes":"是","common.no":"否","common.ok":"确定","common.close":"关闭","common.back":"返回","common.next":"下一步","common.previous":"上一步","common.finish":"完成","common.search":"搜索","common.clear":"清空","common.sort":"排序","sort.usage":"使用量","sort.added":"添加时间","sort.trial":"试用到期","common.all":"全部","common.none":"无","common.select":"选择","common.copy":"复制","common.copyAll":"复制全部","common.copied":"已复制","common.apply":"应用","common.minutes":"分钟","common.hours":"小时","common.days":"天","common.recommended":"推荐","common.later":"稍后","common.updateNow":"立即更新","common.downloading":"下载中","common.preparing":"准备中","common.newVersionFound":"发现新版本","common.verifying":"验证中","common.noLabel":"无备注","common.unknown":"未知","common.currentlyUsing":"当前使用","common.usage":"使用量","common.remaining":"剩余","common.reset":"重置","common.noAccounts":"暂无账号","common.addAccountHint":"请通过侧边栏登录添加账号","common.addAccount":"添加账号","common.selectAll":"全选","common.selected":"已选","update.newVersion":"发现新版本","update.newVersionFound":"发现新版本","update.newVersionAvailable":"发现新版本","update.readyToInstall":"已准备就绪","update.releaseNotes":"更新日志","update.later":"稍后","update.updateNow":"立即更新","update.downloading":"正在下载更新","update.preparing":"准备中...","update.failed":"更新失败","update.installFailed":"安装更新失败","update.doNotClose":"请勿关闭应用...","update.downloadComplete":"下载完成!","update.restartToInstall":"更新已下载完成,点击下方按钮重启应用以完成安装。","update.installLater":"稍后安装","update.restartNow":"立即重启","addAccount.title":"手动添加","addAccount.subtitle":"手动添加新账号到管理器","addAccount.saveLocal":"保存本地账号","addAccount.saveLocalDesc":"从 Kiro IDE 读取当前登录的账号","addAccount.orManual":"或手动输入","addAccount.refreshToken":"Refresh Token","addAccount.socialPlaceholder":"aor 开头的 token","addAccount.idcPlaceholder":"aor 开头的 token","addAccount.clientId":"Client ID","addAccount.clientSecret":"Client Secret","addAccount.awsRegion":"AWS Region","addAccount.add":"添加账号","addAccount.verifying":"验证中...","addAccount.errorNoToken":"请输入 Refresh Token","addAccount.errorSocialFormat":"Google/Github Token 格式错误,应以 aor 开头","addAccount.errorIdcFormat":"BuilderId/Enterprise Token 格式错误,应以 aor 开头","addAccount.errorNoClientId":"请输入 Client ID 和 Client Secret","addAccount.machineId":"机器码","addAccount.machineIdPlaceholder":"留空自动生成","import.title":"批量导入账号","import.subtitle":"支持 JSON 文件、从 Kiro IDE 导入和从 kiro-cli 导入","import.jsonTab":"JSON 凭证导入","import.ssoTab":"SSO Token 导入","import.selectFile":"选择 JSON 文件","import.orPaste":"或粘贴 JSON 内容","import.parseSuccess":"解析成功","import.validRecords":"条有效记录","import.validationError":"校验错误","import.moreErrors":"...还有 {{count}} 个错误","import.exceedLimit":"超出数量限制:最多 {{max}} 条,当前 {{count}} 条","import.successCount":"成功导入 {{count}} 个账号","import.failedCount":"失败 {{count}} 个","import.importing":"正在导入...","import.ssoImporting":"正在通过 SSO Token 导入...","import.continueImport":"继续导入","import.done":"完成","import.import":"导入","import.ssoTokenLabel":"x-amz-sso_authn Token","import.ssoTokenHint":"每行一个,支持批量","import.ssoTokenPlaceholder":"粘贴 x-amz-sso_authn Cookie 值...","import.regionOptional":"(可选)","import.detectedTokens":"检测到 {{count}} 个 Token","import.ssoGuide":"获取 SSO Token 方法:","import.ssoStep1":"打开 view.awsapps.com/start 并登录","import.ssoStep2":"按 F12 打开开发者工具 → Application → Cookies","import.ssoStep3":"找到 x-amz-sso_authn 的值","import.ssoStep4":"复制完整值粘贴到下方(支持多行批量导入)","import.kiroTab":"从 Kiro 导入","import.kiroCliTab":"从 kiro-cli 导入","import.kiroCliTitle":"从 kiro-cli 数据库导入账号","import.kiroCliHint":"读取 kiro-cli 的 SQLite 数据库(Windows: %LOCALAPPDATA%\\Kiro-Cli\\data.sqlite3;Linux: ~/.local/share/kiro-cli/data.sqlite3;macOS: ~/Library/Application Support/kiro-cli/data.sqlite3)","import.kiroCliInstallPrefix":"安装命令:","import.kiroCliInstallCommand":"curl -fsSL https://cli.kiro.dev/install | bash","import.kiroCliWindowsTitle":"Windows 原生支持 Kiro CLI 2.0","import.kiroCliWindowsHint":"数据库路径:%LOCALAPPDATA%\\Kiro-Cli\\data.sqlite3(通常为 C:\\Users\\<用户名>\\AppData\\Local\\Kiro-Cli\\data.sqlite3)","import.kiroCliDetecting":"正在检测 kiro-cli 数据库...","import.kiroCliDetected":"检测到 kiro-cli 数据库","import.kiroCliNotDetected":"未检测到 kiro-cli 数据库","import.kiroCliPathLabel":"数据库路径","import.kiroCliPathPlaceholder":"~/.local/share/kiro-cli/data.sqlite3","import.kiroCliPathHintDetected":"已自动检测到数据库路径","import.kiroCliPathHintManual":"请手动输入或浏览选择数据库文件","import.browse":"浏览","editAccount.title":"编辑账号","editAccount.labelPlaceholder":"输入备注,方便识别账号","editAccount.tokenCredentials":"Token 凭证","editAccount.accessToken":"Access Token","editAccount.refreshToken":"Refresh Token","editAccount.ssoCredentials":"AWS SSO OIDC 凭证","editAccount.clientIdHash":"Client ID Hash","editAccount.region":"Region","editAccount.sessionId":"Session ID","editAccount.profileArn":"Profile ARN","editAccount.saveFailed":"保存失败","editAccount.verifyFailed":"验证失败","editAccount.pleaseFillRefreshToken":"请填写 Refresh Token","editAccount.pleaseFillClientIdAndSecret":"请填写 Client ID 和 Client Secret","editAccount.currentAccountStatus":"当前账号状态","editAccount.verified":"已验证","editAccount.email":"邮箱","editAccount.subscriptionPlan":"订阅计划","editAccount.usageQuota":"使用额度","editAccount.refreshTokenRequired":"刷新 Token 需要","editAccount.verifying":"验证中...","editAccount.verifyAndRefreshCredentials":"验证并刷新凭证信息","editAccount.proxyTitle":"2API账号代理","editAccount.proxyDescription":"仅用于本应用2API对该账号发起的请求,不会影响 Kiro IDE 或 Kiro CLI 登录流量,并且会覆盖2API请求的通用代理设置。","editAccount.proxyEnabled":"启用","editAccount.proxyProtocol":"协议","editAccount.proxyHost":"主机","editAccount.proxyPort":"端口","editAccount.proxyUsername":"用户名","editAccount.proxyPassword":"密码","editAccount.proxyOptional":"可选","editAccount.proxyQuickInput":"快速粘贴代理地址","editAccount.proxyQuickInputPlaceholder":"http://user:pass@127.0.0.1:7890 或 socks5://127.0.0.1:1080","editAccount.proxyQuickInputInvalid":"请使用 user:pass@host:port、host:port、http://... 或 socks5://...","editAccount.proxyQuickInputHint":"粘贴一次代理即可填充下方字段。此内容不会保存。","editAccount.proxyApplyQuickInput":"解析填充","editAccount.proxyTest":"测试代理","editAccount.proxyTesting":"测试中...","editAccount.proxyTestSuccess":"代理测试成功","editAccount.proxyTestFailed":"代理测试失败","editAccount.proxyInvalid":"代理配置无效","editAccount.proxyHostRequired":"请先填写代理主机。","editAccount.proxyPortRequired":"代理端口必须在 1 到 65535 之间。","editAccount.proxyUsernameRequired":"填写代理密码时必须同时填写用户名。","accountCard.LogIn":"登录","accountCard.LogOut":"退出登录","accountCard.refresh":"刷新数据","accountCard.refreshQuota":"刷新配额","accountCard.refreshToken":"刷新 Token","accountCard.viewDetails":"查看详情","accountCard.editRemark":"编辑账号","accountCard.delete":"删除","accountCard.deleteRemote":"注销账号","accountCard.deleteRemoteConfirm":"确定要从 AWS 服务端注销此账号吗?\n\n⚠️ 此操作不可逆,账号将被永久删除!","accountCard.deleteRemoteSuccess":"账号已从服务端注销","accountCard.deleteRemoteFailed":"注销失败","accountCard.tokenExpired":"已过期","accountCard.rightClickTip":"右键查看更多操作","accountCard.copyJson":"复制 JSON","accountCard.selectAccount":"选择账号","accountCard.bannedCannotSwitch":"封禁账号不可切换","accountCard.daysRemaining":"订阅剩余 {{days}} 天","accountCard.availableModels":"可用模型","accountCard.loadModels":"查看模型","accountCard.loadingModels":"加载中","accountCard.modelLoadFailed":"获取模型失败","accountCard.noAvailableModels":"该账号未返回可用模型","accountCard.modelCountSuffix":"个","accountCard.defaultModel":"默认","accountCard.promptCaching":"缓存","accountCard.refreshModels":"刷新模型","accountCard.cachedAt":"缓存时间","refresh.title":"刷新账号","refresh.progress":"进度","refresh.refreshing":"正在刷新","refresh.complete":"刷新完成!","detail.quotaOverview":"配额总览","detail.syncQuota":"同步配额","detail.mainQuota":"主配额","detail.freeTrial":"免费试用","detail.bonusTotal":"奖励总计","detail.bonusCount":"个奖励","detail.bonusDetails":"奖励详情","detail.basicInfo":"基本信息","detail.emailAddress":"邮箱地址","detail.remarkLabel":"备注标签","detail.tokenCredentials":"Token 凭证","detail.ssoCredentials":"AWS SSO OIDC 凭证","detail.refreshFailed":"刷新失败","detail.accountNormal":"账号正常","detail.accountBanned":"账号封禁","detail.used":"已使用","detail.precise":"精确","detail.reset":"重置","detail.expires":"过期","detail.expiresAt":"过期时间","detail.redeemed":"兑换","detail.addedAt":"添加于","detail.userId":"用户 ID","detail.email":"邮箱","detail.subscriptionType":"订阅类型","detail.upgradeable":"可升级","detail.overageRate":"超额费率","detail.overageCap":"超额上限","detail.perCredit":"积分","detail.fields":"个字段","detail.availableModels":"账户可用模型","detail.loadingModels":"加载模型中...","detail.noModels":"暂无可用模型","detail.noDescription":"无描述","mcpManager.addMCPServer":"添加 MCP 服务","mcpManager.disabled":"已禁用","mcpManager.autoApprove":"自动批准","mcpManager.tools":"个工具","mcpManager.envVars":"个环境变量","mcpManager.errorNoCommand":"请输入启动命令","common.details":"详情","common.saving":"保存中...","pagination.perPage":"每页","pagination.totalItems":"条,共 {{count}} 条","pagination.first":"首页","pagination.prev":"上一页","pagination.next":"下一页","pagination.last":"末页","switch.title":"切换账号","switch.confirmSwitch":"确定切换到","switch.confirmBtn":"确定切换","switch.success":"切换成功","switch.failed":"切换失败","switch.logoutTitle":"退出登录","switch.confirmLogout":"确定退出登录","switch.logoutSuccess":"已退出登录","switch.logoutFailed":"退出登录失败","switch.logoutDone":"已清除当前登录态,账号仍保留在列表中","switch.missingAuth":"缺少认证信息","switch.quota":"配额","switch.remaining":"剩余","switch.type":"类型","switch.cliNotInstalled":"CLI 未安装","switch.cliNotInstalledMessage":"未检测到 Kiro CLI 2.0,请先安装后再尝试切换到 CLI","switch.ideNotInstalled":"IDE 未安装","switch.ideNotInstalledMessage":"未检测到 Kiro IDE 配置环境(.aws/sso/cache),请先安装或登录 Kiro IDE","switch.switchTarget":"切换目标","detail.aoaPrefix":"aoa 开头","detail.aorPrefix":"aor 开头","detail.eyjPrefix":"eyJ 开头","import.socialTemplate":"Social 模板","import.idcTemplate":"IdC 模板","theme.light":"雅致白","theme.dark":"极致黑","theme.dark-one":"深邃蓝 (One Dark)","theme.tech":"科技蓝","theme.midnight":"子夜黑","theme.purple":"优雅紫","theme.green":"活力绿","theme.business":"商务金","theme.sunset":"日落橙","theme.ocean":"海洋蓝","theme.forest":"森林绿","theme.rose":"玫瑰红","theme.aurora":"极光青","theme.sakura":"樱花粉","common.paste":"粘贴","common.refreshFailed":"刷新失败","steering.title":"Steering 规则","steering.noFiles":"暂无 Steering 文件","steering.selectToEdit":"选择一个文件进行编辑","steering.unsavedChanges":"未保存的更改","steering.confirmSwitch":"有未保存的更改,确定切换?","steering.confirmDelete":"确认删除","steering.confirmDeleteFile":'确定删除 "{{fileName}}"?',"steering.newSteering":"新建 Steering","steering.fileName":"文件名","steering.fileNamePlaceholder":"例如: my-rules","steering.fileNameHint":"自动添加 .md 后缀","steering.inclusionMode":"包含模式","steering.inclusionAlwaysDesc":"每次对话都会加载","steering.inclusionAutoDesc":"通过 discloseContext 工具按需激活","steering.inclusionFileMatchDesc":"当匹配的文件被读取时加载","steering.inclusionManualDesc":"通过 # 手动引用时加载","steering.filePattern":"匹配模式","steering.filePatternPlaceholder":"例如: **/*.jsx","steering.saving":"保存中...","steering.save":"保存","steering.unknownTime":"未知时间","steering.contentPlaceholder":"输入 Markdown 内容...","steering.fmName":"名称","steering.fmNamePlaceholder":"规则显示名称","steering.fmDescription":"描述","steering.fmDescriptionPlaceholder":"规则用途简述","steering.defaultTemplate":"默认模板","steering.initializeProject":"初始化项目规则","steering.refine":"整理","steering.refining":"整理中...","steering.scopeTitle":"Steering 作用域","steering.scopeMessage":"确认写入当前项目规则?选择“用户”则保存到全局规则目录。","skills.noSkills":"暂无 Skills","skills.noSkillsHint":"Skills 存储在 ~/.kiro/skills/ 目录","skills.createFirst":"创建第一个 Skill","skills.create":"新建 Skill","skills.newSkill":"新建 Skill","skills.skillName":"Skill 名称","skills.skillNamePlaceholder":"例如: my-coding-rules","skills.skillNameHint":"只能包含字母、数字、下划线和连字符","skills.selectToEdit":"选择一个 Skill 进行编辑","skills.unsavedChanges":"未保存的更改","skills.confirmSwitch":"有未保存的更改,确定切换?","skills.unsaved":"未保存","skills.saveFailed":"保存失败","skills.deleteFailed":"删除失败","skills.saving":"保存中...","skills.save":"保存","skills.createFailed":"创建失败","skills.loadFailed":"加载 Skills 失败","skills.confirmDelete":"确认删除","skills.confirmDeleteSkill":'确定删除 Skill "{{name}}"?这将删除整个目录。',"skills.files":"个文件","skills.extraFiles":"辅助文件","skills.contentPlaceholder":"输入 SKILL.md 内容...","skills.fmName":"名称","skills.fmNamePlaceholder":"Skill 显示名称","skills.fmDescription":"描述","skills.fmDescriptionPlaceholder":"Skill 用途简述","skills.fmDescriptionHint":"描述 Skill 的功能,帮助 Kiro 理解何时激活","skills.importLocal":"导入本地 Skill","skills.importGithub":"从 GitHub 导入","skills.importSuccess":"Skill 导入成功","skills.importFailed":"导入本地 Skill 失败","skills.importGithubFailed":"从 GitHub 导入 Skill 失败","skills.importScopeTitle":"Skill 导入范围","skills.importScopeMessage":"确认导入到当前项目作用域?选择“用户”则导入到全局 Skills 目录。","skills.githubRepoUrl":"仓库地址","skills.githubPath":"仓库内路径","skills.githubPathPlaceholder":"可选,例如 skills/code-review","skills.githubBranch":"分支","skills.importTargetName":"目标名称","skills.importTargetNamePlaceholder":"可选,默认使用目录名","hooks.title":"Hooks","hooks.loadFailed":"加载 Hooks 失败","hooks.noHooks":"暂无 Hook 文件","hooks.createFirst":"创建第一个 Hook","hooks.newHook":"新建 Hook","hooks.fileName":"文件名","hooks.fileNamePlaceholder":"例如: my-workflow","hooks.fileNameHint":"只能包含字母、数字、点、下划线、连字符;自动添加 .kiro.hook 后缀","hooks.fileNamePreview":"最终文件名","hooks.fileNameRequired":"请输入文件名","hooks.fileNameInvalid":"文件名格式无效","hooks.fileNameDuplicate":"Hook 文件名已存在","hooks.scopeHint":"支持用户级(~/.kiro/hooks/,对所有项目生效)与项目级(/.kiro/hooks/)","hooks.scope":"作用范围","hooks.scopeProject":"项目级","hooks.scopeUser":"用户级","hooks.scopeUserHint":"写入 ~/.kiro/hooks(Kiro IDE 1.0.182+),对所有项目生效","hooks.scopeProjectHint":"写入当前项目的 .kiro/hooks","hooks.selectToEdit":"选择一个 Hook 文件进行编辑","hooks.unsavedChanges":"未保存的更改","hooks.confirmSwitch":"有未保存的更改,确定切换?","hooks.unsaved":"未保存","hooks.saveFailed":"保存失败","hooks.deleteFailed":"删除失败","hooks.createFailed":"创建失败","hooks.confirmDelete":"确认删除","hooks.confirmDeleteFile":'确定删除 Hook 文件 "{{fileName}}"?',"hooks.saving":"保存中...","hooks.save":"保存","hooks.contentPlaceholder":"输入 .kiro.hook JSON 内容...","agents.noAgents":"暂无 Custom Agents","agents.noAgentsHint":"自定义 Agents 存储在 ~/.kiro/agents/ 目录","agents.deleteFailed":"删除失败","agents.createFirst":"创建第一个 Agent","agents.create":"新建 Agent","agents.newAgent":"新建 Custom Agent","agents.agentName":"Agent 名称","agents.agentNamePlaceholder":"例如: code-reviewer","agents.agentNameHint":"自动添加 .md 后缀,文件名即为 Agent ID","agents.selectToEdit":"选择一个 Agent 进行编辑","agents.unsavedChanges":"未保存的更改","agents.confirmSwitch":"有未保存的更改,确定切换?","agents.unsaved":"未保存","agents.saveFailed":"保存失败","agents.saving":"保存中...","agents.save":"保存","agents.createFailed":"创建失败","agents.loadFailed":"加载 Custom Agents 失败","agents.confirmDelete":"确认删除","agents.confirmDeleteAgent":'确定删除 Agent "{{fileName}}"?',"agents.tools":"个工具","agents.toolTags":"工具标签","agents.selectTools":"选择允许使用的工具...","agents.contentPlaceholder":"输入 Agent 系统提示词...","agents.fmName":"名称","agents.fmNamePlaceholder":"Agent 显示名称","agents.fmDescription":"描述","agents.fmDescriptionPlaceholder":"Agent 用途简述","agents.model":"模型","agents.includeMcpJson":"包含 MCP 配置","agents.includePowers":"包含 Powers","agents.allTools":"全部工具","agents.includeMcpJsonDesc":"自动注入 mcp.json 中定义的服务器","callback.processing":"正在处理登录回调...","callback.missingParams":"缺少必要的回调参数","callback.exchangingToken":"正在交换访问令牌...","callback.success":"登录成功!账号已添加到应用中。","callback.failed":"登录失败,请重试","callback.loginSuccess":"登录成功","callback.loginFailed":"登录失败","callback.processingTitle":"处理中...","callback.autoCloseHint":"此窗口将自动关闭,或您可以手动关闭","callback.closeWindow":"关闭窗口","tags.title":"标签","tags.filter":"按标签筛选","tags.all":"全部标签","tags.noTags":"无标签","tags.addTag":"添加标签","tags.newTagPlaceholder":"输入新标签...","tags.manage":"管理标签","tags.edit":"编辑标签","tags.selectTags":"选择标签","tags.createNew":"创建新标签","tags.deleteTag":"删除标签","tags.confirmDelete":"确定删除标签","tags.duplicateName":"标签名已存在","tags.batchSet":"批量标签","tags.selected":"已选标签","tags.available":"可选标签","tags.mode":"操作模式","tags.mode_set":"覆盖","tags.mode_add":"追加","tags.mode_remove":"移除","tags.searchPlaceholder":"搜索标签...","tags.addOrSelect":"搜索/添加标签","tags.searchOrCreate":"搜索或输入新标签...","tags.hint":"输入搜索已有标签,或直接输入创建新标签","tags.hasTags":"有标签","groups.title":"分组","groups.all":"全部分组","groups.noGroup":"无分组","groups.hasGroup":"有分组","groups.searchPlaceholder":"搜索分组...","groups.noGroups":"暂无分组","groups.newGroupPlaceholder":"输入新分组...","groups.deleteGroup":"删除分组","groups.confirmDelete":"确定删除分组","groups.duplicateName":"分组名已存在","filter.title":"高级筛选","filter.clearAll":"清除全部","filter.subscription":"订阅类型","filter.status":"账号状态","filter.provider":"账号类型","filter.usageRange":"使用率范围","filter.status_normal":"正常","filter.status_banned":"已封禁","filter.status_expired":"已过期","announcement.title":"重要提示","announcement.warning":"本软件完全免费!","announcement.content1":"如果有人向你收费出售此软件,你被骗了!请立即举报。","announcement.content2":"本项目遵循 CC BY-NC-SA 4.0 开源协议,禁止商业使用。","announcement.content3":"请从官方 GitHub 仓库下载,避免使用来路不明的版本。","announcement.official":"官方开源地址:","announcement.tgGroup":"Telegram 交流:","announcement.dontRemind":"不再提醒","announcement.understand":"我已知晓","announcement.refillTutorial":"Kiro续杯Tutorial","redeem.success":"兑换成功","redeem.desc":"输入购买的卡密,自动添加账号到列表","redeem.placeholder":"请输入卡密","redeem.account":"账号","redeem.submit":"兑换","powers.noPowers":"暂无已安装的 Powers","powers.noPowersHint":"Powers 存储在 ~/.kiro/powers/installed/ 目录","powers.selectToView":"选择一个 Power 查看详情","powers.uninstall":"卸载","powers.confirmUninstall":"确认卸载","powers.confirmUninstallPower":'确定卸载 Power "{{name}}"?卸载后可从注册表重新安装。',"powers.uninstallFailed":"卸载失败","powers.autoInstalled":"自动安装","powers.author":"作者","powers.license":"许可证","powers.installed":"已安装","powers.recommended":"推荐","powers.installedBadge":"已安装","powers.alreadyInstalled":"已安装","powers.viewAndInstall":"查看并安装","powers.install":"安装","powers.installing":"正在安装...","powers.installSuccess":"安装成功","powers.installFailed":"安装失败","powers.browseRecommended":"浏览推荐 Powers","powers.noRecommended":"无法加载推荐列表","powers.loadFailed":"加载 Powers 失败","powers.loadRecommendedFailed":"加载推荐 Powers 失败","powers.name":"名称","powers.thirdPartyDisclaimer":"第三方 Powers 独立于 Kiro 核心服务运行,可能受其自身许可条款约束。Kiro 未在所有场景下测试这些工具,请仅从受信任来源安装并查阅相关文档和许可。","powers.addCustom":"添加自定义 Power","powers.importFromFolder":"从文件夹导入","powers.importFromFolderHint":"选择本地包含 plugin.json 或 POWER.md 的文件夹","powers.importFromUrl":"从 GitHub 导入","powers.importFromUrlHint":"提供社区 Power 的公开 GitHub 地址","powers.importUrlDesc":"支持 https://github.com/owner/repo,也可带分支与子目录:/tree/<分支>/<子目录>。仅支持 github.com 公开仓库。","powers.selectFolder":"选择包含 Power 的文件夹","powers.import":"导入","powers.importing":"正在导入...","powers.installSuccessFromFolder":"已从文件夹安装:{{name}}","powers.installSuccessFromUrl":"已从 GitHub 安装:{{name}}","powers.importFolderFailed":"从文件夹导入失败","powers.importUrlFailed":"从 GitHub 导入失败","powers.sourceLocal":"本地","powers.sourceLocalHint":"从本地文件夹导入的自定义 Power","powers.sourceRepo":"GitHub","powers.sourceRepoHint":"从 GitHub URL 导入的自定义 Power","toast.loading":"加载中...","toast.processing":"处理中...","toast.success":"操作成功","toast.error":"操作失败","status.fallback.normal":"正常","status.fallback.capped":"封顶","status.fallback.banned":"封禁","status.fallback.invalid":"失效","status.fallback.expired":"过期","status.fallback.unknown":"未知","session.title":"会话管理","session.subtitle":"管理 Kiro IDE 的 chat sessions","session.workspacesAndSessions":"工作区与会话","session.searchSessions":"搜索会话...","session.noMatchingSessions":"未找到匹配的会话","session.collapse":"折叠","session.expand":"展开","session.delete":"删除","session.workspaces":"个工作区","session.sessions":"个会话","session.noSessions":"暂无会话","session.selectSessionToView":"选择一个会话查看详情","session.sessionHasNoMessages":"此会话没有消息","session.conversationSummary":"对话摘要(上下文压缩)","session.deleteWorkspace":"删除工作区","session.deleteSession":"删除会话","session.deleteWorkspaceConfirm":'确定要删除工作区 "{{name}}" 及其所有会话吗?\n\n此操作不可恢复!',"session.deleteSessionConfirm":'确定要删除会话 "{{title}}" 吗?',"session.batchDeleteWorkspaces":"批量删除工作区","session.batchDeleteConfirm":"确定要删除选中的 {{count}} 个工作区及其所有会话吗?\n\n工作区:{{names}}\n\n此操作不可恢复!","session.selectWorkspacesFirst":"请先选择要删除的工作区","session.sessionDeleted":"会话已删除","session.workspaceDeleted":'成功删除工作区 "{{name}}"',"session.workspacesDeleted":"成功删除 {{count}} 个工作区","session.loadSessionsFailed":"加载会话列表失败:","session.loadWorkspacesFailed":"加载工作区失败:","session.loadFailed":"加载失败:","session.deleteWorkspaceFailed":"删除工作区失败:","session.deleteFailed":"删除失败:","session.batchDeleteFailed":"批量删除失败:","session.exportSuccess":"导出成功!","session.exportFailed":"导出失败:","session.cannotFindWorkspace":"无法找到会话所属的工作区","session.selectAll":"全选","session.deselectAll":"取消全选","tray.showWindow":"显示窗口","tray.exitApp":"退出应用","tray.tooltip":"Kiro Account Manager","gateway.clientKey":"客户端 Key","gateway.fixFormErrors":"请先修正表单错误后再继续","gateway.gatewayDescription":"管理网关的入口状态、客户端接入、安全边界与请求日志,支持配置保存与网关启停。","gateway.saveConfig":"保存配置","gateway.requestCount":"请求计数","gateway.errorCount":"错误数","gateway.endpoint":"端点","gateway.write":"写","gateway.requestBody":"请求体","gateway.responseBody":"响应体","gateway.status":"状态","gateway.model":"模型","gateway.account":"账号","gateway.duration":"耗时","gateway.time":"时间","gateway.tokens":"输入/输出","gateway.client":"客户端","gateway.listenAddress":"监听地址","gateway.baseUrl":"Base URL","gateway.configureAccountPool":"配置账号池","gateway.clientConfigured":"✓ 已配置客户端","gateway.selected":"已选","gateway.accounts":"个账号","gateway.promptFilter":"提示词过滤","gateway.simplifyCCPrompt":"精简CC提示","gateway.removeBoundaryMarkers":"去边界标记","gateway.removeEnvNoise":"去环境噪音","gateway.customRules":"自定义规则","gateway.noCustomRules":"暂无自定义规则","gateway.manageRules":"管理规则","gateway.cacheTTLSeconds":"缓存TTL(秒)","gateway.thresholdPercent":"阈值%","gateway.ipWhitelist":"IP 白名单","gateway.singleAccount":"单账号","gateway.byGroup":"按分组","gateway.globalPool":"全局池","gateway.accountMode":"账号模式","gateway.priorityQuota":"优先剩余额度","gateway.groupMode":"分组模式","gateway.configuredRules":"已配置规则 ({{count}})","gateway.regex":"正则","gateway.containKeywords":"包含关键字","gateway.match":"匹配","gateway.replace":"替换","gateway.cancel":"取消","gateway.customRegexOrKeywordFilterRules":"自定义正则表达式或关键字过滤规则,用于清理系统提示中的噪音内容","gateway.addPresetRules":"添加预置规则","gateway.promptFilterRules":"提示词过滤规则","gateway.addRule":"添加规则","gateway.add":"添加","gateway.enabled":"启用","gateway.specifySingleAccount":"指定单账号","gateway.routingStrategy":"路由策略","gateway.roundRobin":"轮询","gateway.random":"随机","gateway.weightedRandom":"加权随机","gateway.leastConnections":"最少连接","gateway.selectAGroup":"选择一个分组","gateway.autoStart":"自动启动","gateway.authHeader":"认证头","gateway.responseCache":"响应缓存","gateway.requestLogs":"请求日志","gateway.protocolTest":"协议实测","gateway.accountPool":"账号池","gateway.localOnly":"仅本机","gateway.allowRemote":"允许远程","gateway.running":"运行中","gateway.stopped":"已停止","gateway.restart":"重启","gateway.restarting":"重启中…","gateway.copyEntry":"复制入口地址","gateway.copyClientKey":"复制客户端 Key","gateway.requestCountLabel":"请求","gateway.errorCountLabel":"错误","gateway.lastSync":"同步 {{time}}","gateway.tabOverview":"概览","gateway.tabRequestLogs":"请求日志","gateway.tabSettings":"配置","gateway.connectClients":"接入客户端","gateway.appliesTo":"适用于","gateway.chooseProtocol":"选择协议","gateway.chooseProtocolHint":"协议决定下面三项:地址、鉴权头、端点","gateway.metricJumpToLogs":"查看请求日志明细","gateway.recentRequests":"最近请求","gateway.noRecentRequests":"暂无请求记录","gateway.rowToggleDetail":"点击展开请求与响应","gateway.viewRaw":"原文","gateway.viewJson":"JSON","gateway.viewText":"文本","gateway.tools":"工具","gateway.noRunningAccountPool":"账号池暂无可用账号,请求会直接失败。先到「设置 → 账号与路由」配置账号池。","gateway.noAccountsAtAll":"还没有导入任何账号,网关无法工作。先到「账号管理」导入一个 Kiro 账号。","gateway.viewAllLogs":"查看全部","gateway.protocolTestDesc":"按三种协议构造请求,真实打到本网关并消耗账号额度","gateway.copyConfig":"复制配置","gateway.copyKey":"复制 Key","gateway.groupRouting":"账号与路由","gateway.groupAccess":"访问控制与启动","gateway.groupRequestHandling":"请求处理","gateway.switchesOn":"项开启","gateway.notSelected":"未选择","gateway.noPoolSelected":"未选择账号","gateway.disabled":"已关闭","gateway.autoStartOn":"自动启动已开启","gateway.autoStartOff":"自动启动已关闭","gateway.thresholdHint":"用量达到该百分比即停用该账号","gateway.ipWhitelistHint":"每行一个 IP 或 CIDR,例如 10.0.0.0/24","gateway.upstreamProxyLabel":"上游代理(Kiro API 出网)","gateway.upstreamProxyHint":"留空 = 跟随账号代理或系统代理;支持 http/https/socks5 URL","gateway.maxToolDescLabel":"工具描述最大长度","gateway.maxToolDescHint":"超出上限的工具描述会外移到系统提示的 Tool Documentation 段,防止超长描述触发上游拒绝;0 = 不限制","gateway.webSearchToggle":"WebSearch 子请求","gateway.webSearchOn":"WebSearch 开","gateway.webSearchOff":"WebSearch 关","gateway.toolSearchToggle":"Tool Search 工具发现","gateway.toolSearchOn":"Tool Search 开","gateway.toolSearchOff":"Tool Search 关","gateway.poolStatusActive":"正常","gateway.poolStatusOverage":"超额","gateway.poolStatusCapped":"封顶","gateway.poolStatusBanned":"封禁","gateway.poolStatusInvalid":"失效","gateway.strategyBalanced":"均衡","gateway.strategyMostQuota":"最多配额","gateway.currentEntry":"当前入口","gateway.start":"启动","gateway.stop":"停止","gateway.copiedItem":"已复制{{label}}","gateway.logDir":"日志目录","gateway.newRuleSection":"添加新规则","gateway.ruleName":"规则名称","gateway.ruleType":"规则类型","gateway.ruleTypeLinesContaining":"包含关键字(删除匹配行)","gateway.ruleTypeRegex":"正则表达式(替换匹配内容)","gateway.matchPattern":"匹配模式","gateway.replaceContentRegexEmpty":"替换内容(仅正则类型,留空表示删除)","gateway.ruleNamePlaceholder":"例如:过滤 Git 状态","gateway.matchPatternPlaceholder":"关键字模式:git status\n正则模式:.*?","gateway.replacePlaceholderEmpty":"留空表示删除匹配内容","gateway.filterRuleAdded":"已添加过滤规则: {{name}}","gateway.presetRulesLoaded":"成功载入 {{count}} 条预置过滤规则","gateway.allPresetRulesExist":"所有预置规则均已存在","gateway.presetFilterGitStatus":"过滤 Git 状态信息","gateway.presetFilterRecentCommits":"过滤最近提交信息","gateway.presetFilterKnowledgeCutoff":"过滤助手知识截止日期","gateway.presetFilterBillingHeader":"过滤计费头信息","gateway.presetFilterFastMode":"过滤快速模式标签","gateway.presetFilterProjectPath":"过滤项目路径信息","gateway.selectGroup":"选择分组","gateway.selectGroupPlaceholder":"选择一个分组","gateway.accountPoolDescription":"选择参与网关轮换的账号,并配置请求分发策略。","gateway.selectedAccounts":"已选择账号","gateway.baseUrlLabel":"Base URL","gateway.authHeaderLabel":"鉴权头","gateway.endpointLabel":"端点","gateway.defaultRoundRobin":"默认:轮询","gateway.searchAccounts":"搜索账号...","gateway.statusAll":"全部","gateway.selectAll":"全选","gateway.deselectAll":"取消全选","gateway.selectAvailable":"选可用","gateway.noAvailableAccounts":"暂无可用账号,请先添加账号。","gateway.unknownAccount":"未知账号","gateway.noQuota":"无额度","gateway.notRefreshed":"未刷新","gateway.close":"关闭","gateway.tplSimple":"简单对话","gateway.tplMultiTurn":"多轮对话","gateway.tplNonStream":"非流式","gateway.routingAuto":"自动(按网关负载均衡)","gateway.routingSingle":"单账号模式","gateway.routingGroup":"分组模式","gateway.routingPool":"账号池 ({{count}})","gateway.jsonFormatError":"JSON 格式错误: {{message}}","gateway.requestFailed":"请求失败: {{message}}","gateway.protocol":"协议","gateway.templates":"快速模板","gateway.upstreamRegion":"上游 Region","gateway.upstreamRegionHint":"网关调用 Kiro 上游时使用的区域,与本地监听无关","gateway.copyAsCurl":"复制为 curl 命令","gateway.abort":"中止","gateway.specifiedAccount":"指定账号","gateway.autoSelect":"自动选择","gateway.autoSelectLb":"自动选择(负载均衡)","gateway.noAvailableAccountsForRouting":"当前路由配置下没有可用账号","gateway.format":"格式化","gateway.inputJsonPlaceholder":"输入 JSON 请求体...","gateway.responseResult":"响应结果","gateway.receiving":"接收中...","gateway.copy":"复制","gateway.responsePlaceholder":"响应结果将显示在这里...","gateway.requesting":"请求中...","gateway.sendRequest":"发送请求","steering.inclusionAlways":"始终","steering.inclusionAuto":"自动","steering.inclusionFileMatch":"匹配","steering.inclusionManual":"手动","steering.groupAlways":"始终包含","steering.groupAuto":"自动激活","steering.groupFileMatch":"文件匹配","steering.groupManual":"手动引用","steering.loadFailed":"加载 Steering 文件失败","steering.saveFailed":"保存 Steering 文件失败","steering.deleteFailed":"删除 Steering 文件失败","steering.createFailed":"创建 Steering 文件失败","steering.createDefaultFailed":"创建默认 Steering 模板失败","steering.initializeFailed":"初始化项目 Steering 失败","steering.refineFailed":"整理 Steering 文件失败","steering.defaultCreated":"默认 Steering 模板已创建","steering.initialCreated":"项目 Steering 已初始化","steering.refineSuccess":"Steering 文件已整理","skills.saveFailedInternal":"保存 Skill 失败","powers.uninstallFailedInternal":"卸载 Power 失败","powers.installFailedInternal":"安装 Power 失败","mcp.toggleFailedInternal":"切换 MCP 状态失败","mcp.deleteFailedInternal":"删除 MCP 服务失败","hooks.saveFailedInternal":"保存 Hook 失败","hooks.createFailedInternal":"创建 Hook 失败","hooks.promptPlaceholder":"请在这里填写执行说明","agents.saveFailedInternal":"保存 Custom Agent 失败","agents.loadFailedInternal":"加载 Custom Agents 失败","agents.deleteFailedInternal":"删除 Custom Agent 失败","agents.createFailedInternal":"创建 Custom Agent 失败","steering.loadFailedInternal":"加载 Steering 文件失败","steering.saveFailedInternal":"保存 Steering 文件失败","steering.deleteFailedInternal":"删除 Steering 文件失败","steering.createFailedInternal":"创建 Steering 文件失败","steering.createDefaultFailedInternal":"创建默认 Steering 模板失败","steering.initializeFailedInternal":"初始化项目 Steering 失败","steering.refineFailedInternal":"整理 Steering 文件失败","mcp.loadFailedInternal":"加载 MCP 配置失败","hooks.loadFailedInternal":"加载 Hooks 失败","hooks.deleteFailedInternal":"删除 Hook 失败","skills.loadFailedInternal":"加载 Skills 失败","skills.deleteFailedInternal":"删除 Skill 失败","skills.createFailedInternal":"创建 Skill 失败","skills.importFailedInternal":"导入本地 Skill 失败","skills.importGithubFailedInternal":"从 GitHub 导入 Skill 失败","powers.loadFailedInternal":"加载 Powers 失败","powers.importFolderFailedInternal":"从文件夹导入 Power 失败","powers.importUrlFailedInternal":"从 URL 导入 Power 失败","powers.loadRecommendedFailedInternal":"加载推荐 Powers 失败","mcp.invalidFormat":'请包装为 { "name": { config } } 格式',"mcp.noValidConfig":"未找到有效配置","settings.copyPath":"复制路径","settings.copy":"复制","filter.closePanel":"关闭筛选面板","filter.basic":"基础筛选","filter.advanced":"高级筛选","group.createNew":"创建新分组","group.clickToRemove":"点击移除","group.addTag":"添加标签","accounts.trialExpiring":"试用到期","welcome.importantNotice":"⚠️ 重要提示","welcome.appName":"Kiro Account Manager","welcome.permanentlyFree":"本软件永久免费","welcome.importantNoticeSoftwareFree":"重要提示:本软件永久免费","welcome.openSourceFree":"• 本软件完全开源免费,任何人不得以任何形式收费","welcome.allFeaturesOpen":"• 所有功能完全开放,无任何限制","welcome.reportIfCharged":"• 如有人向您收费,请立即举报","welcome.buyMeCoffee":"💖 请作者喝杯咖啡","welcome.supportMessage":"如果这个工具帮到了你,欢迎请我喝杯咖啡,你的支持是我持续更新的动力 ❤️","welcome.sponsorBenefits":"赞助用户福利:","welcome.sponsorHint":"提示:赞助时请备注你的 GitHub 用户名或邮箱,方便联系","welcome.alipay":"支付宝","welcome.wechatPay":"微信支付","welcome.clickToEnlarge":"点击图片可放大查看","welcome.iUnderstand":"我知道了","errors.saveAccountFailed":"保存账号数据失败","errors.getEmailFailed":"获取邮箱失败,请检查账号状态","errors.accountMissingIdentifiers":"账号缺少 userId、email 或 refresh_token","errors.accountNotFound":"账号不存在","errors.remoteDeleteNotSupported":"此账号类型不支持远程删除","errors.noCliAccounts":"数据库中没有账号数据","errors.multipleCliAccounts":"数据库中有多个账号,请联系开发者","errors.browserPathEmpty":"浏览器路径为空","errors.stateMissing":"未收到 state","errors.stateMismatch":"State 不匹配","errors.authTimeout":"授权超时","errors.authCodeMissing":"未收到授权码","errors.refreshTokenExpired":"RefreshToken 已失效","errors.startUrlInvalid":"Start URL 无效。请检查您输入的 IAM Identity Center Start URL 是否正确。\n\n示例格式:https://d-1234567890.awsapps.com/start","errors.noAvailableAccount":"未找到符合2API配置的可用账号","errors.loadBalancerFailed":"LoadBalancer 未能选择可用账号","app.accountBanned":"账号已封禁","app.accountBannedMessage":"账号 {{email}} 已被封禁,无法继续使用","app.tokenExpired":"Token 已过期","app.tokenExpiredMessage":"账号 {{email}} 的 Token 已过期,请重新登录","filter.set":"已设置","filter.all":"全部","filter.statusNormal":"正常","filter.statusCapped":"封顶","filter.statusBanned":"封禁","filter.statusInvalid":"失效","filter.statusExpired":"过期","home.expires":"到期","agentConfig.selectProjectDirFailed":"选择项目目录失败","welcome.priorityFeatures":"🎯 新功能优先实现","welcome.oneOnOneSupport":"🔧 一对一技术支持","welcome.priorityFeedback":"⚡ 问题反馈优先处理","welcome.joinUs":"关注我们","welcome.tgChannel":"Telegram 频道","welcome.tgGroup":"Telegram 交流群","common.preview":"预览","about.closePreview":"关闭预览","about.kiroGoDesc":"Kiro API 反向代理,提供标准 OpenAI 和 Anthropic 接口","accountCard.enableDisableAccount":"启用或禁用账号","accountCard.overageToggle":"超额开关","accountCard.overageEnabled":"超额已开启","accountCard.cap":"上限","accountCard.resetDate":"{{date}} 重置","common.viewRawResponse":"查看原始响应","common.hideRawResponse":"隐藏原始响应","app.networkError":"网络错误","app.networkErrorMessage":"{{count}}/{{total}} 个账号同步失败,请检查网络连接","common.pleaseWait":"请稍候...","common.noMatches":"未找到匹配项","home.remaining":"剩余","sessions.title":"会话管理","sessions.subtitle":"浏览、搜索和导出 Kiro IDE 的历史对话","sessions.workspaceCount":"{{count}} 个工作区","sessions.loadedSessions":"已加载 {{count}} 个会话","sessions.selectedCount":"已选 {{count}}","sessions.workspacesAndSessions":"工作区与会话","sessions.deleteCount":"删除 ({{count}})","sessions.selectAll":"全选","sessions.deselectAll":"取消全选","sessions.searchPlaceholder":"搜索会话...","sessions.clearSearch":"清空搜索","sessions.searchResultCount":"找到 {{count}} 个会话","sessions.noMatch":"未找到匹配的会话","sessions.deleteSessionTitle":"删除会话","sessions.deleteSessionConfirm":'确定要删除会话 "{{title}}" 吗?',"sessions.sessionDeleted":"会话已删除","sessions.deleteFailed":"删除失败:{{error}}","sessions.deleteWorkspaceTitle":"删除工作区","sessions.deleteWorkspaceConfirm":'确定要删除工作区 "{{name}}" 及其所有会话吗?\n\n此操作不可恢复!',"sessions.workspaceDeleted":'成功删除工作区 "{{name}}"',"sessions.deleteWorkspaceFailed":"删除工作区失败:{{error}}","sessions.batchDeleteWorkspaceTitle":"批量删除工作区","sessions.batchDeleteWorkspaceConfirm":"确定要删除选中的 {{count}} 个工作区及其所有会话吗?\n\n工作区:{{names}}\n\n此操作不可恢复!","sessions.batchDeleteSuccess":"成功删除 {{count}} 个工作区","sessions.batchDeleteFailed":"批量删除失败:{{error}}","sessions.pleaseSelectWorkspace":"请先选择要删除的工作区","sessions.sessionNotFound":"无法找到会话所属的工作区","sessions.exportSuccess":"导出成功!","sessions.exportFailed":"导出失败:{{error}}","sessions.expand":"展开","sessions.collapse":"折叠","sessions.sessionCount":"{{count}} 个会话","sessions.refresh":"刷新列表","sessions.loading":"正在加载会话...","sessions.conversationSummary":"对话摘要(上下文压缩)","sessions.noMessages":"此会话没有消息","sessions.user":"用户","sessions.assistant":"助手","sessions.selectSessionToView":"选择一个会话查看详情","sessions.selectFromTree":"从左侧工作区树或搜索结果中选择历史对话。","sessions.loadingCli":"加载中...","sessions.loadSessionListFailed":"加载会话列表失败:{{error}}","sessions.loadWorkspaceFailed":"加载工作区失败:{{error}}","sessions.loadFailed":"加载失败:{{error}}","cliSessions.loadListFailed":"加载 CLI 会话失败:{{error}}","cliSessions.loadDetailFailed":"加载会话详情失败:{{error}}","cliSessions.deleteTitle":"删除会话","cliSessions.deleteConfirm":"确定要删除这个 CLI 会话吗?此操作不可恢复。","cliSessions.deleted":"会话已删除","cliSessions.deleteFailed":"删除失败:{{error}}","cliSessions.exported":"已导出到 {{path}}","cliSessions.exportFailed":"导出失败:{{error}}","cliSessions.searchPlaceholder":"搜索会话...","cliSessions.count":"{{count}} 个 CLI 会话","cliSessions.context":"上下文: {{pct}}%","cliSessions.user":"用户","cliSessions.assistant":"助手","cliSessions.selectToView":"选择一个 CLI 会话查看详情","gatewayLogs.title":"请求日志监控","gatewayLogs.description":"实时查看网关请求记录、本地缓存命中与流量统计","gatewayLogs.total":"总计","gatewayLogs.success":"成功","gatewayLogs.error":"错误","gatewayLogs.tokensInput":"入","gatewayLogs.tokensOutput":"出","gatewayLogs.cacheSaved":"(节省 {{pct}}% 输入缓存)","gatewayLogs.cacheLabel":"缓存:","gatewayLogs.cacheItems":"项 (Delta: {{delta}} / LRU: {{lru}})","gatewayLogs.logRequests":"记录请求日志","gatewayLogs.clearCache":"清理缓存","gatewayLogs.searchPlaceholder":"搜索账号、模型、路径、上游或响应码...","gatewayLogs.filterAll":"全部响应码","gatewayLogs.filterSuccess":"成功响应 (2xx/3xx)","gatewayLogs.filterError":"错误响应 (4xx/5xx)","gatewayLogs.keepLatest50":"保留最新 50 条","gatewayLogs.keepLatest100":"保留最新 100 条","gatewayLogs.keepLatest200":"保留最新 200 条","gatewayLogs.logLevelTitle":"网关日志级别","gatewayLogs.levelDebug":"Debug 级别","gatewayLogs.levelInfo":"Info 级别","gatewayLogs.levelWarn":"Warn 级别","gatewayLogs.levelError":"Error 级别","gatewayLogs.openLogDirTitle":"打开本地日志文件夹","gatewayLogs.logDir":"日志目录","gatewayLogs.exportTitle":"导出为日志文本文件","gatewayLogs.export":"导出","gatewayLogs.clear":"清空","gatewayLogs.confirmClear":"确定清空?","gatewayLogs.colTime":"发生时间","gatewayLogs.colPath":"接口路径","gatewayLogs.colAccount":"账号","gatewayLogs.colModel":"目标模型","gatewayLogs.colClient":"客户端","gatewayLogs.colClientTitle":"客户端 User-Agent(悬停查看完整值)","gatewayLogs.colStatusTitle":"HTTP 响应状态码","gatewayLogs.colStatus":"响应码","gatewayLogs.colInput":"输入","gatewayLogs.colOutput":"输出","gatewayLogs.colCacheReadTitle":"缓存命中 tokens","gatewayLogs.colCacheRead":"缓存读","gatewayLogs.colCacheWriteTitle":"缓存存入 tokens","gatewayLogs.colCacheWrite":"缓存写","gatewayLogs.colDuration":"耗时","gatewayLogs.waitingTraffic":"等待接收网关流量中...","gatewayLogs.noMatch":"未找到匹配的请求日志","gatewayLogs.cacheHitTitle":"缓存命中","gatewayLogs.streamingTitle":"流式响应","gatewayLogs.requestPayload":"请求 Payload (Request Body)","gatewayLogs.responsePayload":"EventStream 解码日志 (Decoded EventStream)","gatewayLogs.sseDetailHint":"流式请求的 SSE 逐事件明细只写入文件:","gatewayLogs.openLogDir":"打开日志目录","gatewayLogs.sseShowEvents":"查看事件","gatewayLogs.sseLoading":"读取中…","gatewayLogs.sseNoEvents":"该请求没有 SSE 事件记录(旧日志无 req 标记,无法按请求过滤)","gatewayLogs.toastSseLoadFailed":"读取 SSE 明细失败:{{error}}","gatewayLogs.copy":"复制","gatewayLogs.toastCacheCleared":"系统缓存已清理","gatewayLogs.breakdownTitle":"维度统计","gatewayLogs.healthTitle":"账号健康度","gatewayLogs.byModel":"按模型","gatewayLogs.byEndpoint":"按端点","gatewayLogs.byClient":"谁在用(Key × 客户端)","gatewayLogs.colClientTool":"客户端工具","gatewayLogs.colCount":"请求数","gatewayLogs.unknownClient":"未识别","gatewayLogs.noData":"暂无数据","gatewayLogs.cleanupStale":"清理过期条目","gatewayLogs.healthUnavailable":"网关未启动,健康度仅在网关运行时可用","gatewayLogs.colHealthScore":"健康分","gatewayLogs.colSuccess":"成功","gatewayLogs.colFailure":"失败","gatewayLogs.colConns":"连接","gatewayLogs.colAvgMs":"均耗时","gatewayLogs.colRateLimit":"限流","gatewayLogs.rateLimited":"已限流","gatewayLogs.rateLimitedHint":"该账号正被限流,点击立即解除","gatewayLogs.toastRateLimitCleared":"已解除该账号的限流","gatewayLogs.resetHealth":"重置","gatewayLogs.cleanupExpired":"清理过期","gatewayLogs.cleanupExpiredTitle":"清理已过期的缓存条目","gatewayLogs.toastExpiredCleaned":"已清理 {{count}} 条过期缓存","gatewayLogs.toastHealthReset":"已重置该账号的健康度","gatewayLogs.toastHealthResetFailed":"操作失败:{{error}}","gatewayLogs.toastStaleCleaned":"已清理过期健康度条目","gatewayLogs.toastClearCacheFailed":"清理缓存失败: {{error}}","gatewayLogs.toastLogsCleared":"网关日志已清空","gatewayLogs.toastClearFailed":"清空失败: {{error}}","gatewayLogs.toastExported":"日志导出成功","gatewayLogs.toastPayloadCopied":"Payload 已复制","gatewayLogs.toastCopyFailed":"复制失败","gatewaySummary.field.hostEmpty":"监听地址不能为空","gatewaySummary.field.hostInvalid":"监听地址必须是 localhost、IPv4 或 IPv6 地址","gatewaySummary.field.portRange":"端口必须在 1-65535 之间","gatewaySummary.field.regionEmpty":"region 不能为空","gatewaySummary.field.regionUnsupported":"region 不受支持: {{region}}","gatewaySummary.field.accountMode":"accountMode 必须是 single/group/pool","gatewaySummary.field.accountRequired":"single 模式必须选择账号","gatewaySummary.field.groupRequired":"group 模式必须选择分组","gatewaySummary.field.allowlistRequired":"允许远程访问时必须至少配置一个白名单来源 IP","gatewaySummary.field.allowlistInvalid":"白名单条目无效: {{entry}}","gatewaySummary.otherClient":"其他 OpenAI 兼容客户端","gatewaySummary.unknownAccount":"未知账号","gatewaySummary.exposureLocal":"仅本机","gatewaySummary.exposureRemote":"允许远程","gatewaySummary.exposureLocalFull":"仅本机访问","gatewaySummary.exposureRemoteFull":"允许远程访问","gatewaySummary.inventory":"账号 {{accounts}} 个 / 分组 {{groups}} 个","gatewaySummary.routing.single":"指定单账号","gatewaySummary.routing.singleDesc":"会固定使用一个账号,适合调试或绑定到单一租户场景。","gatewaySummary.routing.group":"按分组账号池","gatewaySummary.routing.groupDesc":"先锁定账号分组,再按策略和阈值从该分组中挑选可用账号。","gatewaySummary.routing.pool":"账号管理池","gatewaySummary.routing.poolDesc":"使用所有可用账号,按策略和阈值自动选择,不限制分组。","gatewaySummary.routing.currentAccount":"当前账号","gatewaySummary.routing.currentGroup":"当前分组","gatewaySummary.routing.accountScope":"账号范围","gatewaySummary.routing.noAccount":"未选择账号","gatewaySummary.routing.noGroup":"未选择分组","gatewaySummary.routing.allAccounts":"所有可用账号","gatewaySummary.routing.fixed":"固定账号,不参与轮换","gatewaySummary.routing.strategyThreshold":"策略 {{strategy}} / 阈值 {{threshold}}%","gatewaySummary.action.fixErrors":"先修正配置错误","gatewaySummary.action.fixErrorsDesc":"当前表单存在无效配置,保存、启动和重启都会被拦截,先修正标红字段。","gatewaySummary.action.restartNeeded":"配置已变更,重启后生效","gatewaySummary.action.restartNeededDesc":"仍按已启动时的配置运行。先保存,再执行重启,才能让新配置生效。","gatewaySummary.action.unsavedRunning":"当前运行配置尚未保存","gatewaySummary.action.unsavedRunningDesc":"当前页面配置已经用于运行,但还没有写回配置文件;如需保留下次启动沿用,请保存配置。","gatewaySummary.action.running":"运行中","gatewaySummary.action.runningDesc":"当前配置与已保存状态一致;如需中断流量可直接停止。","gatewaySummary.action.canStart":"可按当前配置直接启动","gatewaySummary.action.canStartDesc":"启动会使用当前表单里的配置;如果希望下次应用启动也沿用这些设置,先点保存配置。","gatewaySummary.action.stopped":"当前未启动","gatewaySummary.action.stoppedDesc":"可以直接启动现有配置,或先调整表单后再启动。","gatewaySummary.account.overage":"超额 {{used}}{{cap}}","gatewaySummary.account.remaining":"剩余 {{remaining}}/{{quota}}","gatewaySummary.integration.logDirReady":"日志目录已定位","gatewaySummary.integration.logDirMissing":"日志目录未获取","gatewaySummary.integration.errorDigest":"{{errors}} 条错误 / {{hits}} 次命中","gatewayMapping.title":"模型映射规则","gatewayMapping.description":"客户端请求的模型名会根据规则映射到 Kiro 内部模型","gatewayMapping.empty":"暂无规则","gatewayMapping.ruleReplace":"替换","gatewayMapping.ruleAlias":"别名","gatewayMapping.ruleLoadBalance":"负载均衡","gatewayMapping.addNewRule":"添加新规则","gatewayMapping.sourcePlaceholder":"源模型名","gatewayMapping.targetPlaceholder":"目标模型名","gatewayMapping.typeReplace":"替换 (replace)","gatewayMapping.typeAlias":"别名 (alias)","gatewayMapping.add":"添加","gatewayMapping.presetTitle":"快速添加 OpenAI/Codex 兼容映射","gatewayMapping.presetButton":"预置 GPT 映射","gatewayMapping.fetchModelsFailed":"获取可用模型列表失败","gatewayMapping.addedRule":"已添加映射规则: {{name}}","gatewayMapping.presetLoaded":"成功载入 {{count}} 条预置映射规则","gatewayMapping.presetExists":"所有预置映射规则均已存在","gatewaySummary.security.keysFixed":"固定为 kiro","settings.openMcpFile":"编辑 MCP 配置","settings.openSandboxFile":"编辑沙箱配置","sessions.timeJustNow":"刚刚","sessions.timeMinutesAgo":"{n} 分钟前","sessions.timeHoursAgo":"{n} 小时前","sessions.timeDaysAgo":"{n} 天前","sessions.noSessions":"暂无会话","sessions.noSessionsForProject":"当前项目没有会话","sessions.copy":"复制","sessions.copied":"已复制","welcome.freeNotice":"免费声明","gateway.credits":"计费","gatewayLogs.colCredits":"计费","gatewayLogs.colCreditsTitle":"上游 meteringEvent 给出的本次请求真实计费消耗;非流式请求无此值","gateway.cacheReadWrite":"缓存读/写","gateway.cacheReadWriteTitle":"缓存读取 tokens(命中,节省成本)/ 缓存写入 tokens(首次,+25% 成本)","gateway.creditsTitle":"上游 meteringEvent 给出的本次请求真实计费消耗;非流式请求无此值","gateway.sessionAffinityToggle":"会话粘性","gateway.sessionAffinityHint":"同客户端 IP 固定路由到同一账号:上游缓存按账号生效,固定路由可提升缓存命中(日志缓存读列可见)","gateway.logStreamEventsToggle":"记录流式事件","gateway.logStreamEventsHint":"每个流式请求额外落一个 SSE 逐事件明细文件,用于排查分片顺序等问题;平时关闭省磁盘","gatewayLogs.colContext":"上下文","gatewayLogs.colContextTitle":"上游 contextUsageEvent 报告的上下文窗口占用百分比(0-100),≥80% 注意接近上限;仅流式请求有此值","gatewayLogs.contextLabel":"上下文","gatewayLogs.contextPeak":"峰值","gatewayLogs.contextPeakTitle":"当前列表里上下文占用的最大值","gatewayLogs.contextNearLimit":"{{count}} 条 ≥80%","gatewayUsage.tabUsage":"用量","gatewayUsage.noData":"暂无数据","gatewayUsage.requests":"{{count}} 次请求","gatewayUsage.ok":"成功 {{count}}","gatewayUsage.failed":"失败 {{count}}","gatewayUsage.streamed":"流式 {{count}}","gatewayUsage.tokens":"Tokens 入 {{input}}K / 出 {{output}}K","gatewayUsage.cache":"缓存读 {{read}}K / 写 {{write}}K · {{hit}} 条命中","gatewayUsage.credits":"计费","gatewayUsage.creditsTitle":"上游 meteringEvent 的真实计费消耗合计(非 tokens × 单价估算);非流式请求无此值","gatewayUsage.contextAvg":"上下文均值","gatewayUsage.contextMax":"峰值","gatewayUsage.byModel":"按模型","gatewayUsage.byClient":"按客户端","gatewayUsage.byEndpoint":"按端点","gatewayUsage.colCount":"次数","gatewayUsage.colErrors":"失败","gatewayUsage.colTokens":"Tokens","gatewayUsage.colCacheRead":"缓存读","gatewayUsage.colCredits":"计费","gatewayMaskRules.title":"遮蔽规则","gatewayMaskRules.desc":"按类别调整动作、添加自定义正则、把特定值加入永不遮蔽白名单。保存后随网关配置生效。","gatewayMaskRules.kindsTitle":"内置类别","gatewayMaskRules.kindsHint":"每类可选遮蔽(替换为占位符)/ 警告(放行但记账)/ 拦截(拒绝请求);关掉开关则整类不参与。","gatewayMaskRules.customTitle":"自定义规则","gatewayMaskRules.noCustom":"暂无自定义规则。公司内部密钥格式、专属前缀等用正则添加。","gatewayMaskRules.addRule":"添加规则","gatewayMaskRules.ruleName":"规则名(如 internal-token)","gatewayMaskRules.patternPlaceholder":"正则,如 \bACME-[A-Z0-9]{12}\b","gatewayMaskRules.neverTitle":"永不遮蔽","gatewayMaskRules.neverHint":"白名单里的值精确匹配优先于一切规则——不遮蔽、不警告、不拦截。用于「模型需要理解这个 token 本身」的任务。注意:白名单值会以明文存在配置文件中。","gatewayMaskRules.addNever":"添加值","gatewayMaskRules.neverValue":"要放行的值(精确匹配)","gatewayMaskRules.neverNote":"备注(这串值是什么)","gatewayMaskRules.manage":"规则","gatewayMaskRules.actionMask":"遮蔽","gatewayMaskRules.actionWarn":"警告","gatewayMaskRules.actionBlock":"拦截","gatewayMaskRules.kindApiKey":"API 密钥(sk- / AKIA / ghp_ / xox)","gatewayMaskRules.kindPrivateKey":"私钥(PEM 块)","gatewayMaskRules.kindToken":"令牌(Bearer / JWT)","gatewayMaskRules.kindEmail":"邮箱","gatewayMaskRules.kindCreditCard":"信用卡(Luhn 校验)","gatewayMaskRules.kindIdCard":"身份证(18 位)","gatewayMaskRules.idRequired":"规则 id 不能为空","gatewayMaskRules.idDuplicate":"规则 id 重复:{id}","gatewayMaskRules.badPattern":"规则「{name}」的正则无效:{error}","gatewayMaskRules.saved":"遮蔽规则已保存","gatewayMasking.trendSessionHint":"遮蔽趋势(按小时)· 仅本次运行","gatewayMasking.sessionScopeNotice":"遮蔽记录按隐私设计只存内存(不落盘),重启即清;趋势因此只覆盖本次运行。请求流量的 7 天趋势见「用量」页。","gatewayMasking.tabMasking":"隐私遮蔽","gatewayMasking.totalMasked":"已遮蔽 {{count}} 个值","gatewayMasking.totalWarned":"警告 {{count}} 个值","gatewayMasking.requestsAffected":"{{count}} 个请求受影响","gatewayMasking.tryIt":"试一试:下面这段文本发给厂商会变成什么","gatewayMasking.tryPlaceholder":"粘贴一段含密钥/邮箱/身份证号的文本试试","gatewayMasking.run":"运行","gatewayMasking.noHits":"未命中任何规则","gatewayMasking.records":"遮蔽记录(只存元数据,不含真值)","gatewayMasking.noRecords":"暂无遮蔽记录。遮蔽开关在「配置」页,开启后新请求才会记录。","gatewayMasking.vendorSaw":"厂商实际收到的内容(占位符版)","gatewayMasking.hits":"命中明细","gatewayMasking.shapedBadge":"同形","gatewayMasking.shapedHint":"同形替换:厂商收到的是与真值同形的假密钥,不是占位符","gatewayMasking.requestId":"请求 ID","gatewayMasking.notice":"真值只存在于内存映射表,进程退出即消失;这里连原文都不存——并排对照中的真文请到「请求日志」按请求 ID 查本地文件。重启后记录清空。","gatewayMasking.kindPieTitle":"命中类型分布","gatewayMasking.trendTitle":"遮蔽趋势(按小时)","gatewayMasking.seriesMasked":"已遮蔽","gatewayMasking.seriesWarned":"警告","gateway.privacyMaskToggle":"隐私遮蔽","gateway.privacyMaskHint":"请求离开本机前把密钥/邮箱/身份证等换成占位符,响应回来再换回真值。同一值永远同一占位符(保 prompt cache 命中);遮蔽失败时拒绝请求","gateway.maskShapeToggle":"同形替换","gateway.maskShapeHint":"开启后密钥不以占位符送出,而以「同形假密钥」送出(同前缀、同长度、同字符类别):能过 agent/工具的 key 格式校验,模型也不会吐槽格式。短密钥与含特殊字符的值自动降级回占位符","gatewayUsage.cacheHit":"命中","gatewayUsage.cacheMiss":"未命中","gatewayUsage.trendTitle":"流量趋势(按小时)","gatewayUsage.trendHint":"请求数/失败数与 token 进出量(右轴)","gatewayUsage.seriesRequests":"请求数","gatewayUsage.seriesErrors":"失败","gatewayUsage.seriesInputTokens":"输入 tokens","gatewayUsage.seriesOutputTokens":"输出 tokens","gatewayUsage.cachePieTitle":"缓存命中占比","gatewayUsage.creditsTrendTitle":"计费消耗趋势(credits)","gatewaySessions.tabSessions":"会话","gatewaySessions.title":"会话用量","gatewaySessions.session":"会话","gatewaySessions.requests":"请求数","gatewaySessions.models":"模型","gatewaySessions.lastActive":"最近活跃","gatewaySessions.loadFailed":"加载失败: {error}","gatewaySessions.empty":"暂无会话数据(发起请求后这里会按会话聚合)","gatewaySessions.hint":"按 sessionId 聚合;客户端可通过 x-session-id 请求头标识会话,缺省按「IP|UA」派生键分组。","gatewayBills.tabBills":"账单","gatewayBills.title":"账单明细","gatewayBills.account":"账号","gatewayBills.model":"模型","gatewayBills.requests":"请求数","gatewayBills.totalRequests":"总请求","gatewayBills.loadFailed":"加载失败: {error}","gatewayBills.empty":"暂无账单数据(账号归属统计自 account_id 字段上线起)","gatewayBills.hint":"按「账号 × 模型」聚合,credits 为上游 meteringEvent 真实计费值;account_id 字段上线前的历史请求无法归属。","gatewayQuota.tabQuota":"额度","gatewayQuota.title":"额度概览","gatewayQuota.account":"账号","gatewayQuota.upstreamQuota":"上游配额","gatewayQuota.creditsUsed":"credits 已耗","gatewayQuota.status":"状态","gatewayQuota.queryFailed":"查询失败","gatewayQuota.ok":"正常","gatewayQuota.loadFailed":"加载失败: {error}","gatewayQuota.empty":"网关作用域内没有账号","gatewayQuota.hint":"上游配额与账号管理页同源(不刷新 token,失效即报错);本地消耗为落盘日志按账号聚合。","gatewayUsage.cacheRead":"缓存读","gatewayQuota.overage":"超额额度","gatewayQuota.overageCapable":"支持超额","gatewayQuota.overageIncapable":"不支持超额","gatewayUsage.subOverview":"概览","gatewayUsage.subSessions":"会话","gatewayUsage.subContext":"上下文","gatewayContext.title":"上下文占用","gatewayContext.avgScore":"平均评分","gatewayContext.cacheRate":"缓存命中率","gatewayContext.baseline":"基线(固定起点)","gatewayContext.growth":"每轮增速","gatewayContext.curve":"会话填充曲线","gatewayContext.promptTokens":"Prompt tokens","gatewayContext.medianTokens":"中位 Prompt","gatewayContext.tags":"标签","gatewayContext.empty":"暂无带 prompt 构成的请求数据(新版本日志生效后逐步积累)","gatewayContext.hintSessions":"{{count}} 个工具会话;累计压缩 {{compacts}} 次。","gatewayContext.hintFull":"只统计带工具定义的会话(标题生成等杂音请求已剔除);缓存命中率仅计上游报了 usage 的请求;基线=system+tools+memory 中位数,增速=相邻请求正增量中位数。窗口按模型名推,认不出时不算窗口相关的评分与标签。","gatewayContext.mapTitle":"上下文构成","gatewayContext.mapFree":"空闲","gatewayContext.mapEmpty":"该会话还没有 prompt 构成数据","gatewayContext.part.system":"系统提示","gatewayContext.part.tools":"工具定义","gatewayContext.part.skills":"技能","gatewayContext.part.memory":"记忆/指令","gatewayContext.part.files":"文件","gatewayContext.part.results":"工具结果","gatewayContext.part.chat":"对话历史","gateway.conversationsToggle":"对话捕获","gateway.conversationsHint":"把每轮对话的输入/输出分片落盘,供用量页会话回放;文本先过隐私遮蔽占位符化,保留 7 天、总量上限 256MB","gatewayReplay.title":"对话回放","gatewayReplay.clear":"清空捕获","gatewayReplay.turns":"轮","gatewayReplay.loading":"加载中…","gatewayReplay.empty":"该会话没有可回放的轮次","gatewayReplay.truncated":"已截断"}},en:{translation:em},ru:{translation:{"language.english":"English","language.chinese":"Китайский","language.russian":"Русский","nav.home":"Панель управления","nav.accounts":"Управление аккаунтами","nav.sessions":"Управление сессиями","nav.cliSessions":"Сессии CLI","nav.agentConfig":"Конфигурация агента","nav.desktopOAuth":"Онлайн вход","nav.socialIdC":"Social/IdC","nav.settings":"Настройки","nav.gateway":"Kiro API шлюз","nav.about":"О программе","gateway.config":"Конфигурация","nav.kiroConnected":"Kiro IDE подключен","nav.collapseSidebar":"Двойной клик для сворачивания боковой панели","nav.expandSidebar":"Двойной клик для разворачивания боковой панели","home.title":"Kiro Account Manager","home.subtitle":"Обзор квот и использования аккаунтов","home.totalAccounts":"Всего аккаунтов","home.activeAccounts":"Активные аккаунты","home.activeVsBanned":"Активные/Заблокированные","home.activeVsUnavailable":"Активные/Недоступные","home.proAccounts":"PRO аккаунты","home.usagePercent":"Степень использования квоты","home.currentAccount":"Текущий аккаунт","home.loggedIn":"Вошёл в систему","home.notLoggedIn":"Kiro IDE не вошёл в систему","home.clickToSwitch":"Нажмите 'Переключить' в управлении аккаунтами","home.quotaOverview":"Обзор квоты","home.usedTotal":"Использовано / Всего","home.monthlyUsage":"Ежемесячное использование","home.daysUntilReset":"дней до сброса","home.resetToday":"Сбрасывается сегодня","home.refreshAccount":"Обновить аккаунт","home.subscriptionDetails":"Детали подписки","home.accountInfo":"Информация об аккаунте","home.quotaDetails":"Детали квоты","home.base":"Базовая","home.trial":"Пробная","home.type":"Тип","home.overage":"Превышение","home.upgrade":"Обновить","home.status":"Статус","home.enabled":"Включено","home.disabled":"Отключено","home.reset":"Сброс","home.rate":"Ставка","home.expiresAt":"Истекает","home.unknown":"Неизвестно","home.loadFailed":"Загрузка не удалась","home.loadDataFailed":"Не удалось загрузить данные","home.mcpTools":"MCP инструменты","stats.usageDistribution":"Распределение использования","stats.lowUsage":"Низкое использование","stats.mediumUsage":"Среднее использование","stats.highUsage":"Высокое использование","stats.accounts":"аккаунтов","stats.accountUsage":"Рейтинг квоты аккаунтов","stats.quotaDistribution":"Распределение квоты","stats.usageTrend":"Тренд использования","stats.totalUsed":"Всего использовано","settings.title":"Настройки Kiro","settings.subtitle":"Настройте модели Kiro IDE, прокси и другие параметры. Изменения вступают в силу немедленно.","settings.general":"Общие","settings.language":"Язык","settings.displayLanguage":"Язык интерфейса","settings.appearance":"Внешний вид","settings.kiro":"Настройки IDE","settings.agent":"Агент","settings.theme":"Настройки темы","settings.tech":"Технологичный синий","settings.darkOne":"Глубокий синий (One Dark)","settings.business":"Бизнес золото","settings.sunset":"Закатный оранжевый","settings.ocean":"Океанский синий","settings.rose":"Розовый красный","settings.aurora":"Полярный циан","settings.forest":"Лесной зелёный","settings.midnight":"Полночный чёрный","settings.sakura":"Сакура розовый","settings.themeDesc":"Выберите предпочитаемую тему интерфейса","settings.themeSystem":"Как в системе","settings.density":"Плотность списка","settings.densityDesc":"Настройка отступов и плотности карточек аккаунтов","settings.densityCompact":"Компактный","settings.densityComfortable":"Комфортный","settings.densitySpacious":"Просторный","settings.uiScale":"Масштаб интерфейса","settings.uiScaleDesc":"Масштабирование всего интерфейса для экранов высокого разрешения","settings.reduceMotion":"Уменьшение анимации","settings.reduceMotionDesc":"Отключить анимации переходов интерфейса","settings.reduceMotionLabel":"Отключить анимации переходов","settings.switchTarget":"Цель переключения","settings.switchTargetIde":"Только Kiro IDE","settings.switchTargetCli":"Только CLI","settings.switchTargetBoth":"IDE + CLI","settings.switchTargetDesc":"Куда применять при переключении или выходе из аккаунта","settings.closeBehavior":"Поведение при закрытии","settings.restartAsAdmin":"Перезапустить от имени администратора","settings.confirmRestartAsAdmin":"Приложение закроется и перезапустится с правами администратора. Данные аккаунтов не пострадают.","settings.restartAsAdminFailed":"Не удалось перезапустить с правами администратора","settings.light":"Элегантный белый","settings.dark":"Абсолютный чёрный","settings.purple":"Элегантный фиолетовый","settings.green":"Яркий зелёный","settings.model":"Настройки модели","settings.modelDesc":"Выберите модель ИИ по умолчанию и при необходимости заблокируйте её для предотвращения изменений","settings.aiModel":"Модель ИИ","settings.lockModel":"Заблокировать модель","settings.lockModelDesc":"При включении автоматически отслеживает и восстанавливает настройку модели в конфигурации Kiro для предотвращения изменений другими операциями","settings.account":"Настройки аккаунта","settings.accountDesc":"Настройте функции, такие как автоматическое обновление аккаунта","settings.autoRefresh":"Автообновление токена","settings.autoRefreshDesc":"Периодически обновляйте истёкшие или скоро истекающие токены аккаунта для поддержания актуальности аккаунтов","settings.refreshInterval":"Интервал обновления (минуты)","settings.autoRefreshInterval":"Интервал обновления","settings.autoChangeMachineId":"Изменять ID машины при переключении","settings.autoChangeMachineIdDesc":"Автоматически сбрасывать ID машины Kiro IDE при переключении аккаунтов для избежания связи нескольких аккаунтов","settings.machineIdMode":"ID машины при переключении","settings.machineIdNone":"Не изменять","settings.machineIdRandom":"Случайное изменение","settings.machineIdBind":"Привязанное изменение","settings.browser":"Настройки браузера","settings.browserDesc":"Настройте браузер, используемый для входа OAuth (по умолчанию режим инкогнито)","settings.browserPath":"Путь к браузеру","settings.browserPlaceholder":"Оставьте пустым для использования системного браузера по умолчанию","settings.detect":"Обнаружить","settings.apply":"Применить","settings.saving":"Сохранение...","settings.proxy":"Настройки прокси","settings.proxyDesc":"Настройте HTTP прокси для Kiro IDE (синхронизируется с http.proxy в settings.json)","settings.httpProxy":"HTTP прокси Kiro IDE","settings.appProxyMode":"Прокси API приложения","settings.appProxyModeDesc":"Определяет, будут ли собственные API-запросы приложения использовать прокси Kiro IDE.","settings.appProxyFollowKiro":"Следовать прокси Kiro IDE","settings.appProxyDisabled":"Без прокси","settings.kiroInfo":"Информация о Kiro IDE","settings.kiroInfoDesc":"Информация об устройстве и сессии, считанная из локального Kiro IDE","settings.machineId":"ID машины","settings.machineIdDesc":"Сбросить ID машины Kiro IDE","settings.resetMachineId":"Сбросить ID машины","settings.systemMachineGuid":"Системный GUID машины","settings.backup":"Резервная копия","settings.restore":"Восстановить","settings.selectBrowser":"Выбрать","settings.detectedBrowsers":"Обнаруженные браузеры","settings.close":"Закрыть","settings.browserTip":"Оставьте пустым для использования системного браузера по умолчанию. Нажмите 'Обнаружить' для автоматического поиска установленных браузеров","settings.proxyTip":"Прокси Kiro IDE записывается в настройки Kiro IDE. Прокси API приложения определяет, будет ли приложение использовать его для квот, обновления токенов и проверки аккаунтов.","settings.saveSuccess":"Сохранено успешно","settings.saveFailed":"Сохранение не удалось","settings.proxyApplied":"Настройки прокси применены","settings.proxyCleared":"Прокси очищен","settings.browserSaved":"Путь к браузеру сохранён","settings.defaultBrowser":"Восстановлен системный браузер по умолчанию","settings.redeemServer":"Сервер активации","settings.redeemServerDesc":"Настройте адрес службы LicenseSystem для функции активации карт","settings.redeemServerSaved":"Адрес сервера активации сохранён","settings.redeemServerCleared":"Адрес сервера активации очищен","settings.detectFailed":"Обнаружение не удалось","settings.noBrowserFound":"Браузер не обнаружен в общих путях, пожалуйста, введите путь вручную","settings.detectSuccess":"Обнаружение успешно","settings.systemProxyDetected":"Системный прокси обнаружен","settings.noProxyDetected":"Прокси не обнаружен","settings.noProxyConfigured":"Система не настроена с прокси, пожалуйста, введите вручную","settings.proxyConfigured":"Прокси обнаружен","settings.proxyNotEnabled":"Системный прокси настроен, но не включён","settings.tunModeDetected":"Режим TUN обнаружен","settings.tunModeEnabled":"Система использует прокси в режиме TUN","settings.tunModeHint":"Настройка прокси не требуется в режиме TUN, сетевой трафик автоматически перенаправляется","settings.useThisProxy":"Использовать этот прокси?","settings.running":"Работает","settings.notRunning":"Не работает","settings.start":"Запустить","settings.stop":"Остановить","settings.deviceId":"ID устройства","settings.resetAll":"Сбросить всё","settings.resetting":"Сброс...","settings.resetRequiresClose":"Сброс ID устройства требует закрытия Kiro IDE","settings.currentMachineGuid":"Текущий системный GUID машины","settings.hasBackup":"Резервная копия существует","settings.backupValue":"Значение резервной копии","settings.backupTime":"Время резервного копирования","settings.computerName":"Имя компьютера","settings.bindMachineId":"Привязать ID машины к аккаунту","settings.bindMachineIdDesc":"Каждый аккаунт использует фиксированный ID машины, автоматически восстанавливает соответствующий ID машины при переключении","settings.useBoundMachineId":"Использовать привязанный ID машины","settings.useBoundMachineIdDesc":"При включении использует привязанный к аккаунту ID машины; при отключении генерирует новый случайный ID машины каждый раз","settings.closeKiroIDE":"Закрыть Kiro IDE","settings.kiroRunningNeedClose":"Kiro IDE обнаружен работающим, необходимо закрыть его перед сбросом ID машины.\n\nЗакрыть Kiro IDE и продолжить?","settings.closeAndContinue":"Закрыть и продолжить","settings.closeKiroFailed":"Не удалось закрыть Kiro IDE","settings.confirmResetMachineId":"Вы уверены, что хотите сбросить все ID машины?","settings.resetSuccess":"Сброс успешен","settings.resetFailed":"Сброс не удался","settings.machineIdResetSuccess":"ID машины сброшен!\n\nЗапустить Kiro IDE сейчас?","settings.resetMachineIdFailed":"Не удалось сбросить ID машины","settings.backupSuccess":"Резервное копирование успешно","settings.backupFailed":"Резервное копирование не удалось","settings.machineGuidBackedUp":"Системный GUID машины сохранён","settings.restoreFailed":"Восстановление не удалось","settings.restoreSuccess":"Восстановление успешно","settings.noBackupFound":"Резервная копия не найдена","settings.restoreMachineGuid":"Восстановить системный GUID машины","settings.confirmRestoreMachineGuid":"Вы уверены, что хотите восстановить системный GUID машины к значению резервной копии?","settings.requiresAdmin":"Эта операция требует прав администратора, возможно потребуется запуск программы от имени администратора.","settings.machineGuidRestored":"Системный GUID машины восстановлен к","settings.resetSystemMachineGuid":"Сбросить системный GUID машины","settings.confirmResetSystemMachineGuid":"Вы уверены, что хотите сгенерировать новый системный GUID машины?\n\nЭта операция:\n• Сгенерирует новый случайный UUID\n• Запишет в системный реестр\n• Может повлиять на проверку авторизации некоторых программ\n• Требует прав администратора\n• Рекомендуется сначала создать резервную копию текущего значения","settings.confirmReset":"Подтвердить сброс","settings.newMachineGuid":"Новый системный GUID машины","settings.detectBrowsersTitle":"Автообнаружение установленных браузеров","settings.detectProxyTitle":"Автообнаружение системного прокси","settings.machineGuidDescWin":"Управление системным MachineGuid Windows (реестр HKLM\\SOFTWARE\\Microsoft\\Cryptography)","settings.machineGuidDescMac":"Управление системным кодом машины macOS (реализовано путём перезаписи файлов, не влияет на UUID оборудования)","settings.machineGuidDescLinux":"Управление системным кодом машины Linux (/etc/machine-id)","settings.adminWarningTitle":"Важные примечания","settings.adminWarning1":"Изменение системного кода машины требует прав администратора","settings.adminWarning2":"Может повлиять на проверку авторизации некоторых программ","settings.adminWarning3":"Рекомендуется создать резервную копию текущего значения перед изменением","settings.appDataDir":"Каталог данных приложения","settings.appDataDirDesc":"Просмотр и управление местом хранения данных приложения","settings.currentPath":"Текущий путь","settings.openInExplorer":"Открыть в проводнике","settings.appDataDirTip":"Этот каталог содержит данные аккаунтов, файлы конфигурации, журналы и другие данные приложения","settings.openFailed":"Открытие не удалось","settings.kiroIdePath":"Пользовательский путь установки Kiro IDE","settings.kiroIdePathDesc":"Укажите место установки Kiro IDE для функции переключения аккаунтов","settings.customKiroPath":"Пользовательский путь","settings.useDefaultPath":"Использовать путь по умолчанию","settings.kiroPathTip":"Оставьте пустым для использования системного пути установки по умолчанию. Нажмите 'Обзор' для выбора пользовательского места установки","settings.browse":"Обзор","settings.clear":"Очистить","settings.usingDefaultPath":"Использование пути по умолчанию","settings.kiroPathSaved":"Пользовательский путь Kiro сохранён","settings.kiroPathCleared":"Пользовательский путь Kiro очищен","settings.restart":"Перезапуск","settings.restartFailed":"Перезапуск не удался","settings.macOSNote":"Примечание macOS","settings.macOSNoteDesc":"macOS реализует изменение кода машины путём записи в файл machineid Kiro IDE, права администратора не требуются.","settings.kiroSettings":"Настройки Kiro IDE","settings.kiroSettingsDesc":"Настройте параметры функций Kiro IDE","settings.enableCodebaseIndexing":"Включить индексацию кода","settings.enableCodebaseIndexingDesc":"При включении Kiro автоматически индексирует код для лучшего понимания и поиска кода","settings.trustedCommands":"Доверенные команды","settings.trustedCommandsNone":"Отключено - Все команды требуют подтверждения","settings.trustedCommandsCommon":"Общие - Только команды чтения/сборки/тестирования","settings.trustedCommandsAll":"Все - Все команды выполняются автоматически (опасно)","settings.trustedCommandsDesc":"Настройте уровень доверия при выполнении команд Shell в Kiro (требует перезапуска IDE для вступления в силу)","settings.trustedCommandsAllConfirmTitle":"Подтвердить доверие всем командам","settings.trustedCommandsAllConfirmMessage":"При включении Kiro может автоматически выполнять любые команды Shell, включая сценарии установки, изменения файлов и деструктивные операции Git. Это значительно расширяет поверхность рисков, продолжить?","settings.trustedCommandsAllConfirmAction":"Всё равно включить","settings.trustedCommandsWildcardBlocked":"режим common не позволяет *, переключитесь на 'Полное доверие', если нужно доверить всё","settings.agentSettings":"Настройки агента","settings.agentSettingsDesc":"Настройте стартовый экран, автономный режим и переключатели функций агента Kiro","settings.agentAutonomy":"Режим автономии агента","settings.agentSupervised":"Контролируемый - Изменения требуют подтверждения","settings.agentAutopilot":"Автопилот - Автоматическое выполнение изменений","settings.enableTabAutocomplete":"Включить автозаполнение Tab","settings.usageSummary":"Показать сводку использования","settings.enableDebugLogs":"Включить журналы отладки","settings.notifications":"Настройки уведомлений","settings.notificationsDesc":"Выберите события для уведомлений","settings.notifyActionRequired":"Уведомлять при необходимости действия","settings.notifyFailure":"Уведомлять при сбое","settings.notifySuccess":"Уведомлять об успехе","settings.notifyBilling":"Уведомления о выставлении счетов","settings.trustedTools":"Доверенные инструменты","settings.trustedToolsDesc":"Список инструментов, которые агент может использовать автоматически, через запятую (например, webFetch, remote_web_search)","settings.trustedToolsPlaceholder":"webFetch, remote_web_search","settings.referenceTracker":"Отслеживание ссылок на код","settings.configureMCP":"Конфигурация MCP","settings.configureMCPEnabled":"Включено - Разрешить Powers регистрировать службы MCP","settings.configureMCPDisabled":"Отключено - Не автоматически регистрировать службы MCP","settings.configureMCPDesc":"Управляет авторегистрацией служб MCP и тем, какие переменные окружения можно подставлять в конфиге MCP (обычно требуется перезапуск IDE)","settings.permissions":"Правила доступа","settings.permissionsDesc":"Модель прав доступа Kiro IDE 1.0 на основе возможностей (capability). Правила читаются из и сохраняются в ~/.kiro/settings/permissions.yaml, которая является единственным источником истины для решений о доступе в этой версии.","settings.loading":"Загрузка...","settings.save":"Сохранить","settings.permissionSaveError":"Не удалось сохранить права доступа, повторите попытку","settings.permissionCapability":"Возможность (capability)","settings.permissionEffect":"Эффект","settings.permissionEffect_allow":"Разрешить","settings.permissionEffect_deny":"Запретить","settings.permissionEffect_ask":"Спросить","settings.permissionMatch":"Совпадение (match)","settings.permissionExclude":"Исключение (exclude)","settings.permissionRemove":"Удалить правило","settings.permissionAdd":"Добавить правило","settings.permissionPolicies":"Политики (policies)","settings.permissionPreset":"Встроенные пресеты","settings.permissionPreset_read-all":"Разрешить чтение файлов в любом месте (включая вне рабочей области) и доступ к сети","settings.permissionPreset_read-only-shell":"Разрешить команды оболочки только для чтения (сведения о системе, запросы git/cargo/npm)","settings.permissionPreset_read-workspace":"Разрешить чтение файлов внутри рабочей области","settings.permissionShellGroup":"Группа команд только для чтения","settings.permissionShellGroupPick":"Добавить группу команд…","settings.permissionNote":"Подсказка: правила с эффектом 'allow' расширяют права, 'deny' имеет приоритет над 'allow'; несовпавшие правила используют поведение по умолчанию IDE.","settings.permissionScope_global":"Глобально","settings.permissionScope_project":"Проект","settings.permissionPickProject":"Выберите проект…","settings.permissionProjectPathPlaceholder":"Введите абсолютный путь к проекту, например E:/code/my-project","settings.permissionNoWorkspaceRoots":"Каталог прав уровня проекта пока не найден (~/.kiro/workspace-roots/*). Он создаётся после открытия проекта в Kiro.","settings.permissionTargetPath":"Путь записи","settings.permissionEdit":"Изменить","settings.permissionEditTitle":"Изменить правило","settings.permissionNew":"Новое правило","settings.permissionCancel":"Отмена","settings.permissionConfirm":"Подтвердить","settings.permissionEmpty":"Правил пока нет. Добавьте правило, чтобы начать.","settings.permissionUnsaved":"Не сохранено","settings.permissionExcludeShort":"искл.","settings.agentAdvanced":"Agent: дополнительно","settings.agentAdvancedDesc":"Параметры Agent, добавленные в Kiro 1.0; двусторонняя синхронизация с settings.json IDE","settings.agentToolCardDisplayMode":"Отображение карточек инструментов","settings.agentToolCardDisplayModeDesc":"Как ведут себя карточки инструментов в чате после завершения","settings.agentToolCard_collapseOnComplete":"Сворачивать по завершении","settings.agentToolCard_alwaysExpanded":"Всегда развёрнуто","settings.agentTerminalCommandTimeout":"Таймаут команды терминала (мс)","settings.agentTerminalCommandTimeoutPlaceholder":"Пусто = встроенное значение","settings.agentTerminalCommandTimeoutDesc":"Максимальное время выполнения команды терминала; пусто — встроенное значение Kiro","settings.agentArtifactsAutoOpen":"Автооткрытие панели при артефакте","settings.agentIgnoreFiles":"Файлы игнорирования","settings.agentIgnoreFilesDesc":"Файлы игнорирования (напр. .gitignore), которые учитывает Kiro Agent, по одному в строке","settings.agentTrust":"Доверие и автоодобрение","settings.agentTrustDesc":"Предвыбранный шаблон и область для «Всегда разрешать» / «Всегда запрещать», а также команды, одобряемые без запроса","settings.agentTrustDefaultPattern":"Шаблон команды по умолчанию","settings.agentTrustPattern_full":"Полная команда (full)","settings.agentTrustPattern_partial":"Частичное совпадение (partial)","settings.agentTrustPattern_base":"Базовая команда (base)","settings.agentTrustDefaultScope":"Область по умолчанию","settings.agentTrustScope_user":"Пользователь (user)","settings.agentTrustScope_workspace":"Рабочая область (workspace)","settings.agentTrustScope_session":"Сессия (session)","settings.agentAutoApproveCommands":"Автоодобряемые команды","settings.agentAutoApproveCommandsDesc":"Шаблоны команд, одобряемых без подтверждения, по одному в строке","settings.agentExperiments":"Эксперименты и дополнительно","settings.agentExperimentsDesc":"Флаги экспериментов и дополнительные параметры Kiro; могут меняться между версиями","settings.agentExperimentCloudConfig":"Облачная конфигурация (cloudConfig)","settings.agentExperimentWorkspaceManager":"Менеджер рабочих областей (workspaceManager)","settings.agentMcpApprovedEnvVars":"Разрешённые переменные окружения MCP","settings.agentMcpApprovedEnvVarsDesc":"Переменные окружения, разрешённые к подстановке в конфиге MCP, по одной в строке","settings.agentEditorActionsPrompts":"Промпты действий редактора (JSON)","settings.agentEditorActionsPromptsDesc":"Свои промпты для действий контекстного меню редактора, объект JSON; каждое значение заменяет встроенный промпт","settings.agentRemoteSessionsEndpoint":"Адрес портала удалённых сессий","settings.agentRemoteSessionsEndpointDesc":"Базовый адрес облачного портала Kiro, используется для «Открыть удалённую сессию в браузере». Оставьте пустым, чтобы использовать встроенное значение https://app.kiro.dev. Этот ключ не объявлен в схеме конфигурации Kiro (скрытый ключ), но он работает.","settings.agentRemoteSessionsEndpointInvalid":"Введите корректный адрес http/https, например https://app.kiro.dev","settings.agentRemoteSessionsEnvOverride":"Текущее значение переопределено переменной окружения","settings.agentRemoteSessionsEnvOverrideDesc":"Переменная окружения KIRO_REMOTE_SESSIONS_ENDPOINT имеет приоритет над указанным здесь адресом, и применяется именно она. Чтобы эта настройка вступила в силу, удалите переменную окружения и перезапустите Kiro.","settings.agentStartupMode":"Режим запуска","settings.agentStartupModeDesc":"Какой раздел Kiro открывает при запуске по умолчанию","settings.agentStartupMode_code":"Редактор кода","settings.agentStartupMode_agentFocus":"Фокус на агенте","settings.agentNumberInvalid":"Введите корректное неотрицательное число","settings.agentJsonInvalid":"Некорректный JSON","settings.openSettingsFile":"Редактировать настройки Kiro","settings.telemetry":"Телеметрия и конфиденциальность","settings.telemetryDesc":"Управление типами данных, собираемых Kiro IDE","settings.telemetryContentCollection":"Сбор содержимого (для улучшения службы)","settings.telemetryUsageAnalytics":"Аналитика использования и метрики производительности","settings.telemetryEditStats":"Статистика редактирования","settings.telemetryFeedback":"Данные обратной связи","settings.telemetryPromptLogging":"Отправлять журналы промптов","settings.telemetryEditStatsDetails":"Статистика правок: детали","settings.telemetryEditStatsDecorations":"Статистика правок: оформление в редакторе","settings.telemetryEditStatsStatusBar":"Статистика правок: статус-бар","settings.closeWindowBehavior":"Поведение при закрытии окна","settings.closeWindowBehaviorDesc":"Настроить поведение при нажатии кнопки закрытия","settings.minimizeToTray":"Минимизировать в трей","settings.minimizeToTrayHint":"(Рекомендуется, фоновые задачи продолжают работать)","settings.minimizeToTrayEnabled":"✓ При закрытии окна минимизировать в системный трей, фоновые задачи продолжают работать. Нажмите на значок трея для повторного открытия окна.","settings.minimizeToTrayDisabled":"✗ При закрытии окна выйти из приложения, все фоновые задачи остановятся.","settings.invalidProxyFormat":"Недопустимый формат прокси, пожалуйста, используйте URL, начинающийся с http://, https:// или socks5://","settings.invalidBrowserPath":"Недопустимый путь к браузеру, пожалуйста, убедитесь, что это путь к исполняемому файлу (.exe, .app и т.д.)","settings.privacyMode":"Режим конфиденциальности","settings.privacyModeDesc":"При включении адреса электронной почты на интерфейсе будут скрыты","settings.privacyModeHint":"Скрытие электронной почты","settings.autoSwitch":"Автопереключение при низком балансе","settings.autoSwitchDesc":"Автоматически переключаться на другой доступный аккаунт, когда баланс текущего аккаунта ниже порога","settings.autoSwitchThreshold":"Порог ≤","settings.autoSwitchInterval":"Интервал проверки","accounts.title":"Управление аккаунтами","accounts.subtitle":"Управляйте аккаунтами Kiro IDE","accounts.search":"Поиск аккаунтов...","accounts.add":"Добавить аккаунт","accounts.import":"Импорт","accounts.export":"Экспорт","accounts.exportSelectFirst":"Сначала выберите аккаунты для экспорта","accounts.refreshList":"Обновить список","accounts.refresh":"Обновить","accounts.refreshAll":"Массовое обновление","accounts.refreshSelectFirst":"Сначала выберите аккаунты для обновления","accounts.delete":"Удалить","accounts.switch":"Переключить","accounts.edit":"Редактировать","accounts.detail":"Детали","accounts.remark":"Примечание","accounts.provider":"Провайдер","accounts.used":"Использовано","accounts.active":"Активен","accounts.banned":"Заблокирован","accounts.invalid":"Недействителен","accounts.expired":"Истёк","accounts.capped":"Лимит исчерпан","accounts.noAccounts":"Нет аккаунтов","accounts.addFirst":"Нажмите 'Добавить аккаунт' выше для начала","accounts.confirmDelete":"Вы уверены, что хотите удалить этот аккаунт?","accounts.confirmDeleteMultiple":"Вы уверены, что хотите удалить выбранные {{count}} аккаунтов?","accounts.deleteSuccess":"Удаление успешно","accounts.deleteFailed":"Удаление не удалось","accounts.switchSuccess":"Переключение успешно","accounts.switchFailed":"Переключение не удалось","accounts.refreshSuccess":"Обновление успешно","accounts.refreshFailed":"Обновление не удалось","accounts.accountBanned":"Аккаунт заблокирован и не может использоваться","accounts.tokenInvalid":"Токен недействителен, пожалуйста, войдите снова","accounts.importSuccess":"Импорт успешен","accounts.exportSuccess":"Экспорт успешен","accounts.exportFailed":"Экспорт не удался","accounts.selectAll":"Выбрать все","accounts.deselectAll":"Снять выбор","accounts.batchRefresh":"Массовое обновление","accounts.batchDelete":"Массовое удаление","accounts.batchOperationMode":"Режим пакетных операций","accounts.batchEditTagsAndGroups":"Пакетное редактирование (теги и группы)","accounts.batchEdit":"Пакетное редактирование","accounts.totalCount":"Всего {{count}} аккаунтов","accounts.displayCount":"{{current}} / {{total}} аккаунтов","accounts.email":"Email","accounts.accountType":"Тип аккаунта","accounts.subscriptionType":"Тип подписки","accounts.quota":"Квота","accounts.status":"Статус","accounts.machineCode":"Машинный код","accounts.expiryTrial":"Истечение/Пробный","accounts.group":"Группа","accounts.tags":"Теги","accounts.accountCount":"{{count}} аккаунтов","accounts.enterNewGroupName":"Введите новое имя группы...","accounts.noGroup":"Без группы","accounts.selected":"Выбрано","accounts.noTagsSelected":"Теги не выбраны","accounts.searchOrEnterNewTag":"Поиск или ввод нового тега...","accounts.pressEnterToCreate":'Нажмите Enter для создания "{{name}}"',"accounts.searchOrCreateTagHint":"Введите для поиска существующих тегов или введите напрямую для создания новых","accounts.daysRemaining":"Осталось дней","accounts.days":"дней","accounts.remaining":"Осталось","accounts.overage":"Превышение","accounts.format":"Форматировать","accounts.socialTemplate":"Social шаблон","accounts.builderIdTemplate":"BuilderId шаблон","accounts.enterpriseTemplate":"Enterprise шаблон","accounts.cardView":"Вид карточек","accounts.tableView":"Вид списка","accounts.redeem":"Активировать","accounts.importFromKiroIDE":"Импорт аккаунтов из Kiro IDE","accounts.importFromKiroIDEDescription":"Автоматически читать кэшированную информацию об аккаунтах Kiro IDE (~/.aws/sso/cache/kiro-auth-token.json)","accounts.detectingKiroIDEAccounts":"Обнаружение аккаунтов Kiro IDE...","accounts.detectionFailed":"Обнаружение не удалось","accounts.retryDetection":"Повторить обнаружение","accounts.detectedAccounts":"Обнаружено {{count}} аккаунтов","accounts.noKiroIDEAccountsDetected":"Аккаунты Kiro IDE не обнаружены","accounts.pleaseLoginToKiroIDEFist":"Сначала войдите в Kiro IDE","accounts.validationMissingRefreshToken":"Строка {{index}}: Отсутствует refreshToken","accounts.validationInvalidRefreshTokenFormat":"Строка {{index}}: Неверный формат refreshToken (должен начинаться с aor)","accounts.validationSocialProviderRequired":"Строка {{index}}: Social аккаунты должны указывать provider (Google/Github)","accounts.validationInvalidProvider":"Строка {{index}}: Provider должен быть {{providers}}","accounts.validationSocialProviderInvalid":"Строка {{index}}: Provider Social аккаунта должен быть Google/Github","accounts.validationIdcProviderInvalid":"Строка {{index}}: Provider IdC аккаунта должен быть BuilderId/Enterprise","accounts.validationEnterpriseRegionRequired":"Строка {{index}}: Enterprise аккаунты должны предоставлять поле region","accounts.validationEnterpriseStartUrlRequired":"Строка {{index}}: Enterprise аккаунты должны предоставлять поле startUrl","accounts.jsonParseFailed":"Ошибка парсинга JSON: {{message}}","accounts.addedAccounts":"✅ Добавлено {{count}} аккаунтов","accounts.updatedAccounts":"📝 Обновлено {{count}} аккаунтов","accounts.failedAccounts":"❌ Неудачно {{count}} аккаунтов","accounts.importingFromKiro":"Импорт из Kiro...","accounts.importingFromKiroCli":"Импорт из kiro-cli...","accounts.pleaseWait":"Пожалуйста, подождите...","accounts.unknownAccount":"Неизвестный аккаунт","accounts.importFailed":"Импорт не удался","accounts.browse":"Обзор","accounts.addedAccount":"✅ Добавлен аккаунт","accounts.updatedAccount":"📝 Обновлён аккаунт","accounts.reset":"сброс","accounts.accountCannotSwitch":"Аккаунт {{status}} нельзя переключить","accounts.tag":"Тег","accounts.providerAccountLabel":"Аккаунт Kiro {{provider}}","accounts.kiroCliImportedLabel":"Импортировано из kiro-cli ({{tokenKey}})","accounts.networkConnectionFailed":"❌ Сбой сетевого подключения\n\nВозможные причины:\n• Нестабильная сеть\n• Неверные настройки прокси\n• Блокировка брандмауэром\n\nРешения:\n1. Проверьте сетевое подключение\n2. Проверьте настройки прокси\n3. Отключите брандмауэр или добавьте в белый список","accounts.deleteCurrentAccount":"⚠️ Удалить текущий аккаунт","accounts.deleteCurrentAccountMessage":"Вы удаляете используемый сейчас аккаунт!\n\nПосле удаления Kiro IDE не будет работать, и вам нужно будет войти снова.\n\nВы уверены, что хотите удалить?","accounts.deleteRemoteWarning":"Удаление на расстоянии отменит регистрацию этого аккаунта в сервисе AWS!\n\nЭта операция не может быть отменена, и аккаунт будет навсегда недействителен.","accounts.batchDeleteIncludesCurrent":"⚠️ Пакетное удаление включает текущий аккаунт","accounts.batchDeleteIncludesCurrentMessage":"Вы выбрали {{count}} аккаунтов, включая используемый сейчас аккаунт!\n\nПосле удаления Kiro IDE не будет работать, и вам нужно будет войти снова.\n\nВы уверены, что хотите удалить?","login.title":"Авторизация на рабочем столе","login.subtitle":"Выберите способ входа","login.google":"Google","login.github":"Github","login.builderId":"AWS Builder ID","login.idc":"IAM Identity Center","login.logging":"Вход...","login.success":"Вход успешен","login.failed":"Вход не удался","login.cancelled":"Вход отменён","login.cancelFailed":"Отмена входа не удалась","login.cancelling":"Отмена...","login.timeout":"Тайм-аут входа","login.signIn":"Войти","login.cancel":"Отмена","login.agreement":"Входя, вы соглашаетесь с","login.awsAgreement":"Соглашением с клиентом AWS","login.serviceTerms":"Условиями обслуживания","login.privacy":"Заявлением о конфиденциальности","login.and":"и","login.ipLicense":"Лицензией на интеллектуальную собственность AWS","login.enterprisePrompt":"Пожалуйста, введите Start URL AWS IAM Identity Center вашего предприятия","login.startUrl":"Start URL","login.startUrlExample":"Пример: https://d-90661d346f.awsapps.com/start","login.startUrlRequired":"Пожалуйста, введите Start URL","login.startUrlInvalid":"Start URL должен начинаться с https://","login.region":"Регион AWS","login.regionExample":"Пример: us-east-1, ap-southeast-2, eu-west-1","login.waitingTitle":"Ожидание авторизации","login.waitingMessage":"Ожидание завершения авторизации {{provider}} в браузере...","login.waitingHint":"Если браузер не открывается автоматически, пожалуйста, откройте страницу авторизации вручную.","login.waitingCloseHint":"Нажатие отмены прервёт текущий процесс входа, вы можете инициировать вход снова позже.","login.continue":"Продолжить","about.title":"О программе","about.appName":"Kiro Account Manager","about.appDesc":"Интеллектуальное управление токенами доступа Kiro, переключение одним кликом, мониторинг квоты","about.version":"Версия","about.checkUpdate":"Проверить обновления","about.checking":"Проверка","about.upToDate":"Уже актуально","about.newVersion":"Найдена новая версия {{version}}","about.download":"Обновить сейчас","about.downloading":"Загрузка...","about.updateFailed":"Проверка не удалась, пожалуйста, попробуйте позже","about.techStack":"Технологический стек","about.frontend":"Фронтенд","about.ui":"Интерфейс","about.backend":"Бэкенд","about.links":"Ссылки","about.website":"Веб-сайт","about.tutorial":"Учебник","about.tgChannel":"Канал Kiro Account Manager","about.tgGroup":"Сообщество Kiro Account Manager","about.shop":"Kiro Gateway","about.donate":"Купить мне кофе ☕","about.donateDesc":"Если этот инструмент помог вам, приглашаю купить мне кофе. Ваша поддержка - моя мотивация продолжать обновления ❤️","about.sponsorBenefits":"Преимущества спонсоров","about.sponsorNote":"Совет: при спонсировании укажите имя пользователя или email. Используйте тот же комментарий в заявке на вступление в группу спонсоров для быстрого одобрения","about.benefit1":"⚡ Приоритетный ответ на проблемы","about.benefit2":"🎯 Приоритетная реализация функций","about.benefit3":"🔧 Индивидуальная техническая поддержка","about.sponsorGroup":"Группа спонсоров","about.sponsorGroupDesc":"Присоединяйтесь к эксклюзивной QQ группе спонсоров для приоритетной поддержки","about.qqGroup":"QQ группа","about.joinGroup":"Присоединиться","about.alipay":"Alipay","about.wechat":"WeChat Pay","about.clickToEnlarge":"Нажмите на изображение для увеличения","about.contactTelegram":"Связаться Telegram","about.madeWith":"Сделано с","about.by":"от","agentConfig.title":"Конфигурация агента","agentConfig.subtitle":"Управление службами MCP агента, правилами разрешений, правилами Steering, Skills, Hooks, Custom Agents и Powers","agentConfig.overview":"Обзор","agentConfig.groupCapabilities":"Возможности","agentConfig.groupBehavior":"Поведение","agentConfig.groupSpecs":"Спецификации","agentConfig.manage":"Управлять","agentConfig.mcpToolsWarning":"Большое количество инструментов MCP может замедлить выбор инструментов и увеличить расход контекста. Отключите неиспользуемые серверы.","agentConfig.checkTitle":"Проверка конфигурации","agentConfig.checkMcpTools":"Инструменты MCP","agentConfig.checkMcpToolsHigh":"Около {n} инструментов могут замедлить выбор и увеличить расход контекста","agentConfig.checkMcpToolsOk":"Около {n} инструментов, нагрузка в норме","agentConfig.checkMcpServers":"Серверы MCP","agentConfig.checkMcpNone":"Серверы MCP не настроены","agentConfig.checkMcpOk":"{n} серверов включено","agentConfig.checkMcpDisabled":", {n} отключено","agentConfig.checkPerms":"Поверхность разрешений","agentConfig.checkPermsOpen":"{n} возможностей полностью разрешены (без ограничений) — проверьте, так ли задумано","agentConfig.checkPermsOk":"Правила разрешения ограничены областью","agentConfig.checkCloud":"Облачное управление","agentConfig.checkCloudOn":"Управляется Kiro Cloud, локальная запись отключена","agentConfig.checkCloudOff":"Локальная конфигурация доступна для записи","agentConfig.groupBoundaries":"Границы","agentConfig.checkMemoryMode":"Режим памяти","agentConfig.checkMemoryOff":"Память выключена — сессии Kiro не читают и не обучаются; включите на вкладке «Память»","agentConfig.checkMemoryOn":"Память включена — сессии могут читать и записывать память","agentConfig.checkBehaviorAssets":"Поведенческие активы","agentConfig.checkBehaviorEmpty":"Hooks / Steering / AGENTS.md не настроены — начните с шаблонов Steering","agentConfig.checkBehaviorOk":"{n} поведенческих активов настроено","agentConfig.memoryOffBanner":"Память выключена: сессии Kiro не читают и не обучают память; изменения здесь сохраняются в локальное хранилище и вступят в силу после включения.","agentConfig.mcpSource_user":"Пользователь","agentConfig.mcpSource_userDesc":"Настроено в пользовательском mcp.json, действует глобально","agentConfig.mcpSource_project":"Проект","agentConfig.mcpSource_projectDesc":"Действует только в этом проекте (в пользовательском файле одноимённой записи нет)","agentConfig.mcpSource_overridden":"Переопределён","agentConfig.mcpSource_overriddenDesc":"Проектная запись переопределяет пользовательскую; показана действующая версия","agentConfig.mcpSource_redundant":"Избыточно","agentConfig.mcpSource_redundantDesc":"Проектная запись идентична пользовательской — копия в проекте избыточна и может быть удалена","agentConfig.mcpSource_power":"Плагин","agentConfig.mcpSource_powerDesc":"Зарегистрировано плагином Powers (url-тип)","agentConfig.skillInvalid":"Ошибки","agentConfig.assetDuplicate":"Дубль","agentConfig.assetDuplicateDesc":"Одно имя в пользовательской и проектной области — стоит дедуплицировать","agentConfig.recentProjects":"Недавние проекты","agentConfig.browseDir":"Обзор…","agentConfig.projectScope":"Область проекта","agentConfig.memoryPreviewTitle":"Предпросмотр инъекции (симуляция)","agentConfig.memoryPreviewDisabled":"Память выключена — ничего не внедряется","agentConfig.memoryPreviewResident":"Постоянный слой","agentConfig.memoryPreviewManifest":"Индексный слой","agentConfig.memoryPreviewDropped":"Слишком длинные, отброшены","agentConfig.memoryPreviewPrefQuota":"Квота предпочтений","agentConfig.memories":"Память","agentConfig.memoryScopeAll":"Все","agentConfig.scopeTagProject":"Проект","agentConfig.scopeTagUser":"Пользователь","common.format":"Форматировать","mcp.loadFailed":"Не удалось загрузить конфиг MCP","mcp.toggleFailed":"Не удалось изменить состояние","mcp.toolCountTitle":"Много инструментов MCP","mcp.toolCountDesc":"Настроено около {{tools}} инструментов MCP ({{servers}} серверов). Избыток инструментов может снижать качество выбора инструментов и увеличивать расход контекста. Рекомендуется отключить редко используемые серверы.","mcp.configLabel":"Конфиг","mcp.autoApproveHint1":"autoApprove поддерживает подстановку","mcp.autoApproveHint2":"— автоподтверждение всех инструментов этого сервера","mcp.quickFill":"Быстрое заполнение","mcp.jsonFormatsHint":'Допустимы форматы { "name": config } и { "mcpServers": { ... } }',"mcp.saveToLabel":"Сохранить в:","mcp.saveToGlobal":"Глобально (уровень пользователя)","mcp.saveToProject":"Текущий проект","mcp.dupExistsPrefix":"Эти серверы уже существуют:","mcp.dupOverwriteNote":"(будут перезаписаны)","mcp.dupSkipNote":"(будут пропущены)","mcp.dupRenameNote":"(будут переименованы автоматически)","mcp.conflictLabel":"При конфликте:","mcp.conflictSkip":"Пропустить (рекомендуется)","mcp.conflictOverwrite":"Перезаписать","mcp.conflictRename":"Переименовать","mcp.addCount":"Добавить {{count}}","mcp.errJsonFormat":"Ошибка формата JSON","mcp.errClipboardJson":"Содержимое буфера — недействительный JSON","mcp.errMissingCommand":"Отсутствует поле command","mcp.msgNoValidConfig":"Нет действительного конфига","mcp.resPartialFailed":"Частично не удалось: {{names}}","mcp.resSucceeded":"Успешно: {{names}}","mcp.resSkipped":"Пропущено: {{names}}","mcp.resRenamed":"Переименовано: {{names}}","mcp.resNoneAdded":"Ни один сервер не добавлен, пропущено: {{names}}","mcp.resAdded":"добавлено {{count}}","mcp.resSkippedCount":"пропущено {{count}}","mcp.resRenamedCount":"переименовано {{count}}","mcp.resProcessed":"Серверы MCP обработаны: {{parts}}","mcp.listSep":"; ","steering.savedWithIssuesTitle":"Steering сохранён, но есть проблемы соответствия","steering.savedWithIssuesDesc":"Kiro 1.1.70 понизит уровень или пропустит этот файл:\n\n{{detail}}\n\nПродолжить редактирование, чтобы исправить?","steering.selectMode":"Выберите режим","skills.savedWithIssuesTitle":"Skill сохранён, но есть проблемы соответствия","skills.savedWithIssuesDesc":"Kiro 1.1.70 молча пропустит некорректный skill:\n\n{{issues}}\n\nПродолжить редактирование, чтобы исправить?","workflows.savedWithIssues":"Workflow сохранён, но есть проблемы со схемой (валидация Kiro перед запуском отклонит его):\n\n• {{issues}}","agents.modelDefault":"По умолчанию (как в основном чате)","hooks.commandPlaceholder":"замените на реальную команду","mcp.namesEtc":"(всего {{count}})","mcp.partsSep":", ","agents.bodyPlaceholder":"Напишите системный промпт агента здесь","skills.bodyPlaceholder":"Напишите инструкции для skill здесь","steering.bodyPlaceholder":"Добавьте правила steering здесь","agentConfig.memoryMode":"Режим памяти","agentConfig.memoryModeDesc":"Управляет использованием и обучением памяти между сессиями (записывает kiroAgent.memory в settings.json)","agentConfig.memoryMode_off":"Выключено","agentConfig.memoryMode_useOnly":"Только использование","agentConfig.memoryMode_useWithoutLearning":"Использовать без обучения","agentConfig.memoryMode_useAndLearn":"Использовать и обучаться","agentConfig.memoriesEmpty":"Память пока пуста","agentConfig.memoriesDbMissing":"Memory никогда не включалась, хранилища нет","agentConfig.memoryContent":"Содержимое","agentConfig.memoryWhy":"Почему","agentConfig.memoryHowToApply":"Как применять","agentConfig.memorySession":"Исходная сессия","agentConfig.memoryCreate":"Новая запись","agentConfig.memoryEdit":"Редактировать запись","agentConfig.memoryFieldTitle":"Заголовок","agentConfig.memoryFieldTitleHint":"Только буквы, цифры и дефисы, до 64","agentConfig.memoryFieldType":"Тип","agentConfig.memoryFieldScopes":"Области (через запятую)","agentConfig.memoryFieldSummary":"Краткое описание (до 250)","agentConfig.memoryLoadMore":"Загрузить ещё","agentConfig.memoryDeleteConfirmTitle":"Удалить память","agentConfig.memoryDeleteConfirm":"Эта память будет удалена из хранилища (области удалятся каскадно). Продолжить?","settings.sandboxTitle":"Песочница команд","settings.sandboxDesc":"Ограничивает доступ команд агента и дочерних процессов (Kiro IDE 1.3+, отдельный sandbox.json; проект может только ужесточать активную глобальную политику)","settings.sandboxEnabled":"Включить песочницу команд","settings.sandboxEnabledDesc":"Граница ОС вокруг команд агента и их дочерних процессов","settings.sandboxNetwork":"Исходящая сеть","settings.sandboxNetwork_DEFAULT_BLOCKED":"Блокировать по умолчанию","settings.sandboxNetwork_COMMON_DEPENDENCIES":"Разрешить типовые сервисы разработки","settings.sandboxNetwork_DEFAULT_ALLOWED":"Разрешить всё","settings.sandboxWindowsHint":"В Windows последние два режима требуют однократной настройки от администратора (IDE предложит; CLI: /sandbox setup). Без неё команды идут без изоляции ОС","settings.sandboxMcp":"Изолировать stdio MCP","settings.sandboxMcpDesc":"Запускать процессы stdio MCP в той же песочнице (переключение перезапускает локальные MCP, ~1 мин)","settings.sandboxProjectRoot":"Каталог проекта (необязательно)","settings.sandboxProjectHint":"Укажите корень проекта для управления его sandbox.json. Настройки проекта могут только ужесточать: более мягкие значения игнорируются.","settings.sandboxProjectEnabled":"Включить на уровне проекта","settings.sandboxProjectEnabledDesc":"Записывает /.kiro/settings/sandbox.json; не действует, пока глобально выключено","settings.sandboxEffective":"Фактически","agentConfig.cloudReadOnly":"Облачная конфигурация доступна только для чтения","agentConfig.cloudReadOnlyDesc":"Kiro Cloud управляет этой конфигурацией (kiroAgent.experiments.cloudConfig включён). Эти элементы — реплики только для чтения; запись здесь отключена. Редактируйте в Kiro Web.","agentConfig.mcp":"Службы MCP","agentConfig.steering":"Steering","agentConfig.skills":"Skills","agentConfig.hooks":"Hooks","agentConfig.agents":"Agents","agentConfig.powers":"Powers","agentConfig.specs":"Specs","agentConfig.specEmpty":"Пока нет ни одного spec","agentConfig.specNoSelection":"Выберите spec","agentConfig.specNewPlaceholder":"Имя spec (буквы, цифры, дефис, подчёркивание)","agentConfig.specCreate":"Создать","agentConfig.specDeleteConfirm":"Удалить spec «{{name}}»? Это действие необратимо.","agentConfig.specRequirements":"Требования","agentConfig.specDesign":"Дизайн","agentConfig.specTasks":"Задачи","agentConfig.specNotCreated":"Ещё не создан","agentConfig.specFilePlaceholder":"Введите содержимое этого файла (Markdown)…","agentConfig.workflows":"Workflows","agentConfig.workflowEmpty":"Пока нет ни одного workflow","agentConfig.workflowNoSelection":"Выберите workflow","agentConfig.workflowNewPlaceholder":"Имя файла workflow (напр. my-flow.workflow.json)","agentConfig.workflowDeleteConfirm":"Удалить workflow «{{name}}»? Это действие необратимо.","agentConfig.workflowFilePlaceholder":"Введите определение workflow (JSON/YAML)…","agentConfig.agentsMd":"AGENTS.md","agentConfig.agentsMdNoProject":"Сначала выберите каталог проекта — вложенные AGENTS.md сканируются только внутри рабочей области","agentConfig.agentsMdEmpty":"В этом проекте не найдено ни одного AGENTS.md","agentConfig.agentsMdRoot":"Корень проекта","agentConfig.agentsMdIgnoreActive":"При сканировании применены следующие правила исключения (число правил):","agentConfig.agentsMdPlaceholder":"Введите инструкции для этого поддерева каталогов (Markdown)…","agentConfig.loading":"Загрузка…","agentConfig.save":"Сохранить","agentConfig.saving":"Сохранение…","agentConfig.unsaved":"Не сохранено","agentConfig.selectProjectDir":"Выбрать каталог проекта","agentConfig.noProjectDir":"Проект не выбран","agentConfig.clearProjectDir":"Очистить каталог проекта","agentConfig.scope":"Место хранения","agentConfig.scopeUser":"Пользовательский уровень (~/.kiro/)","agentConfig.scopeProject":"Уровень проекта (/.kiro/)","mcp.title":"Службы MCP","mcp.add":"Добавить службу","mcp.edit":"Редактировать","mcp.delete":"Удалить","mcp.enable":"Включить","mcp.disable":"Отключить","mcp.enabled":"Включено","mcp.disabled":"Отключено","mcp.name":"Имя","mcp.command":"Команда","mcp.args":"Аргументы","mcp.env":"Переменные среды","mcp.addFirst":"Нажмите 'Добавить службу' для начала настройки","mcp.deleteSuccess":"Удаление успешно","mcp.deleteFailed":"Удаление не удалось","mcp.saveSuccess":"Сохранение успешно","mcp.saveFailed":"Сохранение не удалось","mcp.templates":"Шаблоны","mcp.useTemplate":"Использовать шаблон","mcp.confirmDelete":"Подтвердите удаление","mcp.noServers":"Нет MCP серверов, нажмите 'Добавить'","common.save":"Сохранить","common.cancel":"Отмена","common.continue":"Продолжить","common.optional":"Необязательно","common.confirm":"Подтвердить","common.delete":"Удалить","common.edit":"Редактировать","common.add":"Добавить","common.import":"Импорт","common.export":"Экспорт","common.refresh":"Обновить","common.loading":"Загрузка...","common.success":"Успех","common.error":"Ошибка","common.warning":"Предупреждение","common.info":"Информация","common.yes":"Да","common.no":"Нет","common.ok":"OK","common.close":"Закрыть","common.back":"Назад","common.next":"Далее","common.previous":"Предыдущий","common.finish":"Завершить","common.search":"Поиск","common.clear":"Очистить","common.sort":"Сортировка","sort.usage":"Использование","sort.added":"Время добавления","sort.trial":"Истечение пробного периода","common.all":"Все","common.none":"Нет","common.select":"Выбрать","common.copy":"Копировать","common.copyAll":"Копировать всё","common.copied":"Скопировано","common.apply":"Применить","common.minutes":"минут","common.hours":"часов","common.days":"дней","common.recommended":"Рекомендуется","common.later":"Позже","common.updateNow":"Обновить сейчас","common.downloading":"Загрузка","common.preparing":"Подготовка","common.newVersionFound":"Найдена новая версия","common.verifying":"Проверка","common.noLabel":"Без метки","common.unknown":"Неизвестно","common.currentlyUsing":"Текущий","common.usage":"Использование","common.remaining":"Осталось","common.reset":"Сброс","common.noAccounts":"Нет аккаунтов","common.addAccountHint":"Пожалуйста, добавьте аккаунты через вход на боковой панели","common.addAccount":"Добавить аккаунт","common.selectAll":"Выбрать все","common.selected":"Выбрано","common.deselectAll":"Снять выделение","update.newVersion":"Новая версия","update.newVersionFound":"Найдена новая версия","update.newVersionAvailable":"Доступна новая версия","update.readyToInstall":"Готово к установке","update.releaseNotes":"Примечания к выпуску","update.later":"Позже","update.updateNow":"Обновить сейчас","update.downloading":"Загрузка обновления","update.preparing":"Подготовка...","update.failed":"Обновление не удалось","update.installFailed":"Установка обновления не удалась","update.doNotClose":"Пожалуйста, не закрывайте приложение...","update.downloadComplete":"Загрузка завершена!","update.restartToInstall":"Обновление загружено, нажмите кнопку ниже для перезапуска приложения для завершения установки.","update.installLater":"Установить позже","update.restartNow":"Перезапустить сейчас","addAccount.title":"Ручное добавление","addAccount.subtitle":"Ручное добавление нового аккаунта в менеджер","addAccount.saveLocal":"Сохранить локальный аккаунт","addAccount.saveLocalDesc":"Прочитать текущий вошедший аккаунт из Kiro IDE","addAccount.orManual":"Или ручной ввод","addAccount.refreshToken":"Refresh Token","addAccount.socialPlaceholder":"Токен, начинающийся с aor","addAccount.idcPlaceholder":"Токен, начинающийся с aor","addAccount.clientId":"Client ID","addAccount.clientSecret":"Client Secret","addAccount.awsRegion":"Регион AWS","addAccount.add":"Добавить аккаунт","addAccount.verifying":"Проверка...","addAccount.errorNoToken":"Пожалуйста, введите Refresh Token","addAccount.errorSocialFormat":"Ошибка формата токена Google/Github, должен начинаться с aor","addAccount.errorIdcFormat":"Ошибка формата токена BuilderId/Enterprise, должен начинаться с aor","addAccount.errorNoClientId":"Пожалуйста, введите Client ID и Client Secret","addAccount.machineId":"ID машины","addAccount.machineIdPlaceholder":"Оставьте пустым для автогенерации","import.title":"Массовый импорт аккаунтов","import.subtitle":"Поддержка JSON файла, импорта из Kiro IDE и импорта из kiro-cli","import.jsonTab":"Импорт учётных данных JSON","import.ssoTab":"Импорт токена SSO","import.selectFile":"Выбрать файл JSON","import.orPaste":"Или вставить содержимое JSON","import.parseSuccess":"Разбор успешен","import.validRecords":"действительных записей","import.validationError":"Ошибка проверки","import.moreErrors":"...и ещё {{count}} ошибок","import.exceedLimit":"Превышен лимит: максимум {{max}}, текущий {{count}}","import.successCount":"Успешно импортировано {{count}} аккаунтов","import.failedCount":"{{count}} не удалось","import.importing":"Импорт...","import.ssoImporting":"Импорт через токен SSO...","import.continueImport":"Продолжить импорт","import.done":"Готово","import.import":"Импорт","import.ssoTokenLabel":"Токен x-amz-sso_authn","import.ssoTokenHint":"По одному на строку, поддерживается массовый","import.ssoTokenPlaceholder":"Вставьте значение куки x-amz-sso_authn...","import.regionOptional":"(необязательно)","import.detectedTokens":"Обнаружено {{count}} токенов","import.ssoGuide":"Как получить токен SSO:","import.ssoStep1":"Откройте view.awsapps.com/start и войдите","import.ssoStep2":"Нажмите F12 для открытия DevTools → Application → Cookies","import.ssoStep3":"Найдите значение x-amz-sso_authn","import.ssoStep4":"Скопируйте полное значение и вставьте ниже (поддерживается массовый импорт нескольких строк)","import.kiroTab":"Импорт из Kiro","import.kiroCliTab":"Импорт из kiro-cli","import.kiroCliTitle":"Импорт аккаунтов из базы данных kiro-cli","import.kiroCliHint":"Чтение базы данных SQLite kiro-cli (Windows: %LOCALAPPDATA%\\Kiro-Cli\\data.sqlite3; Linux: ~/.local/share/kiro-cli/data.sqlite3; macOS: ~/Library/Application Support/kiro-cli/data.sqlite3)","import.kiroCliInstallPrefix":"Команда установки:","import.kiroCliInstallCommand":"curl -fsSL https://cli.kiro.dev/install | bash","import.kiroCliWindowsTitle":"Windows нативно поддерживает Kiro CLI 2.0","import.kiroCliWindowsHint":"Путь к базе данных: %LOCALAPPDATA%\\Kiro-Cli\\data.sqlite3 (обычно C:\\Users\\\\AppData\\Local\\Kiro-Cli\\data.sqlite3)","import.kiroCliDetecting":"Обнаружение базы данных kiro-cli...","import.kiroCliDetected":"База данных kiro-cli обнаружена","import.kiroCliNotDetected":"База данных kiro-cli не обнаружена","import.kiroCliPathLabel":"Путь к базе данных","import.kiroCliPathPlaceholder":"~/.local/share/kiro-cli/data.sqlite3","import.kiroCliPathHintDetected":"Путь к базе данных автоматически обнаружен","import.kiroCliPathHintManual":"Пожалуйста, введите вручную или выберите файл базы данных","import.browse":"Обзор","editAccount.title":"Редактировать аккаунт","editAccount.labelPlaceholder":"Введите примечание для легкой идентификации аккаунта","editAccount.tokenCredentials":"Учётные данные токена","editAccount.accessToken":"Access Token","editAccount.refreshToken":"Refresh Token","editAccount.ssoCredentials":"Учётные данные AWS SSO OIDC","editAccount.clientIdHash":"Хэш Client ID","editAccount.region":"Регион","editAccount.sessionId":"ID сессии","editAccount.profileArn":"Profile ARN","editAccount.saveFailed":"Сохранение не удалось","editAccount.verifyFailed":"Проверка не удалась","editAccount.pleaseFillRefreshToken":"Пожалуйста, заполните Refresh Token","editAccount.pleaseFillClientIdAndSecret":"Пожалуйста, заполните Client ID и Client Secret","editAccount.currentAccountStatus":"Текущий статус аккаунта","editAccount.verified":"Проверено","editAccount.email":"Электронная почта","editAccount.subscriptionPlan":"План подписки","editAccount.usageQuota":"Квота использования","editAccount.refreshTokenRequired":"Требуется для обновления токена","editAccount.verifying":"Проверка...","editAccount.verifyAndRefreshCredentials":"Проверить и обновить учётные данные","editAccount.proxyTitle":"Прокси аккаунта для Reverse Proxy","editAccount.proxyDescription":"Используется только Reverse Proxy этого приложения для запросов этого аккаунта. Не меняет трафик входа Kiro IDE или Kiro CLI и имеет приоритет над общим прокси для Reverse Proxy.","editAccount.proxyEnabled":"Включено","editAccount.proxyProtocol":"Протокол","editAccount.proxyHost":"Хост","editAccount.proxyPort":"Порт","editAccount.proxyUsername":"Имя пользователя","editAccount.proxyPassword":"Пароль","editAccount.proxyOptional":"Необязательно","editAccount.proxyQuickInput":"Вставить прокси","editAccount.proxyQuickInputPlaceholder":"http://user:pass@127.0.0.1:7890 или socks5://127.0.0.1:1080","editAccount.proxyQuickInputInvalid":"Используйте user:pass@host:port, host:port, http://... или socks5://...","editAccount.proxyQuickInputHint":"Вставьте прокси один раз, чтобы заполнить поля ниже. Это значение не сохраняется.","editAccount.proxyApplyQuickInput":"Разобрать","editAccount.proxyTest":"Проверить прокси","editAccount.proxyTesting":"Проверка...","editAccount.proxyTestSuccess":"Проверка прокси успешна","editAccount.proxyTestFailed":"Проверка прокси не удалась","editAccount.proxyInvalid":"Неверный прокси","editAccount.proxyHostRequired":"Укажите хост прокси.","editAccount.proxyPortRequired":"Порт прокси должен быть от 1 до 65535.","editAccount.proxyUsernameRequired":"Для пароля прокси требуется имя пользователя.","accountCard.LogIn":"Войти","accountCard.LogOut":"Выйти","accountCard.refresh":"Обновить данные","accountCard.refreshQuota":"Обновить квоту","accountCard.refreshToken":"Обновить токен","accountCard.viewDetails":"Просмотреть детали","accountCard.editRemark":"Редактировать аккаунт","accountCard.delete":"Удалить","accountCard.deleteRemote":"Удалить удалённо","accountCard.deleteRemoteConfirm":"Вы уверены, что хотите удалить этот аккаунт с сервера AWS?\n\n⚠️ Эта операция необратима, аккаунт будет удалён навсегда!","accountCard.deleteRemoteSuccess":"Аккаунт удалён с сервера","accountCard.deleteRemoteFailed":"Удаление не удалось","accountCard.tokenExpired":"Истёк","accountCard.rightClickTip":"Правый клик для дополнительных операций","accountCard.copyJson":"Копировать JSON","accountCard.selectAccount":"Выбрать аккаунт","accountCard.bannedCannotSwitch":"Заблокированный аккаунт нельзя переключить","accountCard.daysRemaining":"{{days}} дней осталось в подписке","accountCard.availableModels":"Доступные модели","accountCard.loadModels":"Просмотреть модели","accountCard.loadingModels":"Загрузка","accountCard.modelLoadFailed":"Не удалось получить модели","accountCard.noAvailableModels":"Аккаунт не вернул доступные модели","accountCard.modelCountSuffix":"моделей","accountCard.defaultModel":"По умолчанию","accountCard.promptCaching":"Кэш","accountCard.refreshModels":"Обновить модели","accountCard.cachedAt":"Время кэша","refresh.title":"Обновить аккаунт","refresh.progress":"Прогресс","refresh.refreshing":"Обновление","refresh.complete":"Обновление завершено!","detail.quotaOverview":"Обзор квоты","detail.syncQuota":"Синхронизировать квоту","detail.mainQuota":"Основная квота","detail.freeTrial":"Бесплатная пробная","detail.bonusTotal":"Всего бонусов","detail.bonusCount":"бонусов","detail.bonusDetails":"Детали бонусов","detail.basicInfo":"Основная информация","detail.emailAddress":"Адрес электронной почты","detail.remarkLabel":"Метка примечания","detail.tokenCredentials":"Учётные данные токена","detail.ssoCredentials":"Учётные данные AWS SSO OIDC","detail.refreshFailed":"Обновление не удалось","detail.accountNormal":"Аккаунт нормальный","detail.accountBanned":"Аккаунт заблокирован","detail.used":"Использовано","detail.precise":"Точный","detail.reset":"Сброс","detail.expires":"Истекает","detail.expiresAt":"Истекает","detail.redeemed":"Активирован","detail.addedAt":"Добавлен","detail.userId":"ID пользователя","detail.email":"Электронная почта","detail.subscriptionType":"Тип подписки","detail.upgradeable":"Возможно обновление","detail.overageRate":"Ставка превышения","detail.overageCap":"Лимит превышения","detail.perCredit":"за кредит","detail.fields":"полей","detail.availableModels":"Доступные модели аккаунта","detail.loadingModels":"Загрузка моделей...","detail.noModels":"Нет доступных моделей","detail.noDescription":"Нет описания","mcpManager.addMCPServer":"Добавить службу MCP","mcpManager.disabled":"Отключено","mcpManager.autoApprove":"Автоодобрение","mcpManager.tools":"инструментов","mcpManager.envVars":"переменных среды","mcpManager.errorNoCommand":"Пожалуйста, введите команду запуска","common.details":"Детали","common.saving":"Сохранение...","pagination.perPage":"На странице","pagination.totalItems":", всего {{count}} элементов","pagination.first":"Первая","pagination.prev":"Предыдущая","pagination.next":"Следующая","pagination.last":"Последняя","switch.title":"Переключить аккаунт","switch.confirmSwitch":"Подтвердить переключение на","switch.confirmBtn":"Подтвердить переключение","switch.success":"Переключение успешно","switch.failed":"Переключение не удалось","switch.missingAuth":"Отсутствует информация об аутентификации","switch.logoutTitle":"Выйти из аккаунта","switch.confirmLogout":"Подтвердить выход из","switch.logoutSuccess":"Выход выполнен","switch.logoutFailed":"Не удалось выйти","switch.logoutDone":"Текущий сеанс входа очищен, аккаунт остаётся в списке","switch.quota":"Квота","switch.remaining":"Осталось","switch.type":"Тип","switch.cliNotInstalled":"CLI не установлен","switch.cliNotInstalledMessage":"Kiro CLI 2.0 не обнаружен, пожалуйста, установите перед попыткой переключения на CLI","switch.ideNotInstalled":"IDE не установлен","switch.ideNotInstalledMessage":"Среда конфигурации Kiro IDE (.aws/sso/cache) не обнаружена, пожалуйста, установите или войдите в Kiro IDE","switch.switchTarget":"Цель переключения","detail.aoaPrefix":"префикс aoa","detail.aorPrefix":"префикс aor","detail.eyjPrefix":"префикс eyj","import.socialTemplate":"Шаблон Social","import.idcTemplate":"Шаблон IdC","theme.light":"Элегантный белый","theme.dark":"Абсолютный чёрный","theme.dark-one":"Глубокий синий (One Dark)","theme.tech":"Технологичный синий","theme.midnight":"Полночный чёрный","theme.purple":"Элегантный фиолетовый","theme.green":"Яркий зелёный","theme.business":"Бизнес золото","theme.sunset":"Закатный оранжевый","theme.ocean":"Океанский синий","theme.forest":"Лесной зелёный","theme.rose":"Розовый красный","theme.aurora":"Полярный циан","theme.sakura":"Сакура розовый","common.paste":"Вставить","common.refreshFailed":"Обновление не удалось","steering.title":"Правила Steering","steering.noFiles":"Нет файлов Steering","steering.selectToEdit":"Выберите файл для редактирования","steering.unsavedChanges":"Несохранённые изменения","steering.confirmSwitch":"Несохранённые изменения, подтвердить переключение?","steering.saveFailed":"Сохранение не удалось","steering.deleteFailed":"Удаление не удалось","steering.confirmDelete":"Подтвердить удаление","steering.confirmDeleteFile":'Подтвердить удаление "{{fileName}}"?',"steering.createFailed":"Создание не удалось","steering.newSteering":"Новый Steering","steering.fileName":"Имя файла","steering.fileNamePlaceholder":"например, my-rules","steering.fileNameHint":"Автоматически добавить суффикс .md","steering.inclusionMode":"Режим включения","steering.inclusionAlways":"Всегда включать","steering.inclusionAlwaysDesc":"Загружается в каждой беседе","steering.inclusionAuto":"Автоактивация","steering.inclusionAutoDesc":"Активируется по запросу через инструмент discloseContext","steering.inclusionFileMatch":"Соответствие файла","steering.inclusionFileMatchDesc":"Загружается при чтении соответствующих файлов","steering.inclusionManual":"Ручная ссылка","steering.inclusionManualDesc":"Загружается при ручной ссылке через #","steering.filePattern":"Шаблон соответствия","steering.filePatternPlaceholder":"например, **/*.jsx","steering.saving":"Сохранение...","steering.save":"Сохранить","steering.unknownTime":"Неизвестное время","steering.contentPlaceholder":"Введите содержимое Markdown...","steering.fmName":"Имя","steering.fmNamePlaceholder":"Отображаемое имя правила","steering.fmDescription":"Описание","steering.fmDescriptionPlaceholder":"Краткое описание цели правила","steering.defaultTemplate":"Шаблон по умолчанию","steering.initializeProject":"Инициализировать правила проекта","steering.refine":"Упорядочить","steering.refining":"Упорядочение...","steering.refineFailed":"Упорядочение не удалось","steering.refineSuccess":"Упорядочение завершено","steering.createDefaultFailed":"Создание шаблона по умолчанию не удалось","steering.defaultCreated":"Шаблон по умолчанию создан","steering.initializeFailed":"Инициализация правил проекта не удалась","steering.initialCreated":"Правила проекта инициализированы","steering.scopeTitle":"Область действия Steering","steering.scopeMessage":"Подтвердить запись текущих правил проекта? Выберите 'Пользователь' для сохранения в каталог глобальных правил.","skills.noSkills":"Нет Skills","skills.noSkillsHint":"Skills хранятся в каталоге ~/.kiro/skills/","skills.createFirst":"Создать первый Skill","skills.create":"Новый Skill","skills.newSkill":"Новый Skill","skills.skillName":"Имя Skill","skills.skillNamePlaceholder":"например, my-coding-rules","skills.skillNameHint":"Может содержать только буквы, цифры, подчёркивания и дефисы","skills.selectToEdit":"Выберите Skill для редактирования","skills.unsavedChanges":"Несохранённые изменения","skills.confirmSwitch":"Несохранённые изменения, подтвердить переключение?","skills.unsaved":"Несохранено","skills.saveFailed":"Сохранение не удалось","skills.deleteFailed":"Не удалось удалить","skills.saving":"Сохранение...","skills.save":"Сохранить","skills.createFailed":"Создание не удалось","skills.loadFailed":"Не удалось загрузить Skills","skills.confirmDelete":"Подтвердить удаление","skills.confirmDeleteSkill":'Подтвердить удаление Skill "{{name}}"? Это удалит весь каталог.',"skills.files":"файлов","skills.extraFiles":"вспомогательных файлов","skills.contentPlaceholder":"Введите содержимое SKILL.md...","skills.fmName":"Имя","skills.fmNamePlaceholder":"Отображаемое имя Skill","skills.fmDescription":"Описание","skills.fmDescriptionPlaceholder":"Краткое описание цели Skill","skills.fmDescriptionHint":"Опишите функцию Skill, чтобы помочь Kiro понять, когда активировать","skills.importLocal":"Импортировать локальный Skill","skills.importGithub":"Импортировать из GitHub","skills.importSuccess":"Skill импортирован успешно","skills.importFailed":"Не удалось импортировать локальный Skill","skills.importGithubFailed":"Не удалось импортировать Skill из GitHub","skills.importScopeTitle":"Область импорта Skill","skills.importScopeMessage":"Подтвердить импорт в текущую область проекта? Выберите 'Пользователь' для импорта в каталог глобальных Skills.","skills.githubRepoUrl":"URL репозитория","skills.githubPath":"Путь в репозитории","skills.githubPathPlaceholder":"Необязательно, например, skills/code-review","skills.githubBranch":"Ветка","skills.importTargetName":"Целевое имя","skills.importTargetNamePlaceholder":"Необязательно, по умолчанию используется имя каталога","hooks.title":"Hooks","hooks.loadFailed":"Не удалось загрузить Hooks","hooks.noHooks":"Нет файлов Hook","hooks.createFirst":"Создать первый Hook","hooks.newHook":"Новый Hook","hooks.fileName":"Имя файла","hooks.fileNamePlaceholder":"например, my-workflow","hooks.fileNameHint":"Может содержать только буквы, цифры, точки, подчёркивания, дефисы; автоматически добавить суффикс .kiro.hook","hooks.fileNamePreview":"Итоговое имя файла","hooks.fileNameRequired":"Пожалуйста, введите имя файла","hooks.fileNameInvalid":"Недопустимый формат имени файла","hooks.fileNameDuplicate":"Имя файла Hook уже существует","hooks.scopeHint":"Поддерживаются Hooks уровня пользователя (~/.kiro/hooks/, для всех проектов) и уровня проекта (/.kiro/hooks/)","hooks.scope":"Область действия","hooks.scopeProject":"Уровень проекта","hooks.scopeUser":"Уровень пользователя","hooks.scopeUserHint":"Запись в ~/.kiro/hooks (Kiro IDE 1.0.182+), действует для всех проектов","hooks.scopeProjectHint":"Запись в .kiro/hooks текущего проекта","hooks.selectToEdit":"Выберите файл Hook для редактирования","hooks.unsavedChanges":"Несохранённые изменения","hooks.confirmSwitch":"Несохранённые изменения, подтвердить переключение?","hooks.unsaved":"Несохранено","hooks.saveFailed":"Сохранение не удалось","hooks.deleteFailed":"Удаление не удалось","hooks.createFailed":"Создание не удалось","hooks.confirmDelete":"Подтвердить удаление","hooks.confirmDeleteFile":'Подтвердить удаление файла Hook "{{fileName}}"?',"hooks.saving":"Сохранение...","hooks.save":"Сохранить","hooks.contentPlaceholder":"Введите содержимое JSON .kiro.hook...","agents.noAgents":"Нет Custom Agents","agents.noAgentsHint":"Custom Agents хранятся в ~/.kiro/agents/","agents.deleteFailed":"Не удалось удалить","agents.createFirst":"Создать первый Agent","agents.create":"Новый Agent","agents.newAgent":"Новый Custom Agent","agents.agentName":"Имя Agent","agents.agentNamePlaceholder":"например, code-reviewer","agents.agentNameHint":"Автоматически добавить суффикс .md, имя файла является ID Agent","agents.selectToEdit":"Выберите Agent для редактирования","agents.unsavedChanges":"Несохранённые изменения","agents.confirmSwitch":"Несохранённые изменения, подтвердить переключение?","agents.unsaved":"Несохранено","agents.saveFailed":"Сохранение не удалось","agents.saving":"Сохранение...","agents.save":"Сохранить","agents.createFailed":"Создание не удалось","agents.loadFailed":"Не удалось загрузить Custom Agents","agents.confirmDelete":"Подтвердить удаление","agents.confirmDeleteAgent":'Подтвердить удаление Agent "{{fileName}}"?',"agents.tools":"инструментов","agents.toolTags":"Теги инструментов","agents.selectTools":"Выбрать разрешённые инструменты...","agents.contentPlaceholder":"Введите системный промпт Agent...","agents.fmName":"Имя","agents.fmNamePlaceholder":"Отображаемое имя Agent","agents.fmDescription":"Описание","agents.fmDescriptionPlaceholder":"Краткое описание цели Agent","agents.model":"Модель","agents.includeMcpJson":"Включить конфиг MCP","agents.includePowers":"Включить Powers","agents.allTools":"Все инструменты","agents.includeMcpJsonDesc":"Автоматически внедрять серверы, определённые в mcp.json","callback.processing":"Обработка обратного вызова входа...","callback.missingParams":"Отсутствуют необходимые параметры обратного вызова","callback.exchangingToken":"Обмен токеном доступа...","callback.success":"Вход успешен! Аккаунт добавлен в приложение.","callback.failed":"Вход не удался, пожалуйста, попробуйте снова","callback.loginSuccess":"Вход успешен","callback.loginFailed":"Вход не удался","callback.processingTitle":"Обработка...","callback.autoCloseHint":"Это окно закроется автоматически, или вы можете закрыть его вручную","callback.closeWindow":"Закрыть окно","tags.title":"Теги","tags.filter":"Фильтр по тегам","tags.all":"Все теги","tags.noTags":"Нет тегов","tags.addTag":"Добавить тег","tags.newTagPlaceholder":"Введите новый тег...","tags.manage":"Управление тегами","tags.edit":"Редактировать тег","tags.selectTags":"Выбрать теги","tags.createNew":"Создать новый тег","tags.deleteTag":"Удалить тег","tags.confirmDelete":"Подтвердить удаление тега","tags.duplicateName":"Имя тега уже существует","tags.batchSet":"Массовые теги","tags.selected":"Выбранные теги","tags.available":"Доступные теги","tags.mode":"Режим операции","tags.mode_set":"Перезаписать","tags.mode_add":"Добавить","tags.mode_remove":"Удалить","tags.searchPlaceholder":"Поиск тегов...","tags.addOrSelect":"Поиск/Добавить теги","tags.searchOrCreate":"Поиск или ввести новый тег...","tags.hint":"Введите для поиска существующих тегов или напрямую введите для создания нового тега","tags.hasTags":"Есть теги","groups.title":"Группы","groups.all":"Все группы","groups.noGroup":"Без группы","groups.hasGroup":"Есть группа","groups.searchPlaceholder":"Поиск групп...","groups.noGroups":"Нет групп","groups.newGroupPlaceholder":"Введите новую группу...","groups.deleteGroup":"Удалить группу","groups.confirmDelete":"Подтвердить удаление группы","groups.duplicateName":"Имя группы уже существует","filter.title":"Расширенный фильтр","filter.clearAll":"Очистить всё","filter.subscription":"Тип подписки","filter.status":"Статус аккаунта","filter.provider":"Тип аккаунта","filter.usageRange":"Диапазон использования","filter.status_normal":"Нормальный","filter.status_banned":"Заблокирован","filter.status_expired":"Истёк","announcement.title":"Важное уведомление","announcement.warning":"Это программное обеспечение полностью бесплатно!","announcement.content1":"Если кто-то взимает с вас плату за это программное обеспечение, вас обманули! Пожалуйста, сообщите немедленно.","announcement.content2":"Этот проект следует лицензии с открытым исходным кодом CC BY-NC-SA 4.0, коммерческое использование запрещено.","announcement.content3":"Пожалуйста, загружайте из официального репозитория GitHub, избегайте использования ненадёжных версий.","announcement.official":"Официальный адрес с открытым исходным кодом:","announcement.tgGroup":"Сообщество Telegram:","announcement.dontRemind":"Больше не напоминать","announcement.understand":"Я понимаю","announcement.refillTutorial":"Учебник по пополнению","redeem.success":"Активация успешна","redeem.desc":"Введите купленный ключ карты для автоматического добавления аккаунта в список","redeem.placeholder":"Пожалуйста, введите ключ карты","redeem.account":"Аккаунт","redeem.submit":"Активировать","powers.noPowers":"Нет установленных Powers","powers.noPowersHint":"Powers хранятся в каталоге ~/.kiro/powers/installed/","powers.selectToView":"Выберите Power для просмотра деталей","powers.uninstall":"Удалить","powers.confirmUninstall":"Подтвердить удаление","powers.confirmUninstallPower":'Подтвердить удаление Power "{{name}}"? Можно переустановить из реестра после удаления.',"powers.uninstallFailed":"Удаление не удалось","powers.autoInstalled":"Автоустановлен","powers.author":"Автор","powers.license":"Лицензия","powers.installed":"Установлен","powers.recommended":"Рекомендуется","powers.installedBadge":"Установлен","powers.alreadyInstalled":"Уже установлен","powers.viewAndInstall":"Просмотреть и установить","powers.install":"Установить","powers.installing":"Установка...","powers.installSuccess":"Установка успешна","powers.installFailed":"Установка не удалась","powers.browseRecommended":"Просмотреть рекомендуемые Powers","powers.noRecommended":"Не удалось загрузить список рекомендаций","powers.loadFailed":"Не удалось загрузить Powers","powers.loadRecommendedFailed":"Не удалось загрузить рекомендуемые Powers","powers.name":"Имя","powers.thirdPartyDisclaimer":"Сторонние Powers работают независимо от основных служб Kiro и могут быть связаны с их собственными условиями лицензии. Kiro не тестировал эти инструменты во всех сценариях, пожалуйста, устанавливайте только из доверенных источников и ознакомьтесь с соответствующей документацией и лицензиями.","powers.addCustom":"Добавить свой Power","powers.importFromFolder":"Импорт из папки","powers.importFromFolderHint":"Выберите локальную папку с plugin.json или POWER.md","powers.importFromUrl":"Импорт из GitHub","powers.importFromUrlHint":"Укажите публичный URL GitHub для Power сообщества","powers.importUrlDesc":"Поддерживается https://github.com/owner/repo, при необходимости с веткой и подкаталогом: /tree//. Только публичные репозитории github.com.","powers.selectFolder":"Выберите папку с power","powers.import":"Импортировать","powers.importing":"Импорт...","powers.installSuccessFromFolder":"Установлено из папки: {{name}}","powers.installSuccessFromUrl":"Установлено из GitHub: {{name}}","powers.importFolderFailed":"Не удалось импортировать из папки","powers.importUrlFailed":"Не удалось импортировать из GitHub","powers.sourceLocal":"Локально","powers.sourceLocalHint":"Свой Power, импортированный из локальной папки","powers.sourceRepo":"GitHub","powers.sourceRepoHint":"Свой Power, импортированный по URL GitHub","toast.loading":"Загрузка...","toast.processing":"Обработка...","toast.success":"Операция успешна","toast.error":"Операция не удалась","status.fallback.normal":"Нормальный","status.fallback.capped":"Лимит","status.fallback.banned":"Заблокирован","status.fallback.invalid":"Недействителен","status.fallback.expired":"Истёк","status.fallback.unknown":"Неизвестно","session.title":"Управление сессиями","session.subtitle":"Управление chat sessions Kiro IDE","session.workspacesAndSessions":"Рабочие области и сессии","session.searchSessions":"Поиск сессий...","session.noMatchingSessions":"Совпадений не найдено","session.collapse":"Свернуть","session.expand":"Развернуть","session.delete":"Удалить","session.workspaces":"рабочих областей","session.sessions":"сессий","session.noSessions":"Нет сессий","session.selectSessionToView":"Выберите сессию для просмотра деталей","session.sessionHasNoMessages":"Эта сессия не имеет сообщений","session.conversationSummary":"Сводка разговора (сжатие контекста)","session.deleteWorkspace":"Удалить рабочую область","session.deleteSession":"Удалить сессию","session.deleteWorkspaceConfirm":'Вы уверены, что хотите удалить рабочую область "{{name}}" и все её сессии?\n\nЭто действие нельзя отменить!',"session.deleteSessionConfirm":'Вы уверены, что хотите удалить сессию "{{title}}"?',"session.batchDeleteWorkspaces":"Массовое удаление рабочих областей","session.batchDeleteConfirm":"Вы уверены, что хотите удалить выбранные {{count}} рабочих областей и все их сессии?\n\nРабочие области: {{names}}\n\nЭто действие нельзя отменить!","session.selectWorkspacesFirst":"Сначала выберите рабочие области для удаления","session.sessionDeleted":"Сессия удалена","session.workspaceDeleted":'Рабочая область "{{name}}" успешно удалена',"session.workspacesDeleted":"Успешно удалено {{count}} рабочих областей","session.loadSessionsFailed":"Не удалось загрузить список сессий:","session.loadWorkspacesFailed":"Не удалось загрузить рабочие области:","session.loadFailed":"Не удалось загрузить:","session.deleteWorkspaceFailed":"Не удалось удалить рабочую область:","session.deleteFailed":"Не удалось удалить:","session.batchDeleteFailed":"Массовое удаление не удалось:","session.exportSuccess":"Экспорт успешен!","session.exportFailed":"Экспорт не удался:","session.cannotFindWorkspace":"Не удалось найти рабочую область, к которой принадлежит сессия","session.selectAll":"Выбрать все","session.deselectAll":"Снять выбор","tray.showWindow":"Показать окно","tray.exitApp":"Выйти из приложения","tray.tooltip":"Kiro Account Manager","gateway.localOnly":"Только локальный доступ","gateway.allowRemote":"Разрешить удалённый доступ","gateway.running":"Запущен","gateway.clientKey":"Ключ клиента","gateway.fixFormErrors":"Пожалуйста, исправьте ошибки формы перед продолжением","gateway.gatewayDescription":"Управление состоянием конечной точки, подключением клиентов, границами безопасности и журналами запросов; здесь же сохранение конфигурации, запуск и остановка шлюза.","gateway.responseCache":"Кэш ответов","gateway.accountPool":"Пул аккаунтов","gateway.stopped":"Остановлен","gateway.restart":"Перезапустить","gateway.restarting":"Перезапуск…","gateway.copyEntry":"Скопировать адрес входа","gateway.copyClientKey":"Скопировать ключ клиента","gateway.requestCountLabel":"Запросы","gateway.errorCountLabel":"Ошибки","gateway.lastSync":"Синхр. {{time}}","gateway.tabOverview":"Обзор","gateway.tabRequestLogs":"Журнал запросов","gateway.tabSettings":"Конфигурация","gateway.connectClients":"Подключить клиент","gateway.appliesTo":"Подходит для","gateway.chooseProtocol":"Выберите протокол","gateway.chooseProtocolHint":"протокол определяет три поля ниже","gateway.metricJumpToLogs":"Открыть журнал запросов","gateway.recentRequests":"Последние запросы","gateway.noRecentRequests":"Запросов пока нет","gateway.rowToggleDetail":"Нажмите, чтобы раскрыть запрос и ответ","gateway.viewRaw":"Как есть","gateway.viewJson":"JSON","gateway.viewText":"Текст","gateway.tools":"Инструменты","gateway.noRunningAccountPool":"В пуле нет доступных аккаунтов — запросы будут завершаться ошибкой. Настройте пул в разделе «Настройки → Аккаунты и маршрутизация».","gateway.noAccountsAtAll":"Аккаунты ещё не импортированы, шлюз не может работать. Сначала импортируйте аккаунт Kiro в разделе «Аккаунты».","gateway.viewAllLogs":"Показать все","gateway.protocolTestDesc":"Составить запрос по любому из трёх протоколов и отправить через этот шлюз — расходуется квота аккаунта","gateway.copyConfig":"Копировать конфиг","gateway.copyKey":"Копировать ключ","gateway.groupRouting":"Аккаунты и маршрутизация","gateway.groupAccess":"Доступ и запуск","gateway.groupRequestHandling":"Обработка запросов","gateway.switchesOn":"включено","gateway.notSelected":"не выбрано","gateway.noPoolSelected":"Аккаунт не выбран","gateway.disabled":"Выключено","gateway.autoStartOn":"Автозапуск включён","gateway.autoStartOff":"Автозапуск выключен","gateway.thresholdHint":"Отключать аккаунт при достижении этого процента использования","gateway.ipWhitelistHint":"По одному IP или CIDR в строке, например 10.0.0.0/24","gateway.upstreamProxyLabel":"Прокси вышестоящего API (Kiro API)","gateway.upstreamProxyHint":"Пусто = прокси аккаунта или системный; поддерживаются http/https/socks5","gateway.maxToolDescLabel":"Макс. длина описания инструмента","gateway.maxToolDescHint":"Описания сверх лимита переносятся в системный промпт (Tool Documentation); 0 = без лимита","gateway.webSearchToggle":"Подзапросы WebSearch","gateway.webSearchOn":"WebSearch включён","gateway.webSearchOff":"WebSearch выключен","gateway.toolSearchToggle":"Обнаружение инструментов (Tool Search)","gateway.toolSearchOn":"Tool Search включён","gateway.toolSearchOff":"Tool Search выключен","gateway.poolStatusActive":"Активный","gateway.poolStatusOverage":"Превышение","gateway.poolStatusCapped":"Достигнут лимит","gateway.poolStatusBanned":"Заблокирован","gateway.poolStatusInvalid":"Недействителен","gateway.strategyBalanced":"Сбалансированный","gateway.strategyMostQuota":"Макс. квота","gateway.currentEntry":"Текущая точка входа","gateway.start":"Запустить","gateway.stop":"Остановить","gateway.copiedItem":"Скопировано: {{label}}","gateway.logDir":"Каталог логов","gateway.newRuleSection":"Добавить новое правило","gateway.ruleName":"Название правила","gateway.ruleType":"Тип правила","gateway.ruleTypeLinesContaining":"Содержит ключевое слово (удалить совпавшие строки)","gateway.ruleTypeRegex":"Регулярное выражение (заменить совпавшее)","gateway.matchPattern":"Шаблон совпадения","gateway.replaceContentRegexEmpty":"Замена (только regex; пусто = удалить)","gateway.ruleNamePlaceholder":"напр.: фильтр Git status","gateway.matchPatternPlaceholder":"Режим ключевых слов: git status\nРежим regex: .*?","gateway.replacePlaceholderEmpty":"Пусто = удалить совпавшее","gateway.filterRuleAdded":"Добавлено правило фильтра: {{name}}","gateway.presetRulesLoaded":"Загружено {{count}} предустановленных правил","gateway.allPresetRulesExist":"Все предустановленные правила уже есть","gateway.presetFilterGitStatus":"Фильтр информации о статусе Git","gateway.presetFilterRecentCommits":"Фильтр информации о недавних коммитах","gateway.presetFilterKnowledgeCutoff":"Фильтр крайнего срока знаний ассистента","gateway.presetFilterBillingHeader":"Фильтр информации о заголовке биллинга","gateway.presetFilterFastMode":"Фильтр тега быстрого режима","gateway.presetFilterProjectPath":"Фильтр информации о пути проекта","gateway.selectGroup":"Выбрать группу","gateway.selectGroupPlaceholder":"Выберите группу","gateway.accountPoolDescription":"Выберите аккаунты для участия в ротации шлюза и настройте стратегию распределения запросов.","gateway.selectedAccounts":"Выбранные аккаунты","gateway.baseUrlLabel":"Base URL","gateway.authHeaderLabel":"Заголовок авторизации","gateway.endpointLabel":"Эндпоинт","gateway.defaultRoundRobin":"По умолчанию: Круговой","gateway.searchAccounts":"Поиск аккаунтов...","gateway.statusAll":"Все","gateway.selectAll":"Выбрать все","gateway.deselectAll":"Снять выбор","gateway.selectAvailable":"Выбрать доступные","gateway.noAvailableAccounts":"Нет доступных аккаунтов. Сначала добавьте аккаунты.","gateway.unknownAccount":"Неизвестный аккаунт","gateway.noQuota":"Нет квоты","gateway.notRefreshed":"Не обновлено","gateway.close":"Закрыть","gateway.tplSimple":"Простой чат","gateway.tplMultiTurn":"Многоходовый чат","gateway.tplNonStream":"Без потока","gateway.routingAuto":"Авто (по балансировке шлюза)","gateway.routingSingle":"Один аккаунт","gateway.routingGroup":"Режим группы","gateway.routingPool":"Пул аккаунтов ({{count}})","gateway.jsonFormatError":"Ошибка формата JSON: {{message}}","gateway.requestFailed":"Запрос не выполнен: {{message}}","gateway.protocol":"Протокол","gateway.templates":"Шаблоны","gateway.upstreamRegion":"Регион апстрима","gateway.upstreamRegionHint":"Регион, который шлюз использует при обращении к Kiro; не связан с локальным прослушиванием","gateway.copyAsCurl":"Скопировать как curl","gateway.abort":"Прервать","gateway.specifiedAccount":"Указанный аккаунт","gateway.autoSelect":"Авто-выбор","gateway.autoSelectLb":"Авто-выбор (балансировка)","gateway.noAvailableAccountsForRouting":"Нет доступных аккаунтов при текущей маршрутизации","gateway.format":"Форматировать","gateway.inputJsonPlaceholder":"Введите тело JSON-запроса...","gateway.responseResult":"Результат ответа","gateway.receiving":"Получение...","gateway.copy":"Копировать","gateway.responsePlaceholder":"Ответ появится здесь...","gateway.requesting":"Отправка...","gateway.sendRequest":"Отправить запрос","gateway.requestCount":"Количество запросов","gateway.errorCount":"Количество ошибок","gateway.endpoint":"Конечная точка","gateway.write":"Запись","gateway.requestBody":"Тело запроса","gateway.responseBody":"Тело ответа","gateway.status":"Статус","gateway.model":"Модель","gateway.account":"Аккаунт","gateway.duration":"Длительность","gateway.time":"Время","gateway.tokens":"Вх/Исх","gateway.client":"Клиент","gateway.listenAddress":"Адрес прослушивания","gateway.baseUrl":"Базовый URL","gateway.configureAccountPool":"Настроить пул аккаунтов","gateway.clientConfigured":"✓ Клиент настроен","gateway.selected":"Выбрано","gateway.accounts":"аккаунтов","gateway.promptFilter":"Фильтр промптов","gateway.simplifyCCPrompt":"Упростить CC промпт","gateway.removeBoundaryMarkers":"Удалить граничные метки","gateway.removeEnvNoise":"Удалить шум окружения","gateway.customRules":"Пользовательские правила","gateway.noCustomRules":"Нет пользовательских правил","gateway.manageRules":"Управление правилами","gateway.cacheTTLSeconds":"TTL кэша (секунды)","gateway.thresholdPercent":"Порог %","gateway.ipWhitelist":"Белый список IP","gateway.singleAccount":"Один аккаунт","gateway.byGroup":"По группе","gateway.globalPool":"Глобальный пул","gateway.accountMode":"Режим аккаунта","gateway.priorityQuota":"Приоритет квоты","gateway.groupMode":"Режим группы","gateway.configuredRules":"Настроенные правила ({{count}})","gateway.regex":"Регулярное выражение","gateway.containKeywords":"Содержит ключевые слова","gateway.match":"Совпадение","gateway.replace":"Замена","gateway.cancel":"Отмена","gateway.saveConfig":"Сохранить конфигурацию","gateway.customRegexOrKeywordFilterRules":"Пользовательские правила фильтрации регулярных выражений или ключевых слов для очистки шумового содержимого в системных подсказках","gateway.addPresetRules":"Добавить предустановленные правила","gateway.promptFilterRules":"Правила фильтрации подсказок","gateway.addRule":"Добавить правило","gateway.add":"Добавить","gateway.enabled":"Включено","gateway.specifySingleAccount":"Указать один аккаунт","gateway.routingStrategy":"Стратегия маршрутизации","gateway.roundRobin":"Круговой","gateway.random":"Случайный","gateway.weightedRandom":"Взвешенный случайный","gateway.leastConnections":"Минимум соединений","gateway.selectAGroup":"Выберите группу","gateway.autoStart":"Автозапуск","gateway.authHeader":"Заголовок аутентификации","gateway.requestLogs":"Логи запросов","gateway.protocolTest":"Проверка протоколов","steering.groupAlways":"Всегда включать","steering.groupAuto":"Автоактивация","steering.groupFileMatch":"Совпадение файлов","steering.groupManual":"Ручная ссылка","steering.loadFailed":"Не удалось загрузить файл Steering","skills.saveFailedInternal":"Не удалось сохранить Skill","powers.uninstallFailedInternal":"Не удалось удалить Power","powers.installFailedInternal":"Не удалось установить Power","mcp.toggleFailedInternal":"Не удалось переключить статус MCP","mcp.deleteFailedInternal":"Не удалось удалить службу MCP","hooks.saveFailedInternal":"Не удалось сохранить Hook","hooks.createFailedInternal":"Не удалось создать Hook","hooks.promptPlaceholder":"Пожалуйста, заполните инструкции по выполнению здесь","agents.saveFailedInternal":"Не удалось сохранить Custom Agent","agents.loadFailedInternal":"Не удалось загрузить Custom Agents","agents.deleteFailedInternal":"Не удалось удалить Custom Agent","agents.createFailedInternal":"Не удалось создать Custom Agent","steering.loadFailedInternal":"Не удалось загрузить файлы Steering","steering.saveFailedInternal":"Не удалось сохранить файл Steering","steering.deleteFailedInternal":"Не удалось удалить файл Steering","steering.createFailedInternal":"Не удалось создать файл Steering","steering.createDefaultFailedInternal":"Не удалось создать шаблон Steering по умолчанию","steering.initializeFailedInternal":"Не удалось инициализировать Steering проекта","steering.refineFailedInternal":"Не удалось упорядочить файлы Steering","mcp.loadFailedInternal":"Не удалось загрузить конфиг MCP","hooks.loadFailedInternal":"Не удалось загрузить Hooks","hooks.deleteFailedInternal":"Не удалось удалить Hook","skills.loadFailedInternal":"Не удалось загрузить Skills","skills.deleteFailedInternal":"Не удалось удалить Skill","skills.createFailedInternal":"Не удалось создать Skill","skills.importFailedInternal":"Не удалось импортировать локальный Skill","skills.importGithubFailedInternal":"Не удалось импортировать Skill из GitHub","powers.loadFailedInternal":"Не удалось загрузить Powers","powers.importFolderFailedInternal":"Не удалось импортировать Power из папки","powers.importUrlFailedInternal":"Не удалось импортировать Power по URL","powers.loadRecommendedFailedInternal":"Не удалось загрузить рекомендуемые Powers","mcp.invalidFormat":'Пожалуйста, оберните в формат { "name": { config } }',"mcp.noValidConfig":"Допустимая конфигурация не найдена","settings.copyPath":"Копировать путь","settings.copy":"Копировать","filter.closePanel":"Закрыть панель фильтров","filter.basic":"Базовые фильтры","filter.advanced":"Расширенные фильтры","group.createNew":"Создать новую группу","group.clickToRemove":"Нажмите для удаления","group.addTag":"Добавить тег","accounts.trialExpiring":"Пробный период истекает","welcome.importantNotice":"⚠️ Важное уведомление","welcome.appName":"Kiro Account Manager","welcome.permanentlyFree":"Это программное обеспечение постоянно бесплатное","welcome.importantNoticeSoftwareFree":"Важное уведомление: это программное обеспечение постоянно бесплатное","welcome.openSourceFree":"• Это ПО полностью открыто и бесплатно, никто не может взимать плату в любой форме","welcome.allFeaturesOpen":"• Все функции полностью открыты без ограничений","welcome.reportIfCharged":"• Если с вас взимают плату, пожалуйста, сообщите немедленно","welcome.buyMeCoffee":"💖 Купите мне кофе","welcome.supportMessage":"Если этот инструмент вам помог, буду благодарен за чашечку кофе. Ваша поддержка - моя мотивация для продолжения обновлений ❤️","welcome.sponsorBenefits":"Преимущества для спонсоров:","welcome.priorityFeedback":"⚡ Приоритетная обработка обратной связи","welcome.priorityFeatures":"🎯 Приоритетная реализация функций","welcome.oneOnOneSupport":"🔧 Индивидуальная техническая поддержка","welcome.sponsorHint":"Совет: укажите ваше имя пользователя GitHub или email при спонсировании для удобства связи","welcome.joinUs":"Подписаться","welcome.tgChannel":"Telegram-канал","welcome.tgGroup":"Telegram-группа","welcome.alipay":"Alipay","welcome.wechatPay":"WeChat Pay","welcome.clickToEnlarge":"Нажмите на изображение для увеличения","welcome.iUnderstand":"Понятно","errors.saveAccountFailed":"Не удалось сохранить данные аккаунта","errors.getEmailFailed":"Не удалось получить email, проверьте статус аккаунта","errors.accountMissingIdentifiers":"У аккаунта отсутствуют userId, email или refresh_token","errors.accountNotFound":"Аккаунт не найден","errors.remoteDeleteNotSupported":"Удалённое удаление не поддерживается для этого типа аккаунта","errors.noCliAccounts":"В базе данных не найдены данные аккаунта","errors.multipleCliAccounts":"В базе данных найдено несколько аккаунтов, обратитесь к разработчику","errors.browserPathEmpty":"Путь к браузеру пуст","errors.stateMissing":"Параметр state не получен","errors.stateMismatch":"Несоответствие state","errors.authTimeout":"Тайм-аут авторизации","errors.authCodeMissing":"Код авторизации не получен","errors.refreshTokenExpired":"Refresh token истёк","errors.startUrlInvalid":"Неверный Start URL. Проверьте ваш IAM Identity Center Start URL.\n\nПример формата: https://d-1234567890.awsapps.com/start","errors.noAvailableAccount":"Не найден доступный аккаунт, соответствующий конфигурации шлюза","errors.loadBalancerFailed":"Load balancer не смог выбрать доступный аккаунт","app.accountBanned":"Аккаунт заблокирован","app.accountBannedMessage":"Аккаунт {{email}} был заблокирован и не может продолжать использоваться","app.tokenExpired":"Токен истёк","app.tokenExpiredMessage":"Токен аккаунта {{email}} истёк, пожалуйста, войдите снова","filter.set":"Установлено","filter.all":"Все","filter.statusNormal":"Нормальный","filter.statusCapped":"Ограничен","filter.statusBanned":"Заблокирован","filter.statusInvalid":"Недействителен","filter.statusExpired":"Истёк","home.expires":"истекает","agentConfig.selectProjectDirFailed":"Не удалось выбрать каталог проекта","common.preview":"Предпросмотр","about.closePreview":"Закрыть предпросмотр","about.kiroGoDesc":"Обратный прокси Kiro API со стандартными интерфейсами OpenAI и Anthropic","accountCard.enableDisableAccount":"Включить или отключить аккаунт","accountCard.overageToggle":"Переключатель перерасхода","accountCard.overageEnabled":"Перерасход включён","accountCard.cap":"Лимит","accountCard.resetDate":"Сброс {{date}}","common.viewRawResponse":"Показать исходный ответ","common.hideRawResponse":"Скрыть исходный ответ","app.networkError":"Ошибка сети","app.networkErrorMessage":"Не удалось синхронизировать аккаунты: {{count}}/{{total}}. Проверьте сетевое подключение","common.pleaseWait":"Пожалуйста, подождите...","common.noMatches":"Совпадения не найдены","home.remaining":"Осталось","sessions.title":"Менеджер сессий","sessions.subtitle":"Просмотр, поиск и экспорт истории диалогов Kiro IDE","sessions.workspaceCount":"{{count}} рабочих областей","sessions.loadedSessions":"Загружено сессий: {{count}}","sessions.selectedCount":"Выбрано: {{count}}","sessions.workspacesAndSessions":"Рабочие области и сессии","sessions.deleteCount":"Удалить ({{count}})","sessions.selectAll":"Выбрать все","sessions.deselectAll":"Снять выбор","sessions.searchPlaceholder":"Поиск сессий...","sessions.clearSearch":"Очистить поиск","sessions.searchResultCount":"Найдено сессий: {{count}}","sessions.noMatch":"Совпадающие сессии не найдены","sessions.deleteSessionTitle":"Удалить сессию","sessions.deleteSessionConfirm":"Вы уверены, что хотите удалить сессию «{{title}}»?","sessions.sessionDeleted":"Сессия удалена","sessions.deleteFailed":"Ошибка удаления: {{error}}","sessions.deleteWorkspaceTitle":"Удалить рабочую область","sessions.deleteWorkspaceConfirm":"Вы уверены, что хотите удалить рабочую область «{{name}}» и все её сессии?\n\nЭто действие необратимо!","sessions.workspaceDeleted":"Рабочая область «{{name}}» успешно удалена","sessions.deleteWorkspaceFailed":"Не удалось удалить рабочую область: {{error}}","sessions.batchDeleteWorkspaceTitle":"Массовое удаление рабочих областей","sessions.batchDeleteWorkspaceConfirm":"Вы уверены, что хотите удалить {{count}} выбранных рабочих областей и все их сессии?\n\nРабочие области: {{names}}\n\nЭто действие необратимо!","sessions.batchDeleteSuccess":"Успешно удалено рабочих областей: {{count}}","sessions.batchDeleteFailed":"Ошибка массового удаления: {{error}}","sessions.pleaseSelectWorkspace":"Сначала выберите рабочие области для удаления","sessions.sessionNotFound":"Не удалось найти рабочую область для этой сессии","sessions.exportSuccess":"Экспорт выполнен!","sessions.exportFailed":"Ошибка экспорта: {{error}}","sessions.expand":"Развернуть","sessions.collapse":"Свернуть","sessions.sessionCount":"{{count}} сессий","sessions.refresh":"Обновить список","sessions.loading":"Загрузка сессий...","sessions.conversationSummary":"Краткое содержание диалога (сжатие контекста)","sessions.noMessages":"В этой сессии нет сообщений","sessions.user":"Пользователь","sessions.assistant":"Ассистент","sessions.selectSessionToView":"Выберите сессию для просмотра подробностей","sessions.selectFromTree":"Выберите диалог в дереве рабочих областей слева или в результатах поиска.","sessions.loadingCli":"Загрузка...","sessions.loadSessionListFailed":"Не удалось загрузить список сессий: {{error}}","sessions.loadWorkspaceFailed":"Не удалось загрузить рабочие области: {{error}}","sessions.loadFailed":"Не удалось загрузить: {{error}}","cliSessions.loadListFailed":"Не удалось загрузить CLI-сессии: {{error}}","cliSessions.loadDetailFailed":"Не удалось загрузить подробности сессии: {{error}}","cliSessions.deleteTitle":"Удалить сессию","cliSessions.deleteConfirm":"Вы уверены, что хотите удалить эту CLI-сессию? Это действие необратимо.","cliSessions.deleted":"Сессия удалена","cliSessions.deleteFailed":"Ошибка удаления: {{error}}","cliSessions.exported":"Экспортировано в {{path}}","cliSessions.exportFailed":"Ошибка экспорта: {{error}}","cliSessions.searchPlaceholder":"Поиск сессий...","cliSessions.count":"{{count}} CLI-сессий","cliSessions.context":"Контекст: {{pct}}%","cliSessions.user":"Пользователь","cliSessions.assistant":"Ассистент","cliSessions.selectToView":"Выберите CLI-сессию для просмотра подробностей","gatewayLogs.title":"Монитор журналов запросов","gatewayLogs.description":"Просмотр записей запросов шлюза, попаданий локального кэша и статистики трафика в реальном времени","gatewayLogs.total":"Всего","gatewayLogs.success":"Успешно","gatewayLogs.error":"Ошибка","gatewayLogs.tokensInput":"Вх.","gatewayLogs.tokensOutput":"Вых.","gatewayLogs.cacheSaved":"(Сэкономлено {{pct}}% входного кэша)","gatewayLogs.cacheLabel":"Кэш:","gatewayLogs.cacheItems":"эл. (Delta: {{delta}} / LRU: {{lru}})","gatewayLogs.logRequests":"Записывать журнал запросов","gatewayLogs.clearCache":"Очистить кэш","gatewayLogs.searchPlaceholder":"Поиск аккаунта, модели, пути, источника или кода ответа...","gatewayLogs.filterAll":"Все коды ответа","gatewayLogs.filterSuccess":"Успешные ответы (2xx/3xx)","gatewayLogs.filterError":"Ответы с ошибкой (4xx/5xx)","gatewayLogs.keepLatest50":"Последние 50","gatewayLogs.keepLatest100":"Последние 100","gatewayLogs.keepLatest200":"Последние 200","gatewayLogs.logLevelTitle":"Уровень журнала шлюза","gatewayLogs.levelDebug":"Уровень Debug","gatewayLogs.levelInfo":"Уровень Info","gatewayLogs.levelWarn":"Уровень Warn","gatewayLogs.levelError":"Уровень Error","gatewayLogs.openLogDirTitle":"Открыть папку локальных журналов","gatewayLogs.logDir":"Папка журналов","gatewayLogs.exportTitle":"Экспорт в текстовый файл журнала","gatewayLogs.export":"Экспорт","gatewayLogs.clear":"Очистить","gatewayLogs.confirmClear":"Очистить?","gatewayLogs.colTime":"Время","gatewayLogs.colPath":"Эндпоинт","gatewayLogs.colAccount":"Аккаунт","gatewayLogs.colModel":"Целевая модель","gatewayLogs.colClient":"Клиент","gatewayLogs.colClientTitle":"User-Agent клиента (наведите для полного значения)","gatewayLogs.colStatusTitle":"Код состояния HTTP","gatewayLogs.colStatus":"Код","gatewayLogs.colInput":"Вход","gatewayLogs.colOutput":"Выход","gatewayLogs.colCacheReadTitle":"Токены чтения кэша","gatewayLogs.colCacheRead":"Чтение кэша","gatewayLogs.colCacheWriteTitle":"Токены записи кэша","gatewayLogs.colCacheWrite":"Запись кэша","gatewayLogs.colDuration":"Длительность","gatewayLogs.waitingTraffic":"Ожидание трафика шлюза...","gatewayLogs.noMatch":"Подходящие журналы запросов не найдены","gatewayLogs.cacheHitTitle":"Попадание в кэш","gatewayLogs.streamingTitle":"Потоковый ответ","gatewayLogs.requestPayload":"Тело запроса (Request Body)","gatewayLogs.responsePayload":"Журнал декодирования EventStream (Decoded EventStream)","gatewayLogs.sseDetailHint":"Пособытийный SSE-журнал стриминговых запросов пишется в файл:","gatewayLogs.openLogDir":"Открыть каталог журналов","gatewayLogs.sseShowEvents":"Показать события","gatewayLogs.sseLoading":"Загрузка…","gatewayLogs.sseNoEvents":"Для этого запроса нет SSE-событий (старые строки журнала не содержат метку req)","gatewayLogs.toastSseLoadFailed":"Не удалось прочитать SSE: {{error}}","gatewayLogs.copy":"Копировать","gatewayLogs.toastCacheCleared":"Системный кэш очищен","gatewayLogs.breakdownTitle":"Статистика по измерениям","gatewayLogs.healthTitle":"Здоровье аккаунтов","gatewayLogs.byModel":"По модели","gatewayLogs.byEndpoint":"По эндпоинту","gatewayLogs.byClient":"Кто пользуется (ключ × клиент)","gatewayLogs.colClientTool":"Клиент","gatewayLogs.colCount":"Запросы","gatewayLogs.unknownClient":"Неизвестно","gatewayLogs.noData":"Нет данных","gatewayLogs.cleanupStale":"Очистить устаревшие","gatewayLogs.healthUnavailable":"Шлюз не запущен; здоровье доступно только во время работы шлюза","gatewayLogs.colHealthScore":"Балл","gatewayLogs.colSuccess":"Успех","gatewayLogs.colFailure":"Ошибки","gatewayLogs.colConns":"Соед.","gatewayLogs.colAvgMs":"Ср. мс","gatewayLogs.colRateLimit":"Лимит","gatewayLogs.rateLimited":"Ограничен","gatewayLogs.rateLimitedHint":"Для этого аккаунта действует ограничение; нажмите, чтобы снять его сейчас","gatewayLogs.toastRateLimitCleared":"Ограничение для этого аккаунта снято","gatewayLogs.resetHealth":"Сбросить","gatewayLogs.cleanupExpired":"Очистить просроч.","gatewayLogs.cleanupExpiredTitle":"Удалить просроченные записи кэша","gatewayLogs.toastExpiredCleaned":"Удалено просроченных записей кэша: {{count}}","gatewayLogs.toastHealthReset":"Здоровье аккаунта сброшено","gatewayLogs.toastHealthResetFailed":"Не удалось выполнить: {{error}}","gatewayLogs.toastStaleCleaned":"Устаревшие записи здоровья очищены","gatewayLogs.toastClearCacheFailed":"Ошибка очистки кэша: {{error}}","gatewayLogs.toastLogsCleared":"Журналы шлюза очищены","gatewayLogs.toastClearFailed":"Ошибка очистки: {{error}}","gatewayLogs.toastExported":"Журналы успешно экспортированы","gatewayLogs.toastPayloadCopied":"Payload скопирован","gatewayLogs.toastCopyFailed":"Ошибка копирования","gatewaySummary.field.hostEmpty":"Адрес прослушивания не может быть пустым","gatewaySummary.field.hostInvalid":"Адрес должен быть localhost, IPv4 или IPv6","gatewaySummary.field.portRange":"Порт должен быть в диапазоне 1-65535","gatewaySummary.field.regionEmpty":"region не может быть пустым","gatewaySummary.field.regionUnsupported":"Неподдерживаемый region: {{region}}","gatewaySummary.field.accountMode":"accountMode должен быть single/group/pool","gatewaySummary.field.accountRequired":"Для режима single нужно выбрать аккаунт","gatewaySummary.field.groupRequired":"Для режима group нужно выбрать группу","gatewaySummary.field.allowlistRequired":"Для удалённого доступа нужен хотя бы один IP в белом списке","gatewaySummary.field.allowlistInvalid":"Недопустимая запись белого списка: {{entry}}","gatewaySummary.otherClient":"Другой OpenAI-совместимый клиент","gatewaySummary.unknownAccount":"Неизвестный аккаунт","gatewaySummary.exposureLocal":"Только локально","gatewaySummary.exposureRemote":"Удалённый доступ разрешён","gatewaySummary.exposureLocalFull":"Только локальный доступ","gatewaySummary.exposureRemoteFull":"Удалённый доступ разрешён","gatewaySummary.inventory":"Аккаунтов: {{accounts}} / Групп: {{groups}}","gatewaySummary.routing.single":"Один аккаунт","gatewaySummary.routing.singleDesc":"Всегда используется один аккаунт — удобно для отладки или привязки к одному клиенту.","gatewaySummary.routing.group":"Пул по группе","gatewaySummary.routing.groupDesc":"Сначала фиксируется группа, затем аккаунт выбирается по стратегии и порогу.","gatewaySummary.routing.pool":"Пул аккаунтов","gatewaySummary.routing.poolDesc":"Используются все доступные аккаунты, выбор по стратегии и порогу.","gatewaySummary.routing.currentAccount":"Текущий аккаунт","gatewaySummary.routing.currentGroup":"Текущая группа","gatewaySummary.routing.accountScope":"Диапазон аккаунтов","gatewaySummary.routing.noAccount":"Аккаунт не выбран","gatewaySummary.routing.noGroup":"Группа не выбрана","gatewaySummary.routing.allAccounts":"Все доступные аккаунты","gatewaySummary.routing.fixed":"Фиксированный аккаунт, без ротации","gatewaySummary.routing.strategyThreshold":"Стратегия {{strategy}} / порог {{threshold}}%","gatewaySummary.action.fixErrors":"Сначала исправьте ошибки конфигурации","gatewaySummary.action.fixErrorsDesc":"В форме есть недопустимые значения; сохранение, запуск и перезапуск заблокированы до исправления выделенных полей.","gatewaySummary.action.restartNeeded":"Конфигурация изменена — нужен перезапуск","gatewaySummary.action.restartNeededDesc":"Работает с конфигурацией момента запуска. Сначала сохраните, затем перезапустите.","gatewaySummary.action.unsavedRunning":"Рабочая конфигурация не сохранена","gatewaySummary.action.unsavedRunningDesc":"Текущая конфигурация уже применяется, но не записана в файл; сохраните её для следующего запуска.","gatewaySummary.action.running":"Работает","gatewaySummary.action.runningDesc":"Конфигурация совпадает с сохранённой; остановите службу, чтобы прервать трафик.","gatewaySummary.action.canStart":"Можно запустить с текущей конфигурацией","gatewaySummary.action.canStartDesc":"Запуск использует конфигурацию из формы; сохраните её, чтобы применить при следующем запуске.","gatewaySummary.action.stopped":"Не запущено","gatewaySummary.action.stoppedDesc":"Запустите текущую конфигурацию или сначала измените форму.","gatewaySummary.account.overage":"Превышение {{used}}{{cap}}","gatewaySummary.account.remaining":"Осталось {{remaining}}/{{quota}}","gatewaySummary.integration.logDirReady":"Каталог журналов определён","gatewaySummary.integration.logDirMissing":"Каталог журналов недоступен","gatewaySummary.integration.errorDigest":"Ошибок: {{errors}} / срабатываний: {{hits}}","gatewayMapping.title":"Правила сопоставления моделей","gatewayMapping.description":"Имена моделей, запрашиваемые клиентом, сопоставляются с внутренними моделями Kiro по правилам","gatewayMapping.empty":"Правил пока нет","gatewayMapping.ruleReplace":"Замена","gatewayMapping.ruleAlias":"Псевдоним","gatewayMapping.ruleLoadBalance":"Балансировка","gatewayMapping.addNewRule":"Добавить новое правило","gatewayMapping.sourcePlaceholder":"Имя исходной модели","gatewayMapping.targetPlaceholder":"Имя целевой модели","gatewayMapping.typeReplace":"Замена (replace)","gatewayMapping.typeAlias":"Псевдоним (alias)","gatewayMapping.add":"Добавить","gatewayMapping.presetTitle":"Быстрое добавление совместимых отображений OpenAI/Codex","gatewayMapping.presetButton":"Предустановки GPT","gatewayMapping.fetchModelsFailed":"Не удалось получить список доступных моделей","gatewayMapping.addedRule":"Добавлено правило сопоставления: {{name}}","gatewayMapping.presetLoaded":"Успешно загружено {{count}} предустановленных правил","gatewayMapping.presetExists":"Все предустановленные правила уже существуют","gatewaySummary.security.keysFixed":"Фиксированный: kiro","settings.openMcpFile":"Редактировать конфигурацию MCP","settings.openSandboxFile":"Редактировать конфигурацию песочницы","sessions.timeJustNow":"только что","sessions.timeMinutesAgo":"{n} мин. назад","sessions.timeHoursAgo":"{n} ч. назад","sessions.timeDaysAgo":"{n} дн. назад","sessions.noSessions":"Пока нет сессий","sessions.noSessionsForProject":"Для этого проекта нет сессий","sessions.copy":"Копировать","sessions.copied":"Скопировано","welcome.freeNotice":"О бесплатности","gateway.credits":"Расход","gatewayLogs.colCredits":"Расход","gatewayLogs.colCreditsTitle":"Реальный расход из meteringEvent вышестоящего сервера; отсутствует для нестриминговых запросов","gateway.cacheReadWrite":"Кэш Ч/З","gateway.cacheReadWriteTitle":"Токены чтения кэша (попадание, экономия) / записи кэша (первый раз, +25% стоимости)","gateway.creditsTitle":"Реальный расход из meteringEvent вышестоящего сервера; отсутствует для нестриминговых запросов","gateway.sessionAffinityToggle":"Привязка сессии","gateway.sessionAffinityHint":"Направлять один IP клиента на один аккаунт: кэш вышестоящего сервера привязан к аккаунту, фиксированная маршрутизация повышает попадания кэша (см. столбец чтения кэша в журналах)","gateway.logStreamEventsToggle":"Журнал событий потока","gateway.logStreamEventsHint":"Писать дамп SSE-событий для каждого стримингового запроса для отладки порядка фрагментов; держите выключенным для экономии диска","gatewayLogs.colContext":"Контекст","gatewayLogs.colContextTitle":"Процент заполнения окна контекста (0-100) из contextUsageEvent вышестоящего сервера; ≥80% — близко к пределу. Только для стриминговых запросов","gatewayLogs.contextLabel":"Контекст","gatewayLogs.contextPeak":"пик","gatewayLogs.contextPeakTitle":"Максимальное заполнение контекста в текущем списке","gatewayLogs.contextNearLimit":"{{count}} ≥80%","gatewayUsage.tabUsage":"Использование","gatewayUsage.noData":"Нет данных","gatewayUsage.requests":"{{count}} запросов","gatewayUsage.ok":"{{count}} успешно","gatewayUsage.failed":"{{count}} с ошибкой","gatewayUsage.streamed":"{{count}} стримовых","gatewayUsage.tokens":"Токены вх {{input}}K / исх {{output}}K","gatewayUsage.cache":"Кэш чтение {{read}}K / запись {{write}}K · {{hit}} попаданий","gatewayUsage.credits":"Расход","gatewayUsage.creditsTitle":"Реальный расход из meteringEvent вышестоящего сервера (не токены × цена); отсутствует для нестриминговых запросов","gatewayUsage.contextAvg":"Контекст сред.","gatewayUsage.contextMax":"пик","gatewayUsage.byModel":"По модели","gatewayUsage.byClient":"По клиенту","gatewayUsage.byEndpoint":"По эндпоинту","gatewayUsage.colCount":"Запросы","gatewayUsage.colErrors":"Ошибки","gatewayUsage.colTokens":"Токены","gatewayUsage.colCacheRead":"Кэш чтение","gatewayUsage.colCredits":"Расход","gatewayMaskRules.title":"Правила маскирования","gatewayMaskRules.desc":"Настройте действия по типам, добавьте свои регулярные выражения и список значений, которые никогда не маскируются. Сохраняется с конфигом шлюза.","gatewayMaskRules.kindsTitle":"Встроенные типы","gatewayMaskRules.kindsHint":"Для каждого типа: Маскировать (плейсхолдер) / Предупреждать (пропускать с записью) / Блокировать (отклонить запрос); выключение переключателя убирает весь тип.","gatewayMaskRules.customTitle":"Свои правила","gatewayMaskRules.noCustom":"Своих правил нет. Добавьте регулярные выражения для внутренних форматов токенов, приватных префиксов и т.п.","gatewayMaskRules.addRule":"Добавить правило","gatewayMaskRules.ruleName":"Имя правила (напр. internal-token)","gatewayMaskRules.patternPlaceholder":"Регулярное выражение, напр. \bACME-[A-Z0-9]{12}\b","gatewayMaskRules.neverTitle":"Никогда не маскировать","gatewayMaskRules.neverHint":"Значения из белого списка совпадают точно и сильнее любого правила — не маскируются, не предупреждаются, не блокируются. Для задач, где модель должна работать с самим значением. Внимание: значения хранятся открытым текстом в файле конфигурации.","gatewayMaskRules.addNever":"Добавить значение","gatewayMaskRules.neverValue":"Значение для пропуска (точное совпадение)","gatewayMaskRules.neverNote":"Примечание (что это за значение)","gatewayMaskRules.manage":"Правила","gatewayMaskRules.actionMask":"Маскировать","gatewayMaskRules.actionWarn":"Предупреждать","gatewayMaskRules.actionBlock":"Блокировать","gatewayMaskRules.kindApiKey":"API-ключи (sk- / AKIA / ghp_ / xox)","gatewayMaskRules.kindPrivateKey":"Приватные ключи (PEM-блоки)","gatewayMaskRules.kindToken":"Токены (Bearer / JWT)","gatewayMaskRules.kindEmail":"Почта","gatewayMaskRules.kindCreditCard":"Банковские карты (проверка Luhn)","gatewayMaskRules.kindIdCard":"Удостоверения (18 цифр)","gatewayMaskRules.idRequired":"ID правила не может быть пустым","gatewayMaskRules.idDuplicate":"Дубликат ID правила: {id}","gatewayMaskRules.badPattern":"Правило «{name}» содержит недопустимое регулярное выражение: {error}","gatewayMaskRules.saved":"Правила маскирования сохранены","gatewayMasking.trendSessionHint":"Тренд маскирования (по часам) · только этот запуск","gatewayMasking.sessionScopeNotice":"Записи маскирования хранятся только в памяти по соображениям приватности (никогда на диске) и очищаются при перезапуске, поэтому тренд покрывает только этот запуск. Тренд запросов за 7 дней — на вкладке «Использование».","gatewayMasking.tabMasking":"Маскирование","gatewayMasking.totalMasked":"Замаскировано значений: {{count}}","gatewayMasking.totalWarned":"Предупреждений: {{count}}","gatewayMasking.requestsAffected":"Затронуто запросов: {{count}}","gatewayMasking.tryIt":"Попробуйте: что увидит поставщик для этого текста","gatewayMasking.tryPlaceholder":"Вставьте текст с ключом / почтой / номером удостоверения","gatewayMasking.run":"Запустить","gatewayMasking.noHits":"Ни одно правило не сработало","gatewayMasking.records":"Записи маскирования (только метаданные, без реальных значений)","gatewayMasking.noRecords":"Записей пока нет. Включите маскирование в настройках; записываются только новые запросы.","gatewayMasking.vendorSaw":"Что фактически получил поставщик (плейсхолдеры)","gatewayMasking.hits":"Срабатывания","gatewayMasking.shapedBadge":"та же форма","gatewayMasking.shapedHint":"Замена той же формы: поставщик получил выдуманный ключ той же формы, что и настоящий, а не плейсхолдер","gatewayMasking.requestId":"ID запроса","gatewayMasking.notice":"Реальные значения хранятся только в памяти и исчезают при выходе из процесса; даже исходный текст здесь не хранится — сравнение «до/после» ищите по ID запроса в журнале запросов. Записи очищаются при перезапуске.","gatewayMasking.kindPieTitle":"Срабатывания по типам","gatewayMasking.trendTitle":"Тренд маскирования (по часам)","gatewayMasking.seriesMasked":"Замаскировано","gatewayMasking.seriesWarned":"Предупреждения","gateway.privacyMaskToggle":"Маскирование приватности","gateway.privacyMaskHint":"Заменять ключи/почты/ID на плейсхолдеры до ухода запроса с этого компьютера и возвращать в ответе. Одно значение всегда получает один плейсхолдер (сохраняет попадания кэша); при сбое маскирования запрос отклоняется","gateway.maskShapeToggle":"Замена той же формы","gateway.maskShapeHint":"Когда включено, ключи уходят не плейсхолдером, а выдуманным ключом той же формы (тот же префикс, длина и классы символов): проверка формата ключа у агента или инструмента проходит, и модели не на что пожаловаться. Короткие ключи и значения с необычными символами откатываются к плейсхолдеру","gatewayUsage.cacheHit":"Попадание","gatewayUsage.cacheMiss":"Промах","gatewayUsage.trendTitle":"Трафик (по часам)","gatewayUsage.trendHint":"Запросы/ошибки и токены вход-выход (правая ось)","gatewayUsage.seriesRequests":"Запросы","gatewayUsage.seriesErrors":"Ошибки","gatewayUsage.seriesInputTokens":"Входные токены","gatewayUsage.seriesOutputTokens":"Выходные токены","gatewayUsage.cachePieTitle":"Доля попаданий кэша","gatewayUsage.creditsTrendTitle":"Тренд расхода (кредиты)","gatewaySessions.tabSessions":"Сессии","gatewaySessions.title":"Использование по сессиям","gatewaySessions.session":"Сессия","gatewaySessions.requests":"Запросы","gatewaySessions.models":"Модели","gatewaySessions.lastActive":"Последняя активность","gatewaySessions.loadFailed":"Ошибка загрузки: {error}","gatewaySessions.empty":"Пока нет данных по сессиям (запросы группируются здесь по сессиям)","gatewaySessions.hint":"Группировка по sessionId; клиент может помечать сессии заголовком x-session-id, иначе используется ключ «IP|UA».","gatewayBills.tabBills":"Счета","gatewayBills.title":"Детализация счетов","gatewayBills.account":"Аккаунт","gatewayBills.model":"Модель","gatewayBills.requests":"Запросы","gatewayBills.totalRequests":"Всего запросов","gatewayBills.loadFailed":"Ошибка загрузки: {error}","gatewayBills.empty":"Пока нет данных счетов (привязка к аккаунтам ведётся с момента появления поля account_id)","gatewayBills.hint":"Агрегация «аккаунт × модель»; credits — реальные значения meteringEvent от вендора. Запросы до появления поля account_id не атрибутируются.","gatewayQuota.tabQuota":"Квоты","gatewayQuota.title":"Обзор квот","gatewayQuota.account":"Аккаунт","gatewayQuota.upstreamQuota":"Квота провайдера","gatewayQuota.creditsUsed":"Израсходовано credits","gatewayQuota.status":"Статус","gatewayQuota.queryFailed":"Ошибка запроса","gatewayQuota.ok":"Норма","gatewayQuota.loadFailed":"Ошибка загрузки: {error}","gatewayQuota.empty":"В области шлюза нет аккаунтов","gatewayQuota.hint":"Квота провайдера берётся из того же источника, что и на странице аккаунтов (без обновления токена; ошибки сообщаются). Локальное расходование агрегировано из журналов по аккаунтам.","gatewayUsage.cacheRead":"Чтения кэша","gatewayQuota.overage":"Сверхлимит","gatewayQuota.overageCapable":"Превышение доступно","gatewayQuota.overageIncapable":"Без превышения","gatewayUsage.subOverview":"Обзор","gatewayUsage.subSessions":"Сессии","gatewayUsage.subContext":"Контекст","gatewayContext.title":"Заполнение контекста","gatewayContext.avgScore":"Средний балл","gatewayContext.cacheRate":"Доля попаданий в кэш","gatewayContext.baseline":"База (фикс. старт)","gatewayContext.growth":"Рост за ход","gatewayContext.curve":"Кривая заполнения сессии","gatewayContext.promptTokens":"Prompt tokens","gatewayContext.medianTokens":"Медианный prompt","gatewayContext.tags":"Метки","gatewayContext.empty":"Данных о составе prompt пока нет (накапливаются с новыми журналами)","gatewayContext.hintSessions":"Сессий с инструментами: {{count}}; сжатий всего: {{compacts}}.","gatewayContext.hintFull":"Учитываются только сессии с определениями инструментов (шум вроде генерации заголовков исключён); доля кэша — только по запросам, где провайдер вернул usage; база = медиана system+tools+memory, рост = медиана положительных приращений. Окно определяется по имени модели; если это не удалось, оценка и метки, зависящие от окна, не выставляются.","gatewayContext.mapTitle":"Состав контекста","gatewayContext.mapFree":"Свободно","gatewayContext.mapEmpty":"Для этой сессии пока нет данных о составе prompt","gatewayContext.part.system":"Системный промпт","gatewayContext.part.tools":"Определения инструментов","gatewayContext.part.skills":"Навыки","gatewayContext.part.memory":"Память/инструкции","gatewayContext.part.files":"Файлы","gatewayContext.part.results":"Результаты инструментов","gatewayContext.part.chat":"Переписка","gateway.conversationsToggle":"Запись диалогов","gateway.conversationsHint":"Сохранять части ввода/вывода каждого хода для воспроизведения на странице использования; тексты сначала проходят маскирование, хранение 7 дней, лимит 256МБ","gatewayReplay.title":"Воспроизведение диалогов","gatewayReplay.clear":"Очистить записи","gatewayReplay.turns":"ходов","gatewayReplay.loading":"Загрузка…","gatewayReplay.empty":"Нет ходов для воспроизведения","gatewayReplay.truncated":"усечено"}}},interpolation:{escapeValue:!1},react:{useSuspense:!1}}),function(e=document,t=8e3,o){"function"==typeof(null==e?void 0:e.getElementById)&&"function"==typeof setTimeout&&setTimeout(()=>{ug(e)&&(null==o||o())},t)}(document,void 0,()=>{de().catch(e=>{})}),J(()=>import("./index-F5Ibg_-9.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])).catch(()=>{}),function(e=document){const t=om(e);e.documentElement.dataset.os=t}(),document.addEventListener("keydown",e=>{if("F5"!==e.key&&"F12"!==e.key||e.preventDefault(),e.ctrlKey||e.metaKey){const t=e.key.toLowerCase();["r","u","p","s","g","f"].includes(t)&&e.preventDefault(),e.shiftKey&&["i","j"].includes(t)&&e.preventDefault()}}),document.addEventListener("contextmenu",e=>{e.preventDefault()});const nm=document.getElementById("root");if(!nm)throw new Error("Failed to find the root element");re.createRoot(nm).render(ie.jsx(tm,{children:ie.jsx(Yu,{children:ie.jsx(Zg,{attribute:"data-theme",defaultTheme:"dark",enableSystem:!0,disableTransitionOnChange:!0,themes:ng.filter(e=>"system"!==e),children:ie.jsx(Bi,{children:ie.jsx(ku,{children:ie.jsx(Bt,{children:ie.jsx(Xg,{})})})})})})}));export{uu as $,Ft as A,Sn as B,Nt as C,Xu as D,Sg as E,Pe as F,De as G,Lt as H,Ae as I,Te as J,bg as K,qt as L,Lg as M,xg as N,Dg as O,Eg as P,Qt as Q,nu as R,su as S,Bi as T,iu as U,ru as V,lu as W,cu as X,wu as Y,du as Z,J as _,xu as a,ii as a$,jt as a0,Og as a1,Ce as a2,Me as a3,Ie as a4,ye as a5,_g as a6,xe as a7,ve as a8,be as a9,Rt as aA,Ls as aB,$s as aC,Js as aD,Ys as aE,Xs as aF,Is as aG,og as aH,Eu as aI,qu as aJ,Vu as aK,Qu as aL,zu as aM,Cu as aN,Ku as aO,Au as aP,Iu as aQ,_u as aR,Ou as aS,Gu as aT,Mu as aU,Ru as aV,Pu as aW,Wu as aX,_t as aY,Ot as aZ,Hu as a_,ke as aa,hu as ab,Lu as ac,Uu as ad,Tu as ae,fu as af,Nu as ag,ju as ah,Fu as ai,yu as aj,pu as ak,Jt as al,si as am,Tn as an,zn as ao,ei as ap,Zs as aq,Ln as ar,Yt as as,An as at,Kn as au,Pn as av,Wt as aw,Du as ax,Fn as ay,Wn as az,Gg as b,Da as b0,Ea as b1,Ka as b2,Yn as b3,to as b4,ce as b5,rg as b6,lg as b7,oo as b8,xn as c,Hg as d,Wi as e,Gi as f,mu as g,qi as h,Bu as i,ie as j,ue as k,ge as l,Mg as m,Rg as n,Fg as o,Cg as p,Se as q,me as r,pe as s,Tg as t,Zu as u,Pg as v,fe as w,we as x,Ee as y,he as z};