limixbot 0.2.13 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{ActivityPanel-Crvi6UFN.js → ActivityPanel-O6Su2c-u.js} +1 -1
- package/dist/assets/{App-DBQxC6tF.js → App-Bcey1qup.js} +108 -108
- package/dist/assets/{AppEventEditor-BKkrL3lm.js → AppEventEditor-BlJGPJ3Z.js} +1 -1
- package/dist/assets/{BotSettingsDialog-BVTAiGvS.js → BotSettingsDialog-PiCk9us7.js} +4 -4
- package/dist/assets/{BrowserPanel-CXiPysF8.js → BrowserPanel-BWcb5CXi.js} +1 -1
- package/dist/assets/{BrowserProfilesManager-B5ZQeFJ9.js → BrowserProfilesManager-dKHyQotG.js} +1 -1
- package/dist/assets/{CloudAddDialog-CjSOW3Ui.js → CloudAddDialog-D1ZSbkxV.js} +1 -1
- package/dist/assets/{ComputerFilesPane-VwEQWopG.js → ComputerFilesPane-wgtikCgi.js} +1 -1
- package/dist/assets/{ComputerPanel-C4y6Mvwd.js → ComputerPanel-Cyj53a7W.js} +2 -2
- package/dist/assets/{DataPanel-CeaLVEeb.js → DataPanel-BlBidswi.js} +1 -1
- package/dist/assets/{DesktopViewer-CfxFVwdn.js → DesktopViewer-D7JeLJbi.js} +1 -1
- package/dist/assets/{FilesView-B9X_qlkn.js → FilesView-CNkEKeZB.js} +1 -1
- package/dist/assets/{GrokMoveDialog-CuC9v4Fd.js → GrokMoveDialog-fyBulzXL.js} +2 -2
- package/dist/assets/{InspectorPanel-B6ZAVTyD.js → InspectorPanel-Cut2OqiB.js} +1 -1
- package/dist/assets/{KeyboardShortcutsModal-DkoOxF2t.js → KeyboardShortcutsModal-DnxUB4cd.js} +1 -1
- package/dist/assets/{LiveDesktop-BsPQ6sGB.js → LiveDesktop-CnbyXW61.js} +1 -1
- package/dist/assets/{LocalVmWorkspace-U6rVY7_g.js → LocalVmWorkspace-D9xFPGF0.js} +1 -1
- package/dist/assets/{MacLocalControl-CC-lKazM.js → MacLocalControl-CpswtfCI.js} +1 -1
- package/dist/assets/{MarkdownFilePreview-D0maDIQ1.js → MarkdownFilePreview-V-y-0ksi.js} +1 -1
- package/dist/assets/{MenuMotion-CLF0GByT.js → MenuMotion-VeZ_fZ8M.js} +1 -1
- package/dist/assets/NewBotDialog-rBjsSV0e.js +1 -0
- package/dist/assets/{PhoneAppDialog-CTPZwJnL.js → PhoneAppDialog-DAW1N-hM.js} +1 -1
- package/dist/assets/{PlacesRail-D510vk5R.js → PlacesRail-C_3Mh4C8.js} +1 -1
- package/dist/assets/{PluginsPanel-BC0YDZ8h.js → PluginsPanel-CMsgWSNg.js} +1 -1
- package/dist/assets/{ProIntroduction-BIiaveWm.js → ProIntroduction-6ByF2_US.js} +1 -1
- package/dist/assets/{RemoteAgentSettingsPanel-OVWheJHu.js → RemoteAgentSettingsPanel-D4X4rHMQ.js} +1 -1
- package/dist/assets/{RoomPanel-mDRTZ2vs.js → RoomPanel-mg6M04wy.js} +1 -1
- package/dist/assets/{RoutinesPage-9VDuovqw.js → RoutinesPage-DomuZMUT.js} +2 -2
- package/dist/assets/{SettingsModal-BHJvNrwz.js → SettingsModal-Dd9l0b2C.js} +1 -1
- package/dist/assets/{ShareTeamDialog-C4go2USY.js → ShareTeamDialog-B_0Gr8Mq.js} +1 -1
- package/dist/assets/{SignedInSites-Cm_X_p_X.js → SignedInSites-C-eqeBxT.js} +1 -1
- package/dist/assets/TeamLibraryPanel-DpXOFOQr.js +1 -0
- package/dist/assets/{TeamMapPage-CkYOrZ7X.js → TeamMapPage-CIQPYaxL.js} +1 -1
- package/dist/assets/{TriggersPage-_qYPJ97Z.js → TriggersPage-D7RDjrjV.js} +1 -1
- package/dist/assets/{VisibilitySection-CpwyInUL.js → VisibilitySection-Bimhk6c5.js} +1 -1
- package/dist/assets/{WebhookTrigger-CfspvK5m.js → WebhookTrigger-D5c2bPJu.js} +1 -1
- package/dist/assets/{WorksOnGrid-BtfeNPO2.js → WorksOnGrid-PZ-caKHg.js} +1 -1
- package/dist/assets/{abnfDiagram-YUKMZFIV-qTIn3JJ1.js → abnfDiagram-YUKMZFIV-D7az-C1J.js} +1 -1
- package/dist/assets/{activity-CEhxqMcq.js → activity-W_ia4q-Y.js} +1 -1
- package/dist/assets/{architectureDiagram-47P4ROYG-BQls0L4i.js → architectureDiagram-47P4ROYG-B2IC9169.js} +1 -1
- package/dist/assets/{blockDiagram-E7TT5TSB-DMD6noIL.js → blockDiagram-E7TT5TSB-FnweBzU4.js} +1 -1
- package/dist/assets/{c4Diagram-CRA5TL53-CIp2zuwT.js → c4Diagram-CRA5TL53-rxgwSaAP.js} +1 -1
- package/dist/assets/{calendar-days-Di_J-dvc.js → calendar-days-wM1DS-Cu.js} +1 -1
- package/dist/assets/channel-BQyC_QMX.js +1 -0
- package/dist/assets/{chunk-2Q5K7J3B-BBkqbpZ4.js → chunk-2Q5K7J3B-B7yhqEe8.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-JdwNE0CO.js → chunk-5VM5RSS4-Sw6phnaf.js} +1 -1
- package/dist/assets/{chunk-7TKQ45FW-D_Zh7_1M.js → chunk-7TKQ45FW-CheglUSd.js} +1 -1
- package/dist/assets/{chunk-AW2ZBBNX-BvSbOQeA.js → chunk-AW2ZBBNX-CswkqPkf.js} +1 -1
- package/dist/assets/{chunk-FVRAUYC3-CXYsdaIb.js → chunk-FVRAUYC3-DeN53o4S.js} +2 -2
- package/dist/assets/{chunk-HTAEGDNF-CO93FKYG.js → chunk-HTAEGDNF-CCZ_Udf0.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-Ko0D98Sv.js → chunk-JWPE2WC7-nG1rfC9P.js} +1 -1
- package/dist/assets/{chunk-KQW6MTUR-DBGMbUnJ.js → chunk-KQW6MTUR-Bh_TxL0e.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-PVMPph1f.js → chunk-XXDRQBXY-CLIJBS-V.js} +1 -1
- package/dist/assets/{classDiagram-v2-K4WV4PDN-Z-SRrzrQ.js → classDiagram-v2-K4WV4PDN-B04FntQx.js} +1 -1
- package/dist/assets/{coins-QIRjm19F.js → coins-81htcDNx.js} +1 -1
- package/dist/assets/{core-Cb-3LQeb.js → core-BLAzrox0.js} +1 -1
- package/dist/assets/{cose-bilkent-JH36ORCC-DcOhjasx.js → cose-bilkent-JH36ORCC-D9PAieWF.js} +1 -1
- package/dist/assets/{cynefin-EF2NZ3EQ-D9Pv76Si.js → cynefin-EF2NZ3EQ-BAC2DRg5.js} +1 -1
- package/dist/assets/{cynefinDiagram-3GCD6N5R-1Nlm6fT4.js → cynefinDiagram-3GCD6N5R-Cc3k_C-5.js} +1 -1
- package/dist/assets/{dagre-W4DXFKR2-CW-TdWBz.js → dagre-W4DXFKR2-CpbzxBGo.js} +1 -1
- package/dist/assets/{diagram-2UJZ2QOL-DJYwBSWN.js → diagram-2UJZ2QOL-d22NGVzG.js} +1 -1
- package/dist/assets/{diagram-OVF4WLC6-ZajDgMU2.js → diagram-OVF4WLC6-BFTJTNpN.js} +1 -1
- package/dist/assets/{diagram-PFPMY2P6-D03UoQDq.js → diagram-PFPMY2P6-CA_YgAo3.js} +1 -1
- package/dist/assets/{diagram-UMYRVEAY-B9gI6La0.js → diagram-UMYRVEAY-CCsuWndY.js} +1 -1
- package/dist/assets/{diagram-YEKJPTXX-Dxzg_fDQ.js → diagram-YEKJPTXX-Bcwhmpgl.js} +1 -1
- package/dist/assets/{diagram-ZIFT7M5P-Cv6eTFZE.js → diagram-ZIFT7M5P-Bs1iIjhq.js} +1 -1
- package/dist/assets/{ebnfDiagram-VR2GEFS7-BCUklW6x.js → ebnfDiagram-VR2GEFS7-CFr96fLM.js} +1 -1
- package/dist/assets/{elk-IJKZMXRS-VcZs96wT.js → elk-IJKZMXRS-DSdTG_hW.js} +1 -1
- package/dist/assets/{erDiagram-O2IAPWRE-CJ61fO-Z.js → erDiagram-O2IAPWRE-BGdMdwi1.js} +1 -1
- package/dist/assets/{file-up-BObBqrEg.js → file-up-DvGMRF5I.js} +1 -1
- package/dist/assets/{flowDiagram-OXPTDLAJ-CQMoLXxB.js → flowDiagram-OXPTDLAJ-DL25A20O.js} +1 -1
- package/dist/assets/{ganttDiagram-R7TSEDQI-ev5i74AH.js → ganttDiagram-R7TSEDQI-DQaNIRGv.js} +1 -1
- package/dist/assets/{gitGraphDiagram-XJZIOB7I-B8MGdCiz.js → gitGraphDiagram-XJZIOB7I-B6ypA1ZF.js} +1 -1
- package/dist/assets/{import-name-6aD0J6QH.js → import-name-Cdh9ZlkK.js} +1 -1
- package/dist/assets/{index-Dpov1WyC.js → index-BaW02tJl.js} +1 -1
- package/dist/assets/{index-CRF26t5P.js → index-CxcnLo81.js} +1 -1
- package/dist/assets/{index-DgGTgaCO.js → index-oVds-_Vz.js} +2 -2
- package/dist/assets/{infoDiagram-5W2HQ5XZ-CoqaIohe.js → infoDiagram-5W2HQ5XZ-8YbtI4S4.js} +1 -1
- package/dist/assets/{ishikawaDiagram-K3B6WC7H-BMzA3Pkb.js → ishikawaDiagram-K3B6WC7H-DYpDWk2K.js} +1 -1
- package/dist/assets/{journeyDiagram-COXZFDF6-DLNIN037.js → journeyDiagram-COXZFDF6-BUd8Vnbq.js} +1 -1
- package/dist/assets/{kanban-definition-P3RFRI5V-savLUzO8.js → kanban-definition-P3RFRI5V-AywqsEBB.js} +1 -1
- package/dist/assets/{mcp-servers-D2hHUxUp.js → mcp-servers-Bu5RuYBT.js} +1 -1
- package/dist/assets/{mermaid.core-1h5EGl1v.js → mermaid.core-B5yiNmEY.js} +4 -4
- package/dist/assets/{mindmap-definition-LZFPQGKD-hMbAYcVv.js → mindmap-definition-LZFPQGKD-DRALSCg6.js} +1 -1
- package/dist/assets/{minimize-63hYzV5y.js → minimize-CWsi9mRL.js} +1 -1
- package/dist/assets/{monitor-DOeLdhQc.js → monitor-c1mf38zt.js} +1 -1
- package/dist/assets/{new-bot-DkcWCdL_.js → new-bot-mp2gi3ed.js} +1 -1
- package/dist/assets/{org-library-C-rnQ1YG.js → org-library-Bi3EieNo.js} +1 -1
- package/dist/assets/{package-format-CMpBgycc.js → package-format-CaPiTXn3.js} +1 -1
- package/dist/assets/{pegDiagram-BGZESJAR-BIY55aib.js → pegDiagram-BGZESJAR-Drj_UJz5.js} +1 -1
- package/dist/assets/{pieDiagram-CAPJLFHJ-DR8o8piD.js → pieDiagram-CAPJLFHJ-CL7MryRt.js} +1 -1
- package/dist/assets/{quadrantDiagram-GDMTTRAM-Dqb1703W.js → quadrantDiagram-GDMTTRAM-BvWxqPJn.js} +1 -1
- package/dist/assets/{rail-Ok1gt1lN.js → rail-DApFzTxo.js} +1 -1
- package/dist/assets/{railroadDiagram-SM67HX2B-ZWJ9xWQY.js → railroadDiagram-SM67HX2B-CGfR0UsO.js} +1 -1
- package/dist/assets/{remote-desktop-panel-ganxVzJo.js → remote-desktop-panel-B4uIIoh3.js} +1 -1
- package/dist/assets/{requirementDiagram-X7JNWC4A-Cjv_VLZj.js → requirementDiagram-X7JNWC4A-CJq96anP.js} +1 -1
- package/dist/assets/{sankeyDiagram-UM26HJRW-ChHoiXzB.js → sankeyDiagram-UM26HJRW-BdZSA65i.js} +1 -1
- package/dist/assets/{sequenceDiagram-ZO4K6R2Y-B67gwOH0.js → sequenceDiagram-ZO4K6R2Y-B5W6udgn.js} +1 -1
- package/dist/assets/{sizeCapture-INFHLROL-DOr4ZALb.js → sizeCapture-INFHLROL-CuKCNVLn.js} +1 -1
- package/dist/assets/{stateDiagram-v2-TBUQTH76-DnoBtm-E.js → stateDiagram-v2-TBUQTH76-C7mAgpvB.js} +1 -1
- package/dist/assets/{styles-BcVNrxGE.js → styles-C_rlkDrt.js} +2 -2
- package/dist/assets/styles-bUbK33f1.css +1 -0
- package/dist/assets/{swimlanes-N4OXWK64-2TFXb7MH.js → swimlanes-N4OXWK64-D-mimAU7.js} +1 -1
- package/dist/assets/swimlanesDiagram-K3J5GTZL-Dn31PG7h.js +8 -0
- package/dist/assets/{team-share-C9qIusMs.js → team-share-wuAG66b7.js} +1 -1
- package/dist/assets/{timeline-definition-YOQAKGHF-4zjxAMyG.js → timeline-definition-YOQAKGHF-C5prnOXi.js} +1 -1
- package/dist/assets/{usecaseDiagram-VIAY4XPW-CCfZ1eoO.js → usecaseDiagram-VIAY4XPW-BC-9KKSF.js} +1 -1
- package/dist/assets/{vennDiagram-BLWOH2XV-h7rTFRTN.js → vennDiagram-BLWOH2XV-LCNTQN9e.js} +1 -1
- package/dist/assets/{vi-KgT8L8Qj.js → vi-NX09tr5q.js} +1 -1
- package/dist/assets/{wardleyDiagram-YMQ3BMBF-CXwA22zv.js → wardleyDiagram-YMQ3BMBF-CtWGEzVU.js} +1 -1
- package/dist/assets/{xychartDiagram-TAQBALBS-d4qol5BJ.js → xychartDiagram-TAQBALBS-DadPRdBp.js} +1 -1
- package/dist/index.html +3 -3
- package/dist/rail.html +5 -5
- package/dist-server/container-mcp.js +22 -21
- package/dist-server/index.js +106 -105
- package/dist-server/openmausbot.js +24 -24
- package/dist-server/package.json +1 -1
- package/dist-server/pair-cli.js +24 -24
- package/dist-server/server/config.js +6 -1
- package/dist-server/server/container-computer.js +4 -4
- package/dist-server/server/host/team-connections-host.js +2 -2
- package/dist-server/server/index.js +20 -3
- package/dist-server/server/mcp-registry.js +2 -2
- package/dist-server/server/service-unit.js +1 -1
- package/dist-server/server/skill-library.js +1 -1
- package/dist-server/server/team-library.js +2 -2
- package/dist-server/shared/grok-import.js +1 -1
- package/dist-server/shared/package-format.js +3 -3
- package/dist-server/vps-container-mcp.js +22 -21
- package/dist-server/workspace-backup.worker.js +20 -20
- package/package.json +1 -1
- package/dist/assets/NewBotDialog-D9e-ED-j.js +0 -1
- package/dist/assets/TeamLibraryPanel-B-R6YFK-.js +0 -1
- package/dist/assets/channel-DRGNbeY-.js +0 -1
- package/dist/assets/styles-D-yh7Z23.css +0 -1
- package/dist/assets/swimlanesDiagram-K3J5GTZL-C_836Lnu.js +0 -8
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
`+p[n].replace(" at new "," at ");return e.displayName&&O.includes("<anonymous>")&&(O=O.replace("<anonymous>",e.displayName)),O}while(1<=n&&0<=i);break}}}finally{nr=!1,Error.prepareStackTrace=o}return(o=e?e.displayName||e.name:"")?kt(o):""}function Jg(e,t){switch(e.tag){case 26:case 27:case 5:return kt(e.type);case 16:return kt("Lazy");case 13:return e.child!==t&&t!==null?kt("Suspense Fallback"):kt("Suspense");case 19:return kt("SuspenseList");case 0:case 15:return ar(e.type,!1);case 11:return ar(e.type.render,!1);case 1:return ar(e.type,!0);case 31:return kt("Activity");default:return""}}function Jc(e){try{var t="",o=null;do t+=Jg(e,o),o=e,e=e.return;while(e);return t}catch(n){return`
|
|
7
7
|
Error generating stack: `+n.message+`
|
|
8
8
|
`+n.stack}}var ir=Object.prototype.hasOwnProperty,sr=a.unstable_scheduleCallback,rr=a.unstable_cancelCallback,$g=a.unstable_shouldYield,ef=a.unstable_requestPaint,ut=a.unstable_now,tf=a.unstable_getCurrentPriorityLevel,$c=a.unstable_ImmediatePriority,ed=a.unstable_UserBlockingPriority,fi=a.unstable_NormalPriority,of=a.unstable_LowPriority,td=a.unstable_IdlePriority,nf=a.log,af=a.unstable_setDisableYieldValue,ra=null,pt=null;function yo(e){if(typeof nf=="function"&&af(e),pt&&typeof pt.setStrictMode=="function")try{pt.setStrictMode(ra,e)}catch{}}var ht=Math.clz32?Math.clz32:lf,sf=Math.log,rf=Math.LN2;function lf(e){return e>>>=0,e===0?32:31-(sf(e)/rf|0)|0}var yi=256,vi=262144,bi=4194304;function Fo(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function wi(e,t,o){var n=e.pendingLanes;if(n===0)return 0;var i=0,s=e.suspendedLanes,l=e.pingedLanes;e=e.warmLanes;var u=n&134217727;return u!==0?(n=u&~s,n!==0?i=Fo(n):(l&=u,l!==0?i=Fo(l):o||(o=u&~e,o!==0&&(i=Fo(o))))):(u=n&~s,u!==0?i=Fo(u):l!==0?i=Fo(l):o||(o=n&~e,o!==0&&(i=Fo(o)))),i===0?0:t!==0&&t!==i&&(t&s)===0&&(s=i&-i,o=t&-t,s>=o||s===32&&(o&4194048)!==0)?t:i}function la(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function cf(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function od(){var e=bi;return bi<<=1,(bi&62914560)===0&&(bi=4194304),e}function lr(e){for(var t=[],o=0;31>o;o++)t.push(e);return t}function ca(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function df(e,t,o,n,i,s){var l=e.pendingLanes;e.pendingLanes=o,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=o,e.entangledLanes&=o,e.errorRecoveryDisabledLanes&=o,e.shellSuspendCounter=0;var u=e.entanglements,p=e.expirationTimes,b=e.hiddenUpdates;for(o=l&~o;0<o;){var O=31-ht(o),M=1<<O;u[O]=0,p[O]=-1;var k=b[O];if(k!==null)for(b[O]=null,O=0;O<k.length;O++){var S=k[O];S!==null&&(S.lane&=-536870913)}o&=~M}n!==0&&nd(e,n,0),s!==0&&i===0&&e.tag!==0&&(e.suspendedLanes|=s&~(l&~t))}function nd(e,t,o){e.pendingLanes|=t,e.suspendedLanes&=~t;var n=31-ht(t);e.entangledLanes|=t,e.entanglements[n]=e.entanglements[n]|1073741824|o&261930}function ad(e,t){var o=e.entangledLanes|=t;for(e=e.entanglements;o;){var n=31-ht(o),i=1<<n;i&t|e[n]&t&&(e[n]|=t),o&=~i}}function id(e,t){var o=t&-t;return o=(o&42)!==0?1:cr(o),(o&(e.suspendedLanes|t))!==0?0:o}function cr(e){switch(e){case 2:e=1;break;case 8:e=4;break;case 32:e=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:e=128;break;case 268435456:e=134217728;break;default:e=0}return e}function dr(e){return e&=-e,2<e?8<e?(e&134217727)!==0?32:268435456:8:2}function sd(){var e=N.p;return e!==0?e:(e=window.event,e===void 0?32:Fh(e.type))}function rd(e,t){var o=N.p;try{return N.p=e,t()}finally{N.p=o}}var vo=Math.random().toString(36).slice(2),Ke="__reactFiber$"+vo,ot="__reactProps$"+vo,vn="__reactContainer$"+vo,ur="__reactEvents$"+vo,uf="__reactListeners$"+vo,pf="__reactHandles$"+vo,ld="__reactResources$"+vo,da="__reactMarker$"+vo;function pr(e){delete e[Ke],delete e[ot],delete e[ur],delete e[uf],delete e[pf]}function bn(e){var t=e[Ke];if(t)return t;for(var o=e.parentNode;o;){if(t=o[vn]||o[Ke]){if(o=t.alternate,t.child!==null||o!==null&&o.child!==null)for(e=Eh(e);e!==null;){if(o=e[Ke])return o;e=Eh(e)}return t}e=o,o=e.parentNode}return null}function wn(e){if(e=e[Ke]||e[vn]){var t=e.tag;if(t===5||t===6||t===13||t===31||t===26||t===27||t===3)return e}return null}function ua(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e.stateNode;throw Error(c(33))}function kn(e){var t=e[ld];return t||(t=e[ld]={hoistableStyles:new Map,hoistableScripts:new Map}),t}function We(e){e[da]=!0}var cd=new Set,dd={};function jo(e,t){Sn(e,t),Sn(e+"Capture",t)}function Sn(e,t){for(dd[e]=t,e=0;e<t.length;e++)cd.add(t[e])}var hf=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),ud={},pd={};function mf(e){return ir.call(pd,e)?!0:ir.call(ud,e)?!1:hf.test(e)?pd[e]=!0:(ud[e]=!0,!1)}function ki(e,t,o){if(mf(t))if(o===null)e.removeAttribute(t);else{switch(typeof o){case"undefined":case"function":case"symbol":e.removeAttribute(t);return;case"boolean":var n=t.toLowerCase().slice(0,5);if(n!=="data-"&&n!=="aria-"){e.removeAttribute(t);return}}e.setAttribute(t,""+o)}}function Si(e,t,o){if(o===null)e.removeAttribute(t);else{switch(typeof o){case"undefined":case"function":case"symbol":case"boolean":e.removeAttribute(t);return}e.setAttribute(t,""+o)}}function Ft(e,t,o,n){if(n===null)e.removeAttribute(o);else{switch(typeof n){case"undefined":case"function":case"symbol":case"boolean":e.removeAttribute(o);return}e.setAttributeNS(t,o,""+n)}}function St(e){switch(typeof e){case"bigint":case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function hd(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function gf(e,t,o){var n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t);if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var i=n.get,s=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(l){o=""+l,s.call(this,l)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return o},setValue:function(l){o=""+l},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function hr(e){if(!e._valueTracker){var t=hd(e)?"checked":"value";e._valueTracker=gf(e,t,""+e[t])}}function md(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var o=t.getValue(),n="";return e&&(n=hd(e)?e.checked?"true":"false":e.value),e=n,e!==o?(t.setValue(e),!0):!1}function Ci(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var ff=/[\n"\\]/g;function Ct(e){return e.replace(ff,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function mr(e,t,o,n,i,s,l,u){e.name="",l!=null&&typeof l!="function"&&typeof l!="symbol"&&typeof l!="boolean"?e.type=l:e.removeAttribute("type"),t!=null?l==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+St(t)):e.value!==""+St(t)&&(e.value=""+St(t)):l!=="submit"&&l!=="reset"||e.removeAttribute("value"),t!=null?gr(e,l,St(t)):o!=null?gr(e,l,St(o)):n!=null&&e.removeAttribute("value"),i==null&&s!=null&&(e.defaultChecked=!!s),i!=null&&(e.checked=i&&typeof i!="function"&&typeof i!="symbol"),u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"?e.name=""+St(u):e.removeAttribute("name")}function gd(e,t,o,n,i,s,l,u){if(s!=null&&typeof s!="function"&&typeof s!="symbol"&&typeof s!="boolean"&&(e.type=s),t!=null||o!=null){if(!(s!=="submit"&&s!=="reset"||t!=null)){hr(e);return}o=o!=null?""+St(o):"",t=t!=null?""+St(t):o,u||t===e.value||(e.value=t),e.defaultValue=t}n=n??i,n=typeof n!="function"&&typeof n!="symbol"&&!!n,e.checked=u?e.checked:!!n,e.defaultChecked=!!n,l!=null&&typeof l!="function"&&typeof l!="symbol"&&typeof l!="boolean"&&(e.name=l),hr(e)}function gr(e,t,o){t==="number"&&Ci(e.ownerDocument)===e||e.defaultValue===""+o||(e.defaultValue=""+o)}function Cn(e,t,o,n){if(e=e.options,t){t={};for(var i=0;i<o.length;i++)t["$"+o[i]]=!0;for(o=0;o<e.length;o++)i=t.hasOwnProperty("$"+e[o].value),e[o].selected!==i&&(e[o].selected=i),i&&n&&(e[o].defaultSelected=!0)}else{for(o=""+St(o),t=null,i=0;i<e.length;i++){if(e[i].value===o){e[i].selected=!0,n&&(e[i].defaultSelected=!0);return}t!==null||e[i].disabled||(t=e[i])}t!==null&&(t.selected=!0)}}function fd(e,t,o){if(t!=null&&(t=""+St(t),t!==e.value&&(e.value=t),o==null)){e.defaultValue!==t&&(e.defaultValue=t);return}e.defaultValue=o!=null?""+St(o):""}function yd(e,t,o,n){if(t==null){if(n!=null){if(o!=null)throw Error(c(92));if(qe(n)){if(1<n.length)throw Error(c(93));n=n[0]}o=n}o==null&&(o=""),t=o}o=St(t),e.defaultValue=o,n=e.textContent,n===o&&n!==""&&n!==null&&(e.value=n),hr(e)}function An(e,t){if(t){var o=e.firstChild;if(o&&o===e.lastChild&&o.nodeType===3){o.nodeValue=t;return}}e.textContent=t}var yf=new Set("animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(" "));function vd(e,t,o){var n=t.indexOf("--")===0;o==null||typeof o=="boolean"||o===""?n?e.setProperty(t,""):t==="float"?e.cssFloat="":e[t]="":n?e.setProperty(t,o):typeof o!="number"||o===0||yf.has(t)?t==="float"?e.cssFloat=o:e[t]=(""+o).trim():e[t]=o+"px"}function bd(e,t,o){if(t!=null&&typeof t!="object")throw Error(c(62));if(e=e.style,o!=null){for(var n in o)!o.hasOwnProperty(n)||t!=null&&t.hasOwnProperty(n)||(n.indexOf("--")===0?e.setProperty(n,""):n==="float"?e.cssFloat="":e[n]="");for(var i in t)n=t[i],t.hasOwnProperty(i)&&o[i]!==n&&vd(e,i,n)}else for(var s in t)t.hasOwnProperty(s)&&vd(e,s,t[s])}function fr(e){if(e.indexOf("-")===-1)return!1;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var vf=new Map([["acceptCharset","accept-charset"],["htmlFor","for"],["httpEquiv","http-equiv"],["crossOrigin","crossorigin"],["accentHeight","accent-height"],["alignmentBaseline","alignment-baseline"],["arabicForm","arabic-form"],["baselineShift","baseline-shift"],["capHeight","cap-height"],["clipPath","clip-path"],["clipRule","clip-rule"],["colorInterpolation","color-interpolation"],["colorInterpolationFilters","color-interpolation-filters"],["colorProfile","color-profile"],["colorRendering","color-rendering"],["dominantBaseline","dominant-baseline"],["enableBackground","enable-background"],["fillOpacity","fill-opacity"],["fillRule","fill-rule"],["floodColor","flood-color"],["floodOpacity","flood-opacity"],["fontFamily","font-family"],["fontSize","font-size"],["fontSizeAdjust","font-size-adjust"],["fontStretch","font-stretch"],["fontStyle","font-style"],["fontVariant","font-variant"],["fontWeight","font-weight"],["glyphName","glyph-name"],["glyphOrientationHorizontal","glyph-orientation-horizontal"],["glyphOrientationVertical","glyph-orientation-vertical"],["horizAdvX","horiz-adv-x"],["horizOriginX","horiz-origin-x"],["imageRendering","image-rendering"],["letterSpacing","letter-spacing"],["lightingColor","lighting-color"],["markerEnd","marker-end"],["markerMid","marker-mid"],["markerStart","marker-start"],["overlinePosition","overline-position"],["overlineThickness","overline-thickness"],["paintOrder","paint-order"],["panose-1","panose-1"],["pointerEvents","pointer-events"],["renderingIntent","rendering-intent"],["shapeRendering","shape-rendering"],["stopColor","stop-color"],["stopOpacity","stop-opacity"],["strikethroughPosition","strikethrough-position"],["strikethroughThickness","strikethrough-thickness"],["strokeDasharray","stroke-dasharray"],["strokeDashoffset","stroke-dashoffset"],["strokeLinecap","stroke-linecap"],["strokeLinejoin","stroke-linejoin"],["strokeMiterlimit","stroke-miterlimit"],["strokeOpacity","stroke-opacity"],["strokeWidth","stroke-width"],["textAnchor","text-anchor"],["textDecoration","text-decoration"],["textRendering","text-rendering"],["transformOrigin","transform-origin"],["underlinePosition","underline-position"],["underlineThickness","underline-thickness"],["unicodeBidi","unicode-bidi"],["unicodeRange","unicode-range"],["unitsPerEm","units-per-em"],["vAlphabetic","v-alphabetic"],["vHanging","v-hanging"],["vIdeographic","v-ideographic"],["vMathematical","v-mathematical"],["vectorEffect","vector-effect"],["vertAdvY","vert-adv-y"],["vertOriginX","vert-origin-x"],["vertOriginY","vert-origin-y"],["wordSpacing","word-spacing"],["writingMode","writing-mode"],["xmlnsXlink","xmlns:xlink"],["xHeight","x-height"]]),bf=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;function Ai(e){return bf.test(""+e)?"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')":e}function jt(){}var yr=null;function vr(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Tn=null,On=null;function wd(e){var t=wn(e);if(t&&(e=t.stateNode)){var o=e[ot]||null;e:switch(e=t.stateNode,t.type){case"input":if(mr(e,o.value,o.defaultValue,o.defaultValue,o.checked,o.defaultChecked,o.type,o.name),t=o.name,o.type==="radio"&&t!=null){for(o=e;o.parentNode;)o=o.parentNode;for(o=o.querySelectorAll('input[name="'+Ct(""+t)+'"][type="radio"]'),t=0;t<o.length;t++){var n=o[t];if(n!==e&&n.form===e.form){var i=n[ot]||null;if(!i)throw Error(c(90));mr(n,i.value,i.defaultValue,i.defaultValue,i.checked,i.defaultChecked,i.type,i.name)}}for(t=0;t<o.length;t++)n=o[t],n.form===e.form&&md(n)}break e;case"textarea":fd(e,o.value,o.defaultValue);break e;case"select":t=o.value,t!=null&&Cn(e,!!o.multiple,t,!1)}}}var br=!1;function kd(e,t,o){if(br)return e(t,o);br=!0;try{var n=e(t);return n}finally{if(br=!1,(Tn!==null||On!==null)&&(us(),Tn&&(t=Tn,e=On,On=Tn=null,wd(t),e)))for(t=0;t<e.length;t++)wd(e[t])}}function pa(e,t){var o=e.stateNode;if(o===null)return null;var n=o[ot]||null;if(n===null)return null;o=n[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(n=!n.disabled)||(e=e.type,n=!(e==="button"||e==="input"||e==="select"||e==="textarea")),e=!n;break e;default:e=!1}if(e)return null;if(o&&typeof o!="function")throw Error(c(231,t,typeof o));return o}var Vt=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),wr=!1;if(Vt)try{var ha={};Object.defineProperty(ha,"passive",{get:function(){wr=!0}}),window.addEventListener("test",ha,ha),window.removeEventListener("test",ha,ha)}catch{wr=!1}var bo=null,kr=null,Ti=null;function Sd(){if(Ti)return Ti;var e,t=kr,o=t.length,n,i="value"in bo?bo.value:bo.textContent,s=i.length;for(e=0;e<o&&t[e]===i[e];e++);var l=o-e;for(n=1;n<=l&&t[o-n]===i[s-n];n++);return Ti=i.slice(e,1<n?1-n:void 0)}function Oi(e){var t=e.keyCode;return"charCode"in e?(e=e.charCode,e===0&&t===13&&(e=13)):e=t,e===10&&(e=13),32<=e||e===13?e:0}function xi(){return!0}function Cd(){return!1}function nt(e){function t(o,n,i,s,l){this._reactName=o,this._targetInst=i,this.type=n,this.nativeEvent=s,this.target=l,this.currentTarget=null;for(var u in e)e.hasOwnProperty(u)&&(o=e[u],this[u]=o?o(s):s[u]);return this.isDefaultPrevented=(s.defaultPrevented!=null?s.defaultPrevented:s.returnValue===!1)?xi:Cd,this.isPropagationStopped=Cd,this}return R(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var o=this.nativeEvent;o&&(o.preventDefault?o.preventDefault():typeof o.returnValue!="unknown"&&(o.returnValue=!1),this.isDefaultPrevented=xi)},stopPropagation:function(){var o=this.nativeEvent;o&&(o.stopPropagation?o.stopPropagation():typeof o.cancelBubble!="unknown"&&(o.cancelBubble=!0),this.isPropagationStopped=xi)},persist:function(){},isPersistent:xi}),t}var Vo={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},Mi=nt(Vo),ma=R({},Vo,{view:0,detail:0}),wf=nt(ma),Sr,Cr,ga,Ei=R({},ma,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Tr,button:0,buttons:0,relatedTarget:function(e){return e.relatedTarget===void 0?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==ga&&(ga&&e.type==="mousemove"?(Sr=e.screenX-ga.screenX,Cr=e.screenY-ga.screenY):Cr=Sr=0,ga=e),Sr)},movementY:function(e){return"movementY"in e?e.movementY:Cr}}),Ad=nt(Ei),kf=R({},Ei,{dataTransfer:0}),Sf=nt(kf),Cf=R({},ma,{relatedTarget:0}),Ar=nt(Cf),Af=R({},Vo,{animationName:0,elapsedTime:0,pseudoElement:0}),Tf=nt(Af),Of=R({},Vo,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),xf=nt(Of),Mf=R({},Vo,{data:0}),Td=nt(Mf),Ef={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Bf={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Rf={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Lf(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):(e=Rf[e])?!!t[e]:!1}function Tr(){return Lf}var Nf=R({},ma,{key:function(e){if(e.key){var t=Ef[e.key]||e.key;if(t!=="Unidentified")return t}return e.type==="keypress"?(e=Oi(e),e===13?"Enter":String.fromCharCode(e)):e.type==="keydown"||e.type==="keyup"?Bf[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Tr,charCode:function(e){return e.type==="keypress"?Oi(e):0},keyCode:function(e){return e.type==="keydown"||e.type==="keyup"?e.keyCode:0},which:function(e){return e.type==="keypress"?Oi(e):e.type==="keydown"||e.type==="keyup"?e.keyCode:0}}),If=nt(Nf),Df=R({},Ei,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Od=nt(Df),Pf=R({},ma,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Tr}),Uf=nt(Pf),Hf=R({},Vo,{propertyName:0,elapsedTime:0,pseudoElement:0}),zf=nt(Hf),_f=R({},Ei,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Gf=nt(_f),qf=R({},Vo,{newState:0,oldState:0}),Yf=nt(qf),Wf=[9,13,27,32],Or=Vt&&"CompositionEvent"in window,fa=null;Vt&&"documentMode"in document&&(fa=document.documentMode);var Ff=Vt&&"TextEvent"in window&&!fa,xd=Vt&&(!Or||fa&&8<fa&&11>=fa),Md=" ",Ed=!1;function Bd(e,t){switch(e){case"keyup":return Wf.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Rd(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var xn=!1;function jf(e,t){switch(e){case"compositionend":return Rd(t);case"keypress":return t.which!==32?null:(Ed=!0,Md);case"textInput":return e=t.data,e===Md&&Ed?null:e;default:return null}}function Vf(e,t){if(xn)return e==="compositionend"||!Or&&Bd(e,t)?(e=Sd(),Ti=kr=bo=null,xn=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return xd&&t.locale!=="ko"?null:t.data;default:return null}}var Kf={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Ld(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t==="input"?!!Kf[e.type]:t==="textarea"}function Nd(e,t,o,n){Tn?On?On.push(n):On=[n]:Tn=n,t=vs(t,"onChange"),0<t.length&&(o=new Mi("onChange","change",null,o,n),e.push({event:o,listeners:t}))}var ya=null,va=null;function Qf(e){gh(e,0)}function Bi(e){var t=ua(e);if(md(t))return e}function Id(e,t){if(e==="change")return t}var Dd=!1;if(Vt){var xr;if(Vt){var Mr="oninput"in document;if(!Mr){var Pd=document.createElement("div");Pd.setAttribute("oninput","return;"),Mr=typeof Pd.oninput=="function"}xr=Mr}else xr=!1;Dd=xr&&(!document.documentMode||9<document.documentMode)}function Ud(){ya&&(ya.detachEvent("onpropertychange",Hd),va=ya=null)}function Hd(e){if(e.propertyName==="value"&&Bi(va)){var t=[];Nd(t,va,e,vr(e)),kd(Qf,t)}}function Xf(e,t,o){e==="focusin"?(Ud(),ya=t,va=o,ya.attachEvent("onpropertychange",Hd)):e==="focusout"&&Ud()}function Zf(e){if(e==="selectionchange"||e==="keyup"||e==="keydown")return Bi(va)}function Jf(e,t){if(e==="click")return Bi(t)}function $f(e,t){if(e==="input"||e==="change")return Bi(t)}function ey(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var mt=typeof Object.is=="function"?Object.is:ey;function ba(e,t){if(mt(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;var o=Object.keys(e),n=Object.keys(t);if(o.length!==n.length)return!1;for(n=0;n<o.length;n++){var i=o[n];if(!ir.call(t,i)||!mt(e[i],t[i]))return!1}return!0}function zd(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function _d(e,t){var o=zd(e);e=0;for(var n;o;){if(o.nodeType===3){if(n=e+o.textContent.length,e<=t&&n>=t)return{node:o,offset:t-e};e=n}e:{for(;o;){if(o.nextSibling){o=o.nextSibling;break e}o=o.parentNode}o=void 0}o=zd(o)}}function Gd(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Gd(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function qd(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Ci(e.document);t instanceof e.HTMLIFrameElement;){try{var o=typeof t.contentWindow.location.href=="string"}catch{o=!1}if(o)e=t.contentWindow;else break;t=Ci(e.document)}return t}function Er(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var ty=Vt&&"documentMode"in document&&11>=document.documentMode,Mn=null,Br=null,wa=null,Rr=!1;function Yd(e,t,o){var n=o.window===o?o.document:o.nodeType===9?o:o.ownerDocument;Rr||Mn==null||Mn!==Ci(n)||(n=Mn,"selectionStart"in n&&Er(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),wa&&ba(wa,n)||(wa=n,n=vs(Br,"onSelect"),0<n.length&&(t=new Mi("onSelect","select",null,t,o),e.push({event:t,listeners:n}),t.target=Mn)))}function Ko(e,t){var o={};return o[e.toLowerCase()]=t.toLowerCase(),o["Webkit"+e]="webkit"+t,o["Moz"+e]="moz"+t,o}var En={animationend:Ko("Animation","AnimationEnd"),animationiteration:Ko("Animation","AnimationIteration"),animationstart:Ko("Animation","AnimationStart"),transitionrun:Ko("Transition","TransitionRun"),transitionstart:Ko("Transition","TransitionStart"),transitioncancel:Ko("Transition","TransitionCancel"),transitionend:Ko("Transition","TransitionEnd")},Lr={},Wd={};Vt&&(Wd=document.createElement("div").style,"AnimationEvent"in window||(delete En.animationend.animation,delete En.animationiteration.animation,delete En.animationstart.animation),"TransitionEvent"in window||delete En.transitionend.transition);function Qo(e){if(Lr[e])return Lr[e];if(!En[e])return e;var t=En[e],o;for(o in t)if(t.hasOwnProperty(o)&&o in Wd)return Lr[e]=t[o];return e}var Fd=Qo("animationend"),jd=Qo("animationiteration"),Vd=Qo("animationstart"),oy=Qo("transitionrun"),ny=Qo("transitionstart"),ay=Qo("transitioncancel"),Kd=Qo("transitionend"),Qd=new Map,Nr="abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");Nr.push("scrollEnd");function Nt(e,t){Qd.set(e,t),jo(t,[e])}var Ri=typeof reportError=="function"?reportError:function(e){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof e=="object"&&e!==null&&typeof e.message=="string"?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",e);return}console.error(e)},At=[],Bn=0,Ir=0;function Li(){for(var e=Bn,t=Ir=Bn=0;t<e;){var o=At[t];At[t++]=null;var n=At[t];At[t++]=null;var i=At[t];At[t++]=null;var s=At[t];if(At[t++]=null,n!==null&&i!==null){var l=n.pending;l===null?i.next=i:(i.next=l.next,l.next=i),n.pending=i}s!==0&&Xd(o,i,s)}}function Ni(e,t,o,n){At[Bn++]=e,At[Bn++]=t,At[Bn++]=o,At[Bn++]=n,Ir|=n,e.lanes|=n,e=e.alternate,e!==null&&(e.lanes|=n)}function Dr(e,t,o,n){return Ni(e,t,o,n),Ii(e)}function Xo(e,t){return Ni(e,null,null,t),Ii(e)}function Xd(e,t,o){e.lanes|=o;var n=e.alternate;n!==null&&(n.lanes|=o);for(var i=!1,s=e.return;s!==null;)s.childLanes|=o,n=s.alternate,n!==null&&(n.childLanes|=o),s.tag===22&&(e=s.stateNode,e===null||e._visibility&1||(i=!0)),e=s,s=s.return;return e.tag===3?(s=e.stateNode,i&&t!==null&&(i=31-ht(o),e=s.hiddenUpdates,n=e[i],n===null?e[i]=[t]:n.push(t),t.lane=o|536870912),s):null}function Ii(e){if(50<qa)throw qa=0,Wl=null,Error(c(185));for(var t=e.return;t!==null;)e=t,t=e.return;return e.tag===3?e.stateNode:null}var Rn={};function iy(e,t,o,n){this.tag=e,this.key=o,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function gt(e,t,o,n){return new iy(e,t,o,n)}function Pr(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Kt(e,t){var o=e.alternate;return o===null?(o=gt(e.tag,t,e.key,e.mode),o.elementType=e.elementType,o.type=e.type,o.stateNode=e.stateNode,o.alternate=e,e.alternate=o):(o.pendingProps=t,o.type=e.type,o.flags=0,o.subtreeFlags=0,o.deletions=null),o.flags=e.flags&65011712,o.childLanes=e.childLanes,o.lanes=e.lanes,o.child=e.child,o.memoizedProps=e.memoizedProps,o.memoizedState=e.memoizedState,o.updateQueue=e.updateQueue,t=e.dependencies,o.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},o.sibling=e.sibling,o.index=e.index,o.ref=e.ref,o.refCleanup=e.refCleanup,o}function Zd(e,t){e.flags&=65011714;var o=e.alternate;return o===null?(e.childLanes=0,e.lanes=t,e.child=null,e.subtreeFlags=0,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.stateNode=null):(e.childLanes=o.childLanes,e.lanes=o.lanes,e.child=o.child,e.subtreeFlags=0,e.deletions=null,e.memoizedProps=o.memoizedProps,e.memoizedState=o.memoizedState,e.updateQueue=o.updateQueue,e.type=o.type,t=o.dependencies,e.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext}),e}function Di(e,t,o,n,i,s){var l=0;if(n=e,typeof e=="function")Pr(e)&&(l=1);else if(typeof e=="string")l=dv(e,o,z.current)?26:e==="html"||e==="head"||e==="body"?27:5;else e:switch(e){case Ae:return e=gt(31,o,t,i),e.elementType=Ae,e.lanes=s,e;case te:return Zo(o.children,i,s,t);case he:l=8,i|=24;break;case Be:return e=gt(12,o,t,i|2),e.elementType=Be,e.lanes=s,e;case Ve:return e=gt(13,o,t,i),e.elementType=Ve,e.lanes=s,e;case Re:return e=gt(19,o,t,i),e.elementType=Re,e.lanes=s,e;default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case xe:l=10;break e;case Oe:l=9;break e;case He:l=11;break e;case Q:l=14;break e;case U:l=16,n=null;break e}l=29,o=Error(c(130,e===null?"null":typeof e,"")),n=null}return t=gt(l,o,t,i),t.elementType=e,t.type=n,t.lanes=s,t}function Zo(e,t,o,n){return e=gt(7,e,n,t),e.lanes=o,e}function Ur(e,t,o){return e=gt(6,e,null,t),e.lanes=o,e}function Jd(e){var t=gt(18,null,null,0);return t.stateNode=e,t}function Hr(e,t,o){return t=gt(4,e.children!==null?e.children:[],e.key,t),t.lanes=o,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}var $d=new WeakMap;function Tt(e,t){if(typeof e=="object"&&e!==null){var o=$d.get(e);return o!==void 0?o:(t={value:e,source:t,stack:Jc(t)},$d.set(e,t),t)}return{value:e,source:t,stack:Jc(t)}}var Ln=[],Nn=0,Pi=null,ka=0,Ot=[],xt=0,wo=null,Ht=1,zt="";function Qt(e,t){Ln[Nn++]=ka,Ln[Nn++]=Pi,Pi=e,ka=t}function eu(e,t,o){Ot[xt++]=Ht,Ot[xt++]=zt,Ot[xt++]=wo,wo=e;var n=Ht;e=zt;var i=32-ht(n)-1;n&=~(1<<i),o+=1;var s=32-ht(t)+i;if(30<s){var l=i-i%5;s=(n&(1<<l)-1).toString(32),n>>=l,i-=l,Ht=1<<32-ht(t)+i|o<<i|n,zt=s+e}else Ht=1<<s|o<<i|n,zt=e}function zr(e){e.return!==null&&(Qt(e,1),eu(e,1,0))}function _r(e){for(;e===Pi;)Pi=Ln[--Nn],Ln[Nn]=null,ka=Ln[--Nn],Ln[Nn]=null;for(;e===wo;)wo=Ot[--xt],Ot[xt]=null,zt=Ot[--xt],Ot[xt]=null,Ht=Ot[--xt],Ot[xt]=null}function tu(e,t){Ot[xt++]=Ht,Ot[xt++]=zt,Ot[xt++]=wo,Ht=t.id,zt=t.overflow,wo=e}var Qe=null,Se=null,re=!1,ko=null,Mt=!1,Gr=Error(c(519));function So(e){var t=Error(c(418,1<arguments.length&&arguments[1]!==void 0&&arguments[1]?"text":"HTML",""));throw Sa(Tt(t,e)),Gr}function ou(e){var t=e.stateNode,o=e.type,n=e.memoizedProps;switch(t[Ke]=e,t[ot]=n,o){case"dialog":ne("cancel",t),ne("close",t);break;case"iframe":case"object":case"embed":ne("load",t);break;case"video":case"audio":for(o=0;o<Wa.length;o++)ne(Wa[o],t);break;case"source":ne("error",t);break;case"img":case"image":case"link":ne("error",t),ne("load",t);break;case"details":ne("toggle",t);break;case"input":ne("invalid",t),gd(t,n.value,n.defaultValue,n.checked,n.defaultChecked,n.type,n.name,!0);break;case"select":ne("invalid",t);break;case"textarea":ne("invalid",t),yd(t,n.value,n.defaultValue,n.children)}o=n.children,typeof o!="string"&&typeof o!="number"&&typeof o!="bigint"||t.textContent===""+o||n.suppressHydrationWarning===!0||bh(t.textContent,o)?(n.popover!=null&&(ne("beforetoggle",t),ne("toggle",t)),n.onScroll!=null&&ne("scroll",t),n.onScrollEnd!=null&&ne("scrollend",t),n.onClick!=null&&(t.onclick=jt),t=!0):t=!1,t||So(e,!0)}function nu(e){for(Qe=e.return;Qe;)switch(Qe.tag){case 5:case 31:case 13:Mt=!1;return;case 27:case 3:Mt=!0;return;default:Qe=Qe.return}}function In(e){if(e!==Qe)return!1;if(!re)return nu(e),re=!0,!1;var t=e.tag,o;if((o=t!==3&&t!==27)&&((o=t===5)&&(o=e.type,o=!(o!=="form"&&o!=="button")||ic(e.type,e.memoizedProps)),o=!o),o&&Se&&So(e),nu(e),t===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(c(317));Se=Mh(e)}else if(t===31){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(c(317));Se=Mh(e)}else t===27?(t=Se,Po(e.type)?(e=dc,dc=null,Se=e):Se=t):Se=Qe?Bt(e.stateNode.nextSibling):null;return!0}function Jo(){Se=Qe=null,re=!1}function qr(){var e=ko;return e!==null&&(rt===null?rt=e:rt.push.apply(rt,e),ko=null),e}function Sa(e){ko===null?ko=[e]:ko.push(e)}var Yr=g(null),$o=null,Xt=null;function Co(e,t,o){D(Yr,t._currentValue),t._currentValue=o}function Zt(e){e._currentValue=Yr.current,E(Yr)}function Wr(e,t,o){for(;e!==null;){var n=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,n!==null&&(n.childLanes|=t)):n!==null&&(n.childLanes&t)!==t&&(n.childLanes|=t),e===o)break;e=e.return}}function Fr(e,t,o,n){var i=e.child;for(i!==null&&(i.return=e);i!==null;){var s=i.dependencies;if(s!==null){var l=i.child;s=s.firstContext;e:for(;s!==null;){var u=s;s=i;for(var p=0;p<t.length;p++)if(u.context===t[p]){s.lanes|=o,u=s.alternate,u!==null&&(u.lanes|=o),Wr(s.return,o,e),n||(l=null);break e}s=u.next}}else if(i.tag===18){if(l=i.return,l===null)throw Error(c(341));l.lanes|=o,s=l.alternate,s!==null&&(s.lanes|=o),Wr(l,o,e),l=null}else l=i.child;if(l!==null)l.return=i;else for(l=i;l!==null;){if(l===e){l=null;break}if(i=l.sibling,i!==null){i.return=l.return,l=i;break}l=l.return}i=l}}function Dn(e,t,o,n){e=null;for(var i=t,s=!1;i!==null;){if(!s){if((i.flags&524288)!==0)s=!0;else if((i.flags&262144)!==0)break}if(i.tag===10){var l=i.alternate;if(l===null)throw Error(c(387));if(l=l.memoizedProps,l!==null){var u=i.type;mt(i.pendingProps.value,l.value)||(e!==null?e.push(u):e=[u])}}else if(i===se.current){if(l=i.alternate,l===null)throw Error(c(387));l.memoizedState.memoizedState!==i.memoizedState.memoizedState&&(e!==null?e.push(Qa):e=[Qa])}i=i.return}e!==null&&Fr(t,e,o,n),t.flags|=262144}function Ui(e){for(e=e.firstContext;e!==null;){if(!mt(e.context._currentValue,e.memoizedValue))return!0;e=e.next}return!1}function en(e){$o=e,Xt=null,e=e.dependencies,e!==null&&(e.firstContext=null)}function Xe(e){return au($o,e)}function Hi(e,t){return $o===null&&en(e),au(e,t)}function au(e,t){var o=t._currentValue;if(t={context:t,memoizedValue:o,next:null},Xt===null){if(e===null)throw Error(c(308));Xt=t,e.dependencies={lanes:0,firstContext:t},e.flags|=524288}else Xt=Xt.next=t;return o}var sy=typeof AbortController<"u"?AbortController:function(){var e=[],t=this.signal={aborted:!1,addEventListener:function(o,n){e.push(n)}};this.abort=function(){t.aborted=!0,e.forEach(function(o){return o()})}},ry=a.unstable_scheduleCallback,ly=a.unstable_NormalPriority,Ie={$$typeof:xe,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function jr(){return{controller:new sy,data:new Map,refCount:0}}function Ca(e){e.refCount--,e.refCount===0&&ry(ly,function(){e.controller.abort()})}var Aa=null,Vr=0,Pn=0,Un=null;function cy(e,t){if(Aa===null){var o=Aa=[];Vr=0,Pn=Xl(),Un={status:"pending",value:void 0,then:function(n){o.push(n)}}}return Vr++,t.then(iu,iu),t}function iu(){if(--Vr===0&&Aa!==null){Un!==null&&(Un.status="fulfilled");var e=Aa;Aa=null,Pn=0,Un=null;for(var t=0;t<e.length;t++)(0,e[t])()}}function dy(e,t){var o=[],n={status:"pending",value:null,reason:null,then:function(i){o.push(i)}};return e.then(function(){n.status="fulfilled",n.value=t;for(var i=0;i<o.length;i++)(0,o[i])(t)},function(i){for(n.status="rejected",n.reason=i,i=0;i<o.length;i++)(0,o[i])(void 0)}),n}var su=A.S;A.S=function(e,t){Yp=ut(),typeof t=="object"&&t!==null&&typeof t.then=="function"&&cy(e,t),su!==null&&su(e,t)};var tn=g(null);function Kr(){var e=tn.current;return e!==null?e:ke.pooledCache}function zi(e,t){t===null?D(tn,tn.current):D(tn,t.pool)}function ru(){var e=Kr();return e===null?null:{parent:Ie._currentValue,pool:e}}var Hn=Error(c(460)),Qr=Error(c(474)),_i=Error(c(542)),Gi={then:function(){}};function lu(e){return e=e.status,e==="fulfilled"||e==="rejected"}function cu(e,t,o){switch(o=e[o],o===void 0?e.push(t):o!==t&&(t.then(jt,jt),t=o),t.status){case"fulfilled":return t.value;case"rejected":throw e=t.reason,uu(e),e;default:if(typeof t.status=="string")t.then(jt,jt);else{if(e=ke,e!==null&&100<e.shellSuspendCounter)throw Error(c(482));e=t,e.status="pending",e.then(function(n){if(t.status==="pending"){var i=t;i.status="fulfilled",i.value=n}},function(n){if(t.status==="pending"){var i=t;i.status="rejected",i.reason=n}})}switch(t.status){case"fulfilled":return t.value;case"rejected":throw e=t.reason,uu(e),e}throw nn=t,Hn}}function on(e){try{var t=e._init;return t(e._payload)}catch(o){throw o!==null&&typeof o=="object"&&typeof o.then=="function"?(nn=o,Hn):o}}var nn=null;function du(){if(nn===null)throw Error(c(459));var e=nn;return nn=null,e}function uu(e){if(e===Hn||e===_i)throw Error(c(483))}var zn=null,Ta=0;function qi(e){var t=Ta;return Ta+=1,zn===null&&(zn=[]),cu(zn,e,t)}function Oa(e,t){t=t.props.ref,e.ref=t!==void 0?t:null}function Yi(e,t){throw t.$$typeof===W?Error(c(525)):(e=Object.prototype.toString.call(t),Error(c(31,e==="[object Object]"?"object with keys {"+Object.keys(t).join(", ")+"}":e)))}function pu(e){function t(f,m){if(e){var v=f.deletions;v===null?(f.deletions=[m],f.flags|=16):v.push(m)}}function o(f,m){if(!e)return null;for(;m!==null;)t(f,m),m=m.sibling;return null}function n(f){for(var m=new Map;f!==null;)f.key!==null?m.set(f.key,f):m.set(f.index,f),f=f.sibling;return m}function i(f,m){return f=Kt(f,m),f.index=0,f.sibling=null,f}function s(f,m,v){return f.index=v,e?(v=f.alternate,v!==null?(v=v.index,v<m?(f.flags|=67108866,m):v):(f.flags|=67108866,m)):(f.flags|=1048576,m)}function l(f){return e&&f.alternate===null&&(f.flags|=67108866),f}function u(f,m,v,x){return m===null||m.tag!==6?(m=Ur(v,f.mode,x),m.return=f,m):(m=i(m,v),m.return=f,m)}function p(f,m,v,x){var F=v.type;return F===te?O(f,m,v.props.children,x,v.key):m!==null&&(m.elementType===F||typeof F=="object"&&F!==null&&F.$$typeof===U&&on(F)===m.type)?(m=i(m,v.props),Oa(m,v),m.return=f,m):(m=Di(v.type,v.key,v.props,null,f.mode,x),Oa(m,v),m.return=f,m)}function b(f,m,v,x){return m===null||m.tag!==4||m.stateNode.containerInfo!==v.containerInfo||m.stateNode.implementation!==v.implementation?(m=Hr(v,f.mode,x),m.return=f,m):(m=i(m,v.children||[]),m.return=f,m)}function O(f,m,v,x,F){return m===null||m.tag!==7?(m=Zo(v,f.mode,x,F),m.return=f,m):(m=i(m,v),m.return=f,m)}function M(f,m,v){if(typeof m=="string"&&m!==""||typeof m=="number"||typeof m=="bigint")return m=Ur(""+m,f.mode,v),m.return=f,m;if(typeof m=="object"&&m!==null){switch(m.$$typeof){case le:return v=Di(m.type,m.key,m.props,null,f.mode,v),Oa(v,m),v.return=f,v;case ce:return m=Hr(m,f.mode,v),m.return=f,m;case U:return m=on(m),M(f,m,v)}if(qe(m)||ze(m))return m=Zo(m,f.mode,v,null),m.return=f,m;if(typeof m.then=="function")return M(f,qi(m),v);if(m.$$typeof===xe)return M(f,Hi(f,m),v);Yi(f,m)}return null}function k(f,m,v,x){var F=m!==null?m.key:null;if(typeof v=="string"&&v!==""||typeof v=="number"||typeof v=="bigint")return F!==null?null:u(f,m,""+v,x);if(typeof v=="object"&&v!==null){switch(v.$$typeof){case le:return v.key===F?p(f,m,v,x):null;case ce:return v.key===F?b(f,m,v,x):null;case U:return v=on(v),k(f,m,v,x)}if(qe(v)||ze(v))return F!==null?null:O(f,m,v,x,null);if(typeof v.then=="function")return k(f,m,qi(v),x);if(v.$$typeof===xe)return k(f,m,Hi(f,v),x);Yi(f,v)}return null}function S(f,m,v,x,F){if(typeof x=="string"&&x!==""||typeof x=="number"||typeof x=="bigint")return f=f.get(v)||null,u(m,f,""+x,F);if(typeof x=="object"&&x!==null){switch(x.$$typeof){case le:return f=f.get(x.key===null?v:x.key)||null,p(m,f,x,F);case ce:return f=f.get(x.key===null?v:x.key)||null,b(m,f,x,F);case U:return x=on(x),S(f,m,v,x,F)}if(qe(x)||ze(x))return f=f.get(v)||null,O(m,f,x,F,null);if(typeof x.then=="function")return S(f,m,v,qi(x),F);if(x.$$typeof===xe)return S(f,m,v,Hi(m,x),F);Yi(m,x)}return null}function G(f,m,v,x){for(var F=null,ue=null,q=m,J=m=0,ie=null;q!==null&&J<v.length;J++){q.index>J?(ie=q,q=null):ie=q.sibling;var pe=k(f,q,v[J],x);if(pe===null){q===null&&(q=ie);break}e&&q&&pe.alternate===null&&t(f,q),m=s(pe,m,J),ue===null?F=pe:ue.sibling=pe,ue=pe,q=ie}if(J===v.length)return o(f,q),re&&Qt(f,J),F;if(q===null){for(;J<v.length;J++)q=M(f,v[J],x),q!==null&&(m=s(q,m,J),ue===null?F=q:ue.sibling=q,ue=q);return re&&Qt(f,J),F}for(q=n(q);J<v.length;J++)ie=S(q,f,J,v[J],x),ie!==null&&(e&&ie.alternate!==null&&q.delete(ie.key===null?J:ie.key),m=s(ie,m,J),ue===null?F=ie:ue.sibling=ie,ue=ie);return e&&q.forEach(function(Go){return t(f,Go)}),re&&Qt(f,J),F}function K(f,m,v,x){if(v==null)throw Error(c(151));for(var F=null,ue=null,q=m,J=m=0,ie=null,pe=v.next();q!==null&&!pe.done;J++,pe=v.next()){q.index>J?(ie=q,q=null):ie=q.sibling;var Go=k(f,q,pe.value,x);if(Go===null){q===null&&(q=ie);break}e&&q&&Go.alternate===null&&t(f,q),m=s(Go,m,J),ue===null?F=Go:ue.sibling=Go,ue=Go,q=ie}if(pe.done)return o(f,q),re&&Qt(f,J),F;if(q===null){for(;!pe.done;J++,pe=v.next())pe=M(f,pe.value,x),pe!==null&&(m=s(pe,m,J),ue===null?F=pe:ue.sibling=pe,ue=pe);return re&&Qt(f,J),F}for(q=n(q);!pe.done;J++,pe=v.next())pe=S(q,f,J,pe.value,x),pe!==null&&(e&&pe.alternate!==null&&q.delete(pe.key===null?J:pe.key),m=s(pe,m,J),ue===null?F=pe:ue.sibling=pe,ue=pe);return e&&q.forEach(function(kv){return t(f,kv)}),re&&Qt(f,J),F}function we(f,m,v,x){if(typeof v=="object"&&v!==null&&v.type===te&&v.key===null&&(v=v.props.children),typeof v=="object"&&v!==null){switch(v.$$typeof){case le:e:{for(var F=v.key;m!==null;){if(m.key===F){if(F=v.type,F===te){if(m.tag===7){o(f,m.sibling),x=i(m,v.props.children),x.return=f,f=x;break e}}else if(m.elementType===F||typeof F=="object"&&F!==null&&F.$$typeof===U&&on(F)===m.type){o(f,m.sibling),x=i(m,v.props),Oa(x,v),x.return=f,f=x;break e}o(f,m);break}else t(f,m);m=m.sibling}v.type===te?(x=Zo(v.props.children,f.mode,x,v.key),x.return=f,f=x):(x=Di(v.type,v.key,v.props,null,f.mode,x),Oa(x,v),x.return=f,f=x)}return l(f);case ce:e:{for(F=v.key;m!==null;){if(m.key===F)if(m.tag===4&&m.stateNode.containerInfo===v.containerInfo&&m.stateNode.implementation===v.implementation){o(f,m.sibling),x=i(m,v.children||[]),x.return=f,f=x;break e}else{o(f,m);break}else t(f,m);m=m.sibling}x=Hr(v,f.mode,x),x.return=f,f=x}return l(f);case U:return v=on(v),we(f,m,v,x)}if(qe(v))return G(f,m,v,x);if(ze(v)){if(F=ze(v),typeof F!="function")throw Error(c(150));return v=F.call(v),K(f,m,v,x)}if(typeof v.then=="function")return we(f,m,qi(v),x);if(v.$$typeof===xe)return we(f,m,Hi(f,v),x);Yi(f,v)}return typeof v=="string"&&v!==""||typeof v=="number"||typeof v=="bigint"?(v=""+v,m!==null&&m.tag===6?(o(f,m.sibling),x=i(m,v),x.return=f,f=x):(o(f,m),x=Ur(v,f.mode,x),x.return=f,f=x),l(f)):o(f,m)}return function(f,m,v,x){try{Ta=0;var F=we(f,m,v,x);return zn=null,F}catch(q){if(q===Hn||q===_i)throw q;var ue=gt(29,q,null,f.mode);return ue.lanes=x,ue.return=f,ue}}}var an=pu(!0),hu=pu(!1),Ao=!1;function Xr(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Zr(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function To(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Oo(e,t,o){var n=e.updateQueue;if(n===null)return null;if(n=n.shared,(me&2)!==0){var i=n.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),n.pending=t,t=Ii(e),Xd(e,null,o),t}return Ni(e,n,t,o),Ii(e)}function xa(e,t,o){if(t=t.updateQueue,t!==null&&(t=t.shared,(o&4194048)!==0)){var n=t.lanes;n&=e.pendingLanes,o|=n,t.lanes=o,ad(e,o)}}function Jr(e,t){var o=e.updateQueue,n=e.alternate;if(n!==null&&(n=n.updateQueue,o===n)){var i=null,s=null;if(o=o.firstBaseUpdate,o!==null){do{var l={lane:o.lane,tag:o.tag,payload:o.payload,callback:null,next:null};s===null?i=s=l:s=s.next=l,o=o.next}while(o!==null);s===null?i=s=t:s=s.next=t}else i=s=t;o={baseState:n.baseState,firstBaseUpdate:i,lastBaseUpdate:s,shared:n.shared,callbacks:n.callbacks},e.updateQueue=o;return}e=o.lastBaseUpdate,e===null?o.firstBaseUpdate=t:e.next=t,o.lastBaseUpdate=t}var $r=!1;function Ma(){if($r){var e=Un;if(e!==null)throw e}}function Ea(e,t,o,n){$r=!1;var i=e.updateQueue;Ao=!1;var s=i.firstBaseUpdate,l=i.lastBaseUpdate,u=i.shared.pending;if(u!==null){i.shared.pending=null;var p=u,b=p.next;p.next=null,l===null?s=b:l.next=b,l=p;var O=e.alternate;O!==null&&(O=O.updateQueue,u=O.lastBaseUpdate,u!==l&&(u===null?O.firstBaseUpdate=b:u.next=b,O.lastBaseUpdate=p))}if(s!==null){var M=i.baseState;l=0,O=b=p=null,u=s;do{var k=u.lane&-536870913,S=k!==u.lane;if(S?(ae&k)===k:(n&k)===k){k!==0&&k===Pn&&($r=!0),O!==null&&(O=O.next={lane:0,tag:u.tag,payload:u.payload,callback:null,next:null});e:{var G=e,K=u;k=t;var we=o;switch(K.tag){case 1:if(G=K.payload,typeof G=="function"){M=G.call(we,M,k);break e}M=G;break e;case 3:G.flags=G.flags&-65537|128;case 0:if(G=K.payload,k=typeof G=="function"?G.call(we,M,k):G,k==null)break e;M=R({},M,k);break e;case 2:Ao=!0}}k=u.callback,k!==null&&(e.flags|=64,S&&(e.flags|=8192),S=i.callbacks,S===null?i.callbacks=[k]:S.push(k))}else S={lane:k,tag:u.tag,payload:u.payload,callback:u.callback,next:null},O===null?(b=O=S,p=M):O=O.next=S,l|=k;if(u=u.next,u===null){if(u=i.shared.pending,u===null)break;S=u,u=S.next,S.next=null,i.lastBaseUpdate=S,i.shared.pending=null}}while(!0);O===null&&(p=M),i.baseState=p,i.firstBaseUpdate=b,i.lastBaseUpdate=O,s===null&&(i.shared.lanes=0),Ro|=l,e.lanes=l,e.memoizedState=M}}function mu(e,t){if(typeof e!="function")throw Error(c(191,e));e.call(t)}function gu(e,t){var o=e.callbacks;if(o!==null)for(e.callbacks=null,e=0;e<o.length;e++)mu(o[e],t)}var _n=g(null),Wi=g(0);function fu(e,t){e=so,D(Wi,e),D(_n,t),so=e|t.baseLanes}function el(){D(Wi,so),D(_n,_n.current)}function tl(){so=Wi.current,E(_n),E(Wi)}var ft=g(null),Et=null;function xo(e){var t=e.alternate;D(Le,Le.current&1),D(ft,e),Et===null&&(t===null||_n.current!==null||t.memoizedState!==null)&&(Et=e)}function ol(e){D(Le,Le.current),D(ft,e),Et===null&&(Et=e)}function yu(e){e.tag===22?(D(Le,Le.current),D(ft,e),Et===null&&(Et=e)):Mo()}function Mo(){D(Le,Le.current),D(ft,ft.current)}function yt(e){E(ft),Et===e&&(Et=null),E(Le)}var Le=g(0);function Fi(e){for(var t=e;t!==null;){if(t.tag===13){var o=t.memoizedState;if(o!==null&&(o=o.dehydrated,o===null||lc(o)||cc(o)))return t}else if(t.tag===19&&(t.memoizedProps.revealOrder==="forwards"||t.memoizedProps.revealOrder==="backwards"||t.memoizedProps.revealOrder==="unstable_legacy-backwards"||t.memoizedProps.revealOrder==="together")){if((t.flags&128)!==0)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Jt=0,Z=null,ve=null,De=null,ji=!1,Gn=!1,sn=!1,Vi=0,Ba=0,qn=null,uy=0;function Me(){throw Error(c(321))}function nl(e,t){if(t===null)return!1;for(var o=0;o<t.length&&o<e.length;o++)if(!mt(e[o],t[o]))return!1;return!0}function al(e,t,o,n,i,s){return Jt=s,Z=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,A.H=e===null||e.memoizedState===null?ep:bl,sn=!1,s=o(n,i),sn=!1,Gn&&(s=bu(t,o,n,i)),vu(e),s}function vu(e){A.H=Na;var t=ve!==null&&ve.next!==null;if(Jt=0,De=ve=Z=null,ji=!1,Ba=0,qn=null,t)throw Error(c(300));e===null||Pe||(e=e.dependencies,e!==null&&Ui(e)&&(Pe=!0))}function bu(e,t,o,n){Z=e;var i=0;do{if(Gn&&(qn=null),Ba=0,Gn=!1,25<=i)throw Error(c(301));if(i+=1,De=ve=null,e.updateQueue!=null){var s=e.updateQueue;s.lastEffect=null,s.events=null,s.stores=null,s.memoCache!=null&&(s.memoCache.index=0)}A.H=tp,s=t(o,n)}while(Gn);return s}function py(){var e=A.H,t=e.useState()[0];return t=typeof t.then=="function"?Ra(t):t,e=e.useState()[0],(ve!==null?ve.memoizedState:null)!==e&&(Z.flags|=1024),t}function il(){var e=Vi!==0;return Vi=0,e}function sl(e,t,o){t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o}function rl(e){if(ji){for(e=e.memoizedState;e!==null;){var t=e.queue;t!==null&&(t.pending=null),e=e.next}ji=!1}Jt=0,De=ve=Z=null,Gn=!1,Ba=Vi=0,qn=null}function tt(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return De===null?Z.memoizedState=De=e:De=De.next=e,De}function Ne(){if(ve===null){var e=Z.alternate;e=e!==null?e.memoizedState:null}else e=ve.next;var t=De===null?Z.memoizedState:De.next;if(t!==null)De=t,ve=e;else{if(e===null)throw Z.alternate===null?Error(c(467)):Error(c(310));ve=e,e={memoizedState:ve.memoizedState,baseState:ve.baseState,baseQueue:ve.baseQueue,queue:ve.queue,next:null},De===null?Z.memoizedState=De=e:De=De.next=e}return De}function Ki(){return{lastEffect:null,events:null,stores:null,memoCache:null}}function Ra(e){var t=Ba;return Ba+=1,qn===null&&(qn=[]),e=cu(qn,e,t),t=Z,(De===null?t.memoizedState:De.next)===null&&(t=t.alternate,A.H=t===null||t.memoizedState===null?ep:bl),e}function Qi(e){if(e!==null&&typeof e=="object"){if(typeof e.then=="function")return Ra(e);if(e.$$typeof===xe)return Xe(e)}throw Error(c(438,String(e)))}function ll(e){var t=null,o=Z.updateQueue;if(o!==null&&(t=o.memoCache),t==null){var n=Z.alternate;n!==null&&(n=n.updateQueue,n!==null&&(n=n.memoCache,n!=null&&(t={data:n.data.map(function(i){return i.slice()}),index:0})))}if(t==null&&(t={data:[],index:0}),o===null&&(o=Ki(),Z.updateQueue=o),o.memoCache=t,o=t.data[t.index],o===void 0)for(o=t.data[t.index]=Array(e),n=0;n<e;n++)o[n]=Yt;return t.index++,o}function $t(e,t){return typeof t=="function"?t(e):t}function Xi(e){var t=Ne();return cl(t,ve,e)}function cl(e,t,o){var n=e.queue;if(n===null)throw Error(c(311));n.lastRenderedReducer=o;var i=e.baseQueue,s=n.pending;if(s!==null){if(i!==null){var l=i.next;i.next=s.next,s.next=l}t.baseQueue=i=s,n.pending=null}if(s=e.baseState,i===null)e.memoizedState=s;else{t=i.next;var u=l=null,p=null,b=t,O=!1;do{var M=b.lane&-536870913;if(M!==b.lane?(ae&M)===M:(Jt&M)===M){var k=b.revertLane;if(k===0)p!==null&&(p=p.next={lane:0,revertLane:0,gesture:null,action:b.action,hasEagerState:b.hasEagerState,eagerState:b.eagerState,next:null}),M===Pn&&(O=!0);else if((Jt&k)===k){b=b.next,k===Pn&&(O=!0);continue}else M={lane:0,revertLane:b.revertLane,gesture:null,action:b.action,hasEagerState:b.hasEagerState,eagerState:b.eagerState,next:null},p===null?(u=p=M,l=s):p=p.next=M,Z.lanes|=k,Ro|=k;M=b.action,sn&&o(s,M),s=b.hasEagerState?b.eagerState:o(s,M)}else k={lane:M,revertLane:b.revertLane,gesture:b.gesture,action:b.action,hasEagerState:b.hasEagerState,eagerState:b.eagerState,next:null},p===null?(u=p=k,l=s):p=p.next=k,Z.lanes|=M,Ro|=M;b=b.next}while(b!==null&&b!==t);if(p===null?l=s:p.next=u,!mt(s,e.memoizedState)&&(Pe=!0,O&&(o=Un,o!==null)))throw o;e.memoizedState=s,e.baseState=l,e.baseQueue=p,n.lastRenderedState=s}return i===null&&(n.lanes=0),[e.memoizedState,n.dispatch]}function dl(e){var t=Ne(),o=t.queue;if(o===null)throw Error(c(311));o.lastRenderedReducer=e;var n=o.dispatch,i=o.pending,s=t.memoizedState;if(i!==null){o.pending=null;var l=i=i.next;do s=e(s,l.action),l=l.next;while(l!==i);mt(s,t.memoizedState)||(Pe=!0),t.memoizedState=s,t.baseQueue===null&&(t.baseState=s),o.lastRenderedState=s}return[s,n]}function wu(e,t,o){var n=Z,i=Ne(),s=re;if(s){if(o===void 0)throw Error(c(407));o=o()}else o=t();var l=!mt((ve||i).memoizedState,o);if(l&&(i.memoizedState=o,Pe=!0),i=i.queue,hl(Cu.bind(null,n,i,e),[e]),i.getSnapshot!==t||l||De!==null&&De.memoizedState.tag&1){if(n.flags|=2048,Yn(9,{destroy:void 0},Su.bind(null,n,i,o,t),null),ke===null)throw Error(c(349));s||(Jt&127)!==0||ku(n,t,o)}return o}function ku(e,t,o){e.flags|=16384,e={getSnapshot:t,value:o},t=Z.updateQueue,t===null?(t=Ki(),Z.updateQueue=t,t.stores=[e]):(o=t.stores,o===null?t.stores=[e]:o.push(e))}function Su(e,t,o,n){t.value=o,t.getSnapshot=n,Au(t)&&Tu(e)}function Cu(e,t,o){return o(function(){Au(t)&&Tu(e)})}function Au(e){var t=e.getSnapshot;e=e.value;try{var o=t();return!mt(e,o)}catch{return!0}}function Tu(e){var t=Xo(e,2);t!==null&<(t,e,2)}function ul(e){var t=tt();if(typeof e=="function"){var o=e;if(e=o(),sn){yo(!0);try{o()}finally{yo(!1)}}}return t.memoizedState=t.baseState=e,t.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:$t,lastRenderedState:e},t}function Ou(e,t,o,n){return e.baseState=o,cl(e,ve,typeof n=="function"?n:$t)}function hy(e,t,o,n,i){if($i(e))throw Error(c(485));if(e=t.action,e!==null){var s={payload:i,action:e,next:null,isTransition:!0,status:"pending",value:null,reason:null,listeners:[],then:function(l){s.listeners.push(l)}};A.T!==null?o(!0):s.isTransition=!1,n(s),o=t.pending,o===null?(s.next=t.pending=s,xu(t,s)):(s.next=o.next,t.pending=o.next=s)}}function xu(e,t){var o=t.action,n=t.payload,i=e.state;if(t.isTransition){var s=A.T,l={};A.T=l;try{var u=o(i,n),p=A.S;p!==null&&p(l,u),Mu(e,t,u)}catch(b){pl(e,t,b)}finally{s!==null&&l.types!==null&&(s.types=l.types),A.T=s}}else try{s=o(i,n),Mu(e,t,s)}catch(b){pl(e,t,b)}}function Mu(e,t,o){o!==null&&typeof o=="object"&&typeof o.then=="function"?o.then(function(n){Eu(e,t,n)},function(n){return pl(e,t,n)}):Eu(e,t,o)}function Eu(e,t,o){t.status="fulfilled",t.value=o,Bu(t),e.state=o,t=e.pending,t!==null&&(o=t.next,o===t?e.pending=null:(o=o.next,t.next=o,xu(e,o)))}function pl(e,t,o){var n=e.pending;if(e.pending=null,n!==null){n=n.next;do t.status="rejected",t.reason=o,Bu(t),t=t.next;while(t!==n)}e.action=null}function Bu(e){e=e.listeners;for(var t=0;t<e.length;t++)(0,e[t])()}function Ru(e,t){return t}function Lu(e,t){if(re){var o=ke.formState;if(o!==null){e:{var n=Z;if(re){if(Se){t:{for(var i=Se,s=Mt;i.nodeType!==8;){if(!s){i=null;break t}if(i=Bt(i.nextSibling),i===null){i=null;break t}}s=i.data,i=s==="F!"||s==="F"?i:null}if(i){Se=Bt(i.nextSibling),n=i.data==="F!";break e}}So(n)}n=!1}n&&(t=o[0])}}return o=tt(),o.memoizedState=o.baseState=t,n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ru,lastRenderedState:t},o.queue=n,o=Zu.bind(null,Z,n),n.dispatch=o,n=ul(!1),s=vl.bind(null,Z,!1,n.queue),n=tt(),i={state:t,dispatch:null,action:e,pending:null},n.queue=i,o=hy.bind(null,Z,i,s,o),i.dispatch=o,n.memoizedState=e,[t,o,!1]}function Nu(e){var t=Ne();return Iu(t,ve,e)}function Iu(e,t,o){if(t=cl(e,t,Ru)[0],e=Xi($t)[0],typeof t=="object"&&t!==null&&typeof t.then=="function")try{var n=Ra(t)}catch(l){throw l===Hn?_i:l}else n=t;t=Ne();var i=t.queue,s=i.dispatch;return o!==t.memoizedState&&(Z.flags|=2048,Yn(9,{destroy:void 0},my.bind(null,i,o),null)),[n,s,e]}function my(e,t){e.action=t}function Du(e){var t=Ne(),o=ve;if(o!==null)return Iu(t,o,e);Ne(),t=t.memoizedState,o=Ne();var n=o.queue.dispatch;return o.memoizedState=e,[t,n,!1]}function Yn(e,t,o,n){return e={tag:e,create:o,deps:n,inst:t,next:null},t=Z.updateQueue,t===null&&(t=Ki(),Z.updateQueue=t),o=t.lastEffect,o===null?t.lastEffect=e.next=e:(n=o.next,o.next=e,e.next=n,t.lastEffect=e),e}function Pu(){return Ne().memoizedState}function Zi(e,t,o,n){var i=tt();Z.flags|=e,i.memoizedState=Yn(1|t,{destroy:void 0},o,n===void 0?null:n)}function Ji(e,t,o,n){var i=Ne();n=n===void 0?null:n;var s=i.memoizedState.inst;ve!==null&&n!==null&&nl(n,ve.memoizedState.deps)?i.memoizedState=Yn(t,s,o,n):(Z.flags|=e,i.memoizedState=Yn(1|t,s,o,n))}function Uu(e,t){Zi(8390656,8,e,t)}function hl(e,t){Ji(2048,8,e,t)}function gy(e){Z.flags|=4;var t=Z.updateQueue;if(t===null)t=Ki(),Z.updateQueue=t,t.events=[e];else{var o=t.events;o===null?t.events=[e]:o.push(e)}}function Hu(e){var t=Ne().memoizedState;return gy({ref:t,nextImpl:e}),function(){if((me&2)!==0)throw Error(c(440));return t.impl.apply(void 0,arguments)}}function zu(e,t){return Ji(4,2,e,t)}function _u(e,t){return Ji(4,4,e,t)}function Gu(e,t){if(typeof t=="function"){e=e();var o=t(e);return function(){typeof o=="function"?o():t(null)}}if(t!=null)return e=e(),t.current=e,function(){t.current=null}}function qu(e,t,o){o=o!=null?o.concat([e]):null,Ji(4,4,Gu.bind(null,t,e),o)}function ml(){}function Yu(e,t){var o=Ne();t=t===void 0?null:t;var n=o.memoizedState;return t!==null&&nl(t,n[1])?n[0]:(o.memoizedState=[e,t],e)}function Wu(e,t){var o=Ne();t=t===void 0?null:t;var n=o.memoizedState;if(t!==null&&nl(t,n[1]))return n[0];if(n=e(),sn){yo(!0);try{e()}finally{yo(!1)}}return o.memoizedState=[n,t],n}function gl(e,t,o){return o===void 0||(Jt&1073741824)!==0&&(ae&261930)===0?e.memoizedState=t:(e.memoizedState=o,e=Fp(),Z.lanes|=e,Ro|=e,o)}function Fu(e,t,o,n){return mt(o,t)?o:_n.current!==null?(e=gl(e,o,n),mt(e,t)||(Pe=!0),e):(Jt&42)===0||(Jt&1073741824)!==0&&(ae&261930)===0?(Pe=!0,e.memoizedState=o):(e=Fp(),Z.lanes|=e,Ro|=e,t)}function ju(e,t,o,n,i){var s=N.p;N.p=s!==0&&8>s?s:8;var l=A.T,u={};A.T=u,vl(e,!1,t,o);try{var p=i(),b=A.S;if(b!==null&&b(u,p),p!==null&&typeof p=="object"&&typeof p.then=="function"){var O=dy(p,n);La(e,t,O,wt(e))}else La(e,t,n,wt(e))}catch(M){La(e,t,{then:function(){},status:"rejected",reason:M},wt())}finally{N.p=s,l!==null&&u.types!==null&&(l.types=u.types),A.T=l}}function fy(){}function fl(e,t,o,n){if(e.tag!==5)throw Error(c(476));var i=Vu(e).queue;ju(e,i,t,V,o===null?fy:function(){return Ku(e),o(n)})}function Vu(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:V,baseState:V,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:$t,lastRenderedState:V},next:null};var o={};return t.next={memoizedState:o,baseState:o,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:$t,lastRenderedState:o},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Ku(e){var t=Vu(e);t.next===null&&(t=e.alternate.memoizedState),La(e,t.next.queue,{},wt())}function yl(){return Xe(Qa)}function Qu(){return Ne().memoizedState}function Xu(){return Ne().memoizedState}function yy(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var o=wt();e=To(o);var n=Oo(t,e,o);n!==null&&(lt(n,t,o),xa(n,t,o)),t={cache:jr()},e.payload=t;return}t=t.return}}function vy(e,t,o){var n=wt();o={lane:n,revertLane:0,gesture:null,action:o,hasEagerState:!1,eagerState:null,next:null},$i(e)?Ju(t,o):(o=Dr(e,t,o,n),o!==null&&(lt(o,e,n),$u(o,t,n)))}function Zu(e,t,o){var n=wt();La(e,t,o,n)}function La(e,t,o,n){var i={lane:n,revertLane:0,gesture:null,action:o,hasEagerState:!1,eagerState:null,next:null};if($i(e))Ju(t,i);else{var s=e.alternate;if(e.lanes===0&&(s===null||s.lanes===0)&&(s=t.lastRenderedReducer,s!==null))try{var l=t.lastRenderedState,u=s(l,o);if(i.hasEagerState=!0,i.eagerState=u,mt(u,l))return Ni(e,t,i,0),ke===null&&Li(),!1}catch{}if(o=Dr(e,t,i,n),o!==null)return lt(o,e,n),$u(o,t,n),!0}return!1}function vl(e,t,o,n){if(n={lane:2,revertLane:Xl(),gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},$i(e)){if(t)throw Error(c(479))}else t=Dr(e,o,n,2),t!==null&<(t,e,2)}function $i(e){var t=e.alternate;return e===Z||t!==null&&t===Z}function Ju(e,t){Gn=ji=!0;var o=e.pending;o===null?t.next=t:(t.next=o.next,o.next=t),e.pending=t}function $u(e,t,o){if((o&4194048)!==0){var n=t.lanes;n&=e.pendingLanes,o|=n,t.lanes=o,ad(e,o)}}var Na={readContext:Xe,use:Qi,useCallback:Me,useContext:Me,useEffect:Me,useImperativeHandle:Me,useLayoutEffect:Me,useInsertionEffect:Me,useMemo:Me,useReducer:Me,useRef:Me,useState:Me,useDebugValue:Me,useDeferredValue:Me,useTransition:Me,useSyncExternalStore:Me,useId:Me,useHostTransitionStatus:Me,useFormState:Me,useActionState:Me,useOptimistic:Me,useMemoCache:Me,useCacheRefresh:Me};Na.useEffectEvent=Me;var ep={readContext:Xe,use:Qi,useCallback:function(e,t){return tt().memoizedState=[e,t===void 0?null:t],e},useContext:Xe,useEffect:Uu,useImperativeHandle:function(e,t,o){o=o!=null?o.concat([e]):null,Zi(4194308,4,Gu.bind(null,t,e),o)},useLayoutEffect:function(e,t){return Zi(4194308,4,e,t)},useInsertionEffect:function(e,t){Zi(4,2,e,t)},useMemo:function(e,t){var o=tt();t=t===void 0?null:t;var n=e();if(sn){yo(!0);try{e()}finally{yo(!1)}}return o.memoizedState=[n,t],n},useReducer:function(e,t,o){var n=tt();if(o!==void 0){var i=o(t);if(sn){yo(!0);try{o(t)}finally{yo(!1)}}}else i=t;return n.memoizedState=n.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},n.queue=e,e=e.dispatch=vy.bind(null,Z,e),[n.memoizedState,e]},useRef:function(e){var t=tt();return e={current:e},t.memoizedState=e},useState:function(e){e=ul(e);var t=e.queue,o=Zu.bind(null,Z,t);return t.dispatch=o,[e.memoizedState,o]},useDebugValue:ml,useDeferredValue:function(e,t){var o=tt();return gl(o,e,t)},useTransition:function(){var e=ul(!1);return e=ju.bind(null,Z,e.queue,!0,!1),tt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,o){var n=Z,i=tt();if(re){if(o===void 0)throw Error(c(407));o=o()}else{if(o=t(),ke===null)throw Error(c(349));(ae&127)!==0||ku(n,t,o)}i.memoizedState=o;var s={value:o,getSnapshot:t};return i.queue=s,Uu(Cu.bind(null,n,s,e),[e]),n.flags|=2048,Yn(9,{destroy:void 0},Su.bind(null,n,s,o,t),null),o},useId:function(){var e=tt(),t=ke.identifierPrefix;if(re){var o=zt,n=Ht;o=(n&~(1<<32-ht(n)-1)).toString(32)+o,t="_"+t+"R_"+o,o=Vi++,0<o&&(t+="H"+o.toString(32)),t+="_"}else o=uy++,t="_"+t+"r_"+o.toString(32)+"_";return e.memoizedState=t},useHostTransitionStatus:yl,useFormState:Lu,useActionState:Lu,useOptimistic:function(e){var t=tt();t.memoizedState=t.baseState=e;var o={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return t.queue=o,t=vl.bind(null,Z,!0,o),o.dispatch=t,[e,t]},useMemoCache:ll,useCacheRefresh:function(){return tt().memoizedState=yy.bind(null,Z)},useEffectEvent:function(e){var t=tt(),o={impl:e};return t.memoizedState=o,function(){if((me&2)!==0)throw Error(c(440));return o.impl.apply(void 0,arguments)}}},bl={readContext:Xe,use:Qi,useCallback:Yu,useContext:Xe,useEffect:hl,useImperativeHandle:qu,useInsertionEffect:zu,useLayoutEffect:_u,useMemo:Wu,useReducer:Xi,useRef:Pu,useState:function(){return Xi($t)},useDebugValue:ml,useDeferredValue:function(e,t){var o=Ne();return Fu(o,ve.memoizedState,e,t)},useTransition:function(){var e=Xi($t)[0],t=Ne().memoizedState;return[typeof e=="boolean"?e:Ra(e),t]},useSyncExternalStore:wu,useId:Qu,useHostTransitionStatus:yl,useFormState:Nu,useActionState:Nu,useOptimistic:function(e,t){var o=Ne();return Ou(o,ve,e,t)},useMemoCache:ll,useCacheRefresh:Xu};bl.useEffectEvent=Hu;var tp={readContext:Xe,use:Qi,useCallback:Yu,useContext:Xe,useEffect:hl,useImperativeHandle:qu,useInsertionEffect:zu,useLayoutEffect:_u,useMemo:Wu,useReducer:dl,useRef:Pu,useState:function(){return dl($t)},useDebugValue:ml,useDeferredValue:function(e,t){var o=Ne();return ve===null?gl(o,e,t):Fu(o,ve.memoizedState,e,t)},useTransition:function(){var e=dl($t)[0],t=Ne().memoizedState;return[typeof e=="boolean"?e:Ra(e),t]},useSyncExternalStore:wu,useId:Qu,useHostTransitionStatus:yl,useFormState:Du,useActionState:Du,useOptimistic:function(e,t){var o=Ne();return ve!==null?Ou(o,ve,e,t):(o.baseState=e,[e,o.queue.dispatch])},useMemoCache:ll,useCacheRefresh:Xu};tp.useEffectEvent=Hu;function wl(e,t,o,n){t=e.memoizedState,o=o(n,t),o=o==null?t:R({},t,o),e.memoizedState=o,e.lanes===0&&(e.updateQueue.baseState=o)}var kl={enqueueSetState:function(e,t,o){e=e._reactInternals;var n=wt(),i=To(n);i.payload=t,o!=null&&(i.callback=o),t=Oo(e,i,n),t!==null&&(lt(t,e,n),xa(t,e,n))},enqueueReplaceState:function(e,t,o){e=e._reactInternals;var n=wt(),i=To(n);i.tag=1,i.payload=t,o!=null&&(i.callback=o),t=Oo(e,i,n),t!==null&&(lt(t,e,n),xa(t,e,n))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var o=wt(),n=To(o);n.tag=2,t!=null&&(n.callback=t),t=Oo(e,n,o),t!==null&&(lt(t,e,o),xa(t,e,o))}};function op(e,t,o,n,i,s,l){return e=e.stateNode,typeof e.shouldComponentUpdate=="function"?e.shouldComponentUpdate(n,s,l):t.prototype&&t.prototype.isPureReactComponent?!ba(o,n)||!ba(i,s):!0}function np(e,t,o,n){e=t.state,typeof t.componentWillReceiveProps=="function"&&t.componentWillReceiveProps(o,n),typeof t.UNSAFE_componentWillReceiveProps=="function"&&t.UNSAFE_componentWillReceiveProps(o,n),t.state!==e&&kl.enqueueReplaceState(t,t.state,null)}function rn(e,t){var o=t;if("ref"in t){o={};for(var n in t)n!=="ref"&&(o[n]=t[n])}if(e=e.defaultProps){o===t&&(o=R({},o));for(var i in e)o[i]===void 0&&(o[i]=e[i])}return o}function ap(e){Ri(e)}function ip(e){console.error(e)}function sp(e){Ri(e)}function es(e,t){try{var o=e.onUncaughtError;o(t.value,{componentStack:t.stack})}catch(n){setTimeout(function(){throw n})}}function rp(e,t,o){try{var n=e.onCaughtError;n(o.value,{componentStack:o.stack,errorBoundary:t.tag===1?t.stateNode:null})}catch(i){setTimeout(function(){throw i})}}function Sl(e,t,o){return o=To(o),o.tag=3,o.payload={element:null},o.callback=function(){es(e,t)},o}function lp(e){return e=To(e),e.tag=3,e}function cp(e,t,o,n){var i=o.type.getDerivedStateFromError;if(typeof i=="function"){var s=n.value;e.payload=function(){return i(s)},e.callback=function(){rp(t,o,n)}}var l=o.stateNode;l!==null&&typeof l.componentDidCatch=="function"&&(e.callback=function(){rp(t,o,n),typeof i!="function"&&(Lo===null?Lo=new Set([this]):Lo.add(this));var u=n.stack;this.componentDidCatch(n.value,{componentStack:u!==null?u:""})})}function by(e,t,o,n,i){if(o.flags|=32768,n!==null&&typeof n=="object"&&typeof n.then=="function"){if(t=o.alternate,t!==null&&Dn(t,o,i,!0),o=ft.current,o!==null){switch(o.tag){case 31:case 13:return Et===null?ps():o.alternate===null&&Ee===0&&(Ee=3),o.flags&=-257,o.flags|=65536,o.lanes=i,n===Gi?o.flags|=16384:(t=o.updateQueue,t===null?o.updateQueue=new Set([n]):t.add(n),Vl(e,n,i)),!1;case 22:return o.flags|=65536,n===Gi?o.flags|=16384:(t=o.updateQueue,t===null?(t={transitions:null,markerInstances:null,retryQueue:new Set([n])},o.updateQueue=t):(o=t.retryQueue,o===null?t.retryQueue=new Set([n]):o.add(n)),Vl(e,n,i)),!1}throw Error(c(435,o.tag))}return Vl(e,n,i),ps(),!1}if(re)return t=ft.current,t!==null?((t.flags&65536)===0&&(t.flags|=256),t.flags|=65536,t.lanes=i,n!==Gr&&(e=Error(c(422),{cause:n}),Sa(Tt(e,o)))):(n!==Gr&&(t=Error(c(423),{cause:n}),Sa(Tt(t,o))),e=e.current.alternate,e.flags|=65536,i&=-i,e.lanes|=i,n=Tt(n,o),i=Sl(e.stateNode,n,i),Jr(e,i),Ee!==4&&(Ee=2)),!1;var s=Error(c(520),{cause:n});if(s=Tt(s,o),Ga===null?Ga=[s]:Ga.push(s),Ee!==4&&(Ee=2),t===null)return!0;n=Tt(n,o),o=t;do{switch(o.tag){case 3:return o.flags|=65536,e=i&-i,o.lanes|=e,e=Sl(o.stateNode,n,e),Jr(o,e),!1;case 1:if(t=o.type,s=o.stateNode,(o.flags&128)===0&&(typeof t.getDerivedStateFromError=="function"||s!==null&&typeof s.componentDidCatch=="function"&&(Lo===null||!Lo.has(s))))return o.flags|=65536,i&=-i,o.lanes|=i,i=lp(i),cp(i,e,o,n),Jr(o,i),!1}o=o.return}while(o!==null);return!1}var Cl=Error(c(461)),Pe=!1;function Ze(e,t,o,n){t.child=e===null?hu(t,null,o,n):an(t,e.child,o,n)}function dp(e,t,o,n,i){o=o.render;var s=t.ref;if("ref"in n){var l={};for(var u in n)u!=="ref"&&(l[u]=n[u])}else l=n;return en(t),n=al(e,t,o,l,s,i),u=il(),e!==null&&!Pe?(sl(e,t,i),eo(e,t,i)):(re&&u&&zr(t),t.flags|=1,Ze(e,t,n,i),t.child)}function up(e,t,o,n,i){if(e===null){var s=o.type;return typeof s=="function"&&!Pr(s)&&s.defaultProps===void 0&&o.compare===null?(t.tag=15,t.type=s,pp(e,t,s,n,i)):(e=Di(o.type,null,n,t,t.mode,i),e.ref=t.ref,e.return=t,t.child=e)}if(s=e.child,!Rl(e,i)){var l=s.memoizedProps;if(o=o.compare,o=o!==null?o:ba,o(l,n)&&e.ref===t.ref)return eo(e,t,i)}return t.flags|=1,e=Kt(s,n),e.ref=t.ref,e.return=t,t.child=e}function pp(e,t,o,n,i){if(e!==null){var s=e.memoizedProps;if(ba(s,n)&&e.ref===t.ref)if(Pe=!1,t.pendingProps=n=s,Rl(e,i))(e.flags&131072)!==0&&(Pe=!0);else return t.lanes=e.lanes,eo(e,t,i)}return Al(e,t,o,n,i)}function hp(e,t,o,n){var i=n.children,s=e!==null?e.memoizedState:null;if(e===null&&t.stateNode===null&&(t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),n.mode==="hidden"){if((t.flags&128)!==0){if(s=s!==null?s.baseLanes|o:o,e!==null){for(n=t.child=e.child,i=0;n!==null;)i=i|n.lanes|n.childLanes,n=n.sibling;n=i&~s}else n=0,t.child=null;return mp(e,t,s,o,n)}if((o&536870912)!==0)t.memoizedState={baseLanes:0,cachePool:null},e!==null&&zi(t,s!==null?s.cachePool:null),s!==null?fu(t,s):el(),yu(t);else return n=t.lanes=536870912,mp(e,t,s!==null?s.baseLanes|o:o,o,n)}else s!==null?(zi(t,s.cachePool),fu(t,s),Mo(),t.memoizedState=null):(e!==null&&zi(t,null),el(),Mo());return Ze(e,t,i,o),t.child}function Ia(e,t){return e!==null&&e.tag===22||t.stateNode!==null||(t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),t.sibling}function mp(e,t,o,n,i){var s=Kr();return s=s===null?null:{parent:Ie._currentValue,pool:s},t.memoizedState={baseLanes:o,cachePool:s},e!==null&&zi(t,null),el(),yu(t),e!==null&&Dn(e,t,n,!0),t.childLanes=i,null}function ts(e,t){return t=ns({mode:t.mode,children:t.children},e.mode),t.ref=e.ref,e.child=t,t.return=e,t}function gp(e,t,o){return an(t,e.child,null,o),e=ts(t,t.pendingProps),e.flags|=2,yt(t),t.memoizedState=null,e}function wy(e,t,o){var n=t.pendingProps,i=(t.flags&128)!==0;if(t.flags&=-129,e===null){if(re){if(n.mode==="hidden")return e=ts(t,n),t.lanes=536870912,Ia(null,e);if(ol(t),(e=Se)?(e=xh(e,Mt),e=e!==null&&e.data==="&"?e:null,e!==null&&(t.memoizedState={dehydrated:e,treeContext:wo!==null?{id:Ht,overflow:zt}:null,retryLane:536870912,hydrationErrors:null},o=Jd(e),o.return=t,t.child=o,Qe=t,Se=null)):e=null,e===null)throw So(t);return t.lanes=536870912,null}return ts(t,n)}var s=e.memoizedState;if(s!==null){var l=s.dehydrated;if(ol(t),i)if(t.flags&256)t.flags&=-257,t=gp(e,t,o);else if(t.memoizedState!==null)t.child=e.child,t.flags|=128,t=null;else throw Error(c(558));else if(Pe||Dn(e,t,o,!1),i=(o&e.childLanes)!==0,Pe||i){if(n=ke,n!==null&&(l=id(n,o),l!==0&&l!==s.retryLane))throw s.retryLane=l,Xo(e,l),lt(n,e,l),Cl;ps(),t=gp(e,t,o)}else e=s.treeContext,Se=Bt(l.nextSibling),Qe=t,re=!0,ko=null,Mt=!1,e!==null&&tu(t,e),t=ts(t,n),t.flags|=4096;return t}return e=Kt(e.child,{mode:n.mode,children:n.children}),e.ref=t.ref,t.child=e,e.return=t,e}function os(e,t){var o=t.ref;if(o===null)e!==null&&e.ref!==null&&(t.flags|=4194816);else{if(typeof o!="function"&&typeof o!="object")throw Error(c(284));(e===null||e.ref!==o)&&(t.flags|=4194816)}}function Al(e,t,o,n,i){return en(t),o=al(e,t,o,n,void 0,i),n=il(),e!==null&&!Pe?(sl(e,t,i),eo(e,t,i)):(re&&n&&zr(t),t.flags|=1,Ze(e,t,o,i),t.child)}function fp(e,t,o,n,i,s){return en(t),t.updateQueue=null,o=bu(t,n,o,i),vu(e),n=il(),e!==null&&!Pe?(sl(e,t,s),eo(e,t,s)):(re&&n&&zr(t),t.flags|=1,Ze(e,t,o,s),t.child)}function yp(e,t,o,n,i){if(en(t),t.stateNode===null){var s=Rn,l=o.contextType;typeof l=="object"&&l!==null&&(s=Xe(l)),s=new o(n,s),t.memoizedState=s.state!==null&&s.state!==void 0?s.state:null,s.updater=kl,t.stateNode=s,s._reactInternals=t,s=t.stateNode,s.props=n,s.state=t.memoizedState,s.refs={},Xr(t),l=o.contextType,s.context=typeof l=="object"&&l!==null?Xe(l):Rn,s.state=t.memoizedState,l=o.getDerivedStateFromProps,typeof l=="function"&&(wl(t,o,l,n),s.state=t.memoizedState),typeof o.getDerivedStateFromProps=="function"||typeof s.getSnapshotBeforeUpdate=="function"||typeof s.UNSAFE_componentWillMount!="function"&&typeof s.componentWillMount!="function"||(l=s.state,typeof s.componentWillMount=="function"&&s.componentWillMount(),typeof s.UNSAFE_componentWillMount=="function"&&s.UNSAFE_componentWillMount(),l!==s.state&&kl.enqueueReplaceState(s,s.state,null),Ea(t,n,s,i),Ma(),s.state=t.memoizedState),typeof s.componentDidMount=="function"&&(t.flags|=4194308),n=!0}else if(e===null){s=t.stateNode;var u=t.memoizedProps,p=rn(o,u);s.props=p;var b=s.context,O=o.contextType;l=Rn,typeof O=="object"&&O!==null&&(l=Xe(O));var M=o.getDerivedStateFromProps;O=typeof M=="function"||typeof s.getSnapshotBeforeUpdate=="function",u=t.pendingProps!==u,O||typeof s.UNSAFE_componentWillReceiveProps!="function"&&typeof s.componentWillReceiveProps!="function"||(u||b!==l)&&np(t,s,n,l),Ao=!1;var k=t.memoizedState;s.state=k,Ea(t,n,s,i),Ma(),b=t.memoizedState,u||k!==b||Ao?(typeof M=="function"&&(wl(t,o,M,n),b=t.memoizedState),(p=Ao||op(t,o,p,n,k,b,l))?(O||typeof s.UNSAFE_componentWillMount!="function"&&typeof s.componentWillMount!="function"||(typeof s.componentWillMount=="function"&&s.componentWillMount(),typeof s.UNSAFE_componentWillMount=="function"&&s.UNSAFE_componentWillMount()),typeof s.componentDidMount=="function"&&(t.flags|=4194308)):(typeof s.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=n,t.memoizedState=b),s.props=n,s.state=b,s.context=l,n=p):(typeof s.componentDidMount=="function"&&(t.flags|=4194308),n=!1)}else{s=t.stateNode,Zr(e,t),l=t.memoizedProps,O=rn(o,l),s.props=O,M=t.pendingProps,k=s.context,b=o.contextType,p=Rn,typeof b=="object"&&b!==null&&(p=Xe(b)),u=o.getDerivedStateFromProps,(b=typeof u=="function"||typeof s.getSnapshotBeforeUpdate=="function")||typeof s.UNSAFE_componentWillReceiveProps!="function"&&typeof s.componentWillReceiveProps!="function"||(l!==M||k!==p)&&np(t,s,n,p),Ao=!1,k=t.memoizedState,s.state=k,Ea(t,n,s,i),Ma();var S=t.memoizedState;l!==M||k!==S||Ao||e!==null&&e.dependencies!==null&&Ui(e.dependencies)?(typeof u=="function"&&(wl(t,o,u,n),S=t.memoizedState),(O=Ao||op(t,o,O,n,k,S,p)||e!==null&&e.dependencies!==null&&Ui(e.dependencies))?(b||typeof s.UNSAFE_componentWillUpdate!="function"&&typeof s.componentWillUpdate!="function"||(typeof s.componentWillUpdate=="function"&&s.componentWillUpdate(n,S,p),typeof s.UNSAFE_componentWillUpdate=="function"&&s.UNSAFE_componentWillUpdate(n,S,p)),typeof s.componentDidUpdate=="function"&&(t.flags|=4),typeof s.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof s.componentDidUpdate!="function"||l===e.memoizedProps&&k===e.memoizedState||(t.flags|=4),typeof s.getSnapshotBeforeUpdate!="function"||l===e.memoizedProps&&k===e.memoizedState||(t.flags|=1024),t.memoizedProps=n,t.memoizedState=S),s.props=n,s.state=S,s.context=p,n=O):(typeof s.componentDidUpdate!="function"||l===e.memoizedProps&&k===e.memoizedState||(t.flags|=4),typeof s.getSnapshotBeforeUpdate!="function"||l===e.memoizedProps&&k===e.memoizedState||(t.flags|=1024),n=!1)}return s=n,os(e,t),n=(t.flags&128)!==0,s||n?(s=t.stateNode,o=n&&typeof o.getDerivedStateFromError!="function"?null:s.render(),t.flags|=1,e!==null&&n?(t.child=an(t,e.child,null,i),t.child=an(t,null,o,i)):Ze(e,t,o,i),t.memoizedState=s.state,e=t.child):e=eo(e,t,i),e}function vp(e,t,o,n){return Jo(),t.flags|=256,Ze(e,t,o,n),t.child}var Tl={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Ol(e){return{baseLanes:e,cachePool:ru()}}function xl(e,t,o){return e=e!==null?e.childLanes&~o:0,t&&(e|=bt),e}function bp(e,t,o){var n=t.pendingProps,i=!1,s=(t.flags&128)!==0,l;if((l=s)||(l=e!==null&&e.memoizedState===null?!1:(Le.current&2)!==0),l&&(i=!0,t.flags&=-129),l=(t.flags&32)!==0,t.flags&=-33,e===null){if(re){if(i?xo(t):Mo(),(e=Se)?(e=xh(e,Mt),e=e!==null&&e.data!=="&"?e:null,e!==null&&(t.memoizedState={dehydrated:e,treeContext:wo!==null?{id:Ht,overflow:zt}:null,retryLane:536870912,hydrationErrors:null},o=Jd(e),o.return=t,t.child=o,Qe=t,Se=null)):e=null,e===null)throw So(t);return cc(e)?t.lanes=32:t.lanes=536870912,null}var u=n.children;return n=n.fallback,i?(Mo(),i=t.mode,u=ns({mode:"hidden",children:u},i),n=Zo(n,i,o,null),u.return=t,n.return=t,u.sibling=n,t.child=u,n=t.child,n.memoizedState=Ol(o),n.childLanes=xl(e,l,o),t.memoizedState=Tl,Ia(null,n)):(xo(t),Ml(t,u))}var p=e.memoizedState;if(p!==null&&(u=p.dehydrated,u!==null)){if(s)t.flags&256?(xo(t),t.flags&=-257,t=El(e,t,o)):t.memoizedState!==null?(Mo(),t.child=e.child,t.flags|=128,t=null):(Mo(),u=n.fallback,i=t.mode,n=ns({mode:"visible",children:n.children},i),u=Zo(u,i,o,null),u.flags|=2,n.return=t,u.return=t,n.sibling=u,t.child=n,an(t,e.child,null,o),n=t.child,n.memoizedState=Ol(o),n.childLanes=xl(e,l,o),t.memoizedState=Tl,t=Ia(null,n));else if(xo(t),cc(u)){if(l=u.nextSibling&&u.nextSibling.dataset,l)var b=l.dgst;l=b,n=Error(c(419)),n.stack="",n.digest=l,Sa({value:n,source:null,stack:null}),t=El(e,t,o)}else if(Pe||Dn(e,t,o,!1),l=(o&e.childLanes)!==0,Pe||l){if(l=ke,l!==null&&(n=id(l,o),n!==0&&n!==p.retryLane))throw p.retryLane=n,Xo(e,n),lt(l,e,n),Cl;lc(u)||ps(),t=El(e,t,o)}else lc(u)?(t.flags|=192,t.child=e.child,t=null):(e=p.treeContext,Se=Bt(u.nextSibling),Qe=t,re=!0,ko=null,Mt=!1,e!==null&&tu(t,e),t=Ml(t,n.children),t.flags|=4096);return t}return i?(Mo(),u=n.fallback,i=t.mode,p=e.child,b=p.sibling,n=Kt(p,{mode:"hidden",children:n.children}),n.subtreeFlags=p.subtreeFlags&65011712,b!==null?u=Kt(b,u):(u=Zo(u,i,o,null),u.flags|=2),u.return=t,n.return=t,n.sibling=u,t.child=n,Ia(null,n),n=t.child,u=e.child.memoizedState,u===null?u=Ol(o):(i=u.cachePool,i!==null?(p=Ie._currentValue,i=i.parent!==p?{parent:p,pool:p}:i):i=ru(),u={baseLanes:u.baseLanes|o,cachePool:i}),n.memoizedState=u,n.childLanes=xl(e,l,o),t.memoizedState=Tl,Ia(e.child,n)):(xo(t),o=e.child,e=o.sibling,o=Kt(o,{mode:"visible",children:n.children}),o.return=t,o.sibling=null,e!==null&&(l=t.deletions,l===null?(t.deletions=[e],t.flags|=16):l.push(e)),t.child=o,t.memoizedState=null,o)}function Ml(e,t){return t=ns({mode:"visible",children:t},e.mode),t.return=e,e.child=t}function ns(e,t){return e=gt(22,e,null,t),e.lanes=0,e}function El(e,t,o){return an(t,e.child,null,o),e=Ml(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function wp(e,t,o){e.lanes|=t;var n=e.alternate;n!==null&&(n.lanes|=t),Wr(e.return,t,o)}function Bl(e,t,o,n,i,s){var l=e.memoizedState;l===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:n,tail:o,tailMode:i,treeForkCount:s}:(l.isBackwards=t,l.rendering=null,l.renderingStartTime=0,l.last=n,l.tail=o,l.tailMode=i,l.treeForkCount=s)}function kp(e,t,o){var n=t.pendingProps,i=n.revealOrder,s=n.tail;n=n.children;var l=Le.current,u=(l&2)!==0;if(u?(l=l&1|2,t.flags|=128):l&=1,D(Le,l),Ze(e,t,n,o),n=re?ka:0,!u&&e!==null&&(e.flags&128)!==0)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&wp(e,o,t);else if(e.tag===19)wp(e,o,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}switch(i){case"forwards":for(o=t.child,i=null;o!==null;)e=o.alternate,e!==null&&Fi(e)===null&&(i=o),o=o.sibling;o=i,o===null?(i=t.child,t.child=null):(i=o.sibling,o.sibling=null),Bl(t,!1,i,o,s,n);break;case"backwards":case"unstable_legacy-backwards":for(o=null,i=t.child,t.child=null;i!==null;){if(e=i.alternate,e!==null&&Fi(e)===null){t.child=i;break}e=i.sibling,i.sibling=o,o=i,i=e}Bl(t,!0,o,null,s,n);break;case"together":Bl(t,!1,null,null,void 0,n);break;default:t.memoizedState=null}return t.child}function eo(e,t,o){if(e!==null&&(t.dependencies=e.dependencies),Ro|=t.lanes,(o&t.childLanes)===0)if(e!==null){if(Dn(e,t,o,!1),(o&t.childLanes)===0)return null}else return null;if(e!==null&&t.child!==e.child)throw Error(c(153));if(t.child!==null){for(e=t.child,o=Kt(e,e.pendingProps),t.child=o,o.return=t;e.sibling!==null;)e=e.sibling,o=o.sibling=Kt(e,e.pendingProps),o.return=t;o.sibling=null}return t.child}function Rl(e,t){return(e.lanes&t)!==0?!0:(e=e.dependencies,!!(e!==null&&Ui(e)))}function ky(e,t,o){switch(t.tag){case 3:Ye(t,t.stateNode.containerInfo),Co(t,Ie,e.memoizedState.cache),Jo();break;case 27:case 5:go(t);break;case 4:Ye(t,t.stateNode.containerInfo);break;case 10:Co(t,t.type,t.memoizedProps.value);break;case 31:if(t.memoizedState!==null)return t.flags|=128,ol(t),null;break;case 13:var n=t.memoizedState;if(n!==null)return n.dehydrated!==null?(xo(t),t.flags|=128,null):(o&t.child.childLanes)!==0?bp(e,t,o):(xo(t),e=eo(e,t,o),e!==null?e.sibling:null);xo(t);break;case 19:var i=(e.flags&128)!==0;if(n=(o&t.childLanes)!==0,n||(Dn(e,t,o,!1),n=(o&t.childLanes)!==0),i){if(n)return kp(e,t,o);t.flags|=128}if(i=t.memoizedState,i!==null&&(i.rendering=null,i.tail=null,i.lastEffect=null),D(Le,Le.current),n)break;return null;case 22:return t.lanes=0,hp(e,t,o,t.pendingProps);case 24:Co(t,Ie,e.memoizedState.cache)}return eo(e,t,o)}function Sp(e,t,o){if(e!==null)if(e.memoizedProps!==t.pendingProps)Pe=!0;else{if(!Rl(e,o)&&(t.flags&128)===0)return Pe=!1,ky(e,t,o);Pe=(e.flags&131072)!==0}else Pe=!1,re&&(t.flags&1048576)!==0&&eu(t,ka,t.index);switch(t.lanes=0,t.tag){case 16:e:{var n=t.pendingProps;if(e=on(t.elementType),t.type=e,typeof e=="function")Pr(e)?(n=rn(e,n),t.tag=1,t=yp(null,t,e,n,o)):(t.tag=0,t=Al(null,t,e,n,o));else{if(e!=null){var i=e.$$typeof;if(i===He){t.tag=11,t=dp(null,t,e,n,o);break e}else if(i===Q){t.tag=14,t=up(null,t,e,n,o);break e}}throw t=dt(e)||e,Error(c(306,t,""))}}return t;case 0:return Al(e,t,t.type,t.pendingProps,o);case 1:return n=t.type,i=rn(n,t.pendingProps),yp(e,t,n,i,o);case 3:e:{if(Ye(t,t.stateNode.containerInfo),e===null)throw Error(c(387));n=t.pendingProps;var s=t.memoizedState;i=s.element,Zr(e,t),Ea(t,n,null,o);var l=t.memoizedState;if(n=l.cache,Co(t,Ie,n),n!==s.cache&&Fr(t,[Ie],o,!0),Ma(),n=l.element,s.isDehydrated)if(s={element:n,isDehydrated:!1,cache:l.cache},t.updateQueue.baseState=s,t.memoizedState=s,t.flags&256){t=vp(e,t,n,o);break e}else if(n!==i){i=Tt(Error(c(424)),t),Sa(i),t=vp(e,t,n,o);break e}else for(e=t.stateNode.containerInfo,e.nodeType===9?e=e.body:e=e.nodeName==="HTML"?e.ownerDocument.body:e,Se=Bt(e.firstChild),Qe=t,re=!0,ko=null,Mt=!0,o=hu(t,null,n,o),t.child=o;o;)o.flags=o.flags&-3|4096,o=o.sibling;else{if(Jo(),n===i){t=eo(e,t,o);break e}Ze(e,t,n,o)}t=t.child}return t;case 26:return os(e,t),e===null?(o=Nh(t.type,null,t.pendingProps,null))?t.memoizedState=o:re||(o=t.type,e=t.pendingProps,n=bs(j.current).createElement(o),n[Ke]=t,n[ot]=e,Je(n,o,e),We(n),t.stateNode=n):t.memoizedState=Nh(t.type,e.memoizedProps,t.pendingProps,e.memoizedState),null;case 27:return go(t),e===null&&re&&(n=t.stateNode=Bh(t.type,t.pendingProps,j.current),Qe=t,Mt=!0,i=Se,Po(t.type)?(dc=i,Se=Bt(n.firstChild)):Se=i),Ze(e,t,t.pendingProps.children,o),os(e,t),e===null&&(t.flags|=4194304),t.child;case 5:return e===null&&re&&((i=n=Se)&&(n=Zy(n,t.type,t.pendingProps,Mt),n!==null?(t.stateNode=n,Qe=t,Se=Bt(n.firstChild),Mt=!1,i=!0):i=!1),i||So(t)),go(t),i=t.type,s=t.pendingProps,l=e!==null?e.memoizedProps:null,n=s.children,ic(i,s)?n=null:l!==null&&ic(i,l)&&(t.flags|=32),t.memoizedState!==null&&(i=al(e,t,py,null,null,o),Qa._currentValue=i),os(e,t),Ze(e,t,n,o),t.child;case 6:return e===null&&re&&((e=o=Se)&&(o=Jy(o,t.pendingProps,Mt),o!==null?(t.stateNode=o,Qe=t,Se=null,e=!0):e=!1),e||So(t)),null;case 13:return bp(e,t,o);case 4:return Ye(t,t.stateNode.containerInfo),n=t.pendingProps,e===null?t.child=an(t,null,n,o):Ze(e,t,n,o),t.child;case 11:return dp(e,t,t.type,t.pendingProps,o);case 7:return Ze(e,t,t.pendingProps,o),t.child;case 8:return Ze(e,t,t.pendingProps.children,o),t.child;case 12:return Ze(e,t,t.pendingProps.children,o),t.child;case 10:return n=t.pendingProps,Co(t,t.type,n.value),Ze(e,t,n.children,o),t.child;case 9:return i=t.type._context,n=t.pendingProps.children,en(t),i=Xe(i),n=n(i),t.flags|=1,Ze(e,t,n,o),t.child;case 14:return up(e,t,t.type,t.pendingProps,o);case 15:return pp(e,t,t.type,t.pendingProps,o);case 19:return kp(e,t,o);case 31:return wy(e,t,o);case 22:return hp(e,t,o,t.pendingProps);case 24:return en(t),n=Xe(Ie),e===null?(i=Kr(),i===null&&(i=ke,s=jr(),i.pooledCache=s,s.refCount++,s!==null&&(i.pooledCacheLanes|=o),i=s),t.memoizedState={parent:n,cache:i},Xr(t),Co(t,Ie,i)):((e.lanes&o)!==0&&(Zr(e,t),Ea(t,null,null,o),Ma()),i=e.memoizedState,s=t.memoizedState,i.parent!==n?(i={parent:n,cache:n},t.memoizedState=i,t.lanes===0&&(t.memoizedState=t.updateQueue.baseState=i),Co(t,Ie,n)):(n=s.cache,Co(t,Ie,n),n!==i.cache&&Fr(t,[Ie],o,!0))),Ze(e,t,t.pendingProps.children,o),t.child;case 29:throw t.pendingProps}throw Error(c(156,t.tag))}function to(e){e.flags|=4}function Ll(e,t,o,n,i){if((t=(e.mode&32)!==0)&&(t=!1),t){if(e.flags|=16777216,(i&335544128)===i)if(e.stateNode.complete)e.flags|=8192;else if(Qp())e.flags|=8192;else throw nn=Gi,Qr}else e.flags&=-16777217}function Cp(e,t){if(t.type!=="stylesheet"||(t.state.loading&4)!==0)e.flags&=-16777217;else if(e.flags|=16777216,!Hh(t))if(Qp())e.flags|=8192;else throw nn=Gi,Qr}function as(e,t){t!==null&&(e.flags|=4),e.flags&16384&&(t=e.tag!==22?od():536870912,e.lanes|=t,Vn|=t)}function Da(e,t){if(!re)switch(e.tailMode){case"hidden":t=e.tail;for(var o=null;t!==null;)t.alternate!==null&&(o=t),t=t.sibling;o===null?e.tail=null:o.sibling=null;break;case"collapsed":o=e.tail;for(var n=null;o!==null;)o.alternate!==null&&(n=o),o=o.sibling;n===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:n.sibling=null}}function Ce(e){var t=e.alternate!==null&&e.alternate.child===e.child,o=0,n=0;if(t)for(var i=e.child;i!==null;)o|=i.lanes|i.childLanes,n|=i.subtreeFlags&65011712,n|=i.flags&65011712,i.return=e,i=i.sibling;else for(i=e.child;i!==null;)o|=i.lanes|i.childLanes,n|=i.subtreeFlags,n|=i.flags,i.return=e,i=i.sibling;return e.subtreeFlags|=n,e.childLanes=o,t}function Sy(e,t,o){var n=t.pendingProps;switch(_r(t),t.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Ce(t),null;case 1:return Ce(t),null;case 3:return o=t.stateNode,n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),Zt(Ie),$(),o.pendingContext&&(o.context=o.pendingContext,o.pendingContext=null),(e===null||e.child===null)&&(In(t)?to(t):e===null||e.memoizedState.isDehydrated&&(t.flags&256)===0||(t.flags|=1024,qr())),Ce(t),null;case 26:var i=t.type,s=t.memoizedState;return e===null?(to(t),s!==null?(Ce(t),Cp(t,s)):(Ce(t),Ll(t,i,null,n,o))):s?s!==e.memoizedState?(to(t),Ce(t),Cp(t,s)):(Ce(t),t.flags&=-16777217):(e=e.memoizedProps,e!==n&&to(t),Ce(t),Ll(t,i,e,n,o)),null;case 27:if(Wt(t),o=j.current,i=t.type,e!==null&&t.stateNode!=null)e.memoizedProps!==n&&to(t);else{if(!n){if(t.stateNode===null)throw Error(c(166));return Ce(t),null}e=z.current,In(t)?ou(t):(e=Bh(i,n,o),t.stateNode=e,to(t))}return Ce(t),null;case 5:if(Wt(t),i=t.type,e!==null&&t.stateNode!=null)e.memoizedProps!==n&&to(t);else{if(!n){if(t.stateNode===null)throw Error(c(166));return Ce(t),null}if(s=z.current,In(t))ou(t);else{var l=bs(j.current);switch(s){case 1:s=l.createElementNS("http://www.w3.org/2000/svg",i);break;case 2:s=l.createElementNS("http://www.w3.org/1998/Math/MathML",i);break;default:switch(i){case"svg":s=l.createElementNS("http://www.w3.org/2000/svg",i);break;case"math":s=l.createElementNS("http://www.w3.org/1998/Math/MathML",i);break;case"script":s=l.createElement("div"),s.innerHTML="<script><\/script>",s=s.removeChild(s.firstChild);break;case"select":s=typeof n.is=="string"?l.createElement("select",{is:n.is}):l.createElement("select"),n.multiple?s.multiple=!0:n.size&&(s.size=n.size);break;default:s=typeof n.is=="string"?l.createElement(i,{is:n.is}):l.createElement(i)}}s[Ke]=t,s[ot]=n;e:for(l=t.child;l!==null;){if(l.tag===5||l.tag===6)s.appendChild(l.stateNode);else if(l.tag!==4&&l.tag!==27&&l.child!==null){l.child.return=l,l=l.child;continue}if(l===t)break e;for(;l.sibling===null;){if(l.return===null||l.return===t)break e;l=l.return}l.sibling.return=l.return,l=l.sibling}t.stateNode=s;e:switch(Je(s,i,n),i){case"button":case"input":case"select":case"textarea":n=!!n.autoFocus;break e;case"img":n=!0;break e;default:n=!1}n&&to(t)}}return Ce(t),Ll(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,o),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==n&&to(t);else{if(typeof n!="string"&&t.stateNode===null)throw Error(c(166));if(e=j.current,In(t)){if(e=t.stateNode,o=t.memoizedProps,n=null,i=Qe,i!==null)switch(i.tag){case 27:case 5:n=i.memoizedProps}e[Ke]=t,e=!!(e.nodeValue===o||n!==null&&n.suppressHydrationWarning===!0||bh(e.nodeValue,o)),e||So(t,!0)}else e=bs(e).createTextNode(n),e[Ke]=t,t.stateNode=e}return Ce(t),null;case 31:if(o=t.memoizedState,e===null||e.memoizedState!==null){if(n=In(t),o!==null){if(e===null){if(!n)throw Error(c(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(c(557));e[Ke]=t}else Jo(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Ce(t),e=!1}else o=qr(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=o),e=!0;if(!e)return t.flags&256?(yt(t),t):(yt(t),null);if((t.flags&128)!==0)throw Error(c(558))}return Ce(t),null;case 13:if(n=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(i=In(t),n!==null&&n.dehydrated!==null){if(e===null){if(!i)throw Error(c(318));if(i=t.memoizedState,i=i!==null?i.dehydrated:null,!i)throw Error(c(317));i[Ke]=t}else Jo(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Ce(t),i=!1}else i=qr(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=i),i=!0;if(!i)return t.flags&256?(yt(t),t):(yt(t),null)}return yt(t),(t.flags&128)!==0?(t.lanes=o,t):(o=n!==null,e=e!==null&&e.memoizedState!==null,o&&(n=t.child,i=null,n.alternate!==null&&n.alternate.memoizedState!==null&&n.alternate.memoizedState.cachePool!==null&&(i=n.alternate.memoizedState.cachePool.pool),s=null,n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(s=n.memoizedState.cachePool.pool),s!==i&&(n.flags|=2048)),o!==e&&o&&(t.child.flags|=8192),as(t,t.updateQueue),Ce(t),null);case 4:return $(),e===null&&ec(t.stateNode.containerInfo),Ce(t),null;case 10:return Zt(t.type),Ce(t),null;case 19:if(E(Le),n=t.memoizedState,n===null)return Ce(t),null;if(i=(t.flags&128)!==0,s=n.rendering,s===null)if(i)Da(n,!1);else{if(Ee!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(s=Fi(e),s!==null){for(t.flags|=128,Da(n,!1),e=s.updateQueue,t.updateQueue=e,as(t,e),t.subtreeFlags=0,e=o,o=t.child;o!==null;)Zd(o,e),o=o.sibling;return D(Le,Le.current&1|2),re&&Qt(t,n.treeForkCount),t.child}e=e.sibling}n.tail!==null&&ut()>cs&&(t.flags|=128,i=!0,Da(n,!1),t.lanes=4194304)}else{if(!i)if(e=Fi(s),e!==null){if(t.flags|=128,i=!0,e=e.updateQueue,t.updateQueue=e,as(t,e),Da(n,!0),n.tail===null&&n.tailMode==="hidden"&&!s.alternate&&!re)return Ce(t),null}else 2*ut()-n.renderingStartTime>cs&&o!==536870912&&(t.flags|=128,i=!0,Da(n,!1),t.lanes=4194304);n.isBackwards?(s.sibling=t.child,t.child=s):(e=n.last,e!==null?e.sibling=s:t.child=s,n.last=s)}return n.tail!==null?(e=n.tail,n.rendering=e,n.tail=e.sibling,n.renderingStartTime=ut(),e.sibling=null,o=Le.current,D(Le,i?o&1|2:o&1),re&&Qt(t,n.treeForkCount),e):(Ce(t),null);case 22:case 23:return yt(t),tl(),n=t.memoizedState!==null,e!==null?e.memoizedState!==null!==n&&(t.flags|=8192):n&&(t.flags|=8192),n?(o&536870912)!==0&&(t.flags&128)===0&&(Ce(t),t.subtreeFlags&6&&(t.flags|=8192)):Ce(t),o=t.updateQueue,o!==null&&as(t,o.retryQueue),o=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(o=e.memoizedState.cachePool.pool),n=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(n=t.memoizedState.cachePool.pool),n!==o&&(t.flags|=2048),e!==null&&E(tn),null;case 24:return o=null,e!==null&&(o=e.memoizedState.cache),t.memoizedState.cache!==o&&(t.flags|=2048),Zt(Ie),Ce(t),null;case 25:return null;case 30:return null}throw Error(c(156,t.tag))}function Cy(e,t){switch(_r(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Zt(Ie),$(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Wt(t),null;case 31:if(t.memoizedState!==null){if(yt(t),t.alternate===null)throw Error(c(340));Jo()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(yt(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(c(340));Jo()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return E(Le),null;case 4:return $(),null;case 10:return Zt(t.type),null;case 22:case 23:return yt(t),tl(),e!==null&&E(tn),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Zt(Ie),null;case 25:return null;default:return null}}function Ap(e,t){switch(_r(t),t.tag){case 3:Zt(Ie),$();break;case 26:case 27:case 5:Wt(t);break;case 4:$();break;case 31:t.memoizedState!==null&&yt(t);break;case 13:yt(t);break;case 19:E(Le);break;case 10:Zt(t.type);break;case 22:case 23:yt(t),tl(),e!==null&&E(tn);break;case 24:Zt(Ie)}}function Pa(e,t){try{var o=t.updateQueue,n=o!==null?o.lastEffect:null;if(n!==null){var i=n.next;o=i;do{if((o.tag&e)===e){n=void 0;var s=o.create,l=o.inst;n=s(),l.destroy=n}o=o.next}while(o!==i)}}catch(u){fe(t,t.return,u)}}function Eo(e,t,o){try{var n=t.updateQueue,i=n!==null?n.lastEffect:null;if(i!==null){var s=i.next;n=s;do{if((n.tag&e)===e){var l=n.inst,u=l.destroy;if(u!==void 0){l.destroy=void 0,i=t;var p=o,b=u;try{b()}catch(O){fe(i,p,O)}}}n=n.next}while(n!==s)}}catch(O){fe(t,t.return,O)}}function Tp(e){var t=e.updateQueue;if(t!==null){var o=e.stateNode;try{gu(t,o)}catch(n){fe(e,e.return,n)}}}function Op(e,t,o){o.props=rn(e.type,e.memoizedProps),o.state=e.memoizedState;try{o.componentWillUnmount()}catch(n){fe(e,t,n)}}function Ua(e,t){try{var o=e.ref;if(o!==null){switch(e.tag){case 26:case 27:case 5:var n=e.stateNode;break;case 30:n=e.stateNode;break;default:n=e.stateNode}typeof o=="function"?e.refCleanup=o(n):o.current=n}}catch(i){fe(e,t,i)}}function _t(e,t){var o=e.ref,n=e.refCleanup;if(o!==null)if(typeof n=="function")try{n()}catch(i){fe(e,t,i)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof o=="function")try{o(null)}catch(i){fe(e,t,i)}else o.current=null}function xp(e){var t=e.type,o=e.memoizedProps,n=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":o.autoFocus&&n.focus();break e;case"img":o.src?n.src=o.src:o.srcSet&&(n.srcset=o.srcSet)}}catch(i){fe(e,e.return,i)}}function Nl(e,t,o){try{var n=e.stateNode;Fy(n,e.type,o,t),n[ot]=t}catch(i){fe(e,e.return,i)}}function Mp(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Po(e.type)||e.tag===4}function Il(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Mp(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&Po(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Dl(e,t,o){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?(o.nodeType===9?o.body:o.nodeName==="HTML"?o.ownerDocument.body:o).insertBefore(e,t):(t=o.nodeType===9?o.body:o.nodeName==="HTML"?o.ownerDocument.body:o,t.appendChild(e),o=o._reactRootContainer,o!=null||t.onclick!==null||(t.onclick=jt));else if(n!==4&&(n===27&&Po(e.type)&&(o=e.stateNode,t=null),e=e.child,e!==null))for(Dl(e,t,o),e=e.sibling;e!==null;)Dl(e,t,o),e=e.sibling}function is(e,t,o){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?o.insertBefore(e,t):o.appendChild(e);else if(n!==4&&(n===27&&Po(e.type)&&(o=e.stateNode),e=e.child,e!==null))for(is(e,t,o),e=e.sibling;e!==null;)is(e,t,o),e=e.sibling}function Ep(e){var t=e.stateNode,o=e.memoizedProps;try{for(var n=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);Je(t,n,o),t[Ke]=e,t[ot]=o}catch(s){fe(e,e.return,s)}}var oo=!1,Ue=!1,Pl=!1,Bp=typeof WeakSet=="function"?WeakSet:Set,Fe=null;function Ay(e,t){if(e=e.containerInfo,nc=Os,e=qd(e),Er(e)){if("selectionStart"in e)var o={start:e.selectionStart,end:e.selectionEnd};else e:{o=(o=e.ownerDocument)&&o.defaultView||window;var n=o.getSelection&&o.getSelection();if(n&&n.rangeCount!==0){o=n.anchorNode;var i=n.anchorOffset,s=n.focusNode;n=n.focusOffset;try{o.nodeType,s.nodeType}catch{o=null;break e}var l=0,u=-1,p=-1,b=0,O=0,M=e,k=null;t:for(;;){for(var S;M!==o||i!==0&&M.nodeType!==3||(u=l+i),M!==s||n!==0&&M.nodeType!==3||(p=l+n),M.nodeType===3&&(l+=M.nodeValue.length),(S=M.firstChild)!==null;)k=M,M=S;for(;;){if(M===e)break t;if(k===o&&++b===i&&(u=l),k===s&&++O===n&&(p=l),(S=M.nextSibling)!==null)break;M=k,k=M.parentNode}M=S}o=u===-1||p===-1?null:{start:u,end:p}}else o=null}o=o||{start:0,end:0}}else o=null;for(ac={focusedElem:e,selectionRange:o},Os=!1,Fe=t;Fe!==null;)if(t=Fe,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,Fe=e;else for(;Fe!==null;){switch(t=Fe,s=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(o=0;o<e.length;o++)i=e[o],i.ref.impl=i.nextImpl;break;case 11:case 15:break;case 1:if((e&1024)!==0&&s!==null){e=void 0,o=t,i=s.memoizedProps,s=s.memoizedState,n=o.stateNode;try{var G=rn(o.type,i);e=n.getSnapshotBeforeUpdate(G,s),n.__reactInternalSnapshotBeforeUpdate=e}catch(K){fe(o,o.return,K)}}break;case 3:if((e&1024)!==0){if(e=t.stateNode.containerInfo,o=e.nodeType,o===9)rc(e);else if(o===1)switch(e.nodeName){case"HEAD":case"HTML":case"BODY":rc(e);break;default:e.textContent=""}}break;case 5:case 26:case 27:case 6:case 4:case 17:break;default:if((e&1024)!==0)throw Error(c(163))}if(e=t.sibling,e!==null){e.return=t.return,Fe=e;break}Fe=t.return}}function Rp(e,t,o){var n=o.flags;switch(o.tag){case 0:case 11:case 15:ao(e,o),n&4&&Pa(5,o);break;case 1:if(ao(e,o),n&4)if(e=o.stateNode,t===null)try{e.componentDidMount()}catch(l){fe(o,o.return,l)}else{var i=rn(o.type,t.memoizedProps);t=t.memoizedState;try{e.componentDidUpdate(i,t,e.__reactInternalSnapshotBeforeUpdate)}catch(l){fe(o,o.return,l)}}n&64&&Tp(o),n&512&&Ua(o,o.return);break;case 3:if(ao(e,o),n&64&&(e=o.updateQueue,e!==null)){if(t=null,o.child!==null)switch(o.child.tag){case 27:case 5:t=o.child.stateNode;break;case 1:t=o.child.stateNode}try{gu(e,t)}catch(l){fe(o,o.return,l)}}break;case 27:t===null&&n&4&&Ep(o);case 26:case 5:ao(e,o),t===null&&n&4&&xp(o),n&512&&Ua(o,o.return);break;case 12:ao(e,o);break;case 31:ao(e,o),n&4&&Ip(e,o);break;case 13:ao(e,o),n&4&&Dp(e,o),n&64&&(e=o.memoizedState,e!==null&&(e=e.dehydrated,e!==null&&(o=Ny.bind(null,o),$y(e,o))));break;case 22:if(n=o.memoizedState!==null||oo,!n){t=t!==null&&t.memoizedState!==null||Ue,i=oo;var s=Ue;oo=n,(Ue=t)&&!s?io(e,o,(o.subtreeFlags&8772)!==0):ao(e,o),oo=i,Ue=s}break;case 30:break;default:ao(e,o)}}function Lp(e){var t=e.alternate;t!==null&&(e.alternate=null,Lp(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&pr(t)),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}var Te=null,at=!1;function no(e,t,o){for(o=o.child;o!==null;)Np(e,t,o),o=o.sibling}function Np(e,t,o){if(pt&&typeof pt.onCommitFiberUnmount=="function")try{pt.onCommitFiberUnmount(ra,o)}catch{}switch(o.tag){case 26:Ue||_t(o,t),no(e,t,o),o.memoizedState?o.memoizedState.count--:o.stateNode&&(o=o.stateNode,o.parentNode.removeChild(o));break;case 27:Ue||_t(o,t);var n=Te,i=at;Po(o.type)&&(Te=o.stateNode,at=!1),no(e,t,o),ja(o.stateNode),Te=n,at=i;break;case 5:Ue||_t(o,t);case 6:if(n=Te,i=at,Te=null,no(e,t,o),Te=n,at=i,Te!==null)if(at)try{(Te.nodeType===9?Te.body:Te.nodeName==="HTML"?Te.ownerDocument.body:Te).removeChild(o.stateNode)}catch(s){fe(o,t,s)}else try{Te.removeChild(o.stateNode)}catch(s){fe(o,t,s)}break;case 18:Te!==null&&(at?(e=Te,Th(e.nodeType===9?e.body:e.nodeName==="HTML"?e.ownerDocument.body:e,o.stateNode),ta(e)):Th(Te,o.stateNode));break;case 4:n=Te,i=at,Te=o.stateNode.containerInfo,at=!0,no(e,t,o),Te=n,at=i;break;case 0:case 11:case 14:case 15:Eo(2,o,t),Ue||Eo(4,o,t),no(e,t,o);break;case 1:Ue||(_t(o,t),n=o.stateNode,typeof n.componentWillUnmount=="function"&&Op(o,t,n)),no(e,t,o);break;case 21:no(e,t,o);break;case 22:Ue=(n=Ue)||o.memoizedState!==null,no(e,t,o),Ue=n;break;default:no(e,t,o)}}function Ip(e,t){if(t.memoizedState===null&&(e=t.alternate,e!==null&&(e=e.memoizedState,e!==null))){e=e.dehydrated;try{ta(e)}catch(o){fe(t,t.return,o)}}}function Dp(e,t){if(t.memoizedState===null&&(e=t.alternate,e!==null&&(e=e.memoizedState,e!==null&&(e=e.dehydrated,e!==null))))try{ta(e)}catch(o){fe(t,t.return,o)}}function Ty(e){switch(e.tag){case 31:case 13:case 19:var t=e.stateNode;return t===null&&(t=e.stateNode=new Bp),t;case 22:return e=e.stateNode,t=e._retryCache,t===null&&(t=e._retryCache=new Bp),t;default:throw Error(c(435,e.tag))}}function ss(e,t){var o=Ty(e);t.forEach(function(n){if(!o.has(n)){o.add(n);var i=Iy.bind(null,e,n);n.then(i,i)}})}function it(e,t){var o=t.deletions;if(o!==null)for(var n=0;n<o.length;n++){var i=o[n],s=e,l=t,u=l;e:for(;u!==null;){switch(u.tag){case 27:if(Po(u.type)){Te=u.stateNode,at=!1;break e}break;case 5:Te=u.stateNode,at=!1;break e;case 3:case 4:Te=u.stateNode.containerInfo,at=!0;break e}u=u.return}if(Te===null)throw Error(c(160));Np(s,l,i),Te=null,at=!1,s=i.alternate,s!==null&&(s.return=null),i.return=null}if(t.subtreeFlags&13886)for(t=t.child;t!==null;)Pp(t,e),t=t.sibling}var It=null;function Pp(e,t){var o=e.alternate,n=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:it(t,e),st(e),n&4&&(Eo(3,e,e.return),Pa(3,e),Eo(5,e,e.return));break;case 1:it(t,e),st(e),n&512&&(Ue||o===null||_t(o,o.return)),n&64&&oo&&(e=e.updateQueue,e!==null&&(n=e.callbacks,n!==null&&(o=e.shared.hiddenCallbacks,e.shared.hiddenCallbacks=o===null?n:o.concat(n))));break;case 26:var i=It;if(it(t,e),st(e),n&512&&(Ue||o===null||_t(o,o.return)),n&4){var s=o!==null?o.memoizedState:null;if(n=e.memoizedState,o===null)if(n===null)if(e.stateNode===null){e:{n=e.type,o=e.memoizedProps,i=i.ownerDocument||i;t:switch(n){case"title":s=i.getElementsByTagName("title")[0],(!s||s[da]||s[Ke]||s.namespaceURI==="http://www.w3.org/2000/svg"||s.hasAttribute("itemprop"))&&(s=i.createElement(n),i.head.insertBefore(s,i.querySelector("head > title"))),Je(s,n,o),s[Ke]=e,We(s),n=s;break e;case"link":var l=Ph("link","href",i).get(n+(o.href||""));if(l){for(var u=0;u<l.length;u++)if(s=l[u],s.getAttribute("href")===(o.href==null||o.href===""?null:o.href)&&s.getAttribute("rel")===(o.rel==null?null:o.rel)&&s.getAttribute("title")===(o.title==null?null:o.title)&&s.getAttribute("crossorigin")===(o.crossOrigin==null?null:o.crossOrigin)){l.splice(u,1);break t}}s=i.createElement(n),Je(s,n,o),i.head.appendChild(s);break;case"meta":if(l=Ph("meta","content",i).get(n+(o.content||""))){for(u=0;u<l.length;u++)if(s=l[u],s.getAttribute("content")===(o.content==null?null:""+o.content)&&s.getAttribute("name")===(o.name==null?null:o.name)&&s.getAttribute("property")===(o.property==null?null:o.property)&&s.getAttribute("http-equiv")===(o.httpEquiv==null?null:o.httpEquiv)&&s.getAttribute("charset")===(o.charSet==null?null:o.charSet)){l.splice(u,1);break t}}s=i.createElement(n),Je(s,n,o),i.head.appendChild(s);break;default:throw Error(c(468,n))}s[Ke]=e,We(s),n=s}e.stateNode=n}else Uh(i,e.type,e.stateNode);else e.stateNode=Dh(i,n,e.memoizedProps);else s!==n?(s===null?o.stateNode!==null&&(o=o.stateNode,o.parentNode.removeChild(o)):s.count--,n===null?Uh(i,e.type,e.stateNode):Dh(i,n,e.memoizedProps)):n===null&&e.stateNode!==null&&Nl(e,e.memoizedProps,o.memoizedProps)}break;case 27:it(t,e),st(e),n&512&&(Ue||o===null||_t(o,o.return)),o!==null&&n&4&&Nl(e,e.memoizedProps,o.memoizedProps);break;case 5:if(it(t,e),st(e),n&512&&(Ue||o===null||_t(o,o.return)),e.flags&32){i=e.stateNode;try{An(i,"")}catch(G){fe(e,e.return,G)}}n&4&&e.stateNode!=null&&(i=e.memoizedProps,Nl(e,i,o!==null?o.memoizedProps:i)),n&1024&&(Pl=!0);break;case 6:if(it(t,e),st(e),n&4){if(e.stateNode===null)throw Error(c(162));n=e.memoizedProps,o=e.stateNode;try{o.nodeValue=n}catch(G){fe(e,e.return,G)}}break;case 3:if(Ss=null,i=It,It=ws(t.containerInfo),it(t,e),It=i,st(e),n&4&&o!==null&&o.memoizedState.isDehydrated)try{ta(t.containerInfo)}catch(G){fe(e,e.return,G)}Pl&&(Pl=!1,Up(e));break;case 4:n=It,It=ws(e.stateNode.containerInfo),it(t,e),st(e),It=n;break;case 12:it(t,e),st(e);break;case 31:it(t,e),st(e),n&4&&(n=e.updateQueue,n!==null&&(e.updateQueue=null,ss(e,n)));break;case 13:it(t,e),st(e),e.child.flags&8192&&e.memoizedState!==null!=(o!==null&&o.memoizedState!==null)&&(ls=ut()),n&4&&(n=e.updateQueue,n!==null&&(e.updateQueue=null,ss(e,n)));break;case 22:i=e.memoizedState!==null;var p=o!==null&&o.memoizedState!==null,b=oo,O=Ue;if(oo=b||i,Ue=O||p,it(t,e),Ue=O,oo=b,st(e),n&8192)e:for(t=e.stateNode,t._visibility=i?t._visibility&-2:t._visibility|1,i&&(o===null||p||oo||Ue||ln(e)),o=null,t=e;;){if(t.tag===5||t.tag===26){if(o===null){p=o=t;try{if(s=p.stateNode,i)l=s.style,typeof l.setProperty=="function"?l.setProperty("display","none","important"):l.display="none";else{u=p.stateNode;var M=p.memoizedProps.style,k=M!=null&&M.hasOwnProperty("display")?M.display:null;u.style.display=k==null||typeof k=="boolean"?"":(""+k).trim()}}catch(G){fe(p,p.return,G)}}}else if(t.tag===6){if(o===null){p=t;try{p.stateNode.nodeValue=i?"":p.memoizedProps}catch(G){fe(p,p.return,G)}}}else if(t.tag===18){if(o===null){p=t;try{var S=p.stateNode;i?Oh(S,!0):Oh(p.stateNode,!1)}catch(G){fe(p,p.return,G)}}}else if((t.tag!==22&&t.tag!==23||t.memoizedState===null||t===e)&&t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break e;for(;t.sibling===null;){if(t.return===null||t.return===e)break e;o===t&&(o=null),t=t.return}o===t&&(o=null),t.sibling.return=t.return,t=t.sibling}n&4&&(n=e.updateQueue,n!==null&&(o=n.retryQueue,o!==null&&(n.retryQueue=null,ss(e,o))));break;case 19:it(t,e),st(e),n&4&&(n=e.updateQueue,n!==null&&(e.updateQueue=null,ss(e,n)));break;case 30:break;case 21:break;default:it(t,e),st(e)}}function st(e){var t=e.flags;if(t&2){try{for(var o,n=e.return;n!==null;){if(Mp(n)){o=n;break}n=n.return}if(o==null)throw Error(c(160));switch(o.tag){case 27:var i=o.stateNode,s=Il(e);is(e,s,i);break;case 5:var l=o.stateNode;o.flags&32&&(An(l,""),o.flags&=-33);var u=Il(e);is(e,u,l);break;case 3:case 4:var p=o.stateNode.containerInfo,b=Il(e);Dl(e,b,p);break;default:throw Error(c(161))}}catch(O){fe(e,e.return,O)}e.flags&=-3}t&4096&&(e.flags&=-4097)}function Up(e){if(e.subtreeFlags&1024)for(e=e.child;e!==null;){var t=e;Up(t),t.tag===5&&t.flags&1024&&t.stateNode.reset(),e=e.sibling}}function ao(e,t){if(t.subtreeFlags&8772)for(t=t.child;t!==null;)Rp(e,t.alternate,t),t=t.sibling}function ln(e){for(e=e.child;e!==null;){var t=e;switch(t.tag){case 0:case 11:case 14:case 15:Eo(4,t,t.return),ln(t);break;case 1:_t(t,t.return);var o=t.stateNode;typeof o.componentWillUnmount=="function"&&Op(t,t.return,o),ln(t);break;case 27:ja(t.stateNode);case 26:case 5:_t(t,t.return),ln(t);break;case 22:t.memoizedState===null&&ln(t);break;case 30:ln(t);break;default:ln(t)}e=e.sibling}}function io(e,t,o){for(o=o&&(t.subtreeFlags&8772)!==0,t=t.child;t!==null;){var n=t.alternate,i=e,s=t,l=s.flags;switch(s.tag){case 0:case 11:case 15:io(i,s,o),Pa(4,s);break;case 1:if(io(i,s,o),n=s,i=n.stateNode,typeof i.componentDidMount=="function")try{i.componentDidMount()}catch(b){fe(n,n.return,b)}if(n=s,i=n.updateQueue,i!==null){var u=n.stateNode;try{var p=i.shared.hiddenCallbacks;if(p!==null)for(i.shared.hiddenCallbacks=null,i=0;i<p.length;i++)mu(p[i],u)}catch(b){fe(n,n.return,b)}}o&&l&64&&Tp(s),Ua(s,s.return);break;case 27:Ep(s);case 26:case 5:io(i,s,o),o&&n===null&&l&4&&xp(s),Ua(s,s.return);break;case 12:io(i,s,o);break;case 31:io(i,s,o),o&&l&4&&Ip(i,s);break;case 13:io(i,s,o),o&&l&4&&Dp(i,s);break;case 22:s.memoizedState===null&&io(i,s,o),Ua(s,s.return);break;case 30:break;default:io(i,s,o)}t=t.sibling}}function Ul(e,t){var o=null;e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(o=e.memoizedState.cachePool.pool),e=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(e=t.memoizedState.cachePool.pool),e!==o&&(e!=null&&e.refCount++,o!=null&&Ca(o))}function Hl(e,t){e=null,t.alternate!==null&&(e=t.alternate.memoizedState.cache),t=t.memoizedState.cache,t!==e&&(t.refCount++,e!=null&&Ca(e))}function Dt(e,t,o,n){if(t.subtreeFlags&10256)for(t=t.child;t!==null;)Hp(e,t,o,n),t=t.sibling}function Hp(e,t,o,n){var i=t.flags;switch(t.tag){case 0:case 11:case 15:Dt(e,t,o,n),i&2048&&Pa(9,t);break;case 1:Dt(e,t,o,n);break;case 3:Dt(e,t,o,n),i&2048&&(e=null,t.alternate!==null&&(e=t.alternate.memoizedState.cache),t=t.memoizedState.cache,t!==e&&(t.refCount++,e!=null&&Ca(e)));break;case 12:if(i&2048){Dt(e,t,o,n),e=t.stateNode;try{var s=t.memoizedProps,l=s.id,u=s.onPostCommit;typeof u=="function"&&u(l,t.alternate===null?"mount":"update",e.passiveEffectDuration,-0)}catch(p){fe(t,t.return,p)}}else Dt(e,t,o,n);break;case 31:Dt(e,t,o,n);break;case 13:Dt(e,t,o,n);break;case 23:break;case 22:s=t.stateNode,l=t.alternate,t.memoizedState!==null?s._visibility&2?Dt(e,t,o,n):Ha(e,t):s._visibility&2?Dt(e,t,o,n):(s._visibility|=2,Wn(e,t,o,n,(t.subtreeFlags&10256)!==0||!1)),i&2048&&Ul(l,t);break;case 24:Dt(e,t,o,n),i&2048&&Hl(t.alternate,t);break;default:Dt(e,t,o,n)}}function Wn(e,t,o,n,i){for(i=i&&((t.subtreeFlags&10256)!==0||!1),t=t.child;t!==null;){var s=e,l=t,u=o,p=n,b=l.flags;switch(l.tag){case 0:case 11:case 15:Wn(s,l,u,p,i),Pa(8,l);break;case 23:break;case 22:var O=l.stateNode;l.memoizedState!==null?O._visibility&2?Wn(s,l,u,p,i):Ha(s,l):(O._visibility|=2,Wn(s,l,u,p,i)),i&&b&2048&&Ul(l.alternate,l);break;case 24:Wn(s,l,u,p,i),i&&b&2048&&Hl(l.alternate,l);break;default:Wn(s,l,u,p,i)}t=t.sibling}}function Ha(e,t){if(t.subtreeFlags&10256)for(t=t.child;t!==null;){var o=e,n=t,i=n.flags;switch(n.tag){case 22:Ha(o,n),i&2048&&Ul(n.alternate,n);break;case 24:Ha(o,n),i&2048&&Hl(n.alternate,n);break;default:Ha(o,n)}t=t.sibling}}var za=8192;function Fn(e,t,o){if(e.subtreeFlags&za)for(e=e.child;e!==null;)zp(e,t,o),e=e.sibling}function zp(e,t,o){switch(e.tag){case 26:Fn(e,t,o),e.flags&za&&e.memoizedState!==null&&uv(o,It,e.memoizedState,e.memoizedProps);break;case 5:Fn(e,t,o);break;case 3:case 4:var n=It;It=ws(e.stateNode.containerInfo),Fn(e,t,o),It=n;break;case 22:e.memoizedState===null&&(n=e.alternate,n!==null&&n.memoizedState!==null?(n=za,za=16777216,Fn(e,t,o),za=n):Fn(e,t,o));break;default:Fn(e,t,o)}}function _p(e){var t=e.alternate;if(t!==null&&(e=t.child,e!==null)){t.child=null;do t=e.sibling,e.sibling=null,e=t;while(e!==null)}}function _a(e){var t=e.deletions;if((e.flags&16)!==0){if(t!==null)for(var o=0;o<t.length;o++){var n=t[o];Fe=n,qp(n,e)}_p(e)}if(e.subtreeFlags&10256)for(e=e.child;e!==null;)Gp(e),e=e.sibling}function Gp(e){switch(e.tag){case 0:case 11:case 15:_a(e),e.flags&2048&&Eo(9,e,e.return);break;case 3:_a(e);break;case 12:_a(e);break;case 22:var t=e.stateNode;e.memoizedState!==null&&t._visibility&2&&(e.return===null||e.return.tag!==13)?(t._visibility&=-3,rs(e)):_a(e);break;default:_a(e)}}function rs(e){var t=e.deletions;if((e.flags&16)!==0){if(t!==null)for(var o=0;o<t.length;o++){var n=t[o];Fe=n,qp(n,e)}_p(e)}for(e=e.child;e!==null;){switch(t=e,t.tag){case 0:case 11:case 15:Eo(8,t,t.return),rs(t);break;case 22:o=t.stateNode,o._visibility&2&&(o._visibility&=-3,rs(t));break;default:rs(t)}e=e.sibling}}function qp(e,t){for(;Fe!==null;){var o=Fe;switch(o.tag){case 0:case 11:case 15:Eo(8,o,t);break;case 23:case 22:if(o.memoizedState!==null&&o.memoizedState.cachePool!==null){var n=o.memoizedState.cachePool.pool;n!=null&&n.refCount++}break;case 24:Ca(o.memoizedState.cache)}if(n=o.child,n!==null)n.return=o,Fe=n;else e:for(o=e;Fe!==null;){n=Fe;var i=n.sibling,s=n.return;if(Lp(n),n===o){Fe=null;break e}if(i!==null){i.return=s,Fe=i;break e}Fe=s}}}var Oy={getCacheForType:function(e){var t=Xe(Ie),o=t.data.get(e);return o===void 0&&(o=e(),t.data.set(e,o)),o},cacheSignal:function(){return Xe(Ie).controller.signal}},xy=typeof WeakMap=="function"?WeakMap:Map,me=0,ke=null,oe=null,ae=0,ge=0,vt=null,Bo=!1,jn=!1,zl=!1,so=0,Ee=0,Ro=0,cn=0,_l=0,bt=0,Vn=0,Ga=null,rt=null,Gl=!1,ls=0,Yp=0,cs=1/0,ds=null,Lo=null,_e=0,No=null,Kn=null,ro=0,ql=0,Yl=null,Wp=null,qa=0,Wl=null;function wt(){return(me&2)!==0&&ae!==0?ae&-ae:A.T!==null?Xl():sd()}function Fp(){if(bt===0)if((ae&536870912)===0||re){var e=vi;vi<<=1,(vi&3932160)===0&&(vi=262144),bt=e}else bt=536870912;return e=ft.current,e!==null&&(e.flags|=32),bt}function lt(e,t,o){(e===ke&&(ge===2||ge===9)||e.cancelPendingCommit!==null)&&(Qn(e,0),Io(e,ae,bt,!1)),ca(e,o),((me&2)===0||e!==ke)&&(e===ke&&((me&2)===0&&(cn|=o),Ee===4&&Io(e,ae,bt,!1)),Gt(e))}function jp(e,t,o){if((me&6)!==0)throw Error(c(327));var n=!o&&(t&127)===0&&(t&e.expiredLanes)===0||la(e,t),i=n?By(e,t):jl(e,t,!0),s=n;do{if(i===0){jn&&!n&&Io(e,t,0,!1);break}else{if(o=e.current.alternate,s&&!My(o)){i=jl(e,t,!1),s=!1;continue}if(i===2){if(s=t,e.errorRecoveryDisabledLanes&s)var l=0;else l=e.pendingLanes&-536870913,l=l!==0?l:l&536870912?536870912:0;if(l!==0){t=l;e:{var u=e;i=Ga;var p=u.current.memoizedState.isDehydrated;if(p&&(Qn(u,l).flags|=256),l=jl(u,l,!1),l!==2){if(zl&&!p){u.errorRecoveryDisabledLanes|=s,cn|=s,i=4;break e}s=rt,rt=i,s!==null&&(rt===null?rt=s:rt.push.apply(rt,s))}i=l}if(s=!1,i!==2)continue}}if(i===1){Qn(e,0),Io(e,t,0,!0);break}e:{switch(n=e,s=i,s){case 0:case 1:throw Error(c(345));case 4:if((t&4194048)!==t)break;case 6:Io(n,t,bt,!Bo);break e;case 2:rt=null;break;case 3:case 5:break;default:throw Error(c(329))}if((t&62914560)===t&&(i=ls+300-ut(),10<i)){if(Io(n,t,bt,!Bo),wi(n,0,!0)!==0)break e;ro=t,n.timeoutHandle=Ch(Vp.bind(null,n,o,rt,ds,Gl,t,bt,cn,Vn,Bo,s,"Throttled",-0,0),i);break e}Vp(n,o,rt,ds,Gl,t,bt,cn,Vn,Bo,s,null,-0,0)}}break}while(!0);Gt(e)}function Vp(e,t,o,n,i,s,l,u,p,b,O,M,k,S){if(e.timeoutHandle=-1,M=t.subtreeFlags,M&8192||(M&16785408)===16785408){M={stylesheets:null,count:0,imgCount:0,imgBytes:0,suspenseyImages:[],waitingForImages:!0,waitingForViewTransition:!1,unsuspend:jt},zp(t,s,M);var G=(s&62914560)===s?ls-ut():(s&4194048)===s?Yp-ut():0;if(G=pv(M,G),G!==null){ro=s,e.cancelPendingCommit=G(th.bind(null,e,t,s,o,n,i,l,u,p,O,M,null,k,S)),Io(e,s,l,!b);return}}th(e,t,s,o,n,i,l,u,p)}function My(e){for(var t=e;;){var o=t.tag;if((o===0||o===11||o===15)&&t.flags&16384&&(o=t.updateQueue,o!==null&&(o=o.stores,o!==null)))for(var n=0;n<o.length;n++){var i=o[n],s=i.getSnapshot;i=i.value;try{if(!mt(s(),i))return!1}catch{return!1}}if(o=t.child,t.subtreeFlags&16384&&o!==null)o.return=t,t=o;else{if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function Io(e,t,o,n){t&=~_l,t&=~cn,e.suspendedLanes|=t,e.pingedLanes&=~t,n&&(e.warmLanes|=t),n=e.expirationTimes;for(var i=t;0<i;){var s=31-ht(i),l=1<<s;n[s]=-1,i&=~l}o!==0&&nd(e,o,t)}function us(){return(me&6)===0?(Ya(0),!1):!0}function Fl(){if(oe!==null){if(ge===0)var e=oe.return;else e=oe,Xt=$o=null,rl(e),zn=null,Ta=0,e=oe;for(;e!==null;)Ap(e.alternate,e),e=e.return;oe=null}}function Qn(e,t){var o=e.timeoutHandle;o!==-1&&(e.timeoutHandle=-1,Ky(o)),o=e.cancelPendingCommit,o!==null&&(e.cancelPendingCommit=null,o()),ro=0,Fl(),ke=e,oe=o=Kt(e.current,null),ae=t,ge=0,vt=null,Bo=!1,jn=la(e,t),zl=!1,Vn=bt=_l=cn=Ro=Ee=0,rt=Ga=null,Gl=!1,(t&8)!==0&&(t|=t&32);var n=e.entangledLanes;if(n!==0)for(e=e.entanglements,n&=t;0<n;){var i=31-ht(n),s=1<<i;t|=e[i],n&=~s}return so=t,Li(),o}function Kp(e,t){Z=null,A.H=Na,t===Hn||t===_i?(t=du(),ge=3):t===Qr?(t=du(),ge=4):ge=t===Cl?8:t!==null&&typeof t=="object"&&typeof t.then=="function"?6:1,vt=t,oe===null&&(Ee=1,es(e,Tt(t,e.current)))}function Qp(){var e=ft.current;return e===null?!0:(ae&4194048)===ae?Et===null:(ae&62914560)===ae||(ae&536870912)!==0?e===Et:!1}function Xp(){var e=A.H;return A.H=Na,e===null?Na:e}function Zp(){var e=A.A;return A.A=Oy,e}function ps(){Ee=4,Bo||(ae&4194048)!==ae&&ft.current!==null||(jn=!0),(Ro&134217727)===0&&(cn&134217727)===0||ke===null||Io(ke,ae,bt,!1)}function jl(e,t,o){var n=me;me|=2;var i=Xp(),s=Zp();(ke!==e||ae!==t)&&(ds=null,Qn(e,t)),t=!1;var l=Ee;e:do try{if(ge!==0&&oe!==null){var u=oe,p=vt;switch(ge){case 8:Fl(),l=6;break e;case 3:case 2:case 9:case 6:ft.current===null&&(t=!0);var b=ge;if(ge=0,vt=null,Xn(e,u,p,b),o&&jn){l=0;break e}break;default:b=ge,ge=0,vt=null,Xn(e,u,p,b)}}Ey(),l=Ee;break}catch(O){Kp(e,O)}while(!0);return t&&e.shellSuspendCounter++,Xt=$o=null,me=n,A.H=i,A.A=s,oe===null&&(ke=null,ae=0,Li()),l}function Ey(){for(;oe!==null;)Jp(oe)}function By(e,t){var o=me;me|=2;var n=Xp(),i=Zp();ke!==e||ae!==t?(ds=null,cs=ut()+500,Qn(e,t)):jn=la(e,t);e:do try{if(ge!==0&&oe!==null){t=oe;var s=vt;t:switch(ge){case 1:ge=0,vt=null,Xn(e,t,s,1);break;case 2:case 9:if(lu(s)){ge=0,vt=null,$p(t);break}t=function(){ge!==2&&ge!==9||ke!==e||(ge=7),Gt(e)},s.then(t,t);break e;case 3:ge=7;break e;case 4:ge=5;break e;case 7:lu(s)?(ge=0,vt=null,$p(t)):(ge=0,vt=null,Xn(e,t,s,7));break;case 5:var l=null;switch(oe.tag){case 26:l=oe.memoizedState;case 5:case 27:var u=oe;if(l?Hh(l):u.stateNode.complete){ge=0,vt=null;var p=u.sibling;if(p!==null)oe=p;else{var b=u.return;b!==null?(oe=b,hs(b)):oe=null}break t}}ge=0,vt=null,Xn(e,t,s,5);break;case 6:ge=0,vt=null,Xn(e,t,s,6);break;case 8:Fl(),Ee=6;break e;default:throw Error(c(462))}}Ry();break}catch(O){Kp(e,O)}while(!0);return Xt=$o=null,A.H=n,A.A=i,me=o,oe!==null?0:(ke=null,ae=0,Li(),Ee)}function Ry(){for(;oe!==null&&!$g();)Jp(oe)}function Jp(e){var t=Sp(e.alternate,e,so);e.memoizedProps=e.pendingProps,t===null?hs(e):oe=t}function $p(e){var t=e,o=t.alternate;switch(t.tag){case 15:case 0:t=fp(o,t,t.pendingProps,t.type,void 0,ae);break;case 11:t=fp(o,t,t.pendingProps,t.type.render,t.ref,ae);break;case 5:rl(t);default:Ap(o,t),t=oe=Zd(t,so),t=Sp(o,t,so)}e.memoizedProps=e.pendingProps,t===null?hs(e):oe=t}function Xn(e,t,o,n){Xt=$o=null,rl(t),zn=null,Ta=0;var i=t.return;try{if(by(e,i,t,o,ae)){Ee=1,es(e,Tt(o,e.current)),oe=null;return}}catch(s){if(i!==null)throw oe=i,s;Ee=1,es(e,Tt(o,e.current)),oe=null;return}t.flags&32768?(re||n===1?e=!0:jn||(ae&536870912)!==0?e=!1:(Bo=e=!0,(n===2||n===9||n===3||n===6)&&(n=ft.current,n!==null&&n.tag===13&&(n.flags|=16384))),eh(t,e)):hs(t)}function hs(e){var t=e;do{if((t.flags&32768)!==0){eh(t,Bo);return}e=t.return;var o=Sy(t.alternate,t,so);if(o!==null){oe=o;return}if(t=t.sibling,t!==null){oe=t;return}oe=t=e}while(t!==null);Ee===0&&(Ee=5)}function eh(e,t){do{var o=Cy(e.alternate,e);if(o!==null){o.flags&=32767,oe=o;return}if(o=e.return,o!==null&&(o.flags|=32768,o.subtreeFlags=0,o.deletions=null),!t&&(e=e.sibling,e!==null)){oe=e;return}oe=e=o}while(e!==null);Ee=6,oe=null}function th(e,t,o,n,i,s,l,u,p){e.cancelPendingCommit=null;do ms();while(_e!==0);if((me&6)!==0)throw Error(c(327));if(t!==null){if(t===e.current)throw Error(c(177));if(s=t.lanes|t.childLanes,s|=Ir,df(e,o,s,l,u,p),e===ke&&(oe=ke=null,ae=0),Kn=t,No=e,ro=o,ql=s,Yl=i,Wp=n,(t.subtreeFlags&10256)!==0||(t.flags&10256)!==0?(e.callbackNode=null,e.callbackPriority=0,Dy(fi,function(){return sh(),null})):(e.callbackNode=null,e.callbackPriority=0),n=(t.flags&13878)!==0,(t.subtreeFlags&13878)!==0||n){n=A.T,A.T=null,i=N.p,N.p=2,l=me,me|=4;try{Ay(e,t,o)}finally{me=l,N.p=i,A.T=n}}_e=1,oh(),nh(),ah()}}function oh(){if(_e===1){_e=0;var e=No,t=Kn,o=(t.flags&13878)!==0;if((t.subtreeFlags&13878)!==0||o){o=A.T,A.T=null;var n=N.p;N.p=2;var i=me;me|=4;try{Pp(t,e);var s=ac,l=qd(e.containerInfo),u=s.focusedElem,p=s.selectionRange;if(l!==u&&u&&u.ownerDocument&&Gd(u.ownerDocument.documentElement,u)){if(p!==null&&Er(u)){var b=p.start,O=p.end;if(O===void 0&&(O=b),"selectionStart"in u)u.selectionStart=b,u.selectionEnd=Math.min(O,u.value.length);else{var M=u.ownerDocument||document,k=M&&M.defaultView||window;if(k.getSelection){var S=k.getSelection(),G=u.textContent.length,K=Math.min(p.start,G),we=p.end===void 0?K:Math.min(p.end,G);!S.extend&&K>we&&(l=we,we=K,K=l);var f=_d(u,K),m=_d(u,we);if(f&&m&&(S.rangeCount!==1||S.anchorNode!==f.node||S.anchorOffset!==f.offset||S.focusNode!==m.node||S.focusOffset!==m.offset)){var v=M.createRange();v.setStart(f.node,f.offset),S.removeAllRanges(),K>we?(S.addRange(v),S.extend(m.node,m.offset)):(v.setEnd(m.node,m.offset),S.addRange(v))}}}}for(M=[],S=u;S=S.parentNode;)S.nodeType===1&&M.push({element:S,left:S.scrollLeft,top:S.scrollTop});for(typeof u.focus=="function"&&u.focus(),u=0;u<M.length;u++){var x=M[u];x.element.scrollLeft=x.left,x.element.scrollTop=x.top}}Os=!!nc,ac=nc=null}finally{me=i,N.p=n,A.T=o}}e.current=t,_e=2}}function nh(){if(_e===2){_e=0;var e=No,t=Kn,o=(t.flags&8772)!==0;if((t.subtreeFlags&8772)!==0||o){o=A.T,A.T=null;var n=N.p;N.p=2;var i=me;me|=4;try{Rp(e,t.alternate,t)}finally{me=i,N.p=n,A.T=o}}_e=3}}function ah(){if(_e===4||_e===3){_e=0,ef();var e=No,t=Kn,o=ro,n=Wp;(t.subtreeFlags&10256)!==0||(t.flags&10256)!==0?_e=5:(_e=0,Kn=No=null,ih(e,e.pendingLanes));var i=e.pendingLanes;if(i===0&&(Lo=null),dr(o),t=t.stateNode,pt&&typeof pt.onCommitFiberRoot=="function")try{pt.onCommitFiberRoot(ra,t,void 0,(t.current.flags&128)===128)}catch{}if(n!==null){t=A.T,i=N.p,N.p=2,A.T=null;try{for(var s=e.onRecoverableError,l=0;l<n.length;l++){var u=n[l];s(u.value,{componentStack:u.stack})}}finally{A.T=t,N.p=i}}(ro&3)!==0&&ms(),Gt(e),i=e.pendingLanes,(o&261930)!==0&&(i&42)!==0?e===Wl?qa++:(qa=0,Wl=e):qa=0,Ya(0)}}function ih(e,t){(e.pooledCacheLanes&=t)===0&&(t=e.pooledCache,t!=null&&(e.pooledCache=null,Ca(t)))}function ms(){return oh(),nh(),ah(),sh()}function sh(){if(_e!==5)return!1;var e=No,t=ql;ql=0;var o=dr(ro),n=A.T,i=N.p;try{N.p=32>o?32:o,A.T=null,o=Yl,Yl=null;var s=No,l=ro;if(_e=0,Kn=No=null,ro=0,(me&6)!==0)throw Error(c(331));var u=me;if(me|=4,Gp(s.current),Hp(s,s.current,l,o),me=u,Ya(0,!1),pt&&typeof pt.onPostCommitFiberRoot=="function")try{pt.onPostCommitFiberRoot(ra,s)}catch{}return!0}finally{N.p=i,A.T=n,ih(e,t)}}function rh(e,t,o){t=Tt(o,t),t=Sl(e.stateNode,t,2),e=Oo(e,t,2),e!==null&&(ca(e,2),Gt(e))}function fe(e,t,o){if(e.tag===3)rh(e,e,o);else for(;t!==null;){if(t.tag===3){rh(t,e,o);break}else if(t.tag===1){var n=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof n.componentDidCatch=="function"&&(Lo===null||!Lo.has(n))){e=Tt(o,e),o=lp(2),n=Oo(t,o,2),n!==null&&(cp(o,n,t,e),ca(n,2),Gt(n));break}}t=t.return}}function Vl(e,t,o){var n=e.pingCache;if(n===null){n=e.pingCache=new xy;var i=new Set;n.set(t,i)}else i=n.get(t),i===void 0&&(i=new Set,n.set(t,i));i.has(o)||(zl=!0,i.add(o),e=Ly.bind(null,e,t,o),t.then(e,e))}function Ly(e,t,o){var n=e.pingCache;n!==null&&n.delete(t),e.pingedLanes|=e.suspendedLanes&o,e.warmLanes&=~o,ke===e&&(ae&o)===o&&(Ee===4||Ee===3&&(ae&62914560)===ae&&300>ut()-ls?(me&2)===0&&Qn(e,0):_l|=o,Vn===ae&&(Vn=0)),Gt(e)}function lh(e,t){t===0&&(t=od()),e=Xo(e,t),e!==null&&(ca(e,t),Gt(e))}function Ny(e){var t=e.memoizedState,o=0;t!==null&&(o=t.retryLane),lh(e,o)}function Iy(e,t){var o=0;switch(e.tag){case 31:case 13:var n=e.stateNode,i=e.memoizedState;i!==null&&(o=i.retryLane);break;case 19:n=e.stateNode;break;case 22:n=e.stateNode._retryCache;break;default:throw Error(c(314))}n!==null&&n.delete(t),lh(e,o)}function Dy(e,t){return sr(e,t)}var gs=null,Zn=null,Kl=!1,fs=!1,Ql=!1,Do=0;function Gt(e){e!==Zn&&e.next===null&&(Zn===null?gs=Zn=e:Zn=Zn.next=e),fs=!0,Kl||(Kl=!0,Uy())}function Ya(e,t){if(!Ql&&fs){Ql=!0;do for(var o=!1,n=gs;n!==null;){if(e!==0){var i=n.pendingLanes;if(i===0)var s=0;else{var l=n.suspendedLanes,u=n.pingedLanes;s=(1<<31-ht(42|e)+1)-1,s&=i&~(l&~u),s=s&201326741?s&201326741|1:s?s|2:0}s!==0&&(o=!0,ph(n,s))}else s=ae,s=wi(n,n===ke?s:0,n.cancelPendingCommit!==null||n.timeoutHandle!==-1),(s&3)===0||la(n,s)||(o=!0,ph(n,s));n=n.next}while(o);Ql=!1}}function Py(){ch()}function ch(){fs=Kl=!1;var e=0;Do!==0&&Vy()&&(e=Do);for(var t=ut(),o=null,n=gs;n!==null;){var i=n.next,s=dh(n,t);s===0?(n.next=null,o===null?gs=i:o.next=i,i===null&&(Zn=o)):(o=n,(e!==0||(s&3)!==0)&&(fs=!0)),n=i}_e!==0&&_e!==5||Ya(e),Do!==0&&(Do=0)}function dh(e,t){for(var o=e.suspendedLanes,n=e.pingedLanes,i=e.expirationTimes,s=e.pendingLanes&-62914561;0<s;){var l=31-ht(s),u=1<<l,p=i[l];p===-1?((u&o)===0||(u&n)!==0)&&(i[l]=cf(u,t)):p<=t&&(e.expiredLanes|=u),s&=~u}if(t=ke,o=ae,o=wi(e,e===t?o:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),n=e.callbackNode,o===0||e===t&&(ge===2||ge===9)||e.cancelPendingCommit!==null)return n!==null&&n!==null&&rr(n),e.callbackNode=null,e.callbackPriority=0;if((o&3)===0||la(e,o)){if(t=o&-o,t===e.callbackPriority)return t;switch(n!==null&&rr(n),dr(o)){case 2:case 8:o=ed;break;case 32:o=fi;break;case 268435456:o=td;break;default:o=fi}return n=uh.bind(null,e),o=sr(o,n),e.callbackPriority=t,e.callbackNode=o,t}return n!==null&&n!==null&&rr(n),e.callbackPriority=2,e.callbackNode=null,2}function uh(e,t){if(_e!==0&&_e!==5)return e.callbackNode=null,e.callbackPriority=0,null;var o=e.callbackNode;if(ms()&&e.callbackNode!==o)return null;var n=ae;return n=wi(e,e===ke?n:0,e.cancelPendingCommit!==null||e.timeoutHandle!==-1),n===0?null:(jp(e,n,t),dh(e,ut()),e.callbackNode!=null&&e.callbackNode===o?uh.bind(null,e):null)}function ph(e,t){if(ms())return null;jp(e,t,!0)}function Uy(){Qy(function(){(me&6)!==0?sr($c,Py):ch()})}function Xl(){if(Do===0){var e=Pn;e===0&&(e=yi,yi<<=1,(yi&261888)===0&&(yi=256)),Do=e}return Do}function hh(e){return e==null||typeof e=="symbol"||typeof e=="boolean"?null:typeof e=="function"?e:Ai(""+e)}function mh(e,t){var o=t.ownerDocument.createElement("input");return o.name=t.name,o.value=t.value,e.id&&o.setAttribute("form",e.id),t.parentNode.insertBefore(o,t),e=new FormData(e),o.parentNode.removeChild(o),e}function Hy(e,t,o,n,i){if(t==="submit"&&o&&o.stateNode===i){var s=hh((i[ot]||null).action),l=n.submitter;l&&(t=(t=l[ot]||null)?hh(t.formAction):l.getAttribute("formAction"),t!==null&&(s=t,l=null));var u=new Mi("action","action",null,n,i);e.push({event:u,listeners:[{instance:null,listener:function(){if(n.defaultPrevented){if(Do!==0){var p=l?mh(i,l):new FormData(i);fl(o,{pending:!0,data:p,method:i.method,action:s},null,p)}}else typeof s=="function"&&(u.preventDefault(),p=l?mh(i,l):new FormData(i),fl(o,{pending:!0,data:p,method:i.method,action:s},s,p))},currentTarget:i}]})}}for(var Zl=0;Zl<Nr.length;Zl++){var Jl=Nr[Zl],zy=Jl.toLowerCase(),_y=Jl[0].toUpperCase()+Jl.slice(1);Nt(zy,"on"+_y)}Nt(Fd,"onAnimationEnd"),Nt(jd,"onAnimationIteration"),Nt(Vd,"onAnimationStart"),Nt("dblclick","onDoubleClick"),Nt("focusin","onFocus"),Nt("focusout","onBlur"),Nt(oy,"onTransitionRun"),Nt(ny,"onTransitionStart"),Nt(ay,"onTransitionCancel"),Nt(Kd,"onTransitionEnd"),Sn("onMouseEnter",["mouseout","mouseover"]),Sn("onMouseLeave",["mouseout","mouseover"]),Sn("onPointerEnter",["pointerout","pointerover"]),Sn("onPointerLeave",["pointerout","pointerover"]),jo("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),jo("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),jo("onBeforeInput",["compositionend","keypress","textInput","paste"]),jo("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),jo("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),jo("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Wa="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Gy=new Set("beforetoggle cancel close invalid load scroll scrollend toggle".split(" ").concat(Wa));function gh(e,t){t=(t&4)!==0;for(var o=0;o<e.length;o++){var n=e[o],i=n.event;n=n.listeners;e:{var s=void 0;if(t)for(var l=n.length-1;0<=l;l--){var u=n[l],p=u.instance,b=u.currentTarget;if(u=u.listener,p!==s&&i.isPropagationStopped())break e;s=u,i.currentTarget=b;try{s(i)}catch(O){Ri(O)}i.currentTarget=null,s=p}else for(l=0;l<n.length;l++){if(u=n[l],p=u.instance,b=u.currentTarget,u=u.listener,p!==s&&i.isPropagationStopped())break e;s=u,i.currentTarget=b;try{s(i)}catch(O){Ri(O)}i.currentTarget=null,s=p}}}}function ne(e,t){var o=t[ur];o===void 0&&(o=t[ur]=new Set);var n=e+"__bubble";o.has(n)||(fh(t,e,2,!1),o.add(n))}function $l(e,t,o){var n=0;t&&(n|=4),fh(o,e,n,t)}var ys="_reactListening"+Math.random().toString(36).slice(2);function ec(e){if(!e[ys]){e[ys]=!0,cd.forEach(function(o){o!=="selectionchange"&&(Gy.has(o)||$l(o,!1,e),$l(o,!0,e))});var t=e.nodeType===9?e:e.ownerDocument;t===null||t[ys]||(t[ys]=!0,$l("selectionchange",!1,t))}}function fh(e,t,o,n){switch(Fh(t)){case 2:var i=gv;break;case 8:i=fv;break;default:i=gc}o=i.bind(null,t,o,e),i=void 0,!wr||t!=="touchstart"&&t!=="touchmove"&&t!=="wheel"||(i=!0),n?i!==void 0?e.addEventListener(t,o,{capture:!0,passive:i}):e.addEventListener(t,o,!0):i!==void 0?e.addEventListener(t,o,{passive:i}):e.addEventListener(t,o,!1)}function tc(e,t,o,n,i){var s=n;if((t&1)===0&&(t&2)===0&&n!==null)e:for(;;){if(n===null)return;var l=n.tag;if(l===3||l===4){var u=n.stateNode.containerInfo;if(u===i)break;if(l===4)for(l=n.return;l!==null;){var p=l.tag;if((p===3||p===4)&&l.stateNode.containerInfo===i)return;l=l.return}for(;u!==null;){if(l=bn(u),l===null)return;if(p=l.tag,p===5||p===6||p===26||p===27){n=s=l;continue e}u=u.parentNode}}n=n.return}kd(function(){var b=s,O=vr(o),M=[];e:{var k=Qd.get(e);if(k!==void 0){var S=Mi,G=e;switch(e){case"keypress":if(Oi(o)===0)break e;case"keydown":case"keyup":S=If;break;case"focusin":G="focus",S=Ar;break;case"focusout":G="blur",S=Ar;break;case"beforeblur":case"afterblur":S=Ar;break;case"click":if(o.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":S=Ad;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":S=Sf;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":S=Uf;break;case Fd:case jd:case Vd:S=Tf;break;case Kd:S=zf;break;case"scroll":case"scrollend":S=wf;break;case"wheel":S=Gf;break;case"copy":case"cut":case"paste":S=xf;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":S=Od;break;case"toggle":case"beforetoggle":S=Yf}var K=(t&4)!==0,we=!K&&(e==="scroll"||e==="scrollend"),f=K?k!==null?k+"Capture":null:k;K=[];for(var m=b,v;m!==null;){var x=m;if(v=x.stateNode,x=x.tag,x!==5&&x!==26&&x!==27||v===null||f===null||(x=pa(m,f),x!=null&&K.push(Fa(m,x,v))),we)break;m=m.return}0<K.length&&(k=new S(k,G,null,o,O),M.push({event:k,listeners:K}))}}if((t&7)===0){e:{if(k=e==="mouseover"||e==="pointerover",S=e==="mouseout"||e==="pointerout",k&&o!==yr&&(G=o.relatedTarget||o.fromElement)&&(bn(G)||G[vn]))break e;if((S||k)&&(k=O.window===O?O:(k=O.ownerDocument)?k.defaultView||k.parentWindow:window,S?(G=o.relatedTarget||o.toElement,S=b,G=G?bn(G):null,G!==null&&(we=w(G),K=G.tag,G!==we||K!==5&&K!==27&&K!==6)&&(G=null)):(S=null,G=b),S!==G)){if(K=Ad,x="onMouseLeave",f="onMouseEnter",m="mouse",(e==="pointerout"||e==="pointerover")&&(K=Od,x="onPointerLeave",f="onPointerEnter",m="pointer"),we=S==null?k:ua(S),v=G==null?k:ua(G),k=new K(x,m+"leave",S,o,O),k.target=we,k.relatedTarget=v,x=null,bn(O)===b&&(K=new K(f,m+"enter",G,o,O),K.target=v,K.relatedTarget=we,x=K),we=x,S&&G)t:{for(K=qy,f=S,m=G,v=0,x=f;x;x=K(x))v++;x=0;for(var F=m;F;F=K(F))x++;for(;0<v-x;)f=K(f),v--;for(;0<x-v;)m=K(m),x--;for(;v--;){if(f===m||m!==null&&f===m.alternate){K=f;break t}f=K(f),m=K(m)}K=null}else K=null;S!==null&&yh(M,k,S,K,!1),G!==null&&we!==null&&yh(M,we,G,K,!0)}}e:{if(k=b?ua(b):window,S=k.nodeName&&k.nodeName.toLowerCase(),S==="select"||S==="input"&&k.type==="file")var ue=Id;else if(Ld(k))if(Dd)ue=$f;else{ue=Zf;var q=Xf}else S=k.nodeName,!S||S.toLowerCase()!=="input"||k.type!=="checkbox"&&k.type!=="radio"?b&&fr(b.elementType)&&(ue=Id):ue=Jf;if(ue&&(ue=ue(e,b))){Nd(M,ue,o,O);break e}q&&q(e,k,b),e==="focusout"&&b&&k.type==="number"&&b.memoizedProps.value!=null&&gr(k,"number",k.value)}switch(q=b?ua(b):window,e){case"focusin":(Ld(q)||q.contentEditable==="true")&&(Mn=q,Br=b,wa=null);break;case"focusout":wa=Br=Mn=null;break;case"mousedown":Rr=!0;break;case"contextmenu":case"mouseup":case"dragend":Rr=!1,Yd(M,o,O);break;case"selectionchange":if(ty)break;case"keydown":case"keyup":Yd(M,o,O)}var J;if(Or)e:{switch(e){case"compositionstart":var ie="onCompositionStart";break e;case"compositionend":ie="onCompositionEnd";break e;case"compositionupdate":ie="onCompositionUpdate";break e}ie=void 0}else xn?Bd(e,o)&&(ie="onCompositionEnd"):e==="keydown"&&o.keyCode===229&&(ie="onCompositionStart");ie&&(xd&&o.locale!=="ko"&&(xn||ie!=="onCompositionStart"?ie==="onCompositionEnd"&&xn&&(J=Sd()):(bo=O,kr="value"in bo?bo.value:bo.textContent,xn=!0)),q=vs(b,ie),0<q.length&&(ie=new Td(ie,e,null,o,O),M.push({event:ie,listeners:q}),J?ie.data=J:(J=Rd(o),J!==null&&(ie.data=J)))),(J=Ff?jf(e,o):Vf(e,o))&&(ie=vs(b,"onBeforeInput"),0<ie.length&&(q=new Td("onBeforeInput","beforeinput",null,o,O),M.push({event:q,listeners:ie}),q.data=J)),Hy(M,e,b,o,O)}gh(M,t)})}function Fa(e,t,o){return{instance:e,listener:t,currentTarget:o}}function vs(e,t){for(var o=t+"Capture",n=[];e!==null;){var i=e,s=i.stateNode;if(i=i.tag,i!==5&&i!==26&&i!==27||s===null||(i=pa(e,o),i!=null&&n.unshift(Fa(e,i,s)),i=pa(e,t),i!=null&&n.push(Fa(e,i,s))),e.tag===3)return n;e=e.return}return[]}function qy(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5&&e.tag!==27);return e||null}function yh(e,t,o,n,i){for(var s=t._reactName,l=[];o!==null&&o!==n;){var u=o,p=u.alternate,b=u.stateNode;if(u=u.tag,p!==null&&p===n)break;u!==5&&u!==26&&u!==27||b===null||(p=b,i?(b=pa(o,s),b!=null&&l.unshift(Fa(o,b,p))):i||(b=pa(o,s),b!=null&&l.push(Fa(o,b,p)))),o=o.return}l.length!==0&&e.push({event:t,listeners:l})}var Yy=/\r\n?/g,Wy=/\u0000|\uFFFD/g;function vh(e){return(typeof e=="string"?e:""+e).replace(Yy,`
|
|
9
|
-
`).replace(Wy,"")}function bh(e,t){return t=vh(t),vh(e)===t}function be(e,t,o,n,i,s){switch(o){case"children":typeof n=="string"?t==="body"||t==="textarea"&&n===""||An(e,n):(typeof n=="number"||typeof n=="bigint")&&t!=="body"&&An(e,""+n);break;case"className":Si(e,"class",n);break;case"tabIndex":Si(e,"tabindex",n);break;case"dir":case"role":case"viewBox":case"width":case"height":Si(e,o,n);break;case"style":bd(e,n,s);break;case"data":if(t!=="object"){Si(e,"data",n);break}case"src":case"href":if(n===""&&(t!=="a"||o!=="href")){e.removeAttribute(o);break}if(n==null||typeof n=="function"||typeof n=="symbol"||typeof n=="boolean"){e.removeAttribute(o);break}n=Ai(""+n),e.setAttribute(o,n);break;case"action":case"formAction":if(typeof n=="function"){e.setAttribute(o,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}else typeof s=="function"&&(o==="formAction"?(t!=="input"&&be(e,t,"name",i.name,i,null),be(e,t,"formEncType",i.formEncType,i,null),be(e,t,"formMethod",i.formMethod,i,null),be(e,t,"formTarget",i.formTarget,i,null)):(be(e,t,"encType",i.encType,i,null),be(e,t,"method",i.method,i,null),be(e,t,"target",i.target,i,null)));if(n==null||typeof n=="symbol"||typeof n=="boolean"){e.removeAttribute(o);break}n=Ai(""+n),e.setAttribute(o,n);break;case"onClick":n!=null&&(e.onclick=jt);break;case"onScroll":n!=null&&ne("scroll",e);break;case"onScrollEnd":n!=null&&ne("scrollend",e);break;case"dangerouslySetInnerHTML":if(n!=null){if(typeof n!="object"||!("__html"in n))throw Error(c(61));if(o=n.__html,o!=null){if(i.children!=null)throw Error(c(60));e.innerHTML=o}}break;case"multiple":e.multiple=n&&typeof n!="function"&&typeof n!="symbol";break;case"muted":e.muted=n&&typeof n!="function"&&typeof n!="symbol";break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":break;case"autoFocus":break;case"xlinkHref":if(n==null||typeof n=="function"||typeof n=="boolean"||typeof n=="symbol"){e.removeAttribute("xlink:href");break}o=Ai(""+n),e.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",o);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":n!=null&&typeof n!="function"&&typeof n!="symbol"?e.setAttribute(o,""+n):e.removeAttribute(o);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":n&&typeof n!="function"&&typeof n!="symbol"?e.setAttribute(o,""):e.removeAttribute(o);break;case"capture":case"download":n===!0?e.setAttribute(o,""):n!==!1&&n!=null&&typeof n!="function"&&typeof n!="symbol"?e.setAttribute(o,n):e.removeAttribute(o);break;case"cols":case"rows":case"size":case"span":n!=null&&typeof n!="function"&&typeof n!="symbol"&&!isNaN(n)&&1<=n?e.setAttribute(o,n):e.removeAttribute(o);break;case"rowSpan":case"start":n==null||typeof n=="function"||typeof n=="symbol"||isNaN(n)?e.removeAttribute(o):e.setAttribute(o,n);break;case"popover":ne("beforetoggle",e),ne("toggle",e),ki(e,"popover",n);break;case"xlinkActuate":Ft(e,"http://www.w3.org/1999/xlink","xlink:actuate",n);break;case"xlinkArcrole":Ft(e,"http://www.w3.org/1999/xlink","xlink:arcrole",n);break;case"xlinkRole":Ft(e,"http://www.w3.org/1999/xlink","xlink:role",n);break;case"xlinkShow":Ft(e,"http://www.w3.org/1999/xlink","xlink:show",n);break;case"xlinkTitle":Ft(e,"http://www.w3.org/1999/xlink","xlink:title",n);break;case"xlinkType":Ft(e,"http://www.w3.org/1999/xlink","xlink:type",n);break;case"xmlBase":Ft(e,"http://www.w3.org/XML/1998/namespace","xml:base",n);break;case"xmlLang":Ft(e,"http://www.w3.org/XML/1998/namespace","xml:lang",n);break;case"xmlSpace":Ft(e,"http://www.w3.org/XML/1998/namespace","xml:space",n);break;case"is":ki(e,"is",n);break;case"innerText":case"textContent":break;default:(!(2<o.length)||o[0]!=="o"&&o[0]!=="O"||o[1]!=="n"&&o[1]!=="N")&&(o=vf.get(o)||o,ki(e,o,n))}}function oc(e,t,o,n,i,s){switch(o){case"style":bd(e,n,s);break;case"dangerouslySetInnerHTML":if(n!=null){if(typeof n!="object"||!("__html"in n))throw Error(c(61));if(o=n.__html,o!=null){if(i.children!=null)throw Error(c(60));e.innerHTML=o}}break;case"children":typeof n=="string"?An(e,n):(typeof n=="number"||typeof n=="bigint")&&An(e,""+n);break;case"onScroll":n!=null&&ne("scroll",e);break;case"onScrollEnd":n!=null&&ne("scrollend",e);break;case"onClick":n!=null&&(e.onclick=jt);break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"innerHTML":case"ref":break;case"innerText":case"textContent":break;default:if(!dd.hasOwnProperty(o))e:{if(o[0]==="o"&&o[1]==="n"&&(i=o.endsWith("Capture"),t=o.slice(2,i?o.length-7:void 0),s=e[ot]||null,s=s!=null?s[o]:null,typeof s=="function"&&e.removeEventListener(t,s,i),typeof n=="function")){typeof s!="function"&&s!==null&&(o in e?e[o]=null:e.hasAttribute(o)&&e.removeAttribute(o)),e.addEventListener(t,n,i);break e}o in e?e[o]=n:n===!0?e.setAttribute(o,""):ki(e,o,n)}}}function Je(e,t,o){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"img":ne("error",e),ne("load",e);var n=!1,i=!1,s;for(s in o)if(o.hasOwnProperty(s)){var l=o[s];if(l!=null)switch(s){case"src":n=!0;break;case"srcSet":i=!0;break;case"children":case"dangerouslySetInnerHTML":throw Error(c(137,t));default:be(e,t,s,l,o,null)}}i&&be(e,t,"srcSet",o.srcSet,o,null),n&&be(e,t,"src",o.src,o,null);return;case"input":ne("invalid",e);var u=s=l=i=null,p=null,b=null;for(n in o)if(o.hasOwnProperty(n)){var O=o[n];if(O!=null)switch(n){case"name":i=O;break;case"type":l=O;break;case"checked":p=O;break;case"defaultChecked":b=O;break;case"value":s=O;break;case"defaultValue":u=O;break;case"children":case"dangerouslySetInnerHTML":if(O!=null)throw Error(c(137,t));break;default:be(e,t,n,O,o,null)}}gd(e,s,u,p,b,l,i,!1);return;case"select":ne("invalid",e),n=l=s=null;for(i in o)if(o.hasOwnProperty(i)&&(u=o[i],u!=null))switch(i){case"value":s=u;break;case"defaultValue":l=u;break;case"multiple":n=u;default:be(e,t,i,u,o,null)}t=s,o=l,e.multiple=!!n,t!=null?Cn(e,!!n,t,!1):o!=null&&Cn(e,!!n,o,!0);return;case"textarea":ne("invalid",e),s=i=n=null;for(l in o)if(o.hasOwnProperty(l)&&(u=o[l],u!=null))switch(l){case"value":n=u;break;case"defaultValue":i=u;break;case"children":s=u;break;case"dangerouslySetInnerHTML":if(u!=null)throw Error(c(91));break;default:be(e,t,l,u,o,null)}yd(e,n,i,s);return;case"option":for(p in o)o.hasOwnProperty(p)&&(n=o[p],n!=null)&&(p==="selected"?e.selected=n&&typeof n!="function"&&typeof n!="symbol":be(e,t,p,n,o,null));return;case"dialog":ne("beforetoggle",e),ne("toggle",e),ne("cancel",e),ne("close",e);break;case"iframe":case"object":ne("load",e);break;case"video":case"audio":for(n=0;n<Wa.length;n++)ne(Wa[n],e);break;case"image":ne("error",e),ne("load",e);break;case"details":ne("toggle",e);break;case"embed":case"source":case"link":ne("error",e),ne("load",e);case"area":case"base":case"br":case"col":case"hr":case"keygen":case"meta":case"param":case"track":case"wbr":case"menuitem":for(b in o)if(o.hasOwnProperty(b)&&(n=o[b],n!=null))switch(b){case"children":case"dangerouslySetInnerHTML":throw Error(c(137,t));default:be(e,t,b,n,o,null)}return;default:if(fr(t)){for(O in o)o.hasOwnProperty(O)&&(n=o[O],n!==void 0&&oc(e,t,O,n,o,void 0));return}}for(u in o)o.hasOwnProperty(u)&&(n=o[u],n!=null&&be(e,t,u,n,o,null))}function Fy(e,t,o,n){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"input":var i=null,s=null,l=null,u=null,p=null,b=null,O=null;for(S in o){var M=o[S];if(o.hasOwnProperty(S)&&M!=null)switch(S){case"checked":break;case"value":break;case"defaultValue":p=M;default:n.hasOwnProperty(S)||be(e,t,S,null,n,M)}}for(var k in n){var S=n[k];if(M=o[k],n.hasOwnProperty(k)&&(S!=null||M!=null))switch(k){case"type":s=S;break;case"name":i=S;break;case"checked":b=S;break;case"defaultChecked":O=S;break;case"value":l=S;break;case"defaultValue":u=S;break;case"children":case"dangerouslySetInnerHTML":if(S!=null)throw Error(c(137,t));break;default:S!==M&&be(e,t,k,S,n,M)}}mr(e,l,u,p,b,O,s,i);return;case"select":S=l=u=k=null;for(s in o)if(p=o[s],o.hasOwnProperty(s)&&p!=null)switch(s){case"value":break;case"multiple":S=p;default:n.hasOwnProperty(s)||be(e,t,s,null,n,p)}for(i in n)if(s=n[i],p=o[i],n.hasOwnProperty(i)&&(s!=null||p!=null))switch(i){case"value":k=s;break;case"defaultValue":u=s;break;case"multiple":l=s;default:s!==p&&be(e,t,i,s,n,p)}t=u,o=l,n=S,k!=null?Cn(e,!!o,k,!1):!!n!=!!o&&(t!=null?Cn(e,!!o,t,!0):Cn(e,!!o,o?[]:"",!1));return;case"textarea":S=k=null;for(u in o)if(i=o[u],o.hasOwnProperty(u)&&i!=null&&!n.hasOwnProperty(u))switch(u){case"value":break;case"children":break;default:be(e,t,u,null,n,i)}for(l in n)if(i=n[l],s=o[l],n.hasOwnProperty(l)&&(i!=null||s!=null))switch(l){case"value":k=i;break;case"defaultValue":S=i;break;case"children":break;case"dangerouslySetInnerHTML":if(i!=null)throw Error(c(91));break;default:i!==s&&be(e,t,l,i,n,s)}fd(e,k,S);return;case"option":for(var G in o)k=o[G],o.hasOwnProperty(G)&&k!=null&&!n.hasOwnProperty(G)&&(G==="selected"?e.selected=!1:be(e,t,G,null,n,k));for(p in n)k=n[p],S=o[p],n.hasOwnProperty(p)&&k!==S&&(k!=null||S!=null)&&(p==="selected"?e.selected=k&&typeof k!="function"&&typeof k!="symbol":be(e,t,p,k,n,S));return;case"img":case"link":case"area":case"base":case"br":case"col":case"embed":case"hr":case"keygen":case"meta":case"param":case"source":case"track":case"wbr":case"menuitem":for(var K in o)k=o[K],o.hasOwnProperty(K)&&k!=null&&!n.hasOwnProperty(K)&&be(e,t,K,null,n,k);for(b in n)if(k=n[b],S=o[b],n.hasOwnProperty(b)&&k!==S&&(k!=null||S!=null))switch(b){case"children":case"dangerouslySetInnerHTML":if(k!=null)throw Error(c(137,t));break;default:be(e,t,b,k,n,S)}return;default:if(fr(t)){for(var we in o)k=o[we],o.hasOwnProperty(we)&&k!==void 0&&!n.hasOwnProperty(we)&&oc(e,t,we,void 0,n,k);for(O in n)k=n[O],S=o[O],!n.hasOwnProperty(O)||k===S||k===void 0&&S===void 0||oc(e,t,O,k,n,S);return}}for(var f in o)k=o[f],o.hasOwnProperty(f)&&k!=null&&!n.hasOwnProperty(f)&&be(e,t,f,null,n,k);for(M in n)k=n[M],S=o[M],!n.hasOwnProperty(M)||k===S||k==null&&S==null||be(e,t,M,k,n,S)}function wh(e){switch(e){case"css":case"script":case"font":case"img":case"image":case"input":case"link":return!0;default:return!1}}function jy(){if(typeof performance.getEntriesByType=="function"){for(var e=0,t=0,o=performance.getEntriesByType("resource"),n=0;n<o.length;n++){var i=o[n],s=i.transferSize,l=i.initiatorType,u=i.duration;if(s&&u&&wh(l)){for(l=0,u=i.responseEnd,n+=1;n<o.length;n++){var p=o[n],b=p.startTime;if(b>u)break;var O=p.transferSize,M=p.initiatorType;O&&wh(M)&&(p=p.responseEnd,l+=O*(p<u?1:(u-b)/(p-b)))}if(--n,t+=8*(s+l)/(i.duration/1e3),e++,10<e)break}}if(0<e)return t/e/1e6}return navigator.connection&&(e=navigator.connection.downlink,typeof e=="number")?e:5}var nc=null,ac=null;function bs(e){return e.nodeType===9?e:e.ownerDocument}function kh(e){switch(e){case"http://www.w3.org/2000/svg":return 1;case"http://www.w3.org/1998/Math/MathML":return 2;default:return 0}}function Sh(e,t){if(e===0)switch(t){case"svg":return 1;case"math":return 2;default:return 0}return e===1&&t==="foreignObject"?0:e}function ic(e,t){return e==="textarea"||e==="noscript"||typeof t.children=="string"||typeof t.children=="number"||typeof t.children=="bigint"||typeof t.dangerouslySetInnerHTML=="object"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var sc=null;function Vy(){var e=window.event;return e&&e.type==="popstate"?e===sc?!1:(sc=e,!0):(sc=null,!1)}var Ch=typeof setTimeout=="function"?setTimeout:void 0,Ky=typeof clearTimeout=="function"?clearTimeout:void 0,Ah=typeof Promise=="function"?Promise:void 0,Qy=typeof queueMicrotask=="function"?queueMicrotask:typeof Ah<"u"?function(e){return Ah.resolve(null).then(e).catch(Xy)}:Ch;function Xy(e){setTimeout(function(){throw e})}function Po(e){return e==="head"}function Th(e,t){var o=t,n=0;do{var i=o.nextSibling;if(e.removeChild(o),i&&i.nodeType===8)if(o=i.data,o==="/$"||o==="/&"){if(n===0){e.removeChild(i),ta(t);return}n--}else if(o==="$"||o==="$?"||o==="$~"||o==="$!"||o==="&")n++;else if(o==="html")ja(e.ownerDocument.documentElement);else if(o==="head"){o=e.ownerDocument.head,ja(o);for(var s=o.firstChild;s;){var l=s.nextSibling,u=s.nodeName;s[da]||u==="SCRIPT"||u==="STYLE"||u==="LINK"&&s.rel.toLowerCase()==="stylesheet"||o.removeChild(s),s=l}}else o==="body"&&ja(e.ownerDocument.body);o=i}while(o);ta(t)}function Oh(e,t){var o=e;e=0;do{var n=o.nextSibling;if(o.nodeType===1?t?(o._stashedDisplay=o.style.display,o.style.display="none"):(o.style.display=o._stashedDisplay||"",o.getAttribute("style")===""&&o.removeAttribute("style")):o.nodeType===3&&(t?(o._stashedText=o.nodeValue,o.nodeValue=""):o.nodeValue=o._stashedText||""),n&&n.nodeType===8)if(o=n.data,o==="/$"){if(e===0)break;e--}else o!=="$"&&o!=="$?"&&o!=="$~"&&o!=="$!"||e++;o=n}while(o)}function rc(e){var t=e.firstChild;for(t&&t.nodeType===10&&(t=t.nextSibling);t;){var o=t;switch(t=t.nextSibling,o.nodeName){case"HTML":case"HEAD":case"BODY":rc(o),pr(o);continue;case"SCRIPT":case"STYLE":continue;case"LINK":if(o.rel.toLowerCase()==="stylesheet")continue}e.removeChild(o)}}function Zy(e,t,o,n){for(;e.nodeType===1;){var i=o;if(e.nodeName.toLowerCase()!==t.toLowerCase()){if(!n&&(e.nodeName!=="INPUT"||e.type!=="hidden"))break}else if(n){if(!e[da])switch(t){case"meta":if(!e.hasAttribute("itemprop"))break;return e;case"link":if(s=e.getAttribute("rel"),s==="stylesheet"&&e.hasAttribute("data-precedence"))break;if(s!==i.rel||e.getAttribute("href")!==(i.href==null||i.href===""?null:i.href)||e.getAttribute("crossorigin")!==(i.crossOrigin==null?null:i.crossOrigin)||e.getAttribute("title")!==(i.title==null?null:i.title))break;return e;case"style":if(e.hasAttribute("data-precedence"))break;return e;case"script":if(s=e.getAttribute("src"),(s!==(i.src==null?null:i.src)||e.getAttribute("type")!==(i.type==null?null:i.type)||e.getAttribute("crossorigin")!==(i.crossOrigin==null?null:i.crossOrigin))&&s&&e.hasAttribute("async")&&!e.hasAttribute("itemprop"))break;return e;default:return e}}else if(t==="input"&&e.type==="hidden"){var s=i.name==null?null:""+i.name;if(i.type==="hidden"&&e.getAttribute("name")===s)return e}else return e;if(e=Bt(e.nextSibling),e===null)break}return null}function Jy(e,t,o){if(t==="")return null;for(;e.nodeType!==3;)if((e.nodeType!==1||e.nodeName!=="INPUT"||e.type!=="hidden")&&!o||(e=Bt(e.nextSibling),e===null))return null;return e}function xh(e,t){for(;e.nodeType!==8;)if((e.nodeType!==1||e.nodeName!=="INPUT"||e.type!=="hidden")&&!t||(e=Bt(e.nextSibling),e===null))return null;return e}function lc(e){return e.data==="$?"||e.data==="$~"}function cc(e){return e.data==="$!"||e.data==="$?"&&e.ownerDocument.readyState!=="loading"}function $y(e,t){var o=e.ownerDocument;if(e.data==="$~")e._reactRetry=t;else if(e.data!=="$?"||o.readyState!=="loading")t();else{var n=function(){t(),o.removeEventListener("DOMContentLoaded",n)};o.addEventListener("DOMContentLoaded",n),e._reactRetry=n}}function Bt(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t==="$"||t==="$!"||t==="$?"||t==="$~"||t==="&"||t==="F!"||t==="F")break;if(t==="/$"||t==="/&")return null}}return e}var dc=null;function Mh(e){e=e.nextSibling;for(var t=0;e;){if(e.nodeType===8){var o=e.data;if(o==="/$"||o==="/&"){if(t===0)return Bt(e.nextSibling);t--}else o!=="$"&&o!=="$!"&&o!=="$?"&&o!=="$~"&&o!=="&"||t++}e=e.nextSibling}return null}function Eh(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var o=e.data;if(o==="$"||o==="$!"||o==="$?"||o==="$~"||o==="&"){if(t===0)return e;t--}else o!=="/$"&&o!=="/&"||t++}e=e.previousSibling}return null}function Bh(e,t,o){switch(t=bs(o),e){case"html":if(e=t.documentElement,!e)throw Error(c(452));return e;case"head":if(e=t.head,!e)throw Error(c(453));return e;case"body":if(e=t.body,!e)throw Error(c(454));return e;default:throw Error(c(451))}}function ja(e){for(var t=e.attributes;t.length;)e.removeAttributeNode(t[0]);pr(e)}var Rt=new Map,Rh=new Set;function ws(e){return typeof e.getRootNode=="function"?e.getRootNode():e.nodeType===9?e:e.ownerDocument}var lo=N.d;N.d={f:ev,r:tv,D:ov,C:nv,L:av,m:iv,X:rv,S:sv,M:lv};function ev(){var e=lo.f(),t=us();return e||t}function tv(e){var t=wn(e);t!==null&&t.tag===5&&t.type==="form"?Ku(t):lo.r(e)}var Jn=typeof document>"u"?null:document;function Lh(e,t,o){var n=Jn;if(n&&typeof t=="string"&&t){var i=Ct(t);i='link[rel="'+e+'"][href="'+i+'"]',typeof o=="string"&&(i+='[crossorigin="'+o+'"]'),Rh.has(i)||(Rh.add(i),e={rel:e,crossOrigin:o,href:t},n.querySelector(i)===null&&(t=n.createElement("link"),Je(t,"link",e),We(t),n.head.appendChild(t)))}}function ov(e){lo.D(e),Lh("dns-prefetch",e,null)}function nv(e,t){lo.C(e,t),Lh("preconnect",e,t)}function av(e,t,o){lo.L(e,t,o);var n=Jn;if(n&&e&&t){var i='link[rel="preload"][as="'+Ct(t)+'"]';t==="image"&&o&&o.imageSrcSet?(i+='[imagesrcset="'+Ct(o.imageSrcSet)+'"]',typeof o.imageSizes=="string"&&(i+='[imagesizes="'+Ct(o.imageSizes)+'"]')):i+='[href="'+Ct(e)+'"]';var s=i;switch(t){case"style":s=$n(e);break;case"script":s=ea(e)}Rt.has(s)||(e=R({rel:"preload",href:t==="image"&&o&&o.imageSrcSet?void 0:e,as:t},o),Rt.set(s,e),n.querySelector(i)!==null||t==="style"&&n.querySelector(Va(s))||t==="script"&&n.querySelector(Ka(s))||(t=n.createElement("link"),Je(t,"link",e),We(t),n.head.appendChild(t)))}}function iv(e,t){lo.m(e,t);var o=Jn;if(o&&e){var n=t&&typeof t.as=="string"?t.as:"script",i='link[rel="modulepreload"][as="'+Ct(n)+'"][href="'+Ct(e)+'"]',s=i;switch(n){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":s=ea(e)}if(!Rt.has(s)&&(e=R({rel:"modulepreload",href:e},t),Rt.set(s,e),o.querySelector(i)===null)){switch(n){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(o.querySelector(Ka(s)))return}n=o.createElement("link"),Je(n,"link",e),We(n),o.head.appendChild(n)}}}function sv(e,t,o){lo.S(e,t,o);var n=Jn;if(n&&e){var i=kn(n).hoistableStyles,s=$n(e);t=t||"default";var l=i.get(s);if(!l){var u={loading:0,preload:null};if(l=n.querySelector(Va(s)))u.loading=5;else{e=R({rel:"stylesheet",href:e,"data-precedence":t},o),(o=Rt.get(s))&&uc(e,o);var p=l=n.createElement("link");We(p),Je(p,"link",e),p._p=new Promise(function(b,O){p.onload=b,p.onerror=O}),p.addEventListener("load",function(){u.loading|=1}),p.addEventListener("error",function(){u.loading|=2}),u.loading|=4,ks(l,t,n)}l={type:"stylesheet",instance:l,count:1,state:u},i.set(s,l)}}}function rv(e,t){lo.X(e,t);var o=Jn;if(o&&e){var n=kn(o).hoistableScripts,i=ea(e),s=n.get(i);s||(s=o.querySelector(Ka(i)),s||(e=R({src:e,async:!0},t),(t=Rt.get(i))&&pc(e,t),s=o.createElement("script"),We(s),Je(s,"link",e),o.head.appendChild(s)),s={type:"script",instance:s,count:1,state:null},n.set(i,s))}}function lv(e,t){lo.M(e,t);var o=Jn;if(o&&e){var n=kn(o).hoistableScripts,i=ea(e),s=n.get(i);s||(s=o.querySelector(Ka(i)),s||(e=R({src:e,async:!0,type:"module"},t),(t=Rt.get(i))&&pc(e,t),s=o.createElement("script"),We(s),Je(s,"link",e),o.head.appendChild(s)),s={type:"script",instance:s,count:1,state:null},n.set(i,s))}}function Nh(e,t,o,n){var i=(i=j.current)?ws(i):null;if(!i)throw Error(c(446));switch(e){case"meta":case"title":return null;case"style":return typeof o.precedence=="string"&&typeof o.href=="string"?(t=$n(o.href),o=kn(i).hoistableStyles,n=o.get(t),n||(n={type:"style",instance:null,count:0,state:null},o.set(t,n)),n):{type:"void",instance:null,count:0,state:null};case"link":if(o.rel==="stylesheet"&&typeof o.href=="string"&&typeof o.precedence=="string"){e=$n(o.href);var s=kn(i).hoistableStyles,l=s.get(e);if(l||(i=i.ownerDocument||i,l={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},s.set(e,l),(s=i.querySelector(Va(e)))&&!s._p&&(l.instance=s,l.state.loading=5),Rt.has(e)||(o={rel:"preload",as:"style",href:o.href,crossOrigin:o.crossOrigin,integrity:o.integrity,media:o.media,hrefLang:o.hrefLang,referrerPolicy:o.referrerPolicy},Rt.set(e,o),s||cv(i,e,o,l.state))),t&&n===null)throw Error(c(528,""));return l}if(t&&n!==null)throw Error(c(529,""));return null;case"script":return t=o.async,o=o.src,typeof o=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=ea(o),o=kn(i).hoistableScripts,n=o.get(t),n||(n={type:"script",instance:null,count:0,state:null},o.set(t,n)),n):{type:"void",instance:null,count:0,state:null};default:throw Error(c(444,e))}}function $n(e){return'href="'+Ct(e)+'"'}function Va(e){return'link[rel="stylesheet"]['+e+"]"}function Ih(e){return R({},e,{"data-precedence":e.precedence,precedence:null})}function cv(e,t,o,n){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?n.loading=1:(t=e.createElement("link"),n.preload=t,t.addEventListener("load",function(){return n.loading|=1}),t.addEventListener("error",function(){return n.loading|=2}),Je(t,"link",o),We(t),e.head.appendChild(t))}function ea(e){return'[src="'+Ct(e)+'"]'}function Ka(e){return"script[async]"+e}function Dh(e,t,o){if(t.count++,t.instance===null)switch(t.type){case"style":var n=e.querySelector('style[data-href~="'+Ct(o.href)+'"]');if(n)return t.instance=n,We(n),n;var i=R({},o,{"data-href":o.href,"data-precedence":o.precedence,href:null,precedence:null});return n=(e.ownerDocument||e).createElement("style"),We(n),Je(n,"style",i),ks(n,o.precedence,e),t.instance=n;case"stylesheet":i=$n(o.href);var s=e.querySelector(Va(i));if(s)return t.state.loading|=4,t.instance=s,We(s),s;n=Ih(o),(i=Rt.get(i))&&uc(n,i),s=(e.ownerDocument||e).createElement("link"),We(s);var l=s;return l._p=new Promise(function(u,p){l.onload=u,l.onerror=p}),Je(s,"link",n),t.state.loading|=4,ks(s,o.precedence,e),t.instance=s;case"script":return s=ea(o.src),(i=e.querySelector(Ka(s)))?(t.instance=i,We(i),i):(n=o,(i=Rt.get(s))&&(n=R({},o),pc(n,i)),e=e.ownerDocument||e,i=e.createElement("script"),We(i),Je(i,"link",n),e.head.appendChild(i),t.instance=i);case"void":return null;default:throw Error(c(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(n=t.instance,t.state.loading|=4,ks(n,o.precedence,e));return t.instance}function ks(e,t,o){for(var n=o.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),i=n.length?n[n.length-1]:null,s=i,l=0;l<n.length;l++){var u=n[l];if(u.dataset.precedence===t)s=u;else if(s!==i)break}s?s.parentNode.insertBefore(e,s.nextSibling):(t=o.nodeType===9?o.head:o,t.insertBefore(e,t.firstChild))}function uc(e,t){e.crossOrigin==null&&(e.crossOrigin=t.crossOrigin),e.referrerPolicy==null&&(e.referrerPolicy=t.referrerPolicy),e.title==null&&(e.title=t.title)}function pc(e,t){e.crossOrigin==null&&(e.crossOrigin=t.crossOrigin),e.referrerPolicy==null&&(e.referrerPolicy=t.referrerPolicy),e.integrity==null&&(e.integrity=t.integrity)}var Ss=null;function Ph(e,t,o){if(Ss===null){var n=new Map,i=Ss=new Map;i.set(o,n)}else i=Ss,n=i.get(o),n||(n=new Map,i.set(o,n));if(n.has(e))return n;for(n.set(e,null),o=o.getElementsByTagName(e),i=0;i<o.length;i++){var s=o[i];if(!(s[da]||s[Ke]||e==="link"&&s.getAttribute("rel")==="stylesheet")&&s.namespaceURI!=="http://www.w3.org/2000/svg"){var l=s.getAttribute(t)||"";l=e+l;var u=n.get(l);u?u.push(s):n.set(l,[s])}}return n}function Uh(e,t,o){e=e.ownerDocument||e,e.head.insertBefore(o,t==="title"?e.querySelector("head > title"):null)}function dv(e,t,o){if(o===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;return t.rel==="stylesheet"?(e=t.disabled,typeof t.precedence=="string"&&e==null):!0;case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function Hh(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function uv(e,t,o,n){if(o.type==="stylesheet"&&(typeof n.media!="string"||matchMedia(n.media).matches!==!1)&&(o.state.loading&4)===0){if(o.instance===null){var i=$n(n.href),s=t.querySelector(Va(i));if(s){t=s._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=Cs.bind(e),t.then(e,e)),o.state.loading|=4,o.instance=s,We(s);return}s=t.ownerDocument||t,n=Ih(n),(i=Rt.get(i))&&uc(n,i),s=s.createElement("link"),We(s);var l=s;l._p=new Promise(function(u,p){l.onload=u,l.onerror=p}),Je(s,"link",n),o.instance=s}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(o,t),(t=o.state.preload)&&(o.state.loading&3)===0&&(e.count++,o=Cs.bind(e),t.addEventListener("load",o),t.addEventListener("error",o))}}var hc=0;function pv(e,t){return e.stylesheets&&e.count===0&&Ts(e,e.stylesheets),0<e.count||0<e.imgCount?function(o){var n=setTimeout(function(){if(e.stylesheets&&Ts(e,e.stylesheets),e.unsuspend){var s=e.unsuspend;e.unsuspend=null,s()}},6e4+t);0<e.imgBytes&&hc===0&&(hc=62500*jy());var i=setTimeout(function(){if(e.waitingForImages=!1,e.count===0&&(e.stylesheets&&Ts(e,e.stylesheets),e.unsuspend)){var s=e.unsuspend;e.unsuspend=null,s()}},(e.imgBytes>hc?50:800)+t);return e.unsuspend=o,function(){e.unsuspend=null,clearTimeout(n),clearTimeout(i)}}:null}function Cs(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Ts(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var As=null;function Ts(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,As=new Map,t.forEach(hv,e),As=null,Cs.call(e))}function hv(e,t){if(!(t.state.loading&4)){var o=As.get(e);if(o)var n=o.get(null);else{o=new Map,As.set(e,o);for(var i=e.querySelectorAll("link[data-precedence],style[data-precedence]"),s=0;s<i.length;s++){var l=i[s];(l.nodeName==="LINK"||l.getAttribute("media")!=="not all")&&(o.set(l.dataset.precedence,l),n=l)}n&&o.set(null,n)}i=t.instance,l=i.getAttribute("data-precedence"),s=o.get(l)||n,s===n&&o.set(null,i),o.set(l,i),this.count++,n=Cs.bind(this),i.addEventListener("load",n),i.addEventListener("error",n),s?s.parentNode.insertBefore(i,s.nextSibling):(e=e.nodeType===9?e.head:e,e.insertBefore(i,e.firstChild)),t.state.loading|=4}}var Qa={$$typeof:xe,Provider:null,Consumer:null,_currentValue:V,_currentValue2:V,_threadCount:0};function mv(e,t,o,n,i,s,l,u,p){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=lr(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=lr(0),this.hiddenUpdates=lr(null),this.identifierPrefix=n,this.onUncaughtError=i,this.onCaughtError=s,this.onRecoverableError=l,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=p,this.incompleteTransitions=new Map}function zh(e,t,o,n,i,s,l,u,p,b,O,M){return e=new mv(e,t,o,l,p,b,O,M,u),t=1,s===!0&&(t|=24),s=gt(3,null,null,t),e.current=s,s.stateNode=e,t=jr(),t.refCount++,e.pooledCache=t,t.refCount++,s.memoizedState={element:n,isDehydrated:o,cache:t},Xr(s),e}function _h(e){return e?(e=Rn,e):Rn}function Gh(e,t,o,n,i,s){i=_h(i),n.context===null?n.context=i:n.pendingContext=i,n=To(t),n.payload={element:o},s=s===void 0?null:s,s!==null&&(n.callback=s),o=Oo(e,n,t),o!==null&&(lt(o,e,t),xa(o,e,t))}function qh(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var o=e.retryLane;e.retryLane=o!==0&&o<t?o:t}}function mc(e,t){qh(e,t),(e=e.alternate)&&qh(e,t)}function Yh(e){if(e.tag===13||e.tag===31){var t=Xo(e,67108864);t!==null&<(t,e,67108864),mc(e,67108864)}}function Wh(e){if(e.tag===13||e.tag===31){var t=wt();t=cr(t);var o=Xo(e,t);o!==null&<(o,e,t),mc(e,t)}}var Os=!0;function gv(e,t,o,n){var i=A.T;A.T=null;var s=N.p;try{N.p=2,gc(e,t,o,n)}finally{N.p=s,A.T=i}}function fv(e,t,o,n){var i=A.T;A.T=null;var s=N.p;try{N.p=8,gc(e,t,o,n)}finally{N.p=s,A.T=i}}function gc(e,t,o,n){if(Os){var i=fc(n);if(i===null)tc(e,t,n,xs,o),jh(e,n);else if(vv(i,e,t,o,n))n.stopPropagation();else if(jh(e,n),t&4&&-1<yv.indexOf(e)){for(;i!==null;){var s=wn(i);if(s!==null)switch(s.tag){case 3:if(s=s.stateNode,s.current.memoizedState.isDehydrated){var l=Fo(s.pendingLanes);if(l!==0){var u=s;for(u.pendingLanes|=2,u.entangledLanes|=2;l;){var p=1<<31-ht(l);u.entanglements[1]|=p,l&=~p}Gt(s),(me&6)===0&&(cs=ut()+500,Ya(0))}}break;case 31:case 13:u=Xo(s,2),u!==null&<(u,s,2),us(),mc(s,2)}if(s=fc(n),s===null&&tc(e,t,n,xs,o),s===i)break;i=s}i!==null&&n.stopPropagation()}else tc(e,t,n,null,o)}}function fc(e){return e=vr(e),yc(e)}var xs=null;function yc(e){if(xs=null,e=bn(e),e!==null){var t=w(e);if(t===null)e=null;else{var o=t.tag;if(o===13){if(e=C(t),e!==null)return e;e=null}else if(o===31){if(e=L(t),e!==null)return e;e=null}else if(o===3){if(t.stateNode.current.memoizedState.isDehydrated)return t.tag===3?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null)}}return xs=e,null}function Fh(e){switch(e){case"beforetoggle":case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"toggle":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 2;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 8;case"message":switch(tf()){case $c:return 2;case ed:return 8;case fi:case of:return 32;case td:return 268435456;default:return 32}default:return 32}}var vc=!1,Uo=null,Ho=null,zo=null,Xa=new Map,Za=new Map,_o=[],yv="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(" ");function jh(e,t){switch(e){case"focusin":case"focusout":Uo=null;break;case"dragenter":case"dragleave":Ho=null;break;case"mouseover":case"mouseout":zo=null;break;case"pointerover":case"pointerout":Xa.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Za.delete(t.pointerId)}}function Ja(e,t,o,n,i,s){return e===null||e.nativeEvent!==s?(e={blockedOn:t,domEventName:o,eventSystemFlags:n,nativeEvent:s,targetContainers:[i]},t!==null&&(t=wn(t),t!==null&&Yh(t)),e):(e.eventSystemFlags|=n,t=e.targetContainers,i!==null&&t.indexOf(i)===-1&&t.push(i),e)}function vv(e,t,o,n,i){switch(t){case"focusin":return Uo=Ja(Uo,e,t,o,n,i),!0;case"dragenter":return Ho=Ja(Ho,e,t,o,n,i),!0;case"mouseover":return zo=Ja(zo,e,t,o,n,i),!0;case"pointerover":var s=i.pointerId;return Xa.set(s,Ja(Xa.get(s)||null,e,t,o,n,i)),!0;case"gotpointercapture":return s=i.pointerId,Za.set(s,Ja(Za.get(s)||null,e,t,o,n,i)),!0}return!1}function Vh(e){var t=bn(e.target);if(t!==null){var o=w(t);if(o!==null){if(t=o.tag,t===13){if(t=C(o),t!==null){e.blockedOn=t,rd(e.priority,function(){Wh(o)});return}}else if(t===31){if(t=L(o),t!==null){e.blockedOn=t,rd(e.priority,function(){Wh(o)});return}}else if(t===3&&o.stateNode.current.memoizedState.isDehydrated){e.blockedOn=o.tag===3?o.stateNode.containerInfo:null;return}}}e.blockedOn=null}function Ms(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var o=fc(e.nativeEvent);if(o===null){o=e.nativeEvent;var n=new o.constructor(o.type,o);yr=n,o.target.dispatchEvent(n),yr=null}else return t=wn(o),t!==null&&Yh(t),e.blockedOn=o,!1;t.shift()}return!0}function Kh(e,t,o){Ms(e)&&o.delete(t)}function bv(){vc=!1,Uo!==null&&Ms(Uo)&&(Uo=null),Ho!==null&&Ms(Ho)&&(Ho=null),zo!==null&&Ms(zo)&&(zo=null),Xa.forEach(Kh),Za.forEach(Kh)}function Es(e,t){e.blockedOn===t&&(e.blockedOn=null,vc||(vc=!0,a.unstable_scheduleCallback(a.unstable_NormalPriority,bv)))}var Bs=null;function Qh(e){Bs!==e&&(Bs=e,a.unstable_scheduleCallback(a.unstable_NormalPriority,function(){Bs===e&&(Bs=null);for(var t=0;t<e.length;t+=3){var o=e[t],n=e[t+1],i=e[t+2];if(typeof n!="function"){if(yc(n||o)===null)continue;break}var s=wn(o);s!==null&&(e.splice(t,3),t-=3,fl(s,{pending:!0,data:i,method:o.method,action:n},n,i))}}))}function ta(e){function t(p){return Es(p,e)}Uo!==null&&Es(Uo,e),Ho!==null&&Es(Ho,e),zo!==null&&Es(zo,e),Xa.forEach(t),Za.forEach(t);for(var o=0;o<_o.length;o++){var n=_o[o];n.blockedOn===e&&(n.blockedOn=null)}for(;0<_o.length&&(o=_o[0],o.blockedOn===null);)Vh(o),o.blockedOn===null&&_o.shift();if(o=(e.ownerDocument||e).$$reactFormReplay,o!=null)for(n=0;n<o.length;n+=3){var i=o[n],s=o[n+1],l=i[ot]||null;if(typeof s=="function")l||Qh(o);else if(l){var u=null;if(s&&s.hasAttribute("formAction")){if(i=s,l=s[ot]||null)u=l.formAction;else if(yc(i)!==null)continue}else u=l.action;typeof u=="function"?o[n+1]=u:(o.splice(n,3),n-=3),Qh(o)}}}function Xh(){function e(s){s.canIntercept&&s.info==="react-transition"&&s.intercept({handler:function(){return new Promise(function(l){return i=l})},focusReset:"manual",scroll:"manual"})}function t(){i!==null&&(i(),i=null),n||setTimeout(o,20)}function o(){if(!n&&!navigation.transition){var s=navigation.currentEntry;s&&s.url!=null&&navigation.navigate(s.url,{state:s.getState(),info:"react-transition",history:"replace"})}}if(typeof navigation=="object"){var n=!1,i=null;return navigation.addEventListener("navigate",e),navigation.addEventListener("navigatesuccess",t),navigation.addEventListener("navigateerror",t),setTimeout(o,100),function(){n=!0,navigation.removeEventListener("navigate",e),navigation.removeEventListener("navigatesuccess",t),navigation.removeEventListener("navigateerror",t),i!==null&&(i(),i=null)}}}function bc(e){this._internalRoot=e}Rs.prototype.render=bc.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(c(409));var o=t.current,n=wt();Gh(o,n,e,t,null,null)},Rs.prototype.unmount=bc.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;Gh(e.current,2,null,e,null,null),us(),t[vn]=null}};function Rs(e){this._internalRoot=e}Rs.prototype.unstable_scheduleHydration=function(e){if(e){var t=sd();e={blockedOn:null,target:e,priority:t};for(var o=0;o<_o.length&&t!==0&&t<_o[o].priority;o++);_o.splice(o,0,e),o===0&&Vh(e)}};var Zh=r.version;if(Zh!=="19.2.8")throw Error(c(527,Zh,"19.2.8"));N.findDOMNode=function(e){var t=e._reactInternals;if(t===void 0)throw typeof e.render=="function"?Error(c(188)):(e=Object.keys(e).join(","),Error(c(268,e)));return e=y(t),e=e!==null?P(e):null,e=e===null?null:e.stateNode,e};var wv={bundleType:0,version:"19.2.8",rendererPackageName:"react-dom",currentDispatcherRef:A,reconcilerVersion:"19.2.8"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var Ls=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Ls.isDisabled&&Ls.supportsFiber)try{ra=Ls.inject(wv),pt=Ls}catch{}}return ei.createRoot=function(e,t){if(!h(e))throw Error(c(299));var o=!1,n="",i=ap,s=ip,l=sp;return t!=null&&(t.unstable_strictMode===!0&&(o=!0),t.identifierPrefix!==void 0&&(n=t.identifierPrefix),t.onUncaughtError!==void 0&&(i=t.onUncaughtError),t.onCaughtError!==void 0&&(s=t.onCaughtError),t.onRecoverableError!==void 0&&(l=t.onRecoverableError)),t=zh(e,1,!1,null,null,o,n,null,i,s,l,Xh),e[vn]=t.current,ec(e),new bc(t)},ei.hydrateRoot=function(e,t,o){if(!h(e))throw Error(c(299));var n=!1,i="",s=ap,l=ip,u=sp,p=null;return o!=null&&(o.unstable_strictMode===!0&&(n=!0),o.identifierPrefix!==void 0&&(i=o.identifierPrefix),o.onUncaughtError!==void 0&&(s=o.onUncaughtError),o.onCaughtError!==void 0&&(l=o.onCaughtError),o.onRecoverableError!==void 0&&(u=o.onRecoverableError),o.formState!==void 0&&(p=o.formState)),t=zh(e,1,!0,t,o??null,n,i,p,s,l,u,Xh),t.context=_h(null),o=t.current,n=wt(),n=cr(n),i=To(n),i.callback=null,Oo(o,i,n),o=n,t.current.lanes=o,ca(t,o),Gt(t),e[vn]=t.current,ec(e),new Rs(t)},ei.version="19.2.8",ei}var lm;function Nv(){if(lm)return Sc.exports;lm=1;function a(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(a)}catch(r){console.error(r)}}return a(),Sc.exports=Lv(),Sc.exports}var cS=Nv();const Iv={name:"Limix Bot"},Dv="Limix Bot";let mn={brand:Iv,source:"default",file:""};function dS(){return mn.brand}function jm(){return mn.source==="file"?mn.brand.name:Dv}function uS(){return mn}const Vm=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i;function Pv(a){const r=Vm.exec(a);if(!r)return 0;const d=c=>{const h=parseInt(c,16)/255;return h<=.03928?h/12.92:((h+.055)/1.055)**2.4};return .2126*d(r[1])+.7152*d(r[2])+.0722*d(r[3])}function Uv(a){const r=Pv(a);return 1.05/(r+.05)>=(r+.05)/.05?"#ffffff":"#111111"}function Hv(a){return!a.accent||!Vm.test(a.accent)?{}:{"--color-accent":a.accent,"--color-accent-border":a.accent,"--color-focus":a.accent,"--color-accent-text":a.accent,"--color-accent-ink":Uv(a.accent)}}function zv(a){const r=/^data:(image\/[a-z0-9.+-]+)/i.exec(a);return r?r[1].toLowerCase():""}let cm=null;function _v(a){const r=document.querySelector('link[rel="icon"]');if(!r)return;cm??={href:r.getAttribute("href")??"",type:r.getAttribute("type")??""};const d=a?{href:a,type:zv(a)}:cm;r.setAttribute("href",d.href),d.type?r.setAttribute("type",d.type):r.removeAttribute("type");let c=document.querySelector('link[rel="apple-touch-icon"][data-brand]');a?(c||(c=document.createElement("link"),c.rel="apple-touch-icon",c.dataset.brand="1",document.head.appendChild(c)),c.href=a):c?.remove()}function Gv(a){if(mn=a,typeof document>"u")return;document.title=jm(),_v(a.brand.favicon);const r=document.documentElement;for(const d of["--color-accent","--color-accent-border","--color-focus","--color-accent-text","--color-accent-ink"])r.style.removeProperty(d);for(const[d,c]of Object.entries(Hv(a.brand)))r.style.setProperty(d,c)}function qv(a){if(!a||typeof a!="object")return!1;const r=Reflect.get(a,"brand");return!!r&&typeof r=="object"&&typeof Reflect.get(Object(r),"name")=="string"}async function pS(a=fetch,r=1500){const d=new AbortController,c=setTimeout(()=>d.abort(),r);try{const h=await a("/api/brand",{signal:d.signal});if(!h.ok)return mn;const w=await h.json();qv(w)&&Gv(w)}catch{}finally{clearTimeout(c)}return mn}const Yo={"connectedWorkspaces.localTitle":"Environments on this computer","connectedWorkspaces.missing":"missing","connectedWorkspaces.current":"Current","connectedWorkspaces.switch":"Switch","connectedWorkspaces.forgetPurge":"Also delete this folder and everything in it ({path}). Otherwise the folder, its bots and conversations stay on this computer.","connectedWorkspaces.forget":"Forget","connectedWorkspaces.cancel":"Cancel","connectedWorkspaces.newEnvironment":"New environment","connectedWorkspaces.name":"Name","connectedWorkspaces.environmentPlaceholder":"My environment","connectedWorkspaces.dataFolder":"Data folder (optional)","connectedWorkspaces.defaultFolder":"Leave empty to create one in your home folder","connectedWorkspaces.choose":"Choose…","connectedWorkspaces.create":"Create","connectedWorkspaces.localSubtitle":"Separate setups on this computer, each with its own bots, conversations and data folder.","connectedWorkspaces.switchTo":"Switch to {name}","connectedWorkspaces.switchConfirm":"Switch to {name}? The app restarts on that environment. Running turns stop.","connectedWorkspaces.switchError":"Couldn't switch environments. Try again.","connectedWorkspaces.forgetName":"Forget {name}","connectedWorkspaces.forgetError":"Couldn't forget the environment. Try again.","connectedWorkspaces.createError":"Couldn't create the environment. Check the data folder, then try again.","whop.description":"Products, checkout links, memberships and payments through Whop’s official integration.","hostedMcp.otherAppsSetup":"Connected: {services}. Set up or restore the connection service to use the other apps.","hostedMcp.connect":"Connect {service}","hostedMcp.disconnect":"Disconnect {service}","whop.notice":"Sign in with Whop. No API key needed. Whop requests admin access across businesses you manage, and requires confirmation for consequential financial or destructive actions.","hostedMcp.connected":"{service} is connected and enabled. Bot access follows each bot’s MCP server selection.","hostedMcp.access":"Bot access","hostedMcp.accessHint":"Bots using every enabled MCP server inherit this connection. Open a bot’s Access settings to choose its servers. Changes apply to its next task.","hostedMcp.botSettings":"Manage {name}’s access","hostedMcp.setupFailed":"{service} could not be added. Refresh and try again.","hostedMcp.testFailed":"Signed in, but {service}’s tools could not be loaded: {reason} Please connect again to retry.","hostedMcp.loadingTools":"Signed in. Loading {service}’s tools…","agentcard.description":"Shop and pay from your own Agentcard account.","agentcard.notice":"Sign in with your Agentcard account. No API key needed. Agentcard keeps your cards and handles purchase approvals; Limix Bot stores no card details. A bot that can use Agentcard can call all of its tools, including buying and showing card details, so choose which bots get it under Bot access.","hostedMcp.keyLabel":"{service} API key","hostedMcp.keyPlaceholder":"Paste your {service} key","hostedMcp.getKey":"Get a {service} key","hostedMcp.keyRefused":"{service} didn’t accept that key. Check it and connect again.","hostedMcp.keyTestFailed":"{service}’s tools could not be loaded with that key: {reason} Connect again to retry.","agentmail.description":"Email inboxes your bots send and receive from, on your own AgentMail account.","agentmail.notice":"Sign in with your AgentMail account. No API key needed. A bot that can use AgentMail can make inboxes, read their mail and send from them, billed to your account, so choose which bots get it under Bot access. Sending follows Sending on your behalf. To have a bot answer new mail, add a webhook for that bot in Automations and paste its address into AgentMail.","vapi.description":"Phone calls your bots place and answer, on your own Vapi account.","vapi.notice":"Paste a private API key from your Vapi dashboard. {app} never shows it again, and Disconnect deletes it. A bot that can use Vapi can place calls billed to your account, and each call follows Sending on your behalf, so choose which bots get it under Bot access. Have your Vapi assistant open every call by saying it is an automated assistant calling for you and that the call is recorded.","telnyx.description":"Phone numbers in many countries, texts and calls, on your own Telnyx account.","telnyx.notice":"Paste an API key from your Telnyx portal. {app} never shows it again, and Disconnect deletes it. Telnyx reaches its whole API through one tool, so every Telnyx action a bot takes follows Sending on your behalf, including buying numbers billed to your account. Choose which bots get it under Bot access. To have a bot answer texts, add a webhook for that bot in Automations and set it on your Telnyx messaging profile.","agentphone.description":"US and Canadian numbers for your bots, with texts and calls, on your own AgentPhone account.","agentphone.notice":"Sign in with your AgentPhone account. No API key needed. A bot that can use AgentPhone can buy numbers, text and place calls, billed to your account; each of those follows Sending on your behalf, so choose which bots get it under Bot access. To have a bot answer texts and calls, add a webhook for that bot in Automations and set it in AgentPhone.","email.title":"Email","email.description":"Read and send mail on any mail host, with your address and password.","email.menu":"Email options","email.address":"Email address","email.password":"Mailbox password","email.help":"Limix Bot finds your mail server and checks it can read your mail. Your bots never see the password.","email.typeServer":"Enter the mail server yourself","email.incomingServer":"Incoming mail server (IMAP)","email.outgoingServer":"Outgoing mail server (SMTP)","email.port":"Port","email.username":"User name, if it isn't your address","email.connected":"Connected. It read your inbox: {count} messages.","email.connectedNoSending":"Connected for reading: {count} messages. Sending doesn't work yet.","email.addAnother":"Add another mailbox","email.disconnect":"Disconnect {address}","email.reading":"Reading","email.sending":"Sending","email.connectedDone":"Connected.","email.sendTestToMyself":"Send a test to myself","email.test":"Test","email.edit":"Edit","email.outgoing":"Outgoing server","email.security":"Security","email.securityAuto":"Security: automatic","email.securityTls":"SSL/TLS","email.securityStarttls":"STARTTLS","email.smtpUsername":"User name for sending, if different","email.smtpPassword":"Password for sending, if different","email.testSent":"A test is on its way to {address}.","email.addAnotherAddress":"Add another address","email.signInGoogle":"Sign in with Google","email.signInMicrosoft":"Sign in with Microsoft","email.makeAppPassword":"Make an app password","email.needsGoogle":"Gmail needs an app password here (with 2-step verification on), or sign in with Google.","email.needsMicrosoft":"Outlook doesn't take a mail password here: sign in with Microsoft.","email.needsAppPassword":"{provider} needs an app password here, not your normal password.","postiz.description":"Draft, schedule and publish social posts with Postiz.","postiz.connect":"Connect Postiz","postiz.reconnect":"Reconnect Postiz","postiz.menu":"Postiz options","postiz.useKey":"Use an API key instead","postiz.useSignIn":"Sign in with Postiz instead","postiz.keyField":"Postiz API key","postiz.addressField":"Postiz server address (optional)","postiz.keyHelp":"Find your key in Postiz under Settings → Public API.","postiz.keyAndAddressHelp":"Find your key in Postiz under Settings → Public API. Leave the address empty for Postiz Cloud, or enter the address of your own Postiz server.","postiz.keyLink":"Open Postiz settings","postiz.finishInBrowser":"Finish signing in to Postiz in your browser.","postiz.loadingTools":"Signed in. Loading Postiz’s tools…","postiz.signInExpired":"The sign-in took too long. Connect again.","postiz.connectedTo":"Connected to {host}","postiz.connectedKey":"Connected to {host} with an API key","postiz.connectedOwn":"Your own Postiz is connected.","postiz.keyRefused":"Postiz no longer accepts the saved key. Enter a new one.","postiz.taken":"An MCP server named postiz is already set up. Remove it in MCP servers to connect here.","postiz.personScope":"Each person on your team connects their own Postiz.","postiz.disconnectConfirm":"Disconnect Postiz? Bots stop using it until you connect it again.","postiz.error.keyRejected":"Postiz didn’t accept this API key. Copy it again from Postiz → Settings → Public API.","postiz.error.unreachable":"Couldn’t reach a Postiz server at {host}. Check the address and try again.","postiz.error.notPostiz":"{host} didn’t answer like Postiz. Check the address. Postiz Cloud’s is https://api.postiz.com.","postiz.error.address":"Check the address: it starts with https:// and has no key or password in it.","postiz.error.testFailed":"Signed in, but Postiz’s tools could not be loaded: {reason} Please connect again.","table.title":"Table","table.search":"Search all rows…","table.wrap":"Wrap cell text","table.copy":"Copy results as CSV","table.copyPlain":"Copy table","table.download":"Download results as CSV","table.expand":"Expand table","table.close":"Close table","table.sort":"Sort by {column}","table.column":"Column {number}","table.count":"{shown} of {total} rows · {columns} columns","table.copied":"Copied","table.copyFailed":"Could not copy. Try downloading instead.","table.noResults":"No matching rows. Try a different search.","table.empty":"This table has no data rows.","code.wrap":"Wrap","code.unwrap":"Unwrap","code.wrapLong":"Wrap long lines","code.unwrapLong":"Disable line wrapping","code.save":"Save","code.saveTitle":"Download snippet as file","code.copy":"Copy","code.copyTitle":"Copy code","code.copyAria":"Copy code to clipboard","code.copied":"Copied","code.copiedTitle":"Copied to clipboard","code.copiedAria":"Code copied to clipboard","code.lineOne":"1 line","code.lines":"{count} lines","code.wrapLines":"Wrap lines","code.saveAsFile":"Save as file","code.caption":"{language} · {lines}","code.copySource":"Copy diagram source","code.showSource":"Show source","code.hideSource":"Hide source","code.mermaid":"Mermaid diagram","table.preview":"Preview table: {name}","html.preview":"Preview page: {name}","html.loading":"Opening page…","html.tooLarge":"This page is too large for an in-app preview (2 MB). Download the original to view it.","html.loadFailed":"Could not open this page. Check your connection and try again. UTF-8 HTML files are supported.","html.source":"View source","html.rendered":"View page","html.reload":"Reload","html.frameTitle":"Preview of {name}","html.openInBrowser":"Open {name} in your browser","html.openFailed":"Could not open this page in your browser.","markdown.preview":"Preview: {name}","markdown.loading":"Opening file…","markdown.tooLarge":"This file is too large for an in-app preview (2 MB). Download the original to view it.","markdown.loadFailed":"Could not open this file. Check your connection and try again. UTF-8 text files are supported.","markdown.rendered":"View formatted","table.loading":"Opening table…","table.tooLarge":"This file is too large for an in-app preview (10 MB, 100,000 rows, 200 columns or 500,000 cells). Download the original to view it all.","table.invalid":"This CSV/TSV could not be read as a table. Check its quotes and column counts, or download the original.","table.loadFailed":"Could not open this table. Check your connection and try again. UTF-8 CSV and TSV files are supported.","pro.name":"Limix Bot Cloud","pro.fromPrice":"Limix Bot Cloud plans from {price}/month + tax.","pro.seePlans":"Compare plans","pro.reauthShort":"Sign in again to use the Cloud on this computer. Your plan is not affected.","pro.openCloudSettings":"Limix Bot Cloud settings","pro.settingsSummary":"Keeps your bots and routines running 24/7, even when this computer is off.","pro.disclaimer":"Limix Bot on this computer stays free and open source.","notice.dismiss":"Dismiss for good","notice.notNow":"Not now","notice.openFailed":"Could not open your browser. Please try again.","server.moves.connectorStayedMail":"{name} stayed on {computer} when your bots moved to My Cloud, so bots here can't read or send mail through it. It keeps its accounts on {computer}, and it can't reach a mail server from here. To read and send mail from My Cloud, connect your mailbox under Connected apps.","server.moves.connectorStayedProgram":"{name} stayed on {computer} when your bots moved to My Cloud, so bots here can't use it. It needs {program}, which My Cloud doesn't have.","server.moves.connectorStayedHere":"{name} stayed on {computer} when your bots moved to My Cloud, so bots here can't use it. It uses files or an address only {computer} has.","server.moves.webhookMoved":'Now that I live on {place}, my webhook "{name}" has a new address. Open Automations, choose Copy address on "{name}", and paste it into the app that sends to it.',"server.teammates.sameRequest":"Another teammate asked the same a moment ago, so this gets that answer instead of a second one.","server.reports.sent":"Sent to the Limix Bot team (report {report}).","server.reports.sentReply":"Sent to the Limix Bot team (report {report}). We'll reply to {contact}.","server.reports.sentLater":"Sent to the Limix Bot team (report {report}) after an earlier try did not go through.","server.reports.sentLaterReply":"Sent to the Limix Bot team (report {report}) after an earlier try did not go through. We'll reply to {contact}.","server.reports.notYet":"Not sent yet: {why}. The report is saved and goes on its own {when}, so there is no need to send it again.","server.reports.why.limited":"the Limix Bot team takes only a few reports an hour from each app","server.reports.why.offline":"the Limix Bot team's server could not be reached","server.reports.why.busy":"the Limix Bot team's server could not take it right now","server.reports.when.minute":"in about {count} minute","server.reports.when.minutes":"in about {count} minutes","server.reports.when.soon":"as soon as it can","server.reports.refused":"The Limix Bot team's server refused this bug report, so nothing was sent: {detail}.","server.reports.full":"Not sent: {count} bug reports are already waiting to go to the Limix Bot team. Type @devs again once they have gone.","server.reports.dropped":"A bug report from this conversation could not reach the Limix Bot team for a week, so it was dropped. Type @devs again to send a new one.","server.reports.fixed":"Fixed in {version}. Want to try again?","server.questions.notAsked":"Not asked (Just do it): {question}","server.warmSummary.summarized":"summarized this conversation while it was idle; the latest messages carry on word for word","server.runs.didNotFinish":"This run didn't finish.","server.runs.didNotFinishWhy":"This run didn't finish: {detail}","server.runs.partlyDoneWhy":"This run was partly done: {detail}","server.runs.handoffApart":"{bot} couldn't hand this to {target}, because they're shared with different people. Nothing was sent.","server.runs.handoffRefusedTitle":"{bot}'s routine couldn't hand off its work","server.runs.recovered":"Recovered: {name} finished OK at {time}","server.runs.card.line":"Routine “{name}” {state}","server.runs.state.needsInput":"needs your input","server.runs.state.blocked":"was blocked","server.runs.state.limitReached":"reached its limit","server.runs.state.stopped":"was stopped","server.runs.state.failed":"failed","server.runs.state.waiting":"needs your attention","server.runs.state.completed":"completed","server.runs.state.cancelled":"was cancelled","server.runs.state.missed":"was missed","server.runs.state.deferred":"deferred: target busy","server.runs.state.queued":"queued","server.runs.state.running":"running","server.model.orgBlockedAnswered":"{picked} is turned off by your organization, so {answered} answered instead. Choose another model to stop seeing this.","server.model.otherAnswered":"You chose {picked}, but {answered} answered instead.","server.incidents.where.room":'in the room "{room}"',"server.problem.failed":"{bot} hit a problem: its run {where} failed","server.problem.failedWhy":'{bot} hit a problem: its run {where} failed: "{detail}"',"server.problem.stalled":"{bot} hit a problem: its run {where} stopped after showing no activity","server.problem.stalledWhy":'{bot} hit a problem: its run {where} stopped after showing no activity: "{detail}"',"server.problem.couldNotStart":"{bot} hit a problem: its run {where} could not start","server.problem.couldNotStartWhy":'{bot} hit a problem: its run {where} could not start: "{detail}"',"server.problem.routineFailed":"{bot} hit a problem: its scheduled routine {where} failed","server.problem.routineFailedWhy":'{bot} hit a problem: its scheduled routine {where} failed: "{detail}"',"server.incidents.where.thread":"in its thread #{title}","server.incidents.where.main":"in its main conversation","server.connect.signIn":"I need you to sign in to {site}.","server.connect.signInWhy":"I need you to sign in to {site}: {reason}","server.connect.app":"I need you to connect {app}.","server.connect.secret":"I need your {label}.","server.connect.card":"Connect {app} to continue.","server.connect.cardAs":"Connect {app} as “{account}” to continue.","server.connect.thisApp":"this app","server.connect.description":"Connect {app} so the bot can continue","server.connect.descriptionAs":"Connect {app} as “{account}” so the bot can continue","server.connect.signInCard":"{bot} needs you to sign in to {site}. Open this conversation in Limix Bot to sign in, then press Done.","server.connect.emailLabel":"Connect your mailbox","server.connect.emailNote":"Limix Bot finds your mail server and checks it can read your mail. {bot} never sees the password.","server.connect.emailPlaceholder":"Mailbox password","server.connect.secretHandoff":"Securely provide the {label} from Limix Bot on your phone or computer. It is never added to chat.","server.connect.secretFile":"{bot}'s commands can read it from a private file for 24 hours; it is never added to chat.","server.connect.secretRef":"{bot} gets a one-use reference for Limix Bot's own tools and never sees it.","server.connect.secretKept":"Limix Bot keeps it safely, so {bot} can use it again without asking you.","server.connect.secretNeverRead":"{bot} can use it but never read it back.","server.connect.emailOutgoingLabel":"Outgoing server for {address}","server.connect.emailOutgoingNote":"Enter where it sends mail from. {bot} never sees the password.","server.connect.emailOutgoingPlaceholder":"Password for sending","server.mcp.added":"Added MCP server {name}","server.mcp.changed":"Changed MCP server {name}","server.mcp.turnedOn":"Turned on MCP server {name}","server.mcp.turnedOff":"Turned off MCP server {name}","server.mcp.restarted":"Restarted MCP server {name}","server.mcp.tested":"Tested MCP server {name}","server.mcp.signedOut":"Signed out of MCP server {name}","server.mcp.removed":"Removed MCP server {name}","server.skillSwitch.enable.title":'Turn on skill "{name}"?',"server.skillSwitch.enable.body":"The bot can use this skill again.","server.skillSwitch.enable.done":'Skill "{name}" turned on',"server.skillSwitch.disable.title":'Turn off skill "{name}"?',"server.skillSwitch.disable.body":"The bot stops using this skill until it is turned on again. Nothing is deleted.","server.skillSwitch.disable.done":'Skill "{name}" turned off',"server.skillSwitch.delete.title":'Delete skill "{name}"?',"server.skillSwitch.delete.body":"Removes this skill and all its files from the bot for good. Its SKILL.md is shown below, with any secrets hidden.","server.skillSwitch.delete.done":'Skill "{name}" deleted',"server.mcp.listed":"Checked MCP servers","server.mcp.on":"Turned on","server.mcp.switchedOff":"Switched off","server.mcp.keysCleared":"Saved keys cleared","server.mcp.alsoOn":"Also on for {names}: switch it off for one in its settings, under Apps it can use","server.mcp.testTools.one":"Test: {count} tool","server.mcp.testTools.many":"Test: {count} tools","server.mcp.testSignIn":"Test: needs sign-in","server.mcp.testKey":"Test: needs a key","server.mcp.testFailed":"Test: failed","server.mcp.askedTurnOn":"Asked to turn on MCP server {name}","server.mcp.askedChange":"Asked to change MCP server {name}","server.mcp.askedRemove":"Asked to remove MCP server {name}","server.mcp.card.turnOn":"Turn on {name}?","server.mcp.card.change":"Change {name}?","server.mcp.card.remove":"Remove {name}?","server.mcp.card.internet":"Reached over the internet. Once on, your bots can use its tools.","server.mcp.card.local":"Runs on this computer.","server.mcp.card.elsewhere":"Runs on {computer}.","server.mcp.card.newKey":"new key for {key}","server.mcp.card.cleared":"Clears the saved {items}.","server.mcp.card.usedBy":"Used by {names}.","server.mcp.card.usedByNone":"No other bot uses it.","server.mcp.card.newClientSecret":"new OAuth client secret","server.mcp.card.keyExpired":"The key expired before this was answered.","server.mcp.card.gone":"{name} no longer exists.","server.mcp.card.changedSince":"{name} changed after this was asked, so nothing was applied.","server.mcp.card.restarted":"Limix Bot restarted, so this request expired.","server.mcp.card.failed":"This change couldn't be applied.","server.mcp.askedSignIn":"Asked to sign in to MCP server {name}","server.mcp.signIn.card":"{label}'s MCP server needs a sign-in. Open this conversation in Limix Bot to sign in.","server.mcp.signIn.description":"{bot} added {label}'s MCP server ({host}). Sign in so {bot} can use it.","server.mcp.signIn.onYourMac":"Open this chat on your Mac to sign in to {label}.","server.mcp.signIn.inSettings":"Finish this sign-in in Apps → MCP servers.","server.mcp.signIn.onlyPerson":"Only {name} can sign in to this.","server.mcp.signIn.onlyOwner":"Only the person this chat is for can sign in to this.","server.mcp.signIn.adminOnly":"Only an admin of this installation can sign in to {label}.","server.mcp.signIn.expired":"The sign-in window closed. Try again.","server.mcp.signIn.failed":"The sign-in didn't finish. Try again.","server.notify.message":"Message from {who}","server.notify.workingFor":"{who}, working for {other}","server.notify.approval":"{who} needs approval","server.notify.question":"{who} has a question","server.notify.signIn":"{who} needs you to sign in to {site}","server.notify.signInWebsite":"{who} needs you to sign in to a website","server.notify.secret":"{who} needs your {label}","server.notify.connect":"{who} needs you to connect {app}","server.notify.routineFailed":"{who}'s routine failed","server.notify.routineDeferred":"{who}'s routine is waiting","server.notify.turnFailed":"{who} couldn't start","server.notify.incident":"{who} hit a problem","server.notify.delegationSettled":"{who} resumed with results","server.notify.mention":"{who} mentioned you","server.notify.wait":"{who}'s wait is over","server.notify.done":"{who} finished","server.notify.inRoom":"{bot} in {room}","server.notify.assistantAnswered":"{title} · your assistant answered","server.notify.resultsFrom":"Results in from {who}","server.notify.openToSignIn":"Open Limix Bot to sign in to {site}.","server.rooms.finishingElsewhere":"{bot} is finishing another conversation — will reply here when free","server.rooms.finishingElsewhereSpoken":"{bot} is finishing another conversation","server.rooms.unavailable":"{bot} is no longer available — skipped this round","server.rooms.chiefRetargeted":"{chief} is the Chief of Staff now, so it leads this room in place of {former}.","server.stop.nothingRunning":"Nothing was running here, so nothing needed stopping.","server.memory.wait":"Waiting for memory on this Cloud. Running now: {running}. Ahead of this one: {ahead}. It starts by itself when there's room.","server.memory.still":"Still waiting for memory. Running now: {running}. Ahead of this one: {ahead}.","server.memory.starter":"Starter has room for about one task at a time. A bigger plan runs more at once.","server.planTurns.wait":"Waiting for a turn: Starter runs {limit} tasks at once on this Cloud. Ahead of this one: {ahead}. It starts by itself when one finishes, and a bigger plan runs more at once.","server.planTurns.still":"Still waiting: Starter runs {limit} tasks at once. Ahead of this one: {ahead}.","server.botPaused":"Paused: Starter keeps {limit} bots awake. Upgrade to wake it, or swap which bots are awake.","server.teammates.queued.thread":"{bot} hasn't started this yet: an earlier turn in that thread is still running.","server.teammates.queued.slots":"{bot} hasn't started this yet: it's already running {busy} of {limit} threads at once.","server.teammates.queued.room":"{bot} hasn't started this yet: it's finishing a turn in a room.","server.queued.capacity":"Queued. Starts when this bot has a free thread slot.","server.queued.capacityStarter":"Queued. Starter runs one thread at a time per bot, so this starts when the one running finishes. A bigger plan runs more.","server.queued.groupTurn":"Queued. This bot's room turn runs one at a time; it starts when that finishes.","server.rooms.stayedBusy.one":"{bot} stayed busy in another conversation for {count} minute — skipped this round","server.rooms.stayedBusy.many":"{bot} stayed busy in another conversation for {count} minutes — skipped this round","server.rooms.busyElsewhere":"{bot} is busy in another conversation — skipped this round","server.rooms.settingsChanged":"{bot}'s settings changed while starting — skipped this round","server.rooms.providerUpdating":"{bot}'s computer provider is being updated — skipped this round","server.rooms.cloudComputerChanging":"{bot}'s cloud computer is being changed — skipped this round","server.rooms.becameBusy":"{bot} became busy in another conversation — skipped this round","server.rooms.mentionMissed":"{bot} isn't in this room, so that mention didn't reach them — add them to the room to bring them in.","server.rooms.archived":"{bot} is archived and can't respond — restore it or mention an active room member.","server.rooms.sameName.two":'Two bots here are named "{name}": {first} and {second}. Pick the one you mean from the @ list.',"server.rooms.sameName.many":'{count} bots here are named "{name}": {choices}. Pick the one you mean from the @ list.',"server.rooms.sameName.choice":"{name}, {role}","server.rooms.sameName.chief":"Chief of Staff","server.rooms.sameNameMissed":'More than one bot here is named "{name}", so that mention reached none of them.',"server.rooms.noneActive":"No active room members can respond — restore an archived bot or add an active member.","server.rooms.stillStopping":"{bot} is still stopping — this message was not dispatched","server.rooms.someoneStillStopping":"A room member is still stopping — this message was not dispatched","server.outside.confinedHere":"Work from outside came into this conversation, so this bot works here without a shell. Start a new conversation to use it fully.","server.outside.bulletinTitle":"Change this group chat's instructions?","server.outside.memoryTitle":"Save this to the bot's memory?","server.outside.memoryChangeTitle":"Change or remove this in the bot's memory?","server.outside.save":"Save","server.outside.skip":"Skip","server.rooms.postedIn":"Posted in {room}","server.rooms.openedThread":"Opened thread #{title}","server.rooms.held":"{bot} is held (stopped by you) — @mention it or say resume","server.rooms.finishedNoSummary":"{bot} finished without a summary","server.rooms.finishedNoSummaryAsking":"{bot} finished without a summary — asking for a short result","server.rooms.turnStalled.one":"{bot}'s room turn made no progress for {count} minute and was stopped","server.rooms.turnStalled.many":"{bot}'s room turn made no progress for {count} minutes and was stopped","server.rooms.compactedRequested":"compacted {bot}'s context ({percent}% full): fresh session with the room's recent messages","server.rooms.compactedThreshold":"{bot}'s context was {percent}% full: compacted to a fresh session with the room's recent messages","server.teammates.sent":"Sent to {bot}","server.teammates.sentInRoom":"Sent to {bot} · {room}","server.teammates.sentDirectly":"Sent to {bot} directly: it isn't in {room}.","server.teammates.sentDirectlyHere":"Sent to {bot} directly: it isn't in this room.","server.teammates.teammateWork":"Teammate work","server.teammates.goalCoordinating":"{bot} is coordinating this goal.","server.teammates.goal.working":"Goal in progress: {detail}","server.burst.preview":"Burst ready: {count} tasks. Press Run on its card to start.","server.burst.running":"Burst running: {done} of {total} done, {failed} failed.","server.burst.merging":"Burst finished: writing one result.","server.burst.done":"Burst finished: {done} of {total} done, {failed} failed.","server.burst.cancelled":"Burst cancelled.","server.burst.partFailed":"did not finish ({reason})","server.burst.partsHeader":"The parts of this burst, as they came: {task}","server.teammates.goal.completed":"Goal completed: {detail}","server.teammates.goal.needsInput":"Goal needs your input: {detail}","server.teammates.goal.blocked":"Goal blocked: {detail}","server.teammates.goal.limitReached":"Goal reached its limit: {detail}","server.teammates.goal.paused":"Goal paused: {detail}","server.teammates.goal.stopped":"Goal stopped: {detail}","server.teammates.goal.failed":"Goal failed: {detail}","server.teammates.noAnswerInTime":"Nobody answered {who}'s question in time","server.teammates.stillWaiting":"Still waiting on your answer: {question} This work closes in {days} days if nobody answers.","server.teammates.stillWaitingCard":"This work is still waiting on you. It closes in {days} days if nothing changes.","server.teammates.noApprovalInTime":"Nobody answered {who}'s approval in time — that step did not run","server.teammates.approvalAsk.one":"{who} needed your approval for {actions}, but nobody answered in time, so it did not run. Let it try again? It will ask you once more when it runs.","server.teammates.approvalAsk.many":"{who} needed your approval for {actions}, but nobody answered in time, so they did not run. Let it try again? It will ask you once more when it runs.","server.teammates.approvalAsk.retry":"Try again","server.teammates.turnEndedBeforeAnswer":"{who}'s turn ended before anyone answered its question","server.teammates.approvalClosed":"{who}'s approval closed before anyone answered — that step did not run","server.teammates.questionDismissed":"{who}'s question was dismissed","server.teammates.requestDenied":"{who}'s request was denied","server.teammates.gotYourAnswer":"{who} got your answer","server.teammates.gotYourApproval":"{who} got your approval","server.teammates.questionAnswered":"{who}'s question was answered","server.teammates.requestApproved":"{who}'s request was approved","server.teammates.queuedBehind.answer":"Queued for @{bot} behind your answer in “{title}”","server.teammates.queuedBehind.approval":"Queued for @{bot} behind your approval in “{title}”","server.teammates.queuedBehind.review":"Queued for @{bot} behind your review in “{title}”","server.teammates.recalled.one":"{bot} recalled {count} message from its private chat with you","server.teammates.recalled.many":"{bot} recalled {count} messages from its private chat with you","server.teammates.briefCovers.one":"{bot}'s recent-work brief covers {count} private chat with you","server.teammates.briefCovers.many":"{bot}'s recent-work brief covers {count} private chats with you","server.teammates.closedBy":"Closed by @{bot}","server.teammates.sendFailed":"Send failed — {detail}","server.teammates.resultWithheld":"Result withheld: {problem}","server.teammates.replied":"{bot} replied","server.teammates.repliedInRoom":"{bot} replied · {room}","server.teammates.failed":"{bot} — failed: {detail}","server.teammates.cancelled":"{bot} — cancelled: {detail}","server.teammates.other":"{bot} — {status}: {detail}","server.teammates.teammate":"Teammate","server.teammates.room":"Room","server.teammates.resumedQuestion":"Resumed with a question from {who}, reviewing","server.teammates.resumedQuestionRestart":"Resumed with a question from {who} after a restart, reviewing","server.teammates.resumedResults":"Resumed with {who} results, reviewing","server.teammates.resumedResultsRestart":"Resumed with {who} results after a restart, reviewing","server.teammates.backWithResults":"Back with the work it handed on, reviewing","server.teammates.backWithResultsRestart":"Back with the work it handed on after a restart, reviewing","server.teammates.handedWork":"work it handed on","server.lendingLift.title":"Let {bot} use your {device} for this?","server.lendingLift.wholeBotTitle":"{bot}'s notes changed in work you didn't write. Let it keep using your {device}?","server.lendingLift.memory":"Its notes changed in work you didn't write:","server.lendingLift.botOpened":"A bot opened this conversation with work for this bot. Allow lets only this message of yours use your {device}.","server.lendingLift.outside":"A webhook or a routine you didn't write posted in this conversation. Allow lets only this message of yours use your {device}.","server.lendingLift.more":"More in this bot's settings, under Memory.","server.lendingLift.allow":"Allow","server.lendingLift.notNow":"Not now","server.lendingLift.askAgain":"Allowed. Ask again to go on.","server.teammates.answerPassed":"Answer passed to the waiting work","server.teammates.answeredForPerson":"Answered {name}'s question for the person","server.teammates.personReplied":"{name} replied","server.teammates.personAssistantAnswered":"{name}'s assistant answered","server.teammates.told":"Told {name}","server.noAi.member":"{owner} needs to connect an AI before bots can answer. I've told them.","server.noAi.memberNoOwner":"The team's owner needs to connect an AI before bots can answer. I'll tell them when they first open the team.","server.noAi.admin":"Connect an AI first, so bots can answer.","server.noAi.nobodyHere":"No AI is connected yet, so nothing can run.","server.noAi.ownerTitle":"Connect an AI for {team}","server.noAi.ownerLine":"{name} tried to use a bot in {team}, but no AI is connected yet. Connect one so bots can answer.","server.teammates.notPassed":"Not passed to {name}","server.mcp.reconnect.one":"The MCP server {name} didn't connect, so its tools weren't available this time. It connects again on your next message.","server.mcp.problem.signIn":"{name} needs you to sign in before its tools work. Open Apps → MCP servers and sign in to it.","server.mcp.problem.refused":"{name} refused its sign-in or key. Open Apps → MCP servers to sign in again or update its key.","server.mcp.problem.notFound":"{name} wasn't found at its address. Check the address in Apps → MCP servers.","server.mcp.problem.timeout":"{name} didn't answer in time. Try again in a moment, and if it keeps happening, test it in Apps → MCP servers.","server.mcp.problem.cantConnect":"Couldn't connect to {name}. Test it in Apps → MCP servers to see why.","server.mcp.reconnect.many":"The MCP servers {names} didn't connect, so their tools weren't available this time. They connect again on your next message.","server.bots.nameClash":'{person} is also a person here, so "@{name}" reaches {person}, not this bot. Rename the bot to keep them apart.',"star.title":"Enjoying {app}?","star.body":"A star on GitHub helps more people find it.","star.button":"Star on GitHub","productHunt.title":"We're live on Product Hunt","productHunt.body":"Limix Bot just launched. An upvote would mean a lot to us.","productHunt.button":"Upvote on Product Hunt","boatOffer.title":"$50 of Boat credit for you","boatOffer.body":"Boat runs the cloud computers behind Limix Bot. Buy Boat's $100 plan or bigger, then tell Boat that Limix Bot sent you, and they'll add $50 in credits to your Boat account.","boatOffer.yourself":"You claim it yourself: it isn't automatic.","boatOffer.get":"Get Boat","boatOffer.claim":"I bought it: claim my $50","boatOffer.mailFailed":"Couldn't open your email app. Write to {address} instead.","modelgoOffer.title":"ModelGo is now in Limix Bot","modelgoOffer.line":"One API key, every model.","modelgoOffer.sponsor":"Sponsor","modelgoOffer.getKey":"Get a ModelGo key","modelgoOffer.name":"ModelGo","modelgoOffer.link":"Get a key","cloudIntro.badge.one":"Free for 1 day","cloudIntro.badge.many":"Free for {days} days","cloudIntro.title":"Keep your bots working when this computer is off","cloudIntro.body":"Limix Bot Cloud runs your bots for you in the cloud, always on.","cloudIntro.routines":"Routines run on time, day and night","cloudIntro.phone":"Reach your bots from your phone, even with this computer off","cloudIntro.credit":"{credit} of Claude credit to start","cloudIntro.included":"Voice and cloud desktops by Boat included","cloudIntro.price":"Then from {price}/month + tax. Cancel any time.","cloudIntro.start":"Start free trial","cloudIntro.howTo":"Show me how","cloudIntro.later":"You can add a Cloud any time from the menu on the left of the app.","whatsNew.eyebrow":"What's new","whatsNew.slideOf":"Slide {n} of {count}","whatsNew.next":"Next","whatsNew.back":"Back","whatsNew.cloud.title":"Meet the new Limix Bot Cloud","whatsNew.cloud.body":"Your bots keep working when this computer is off. The new Cloud website puts your Clouds, team, billing and usage in one place.","whatsNew.cloud.see":"See the new Cloud","whatsNew.cloud.pictureAlt":"The new Cloud website's Home: each Cloud with its plan and status, this month's usage and the apps signed in.","whatsNew.team.title":"Shared bots for your whole team","whatsNew.team.bodyInbox":"Everyone chats with the same bots, like one Support bot and one Sales bot, and hands them work. Each person's own Limix Bot is their inbox: anything for them lands there.","whatsNew.team.picture":"Ada, Ben, Cleo and Dara, each with their own Limix Bot, share the team's Support and Sales bots on one Team Cloud.","whatsNew.team.apps":"Connected apps, set up once for everyone","whatsNew.team.groupChats":"Group chats with teammates and bots together","whatsNew.team.memory":"Team memory the bots share","whatsNew.team.handoff":"Bots hand work to each other across the team","whatsNew.team.accessUse":"Choose who can use each bot","whatsNew.team.start":"Start a Team","whatsNew.team.support":"Support","whatsNew.team.sales":"Sales","cloudHowTo.title":"Add a Cloud from here","cloudHowTo.body":"Click this menu, then choose Add a Cloud. It's also where you switch between this computer and the Cloud.","cloudHowTo.skip":"Skip","cloudHowTo.nextTime":"Next time, Add a Cloud is in the menu on the left of the app.","cloudAdd.title":"Add a Cloud","cloudAdd.popular":"Most popular","cloudAdd.hours":"{hours} cloud desktop hours a month","cloudAdd.today":"Today","cloudAdd.moneyBack":"{days}-day money-back on every plan.","cloudAdd.close":"Close","cloudAdd.checking":"Checking with Limix Bot Cloud…","cloudAdd.unreachable":"Can't reach Limix Bot Cloud right now. Check your connection and try again.","cloudAdd.tryAgain":"Try again","cloudAdd.failed":"Checkout couldn't open. Nothing was charged. Try again.","cloudAdd.rateLimited":"You've opened several checkouts in the last hour. Use the one in your browser, or try again later.","cloudAdd.browserTitle":"Finish in your browser","cloudAdd.opening":"Opening your browser…","cloudAdd.signInStep1":"Sign in with your email.","cloudAdd.signInStep3Trial":"Connect this app, then start your free trial.","cloudAdd.signInStep3":"Connect this app, then continue to checkout.","cloudAdd.signInStep3Connect":"Connect this app.","cloudAdd.reopenBrowser":"Reopen browser","cloudAdd.cancel":"Cancel","cloudAdd.reopenCheckout":"Reopen checkout","cloudAdd.changePlan":"Change plan","cloudAdd.codeExpired":"The sign-in code expired, so nothing changed. Start again when you're ready.","cloudAdd.signInEnded":"The sign-in ended before this app was connected, so nothing changed. Start again when you're ready.","cloudAdd.preparing":"A checkout is already being prepared. Try again in a moment.","cloudAdd.receivedTitle":"Payment received","cloudBuy.title":"Your bots, always on.","cloudBuy.lede":"Runs your bots 24/7 in the cloud, even when this computer is off.","cloudBuy.includes":"Every plan includes","cloudBuy.benefit.awayTitle":"Works while you're away","cloudBuy.benefit.away":"Routines, long jobs and replies keep going around the clock.","cloudBuy.benefit.privateTitle":"Private to you","cloudBuy.benefit.private":"Your own machine, encrypted, with daily backups.","cloudBuy.benefit.anywhereTitle":"Reach it from anywhere","cloudBuy.benefit.anywhere":"Talk to the same bots from your phone or any computer.","cloudBuy.benefit.browserTitle":"A real browser and desktop","cloudBuy.benefit.browser":"Bots can sign in to websites and use apps for you.","cloudBuy.benefit.moveTitle":"Bring everything over","cloudBuy.benefit.move":"Your bots, chats and memory move across in about a minute.","cloudBuy.choose":"Choose your plan","cloudBuy.perMonth":"/month","cloudBuy.sleeps":"Sleeps when idle, wakes in about a second","cloudBuy.promise.starter":"Your bots keep working with your laptop closed, at the lowest price.","cloudBuy.promise.pro":"Your bots keep working 24/7, even when your laptop is closed.","cloudBuy.promise.max":"The biggest cloud machine, for bots that use computers all day.","cloudBuy.promise.team":"One shared Cloud for up to {seats} people: bots, group chats and roles your whole team uses.","cloudBuy.card.get":"Get {plan}","cloudBuy.card.current":"Your plan","cloudBuy.card.trial.one":"Free for 1 day, then {price}/month + tax","cloudBuy.card.trial.many":"Free for {days} days, then {price}/month + tax","cloudBuy.card.paid":"{price} + tax today, then each month","cloudBuy.row.alwaysOn":"Always on, around the clock","cloudBuy.row.desktops":"Cloud desktops: as many as your bots need","cloudBuy.row.machine":"{cpus} · {memory} GB memory","cloudBuy.row.swap":"Plus {swap} GB of swap","cloudBuy.row.storage":"{gb} GB storage","cloudBuy.row.storageGrows":"{gb} GB storage, grows to {max} GB","cloudBuy.row.backups":"Daily backups, kept {days} days","cloudBuy.trialTerms":"Card needed, nothing charged until your trial ends. Cancel in the app any time.","cloudBuy.timeline.firstPayment":"First payment","cloudBuy.plan.limit":"Fair use: up to {count} at once","cloudBuy.plan.voiceMinutes":"Voice replies: about {minutes} minutes of speech a month","cloudBuy.plan.voiceHour":"Voice replies: about an hour of speech a month","cloudBuy.plan.voiceHours":"Voice replies: about {hours} hours of speech a month","cloudBuy.plan.cpusShared":"{count} shared CPUs","cloudBuy.plan.cpus":"{count} CPUs","cloudBuy.timeline":"What happens when","cloudBuy.timeline.start":"Trial starts","cloudBuy.timeline.startCredit":"Trial starts, with {credit} of Claude credit","cloudBuy.timeline.reminder":"Reminder email","cloudBuy.secure":"Secure checkout in your browser","cloudBuy.wallets":"Pay with Apple Pay, Google Pay or a card","cloudBuy.applePay":"Apple Pay","cloudBuy.googlePay":"G Pay","cloudBuy.card":"Card","cloudBuy.cancelEasy":"Cancel in two clicks","cloudBuy.moneyBack":"{days}-day money-back","cloudBuy.haveAccount":"Already have a plan? Sign in","cloudBuy.termsChanged":"You're signed in. These are the plans for your account, so check the price before you continue.","cloudBuy.back":"Plans","cloudBuy.signIn.title":"Create your Limix Bot account","cloudBuy.signIn.titlePlain":"Sign in to Limix Bot Cloud","cloudBuy.signIn.sub":"We'll email you a code. No password to remember.","cloudBuy.signIn.email":"Email","cloudBuy.signIn.send":"Send code","cloudBuy.signIn.fromProfile":"Uses the email from your profile. You can change it.","cloudBuy.signIn.codeLabel":"Enter the 8-digit code sent to {email}","cloudBuy.signIn.change":"Change","cloudBuy.signIn.digit":"Digit {n} of 8","cloudBuy.signIn.resendIn":"Resend code in {time}","cloudBuy.signIn.resend":"Didn't get it? Resend code","cloudBuy.signIn.checking":"Checking the code…","cloudBuy.signIn.done":"Signed in. Opening secure checkout…","cloudBuy.signIn.donePlain":"Signed in.","cloudBuy.signIn.ssoHint":"Work account with single sign-on?","cloudBuy.signIn.continueBrowser":"Continue in browser","cloudBuy.signIn.invalidEmail":"Enter an email address like name@example.com.","cloudBuy.signIn.rateLimited":"Too many codes were asked for just now. Wait a minute, then try again.","cloudBuy.signIn.failed":"Couldn't reach Limix Bot Cloud. Check your connection and try again.","cloudBuy.signIn.wrongCode":"That code isn't right. {count} tries left.","cloudBuy.signIn.wrongCodeOne":"That code isn't right. 1 try left.","cloudBuy.signIn.expired":"That code can't be used any more. Send a new one.","cloudBuy.signIn.newCode":"Send a new code","cloudBuy.signIn.signupClosed":"New Cloud accounts aren't available yet.","cloudBuy.signIn.signupClosedNote":"New Limix Bot accounts aren't open yet: a code comes only if this email already has one. Change it to the one you signed up with.","cloudBuy.signIn.deviceLimit":"This account has too many computers signed in. Sign one out on your Plan page, then try again.","cloudBuy.signIn.sso":"Your organization uses single sign-on.","cloudBuy.signIn.twoFactor":"This account uses two-step verification, so it signs in through your browser.","cloudBuy.signIn.browser":"Limix Bot Cloud signs this app in through your browser.","cloudBuy.pay.sub":"Checkout opened in your browser. Pay there and this window moves on by itself.","cloudBuy.pay.subSignIn":"Your browser shows the next step. Pay there and this window moves on by itself.","cloudBuy.pay.signedIn":"Signed in","cloudBuy.pay.waiting":"Waiting for your payment","cloudBuy.pay.planTrial.one":"{plan} · free for 1 day · {due} today","cloudBuy.pay.planTrial.many":"{plan} · free for {days} days · {due} today","cloudBuy.pay.planPaid":"{plan} · {price}/month + tax","cloudBuy.pay.setup":"Set up your new Cloud","cloudBuy.pay.setupHint":"About 2 minutes, all automatic","cloudBuy.pay.copy":"Copy link","cloudBuy.pay.copied":"Link copied","cloudBuy.pay.lateTitle":"We haven't seen a payment yet.","cloudBuy.pay.lateSub":"If you paid, it shows up here within a few minutes. If not, reopen checkout or choose another plan.","cloudBuy.pay.failed":"Checkout couldn't open again. Nothing was charged. Try again in a moment.","cloudBuy.setup.badgeTrial":"{plan} trial started","cloudBuy.setup.badgeCredit":"{plan} trial started · {credit} Claude credit added","cloudBuy.setup.badgePaid":"{plan} started","cloudBuy.setup.title":"Setting up your new Cloud","cloudBuy.setup.sub":"About 2 minutes. Keep working if you like, it opens when it's ready.","cloudBuy.setup.progress":"Setup progress","cloudBuy.step.starting":"Starting {name}","cloudBuy.setup.name":"Name it","cloudBuy.setup.color":"Pick a colour","cloudBuy.setup.preview":"In your switcher","cloudBuy.setup.previewLine":"{plan} · always on","cloudBuy.setup.previewLineSleeps":"{plan} · sleeps when idle","cloudBuy.setup.open":"Open {name}","cloudBuy.setup.openingIn":"Opening in {seconds}…","cloudBuy.ready.title":"{name} is ready","cloudBuy.ready.sub":"It keeps your bots running 24/7, even when this computer is off.","cloudBuy.ready.hint":"Switch between This computer and {name} from the menu at the top of the sidebar.","cloudBuy.openFailed":"{name} didn't open. Try again in a minute.","cloudBuy.color.blue":"Blue","cloudBuy.color.teal":"Teal","cloudBuy.color.purple":"Purple","cloudBuy.color.orange":"Orange","cloudBuy.color.red":"Red","cloudBuy.color.yellow":"Yellow","cloudBuy.one.title":"One Cloud per account for now","cloudBuy.one.sub":"You have {name}. More than one Cloud per account is coming. Want an email when you can add another?","cloudBuy.one.email":"Email me when I can add another","cloudBuy.one.thanks":"Thanks. We'll email you when you can add another Cloud.","cloudBuy.one.failed":"Couldn't reach Limix Bot Cloud, so nothing was saved. Try again.","cloudBuy.color.slate":"Slate","cloudBuy.extra.defaultName":"Cloud {number}","cloudBuy.extra.nameTitle":"Name your new Cloud","cloudBuy.extra.nameSub":"It gets its own bots, people, apps and plan.","cloudBuy.extra.continue":"Continue to checkout","cloudBuy.extra.setupTitle":"Setting up {name}","cloudBuy.extra.setupSub":"About 2 minutes. Keep working if you like; we'll tell you when it's ready.","cloudBuy.extra.readySub":"It has its own bots, people, apps and plan. Switch to it from the left edge of the window any time.","cloudBuy.extra.lateSub":"If you paid, it shows up here within a few minutes. If not, reopen checkout.","cloudBuy.extra.problem":"The payment for {name} didn't go through. Update it on your Plan page.","cloudBuy.extra.signupsClosed":"New Clouds can't be bought right now. Try again later.","cloudBuy.extra.checkoutOpen":"A checkout for another Cloud is already open. Finish it in your browser first.","rail.label":"Where your bots live","rail.thisComputer":"This computer","rail.thisMac":"This Mac","rail.thisPc":"This PC","rail.profile":"{name}: a separate place on this computer, with its own bots. The bots on My Cloud stay there.","rail.settingUp":"{name}: setting up","rail.waiting":"{name}: waiting for payment","rail.attention":"{name}: needs you","rail.more":"Show all {count}","rail.search":"Find a Cloud","rail.noMatch":"Nothing matches.","rail.add":"Add a Cloud or your own server","rail.buy":"Buy a Cloud","rail.buySub":"A new Cloud with its own bots, people, apps and plan, always on.","rail.org":"New organization","rail.orgSub":"Another Cloud on your Team plan, with its own people and bots. Nothing more to pay.","rail.orgLede":"It gets its own Cloud, people, bots, apps and keys. It's part of your Team plan: no new plan, nothing to pay now.","rail.orgName":"Name","rail.orgColor":"Color","rail.orgPlaceholder":"A client or team","rail.orgCount":"Organization {count} of {max}","rail.orgCreate":"Create organization","rail.orgTaken":"Another of your organizations has that name. Choose another.","rail.orgLimit":"Your Team plan has as many organizations as it can have. Email us to add more.","rail.orgRate":"Too many organizations were added just now. Try again in a few minutes.","rail.orgNoPlan":"Your Team plan isn't running right now, so no organization can be added. Its billing on the Cloud page says why.","rail.orgOff":"New organizations aren't available right now.","rail.orgFailed":"Nothing was added. Try again in a moment.","rail.connect":"Connect","rail.back":"Back","rail.ownServer":"{name}, your own server","rail.offline":"{name}: offline","rail.lastSeen":"{name}: offline, last seen {when}","rail.notConnected":"{name}: connect it to this app","rail.ownNetwork":"Only reachable on its own network","rail.update":"on {version}, {latest} is out","rail.connectTitle":"Connect {name}","connect.title":"Connect to a server","connect.choiceSub":"A server of your own: a VPS, a Mac mini at home, or a computer on your Tailscale network.","connect.lede":"Paste the link the server printed, or type its address and pairing code. Its bots stay on the server.","connect.signedInLede":"It's signed in to your account already. Paste its link, or type its address and a pairing code.","connect.address":"Link or address","connect.addressPlaceholder":"https://maus.example.com or 192.168.1.20:8799","connect.code":"Pairing code","connect.noCode":"No code? On the server, run:","connect.addAddress":"Now add the server's address, like {example}.","connect.found":"{name} · Limix Bot {version}","connect.found.https":"HTTPS","connect.found.tailscale":"Tailscale","connect.found.privateHttp":"Private network, not encrypted. Fine on your own network or Tailscale.","connect.found.loopback":"This computer","connect.checking":"Looking for the server…","connect.to":"Connect to {name}","connect.copy":"Copy","connect.copied":"Copied","rail.hide":"Hide your computers","rail.show":"Show your computers","rail.showSub":"An icon for each place your bots live, on the left of the app.","settings.windowFrame.title":"Window frame","settings.windowFrame.subtitle":"A thin bar across the top that says where you are, with the chat in a rounded card. Off, the window looks as it did before.","settings.windowFrame.restart":"Takes effect when {app} restarts.","settings.windowFrame.restartNow":"Restart now","rail.ended":"{name}: ended","rail.remove":"Remove from list","rail.makeHome":"Make {name} my home","rail.makeHomeSub":"Moves this computer's bots, chats, memory and routines to {name}, and this computer then works for it.","rail.makeHomeFailed":"Your bots didn't start moving. Try again in a moment.","twoPlaces.title":"Bring your bots together","twoPlaces.body":"Your bots live in two places, so they can't work together. Bring them together on {place}?","twoPlaces.bring":"Bring them together","twoPlaces.failed":"Your bots didn't start moving. Try again in a moment.","twoPlaces.confirmTitle":"Move this computer's bots to {place}?","twoPlaces.confirm":"This computer's bots, with their chats and automations, move to {place} and work there from now on.","twoPlaces.undo":"To bring them back later, turn on “Keep this computer's bots on this computer” in Settings > Limix Bot Cloud (Advanced mode).","twoPlaces.move":"Move bots","rail.removeAsk":"Remove “{name}” from your list? You can buy a new Cloud any time.","rail.removeServerAsk":"Remove “{name}” from your list? This app signs out of it there; nothing on it changes.","rail.removeYes":"Remove","rail.removeNo":"Cancel","rail.removeRefused":"It can't be removed right now: it is running again, or still has a plan.","rail.removeFailed":"It wasn't removed. Check your connection and try again.","rail.addAny":"Add a place for your bots","rail.searchAny":"Find a place","rail.local":"New workspace on this computer","rail.localSub":"A separate place on this computer, with its own bots, chats and files.","rail.localPreview":"On this computer","rail.localCreate":"Create","rail.localTaken":"Another place here has that name. Choose another.","rail.localFailed":"That didn't work. Try again in a moment.","rail.localWork":"Work","rail.localPersonal":"Personal","rail.localNumbered":"Workspace {count}","rail.localPlace":"{name}: a separate place on this computer, with its own bots","rail.settling":"{name} opens once {bot} finishes","rail.settlingAny":"{name} opens once the work there finishes","rail.cloudLabel":"{label}, Cloud","rail.rename":"Rename","rail.renameSave":"Save","rail.localRemove":"Remove from this computer","rail.localRemoveAsk":"Remove “{name}”? Its bots, chats and files on this computer are deleted. Its folder goes to the Trash first.","rail.localRemoveAskWin":"Remove “{name}”? Its bots, chats and files on this computer are deleted. Its folder goes to the Recycle Bin first.","rail.localRemoveFailed":"It wasn't removed. Try again in a moment.","placeLook.title":"Color","placeLook.sub":"{name} shows in this color at the top of the sidebar and on its icon on the left of the app.","placeLook.aria":"Color of {name}","placeLook.member":"Only its admins can change its color.","placeLook.signedOut":"Sign in to Limix Bot Cloud to change its color.","placeLook.unsupported":"This Cloud's color can't be changed from the app yet.","placeLook.failed":"The color wasn't saved. Try again.","placeLook.none":"None","placeLook.sidebarColor":"Sidebar color","placeLook.sidebarColorSub":"Tints the top of the sidebar.","placeLook.sidebarPicture":"Sidebar picture","placeLook.sidebarPictureSub":"Your own image, faded into the top of the sidebar.","placeLook.pictureSub":"Your own image, faded into the top of the sidebar. Everyone here sees it.","placeLook.sharedPictureSub":"An image faded into the top of the sidebar. Everyone who uses these bots sees it.","placeLook.useImage":"Use an image","placeLook.changeImage":"Change image","placeLook.removeImage":"Remove","placeLook.currentImage":"Current picture","placeLook.imageAdmins":"Only its admins can change its picture.","placeLook.imageFormat":"Use a PNG, JPEG or WebP picture.","placeLook.imageRead":"That picture couldn't be read. Try another one.","placeLook.imageSize":"That picture is too large. Try a smaller one.","placeLook.imageMoving":"Use a still picture.","placeLook.imageFailed":"The picture wasn't saved. Try again.","placeLook.imageSaving":"Saving…","cloudBuy.team.setupTitle":"Setting up your team's Cloud","cloudBuy.team.setupSub":"About 2 minutes. Keep working if you like; you can open it here once it's ready.","cloudBuy.team.unnamed":"your team's Cloud","cloudBuy.team.readyTitle":"Your team's Cloud is ready","cloudBuy.team.readySub":"{name} keeps your team's bots running 24/7, even when this computer is off.","cloudBuy.staging":"Staging","cloudBuy.stagingHint":"This app uses the staging Limix Bot Cloud: test payments and test Clouds, not real ones.","cloudNotice.signIn.title":"Sign in again to reach the Cloud","cloudNotice.signIn.hint":"Your plan and your bots there are not affected.","cloudNotice.removed.title":"This computer was signed out of Limix Bot Cloud","cloudNotice.removed.hint":"Its saved sign-in couldn't be read, so it was removed.","voice.grok.label":"Grok (xAI)","voice.grok.host":"Host · Grok","voice.grok.sharedKey":"Grok uses this installation’s existing xAI key.","voice.gemini.keyPlaceholder":"Paste your Google AI Studio API key","voice.gemini.model":"Gemini speech model","keys.label.geminiTts":"Gemini speech API key","keys.purpose.geminiTts":"Gemini voices for spoken replies, voice notes and calls","voice.fish.label":"Fish Audio","voice.host":"Host voice","voice.hostLabel":"Host · {provider}","voice.title":"Voice","voice.macChoice":"Choose whether this Mac speaks with its installed voices or audio generated by the host.","voice.agentChoice":"Choose this agent’s voice and spoken-reply preference.","voice.description":"Give this agent a voice for calls and spoken replies. The voice choice belongs to this agent;","voice.macInstalled":"the voices are the ones already installed on this Mac.","voice.macUnavailable":"built-in Mac voices are unavailable here. Switch to a hosted voice provider to keep using voice.","voice.chatterboxShared":"the Chatterbox server address is shared by this installation.","voice.providerShared":"the {provider} key is shared by this installation.","voice.provider":"voice provider","voice.macOutput":"Voice output on this Mac","voice.macBuiltIn":"Built-in Mac voices","voice.hostNotConfigured":"Voice output is not configured on the host","voice.engine":"Voice provider","voice.macOnly":"Built-in voices are available only on macOS","voice.providerKey":"{provider} key","voice.connected":"Connected","voice.getKey":"Get a key from {provider}","voice.chatterboxServer":"Chatterbox server","voice.chatterboxAddress":"Chatterbox server address","voice.chatterboxModelPlaceholder":"Model ID (default: chatterbox-turbo)","voice.chatterboxModel":"Chatterbox model","voice.chatterboxHelp":"Any OpenAI-compatible server running Chatterbox works, no key needed.","voice.chatterboxHowTo":"How to run one locally","voice.loading":"Loading voices…","voice.macDefault":"Mac system default","voice.search":"Search voices or paste a link","voice.noMatches":"No voices match","voice.noMatchesHint":"Try another name, or paste a link to the voice.","voice.yourVoices":"Your voices","voice.library":"ElevenLabs Voice Library","voice.libraryHint":"Picking one adds it to your voices.","voice.adding":"Adding…","voice.pick":"Pick a voice","voice.current":"Current agent voice","voice.hear":"Hear this voice","voice.pickFirst":"Pick a voice first","voice.try":"Try","voice.readReplies":"Read replies aloud","voice.readRepliesHelp":"Speak this agent’s answers as they arrive, even from another chat.","voice.notes":"Voice notes","voice.notesHelp":"Let this agent send spoken notes; on unless switched off here.","voice.everyReply":"Voice note with every reply","voice.everyReply.allHelp":"Every bot also sends each reply as a voice note. You can turn it on or off for one bot in that bot's settings.","voice.everyReply.followsOn":"Uses your Voice setting (on)","voice.everyReply.followsOff":"Uses your Voice setting (off)","voice.everyReply.own":"Set for this bot.","voice.everyReply.follow":"Use your Voice setting","voice.yourVoice":"Your {provider} voice","voice.usesYours":"This bot speaks in your {provider} voice. Pick another above to give it its own.","voice.usesOwn":"This bot speaks in its own voice.","voice.notifications.title":"Notifications","voice.notifications.help":"Get notified when this agent finishes or needs input","voice.notifications.label":"Agent notifications","voice.fish.keyPlaceholder":"Paste your Fish Audio API key","voice.elevenlabs.keyPlaceholder":"Paste your ElevenLabs API key","voice.elevenlabs.label":"ElevenLabs","voice.chatterboxLabel":"Chatterbox","voice.chatterboxLocal":"Chatterbox (local)","voice.serverAddressError":"The server address must start with http:// or https://","voice.grok.ready":"The xAI key is saved. Grok detects the spoken language from your text.","voice.grok.missingKey":"Add an xAI API key in Settings → API keys on the host to use Grok voice.","voice.fish.model":"Fish Audio model","voice.fish.modelPro":"s2.1-pro (default)","voice.fish.modelFree":"s2.1-pro-free (free for developers)","voice.fish.modelHint":"Pick the model your Fish Audio plan covers. It applies to every agent on this installation.","call.voiceSetup.open":"Set up voice","call.voiceSetup.title":"Give {name} a voice","call.voiceSetup.subtitle":"Choose a voice provider, add its key if it needs one, then pick a voice.","call.voiceSetup.close":"Close voice set-up","call.voiceSetup.loading":"Loading voice settings…","call.voiceSetup.ready":"Voice is ready. You can call {name} now.","call.voiceSetup.startCall":"Start call","call.voiceSetup.allSettings":"All voice settings","toolDetail.label":"{name} · {status} · Tool details","toolDetail.input":"Input","toolDetail.output":"Result","toolDetail.running":"Running","toolDetail.failed":"Failed","toolDetail.completed":"Completed","toolDetail.unverified":"No result","toolDetail.waiting":"Waiting for the tool to finish…","toolDetail.noOutput":"No output was recorded for this call.","toolDetail.loadingFull":"Loading the full result…","toolDetail.partial":"Showing the start of the result only: the rest could not be loaded.","toolDetail.previewHint":"Shortened, automatically redacted preview. Review before sharing.","toolDetail.tool":"Tool","toolStep.runCommand":"Run a command","toolStep.readFile":"Read a file","toolStep.writeFile":"Write a file","toolStep.editFile":"Edit a file","toolStep.deleteFile":"Delete a file","toolStep.searchFiles":"Search files","toolStep.searchWeb":"Search the web","toolStep.openWebPage":"Open a web page","toolStep.lookAtScreen":"Look at the screen","toolStep.useComputer":"Use the screen","toolStep.useBrowser":"Use the browser","toolStep.updatePlan":"Update the plan","toolStep.askHelper":"Hand a task to a helper","toolStep.think":"Think","toolStep.checkTeam":"Check the team","toolStep.manageAutomations":"Manage automations","toolStep.checkAutomations":"Check automations","toolStep.useTool":"Use a tool","toolStep.usingWhose":"using {person}'s {app}","attach.gallery":"Attachments","attach.gallerySingle":"1 attachment","attach.galleryCount":"{count} attachments","attach.showMore":"Show {count} more","attach.moreCount":"+{count} more","attach.showLess":"Show less","attach.video":"Video","attach.image":"Image","attach.file":"File","attach.previewVideo":"Preview {name}","attach.loadVideo":"Load video","attach.closeVideo":"Close video preview","attach.videoHint":"Loads on request · up to 25 MB","attach.videoLoading":"Loading video…","attach.videoUnavailable":"This video cannot be played here. You can still save a copy.","attach.previewAudio":"Play {name}","attach.audioUnavailable":"This audio cannot be played here. You can still save a copy.","attach.fileTooLarge":"Preview is limited to 25 MB.","attach.previewTooLarge":"This file is {size}, over the {limit} preview limit. You can still download it below.","teamImport.backupCopies":"Imported bots and departments are added as new copies; duplicate names get numbered.","teamImport.newSection":"Adds a new department for {name}. Existing departments stay unchanged; duplicate names get numbered.","teamImport.sharedTeam":"{count} bots · shared department","teamImport.brief":"Shared instructions","teamImport.skillsOff":"Included skills (added switched off)","teamImport.skillsReview":"Review each skill in its bot profile before switching it on. Imported instructions do not run automatically.","teamImport.offeredSkills":"Offered skills (not added to any bot)","teamImport.connections":"Connections to finish: {count} · keys and passwords are never included","teamImport.notes":"Starter notes: {count}","teamImport.routinesPaused":"Routines: {count} · paused","teamImport.presets":"Preset bots: {count} · appear in New bot","teamImport.library":"Preset bots and skills · no department","teamImport.librarySafety":"The preset bots appear in New bot, above the built-in roles. No bots, departments or routines are added. A bot you make from one of these presets gets its skills switched off. Model choices, computers, approval levels and connected apps are never included.","teamImport.libraryAdds":"Adds preset bots to New bot.","teamImport.addPresets":"Add presets","teamImport.presetList":"Preset bots (added to New bot)","teamImport.sharedTeamSafety":"Bots, pictures, shared instructions, the Chief of Staff, group chats, playbooks and starter notes are added. Skills arrive switched off and routines paused. Connections arrive without their keys; finish them in Apps → MCP servers. Chat history, keys and passwords, model choices and computers are never included.","noEngines.title":"Install a model provider to get started","noEngines.intro":"{app} doesn't ship a model of its own. Your bots run on an AI CLI installed on this computer, using your existing login. Set up any one of these and your bots come alive.","engines.cloud":"Cloud","engines.local":"Local","common.checkAgain":"Check again","common.checking":"Checking…","approval.someone":"Someone","approval.tool.action":"an action","approval.tool.runCommand":"run a command","approval.tool.readFile":"read a file","approval.tool.writeFile":"write a file","approval.tool.editFile":"edit a file","approval.tool.fetchWebPage":"fetch a web page","approval.tool.searchWeb":"search the web","approval.tool.scheduleRoutine":"schedule a routine","approval.tool.changeRoutine":"change a routine","approval.tool.enableSkill":"enable a learned skill","approval.tool.updateSkill":"update a learned skill","approval.tool.updateProfile":"update its profile","approval.tool.deleteFile":"delete a file","approval.tool.think":"think","approval.tool.takeAction":"take an action","approval.tool.useTool":"use a tool","approval.card.namedWantsTo":"{name} wants to {action}","approval.card.wantsTo":"Wants to {action}","approval.card.profileWantsToOwn":"{name} wants to update its profile","approval.card.profileWantsToOther":"{name} wants to update @{target}'s profile","approval.compact.wantsToRun":"{name} wants to run","approval.compact.maySend":"May send","approval.outbound.sendTo":"Send to {app}?","approval.outbound.sendOnBehalf":"Send on your behalf?","approval.outbound.runCode":"Run code on {app}?","approval.outbound.more":"+{count} more","approval.aria.routineDetails":"Routine details","approval.aria.skillDetails":"Skill details","approval.aria.profileChange":"Profile change","approval.aria.details":"Approval details","approval.status.routineScheduled":"Routine scheduled","approval.status.routineUpdated":"Routine updated","approval.status.routinePaused":"Routine paused","approval.status.routineResumed":"Routine resumed","approval.status.routineRunQueued":"Routine run queued","approval.status.routineDeleted":"Routine deleted","approval.status.skillEnabled":"Skill enabled","approval.status.skillUpdated":"Skill updated","approval.status.skillTurnedOn":"Skill turned on","approval.status.skillTurnedOff":"Skill turned off","approval.status.skillDeleted":"Skill deleted","approval.status.profileUpdated":"Profile updated","approval.status.routineConfirmed":"Routine confirmed","approval.status.skillConfirmed":"Skill confirmed","approval.status.allowed":"Allowed","approval.status.cancelled":"Cancelled","approval.status.denied":"Denied","approval.status.byVoice":"by voice","approval.status.byReaction":"by reaction","approval.status.expired":"Expired. Ask for a fresh proposal.","approval.status.timedOut":"No answer in time. It did not run","approval.status.waitingConfirmation":"Waiting for your confirmation below","approval.status.waitingAnswer":"Waiting for your answer below","approval.status.modelChanged":"Default model changed","approval.status.undone":"Undone","approval.applied.forBot":"for {target}","approval.applied.skill.create":"{name} added a skill: {title}","approval.applied.skill.update":"{name} updated a skill: {title}","approval.applied.skill.enable":"{name} turned on a skill: {title}","approval.applied.skill.disable":"{name} turned off a skill: {title}","approval.applied.skill.delete":"{name} deleted a skill: {title}","approval.applied.profileOwn":"{name} updated its profile: {title}","approval.applied.profileOther":"{name} updated {target}'s profile: {title}","approval.applied.modelOwn":"{name} changed its default model: {title}","approval.applied.modelOther":"{name} changed {target}'s default model: {title}","approval.applied.teamSetup":"{name} set up the team: {title}","approval.applied.teamAdded":"added {names}","approval.applied.teamUpdated":"updated {names}","approval.applied.botDeleted":"{name} deleted {target}","approval.applied.wait":"{name} is waiting for {title}","approval.applied.waitFired":"{name} finished waiting for {title}","approval.applied.waitExpired":"{name} stopped waiting for {title}","approval.applied.waitCancelled":"{name}'s wait for {title} was cancelled","approval.applied.teamMemory":"{name} saved to department memory: {title}","approval.applied.field.name":"name","approval.applied.field.title":"title","approval.applied.field.description":"description","approval.applied.field.soul":"standing instructions","approval.applied.field.cwd":"working folder","approval.applied.field.notifications":"alerts","approval.applied.field.speakReplies":"spoken replies","approval.applied.today":"today {time}","approval.applied.undo":"Undo","approval.applied.undoing":"Undoing…","approval.applied.undone":"Undone","approval.applied.details":"Details","approval.applied.hideDetails":"Hide details","approval.applied.changedSince":"Changed since, so it can't be undone here.","approval.applied.undoFailed":"Couldn't undo: {error}","approval.applied.cancelling":"Cancelling…","approval.applied.cancelFailed":"Couldn't cancel the wait. Try again, or ask {name} to stop it.","approval.applied.shareSkill":"Share with department","approval.applied.sharingSkill":"Sharing…","approval.applied.sharedSkill":"shared with {names}","approval.applied.sharedSkillNobody":"shared with the department","approval.applied.shareSkipped":"not shared with {names}: they have their own skill with this name","approval.applied.shareFailed":"Couldn't share: {error}","approval.aria.appliedDetails":"What changed","question.card.named":"{name} has a question","question.card.title":"Your bot has a question","question.showFull":"Show full question","question.showLess":"Show less","question.origin.badge":"Agent-composed question","question.tab.numbered":"Question {index}","question.progress":"{answered} of {count} answered","question.multiHint":"Choose all that apply","question.other":"Other","question.otherPlaceholder":"Type your own answer","question.submit":"Submit answer","question.submitAll":"Submit answers","question.status.answered":"Answered","question.status.waiting":"Waiting for your answer","question.status.closed":"Closed without an answer","question.decided.deciding":"{name} decides this","question.decided.picked":"Picked by {name}:","question.decided.own":"{name} picks this","question.decided.change":"Change","question.decided.answer":"Answer yourself","question.answerPlaceholder":"Type your answer","question.details":"Details","question.hideDetails":"Hide details","question.aria.card":"Question from your bot","question.aria.tabs":"Questions","question.somethingElse":"Something else…","ask.header.asks":"{name} asks","ask.settled.chose":"You chose:","ask.settled.answered":"You answered:","ask.settled.stopped":"Stopped before you answered","ask.settled.expired":"Expired before anyone answered","ask.error":"Couldn't send your answer. Try again.","ask.detail.more":"Show all","inbox.action.closeQuestion":"Close without answering","question.done":"Done","question.yourAnswer":"Your answer","approval.voice.defaultUpdateSkill":"Update this skill?","approval.voice.defaultEnableSkill":"Enable this skill?","approval.voice.actionUpdate":"update","approval.voice.actionEnable":"enable","approval.voice.skill":"{requester} asks: {title} Review the skill on screen. Should I {action} it?","approval.voice.defaultUpdateProfile":"Update this profile?","approval.voice.profile":"{requester} wants to update its profile: {title}. Review the change on screen. Should I confirm it?","approval.voice.command":"{requester} wants to {tool}. {detail}. Should I allow it?","approval.voice.defaultConfirmRoutine":"Confirm this routine?","approval.voice.routine":"{requester} asks: {title} Review the schedule and instructions on screen. Should I confirm it?","approval.label.updateSkill":"Update this learned skill","approval.label.enableSkill":"Enable this learned skill","approval.label.confirmProfileChange":"Confirm this profile change","approval.label.confirmRoutine":"Confirm this routine","approval.label.confirmRoutineChange":"Confirm this routine change","approval.label.commandRequested":"Command approval requested","approval.label.fileReadRequested":"File-read approval requested","approval.label.fileChangeRequested":"File-change approval requested","approval.label.requested":"Approval requested","approval.aria.pendingSkill":"Pending skill confirmation","approval.aria.pendingRoutine":"Pending routine confirmation","approval.aria.pendingProfile":"Pending profile confirmation","approval.aria.pending":"Pending approval","approval.pending":"Pending approval","approval.position":"{index} of {count}","approval.aria.reviewSkill":"Skill details to review","approval.aria.reviewRoutine":"Routine details to review","approval.aria.reviewProfile":"Profile change to review","approval.aria.reviewDetails":"Approval details to review","approval.action.cancelTurn":"Cancel turn","approval.action.cancel":"Cancel","approval.action.deny":"Deny","approval.action.stopAsking":"Stop asking {name} about {key}","approval.action.alwaysAllow":"Always allow","approval.action.alwaysAllowSession":"Always allow this session","approval.action.alwaysAllowSessionHint":"The provider stops asking about this action until the session ends","approval.action.alwaysAllowCommand":"Always allow this command","approval.action.alwaysAllowCommandHint":"Remember this exact command for this bot and provider in {cwd}, including other threads using that folder","commandAllowlist.title":"Command allowlist","commandAllowlist.manage":"Manage command allowlist","commandAllowlist.forBot":"Saved commands for {name}","commandAllowlist.scope":"Each rule allows one exact command for this bot, provider and working folder, including other threads using that folder. Rules stay saved until removed.","commandAllowlist.exact":"Enter the complete command. Prefixes and wildcards do not create broader permissions.","commandAllowlist.loading":"Loading allowed commands…","commandAllowlist.empty":"No commands saved yet.","commandAllowlist.unsupported":"This provider cannot use saved command approvals. You can still remove existing rules.","commandAllowlist.command":"Command","commandAllowlist.folder":"Working folder","commandAllowlist.provider":"Provider","commandAllowlist.add":"Add command","commandAllowlist.adding":"Adding…","commandAllowlist.remove":"Remove command","commandAllowlist.removeAria":"Remove allowed command: {command}","commandAllowlist.removing":"Removing…","commandAllowlist.retry":"Retry","commandAllowlist.close":"Close command allowlist","approval.action.update":"Update","approval.action.enable":"Enable","approval.action.confirm":"Confirm","approval.action.allowOnce":"Allow once","approval.yourComputer.browserSite":"I need to use your {app} where you're signed in to {site}. Allow once?","approval.yourComputer.browser":"I need to use your {app} where you're signed in. Allow once?","approval.yourComputer.site":"I need to use your browser where you're signed in to {site}. Allow once?","approval.yourComputer.app":"I need to use {app} on your computer. Allow once?","approval.yourComputer.screen":"I need to use your computer's screen for this. Allow once?","approval.yourComputer.detail":"{name} would see your screen and click and type on it, for this request only.","computerAsk.want.screen":"{name} wants to use your {device}'s apps and screen","computerAsk.want.folders":"{name} wants to use the files on your {device}","computerAsk.want.terminal":"{name} wants to run commands on your {device}","computerAsk.reason.paused":"Using your {device} is paused.","computerAsk.reason.starting":"Screen control is still starting on your {device}.","computerAsk.reason.permissions":"macOS hasn't allowed {app} to see and use the screen yet.","computerAsk.reason.blocked":"Screen control is blocked on your {device}.","computerAsk.reason.blockedPc":"Screen control is blocked on your PC: Windows Security may have stopped it.","computerAsk.reason.off":"Screen control is off on your {device}.","computerAsk.reason.notRunning":"Screen control isn't running on your {device}.","computerAsk.reason.unsupported":"Screen control can't work on your {device} right now.","computerAsk.reason.terminalOff":"Running commands isn't turned on for your {device}.","computerAsk.reason.closed":"{app} isn't open on your {device}. Open it there and {name} carries on.","computerAsk.reason.never":"{app} isn't on your computer yet. Install it, sign in to Limix Bot Cloud there, and {name} carries on.","computerAsk.reason.update":"{app} on your {device} needs an update first. Update it, and {name} carries on.","computerAsk.action.turnOn":"Turn on","computerAsk.action.tryAgain":"Try again","computerAsk.action.notNow":"Not now","computerAsk.action.getApp":"Get {app}","computerAsk.state.turningOn":"Turning on…","computerAsk.state.on":"Turned on. {name} is carrying on.","computerAsk.state.failed":"It didn't turn on.","computerAsk.state.declined":"Not now","computerAsk.state.ended":"No longer needed","approval.held.native":"The provider requires your approval for this action.","approval.held.sandbox":"This loosens the AI's own safety limits, so only Full access can approve it automatically.","approval.opaqueCode":"This runs code that could send or change things in your apps, so it always asks first.","approval.held.outbound":"This sends something on your behalf, so it asks you first.","approval.held.undeliveredFull":"Full access couldn't deliver this approval.","approval.held.undelivered":"Approve for me couldn't answer this one.","settings.title":"Settings","settings.search":"Search","settings.searchAria":"Search settings","settings.close":"Close settings","settings.license.expiring":"This installation's enterprise license expires on {date} ({days} day(s) left). Renew the key to keep enterprise features.","settings.license.grace":"This installation's enterprise license expired on {date}. Enterprise features keep working until {graceEnd}; renew the key before then.","settings.noMatch":"Nothing matches “{query}”","settings.section.general":"General","settings.section.desktopWorkspaces":"Servers","settings.section.organization":"Organization","settings.section.cloudAccount":"Limix Bot Cloud","cloudAccount.optional":"Limix Bot Cloud is optional. Free local use, your chats and your own model accounts remain available without signing in.","cloudAccount.separate":"Your personal Cloud account is separate from organization sign-in.","cloudAccount.desktopOnly":"Use Limix Bot Cloud in the local desktop app on this computer.","cloudAccount.loading":"Loading Cloud account…","cloudAccount.signIn":"Sign in to your Cloud plan","cloudAccount.browser":"Finish email-code sign-in and approve this computer in your browser. The app will connect automatically.","cloudAccount.codeCheck":"Check that your browser shows this code:","cloudAccount.codeUntil":"The code works until {time}.","cloudAccount.codeExpired":"The sign-in code expired. Choose Sign in to your Cloud plan to get a new one.","cloudAccount.pro":"{plan} active · verified by Limix Bot Cloud","cloudAccount.free":"No plan yet","cloudAccount.inactive":"{plan} · not active right now","cloudAccount.purchaseReceived":"{plan} · payment received","cloudAccount.purchaseNote":"Received {date}. We're linking it to this account, so there's no need to pay again.","cloudAccount.purchaseNoteNoDate":"We're linking your payment to this account, so there's no need to pay again.","cloudAccount.lastPlan":"{plan} · checking with Limix Bot Cloud…","cloudAccount.planName":"{plan} plan","cloudAccount.checking":"Checking with Limix Bot Cloud…","cloudAccount.attention":"Your plan is not active right now. Your Plan page shows why and how to fix it.","cloudAccount.otherEmail":"Bought a plan with a different email?","cloudAccount.useOtherEmail":"Sign out and use that email","cloudAccount.otherEmailOrTeam":"Bought a plan or joined a team with a different email?","cloudAccount.addOtherEmail":"Add that email","cloudAccount.upgrade":"Add a Cloud","cloudAccount.manage":"Manage Cloud subscription","cloudAccount.updatePayment":"Update payment in your browser","cloudAccount.dashboard":"Open your Plan page","cloudAccount.signInAgain":"Sign in again","cloudAccount.manageInBrowser":"Manage in your browser","cloudAccount.onCloud":"Your plan, as Limix Bot Cloud verified it for the app on your computer.","cloudAccount.onCloudHome":"Your plan, as Limix Bot Cloud verified it.","cloudAccount.onCloudNone":"Your plan is managed in the {app} app on your computer.","cloudAccount.teamPeopleTitle":"People and plan","cloudAccount.teamPeopleBody":"Invite people to {team}, change their roles and manage its plan on your Plan page. Sign in there with the email you use here.","cloudAccount.teamPeopleOpen":"Open your Plan page","cloudAccount.onCloudNoneHome":"Your plan is managed on your Plan page.","cloudAccount.onCloudSignIn":"This computer needs to sign in to Limix Bot Cloud again: choose Sign in again. Your plan is not affected.","cloudAccount.signOut":"Sign out of Limix Bot Cloud","cloudAccount.signoutTitle":"Sign out on this computer?","cloudAccount.signoutHelp":"This removes personal Cloud access from this computer. It does not cancel your subscription, disconnect your organization, or change local chats and model accounts.","cloudAccount.keep":"Keep signed in","cloudAccount.reauthExpired":"Your sign-in on this computer has ended (it lasts a set time). Sign in again to keep using the Cloud here. Your plan is not affected.","cloudAccount.reauthEnded":"This computer is no longer signed in to Limix Bot Cloud, for example because it was removed on your Plan page. Sign in again to use the Cloud here. Your plan is not affected.","cloudAccount.unavailable":"Limix Bot Cloud can't be reached right now, so this app can't check your plan. Nothing has changed with your plan; the app keeps trying.","cloudAccount.signoutLocalOnly":"Signed out on this computer. Limix Bot Cloud could not confirm it, so also remove this computer on your Plan page.","cloudAccount.storageFailed":"The saved Cloud sign-in could not be read or cleared. Choose Sign out of Limix Bot Cloud, then sign in again.","cloudAccount.restoreRetry":"This computer couldn't open its saved Cloud sign-in just now. The app tries again by itself, so there's nothing you need to do.","cloudAccount.restoreRetryKeychain":"This computer couldn't open its saved Cloud sign-in. Unlock your keychain, and the app tries again by itself.","cloudAccount.restoreRetryKeyring":"This computer couldn't open its saved Cloud sign-in. Unlock your system keyring, and the app tries again by itself.","cloudAccount.restoreRemoved":"This computer's Cloud sign-in couldn't be read, so it was removed. Sign in again.","cloudAccount.signinFailed":"Cloud sign-in ended or could not be completed. Start again on this computer.","cloudAccount.actionFailed":"Could not complete this Cloud action. Check your connection and try again.","cloudAccount.keepHere.title":"Keep this computer's bots on this computer","cloudAccount.keepHere.line":"This computer's bots, chats and automations stay here instead of moving to My Cloud.","cloudAccount.keepHere.confirmTitle":"Bring this computer's bots back here?","cloudAccount.keepHere.confirm":"This computer's bots come back from My Cloud with what they did there. Their automations run here again and stop on My Cloud, which keeps a copy of them. Your other computers don't change. The app opens again once they're here.","cloudAccount.keepHere.bringBack":"Bring them back","cloudAccount.keepHere.coming":"This computer's bots are on their way back from My Cloud.","cloudAccount.keepHere.failed":"The switch couldn't change. Try again.","cloudAccount.trialPlan":"{plan} free trial · verified by Limix Bot Cloud","cloudTrial.yourPlan":"your plan","cloudTrial.endsOn":"Your free trial ends on {date}","cloudTrial.active":"Then {plan} is {price}/month plus tax, charged on {date}. The Cloud keeps running, so there's nothing to do. To cancel, choose Manage subscription before then.","cloudTrial.activeNoPrice":"Then {plan} is charged monthly, plus tax, from {date}. The Cloud keeps running, so there's nothing to do. To cancel, choose Manage subscription before then.","cloudTrial.credit":"Includes {granted} of Claude credit: {left} left.","cloudTrial.preferPlan":"Prefer {plan} at {price}? Tell us from your Plan page before {date}, and we'll switch your plan.","cloudTrial.ending":"Renewal is off, so the Cloud stops then and its files are deleted on {date}.","cloudTrial.endingNoDate":"Renewal is off, so the Cloud stops then, and its files are deleted a few days later.","cloudTrial.cancelled":"Your subscription was cancelled, so the Cloud stops then and its files are deleted on {date}. To keep it, subscribe again once it has stopped.","cloudTrial.cancelledNoDate":"Your subscription was cancelled, so the Cloud stops then, and its files are deleted a few days later. To keep it, subscribe again once it has stopped.","cloudTrial.processingTitle":"Your first payment is processing","cloudTrial.processing":"The Cloud keeps running meanwhile, so there's nothing to do.","cloudTrial.lateTitle":"Your first payment is taking longer","cloudTrial.late":"The Cloud is paused until it goes through, and comes back by itself. Its files are kept until {date}.","cloudTrial.lateNoDate":"The Cloud is paused until it goes through, and comes back by itself.","cloudTrial.endedTitle":"Your free trial has ended","cloudTrial.ended":"The Cloud is stopped. Its files are kept until {date}, then deleted.","cloudTrial.endedNoDate":"The Cloud is stopped, and its files are deleted soon.","cloudTrial.manage":"Manage subscription","cloudTrial.subscribe":"Subscribe to keep it","cloudTrial.checkPayment":"Check payment status","cloudTrial.ok":"OK","cloudCancel.cancelTrial":"Cancel trial","cloudCancel.cancelPlan":"Cancel plan","cloudCancel.titleTrial":"Cancel your trial","cloudCancel.titlePlan":"Cancel your plan","cloudCancel.runsTrial":"Your trial runs until {date}.","cloudCancel.runsPlan":"Your plan runs until {date}.","cloudCancel.nothingCharged":"Cancel now and nothing is charged.","cloudCancel.noMoreCharges":"Cancel now and you won't be charged again.","cloudCancel.teamStops":"{team}'s Cloud stops then, for everyone in the team.","cloudCancel.question":"Before you go: what's the main reason?","cloudCancel.answer.feature":"Missing a feature","cloudCancel.answer.price":"Too expensive","cloudCancel.answer.setup":"Hard to set up","cloudCancel.answer.broken":"Didn't work as I expected","cloudCancel.answer.later":"Not using it right now","cloudCancel.answer.other":"Something else","cloudCancel.expected":"What did you expect Limix Bot to do?","cloudCancel.improve":"What could we have done better?","cloudCancel.optional":"(optional)","cloudCancel.talk":"Rather talk it through?","cloudCancel.book":"Book 30 minutes with Milind","cloudCancel.keep":"Keep my plan","cloudCancel.confirmTrial":"Cancel my trial","cloudCancel.confirmPlan":"Cancel my plan","cloudCancel.cancelling":"Cancelling…","cloudCancel.keeping":"Keeping…","cloudCancel.endedTrial":"Cancelled. Your trial ends on {date}, and nothing is charged.","cloudCancel.endedTrialNoDate":"Cancelled. Nothing is charged when your trial ends.","cloudCancel.endedPlan":"Cancelled. Your plan ends on {date}. You won't be charged again.","cloudCancel.endedPlanNoDate":"Cancelled. Your plan ends with the period you paid for. You won't be charged again.","cloudCancel.stops":"The Cloud stops then.","cloudCancel.keptDays":"Its files are kept {days} days, then deleted.","cloudCancel.keptDay":"Its files are kept 1 day, then deleted.","cloudCancel.keptHours":"Its files are kept {hours} hours, then deleted.","cloudCancel.keptNone":"Its files are deleted when it stops.","cloudCancel.thanks":"Thanks. Milind and Omkar read every answer, and we'll write back if it's something we can build.","cloudCancel.changedMind":"Changed your mind?","cloudCancel.done":"Done","cloudCancel.close":"Close","cloudCancel.browser":"The Cloud page's Billing opened in your browser. You can do it there.","cloudCancel.failed":"That didn't go through, and nothing changed. Try again in a minute.","cloudCredit.left":"Trial Claude credit: {left} of {granted} left. Cloud bots use it until you sign in there with your own Claude or ChatGPT account, or add an API key.","cloudCredit.usedUp":"Your {granted} trial Claude credit is used up. To keep your bots working, sign in with your own Claude or ChatGPT account in the Cloud, or add an API key there.","engines.trialCredit":"Included with your free trial. Cloud bots use it until you sign in with your own Claude or ChatGPT account, or add an API key.","engines.trialCreditOwn":"Your own AI is connected, so bots use it instead of the trial Claude credit.","engines.trialCreditUsedUp":"Your trial Claude credit is used up. Sign in with your own Claude or ChatGPT account, or add an API key, to keep your bots working.","engines.trialCreditEnded":"Trial Claude credit isn't available in the Cloud anymore. Sign in with your own Claude or ChatGPT account, or add an API key.","engines.trialCreditPaused":"Trial Claude credit is paused for now. Try again later, or sign in with your own Claude or ChatGPT account, or add an API key.","engines.trialCreditTooLow":"Your trial Claude credit has too little left for this chat. Start a new chat, or sign in with your own Claude or ChatGPT account, or add an API key.","chat.error.connectOwnAi":"Connect your own AI","cloudPhone.title":"Your phone","cloudPhone.subtitle":"Pair the phone app with the Cloud instead of this computer, and it keeps working when this computer is off.","cloudPhone.action":"Use the Cloud on your phone","cloudPhone.help":"Opens the Cloud in this window, at its phone pairing. Create a code there and scan it with the phone app.","cloudPhone.notReady":"The Cloud is not ready yet. Once it is, it takes two steps:","cloudPhone.stepsIntro":"You can also do it in two steps:","cloudPhone.failed":"Could not open the Cloud.","cloudPhone.step1":"Open My Cloud in this window: Server menu → My Cloud.","cloudPhone.step2":"Open the menu under your name, choose Connect your phone, and scan the code with the phone app.","cloudSend.list.skillOne":"1 skill","cloudSend.list.skills":"{count} skills","cloudSend.list.loginOne":"1 login","cloudSend.list.secretOne":"1 secret","cloudSend.list.logins":"{count} logins","cloudSend.list.secrets":"{count} secrets","cloudSend.list.onePassword":"1Password","cloudSend.list.settings":"your settings","cloudSend.list.botOne":"1 bot","cloudSend.list.changedBotOne":"changes to 1 bot","cloudSend.list.changedBots":"changes to {count} bots","cloudSend.list.bots":"{count} bots","cloudSend.list.chatOne":"1 chat","cloudSend.list.chats":"{count} chats","cloudSend.list.messageOne":"1 new message","cloudSend.list.messages":"{count} new messages","cloudSend.strip.retry":"Try again","cloudSend.strip.arrived":"{list} came over from This computer.","cloudSend.strip.allHere":"Everything from This computer is here.","cloudSend.strip.close":"Close","cloudSend.list.routineOne":"1 routine","cloudSend.list.routines":"{count} routines","cloudSend.result.held":"Your {key} key is saved on My Cloud. Your bots use it once the trial's Claude credit runs out.","cloudSend.move.copy":"Moving your bots to My Cloud…","cloudSend.move.copyChats":"Moving your bots to My Cloud… {done} of {total} chats","cloudSend.move.bringing":"Bringing this computer's bots to My Cloud…","cloudSend.move.bringingChats":"Bringing this computer's bots to My Cloud… {done} of {total} chats","cloudSend.move.waiting":"Moving your bots to My Cloud… waiting for {name} to finish","cloudSend.move.waitingAny":"Moving your bots to My Cloud… waiting for your bots to finish","cloudSend.move.waitingSignIn":"Moving your bots to My Cloud… waiting for a sign-in to finish","cloudSend.move.finishing":"Moving to My Cloud… almost done","cloudSend.move.checking":"Moving to My Cloud… checking that everything arrived","cloudSend.move.checkingChats":"Moving to My Cloud… checking {bots} bots' chats there, {percent}%","cloudSend.move.checkingChatsOne":"Moving to My Cloud… checking your bot's chats there, {percent}%","cloudSend.move.checkingFiles":"Moving to My Cloud… checking your bots' files there, {percent}%","cloudSend.move.checkingAttachments":"Moving to My Cloud… checking your chats' attachments there, {percent}%","cloudSend.move.slow":"My Cloud is slow to answer. Your move goes on from where it was at {time}.","cloudSend.move.queued":"Waiting for {name} to finish moving to My Cloud. Your bots move right after.","cloudSend.move.queuedAny":"Waiting for your other computer to finish moving to My Cloud. Your bots move right after.","cloudSend.choose.title":"Move your bots to My Cloud","cloudSend.choose.line":"Choose which bots move. The others stay on this computer and keep working here.","cloudSend.choose.everything":"Move everything","cloudSend.choose.moveSome":"Move {count} bots","cloudSend.choose.moveOne":"Move 1 bot","cloudSend.choose.search":"Search your bots","cloudSend.choose.selectAll":"Select all","cloudSend.choose.clear":"Clear","cloudSend.choose.none":"No bots match.","cloudSend.choose.more":"Show {count} more","cloudSend.choose.rooms":"A room moves when all of its bots do.","cloudSend.choose.failed":"Couldn't start the move. Try again.","cloudSend.choose.unclicked":"Choose which bots move.","cloudSend.botMove.menu":"Move to My Cloud","cloudSend.botMove.confirmTitle":"Move {bot} to My Cloud?","cloudSend.botMove.confirmBody":"{bot}'s chats, skills, memory and routines go with it, and it works on My Cloud from then on. Your other bots stay on this computer.","cloudSend.botMove.confirm":"Move","cloudSend.botMove.moving":"Moving {bot} to My Cloud…","cloudSend.botMove.movingMany":"Moving {count} bots to My Cloud…","cloudSend.botMove.done":"{bot} lives on My Cloud now.","cloudSend.botMove.doneMany":"{count} bots live on My Cloud now.","cloudSend.botMove.failed":"{bot} couldn't move to My Cloud yet. It's still here, and it tries again by itself.","cloudSend.botMove.failedMany":"{count} bots couldn't move to My Cloud yet. They're still here, and it tries again by itself.","cloudSend.botMove.open":"Open My Cloud","cloudSend.botMove.movedOne":"{bot} lives on My Cloud","cloudSend.botMove.movedMany":"{count} bots live on My Cloud","cloudSend.move.updating":"My Cloud is updating. Your move starts when it's done.","cloudSend.move.failing":"Your bots couldn't move to My Cloud yet: {error}","cloudSend.move.failingPlain":"Your bots couldn't move to My Cloud yet.","cloudSend.move.copyNamed":"Moving your bots to {place}…","cloudSend.move.copyChatsNamed":"Moving your bots to {place}… {done} of {total} chats","cloudSend.move.waitingNamed":"Moving your bots to {place}… waiting for {name} to finish","cloudSend.move.waitingAnyNamed":"Moving your bots to {place}… waiting for your bots to finish","cloudSend.move.waitingSignInNamed":"Moving your bots to {place}… waiting for a sign-in to finish","cloudSend.move.finishingNamed":"Moving to {place}… almost done","cloudSend.move.checkingNamed":"Moving to {place}… checking that everything arrived","cloudSend.move.checkingChatsNamed":"Moving to {place}… checking {bots} bots' chats there, {percent}%","cloudSend.move.slowNamed":"{place} is slow to answer. Your move goes on from where it was at {time}.","cloudSend.move.updatingNamed":"Update Limix Bot on {place}. Your bots move there once it's updated.","cloudSend.move.failingNamed":"Your bots couldn't move to {place} yet: {error}","cloudSend.move.failingPlainNamed":"Your bots couldn't move to {place} yet.","cloudSend.move.done":"Everything from this computer is here: {list}.","cloudSend.move.doneAll":"Everything from this computer is here.","cloudSend.move.doneLeft":"Everything else from this computer is here. These stayed on it:","cloudSend.move.stayedNeeds":"{name}: it needs {program}, which isn't here, so bots here can't use it.","cloudSend.move.stayedHere":"{name}: it only works on that computer, so bots here can't use it.","cloudSend.move.phone":"Pair your phone with My Cloud","cloudSend.move.homeAgain":"My Cloud has ended, so your bots are back on this computer. What you did on My Cloud is on its way back too.","cloudSend.move.back":"My Cloud has ended, so your bots are back on this computer, with what you did on My Cloud. Logins and keys you added on My Cloud didn't come back: add them here again if you need them.","cloudSend.move.backLost":"My Cloud has ended, so your bots are back on this computer as they were when they moved. What you did on My Cloud since couldn't come back.","cloudSend.move.backGone":"The Cloud your bots moved to has ended, so they're back on this computer as they were when they moved. Their automations are off: switch on the ones you want.","cloudSend.move.elsewhere":"Your bots came back to {name}. This computer keeps its copy from {date}, with automations off.","cloudSend.move.elsewhereEmpty":"Your bots came back to {name}.","cloudSend.move.keeping":"Bringing this computer's bots back from My Cloud…","cloudSend.move.keepingUpdating":"My Cloud is updating. This computer's bots come back once it's done.","cloudSend.move.kept":"This computer's bots are back here, and their automations run on this computer. My Cloud keeps a copy of them with their automations off.","files.title":"Files","files.shared.title":"Shared with the Cloud","files.shared.help":"Cloud bots can use these folders, even when this computer is off. They change files here only in folders you let them edit.","files.empty":"Nothing shared yet.","files.add":"Add a folder","files.more":"More for {name}","files.openHere":"Open on this computer","files.stop":"Stop sharing","files.stop.title":"Stop sharing “{name}”?","files.stop.body":"The Cloud's copy moves to its trash for 30 days. Nothing on this computer changes.","files.status.synced":"Up to date","files.status.copying":"Copying… {done} of {files}","files.status.waiting":"Waiting for room in the Cloud","files.status.deletes":"{count} files were removed from this folder here. Remove them from the Cloud too?","files.status.deletesOne":"1 file was removed from this folder here. Remove it from the Cloud too?","files.status.missing":"Can't find this folder. Was it moved?","files.status.keptBoth":"Kept both versions of “{file}”: yours, and the bot's as “{copy}”.","files.status.problem":"Something went wrong with this folder. Check that it still exists, then try again.","files.moreSpace":"Get more space","files.deletes.remove":"Remove from the Cloud","files.deletes.keep":"Keep them","files.locate":"Find it","files.count":"{count} files","files.countOne":"1 file","files.countMore":"More than {count} files","files.share.title":"Share “{name}” with the Cloud?","files.share.body":"{size}. The Cloud keeps a copy and updates it when you change files here. Cloud bots can read it.","files.share.confirm":"Share","files.refusal.tooBroad":"That folder is too big to share. Choose a folder inside it, like one in Documents.","files.refusal.appData":"That's Limix Bot's own folder. Choose another one.","files.refusal.alreadyShared":"This folder is already shared.","files.refusal.notAFolder":"Choose a folder.","files.refusal.notAFolderListed":"Not a folder on this computer.","files.refusal.private":"That folder holds private keys or settings, so it isn't shared. Choose another one.","files.refusal.other":"This folder can't be shared.","files.suggest.title":"Share these folders with the Cloud?","files.suggest.body":"The Cloud keeps a copy of each and updates it when you change files here. Cloud bots can read them.","files.ok":"OK","files.cancel":"Cancel","files.storage":"{used} of {total} used in the Cloud","files.almostFull":"The Cloud is almost full.","files.outputs.title":"Your bots' work","files.outputs.switch":"Save what Cloud bots make to this computer","files.outputs.help":"In Documents › Limix Bot, one folder for each bot.","files.outputs.open":"Open folder","files.offline":"The Cloud can't be reached right now. Files carry on when it's back.","files.asleep":"The Cloud is asleep. Files sync when it wakes.","files.signedOut":"Sign in to the Cloud again to keep sharing files.","files.unavailable":"Files works with Limix Bot Cloud.","files.openSettings":"Open Limix Bot Cloud settings","files.failed":"That didn't work. Try again.","files.failedWith":"That didn't work: {reason}","cloudHome.title":"Cloud","cloudPower.asleep":"The Cloud is asleep. It wakes in about a second when you use it.","cloudPower.wake":"Wake it now","cloudHome.provisioning":"Setting up the Cloud. This takes a few minutes; you can keep using this computer meanwhile.","cloudHome.ready":"The Cloud is ready. Your always-on bots live there, separate from the bots on this computer. Open it, then sign in there with your own Claude or ChatGPT account, or an API key.","cloudHome.readySleeps":"The Cloud is ready. It sleeps when idle and wakes when you or a schedule need it. Open it, then sign in there with your own Claude or ChatGPT account, or an API key.","cloudHome.stopped":"The Cloud is stopped. Subscribe again on your Plan page to start it; its files are kept for a while.","cloudHome.stoppedTrial":"The Cloud is stopped.","cloudHome.stoppedMember":"Ask its owner to start it again. Its files are kept for a while.","cloudHome.paymentProblem":"There is a problem with your payment. Update it on your Plan page to keep the Cloud running.","cloudHome.failed":"The Cloud could not be set up yet. It is being retried automatically; your Plan page shows the details.","cloudHome.failedRetry":"The Cloud could not be set up yet. Nothing was lost; it is tried again automatically at {time}, and your Plan page shows the details.","cloudHome.slow":"This is taking longer than usual. Setup is still going; you can keep using this computer meanwhile.","cloudHome.ended":"This Cloud has ended.","cloudHome.endedNamed":"{name} has ended.","cloudHome.endedFiles":"Its files are deleted on {date}.","cloudHome.buyAgain":"Buy again","cloudHome.checkout":"This checkout wasn't finished.","cloudHome.checkoutNamed":"The checkout for {name} wasn't finished.","cloudHome.continue":"Continue","cloudHome.payment":"This Cloud's payment didn't go through.","cloudHome.paymentNamed":"The payment for {name} didn't go through.","cloudHome.paymentBody":"Update your card to keep using it.","cloudHome.updateCard":"Update your card","cloudHome.tryAgain":"Try again","cloudHome.step.reserving":"Reserving your machine","cloudHome.step.storage":"Preparing storage","cloudHome.step.starting":"Starting the Cloud","cloudHome.step.checking":"Checking it's ready","cloudHome.connect":"Open the Cloud","cloudHome.connectHelp":"Opens the Cloud in this window. Switch back to This computer on the left of the app.","cloudHome.team.title":"Your team's Cloud","cloudHome.team.provisioning":"Setting up your team's Cloud. This takes a few minutes; you can keep using this computer meanwhile.","cloudHome.team.ready":"{name} is ready. It keeps your team's bots running 24/7, even when this computer is off.","cloudHome.filesLink":"Share folders with the Cloud in Files","cloudHome.connectFailed":"Could not open the Cloud. Try again in a moment.","cloudHome.waking":"Waking the Cloud…","cloudHome.unreachableHost":"Our hosting provider is restarting the machine the Cloud runs on. The Cloud and its files are safe, and it comes back on its own, usually within about 20 minutes.","cloudHome.unreachable":"The Cloud hasn't answered for a few minutes. Nothing was lost, and we've been told.","lending.activity.title":"Activity on this computer","lending.activity.empty":"Nothing yet. Every request from its bots will be listed here, including refused ones.","lending.activity.refused":"refused","lending.action.listFiles":"Listed a folder","lending.action.readFile":"Read a file","lending.action.writeFile":"Saved a file","lending.action.deleteFile":"Deleted a file","lending.action.runCommand":"Ran a command","lending.action.screenTools":"Checked the app and screen controls","lending.action.screen":"Used apps and screen","lending.action.website":"Opened a website","lending.action.chrome":"Used your Chrome","lending.action.invalid":"Malformed request","lending.action.other":"Other request","memory.lendingReview":"This bot's memory was changed in a conversation you didn't write, so it can't use your computer. Check the notes below, then mark them reviewed.","memory.lendingReviewed":"Mark reviewed","memory.lendingReviewChanged":"Changed:","memory.learnFromRooms.title":"Learn from group chats","memory.learnFromRooms.subtitle":"For every bot: also notice facts from the group chats a bot is in. Your own words count as yours; other bots' only when they're checked results or decisions you agreed to. A group chat fewer people can see than the bot never feeds its memory. Off by default.","memory.learnFromRooms.error":"Could not save the group chat setting.","memory.learnFromRooms.noModelSteps":"This bot's AI can't make the background model call this needs, so it won't learn anything from group chats.","memory.upkeep.noModelSteps":"This bot's AI can't make the quick background model call upkeep uses, so it only archives expired notes and merges exact duplicates.","memory.lendingReviewStale":"The memory changed again after you looked, so it can't use your computer yet. Check the notes below, then mark them reviewed.","cloudSignIn.title":"Connect an AI to the Cloud","cloudSignIn.intro":"The Cloud runs your bots with your own AI account. Choose one below; the sign-in stays in the Cloud.","cloudSignIn.limits":"Your AI plan's limits apply to bots that work around the clock. For heavy use, Anthropic's Claude Max plan or an API key works best.","cloudSignIn.claude":"Claude","cloudSignIn.claudeHint":"Use your Claude subscription.","cloudSignIn.keyHint":"Runs on your API key.","cloudSignIn.codex":"ChatGPT","cloudSignIn.codexHint":"Use your ChatGPT plan with Codex.","cloudSignIn.grok":"Grok","cloudSignIn.grokHint":"Use your grok.com subscription with Grok Build.","cloudSignIn.apiKey":"Use an API key","cloudSignIn.apiKeyHint":"Pay as you go with an OpenAI, Anthropic, xAI or OpenRouter key, in Settings → API keys.","cloudSignIn.missing":"This model provider isn't available in the Cloud yet.","cloudSignIn.creditUsedUp":"Your trial Claude credit is used up. Choose your own AI below to keep your bots working.","cloudSignIn.creditEnded":"Trial Claude credit isn't available in the Cloud anymore. Choose your own AI below to keep your bots working.","cloudSignIn.signedIn":"Already signed in?","cloudSignIn.or":"or","cloudSignIn.titleForJob":"Connect an AI to do it","cloudSignIn.introForJob":"The Cloud runs your bots with your own AI account. Pick one; the sign-in stays in the Cloud. Your job starts as soon as it's connected.","cloudSignIn.connected":"Connected. Starting your job…","cloudIntent.title":"What should the Cloud do while you're away?","cloudIntent.intro":"Describe a job. Your bot asks a few questions, then sets itself up and does it on its own, even when this computer is off.","cloudIntent.placeholder":"Every morning at 8, summarize the top Hacker News stories","cloudIntent.send":"Start setting it up","cloudIntent.notSure":"Not sure yet?","cloudIntent.skip":"Skip for now","cloudIntent.later":"You can come back to it any time from Set up Limix Bot Cloud.","cloudIntent.ideas":"Ideas to start from","cloudIntent.idea.digest":"News digest","cloudIntent.idea.digestText":"Every morning at 8, read the top stories on Hacker News and send me a short summary of the ones worth my time.","cloudIntent.idea.watch":"Watch a page","cloudIntent.idea.watchText":"Every hour, check a web page I give you and tell me as soon as something on it changes.","cloudIntent.idea.research":"Research roundup","cloudIntent.idea.researchText":"Every Monday at 9, search the web for news about my industry and send me the five things worth reading.","cloudIntent.idea.plan":"Plan my day","cloudIntent.idea.planText":"Every weekday at 7:30, look at what I asked you to keep track of and send me a short plan for the day.","cloudIntent.pending":"The Cloud's first job","cloudIntent.edit":"Edit","cloudSetup.title":"Set up Limix Bot Cloud","cloudSetup.progress":"{done} of {total} done","cloudSetup.hide":"Hide setup","cloudSetup.collapse":"Minimize setup","cloudSetup.expand":"Show setup steps","cloudSetup.stepDone":"Done","cloudSetup.stepTodo":"Not done yet","cloudSetup.cloud.title":"Create the Cloud","cloudSetup.job.title":"Give it a first job","cloudSetup.job.hint":"Say what it should do while you're away. Your bot asks a few questions, then sets itself up.","cloudSetup.job.action":"Give it a job","cloudSetup.plan.title":"Approve its plan","cloudSetup.plan.hint":"Your bot asks a few questions in the chat, then proposes a routine. This ticks once you approve it.","cloudSetup.plan.action":"Open the chat","cloudSetup.onScreen":"You're on this step","cloudSetup.working":"Your bot is setting itself up in the chat. Answer its questions there.","cloudSetup.skipped":"Skipped","cloudSetup.engine.title":"Connect your AI","cloudSetup.engine.hint":"Required. Cloud bots use your own Claude or ChatGPT account, or an API key.","cloudSetup.engine.action":"Connect","cloudSetup.ready.title":"The Cloud is ready","cloudSetup.ready.body":"Your bots keep running in the Cloud, even when this computer is off.","cloudSetup.ready.done":"Done","cloudSetup.ready.runs":"runs {when}.","cloudSetup.ready.today":"today at {time}","cloudSetup.ready.tomorrow":"tomorrow at {time}","cloudSetup.ready.on":"on {day} at {time}","cloudSetup.ready.runNow":"Run it now","cloudSetup.ready.running":"Running now","cloudSetup.ready.runFailed":"It could not start just now. It still runs on schedule.","cloudSetup.ready.later":"Wait for the schedule","cloudSetup.myCloud":"My Cloud","cloudSetup.alwaysOn":"always on","cloudSetup.sleepsWhenIdle":"sleeps when idle","cloudWelcome.title":"Welcome to {name}","cloudWelcome.intro":"A few quick steps and your bots work around the clock.","cloudWelcome.steps":"Setup steps","cloudWelcome.skip":"Skip setup","cloudWelcome.step.bring":"Bring your stuff","cloudWelcome.step.bringHint":"Your bots and chats","cloudWelcome.step.engineHint":"Claude or ChatGPT","cloudWelcome.step.files":"Files and apps","cloudWelcome.step.filesHint":"Optional","cloudWelcome.bring.title":"What should {name} start with?","cloudWelcome.bring.sub":"Bots on your computer come here by themselves from the {app} app.","cloudWelcome.bring.subTeam":"Your own bots stay on your computer. {name} starts with bots of its own that everyone in the team can use.","cloudWelcome.bring.subTeamShared":"{name} is your team’s: its bots are shared with everyone in {name}, and your own bots stay where they are.","cloudWelcome.bring.fresh":"Start fresh","cloudWelcome.bring.freshHint":"Pick a ready-made team from the library, or start with one bot and build your own.","cloudWelcome.bring.chooseTeam":"Choose a team","cloudWelcome.bring.freshChief":"Start with your assistant. It brings in specialists when a job needs them.","cloudWelcome.bring.desktopTitle":"Everything from your computer","cloudWelcome.bring.desktopOnly":"Open the desktop app to bring your bots from your computer.","cloudWelcome.bring.update":"Update {app} to bring your bots here by itself.","cloudWelcome.bring.hereTitle":"Your bots are already here","cloudWelcome.bring.hereBody":"{name} already has bots or chats of its own.","cloudWelcome.bring.sending":"Bringing this computer's bots, chats and logins here…","cloudWelcome.bring.more":"More","cloudWelcome.bring.myCloudTitle":"Move a bot here from My Cloud","cloudWelcome.bring.myCloudHint":"You'll see what goes and what stays before anything moves.","cloudWelcome.bring.move":"Move","cloudWelcome.bring.mausBotStays":"Stays on My Cloud: everyone on a team gets their own","cloudWelcome.bring.moveFailed":"Couldn't move {bot}. It's still on My Cloud, unchanged.","cloudWelcome.engine.sub":"Your bots think with your own Claude or ChatGPT plan. Sign in once on {name}.","cloudWelcome.engine.credit":"You have {amount} of Claude credit, so your bots can start right now. Sign in whenever you're ready.","cloudWelcome.engine.creditPlain":"Your trial comes with Claude credit, so your bots can start right now. Sign in whenever you're ready.","cloudWelcome.engine.useCredit":"Use my credit for now","cloudWelcome.engine.connected":"Connected","engineCheck.checking":"Sending {name} a short test message…","engineCheck.working":"{name} is working","engineCheck.failed":"{name} is connected but didn't answer a test message.","engineCheck.retry":"Test again","cloudWelcome.files.title":"Files and apps","cloudWelcome.files.optional":"optional","cloudWelcome.files.sub":"Give your bots what they need to work while you're away.","cloudWelcome.files.folders":"Share folders","cloudWelcome.files.foldersDesktop":"Bots on {name} can read folders you share from your computer, even when it's off. Share them from the desktop app, under Files.","cloudWelcome.files.foldersLent":"Bots on {name} use the files on this computer by themselves while it's awake and {app} is open. There's nothing to set up.","cloudWelcome.files.apps":"Connect apps","cloudWelcome.files.appsHint":"Gmail, Slack, Notion and more. Connections are per Cloud, so connect them here.","cloudWelcome.files.appsAction":"Connect apps","cloudWelcome.files.finish":"Finish","cloudWelcome.invite.title":"Invite people to {name}","cloudWelcome.invite.body":"{name} is better with your team in it. Invite them by email on Limix Bot Cloud: they can open it in their browser right away.","cloudWelcome.invite.action":"Invite people","cloudWelcome.done.title":"{name} is ready","cloudWelcome.done.body":"Your bots now run 24/7. Close your laptop whenever you like.","cloudWelcome.done.chief":"Say hi to your Chief of Staff","cloudWelcome.done.bot":"Say hi to {name}","cloudWelcome.compact.bring":"Bring your bots, chats and memory, or start fresh.","cloudWelcome.compact.files":"Optional. Share folders and connect the apps your bots use.","cloudWelcome.compact.continue":"Continue setup","organization.additive":"Company models are added alongside your existing personal and local models. Those models and accounts stay available.","organization.privacy":"Connecting does not upload your chat history. Requests sent to Company models go through your organization’s gateway.","organization.desktopOnly":"Connect an organization in the desktop app on this computer.","organization.loading":"Loading organization connection…","organization.loadFailed":"Could not load the organization connection. Try Refresh.","organization.actionFailed":"Could not complete this action. Refresh the connection and try again.","organization.signInHelp":"Use your work email to sign in securely in your browser.","organization.address":"Custom Admin portal URL","organization.signIn":"Sign in with your organization","organization.working":"Opening browser…","organization.advanced":"Advanced","organization.advancedHelp":"Only use a custom address if your organization gave you one.","organization.browserConsent":"Finish signing in through your browser. {app} will connect automatically when you’re done.","organization.customSignIn":"Sign in to custom Admin","organization.securityDetails":"Security details","organization.securityDetailsHelp":"You can compare this code with the one shown in your browser.","organization.code":"Verification code","organization.cancel":"Cancel sign-in","organization.reauth":"Company access needs a new sign-in. Disconnect below, then sign in again. Personal and local models are still available.","organization.modelHelp":"Choose a Company entry in the model picker to use organization access. Company model access is managed by your organization.","organization.managedEngine":"This Company connection is managed by your organization. To refresh or disconnect it, open Settings → Organization. Your personal provider accounts are separate.","organization.engineUnavailable":"Company access is unavailable. Check your organization connection and the matching personal model provider’s installation; do not sign in to a personal account here.","organization.modelCount":"Approved models: {count}","organization.notConfigured":"Not configured","organization.noModels":"No company models are available yet. Ask your organization administrator to configure access.","organization.disconnectTitle":"Disconnect organization?","organization.disconnectWarning":"This removes Company access from this computer and stops running Company turns. Your chats, personal accounts, and local models remain. Company turns will not switch to personal billing. Daily backups pause, and resume only if you reconnect the same organization with the same account.","organization.keepConnection":"Keep connection","organization.disconnectConfirm":"Disconnect from organization","organization.disconnect":"Disconnect…","organization.refresh":"Refresh","organization.unavailable":"Organization access is currently unavailable. Your personal and local models are unchanged.","organization.expires":"Expires {date}","policy.managedBy":"Managed by {organization}","policy.modelBlocked":"Bots cannot use this model provider while this computer is connected to {organization}.","policy.mcpRestricted":"Managed by {organization}: only MCP servers your organization has approved reach bots.","policy.mcpBlocked":"Not approved by {organization}; bots do not get this server.","policy.remoteBlocked":"Managed by {organization}: remote access to this computer is turned off.","policy.teamModelBlocked":"{organization} doesn't let bots use this AI. Choose another, or ask a team admin.","policy.teamRemoteBlocked":"Managed by {organization}: opening this Cloud on a phone is turned off. Ask a team admin.","organization.licenseExpired":"Your organization's Limix Admin license has expired. Contact your admin.","organization.companyModelsUnavailable":"Unavailable until the licence is renewed","organization.reopen":"Open the sign-in page again","organization.engineReady":"Ready on this computer","organization.engineInstallHelp":"Company models from this provider run through the {engine} app on this computer, using your organization’s access. Install it once; you don’t need to sign in to a personal account.","organization.useCompanyOne":"Use {name} for 1 bot that can’t run","organization.useCompanyMany":"Use {name} for {count} bots that can’t run","organization.useCompanyBots":"Can’t run now: {names}","organization.useCompanyNote":"Only bots whose model provider is missing, unavailable, signed out or not allowed by your organization change. Archived bots and bots that work on a personal model provider your organization allows stay as they are. To undo, use the bot’s model chip.","organization.useCompanyElevated":"Switch these from their model chip, because they use elevated permissions: {names}","organization.useCompanyDone":"Now using {name}: {names}. To undo, use the bot’s model chip.","settings.section.appearance":"Appearance","settings.section.experimental":"Experimental","settings.section.connections":"API keys","settings.section.decisionModel":"Decision and extraction","settings.section.engines":"Model providers","settings.section.companion":"Remote access","settings.section.computer":"Bot desktops","settings.section.vault":"Vault","settings.section.usage":"Usage","settings.section.people":"People","settings.section.activity":"Activity","settings.section.workspaces":"Installations","settings.profile.title":"Profile","settings.profile.subtitle":"Shown in the sidebar. Saved as you go.","settings.profile.sharedSubtitle":"Your details and shared context. Saved as you go.","settings.profile.name":"Your name","settings.profile.avatar.choose":"Choose photo","settings.profile.avatar.uploading":"Uploading…","settings.profile.avatar.remove":"Remove photo","settings.profile.avatar.cropTitle":"Adjust your photo","settings.profile.avatar.zoom":"Zoom","settings.profile.avatar.cancel":"Cancel","settings.profile.avatar.save":"Save photo","settings.profile.avatar.saveError":"Could not save this photo.","settings.profile.avatar.invalidType":"Choose a PNG, JPEG, GIF, or WebP image.","settings.profile.avatar.tooLarge":"The photo must be 10 MB or smaller.","settings.profile.avatar.tooSmall":"The photo must be at least 64 × 64 pixels.","settings.profile.avatar.tooLargeDimensions":"The photo must be no larger than 8192 × 8192 pixels.","settings.profile.aboutMe":"About me","settings.profile.aboutMeHelp":"Shared with every bot in private and group chats. Saved automatically.","settings.profile.awayEmails":"Email me when I'm away","settings.profile.awayEmailsHelp":"One email when a teammate mentions you, a bot is waiting on your answer, or work you asked for finishes while you're not in the app. It never includes what anyone wrote.","settings.profile.awayEmailsError":"That didn't save. Try again.","settings.profile.everyBotRules":"Rules for every bot","settings.profile.everyBotRulesPlaceholder":"Every bot follows these. A bot's own instructions win where they differ.","settings.profile.saving":"Saving…","settings.profile.saved":"Saved","settings.profile.saveError":"Could not save. Your changes are still here.","settings.profile.retry":"Retry","settings.profile.learned.title":"Added by your bots","settings.profile.learned.hint":"Facts your bots learned about you from your own messages. Every bot reads About me; remove anything that's wrong and it won't be added again.","settings.profile.learned.from":"from {name}","settings.profile.learned.remove":"Remove","settings.profile.learned.error":"Could not update About me. Try again.","settings.theme.title":"Theme","settings.theme.lightOrDark":"Light or dark","settings.theme.subtitle":"Follow your computer, or keep it light or dark.","settings.theme.look":"Using the {name} look. Pick one to switch back.","settings.theme.system":"System","settings.theme.light":"Light","settings.theme.dark":"Dark","settings.skin.title":"Skin","settings.skin.subtitle":"Applies instantly and is remembered on this machine.","settings.skin.dressUp.title":"Dress my bots up","settings.skin.dressUp.subtitle":"Each bot dresses up for the festival while this skin is on. Their usual look comes back when you change skins.","settings.chatWidth.title":"Chat width","settings.chatWidth.subtitle":"How wide message bubbles can grow on this machine. Wide and Full width use more of a large window.","settings.chatWidth.aria":"Chat width","settings.chatWidth.standard":"Standard","settings.chatWidth.wide":"Wide","settings.chatWidth.full":"Full width","settings.font.title":"Interface font","settings.font.subtitle":"Overrides the skin's font on this machine. Poppins is used when it is installed.","settings.font.aria":"Interface font","settings.font.skin":"Skin default","settings.font.system":"System","settings.font.inter":"Inter","settings.font.poppins":"Poppins","settings.font.serif":"Serif","settings.sendKey.title":"Send messages with","settings.sendKey.subtitle":"Choose Shift+Enter or {key} so Enter starts a new line instead, handy when your input method confirms text with Enter, as Japanese input does. {key} sends whichever you choose. On this device only.","settings.followUp.title":"Sending while a bot works","settings.followUp.steer":"Steer it into the running turn","settings.followUp.queue":"Queue it for after the turn","settings.followUp.subtitle":"Steering adds your message to what the bot is doing now; queueing runs it once the turn ends. {key} does the other one for a single message, and the arrow beside Send can also restart the turn. On this device only.","settings.userBubbles.title":"Color my messages","settings.userBubbles.simpleTitle":"Use the bot's color for my messages","settings.userBubbles.subtitle":"In a one-to-one chat, your messages are filled with a gradient of that bot's color. Rooms keep the neutral bubble.","settings.userBubbles.aria":"Color my messages with the bot's color","settings.advancedMode.title":"Advanced mode","settings.advancedMode.subtitle":"Show every technical control on this device: usage and tokens, the inspector and other tools for builders. Turn it off for a simpler app. Nothing is deleted either way.","settings.threadDisplay.title":"Threads","settings.threadDisplay.subtitle":"Show thread lists and controls on this device only. Hiding them keeps all conversation history and running work; channels are unchanged. Turn this back on to access your threads again.","settings.threadDisplay.show":"Show threads","settings.runCard.title":"This run","settings.runCard.subtitle":"Show a list of the shell commands a bot ran for your current request. Turn it off to hide the card and its shortcut for saving the run as a skill.","settings.runCard.show":"Show the run card","settings.pinnedCircles.title":"Pinned bots as circles","settings.pinnedCircles.subtitle":"Show pinned bots as large avatars, like Grok Bot. Widening the sidebar fits more on each row.","settings.universalPins.title":"Universal pins","settings.universalPins.subtitle":"Keep pinned bots from every group at the top of the sidebar, including a group's chief. They stay there while the rest of the list scrolls.","settings.notificationSounds.title":"Notification sounds","settings.notificationSounds.subtitle":"Play this computer's alert sound when an agent finishes or needs you. Turn it off to keep the banners but lose the chime (handy on a call, where the agent is already talking to you).","settings.notificationSounds.play":"Notification sounds","settings.deviceNotifications.title":"Notifications on this device","settings.deviceNotifications.subtitle":"Show a notification here when a bot finishes, while this app is open. Approvals, questions and warnings always show.","settings.deviceNotifications.blocked":"Notifications are blocked for this site. Allow them in your browser's site settings.","settings.deviceNotifications.show":"Notify me when a bot finishes","settings.notificationFeed.title":"Notification feed","settings.notificationFeed.subtitle":"Show a bell on the right edge of the window that keeps the last 500 notifications from every bot, read or not.","settings.notificationFeed.show":"Show the notification feed","notifications.title":"Notifications","notifications.railUnread":"Notifications, {count} unread","notifications.unread":"{count} unread","notifications.markAllRead":"Mark all read","notifications.pin":"Pin Notifications open","notifications.unpin":"Unpin Notifications","notifications.close":"Close Notifications","notifications.filter":"Filter notifications by bot","notifications.allBots":"All bots","notifications.empty":"Nothing yet.","notifications.emptyForBot":"No notifications for this bot.","notifications.retention":"Last 500 events, newest first","notifications.status.done":"Done","notifications.status.problem":"Problem","notifications.status.approval":"Approval","notifications.status.question":"Question","notifications.status.signIn":"Sign-in","notifications.status.secret":"Password or key","notifications.status.mention":"Mention","notifications.status.failed":"Failed","notifications.status.deferred":"Deferred","notifications.status.spend":"Spend","notifications.status.brief":"Brief","notifications.status.notice":"Notice","settings.roomTurns.title":"Group turns","settings.roomTurns.subtitle":"Stop a bot's turn in a group when it shows no progress for this long. A conversation can choose its own.","settings.roomTurns.label":"Stop after no progress for","settings.roomTurns.minutes":"minutes","settings.roomTurns.help":"Applies to every bot turn in a group, unless that conversation sets its own limit. A turn keeps going while the bot is working. Direct threads use the inactivity watchdog instead.","settings.roomTurns.error":"Could not save the group turn limit.","settings.roomTurns.range":"Enter a whole number from 1 to 1,440.","settings.mcpCalls.title":"Tool time limit","settings.mcpCalls.subtitle":"How long a bot may wait for one tool from your MCP servers.","settings.mcpCalls.label":"Maximum call length","settings.mcpCalls.minutes":"minutes","settings.mcpCalls.help":"Applies to every tool a bot uses from your MCP servers. A tool that runs past the limit is stopped, and the bot is told it may not have finished.","settings.mcpCalls.error":"Couldn't save the time limit. Try again.","settings.mcpCalls.range":"Enter a whole number from 1 to 60.","settings.language.title":"Language","settings.language.subtitle":"The app follows your system language unless you pick one here. Only part of the interface is translated so far. Untranslated text stays in English.","settings.language.system":"System","settings.language.aria":"App language","settings.language.error":"Could not save the language.","settings.newBotEffort.title":"Effort for new bots","settings.newBotEffort.subtitle":"How hard every new bot thinks from its first message. A bot can change its own level; model providers without this level keep their default.","settings.newBotEffort.default":"Provider default","settings.newBotEffort.aria":"Effort for new bots","settings.newBotEffort.error":"Could not save the effort for new bots.","settings.toolCalls.title":"Tool calls","settings.toolCalls.subtitle":"Show each tool a bot runs in the transcript. Off by default, since the mascot already shows that work is happening.","settings.toolCalls.show":"Show tool calls","settings.toolCalls.detail":"Named chips for Bash, search, and other tools. Errors and bot-to-bot messages still appear.","settings.toolCalls.aria":"Show tool calls in chat","settings.toolCalls.error":"Could not save the tool-call setting.","settings.updates.title":"Updates","settings.updates.checking":"Checking…","settings.updates.downloading":"Downloading {percent}%","settings.updates.ready":"{app} {version} is ready. Restart the app to apply it.","settings.updates.failed":"Update failed: {message}","settings.updates.unknownError":"unknown error","settings.updates.latest":"You're on the latest version we know of.","settings.updates.restart":"Restart and install","settings.updates.check":"Check for updates","settings.diagnostics.title":"Diagnostics","settings.diagnostics.subtitle":"Versions, which settings are on or off, and the end of the app's logs with secrets removed. Review the file before sharing it.","settings.diagnostics.aria":"Export diagnostics to a text file","settings.diagnostics.export":"Export Diagnostics…","settings.diagnostics.exporting":"Exporting…","settings.diagnostics.saved":"Saved to {path}","settings.diagnostics.openLogs":"Open logs folder","settings.diagnostics.logsAt":"Logs are in {folder}.","settings.diagnostics.openFailed":"Could not open the logs folder. It is {folder}.","settings.diagnostics.logsHelp":"Logs stay on this computer. Export Diagnostics saves their most recent part with keys, passwords and sign-ins removed, ready to send to support.","settings.diagnostics.elsewhere":"Logs are kept where {app} runs. To open or export this computer's, use Settings in the desktop app on it. Limix Bot Cloud support can read the Cloud's.","settings.savedSteps.title":"Repeat computer tasks without AI","settings.savedSteps.subtitle":"When you ask a bot for a computer task it has done before, it repeats the saved steps instead of asking the AI. Off stops saving and repeating.","settings.savedSteps.aria":"Repeat computer tasks without AI","settings.savedSteps.error":"Couldn't change this setting. Try again.","settings.analytics.title":"Usage analytics","settings.analytics.subtitle":"Anonymous product events and a once-a-day count of what's set up: which providers have a key (never the key) and how many bots, rooms, routines and computers. Never conversations, prompts, file contents, names or addresses. Your email is only attached if you shared it during setup, or if you choose upgrade, manage or compare plans on the Cloud Pro popup while signed in to Limix Bot Cloud (your Cloud account's email).","settings.analytics.link":"See everything it sends","settings.analytics.aria":"Send usage analytics","settings.talk.title":"Talk to Limix Bot from any app","settings.talk.subtitle":"Hold {key}, speak, let go. Limix Bot answers in a small box at the bottom of the screen; click it to open the chat.","settings.talk.aria":"Talk to Limix Bot from any app","settings.talk.keyAria":"Talk shortcut","settings.talk.taken":"{key} is used by another app. Pick another shortcut.","settings.talk.failed":"Could not change this. Try again.","updatesConsent.title":"Get Limix Bot updates?","updatesConsent.body":"We'll email you about new features and tips, about twice a month. You can unsubscribe any time.","updatesConsent.yes":"Yes, send me updates","updatesConsent.no":"No thanks","updatesConsent.email":"Your email","updatesConsent.emailHint":"Optional. Leave it empty and we'll use your Limix Bot Cloud email once you sign in.","updatesConsent.badEmail":"Enter a valid email address.","updatesConsent.failed":"That didn't save. Try again.","simpleModePrompt.title":"Try the new Simple mode","simpleModePrompt.titleOn":"You're on Simple mode","simpleModePrompt.body":"A calmer screen, with every feature still there.","simpleModePrompt.switch":"Simple mode","simpleModePrompt.switchHint":"Flip it to see the difference right away.","simpleModePrompt.where":"Switch any time in Settings → General.","newLook.title":"{app} has a simpler look","newLook.body":"Everything you need is still here; rarer settings are under Settings → More settings.","advancedBack.title":"Advanced mode is back","advancedBack.body":"This device is on Advanced mode again. Turn it off any time in Settings → General.","settings.openAtLogin.title":"Open at login","settings.openAtLogin.subtitle":"Open {app} when you sign in to this computer, so your bots and routines are ready without opening it yourself.","settings.openAtLogin.failed":"Could not change this. Try again, or check Login Items in your system settings.","settings.updatesConsent.title":"Product updates by email","settings.updatesConsent.subtitle":"New features and tips, about twice a month. You can unsubscribe any time.","settings.updatesConsent.to":"Sent to {email}.","settings.updatesConsent.aria":"Get product updates by email","settings.updates.startingDownload":"Starting download…","settings.updates.preparing":"Download complete. macOS is preparing the update.","settings.updates.readyInstall":"{app} {version} is ready. Install it in a terminal.","settings.updates.openingTerminal":"Opening a terminal…","settings.updates.restarting":"Restarting to update…","settings.updates.handedOff":"Command copied. Finish the update in your terminal.","settings.updates.quitReopen":"Quit and reopen the app","settings.updates.install":"Install","settings.updates.preparingShort":"Preparing…","settings.updates.opening":"Opening…","settings.updates.restartingShort":"Restarting…","update.button.ready":"Update ready: {app} {version}","update.button.preparing":"Preparing the update","update.button.downloadingStart":"Downloading an update","update.button.downloading":"Downloading an update, {percent}%","update.card.title":"Update available","update.card.current":"you have {version}","update.card.whatsNew":"What's new","update.card.allNotes":"All release notes","update.card.progress":"Download progress","update.card.downloadingStart":"Starting download…","update.card.downloading":"Downloading {percent}%","update.card.downloadingNote":"It downloads in the background. You can keep working.","update.card.restart":"Restart to update","update.card.restartNote":"{app} closes and reopens in a moment. Your chats and bots stay as they are.","update.card.handoffNote":"The install command is copied and a terminal opens to finish it.","update.card.tryAgain":"Try again","update.card.failed":"The update did not finish.","update.card.later":"Later","update.card.close":"Close","update.card.idleNote":"Restart now, or leave it: {app} installs it by itself the next time you're away and nothing is running.","update.updatedItself":"{app} updated itself to {version}.","common.save":"Save","common.saved":"Saved","common.cancel":"Cancel","common.ok":"OK","common.close":"Close","common.copyFailed":"Could not copy","team.create":"Create department","team.name":"Department name","team.closeDialog":"Close department dialog","team.duplicate":"A department with that name already exists. Use Move bots on its department card.","team.moveIntro":"Choose existing bots to move here.","team.createIntro":"Start empty, or choose existing bots to move here.","team.moveWarning":"Moving changes who they can work with and which shared instructions they read. Their chats stay with them.","team.existingBots":"Existing bots","team.noBots":"No other bots to move. You can add bots later.","team.saving":"Saving…","team.move":"Move bots","team.moveTo":"Move bots to {name}","team.moveOne":"Move 1 bot","team.moveMany":"Move {count} bots","team.moveSelected":"Move selected bots","team.addBots":"Add bots","team.markAllRead":"Mark all as read","team.markingAllRead":"Marking as read…","team.manageBots":"Add or remove bots","team.manageBotsIn":"Add or remove bots in {name}","team.manageIntro":"Checked bots belong to this department. Uncheck a bot to move it to General.","team.addBotsTo":"Add bots to {name}","team.renameEmpty":"Rename empty department","team.rename":"Rename department","team.renameAria":"Rename {name} department","team.deleteEmpty":"Delete empty department","team.deleteAria":"Delete {name} department","team.deleteTitle":"Delete {name} department?","team.deleteDescription":"This deletes the empty department and its shared instructions. This cannot be undone.","team.deleteKeepBotsDescription":"Bots and group chats move to General with their conversations intact. The department and its shared instructions are deleted. This cannot be undone.","team.deleteKeepBotsSimple":"Its bots and group chats stay, with their conversations, outside any department. The department and its shared instructions are deleted. This cannot be undone.","team.delete":"Delete department","team.share":"Share department…","team.actions":"Actions for {name} department","teamSettings.menu":"Set for all bots in this department…","teamSettings.title":"Set for all bots in {name}","teamSettings.general":"General","teamSettings.close":"Close department settings","teamSettings.intro":"Applies to the {count} bots in this department, one bot at a time, with the same checks as each bot's own settings. Bots that would be refused are skipped and listed with the reason.","teamSettings.tab.approval":"Approval level","teamSettings.tab.model":"Model and effort","teamSettings.tab.access":"Access","teamSettings.keepEveryone":"Keep each bot's setting","teamSettings.person":"A person","teamSettings.everyone":"Everyone in {team}","teamSettings.noPerson":"Don't add or remove anyone","teamSettings.personAction":"Add or remove","teamSettings.addPerson":"Add them","teamSettings.removePerson":"Remove them","teamSettings.accessHint":"Admins and whoever looks after each bot can always use and change it.","teamSettings.skip.ownMausBot":"it's someone's own Limix Bot","teamSettings.skip.cantShare":"you can't change who can use it","teamSettings.customPerBot":"Custom approval stays a per-bot setting in that bot's settings.","teamSettings.allThreads":"Each bot gets this level on every one of its threads.","teamSettings.threadModels":"Threads that use their bot's model move with it. A thread with a model of its own keeps it.","teamSettings.model":"Model","teamSettings.effort":"Effort","teamSettings.keepModel":"Keep each bot's model","teamSettings.keepEffort":"Keep each bot's effort","teamSettings.engineDefaultEffort":"Default (send no level)","teamSettings.preview":"What each bot gets","teamSettings.row.willChange":"Will change","teamSettings.row.applied":"Applied","teamSettings.row.unchanged":"Already set","teamSettings.row.skipped":"Skipped: {reason}","teamSettings.skip.busy":"busy. Stop its turn, then try again","teamSettings.skip.modeUnsupported":"{engine} does not offer this approval level","teamSettings.skip.engineMissing":"its AI isn't available","teamSettings.skip.modelUnsupported":"{engine} does not offer {model}","teamSettings.skip.effortUnsupported":"{engine} does not offer this effort level","teamSettings.skip.variantsOnly":"{engine} uses reasoning variants instead of effort levels","teamSettings.applyOne":"Apply to 1 bot","teamSettings.applyMany":"Apply to {count} bots","teamSettings.progress":"{done} of {count}…","teamSettings.summary":"{applied} applied · {unchanged} already set · {skipped} skipped","teamSettings.done":"Done","teamShare.title":"Share {name}","teamShare.intro":"Saves the whole department as one file: its bots, their instructions, pictures and skills, group chats, routines and shared instructions. Send the file to someone, or upload it in Admin → Packages.","teamShare.close":"Close share department","teamShare.preparing":"Preparing the department…","teamShare.name":"Name","teamShare.tagline":"Tagline","teamShare.summary":"Summary","teamShare.release":"Version","teamShare.releaseHint":"Use a higher version each time you share an update, such as 1.0.1.","teamShare.notes":"Release notes","teamShare.included":"What's in the file","teamShare.part.bots":"Bots","teamShare.part.skills":"Skills · arrive switched off","teamShare.part.playbooks":"Playbooks","teamShare.part.rooms":"Group chats","teamShare.part.routines":"Routines · arrive paused","teamShare.part.brief":"Shared instructions","teamShare.part.leader":"Chief of Staff","teamShare.part.connections":"Connections · addresses only","teamShare.part.pictures":"Pictures","teamShare.part.notes":"Starter notes","teamShare.addresses":"Connection addresses in the file","teamShare.yes":"Included","teamShare.none":"None","teamShare.never":"Never included: chat history, keys and passwords, model choices, computers, and who can see each bot.","teamShare.includeSkills":"Include skills","teamShare.noSkills":"This department's bots have no skills.","teamShare.includePictures":"Include pictures","teamShare.includeNotes":"Include starter notes (each bot's MEMORY.md and topic notes)","teamShare.notesIncluded":"Starter notes are included: what each bot has learned. Anything that looks like a key or password is removed. Daily logs and chat history are not included. Untick the box if the notes hold private details about you.","teamShare.notesExcluded":"Starter notes are not included. Whoever imports the department gets bots that start with empty notes.","teamShare.redacted":"Removed what looked like a key or password from:","teamShare.skipped":"Left out:","teamShare.skip.picture_too_large":"picture is larger than 64 KB","teamShare.skip.picture_invalid":"picture could not be read","teamShare.skip.pictures_budget":"the file already holds as many pictures as it can","teamShare.skip.stdio_server":"runs a command on this computer, so it is not shared","teamShare.skip.insecure_address":"does not use https, so it is not shared","teamShare.skip.files_not_shared":"attached files are not shared","teamShare.skip.lead_not_in_group_chat":"its lead is no longer in the group chat","teamShare.skip.notes_too_large":"is larger than the starter notes limit","teamShare.skip.skill_changed":"changed after it was reviewed","teamShare.skip.skill_conflict":"two bots have different skills with this name","teamShare.skip.bot_skill_limit":"a bot can share at most 30 skills (switched-on skills go first)","teamShare.skip.team_skill_limit":"a department can share at most 60 skills","teamShare.field.soul":"standing instructions","teamShare.field.notes":"starter notes","teamShare.field.brief":"shared instructions","teamShare.field.bulletin":"group chat instructions","teamShare.field.prompt":"routine instructions","teamShare.field.skill":"skill","teamShare.field.address":"address","teamShare.field.picture":"picture","teamShare.field.connection":"connection","teamShare.save":"Save file","teamShare.saving":"Saving…","teamShare.saved":"Saved {filename}","teamShare.savedHint":"Send it to someone to add in Templates → Import, or upload it in Admin → Packages. Share the department again after changes to make a new version.","teamShare.done":"Done","teamShare.includePreset":"Include my New bot defaults as a preset","teamShare.presetHint":"Whoever adds the file also gets a preset bot in New bot: your defaults' name, look, standing instructions, skills and (with starter notes) notes. Never their model, folder, computer, approval level or connected apps.","teamShare.part.presets":"Preset bots","teamShare.skip.preset_empty":"empty: give your New bot defaults a name, instructions, skills or notes first","teamShare.defaultsPreset":"New bot defaults preset","teamShare.skip.preset_skill_conflict":"a bot in the department has a different skill with this name","presetShare.title":"Share New bot defaults as a preset","presetShare.intro":"Saves your New bot defaults as a preset file. Whoever adds it in Templates → Import picks the preset in New bot. You can also upload it in Admin → Packages.","presetShare.close":"Close share preset","presetShare.preparing":"Preparing the preset…","presetShare.name":"Preset name","presetShare.description":"Description","presetShare.includePicture":"Include picture","presetShare.includeNotes":"Include starter notes (MEMORY.md and topic notes)","presetShare.never":"Never included: model choices, folders, where bots work, approval levels, connected apps, MCP servers and routines.","presetShare.savedHint":"Send it to someone to add in Templates → Import, or upload it in Admin → Packages. Share again after changes to make a new version.","teamLibrary.shareTab":"Share","teamLibrary.shareIntro":"Share a whole department as one file: bots, skills, group chats, routines and more. Chat history, keys and passwords never go in it.","teamLibrary.shareTeam":"Share department…","teamLibrary.shareTeamAria":"Share the {name} department","teamLibrary.shareBots":"Bots: {count}","teamLibrary.shareEmpty":"Add a bot to a department first, then share the department here.","teamLibrary.general":"General","orgLibrary.tab":"From {name}","orgLibrary.intro":"Packages {name} shares with you. Add one and it is yours: bots, skills and group chats arrive ready to use, routines paused.","orgLibrary.empty":"{name} hasn't shared any packages with you yet.","orgLibrary.from":"From {name}","orgLibrary.fromSelf":"Your organization","orgLibrary.recommended":"Recommended by {name}","orgLibrary.withdrawn":"Withdrawn by {name}","orgLibrary.newerRelease":"Version {version} available. It comes over on its own once it's downloaded, and keeps your changes.","orgLibrary.bots":"Bots: {count}","orgLibrary.skills":"Skills: {count}","orgLibrary.presets":"Preset bots: {count}","orgLibrary.rooms":"Group chats: {count}","orgLibrary.routines":"Routines: {count}","orgLibrary.connections":"Connections: {count}","orgLibrary.add":"Add","orgLibrary.adding":"Adding…","orgLibrary.added":"Added","orgLibrary.addAria":"Add {name}","orgLibrary.details":"Details","orgLibrary.detailsAria":"Details of {name}","orgLibrary.updateApp":"Update {app} to add this","orgLibrary.notReady":"Downloading…","orgLibrary.noRelease":"No release yet","orgLibrary.addedSkills":"{name} is added. Its skills are offered under each bot's Skills.","orgLibrary.skillsOn":"Included skills (switched on)","orgLibrary.teamSafety":"Bots, pictures, shared instructions, the Chief of Staff, group chats, playbooks and starter notes are added. Skills arrive switched on and routines paused. Connections arrive without their keys; finish them in Apps → MCP servers. Chat history, keys and passwords, model choices and computers are never included.","orgLibrary.librarySafety":"Nothing is added to your bots yet. Its skills are offered under each bot's Skills, ready to switch on, and its preset bots appear in New bot.","orgLibrary.provenance":"From {name} {release} · {publisher}","orgLibrary.provenanceFile":"From {name} {release}","orgLibrary.skillsHint":"Skills your organization shares. Adding one puts it on this bot, switched on.","orgLibrary.skillFrom":"{package} {release} · {publisher}","orgLibrary.skillAddAria":"Add {name} to this bot","team.empty":"No active bots yet. Move existing bots here when you are ready.","team.organizationHint":"Departments organize your bots and share instructions. Group chats bring bots into one conversation.","team.instructions":"Shared instructions","team.instructionsTitle":"{name} shared instructions","team.instructionsEdit":"Edit {name} shared instructions","team.instructionsHint":"Shared instructions shown to every bot in this department at the start of each turn. Only you can edit them.","team.instructionsClose":"Close shared instructions","team.instructionsLoading":"Loading shared instructions","team.memory":"Department memory","team.memoryFor":"{name} department memory","team.instructionsSave":"Save shared instructions","team.instructionsDiscard":"Discard unsaved changes to these shared instructions?","common.add":"Add","common.delete":"Delete","common.undo":"Undo","sidebar.aria":"Bots and navigation","sidebar.cloudOwner":"{email}’s Cloud","sidebar.search":"Search","sidebar.searchAria":"Search bots and messages","sidebar.searchClose":"Close search","sidebar.noMatch":"Nothing matches “{query}”","sidebar.preview.waiting":"Waiting for you…","sidebar.preview.waitingOnTeammate":"Waiting on a teammate…","sidebar.preview.working":"Working…","sidebar.preview.botWorking":"{name} is working…","sidebar.preview.botWorkingQueued":"{name} is working… · {count} queued","sidebar.preview.aBot":"A bot","sidebar.preview.teamWorking":"The team is working…","sidebar.preview.noMessages":"No messages yet","sidebar.preview.signedOut":"{name} isn't signed in","sidebar.preview.you":"You: {text}","sidebar.section.pinned":"Pinned","sidebar.section.channels":"Group chats","sidebar.section.botChats":"Bot threads","sidebar.section.bots":"Bots","sidebar.section.moved":"{name} moved to position {position} of {count}","sidebar.section.moveToContext":"Move to department","sidebar.section.newContext":"New department…","sidebar.section.newContextAria":"New department name","sidebar.section.removeFromContext":"Move to General","sidebar.section.removeFromDepartment":"Remove from department","sidebar.section.newName":"New department","sidebar.room.renameAria":"Rename {name}","sidebar.room.saveChatName":"Save thread name","sidebar.room.saveChannelName":"Save group chat name","sidebar.room.cancelChatRename":"Cancel thread rename","sidebar.room.cancelChannelRename":"Cancel group chat rename","sidebar.room.renameChat":"Rename thread","sidebar.room.renameChannel":"Rename group chat","sidebar.room.deleteChat":"Delete thread","sidebar.room.deleteChannel":"Delete group chat","sidebar.room.deleteConfirmTitle":"Delete {name}?","sidebar.room.deleteChannelBody":"This permanently deletes the {name} group chat, its messages, and every thread in it, and turns off the routines that run there. The bots in it are not deleted. This cannot be undone.","sidebar.room.deleteChatBody":"This permanently deletes the {name} thread and its messages. The bots in it are not deleted. This cannot be undone.","sidebar.copyConversationId":"Copy conversation ID","sidebar.newChannel.title":"New group chat","sidebar.newConversationWith":"New conversation with {name}","sidebar.newChannel.name":"Group chat name (for example, Website launch)","sidebar.newChannel.nameLabel":"Group chat name","sidebar.newChannel.context":"Department (optional): Work, Personal, Client…","sidebar.newChannel.contextAria":"Group chat department","sidebar.newChannel.emptyHint":"Create a bot first. Group chats are made of bots.","sidebar.newChannel.create":"Create group chat","sidebar.newChannel.createOne":"Create group chat · 1 bot","sidebar.newChannel.createMany":"Create group chat · {count} bots","sidebar.bot.pin":"Pin","sidebar.bot.unpin":"Unpin","sidebar.bot.makeChief":"Make Chief of Staff","sidebar.bot.removeChief":"Remove Chief of Staff","sidebar.bot.chiefNeedsEngine":"Choose Claude or an ACP model provider first","sidebar.bot.chiefAdminOnly":"Only an admin of this installation can choose the Chief of Staff.","sidebar.bot.chiefOfStaff":"Chief of Staff","sidebar.bot.modelBadge":"Model: {model} ({engine})","sidebar.bot.moveToSection":"Move to department","owner.you":"{name} (you)","lookedAfter.pickTitle":"Looked after by","lookedAfter.pickHint":"Its questions, approvals, failures and routine reports go to this person.","lookedAfter.change":"Change who looks after {bot}","lookedAfter.menu":"Looked after by {name}…","lookedAfter.menuNone":"Looked after by…","lookedAfter.newBot":"Looked after by","lookedAfter.badge":"Looks after it","lookedAfter.line":"Looked after by {name}","lookedAfter.nobody":"Nobody looks after it yet","lookedAfter.make":"Have {name} look after it","lookedAfter.makeTitle":"Have {name} look after {bot}?","lookedAfter.makeBody":"{bot}'s questions, approvals and routine reports will go to {name}.","lookedAfter.mode":"Who looks after what","lookedAfter.seeWho":"See who looks after what","lookedAfter.nobodyHint":"Their questions go to the admins.","lookedAfter.empty":"{name} looks after no bots yet.","lookedAfter.dropHint":"Drag a bot onto a person to change who looks after it.","lookedAfter.setForAll":"Set who looks after all bots…","lookedAfter.setForAllTitle":"Everyone in {name} is looked after by","owner.asking":"Asking {name}","owner.askingYou":"Asking you","needsYou.title":"Needs you","needsYou.count":"Needs you, {count}","needsYou.asking":"{bot} is asking you","needsYou.fix":"{bot} needs a fix","needsYou.message":"Message from {name}","needsYou.aBot":"A bot","relay.told":"Told {name}","relay.toldHint":"{name} got this message","inbox.from":"From {name}","inbox.via":"via {name}","inbox.in":"in {title}","inbox.openOrigin":"Open {title}","inbox.assistantOf":"{name}'s assistant","inbox.assistantAnswered":"Your assistant answered","inbox.assistantHint":"From what you share with the team. Reply to correct it.","relay.reply":"{name} replied","relay.assistant":"{name}'s assistant answered","sidebar.people.title":"People","sidebar.people.yourInbox":"Your inbox: everything sent to you","sidebar.people.yourInboxWaiting":"Your inbox: waiting on you, {count}","sidebar.people.invite":"Invite someone","inbox.panel.title":"Inbox","inbox.empty":"Nothing for you yet.","inbox.emptyHint":"When a bot needs your OK, has a question or finishes something, it shows up here.","inbox.row.count":"Inbox, {count} waiting","inbox.workingFor":"{name}, working for {other}","inbox.askedBy":"{name}, asked by {who}","inbox.askedBySomeone":"{name}, asked by someone else","inbox.waitsOnYou":"Waits on you","inbox.card.summary":"{needs} need you · {info} for your info","inbox.card.forInfo":"{count} for your info","inbox.card.caughtUp":"All caught up","inbox.card.open":"Open inbox","inbox.action.openInChat":"Open in chat","inbox.action.back":"Back to the list","inbox.reply.placeholder":"Write your answer","inbox.subject.approval":"Approval","inbox.subject.question":"Question","inbox.subject.message":"Message","inbox.subject.result":"Routine report","inbox.subject.notice":"Needs a look","inbox.reviewInChat":"Look at this in the chat it came from to answer it.","inbox.search":"Search inbox","inbox.noMatch":"Nothing in the inbox matches.","inbox.position":"{index} of {count}","inbox.breadcrumb":"Where this came from","inbox.action.previous":"Previous","inbox.action.next":"Next","inbox.action.more":"More","inbox.action.closePanel":"Close inbox","inbox.action.widen":"Wider","inbox.action.narrow":"Narrower","inbox.recommended":"Recommended","inbox.recommendedInline":"(recommended)","inbox.note":"Add a note","inbox.you":"You","inbox.headline.signIn":"Sign in to {site}","inbox.headline.connect":"Connect {app}","inbox.youReplied":"You replied","sidebar.people.mention":"Write to {name}","sidebar.people.mentionHere":"Write to {name}. Here now","sidebar.people.loading":"Loading people…","sidebar.people.failed":"Couldn't load people","sidebar.people.retry":"Try again","presence.hasOpen":"{names} has this open","presence.haveOpen":"{names} have this open","orgChart.mode.departments":"Departments","orgChart.chief":"Chief of Staff","newBot.sharedWith":"Shared with everyone in {team}.","newBot.justForYou":"Just for you? Create it in your own place →","sidebar.bot.markUnread":"Mark as Unread","sidebar.bot.rename":"Rename","sidebar.bot.markRead":"Mark as Read","sidebar.bot.more":"More","sidebar.bot.markAllRead":"Mark all conversations as read","sidebar.bot.markingAllRead":"Marking conversations as read…","sidebar.bot.markAllReadFailed":"Could not mark all conversations as read. Completed reads were kept. Try again.","sidebar.bot.editProfile":"Edit Profile","sidebar.bot.simple.editProfile":"Edit profile","sidebar.bot.simple.markRead":"Mark as read","sidebar.bot.simple.markUnread":"Mark as unread","sidebar.bot.simple.viewThreads":"View threads","sidebar.bot.simple.setMainThread":"Set as main thread","sidebar.bot.simple.isMainThread":"This is already the main thread","sidebar.bot.duplicate":"Duplicate","sidebar.bot.archive":"Archive","sidebar.bot.archiveAria":"Archive {name}","sidebar.bot.archiveBlockedChief":"Choose another Chief of Staff first","sidebar.bot.archiveBlockedLast":"Keep at least one active bot","sidebar.bot.deleteCheckingTitle":"Deleting this bot and any desktop it owns","sidebar.bot.deleteChecking":"Deleting the bot and its desktop…","sidebar.bot.deletingRow":"Deleting the bot and any desktop it owns…","sidebar.bot.deletingAria":"{name}, deleting the bot and any desktop it owns","sidebar.bot.archived":"{name} archived","sidebar.confirm.archiveTitle":"Archive {name}?","sidebar.confirm.archiveBody":"{name} leaves the sidebar, but every conversation is kept. You can restore it any time from Archived bots.","sidebar.confirm.deleteTitle":"Delete {name}?","sidebar.confirm.deleteBody":"This permanently removes {name}, its conversations, files, memory, automations, and any desktop it owns, with that desktop's files and browser sign-ins. Shared department desktops stay. This cannot be undone.","sidebar.confirm.deleteChiefBody":"{name} is your Chief of Staff, and its chats hold your team's whole setup. Archive it instead to keep every conversation: you can restore it any time. Deleting erases them for good, with its files, memory and automations. Either way it stops being your Chief.","sidebar.confirm.archiveInstead":"Archive instead","sidebar.archived.title":"Archived bots","sidebar.archived.subtitle":"Conversations are kept until you choose to delete a bot.","sidebar.archived.restoreAll":"Restore all","sidebar.archived.close":"Close archived bots","sidebar.archived.count":"{count} archived","sidebar.archived.botFallback":"Bot","sidebar.archived.restore":"Restore","sidebar.archived.deleteAria":"Delete {name}","sidebar.archived.deleteAll":"Delete all","sidebar.archived.deleteAllTitle":"Delete all archived bots?","sidebar.archived.deleteAllBody":"This permanently deletes every archived bot listed here, conversations and bot folders included. This cannot be undone.","sidebar.archived.restored":"{name} restored","sidebar.archived.restoredOne":"1 bot restored","sidebar.archived.restoredMany":"{count} bots restored","sidebar.resize":"Resize sidebar","sidebar.toolsLayout.title":"Tools layout","sidebar.toolsLayout.subtitle":"Show Routines, Triggers, and Team map as rows or as one row of icons. As a column of avatars, the sidebar always shows icons.","sidebar.toolsLayout.rows":"Rows","sidebar.toolsLayout.toolbar":"Toolbar","sidebar.toolsLayout.chooseAria":"Choose tools layout","sidebar.new":"New","sidebar.newOrShare":"New or share","sidebar.servers":"Servers","sidebar.switchServer":"Switch server: {name}","sidebar.switchServerError":"Could not open the server list. Try the Server menu.","sidebar.newBot":"New Bot","sidebar.newBotSimple":"New bot","sidebar.newChat.title":"New chat","sidebar.newChat.to":"To:","sidebar.newChat.placeholder":"Start a chat with…","sidebar.newChat.createBot":"Create new bot","sidebar.newChat.createGroup":"Create group chat","sidebar.newChat.start":"New chat","sidebar.newChat.open":"Open","sidebar.newChat.noMatch":"No bot matches “{query}”","sidebar.backup.hint":"Private backup of bot setup, conversation text, and each bot's memory notes. Files, images and connections are not included.","sidebar.backup.exporting":"Exporting…","sidebar.backup.export":"Export backup","sidebar.backup.downloaded":"Backup downloaded · {members} bots and conversation text.","sidebar.backup.notes":"{count} backup notes about deleted bots and groups. Review them when importing.","sidebar.backup.private":"Keep this file private.","sidebar.teamLibrary":"Templates","sidebar.teamImportedOne":"1 bot added · existing bots and chats kept","sidebar.teamImportedMany":"{count} bots added · existing bots and chats kept","sidebar.connectionsToFinish":"Connections to finish in Apps → MCP servers: {count}","sidebar.presetsImported":"Preset bots added to New bot: {count}","sidebar.nav.teamMap":"Team map","sidebar.nav.automations":"Automations","sidebar.nav.connectedApps":"Connected apps","sidebar.connectApps":"Connect apps","sidebar.appSettings":"App settings","sidebar.tools":"Tools","sidebar.section.expand":"Expand {name}","sidebar.section.collapse":"Collapse {name}","sidebar.section.expandReorder":"Expand {name}. Alt+Up/Down reorders it.","sidebar.section.collapseReorder":"Collapse {name}. Alt+Up/Down reorders it.","sidebar.section.dragToReorder":"Drag to reorder","sidebar.section.deleteAria":"Delete {name} department","sidebar.profile.you":"You","sidebar.account.automationsNeedYou":"Automations need you","sidebar.account.moveNeedsYou":"My Cloud move needs you","sidebar.account.moveAndAutomationsNeedYou":"My Cloud move and automations need you","sidebar.account.moving":"Moving to My Cloud…","sidebar.account.moveDismiss":"Got it","sidebar.account.moveRetry":"Try My Cloud move again","sidebar.account.moveRetryName":"Try again to move to My Cloud","sidebar.account.movingNamed":"Moving to {place}…","sidebar.account.moveNeedsYouNamed":"{place} move needs you","sidebar.account.moveRetryNamed":"Try {place} move again","sidebar.account.moveRetryNameNamed":"Try again to move to {place}","sidebar.menu.connectPhone":"Connect your phone","sidebar.menu.connectPhone.team":"to {team}","sidebar.menu.connectPhone.computer":"to this computer","sidebar.menu.connectPhone.cloud":"to the Cloud","sidebar.menu.connectPhone.cloudAlwaysOn":"to the Cloud (always on)","sidebar.menu.connectPhone.cloudNotReady":"The Cloud shows here once it's ready.","sidebar.menu.connectPhone.server":"to the bots here","sidebar.menu.getPhoneApp":"Get the phone app","phoneApp.title":"Get the phone app","phoneApp.subtitle":"Scan a code with your phone's camera, or open its link on the phone.","phoneApp.ios":"iPhone","phoneApp.iosAction":"Open in the App Store","phoneApp.android":"Android","phoneApp.androidAction":"Download the APK","phoneApp.next":"Installed? Connect your phone next, and scan the pairing code with the app.","accounts.heading":"Signed in as","accounts.add":"Add another account","rail.accountSub":"Stay signed in to more than one, and move between them from here.","accounts.moving":"This computer's bots are moving to the Cloud. You can open this once that's done.","accounts.added":"{email} is signed in too. You can open its Clouds once this computer's bots have finished moving.","accounts.already":"You're already signed in as {email}.","accounts.gone":"That account isn't signed in here any more.","accounts.needsSignIn":"Sign in again","accounts.browserTitle":"Finish signing in in your browser","accounts.browserBody":"Check that the browser shows the account you want to add. If it shows another one, change it there.","accounts.browserOpen":"Open the browser again","accounts.signOut":"Sign out","accounts.signInAgain":"Sign in again","accounts.manage":"Account and sign out","accounts.title":"Your account","accounts.close":"Close","accounts.failed":"That didn't work. Try again in a moment.","sidebar.menu.settings":"Settings","sidebar.menu.about":"About","about.version":"Version {version}","about.connectedTo":"Connected to {name} · version {version}","sidebar.menu.shortcuts":"Keyboard shortcuts","sidebar.menu.support":"Help and support","sidebar.menu.help":"Help Center","sidebar.menu.feedback":"Send Feedback","sidebar.menu.usageUsed":"{percent}% used","sidebar.menu.weeklyUsage":"Weekly usage","sidebar.menu.resets":"Resets {when}","sidebar.menu.switchTo":"Switch to…","sidebar.update.startingDownload":"Starting download…","sidebar.update.downloading":"Downloading… {percent}%","sidebar.update.ready":"Restart to update to {app} {version}","sidebar.update.installing":"Restarting to update…","sidebar.update.checking":"Checking for updates…","sidebar.update.handedOff":"Finish the update in your terminal","sidebar.update.failed":"The update didn't finish. Try again.","sidebar.update.upToDate":"You're up to date","sidebar.update.check":"Check for updates","sidebar.update.availableServer":"Version {version} available (release notes)","sidebar.update.how":"Update with: {command}","sidebar.update.howRestart":"Update with: {command}, then restart the app","sidebar.update.howDesktop":"Updates come from the {app} app on the computer these bots run on","sidebar.update.managed":"Kept up to date for you","sidebar.update.availableOther":"{name} can update to {version}","sidebar.update.upToDateOther":"{name} is up to date","sidebar.update.howOther":"Whoever runs that server updates it with: {command}","sidebar.update.howOtherRestart":"Whoever runs that server updates it with: {command}, then restarts it","sidebar.update.checkFailed":"Couldn't check for updates. Try again.","sidebar.update.reloadPage":"Reload for v{version}","sidebar.update.pageVersion":"This page is still running v{version}","sidebar.phone.checking":"Checking device status","sidebar.phone.unavailable":"Device status unavailable","sidebar.phone.off":"Remote access off","sidebar.phone.pair":"Pair a device","sidebar.phone.connectedOne":"Device connected","sidebar.phone.connectedAll":"{count} devices connected","sidebar.phone.connectedSome":"{connected} of {count} devices connected","sidebar.phone.disconnectedOne":"Device paired, not connected","sidebar.phone.disconnectedMany":"{count} devices paired, none connected","sidebar.phone.recentOne":"Device active recently","sidebar.phone.recentAll":"{count} devices active recently","sidebar.phone.recentSome":"{recent} of {count} devices active recently","sidebar.phone.staleOne":"Device paired, not active recently","sidebar.phone.staleMany":"{count} devices paired, none active recently","sidebar.update.preparing":"Preparing update…","sidebar.update.readyInstall":"Install {app} {version}","sidebar.update.openingTerminal":"Opening a terminal…","sidebar.update.readyShort":"Update ready","sidebar.update.failedShort":"Update failed","sidebar.update.restartAction":"Restart","sidebar.update.installAction":"Install","sidebar.update.retryAction":"Retry","links.card.pullRequest":"Pull request {id}","links.card.issue":"Issue {id}","links.card.reference":"Issue or pull request {id}","links.card.commit":"Commit {id}","chat.announce.replied":"{name} replied: {text}","chat.announce.repliedEmpty":"{name} replied","chat.announce.failed":"{name} failed: {text}","chat.announce.failedEmpty":"{name} failed","chat.announce.partial":"{name} partly done: {text}","chat.announce.approval":"{name} needs your approval","chat.day.today":"Today","chat.day.yesterday":"Yesterday","chat.timeline.title":"Execution timeline","chat.timeline.titleRunning":"Execution timeline · running","inspector.views":"Inspector views","inspector.run.title":"Run log","inspector.run.hint":"Recorded activity for this conversation. Commands may be shortened; Events and Raw contain the recorded technical details.","inspector.run.copy":"Copy redacted run log","inspector.run.copied":"Copied. Review the log before sharing; redaction may not catch every secret.","inspector.run.copyFailed":"Could not copy the log. Select the text to copy it manually.","inspector.run.recent":"Showing the latest {count} entries.","inspector.run.empty":"No recorded activity in this conversation yet.","inspector.run.running":"In progress","inspector.run.complete":"Completed","inspector.run.failed":"Failed","inspector.run.observed":"Recorded","inspector.run.unverified":"No result","inspector.run.userInput":"User input","inspector.run.screen":"Screen observed","inspector.run.response":"Response recorded","chat.copyMessage":"Copy message","chat.copyMessageId":"Copy message ID","chat.copyMessageDone":"Copied","chat.copyMessageFailed":"Copy failed","chat.showRawMarkdown":"Show raw markdown","chat.showRenderedMarkdown":"Show rendered markdown","chat.retry":"Retry","chat.turnStopped":"Stopped","chat.turnStoppedByYou":"You stopped this.","chat.turnStoppedBy":"{name} stopped this.","chat.rescue.waiting":"{bot} hasn't heard back from {ai} yet.","chat.rescue.over":"{bot} didn't hear back from {ai}.","chat.rescue.switchAi":"Switch AI","chat.rescue.switchAiHint":"Stop waiting and pick another AI for {bot}","chat.rescue.connect":"Connect your subscription","chat.rescue.connectHint":"Sign in with an AI plan you already pay for","chat.error.signedOut":"{name} isn't signed in yet. Sign in below, then send your message again.","chat.notice.signIn":"Sign in","chat.notice.signInHint":"Open AI settings to sign in again","chat.error.pastUsageLimit":"Past usage-limit notice (reset time passed; check current usage)","chat.error.details":"Details","chat.error.partial":"Partly done. The reply came back, but a step didn't work, so check that step before relying on it.","chat.error.partialPreview":"Partly done: a step didn't work","chat.error.requestTooLarge":"This message is too large for {model}. Start a new chat or pick a model that accepts more.","chat.error.dismiss":"Dismiss","error.plain.unreachable":"Couldn't reach {app}. Check that it's running, then try again.","error.plain.rateLimited":"Too many requests right now. Wait a moment, then try again.","error.plain.busy":"The service is busy right now. Try again in a moment.","error.plain.connection":"The connection dropped. Try again.","error.plain.timeout":"That took too long. Try again.","error.plain.access":"Access was refused. Check the sign-in, then try again.","error.plain.permission":"This computer didn't allow that. Check the file or folder permissions, then try again.","error.plain.notFound":"That couldn't be found. It may have been removed.","error.plain.tooLarge":"That's too large to send. Try a smaller file or a shorter message.","error.plain.server":"Something went wrong on the other end. Try again.","error.plain.generic":"Something went wrong. Try again.","chat.cloudGuest.notYours":"You can only write in conversations you started on this Cloud.","chat.cloudGuest.newConversation":"New conversation","chat.claudeUpdate.aria":"Update Claude Code","chat.claudeUpdate.offer":"This model needs a newer Claude Code. I can update Claude for you.","chat.claudeUpdate.doIt":"Update Claude for me","chat.claudeUpdate.myself":"I'll do it myself","chat.claudeUpdate.updating":"Updating Claude Code… this can take a minute.","chat.claudeUpdate.manual":"Run this in Terminal, then retry:","chat.claudeUpdate.copy":"Copy command","chat.claudeUpdate.tryAgain":"Try updating again","chat.send":"Send","chat.editMessage":"Edit message","chat.reply":"Reply","chat.replyToMessage":"Reply to message","chat.react":"Add reaction","chat.reactions":"Reactions","chat.reaction.yes":"Thumbs up: yes, go ahead","chat.reaction.no":"Thumbs down: no, not that","chat.reaction.love":"Heart","chat.reaction.laugh":"Laughing","chat.reaction.celebrate":"Celebrate","chat.reaction.looking":"Eyes","chat.reaction.chip":"{reaction}: {people}","chat.pinMessage":"Pin message","chat.unpinMessage":"Unpin message","chat.pinHint":"Pin this message to the top of the thread","chat.unpinHint":"Unpin this message","chat.unpin":"Unpin","chat.pinnedJump":"Jump to the pinned message","chat.you":"You","chat.peer.asked":"asked via ask_bot","chat.peer.handedTask":"handed on a task","chat.peer.openedThread":"opened this thread","chat.peer.requested":"sent a request","chat.automation.openRun":"See run","chat.automation.openRunFor":"See the run behind this {name} message","chat.automation.needsYou":"needs you","chat.automation.failed":"didn't finish","chat.automation.partial":"partly done","chat.assistant":"Assistant","chat.webhookTask":"Webhook task","chat.viewPayload":"View event payload","chat.sentMidTurn":"sent mid-turn","chat.sentMidTurnHint":"Sent while the bot was working. It saw this before its next step, inside the same turn.","chat.viaCall":"via call","chat.callRecord.title":"Call with {name}","chat.callRecord.label":"Live call: {title}, {duration}","chat.callRecord.approval":"{outcome}: {action}","chat.callRecord.waiting":"Waiting","chat.callRecord.expired":"Expired","chat.callRecord.partial":"Some of this call may be in earlier messages. Load earlier messages to see all of it.","chat.callRecord.open":"Open the call: {title}","chat.callSheet.kicker":"Live call","chat.callSheet.empty":"Nothing was asked on this call.","chat.callSheet.kept":"Your requests and {name}’s answers and steps. Nothing else said on the call is kept.","chat.showFull":"Show full message","chat.showLess":"Show less","chat.generatedImage":"Generated image","chat.regenerate":"Regenerate response","chat.messageActions":"Message actions","chat.previousVersion":"Previous version","chat.nextVersion":"Next version","chat.openConversationWith":"Open the conversation with {name}","chat.handoffDoneWhen":"Done when: {criteria}","chat.openThread":"Open #{title}","chat.openThreadOn":"Open #{title} on {name}","chat.sentDirectly":"Sent to {name} directly: it isn't in this room.","chat.sentDirectlyNotInRoom":"Sent to {name} directly: it isn't in {room}.","chat.botScreen":"Bot's screen","chat.digestChip":"Did {tools} tool calls · {files} files changed","chat.digestChipNoFiles":"Did {tools} tool calls","chat.digestTitle":"What this turn did","chat.compactionTitle":"Earlier context summarized","chat.engineCompactionTitle":"Chat condensed into a summary","chat.engineCompactionHint":"The AI summarized earlier messages to make room. Your full conversation is still here, but the agent may not recall older details exactly.","chat.compactionHint":"Your full conversation is still here. The agent uses this summary and recent messages when continuing.","chat.startFresh":"Start fresh","chat.startFresh.hint":"Starts a new session for this chat. Every message stays visible, and the bot's instructions, skills and memory don't change.","chat.startFresh.divider":"Fresh start","chat.startFresh.dividerHint":"Messages above this line aren't sent to the bot","chat.compactionExcerptTitle":"Earlier context shortened to recent excerpts","chat.compactionExcerptHint":"A written summary wasn't available, so the agent continues from these excerpts and recent messages. Older details may be missing from its context. Your full conversation is still here.","contextWarning.short":"Context {percent}%","contextWarning.threadHint":"{name}'s context is {percent}% full. Compact now summarizes older messages into a short note; the whole conversation stays here.","contextWarning.compactNow":"Compact now","contextWarning.compacting":"Compacting…","contextWarning.busy":"Stop this bot's turn first","contextWarning.room":"{name}'s context in this room is {percent}% full.","contextWarning.roomHint":"Its next turn here starts fresh with the room's recent messages. Nothing in the room is deleted.","contextWarning.roomRequested":"Compacts before its next turn.","chat.emptyPrompt":"Send a message to start the conversation.","chat.chiefOfStaff":"Chief of Staff","chat.openProfile":"Open agent profile","chat.openBotPanel":"Details and conversations","chat.backToMainThread":"Back to your chat","chat.openProfileAria":"Open {name}'s profile","chat.showConversations":"Show {name}'s conversations","chat.find":"Find in conversation","chat.findShortcut":"Find in conversation (⌘F)","chat.stop":"Stop","chat.stopTurn":"Stop this turn","chat.computer":"Bot's screen","chat.watchScreen":"Watch","chat.watchScreenHint":"Watch what the bot is doing on its screen","chat.advancedOnly":"In Advanced mode","chat.inspector":"Inspector","chat.inspectorHint":"Inspector: runtime events and raw protocol for this thread","chat.more":"More","chat.export.heading":"Share","chat.export.copy":"Copy as Markdown","chat.export.copied":"Copied","chat.export.copyFailed":"Couldn't copy. Use Download instead.","chat.export.download":"Download as .md","chat.export.copyConversation":"Copy conversation","chat.export.downloadConversation":"Download conversation","chat.usage.menu":"Usage","chat.conversationWith":"Conversation with {name}","chat.showEarlier":"Show earlier messages ({count} more)","chat.loadEarlier":"Load earlier messages","chat.loadingEarlier":"Loading earlier messages…","chat.showLater":"Show later messages ({count} more)","chat.provisioning":"Setting up this bot's desktop…","chat.computerStarting":"Starting {name}'s cloud desktop. The first start takes about a minute.","chat.computerWaking":"Waking {name}'s cloud desktop…","chat.jumpToLatest":"Jump to latest","chat.jumpToLatestAria":"Jump to latest messages","chat.newMessages":"New","chat.newMessagesAria":"New messages","chat.verify.title":"This run","chat.verify.aria":"This run","chat.verify.steps":"Run steps","chat.verify.stepsOne":"1 step","chat.verify.stepsMany":"{count} steps","chat.verify.verifiedCount":"{count} verified","chat.verify.verifiedTag":"verified","chat.verify.failed":"{count} failed","chat.verify.running":"{count} running","chat.verify.unverified":"{count} with no result","chat.verify.dryRunOne":"1 dry run","chat.verify.dryRunMany":"{count} dry runs","chat.verify.collapse":"Collapse the run","chat.verify.expand":"Expand the run","chat.verify.dismiss":"Dismiss the run","chat.verify.save":"Save as skill","chat.verify.saveHint":"Adds the run to your message; add any notes, then send.","chat.verify.staged":"Skill staged for your review","chat.verify.saved":"Saved as a skill","chat.workingFolder":"Working folder: {folder}","task.folder.new":"New thread in a working folder…","task.folder.detail":"The folder is fixed for this thread. Enter a path on the computer running {app}.","task.folder.path":"Working folder","task.folder.placeholder":"Absolute folder path","task.folder.creating":"Creating…","chat.usage.turnsOne":"1 turn","chat.usage.turnsMany":"{count} turns","chat.usage.cachedNote":"cached = context re-read each turn, not new text","chat.usage.uncachedInput":"{tokens} uncached input","chat.usage.cachedInput":"{tokens} cached input","chat.usage.totalInput":"{tokens} input (cached + uncached)","chat.usage.output":"{tokens} output","chat.usage.lastTurnSplit":"Last message: {detail}","chat.usage.uncachedShort":"{tokens} uncached","chat.usage.inputShort":"{tokens} input","chat.usage.tokens":"{tokens} tok","chat.usage.new":"{tokens} new","chat.usage.reread":"{tokens} re-read from cache","chat.usage.lastTurn":"Last message: {read} read · {fresh} new","chat.usage.context":"Context {tokens}","chat.usage.contextOfWindow":"Context {tokens} ({percent}% of {window})","chat.usage.contextShort":"{value} context used","chat.usage.contextNudge":"Long thread: the model re-reads all of it on every message. A new thread starts small.","chat.usage.newNote":"new = text the model had not seen before; the rest is context re-read from cache each turn","chat.usage.in":"{tokens} in","chat.usage.inCached":"{tokens} in ({cached} cached)","chat.usage.out":"{tokens} out","chat.usage.captionSubscription":"equivalent (on your subscription, not billed)","chat.keepWarm.warm":"cache warm","chat.keepWarm.next":"next ping {time}","chat.keepWarm.until":"until {time}","chat.keepWarm.last":"last ping read {tokens}","chat.keepWarm.lastCost":"last ping read {tokens} for {cost}","chat.keepWarm.stopped":"keep-warm stopped: {reason}","chat.usage.captionMetered":"billed to your API key","chat.usage.captionEngine":"as reported by the provider","chat.find.placeholder":"Find in this conversation","chat.find.searching":"Searching…","chat.find.position":"{index} of {count}","chat.find.noResults":"No results","chat.find.previous":"Previous result","chat.find.next":"Next result","chat.find.close":"Close find","chat.find.failed":"Search didn't work. Try again.","chat.find.unavailable":"That message is unavailable","chat.reply.replyingTo":"Replying to {name}","chat.reply.jump":"Jump to original message","chat.reply.cancel":"Cancel reply","chat.reply.image":"[image]","chat.reply.file":"[file]","chat.speak.needsKey":"Add an ElevenLabs key in an agent profile to read messages aloud","chat.speak.needsSetup":"Set up a voice provider in this agent's profile to read messages aloud","chat.speak.needsVoice":"Pick a voice in this agent's profile to read messages aloud","chat.speak.stop":"Stop speaking","chat.speak.read":"Read this aloud","chat.voiceNote.play":"Play voice note","chat.voiceNote.pause":"Pause voice note","chat.voiceNote.seek":"Seek voice note","chat.voiceNote.onLiveCall":"Voice notes can't play during a Live call.","chat.voiceNote.transcript":"Transcript","chat.activity.thinking":"Thinking","chat.activity.working":"Working","chat.typing":"Typing…","chat.queue.workingFor":"Working on {name}'s request","chat.queue.workingForYou":"Working on your request","chat.queue.next":"Next: {name}'s request","chat.queue.nextYours":"Next: your request","chat.queue.nextMore":"Next: {name}'s request, then {count} more","chat.queue.nextYoursMore":"Next: your request, then {count} more","chat.queue.removeYours":"Remove your waiting message","chat.queue.yoursWaiting":"Yours: {text}","chat.teammatesWorking":"Teammates working","chat.friendly.thinking":"Thinking it through","chat.friendly.mulling":"Mulling it over","chat.friendly.working":"Working on it","chat.friendly.chipping":"Chipping away","chat.friendly.digging":"Digging around","chat.friendly.code":"Writing some code","chat.friendly.commands":"Running a few commands","chat.friendly.clicking":"Clicking around","chat.friendly.team":"Checking in with the team","chat.friendly.service":"Working in {service}","chat.activity.runCommand":"Running a command","chat.activity.readFile":"Reading a file","chat.activity.writeFile":"Writing a file","chat.activity.editFile":"Editing a file","chat.activity.searchWeb":"Searching the web","chat.activity.readPage":"Reading a page","chat.activity.searching":"Searching","chat.activity.screen":"Looking at the screen","chat.activity.computer":"Using the screen","chat.activity.openPage":"Opening a page","chat.activity.whosAround":"Checking who's around","chat.activity.rooms":"Checking the groups","chat.activity.postRoom":"Posting in a group","chat.activity.messagePerson":"Passing on a message","chat.activity.handoff":"Handing off a task","chat.activity.askTeammate":"Asking a teammate","chat.activity.reply":"Writing a reply","chat.activity.writingNamed":"Writing {file}","chat.activity.editingNamed":"Editing {file}","chat.activity.readingNamed":"Reading {file}","chat.activity.runningNamed":"Running {target}","chat.activity.searchingWebFor":"Searching the web for “{target}”","chat.activity.readingSite":"Reading {target}","chat.liveness.outputJustNow":"last output just now","chat.liveness.outputMinutes":"last output {count} min ago","chat.liveness.outputHours":"last output {count} h ago","chat.liveness.network":"waiting on the network","chat.liveness.busy":"busy, no output yet","chat.liveness.idle":"idle, no output yet","chat.now.title":"What {name} is doing","chat.now.openActivity":"Open activity","chat.now.output":"Latest output","chat.now.stateDone":"done","chat.now.stateNow":"in progress","chat.now.stateFailed":"failed","chat.now.ranNamed":"Ran {target}","chat.now.searchedWebFor":"Searched the web for “{target}”","chat.now.readSite":"Read {target}","chat.now.readNamed":"Read {target}","chat.now.wroteNamed":"Wrote {target}","chat.now.editedNamed":"Edited {target}","chat.now.ranCommand":"Ran a command","chat.now.searchedWeb":"Searched the web","chat.now.readPage":"Read a page","chat.now.readFile":"Read a file","chat.now.wroteFile":"Wrote a file","chat.now.editedFile":"Edited a file","chat.now.searchedFiles":"Searched files","chat.activity.sizeKb":"{count} KB","chat.activity.sizeMb":"{count} MB","chat.activity.alt.mullingItOver":"Mulling it over","chat.activity.alt.piecingItTogether":"Piecing it together","chat.activity.alt.workingItOut":"Working it out","chat.activity.alt.weighingOptions":"Weighing options","chat.activity.alt.chippingAway":"Chipping away","chat.activity.alt.diggingIn":"Digging in","chat.activity.alt.liningThingsUp":"Lining things up","chat.activity.alt.makingProgress":"Making progress","chat.activity.alt.checkingTheOutput":"Checking the output","chat.activity.alt.readingThrough":"Reading through","chat.activity.alt.lookingItOver":"Looking it over","chat.activity.alt.draftingIt":"Drafting it","chat.activity.alt.makingChanges":"Making changes","chat.activity.alt.lookingItUp":"Looking it up","chat.activity.alt.goingThroughResults":"Going through results","chat.activity.alt.skimmingThePage":"Skimming the page","chat.activity.alt.narrowingItDown":"Narrowing it down","chat.activity.alt.takingALook":"Taking a look","chat.activity.alt.clickingThrough":"Clicking through","chat.activity.alt.passingItAlong":"Passing it along","chat.run.worked":"Worked","chat.run.workedFor":"Worked for {elapsed}","chat.run.steps":"{count} steps · {tools}","chat.run.showSteps":"Show every step","chat.run.more":"+{count} more","composer.command.goalDesc":"Keep a team working until the goal is complete","composer.command.goalBotDesc":"Keep this bot working until the goal is complete","composer.command.learnDesc":"Draft a reusable skill from this conversation","composer.command.setupDesc":"Have this bot interview you and set itself up","composer.command.burstDesc":"Run many parts of a job at once, then merge the results","burst.title":"Burst: {task}","burst.plan":"{count} tasks · {model} · {parallel} at once · about {minutes} min","burst.moreItems":"+{count} more","burst.limitCut":"{total} of the {requested} tasks will run: this plan runs up to {limit} per burst.","burst.morePlan":"Pro runs more at once.","burst.run":"Run","burst.edit":"Edit","burst.cancel":"Cancel","burst.progress":"{done} of {total} done","burst.running":"{count} running","burst.failed":"{count} failed","burst.waiting":"{count} waiting","burst.phase.merging":"Writing one result…","burst.phase.done":"Done","burst.phase.cancelled":"Cancelled","burst.retryFailed":"Retry failed","burst.cancelAll":"Cancel all","burst.showTasks":"Show tasks","burst.hideTasks":"Hide tasks","burst.notFinished":"Not finished: {names}","burst.notFinishedMore":"Not finished: {names}, and {count} more","burst.editInstructions":"Instructions every task gets","burst.editItems":"One task per line","burst.save":"Save","burst.back":"Back","burst.statusLabel":"Burst: {status}","burst.status.queued":"Waiting","burst.status.running":"Running","burst.status.done":"Done","burst.status.failed":"Failed","burst.status.cancelled":"Cancelled","burst.error.action":"That didn't work. Try again in a moment.","composer.command.skillTag":"skill","composer.busy.team":"The team","composer.busy.aBot":"A bot","composer.busy.theBot":"The bot","composer.error.noImages":"The selected responder does not support image attachments.","composer.error.clipboardImage":"Could not read the clipboard image. Try attaching the image file instead.","composer.dictation.macOnly":"Dictation is only available on macOS for now.","composer.dictation.permission":"Dictation needs Microphone and Speech Recognition access. Turn both on in System Settings → Privacy & Security.","composer.dictation.disabled":"Turn on Dictation in System Settings → Keyboard, then try again.","composer.dictation.failed":"Dictation couldn't start. Try again.","composer.dictation.unavailable":"Dictation isn't available in this build.","composer.dictation.start":"Start dictation","composer.dictation.stop":"Stop dictation","composer.dictation.stopHint":"Stop dictation (Esc)","composer.dictation.hint":"Dictate","composer.failed.notSent":"Not sent: “{text}”","composer.failed.attachment":"attachment","composer.failed.dismiss":"Dismiss","composer.failed.dismissAria":"Dismiss failed message","composer.commands.aria":"Composer commands","composer.commands.title":"Commands","composer.mention.aria":"Tag a bot","composer.mention.agent":"Agent","composer.mention.person":"Person","composer.mention.channel":"Group chat","composer.mention.everyoneOne":"1 bot in this chat","composer.mention.everyoneMany":"{count} bots in this chat","composer.mention.team":"Department","composer.mention.teamOne":"1 bot in this department","composer.mention.teamMany":"{count} bots in this department","composer.mention.allOne":"The only bot here","composer.mention.allMany":"All {count} bots","composer.mention.devs":"Developers","composer.mention.devsDesc":"Report a bug to Limix Bot","devs.report.received":"Bug report sent · Got it, we're looking","devs.report.fixedSoon":"Bug report · Fixed, coming in an update","devs.report.fixedComing":"Bug report · Fixed in {version}, coming in your next update","devs.report.fixed":"Bug report · Fixed in {version}","devs.report.tryAgain":"Fixed in {version}. Want to try again?","composer.attach":"Attach a file","composer.attachFiles":"Attach files","composer.teachTask":"Teach a task","composer.goal.aria":"Finish together","composer.goal.title":"Finish together: the team keeps working until the goal is complete","composer.goal.soloAria":"Work until done","composer.goal.soloTitle":"Work until done: the bot keeps working until the goal is complete","composer.goal.offSolo":"Turn off Work until done","composer.goal.off":"Turn off Finish together","composer.goal.chip":"Goal","composer.placeholder.locked":"Finish group setup to start a thread","composer.placeholder.reply":"Reply…","composer.placeholder.approval":"Answer the approval above to continue","composer.placeholder.attaching":"Attaching files…","composer.placeholder.listening":"Listening…","composer.placeholder.steer":"{name} is working. {key} sends this into the running turn","composer.placeholder.steerQueued":"{name} is working. Press {key} again to steer the queued message into the running turn","composer.placeholder.queueGroup":"{name} is working. {key} queues your message","composer.placeholder.queue":"{name} is working. Sends when this turn finishes","composer.placeholder.goal":"Describe what {name} should finish together","composer.placeholder.goalSolo":"Describe what {name} should finish","composer.placeholder.group":"Message {name} ({hint})","composer.placeholder.bot":"Message {name}","composer.hint.dm":"continue the conversation","composer.hint.everyone":"everyone responds","composer.hint.mentions":"@ to bring a bot in","composer.hint.responder":"{name} responds","composer.hint.lead":"Lead","composer.hint.auto":"Jev picks who responds","composer.queued.steering":"Steering…","composer.queued.steerAll":"Steer all","composer.queued.steerNext":"Steer next","composer.queued.steer":"Steer","composer.queued.steerAllHint":"Steer all {count} queued messages now","composer.queued.steerNextHint":"Steer the next queued message now","composer.queued.steerHint":"Steer queued message now","composer.queued.steerInterruptHint":"Stop the running turn and send this message now","composer.queued.steerAllInterruptHint":"Stop the running turn and send all {count} queued messages now","composer.queued.steerNextInterruptHint":"Stop the running turn and send the next queued message now","composer.queued.steeringAria":"Steering queued messages","composer.queued.steerImagesHeld":"Pictures can't be steered into this bot's running turn. Your message will be sent as the next turn.","composer.queued.regionOne":"1 queued message","composer.queued.regionMany":"{count} queued messages","composer.queued.list":"Queued messages","composer.queued.capacity":"Queued. Starts when this bot has a free thread slot.","composer.queued.groupTurn":"Queued. This bot's room turn runs one at a time; it starts when that finishes.","settings.threads.title":"Parallel threads","settings.threads.subtitle":"Choose how much each bot can work on at once.","settings.threads.label":"Maximum running threads per bot","settings.threads.helpHanded":"Applies to a bot's 1:1 threads. Extra messages queue until a slot opens. A room turn runs one at a time per bot, and direct messages queue behind it. Work handed on by another bot waits for a free thread. Threads waiting for approval use a slot. Lowering this limit does not stop running work; model limits and shared-computer protections still apply.","settings.threads.saving":"Saving…","settings.threads.error":"Could not save the thread limit. Please try again.","settings.recovery.title":"Automatic recovery","settings.recovery.enable":"Use a backup model","settings.recovery.help":"If an ACP model provider (such as Qwen or OpenCode) fails before starting, try a backup once. Work that may have already run is not replayed.","settings.recovery.scopeHanded":"Applies to direct bot threads, including Chief and work handed on. Channels are not included. Only this thread switches; bot defaults stay unchanged.","settings.recovery.ownBackups":"Bots with backups of their own (Model → Backup models for this bot) use those instead, whether or not this is on.","settings.recovery.engine":"Backup provider","settings.recovery.model":"Backup model","settings.recovery.chooseEngine":"Choose a provider","settings.recovery.chooseModel":"Choose a model","settings.recovery.unavailable":"{name} (unavailable)","settings.recovery.required":"Choose an available backup provider and model before saving.","settings.recovery.charges":"Permissions stay unchanged; some provider switches need confirmation. Using the backup can incur charges from its provider.","settings.recovery.error":"Could not save automatic recovery. Please try again.","settings.keepWarm.title":"Keep prompt cache warm","settings.keepWarm.subtitle":"For Claude bots signed in with a subscription. Design from Cache Tax (MIT) by Karan Bansal.","settings.keepWarm.enable":"Keep idle threads' prompt cache warm","settings.keepWarm.help":"After a turn in a thread with at least 50k tokens of context, {app} sends one tool-less, forked request every 50 idle minutes so the next message re-reads the cache instead of re-writing the whole thread. Nothing appears in the chat. It stops at the end of the window, when a ping finds the cache already gone, at the spend limit or at the usage limit.","settings.keepWarm.cost":"Each ping reads the thread's context at the cache-read rate and counts toward usage, spend limits and your plan's usage limit. Bots on an API key are never pinged: their cache lasts five minutes.","settings.keepWarm.window":"Keep warm for","settings.keepWarm.hours":"{hours} h","settings.keepWarm.error":"Could not save keep-warm. Please try again.","bot.keepWarm.title":"Keep prompt cache warm","bot.keepWarm.help":"Idle Claude threads with a big context get one cache read every 50 minutes for the window set in Settings → Model providers.","bot.keepWarm.follow":"Same as Settings ({state})","bot.keepWarm.on":"On","bot.keepWarm.off":"Off","settings.threadCleanup.title":"Event log cleanup","settings.threadCleanup.subtitle":"Trim the logs threads accumulate while they run.","settings.threadCleanup.retention.enable":"Delete event logs of finished threads after","settings.threadCleanup.retention.unit":"days","settings.threadCleanup.retention.help":"Off by default. When on, a daily sweep deletes the event-log files of threads that closed or were archived more than this many days ago. It only removes event-log files, never threads or transcripts.","settings.threadCleanup.cap.enable":"Trim each event log to","settings.threadCleanup.cap.unit":"MiB","settings.threadCleanup.cap.help":"Off by default. When on, each thread's event log is kept at or below this size. Cleanup only removes event-log files, never threads or transcripts.","settings.threadCleanup.invalidRetention":"Enter a number of days between 1 and 3650.","settings.threadCleanup.invalidCap":"Enter a size between 0.25 and 4096 MiB.","settings.threadCleanup.saving":"Saving…","settings.threadCleanup.error":"Could not save event log settings. Please try again.","settings.attachments.title":"Attachments","settings.attachments.used":"{used} of {max} used","settings.attachments.help":"Pictures and files added to chats are kept here. Clearing removes the ones older than 10 minutes; bot and profile pictures, the sidebar banner and files your routines use stay.","settings.attachments.confirmText":"Older messages will no longer show the files they had. This can't be undone.","settings.attachments.clear":"Clear attachments","settings.attachments.confirm":"Clear now","settings.attachments.cancel":"Cancel","settings.attachments.clearing":"Clearing…","settings.attachments.cleared":"Done. Files removed: {count} ({freed} freed).","settings.attachments.failed":"{count} could not be removed (in use or read-only). Try again later.","composer.queued.deleteAria":"Delete queued message {index} of {count}","composer.queued.deleteTitle":"Delete this queued message","composer.queued.editAria":"Edit queued message {index} of {count}","composer.queued.editTitle":"Edit: move this message back into the composer","composer.send.steer":"Send into the running turn","composer.send.queue":"Queue message","composer.send.message":"Send message","composer.send.queueHint":"Sends when the current turn finishes","composer.send.steerSimple":"Add this to what {name} is doing","composer.send.queueSimple":"Sends when {name} is done","composer.followUp.menu":"Choose how to send this message","composer.followUp.steer":"Steer now","composer.followUp.queue":"Queue","composer.followUp.restart":"Restart turn","composer.followUp.steerHint":"Interrupt what {name} is doing","composer.followUp.queueHint":"Run after the current turn","composer.followUp.restartHint":"Start the turn over with this message","composer.followUp.buttonTitle":"{title} · {key}: {alternate}","attach.unavailableOld":"This older file reference is no longer available to download","attach.downloadFailed":"Couldn't download that file. Try again.","attach.saveFailed":"That file could not be saved","attach.previewAria":"Preview {name}","attach.imagePreview":"Image preview","attach.position":"{index} of {count}","attach.downloadAria":"Download {name}","attach.download":"Download","attach.openOriginalAria":"Open original {name}","attach.openOriginal":"Open original","attach.close":"Close image preview","attach.previous":"Previous image","attach.next":"Next image","attach.retryAria":"Retry loading {name}","attach.imageUnavailable":"Image unavailable","attach.imageOutsideWorkspace":"This picture is outside this chat's working folder, so it can't be shown here","attach.previewImageAria":"Preview attached image {name}","attach.externalHidden":"External image hidden for privacy","attach.savedTo":"Saved to {path}","attach.saveAria":"Save a copy of {name}","attach.retrySaveAria":"Retry saving {name}","attach.downloading":"Downloading…","attach.downloaded":"Downloaded","attach.showInFolder":"Show in folder","attach.showInFinder":"Show in Finder","attach.originalMissing":"The original file was moved or deleted","attach.folderEmpty":"This folder has no files to open here","attach.folderFilesAria":"Files in {name}","attach.folderTruncated":"Only the first files are listed","attach.outsideWorkspace":"This file is outside this chat's working folder, so it can't be saved from here","attach.outsideWorkspacePath":"Find this file at this path on the computer running {app}","attach.revealMissing":"That file is no longer there","attach.revealFailed":"Couldn't show that file in its folder. It may have been moved or deleted.","task.renameHint":"Click to switch · double-click or right-click to rename","task.newBusy":"Let this turn finish first","task.new":"New thread: a fresh conversation","task.switchWithUsage":"All threads · {label} ({input} in · {output} out)","task.switchWithUsageDetail":"All threads · {label} ({detail})","task.switch":"All threads","task.otherActivity":"Other activity ({count})","task.workingElsewhere":"Working in other threads: {count}","attention.title":"Active Threads","attention.titleCount":"Active Threads, {count}","attention.empty":"No active threads","attention.item":"{title} · {name} · {status}","attention.pin":"Pin","attention.unpin":"Unpin","sidebar.pinnedThreads.title":"Pinned threads","sidebar.pinnedThreads.item":"{title} · {name}","task.search":"Search threads","task.renameAria":"Rename thread","task.renameNamed":"Rename {title}","task.renameTitle":"Rename this thread","task.regenerateTitle":"Regenerate title","task.regeneratingTitle":"Regenerating…","task.deleteAria":"Delete thread","task.deleteTitle":"Delete this thread and its conversation","model.effort.off":"Off","model.effort.quick":"Quick","model.effort.balanced":"Balanced","model.effort.deep":"Deep","model.effort.deeper":"Deeper","model.effort.max":"Max","model.blurb.smartest":"Smartest. Best for hard, long jobs.","model.blurb.balanced":"Fast and smart. Good for most work.","model.blurb.fastest":"Quickest and cheapest. Simple tasks.","model.blurb.light":"Quick and light.","model.simple.model":"Model","model.simple.manage":"Manage AI accounts","model.simple.needsSetup":"{name} needs to be set up before you can use it.","model.simple.setUp":"Set up","model.simple.apiKey":"API key","model.simple.noModels":"No models to show here yet.","model.simple.signInForOwn":"Sign in for {name}'s own models","model.simple.reasoning":"Reasoning","model.simple.botsModel":"{name}'s model","model.simple.botsModelScope":"{name}'s model, used in all its chats","model.simple.unavailable":"Unavailable","model.orgBlocked":"Turned off by your organization","model.simple.signIn":"Sign in","model.simple.lookingModels":"Looking for models…","model.simple.auto":"Auto","model.simple.useDefault":"Use default","model.simple.back":"Back","model.simple.clearSearch":"Clear search","model.simple.thinkingLevel":"{level} thinking. Higher is slower but more careful.","model.simple.thinkingDefault":"The model decides how hard to think.","model.simple.thinkingAuto":"Recommended. Effort is picked per message.","model.simple.effortHint.none":"No extra thinking. The fastest replies.","model.simple.effortHint.low":"A little thinking. Quick replies for simple asks.","model.simple.effortHint.medium":"Some thinking. A good balance for most work.","model.simple.effortHint.high":"Careful thinking for harder problems. Slower.","model.simple.effortHint.xhigh":"Very careful, for tricky multi-step work. Slower still.","model.simple.effortHint.max":"Thinks as long as it needs. Slowest, for the hardest jobs.","model.simple.thinkingSummary":"{level} thinking","model.setupRequired":"Setup required","model.signInRequired":"Sign-in required","model.ready":"Ready","model.provider":"Provider: {name}","model.search":"Search models","model.searchLocal":"Search local models","model.busy":"Stop this bot's turn before changing its model","model.threadBusy":"Stop this thread's turn before changing its model","model.reasoningNextTurn":"Reasoning level applies from the next message","model.choose":"Choose model","model.customSwitchOnHost":"This thread uses Custom approval. Switch its model in the app on the host computer, so leaving Custom can be confirmed there.","model.providerSwitch.title":"Switch model with Ask permissions?","model.providerSwitch.threadBody":"Switch this thread to {model} and reset its permissions to Ask. Existing tool approvals are cleared. Your bot default and other threads stay unchanged. You can review access for the new provider afterward.","model.providerSwitch.botBody":"Switch the bot's model to {model}, with Ask permissions and existing tool approvals cleared for this thread and the bot. Every thread that uses the bot's model switches too, back to Ask where the new provider needs it. Threads with their own model stay as they are. You can review access for the new provider afterward.","model.providerSwitch.confirm":"Switch with Ask","model.useBotModel":"Use {name}'s model","model.botModelTag":"(bot's model)","model.followsBot":"Uses {name}'s model","model.ownModel":"This thread's own model","model.threadsOwnModel":"{count} threads use their own model.","model.threadsOwnModelOne":"1 thread uses its own model.","model.switchThemToo":"Switch them too","model.switchItToo":"Switch it too","model.busyThreadKeptModelOne":"1 thread is busy, so it kept its own model. Try again when it's done.","model.busyThreadsKeptModel":"{count} threads are busy, so they kept their own model. Try again when they're done.","model.account":"Account","model.refreshing":"Refreshing {name} models","model.refresh":"Refresh {name} models","model.refreshTitle":"Refresh models","model.unconfirmed":"{name} hasn't listed its models yet. These may be out of date.","model.localModels":"Local models","model.local.noTools":"No tools","model.favorite.add":"Add {name} to favorites","model.favorite.remove":"Remove {name} from favorites","model.localHint":"Run this agent with a model already on your machine.","model.apiKeyHint":"Runs on your API key. The provider bills you for what it uses.","model.chooseHint":"Choose a model for this bot.","model.chooseThreadHint":"Choose a model for this thread.","model.localSoon":"Local models will appear as soon as the agent is installed.","model.results":"{count} results","model.allModels":"All models · {count}","model.suggested":"Suggested","model.useLocalCount":"Use a local model ({count} available)","model.useLocal":"Use a local model","model.addApiKeys":"Add API keys","model.addOrChangeApiKeys":"Add or change API keys","model.rail.cloud":"Cloud","model.rail.apiKeys":"API keys","model.rail.local":"Local","attach.loadImage":"Load image","attach.oldImage":"This older image reference is no longer available","attach.legacyFile":"{name} (unavailable legacy attachment)","attach.unavailable":"Unavailable","task.chip":"Thread","task.newShort":"New thread","task.sharedChat":"Shared chat","task.untitledConversation":"New conversation","task.untitledChat":"Untitled chat","task.matching":"{count} matching threads","task.list":"Threads","task.namedList":"{name} threads","task.collapseNamed":"Collapse {name} threads","task.expandNamed":"Expand {name} threads","task.showAll":"Show all {count} threads","task.bulk.select":"Select threads","task.bulk.done":"Done","task.bulk.selectAll":"Select all","task.bulk.older":"Older than {days} days","task.bulk.archived":"Archived","task.bulk.clear":"Clear","task.bulk.selected":"{count} selected","task.bulk.cancel":"Cancel","task.bulk.delete":"Delete {count}","task.bulk.deleting":"Deleting…","task.bulk.rowCheck":"Select {title}","task.bulk.running":"Running threads cannot be selected","task.bulk.confirmTitle":"Delete selected threads ({count})?","task.bulk.confirmBody":"This permanently removes these conversations and their messages. Generated project files are kept.","task.bulk.pinnedNote":"Pinned threads included: {count}.","task.bulk.freshNote":"Every thread is selected, so a new empty conversation will be started.","task.bulk.channelLimit":"A channel keeps at least one thread, so one stays unselected.","task.bulk.result":"Deleted: {count}.","task.bulk.resultBusy":"Kept because they are running: {count}.","task.bulk.resultMissing":"Already gone: {count}.","task.bulk.resultError":"Stopped early: {message}","task.archivedList":"Archived ({count})","task.empty":"No threads yet","task.newIn":"New thread in {name}","task.actions":"Actions for {title}","task.waiting":"Waiting","task.waitingOnTeammate":"Waiting on teammate","task.openedBy":"opened by {name}","task.helperGroup":"Opened by bots","task.closedBy":"closed by {name}","task.closed":"Closed","task.archive":"Archive","task.copyLink":"Copy link","task.link":"Link","task.openLink":"Open {link}","task.removeLink":"Remove link","task.assignLink":"Assign to thread","task.unassignLink":"Remove from thread","task.refreshPermissions":"Refresh permissions","task.refreshPermissionsHint":"Apply this bot's current approval level and saved approvals to this thread. Other threads stay as they are.","task.unarchive":"Unarchive","task.archived":"Archived","task.snooze":"Snooze","task.snoozeUntilActivity":"Until new activity","task.snoozeTonight":"Until 6 PM","task.snoozeTomorrow":"Until 9 AM tomorrow","task.stopSnoozing":"Stop snoozing","task.snoozed":"Snoozed","thread.gone":"That thread is no longer here.","thread.goneShowing":"That thread is no longer here. Showing {name} instead.","thread.botGone":"That bot is no longer here.","task.unread":"Unread","task.updated.justNow":"just now","task.updated.minutes":"{count} min ago","task.updated.hours":"{count} h ago","task.updated.yesterday":"yesterday","task.updated.days":"{count} d ago","task.unreadMany":"Unread threads","task.deleteConfirm":"Delete thread?","task.deleteBody":"“{title}” and its conversation will be deleted. This cannot be undone.","task.deleteAll":"Delete all threads…","task.deleteAllConfirm":"Delete all threads ({count})?","task.deleteAllConversations":"Delete all conversations…","task.deleteAllConversationsConfirm":"Delete all conversations ({count})?","folder.settings":"Folder settings","folder.markRead":"Mark folder as read","folder.showAll":"Show all","folder.markingRead":"Marking folder as read…","folder.markedRead":"Folder marked as read","folder.namedSettings":"{name} settings","folder.create":"Create folder","folder.new":"New folder","folder.newNamed":"New folder under {name}","folder.icon":"Choose folder icon","folder.iconNamed":"Change {name} folder icon","folder.emoji":"Custom emoji","folder.emojiHint":"Choose an emoji or paste one below. Leave blank for the default folder icon.","folder.defaultIcon":"Default folder icon","folder.save":"Save folder","folder.saving":"Saving…","folder.actions":"Actions for {name} folder","sidebar.bot.actions":"Actions for {name}","folder.moveUp":"Move folder up","folder.moveDown":"Move folder down","folder.reordering":"Saving folder order…","folder.reordered":"Folder order saved","task.queued":"Queued","folder.creating":"Creating…","folder.close":"Close folder settings","folder.name":"Folder name","folder.detail":"Keep related threads together under {name}. Moving a thread never changes its model, permissions, or conversation.","folder.saveName":"Save name","folder.delete":"Delete folder…","folder.deleteConfirm":"Delete folder, keep threads","folder.deleteBody":"Delete this folder? Its threads move out of the folder. All conversation history is kept.","folder.choose":"Choose folder for new thread","folder.newIn":"New thread in","folder.none":"No folder","folder.move":"Move to folder","folder.moveNamed":"Move {title} to folder","task.noMatch":"Nothing matches “{query}”","model.backTo":"Back to {name} models","model.afterSetupOne":"1 model will appear after setup.","model.afterSetupMany":"{count} models will appear after setup.","model.showAll":"Show all {count} models","model.showSuggested":"Show suggested only","model.loadedNow":"Loaded now","model.noLocal":"No local models found","model.noLocalHint":"Start oMLX, Ollama, Unsloth, LM Studio, or EXO, then reopen this picker.","model.lookingLocal":"Looking for local models…","model.loadingModels":"Loading {name} models…","model.available":"{count} available","model.noProviders":"No model providers are available.","model.noMatch":"Nothing matches “{query}”","model.typedByHand":"{id} · typed by hand","model.section.default":"Default model","model.section.starting":"Starting model for the new bot and its threads.","model.section.threads":"For groups and every thread that uses the bot's model. A thread keeps its own model only when you pick one in it.","model.section.installationDefault":"A new bot starts on this installation's default model unless you pick another here. To switch automatically when this model is at its usage limit, add backup models below.","model.section.effort":"Effort","model.section.startingReasoning":"Starting reasoning variant for the new bot.","model.section.effortHelp":"How hard this bot thinks in groups and every thread that uses its model.","model.section.effortHelpDefault":"How hard this bot thinks in groups and every thread that uses its model. By default, no level is sent.","model.effort.summary":"{level} effort","model.fallback.title":"Backup models for this bot","model.fallback.uses":"Used in order, with no other setting, when this bot's AI is at its usage limit or the provider proves a request never started. Work that may have run is not replayed. Only that thread switches; bot defaults and other threads stay unchanged. Backup provider charges may apply.","model.fallback.remove":"Remove {name} from the fallback list","model.fallback.model":"Model for {name}","model.fallback.add":"Add a backup AI","model.fallback.none":"No other AI is available","model.fallback.addOption":"Add an AI…","model.effort.label":"Reasoning effort","model.effort.default":"Default","model.effort.none":"None","model.effort.low":"Low","model.effort.medium":"Medium","model.effort.high":"High","model.effort.xhigh":"X-High","model.effort.noLevel":"Send no effort level and let the provider decide","model.effort.ask":"Ask for {level} reasoning effort","model.variant.label":"Reasoning variant","model.variant.openCodeDefault":"OpenCode default","model.variant.session":"Use session setting","model.variant.unavailable":"unavailable","model.variant.unverified":"unverified","model.variant.unavailableHelp":"Saved variant is unavailable. Choose another or use the session setting.","model.variant.unverifiedHelp":"Saved variant has not been checked in this session.","model.variant.unavailableChoice":"Saved variant “{variant}” is unavailable. Choose an available variant.","model.variant.unverifiedChoice":"Saved variant “{variant}” has not been checked in this session.","model.variant.none":"No variant selected.","model.variant.on":"On","model.variant.sessionValue":"Session: {variant}.","model.variant.clearHint":"Send no thinking selection; the agent keeps its session or configured setting","model.variant.clear":"Clear variant selection","model.variant.use":"Use {variant} for this model","model.scope.label":"Apply model changes to","model.scope.bot":"Thread + bot default","model.scope.thread":"Only this thread","model.scope.botHelp":"The bot's model: this thread, groups, and every thread that uses the bot's model.","model.scope.threadHelp":"This thread only. It keeps this model when the bot's model changes.","permissions.cannotCoordinate":"This model cannot contact other bots","permissions.openSystemSettings":"Open System Settings","permissions.chief.title":"Chief of Staff","permissions.chief.oneFor":"One for {section}","permissions.chief.unsupportedCurrent":"This bot still holds the role, but its current provider cannot contact teammates. Choose a provider that supports bot coordination.","permissions.chief.active":"This is the primary contact for {section}. It can create and coordinate specialists in this department, then combine their work into one answer.","permissions.chief.unsupported":"Choose a provider that supports bot coordination.","permissions.chief.replace":"Make this bot the {section} Chief and hand the role over from {current}.","permissions.chief.make":"Make this bot the primary contact for the {section} department.","permissions.approval.title":"Approval level","permissions.approval.draftHanded":"Default for the new bot's threads, routines and work handed to it.","permissions.approval.helpHanded":"Default for new threads, routines and work handed to it. Full access also applies at once to every existing thread. Use Refresh permissions on a thread to apply the current level to that conversation.","permissions.approval.applyFull":"Apply Full access to all threads","permissions.outbound.title":"Sending on your behalf","permissions.outbound.help":"Emails, messages, posts, invites, and payments through connected apps. Reading and drafting don't count as sending. Full access sends without asking unless you set a rule here.","permissions.outbound.ask":"Ask every time","permissions.outbound.askHint":"Every send waits for your tap.","permissions.outbound.allow":"Send without asking","permissions.outbound.allowHint":"Sends go out without waiting for your tap.","permissions.localAuto.title":"Allow Auto mode on this computer?","permissions.localAuto.body":"Auto mode will let this bot click, type, and run tools on this computer without asking first. Destructive and sensitive actions still stop. Continue only if you are watching.","rename.aria":"Rename","rename.named":"Rename {name}","rename.agent":"Rename agent","rename.doubleClick":"Double-click to rename","approvalMode.ask.label":"Ask for approval","approvalMode.ask.chip":"Ask","approvalMode.ask.desc":"Requests approval for commands and file changes","approvalMode.edits.label":"Auto-accept edits","approvalMode.edits.chip":"Edits","approvalMode.edits.desc":"Approves file edits automatically; other actions can still require approval","approvalMode.auto.label":"Approve for me","approvalMode.auto.chip":"Auto","approvalMode.auto.desc":"Uses the provider's automatic review to approve routine actions and ask about others. Web search is allowed without asking.","approvalMode.full.label":"Full access","approvalMode.full.chip":"Full access","approvalMode.full.desc":"Full computer access (elevated risk)","approvalMode.custom.label":"Custom (config.toml)","approvalMode.custom.chip":"Custom","approvalMode.custom.desc":"Uses permissions defined in config.toml","approvalMode.antigravity.label":"Auto (full access)","approvalMode.antigravity.desc":"Automatically approve tool requests for this bot, including commands, edits, and computer actions. No automatic review.","approvalMode.noNativeReview":"This provider has no automatic review; behaves like Ask","approvalMode.triggerAria":"{mode} for {provider}","approvalMode.whileWorking":"The bot is working. A change applies from its next step where its AI allows it, otherwise from its next turn.","approvalMode.threadTrustedNotice":"Full and Custom access are managed in bot settings in the desktop app.","approvalMode.menuAria":"Approval mode for {provider}","approvalMode.question":"How should {provider} actions be approved?","approvalMode.learnMore":"Learn more","approvalMode.customLocalOnly":"Custom approval must be changed in the local packaged desktop app","approvalMode.customLocalOnlyDot":"Custom approval must be changed in the local packaged desktop app.","onboarding.meet.title":"Meet {app}","onboarding.meet.next":"Next","onboarding.meet.demo":"Hand off any task to your team of bots","onboarding.meet.placeholder":"Welcome to {app}","onboarding.meet.connected":"Connected to {name}","onboarding.meet.otherWays":"Other ways to connect","onboarding.meet.setupLater":"Set up later","onboarding.meet.connectAi":"Connect an AI","onboarding.meet.connectNamed":"Connect {name}","onboarding.meet.signIn":"Sign in with {name}","onboarding.meet.install":"Install {name}","onboarding.meet.waiting":"Waiting for {name}…","onboarding.meet.paste":"Paste the code from {name}","onboarding.meet.pasteSubmit":"Use this code","onboarding.shell.placeholder":"Ask anything, or drop a file","onboarding.shell.noBots":"No bots yet","onboarding.hint.approval":"Bots ask before doing anything important.","onboarding.hint.connector":"Sign in once in your browser and every bot can use it.","onboarding.chief.title":"Introducing your Chief of Staff","onboarding.chief.body":"Your main point of contact. It checks in on its own and coordinates work with your other bots.","onboarding.chief.create":"Create Chief of Staff","onboarding.chief.choose":"Choose an existing bot","onboarding.chief.chooseTitle":"Choose your Chief of Staff","onboarding.chief.confirm":"Confirm","onboarding.continue":"Continue","onboarding.engines.error":"Couldn't check your AI connections. Try again.","onboarding.tour.error":"Couldn't save your progress. Try again, or skip the tour.","onboarding.engines.otherWays":"Other ways","onboarding.engines.connected":"{name} is connected. Your bots can start now.","onboarding.engines.answered":"Connected · {name}","onboarding.engines.checkingAnswer":"Checking that {name} answers…","onboarding.engines.noAnswer":"{name} is signed in but didn't answer. Try another way.","onboarding.engines.orAnother":"Or connect another AI below.","onboarding.engines.freeBackup":"{name}'s free model is ready as a backup. For the best answers, connect an AI you already use.","onboarding.engines.signInHint":"Use the {name} account you already have. You sign in on their own website, so your password stays with them.","onboarding.engines.ready":"Ready","onboarding.engines.needsSetup":"Needs setup","onboarding.org.title":"Using {app} at work?","onboarding.org.body":"Sign in with your organization.","onboarding.org.signIn":"Sign in","onboarding.org.otherAddress":"Other Admin address","onboarding.org.finish":"Finish in your browser","onboarding.org.finishHelp":"Sign in on the page that opened. It shows this code:","onboarding.org.connected":"Signed in to {organization}","onboarding.org.models":"Company models: {count}","onboarding.org.manage":"Organization settings","onboarding.import.skills":"Skills","onboarding.import.skillsFrom":"{count} from {sources}","onboarding.import.skillsHint":"Copied in, so your bots can use them with any AI.","onboarding.import.tools":"Tools","onboarding.import.toolsFrom":"{count} MCP servers from {sources}","onboarding.import.toolsFromOne":"1 MCP server from {sources}","onboarding.import.toolsHint":"Added switched off. Turn them on in Apps → MCP servers.","onboarding.import.source.claudeCode":"Claude Code","onboarding.import.source.claudeDesktop":"Claude Desktop","onboarding.import.source.cursor":"Cursor","onboarding.import.source.codex":"Codex","onboarding.import.source.gemini":"Gemini CLI","onboarding.import.bring":"Bring them in","onboarding.import.bringing":"Bringing them in…","onboarding.import.error":"Couldn't bring them in. Try again, or skip.","onboarding.import.added":"Added {list}.","onboarding.import.addedSkills":"{count} skills","onboarding.import.addedSkillsOne":"1 skill","onboarding.import.addedTools":"{count} tools","onboarding.import.addedToolsOne":"1 tool","onboarding.import.nothingNew":"All of it was already here.","onboarding.import.nothingAdded":"Nothing new was added.","onboarding.import.review":"{names}: switched off until you check what the scan found, in a bot's Skills settings.","onboarding.import.conflict":"Skipped {names}: a different skill with that name is already here.","onboarding.import.toolConflict":"Skipped {names}: a different MCP server with that name is already here.","onboarding.import.failed":"Couldn't bring in {names}. Try again later from Settings → Replay welcome tour.","onboarding.import.filesLeftOut":"Large or non-text files in skill folders were left out.","onboarding.import.limit":"{names} didn't fit: your list of MCP servers is full.","onboarding.import.policy":"Your organization doesn't allow {names}.","onboarding.import.busy":"Your MCP servers were being changed. Add {names} later in Apps → MCP servers.","settings.welcome.appTour":"Replay app tour","onboarding.tour.progress":"Step {current} of {total}","onboarding.tour.skip":"Skip tour","onboarding.tour.finish":"Finish","onboarding.tour.next":"Next","onboarding.tour.composer":"This is where you talk to your bots. Type anything and press {key}. Every chat is a real agent that does the work.","onboarding.tour.model":"Every bot has its own brain. This chip shows the model; click it to switch, even mid-conversation.","onboarding.tour.computer":"Bots have hands. This button opens the bot's screen, where you watch it work. Let's open it.","onboarding.tour.model-simple":"Click the bot's name up here to open its panel. Its instructions, schedules and apps are on the Details tab, and you can change them any time.","onboarding.tour.computer-simple":"Bots have hands. The bot's panel shows where it works, and you can watch its screen as it goes. Let's open that.","onboarding.tour.computer-browser":"The bot's screen. Switch between its desktop and its own browser here. The browser is where it reads the web and fills in forms for you.","onboarding.tour.tools":"The Tools menu. Connected apps, Automations, and the team map all live behind it. Let's open it.","onboarding.tour.apps":"Connected apps. Gmail, Slack, GitHub, Notion, and hundreds more. Let's have a look.","onboarding.tour.apps-panel":"The marketplace. Sign in to an app once and every bot can use it as a tool. We'll close this and move on.","onboarding.tour.automations":"Automations. Bots that run on a schedule, or when a webhook calls. Let's open it.","onboarding.tour.automations-page":"A calendar. Drop a bot on a time and it runs by itself; the result lands in its chat. Next takes you back to the chat.","onboarding.tour.done":"That's the tour, and you're back in the chat. Your phone, the terminal, and everything else is in Settings. Replay this any time from Settings → General.","onboarding.card.custom":"Type your own answer","onboarding.card.dismiss":"Dismiss question","onboarding.spot.gotIt":"Got it","onboarding.spot.composer":"This is where you talk to your bots. ⌘K finds any bot, room, or message.","onboarding.spot.model":"This bot runs on the model shown here. Change it any time, even mid-conversation.","onboarding.spot.approval":"When a bot needs your OK, it asks with a card like this. Allow or deny.","onboarding.spot.connector":"When a bot needs an app you haven't connected, it asks here. Sign in once in your browser and every bot can use it.","onboarding.back":"Back","onboarding.bot.name":"Bot name","onboarding.bot.color":"Color","chief.addBotStarter":"I'd like another bot to help me. Ask me what it should do.","onboarding.hosted.intro":"This is your team's shared {app}. Everyone who joins sees the same bots, chats and files. Your organization provides the AI models, so there is nothing to install.","onboarding.shared.title":"Your team's shared {app}","onboarding.shared.body":"Bots, chats and files here are shared with your team. Your administrator sets up the AI models and settings, so you can start chatting right away.","settings.welcome.title":"Welcome tour","settings.welcome.subtitle":"The first-run walkthrough: model providers, permissions, phone, and your first bot.","settings.welcome.subtitleShort":"Meet the app and your Chief of Staff again, and connect an AI.","settings.welcome.replay":"Replay welcome tour","engineSetup.copyCommand":"Copy command","engineSetup.setupTitle":"Set up {name}","engineSetup.terminalSignInCheck":"Installed. Finish signing in to your account in Terminal, then choose Check again.","engineSetup.sameMachine":"Install and sign in on the computer running {app}, as the same user. On a remote connection, that means the machine it runs on, not this device. Then choose Check again. No app restart needed.","engineSetup.cloudCantInstall":"{name} can’t be installed on the Cloud yet. Choose another AI in the model picker.","engineSetup.pathHint":"Already installed but still not detected? In Settings → Model providers and accounts, expand CLI path and updates and use Set CLI to choose the executable.","engineSetup.checkFailed":"Could not refresh provider status. The previous status is still shown. {reason}","engineSetup.checked":"Provider status refreshed.","engineSetup.invalidStatus":"Couldn't get the status of your AIs. Try checking again.","engineSetup.installNotVerified":"The installer finished, but the provider is not usable yet. {reason}","engineSetup.installVerified":"Installation verified. Sign in if requested.","engineSetup.copied":"Copied","engineSetup.copy":"Copy","engineSetup.opened":"Opened","engineSetup.terminal":"Terminal","engineSetup.openedHint":"Terminal opened. Paste the command and press Enter.","engineSetup.terminalOpened":"Terminal opened","engineSetup.pasteHint":"Paste the command and press Enter.","engineSetup.copyOnOpenHint":"The command is copied when Terminal opens.","engineSetup.commandCopied":"Command copied","engineSetup.openUpdate":"Open update in Terminal","engineSetup.installing":"Downloading and verifying…","engineSetup.downloadNote":"{mb} MB download from Google. {app} verifies it before use.","engineSetup.startingGoogle":"Starting Google sign-in…","engineSetup.openGoogleAgain":"Open Google sign-in again","engineSetup.signInGoogle":"Sign in with Google","engineSetup.antigravitySlow":"Starting Antigravity can take up to 90 seconds. Your browser will open when it’s ready.","engineSetup.finishedSignIn":"I finished signing in","engineSetup.otherComputer":"Signing in from another computer?","engineSetup.otherComputerHint":"After Google redirects to a page that cannot load, paste that page’s complete URL here.","engineSetup.otherComputerUrl":"Page address from the other computer","engineSetup.sending":"Sending…","engineSetup.sendRedirect":"Send redirect","engineSetup.googleNoLink":"Google sign-in did not return a link.","engineSetup.signInTitle":"Sign in to {name}","engineSetup.installTitle":"Install {name}","engineSetup.managedSignIn":"Each Antigravity setup has its own Google account. Your browser completes the secure sign-in.","engineSetup.terminalSignIn":"Finish the account sign-in in Terminal. Reopen this menu afterward and we’ll check again.","engineSetup.injectDesc":"Install the agent once, then you can run it with local models. No cloud sign-in required.","engineSetup.managedDesc":"{app} installs its own verified Antigravity runtime. It is separate from the Antigravity app and agy CLI; install it here, sign in with Google, and this model list will refresh from your account.","engineSetup.installDesc":"Install the command-line app once. Models will appear here as soon as it’s ready.","engineSetup.installDescSignIn":"Install the command-line app once. Models will appear here as soon as it’s ready; sign-in may follow.","engineSetup.notReady":"{name} isn’t ready","engineSetup.noReason":"This model provider is not available on this machine.","engineSetup.openSignIn":"Open sign-in in Terminal","engineSetup.openInstall":"Open install in Terminal","engineSetup.noInstaller":"There isn’t a one-line installer for this platform. Use the setup guide below.","engineSetup.apiKey.rejected":"The provider rejected the saved key.","engineSetup.apiKey.title":"{name} needs an API key","engineSetup.apiKey.description":"Paste your key in Settings → API keys. It saves and checks itself, and the models show up here.","engineSetup.apiKey.remote":"Add the key in Settings → API keys on the computer running {app}.","engineSetup.apiKey.open":"Open API keys","engineSetup.apiKey.configuredTitle":"{name} uses your API key","engineSetup.apiKey.configuredDescription":"To fix a typo or use a new key, replace or clear it in Settings → API keys.","engineSetup.apiKey.configuredRemote":"To change the key, open Settings → API keys on the computer running {app}.","engineSetup.apiKey.change":"Change key","engineSetup.serverInstall":"Install {name} here","engineSetup.serverUpdate":"Update {name} here","engineSetup.serverInstalling":"Installing. This can take a minute.","engineSetup.serverInstalled":"Installed. Checking the model provider.","engineSetup.usingAppCopy":"Another copy of {name} on this computer doesn't start, so {name} now uses the copy {app} installed.","engineSetup.usingAppCopyDismiss":"Dismiss","engineSetup.appCopy.title":"{name} is installed","engineSetup.appCopy.description":"{name} works with its free models, so choose Check again to load them. To use your own account instead, add your {name} API key in Settings → API keys.","engineSetup.appCopy.remote":"{name} works with its free models, so choose Check again to load them. To use your own account instead, add your {name} API key in Settings → API keys on the computer running {app}.","engineSetup.standaloneDownloadNote":"About {mb} MB download. {app} checks it before installing.","engineSetup.serverInstallDesc":"{app} installs the command-line app on the machine it runs on, as its own user, in its own folder. No terminal needed; sign-in may follow.","engineSetup.serverUpdateDesc":"{app} updates the command-line app on the machine it runs on. No terminal needed.","engineSetup.preferTerminal":"Prefer a terminal?","engineSetup.details":"Details","engineSetup.needsNode":"Requires Node.js and {npm}.","engineSetup.viewGuide":"View setup guide","settings.experimental.title":"Experimental features","settings.experimental.subtitle":"Early features may change while we test them. Each one says whether it starts on or off.","settings.experimental.error":"Could not save the experimental feature setting.","settings.experimental.skillAuthoring":"Bots may write their own skills","settings.experimental.skillAuthoringDetail":"On by default. Save a bot's verification run as a skill from the Verify card, or ask a supported bot to run /create-verification-skill. Each new or changed skill shows in the chat with Undo.","settings.experimental.skillAuthoringAria":"Allow bots to draft skills","settings.experimental.skillReview":"Learn skills automatically","settings.experimental.skillReviewDetail":"Off by default. After a bot has run enough tool steps in a conversation, it reviews that conversation in the background and may create or improve its own skills. The review uses the bot's AI and counts toward spend limits. Each change shows in the chat with Undo.","settings.experimental.skillReviewNeedsAuthoring":"Turn on “Bots may write their own skills” first.","settings.experimental.skillReviewAria":"Let bots learn skills automatically","settings.experimental.skillReviewSteps":"Review after this many tool steps","settings.experimental.skillReviewStepsRange":"Enter a whole number from {min} to {max}.","settings.experimental.shareSkills":"Share learned skills with the department","settings.experimental.shareSkillsDetail":"When a bot learns or improves a skill, it moves into the skills library and every bot in the same department gets it. Conversations already running hear about it on their next message; new ones list it. A teammate with its own skill of that name keeps it.","settings.experimental.shareSkillsNeedsAuthoring":"Turn on “Bots may write their own skills” first.","settings.experimental.shareSkillsAria":"How learned skills are shared with the department","settings.experimental.shareSkillsOff":"Off","settings.experimental.shareSkillsAsk":"Ask","settings.experimental.shareSkillsAuto":"Automatic","settings.experimental.skillReviewNoEngine":"Bots on {engines} won't learn skills this way: their AI can't run the background review.","settings.experimental.browser":"Built-in browser","settings.experimental.browserOn":"Enabled for this installation. Each bot also has its own browser switch.","settings.experimental.browserOff":"Off by default. Enable it to let supported bots use a browser tab you can watch and take over.","settings.experimental.browserWindows":"Not available on this Windows machine yet: install the browser with `limixbot browser install`.","settings.experimental.browserAria":"Enable the built-in browser","settings.browser.serverSites":"Open sites on this server","settings.browser.serverSitesDetail":"Off by default. Turn it on to let bots' browsers open websites hosted on this server and on its local network. Limix Bot itself stays blocked.","settings.experimental.newBrowser":"New browser","settings.experimental.newBrowserDetail":"Off by default. Bots' browsers run on {app}'s own Chrome driver instead of agent-browser: pages render at your screen's sharpness, and bots can handle uploads, downloads, dialogs and pop-ups. Profiles that use your own Chrome are not affected. Switching closes open browsers, and sign-ins saved in one do not carry over to the other.","settings.experimental.newBrowserAria":"Use the new browser","browser.notInstalled":"The browser isn't installed here yet. Turn on the browser switches in App Settings → Devices and in the bot's Access settings, then open Bot's screen → Browser to install it. Or run `limixbot browser install` where the app runs.","browser.panel.profileTitle":"Browser profile: {name}","browser.panel.profiles":"Browser profiles","browser.panel.closeProfiles":"Close browser profiles","browser.panel.closeTyping":"Close typing","browser.panel.typeTextTitle":"Type into the selected page field","browser.panel.typeTextField":"Text for the page","browser.panel.typeTextPlaceholder":"Type or paste text","browser.panel.typeButton":"Type","browser.panel.enableBot":"Enable the browser in this bot's profile to use it.","browser.panel.installIncomplete":"Browser installation incomplete","browser.panel.engineNotInstalled":"The browser isn't installed","browser.panel.engineNotInstalledHelp":"Install it so {name} can open web pages. It's a one-time download of about 160 MB.","browser.panel.installIncompleteHelp":"agent-browser is installed, but Chrome setup has not finished. Retry the browser installation.","browser.panel.installing":"Installing… (a one-time download of about 160 MB)","browser.panel.retryInstall":"Retry browser installation","browser.panel.installEngine":"Install the browser","browser.panel.newTab":"New tab","browser.panel.tab":"tab","browser.panel.closeTab":"Close {title}","browser.panel.fullscreen":"Full screen","browser.panel.exitFullscreen":"Exit full screen","browser.panel.enterAddress":"Enter a web address or something to search for.","browser.panel.back":"Back","browser.panel.forward":"Forward","browser.panel.reload":"Reload page","browser.panel.address":"Browser address","browser.panel.connecting":"Connecting…","browser.panel.menu":"Browser menu","browser.panel.typeTextMenu":"Type or paste text…","browser.panel.reconnectView":"Reconnect view","browser.panel.confirmRestart":"Restart this profile’s browser? Open tabs will close. Saved logins are kept. Stop any bots using it first.","browser.panel.restartBrowser":"Restart browser…","browser.panel.connectionFirst":"Open the browser connection first.","browser.panel.heldElsewhere":"Another window or device controls this browser. Hand control back there to use it here.","browser.panel.reconnecting":"Reconnecting…","browser.panel.disconnected":"Browser disconnected","browser.panel.opening":"Opening the live browser…","browser.panel.connectionInterrupted":"Connection interrupted. Reconnecting the browser view…","browser.noEngine":"The browser isn't available here.","browser.panel.connectionEnded":"Browser connection ended. Reconnect to continue watching.","browser.panel.reconnect":"Reconnect","browser.panel.asleep":"This browser closed after it sat unused, to save memory.","browser.panel.wake":"Open it again","browser.panel.waking":"Opening…","browser.passkey.title":"This browser can’t use your passkey","browser.passkey.body":"{provider} is asking for a passkey from your phone or computer. A bot’s browser can’t reach it, so this step won’t finish here. What works instead:","browser.passkey.appsGoogle":"For Gmail, Calendar or Drive, connect Google as an app. {name} then works without signing in here.","browser.passkey.appsMicrosoft":"For Outlook, Calendar or OneDrive, connect Microsoft as an app. {name} then works without signing in here.","browser.passkey.connect":"Open Connected apps","browser.passkey.otherWayGoogle":"To sign in here anyway, choose Try another way on this page, then use your password and a code from your authenticator app, a text message or a backup code.","browser.passkey.otherWayMicrosoft":"To sign in here anyway, choose Other ways to sign in on this page, then use your password and a code from your authenticator app, a text message or a backup code.","browser.passkey.lentPc":"Your PC {computer} is shared with the Cloud: ask {name} to sign in with the browser on that PC, where your passkey works. You approve it at the PC.","browser.passkey.lendPc":"Or open {app} on your PC: it shares its apps and screen with the Cloud by itself, so {name} can use the browser on that PC, where your passkey works.","browser.passkey.learnMore":"Learn more","browser.passkey.dismiss":"Dismiss","browser.control.yours":"You’re using the browser","browser.control.yoursHint":"{name}’s browser tools are paused while you use it. Control goes back to {name} after a few seconds without input.","browser.control.waiting":"Waiting for {name} to finish…","browser.control.stale":"{name} was busy, so that wasn’t sent. Try again.","browser.control.keptHint":"{name}’s browser tools are paused until you hand back. Control goes back to {name} by itself after 5 minutes without input, or 2 minutes after you close the browser.","browser.control.take":"Take control","browser.control.handBack":"Hand back","browser.typeSecret":"Type a password or code…","browser.typeSecret.title":"Type a password or code into the selected field","browser.typeSecret.field":"Password or code for the page","browser.typeSecret.note":"It goes only to the page. {app} does not keep, log or show it.","signIn.title":"Sign in needed","signIn.cardLabel":"{name} needs you to sign in to {site}","signIn.banner":"needs you to sign in to {site}","signIn.open":"Open","signIn.done":"Done","signIn.cancel":"Cancel","signIn.where.browser":"Sign in in {name}’s built-in browser. Open takes you to its Browser tab, already in your control.","signIn.where.vm":"Sign in on the private desktop {name} works on. Open shows it with Take control.","signIn.where.cloud":"Sign in on the cloud desktop {name} works on. Open shows it with Take control.","signIn.where.local":"Sign in on this computer, in the browser {name} is using.","signIn.where.host":"Sign in on the computer {app} runs on, in the browser {name} is using.","signIn.local.explain":"Go to the browser window {name} is using on this computer and sign in there. Not the Browser tab: it keeps its own sign-ins, which {name} does not use here. Then press Done.","signIn.local.explainHost":"Sign in at the computer {app} runs on, in the browser window {name} is using there. A Browser tab keeps its own sign-ins, which {name} does not use here. Then press Done.","signIn.private":"You type the password into the page yourself. {app} never sees it.","signIn.superseded":"Superseded by a newer request","signIn.answeredInChat":"You answered in the chat","signIn.retry":"Try again","signIn.settled.done":"Signed in to {site}","signIn.settled.cancelled":"Sign-in to {site} declined","signIn.settled.resumed":"{name} is continuing","signIn.settled.waiting":"Waiting to resume","signIn.settled.failed":"Resuming failed","signIn.saveLogin":"Save a login","signIn.save.note":"Save the username and password for {site}. From now on {name} signs in with them without you, and never sees the password. Change or delete it in Settings → Logins.","signIn.save.noteShared":"Save the username and password for {site}. {name} and the bots that share its browser ({bots}) sign in with them from now on, without you, and never see the password. Change or delete it in Settings → Logins.","signIn.save.submit":"Save and continue","signIn.save.elsewhere":"Also fill it on {host}, the sign-in page open in the browser now","signIn.settled.saved":"Login saved for {site}","browser.live.botBusy":"{name} is using this browser. The live view opens when it’s free…","browser.input.tooSlow":"Browser input stopped because the browser is not keeping up with it (it may be stuck, or the connection may be slow). Reconnect the view before typing again. If it stays stuck, restart the browser.","browser.profiles.heldElsewhere":"Another window is using this browser. Switch profiles once it’s done.","browser.profiles.busy":"Profiles unlock once the current browser action finishes.","browser.viewport.keysHint":"Once you click or type in the page, your keys go to it; until then Tab moves on. Press Shift+Escape to return to the browser address bar.","settings.profiles.title":"Browser profiles","settings.profiles.subtitle":"Named sign-in sessions any bot can use. Create one from a bot's Browser tab; sign in once and it stays.","settings.profiles.empty":`No profiles yet. Pick "+ Add profile…" under a bot's browser.`,"settings.profiles.saveError":"Could not save browser profiles.","settings.profiles.deleteError":"Couldn't delete the browser profile. Try again.","settings.profiles.confirm":"Delete “{name}”?{bots} This permanently signs out of this profile and erases its browser data.","settings.profiles.confirmOneBot":" {name} will switch to their own browser sessions.","settings.profiles.confirmManyBots":" {count} bots will switch to their own browser sessions.","settings.profiles.nameAria":"Profile name","settings.profiles.rename":"Rename","settings.profiles.usedBy":"used by {names}","settings.profiles.notInUse":"not in use","settings.profiles.deleteTitle":"Delete this profile and forget its logins","settings.profiles.busyOne":"{names} is still running. Stop that bot before deleting this browser profile.","settings.profiles.busyMany":"{names} are still running. Stop those bots before deleting this browser profile.","settings.profiles.browserSession":"Browser profile","settings.profiles.sharedSubtitle":"Shared browser logins for your bots. Create a profile here, then choose it in a bot's Browser tab.","settings.profiles.sharedEmpty":"No shared profiles yet. Each bot still has its own browser.","settings.profiles.own":"Own browser","settings.profiles.temporary":"Temporary (don't save logins)","settings.profiles.temporaryHint":"Temporary sessions keep logins only while the app is running. They aren't saved to disk.","settings.profiles.sharedHint":"Your own browser keeps logins private to this bot. Bots on a shared profile share whatever it is signed in to; a saved login kept to some bots is filled there only if every bot on the profile may use it.","settings.profiles.stopToSwitch":"Stop this bot's turn before switching browser profiles.","settings.profiles.manage":"Manage profiles","settings.profiles.newName":"New profile name","settings.profiles.create":"Create profile","settings.profiles.limit":"You can keep up to 20 shared profiles.","settings.adminOnly.change":"Only an admin of this installation can change this.","settings.adminOnly.usage":"Only an admin of this installation can see usage.","settings.profiles.ownerOnly":"Only an admin of this installation can manage browser profiles.","settings.profiles.refreshError":"Could not refresh browser profiles. Reload this page before trying again.","settings.profiles.removed":"This profile was removed. Choose another browser profile.","settings.profiles.deleteUsers":"These bots will switch to their own browser: {names}.","settings.profiles.browserLabel":"Browser","settings.profiles.builtIn":"Built-in","settings.profiles.myChrome":"My Chrome","settings.profiles.myChromeHint":"Bots on this profile act inside your real Chrome, signed in as you, with your cookies and your open tabs. Use it for sites that refuse the built-in browser, such as Google sign-in. To connect, open chrome://inspect/#remote-debugging in Chrome and turn remote debugging on; Chrome asks you to allow the connection. Sign in and out of sites in Chrome itself.","settings.profiles.myChromeUnavailable":"My Chrome is for the desktop app, where bots run on your own computer. Anywhere else, such as the Cloud, there is no Chrome of yours to use, so every profile uses the built-in browser.","settings.profiles.myChromeLent":"On My Cloud this is the Chrome on {name}, your {device}. It works while that {device} is awake with {app} open, in conversations you started yourself.","settings.profiles.myChromeLentOffline":"{name} is offline right now.","settings.profiles.myChromeShare":"To use My Chrome on My Cloud, open {app} on your Mac or PC: it shares its Chrome by itself while it's awake. Until then, bots on a My Chrome profile can't browse; switching a profile to Built-in works too.","settings.sites.title":"Signed-in sites","logins.site":"Login page address","logins.sitePlaceholder":"accounts.example.com","logins.siteHint":"The address of the page with the password box. The login fills anywhere on that site (accounts.example.com and www.example.com are both example.com), never on another site.","logins.username":"Username or email","logins.password":"Password","logins.passwordKeep":"New password (leave empty to keep the saved one)","logins.passwordNeeded":"Enter the password.","logins.totp":"2FA setup key (optional)","logins.totpKeep":"New 2FA setup key (leave empty to keep the saved one)","logins.totpHint":"The key or otpauth:// address a site shows when you set up an authenticator app. With it, the one-time code is filled too.","logins.private":"Encrypted on the computer {app} runs on and never shown again. Bots never see it: {app} types it into the login page for them.","logins.cancel":"Cancel","logins.saveError":"Could not save the login.","settings.logins.loading":"Loading saved logins…","settings.logins.loadError":"Could not load saved logins.","settings.logins.deleteError":"Couldn't delete the login. Try again.","settings.logins.save":"Save login","settings.logins.saveChange":"Save changes","settings.logins.change":"Change","settings.logins.changeFor":"Change the login for {site}","settings.logins.delete":"Delete","settings.logins.deleteFor":"Delete the login for {site}","settings.logins.deleteConfirm":"Delete for good","settings.logins.twoFactor":"2FA","settings.logins.noUsername":"No username","settings.logins.source.card":"Saved from a chat","settings.logins.source.settings":"Added here","settings.logins.sharedBrowser":"Not filled for {bots}: that browser is shared with bots this login isn't kept to, and a sign-in there would reach them too. Give each a browser of its own, or keep the login to every bot on it.","settings.logins.source.1password":"From 1Password","settings.logins.used":"Used {when}","settings.logins.neverUsed":"Not used yet","settings.logins.whoCanUse":"Who can use it","settings.logins.allBots":"All bots","settings.logins.onlyThese":"Only these bots","settings.logins.noBots":"No bots","settings.logins.exactHost":"Only on this exact address, not elsewhere on its site","settings.logins.exactHostFor":"Only on {hosts}, not elsewhere on {site}","settings.logins.onlyOn":"Only on {hosts}","settings.logins.signsInOn":"Also signs in on {hosts}","settings.logins.removeTotp":"Remove the saved 2FA key","settings.logins.limits":"Bots get the password typed into the page, never as text, and it is hidden from anything they read back. A screenshot of the page can still show what a site displays, so save logins only for sites you trust your bots with.","settings.logins.onePassword.title":"1Password","settings.logins.onePassword.guide":"Let bots use logins, keys and secrets from 1Password. In 1Password, create a service account that can read one vault only, such as “Shared with {app}”, then paste its token here.","settings.logins.onePassword.token":"Service account token","settings.logins.onePassword.connect":"Connect 1Password","settings.logins.onePassword.connected":"Connected to {vaults} · {count} logins, keys and secrets","settings.logins.onePassword.refresh":"Refresh","settings.logins.onePassword.disconnect":"Disconnect","settings.logins.onePassword.vaults":"1Password vaults","settings.logins.onePassword.vaultUse":"{count} logins · {who}","settings.logins.onePassword.changeVault":"Change who can use {vault}","settings.logins.onePassword.error":"Couldn't reach 1Password. Check your internet connection and the token, then try again.","settings.logins.onePassword.note":"The token is encrypted on the computer {app} runs on and never shown again. 1Password logins appear in the list above, filled the same way, and are changed in 1Password. A vault is for every bot unless you choose bots for it.","settings.logins.cloudOwn":"These are the Cloud's own logins. Your computer's logins come here by themselves when the {app} app on that computer moves your bots here.","settings.vault.title":"Vault","settings.vault.subtitle":"Passwords and keys your bots can use. Bots never see them: {app} types a password into the login page for a bot, and gives a key to its tools without showing it.","settings.vault.adminOnly":"Only an admin of this installation can see and change the Vault.","settings.vault.loading":"Loading the Vault…","settings.vault.loadError":"Could not load the Vault.","settings.vault.empty":"Nothing saved yet. Add a login or a secret here, or save one when a bot asks for it.","settings.vault.noMatch":"Nothing matches your search.","settings.vault.search":"Search the Vault","settings.vault.filter":"Show","settings.vault.filter.all":"All","settings.vault.filter.logins":"Logins","settings.vault.filter.secrets":"Keys & secrets","settings.vault.add":"Add","settings.vault.addLogin":"Add a login","settings.vault.addSecret":"Add a secret","settings.vault.importEnv":"Paste a .env file","settings.vault.secret.name":"Name","settings.vault.secret.namePlaceholder":"Stripe secret key","settings.vault.secret.nameHint":"Bots ask for it by this name.","settings.vault.secret.value":"Secret","settings.vault.secret.valueKeep":"New secret (leave empty to keep the saved one)","settings.vault.secret.save":"Save secret","settings.vault.secret.changeFor":"Change {name}","settings.vault.secret.deleteFor":"Delete {name}","settings.vault.secret.keyOff":"{servers} no longer has its key, so it stays off until it gets a new one.","settings.vault.secret.saveError":"Could not save the secret.","settings.vault.secret.private":"Encrypted on the computer {app} runs on and never shown again. Bots never see it: {app} hands it to their tools.","settings.vault.env.label":".env file","settings.vault.env.hint":"Each NAME=value line becomes a secret called NAME. Lines starting with # are skipped.","settings.vault.env.submit":"Import","settings.vault.env.none":"No NAME=value lines found.","settings.vault.env.done":"Saved to the Vault: {count}.","settings.vault.keys.title":"AI and app keys","settings.vault.keys.hint":"Keys {app} uses itself, such as your AI provider's, are kept in API keys.","settings.vault.manager":"Password manager","settings.sites.loading":"Checking…","settings.sites.none":"Not signed in to any site.","settings.sites.shared":"{names} share this browser: signing out here signs all of them out.","settings.sites.signOut":"Sign out","settings.sites.signOutOf":"Sign out of {site}","settings.sites.signOutAll":"Sign out of all","settings.sites.error":"Couldn't read this browser's sign-ins. Try again in a moment.","settings.connections.title":"API keys","settings.connections.subtitle":"Keys for AI providers and optional services. Paste a key and it saves and checks itself.","settings.connections.ready":"Connected apps service is ready","settings.connections.selfHost":"Self-host connected apps","settings.engines.title":"Model providers and accounts","settings.engines.subtitle":"Manage provider apps and Claude accounts.","keys.composio.label":"Composio project key","keys.composio.desc":"Connect Gmail, GitHub, Slack, Notion, and other apps through your own Composio project.","keys.composio.link":"Create or copy a project key","keys.opencode.label":"OpenCode API key","keys.opencode.placeholder":"Paste an OpenCode API key","keys.opencode.desc":"Optional. Existing OpenCode Zen, Go, and other provider connections are detected automatically.","keys.opencode.link":"Open the OpenCode provider guide","keys.opencode.providersHint":"More providers for OpenCode bots (Anthropic, OpenAI, OpenRouter, Groq, or your own router): run {command} in a terminal, then refresh OpenCode’s models under Model providers.","keys.opencode.otherProviders.title":"Keys for other OpenCode providers","keys.opencode.otherProviders.hint":"Save a key for any provider OpenCode supports, under the name OpenCode reads it from, such as VENICE_API_KEY for Venice. OpenCode then lists that provider's models. Keys go only to OpenCode and can't be shown again.","keys.opencode.otherProviders.name":"Key name","keys.opencode.otherProviders.key":"Key","keys.opencode.otherProviders.keyPlaceholder":"Paste the key","keys.opencode.otherProviders.removeAria":"Remove {name}","keys.aboutAria":"About {label}","keys.helpAria":"{label} help","keys.optional":"Optional","keys.configured":"Configured","keys.includedWithCloudPro":"Included with your Cloud plan","keys.testAuthenticated":"API key authenticated. Chat not tested.","keys.testFreeTier":'Free account: bots will use free models (marked "free" in the model picker).',"keys.testCatalog":"Model catalog reachable: {models}. Authentication and chat not verified.","keys.testCatalogNoModels":"Model catalog reachable. Authentication and chat not verified.","keys.testDraft":"Unsaved key. Save it to use it.","keys.testSaved":"Saved key:","keys.connected":"Connected","keys.replace":"•••••••• (paste to replace)","keys.removeKey":"Remove the saved key","keys.clear":"Clear","keys.notAKey":"That doesn't look like an API key: keys have no spaces. Copy the key again and paste it here.","keys.providers.title":"Provider keys","keys.providers.subtitle":"Keys every bot in this installation runs on, billed per token to your provider account.","lmStudio.title":"LM Studio (Bionic)","lmStudio.desc":"Bionic is the current LM Studio app. Start its local API server, then add it here. Downloaded chat models are detected from the server.","lmStudio.port":"Port","lmStudio.token":"API token (optional)","lmStudio.tokenHint":"Leave this empty unless Require authentication is on in LM Studio.","lmStudio.add":"Add LM Studio","lmStudio.adding":"Adding…","lmStudio.added":"This server is already added.","ollama.title":"Ollama","ollama.checking":"Looking for Ollama…","ollama.ready":"Ollama is running at {url}. Pulled models: {count}.","ollama.noModels":"Ollama is running at {url} but has no models yet. Pull one, then check again:","ollama.notRunning":"Ollama isn’t running at {url}. Open the Ollama app, or start it with:","ollama.unreachable":"Can’t reach Ollama at {url}. Check the address and that this computer can reach it.","ollama.timeout":"Ollama at {url} didn’t answer in time. Check that it’s running and reachable, then check again.","ollama.notOllama":"Something answers at {url}, but it isn’t Ollama. Check the address.","ollama.address":"Ollama address","ollama.addressHint":"Leave this empty for this computer, or enter another computer’s address and check again.","ollama.add":"Add Ollama","ollama.adding":"Adding…","ollama.added":"Ollama at this address is already added.","ollama.download":"Download Ollama","ollama.short.notRunning":"Not running","ollama.short.noModels":"No models yet","ollama.short.unreachable":"Can’t be reached","keys.integrations.title":"Integrations","keys.anthropic.label":"Anthropic API key","keys.anthropic.desc":"Adds “Claude (API key)” to the model picker, billed per token to your Anthropic console. Signed-in Claude bots keep their plan.","keys.anthropic.warning":"While this key is saved, every Claude bot uses it instead of a Claude login, billed per token to your Anthropic account.","keys.anthropic.everyBot":"Use this key for every Claude bot","keys.anthropic.everyBotOn":"Every Claude bot runs on this key instead of its sign-in.","keys.anthropic.everyBotOff":"Only bots set to “Claude (API key)” use it. Signed-in Claude bots stay on their plan.","keys.anthropic.link":"Anthropic console","keys.openai.label":"OpenAI API key","keys.openai.desc":"Adds OpenAI's models to the model picker and lets you make Live calls, billed to your OpenAI account.","keys.openai.note":"Codex doesn't use this key. It signs in with ChatGPT.","keys.openai.link":"OpenAI API keys","keys.openrouter.label":"OpenRouter API key","keys.openrouter.desc":"Adds OpenRouter's catalog of models to the model picker, billed to your OpenRouter credits.","keys.openrouter.link":"OpenRouter keys","keys.other.title":"Other OpenAI-compatible server (Groq, Together, Ollama…)","keys.openaiCompat.label":"OpenAI-compatible API key","keys.openaiCompat.placeholder":"Paste the server's API key","keys.openaiCompat.desc":"For Groq, Together, a local Ollama server or any other server that speaks the OpenAI API. Set its base URL below.","keys.openaiCompat.link":"About the OpenAI API","keys.openaiCompat.url":"OpenAI-compatible base URL","keys.openaiCompat.urlHint":"For example https://api.groq.com/openai/v1, or http://localhost:11434/v1 for Ollama.","keys.mistral.placeholder":"Paste a Mistral API key","keys.mistral.label":"Mistral API key","keys.mistral.desc":"For models served directly by Mistral AI.","keys.mistral.link":"Mistral console","keys.cerebras.label":"Cerebras API key","keys.cerebras.desc":"Open models (GPT OSS, Qwen) on Cerebras chips, many times faster than GPU clouds. Adds Cerebras to your AI choices.","keys.cerebras.link":"Cerebras Cloud","keys.groq.label":"Groq API key","keys.groq.desc":"For models served by Groq. Adds Groq to your AI choices, with its API endpoint already set.","keys.groq.link":"Groq docs","keys.greenference.label":"Greenference API key","keys.greenference.placeholder":"Paste your Greenference API key","keys.modelgo.label":"ModelGo API key","keys.modelgo.placeholder":"Paste your ModelGo API key","keys.modelgo.note":"Make a key in the ModelGo console, under API Keys.","keys.meta.label":"Meta Model API key","keys.meta.desc":"For Meta's Muse models, including Muse Wonder. Adds Meta Muse to your AI choices; new Muse models appear on their own.","keys.meta.link":"Meta Model API","keys.deepseek.label":"DeepSeek API key","keys.deepseek.desc":"For DeepSeek Harness, billed to your DeepSeek account. If dsh already has a DeepSeek key saved in its own settings, it uses that one instead of this.","keys.deepseek.link":"DeepSeek API keys","keys.xai.label":"xAI API key","keys.xai.desc":"For xAI's Grok models and xAI image generation.","keys.xai.link":"xAI console","keys.treg.label":"treg key","keys.postiz.label":"Postiz API key","keys.treg.placeholder":"Paste your treg key","keys.postiz.placeholder":"Paste your Postiz API key","keys.treg.desc":"Lets bots search X and look up companies, people, funding, news and more through treg. Calls are billed to your treg balance, with no limits from Limix Bot.","keys.treg.link":"Get a key at treg.to","keys.treg.working":"treg is working ✓","keys.treg.balance":"Balance: {balance}.","research.title":"Research (treg)","research.ownOn":"This bot can search X and look up companies, people and more through your treg key. Calls are billed to your treg balance.","research.planOn":"Included with your Limix Bot Cloud plan: this bot can search X and look up companies, people and more within the plan's monthly allowance.","research.off":"Off for this bot. Turn it on to let it search X and look up companies, people and more.","research.addKey":"Add your treg key in Settings → API keys to let bots research X, companies, people and more.","research.openKeys":"Open API keys","research.connecting":"Connecting research to your Cloud plan…","research.switch":"Let this bot use research","keys.test":"Test","keys.testing":"Testing…","keys.testOk":"Works. Models include {models}.","keys.testOkNoModels":"Works.","keys.testRejected":"The provider rejected this key.","keys.testUnreachable":"Couldn't reach the provider. Check the address and your internet connection, then test again.","keys.testUnexpected":"The provider answered unexpectedly (status {status}).","decider.intro":"Small, fast models that sort and read things for your bots: who answers in a room, which emails matter, what an invoice says. They can't act on their own, and your bots still do the work.","decider.status.line":"Decisions: {decisions} · Extraction: {extraction}","decider.status.notSetUp":"not set up","decider.status.byJev":"your Jev key","decider.status.byWorkersAi":"your Cloudflare key","decider.status.byOpenRouter":"your OpenRouter key","decider.status.byCloud":"your Cloud plan","decider.workersAi.title":"Cloudflare Workers AI (free tier)","decider.workersAi.detail":"Decides with Clef and reads with Clairic. The free tier covers light use.","decider.workersAi.accountId":"Account ID","decider.workersAi.accountIdPlaceholder":"Account ID, 32 letters and digits from your Cloudflare dashboard","decider.workersAi.token":"API token","decider.workersAi.tokenPlaceholder":"Paste a token with Workers AI permission","decider.workersAi.getKey":"Get a free token at Cloudflare","decider.workersAi.needsAccount":"Add your account ID with the token.","decider.workersAi.test.ok":"Cloudflare answered in {ms} ms.","decider.workersAi.error.rejected":"Cloudflare didn't accept this token. Check that it has Workers AI permission and that the account ID is right.","decider.workersAi.error.unreachable":"Couldn't reach Cloudflare. Check your connection.","decider.workersAi.error.timeout":"Cloudflare didn't answer in time. Try again.","decider.workersAi.error.rateLimited":"Cloudflare is limiting requests right now. Try again in a minute.","decider.workersAi.error.overloaded":"Cloudflare is busy right now. Try again shortly.","decider.workersAi.error.http":"Cloudflare sent back an error ({status}). Try again in a moment.","decider.workersAi.error.malformed":"Cloudflare sent an answer {app} couldn't read.","decider.test.extractionOk":"Extraction works too.","decider.test.extractionFailed":"Extraction didn't answer.","decider.master":"Use fast decisions and extraction","decider.masterNeedsKey":"Save a key below to turn this on.","decider.key.label":"Jev API key","decider.key.placeholder":"Paste your TypeSafe API key","decider.key.getKey":"Get a key at typesafe.ai","decider.status.connected":"Connected","decider.status.notConnected":"Not connected","decider.included.error.rejected":"Limix Bot Cloud did not accept this machine's decisions. Try again later.","decider.included.error.subscription":"Decisions are included with an active Cloud subscription.","decider.included.error.limited":"Your Cloud plan's decisions are busy or used up for this month. Try again later.","decider.test.ok":"Jev answered in {ms} ms.","decider.error.rejected":"Jev rejected this key. Check it at typesafe.ai.","decider.error.unreachable":"Could not reach Jev. Check your connection.","decider.error.timeout":"Jev did not answer in time. Try again.","decider.error.rateLimited":"Jev is limiting requests right now. Try again in a minute.","decider.error.overloaded":"Jev is overloaded right now. Try again shortly.","decider.error.http":"Jev sent back an error ({status}). Try again in a moment.","decider.error.malformed":"Jev sent an answer {app} could not read.","decider.error.noKey":"Paste a key or save one first.","decider.error.misconfigured":"The decision model address is not allowed. It must use https.","decider.error.other":"The test did not finish. Try again.","decider.jobs.title":"What it decides","decider.jobs.roomRouting":"Who answers in rooms","decider.jobs.roomRoutingDetail":"In rooms set to Auto, picks the bot that fits each message nobody @mentioned. When Jev is unsure or unreachable, the room's lead answers.","decider.jobs.browserClicks":"Browser clicks","decider.jobs.toolSelection":"Tool selection","decider.jobs.placement":"Where work runs","decider.jobs.comingSoon":"Coming soon","decider.provider.label":"Another key","decider.provider.jev":"TypeSafe Jev","decider.provider.openrouter":"OpenRouter","decider.model.label":"Model","decider.model.recommended":"Recommended","decider.model.more":"More models","decider.model.builtinNote":"OpenRouter's model catalog could not be loaded, so this is the built-in list.","decider.openrouter.master":"Use OpenRouter for fast decisions","decider.openrouter.key.label":"OpenRouter API key","decider.openrouter.key.placeholder":"Paste your OpenRouter API key","decider.openrouter.key.getKey":"Get a key at openrouter.ai","decider.openrouter.test.ok":"OpenRouter answered in {ms} ms.","decider.masterNeedsKey.openrouter":"Save an OpenRouter key below or under API keys to turn this on.","decider.openrouter.status.shared":"Using your OpenRouter API key","decider.openrouter.status.own":"Connected (separate key)","decider.openrouter.status.sharedHint":"Shared with your OpenRouter models, so decisions use the same OpenRouter credits.","decider.openrouter.status.ownFallbackHint":"Clear this key to use your shared OpenRouter API key instead.","decider.openrouter.status.notConnectedHint":"Save an OpenRouter key under API keys to use it here and for models, or paste one below.","decider.openrouter.key.manageLink":"Manage in API keys","decider.openrouter.key.overridePlaceholder":"Use a different key (optional)","decider.openrouter.test.okShared":"OpenRouter answered in {ms} ms with your shared key.","decider.openrouter.error.rejected":"OpenRouter rejected this key. Check it at openrouter.ai/keys.","decider.openrouter.error.unreachable":"Could not reach OpenRouter. Check your connection.","decider.openrouter.error.timeout":"OpenRouter did not answer in time. Try again.","decider.openrouter.error.rateLimited":"OpenRouter is limiting requests right now. Try again in a moment.","decider.openrouter.error.overloaded":"The model is overloaded right now. Try again shortly.","decider.openrouter.error.http":"OpenRouter sent back an error ({status}). Try again in a moment.","decider.openrouter.error.malformed":"The model sent an answer {app} could not read. Try another model.","decider.openrouter.error.credits":"Your OpenRouter account is out of credits. Add some at openrouter.ai/credits.","decider.test.slow":"That is slower than the 1.5 s a room decision may take, so rooms would fall back to the lead. Try a faster model.","keys.vps.label":"Self-hosted VPS","keys.vps.descBefore":"SSH config alias for the Linux VPS. {app} uses your normal SSH config and agent; it does not store keys or passwords. See the ","keys.vps.descLink":"setup guide","keys.vps.descAfter":" for the required SSH alias shape.","keys.vps.aria":"Self-hosted VPS SSH config alias","keys.vps.removeAlias":"Remove the saved alias","usage.title":"Usage","planUsage.title":"Plan usage","planUsage.subtitle":"Remaining allowance on each signed-in provider. 5-hour and weekly windows, when that plan has them.","planUsage.fiveHour":"5-hour","planUsage.weekly":"Weekly","planUsage.left":"{remaining}% left","planUsage.used":"{used}% used","planUsage.monthlySpend":"Monthly spend","planUsage.spendAmounts":"{used} of {limit} spent","planUsage.byModel":"By model","planUsage.resetsIn":"resets in {when}","planUsage.notReported":"Not reported by this plan","planUsage.empty":"No Claude, Codex, or Grok account is configured.","planUsage.loading":"Checking plan usage…","planUsage.fetchError":"Couldn't load plan usage. Try again in a moment.","planUsage.refresh":"Refresh","planUsage.signInAgain":"Sign in again in {provider}","planUsage.provider.chatgptPlan":"ChatGPT plan","planUsage.provider.claudeApiKey":"Claude (API key)","usage.bot.empty":"No usage recorded yet for this bot.","usage.bot.unpriced":"This provider doesn't report a price; tokens are counted.","usage.colTurns":"Turns","usage.colTokens":"Tokens","usage.colNewTokens":"New tokens","usage.colCost":"Cost","usage.allBots":"All bots","usage.cachedNote":"New tokens leave out {cached} of input re-read from the provider's cache, because each turn resends the whole conversation with the system prompt and tool schemas. Counting those re-reads, {total} went through the model. Hover a figure for the split.","usage.costLine":"Cost is {caption}.","usage.history.period":"Period","usage.history.thisMonth":"This month","usage.history.lastMonth":"Last month","usage.history.last30Days":"Last 30 days","usage.history.groupBy":"Group by","usage.history.byBot":"Bot","usage.history.byModel":"Model","usage.history.byUser":"Person","usage.history.byDay":"Day","usage.history.byEngine":"Provider","usage.history.byRoutine":"Routine","usage.history.byDepartment":"Department","usage.history.noDepartment":"No department","usage.history.notRoutine":"Not from a routine","usage.history.export":"Export CSV","usage.history.owner":"This computer","usage.history.botToBot":"Bot to bot","usage.history.routine":"Routine: {name}","usage.history.privateRoutine":"Private routine","usage.history.privateBot":"Private bot","usage.budget.title":"Monthly spend limit","usage.budget.subtitle":"Once the month's cost reaches the limit, no bot in this installation starts a turn until an admin raises it. Admins are notified once a month at the warning level and once at the limit.","usage.budget.none":"No limit is set. Bots spend freely.","usage.budget.within":"Within the limit","usage.budget.nearing":"Nearing the limit","usage.budget.reached":"Limit reached: new turns are refused","usage.budget.spent":"{spent} of {cap} ({percent}%)","usage.budget.monthly":"Limit per month (USD)","usage.budget.warnAt":"Warn at (%)","usage.budget.hint":"Counts what providers report (real on your keys, an equivalent on personal subscriptions) and, for providers that report no price, an estimate from list prices or your own prices. Models with no known price are not counted. Set 0 to remove the limit.","usage.budget.invalid":"Enter a limit of 0 or more and a warning percentage between 1 and 100.","usage.prices.title":"Sell prices","usage.prices.subtitle":"What you charge per million tokens, by model. History and the CSV export gain a billable column; the provider's own cost stays alongside.","usage.prices.currency":"Currency","usage.prices.colModel":"Model","usage.prices.colInput":"Input / 1M","usage.prices.colOutput":"Output / 1M","usage.prices.colCached":"Cached / 1M","usage.prices.modelPlaceholder":"model id, driver/model, or default","usage.prices.add":"Add model","usage.prices.remove":"Remove this price","usage.prices.hint":"A row named default prices any model not listed. Cached input falls back to the input rate when left blank. For providers that report no cost, a price set here for a model also replaces the list price in its cost estimate and the spend limit.","usage.prices.invalid":"Check the numbers for {model}: prices must be 0 or more.","usage.prices.currencyInvalid":"Currency must be a three-letter code, like USD.","usage.page.subtitle":"Where the time and money went: every run, the bots it brought in and each step they took.","usage.page.today":"Today","usage.page.week":"Last 7 days","usage.page.where":"Where it went","usage.page.whereEmpty":"Nothing spent in this period.","usage.page.runs":"Runs","usage.page.runsHint":"Each message or routine run, with every bot it brought in. Open one to see its trace.","usage.page.runsEmpty":"No runs in this period yet.","usage.page.more":"Show more","usage.page.untimedNote":"Runs from before this update show their totals without a timeline. Only new runs are timed.","usage.page.turns":"{count} turns","trace.title":"Trace","trace.live":"Live","trace.spans":"Steps of this run","trace.span":"Span","trace.stat.duration":"Duration","trace.stat.time":"Time","trace.stat.cost":"Cost","trace.stat.tokens":"Tokens","trace.stat.steps":"AI steps","trace.stat.tools":"Tool uses","trace.stat.errors":"Errors","trace.step":"AI step","trace.stepTokens":"{tokens} out","trace.slowest":"Slowest","trace.costliest":"Most expensive","trace.partial":"Partial","trace.partialHint":"This AI didn't report every token count, so some figures are missing rather than zero.","trace.tokensHover":"{input} in, {cached} of them from cache · {output} out","trace.cacheWrite":"{tokens} saved to cache","trace.reasoning":"{tokens} of the output spent reasoning","trace.context":"Context: {tokens} of {window}","trace.notTimed":"Not timed","trace.endedWithTurn":"Still running when the turn ended","trace.groupErrors":"{count} failed","trace.unknownBot":"A bot","trace.failed":"Failed","trace.expand":"Show the steps inside","trace.collapse":"Hide the steps inside","trace.loading":"Loading the trace…","trace.error":"Couldn't load this trace: {error}","trace.missing":"There's no trace for this turn. Only runs since this update are timed.","trace.back":"All runs","trace.close":"Close","trace.view":"View trace","trace.workedFor":"Worked for {duration}","trace.source.person":"A message to {bot}","trace.source.owner":"A message to {bot}","trace.source.routine":"A routine run by {bot}","trace.source.bot":"Work {bot} picked up from a teammate","trace.source.helper":"Helper model work for {bot}","trace.group.browser":"Used the browser · {count} steps","trace.group.computer":"Used the computer · {count} actions","trace.group.phone":"Used the phone · {count} actions","trace.group.terminal":"Ran {count} commands","trace.group.files":"Worked with files · {count} steps","trace.group.search":"Searched the web {count} times","trace.group.web":"Opened {count} web pages","trace.group.app":"Used {app} · {count} actions","trace.group.other":"{tool} · {count} times","people.title":"People","people.subtitle":"Who can sign in to this installation with an emailed code, what each person spent this month, and a link to invite someone.","people.invite":"Invite","people.inviteEmail":"Email or @domain","people.inviteHint":"Admins change settings, model providers and keys; users chat and answer approvals. An invite adds the address here and gives you a link to send.","people.link":"Invite link","people.linkHint":"The link opens the sign-in page with the address filled in. They still receive a one-time code by email, so only the owner of that address gets in.","people.copy":"Copy","people.copied":"Copied","people.refresh":"Refresh","people.colPerson":"Person","people.colRole":"Role","people.colLastSeen":"Last seen","people.colMonth":"This month","people.roleAdmin":"Admin","people.roleMember":"User","people.never":"Never","people.today":"Today","people.devices":"{count} device(s)","people.turns":"{turns} turns this month","people.everyoneAt":"everyone at {domain}","people.makeAdmin":"Make admin","people.makeMember":"Make user","people.remove":"Remove","people.empty":"Nobody yet. Invite someone, or add @yourcompany.com for everyone there.","people.note":"Changes apply at once. Removing someone ends their account sessions and prevents new sign-ins. Devices connected separately by pairing code can be revoked under Remote access.","people.notHosted":"Email sign-in is not enabled on this server, so invite links will not work here; people connect with a pairing code from Remote access.","people.portalSignIn":"On this installation people sign in through your organization's Admin, so invite links and pairing codes are not used here.","people.portal.subtitle":"Who has signed in to this installation, and what each person spent this month.","people.portal.managed":"People are managed in your organization's Admin. Invite someone, change their role or remove them there; this installation follows within a few seconds.","people.portal.open":"Manage people in Admin","people.portal.empty":"Nobody has signed in here yet.","people.portal.note":"This list only shows who has signed in here. It cannot give or take away access.","activity.title":"Activity","activity.subtitle":"Who changed settings, people, access and bots on this installation, and who answered approval cards. Kept on this server for {days} days; nothing is sent to your organization's Admin.","activity.who":"Who","activity.whoPlaceholder":"Name or email","activity.what":"What","activity.from":"From","activity.to":"To","activity.refresh":"Refresh","activity.export":"Export CSV","activity.empty":"Nothing matches in this range.","activity.error":"Couldn't load the activity: {message}","activity.more":"Showing the newest {shown} of {total}. Narrow the filters, or export CSV for all of them.","activity.what.all":"Admin changes and answered cards","activity.what.approvals":"Answered cards","activity.what.decisions":"Every approval decision","activity.what.config":"Settings","activity.what.people":"People","activity.what.session":"Sessions and pairing codes","activity.what.webhook":"Webhooks","activity.what.mcp":"MCP servers","activity.what.engine":"Model providers and keys","activity.what.bot":"Bots","activity.what.budget":"Spend limits and prices","activity.what.visibility":"Bot visibility","activity.decision.user-approved":"Approved","activity.decision.user-denied":"Declined","activity.decision.user-undone":"Undone","activity.decision.auto-approved":"Allowed automatically","activity.decision.auto-denied":"Declined automatically","activity.decision.card-shown":"Asked for approval","activity.decision.review-would-approve":"Reviewer would approve","activity.decision.review-would-deny":"Reviewer would decline","activity.approvalLine":"{decision}: {tool}","activity.approvalIn":"in {bot}","activity.action.config.update":"Changed settings","activity.action.people.update":"Changed who can sign in","activity.action.budget.update":"Changed the spend limit or prices","activity.action.mcp.update":"Changed MCP servers","activity.action.engine.update":"Changed model providers or keys","activity.action.engine.install":"Installed a model provider","activity.action.engine.auth-complete":"Signed in to a model provider","activity.action.engine.auth-sign-out":"Signed out of a model provider","activity.action.engine.claude-update":"Updated Claude Code","activity.action.engine.leftover-files-remove":"Deleted a model provider's leftover files","activity.action.engine.account-add":"Added a Claude account","activity.action.bot.create":"Created a bot","activity.action.bot.update":"Changed a bot's permissions","activity.action.bot.delete":"Deleted a bot","activity.action.visibility.update":"Changed who can see a bot","activity.action.access.update":"Changed who can use a bot","activity.action.access.allow":"Let someone chat with a bot","activity.action.access.decline":"Turned down a request to chat with a bot","activity.action.owner.update":"Changed who a bot reports to","activity.action.routine.handover":"Handed a routine over","activity.action.member.left":"Left the team","activity.action.room.audience-reset":"Widened who can see a room","activity.action.webhook.create":"Created a webhook","activity.action.webhook.update":"Changed a webhook","activity.action.webhook.delete":"Deleted a webhook","activity.action.webhook.rotate-secret":"Replaced a webhook's secret","activity.action.session.revoke":"Signed a device out","activity.action.pairing.create":"Created a pairing code","activity.changed":"Changed: {paths}","activity.before":"Before","activity.after":"After","activity.actor.loopback":"This computer","activity.actor.worker":"Local service","activity.actor.cli":"Command line","botSettings.proposal.chief":"Chief-proposable: arrives as a card you confirm.","botSettings.proposal.owner":"Owner-only: never arrives as a proposal.","botSettings.simple.close":"Close settings","botSettings.simple.tabs":"Bot settings","botSettings.simple.name":"Name","botSettings.simple.job":"Job","botSettings.simple.jobPlaceholder":"What it does","botSettings.simple.instructions":"Instructions","botSettings.simple.instructionsPlaceholder":"How should {name} work? What should it always or never do?","botSettings.simple.beforeActs":"Before {name} acts","botSettings.simple.ask":"Ask me first","botSettings.simple.askHint":"Checks before changes","botSettings.simple.decide":"Decide for me","botSettings.simple.fullHint":"Acts without checking","botSettings.simple.skills":"Skills","botSettings.simple.noSkills":"No skills yet.","botSettings.simple.skillToggle":"Use {name}","botSettings.replyStyle.title":"Reply style","botSettings.replyStyle.subtitle":"How this bot writes back to you.","botSettings.replyStyle.default":"Default","botSettings.replyStyle.defaultHint":"Full answers, formatted however the bot sees fit","botSettings.replyStyle.conversational":"Conversational","botSettings.replyStyle.conversationalHint":"Short, plain replies sent as a few small messages, often with a quick follow-up question. Simple messages are answered by the same AI's fastest model","chat.quickModel":"Quick reply with {model}","botSettings.simple.routines":"Routines","botSettings.simple.edit":"Edit","botSettings.simple.done":"Done","botSettings.simple.thinking":"Thinking","botSettings.simple.thinkingAria":"How hard {name} thinks","botSettings.simple.skillsHint":"Things {name} has learned to do. Switch one off and {name} stops using it.","botSettings.simple.appToggle":"{name} can use {app}","botSettings.simple.appsNone":"No apps connected yet.","botSettings.simple.appsCannot":"The model {name} runs on can't use apps.","botSettings.simple.appsUnknown":"Couldn't check your apps just now.","botSettings.simple.addLogin":"Add login","botSettings.simple.loginsHint":"Sign in once in {name}'s browser and it stays signed in.","botSettings.simple.loginsOff":"{name}'s browser is off. Turn it on in the Screen panel to sign in to sites.","botPanel.addLabel":"Add a label","botPanel.rename":"Rename","botPanel.conversations.title":"Conversations","botPanel.conversations.search":"Search conversations","botPanel.conversations.searchPlaceholder":"Search {name}'s conversations","botPanel.conversations.new":"New conversation","botPanel.conversations.showMore":"Show {count} more","botPanel.conversations.showFewer":"Show fewer","botPanel.avatar.edit":"Edit avatar","botPanel.avatar.tabBot":"Bot","botPanel.avatar.tabGenerate":"Generate","botPanel.avatar.tabUpload":"Upload","botPanel.avatar.reset":"Reset","botPanel.avatar.face":"Face","botPanel.avatar.halloween":"Halloween","botPanel.avatar.diwali":"Diwali","botPanel.avatar.more":"More looks","botPanel.avatar.costume":"Dressed as the {name} while the {skin} skin is on","botPanel.avatar.drop":"Drop a picture here, or choose one","botPanel.avatar.types":"PNG, JPEG, GIF, or WebP · up to 10 MB","botPanel.avatar.shape":"Shape","botPanel.avatar.circle":"Circle","botPanel.avatar.rounded":"Rounded","botPanel.avatar.square":"Square","botPanel.avatar.remove":"Remove picture","botPanel.avatar.uploadHint":"After uploading, drag the picture to reposition it and scroll to zoom.","botPanel.face.idle":"Idle","botPanel.face.happy":"Happy","botPanel.face.curious":"Curious","botPanel.face.drowsy":"Drowsy","botPanel.face.working":"Working","botPanel.face.thinking":"Thinking","botPanel.face.listening":"Listening","botPanel.face.sleeping":"Sleeping","botPanel.face.suspicious":"Suspicious","botPanel.face.proud":"Proud","botPanel.page.approvals":"Approvals","botPanel.page.always":"Always allowed","botPanel.page.android":"Android phone","botPanel.page.voice":"Voice","botPanel.page.blurb":"What {name} does","botPanel.page.team":"Department","botPanel.page.chiefTeams":"Additional departments","botPanel.page.webhooks":"Webhooks","botPanel.page.slack":"Slack","botPanel.page.settings":"Bot settings","botPanel.page.overview":"Overview","botPanel.page.prompt":"What {name} sees","botPanel.page.history":"History","botPanel.library.memoryOff":"Memory is off for {name}.","botPanel.library.memoryError":"Couldn't read the memory file just now.","botPanel.screen.idle":"Idle","botPanel.screen.working":"Working on a task. Its screen shows here soon; open full view to watch it live.","botPanel.screen.resting":"Not using its computer right now","botPanel.none":"None","botPanel.tab.computer":"Computer","botPanel.tab.details":"Details","botPanel.tab.library":"Library","botPanel.routines.empty":"Routines are recurring tasks this bot runs on a schedule. Ask it in chat to set one up.","botPanel.routines.emptyHint":"Jobs this bot runs on a schedule, like a news roundup every morning.","botPanel.routines.seeAll":"View all routines in Automations","botPanel.routines.add":"Add a routine","botPanel.library.empty":"Pages, files, and apps this bot makes show up here","botPanel.library.pages":"Pages","botPanel.library.apps":"Apps","botPanel.library.files":"Files","botPanel.library.scope":"From this conversation","botPanel.thisConversation":"In this conversation","botPanel.acts.custom":"Custom","botPanel.acts.customHint":"Change this in Advanced mode","botPanel.section.settings":"Settings","botPanel.section.conversation":"This conversation","botPanel.workUntilDone.hint":"{name} keeps going on your next message until it's done","botPanel.instructionsHint":"Tell {name} how to work for you","botSettings.simple.justDoIt":"Just do it","botSettings.simple.custom":"Custom","botPanel.appsRow":"Apps it can use","botPanel.backups.title":"Backup AIs","botPanel.backups.hint":"Used only when {name}'s AI is at its usage limit or can't start on a message. The first one here that can take over does, in that conversation only. After a usage limit resets, the conversation goes back.","botPanel.backups.row":"Backup {position}: {model}","botPanel.backups.remove":"Remove {model} from backups","botPanel.backups.choose":"Choose a backup AI","botPanel.backups.sameAccount":"Same account as the main AI: it shares the usage limit.","botPanel.appsNoneYet":"None yet","botPanel.apps.intro":"Switch on the apps {name} may use. Everything else stays off.","botPanel.apps.connectAnother":"Connect another app","botPanel.routinesOn":"{count} on","botPanel.routines.ask":"Or just ask {name} in chat: “every weekday at 8, send me a summary”.","botPanel.memoryRow":"What it remembers","botPanel.heavy":"This bot loads a lot every turn.","botPanel.tidyMemory":"Tidy memory","botPanel.memory.note":"1 note","botPanel.memory.notes":"{count} notes","botPanel.memory.nothingYet":"Nothing yet","botPanel.memory.off":"Off","botPanel.memory.intro":"{name} keeps these tidy on its own. Tap one to remove it.","botPanel.memory.forget":"Forget","botPanel.memory.empty":"Nothing remembered yet.","botPanel.memory.addPlaceholder":"Tell {name} something to remember","botPanel.memory.editText":"Edit as text","botPanel.skills.remove":"Remove {name}","botPanel.skills.removeConfirm":"Remove the skill “{name}”?","botPanel.skills.removeFailed":"Could not remove this skill.","botPanel.skills.importFailed":"Could not add that skill.","botPanel.skills.importPlaceholder":"Paste a skill link or owner/repo","botPanel.skills.browse":"Browse skills","botPanel.folder.private":"Private","botPanel.folder.intro":"Where {name} keeps and edits files.","botPanel.folder.own":"Its own private folder","botPanel.folder.ownHint":"Nothing on this computer is touched","botPanel.folder.pick":"A folder you choose","botPanel.folder.pickHint":"Desktop, a project, Downloads","botPanel.tryAsking":"Try asking","computer.simple.dest.letItChoose":"Let it choose","botSettings.visibility.title":"Who can see it","botSettings.sections.overview":"Overview","botSettings.sections.identity":"Identity","botSettings.sections.soul":"Soul","botSettings.identity.name":"Name","botSettings.identity.title":"Title","botSettings.identity.titlePlaceholder":"Describe what your agent does","botSettings.identity.blurb":"Blurb","botSettings.identity.viewFull":"View full","botSettings.identity.blurbPlaceholder":"One line on what this bot is for","botSettings.identity.blurbHelp":"Shown in rosters, on the phone, and to other bots. Standing instructions belong in Soul, which has room for a full document.","botSettings.soul.description":"Who this bot is and the rules it never breaks. Always in its context.","botSettings.visibility.subtitle":"Choose who sees this bot, its conversations, the rooms it is in and its files. Admins always can.","botSettings.visibility.everyone":"Everyone who can sign in","botSettings.visibility.admins":"Admins only","botSettings.visibility.people":"Only these people","botSettings.visibility.peopleLabel":"Email addresses","botSettings.visibility.peoplePlaceholder":"One email or @company.com per line","botSettings.visibility.rooms":"A room shows only to people who can see every bot in it, and this bot works only with teammates exactly the same people can see.","botSettings.visibility.save":"Save","botSettings.visibility.saving":"Saving…","botSettings.visibility.saved":"Saved. It applies at once.","botSettings.visibility.needPeople":"Add at least one email address, or choose Admins only.","botSettings.visibility.mixedRooms":"These rooms are visible to fewer people than this bot: {rooms}. A room keeps the narrowest audience it has ever had, so taking a bot out or widening one never shows its transcript to more people, and such a room stays out of this bot's recall. When the room's bots are right, widen it here.","botSettings.visibility.resetRoom":"Show {room} to everyone its bots allow","workspaces.title":"Installations on this server","workspaces.subtitle":"Each installation on this server has its own account, service, data and sign-in list at its own address. Create one, manage who may sign in, pause or remove it, and upgrade them all in one go.","workspaces.empty":"No installations on {domain} yet.","workspaces.colWorkspace":"Installation","workspaces.colState":"State","workspaces.colMonth":"This month","workspaces.running":"Running","workspaces.suspended":"Suspended","workspaces.provisioning":"Setting up","workspaces.error":"Needs recovery","workspaces.retained":"Data retained","workspaces.recoveryHint":"Contact the server operator to inspect or recover this installation.","workspaces.turns":"{turns} turns this month","workspaces.users":"Users","workspaces.suspend":"Suspend","workspaces.resume":"Resume","workspaces.delete":"Delete","workspaces.refresh":"Refresh","workspaces.new":"New installation","workspaces.upgradeAll":"Upgrade all","workspaces.upgraded":"Every running installation restarted on the new release.","workspaces.working":"Working…","workspaces.name":"Name","workspaces.adminEmail":"Admin email","workspaces.members":"Users (optional)","workspaces.cap":"Monthly spend limit (USD, optional)","workspaces.anthropicKey":"Anthropic API key for this installation (optional)","workspaces.createHint":"The name becomes the address. The admin signs in with an emailed code; users get chat and approvals. A key here runs the installation's Claude bots on it and is never shown again.","workspaces.create":"Create installation","workspaces.creating":"Creating… this takes about a minute.","workspaces.usersTitle":"Who may sign in to {slug}","workspaces.email":"Email or @domain","workspaces.chatOnly":"User (chat only)","workspaces.addUser":"Add","workspaces.removeUser":"Remove","workspaces.deleteTitle":"Delete {slug}?","workspaces.deleteHint":"This stops the installation, removes its address and its account, and deletes its data. This cannot be undone.","workspaces.deleteKeepHint":"This stops the installation and removes its address and account. Its data folder is kept on the server.","workspaces.keepData":"Keep the data folder","engines.selectBinary":"Select a detected binary…","engines.manualPath":"Enter path manually…","engines.detectedAria":"{name} detected CLI","engines.customAria":"{name} custom CLI path","engines.testFailed":"Test failed: {message} Register this path anyway?","engines.testPassed":"Test passed: {version}","engines.editPath":"Edit path","engines.saveAnyway":"Save anyway","engines.updateClaude":"Update Claude","engines.updating":"Updating…","engines.reset":"Reset","engines.resetting":"Resetting…","engines.setCli":"Set CLI…","engines.hide":"Hide","engines.hideHint":"Leave this provider out of every model list. Its app and sign-in stay as they are, and you can unhide it here.","engines.hiddenTitle":"Hidden ({count})","engines.hiddenHint":"Left out of every model list. Their apps and sign-ins are unchanged.","engines.unhide":"Unhide","engines.unhiding":"Unhiding…","engines.claudeUpdated":"Claude updated to {version}","engines.updatedTo":"Updated to {version}","engines.account.signInHint":"Run this exact command in a terminal on the computer running {app}, finish Claude CLI sign-in, then click Check account. If you are viewing {app} remotely, run it there, not on this device.","engines.account.powershell":"Use PowerShell for this command.","accounts.claude":"Claude","accounts.chatgpt":"ChatGPT","accounts.count":"{count} accounts · {signedIn} signed in","accounts.signedIn":"Signed in","accounts.notSignedIn":"Not signed in","accounts.unknown":"Sign-in not confirmed yet","accounts.apiKey":"Uses an API key","accounts.signIn":"Sign in","accounts.menu":"Options for {name}","accounts.rename":"Rename","accounts.remove":"Remove","accounts.inUse":"{count} bot(s) use this account. Pick another model for them first.","accounts.signOutTitle":"Sign out of {name}?","accounts.signOutBody":"Bots that use this account need it signed in again before their next task. Running tasks are not cancelled.","accounts.removeTitle":"Remove {name}?","accounts.removeBodyClaude":"This removes the account from {app}. Claude's own sign-in files stay on this computer.","accounts.removeBodyChatgpt":"This signs the account out and removes it from {app}.","accounts.removeBodyAntigravity":"This removes the account and its sign-in from {app}. Your other Antigravity accounts stay connected.","accounts.addClaude":"Add another Claude account","accounts.addChatgpt":"Add another ChatGPT account","accounts.addChatgptWorkspaceNote":"ChatGPT Business and Enterprise organizations can block adding an account here (OpenAI shows 3p_delegated_access_policy_denied).","accounts.nameLabel":"Account name","accounts.namePlaceholder":"Work","accounts.addSubmit":"Add and sign in","accounts.folderToggle":"Use an existing Claude folder","accounts.folderHint":"Leave this empty to keep the account separate. To reuse a sign-in you already have, enter its folder, such as ~/.claude-work.","accounts.claude.step1":"1. Sign in on the Claude page that opened","accounts.claude.openAgain":"Open Claude sign-in","accounts.claude.step2":"2. Paste the code Claude shows you","accounts.claude.codePlaceholder":"Paste code","accounts.claude.finish":"Finish","accounts.claude.security":"The code goes to Claude Code once and is never saved.","claudeEndpoints.title":"Custom endpoint","claudeEndpoints.hint":"Run this account's bots on DeepSeek, GLM or another host that speaks Claude Code's API. It is its own engine, so the Claude Code on this computer and its sign-in stay as they are.","claudeEndpoints.empty":"No custom endpoints yet.","claudeEndpoints.add":"Add endpoint","claudeEndpoints.edit":"Edit","claudeEndpoints.name":"Name","claudeEndpoints.baseUrl":"Base URL","claudeEndpoints.token":"Token","claudeEndpoints.tokenKeep":"Leave empty to keep the saved token","claudeEndpoints.model":"Model","claudeEndpoints.modelHint":"Optional. Leave it empty and Limix Bot reads the host's model list; OpenAI and Anthropic use the standard list. Type a model when the host doesn't list its models. Each bot then picks its own model.","claudeEndpoints.mappings":"Model mappings (optional)","claudeEndpoints.mappingsHint":"Which model the endpoint uses for Opus, Sonnet and Haiku work.","claudeEndpoints.opus":"Opus model","claudeEndpoints.sonnet":"Sonnet model","claudeEndpoints.haiku":"Haiku model","claudeEndpoints.remove":"Remove {name}","claudeEndpoints.removeBody":"This removes the endpoint from app settings. The bots that used it need another model.","claudeEndpoints.failed":"Couldn't save the endpoint. Check the fields and try again.","claudeBedrock.title":"Amazon Bedrock","claudeBedrock.hint":"Run bots on Claude through Amazon Bedrock, signed in with an AWS profile from this computer. It is its own engine, so the Claude Code on this computer and its sign-in stay as they are.","claudeBedrock.awsHint":"Uses the AWS profile from this computer's ~/.aws config. Run `aws sso login --profile …` first if it uses SSO.","claudeBedrock.empty":"No Amazon Bedrock engines yet.","claudeBedrock.add":"Add Amazon Bedrock","claudeBedrock.edit":"Edit","claudeBedrock.name":"Name","claudeBedrock.profile":"AWS profile","claudeBedrock.region":"AWS region","claudeBedrock.model":"Model","claudeBedrock.modelHint":"The Bedrock model id or inference profile {app} runs, as your AWS account lists it. Each bot then picks this model or a tier model below.","claudeBedrock.tiers":"Model per tier","claudeBedrock.opus":"Opus model","claudeBedrock.sonnet":"Sonnet model","claudeBedrock.haiku":"Haiku model","claudeBedrock.smallFast":"Small-fast model","claudeBedrock.rowSubtitle":"Bedrock · {profile} · {region}","claudeBedrock.remove":"Remove {name}","claudeBedrock.removeBody":"This removes the Bedrock engine from app settings. The bots that used it need another model.","claudeBedrock.failed":"Couldn't save the Bedrock engine. Check the fields and try again.","engines.none":"No model provider apps detected yet.","engines.footer":"Set CLI points a model provider at a specific binary: a versioned build, a wrapper script, or an absolute path. Changes are saved only when the selected provider is idle. Other providers keep running.","engines.freeSpace.title":"Leftover files","engines.freeSpace.intro":"On Windows, Antigravity can leave large temporary files behind when it stops. {app} clears its own. This also finds ones left in the Windows temporary folder. Nothing is deleted until you confirm.","engines.freeSpace.action":"Free up space","engines.freeSpace.scanning":"Looking for leftover files…","engines.freeSpace.none":"No leftover files found.","engines.freeSpace.found":"Found {size} of leftover files.","engines.freeSpace.foundAtLeast":"Found at least {size} of leftover files.","engines.freeSpace.delete":"Delete them","engines.freeSpace.deleting":"Deleting leftover files…","engines.freeSpace.freed":"Freed {size}.","engines.freeSpace.someLeft":"Some files are still in use and were left alone. Try again later.","engines.freeSpace.underOneMb":"less than 1 MB","engines.library.custom":"Bring your own model","engines.library.manage":"Manage","engines.library.setup":"Set up","engines.library.count":"{count} model providers","engines.library.countOne":"1 model provider","engines.library.refresh":"Check again","engines.library.advanced":"CLI path and updates","engines.library.later":"You can add more model providers anytime in Settings.","engines.library.intro":"Connect the AI tools that power your bots. Accounts, setup and updates, all in one place.","remote.pairing.tailscale.title":"Tailscale pairing","remote.pairing.tailscale.subtitle":"Private pairing through the tailnet shared by the host and the device being paired.","remote.pairing.wifi.title":"Direct Wi-Fi pairing","remote.pairing.wifi.subtitle":"Use only on a trusted network where both devices can see each other.","remote.pairing.https.title":"Secure HTTPS pairing","remote.pairing.https.subtitle":"Recommended. The simplest setup, and it keeps working when the paired device leaves this Wi-Fi.","remote.status.attention":"Remote access needs attention","remote.status.off":"Remote access off","remote.tailscale.ready":"Ready on {name}","remote.tailscale.readyDetail":"Keep Tailscale connected on the host and the device being paired.","remote.tailscale.magicDns":"Tailscale found, but MagicDNS is still needed","remote.tailscale.magicDnsDetail":"Turn on MagicDNS in Tailscale, then check again so the device gets a secure tailnet name.","remote.title":"Remote access","remote.checking":"Checking device access…","remote.tailscaleSwitch.detail":"Off until you turn it on: {app} never runs Tailscale by itself, and never opens or signs in the Tailscale app. On, devices on your tailnet reach this computer by its tailnet name.","remote.tailscale.linkOff":"On. It answers once a device is paired.","remote.tailscale.notInstalled":"Tailscale isn't installed on this computer.","remote.tailscale.getIt":"Get Tailscale","remote.tailscale.signIn":"Open Tailscale and sign in, then try again.","remote.tailscale.noCli":"Install Tailscale's command-line tool: in the Tailscale app, open Settings and choose Install CLI, then try again.","remote.tailscale.notRunning":"Tailscale isn't running. Open it, then try again.","remote.tailscale.needsPermission":"Tailscale won't let {app} ask it. On Linux, run sudo tailscale set --operator=$USER once, then try again.","remote.notice.wifi":"Same Wi-Fi is on because a paired device uses it.","remote.notice.relay":"Anywhere, through {app} is on because a paired device uses it.","remote.notice.tailscale":"Tailscale is on because a paired device may use it.","remote.notice.https":"Your {app} web address is on because a paired device uses it.","remote.notice.turnOff":"Turn off","remote.checkAgain":"Check again","remote.devices.lastSeen":"Last seen {when}","remote.devices.paused":"Paused after 30 days unused. It reconnects when you open this page.","remote.devices.retired":"This phone has an older Limix Bot app. Update the app, then open it once on the same Wi-Fi as this computer. If that doesn't reconnect it, pair it again here.","remote.devices.retiredNotice":"Phones now reach this computer through Limix Bot Relay, and the older secure link has been switched off. A phone with an older Limix Bot app can no longer connect away from your Wi-Fi. Update the Limix Bot app on that phone, then open it once on the same Wi-Fi as this computer. If that doesn't reconnect it, pair it again here.","remote.devices.remove":"Remove {name}","remote.devices.allowView":"Allow computer view","remote.devices.allowViewDetail":"Full interactive access from this device.","remote.devices.viewAria":"Computer view access for {name}","remote.devices.allowBrowser":"Allow browser control","remote.devices.allowBrowserDetail":"View and control signed-in browser sessions from this device.","remote.devices.browserAria":"Browser control access for {name}","remote.phones.title":"Phone apps","remote.phones.empty":"No phone has allowed its apps yet. Open Limix Bot on your phone and allow them under Settings.","remote.phones.online":"Online","remote.phones.offline":"Offline · last seen {when}","remote.phones.remove":"Remove {name}","remote.phones.platform.ios":"iPhone","remote.phones.platform.android":"Android","remote.time.justNow":"just now","remote.time.minutes":"{count} min ago","remote.time.hours":"{count} h ago","remote.time.days":"{count} d ago","remote.advanced":"Advanced & troubleshooting","remote.keepAwake":"Keep this computer awake","remote.keepAwakeDetail":"Keeps remote access and scheduled work available while the screen is off.","remote.keepAwakeAria":"Keep this computer awake while Remote access is on","remote.account.signedIn":"Signed in as {email}.","remote.account.yourAccount":"your account","remote.account.retrying":"Trying again…","remote.client.active":"Remote connection","remote.client.idle":"Connect to another computer","remote.client.subtitle":"Use this desktop app as a secure client for {app} running on another computer.","phone.intro.title":"Use {app} from another device","phone.intro.detail":"Check chats, answer approvals, and send new work from a phone or another computer.","phone.value.chats":"Your conversations","phone.value.chatsDetail":"Read and reply from another device.","phone.value.approvals":"Quick approvals","phone.value.approvalsDetail":"Keep work moving when you step away.","phone.value.private":"Private by default","phone.value.privateDetail":"Only devices you approve can connect.","phone.intro.pairAnother":"Pair another device","phone.intro.pair":"Pair a device","phone.intro.setUp":"Set up another device","phone.intro.notNow":"Not now","phone.intro.resume":"You can resume anytime from Settings → Remote access.","phone.back":"Back","phone.signIn.attention":"Secure access needs attention","phone.signIn.title":"Sign in to pair securely","phone.signIn.unavailable":"Online remote access is not available right now. You can still pair directly on the same Wi-Fi.","phone.signIn.timedOut":"Secure access is taking longer than expected. You can try again or pair directly on this Wi-Fi.","phone.signIn.failed":"We could not finish creating your private connection.","phone.signIn.emailPrompt":"We’ll email you a one-time code. No password needed.","phone.signIn.email":"Email","phone.signIn.working":"Working…","phone.signIn.verify":"Verify and continue","phone.signIn.sendCode":"Email me a code","phone.signIn.otherEmail":"Use another email","phone.signIn.expires":"The code expires in 10 minutes.","phone.signIn.retry":"Try secure access again","phone.signIn.or":"or","phone.signIn.tailnetNote":"The other device must be signed in to the same tailnet.","phone.signIn.wifiInstead":"Pair on this Wi-Fi instead","phone.signIn.wifiNote":"Both devices must be on a network that lets them see each other.","phone.signIn.tailscaleInstead":"Pair using Tailscale","phone.verifying.local":"Preparing your pairing code","phone.verifying.tailscale":"Preparing Tailscale pairing","phone.verifying.secure":"Creating secure remote access","phone.verifying.localDetail":"This should only take a moment.","phone.verifying.tailscaleDetail":"Your pairing code will use your private tailnet connection.","phone.verifying.secureDetail":"We’re giving this computer a private connection that works even when the paired device is away from this Wi-Fi.","phone.success.title":"Your device is ready","phone.success.detail":"It can now open chats, answer approvals, and send new work.","phone.success.start":"Start using {app}","phone.success.done":"Done","phone.code.expired":"That code expired","phone.code.title":"Scan or enter the code","phone.code.expiredDetail":"Create a fresh code when the other device is ready.","phone.code.detail":"Scan this code in Limix on iPhone, or enter the address and code from pairing details in another desktop app.","phone.code.qrAria":"Device pairing QR code","phone.code.createNew":"Create a new code","phone.code.trouble":"Having trouble?","phone.code.address":"Pairing address","phone.code.publicNetwork":"Windows has this computer's {network} network set to Public, so its firewall may block your phone. If your phone can't connect, open Windows Settings → Network & internet → {network} and set the network profile type to Private.","phone.error.directUnavailable":"Direct Wi-Fi pairing isn’t available on this computer right now. Connect this computer to Wi-Fi, then try again.","phone.error.protectedUnavailable":"The HTTPS pairing route became unavailable. Check secure access, then create a new code.","phone.error.remoteUpdate":"Remote access could not be updated. Open Advanced & troubleshooting and try again.","phone.error.secureUpdate":"Secure remote access could not be updated. Try again.","phone.error.desktopOnly":"Remote access setup is only available in the desktop app.","phone.error.tailscaleUnavailable":"Tailscale pairing isn’t available right now. Make sure Tailscale is connected and MagicDNS is on.","phone.error.pairingPrepare":"Device pairing could not be prepared. Open Advanced & troubleshooting and try again.","phone.error.sendCode":"We could not send the code. Try again.","phone.error.verifyCode":"That code could not be verified. Try again.","phone.error.restore":"Secure access could not be restored. Try again.","phone.error.codeChanged":"The pairing code changed before setup finished. Create a new code and try again.","phone.error.reference":"{message} Reference: {reference}.","remote.client.desktopOnly":"Remote desktop pairing requires the installed app.","remote.client.connected":"Connected to {name}","remote.client.fallbackName":"remote {app}","remote.client.mode":"This app is in client mode. Bots and conversations run on the other computer; the paired-device token stays in this computer’s encrypted credential store.","remote.client.disconnect":"Disconnect and use this computer","remote.client.setUpOnHost":"This app uses the AIs on the host computer. Set up {name} there, then come back and pick it.","remote.client.hostHint":"On the host computer, open Settings → Remote access and open a pairing window over HTTPS, Tailscale, or Wi-Fi. Then enter its address and six-digit code here.","remote.client.hostAddress":"Host address","remote.client.pairingCode":"Pairing code","remote.client.pair":"Pair and switch to client mode","remote.client.restartNote":"Pairing restarts this app. Disconnecting later returns it to normal host mode.","remote.client.connectionType":"Connection type","remote.client.server.option":"Self-hosted server","remote.client.server.hint":"On your server, run this command to create a fresh, single-use pairing link. Paste the full link below, including its 12-character code.","remote.client.server.fullTitle":"Your own server: full access","remote.client.server.clientTitle":"Someone else's server: chat and approvals only","remote.client.server.clientNote":"A chat-only link can't make the server your bots' home, add bots or connect apps. Use full access for a server you own.","remote.client.server.pairingLink":"Server pairing link","remote.client.server.domainHint":"Supports your server’s HTTPS address, including custom domains and Cloudflare Tunnel.","remote.client.server.connect":"Connect to server","remote.client.server.invalidLink":"Paste a full HTTPS server pairing link, such as https://bots.example.com/pair#code=XXXX-XXXX-XXXX. The code belongs after #, not in the URL query.","remote.client.server.switchNote":"Confirm the address, then finish pairing on the server page. Use the Server menu to return to this computer later.","remote.client.companion.option":"Desktop companion","remote.client.companion.hint":"On the other desktop app, open Settings → Remote access and create a six-digit companion code. Use its managed {app} HTTPS address or full Tailscale name ending in .ts.net. For a self-hosted server or custom domain, choose Self-hosted server in this computer’s installed app.","remote.client.companion.address":"Companion address","remote.client.companion.code":"Six-digit companion code","vm.state.notManaged":"Not managed","vm.workspace.localVm":"Private desktop","vm.workspace.desktopRequired":"The two-desktop view requires the {app} desktop app.","vm.workspace.layoutUnavailable":"The viewer area is not laid out yet. Retry after resizing the window.","vm.workspace.connectFailed":"{app} couldn't open this private desktop view. Close it and try again.","vm.workspace.positionFailed":"{app} couldn't place this private desktop view. Close it and try again.","vm.workspace.chooseBot":"Choose a bot with a private desktop","vm.workspace.youHaveControl":"You have control","vm.workspace.controlElsewhere":"Control held elsewhere","vm.workspace.handBack":"Hand back","vm.workspace.takeControlTitle":"Pause only this bot and enable keyboard and pointer input in this pane","vm.workspace.heldElsewhere":"Held elsewhere","vm.workspace.takeControl":"Take control","vm.workspace.chooseAnother":"Choose another bot that works on a private desktop.","vm.workspace.checking":"Checking {name}'s private desktop…","vm.workspace.connecting":"Connecting live view…","vm.workspace.notCreated":"{name}'s private desktop hasn't been created yet.","vm.workspace.stopped":"{name}'s private desktop is stopped.","vm.workspace.notReady":"{name}'s private desktop isn't ready to watch yet.","vm.workspace.retryStatus":"Retry status","vm.workspace.openComputer":"Open Computer","vm.state.inUse":"In use","vm.workspace.bridgeUnavailable":"The two-desktop view bridge is unavailable.","vm.workspace.handoffFailed":"The removed pane could not hand control back safely.","vm.workspace.paneChanged":"The view changed while you were taking control. Try again.","vm.workspace.alreadyControlled":"You're already controlling this desktop in another view. Hand it back there first.","vm.workspace.viewTitle":"Private desktop view","vm.state.stopped":"Stopped","vm.state.running":"Running","vm.state.attention":"Needs attention","vm.state.sleeping":"Sleeping","vm.state.goingToSleep":"Going to sleep","vm.state.starting":"Starting","vm.state.restarting":"Restarting","vm.state.removing":"Removing","vm.state.paused":"Paused","vm.dest.auto":"Auto","vm.dest.vm":"Private desktop","vm.dest.local":"This computer","vm.dest.browser":"Browser","vm.dest.off":"Off","vm.confirm.deleteBotVm":"Delete {name}'s private desktop? Its durable folder and website sign-ins are kept. Apps installed inside the desktop and files outside the durable folder are deleted.","vm.confirm.deleteCloud":"Permanently delete {subject}? Its files and browser sign-ins will be erased. This cannot be undone.","vm.confirm.orphanCloud":"this left-behind cloud desktop","vm.confirm.ownedCloud":"{name}'s cloud desktop","vm.confirm.removeVps":"Permanently remove {subject}? Its files and browser sign-ins will be erased. This cannot be undone.","vm.confirm.orphanVps":"leftover desktop {id} on your VPS","vm.confirm.ownedVps":"{name}'s desktop on your VPS","vm.vps.title":"Self-hosted VPS computers","vm.vps.subtitle":"Desktops {app} keeps on your VPS. Removing one permanently erases its files and browser sign-ins.","vm.vps.sshHost":"SSH host: {alias}. Old and orphaned computers stay visible here.","vm.vps.configuredFallback":"your VPS","vm.vps.needsAlias":"To use your own VPS, add its SSH alias in Settings → API keys.","vm.vps.refreshHint":"Refresh to check {app}'s desktops on your VPS.","vm.vps.refreshAria":"Refresh desktops on your VPS","vm.vps.checking":"Checking desktops on your VPS.","vm.vps.unavailable":"Couldn't list desktops on your VPS: {reason}","vm.vps.notConfigured":"No VPS is set up yet. Add its SSH alias in Settings → API keys.","vm.vps.foundOne":"1 desktop found.","vm.vps.foundMany":"{count} desktops found.","vm.vps.orphan":"Leftover desktop · ID {id}","vm.owner.gone":"Its bot no longer exists","vm.owner.owned":"Owned by this bot","vm.vps.stopFirst":"Stop this bot's work before removing its desktop.","vm.vps.removeTitle":"Permanently remove this desktop","vm.refresh":"Refresh","vm.cloud.title":"Cloud desktops","vm.cloud.subtitle":"Your bots' cloud desktops, by Boat. Deleting one erases it and its files for good.","vm.cloud.includesOrphans":"Includes desktops left behind by deleted bots so they can still be cleaned up.","vm.cloud.needsKey":"Cloud desktops come from Boat, a paid service. Connect your Boat account in Settings → API keys to create and manage them.","vm.cloud.refreshHint":"Refresh to check your bots' cloud desktops.","vm.cloud.refreshAria":"Refresh cloud desktops","vm.cloud.checking":"Checking cloud desktops.","vm.cloud.unavailable":"Couldn't list cloud desktops: {reason}","vm.cloud.notConnected":"Boat is not connected.","vm.cloud.foundOne":"1 cloud desktop found.","vm.cloud.foundMany":"{count} cloud desktops found.","vm.cloud.orphan":"Left-behind desktop","vm.cloud.stopFirst":"Stop this bot's work before changing its desktop.","vm.cloud.sleepTitle":"Put this cloud desktop to sleep","vm.cloud.sleepBlocked":"This cloud desktop is {state}","vm.cloud.sleep":"Sleep","vm.cloud.deleteTitle":"Permanently delete this cloud desktop","vm.perBot.title":"Per-bot desktops","vm.perBot.subtitle":"{count} This list includes old desktops even when their bot now uses another destination.","vm.perBot.created":"{count}/{max} created.","vm.perBot.inventoryUnavailable":"Inventory unavailable.","vm.perBot.refreshAria":"Refresh per-bot desktops","vm.perBot.checking":"Checking existing private desktops.","vm.perBot.unavailable":"Couldn't list private desktops: {reason}","vm.perBot.foundOne":"1 per-bot desktop found.","vm.perBot.foundMany":"{count} per-bot desktops found.","vm.perBot.checkingList":"Checking existing desktops…","vm.perBot.none":"No per-bot desktops have been created.","vm.perBot.destination":"Current destination: {destination}","vm.perBot.unmanaged":"This container is not managed by {app}. Review and remove it directly in Docker or Podman.","vm.perBot.stopFirst":"Stop this bot's turn before deleting its desktop.","vm.perBot.deleteBlocked":"Stop this bot's turn before deleting its private desktop","vm.perBot.deleteTitle":"Delete {name}'s private desktop","vm.main.title":"Private desktops","vm.main.perBotSubtitle":"Private Cua Linux desktops on this {host}, with one container and durable folder per bot. Distinct bots can work concurrently and idle desktops stop after 8 hours.","vm.main.sharedSubtitle":"A shared Cua Linux sandbox on this {host} for bots to browse and work in: isolated, backed by one durable folder, and automatically stopped after the idle timeout.","vm.host.mac":"Mac","vm.host.computer":"computer","vm.main.statusUnavailable":"Status unavailable","vm.main.readyPerBot":"Ready for per-bot desktops","vm.main.perBotUnsupported":"Per-bot mode requires Docker or Podman","vm.main.ready":"Ready","vm.main.notReady":"Not ready","vm.main.recheck":"Re-check","vm.main.watch":"Watch screen","vm.isolation.title":"Isolation","vm.isolation.subtitle":"Shared keeps the original single-desktop behavior. Per bot gives each bot its own container, folder, viewer port, lease, and idle timer.","vm.isolation.shared":"Shared","vm.isolation.perBot":"Per bot","vm.isolation.max":"Maximum per-bot desktops","vm.isolation.maxDetail":"Limits storage and host resource use; each running desktop may use up to its memory and CPU limits, 4 GB and 2 CPUs unless config.json sets others.","vm.isolation.maxAria":"Maximum per-bot desktops","vm.idle.label":"Stop idle desktops after","vm.idle.detail":"Applies to shared and per-bot desktops. A desktop with a running turn is never stopped. Idle shutdown keeps its files and installed apps.","vm.idle.minutes":"minutes","vm.idle.range":"Enter a whole number from 5 to 1,440.","vm.idle.error":"Couldn't save the idle time. Try again.","vm.saving":"Saving…","vm.policyError":"Couldn't save the isolation setting. Try again.","vm.deleteError":"Couldn't delete this private desktop. Try again.","vm.unmanagedError":"This container is not managed by {app} and cannot be removed here.","vm.vpsRemoveError":"Couldn't remove this desktop. Try again.","vm.setup.title":"Setup","vm.setup.subtitle":"Once a container app such as Docker is open, {app} sets up the private desktop for you.","vm.setup.step1":"Install a container runtime","vm.setup.step1Detail":"Podman and Colima are free. Docker Desktop may require a paid licence for larger companies and government use.","vm.setup.podmanGuide":"Open the Podman installation guide","vm.setup.step2Open":"Open and start {runtime}","vm.setup.step2":"Start the container runtime","vm.setup.step2Detail":"Open the container app you installed and let it finish starting, then check again.","vm.setup.step3":"Prepare the Cua desktop (one-time download and build)","vm.setup.prepare":"Prepare Cua desktop","vm.setup.showPull":"Show base-image download","vm.setup.step4PerBot":"Create a private desktop from each bot's Screen panel","vm.setup.step4Recreate":"Replace the older or unsafe desktop","vm.setup.step4":"Create and start the private desktop","vm.setup.applePort":"Apple container requires an explicit host port, so {app} will not guess or expose one. Install or start Docker or Podman for safe per-bot dynamic loopback ports.","vm.setup.recreate":"Delete and recreate","vm.setup.prepareFirst":"Prepare the desktop above before replacing this one.","vm.setup.start":"Start the private desktop","vm.stopped.idle":"Stopped after inactivity to save resources. Your files and installed apps are still here.","vm.stopped.detail":"Your files and installed apps are still here. Start it to continue.","vm.setup.starting":"Starting the private desktop…","computer.phase.vmStopped":"The private desktop is stopped","vm.setup.idleHint":"Choose Private desktop for a bot to start it automatically. Idle desktops stop after the idle time set under Isolation; their files and installed apps are kept.","vm.setup.waiting":"Waiting for the desktop…","vm.setup.create":"Create private desktop","vm.setup.showCommand":"Show command","vm.inspectFailed":"{app} could not inspect the container runtime. Re-check, or review the app logs.","vm.safety.title":"Safety and storage","vm.safety.perBot":"Cua Driver operates only each private desktop. Every bot gets a private host folder mounted at {path}; its files and browser profile survive replacing the desktop. Viewers bind only to loopback, and exact bot-derived targets prevent one bot from attaching to another bot's container. Each desktop keeps its memory and CPU limits (4 GB and 2 CPUs unless config.json sets others), a 4,096-process cap and a fixed, minimal set of Linux capabilities. Private desktops can still reach the internet.","vm.safety.shared":"Cua Driver operates only the private desktop. Exactly one private host folder is mounted at {path}; files and browser sign-ins there survive replacing the desktop, while everything elsewhere in it is disposable. The password-protected viewer is available only on this machine. Docker and Podman runs are limited to 4 GB memory and 2 CPUs unless config.json sets others, and to 4,096 processes; all Linux capabilities are dropped except the few the desktop supervisor and package installs need. Where the desktop's root account would be the host's, as with Docker Engine on Linux, nothing in it can become root. The desktop can still reach the internet, and bots share it one at a time.","vm.safety.stop":"Stop","vm.safety.deleteLegacy":"Delete the old shared desktop","vm.safety.deleteVm":"Delete desktop","vm.safety.workspace":"Durable folder: {path} · Cua Driver: {driver} · Local image: {image}","vm.safety.notCreated":"not created","vm.safety.notPrepared":"not prepared","vm.confirm.deleteShared":"Delete the private desktop? Its durable folder and website sign-ins are kept. Apps installed inside the desktop and files outside the durable folder are deleted.","vm.confirm.recreate":"Replace the private desktop with the current version and its safety limits? Its durable folder and website sign-ins are kept. Apps installed inside the desktop and files outside the durable folder are deleted.","vm.announce.deleted":"Private desktop deleted.","vm.announce.stopped":"Private desktop stopped.","vm.announce.updated":"Private desktop updated.","vm.announce.deletedBot":"Deleted {name}'s private desktop.","vm.announce.vpsRemoved":"{subject} removed.","vm.announce.orphanVps":"Leftover desktop {id}","vm.announce.orphanCloud":"Left-behind cloud desktop","vm.err.status":"Couldn't check the private desktop ({code}). Try again.","vm.err.inventory":"Couldn't list private desktops ({code}). Refresh to try again.","vm.err.cloudInventory":"Couldn't list cloud desktops ({code}). Refresh to try again.","vm.err.vpsInventory":"Couldn't list desktops on your VPS ({code}). Refresh to try again.","vm.err.runtimeUnavailable":"No container app is running. Open Docker or Podman, then check again.","vm.err.cloudUnavailable":"Couldn't list cloud desktops. Refresh to try again.","vm.err.vpsUnavailable":"Couldn't list desktops on your VPS. Refresh to try again.","vm.vps.noneFound":"No {app} desktops found on your VPS.","vm.cloud.noneFound":"No cloud desktops found.","vm.vps.checkingList":"Checking desktops on your VPS…","vm.vps.remove":"Remove","vm.cloud.checkingList":"Checking cloud desktops…","vm.perBot.deleteHint":"Delete Limix-managed desktops you no longer need to free a slot. Files in their durable folders remain.","vm.err.prepare":"Couldn't prepare the private desktop. Try again.","vm.err.create":"Couldn't create the private desktop. Check the setup steps above, then try again.","vm.err.start":"Couldn't start the private desktop. Try again.","vm.err.stop":"Couldn't stop the private desktop. Try again.","vm.cloud.deleteError":"Couldn't delete this cloud desktop. Try again.","vm.cloud.sleepError":"Couldn't put this cloud desktop to sleep. Try again.","vm.announce.cloudDeleted":"{subject} deleted.","vm.announce.cloudSleeping":"{subject} is sleeping.","vm.cloud.deletedRefreshError":"{subject} was deleted, but the list could not refresh: {detail}","vm.cloud.sleepRefreshError":"{subject} was put to sleep, but the list could not refresh: {detail}","vm.setup.perBotHint":"Choose Private desktop for a bot, open Bot's screen, then create its desktop there. {app} assigns a private folder and an available loopback viewer port automatically.","vm.safety.baseImage":"Base: {image}","room.openBot":"Open {name}","room.pinHint":"Pin this message to the top of the group thread","room.fallbackBot":"Bot","room.aBot":"A bot","room.memberWorkingElsewhere":"{name} is working in another thread","room.queue.waitingFor":"Queued · waiting for {name} ({position} of {of})","room.queue.waiting":"Queued ({position} of {of})","room.queue.member":"{name}: {status}","room.responder.everyone":"Plain messages go to every group member; @mentions override this","room.responder.mentions":"Only explicitly @mentioned bots respond","room.responder.lead":"Plain messages go to {name}; @mentions override this","room.responder.leadFallback":"the lead bot","room.responder.aria":"Default responder","room.responder.groupLead":"Group lead","room.responder.leadOption":"Lead: {name}","room.responder.groupBehavior":"Group behavior","room.responder.everyoneOption":"Everyone responds","room.responder.mentionsOption":"Only when mentioned","room.responder.auto":"Jev picks who answers each plain message; @mentions override this","room.responder.autoOff":"Jev is off, so plain messages go to {name}; @mentions override this","room.responder.autoOption":"Auto (Jev)","room.responder.autoOptionOff":"Auto","room.responder.jevOffHint":"Jev is off, so {name} answers plain messages in this Auto room.","room.responder.jevOffOpen":"Turn on Jev","room.chiefAbsent.hint":"{name}, your Chief of Staff, isn't in this room, so work handed out here runs at each bot's own approval level.","room.chiefAbsent.add":"Add {name}","room.holds.banner":"Stopped by you: {names}. @mention a bot or say resume to bring it back.","room.holds.resume":"Resume {name}","room.holds.stop":"Stop {name}","room.holds.stopTitle":"Stop only {name}; the rest of the room keeps going","room.holds.avatarHeld":"{name}: held (stopped by you)","room.routedBy":"Picked by Jev · {percent}%","room.routedBy.openrouter":"Picked by OpenRouter · {percent}%","room.routedBy.workersai":"Picked by Clef · {percent}%","room.turnLimit.aria":"Turn limit for this conversation","room.turnLimit.default":"Default ({minutes} min)","room.turnLimit.minutes":"{minutes} minutes","room.turnLimit.custom":"Custom…","room.turnLimit.help":"How long a bot may go without progress in this conversation before the turn stops. Default uses the group turn limit in Settings. A new choice applies to the next turn.","room.folder.title":"Working folder","room.folder.detail":"Where every bot in this group runs its shell and file tools.","room.folder.own":"Each bot’s own folder","room.folder.placeholder":"Each bot’s own folder, or an absolute path","room.folder.locked":"Fixed for this thread after its first turn. Start a new thread to work somewhere else.","room.folder.choose":"Choose…","room.folder.chipTitle":"Group working folder","room.setup.title":"Set up {name}","room.setup.detail":"Give this group a shared folder, response style, and a little context before the first thread starts.","room.setup.folderDetail":"Where group members run file and shell tools.","room.setup.instructions":"Group instructions","room.setup.instructionsDetail":"A shared brief every member sees on each turn. You can edit it later.","room.setup.instructionsPlaceholder":"Goals, tone, ownership, constraints…","room.setup.skip":"Skip for now","room.setup.save":"Save & continue","room.behavior.lead":"Specific lead","room.behavior.chooseLead":"Choose a lead","room.behavior.chooseLeadDetail":"Plain messages go to this teammate.","room.behavior.chooseTeammate":"Choose a teammate","room.members.manage":"Manage members","room.members.ariaOne":"Manage members: 1 bot in this group","room.members.ariaMany":"Manage members: {count} bots in this group","room.bulletin.placeholder":"Group instructions: every bot in this group follows them (who does what, tone, goals, a task checklist…)","room.bulletin.title":"Group instructions: shared instructions for every bot here","room.bulletin.label":"Group instructions","room.bulletin.none":"No group instructions","room.bulletin.add":"Add group instructions…","room.panel.open":"Room settings","room.panel.openAria":"Open settings for {name}","room.panel.whoResponds":"Who responds","room.panel.responder.intro":"Who answers when you don't @mention anyone.","room.panel.responder.auto":"Limix Bot decides","room.panel.responder.autoOption":"Let Limix Bot choose","room.panel.responder.everyone":"Everyone","room.panel.responder.mentions":"Only who I @mention","room.panel.folder.own":"Its own folder","room.panel.instructions":"Instructions","room.panel.instructionsHint":"Tell the bots what this room is for","room.panel.members":"Members","room.panel.turnLimit":"Time per turn","room.panel.minutes":"{minutes} min","room.panel.hour":"1 hour","room.panel.hours":"{hours} hours","room.aria":"Group chat {name}","room.setup.responderDetail":"Choose who answers when nobody is mentioned.","room.setup.allMembers":"All group members","room.setup.onlyMentioned":"Only @mentioned members","room.setup.autoDetail":"Jev picks who answers each message","room.setup.autoDetailOff":"Jev is off: the lead answers","room.hint.dm":"Reply here to continue the bot-to-bot conversation.","room.hint.everyone":"Everyone responds unless you @mention specific bots.","room.hint.mentions":"Mention a bot with @ to bring them in.","room.hint.lead":"{name} responds by default. @mention someone else to choose them instead.","room.hint.leadFallback":"The lead bot","room.hint.auto":"Jev picks the best-fit bot for each message. @mention someone to choose them yourself.","computer.routine.everyMin":"Every {minutes} min","computer.routine.everyDay":"Every day","computer.routine.weekdays":"Weekdays","computer.day.sun":"Sun","computer.day.mon":"Mon","computer.day.tue":"Tue","computer.day.wed":"Wed","computer.day.thu":"Thu","computer.day.fri":"Fri","computer.day.sat":"Sat","computer.err.localEngine":"This model can't use this computer. Choose a model that can, such as Claude.","computer.err.vmEngine":"This model can't use the private desktop. Choose a model that can, such as Claude.","computer.err.vmNotReady":"The private desktop isn't ready","computer.problem.createVm":"Create the private desktop","computer.problem.vmStopped":"The private desktop is stopped; start it to continue","computer.problem.cuaNotReady":"The private desktop started, but its controls aren't ready yet","computer.problem.localAiCannot":"This bot's AI can't use this computer. Pick another AI for it in the bot's settings.","computer.problem.localWaylandBlocked":"Bots can't use this computer in this kind of desktop session yet. Sign out, choose “Ubuntu on Xorg” on the sign-in screen, and sign back in.","computer.problem.localWaylandDesktop":"In this kind of desktop session, bots can use this computer only on GNOME. Sign out and choose an Xorg session on the sign-in screen to use it here.","computer.problem.localHyprlandPlugin":"Bots can use this computer on Omarchy once its Hyprland add-on is installed and turned on. Open Local control for the steps.","computer.problem.localTurnOn":"Turn on local control in the Screen panel first.","computer.problem.localNotReady":"Bots can't use this computer yet. Restart {app} and try again.","computer.problem.localNeedsApp":"Only the {app} app on this computer can let a bot use it. Open the app here to use it.","computer.problem.localWindows":"Bots can't use this PC right now. Restart {app}, and if that doesn't help, open Settings → Diagnostics.","computer.problem.localMac":"Bots can't use this Mac yet. Check that {app} is allowed under Screen Recording and Accessibility in System Settings → Privacy & Security, then restart it.","computer.problem.localRemoteServer":"Bots on your own server can't use this computer. Switch back to This computer to use it.","computer.problem.oldImage":"The private desktop is out of date; replace it","computer.problem.unmanaged":"The existing container was not created by {app}; recreate it","computer.problem.publicViewer":"The private desktop's viewer is open to the network; replace it","computer.problem.missingLimits":"The private desktop is missing its safety limits; replace it","computer.problem.missingDurableFolder":"The private desktop is missing its own folder; replace it","computer.problem.perBotRuntime":"A private desktop for each bot needs Docker or Podman, because Apple container needs a fixed host port","computer.problem.desktopFailed":"The private desktop didn't start: {detail}","computer.err.vmOpenSettings":"{problem}. Open Settings → Bot desktops.","computer.err.vpsAlias":"Add your VPS's SSH alias in Settings → API keys.","computer.err.vpsNotReady":"The desktop on your VPS isn't ready yet","computer.err.vpsReplaceNotReady":"The new desktop on your VPS isn't ready yet","computer.err.vpsNoContainer":"No desktop is ready on your VPS","computer.err.vpsAuto":"{problem}. Auto will prepare or wake it when this bot next works.","computer.err.vpsManual":"{problem}. Turn on “Start VPS automatically” in this bot’s Access settings, or choose Cloud desktop to start it.","computer.err.emptyFrame":"The screen came back empty. Try again in a moment.","computer.err.frameTimeout":"The screen took too long to update. Try again.","computer.err.screenUnavailable":"The screen isn't available right now. Try again in a moment.","computer.err.noDesktopLink":"Couldn't get a link to the live desktop. Try opening it again.","computer.err.openDesktop":"{app} couldn't open the live desktop. Try again.","computer.err.openDesktopLink":"{app} couldn't open the live desktop link. Try again.","computer.err.popupBlocked":"Your browser blocked the live desktop tab. Allow pop-ups for this page, then try again.","computer.confirm.deleteVm":"Delete {name}'s private desktop? Its durable folder and website sign-ins are kept. Apps installed inside the desktop and files outside the durable folder are deleted.","computer.confirm.replaceVm":"Replace {name}'s private desktop? Its durable folder and website sign-ins are kept. Apps installed inside the desktop and files outside the durable folder are deleted.","computer.confirm.replaceVps":"Replace {name}'s desktop on your VPS with the version this {app} update needs? Files stored only inside the desktop will be deleted.","computer.phase.checking":"Checking…","computer.phase.starting":"Starting your bot's desktop…","computer.phase.vpsUnconfigured":"Your own machine isn't set up for this bot yet","computer.phase.vpsIncompatible":"The desktop on your own machine is from an earlier {app} version","computer.phase.vpsStopped":"The desktop on your own machine is stopped","computer.phase.localUnavailable":"Local computer control isn't ready.","computer.mac.permission.requiredOne":"{permission} is required for {app} to use this computer. Grant it in System Settings → Privacy & Security, then relaunch {app}.","computer.mac.permission.requiredBoth":"Screen Recording and Accessibility are required for {app} to use this computer. Grant them in System Settings → Privacy & Security, then relaunch {app}.","computer.mac.permission.generic":"Local computer control is not ready. {app} needs Accessibility and Screen Recording to use this Mac. Check Driver detail or System Settings, then click Retry.","computer.windows.title":"Screen control isn't running on this PC","computer.windows.body":"Bots here and on the Cloud can't use this PC's apps and screen until it runs.","computer.windows.blocked":"Windows Security may have stopped it. Allow it under Windows Security → Protection history, or reinstall {app}.","computer.windows.start":"Start screen control","computer.windows.starting":"Starting screen control…","computer.windows.detail":"What went wrong","computer.mac.permission.screenSettings":"Open Screen Recording Settings","computer.mac.permission.accessibilitySettings":"Open Accessibility Settings","computer.mac.permission.relaunch":"Relaunch {app}","computer.mac.permission.driverDetail":"Driver detail","computer.phase.vmUnavailable":"The private desktop isn't available for this bot","computer.phase.error":"Couldn't reach the bot's screen","computer.resizeAria":"Resize panel","computer.botSettings":"Bot settings","computer.tab.computer":"Screen","computer.tab.routines":"Routines","routines.list":"Routine list","routines.botPaused":"This routine's bot is paused on this plan, so it won't run.","routines.botPausedSwap":"Swap awake bots","routines.logs":"Run logs","routines.results.label":"Post results to","routines.results.keep":"Keep current destination","routines.results.new":"Create a dedicated results thread","routines.results.unavailable":"Thread unavailable. Choose another.","routines.results.help":"Each run starts with fresh context. Dated results collect here; full execution details stay in Run logs. A dedicated results thread is reused for every run and can be moved into a folder.","routines.results.open":"Open results thread","routines.results.back":"Back to results","routines.results.showReport":"Show report","routines.executionDetails":"Run details · {name}","routines.logsFor":"Run logs for {name}","routines.logsHint":"Recent saved runs across your bots. Open a run for its result, error, and execution thread.","routines.markAllSeen":"Mark all as read","routines.unread":"Unseen failure","routines.activeSchedule":"Active","routines.pausedSchedule":"Paused","routines.heldFor.plan_cancelled":"Paused because the plan was cancelled. Turn it on to keep it running until the plan ends.","routines.heldFor.no_engine":"Paused because none of your AI accounts is signed in here. It turns back on when you sign in again.","routines.heldFor.no_connections":"Paused because every connected app and MCP server was removed. It turns back on when you connect one, or turn it on here.","routines.toggle":"Run {name} on its schedule","routines.paused.close":"Close paused routines","routines.finishedSchedule":"Finished schedule","routines.noNextRun":"No next run scheduled","routines.nextRun":"Next {time}","routines.latestRun":"Latest: {status}","routines.neverRun":"Not run yet","routines.continuityLabel":"Remember the last run","routines.continuityHelp":"Each run starts with the previous run's report, so the bot knows what it found last time. Good for checks like QA or monitoring.","routines.runOnStartupLabel":"Also run when {app} starts","routines.runOnStartupHelp":"Runs once each time the app opens, for a computer that is often off at the scheduled time. The schedule keeps running as usual.","routines.overlapLabel":"If the previous run is still working","routines.overlapSkip":"Skip this occurrence","routines.overlapQueue":"Queue one run","routines.overlapSkipHelp":"Skip scheduled occurrences while this routine is working. Manual runs are separate.","routines.overlapQueueHelp":"Keep one scheduled run waiting until this routine finishes. Skip further occurrences until it starts. Manual runs are separate.","routines.failureStreak":"Recent consecutive failures: {count}","routines.weekRuns":"{ok} of {total} runs OK this week","routines.skippedRuns":"Scheduled occurrences skipped while busy: {count}","routines.lastSkipped":"Last: {date}","routines.loading":"Loading routines…","routines.loadError":"Couldn't refresh routines. Retrying… Saved information may be out of date.","routines.empty":"No schedules yet.","routines.noRuns":"No runs recorded yet. Results will appear here after a routine starts.","routines.noMatchingRuns":"No runs match these filters.","routines.noOutput":"No output recorded yet.","routines.searchLogs":"Search run logs","routines.filterStatus":"Filter runs by status","routines.allStatuses":"All statuses","routines.filteredRoutine":"Showing one routine's runs.","routines.showAll":"Show all routines","routines.loadMore":"Show more runs","routines.openRun":"Open {name} run: {status}","routines.unavailableBot":"Bot unavailable","routines.trigger.schedule":"Scheduled","routines.trigger.manual":"Manual","routines.trigger.webhook":"Webhook","routines.trigger.startup":"On startup","routines.status.queued":"Queued","routines.status.running":"Running","routines.status.waiting":"Waiting","routines.status.completed":"Completed","routines.status.failed":"Failed","routines.status.partial":"Partly done","routines.status.cancelled":"Cancelled","routines.status.missed":"Missed","routines.status.problems":"Problems","routines.retried.stalled":"Retried after the AI stalled · {status}","routines.retried.restarted":"Retried after {app} restarted · {status}","routines.retried.rate_limited":"Retried after a rate limit · {status}","routines.retried.provider":"Retried after a temporary error · {status}","routines.retried.usage_limit":"Ran after the usage limit reset · {status}","routines.retried.failed":"Retried after a failure · {status}","routines.goal.completed":"Completed","routines.goal.needs-input":"Needs your input","routines.goal.blocked":"Blocked","routines.goal.limit-reached":"Turn limit reached","routines.goal.paused":"Paused","routines.goal.stopped":"Stopped","routines.goal.failed":"Failed","routines.title":"Routines","automations.title":"Automations","automations.new":"New","automations.view":"Show as","automations.list":"List","automations.calendar":"Calendar","automations.wake":"Keep this computer awake for scheduled automations","automations.wakeBattery":"Plug in to hold it awake.","automations.allBots":"All bots","automations.allDepartments":"All departments","automations.generalDepartment":"General","automations.status.working":"On","automations.status.paused":"Paused","automations.status.needsYou":"Needs you","automations.status.done":"Done","automations.needsYou":"Needs you: {reason}","automations.lastRan":"last ran {when}","automations.checkedNothingNew":"checked {when}, nothing new","automations.readsAndDrafts":"reads and drafts only","automations.next":"next: {when}","automations.notRunYet":"hasn't run yet","automations.firstRun":"First run {when}","automations.runningNow":"running now","automations.time.today":"today {time}","automations.time.yesterday":"yesterday","automations.time.tomorrow":"tomorrow {time}","automations.when.everyDay":"Every day at {time}","automations.when.everyWeekday":"Every weekday at {time}","automations.when.everyDays":"Every {days} at {time}","automations.when.everyMinutes":"Every {count} minutes","automations.when.everyHour":"Every hour","automations.when.everyHours":"Every {count} hours","automations.when.onWeekdays":"{when} on weekdays","automations.when.between":"{when}, {start}–{end}","automations.when.once":"On {date} at {time}","automations.when.custom":"On a custom schedule","automations.when.limitReset":"When your {engine} limit resets","automations.when.everyLimitReset":"Each time your {engine} limit resets","automations.limit.timeUnknown":"runs when the limit resets (time not known yet)","limits.title":"AI usage limits","limits.used":"{engine}: {percent}% used","limits.atLimit":"{engine}: at its limit","limits.resets":"resets {time}","limits.windowAtLimit":"At its limit","limits.clearsOnReply":"Clears by itself once {engine} replies again.","limits.tryAgainNow":"Try again now","limits.cardTitle":"{engine} usage","limits.checked":"checked {when}","limits.dueOne":"1 automation runs before then","limits.dueMany":"{count} automations run before then","limits.moveAfterReset":"Move to after reset","limits.moved":"Moved to after the reset","limits.marker":"{engine} resets {time}","limits.markerDrop":"Drop a bot or an automation here to run it when {engine}'s limit resets","limits.callNotOnReset":"A call keeps its time. Drop a bot or an automation on a reset instead.","chat.limit.continueAt":"Continue at {time} when your limit resets","routines.limitReset.option":"When my AI limit resets","routines.limitReset.engine":"Which AI","routines.limitReset.repeat":"How often","routines.limitReset.once":"Once","routines.limitReset.every":"Every time it resets","routines.limitReset.next":"Next reset: {time}","routines.limitReset.unknown":"The reset time isn't known yet. It runs as soon as it is.","automations.sentence.schedule":"{when}, {bot} {does}","automations.sentence.app":"When {source} sends something, {bot} {does}","automations.source.other":"another app","automations.source.named":"your {name}","automations.does.default":"does what it's asked","automations.reason.answer":"It's waiting for your answer.","automations.reason.signIn":"It's signed out. Sign in again so it can run.","automations.reason.usage":"It's out of credit or hit a usage limit.","automations.reason.timeLimit":"It ran out of time before finishing.","automations.reason.repeated":"It didn't finish the last {count} times.","automations.reason.done":"Its time has passed. Edit it to pick a new time.","automations.fix.answer":"Answer","automations.fix.signIn":"Sign in","automations.fix.usage":"Check usage","automations.fix.edit":"Edit","automations.fix.run":"Run now","automations.toggle":"Turn “{name}” on or off","automations.run.done":"Done","automations.run.nothingNew":"Nothing new","automations.run.waitingOnTeam":"Waiting for work it handed on to finish","automations.run.stopped":"Stopped","automations.run.stoppedBecause":"Stopped: {reason}","automations.run.failed":"It didn't finish","automations.run.partial":"Partly done: {reason}","automations.panel.label":"Automation","automations.panel.recent":"Recent runs","automations.panel.noRuns":"It hasn't run yet.","automations.panel.close":"Close","automations.panel.open":"Open","automations.runNow":"Run now","automations.starting":"Starting…","automations.pause":"Pause","automations.resume":"Resume","automations.edit":"Edit","automations.delete":"Delete","automations.deleteConfirm":"Delete this automation? “{sentence}”","automations.address.title":"Paste this address into the other app","automations.address.copy":"Copy address","automations.address.copied":"Copied","automations.address.keepOpen":"Keep {app} open so it can receive.","automations.address.unavailable":"This computer can't receive right now.","automations.more":"More","automations.address.showSecret":"Show secret / settings","automations.address.secret":"Secret: {secret}","automations.address.secretUnknown":"The secret is shown once. Copy the address to make a new one.","automations.address.revealSecret":"Show","automations.address.hideSecret":"Hide","automations.address.copySecret":"Copy","automations.address.showSecretLabel":"Show the secret","automations.address.hideSecretLabel":"Hide the secret","automations.address.copySecretLabel":"Copy the secret","automations.address.copyFailed":"Couldn't copy the secret","automations.address.header":"Apps that can't use the full address can send the secret as Authorization: Bearer <secret>.","automations.address.events":"Only accepts: {events}","automations.address.replace":"Replace address","automations.address.replaceConfirm":"Replace this address? The old one stops working.","automations.received.title":"Last thing it received","automations.received.help":"Its instructions can use these fields.","automations.calls.title":"Recent calls","automations.calls.none":"Nothing has arrived yet.","automations.calls.empty":"Nothing to show.","automations.calls.received":"Received","automations.calls.test":"Received as a test","automations.calls.duplicate":"Already received, so it was skipped","automations.calls.skipped":"Skipped: it doesn't accept “{kind}”","automations.calls.noKind":"Skipped: it didn't say what kind it was","automations.calls.wrongSecret":"Wrong secret","automations.calls.wrongSecretTimes":"Wrong secret ({count} times)","automations.calls.paused":"Turned away: it was paused","automations.calls.botGone":"Turned away: its bot was deleted","automations.calls.tooMany":"Turned away: too many still waiting","automations.calls.tooFast":"Turned away: too many at once","automations.calls.tooLarge":"Turned away: too large","automations.calls.unreadable":"Turned away: it couldn't be read","automations.calls.refused":"Turned away","automations.newBox.title":"What should happen?","automations.newBox.placeholder":"e.g. every morning at 9, send me a summary of my inbox","automations.newBox.bot":"Who should do it?","automations.newBox.send":"Set it up","automations.newBox.noBots":"Create a bot first, then come back here.","automations.newBox.yourself":"Set it up yourself","automations.newBox.when":"When","automations.newBox.onSchedule":"On a schedule","automations.newBox.whenApp":"When another app sends something","automations.newBox.continue":"Continue","automations.newBox.back":"Back","automations.newBox.cancel":"Cancel","automations.empty.title":"Your bots can do things on their own.","automations.empty.try":"Try: every morning, summarize my inbox","automations.empty.example":"every morning, summarize my inbox","automations.card.setUp":"Set up: {sentence}","automations.card.next":"Next: {when}","automations.card.lastRan":"Last ran {when}","automations.card.removed":"Automation removed · undone","automations.card.gone":"This automation no longer exists","automations.card.undo":"Undo","automations.card.undoing":"Undoing…","automations.card.changedSince":"It changed since, so it can't be undone here.","automations.preview.finished":"“{name}” finished","automations.preview.failed":"“{name}” didn't finish","automations.preview.needsYou":"“{name}” needs you","automations.preview.stopped":"“{name}” was stopped","automations.preview.missed":"“{name}” didn't run on time","automations.preview.running":"“{name}” is running","automations.editor.new":"New automation","automations.editor.edit":"Edit automation","automations.editor.app.title":"When another app sends something","automations.editor.app.editTitle":"Edit automation","automations.editor.app.subtitle":"Each time it sends something, your bot does this.","automations.editor.app.who":"Who should do it?","automations.editor.app.what":"What should it do?","automations.editor.app.whatPlaceholder":"e.g. draft a short follow-up email for the person in it","automations.editor.app.name":"Name · optional","automations.editor.app.runOn":"Run on","automations.editor.app.thisComputer":"This computer","automations.editor.app.cloud":"Cloud desktop","automations.editor.app.events":"Only accept these kinds · optional","automations.editor.app.eventsHelp":"Comma-separated names the other app sends, for example push.","automations.editor.app.limit":"At most this many at once · optional","automations.editor.app.limitHelp":"More arrivals are turned away until one finishes. Leave blank for {count}.","automations.editor.app.save":"Save","automations.editor.app.create":"Set it up","automations.editor.app.limitError":"Use a whole number from 1 to {max}.","automations.sentence.appEvent":"{when}, {bot} {does}","automations.app.when.email":"When you get an email{details}","automations.app.when.slack":"When a new Slack message arrives{details}","automations.app.when.event":"When “{event}” happens in {app}{details}","automations.app.from":"from {value}","automations.app.about":"about “{value}”","automations.app.labeled":"labeled {value}","automations.app.mentioning":"mentioning “{value}”","automations.app.in":"in {value}","automations.app.checks":"checks every 15 minutes","automations.app.waiting":"waiting for the first one","automations.app.waitingEmail":"waiting for the first email","automations.app.limit":"Up to {count} app events a day {place}.","automations.app.placeDesktop":"on this computer","automations.app.placeCloud":"in the Cloud","automations.reason.reconnect":"{app} needs to be reconnected.","automations.reason.appError":"{app} didn't accept it: {error}","automations.fix.reconnect":"Reconnect","automations.newBox.whenAppEvent":"When something happens in an app","automations.panel.events":"Recent events","automations.panel.noEvents":"Nothing has arrived yet.","automations.panel.skippedToday":"{count} skipped today: {reason}","automations.skip.dailyLimit":"daily limit","automations.skip.queueFull":"too many waiting","automations.skip.expired":"not collected in time","automations.skip.tooMany":"it was already busy","automations.event.started":"Started a run","automations.event.joined":"Added to a waiting run","automations.event.filtered":"Skipped: didn't match","automations.event.duplicate":"Already handled","automations.event.skipped":"Skipped","automations.event.rejected":"Couldn't be handled","automations.editor.appEvent.title":"When something happens in an app","automations.editor.appEvent.app":"App","automations.editor.appEvent.event":"What happens","automations.editor.appEvent.account":"Account","automations.editor.appEvent.from":"From · optional","automations.editor.appEvent.subject":"Subject contains · optional","automations.editor.appEvent.label":"Label · optional","automations.editor.appEvent.text":"Only when it mentions · optional","automations.editor.appEvent.noApps":"No connected app this bot may use has events yet.","automations.editor.appEvent.connect":"Connect an app","automations.editor.appEvent.loading":"Loading apps…","automations.editor.appEvent.checks":"Checks for new ones every 15 minutes.","automations.editor.appEvent.instant":"Arrives as it happens.","automations.editor.appEvent.whatPlaceholder":"e.g. draft a reply with the order status; if it isn't about an order, stop","approval.applied.automation.create":"{name} set up an automation: {title}","approval.applied.automation.update":"{name} changed an automation: {title}","approval.applied.automation.pause":"{name} paused an automation: {title}","approval.applied.automation.resume":"{name} resumed an automation: {title}","approval.applied.automation.runNow":"{name} ran an automation: {title}","approval.applied.automation.delete":"{name} deleted an automation: {title}","routines.newRoutine":"New routine","routines.newWebhook":"New webhook","routines.webhooks":"Webhooks","routines.today":"Today","routines.previous":"Previous dates","routines.next":"Next dates","routines.view.label":"Schedule view","routines.view.day":"Day","routines.view.week":"Week","routines.view.list":"List","routines.drawer.label":"Routine details","routines.drawer.close":"Close details","routines.drawer.bot":"Bot","routines.drawer.lead":"Lead","routines.drawer.guests":"Bots invited","routines.drawer.group":"Group","routines.drawer.schedule":"Schedule","routines.drawer.what":"What to do","routines.drawer.agenda":"Agenda","routines.drawer.runsOn":"Runs on","routines.drawer.runLimit":"Run limit","routines.drawer.noRuns":"No runs yet.","routines.drawer.allRuns":"See all","routines.runsOn.local":"This computer","routines.runsOn.localHint":"Starts while {app} is open here.","routines.runsOn.botCloud":"The bot's cloud desktop","routines.runsOn.botVm":"The bot's private desktop","routines.runsOn.boat":"Cloud desktop","routines.scheduleNote.local":"Runs while {app} is open on this computer. It can't wake a sleeping computer; a run missed by less than 12 hours happens when the app is back.","routines.scheduleNote.addCloud":"To run routines 24/7, add a Cloud.","routines.scheduleNote.openCloud":"To run routines 24/7, create them in the Cloud.","routines.scheduleNote.leave":"Open the Cloud? This routine isn't saved, so it closes without saving.","routines.scheduleNote.cloud":"Runs in the Cloud, 24/7, even when your computer is off.","routines.scheduleNote.server":"Runs while the app is running here.","routines.runsOn.boatHint":"Runs the whole job on the bot's cloud desktop while {app} is open.","routines.runsOn.team":"This computer, with the whole group","routines.runsOn.cloudHome":"The Cloud","routines.runsOn.cloudHomeHint":"Runs on schedule, even when your computer is off.","routines.runsOn.boatHintCloudHome":"Runs the whole job on the bot's cloud desktop, even when your computer is off.","routines.runsOn.teamCloudHome":"The Cloud, with the whole group","routines.results.dedicated":"Its own results thread","routines.results.missing":"A thread that no longer exists","routines.results.main":"The bot's main thread","routines.results.mainHelp":"Each run starts with fresh context. Dated results collect here, in the bot's main thread unless you choose another; full execution details stay in Run logs.","routines.results.justMe":"Just me","routines.results.teamHelp":"Just me: only you see what it reports. Shared chat: everyone who can use the bot sees it.","routines.runNow":"Run now","routines.starting":"Starting…","routines.pause":"Pause","routines.resume":"Resume","routines.edit":"Edit","routines.delete":"Delete","routines.editor.new":"New routine","routines.editor.edit":"Edit routine","routines.editor.titlePlaceholder":"What should happen?","routines.editor.titleLabel":"Title","routines.editor.roomGoalKept":"{app} keeps the group and the work its members hand each other together for the full goal.","routines.editor.descriptionLabel":"Description","routines.editor.who":"Who does it","routines.editor.when":"When","routines.editor.repeat":"Repeat","routines.editor.instructionsPlaceholder":"Tell the bot what to do each time","routines.editor.customRepeat":"This routine uses a custom repeat. Change it under More options.","routines.editor.more":"More options","routines.editor.fewer":"Fewer options","routines.repeat.once":"Once","routines.repeat.daily":"Every day","routines.repeat.weekdays":"Weekdays","routines.repeat.weekly":"Every week","routines.findBot":"Find a bot","routines.sidebar.label":"Schedule sidebar","routines.sidebar.myBots":"My bots","routines.sidebar.searchBots":"Search bots","routines.sidebar.availableBots":"Bots available to schedule","routines.sidebar.dragBot":"Drag {name} onto the schedule","routines.sidebar.drag":"Drag","routines.sidebar.noBots":"Create a bot to schedule work.","routines.sidebar.noMatch":"No bots match your search.","routines.sidebar.dragHint":"Drag a bot onto any time to schedule it.","routines.kind.routine":"Routine","routines.kind.call":"Call","routines.editor.type":"Routine type","routines.editor.botTask":"Bot task","routines.editor.botTaskHelp":"One bot owns and completes each run.","routines.editor.teamGoal":"Goal","routines.editor.teamGoalHelp":"A bot keeps working until the goal is done, alone or leading a group.","routines.editor.teamGoalAttachments":"Team goals cannot carry routine attachments. Put shared context in the goal instructions or the group instructions.","routines.editor.goalWhere":"Where it runs","routines.editor.goalOneOnOne":"Just the bot, in its own chat","routines.editor.goalOneOnOneHelp":"The bot works on the goal in its own chat until it is done.","routines.botCountOne":"{count} bot","routines.botCountMany":"{count} bots","routines.group":"Group","computer.tab.android":"Android","computer.browserSwitch.title":"Let {name} use a browser","computer.tab.browser":"Browser","computer.tab.data":"Data","computer.tab.files":"Files","computer.tabsAria":"Bot panel view","computer.fullScreen":"Full screen","computer.watchFullScreenTitle":"Watch the whole screen; the bot keeps working","computer.watchingBotWorks":"Watching · the bot keeps working","computer.browserOff.title":"The browser is off","computer.browserOff.body":"Turn on the built-in browser to watch {name} browse the web, and take over any time.","computer.browserOff.turnOn":"Turn on the browser","computer.files.folder":"Working folder","computer.files.privateFolder":"{name}'s private folder","computer.files.changeFolder":"Change","computer.files.recent":"Changed in this chat","computer.files.empty":"Files {name} makes or changes in this chat will show up here.","computer.files.notShared":"Not shared","computer.files.notSharedHint":"Ask the bot to share a file link in this chat to save a copy.","computer.simple.whereWorks":"Where {name} works","computer.simple.usingNow":"Right now: {place}","computer.simple.dest.thisMac":"This Mac","computer.simple.dest.thisPc":"This PC","computer.simple.needsSetup":"{name}'s desktop needs a setup step first.","computer.simple.showAdvanced":"Show advanced controls","computer.close":"Close the Screen panel","computer.screenOf":"{name}'s screen","computer.badge.local":"this computer","computer.badge.vps":"your own machine","computer.viewerTitle":"{name}'s live desktop","computer.openLiveDesktopAria":"Open {name}'s live desktop","computer.openLiveDesktop":"Open live desktop","computer.open":"Open","computer.watchOnly":"Watch-only preview","computer.waitingFrame":"Waiting for the first frame…","computer.autoChooseCloudOpen":"Auto found an existing cloud desktop. Choose Cloud desktop to open it.","computer.capturingVm":"Capturing the private desktop's screen…","computer.linuxReady":"Ready for approved bot actions. Start the separate preview below when you want to watch the screen.","computer.needsScreenPerm":"No frames yet. The preview needs Screen Recording permission. After granting it, relaunch the app.","computer.capturingLocal":"Capturing this computer's screen…","computer.openSettings":"Open Settings","computer.openBrowserTab":"Open the Browser tab","computer.chooseCloudWake":"Choose Cloud desktop to wake","computer.chooseCloudOpen":"Choose Cloud desktop to open","computer.chooseCloudManage":"Choose Cloud desktop to manage","computer.createVm":"Create {name}'s private desktop","computer.replaceVm":"Replace {name}'s private desktop","computer.openVmSetup":"Open private desktop setup","computer.openVpsSettings":"Open VPS settings","computer.startVps":"Start the desktop on your VPS","computer.prepareVps":"Prepare the desktop on your VPS","computer.replaceVps":"Replace the desktop on your VPS","computer.vpsAliasHint":"Add your VPS's SSH alias in Settings → API keys. Auto only reuses a desktop that's already ready.","computer.twoDesktopsTitle":"Watch two private desktops together without pausing either bot","computer.twoDesktops":"Open two desktops","computer.takeControl":"Take control","computer.youHaveWheel":"You have the wheel. The bot's clicks and keystrokes are refused until you hand it back.","computer.inControl":"You're in control","computer.useOpenDesktop":"Use “Open live desktop” to drive.","computer.simple.useFullScreen":"Use “Full screen” to drive.","computer.handBack":"Hand control back","computer.deleteVmBlocked":"Stop this bot's turn before deleting its private desktop","computer.deleteVmTitle":"Delete {name}'s private desktop","computer.deleteVm":"Delete this bot's private desktop","computer.takeControlTitle":"Pause the bot's hands and drive this computer yourself","computer.sleepTitle":"Put the desktop to sleep","computer.worksOn":"Works on","computer.worksOnHint":"Choose where this bot works.","computer.worksOnHintCloudHome":"Choose where this bot works. It can also use your computer whenever {app} is open on it.","computer.destinationAria":"Computer destination","computer.dest.autoDesc":"Choose automatically","computer.dest.cloudDesc":"A desktop in the cloud","computer.dest.vmDesc":"Isolated local desktop","computer.dest.localDesc":"Your screen and apps","computer.dest.browserDesc":"Web pages only","computer.dest.offDesc":"No computer access","computer.unavailableLocal":"Local computer control isn't ready","computer.browserOnlyTitle":"The built-in browser tab only; no desktop","computer.routines.title":"Scheduled tasks","computer.routines.subtitle":"Schedule work for {name}. Use its current setup, or run the whole job on its cloud desktop.","computer.routines.offWarning":"Scheduled tasks on this computer will not have desktop access while this is Off. Choose Cloud desktop in the schedule editor to run the whole job there.","computer.routines.needsYou":"needs you","computer.runStatus.queued":"queued","computer.runStatus.running":"running","computer.routines.runsOnVm":"runs on its private desktop","computer.routines.create":"Create schedule","computer.routines.openTitle":"Open schedules","computer.routines.schedules":"Schedules","computer.preview.imageFailed":"Couldn't show the screen image. Try again in a moment.","computer.preview.connecting":"Connecting to live desktop…","computer.preview.connectingScreen":"Connecting to the screen…","computer.preview.paused":"Screen updates paused.","computer.preview.cantConnect":"Couldn't connect to the screen.","computer.preview.retry":"Retry preview","computer.linux.title":"Local control","computer.linux.meta":"Beta · Ubuntu 24.04 GNOME/{session} · Cua Driver 0.41.3","computer.linux.metaOmarchy":"Experimental · Omarchy (Hyprland) · Wayland","computer.linux.ready":"Ready","computer.linux.waylandBadge":"Unavailable on Wayland","computer.linux.waylandBefore":"Local control is available on Ubuntu Xorg. It remains disabled on Wayland until its input-safety boundary is validated. Sign out and choose","computer.linux.waylandXorg":"Ubuntu on Xorg","computer.linux.waylandAfter":"to use This computer; Chat, Cloud desktop, Private desktop, and screen preview still work here.","computer.linux.pluginBadge":"Plugin needed","computer.linux.hyprlandPlugin":"To use This computer on Omarchy, install and turn on Cua's Hyprland plugin (cua-hyprland-plugin), reload Hyprland, then try again.","computer.linux.omarchyGuide":"Cua's Omarchy guide","computer.linux.enableBefore":"Enabling lets bots you explicitly assign to","computer.linux.enableAfter":"inspect the active desktop and request mouse or keyboard actions. Every local action asks you first.","computer.linux.waylandInput":"GNOME may also ask you to allow foreground input for this desktop session.","computer.linux.readyMsg":"Ready for bots explicitly assigned to this computer. Bot actions use a private cursor, so your pointer stays under your control.","computer.linux.hyprlandReady":"Ready for bots explicitly assigned to this computer. Bots act through their own seat inside Hyprland, so your pointer and keyboard stay yours unless you approve a foreground action. Web pages open in the bot's own browser.","computer.linux.checking":"Checking the driver and desktop session…","computer.linux.bundledDriver":"Bundled Cua Driver","computer.linux.stopFailed":"Could not stop active local computer turns.","computer.linux.enable":"Enable local control (Beta)","computer.linux.tryAgain":"Try again","computer.linux.disable":"Disable local control","computer.linux.guide":"Local control guide","computer.linux.driverSetup":"Driver setup and troubleshooting","computer.screen.idle":"Start a private, view-only preview when you need it.","computer.screen.cancelled":"Screen selection was cancelled. Nothing is being shared.","computer.screen.ended":"Screen sharing ended. Nothing is being shared.","computer.screen.unavailable":"Screen preview isn't available in this desktop session.","computer.screen.unavailableNow":"Screen preview isn't available right now.","computer.screen.unavailableWindow":"Screen preview isn't available from this window.","computer.screen.noVideoTrack":"The selected source did not provide a video stream.","computer.screen.error":"Couldn't start screen preview.","computer.screen.displayFailed":"Couldn't display screen preview.","computer.screen.selected":"Selected screen","computer.screen.waiting":"Waiting for screen selection…","computer.screen.active":"Preview active. Previewing does not grant local control; local actions still require approval.","computer.screen.title":"Preview this computer","computer.screen.subtitle":"Preview only: starting a preview does not grant local control.","computer.screen.badge":"Preview only","computer.screen.videoAria":"Live preview of the selected screen","computer.screen.checking":"Checking screen preview…","computer.screen.sharing":"Sharing","computer.screen.choosing":"Choose a screen…","computer.screen.stop":"Stop preview","computer.screen.choose":"Choose a screen","computer.screen.start":"Start preview","computer.android.usbSubtitle":"Connected directly over USB. The screen and controls stay on this computer.","computer.android.usb":"USB","computer.android.unauthorized":"Unlock the Android phone, accept the “Allow USB debugging” prompt, and optionally choose Always allow from this computer.","computer.android.badState":"The phone is {state}. Reconnect the USB cable and keep USB debugging enabled.","computer.android.screenAria":"Interactive Android screen for {name}","computer.android.screenAlt":"{name} screen","computer.android.back":"Back","computer.android.home":"Home","computer.android.recent":"Recent","computer.android.hint":"Click to tap, drag or use a trackpad to scroll, and type after selecting a field.","computer.android.setupTitle":"First-time USB setup","computer.android.step1":"Connect the phone with a data-capable USB cable and keep it unlocked.","computer.android.buildNumber":"Build number","computer.android.usbDebugging":"USB debugging","computer.android.step3a":"Accept","computer.android.allowUsbDebugging":"Allow USB debugging","computer.android.step3b":"on the phone. You can choose Always allow for this trusted computer.","computer.android.agentNote":"Agent control uses this same authorized USB connection. No phone companion app, account, Tailscale, or wireless pairing is needed.","computer.android.harnessNote":"Once connected, ask any compatible Limix to open an Android app or complete a task on your phone. The bundled Phone Harness skill loads automatically for phone requests.","computer.android.step2":"Enable Developer options by tapping {buildNumber} seven times in About phone, then turn on {usbDebugging}.","connectors.card.popupBlocked":"Your browser blocked the connection page. Allow pop-ups, then try again.","connectors.card.connected":"Connected","connectors.card.alsoUseful":"Also useful","connectors.card.resumed":"Connected securely. Your bot is continuing the task.","connectors.card.paused":"Connected securely. Continue the paused task when you're ready.","connectors.card.signInHint":"Sign in or enter the app key on the secure connection page, never in chat.","connectors.card.mcpSignInHint":"Sign in on the page that opens, never in chat.","connectors.card.notNow":"Not now","connectors.card.waiting":"Waiting for sign-in…","connectors.card.readyToUse":"Ready to use","connectors.card.requested":"Requested by your bot","connectors.card.openAgain":"Open again","connectors.card.tryAgain":"Try again","connectors.card.connectSecurely":"Connect securely","connectors.card.signInTo":"Sign in to {label}","connectors.card.signIn":"Sign in","connectors.card.continueTask":"Continue task","connectors.card.continuing":"Continuing","connectors.disconnectConfirm":"Disconnect {identity} from {service}? Only this {service} account will be revoked. Your other {service} accounts will stay connected.","connectors.action.included":"Included","connectors.action.checking":"Checking…","connectors.action.unavailable":"Unavailable","connectors.action.continue":"Continue","connectors.action.checkStatus":"Check status","connectors.action.addAccount":"Add account","connectors.action.retry":"Retry","connectors.action.connect":"Connect","connectors.action.reconnect":"Reconnect","connectors.empty.loadingTitle":"Checking connected apps…","connectors.empty.loadingDesc":"Your accounts will appear here as soon as the secure connection check finishes.","connectors.empty.errorTitle":"Couldn’t load connected apps","connectors.empty.errorDesc":"Retry the connection check before adding another account.","connectors.empty.noneTitle":"No connected apps yet","connectors.empty.noneDesc":"Connect an app from Marketplace and it will appear here.","connectors.popupBlockedContinue":"Your browser blocked the connection page. Click Continue to open it.","connectors.openAuthorizationPage":"Open authorization page","connectors.invalidAuthorizationUrl":"The connection service returned an invalid authorization link.","connectors.aliasNeeded":"This app already has an account. Add a label such as work or personal to connect another.","connectors.title":"Plugins","connectors.subtitle":"Connect apps and your own MCP tools.","connectors.refreshTitle":"Refresh connection status","connectors.closeAria":"Close plugins","connectors.typeAria":"Plugin type","connectors.tab.apps":"Connected apps","connectors.tab.mcp":"MCP servers","connectors.stale":"Showing what was connected last time. The credential store couldn't be opened just now, so these couldn't be re-checked. Your apps are still connected. Restarting {app} usually clears this.","connectors.resetSavedKeys":"Reset saved keys","connectors.savedKeysUnreadable":"The keys saved on this computer couldn't be read.","connectors.viewAria":"Connected apps view","connectors.tab.marketplace":"Marketplace","connectors.tab.connected":"Connected","connectors.searchPlaceholder":"Search apps","connectors.notConfigured":"Connected apps are temporarily unavailable. Retry after restarting the host, or configure the connection service there.","connectors.setupNeeded":"Connected apps are not set up yet. To connect Gmail, Slack and more, add a project key in Settings → API keys, under Self-host connected apps.","connectors.setupNeededRemote":"Connected apps are not set up on the host yet. Add a project key under Self-host connected apps in the host's settings.","connectors.openSettings":"Open settings","connectors.featuredBefore":"Showing featured apps.","connectors.updateKey":"Update your connected apps key","connectors.featuredAfter":"for the full catalog.","connectors.loadingCatalog":"Loading catalog…","connectors.adminOnly":"Only an admin of this installation can connect apps here.","connectors.section.yours":"Your connections","connectors.section.results":"Search results","connectors.section.available":"Available apps","connectors.marketplace.partialCount":"showing {shown} of {total} apps (the connection service returned a partial catalog)","connectors.marketplace.partialStalled":"the connection service returned a partial catalog","connectors.marketplace.partialReason":"the connection service stopped paging early: {reason}","connectors.selfHostOnly":"Self-host only","connectors.selfHostOnlyReason":"Twitter/X needs your own X Developer app and sign-in setup. Use self-hosted connected apps for now.","connectors.finishSetup":"Finish setup in your browser","connectors.finishSetupOrDisconnect":"Finish setup in your browser, or disconnect the pending account below to start again","connectors.authExpired":"Authorization expired. Try again.","connectors.signedOut":"Signed out. Reconnect to keep using it.","connectors.reconnectAria":"Reconnect {account} to {service}","connectors.aliasTaken":"Another account already uses that label. Choose a different one.","connectors.disconnect":"Disconnect","connectors.disconnectAria":"Disconnect {account} from {service}","connectors.aliasRequired":"Enter a label for the account, such as work or personal.","connectors.aliasPlaceholder":"Account label (work, personal…)","connectors.aliasAriaAnother":"Label for another {service} account","connectors.aliasAriaNew":"Label for the new {service} account","connectors.noAppsFound":"No apps found","connectors.tryDifferentSearch":"Try a different search.","mcp.env.invalidName":"“{key}” is not a valid environment variable.","mcp.env.duplicate":"“{key}” is listed more than once.","mcp.err.nameAndCommand":"Add a server name and executable command.","mcp.toggled":"{name} is now {state}. New threads will use this change.","mcp.switchedOnByTest":"{name} is on: it passed its test a moment ago.","mcp.state.on":"on","mcp.state.off":"off","mcp.removeConfirm":"Remove the “{name}” MCP server?","mcp.title":"Your MCP servers","mcp.subtitle":"Add an MCP server once (a command that runs on this computer, or a server at a URL) and every compatible bot can use its tools. Tool calls still follow your normal approval settings.","mcp.refreshAria":"Refresh MCP servers","mcp.addServer":"Add server","mcp.trustNotice":"Commands run on this computer with the environment variables you provide; URL servers receive the headers you provide. Only add software and addresses you trust. A new server is turned on once it answers.","mcp.editorNew":"Add MCP server","mcp.editorEdit":"Edit {name}","mcp.field.name":"Server name","mcp.field.command":"Executable command","mcp.field.args":"Arguments · one per line","mcp.field.resultBudget":"Result size limit · characters","mcp.resultBudgetHint":"Leave blank for the default: 8,000 characters (about 2k tokens). Raise it for tools that return big structured documents; 0 never trims. Each result is re-read on every later model call, so a higher limit costs more.","mcp.err.resultBudget":"Use a whole number of characters from 0 to 2,000,000 for the result size limit.","mcp.cancel":"Cancel","mcp.save":"Save","mcp.loading":"Loading MCP servers…","mcp.empty.title":"No custom MCP servers yet","mcp.empty.desc":"Add a trusted MCP server (a local command or a URL) to give your bots more tools.","mcp.badge.on":"On","mcp.badge.off":"Off","mcp.secretsSaved":"Secrets saved: {keys}","mcp.test":"Test","mcp.toggleAria":"Turn {name} {state}","mcp.turnOff":"Turn off","mcp.turnOn":"Turn on","mcp.editAria":"Edit {name}","mcp.removeAria":"Remove {name}","mcp.auth.signedIn":"Signed in","mcp.auth.needsSignIn":"Needs sign-in","mcp.runsOn":"Runs on {computer}, so it isn't started here.","mcp.ownBot":"Only for {bot}: its files are in {bot}'s own folder.","mcp.offFor":"Off for {bots}, because it doesn't start for them. It's checked again on its own.","mcp.keyOff":"Its key was deleted from the Vault, so it is off. Give it a new key here, or ask your bot to add it again.","mcp.auth.signIn":"Sign in","mcp.auth.signOut":"Sign out","mcp.auth.cancel":"Cancel","mcp.auth.otherComputer":"Signing in from another computer?","mcp.auth.otherComputerHint":"Finish signing in in your browser. If it ends on a localhost page that cannot connect, copy the full URL from the address bar and paste it here. Keep this URL private and use the browser that started sign-in.","mcp.auth.pasteBackHint":"After you approve, your browser shows a page that can't load. Copy that page's full address and paste it here.","mcp.auth.callbackUrl":"Redirect URL","mcp.auth.complete":"Complete sign-in","mcp.auth.completing":"Completing sign-in…","mcp.auth.openAgain":"Open sign-in page","mcp.auth.openFailed":"Could not open the sign-in page. Try again.","mcp.auth.waiting":"Finish signing in in your browser…","mcp.auth.failed":"Sign-in didn't finish. Try again.","mcp.auth.required":"This server needs you to sign in. Sign in opens it in your browser.","mcp.transport.stdio":"Run a command","mcp.transport.remote":"Connect to a URL","mcp.field.url":"Server URL","mcp.field.type":"Connection","mcp.type.http":"Streamable HTTP (most servers)","mcp.type.sse":"SSE (older servers)","mcp.headersHint":"For example Authorization, with Bearer and your key as its value. Values stay hidden; leave a saved one blank to keep it.","mcp.headers.invalidName":"“{key}” is not a valid header name.","mcp.headers.duplicate":"“{key}” is listed more than once.","mcp.err.nameAndUrl":"Add a server name and a full http:// or https:// address.","mcp.headersSaved":"Headers saved: {keys}","mcp.oauth.title":"Sign-in app · optional","mcp.oauth.hint":"Only for a server that signs in apps registered with it in advance, such as one behind Microsoft Entra ID. Leave the client ID blank to let {app} register itself. Save to see the redirect URI to register.","mcp.oauth.hintRedirect":"Only for a server that signs in apps registered with it in advance. Register {uri} as the app's redirect URI. Leave the client ID blank to let {app} register itself.","mcp.oauth.clientId":"Client ID","mcp.oauth.clientSecret":"Client secret","mcp.oauth.secretOptional":"Optional, for a confidential app","mcp.oauth.secretSaved":"Saved · leave blank to keep it","mcp.oauth.removeSecret":"Remove saved secret","mcp.oauth.scopes":"Scopes · separated by spaces","mcp.oauth.saved":"Sign-in app: {clientId}","mcp.oauth.savedWithSecret":"Sign-in app: {clientId} · secret saved","mcp.claude.title":"Also use my Claude Code MCP servers","mcp.claude.desc":"Off: Claude bots only get the servers on this page, plus a bot project's own .mcp.json. On: they also get every MCP server and connector from your own Claude Code setup, on every message, the same way Codex bots already read your Codex config. More tools means more tokens per message, so keep this off unless you need them.","mcp.claude.aria":"Use my Claude Code MCP servers","mcp.claude.error":"Could not save this setting. Try again.","mcp.claudeSkills.title":"Also use my Claude Code skills","mcp.claudeSkills.desc":"On: Claude bots also load every skill in your ~/.claude/skills folder, straight from the folder: scripts and reference files included, and your edits reach them right away. Only skills come along; your hooks, MCP servers and CLAUDE.md stay out, so bots with tool limits keep working.","mcp.claudeSkills.aria":"Use my Claude Code skills","mcp.paste.prompt":"Paste the server's link, or the setup command you were given","mcp.paste.label":"Server link or setup command","mcp.paste.foundOne":"Ready to add {name} ({where}).","mcp.paste.foundMany":"Ready to add {count} servers: {names}.","mcp.paste.notRecognized":"That doesn't look like a server link or a setup command. Check you copied all of it, or fill it in yourself under Edit details.","mcp.paste.badJson":"That settings block is cut off or broken. Copy all of it again and paste it here.","mcp.paste.incomplete":"The command is missing the server's name or address. Copy all of it again and paste it here.","mcp.paste.badPair":"A header or setting in the command isn't written as Name: value or NAME=value. Fix it and paste it again.","mcp.paste.variable":"Paste the real value of {name} here: the command used a variable from your terminal.","mcp.paste.placeholder":"Paste your real {name} here: what you were given has a placeholder for it.","mcp.paste.urlMissing":"Put the server's real address here: the one you pasted has a placeholder in it.","mcp.details":"Edit details","mcp.add":"Add","mcp.field.headerRows":"Headers","mcp.field.envRows":"Environment variables","mcp.row.headerName":"Header name","mcp.row.envName":"Variable name","mcp.row.value":"Value","mcp.row.add":"Add another","mcp.row.remove":"Remove {name}","mcp.err.rowName":"Give every value a name, or remove the row.","mcp.err.missingValue":"Fill in {name}, or remove it.","mcp.check.connectedNone":"Connected, but it offers no tools yet.","mcp.check.connectedOne":"Connected: 1 tool","mcp.check.connectedMany":"Connected: {count} tools","mcp.check.overLimit":"Some AIs take at most {limit} tools at once, so there its tools are found through tool search.","mcp.check.crowdsLimit":"That's {count} of the {limit} tools some AIs take at once, so there other MCP servers may be found through tool search instead.","mcp.check.failed":"Couldn't connect. {reason}","mcp.check.failedOff":"Couldn't connect, so it stays off. {reason}","mcp.check.savedOff":"Saved, but off: the test failed. {reason} Your bots can use it once it's on.","mcp.check.testingOff":"Off until it passes a test: testing it now.","mcp.check.tryAgain":"Try again","mcp.check.keysRefused":"The server didn't accept the keys ({reason}). Check the values of {names}.","mcp.check.keysNeeded":"The server didn't let it in ({reason}). It probably needs a key: add it with Fix the keys.","mcp.check.fixKeys":"Fix the keys","mcp.fixKeys.title":"Fix the keys for {name}","mcp.fixKeys.hint":"Paste each value again. Saved values are never shown, so one left blank keeps what is saved.","mcp.fixKeys.placeholder":"Paste the new value","mcp.team.everyone":"Everyone on your team can use this.","mcp.team.onlyMe":"Only for me","mcp.team.onlyMeOn":"Only you can use this. Teammates can add their own key from their team page.","mcp.auth.loadingTools":"Signed in. Connecting…","engineSetup.device.description":"Connect your ChatGPT account to Codex. Complete sign-in in your own browser; no terminal or password sharing needed.","engineSetup.chatgpt.description":"Use your ChatGPT plan for eligible AI requests in {app}. This is separate from Limix Bot Cloud and from paying with an API key.","engineSetup.chatgpt.start":"Continue with ChatGPT","engineSetup.antigravity.addAccount":"Add Google account","engineSetup.antigravity.emailUnavailable":"Signed in with Google · account email unavailable","engineSetup.chatgpt.modelsAfterSignIn":"Available models appear after you connect your ChatGPT plan.","engineSetup.chatgpt.starting":"Opening ChatGPT sign-in…","engineSetup.chatgpt.security":"Sign in on OpenAI's page and choose whether to share plan usage. Your password stays with OpenAI; credentials stay on this computer.","engineSetup.chatgpt.expires":"Sign-in expires at {time}","engineSetup.chatgpt.expired":"This sign-in expired. Continue with ChatGPT to try again.","engineSetup.chatgpt.cancelled":"Sign-in cancelled. Continue with ChatGPT when you're ready.","engineSetup.chatgpt.invalidChallenge":"A valid OpenAI sign-in link was not returned. Cancel and try again.","engineSetup.chatgpt.failed":"ChatGPT sign-in could not be completed. Please try again.","engineSetup.chatgpt.flowEnded":"This sign-in session is no longer available. Check that this browser is still paired with Full access, then continue with ChatGPT again.","engineSetup.chatgpt.using":"Using ChatGPT plan","engineSetup.chatgpt.manageUsage":"Manage usage","engineSetup.chatgpt.welcome":"You’re using your ChatGPT plan","engineSetup.chatgpt.welcomeBody":"Eligible AI requests in {app} use your ChatGPT plan. Manage usage and access in ChatGPT settings. Your ChatGPT plan is separate from Limix Bot Cloud.","engineSetup.device.start":"Connect ChatGPT","engineSetup.device.starting":"Getting your sign-in code…","engineSetup.device.enterCode":"Enter this one-time code on OpenAI's sign-in page:","engineSetup.device.copyCode":"Copy sign-in code","engineSetup.device.openChatGPT":"Open ChatGPT sign-in","engineSetup.device.waiting":"Waiting for you to finish signing in…","engineSetup.device.expires":"Code expires at {time}","engineSetup.device.security":"Only enter a code you requested here. This signs Codex in for your bots and uses your account's limits. Your password stays with OpenAI, and the sign-in stays where your bots run.","engineSetup.device.enableHint":"Device-code login may need enabling in ChatGPT security settings or by your ChatGPT admin.","engineSetup.device.connected":"ChatGPT connected. Your models are being refreshed.","engineSetup.device.connectedAccount":"ChatGPT connected","engineSetup.device.cancel":"Cancel sign-in","engineSetup.device.cancelling":"Cancelling…","engineSetup.device.cancelled":"Sign-in cancelled. You can request a new code when ready.","engineSetup.device.expired":"This code expired. Request a new code to try again.","engineSetup.device.failed":"Sign-in could not be completed. Try again, or check the Codex installation.","engineSetup.device.unreachable":"Lost touch with the server during sign-in. Check the connection and start again.","engineSetup.device.invalidChallenge":"Codex did not return a valid OpenAI sign-in link and code. Cancel and try again.","engineSetup.device.flowEnded":"This sign-in session is no longer available. Check that this browser is still paired with Full access, then request a new code.","engineSetup.device.tryAgain":"Try again","engineSetup.grok.description":"Sign in with your grok.com account so your bots can use Grok. You finish in your own browser; no terminal or password sharing needed.","engineSetup.grok.start":"Sign in to Grok","engineSetup.grok.enterCode":"Enter this one-time code on xAI's sign-in page:","engineSetup.grok.open":"Open Grok sign-in","engineSetup.grok.security":"Only enter a code you requested here. This signs Grok in for your bots with your grok.com subscription and its limits. Your password stays with xAI, and the sign-in stays where your bots run.","engineSetup.grok.connected":"Grok connected. Your models are being refreshed.","engineSetup.grok.connectedAccount":"Grok connected","engineSetup.grok.failed":"Sign-in could not be completed. Try again, or check the Grok installation.","engineSetup.grok.invalidChallenge":"Grok did not return a valid xAI sign-in link and code. Cancel and try again.","engineSetup.grok.notInstalled":"Grok with your grok.com subscription isn't installed here. Use an xAI API key instead.","engineSetup.grok.addKey":"Add xAI key","engineSetup.kimi.description":"Sign in with your Kimi Code membership so your bots can use Kimi. You finish in your own browser; no terminal or password sharing needed.","engineSetup.kimi.start":"Sign in to Kimi","engineSetup.kimi.enterCode":"Enter this one-time code on Kimi's sign-in page:","engineSetup.kimi.open":"Open Kimi sign-in","engineSetup.kimi.security":"Only enter a code you requested here. This signs Kimi in for your bots with your Kimi Code membership and its limits. Your password stays with Moonshot AI, and the sign-in stays where your bots run.","engineSetup.kimi.connected":"Kimi connected. Your models are being refreshed.","engineSetup.kimi.connectedAccount":"Kimi connected","engineSetup.kimi.failed":"Sign-in could not be completed. Try again, or check the Kimi installation.","engineSetup.kimi.invalidChallenge":"Kimi did not return a valid sign-in link and code. Cancel and try again.","engineSetup.cursor.description":"Sign in with your Cursor account so your bots can use Cursor. You finish in your own browser, on any device; no terminal or password sharing needed.","engineSetup.cursor.start":"Sign in to Cursor","engineSetup.cursor.open":"Open Cursor sign-in","engineSetup.cursor.security":"Only open a link you requested here. This signs Cursor in for your bots with your Cursor plan and its limits. Your password stays with Cursor, and the sign-in stays where your bots run.","engineSetup.cursor.connected":"Cursor connected. Your models are being refreshed.","engineSetup.cursor.connectedAccount":"Cursor connected","engineSetup.cursor.failed":"Sign-in could not be completed. Try again, or check the Cursor installation.","engineSetup.cursor.invalidChallenge":"Cursor did not return a valid sign-in link. Cancel and try again.","settings.domain.title":"Connect your domain","settings.domain.subtitle":"Enter your address, then copy the DNS record to your domain provider.","settings.domain.loading":"Loading server address…","settings.domain.serverOnly":"Custom domains are for a self-hosted {app} server. This desktop app's phone connection is managed separately below.","settings.domain.current":"Current public address","settings.domain.guide":"Advanced server setup","settings.domain.enterDomain":"Enter an address like bots.yourcompany.com to see the DNS values.","settings.domain.dnsRecord":"Add this record in your domain provider’s DNS settings","settings.domain.recordType":"Type","settings.domain.recordName":"Name / Host","settings.domain.recordValue":"Value / IP","settings.domain.copyField":"Copy {field}","settings.domain.recordHint":"Leave TTL at its default. If your provider already adds your domain, enter only the subdomain in Name (or @ for the root domain).","settings.domain.missingIp":"Ask your server administrator for its public IPv4 address.","settings.domain.ipAdminHint":"For Docker, NAT or multiple public addresses, set OMB_PUBLIC_IPV4 to the IPv4 address where your HTTPS proxy is hosted and restart {app}. Private addresses are never shown as DNS values.","settings.domain.httpsNeeded":"Your administrator must enable HTTPS on the server. Then check the connection below.","settings.domain.dns":"In your domain's DNS settings, create an A record for your chosen name pointing to this server's public IPv4 address. Add an AAAA record only if IPv6 reaches this same server. Allow time for DNS to update.","settings.domain.proxy":"Your server administrator must configure HTTPS in front of {app}. For Caddy running on the same host or network namespace, use this example and replace bots.example.com with your domain:","settings.domain.proxyHint":"Allow incoming ports 80 and 443 for Caddy's certificate setup. Keep its certificate storage persistent, preserve the Host header and forwarded headers, and reload Caddy after changing its configuration. For Docker, use the supplied deployment recipe.","settings.domain.verifyHint":"Once HTTPS works, enter your domain below. {app} checks its certificate and confirms that it reaches this exact installation before saving anything.","settings.domain.loopbackWarning":"Keep {app}'s app and webhook listeners on loopback. Never publish the app's internal port directly to the internet.","settings.domain.fullGuide":"Open self-hosting guide","settings.domain.label":"Your domain","settings.domain.inputHint":"For example, bots.yourcompany.com or https://bots.yourcompany.com. No paths, passwords, or pairing codes.","settings.domain.verifying":"Checking connection…","settings.domain.verify":"Connect domain","settings.domain.remove":"Remove custom address","settings.domain.removing":"Removing…","settings.domain.fallback":"Removing the custom address restores {url}. It does not change your DNS or proxy.","settings.domain.noFallback":"No fallback public address is configured. Removing this address stops {app} using it for new pairing links; your DNS and proxy stay unchanged.","settings.domain.scope":"This changes future server pairing links, not existing webhook URLs or the desktop companion connection. Your bots and conversations stay untouched. Each browser must pair separately on the new domain.","settings.domain.saved":"Domain verified and connected. Keep this tab open until you have paired a browser at the new address.","settings.domain.removed":"Custom address removed. Your bots, conversations, DNS and proxy are unchanged.","settings.domain.failed":"The domain could not be updated. Check DNS and HTTPS, then try again.","remote.serverPairing.title":"Pair a phone or another computer","remote.serverPairing.subtitle":"Create a one-time code, then scan it with the {app} app or open the link in a browser. Codes work once and expire after five minutes.","remote.serverPairing.scope.admin":"Full access","remote.serverPairing.scope.client":"Chat and approvals only","remote.serverPairing.create":"Create pairing code","teamPhone.title":"Open on your phone","teamPhone.subtitle":"Scan this code with the {app} phone app. Your phone opens {team} as you, with the chats you see here.","teamPhone.stays":"Your phone stays signed in while {team} is open in this app.","teamPhone.remove":"Remove","remote.serverPairing.creating":"Creating…","remote.serverPairing.expired":"That code expired. Create a new one.","remote.serverPairing.copyLink":"Copy link","remote.serverPairing.copied":"Copied","remote.serverPairing.noLink":"This server has no public address for a link yet: open /pair on the address you use and type the code.","remote.serverPairing.chatOnly":"This device is connected with chat and approvals only, so it cannot pair others. On the computer running the server, run `limixbot pair` (or open Settings there) to make a full-access code, and connect this device again with it.","remote.serverPairing.cloudPersonal":"The Cloud is personal: only your own devices can connect, each with full access.","remote.serverPairing.devices":"Paired devices","remote.serverPairing.noDevices":"No devices paired yet.","remote.serverPairing.thisBrowser":"this browser","remote.serverPairing.signOut":"Sign out","remote.serverPairing.seen":"seen {when}","remote.serverPairing.justNow":"just now","remote.serverPairing.minutesAgo":"{minutes} min ago","remote.serverPairing.hoursAgo":"{hours} h ago","remote.serverPairing.daysAgo":"{days} d ago","remote.serverPairing.error":"Couldn't connect: {error}","remote.computerName.title":"This computer's name","remote.computerName.help":"What your phone calls this computer. Leave it empty to use the default.","remote.computerName.placeholder":"e.g. Office PC","remote.computerName.error":"Couldn't save the name: {error}","remote.serverPairing.portalSubtitle":"Browsers and devices signed in to this installation.","remote.serverPairing.portal":"People sign in to this installation through your organization's Admin, so pairing codes are turned off. To add someone, invite them in your organization's Admin.","remote.serverPairing.portalChatOnly":"You signed in through your organization's Admin. To use this installation on another device, sign in there the same way.","remote.serverPairing.portalDevices":"Signed-in devices","engineSetup.claude.description":"Sign in to Claude Code with your own Claude subscription. Open Anthropic's sign-in page in your browser, sign in, then paste the code it shows you here. No terminal and no password sharing.","engineSetup.claude.start":"Sign in to Claude","engineSetup.claude.starting":"Preparing sign-in…","engineSetup.claude.finishing":"Checking with Claude Code…","engineSetup.claude.connected":"Claude connected. Your models are being refreshed.","engineSetup.claude.connectedAccount":"Claude connected","engineSetup.claude.invalidChallenge":"Claude Code did not return a valid Anthropic sign-in link. Cancel and try again.","remote.signInAccess.title":"Who can sign in with an email","remote.signInAccess.subtitle":"People on this list sign in at /pair with a one-time code sent to their email. Full access is everything the owner can do; chat and approvals is for people who only talk to the bots.","remote.signInAccess.link":"Send them this link:","remote.signInAccess.placeholder":"name@company.com or @company.com","remote.signInAccess.add":"Add","remote.signInAccess.remove":"Remove","remote.signInAccess.empty":"Nobody yet. Add an address, or @yourcompany.com for everyone at your company.","remote.signInAccess.invalid":"Enter an email address, or @domain for everyone at that domain.","remote.signInAccess.note":"Changes apply immediately. Removing someone stops new sign-ins; their existing devices stay signed in until you sign them out above.","remote.signInAccess.error":"Could not save: {error}","botSetup.ideas":"Setup ideas","botSetup.optional":"Optional ways to customize this bot. You can start chatting now.","botSetup.withBot":"Set up with the bot","botSetup.help":"It asks a few questions and helps you set up.","botAccess.mcpDescription":"Controls which servers are offered to this bot. Individual tool approvals depend on the model provider and approval mode.","botAccess.mcpRefreshError":"Could not refresh MCP servers.","botAccess.mcpEmpty":"No MCP servers added yet.","botAccess.mcpDisabled":"Switched off in Apps → MCP servers. Test it and turn it on there first.","botAccess.mcpAllow":"Let this bot use {name}","botAccess.mcpAdd":"Add an MCP server…","botAccess.mcpUseAll":"Use every enabled server","botAccess.mcpBusy":"Wait until this bot finishes all active tasks before changing its MCP servers.","botAccess.connectApp":"Connect an app…","botAccess.recordSteps.title":"Record browser steps","botAccess.recordSteps.on":"Saves a screenshot and a short note of each click, typing and page change, with any errors the page reported. Kept with this conversation for 30 days.","botAccess.recordSteps.off":"Browser steps are not saved.","botAccess.recordSteps.needsBrowser":"Turn on the browser first.","botAccess.recordSteps.myChrome":"This bot uses your own Chrome, so the screenshots show your Chrome.","botSlack.body":"Give this agent its own Slack app, with its own name and picture, so your team can message it directly.","botSlack.manage":"Manage in Admin","skills.learned.hintOn":"Save a bot's verification run as a skill from the Verify card, or import one below. Each new or changed skill shows in the chat with Undo.","skills.learned.hintOff":"Skill authoring is off, but skills you already enabled stay under your control here.","skills.origin.imported":"this computer","skills.origin.importedHint":"Brought in from this computer. Each bot lists the ones that fit its role and finds the rest when a task needs them. Switch it on to list it for this bot, or off to keep it from this bot.","skills.origin.native":"AI","skills.origin.nativeHint":"The bot's AI loads this from the folder under Source. Turn it off here for this bot only; the files stay where they are. On Codex, while any is off here, this bot's replies skip the skills.config list in ~/.codex/config.toml.","skills.write.title":"Write a command","skills.write.hint":"Give the bot a short command for something you ask often. Type /name in a chat to run it. Anything after the name fills in {input}.","skills.write.name":"Command name","skills.write.namePlaceholder":"name","skills.write.description":"What it does","skills.write.descriptionPlaceholder":"What it does, in one line","skills.write.instructions":"Instructions","skills.write.instructionsPlaceholder":"What the bot should do. Use {input} for the text typed after the command.","skills.write.save":"Save command","skills.write.saving":"Saving…","skills.write.saved":"Saved. Type /{name} in a chat with this bot to run it.","skills.write.failed":"Could not save that command.","skills.write.problem.name":"Use lowercase letters, numbers, and single dashes for the name.","skills.write.problem.reserved":"That name is taken by a built-in command.","skills.write.problem.taken":"This bot already has a skill with that name.","skills.write.problem.description":"Add a one-line description.","skills.write.problem.instructions":"Add the instructions the bot should follow.","settings.section.skills":"Skills","skills.library.title":"Skills library","skills.library.subtitle":"Skills every bot can be assigned from, browsed and imported locally. Nothing is fetched from the network.","skills.library.searchPlaceholder":"Search by name, description, or source","skills.library.allTags":"All","skills.library.empty":"The library is empty. Import a skill below to get started.","skills.library.noMatches":"No skills match that search.","skills.library.version":"Version {version}","skills.library.noVersion":"No version","skills.library.importedAt":"Imported {date}","skills.library.notAssigned":"Not assigned to any bot.","skills.library.everyBot":"Every bot","skills.library.everyBotHint":"Make this skill available to every current and future bot.","skills.library.assignLabel":"Assign to bot","skills.library.assignPickBot":"Pick a bot…","skills.library.assign":"Assign","skills.library.removeAssignment":"Unassign {bot}","skills.library.enable":"Enable {skill}","skills.library.disable":"Disable {skill}","skills.library.view":"View {skill}","skills.library.importTitle":"Import a skill","skills.library.importHint":"Paste a SKILL.md file exactly as it exists on disk. Local import only: no URL is fetched.","skills.library.importPlaceholder":`---
|
|
9
|
+
`).replace(Wy,"")}function bh(e,t){return t=vh(t),vh(e)===t}function be(e,t,o,n,i,s){switch(o){case"children":typeof n=="string"?t==="body"||t==="textarea"&&n===""||An(e,n):(typeof n=="number"||typeof n=="bigint")&&t!=="body"&&An(e,""+n);break;case"className":Si(e,"class",n);break;case"tabIndex":Si(e,"tabindex",n);break;case"dir":case"role":case"viewBox":case"width":case"height":Si(e,o,n);break;case"style":bd(e,n,s);break;case"data":if(t!=="object"){Si(e,"data",n);break}case"src":case"href":if(n===""&&(t!=="a"||o!=="href")){e.removeAttribute(o);break}if(n==null||typeof n=="function"||typeof n=="symbol"||typeof n=="boolean"){e.removeAttribute(o);break}n=Ai(""+n),e.setAttribute(o,n);break;case"action":case"formAction":if(typeof n=="function"){e.setAttribute(o,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}else typeof s=="function"&&(o==="formAction"?(t!=="input"&&be(e,t,"name",i.name,i,null),be(e,t,"formEncType",i.formEncType,i,null),be(e,t,"formMethod",i.formMethod,i,null),be(e,t,"formTarget",i.formTarget,i,null)):(be(e,t,"encType",i.encType,i,null),be(e,t,"method",i.method,i,null),be(e,t,"target",i.target,i,null)));if(n==null||typeof n=="symbol"||typeof n=="boolean"){e.removeAttribute(o);break}n=Ai(""+n),e.setAttribute(o,n);break;case"onClick":n!=null&&(e.onclick=jt);break;case"onScroll":n!=null&&ne("scroll",e);break;case"onScrollEnd":n!=null&&ne("scrollend",e);break;case"dangerouslySetInnerHTML":if(n!=null){if(typeof n!="object"||!("__html"in n))throw Error(c(61));if(o=n.__html,o!=null){if(i.children!=null)throw Error(c(60));e.innerHTML=o}}break;case"multiple":e.multiple=n&&typeof n!="function"&&typeof n!="symbol";break;case"muted":e.muted=n&&typeof n!="function"&&typeof n!="symbol";break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":break;case"autoFocus":break;case"xlinkHref":if(n==null||typeof n=="function"||typeof n=="boolean"||typeof n=="symbol"){e.removeAttribute("xlink:href");break}o=Ai(""+n),e.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",o);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":n!=null&&typeof n!="function"&&typeof n!="symbol"?e.setAttribute(o,""+n):e.removeAttribute(o);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":n&&typeof n!="function"&&typeof n!="symbol"?e.setAttribute(o,""):e.removeAttribute(o);break;case"capture":case"download":n===!0?e.setAttribute(o,""):n!==!1&&n!=null&&typeof n!="function"&&typeof n!="symbol"?e.setAttribute(o,n):e.removeAttribute(o);break;case"cols":case"rows":case"size":case"span":n!=null&&typeof n!="function"&&typeof n!="symbol"&&!isNaN(n)&&1<=n?e.setAttribute(o,n):e.removeAttribute(o);break;case"rowSpan":case"start":n==null||typeof n=="function"||typeof n=="symbol"||isNaN(n)?e.removeAttribute(o):e.setAttribute(o,n);break;case"popover":ne("beforetoggle",e),ne("toggle",e),ki(e,"popover",n);break;case"xlinkActuate":Ft(e,"http://www.w3.org/1999/xlink","xlink:actuate",n);break;case"xlinkArcrole":Ft(e,"http://www.w3.org/1999/xlink","xlink:arcrole",n);break;case"xlinkRole":Ft(e,"http://www.w3.org/1999/xlink","xlink:role",n);break;case"xlinkShow":Ft(e,"http://www.w3.org/1999/xlink","xlink:show",n);break;case"xlinkTitle":Ft(e,"http://www.w3.org/1999/xlink","xlink:title",n);break;case"xlinkType":Ft(e,"http://www.w3.org/1999/xlink","xlink:type",n);break;case"xmlBase":Ft(e,"http://www.w3.org/XML/1998/namespace","xml:base",n);break;case"xmlLang":Ft(e,"http://www.w3.org/XML/1998/namespace","xml:lang",n);break;case"xmlSpace":Ft(e,"http://www.w3.org/XML/1998/namespace","xml:space",n);break;case"is":ki(e,"is",n);break;case"innerText":case"textContent":break;default:(!(2<o.length)||o[0]!=="o"&&o[0]!=="O"||o[1]!=="n"&&o[1]!=="N")&&(o=vf.get(o)||o,ki(e,o,n))}}function oc(e,t,o,n,i,s){switch(o){case"style":bd(e,n,s);break;case"dangerouslySetInnerHTML":if(n!=null){if(typeof n!="object"||!("__html"in n))throw Error(c(61));if(o=n.__html,o!=null){if(i.children!=null)throw Error(c(60));e.innerHTML=o}}break;case"children":typeof n=="string"?An(e,n):(typeof n=="number"||typeof n=="bigint")&&An(e,""+n);break;case"onScroll":n!=null&&ne("scroll",e);break;case"onScrollEnd":n!=null&&ne("scrollend",e);break;case"onClick":n!=null&&(e.onclick=jt);break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"innerHTML":case"ref":break;case"innerText":case"textContent":break;default:if(!dd.hasOwnProperty(o))e:{if(o[0]==="o"&&o[1]==="n"&&(i=o.endsWith("Capture"),t=o.slice(2,i?o.length-7:void 0),s=e[ot]||null,s=s!=null?s[o]:null,typeof s=="function"&&e.removeEventListener(t,s,i),typeof n=="function")){typeof s!="function"&&s!==null&&(o in e?e[o]=null:e.hasAttribute(o)&&e.removeAttribute(o)),e.addEventListener(t,n,i);break e}o in e?e[o]=n:n===!0?e.setAttribute(o,""):ki(e,o,n)}}}function Je(e,t,o){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"img":ne("error",e),ne("load",e);var n=!1,i=!1,s;for(s in o)if(o.hasOwnProperty(s)){var l=o[s];if(l!=null)switch(s){case"src":n=!0;break;case"srcSet":i=!0;break;case"children":case"dangerouslySetInnerHTML":throw Error(c(137,t));default:be(e,t,s,l,o,null)}}i&&be(e,t,"srcSet",o.srcSet,o,null),n&&be(e,t,"src",o.src,o,null);return;case"input":ne("invalid",e);var u=s=l=i=null,p=null,b=null;for(n in o)if(o.hasOwnProperty(n)){var O=o[n];if(O!=null)switch(n){case"name":i=O;break;case"type":l=O;break;case"checked":p=O;break;case"defaultChecked":b=O;break;case"value":s=O;break;case"defaultValue":u=O;break;case"children":case"dangerouslySetInnerHTML":if(O!=null)throw Error(c(137,t));break;default:be(e,t,n,O,o,null)}}gd(e,s,u,p,b,l,i,!1);return;case"select":ne("invalid",e),n=l=s=null;for(i in o)if(o.hasOwnProperty(i)&&(u=o[i],u!=null))switch(i){case"value":s=u;break;case"defaultValue":l=u;break;case"multiple":n=u;default:be(e,t,i,u,o,null)}t=s,o=l,e.multiple=!!n,t!=null?Cn(e,!!n,t,!1):o!=null&&Cn(e,!!n,o,!0);return;case"textarea":ne("invalid",e),s=i=n=null;for(l in o)if(o.hasOwnProperty(l)&&(u=o[l],u!=null))switch(l){case"value":n=u;break;case"defaultValue":i=u;break;case"children":s=u;break;case"dangerouslySetInnerHTML":if(u!=null)throw Error(c(91));break;default:be(e,t,l,u,o,null)}yd(e,n,i,s);return;case"option":for(p in o)o.hasOwnProperty(p)&&(n=o[p],n!=null)&&(p==="selected"?e.selected=n&&typeof n!="function"&&typeof n!="symbol":be(e,t,p,n,o,null));return;case"dialog":ne("beforetoggle",e),ne("toggle",e),ne("cancel",e),ne("close",e);break;case"iframe":case"object":ne("load",e);break;case"video":case"audio":for(n=0;n<Wa.length;n++)ne(Wa[n],e);break;case"image":ne("error",e),ne("load",e);break;case"details":ne("toggle",e);break;case"embed":case"source":case"link":ne("error",e),ne("load",e);case"area":case"base":case"br":case"col":case"hr":case"keygen":case"meta":case"param":case"track":case"wbr":case"menuitem":for(b in o)if(o.hasOwnProperty(b)&&(n=o[b],n!=null))switch(b){case"children":case"dangerouslySetInnerHTML":throw Error(c(137,t));default:be(e,t,b,n,o,null)}return;default:if(fr(t)){for(O in o)o.hasOwnProperty(O)&&(n=o[O],n!==void 0&&oc(e,t,O,n,o,void 0));return}}for(u in o)o.hasOwnProperty(u)&&(n=o[u],n!=null&&be(e,t,u,n,o,null))}function Fy(e,t,o,n){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"input":var i=null,s=null,l=null,u=null,p=null,b=null,O=null;for(S in o){var M=o[S];if(o.hasOwnProperty(S)&&M!=null)switch(S){case"checked":break;case"value":break;case"defaultValue":p=M;default:n.hasOwnProperty(S)||be(e,t,S,null,n,M)}}for(var k in n){var S=n[k];if(M=o[k],n.hasOwnProperty(k)&&(S!=null||M!=null))switch(k){case"type":s=S;break;case"name":i=S;break;case"checked":b=S;break;case"defaultChecked":O=S;break;case"value":l=S;break;case"defaultValue":u=S;break;case"children":case"dangerouslySetInnerHTML":if(S!=null)throw Error(c(137,t));break;default:S!==M&&be(e,t,k,S,n,M)}}mr(e,l,u,p,b,O,s,i);return;case"select":S=l=u=k=null;for(s in o)if(p=o[s],o.hasOwnProperty(s)&&p!=null)switch(s){case"value":break;case"multiple":S=p;default:n.hasOwnProperty(s)||be(e,t,s,null,n,p)}for(i in n)if(s=n[i],p=o[i],n.hasOwnProperty(i)&&(s!=null||p!=null))switch(i){case"value":k=s;break;case"defaultValue":u=s;break;case"multiple":l=s;default:s!==p&&be(e,t,i,s,n,p)}t=u,o=l,n=S,k!=null?Cn(e,!!o,k,!1):!!n!=!!o&&(t!=null?Cn(e,!!o,t,!0):Cn(e,!!o,o?[]:"",!1));return;case"textarea":S=k=null;for(u in o)if(i=o[u],o.hasOwnProperty(u)&&i!=null&&!n.hasOwnProperty(u))switch(u){case"value":break;case"children":break;default:be(e,t,u,null,n,i)}for(l in n)if(i=n[l],s=o[l],n.hasOwnProperty(l)&&(i!=null||s!=null))switch(l){case"value":k=i;break;case"defaultValue":S=i;break;case"children":break;case"dangerouslySetInnerHTML":if(i!=null)throw Error(c(91));break;default:i!==s&&be(e,t,l,i,n,s)}fd(e,k,S);return;case"option":for(var G in o)k=o[G],o.hasOwnProperty(G)&&k!=null&&!n.hasOwnProperty(G)&&(G==="selected"?e.selected=!1:be(e,t,G,null,n,k));for(p in n)k=n[p],S=o[p],n.hasOwnProperty(p)&&k!==S&&(k!=null||S!=null)&&(p==="selected"?e.selected=k&&typeof k!="function"&&typeof k!="symbol":be(e,t,p,k,n,S));return;case"img":case"link":case"area":case"base":case"br":case"col":case"embed":case"hr":case"keygen":case"meta":case"param":case"source":case"track":case"wbr":case"menuitem":for(var K in o)k=o[K],o.hasOwnProperty(K)&&k!=null&&!n.hasOwnProperty(K)&&be(e,t,K,null,n,k);for(b in n)if(k=n[b],S=o[b],n.hasOwnProperty(b)&&k!==S&&(k!=null||S!=null))switch(b){case"children":case"dangerouslySetInnerHTML":if(k!=null)throw Error(c(137,t));break;default:be(e,t,b,k,n,S)}return;default:if(fr(t)){for(var we in o)k=o[we],o.hasOwnProperty(we)&&k!==void 0&&!n.hasOwnProperty(we)&&oc(e,t,we,void 0,n,k);for(O in n)k=n[O],S=o[O],!n.hasOwnProperty(O)||k===S||k===void 0&&S===void 0||oc(e,t,O,k,n,S);return}}for(var f in o)k=o[f],o.hasOwnProperty(f)&&k!=null&&!n.hasOwnProperty(f)&&be(e,t,f,null,n,k);for(M in n)k=n[M],S=o[M],!n.hasOwnProperty(M)||k===S||k==null&&S==null||be(e,t,M,k,n,S)}function wh(e){switch(e){case"css":case"script":case"font":case"img":case"image":case"input":case"link":return!0;default:return!1}}function jy(){if(typeof performance.getEntriesByType=="function"){for(var e=0,t=0,o=performance.getEntriesByType("resource"),n=0;n<o.length;n++){var i=o[n],s=i.transferSize,l=i.initiatorType,u=i.duration;if(s&&u&&wh(l)){for(l=0,u=i.responseEnd,n+=1;n<o.length;n++){var p=o[n],b=p.startTime;if(b>u)break;var O=p.transferSize,M=p.initiatorType;O&&wh(M)&&(p=p.responseEnd,l+=O*(p<u?1:(u-b)/(p-b)))}if(--n,t+=8*(s+l)/(i.duration/1e3),e++,10<e)break}}if(0<e)return t/e/1e6}return navigator.connection&&(e=navigator.connection.downlink,typeof e=="number")?e:5}var nc=null,ac=null;function bs(e){return e.nodeType===9?e:e.ownerDocument}function kh(e){switch(e){case"http://www.w3.org/2000/svg":return 1;case"http://www.w3.org/1998/Math/MathML":return 2;default:return 0}}function Sh(e,t){if(e===0)switch(t){case"svg":return 1;case"math":return 2;default:return 0}return e===1&&t==="foreignObject"?0:e}function ic(e,t){return e==="textarea"||e==="noscript"||typeof t.children=="string"||typeof t.children=="number"||typeof t.children=="bigint"||typeof t.dangerouslySetInnerHTML=="object"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var sc=null;function Vy(){var e=window.event;return e&&e.type==="popstate"?e===sc?!1:(sc=e,!0):(sc=null,!1)}var Ch=typeof setTimeout=="function"?setTimeout:void 0,Ky=typeof clearTimeout=="function"?clearTimeout:void 0,Ah=typeof Promise=="function"?Promise:void 0,Qy=typeof queueMicrotask=="function"?queueMicrotask:typeof Ah<"u"?function(e){return Ah.resolve(null).then(e).catch(Xy)}:Ch;function Xy(e){setTimeout(function(){throw e})}function Po(e){return e==="head"}function Th(e,t){var o=t,n=0;do{var i=o.nextSibling;if(e.removeChild(o),i&&i.nodeType===8)if(o=i.data,o==="/$"||o==="/&"){if(n===0){e.removeChild(i),ta(t);return}n--}else if(o==="$"||o==="$?"||o==="$~"||o==="$!"||o==="&")n++;else if(o==="html")ja(e.ownerDocument.documentElement);else if(o==="head"){o=e.ownerDocument.head,ja(o);for(var s=o.firstChild;s;){var l=s.nextSibling,u=s.nodeName;s[da]||u==="SCRIPT"||u==="STYLE"||u==="LINK"&&s.rel.toLowerCase()==="stylesheet"||o.removeChild(s),s=l}}else o==="body"&&ja(e.ownerDocument.body);o=i}while(o);ta(t)}function Oh(e,t){var o=e;e=0;do{var n=o.nextSibling;if(o.nodeType===1?t?(o._stashedDisplay=o.style.display,o.style.display="none"):(o.style.display=o._stashedDisplay||"",o.getAttribute("style")===""&&o.removeAttribute("style")):o.nodeType===3&&(t?(o._stashedText=o.nodeValue,o.nodeValue=""):o.nodeValue=o._stashedText||""),n&&n.nodeType===8)if(o=n.data,o==="/$"){if(e===0)break;e--}else o!=="$"&&o!=="$?"&&o!=="$~"&&o!=="$!"||e++;o=n}while(o)}function rc(e){var t=e.firstChild;for(t&&t.nodeType===10&&(t=t.nextSibling);t;){var o=t;switch(t=t.nextSibling,o.nodeName){case"HTML":case"HEAD":case"BODY":rc(o),pr(o);continue;case"SCRIPT":case"STYLE":continue;case"LINK":if(o.rel.toLowerCase()==="stylesheet")continue}e.removeChild(o)}}function Zy(e,t,o,n){for(;e.nodeType===1;){var i=o;if(e.nodeName.toLowerCase()!==t.toLowerCase()){if(!n&&(e.nodeName!=="INPUT"||e.type!=="hidden"))break}else if(n){if(!e[da])switch(t){case"meta":if(!e.hasAttribute("itemprop"))break;return e;case"link":if(s=e.getAttribute("rel"),s==="stylesheet"&&e.hasAttribute("data-precedence"))break;if(s!==i.rel||e.getAttribute("href")!==(i.href==null||i.href===""?null:i.href)||e.getAttribute("crossorigin")!==(i.crossOrigin==null?null:i.crossOrigin)||e.getAttribute("title")!==(i.title==null?null:i.title))break;return e;case"style":if(e.hasAttribute("data-precedence"))break;return e;case"script":if(s=e.getAttribute("src"),(s!==(i.src==null?null:i.src)||e.getAttribute("type")!==(i.type==null?null:i.type)||e.getAttribute("crossorigin")!==(i.crossOrigin==null?null:i.crossOrigin))&&s&&e.hasAttribute("async")&&!e.hasAttribute("itemprop"))break;return e;default:return e}}else if(t==="input"&&e.type==="hidden"){var s=i.name==null?null:""+i.name;if(i.type==="hidden"&&e.getAttribute("name")===s)return e}else return e;if(e=Bt(e.nextSibling),e===null)break}return null}function Jy(e,t,o){if(t==="")return null;for(;e.nodeType!==3;)if((e.nodeType!==1||e.nodeName!=="INPUT"||e.type!=="hidden")&&!o||(e=Bt(e.nextSibling),e===null))return null;return e}function xh(e,t){for(;e.nodeType!==8;)if((e.nodeType!==1||e.nodeName!=="INPUT"||e.type!=="hidden")&&!t||(e=Bt(e.nextSibling),e===null))return null;return e}function lc(e){return e.data==="$?"||e.data==="$~"}function cc(e){return e.data==="$!"||e.data==="$?"&&e.ownerDocument.readyState!=="loading"}function $y(e,t){var o=e.ownerDocument;if(e.data==="$~")e._reactRetry=t;else if(e.data!=="$?"||o.readyState!=="loading")t();else{var n=function(){t(),o.removeEventListener("DOMContentLoaded",n)};o.addEventListener("DOMContentLoaded",n),e._reactRetry=n}}function Bt(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t==="$"||t==="$!"||t==="$?"||t==="$~"||t==="&"||t==="F!"||t==="F")break;if(t==="/$"||t==="/&")return null}}return e}var dc=null;function Mh(e){e=e.nextSibling;for(var t=0;e;){if(e.nodeType===8){var o=e.data;if(o==="/$"||o==="/&"){if(t===0)return Bt(e.nextSibling);t--}else o!=="$"&&o!=="$!"&&o!=="$?"&&o!=="$~"&&o!=="&"||t++}e=e.nextSibling}return null}function Eh(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var o=e.data;if(o==="$"||o==="$!"||o==="$?"||o==="$~"||o==="&"){if(t===0)return e;t--}else o!=="/$"&&o!=="/&"||t++}e=e.previousSibling}return null}function Bh(e,t,o){switch(t=bs(o),e){case"html":if(e=t.documentElement,!e)throw Error(c(452));return e;case"head":if(e=t.head,!e)throw Error(c(453));return e;case"body":if(e=t.body,!e)throw Error(c(454));return e;default:throw Error(c(451))}}function ja(e){for(var t=e.attributes;t.length;)e.removeAttributeNode(t[0]);pr(e)}var Rt=new Map,Rh=new Set;function ws(e){return typeof e.getRootNode=="function"?e.getRootNode():e.nodeType===9?e:e.ownerDocument}var lo=N.d;N.d={f:ev,r:tv,D:ov,C:nv,L:av,m:iv,X:rv,S:sv,M:lv};function ev(){var e=lo.f(),t=us();return e||t}function tv(e){var t=wn(e);t!==null&&t.tag===5&&t.type==="form"?Ku(t):lo.r(e)}var Jn=typeof document>"u"?null:document;function Lh(e,t,o){var n=Jn;if(n&&typeof t=="string"&&t){var i=Ct(t);i='link[rel="'+e+'"][href="'+i+'"]',typeof o=="string"&&(i+='[crossorigin="'+o+'"]'),Rh.has(i)||(Rh.add(i),e={rel:e,crossOrigin:o,href:t},n.querySelector(i)===null&&(t=n.createElement("link"),Je(t,"link",e),We(t),n.head.appendChild(t)))}}function ov(e){lo.D(e),Lh("dns-prefetch",e,null)}function nv(e,t){lo.C(e,t),Lh("preconnect",e,t)}function av(e,t,o){lo.L(e,t,o);var n=Jn;if(n&&e&&t){var i='link[rel="preload"][as="'+Ct(t)+'"]';t==="image"&&o&&o.imageSrcSet?(i+='[imagesrcset="'+Ct(o.imageSrcSet)+'"]',typeof o.imageSizes=="string"&&(i+='[imagesizes="'+Ct(o.imageSizes)+'"]')):i+='[href="'+Ct(e)+'"]';var s=i;switch(t){case"style":s=$n(e);break;case"script":s=ea(e)}Rt.has(s)||(e=R({rel:"preload",href:t==="image"&&o&&o.imageSrcSet?void 0:e,as:t},o),Rt.set(s,e),n.querySelector(i)!==null||t==="style"&&n.querySelector(Va(s))||t==="script"&&n.querySelector(Ka(s))||(t=n.createElement("link"),Je(t,"link",e),We(t),n.head.appendChild(t)))}}function iv(e,t){lo.m(e,t);var o=Jn;if(o&&e){var n=t&&typeof t.as=="string"?t.as:"script",i='link[rel="modulepreload"][as="'+Ct(n)+'"][href="'+Ct(e)+'"]',s=i;switch(n){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":s=ea(e)}if(!Rt.has(s)&&(e=R({rel:"modulepreload",href:e},t),Rt.set(s,e),o.querySelector(i)===null)){switch(n){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(o.querySelector(Ka(s)))return}n=o.createElement("link"),Je(n,"link",e),We(n),o.head.appendChild(n)}}}function sv(e,t,o){lo.S(e,t,o);var n=Jn;if(n&&e){var i=kn(n).hoistableStyles,s=$n(e);t=t||"default";var l=i.get(s);if(!l){var u={loading:0,preload:null};if(l=n.querySelector(Va(s)))u.loading=5;else{e=R({rel:"stylesheet",href:e,"data-precedence":t},o),(o=Rt.get(s))&&uc(e,o);var p=l=n.createElement("link");We(p),Je(p,"link",e),p._p=new Promise(function(b,O){p.onload=b,p.onerror=O}),p.addEventListener("load",function(){u.loading|=1}),p.addEventListener("error",function(){u.loading|=2}),u.loading|=4,ks(l,t,n)}l={type:"stylesheet",instance:l,count:1,state:u},i.set(s,l)}}}function rv(e,t){lo.X(e,t);var o=Jn;if(o&&e){var n=kn(o).hoistableScripts,i=ea(e),s=n.get(i);s||(s=o.querySelector(Ka(i)),s||(e=R({src:e,async:!0},t),(t=Rt.get(i))&&pc(e,t),s=o.createElement("script"),We(s),Je(s,"link",e),o.head.appendChild(s)),s={type:"script",instance:s,count:1,state:null},n.set(i,s))}}function lv(e,t){lo.M(e,t);var o=Jn;if(o&&e){var n=kn(o).hoistableScripts,i=ea(e),s=n.get(i);s||(s=o.querySelector(Ka(i)),s||(e=R({src:e,async:!0,type:"module"},t),(t=Rt.get(i))&&pc(e,t),s=o.createElement("script"),We(s),Je(s,"link",e),o.head.appendChild(s)),s={type:"script",instance:s,count:1,state:null},n.set(i,s))}}function Nh(e,t,o,n){var i=(i=j.current)?ws(i):null;if(!i)throw Error(c(446));switch(e){case"meta":case"title":return null;case"style":return typeof o.precedence=="string"&&typeof o.href=="string"?(t=$n(o.href),o=kn(i).hoistableStyles,n=o.get(t),n||(n={type:"style",instance:null,count:0,state:null},o.set(t,n)),n):{type:"void",instance:null,count:0,state:null};case"link":if(o.rel==="stylesheet"&&typeof o.href=="string"&&typeof o.precedence=="string"){e=$n(o.href);var s=kn(i).hoistableStyles,l=s.get(e);if(l||(i=i.ownerDocument||i,l={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},s.set(e,l),(s=i.querySelector(Va(e)))&&!s._p&&(l.instance=s,l.state.loading=5),Rt.has(e)||(o={rel:"preload",as:"style",href:o.href,crossOrigin:o.crossOrigin,integrity:o.integrity,media:o.media,hrefLang:o.hrefLang,referrerPolicy:o.referrerPolicy},Rt.set(e,o),s||cv(i,e,o,l.state))),t&&n===null)throw Error(c(528,""));return l}if(t&&n!==null)throw Error(c(529,""));return null;case"script":return t=o.async,o=o.src,typeof o=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=ea(o),o=kn(i).hoistableScripts,n=o.get(t),n||(n={type:"script",instance:null,count:0,state:null},o.set(t,n)),n):{type:"void",instance:null,count:0,state:null};default:throw Error(c(444,e))}}function $n(e){return'href="'+Ct(e)+'"'}function Va(e){return'link[rel="stylesheet"]['+e+"]"}function Ih(e){return R({},e,{"data-precedence":e.precedence,precedence:null})}function cv(e,t,o,n){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?n.loading=1:(t=e.createElement("link"),n.preload=t,t.addEventListener("load",function(){return n.loading|=1}),t.addEventListener("error",function(){return n.loading|=2}),Je(t,"link",o),We(t),e.head.appendChild(t))}function ea(e){return'[src="'+Ct(e)+'"]'}function Ka(e){return"script[async]"+e}function Dh(e,t,o){if(t.count++,t.instance===null)switch(t.type){case"style":var n=e.querySelector('style[data-href~="'+Ct(o.href)+'"]');if(n)return t.instance=n,We(n),n;var i=R({},o,{"data-href":o.href,"data-precedence":o.precedence,href:null,precedence:null});return n=(e.ownerDocument||e).createElement("style"),We(n),Je(n,"style",i),ks(n,o.precedence,e),t.instance=n;case"stylesheet":i=$n(o.href);var s=e.querySelector(Va(i));if(s)return t.state.loading|=4,t.instance=s,We(s),s;n=Ih(o),(i=Rt.get(i))&&uc(n,i),s=(e.ownerDocument||e).createElement("link"),We(s);var l=s;return l._p=new Promise(function(u,p){l.onload=u,l.onerror=p}),Je(s,"link",n),t.state.loading|=4,ks(s,o.precedence,e),t.instance=s;case"script":return s=ea(o.src),(i=e.querySelector(Ka(s)))?(t.instance=i,We(i),i):(n=o,(i=Rt.get(s))&&(n=R({},o),pc(n,i)),e=e.ownerDocument||e,i=e.createElement("script"),We(i),Je(i,"link",n),e.head.appendChild(i),t.instance=i);case"void":return null;default:throw Error(c(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(n=t.instance,t.state.loading|=4,ks(n,o.precedence,e));return t.instance}function ks(e,t,o){for(var n=o.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),i=n.length?n[n.length-1]:null,s=i,l=0;l<n.length;l++){var u=n[l];if(u.dataset.precedence===t)s=u;else if(s!==i)break}s?s.parentNode.insertBefore(e,s.nextSibling):(t=o.nodeType===9?o.head:o,t.insertBefore(e,t.firstChild))}function uc(e,t){e.crossOrigin==null&&(e.crossOrigin=t.crossOrigin),e.referrerPolicy==null&&(e.referrerPolicy=t.referrerPolicy),e.title==null&&(e.title=t.title)}function pc(e,t){e.crossOrigin==null&&(e.crossOrigin=t.crossOrigin),e.referrerPolicy==null&&(e.referrerPolicy=t.referrerPolicy),e.integrity==null&&(e.integrity=t.integrity)}var Ss=null;function Ph(e,t,o){if(Ss===null){var n=new Map,i=Ss=new Map;i.set(o,n)}else i=Ss,n=i.get(o),n||(n=new Map,i.set(o,n));if(n.has(e))return n;for(n.set(e,null),o=o.getElementsByTagName(e),i=0;i<o.length;i++){var s=o[i];if(!(s[da]||s[Ke]||e==="link"&&s.getAttribute("rel")==="stylesheet")&&s.namespaceURI!=="http://www.w3.org/2000/svg"){var l=s.getAttribute(t)||"";l=e+l;var u=n.get(l);u?u.push(s):n.set(l,[s])}}return n}function Uh(e,t,o){e=e.ownerDocument||e,e.head.insertBefore(o,t==="title"?e.querySelector("head > title"):null)}function dv(e,t,o){if(o===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;return t.rel==="stylesheet"?(e=t.disabled,typeof t.precedence=="string"&&e==null):!0;case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function Hh(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function uv(e,t,o,n){if(o.type==="stylesheet"&&(typeof n.media!="string"||matchMedia(n.media).matches!==!1)&&(o.state.loading&4)===0){if(o.instance===null){var i=$n(n.href),s=t.querySelector(Va(i));if(s){t=s._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=Cs.bind(e),t.then(e,e)),o.state.loading|=4,o.instance=s,We(s);return}s=t.ownerDocument||t,n=Ih(n),(i=Rt.get(i))&&uc(n,i),s=s.createElement("link"),We(s);var l=s;l._p=new Promise(function(u,p){l.onload=u,l.onerror=p}),Je(s,"link",n),o.instance=s}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(o,t),(t=o.state.preload)&&(o.state.loading&3)===0&&(e.count++,o=Cs.bind(e),t.addEventListener("load",o),t.addEventListener("error",o))}}var hc=0;function pv(e,t){return e.stylesheets&&e.count===0&&Ts(e,e.stylesheets),0<e.count||0<e.imgCount?function(o){var n=setTimeout(function(){if(e.stylesheets&&Ts(e,e.stylesheets),e.unsuspend){var s=e.unsuspend;e.unsuspend=null,s()}},6e4+t);0<e.imgBytes&&hc===0&&(hc=62500*jy());var i=setTimeout(function(){if(e.waitingForImages=!1,e.count===0&&(e.stylesheets&&Ts(e,e.stylesheets),e.unsuspend)){var s=e.unsuspend;e.unsuspend=null,s()}},(e.imgBytes>hc?50:800)+t);return e.unsuspend=o,function(){e.unsuspend=null,clearTimeout(n),clearTimeout(i)}}:null}function Cs(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Ts(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var As=null;function Ts(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,As=new Map,t.forEach(hv,e),As=null,Cs.call(e))}function hv(e,t){if(!(t.state.loading&4)){var o=As.get(e);if(o)var n=o.get(null);else{o=new Map,As.set(e,o);for(var i=e.querySelectorAll("link[data-precedence],style[data-precedence]"),s=0;s<i.length;s++){var l=i[s];(l.nodeName==="LINK"||l.getAttribute("media")!=="not all")&&(o.set(l.dataset.precedence,l),n=l)}n&&o.set(null,n)}i=t.instance,l=i.getAttribute("data-precedence"),s=o.get(l)||n,s===n&&o.set(null,i),o.set(l,i),this.count++,n=Cs.bind(this),i.addEventListener("load",n),i.addEventListener("error",n),s?s.parentNode.insertBefore(i,s.nextSibling):(e=e.nodeType===9?e.head:e,e.insertBefore(i,e.firstChild)),t.state.loading|=4}}var Qa={$$typeof:xe,Provider:null,Consumer:null,_currentValue:V,_currentValue2:V,_threadCount:0};function mv(e,t,o,n,i,s,l,u,p){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=lr(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=lr(0),this.hiddenUpdates=lr(null),this.identifierPrefix=n,this.onUncaughtError=i,this.onCaughtError=s,this.onRecoverableError=l,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=p,this.incompleteTransitions=new Map}function zh(e,t,o,n,i,s,l,u,p,b,O,M){return e=new mv(e,t,o,l,p,b,O,M,u),t=1,s===!0&&(t|=24),s=gt(3,null,null,t),e.current=s,s.stateNode=e,t=jr(),t.refCount++,e.pooledCache=t,t.refCount++,s.memoizedState={element:n,isDehydrated:o,cache:t},Xr(s),e}function _h(e){return e?(e=Rn,e):Rn}function Gh(e,t,o,n,i,s){i=_h(i),n.context===null?n.context=i:n.pendingContext=i,n=To(t),n.payload={element:o},s=s===void 0?null:s,s!==null&&(n.callback=s),o=Oo(e,n,t),o!==null&&(lt(o,e,t),xa(o,e,t))}function qh(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var o=e.retryLane;e.retryLane=o!==0&&o<t?o:t}}function mc(e,t){qh(e,t),(e=e.alternate)&&qh(e,t)}function Yh(e){if(e.tag===13||e.tag===31){var t=Xo(e,67108864);t!==null&<(t,e,67108864),mc(e,67108864)}}function Wh(e){if(e.tag===13||e.tag===31){var t=wt();t=cr(t);var o=Xo(e,t);o!==null&<(o,e,t),mc(e,t)}}var Os=!0;function gv(e,t,o,n){var i=A.T;A.T=null;var s=N.p;try{N.p=2,gc(e,t,o,n)}finally{N.p=s,A.T=i}}function fv(e,t,o,n){var i=A.T;A.T=null;var s=N.p;try{N.p=8,gc(e,t,o,n)}finally{N.p=s,A.T=i}}function gc(e,t,o,n){if(Os){var i=fc(n);if(i===null)tc(e,t,n,xs,o),jh(e,n);else if(vv(i,e,t,o,n))n.stopPropagation();else if(jh(e,n),t&4&&-1<yv.indexOf(e)){for(;i!==null;){var s=wn(i);if(s!==null)switch(s.tag){case 3:if(s=s.stateNode,s.current.memoizedState.isDehydrated){var l=Fo(s.pendingLanes);if(l!==0){var u=s;for(u.pendingLanes|=2,u.entangledLanes|=2;l;){var p=1<<31-ht(l);u.entanglements[1]|=p,l&=~p}Gt(s),(me&6)===0&&(cs=ut()+500,Ya(0))}}break;case 31:case 13:u=Xo(s,2),u!==null&<(u,s,2),us(),mc(s,2)}if(s=fc(n),s===null&&tc(e,t,n,xs,o),s===i)break;i=s}i!==null&&n.stopPropagation()}else tc(e,t,n,null,o)}}function fc(e){return e=vr(e),yc(e)}var xs=null;function yc(e){if(xs=null,e=bn(e),e!==null){var t=w(e);if(t===null)e=null;else{var o=t.tag;if(o===13){if(e=C(t),e!==null)return e;e=null}else if(o===31){if(e=L(t),e!==null)return e;e=null}else if(o===3){if(t.stateNode.current.memoizedState.isDehydrated)return t.tag===3?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null)}}return xs=e,null}function Fh(e){switch(e){case"beforetoggle":case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"toggle":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 2;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 8;case"message":switch(tf()){case $c:return 2;case ed:return 8;case fi:case of:return 32;case td:return 268435456;default:return 32}default:return 32}}var vc=!1,Uo=null,Ho=null,zo=null,Xa=new Map,Za=new Map,_o=[],yv="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(" ");function jh(e,t){switch(e){case"focusin":case"focusout":Uo=null;break;case"dragenter":case"dragleave":Ho=null;break;case"mouseover":case"mouseout":zo=null;break;case"pointerover":case"pointerout":Xa.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Za.delete(t.pointerId)}}function Ja(e,t,o,n,i,s){return e===null||e.nativeEvent!==s?(e={blockedOn:t,domEventName:o,eventSystemFlags:n,nativeEvent:s,targetContainers:[i]},t!==null&&(t=wn(t),t!==null&&Yh(t)),e):(e.eventSystemFlags|=n,t=e.targetContainers,i!==null&&t.indexOf(i)===-1&&t.push(i),e)}function vv(e,t,o,n,i){switch(t){case"focusin":return Uo=Ja(Uo,e,t,o,n,i),!0;case"dragenter":return Ho=Ja(Ho,e,t,o,n,i),!0;case"mouseover":return zo=Ja(zo,e,t,o,n,i),!0;case"pointerover":var s=i.pointerId;return Xa.set(s,Ja(Xa.get(s)||null,e,t,o,n,i)),!0;case"gotpointercapture":return s=i.pointerId,Za.set(s,Ja(Za.get(s)||null,e,t,o,n,i)),!0}return!1}function Vh(e){var t=bn(e.target);if(t!==null){var o=w(t);if(o!==null){if(t=o.tag,t===13){if(t=C(o),t!==null){e.blockedOn=t,rd(e.priority,function(){Wh(o)});return}}else if(t===31){if(t=L(o),t!==null){e.blockedOn=t,rd(e.priority,function(){Wh(o)});return}}else if(t===3&&o.stateNode.current.memoizedState.isDehydrated){e.blockedOn=o.tag===3?o.stateNode.containerInfo:null;return}}}e.blockedOn=null}function Ms(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var o=fc(e.nativeEvent);if(o===null){o=e.nativeEvent;var n=new o.constructor(o.type,o);yr=n,o.target.dispatchEvent(n),yr=null}else return t=wn(o),t!==null&&Yh(t),e.blockedOn=o,!1;t.shift()}return!0}function Kh(e,t,o){Ms(e)&&o.delete(t)}function bv(){vc=!1,Uo!==null&&Ms(Uo)&&(Uo=null),Ho!==null&&Ms(Ho)&&(Ho=null),zo!==null&&Ms(zo)&&(zo=null),Xa.forEach(Kh),Za.forEach(Kh)}function Es(e,t){e.blockedOn===t&&(e.blockedOn=null,vc||(vc=!0,a.unstable_scheduleCallback(a.unstable_NormalPriority,bv)))}var Bs=null;function Qh(e){Bs!==e&&(Bs=e,a.unstable_scheduleCallback(a.unstable_NormalPriority,function(){Bs===e&&(Bs=null);for(var t=0;t<e.length;t+=3){var o=e[t],n=e[t+1],i=e[t+2];if(typeof n!="function"){if(yc(n||o)===null)continue;break}var s=wn(o);s!==null&&(e.splice(t,3),t-=3,fl(s,{pending:!0,data:i,method:o.method,action:n},n,i))}}))}function ta(e){function t(p){return Es(p,e)}Uo!==null&&Es(Uo,e),Ho!==null&&Es(Ho,e),zo!==null&&Es(zo,e),Xa.forEach(t),Za.forEach(t);for(var o=0;o<_o.length;o++){var n=_o[o];n.blockedOn===e&&(n.blockedOn=null)}for(;0<_o.length&&(o=_o[0],o.blockedOn===null);)Vh(o),o.blockedOn===null&&_o.shift();if(o=(e.ownerDocument||e).$$reactFormReplay,o!=null)for(n=0;n<o.length;n+=3){var i=o[n],s=o[n+1],l=i[ot]||null;if(typeof s=="function")l||Qh(o);else if(l){var u=null;if(s&&s.hasAttribute("formAction")){if(i=s,l=s[ot]||null)u=l.formAction;else if(yc(i)!==null)continue}else u=l.action;typeof u=="function"?o[n+1]=u:(o.splice(n,3),n-=3),Qh(o)}}}function Xh(){function e(s){s.canIntercept&&s.info==="react-transition"&&s.intercept({handler:function(){return new Promise(function(l){return i=l})},focusReset:"manual",scroll:"manual"})}function t(){i!==null&&(i(),i=null),n||setTimeout(o,20)}function o(){if(!n&&!navigation.transition){var s=navigation.currentEntry;s&&s.url!=null&&navigation.navigate(s.url,{state:s.getState(),info:"react-transition",history:"replace"})}}if(typeof navigation=="object"){var n=!1,i=null;return navigation.addEventListener("navigate",e),navigation.addEventListener("navigatesuccess",t),navigation.addEventListener("navigateerror",t),setTimeout(o,100),function(){n=!0,navigation.removeEventListener("navigate",e),navigation.removeEventListener("navigatesuccess",t),navigation.removeEventListener("navigateerror",t),i!==null&&(i(),i=null)}}}function bc(e){this._internalRoot=e}Rs.prototype.render=bc.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(c(409));var o=t.current,n=wt();Gh(o,n,e,t,null,null)},Rs.prototype.unmount=bc.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;Gh(e.current,2,null,e,null,null),us(),t[vn]=null}};function Rs(e){this._internalRoot=e}Rs.prototype.unstable_scheduleHydration=function(e){if(e){var t=sd();e={blockedOn:null,target:e,priority:t};for(var o=0;o<_o.length&&t!==0&&t<_o[o].priority;o++);_o.splice(o,0,e),o===0&&Vh(e)}};var Zh=r.version;if(Zh!=="19.2.8")throw Error(c(527,Zh,"19.2.8"));N.findDOMNode=function(e){var t=e._reactInternals;if(t===void 0)throw typeof e.render=="function"?Error(c(188)):(e=Object.keys(e).join(","),Error(c(268,e)));return e=y(t),e=e!==null?P(e):null,e=e===null?null:e.stateNode,e};var wv={bundleType:0,version:"19.2.8",rendererPackageName:"react-dom",currentDispatcherRef:A,reconcilerVersion:"19.2.8"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var Ls=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Ls.isDisabled&&Ls.supportsFiber)try{ra=Ls.inject(wv),pt=Ls}catch{}}return ei.createRoot=function(e,t){if(!h(e))throw Error(c(299));var o=!1,n="",i=ap,s=ip,l=sp;return t!=null&&(t.unstable_strictMode===!0&&(o=!0),t.identifierPrefix!==void 0&&(n=t.identifierPrefix),t.onUncaughtError!==void 0&&(i=t.onUncaughtError),t.onCaughtError!==void 0&&(s=t.onCaughtError),t.onRecoverableError!==void 0&&(l=t.onRecoverableError)),t=zh(e,1,!1,null,null,o,n,null,i,s,l,Xh),e[vn]=t.current,ec(e),new bc(t)},ei.hydrateRoot=function(e,t,o){if(!h(e))throw Error(c(299));var n=!1,i="",s=ap,l=ip,u=sp,p=null;return o!=null&&(o.unstable_strictMode===!0&&(n=!0),o.identifierPrefix!==void 0&&(i=o.identifierPrefix),o.onUncaughtError!==void 0&&(s=o.onUncaughtError),o.onCaughtError!==void 0&&(l=o.onCaughtError),o.onRecoverableError!==void 0&&(u=o.onRecoverableError),o.formState!==void 0&&(p=o.formState)),t=zh(e,1,!0,t,o??null,n,i,p,s,l,u,Xh),t.context=_h(null),o=t.current,n=wt(),n=cr(n),i=To(n),i.callback=null,Oo(o,i,n),o=n,t.current.lanes=o,ca(t,o),Gt(t),e[vn]=t.current,ec(e),new Rs(t)},ei.version="19.2.8",ei}var lm;function Nv(){if(lm)return Sc.exports;lm=1;function a(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(a)}catch(r){console.error(r)}}return a(),Sc.exports=Lv(),Sc.exports}var cS=Nv();const Iv={name:"Limix Bot"},Dv="Limix Bot";let mn={brand:Iv,source:"default",file:""};function dS(){return mn.brand}function jm(){return mn.source==="file"?mn.brand.name:Dv}function uS(){return mn}const Vm=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i;function Pv(a){const r=Vm.exec(a);if(!r)return 0;const d=c=>{const h=parseInt(c,16)/255;return h<=.03928?h/12.92:((h+.055)/1.055)**2.4};return .2126*d(r[1])+.7152*d(r[2])+.0722*d(r[3])}function Uv(a){const r=Pv(a);return 1.05/(r+.05)>=(r+.05)/.05?"#ffffff":"#111111"}function Hv(a){return!a.accent||!Vm.test(a.accent)?{}:{"--color-accent":a.accent,"--color-accent-border":a.accent,"--color-focus":a.accent,"--color-accent-text":a.accent,"--color-accent-ink":Uv(a.accent)}}function zv(a){const r=/^data:(image\/[a-z0-9.+-]+)/i.exec(a);return r?r[1].toLowerCase():""}let cm=null;function _v(a){const r=document.querySelector('link[rel="icon"]');if(!r)return;cm??={href:r.getAttribute("href")??"",type:r.getAttribute("type")??""};const d=a?{href:a,type:zv(a)}:cm;r.setAttribute("href",d.href),d.type?r.setAttribute("type",d.type):r.removeAttribute("type");let c=document.querySelector('link[rel="apple-touch-icon"][data-brand]');a?(c||(c=document.createElement("link"),c.rel="apple-touch-icon",c.dataset.brand="1",document.head.appendChild(c)),c.href=a):c?.remove()}function Gv(a){if(mn=a,typeof document>"u")return;document.title=jm(),_v(a.brand.favicon);const r=document.documentElement;for(const d of["--color-accent","--color-accent-border","--color-focus","--color-accent-text","--color-accent-ink"])r.style.removeProperty(d);for(const[d,c]of Object.entries(Hv(a.brand)))r.style.setProperty(d,c)}function qv(a){if(!a||typeof a!="object")return!1;const r=Reflect.get(a,"brand");return!!r&&typeof r=="object"&&typeof Reflect.get(Object(r),"name")=="string"}async function pS(a=fetch,r=1500){const d=new AbortController,c=setTimeout(()=>d.abort(),r);try{const h=await a("/api/brand",{signal:d.signal});if(!h.ok)return mn;const w=await h.json();qv(w)&&Gv(w)}catch{}finally{clearTimeout(c)}return mn}const Yo={"connectedWorkspaces.localTitle":"Environments on this computer","connectedWorkspaces.missing":"missing","connectedWorkspaces.current":"Current","connectedWorkspaces.switch":"Switch","connectedWorkspaces.forgetPurge":"Also delete this folder and everything in it ({path}). Otherwise the folder, its bots and conversations stay on this computer.","connectedWorkspaces.forget":"Forget","connectedWorkspaces.cancel":"Cancel","connectedWorkspaces.newEnvironment":"New environment","connectedWorkspaces.name":"Name","connectedWorkspaces.environmentPlaceholder":"My environment","connectedWorkspaces.dataFolder":"Data folder (optional)","connectedWorkspaces.defaultFolder":"Leave empty to create one in your home folder","connectedWorkspaces.choose":"Choose…","connectedWorkspaces.create":"Create","connectedWorkspaces.localSubtitle":"Separate setups on this computer, each with its own bots, conversations and data folder.","connectedWorkspaces.switchTo":"Switch to {name}","connectedWorkspaces.switchConfirm":"Switch to {name}? The app restarts on that environment. Running turns stop.","connectedWorkspaces.switchError":"Couldn't switch environments. Try again.","connectedWorkspaces.forgetName":"Forget {name}","connectedWorkspaces.forgetError":"Couldn't forget the environment. Try again.","connectedWorkspaces.createError":"Couldn't create the environment. Check the data folder, then try again.","whop.description":"Products, checkout links, memberships and payments through Whop’s official integration.","hostedMcp.otherAppsSetup":"Connected: {services}. Set up or restore the connection service to use the other apps.","hostedMcp.connect":"Connect {service}","hostedMcp.disconnect":"Disconnect {service}","whop.notice":"Sign in with Whop. No API key needed. Whop requests admin access across businesses you manage, and requires confirmation for consequential financial or destructive actions.","hostedMcp.connected":"{service} is connected and enabled. Bot access follows each bot’s MCP server selection.","hostedMcp.access":"Bot access","hostedMcp.accessHint":"Bots using every enabled MCP server inherit this connection. Open a bot’s Access settings to choose its servers. Changes apply to its next task.","hostedMcp.botSettings":"Manage {name}’s access","hostedMcp.setupFailed":"{service} could not be added. Refresh and try again.","hostedMcp.testFailed":"Signed in, but {service}’s tools could not be loaded: {reason} Please connect again to retry.","hostedMcp.loadingTools":"Signed in. Loading {service}’s tools…","agentcard.description":"Shop and pay from your own Agentcard account.","agentcard.notice":"Sign in with your Agentcard account. No API key needed. Agentcard keeps your cards and handles purchase approvals; Limix Bot stores no card details. A bot that can use Agentcard can call all of its tools, including buying and showing card details, so choose which bots get it under Bot access.","hostedMcp.keyLabel":"{service} API key","hostedMcp.keyPlaceholder":"Paste your {service} key","hostedMcp.getKey":"Get a {service} key","hostedMcp.keyRefused":"{service} didn’t accept that key. Check it and connect again.","hostedMcp.keyTestFailed":"{service}’s tools could not be loaded with that key: {reason} Connect again to retry.","agentmail.description":"Email inboxes your bots send and receive from, on your own AgentMail account.","agentmail.notice":"Sign in with your AgentMail account. No API key needed. A bot that can use AgentMail can make inboxes, read their mail and send from them, billed to your account, so choose which bots get it under Bot access. Sending follows Sending on your behalf. To have a bot answer new mail, add a webhook for that bot in Automations and paste its address into AgentMail.","vapi.description":"Phone calls your bots place and answer, on your own Vapi account.","vapi.notice":"Paste a private API key from your Vapi dashboard. {app} never shows it again, and Disconnect deletes it. A bot that can use Vapi can place calls billed to your account, and each call follows Sending on your behalf, so choose which bots get it under Bot access. Have your Vapi assistant open every call by saying it is an automated assistant calling for you and that the call is recorded.","telnyx.description":"Phone numbers in many countries, texts and calls, on your own Telnyx account.","telnyx.notice":"Paste an API key from your Telnyx portal. {app} never shows it again, and Disconnect deletes it. Telnyx reaches its whole API through one tool, so every Telnyx action a bot takes follows Sending on your behalf, including buying numbers billed to your account. Choose which bots get it under Bot access. To have a bot answer texts, add a webhook for that bot in Automations and set it on your Telnyx messaging profile.","agentphone.description":"US and Canadian numbers for your bots, with texts and calls, on your own AgentPhone account.","agentphone.notice":"Sign in with your AgentPhone account. No API key needed. A bot that can use AgentPhone can buy numbers, text and place calls, billed to your account; each of those follows Sending on your behalf, so choose which bots get it under Bot access. To have a bot answer texts and calls, add a webhook for that bot in Automations and set it in AgentPhone.","email.title":"Email","email.description":"Read and send mail on any mail host, with your address and password.","email.menu":"Email options","email.address":"Email address","email.password":"Mailbox password","email.help":"Limix Bot finds your mail server and checks it can read your mail. Your bots never see the password.","email.typeServer":"Enter the mail server yourself","email.incomingServer":"Incoming mail server (IMAP)","email.outgoingServer":"Outgoing mail server (SMTP)","email.port":"Port","email.username":"User name, if it isn't your address","email.connected":"Connected. It read your inbox: {count} messages.","email.connectedNoSending":"Connected for reading: {count} messages. Sending doesn't work yet.","email.addAnother":"Add another mailbox","email.disconnect":"Disconnect {address}","email.reading":"Reading","email.sending":"Sending","email.connectedDone":"Connected.","email.sendTestToMyself":"Send a test to myself","email.test":"Test","email.edit":"Edit","email.outgoing":"Outgoing server","email.security":"Security","email.securityAuto":"Security: automatic","email.securityTls":"SSL/TLS","email.securityStarttls":"STARTTLS","email.smtpUsername":"User name for sending, if different","email.smtpPassword":"Password for sending, if different","email.testSent":"A test is on its way to {address}.","email.addAnotherAddress":"Add another address","email.signInGoogle":"Sign in with Google","email.signInMicrosoft":"Sign in with Microsoft","email.makeAppPassword":"Make an app password","email.needsGoogle":"Gmail needs an app password here (with 2-step verification on), or sign in with Google.","email.needsMicrosoft":"Outlook doesn't take a mail password here: sign in with Microsoft.","email.needsAppPassword":"{provider} needs an app password here, not your normal password.","postiz.description":"Draft, schedule and publish social posts with Postiz.","postiz.connect":"Connect Postiz","postiz.reconnect":"Reconnect Postiz","postiz.menu":"Postiz options","postiz.useKey":"Use an API key instead","postiz.useSignIn":"Sign in with Postiz instead","postiz.keyField":"Postiz API key","postiz.addressField":"Postiz server address (optional)","postiz.keyHelp":"Find your key in Postiz under Settings → Public API.","postiz.keyAndAddressHelp":"Find your key in Postiz under Settings → Public API. Leave the address empty for Postiz Cloud, or enter the address of your own Postiz server.","postiz.keyLink":"Open Postiz settings","postiz.finishInBrowser":"Finish signing in to Postiz in your browser.","postiz.loadingTools":"Signed in. Loading Postiz’s tools…","postiz.signInExpired":"The sign-in took too long. Connect again.","postiz.connectedTo":"Connected to {host}","postiz.connectedKey":"Connected to {host} with an API key","postiz.connectedOwn":"Your own Postiz is connected.","postiz.keyRefused":"Postiz no longer accepts the saved key. Enter a new one.","postiz.taken":"An MCP server named postiz is already set up. Remove it in MCP servers to connect here.","postiz.personScope":"Each person on your team connects their own Postiz.","postiz.disconnectConfirm":"Disconnect Postiz? Bots stop using it until you connect it again.","postiz.error.keyRejected":"Postiz didn’t accept this API key. Copy it again from Postiz → Settings → Public API.","postiz.error.unreachable":"Couldn’t reach a Postiz server at {host}. Check the address and try again.","postiz.error.notPostiz":"{host} didn’t answer like Postiz. Check the address. Postiz Cloud’s is https://api.postiz.com.","postiz.error.address":"Check the address: it starts with https:// and has no key or password in it.","postiz.error.testFailed":"Signed in, but Postiz’s tools could not be loaded: {reason} Please connect again.","table.title":"Table","table.search":"Search all rows…","table.wrap":"Wrap cell text","table.copy":"Copy results as CSV","table.copyPlain":"Copy table","table.download":"Download results as CSV","table.expand":"Expand table","table.close":"Close table","table.sort":"Sort by {column}","table.column":"Column {number}","table.count":"{shown} of {total} rows · {columns} columns","table.copied":"Copied","table.copyFailed":"Could not copy. Try downloading instead.","table.noResults":"No matching rows. Try a different search.","table.empty":"This table has no data rows.","code.wrap":"Wrap","code.unwrap":"Unwrap","code.wrapLong":"Wrap long lines","code.unwrapLong":"Disable line wrapping","code.save":"Save","code.saveTitle":"Download snippet as file","code.copy":"Copy","code.copyTitle":"Copy code","code.copyAria":"Copy code to clipboard","code.copied":"Copied","code.copiedTitle":"Copied to clipboard","code.copiedAria":"Code copied to clipboard","code.lineOne":"1 line","code.lines":"{count} lines","code.wrapLines":"Wrap lines","code.saveAsFile":"Save as file","code.caption":"{language} · {lines}","code.copySource":"Copy diagram source","code.showSource":"Show source","code.hideSource":"Hide source","code.mermaid":"Mermaid diagram","table.preview":"Preview table: {name}","html.preview":"Preview page: {name}","html.loading":"Opening page…","html.tooLarge":"This page is too large for an in-app preview (2 MB). Download the original to view it.","html.loadFailed":"Could not open this page. Check your connection and try again. UTF-8 HTML files are supported.","html.source":"View source","html.rendered":"View page","html.reload":"Reload","html.frameTitle":"Preview of {name}","html.openInBrowser":"Open {name} in your browser","html.openFailed":"Could not open this page in your browser.","markdown.preview":"Preview: {name}","markdown.loading":"Opening file…","markdown.tooLarge":"This file is too large for an in-app preview (2 MB). Download the original to view it.","markdown.loadFailed":"Could not open this file. Check your connection and try again. UTF-8 text files are supported.","markdown.rendered":"View formatted","table.loading":"Opening table…","table.tooLarge":"This file is too large for an in-app preview (10 MB, 100,000 rows, 200 columns or 500,000 cells). Download the original to view it all.","table.invalid":"This CSV/TSV could not be read as a table. Check its quotes and column counts, or download the original.","table.loadFailed":"Could not open this table. Check your connection and try again. UTF-8 CSV and TSV files are supported.","pro.name":"Limix Bot Cloud","pro.fromPrice":"Limix Bot Cloud plans from {price}/month + tax.","pro.seePlans":"Compare plans","pro.reauthShort":"Sign in again to use the Cloud on this computer. Your plan is not affected.","pro.openCloudSettings":"Limix Bot Cloud settings","pro.settingsSummary":"Keeps your bots and routines running 24/7, even when this computer is off.","pro.disclaimer":"Limix Bot on this computer stays free and open source.","notice.dismiss":"Dismiss for good","notice.notNow":"Not now","notice.openFailed":"Could not open your browser. Please try again.","server.moves.connectorStayedMail":"{name} stayed on {computer} when your bots moved to My Cloud, so bots here can't read or send mail through it. It keeps its accounts on {computer}, and it can't reach a mail server from here. To read and send mail from My Cloud, connect your mailbox under Connected apps.","server.moves.connectorStayedProgram":"{name} stayed on {computer} when your bots moved to My Cloud, so bots here can't use it. It needs {program}, which My Cloud doesn't have.","server.moves.connectorStayedHere":"{name} stayed on {computer} when your bots moved to My Cloud, so bots here can't use it. It uses files or an address only {computer} has.","server.moves.webhookMoved":'Now that I live on {place}, my webhook "{name}" has a new address. Open Automations, choose Copy address on "{name}", and paste it into the app that sends to it.',"server.teammates.sameRequest":"Another teammate asked the same a moment ago, so this gets that answer instead of a second one.","server.reports.sent":"Sent to the Limix Bot team (report {report}).","server.reports.sentReply":"Sent to the Limix Bot team (report {report}). We'll reply to {contact}.","server.reports.sentLater":"Sent to the Limix Bot team (report {report}) after an earlier try did not go through.","server.reports.sentLaterReply":"Sent to the Limix Bot team (report {report}) after an earlier try did not go through. We'll reply to {contact}.","server.reports.notYet":"Not sent yet: {why}. The report is saved and goes on its own {when}, so there is no need to send it again.","server.reports.why.limited":"the Limix Bot team takes only a few reports an hour from each app","server.reports.why.offline":"the Limix Bot team's server could not be reached","server.reports.why.busy":"the Limix Bot team's server could not take it right now","server.reports.when.minute":"in about {count} minute","server.reports.when.minutes":"in about {count} minutes","server.reports.when.soon":"as soon as it can","server.reports.refused":"The Limix Bot team's server refused this bug report, so nothing was sent: {detail}.","server.reports.full":"Not sent: {count} bug reports are already waiting to go to the Limix Bot team. Type @devs again once they have gone.","server.reports.dropped":"A bug report from this conversation could not reach the Limix Bot team for a week, so it was dropped. Type @devs again to send a new one.","server.reports.fixed":"Fixed in {version}. Want to try again?","server.questions.notAsked":"Not asked (Just do it): {question}","server.warmSummary.summarized":"summarized this conversation while it was idle; the latest messages carry on word for word","server.runs.didNotFinish":"This run didn't finish.","server.runs.didNotFinishWhy":"This run didn't finish: {detail}","server.runs.partlyDoneWhy":"This run was partly done: {detail}","server.runs.handoffApart":"{bot} couldn't hand this to {target}, because they're shared with different people. Nothing was sent.","server.runs.handoffRefusedTitle":"{bot}'s routine couldn't hand off its work","server.runs.recovered":"Recovered: {name} finished OK at {time}","server.runs.card.line":"Routine “{name}” {state}","server.runs.state.needsInput":"needs your input","server.runs.state.blocked":"was blocked","server.runs.state.limitReached":"reached its limit","server.runs.state.stopped":"was stopped","server.runs.state.failed":"failed","server.runs.state.waiting":"needs your attention","server.runs.state.completed":"completed","server.runs.state.cancelled":"was cancelled","server.runs.state.missed":"was missed","server.runs.state.deferred":"deferred: target busy","server.runs.state.queued":"queued","server.runs.state.running":"running","server.model.orgBlockedAnswered":"{picked} is turned off by your organization, so {answered} answered instead. Choose another model to stop seeing this.","server.model.otherAnswered":"You chose {picked}, but {answered} answered instead.","server.incidents.where.room":'in the room "{room}"',"server.problem.failed":"{bot} hit a problem: its run {where} failed","server.problem.failedWhy":'{bot} hit a problem: its run {where} failed: "{detail}"',"server.problem.stalled":"{bot} hit a problem: its run {where} stopped after showing no activity","server.problem.stalledWhy":'{bot} hit a problem: its run {where} stopped after showing no activity: "{detail}"',"server.problem.couldNotStart":"{bot} hit a problem: its run {where} could not start","server.problem.couldNotStartWhy":'{bot} hit a problem: its run {where} could not start: "{detail}"',"server.problem.routineFailed":"{bot} hit a problem: its scheduled routine {where} failed","server.problem.routineFailedWhy":'{bot} hit a problem: its scheduled routine {where} failed: "{detail}"',"server.incidents.where.thread":"in its thread #{title}","server.incidents.where.main":"in its main conversation","server.connect.signIn":"I need you to sign in to {site}.","server.connect.signInWhy":"I need you to sign in to {site}: {reason}","server.connect.app":"I need you to connect {app}.","server.connect.secret":"I need your {label}.","server.connect.card":"Connect {app} to continue.","server.connect.cardAs":"Connect {app} as “{account}” to continue.","server.connect.thisApp":"this app","server.connect.description":"Connect {app} so the bot can continue","server.connect.descriptionAs":"Connect {app} as “{account}” so the bot can continue","server.connect.signInCard":"{bot} needs you to sign in to {site}. Open this conversation in Limix Bot to sign in, then press Done.","server.connect.emailLabel":"Connect your mailbox","server.connect.emailNote":"Limix Bot finds your mail server and checks it can read your mail. {bot} never sees the password.","server.connect.emailPlaceholder":"Mailbox password","server.connect.secretHandoff":"Securely provide the {label} from Limix Bot on your phone or computer. It is never added to chat.","server.connect.secretFile":"{bot}'s commands can read it from a private file for 24 hours; it is never added to chat.","server.connect.secretRef":"{bot} gets a one-use reference for Limix Bot's own tools and never sees it.","server.connect.secretKept":"Limix Bot keeps it safely, so {bot} can use it again without asking you.","server.connect.secretNeverRead":"{bot} can use it but never read it back.","server.connect.emailOutgoingLabel":"Outgoing server for {address}","server.connect.emailOutgoingNote":"Enter where it sends mail from. {bot} never sees the password.","server.connect.emailOutgoingPlaceholder":"Password for sending","server.mcp.added":"Added MCP server {name}","server.mcp.changed":"Changed MCP server {name}","server.mcp.turnedOn":"Turned on MCP server {name}","server.mcp.turnedOff":"Turned off MCP server {name}","server.mcp.restarted":"Restarted MCP server {name}","server.mcp.tested":"Tested MCP server {name}","server.mcp.signedOut":"Signed out of MCP server {name}","server.mcp.removed":"Removed MCP server {name}","server.skillSwitch.enable.title":'Turn on skill "{name}"?',"server.skillSwitch.enable.body":"The bot can use this skill again.","server.skillSwitch.enable.done":'Skill "{name}" turned on',"server.skillSwitch.disable.title":'Turn off skill "{name}"?',"server.skillSwitch.disable.body":"The bot stops using this skill until it is turned on again. Nothing is deleted.","server.skillSwitch.disable.done":'Skill "{name}" turned off',"server.skillSwitch.delete.title":'Delete skill "{name}"?',"server.skillSwitch.delete.body":"Removes this skill and all its files from the bot for good. Its SKILL.md is shown below, with any secrets hidden.","server.skillSwitch.delete.done":'Skill "{name}" deleted',"server.mcp.listed":"Checked MCP servers","server.mcp.on":"Turned on","server.mcp.switchedOff":"Switched off","server.mcp.keysCleared":"Saved keys cleared","server.mcp.alsoOn":"Also on for {names}: switch it off for one in its settings, under Apps it can use","server.mcp.testTools.one":"Test: {count} tool","server.mcp.testTools.many":"Test: {count} tools","server.mcp.testSignIn":"Test: needs sign-in","server.mcp.testKey":"Test: needs a key","server.mcp.testFailed":"Test: failed","server.mcp.askedTurnOn":"Asked to turn on MCP server {name}","server.mcp.askedChange":"Asked to change MCP server {name}","server.mcp.askedRemove":"Asked to remove MCP server {name}","server.mcp.card.turnOn":"Turn on {name}?","server.mcp.card.change":"Change {name}?","server.mcp.card.remove":"Remove {name}?","server.mcp.card.internet":"Reached over the internet. Once on, your bots can use its tools.","server.mcp.card.local":"Runs on this computer.","server.mcp.card.elsewhere":"Runs on {computer}.","server.mcp.card.newKey":"new key for {key}","server.mcp.card.cleared":"Clears the saved {items}.","server.mcp.card.usedBy":"Used by {names}.","server.mcp.card.usedByNone":"No other bot uses it.","server.mcp.card.newClientSecret":"new OAuth client secret","server.mcp.card.keyExpired":"The key expired before this was answered.","server.mcp.card.gone":"{name} no longer exists.","server.mcp.card.changedSince":"{name} changed after this was asked, so nothing was applied.","server.mcp.card.restarted":"Limix Bot restarted, so this request expired.","server.mcp.card.failed":"This change couldn't be applied.","server.mcp.askedSignIn":"Asked to sign in to MCP server {name}","server.mcp.signIn.card":"{label}'s MCP server needs a sign-in. Open this conversation in Limix Bot to sign in.","server.mcp.signIn.description":"{bot} added {label}'s MCP server ({host}). Sign in so {bot} can use it.","server.mcp.signIn.onYourMac":"Open this chat on your Mac to sign in to {label}.","server.mcp.signIn.inSettings":"Finish this sign-in in Apps → MCP servers.","server.mcp.signIn.onlyPerson":"Only {name} can sign in to this.","server.mcp.signIn.onlyOwner":"Only the person this chat is for can sign in to this.","server.mcp.signIn.adminOnly":"Only an admin of this installation can sign in to {label}.","server.mcp.signIn.expired":"The sign-in window closed. Try again.","server.mcp.signIn.failed":"The sign-in didn't finish. Try again.","server.notify.message":"Message from {who}","server.notify.workingFor":"{who}, working for {other}","server.notify.approval":"{who} needs approval","server.notify.question":"{who} has a question","server.notify.signIn":"{who} needs you to sign in to {site}","server.notify.signInWebsite":"{who} needs you to sign in to a website","server.notify.secret":"{who} needs your {label}","server.notify.connect":"{who} needs you to connect {app}","server.notify.routineFailed":"{who}'s routine failed","server.notify.routineDeferred":"{who}'s routine is waiting","server.notify.turnFailed":"{who} couldn't start","server.notify.incident":"{who} hit a problem","server.notify.delegationSettled":"{who} resumed with results","server.notify.mention":"{who} mentioned you","server.notify.wait":"{who}'s wait is over","server.notify.done":"{who} finished","server.notify.inRoom":"{bot} in {room}","server.notify.assistantAnswered":"{title} · your assistant answered","server.notify.resultsFrom":"Results in from {who}","server.notify.openToSignIn":"Open Limix Bot to sign in to {site}.","server.rooms.finishingElsewhere":"{bot} is finishing another conversation — will reply here when free","server.rooms.finishingElsewhereSpoken":"{bot} is finishing another conversation","server.rooms.unavailable":"{bot} is no longer available — skipped this round","server.rooms.chiefRetargeted":"{chief} is the Chief of Staff now, so it leads this room in place of {former}.","server.stop.nothingRunning":"Nothing was running here, so nothing needed stopping.","server.memory.wait":"Waiting for memory on this Cloud. Running now: {running}. Ahead of this one: {ahead}. It starts by itself when there's room.","server.memory.still":"Still waiting for memory. Running now: {running}. Ahead of this one: {ahead}.","server.memory.starter":"Starter has room for about one task at a time. A bigger plan runs more at once.","server.planTurns.wait":"Waiting for a turn: Starter runs {limit} tasks at once on this Cloud. Ahead of this one: {ahead}. It starts by itself when one finishes, and a bigger plan runs more at once.","server.planTurns.still":"Still waiting: Starter runs {limit} tasks at once. Ahead of this one: {ahead}.","server.botPaused":"Paused: Starter keeps {limit} bots awake. Upgrade to wake it, or swap which bots are awake.","server.teammates.queued.thread":"{bot} hasn't started this yet: an earlier turn in that thread is still running.","server.teammates.queued.slots":"{bot} hasn't started this yet: it's already running {busy} of {limit} threads at once.","server.teammates.queued.room":"{bot} hasn't started this yet: it's finishing a turn in a room.","server.queued.capacity":"Queued. Starts when this bot has a free thread slot.","server.queued.capacityStarter":"Queued. Starter runs one thread at a time per bot, so this starts when the one running finishes. A bigger plan runs more.","server.queued.groupTurn":"Queued. This bot's room turn runs one at a time; it starts when that finishes.","server.rooms.stayedBusy.one":"{bot} stayed busy in another conversation for {count} minute — skipped this round","server.rooms.stayedBusy.many":"{bot} stayed busy in another conversation for {count} minutes — skipped this round","server.rooms.busyElsewhere":"{bot} is busy in another conversation — skipped this round","server.rooms.settingsChanged":"{bot}'s settings changed while starting — skipped this round","server.rooms.providerUpdating":"{bot}'s computer provider is being updated — skipped this round","server.rooms.cloudComputerChanging":"{bot}'s cloud computer is being changed — skipped this round","server.rooms.becameBusy":"{bot} became busy in another conversation — skipped this round","server.rooms.mentionMissed":"{bot} isn't in this room, so that mention didn't reach them — add them to the room to bring them in.","server.rooms.archived":"{bot} is archived and can't respond — restore it or mention an active room member.","server.rooms.sameName.two":'Two bots here are named "{name}": {first} and {second}. Pick the one you mean from the @ list.',"server.rooms.sameName.many":'{count} bots here are named "{name}": {choices}. Pick the one you mean from the @ list.',"server.rooms.sameName.choice":"{name}, {role}","server.rooms.sameName.chief":"Chief of Staff","server.rooms.sameNameMissed":'More than one bot here is named "{name}", so that mention reached none of them.',"server.rooms.noneActive":"No active room members can respond — restore an archived bot or add an active member.","server.rooms.stillStopping":"{bot} is still stopping — this message was not dispatched","server.rooms.someoneStillStopping":"A room member is still stopping — this message was not dispatched","server.outside.confinedHere":"Work from outside came into this conversation, so this bot works here without a shell. Start a new conversation to use it fully.","server.outside.bulletinTitle":"Change this group chat's instructions?","server.outside.memoryTitle":"Save this to the bot's memory?","server.outside.memoryChangeTitle":"Change or remove this in the bot's memory?","server.outside.save":"Save","server.outside.skip":"Skip","server.rooms.postedIn":"Posted in {room}","server.rooms.openedThread":"Opened thread #{title}","server.rooms.held":"{bot} is held (stopped by you) — @mention it or say resume","server.rooms.finishedNoSummary":"{bot} finished without a summary","server.rooms.finishedNoSummaryAsking":"{bot} finished without a summary — asking for a short result","server.rooms.turnStalled.one":"{bot}'s room turn made no progress for {count} minute and was stopped","server.rooms.turnStalled.many":"{bot}'s room turn made no progress for {count} minutes and was stopped","server.rooms.compactedRequested":"compacted {bot}'s context ({percent}% full): fresh session with the room's recent messages","server.rooms.compactedThreshold":"{bot}'s context was {percent}% full: compacted to a fresh session with the room's recent messages","server.teammates.sent":"Sent to {bot}","server.teammates.sentInRoom":"Sent to {bot} · {room}","server.teammates.sentDirectly":"Sent to {bot} directly: it isn't in {room}.","server.teammates.sentDirectlyHere":"Sent to {bot} directly: it isn't in this room.","server.teammates.teammateWork":"Teammate work","server.teammates.goalCoordinating":"{bot} is coordinating this goal.","server.teammates.goal.working":"Goal in progress: {detail}","server.burst.preview":"Burst ready: {count} tasks. Press Run on its card to start.","server.burst.running":"Burst running: {done} of {total} done, {failed} failed.","server.burst.merging":"Burst finished: writing one result.","server.burst.done":"Burst finished: {done} of {total} done, {failed} failed.","server.burst.cancelled":"Burst cancelled.","server.burst.partFailed":"did not finish ({reason})","server.burst.partsHeader":"The parts of this burst, as they came: {task}","server.teammates.goal.completed":"Goal completed: {detail}","server.teammates.goal.needsInput":"Goal needs your input: {detail}","server.teammates.goal.blocked":"Goal blocked: {detail}","server.teammates.goal.limitReached":"Goal reached its limit: {detail}","server.teammates.goal.paused":"Goal paused: {detail}","server.teammates.goal.stopped":"Goal stopped: {detail}","server.teammates.goal.failed":"Goal failed: {detail}","server.teammates.noAnswerInTime":"Nobody answered {who}'s question in time","server.teammates.stillWaiting":"Still waiting on your answer: {question} This work closes in {days} days if nobody answers.","server.teammates.stillWaitingCard":"This work is still waiting on you. It closes in {days} days if nothing changes.","server.teammates.noApprovalInTime":"Nobody answered {who}'s approval in time — that step did not run","server.teammates.approvalAsk.one":"{who} needed your approval for {actions}, but nobody answered in time, so it did not run. Let it try again? It will ask you once more when it runs.","server.teammates.approvalAsk.many":"{who} needed your approval for {actions}, but nobody answered in time, so they did not run. Let it try again? It will ask you once more when it runs.","server.teammates.approvalAsk.retry":"Try again","server.teammates.turnEndedBeforeAnswer":"{who}'s turn ended before anyone answered its question","server.teammates.approvalClosed":"{who}'s approval closed before anyone answered — that step did not run","server.teammates.questionDismissed":"{who}'s question was dismissed","server.teammates.requestDenied":"{who}'s request was denied","server.teammates.gotYourAnswer":"{who} got your answer","server.teammates.gotYourApproval":"{who} got your approval","server.teammates.questionAnswered":"{who}'s question was answered","server.teammates.requestApproved":"{who}'s request was approved","server.teammates.queuedBehind.answer":"Queued for @{bot} behind your answer in “{title}”","server.teammates.queuedBehind.approval":"Queued for @{bot} behind your approval in “{title}”","server.teammates.queuedBehind.review":"Queued for @{bot} behind your review in “{title}”","server.teammates.recalled.one":"{bot} recalled {count} message from its private chat with you","server.teammates.recalled.many":"{bot} recalled {count} messages from its private chat with you","server.teammates.briefCovers.one":"{bot}'s recent-work brief covers {count} private chat with you","server.teammates.briefCovers.many":"{bot}'s recent-work brief covers {count} private chats with you","server.teammates.closedBy":"Closed by @{bot}","server.teammates.sendFailed":"Send failed — {detail}","server.teammates.resultWithheld":"Result withheld: {problem}","server.teammates.replied":"{bot} replied","server.teammates.repliedInRoom":"{bot} replied · {room}","server.teammates.failed":"{bot} — failed: {detail}","server.teammates.cancelled":"{bot} — cancelled: {detail}","server.teammates.other":"{bot} — {status}: {detail}","server.teammates.teammate":"Teammate","server.teammates.room":"Room","server.teammates.resumedQuestion":"Resumed with a question from {who}, reviewing","server.teammates.resumedQuestionRestart":"Resumed with a question from {who} after a restart, reviewing","server.teammates.resumedResults":"Resumed with {who} results, reviewing","server.teammates.resumedResultsRestart":"Resumed with {who} results after a restart, reviewing","server.teammates.backWithResults":"Back with the work it handed on, reviewing","server.teammates.backWithResultsRestart":"Back with the work it handed on after a restart, reviewing","server.teammates.handedWork":"work it handed on","server.lendingLift.title":"Let {bot} use your {device} for this?","server.lendingLift.wholeBotTitle":"{bot}'s notes changed in work you didn't write. Let it keep using your {device}?","server.lendingLift.memory":"Its notes changed in work you didn't write:","server.lendingLift.botOpened":"A bot opened this conversation with work for this bot. Allow lets only this message of yours use your {device}.","server.lendingLift.outside":"A webhook or a routine you didn't write posted in this conversation. Allow lets only this message of yours use your {device}.","server.lendingLift.more":"More in this bot's settings, under Memory.","server.lendingLift.allow":"Allow","server.lendingLift.notNow":"Not now","server.lendingLift.askAgain":"Allowed. Ask again to go on.","server.teammates.answerPassed":"Answer passed to the waiting work","server.teammates.answeredForPerson":"Answered {name}'s question for the person","server.teammates.personReplied":"{name} replied","server.teammates.personAssistantAnswered":"{name}'s assistant answered","server.teammates.told":"Told {name}","server.noAi.member":"{owner} needs to connect an AI before bots can answer. I've told them.","server.noAi.memberNoOwner":"The team's owner needs to connect an AI before bots can answer. I'll tell them when they first open the team.","server.noAi.admin":"Connect an AI first, so bots can answer.","server.noAi.nobodyHere":"No AI is connected yet, so nothing can run.","server.noAi.ownerTitle":"Connect an AI for {team}","server.noAi.ownerLine":"{name} tried to use a bot in {team}, but no AI is connected yet. Connect one so bots can answer.","server.teammates.notPassed":"Not passed to {name}","server.mcp.reconnect.one":"The MCP server {name} didn't connect, so its tools weren't available this time. It connects again on your next message.","server.mcp.problem.signIn":"{name} needs you to sign in before its tools work. Open Apps → MCP servers and sign in to it.","server.mcp.problem.refused":"{name} refused its sign-in or key. Open Apps → MCP servers to sign in again or update its key.","server.mcp.problem.notFound":"{name} wasn't found at its address. Check the address in Apps → MCP servers.","server.mcp.problem.timeout":"{name} didn't answer in time. Try again in a moment, and if it keeps happening, test it in Apps → MCP servers.","server.mcp.problem.cantConnect":"Couldn't connect to {name}. Test it in Apps → MCP servers to see why.","server.mcp.reconnect.many":"The MCP servers {names} didn't connect, so their tools weren't available this time. They connect again on your next message.","server.bots.nameClash":'{person} is also a person here, so "@{name}" reaches {person}, not this bot. Rename the bot to keep them apart.',"star.title":"Enjoying {app}?","star.body":"A star on GitHub helps more people find it.","star.button":"Star on GitHub","productHunt.title":"We're live on Product Hunt","productHunt.body":"Limix Bot just launched. An upvote would mean a lot to us.","productHunt.button":"Upvote on Product Hunt","boatOffer.title":"$50 of Boat credit for you","boatOffer.body":"Boat runs the cloud computers behind Limix Bot. Buy Boat's $100 plan or bigger, then tell Boat that Limix Bot sent you, and they'll add $50 in credits to your Boat account.","boatOffer.yourself":"You claim it yourself: it isn't automatic.","boatOffer.get":"Get Boat","boatOffer.claim":"I bought it: claim my $50","boatOffer.mailFailed":"Couldn't open your email app. Write to {address} instead.","modelgoOffer.title":"ModelGo is now in Limix Bot","modelgoOffer.line":"One API key, every model.","modelgoOffer.sponsor":"Sponsor","modelgoOffer.getKey":"Get a ModelGo key","modelgoOffer.name":"ModelGo","modelgoOffer.link":"Get a key","cloudIntro.badge.one":"Free for 1 day","cloudIntro.badge.many":"Free for {days} days","cloudIntro.title":"Keep your bots working when this computer is off","cloudIntro.body":"Limix Bot Cloud runs your bots for you in the cloud, always on.","cloudIntro.routines":"Routines run on time, day and night","cloudIntro.phone":"Reach your bots from your phone, even with this computer off","cloudIntro.credit":"{credit} of Claude credit to start","cloudIntro.included":"Voice and cloud desktops by Boat included","cloudIntro.price":"Then from {price}/month + tax. Cancel any time.","cloudIntro.start":"Start free trial","cloudIntro.howTo":"Show me how","cloudIntro.later":"You can add a Cloud any time from the menu on the left of the app.","whatsNew.eyebrow":"What's new","whatsNew.slideOf":"Slide {n} of {count}","whatsNew.next":"Next","whatsNew.back":"Back","whatsNew.cloud.title":"Meet the new Limix Bot Cloud","whatsNew.cloud.body":"Your bots keep working when this computer is off. The new Cloud website puts your Clouds, team, billing and usage in one place.","whatsNew.cloud.see":"See the new Cloud","whatsNew.cloud.pictureAlt":"The new Cloud website's Home: each Cloud with its plan and status, this month's usage and the apps signed in.","whatsNew.team.title":"Shared bots for your whole team","whatsNew.team.bodyInbox":"Everyone chats with the same bots, like one Support bot and one Sales bot, and hands them work. Each person's own Limix Bot is their inbox: anything for them lands there.","whatsNew.team.picture":"Ada, Ben, Cleo and Dara, each with their own Limix Bot, share the team's Support and Sales bots on one Team Cloud.","whatsNew.team.apps":"Connected apps, set up once for everyone","whatsNew.team.groupChats":"Group chats with teammates and bots together","whatsNew.team.memory":"Team memory the bots share","whatsNew.team.handoff":"Bots hand work to each other across the team","whatsNew.team.accessUse":"Choose who can use each bot","whatsNew.team.start":"Start a Team","whatsNew.team.support":"Support","whatsNew.team.sales":"Sales","cloudHowTo.title":"Add a Cloud from here","cloudHowTo.body":"Click this menu, then choose Add a Cloud. It's also where you switch between this computer and the Cloud.","cloudHowTo.skip":"Skip","cloudHowTo.nextTime":"Next time, Add a Cloud is in the menu on the left of the app.","cloudAdd.title":"Add a Cloud","cloudAdd.popular":"Most popular","cloudAdd.hours":"{hours} cloud desktop hours a month","cloudAdd.today":"Today","cloudAdd.moneyBack":"{days}-day money-back on every plan.","cloudAdd.close":"Close","cloudAdd.checking":"Checking with Limix Bot Cloud…","cloudAdd.unreachable":"Can't reach Limix Bot Cloud right now. Check your connection and try again.","cloudAdd.tryAgain":"Try again","cloudAdd.failed":"Checkout couldn't open. Nothing was charged. Try again.","cloudAdd.rateLimited":"You've opened several checkouts in the last hour. Use the one in your browser, or try again later.","cloudAdd.browserTitle":"Finish in your browser","cloudAdd.opening":"Opening your browser…","cloudAdd.signInStep1":"Sign in with your email.","cloudAdd.signInStep3Trial":"Connect this app, then start your free trial.","cloudAdd.signInStep3":"Connect this app, then continue to checkout.","cloudAdd.signInStep3Connect":"Connect this app.","cloudAdd.reopenBrowser":"Reopen browser","cloudAdd.cancel":"Cancel","cloudAdd.reopenCheckout":"Reopen checkout","cloudAdd.changePlan":"Change plan","cloudAdd.codeExpired":"The sign-in code expired, so nothing changed. Start again when you're ready.","cloudAdd.signInEnded":"The sign-in ended before this app was connected, so nothing changed. Start again when you're ready.","cloudAdd.preparing":"A checkout is already being prepared. Try again in a moment.","cloudAdd.receivedTitle":"Payment received","cloudBuy.title":"Your bots, always on.","cloudBuy.lede":"Runs your bots 24/7 in the cloud, even when this computer is off.","cloudBuy.includes":"Every plan includes","cloudBuy.benefit.awayTitle":"Works while you're away","cloudBuy.benefit.away":"Routines, long jobs and replies keep going around the clock.","cloudBuy.benefit.privateTitle":"Private to you","cloudBuy.benefit.private":"Your own machine, encrypted, with daily backups.","cloudBuy.benefit.anywhereTitle":"Reach it from anywhere","cloudBuy.benefit.anywhere":"Talk to the same bots from your phone or any computer.","cloudBuy.benefit.browserTitle":"A real browser and desktop","cloudBuy.benefit.browser":"Bots can sign in to websites and use apps for you.","cloudBuy.benefit.moveTitle":"Bring everything over","cloudBuy.benefit.move":"Your bots, chats and memory move across in about a minute.","cloudBuy.choose":"Choose your plan","cloudBuy.perMonth":"/month","cloudBuy.sleeps":"Sleeps when idle, wakes in about a second","cloudBuy.promise.starter":"Your bots keep working with your laptop closed, at the lowest price.","cloudBuy.promise.pro":"Your bots keep working 24/7, even when your laptop is closed.","cloudBuy.promise.max":"The biggest cloud machine, for bots that use computers all day.","cloudBuy.promise.team":"One shared Cloud for up to {seats} people: bots, group chats and roles your whole team uses.","cloudBuy.card.get":"Get {plan}","cloudBuy.card.current":"Your plan","cloudBuy.card.trial.one":"Free for 1 day, then {price}/month + tax","cloudBuy.card.trial.many":"Free for {days} days, then {price}/month + tax","cloudBuy.card.paid":"{price} + tax today, then each month","cloudBuy.row.alwaysOn":"Always on, around the clock","cloudBuy.row.desktops":"Cloud desktops: as many as your bots need","cloudBuy.row.machine":"{cpus} · {memory} GB memory","cloudBuy.row.swap":"Plus {swap} GB of swap","cloudBuy.row.storage":"{gb} GB storage","cloudBuy.row.storageGrows":"{gb} GB storage, grows to {max} GB","cloudBuy.row.backups":"Daily backups, kept {days} days","cloudBuy.trialTerms":"Card needed, nothing charged until your trial ends. Cancel in the app any time.","cloudBuy.timeline.firstPayment":"First payment","cloudBuy.plan.limit":"Fair use: up to {count} at once","cloudBuy.plan.voiceMinutes":"Voice replies: about {minutes} minutes of speech a month","cloudBuy.plan.voiceHour":"Voice replies: about an hour of speech a month","cloudBuy.plan.voiceHours":"Voice replies: about {hours} hours of speech a month","cloudBuy.plan.cpusShared":"{count} shared CPUs","cloudBuy.plan.cpus":"{count} CPUs","cloudBuy.timeline":"What happens when","cloudBuy.timeline.start":"Trial starts","cloudBuy.timeline.startCredit":"Trial starts, with {credit} of Claude credit","cloudBuy.timeline.reminder":"Reminder email","cloudBuy.secure":"Secure checkout in your browser","cloudBuy.wallets":"Pay with Apple Pay, Google Pay or a card","cloudBuy.applePay":"Apple Pay","cloudBuy.googlePay":"G Pay","cloudBuy.card":"Card","cloudBuy.cancelEasy":"Cancel in two clicks","cloudBuy.moneyBack":"{days}-day money-back","cloudBuy.haveAccount":"Already have a plan? Sign in","cloudBuy.termsChanged":"You're signed in. These are the plans for your account, so check the price before you continue.","cloudBuy.back":"Plans","cloudBuy.signIn.title":"Create your Limix Bot account","cloudBuy.signIn.titlePlain":"Sign in to Limix Bot Cloud","cloudBuy.signIn.sub":"We'll email you a code. No password to remember.","cloudBuy.signIn.email":"Email","cloudBuy.signIn.send":"Send code","cloudBuy.signIn.fromProfile":"Uses the email from your profile. You can change it.","cloudBuy.signIn.codeLabel":"Enter the 8-digit code sent to {email}","cloudBuy.signIn.change":"Change","cloudBuy.signIn.digit":"Digit {n} of 8","cloudBuy.signIn.resendIn":"Resend code in {time}","cloudBuy.signIn.resend":"Didn't get it? Resend code","cloudBuy.signIn.checking":"Checking the code…","cloudBuy.signIn.done":"Signed in. Opening secure checkout…","cloudBuy.signIn.donePlain":"Signed in.","cloudBuy.signIn.ssoHint":"Work account with single sign-on?","cloudBuy.signIn.continueBrowser":"Continue in browser","cloudBuy.signIn.invalidEmail":"Enter an email address like name@example.com.","cloudBuy.signIn.rateLimited":"Too many codes were asked for just now. Wait a minute, then try again.","cloudBuy.signIn.failed":"Couldn't reach Limix Bot Cloud. Check your connection and try again.","cloudBuy.signIn.wrongCode":"That code isn't right. {count} tries left.","cloudBuy.signIn.wrongCodeOne":"That code isn't right. 1 try left.","cloudBuy.signIn.expired":"That code can't be used any more. Send a new one.","cloudBuy.signIn.newCode":"Send a new code","cloudBuy.signIn.signupClosed":"New Cloud accounts aren't available yet.","cloudBuy.signIn.signupClosedNote":"New Limix Bot accounts aren't open yet: a code comes only if this email already has one. Change it to the one you signed up with.","cloudBuy.signIn.deviceLimit":"This account has too many computers signed in. Sign one out on your Plan page, then try again.","cloudBuy.signIn.sso":"Your organization uses single sign-on.","cloudBuy.signIn.twoFactor":"This account uses two-step verification, so it signs in through your browser.","cloudBuy.signIn.browser":"Limix Bot Cloud signs this app in through your browser.","cloudBuy.pay.sub":"Checkout opened in your browser. Pay there and this window moves on by itself.","cloudBuy.pay.subSignIn":"Your browser shows the next step. Pay there and this window moves on by itself.","cloudBuy.pay.signedIn":"Signed in","cloudBuy.pay.waiting":"Waiting for your payment","cloudBuy.pay.planTrial.one":"{plan} · free for 1 day · {due} today","cloudBuy.pay.planTrial.many":"{plan} · free for {days} days · {due} today","cloudBuy.pay.planPaid":"{plan} · {price}/month + tax","cloudBuy.pay.setup":"Set up your new Cloud","cloudBuy.pay.setupHint":"About 2 minutes, all automatic","cloudBuy.pay.copy":"Copy link","cloudBuy.pay.copied":"Link copied","cloudBuy.pay.lateTitle":"We haven't seen a payment yet.","cloudBuy.pay.lateSub":"If you paid, it shows up here within a few minutes. If not, reopen checkout or choose another plan.","cloudBuy.pay.failed":"Checkout couldn't open again. Nothing was charged. Try again in a moment.","cloudBuy.setup.badgeTrial":"{plan} trial started","cloudBuy.setup.badgeCredit":"{plan} trial started · {credit} Claude credit added","cloudBuy.setup.badgePaid":"{plan} started","cloudBuy.setup.title":"Setting up your new Cloud","cloudBuy.setup.sub":"About 2 minutes. Keep working if you like, it opens when it's ready.","cloudBuy.setup.progress":"Setup progress","cloudBuy.step.starting":"Starting {name}","cloudBuy.setup.name":"Name it","cloudBuy.setup.color":"Pick a colour","cloudBuy.setup.preview":"In your switcher","cloudBuy.setup.previewLine":"{plan} · always on","cloudBuy.setup.previewLineSleeps":"{plan} · sleeps when idle","cloudBuy.setup.open":"Open {name}","cloudBuy.setup.openingIn":"Opening in {seconds}…","cloudBuy.ready.title":"{name} is ready","cloudBuy.ready.sub":"It keeps your bots running 24/7, even when this computer is off.","cloudBuy.ready.hint":"Switch between This computer and {name} from the menu at the top of the sidebar.","cloudBuy.openFailed":"{name} didn't open. Try again in a minute.","cloudBuy.color.blue":"Blue","cloudBuy.color.teal":"Teal","cloudBuy.color.purple":"Purple","cloudBuy.color.orange":"Orange","cloudBuy.color.red":"Red","cloudBuy.color.yellow":"Yellow","cloudBuy.one.title":"One Cloud per account for now","cloudBuy.one.sub":"You have {name}. More than one Cloud per account is coming. Want an email when you can add another?","cloudBuy.one.email":"Email me when I can add another","cloudBuy.one.thanks":"Thanks. We'll email you when you can add another Cloud.","cloudBuy.one.failed":"Couldn't reach Limix Bot Cloud, so nothing was saved. Try again.","cloudBuy.color.slate":"Slate","cloudBuy.extra.defaultName":"Cloud {number}","cloudBuy.extra.nameTitle":"Name your new Cloud","cloudBuy.extra.nameSub":"It gets its own bots, people, apps and plan.","cloudBuy.extra.continue":"Continue to checkout","cloudBuy.extra.setupTitle":"Setting up {name}","cloudBuy.extra.setupSub":"About 2 minutes. Keep working if you like; we'll tell you when it's ready.","cloudBuy.extra.readySub":"It has its own bots, people, apps and plan. Switch to it from the left edge of the window any time.","cloudBuy.extra.lateSub":"If you paid, it shows up here within a few minutes. If not, reopen checkout.","cloudBuy.extra.problem":"The payment for {name} didn't go through. Update it on your Plan page.","cloudBuy.extra.signupsClosed":"New Clouds can't be bought right now. Try again later.","cloudBuy.extra.checkoutOpen":"A checkout for another Cloud is already open. Finish it in your browser first.","rail.label":"Where your bots live","rail.thisComputer":"This computer","rail.thisMac":"This Mac","rail.thisPc":"This PC","rail.profile":"{name}: a separate place on this computer, with its own bots. The bots on My Cloud stay there.","rail.settingUp":"{name}: setting up","rail.waiting":"{name}: waiting for payment","rail.attention":"{name}: needs you","rail.more":"Show all {count}","rail.search":"Find a Cloud","rail.noMatch":"Nothing matches.","rail.add":"Add a Cloud or your own server","rail.buy":"Buy a Cloud","rail.buySub":"A new Cloud with its own bots, people, apps and plan, always on.","rail.org":"New organization","rail.orgSub":"Another Cloud on your Team plan, with its own people and bots. Nothing more to pay.","rail.orgLede":"It gets its own Cloud, people, bots, apps and keys. It's part of your Team plan: no new plan, nothing to pay now.","rail.orgName":"Name","rail.orgColor":"Color","rail.orgPlaceholder":"A client or team","rail.orgCount":"Organization {count} of {max}","rail.orgCreate":"Create organization","rail.orgTaken":"Another of your organizations has that name. Choose another.","rail.orgLimit":"Your Team plan has as many organizations as it can have. Email us to add more.","rail.orgRate":"Too many organizations were added just now. Try again in a few minutes.","rail.orgNoPlan":"Your Team plan isn't running right now, so no organization can be added. Its billing on the Cloud page says why.","rail.orgOff":"New organizations aren't available right now.","rail.orgFailed":"Nothing was added. Try again in a moment.","rail.connect":"Connect","rail.back":"Back","rail.ownServer":"{name}, your own server","rail.offline":"{name}: offline","rail.lastSeen":"{name}: offline, last seen {when}","rail.notConnected":"{name}: connect it to this app","rail.ownNetwork":"Only reachable on its own network","rail.update":"on {version}, {latest} is out","rail.connectTitle":"Connect {name}","connect.title":"Connect to a server","connect.choiceSub":"A server of your own: a VPS, a Mac mini at home, or a computer on your Tailscale network.","connect.lede":"Paste the link the server printed, or type its address and pairing code. Its bots stay on the server.","connect.signedInLede":"It's signed in to your account already. Paste its link, or type its address and a pairing code.","connect.address":"Link or address","connect.addressPlaceholder":"https://maus.example.com or 192.168.1.20:8799","connect.code":"Pairing code","connect.noCode":"No code? On the server, run:","connect.addAddress":"Now add the server's address, like {example}.","connect.found":"{name} · Limix Bot {version}","connect.found.https":"HTTPS","connect.found.tailscale":"Tailscale","connect.found.privateHttp":"Private network, not encrypted. Fine on your own network or Tailscale.","connect.found.loopback":"This computer","connect.checking":"Looking for the server…","connect.to":"Connect to {name}","connect.copy":"Copy","connect.copied":"Copied","rail.hide":"Hide your computers","rail.show":"Show your computers","rail.showSub":"An icon for each place your bots live, on the left of the app.","settings.windowFrame.title":"Window frame","settings.windowFrame.subtitle":"A thin bar across the top that says where you are, with the chat in a rounded card. Off, the window looks as it did before.","settings.windowFrame.restart":"Takes effect when {app} restarts.","settings.windowFrame.restartNow":"Restart now","rail.ended":"{name}: ended","rail.remove":"Remove from list","rail.makeHome":"Make {name} my home","rail.makeHomeSub":"Moves this computer's bots, chats, memory and routines to {name}, and this computer then works for it.","rail.makeHomeFailed":"Your bots didn't start moving. Try again in a moment.","twoPlaces.title":"Bring your bots together","twoPlaces.body":"Your bots live in two places, so they can't work together. Bring them together on {place}?","twoPlaces.bring":"Bring them together","twoPlaces.failed":"Your bots didn't start moving. Try again in a moment.","twoPlaces.confirmTitle":"Move this computer's bots to {place}?","twoPlaces.confirm":"This computer's bots, with their chats and automations, move to {place} and work there from now on.","twoPlaces.undo":"To bring them back later, turn on “Keep this computer's bots on this computer” in Settings > Limix Bot Cloud (Advanced mode).","twoPlaces.move":"Move bots","rail.removeAsk":"Remove “{name}” from your list? You can buy a new Cloud any time.","rail.removeServerAsk":"Remove “{name}” from your list? This app signs out of it there; nothing on it changes.","rail.removeYes":"Remove","rail.removeNo":"Cancel","rail.removeRefused":"It can't be removed right now: it is running again, or still has a plan.","rail.removeFailed":"It wasn't removed. Check your connection and try again.","rail.addAny":"Add a place for your bots","rail.searchAny":"Find a place","rail.local":"New workspace on this computer","rail.localSub":"A separate place on this computer, with its own bots, chats and files.","rail.localPreview":"On this computer","rail.localCreate":"Create","rail.localTaken":"Another place here has that name. Choose another.","rail.localFailed":"That didn't work. Try again in a moment.","rail.localWork":"Work","rail.localPersonal":"Personal","rail.localNumbered":"Workspace {count}","rail.localPlace":"{name}: a separate place on this computer, with its own bots","rail.settling":"{name} opens once {bot} finishes","rail.settlingAny":"{name} opens once the work there finishes","rail.cloudLabel":"{label}, Cloud","rail.rename":"Rename","rail.renameSave":"Save","rail.localRemove":"Remove from this computer","rail.localRemoveAsk":"Remove “{name}”? Its bots, chats and files on this computer are deleted. Its folder goes to the Trash first.","rail.localRemoveAskWin":"Remove “{name}”? Its bots, chats and files on this computer are deleted. Its folder goes to the Recycle Bin first.","rail.localRemoveFailed":"It wasn't removed. Try again in a moment.","placeLook.title":"Color","placeLook.sub":"{name} shows in this color at the top of the sidebar and on its icon on the left of the app.","placeLook.aria":"Color of {name}","placeLook.member":"Only its admins can change its color.","placeLook.signedOut":"Sign in to Limix Bot Cloud to change its color.","placeLook.unsupported":"This Cloud's color can't be changed from the app yet.","placeLook.failed":"The color wasn't saved. Try again.","placeLook.none":"None","placeLook.sidebarColor":"Sidebar color","placeLook.sidebarColorSub":"Tints the top of the sidebar.","placeLook.sidebarPicture":"Sidebar picture","placeLook.sidebarPictureSub":"Your own image, faded into the top of the sidebar.","placeLook.pictureSub":"Your own image, faded into the top of the sidebar. Everyone here sees it.","placeLook.sharedPictureSub":"An image faded into the top of the sidebar. Everyone who uses these bots sees it.","placeLook.useImage":"Use an image","placeLook.changeImage":"Change image","placeLook.removeImage":"Remove","placeLook.currentImage":"Current picture","placeLook.imageAdmins":"Only its admins can change its picture.","placeLook.imageFormat":"Use a PNG, JPEG or WebP picture.","placeLook.imageRead":"That picture couldn't be read. Try another one.","placeLook.imageSize":"That picture is too large. Try a smaller one.","placeLook.imageMoving":"Use a still picture.","placeLook.imageFailed":"The picture wasn't saved. Try again.","placeLook.imageSaving":"Saving…","cloudBuy.team.setupTitle":"Setting up your team's Cloud","cloudBuy.team.setupSub":"About 2 minutes. Keep working if you like; you can open it here once it's ready.","cloudBuy.team.unnamed":"your team's Cloud","cloudBuy.team.readyTitle":"Your team's Cloud is ready","cloudBuy.team.readySub":"{name} keeps your team's bots running 24/7, even when this computer is off.","cloudBuy.staging":"Staging","cloudBuy.stagingHint":"This app uses the staging Limix Bot Cloud: test payments and test Clouds, not real ones.","cloudNotice.signIn.title":"Sign in again to reach the Cloud","cloudNotice.signIn.hint":"Your plan and your bots there are not affected.","cloudNotice.removed.title":"This computer was signed out of Limix Bot Cloud","cloudNotice.removed.hint":"Its saved sign-in couldn't be read, so it was removed.","voice.grok.label":"Grok (xAI)","voice.grok.host":"Host · Grok","voice.grok.sharedKey":"Grok uses this installation’s existing xAI key.","voice.gemini.keyPlaceholder":"Paste your Google AI Studio API key","voice.gemini.model":"Gemini speech model","keys.label.geminiTts":"Gemini speech API key","keys.purpose.geminiTts":"Gemini voices for spoken replies, voice notes and calls","voice.fish.label":"Fish Audio","voice.host":"Host voice","voice.hostLabel":"Host · {provider}","voice.title":"Voice","voice.macChoice":"Choose whether this Mac speaks with its installed voices or audio generated by the host.","voice.agentChoice":"Choose this agent’s voice and spoken-reply preference.","voice.description":"Give this agent a voice for calls and spoken replies. The voice choice belongs to this agent;","voice.macInstalled":"the voices are the ones already installed on this Mac.","voice.macUnavailable":"built-in Mac voices are unavailable here. Switch to a hosted voice provider to keep using voice.","voice.chatterboxShared":"the Chatterbox server address is shared by this installation.","voice.providerShared":"the {provider} key is shared by this installation.","voice.provider":"voice provider","voice.macOutput":"Voice output on this Mac","voice.macBuiltIn":"Built-in Mac voices","voice.hostNotConfigured":"Voice output is not configured on the host","voice.engine":"Voice provider","voice.macOnly":"Built-in voices are available only on macOS","voice.providerKey":"{provider} key","voice.connected":"Connected","voice.getKey":"Get a key from {provider}","voice.chatterboxServer":"Chatterbox server","voice.chatterboxAddress":"Chatterbox server address","voice.chatterboxModelPlaceholder":"Model ID (default: chatterbox-turbo)","voice.chatterboxModel":"Chatterbox model","voice.chatterboxHelp":"Any OpenAI-compatible server running Chatterbox works, no key needed.","voice.chatterboxHowTo":"How to run one locally","voice.loading":"Loading voices…","voice.macDefault":"Mac system default","voice.search":"Search voices or paste a link","voice.noMatches":"No voices match","voice.noMatchesHint":"Try another name, or paste a link to the voice.","voice.yourVoices":"Your voices","voice.library":"ElevenLabs Voice Library","voice.libraryHint":"Picking one adds it to your voices.","voice.adding":"Adding…","voice.pick":"Pick a voice","voice.current":"Current agent voice","voice.hear":"Hear this voice","voice.pickFirst":"Pick a voice first","voice.try":"Try","voice.readReplies":"Read replies aloud","voice.readRepliesHelp":"Speak this agent’s answers as they arrive, even from another chat.","voice.notes":"Voice notes","voice.notesHelp":"Let this agent send spoken notes; on unless switched off here.","voice.everyReply":"Voice note with every reply","voice.everyReply.allHelp":"Every bot also sends each reply as a voice note. You can turn it on or off for one bot in that bot's settings.","voice.everyReply.followsOn":"Uses your Voice setting (on)","voice.everyReply.followsOff":"Uses your Voice setting (off)","voice.everyReply.own":"Set for this bot.","voice.everyReply.follow":"Use your Voice setting","voice.yourVoice":"Your {provider} voice","voice.usesYours":"This bot speaks in your {provider} voice. Pick another above to give it its own.","voice.usesOwn":"This bot speaks in its own voice.","voice.notifications.title":"Notifications","voice.notifications.help":"Get notified when this agent finishes or needs input","voice.notifications.label":"Agent notifications","voice.fish.keyPlaceholder":"Paste your Fish Audio API key","voice.elevenlabs.keyPlaceholder":"Paste your ElevenLabs API key","voice.elevenlabs.label":"ElevenLabs","voice.chatterboxLabel":"Chatterbox","voice.chatterboxLocal":"Chatterbox (local)","voice.serverAddressError":"The server address must start with http:// or https://","voice.grok.ready":"The xAI key is saved. Grok detects the spoken language from your text.","voice.grok.missingKey":"Add an xAI API key in Settings → API keys on the host to use Grok voice.","voice.fish.model":"Fish Audio model","voice.fish.modelPro":"s2.1-pro (default)","voice.fish.modelFree":"s2.1-pro-free (free for developers)","voice.fish.modelHint":"Pick the model your Fish Audio plan covers. It applies to every agent on this installation.","call.voiceSetup.open":"Set up voice","call.voiceSetup.title":"Give {name} a voice","call.voiceSetup.subtitle":"Choose a voice provider, add its key if it needs one, then pick a voice.","call.voiceSetup.close":"Close voice set-up","call.voiceSetup.loading":"Loading voice settings…","call.voiceSetup.ready":"Voice is ready. You can call {name} now.","call.voiceSetup.startCall":"Start call","call.voiceSetup.allSettings":"All voice settings","toolDetail.label":"{name} · {status} · Tool details","toolDetail.input":"Input","toolDetail.output":"Result","toolDetail.running":"Running","toolDetail.failed":"Failed","toolDetail.completed":"Completed","toolDetail.unverified":"No result","toolDetail.waiting":"Waiting for the tool to finish…","toolDetail.noOutput":"No output was recorded for this call.","toolDetail.loadingFull":"Loading the full result…","toolDetail.partial":"Showing the start of the result only: the rest could not be loaded.","toolDetail.previewHint":"Shortened, automatically redacted preview. Review before sharing.","toolDetail.tool":"Tool","toolStep.runCommand":"Run a command","toolStep.readFile":"Read a file","toolStep.writeFile":"Write a file","toolStep.editFile":"Edit a file","toolStep.deleteFile":"Delete a file","toolStep.searchFiles":"Search files","toolStep.searchWeb":"Search the web","toolStep.openWebPage":"Open a web page","toolStep.lookAtScreen":"Look at the screen","toolStep.useComputer":"Use the screen","toolStep.useBrowser":"Use the browser","toolStep.updatePlan":"Update the plan","toolStep.askHelper":"Hand a task to a helper","toolStep.think":"Think","toolStep.checkTeam":"Check the team","toolStep.manageAutomations":"Manage automations","toolStep.checkAutomations":"Check automations","toolStep.useTool":"Use a tool","toolStep.usingWhose":"using {person}'s {app}","attach.gallery":"Attachments","attach.gallerySingle":"1 attachment","attach.galleryCount":"{count} attachments","attach.showMore":"Show {count} more","attach.moreCount":"+{count} more","attach.showLess":"Show less","attach.video":"Video","attach.image":"Image","attach.file":"File","attach.previewVideo":"Preview {name}","attach.loadVideo":"Load video","attach.closeVideo":"Close video preview","attach.videoHint":"Loads on request · up to 25 MB","attach.videoLoading":"Loading video…","attach.videoUnavailable":"This video cannot be played here. You can still save a copy.","attach.previewAudio":"Play {name}","attach.audioUnavailable":"This audio cannot be played here. You can still save a copy.","attach.fileTooLarge":"Preview is limited to 25 MB.","attach.previewTooLarge":"This file is {size}, over the {limit} preview limit. You can still download it below.","teamImport.backupCopies":"Imported bots and departments are added as new copies; duplicate names get numbered.","teamImport.newSection":"Adds a new department for {name}. Existing departments stay unchanged; duplicate names get numbered.","teamImport.sharedTeam":"{count} bots · shared department","teamImport.brief":"Shared instructions","teamImport.skillsOff":"Included skills (added switched off)","teamImport.skillsReview":"Review each skill in its bot profile before switching it on. Imported instructions do not run automatically.","teamImport.offeredSkills":"Offered skills (not added to any bot)","teamImport.connections":"Connections to finish: {count} · keys and passwords are never included","teamImport.notes":"Starter notes: {count}","teamImport.routinesPaused":"Routines: {count} · paused","teamImport.presets":"Preset bots: {count} · appear in New bot","teamImport.library":"Preset bots and skills · no department","teamImport.librarySafety":"The preset bots appear in New bot, above the built-in roles. No bots, departments or routines are added. A bot you make from one of these presets gets its skills switched off. Model choices, computers, approval levels and connected apps are never included.","teamImport.libraryAdds":"Adds preset bots to New bot.","teamImport.addPresets":"Add presets","teamImport.presetList":"Preset bots (added to New bot)","teamImport.sharedTeamSafety":"Bots, pictures, shared instructions, the Chief of Staff, group chats, playbooks and starter notes are added. Skills arrive switched off and routines paused. Connections arrive without their keys; finish them in Apps → MCP servers. Chat history, keys and passwords, model choices and computers are never included.","noEngines.title":"Install a model provider to get started","noEngines.intro":"{app} doesn't ship a model of its own. Your bots run on an AI CLI installed on this computer, using your existing login. Set up any one of these and your bots come alive.","engines.cloud":"Cloud","engines.local":"Local","common.checkAgain":"Check again","common.checking":"Checking…","approval.someone":"Someone","approval.tool.action":"an action","approval.tool.runCommand":"run a command","approval.tool.readFile":"read a file","approval.tool.writeFile":"write a file","approval.tool.editFile":"edit a file","approval.tool.fetchWebPage":"fetch a web page","approval.tool.searchWeb":"search the web","approval.tool.scheduleRoutine":"schedule a routine","approval.tool.changeRoutine":"change a routine","approval.tool.enableSkill":"enable a learned skill","approval.tool.updateSkill":"update a learned skill","approval.tool.updateProfile":"update its profile","approval.tool.deleteFile":"delete a file","approval.tool.think":"think","approval.tool.takeAction":"take an action","approval.tool.useTool":"use a tool","approval.card.namedWantsTo":"{name} wants to {action}","approval.card.wantsTo":"Wants to {action}","approval.card.profileWantsToOwn":"{name} wants to update its profile","approval.card.profileWantsToOther":"{name} wants to update @{target}'s profile","approval.compact.wantsToRun":"{name} wants to run","approval.compact.maySend":"May send","approval.outbound.sendTo":"Send to {app}?","approval.outbound.sendOnBehalf":"Send on your behalf?","approval.outbound.runCode":"Run code on {app}?","approval.outbound.more":"+{count} more","approval.aria.routineDetails":"Routine details","approval.aria.skillDetails":"Skill details","approval.aria.profileChange":"Profile change","approval.aria.details":"Approval details","approval.status.routineScheduled":"Routine scheduled","approval.status.routineUpdated":"Routine updated","approval.status.routinePaused":"Routine paused","approval.status.routineResumed":"Routine resumed","approval.status.routineRunQueued":"Routine run queued","approval.status.routineDeleted":"Routine deleted","approval.status.skillEnabled":"Skill enabled","approval.status.skillUpdated":"Skill updated","approval.status.skillTurnedOn":"Skill turned on","approval.status.skillTurnedOff":"Skill turned off","approval.status.skillDeleted":"Skill deleted","approval.status.profileUpdated":"Profile updated","approval.status.routineConfirmed":"Routine confirmed","approval.status.skillConfirmed":"Skill confirmed","approval.status.allowed":"Allowed","approval.status.cancelled":"Cancelled","approval.status.denied":"Denied","approval.status.byVoice":"by voice","approval.status.byReaction":"by reaction","approval.status.expired":"Expired. Ask for a fresh proposal.","approval.status.timedOut":"No answer in time. It did not run","approval.status.waitingConfirmation":"Waiting for your confirmation below","approval.status.waitingAnswer":"Waiting for your answer below","approval.status.modelChanged":"Default model changed","approval.status.undone":"Undone","approval.applied.forBot":"for {target}","approval.applied.skill.create":"{name} added a skill: {title}","approval.applied.skill.update":"{name} updated a skill: {title}","approval.applied.skill.enable":"{name} turned on a skill: {title}","approval.applied.skill.disable":"{name} turned off a skill: {title}","approval.applied.skill.delete":"{name} deleted a skill: {title}","approval.applied.profileOwn":"{name} updated its profile: {title}","approval.applied.profileOther":"{name} updated {target}'s profile: {title}","approval.applied.modelOwn":"{name} changed its default model: {title}","approval.applied.modelOther":"{name} changed {target}'s default model: {title}","approval.applied.teamSetup":"{name} set up the team: {title}","approval.applied.teamAdded":"added {names}","approval.applied.teamUpdated":"updated {names}","approval.applied.botDeleted":"{name} deleted {target}","approval.applied.wait":"{name} is waiting for {title}","approval.applied.waitFired":"{name} finished waiting for {title}","approval.applied.waitExpired":"{name} stopped waiting for {title}","approval.applied.waitCancelled":"{name}'s wait for {title} was cancelled","approval.applied.teamMemory":"{name} saved to department memory: {title}","approval.applied.field.name":"name","approval.applied.field.title":"title","approval.applied.field.description":"description","approval.applied.field.soul":"standing instructions","approval.applied.field.cwd":"working folder","approval.applied.field.notifications":"alerts","approval.applied.field.speakReplies":"spoken replies","approval.applied.today":"today {time}","approval.applied.undo":"Undo","approval.applied.undoing":"Undoing…","approval.applied.undone":"Undone","approval.applied.details":"Details","approval.applied.hideDetails":"Hide details","approval.applied.changedSince":"Changed since, so it can't be undone here.","approval.applied.undoFailed":"Couldn't undo: {error}","approval.applied.cancelling":"Cancelling…","approval.applied.cancelFailed":"Couldn't cancel the wait. Try again, or ask {name} to stop it.","approval.applied.shareSkill":"Share with department","approval.applied.sharingSkill":"Sharing…","approval.applied.sharedSkill":"shared with {names}","approval.applied.sharedSkillNobody":"shared with the department","approval.applied.shareSkipped":"not shared with {names}: they have their own skill with this name","approval.applied.shareFailed":"Couldn't share: {error}","approval.aria.appliedDetails":"What changed","question.card.named":"{name} has a question","question.card.title":"Your bot has a question","question.showFull":"Show full question","question.showLess":"Show less","question.origin.badge":"Agent-composed question","question.tab.numbered":"Question {index}","question.progress":"{answered} of {count} answered","question.multiHint":"Choose all that apply","question.other":"Other","question.otherPlaceholder":"Type your own answer","question.submit":"Submit answer","question.submitAll":"Submit answers","question.status.answered":"Answered","question.status.waiting":"Waiting for your answer","question.status.closed":"Closed without an answer","question.decided.deciding":"{name} decides this","question.decided.picked":"Picked by {name}:","question.decided.own":"{name} picks this","question.decided.change":"Change","question.decided.answer":"Answer yourself","question.answerPlaceholder":"Type your answer","question.details":"Details","question.hideDetails":"Hide details","question.aria.card":"Question from your bot","question.aria.tabs":"Questions","question.somethingElse":"Something else…","ask.header.asks":"{name} asks","ask.settled.chose":"You chose:","ask.settled.answered":"You answered:","ask.settled.stopped":"Stopped before you answered","ask.settled.expired":"Expired before anyone answered","ask.error":"Couldn't send your answer. Try again.","ask.detail.more":"Show all","inbox.action.closeQuestion":"Close without answering","question.done":"Done","question.yourAnswer":"Your answer","approval.voice.defaultUpdateSkill":"Update this skill?","approval.voice.defaultEnableSkill":"Enable this skill?","approval.voice.actionUpdate":"update","approval.voice.actionEnable":"enable","approval.voice.skill":"{requester} asks: {title} Review the skill on screen. Should I {action} it?","approval.voice.defaultUpdateProfile":"Update this profile?","approval.voice.profile":"{requester} wants to update its profile: {title}. Review the change on screen. Should I confirm it?","approval.voice.command":"{requester} wants to {tool}. {detail}. Should I allow it?","approval.voice.defaultConfirmRoutine":"Confirm this routine?","approval.voice.routine":"{requester} asks: {title} Review the schedule and instructions on screen. Should I confirm it?","approval.label.updateSkill":"Update this learned skill","approval.label.enableSkill":"Enable this learned skill","approval.label.confirmProfileChange":"Confirm this profile change","approval.label.confirmRoutine":"Confirm this routine","approval.label.confirmRoutineChange":"Confirm this routine change","approval.label.commandRequested":"Command approval requested","approval.label.fileReadRequested":"File-read approval requested","approval.label.fileChangeRequested":"File-change approval requested","approval.label.requested":"Approval requested","approval.aria.pendingSkill":"Pending skill confirmation","approval.aria.pendingRoutine":"Pending routine confirmation","approval.aria.pendingProfile":"Pending profile confirmation","approval.aria.pending":"Pending approval","approval.pending":"Pending approval","approval.position":"{index} of {count}","approval.aria.reviewSkill":"Skill details to review","approval.aria.reviewRoutine":"Routine details to review","approval.aria.reviewProfile":"Profile change to review","approval.aria.reviewDetails":"Approval details to review","approval.action.cancelTurn":"Cancel turn","approval.action.cancel":"Cancel","approval.action.deny":"Deny","approval.action.stopAsking":"Stop asking {name} about {key}","approval.action.alwaysAllow":"Always allow","approval.action.alwaysAllowSession":"Always allow this session","approval.action.alwaysAllowSessionHint":"The provider stops asking about this action until the session ends","approval.action.alwaysAllowCommand":"Always allow this command","approval.action.alwaysAllowCommandHint":"Remember this exact command for this bot and provider in {cwd}, including other threads using that folder","commandAllowlist.title":"Command allowlist","commandAllowlist.manage":"Manage command allowlist","commandAllowlist.forBot":"Saved commands for {name}","commandAllowlist.scope":"Each rule allows one exact command for this bot, provider and working folder, including other threads using that folder. Rules stay saved until removed.","commandAllowlist.exact":"Enter the complete command. Prefixes and wildcards do not create broader permissions.","commandAllowlist.loading":"Loading allowed commands…","commandAllowlist.empty":"No commands saved yet.","commandAllowlist.unsupported":"This provider cannot use saved command approvals. You can still remove existing rules.","commandAllowlist.command":"Command","commandAllowlist.folder":"Working folder","commandAllowlist.provider":"Provider","commandAllowlist.add":"Add command","commandAllowlist.adding":"Adding…","commandAllowlist.remove":"Remove command","commandAllowlist.removeAria":"Remove allowed command: {command}","commandAllowlist.removing":"Removing…","commandAllowlist.retry":"Retry","commandAllowlist.close":"Close command allowlist","approval.action.update":"Update","approval.action.enable":"Enable","approval.action.confirm":"Confirm","approval.action.allowOnce":"Allow once","approval.yourComputer.browserSite":"I need to use your {app} where you're signed in to {site}. Allow once?","approval.yourComputer.browser":"I need to use your {app} where you're signed in. Allow once?","approval.yourComputer.site":"I need to use your browser where you're signed in to {site}. Allow once?","approval.yourComputer.app":"I need to use {app} on your computer. Allow once?","approval.yourComputer.screen":"I need to use your computer's screen for this. Allow once?","approval.yourComputer.detail":"{name} would see your screen and click and type on it, for this request only.","computerAsk.want.screen":"{name} wants to use your {device}'s apps and screen","computerAsk.want.folders":"{name} wants to use the files on your {device}","computerAsk.want.terminal":"{name} wants to run commands on your {device}","computerAsk.reason.paused":"Using your {device} is paused.","computerAsk.reason.starting":"Screen control is still starting on your {device}.","computerAsk.reason.permissions":"macOS hasn't allowed {app} to see and use the screen yet.","computerAsk.reason.blocked":"Screen control is blocked on your {device}.","computerAsk.reason.blockedPc":"Screen control is blocked on your PC: Windows Security may have stopped it.","computerAsk.reason.off":"Screen control is off on your {device}.","computerAsk.reason.notRunning":"Screen control isn't running on your {device}.","computerAsk.reason.unsupported":"Screen control can't work on your {device} right now.","computerAsk.reason.terminalOff":"Running commands isn't turned on for your {device}.","computerAsk.reason.closed":"{app} isn't open on your {device}. Open it there and {name} carries on.","computerAsk.reason.never":"{app} isn't on your computer yet. Install it, sign in to Limix Bot Cloud there, and {name} carries on.","computerAsk.reason.update":"{app} on your {device} needs an update first. Update it, and {name} carries on.","computerAsk.action.turnOn":"Turn on","computerAsk.action.tryAgain":"Try again","computerAsk.action.notNow":"Not now","computerAsk.action.getApp":"Get {app}","computerAsk.state.turningOn":"Turning on…","computerAsk.state.on":"Turned on. {name} is carrying on.","computerAsk.state.failed":"It didn't turn on.","computerAsk.state.declined":"Not now","computerAsk.state.ended":"No longer needed","approval.held.native":"The provider requires your approval for this action.","approval.held.sandbox":"This loosens the AI's own safety limits, so only Full access can approve it automatically.","approval.opaqueCode":"This runs code that could send or change things in your apps, so it always asks first.","approval.held.outbound":"This sends something on your behalf, so it asks you first.","approval.held.undeliveredFull":"Full access couldn't deliver this approval.","approval.held.undelivered":"Approve for me couldn't answer this one.","settings.title":"Settings","settings.search":"Search","settings.searchAria":"Search settings","settings.close":"Close settings","settings.license.expiring":"This installation's enterprise license expires on {date} ({days} day(s) left). Renew the key to keep enterprise features.","settings.license.grace":"This installation's enterprise license expired on {date}. Enterprise features keep working until {graceEnd}; renew the key before then.","settings.noMatch":"Nothing matches “{query}”","settings.section.general":"General","settings.section.desktopWorkspaces":"Servers","settings.section.organization":"Organization","settings.section.cloudAccount":"Limix Bot Cloud","cloudAccount.optional":"Limix Bot Cloud is optional. Free local use, your chats and your own model accounts remain available without signing in.","cloudAccount.separate":"Your personal Cloud account is separate from organization sign-in.","cloudAccount.desktopOnly":"Use Limix Bot Cloud in the local desktop app on this computer.","cloudAccount.loading":"Loading Cloud account…","cloudAccount.signIn":"Sign in to your Cloud plan","cloudAccount.browser":"Finish email-code sign-in and approve this computer in your browser. The app will connect automatically.","cloudAccount.codeCheck":"Check that your browser shows this code:","cloudAccount.codeUntil":"The code works until {time}.","cloudAccount.codeExpired":"The sign-in code expired. Choose Sign in to your Cloud plan to get a new one.","cloudAccount.pro":"{plan} active · verified by Limix Bot Cloud","cloudAccount.free":"No plan yet","cloudAccount.inactive":"{plan} · not active right now","cloudAccount.purchaseReceived":"{plan} · payment received","cloudAccount.purchaseNote":"Received {date}. We're linking it to this account, so there's no need to pay again.","cloudAccount.purchaseNoteNoDate":"We're linking your payment to this account, so there's no need to pay again.","cloudAccount.lastPlan":"{plan} · checking with Limix Bot Cloud…","cloudAccount.planName":"{plan} plan","cloudAccount.checking":"Checking with Limix Bot Cloud…","cloudAccount.attention":"Your plan is not active right now. Your Plan page shows why and how to fix it.","cloudAccount.otherEmail":"Bought a plan with a different email?","cloudAccount.useOtherEmail":"Sign out and use that email","cloudAccount.otherEmailOrTeam":"Bought a plan or joined a team with a different email?","cloudAccount.addOtherEmail":"Add that email","cloudAccount.upgrade":"Add a Cloud","cloudAccount.manage":"Manage Cloud subscription","cloudAccount.updatePayment":"Update payment in your browser","cloudAccount.dashboard":"Open your Plan page","cloudAccount.signInAgain":"Sign in again","cloudAccount.manageInBrowser":"Manage in your browser","cloudAccount.onCloud":"Your plan, as Limix Bot Cloud verified it for the app on your computer.","cloudAccount.onCloudHome":"Your plan, as Limix Bot Cloud verified it.","cloudAccount.onCloudNone":"Your plan is managed in the {app} app on your computer.","cloudAccount.teamPeopleTitle":"People and plan","cloudAccount.teamPeopleBody":"Invite people to {team}, change their roles and manage its plan on your Plan page. Sign in there with the email you use here.","cloudAccount.teamPeopleOpen":"Open your Plan page","cloudAccount.onCloudNoneHome":"Your plan is managed on your Plan page.","cloudAccount.onCloudSignIn":"This computer needs to sign in to Limix Bot Cloud again: choose Sign in again. Your plan is not affected.","cloudAccount.signOut":"Sign out of Limix Bot Cloud","cloudAccount.signoutTitle":"Sign out on this computer?","cloudAccount.signoutHelp":"This removes personal Cloud access from this computer. It does not cancel your subscription, disconnect your organization, or change local chats and model accounts.","cloudAccount.keep":"Keep signed in","cloudAccount.reauthExpired":"Your sign-in on this computer has ended (it lasts a set time). Sign in again to keep using the Cloud here. Your plan is not affected.","cloudAccount.reauthEnded":"This computer is no longer signed in to Limix Bot Cloud, for example because it was removed on your Plan page. Sign in again to use the Cloud here. Your plan is not affected.","cloudAccount.unavailable":"Limix Bot Cloud can't be reached right now, so this app can't check your plan. Nothing has changed with your plan; the app keeps trying.","cloudAccount.signoutLocalOnly":"Signed out on this computer. Limix Bot Cloud could not confirm it, so also remove this computer on your Plan page.","cloudAccount.storageFailed":"The saved Cloud sign-in could not be read or cleared. Choose Sign out of Limix Bot Cloud, then sign in again.","cloudAccount.restoreRetry":"This computer couldn't open its saved Cloud sign-in just now. The app tries again by itself, so there's nothing you need to do.","cloudAccount.restoreRetryKeychain":"This computer couldn't open its saved Cloud sign-in. Unlock your keychain, and the app tries again by itself.","cloudAccount.restoreRetryKeyring":"This computer couldn't open its saved Cloud sign-in. Unlock your system keyring, and the app tries again by itself.","cloudAccount.restoreRemoved":"This computer's Cloud sign-in couldn't be read, so it was removed. Sign in again.","cloudAccount.signinFailed":"Cloud sign-in ended or could not be completed. Start again on this computer.","cloudAccount.actionFailed":"Could not complete this Cloud action. Check your connection and try again.","cloudAccount.keepHere.title":"Keep this computer's bots on this computer","cloudAccount.keepHere.line":"This computer's bots, chats and automations stay here instead of moving to My Cloud.","cloudAccount.keepHere.confirmTitle":"Bring this computer's bots back here?","cloudAccount.keepHere.confirm":"This computer's bots come back from My Cloud with what they did there. Their automations run here again and stop on My Cloud, which keeps a copy of them. Your other computers don't change. The app opens again once they're here.","cloudAccount.keepHere.bringBack":"Bring them back","cloudAccount.keepHere.coming":"This computer's bots are on their way back from My Cloud.","cloudAccount.keepHere.failed":"The switch couldn't change. Try again.","cloudAccount.trialPlan":"{plan} free trial · verified by Limix Bot Cloud","cloudTrial.yourPlan":"your plan","cloudTrial.endsOn":"Your free trial ends on {date}","cloudTrial.active":"Then {plan} is {price}/month plus tax, charged on {date}. The Cloud keeps running, so there's nothing to do. To cancel, choose Manage subscription before then.","cloudTrial.activeNoPrice":"Then {plan} is charged monthly, plus tax, from {date}. The Cloud keeps running, so there's nothing to do. To cancel, choose Manage subscription before then.","cloudTrial.credit":"Includes {granted} of Claude credit: {left} left.","cloudTrial.preferPlan":"Prefer {plan} at {price}? Tell us from your Plan page before {date}, and we'll switch your plan.","cloudTrial.ending":"Renewal is off, so the Cloud stops then and its files are deleted on {date}.","cloudTrial.endingNoDate":"Renewal is off, so the Cloud stops then, and its files are deleted a few days later.","cloudTrial.cancelled":"Your subscription was cancelled, so the Cloud stops then and its files are deleted on {date}. To keep it, subscribe again once it has stopped.","cloudTrial.cancelledNoDate":"Your subscription was cancelled, so the Cloud stops then, and its files are deleted a few days later. To keep it, subscribe again once it has stopped.","cloudTrial.processingTitle":"Your first payment is processing","cloudTrial.processing":"The Cloud keeps running meanwhile, so there's nothing to do.","cloudTrial.lateTitle":"Your first payment is taking longer","cloudTrial.late":"The Cloud is paused until it goes through, and comes back by itself. Its files are kept until {date}.","cloudTrial.lateNoDate":"The Cloud is paused until it goes through, and comes back by itself.","cloudTrial.endedTitle":"Your free trial has ended","cloudTrial.ended":"The Cloud is stopped. Its files are kept until {date}, then deleted.","cloudTrial.endedNoDate":"The Cloud is stopped, and its files are deleted soon.","cloudTrial.manage":"Manage subscription","cloudTrial.subscribe":"Subscribe to keep it","cloudTrial.checkPayment":"Check payment status","cloudTrial.ok":"OK","cloudCancel.cancelTrial":"Cancel trial","cloudCancel.cancelPlan":"Cancel plan","cloudCancel.titleTrial":"Cancel your trial","cloudCancel.titlePlan":"Cancel your plan","cloudCancel.runsTrial":"Your trial runs until {date}.","cloudCancel.runsPlan":"Your plan runs until {date}.","cloudCancel.nothingCharged":"Cancel now and nothing is charged.","cloudCancel.noMoreCharges":"Cancel now and you won't be charged again.","cloudCancel.teamStops":"{team}'s Cloud stops then, for everyone in the team.","cloudCancel.question":"Before you go: what's the main reason?","cloudCancel.answer.feature":"Missing a feature","cloudCancel.answer.price":"Too expensive","cloudCancel.answer.setup":"Hard to set up","cloudCancel.answer.broken":"Didn't work as I expected","cloudCancel.answer.later":"Not using it right now","cloudCancel.answer.other":"Something else","cloudCancel.expected":"What did you expect Limix Bot to do?","cloudCancel.improve":"What could we have done better?","cloudCancel.optional":"(optional)","cloudCancel.talk":"Rather talk it through?","cloudCancel.book":"Book 30 minutes with Milind","cloudCancel.keep":"Keep my plan","cloudCancel.confirmTrial":"Cancel my trial","cloudCancel.confirmPlan":"Cancel my plan","cloudCancel.cancelling":"Cancelling…","cloudCancel.keeping":"Keeping…","cloudCancel.endedTrial":"Cancelled. Your trial ends on {date}, and nothing is charged.","cloudCancel.endedTrialNoDate":"Cancelled. Nothing is charged when your trial ends.","cloudCancel.endedPlan":"Cancelled. Your plan ends on {date}. You won't be charged again.","cloudCancel.endedPlanNoDate":"Cancelled. Your plan ends with the period you paid for. You won't be charged again.","cloudCancel.stops":"The Cloud stops then.","cloudCancel.keptDays":"Its files are kept {days} days, then deleted.","cloudCancel.keptDay":"Its files are kept 1 day, then deleted.","cloudCancel.keptHours":"Its files are kept {hours} hours, then deleted.","cloudCancel.keptNone":"Its files are deleted when it stops.","cloudCancel.thanks":"Thanks. Milind and Omkar read every answer, and we'll write back if it's something we can build.","cloudCancel.changedMind":"Changed your mind?","cloudCancel.done":"Done","cloudCancel.close":"Close","cloudCancel.browser":"The Cloud page's Billing opened in your browser. You can do it there.","cloudCancel.failed":"That didn't go through, and nothing changed. Try again in a minute.","cloudCredit.left":"Trial Claude credit: {left} of {granted} left. Cloud bots use it until you sign in there with your own Claude or ChatGPT account, or add an API key.","cloudCredit.usedUp":"Your {granted} trial Claude credit is used up. To keep your bots working, sign in with your own Claude or ChatGPT account in the Cloud, or add an API key there.","engines.trialCredit":"Included with your free trial. Cloud bots use it until you sign in with your own Claude or ChatGPT account, or add an API key.","engines.trialCreditOwn":"Your own AI is connected, so bots use it instead of the trial Claude credit.","engines.trialCreditUsedUp":"Your trial Claude credit is used up. Sign in with your own Claude or ChatGPT account, or add an API key, to keep your bots working.","engines.trialCreditEnded":"Trial Claude credit isn't available in the Cloud anymore. Sign in with your own Claude or ChatGPT account, or add an API key.","engines.trialCreditPaused":"Trial Claude credit is paused for now. Try again later, or sign in with your own Claude or ChatGPT account, or add an API key.","engines.trialCreditTooLow":"Your trial Claude credit has too little left for this chat. Start a new chat, or sign in with your own Claude or ChatGPT account, or add an API key.","chat.error.connectOwnAi":"Connect your own AI","cloudPhone.title":"Your phone","cloudPhone.subtitle":"Pair the phone app with the Cloud instead of this computer, and it keeps working when this computer is off.","cloudPhone.action":"Use the Cloud on your phone","cloudPhone.help":"Opens the Cloud in this window, at its phone pairing. Create a code there and scan it with the phone app.","cloudPhone.notReady":"The Cloud is not ready yet. Once it is, it takes two steps:","cloudPhone.stepsIntro":"You can also do it in two steps:","cloudPhone.failed":"Could not open the Cloud.","cloudPhone.step1":"Open My Cloud in this window: Server menu → My Cloud.","cloudPhone.step2":"Open the menu under your name, choose Connect your phone, and scan the code with the phone app.","cloudSend.list.skillOne":"1 skill","cloudSend.list.skills":"{count} skills","cloudSend.list.loginOne":"1 login","cloudSend.list.secretOne":"1 secret","cloudSend.list.logins":"{count} logins","cloudSend.list.secrets":"{count} secrets","cloudSend.list.onePassword":"1Password","cloudSend.list.settings":"your settings","cloudSend.list.botOne":"1 bot","cloudSend.list.changedBotOne":"changes to 1 bot","cloudSend.list.changedBots":"changes to {count} bots","cloudSend.list.bots":"{count} bots","cloudSend.list.chatOne":"1 chat","cloudSend.list.chats":"{count} chats","cloudSend.list.messageOne":"1 new message","cloudSend.list.messages":"{count} new messages","cloudSend.strip.retry":"Try again","cloudSend.strip.arrived":"{list} came over from This computer.","cloudSend.strip.allHere":"Everything from This computer is here.","cloudSend.strip.close":"Close","cloudSend.list.routineOne":"1 routine","cloudSend.list.routines":"{count} routines","cloudSend.result.held":"Your {key} key is saved on My Cloud. Your bots use it once the trial's Claude credit runs out.","cloudSend.move.copy":"Moving your bots to My Cloud…","cloudSend.move.copyChats":"Moving your bots to My Cloud… {done} of {total} chats","cloudSend.move.bringing":"Bringing this computer's bots to My Cloud…","cloudSend.move.bringingChats":"Bringing this computer's bots to My Cloud… {done} of {total} chats","cloudSend.move.waiting":"Moving your bots to My Cloud… waiting for {name} to finish","cloudSend.move.waitingAny":"Moving your bots to My Cloud… waiting for your bots to finish","cloudSend.move.waitingSignIn":"Moving your bots to My Cloud… waiting for a sign-in to finish","cloudSend.move.finishing":"Moving to My Cloud… almost done","cloudSend.move.checking":"Moving to My Cloud… checking that everything arrived","cloudSend.move.checkingChats":"Moving to My Cloud… checking {bots} bots' chats there, {percent}%","cloudSend.move.checkingChatsOne":"Moving to My Cloud… checking your bot's chats there, {percent}%","cloudSend.move.checkingFiles":"Moving to My Cloud… checking your bots' files there, {percent}%","cloudSend.move.checkingAttachments":"Moving to My Cloud… checking your chats' attachments there, {percent}%","cloudSend.move.slow":"My Cloud is slow to answer. Your move goes on from where it was at {time}.","cloudSend.move.queued":"Waiting for {name} to finish moving to My Cloud. Your bots move right after.","cloudSend.move.queuedAny":"Waiting for your other computer to finish moving to My Cloud. Your bots move right after.","cloudSend.choose.title":"Move your bots to My Cloud","cloudSend.choose.line":"Choose which bots move. The others stay on this computer and keep working here.","cloudSend.choose.everything":"Move everything","cloudSend.choose.moveSome":"Move {count} bots","cloudSend.choose.moveOne":"Move 1 bot","cloudSend.choose.search":"Search your bots","cloudSend.choose.selectAll":"Select all","cloudSend.choose.clear":"Clear","cloudSend.choose.none":"No bots match.","cloudSend.choose.more":"Show {count} more","cloudSend.choose.rooms":"A room moves when all of its bots do.","cloudSend.choose.failed":"Couldn't start the move. Try again.","cloudSend.choose.unclicked":"Choose which bots move.","cloudSend.botMove.menu":"Move to My Cloud","cloudSend.botMove.confirmTitle":"Move {bot} to My Cloud?","cloudSend.botMove.confirmBody":"{bot}'s chats, skills, memory and routines go with it, and it works on My Cloud from then on. Your other bots stay on this computer.","cloudSend.botMove.confirm":"Move","cloudSend.botMove.moving":"Moving {bot} to My Cloud…","cloudSend.botMove.movingMany":"Moving {count} bots to My Cloud…","cloudSend.botMove.done":"{bot} lives on My Cloud now.","cloudSend.botMove.doneMany":"{count} bots live on My Cloud now.","cloudSend.botMove.failed":"{bot} couldn't move to My Cloud yet. It's still here, and it tries again by itself.","cloudSend.botMove.failedMany":"{count} bots couldn't move to My Cloud yet. They're still here, and it tries again by itself.","cloudSend.botMove.open":"Open My Cloud","cloudSend.botMove.movedOne":"{bot} lives on My Cloud","cloudSend.botMove.movedMany":"{count} bots live on My Cloud","cloudSend.move.updating":"My Cloud is updating. Your move starts when it's done.","cloudSend.move.failing":"Your bots couldn't move to My Cloud yet: {error}","cloudSend.move.failingPlain":"Your bots couldn't move to My Cloud yet.","cloudSend.move.copyNamed":"Moving your bots to {place}…","cloudSend.move.copyChatsNamed":"Moving your bots to {place}… {done} of {total} chats","cloudSend.move.waitingNamed":"Moving your bots to {place}… waiting for {name} to finish","cloudSend.move.waitingAnyNamed":"Moving your bots to {place}… waiting for your bots to finish","cloudSend.move.waitingSignInNamed":"Moving your bots to {place}… waiting for a sign-in to finish","cloudSend.move.finishingNamed":"Moving to {place}… almost done","cloudSend.move.checkingNamed":"Moving to {place}… checking that everything arrived","cloudSend.move.checkingChatsNamed":"Moving to {place}… checking {bots} bots' chats there, {percent}%","cloudSend.move.slowNamed":"{place} is slow to answer. Your move goes on from where it was at {time}.","cloudSend.move.updatingNamed":"Update Limix Bot on {place}. Your bots move there once it's updated.","cloudSend.move.failingNamed":"Your bots couldn't move to {place} yet: {error}","cloudSend.move.failingPlainNamed":"Your bots couldn't move to {place} yet.","cloudSend.move.done":"Everything from this computer is here: {list}.","cloudSend.move.doneAll":"Everything from this computer is here.","cloudSend.move.doneLeft":"Everything else from this computer is here. These stayed on it:","cloudSend.move.stayedNeeds":"{name}: it needs {program}, which isn't here, so bots here can't use it.","cloudSend.move.stayedHere":"{name}: it only works on that computer, so bots here can't use it.","cloudSend.move.phone":"Pair your phone with My Cloud","cloudSend.move.homeAgain":"My Cloud has ended, so your bots are back on this computer. What you did on My Cloud is on its way back too.","cloudSend.move.back":"My Cloud has ended, so your bots are back on this computer, with what you did on My Cloud. Logins and keys you added on My Cloud didn't come back: add them here again if you need them.","cloudSend.move.backLost":"My Cloud has ended, so your bots are back on this computer as they were when they moved. What you did on My Cloud since couldn't come back.","cloudSend.move.backGone":"The Cloud your bots moved to has ended, so they're back on this computer as they were when they moved. Their automations are off: switch on the ones you want.","cloudSend.move.elsewhere":"Your bots came back to {name}. This computer keeps its copy from {date}, with automations off.","cloudSend.move.elsewhereEmpty":"Your bots came back to {name}.","cloudSend.move.keeping":"Bringing this computer's bots back from My Cloud…","cloudSend.move.keepingUpdating":"My Cloud is updating. This computer's bots come back once it's done.","cloudSend.move.kept":"This computer's bots are back here, and their automations run on this computer. My Cloud keeps a copy of them with their automations off.","files.title":"Files","files.shared.title":"Shared with the Cloud","files.shared.help":"Cloud bots can use these folders, even when this computer is off. They change files here only in folders you let them edit.","files.empty":"Nothing shared yet.","files.add":"Add a folder","files.more":"More for {name}","files.openHere":"Open on this computer","files.stop":"Stop sharing","files.stop.title":"Stop sharing “{name}”?","files.stop.body":"The Cloud's copy moves to its trash for 30 days. Nothing on this computer changes.","files.status.synced":"Up to date","files.status.copying":"Copying… {done} of {files}","files.status.waiting":"Waiting for room in the Cloud","files.status.deletes":"{count} files were removed from this folder here. Remove them from the Cloud too?","files.status.deletesOne":"1 file was removed from this folder here. Remove it from the Cloud too?","files.status.missing":"Can't find this folder. Was it moved?","files.status.keptBoth":"Kept both versions of “{file}”: yours, and the bot's as “{copy}”.","files.status.problem":"Something went wrong with this folder. Check that it still exists, then try again.","files.moreSpace":"Get more space","files.deletes.remove":"Remove from the Cloud","files.deletes.keep":"Keep them","files.locate":"Find it","files.count":"{count} files","files.countOne":"1 file","files.countMore":"More than {count} files","files.share.title":"Share “{name}” with the Cloud?","files.share.body":"{size}. The Cloud keeps a copy and updates it when you change files here. Cloud bots can read it.","files.share.confirm":"Share","files.refusal.tooBroad":"That folder is too big to share. Choose a folder inside it, like one in Documents.","files.refusal.appData":"That's Limix Bot's own folder. Choose another one.","files.refusal.alreadyShared":"This folder is already shared.","files.refusal.notAFolder":"Choose a folder.","files.refusal.notAFolderListed":"Not a folder on this computer.","files.refusal.private":"That folder holds private keys or settings, so it isn't shared. Choose another one.","files.refusal.other":"This folder can't be shared.","files.suggest.title":"Share these folders with the Cloud?","files.suggest.body":"The Cloud keeps a copy of each and updates it when you change files here. Cloud bots can read them.","files.ok":"OK","files.cancel":"Cancel","files.storage":"{used} of {total} used in the Cloud","files.almostFull":"The Cloud is almost full.","files.outputs.title":"Your bots' work","files.outputs.switch":"Save what Cloud bots make to this computer","files.outputs.help":"In Documents › Limix Bot, one folder for each bot.","files.outputs.open":"Open folder","files.offline":"The Cloud can't be reached right now. Files carry on when it's back.","files.asleep":"The Cloud is asleep. Files sync when it wakes.","files.signedOut":"Sign in to the Cloud again to keep sharing files.","files.unavailable":"Files works with Limix Bot Cloud.","files.openSettings":"Open Limix Bot Cloud settings","files.failed":"That didn't work. Try again.","files.failedWith":"That didn't work: {reason}","cloudHome.title":"Cloud","cloudPower.asleep":"The Cloud is asleep. It wakes in about a second when you use it.","cloudPower.wake":"Wake it now","cloudHome.provisioning":"Setting up the Cloud. This takes a few minutes; you can keep using this computer meanwhile.","cloudHome.ready":"The Cloud is ready. Your always-on bots live there, separate from the bots on this computer. Open it, then sign in there with your own Claude or ChatGPT account, or an API key.","cloudHome.readySleeps":"The Cloud is ready. It sleeps when idle and wakes when you or a schedule need it. Open it, then sign in there with your own Claude or ChatGPT account, or an API key.","cloudHome.stopped":"The Cloud is stopped. Subscribe again on your Plan page to start it; its files are kept for a while.","cloudHome.stoppedTrial":"The Cloud is stopped.","cloudHome.stoppedMember":"Ask its owner to start it again. Its files are kept for a while.","cloudHome.paymentProblem":"There is a problem with your payment. Update it on your Plan page to keep the Cloud running.","cloudHome.failed":"The Cloud could not be set up yet. It is being retried automatically; your Plan page shows the details.","cloudHome.failedRetry":"The Cloud could not be set up yet. Nothing was lost; it is tried again automatically at {time}, and your Plan page shows the details.","cloudHome.slow":"This is taking longer than usual. Setup is still going; you can keep using this computer meanwhile.","cloudHome.ended":"This Cloud has ended.","cloudHome.endedNamed":"{name} has ended.","cloudHome.endedFiles":"Its files are deleted on {date}.","cloudHome.buyAgain":"Buy again","cloudHome.checkout":"This checkout wasn't finished.","cloudHome.checkoutNamed":"The checkout for {name} wasn't finished.","cloudHome.continue":"Continue","cloudHome.payment":"This Cloud's payment didn't go through.","cloudHome.paymentNamed":"The payment for {name} didn't go through.","cloudHome.paymentBody":"Update your card to keep using it.","cloudHome.updateCard":"Update your card","cloudHome.tryAgain":"Try again","cloudHome.step.reserving":"Reserving your machine","cloudHome.step.storage":"Preparing storage","cloudHome.step.starting":"Starting the Cloud","cloudHome.step.checking":"Checking it's ready","cloudHome.connect":"Open the Cloud","cloudHome.connectHelp":"Opens the Cloud in this window. Switch back to This computer on the left of the app.","cloudHome.team.title":"Your team's Cloud","cloudHome.team.provisioning":"Setting up your team's Cloud. This takes a few minutes; you can keep using this computer meanwhile.","cloudHome.team.ready":"{name} is ready. It keeps your team's bots running 24/7, even when this computer is off.","cloudHome.filesLink":"Share folders with the Cloud in Files","cloudHome.connectFailed":"Could not open the Cloud. Try again in a moment.","cloudHome.waking":"Waking the Cloud…","cloudHome.unreachableHost":"Our hosting provider is restarting the machine the Cloud runs on. The Cloud and its files are safe, and it comes back on its own, usually within about 20 minutes.","cloudHome.unreachable":"The Cloud hasn't answered for a few minutes. Nothing was lost, and we've been told.","lending.activity.title":"Activity on this computer","lending.activity.empty":"Nothing yet. Every request from its bots will be listed here, including refused ones.","lending.activity.refused":"refused","lending.action.listFiles":"Listed a folder","lending.action.readFile":"Read a file","lending.action.writeFile":"Saved a file","lending.action.deleteFile":"Deleted a file","lending.action.runCommand":"Ran a command","lending.action.screenTools":"Checked the app and screen controls","lending.action.screen":"Used apps and screen","lending.action.website":"Opened a website","lending.action.chrome":"Used your Chrome","lending.action.invalid":"Malformed request","lending.action.other":"Other request","memory.lendingReview":"This bot's memory was changed in a conversation you didn't write, so it can't use your computer. Check the notes below, then mark them reviewed.","memory.lendingReviewed":"Mark reviewed","memory.lendingReviewChanged":"Changed:","memory.learnFromRooms.title":"Learn from group chats","memory.learnFromRooms.subtitle":"For every bot: also notice facts from the group chats a bot is in. Your own words count as yours; other bots' only when they're checked results or decisions you agreed to. A group chat fewer people can see than the bot never feeds its memory. Off by default.","memory.learnFromRooms.error":"Could not save the group chat setting.","memory.learnFromRooms.noModelSteps":"This bot's AI can't make the background model call this needs, so it won't learn anything from group chats.","memory.upkeep.noModelSteps":"This bot's AI can't make the quick background model call upkeep uses, so it only archives expired notes and merges exact duplicates.","memory.lendingReviewStale":"The memory changed again after you looked, so it can't use your computer yet. Check the notes below, then mark them reviewed.","cloudSignIn.title":"Connect an AI to the Cloud","cloudSignIn.intro":"The Cloud runs your bots with your own AI account. Choose one below; the sign-in stays in the Cloud.","cloudSignIn.limits":"Your AI plan's limits apply to bots that work around the clock. For heavy use, Anthropic's Claude Max plan or an API key works best.","cloudSignIn.claude":"Claude","cloudSignIn.claudeHint":"Use your Claude subscription.","cloudSignIn.keyHint":"Runs on your API key.","cloudSignIn.codex":"ChatGPT","cloudSignIn.codexHint":"Use your ChatGPT plan with Codex.","cloudSignIn.grok":"Grok","cloudSignIn.grokHint":"Use your grok.com subscription with Grok Build.","cloudSignIn.apiKey":"Use an API key","cloudSignIn.apiKeyHint":"Pay as you go with an OpenAI, Anthropic, xAI or OpenRouter key, in Settings → API keys.","cloudSignIn.missing":"This model provider isn't available in the Cloud yet.","cloudSignIn.creditUsedUp":"Your trial Claude credit is used up. Choose your own AI below to keep your bots working.","cloudSignIn.creditEnded":"Trial Claude credit isn't available in the Cloud anymore. Choose your own AI below to keep your bots working.","cloudSignIn.signedIn":"Already signed in?","cloudSignIn.or":"or","cloudSignIn.titleForJob":"Connect an AI to do it","cloudSignIn.introForJob":"The Cloud runs your bots with your own AI account. Pick one; the sign-in stays in the Cloud. Your job starts as soon as it's connected.","cloudSignIn.connected":"Connected. Starting your job…","cloudIntent.title":"What should the Cloud do while you're away?","cloudIntent.intro":"Describe a job. Your bot asks a few questions, then sets itself up and does it on its own, even when this computer is off.","cloudIntent.placeholder":"Every morning at 8, summarize the top Hacker News stories","cloudIntent.send":"Start setting it up","cloudIntent.notSure":"Not sure yet?","cloudIntent.skip":"Skip for now","cloudIntent.later":"You can come back to it any time from Set up Limix Bot Cloud.","cloudIntent.ideas":"Ideas to start from","cloudIntent.idea.digest":"News digest","cloudIntent.idea.digestText":"Every morning at 8, read the top stories on Hacker News and send me a short summary of the ones worth my time.","cloudIntent.idea.watch":"Watch a page","cloudIntent.idea.watchText":"Every hour, check a web page I give you and tell me as soon as something on it changes.","cloudIntent.idea.research":"Research roundup","cloudIntent.idea.researchText":"Every Monday at 9, search the web for news about my industry and send me the five things worth reading.","cloudIntent.idea.plan":"Plan my day","cloudIntent.idea.planText":"Every weekday at 7:30, look at what I asked you to keep track of and send me a short plan for the day.","cloudIntent.pending":"The Cloud's first job","cloudIntent.edit":"Edit","cloudSetup.title":"Set up Limix Bot Cloud","cloudSetup.progress":"{done} of {total} done","cloudSetup.hide":"Hide setup","cloudSetup.collapse":"Minimize setup","cloudSetup.expand":"Show setup steps","cloudSetup.stepDone":"Done","cloudSetup.stepTodo":"Not done yet","cloudSetup.cloud.title":"Create the Cloud","cloudSetup.job.title":"Give it a first job","cloudSetup.job.hint":"Say what it should do while you're away. Your bot asks a few questions, then sets itself up.","cloudSetup.job.action":"Give it a job","cloudSetup.plan.title":"Approve its plan","cloudSetup.plan.hint":"Your bot asks a few questions in the chat, then proposes a routine. This ticks once you approve it.","cloudSetup.plan.action":"Open the chat","cloudSetup.onScreen":"You're on this step","cloudSetup.working":"Your bot is setting itself up in the chat. Answer its questions there.","cloudSetup.skipped":"Skipped","cloudSetup.engine.title":"Connect your AI","cloudSetup.engine.hint":"Required. Cloud bots use your own Claude or ChatGPT account, or an API key.","cloudSetup.engine.action":"Connect","cloudSetup.ready.title":"The Cloud is ready","cloudSetup.ready.body":"Your bots keep running in the Cloud, even when this computer is off.","cloudSetup.ready.done":"Done","cloudSetup.ready.runs":"runs {when}.","cloudSetup.ready.today":"today at {time}","cloudSetup.ready.tomorrow":"tomorrow at {time}","cloudSetup.ready.on":"on {day} at {time}","cloudSetup.ready.runNow":"Run it now","cloudSetup.ready.running":"Running now","cloudSetup.ready.runFailed":"It could not start just now. It still runs on schedule.","cloudSetup.ready.later":"Wait for the schedule","cloudSetup.myCloud":"My Cloud","cloudSetup.alwaysOn":"always on","cloudSetup.sleepsWhenIdle":"sleeps when idle","cloudWelcome.title":"Welcome to {name}","cloudWelcome.intro":"A few quick steps and your bots work around the clock.","cloudWelcome.steps":"Setup steps","cloudWelcome.skip":"Skip setup","cloudWelcome.step.bring":"Bring your stuff","cloudWelcome.step.bringHint":"Your bots and chats","cloudWelcome.step.engineHint":"Claude or ChatGPT","cloudWelcome.step.files":"Files and apps","cloudWelcome.step.filesHint":"Optional","cloudWelcome.bring.title":"What should {name} start with?","cloudWelcome.bring.sub":"Bots on your computer come here by themselves from the {app} app.","cloudWelcome.bring.subTeam":"Your own bots stay on your computer. {name} starts with bots of its own that everyone in the team can use.","cloudWelcome.bring.subTeamShared":"{name} is your team’s: its bots are shared with everyone in {name}, and your own bots stay where they are.","cloudWelcome.bring.fresh":"Start fresh","cloudWelcome.bring.freshHint":"Pick a ready-made team from the library, or start with one bot and build your own.","cloudWelcome.bring.chooseTeam":"Choose a team","cloudWelcome.bring.freshChief":"Start with your assistant. It brings in specialists when a job needs them.","cloudWelcome.bring.desktopTitle":"Everything from your computer","cloudWelcome.bring.desktopOnly":"Open the desktop app to bring your bots from your computer.","cloudWelcome.bring.update":"Update {app} to bring your bots here by itself.","cloudWelcome.bring.hereTitle":"Your bots are already here","cloudWelcome.bring.hereBody":"{name} already has bots or chats of its own.","cloudWelcome.bring.sending":"Bringing this computer's bots, chats and logins here…","cloudWelcome.bring.more":"More","cloudWelcome.bring.myCloudTitle":"Move a bot here from My Cloud","cloudWelcome.bring.myCloudHint":"You'll see what goes and what stays before anything moves.","cloudWelcome.bring.move":"Move","cloudWelcome.bring.mausBotStays":"Stays on My Cloud: everyone on a team gets their own","cloudWelcome.bring.moveFailed":"Couldn't move {bot}. It's still on My Cloud, unchanged.","cloudWelcome.engine.sub":"Your bots think with your own Claude or ChatGPT plan. Sign in once on {name}.","cloudWelcome.engine.credit":"You have {amount} of Claude credit, so your bots can start right now. Sign in whenever you're ready.","cloudWelcome.engine.creditPlain":"Your trial comes with Claude credit, so your bots can start right now. Sign in whenever you're ready.","cloudWelcome.engine.useCredit":"Use my credit for now","cloudWelcome.engine.connected":"Connected","engineCheck.checking":"Sending {name} a short test message…","engineCheck.working":"{name} is working","engineCheck.failed":"{name} is connected but didn't answer a test message.","engineCheck.retry":"Test again","cloudWelcome.files.title":"Files and apps","cloudWelcome.files.optional":"optional","cloudWelcome.files.sub":"Give your bots what they need to work while you're away.","cloudWelcome.files.folders":"Share folders","cloudWelcome.files.foldersDesktop":"Bots on {name} can read folders you share from your computer, even when it's off. Share them from the desktop app, under Files.","cloudWelcome.files.foldersLent":"Bots on {name} use the files on this computer by themselves while it's awake and {app} is open. There's nothing to set up.","cloudWelcome.files.apps":"Connect apps","cloudWelcome.files.appsHint":"Gmail, Slack, Notion and more. Connections are per Cloud, so connect them here.","cloudWelcome.files.appsAction":"Connect apps","cloudWelcome.files.finish":"Finish","cloudWelcome.invite.title":"Invite people to {name}","cloudWelcome.invite.body":"{name} is better with your team in it. Invite them by email on Limix Bot Cloud: they can open it in their browser right away.","cloudWelcome.invite.action":"Invite people","cloudWelcome.done.title":"{name} is ready","cloudWelcome.done.body":"Your bots now run 24/7. Close your laptop whenever you like.","cloudWelcome.done.chief":"Say hi to your Chief of Staff","cloudWelcome.done.bot":"Say hi to {name}","cloudWelcome.compact.bring":"Bring your bots, chats and memory, or start fresh.","cloudWelcome.compact.files":"Optional. Share folders and connect the apps your bots use.","cloudWelcome.compact.continue":"Continue setup","organization.additive":"Company models are added alongside your existing personal and local models. Those models and accounts stay available.","organization.privacy":"Connecting does not upload your chat history. Requests sent to Company models go through your organization’s gateway.","organization.desktopOnly":"Connect an organization in the desktop app on this computer.","organization.loading":"Loading organization connection…","organization.loadFailed":"Could not load the organization connection. Try Refresh.","organization.actionFailed":"Could not complete this action. Refresh the connection and try again.","organization.signInHelp":"Use your work email to sign in securely in your browser.","organization.address":"Custom Admin portal URL","organization.signIn":"Sign in with your organization","organization.working":"Opening browser…","organization.advanced":"Advanced","organization.advancedHelp":"Only use a custom address if your organization gave you one.","organization.browserConsent":"Finish signing in through your browser. {app} will connect automatically when you’re done.","organization.customSignIn":"Sign in to custom Admin","organization.securityDetails":"Security details","organization.securityDetailsHelp":"You can compare this code with the one shown in your browser.","organization.code":"Verification code","organization.cancel":"Cancel sign-in","organization.reauth":"Company access needs a new sign-in. Disconnect below, then sign in again. Personal and local models are still available.","organization.modelHelp":"Choose a Company entry in the model picker to use organization access. Company model access is managed by your organization.","organization.managedEngine":"This Company connection is managed by your organization. To refresh or disconnect it, open Settings → Organization. Your personal provider accounts are separate.","organization.engineUnavailable":"Company access is unavailable. Check your organization connection and the matching personal model provider’s installation; do not sign in to a personal account here.","organization.modelCount":"Approved models: {count}","organization.notConfigured":"Not configured","organization.noModels":"No company models are available yet. Ask your organization administrator to configure access.","organization.disconnectTitle":"Disconnect organization?","organization.disconnectWarning":"This removes Company access from this computer and stops running Company turns. Your chats, personal accounts, and local models remain. Company turns will not switch to personal billing. Daily backups pause, and resume only if you reconnect the same organization with the same account.","organization.keepConnection":"Keep connection","organization.disconnectConfirm":"Disconnect from organization","organization.disconnect":"Disconnect…","organization.refresh":"Refresh","organization.unavailable":"Organization access is currently unavailable. Your personal and local models are unchanged.","organization.expires":"Expires {date}","policy.managedBy":"Managed by {organization}","policy.modelBlocked":"Bots cannot use this model provider while this computer is connected to {organization}.","policy.mcpRestricted":"Managed by {organization}: only MCP servers your organization has approved reach bots.","policy.mcpBlocked":"Not approved by {organization}; bots do not get this server.","policy.remoteBlocked":"Managed by {organization}: remote access to this computer is turned off.","policy.teamModelBlocked":"{organization} doesn't let bots use this AI. Choose another, or ask a team admin.","policy.teamRemoteBlocked":"Managed by {organization}: opening this Cloud on a phone is turned off. Ask a team admin.","organization.licenseExpired":"Your organization's Limix Admin license has expired. Contact your admin.","organization.companyModelsUnavailable":"Unavailable until the licence is renewed","organization.reopen":"Open the sign-in page again","organization.engineReady":"Ready on this computer","organization.engineInstallHelp":"Company models from this provider run through the {engine} app on this computer, using your organization’s access. Install it once; you don’t need to sign in to a personal account.","organization.useCompanyOne":"Use {name} for 1 bot that can’t run","organization.useCompanyMany":"Use {name} for {count} bots that can’t run","organization.useCompanyBots":"Can’t run now: {names}","organization.useCompanyNote":"Only bots whose model provider is missing, unavailable, signed out or not allowed by your organization change. Archived bots and bots that work on a personal model provider your organization allows stay as they are. To undo, use the bot’s model chip.","organization.useCompanyElevated":"Switch these from their model chip, because they use elevated permissions: {names}","organization.useCompanyDone":"Now using {name}: {names}. To undo, use the bot’s model chip.","settings.section.appearance":"Appearance","settings.section.experimental":"Experimental","settings.section.connections":"API keys","settings.section.decisionModel":"Decision and extraction","settings.section.engines":"Model providers","settings.section.companion":"Remote access","settings.section.computer":"Bot desktops","settings.section.vault":"Vault","settings.section.usage":"Usage","settings.section.people":"People","settings.section.activity":"Activity","settings.section.workspaces":"Installations","settings.profile.title":"Profile","settings.profile.subtitle":"Shown in the sidebar. Saved as you go.","settings.profile.sharedSubtitle":"Your details and shared context. Saved as you go.","settings.profile.name":"Your name","settings.profile.avatar.choose":"Choose photo","settings.profile.avatar.uploading":"Uploading…","settings.profile.avatar.remove":"Remove photo","settings.profile.avatar.cropTitle":"Adjust your photo","settings.profile.avatar.zoom":"Zoom","settings.profile.avatar.cancel":"Cancel","settings.profile.avatar.save":"Save photo","settings.profile.avatar.saveError":"Could not save this photo.","settings.profile.avatar.invalidType":"Choose a PNG, JPEG, GIF, or WebP image.","settings.profile.avatar.tooLarge":"The photo must be 10 MB or smaller.","settings.profile.avatar.tooSmall":"The photo must be at least 64 × 64 pixels.","settings.profile.avatar.tooLargeDimensions":"The photo must be no larger than 8192 × 8192 pixels.","settings.profile.aboutMe":"About me","settings.profile.aboutMeHelp":"Shared with every bot in private and group chats. Saved automatically.","settings.profile.awayEmails":"Email me when I'm away","settings.profile.awayEmailsHelp":"One email when a teammate mentions you, a bot is waiting on your answer, or work you asked for finishes while you're not in the app. It never includes what anyone wrote.","settings.profile.awayEmailsError":"That didn't save. Try again.","settings.profile.everyBotRules":"Rules for every bot","settings.profile.everyBotRulesPlaceholder":"Every bot follows these. A bot's own instructions win where they differ.","settings.profile.saving":"Saving…","settings.profile.saved":"Saved","settings.profile.saveError":"Could not save. Your changes are still here.","settings.profile.retry":"Retry","settings.profile.learned.title":"Added by your bots","settings.profile.learned.hint":"Facts your bots learned about you from your own messages. Every bot reads About me; remove anything that's wrong and it won't be added again.","settings.profile.learned.from":"from {name}","settings.profile.learned.remove":"Remove","settings.profile.learned.error":"Could not update About me. Try again.","settings.theme.title":"Theme","settings.theme.lightOrDark":"Light or dark","settings.theme.subtitle":"Follow your computer, or keep it light or dark.","settings.theme.look":"Using the {name} look. Pick one to switch back.","settings.theme.system":"System","settings.theme.light":"Light","settings.theme.dark":"Dark","settings.skin.title":"Skin","settings.skin.subtitle":"Applies instantly and is remembered on this machine.","settings.skin.dressUp.title":"Dress my bots up","settings.skin.dressUp.subtitle":"Each bot dresses up for the festival while this skin is on. Their usual look comes back when you change skins.","settings.chatWidth.title":"Chat width","settings.chatWidth.subtitle":"How wide message bubbles can grow on this machine. Wide and Full width use more of a large window.","settings.chatWidth.aria":"Chat width","settings.chatWidth.standard":"Standard","settings.chatWidth.wide":"Wide","settings.chatWidth.full":"Full width","settings.font.title":"Interface font","settings.font.subtitle":"Overrides the skin's font on this machine. Poppins is used when it is installed.","settings.font.aria":"Interface font","settings.font.skin":"Skin default","settings.font.system":"System","settings.font.inter":"Inter","settings.font.poppins":"Poppins","settings.font.serif":"Serif","settings.sendKey.title":"Send messages with","settings.sendKey.subtitle":"Choose Shift+Enter or {key} so Enter starts a new line instead, handy when your input method confirms text with Enter, as Japanese input does. {key} sends whichever you choose. On this device only.","settings.followUp.title":"Sending while a bot works","settings.followUp.steer":"Steer it into the running turn","settings.followUp.queue":"Queue it for after the turn","settings.followUp.subtitle":"Steering adds your message to what the bot is doing now; queueing runs it once the turn ends. {key} does the other one for a single message, and the arrow beside Send can also restart the turn. On this device only.","settings.userBubbles.title":"Color my messages","settings.userBubbles.simpleTitle":"Use the bot's color for my messages","settings.userBubbles.subtitle":"In a one-to-one chat, your messages are filled with a gradient of that bot's color. Rooms keep the neutral bubble.","settings.userBubbles.aria":"Color my messages with the bot's color","settings.advancedMode.title":"Advanced mode","settings.advancedMode.subtitle":"Show every technical control on this device: usage and tokens, the inspector and other tools for builders. Turn it off for a simpler app. Nothing is deleted either way.","settings.threadDisplay.title":"Threads","settings.threadDisplay.subtitle":"Show thread lists and controls on this device only. Hiding them keeps all conversation history and running work; channels are unchanged. Turn this back on to access your threads again.","settings.threadDisplay.show":"Show threads","settings.runCard.title":"This run","settings.runCard.subtitle":"Show a list of the shell commands a bot ran for your current request. Turn it off to hide the card and its shortcut for saving the run as a skill.","settings.runCard.show":"Show the run card","settings.pinnedCircles.title":"Pinned bots as circles","settings.pinnedCircles.subtitle":"Show pinned bots as large avatars, like Grok Bot. Widening the sidebar fits more on each row.","settings.universalPins.title":"Universal pins","settings.universalPins.subtitle":"Keep pinned bots from every group at the top of the sidebar, including a group's chief. They stay there while the rest of the list scrolls.","settings.notificationSounds.title":"Notification sounds","settings.notificationSounds.subtitle":"Play this computer's alert sound when an agent finishes or needs you. Turn it off to keep the banners but lose the chime (handy on a call, where the agent is already talking to you).","settings.notificationSounds.play":"Notification sounds","settings.deviceNotifications.title":"Notifications on this device","settings.deviceNotifications.subtitle":"Show a notification here when a bot finishes, while this app is open. Approvals, questions and warnings always show.","settings.deviceNotifications.blocked":"Notifications are blocked for this site. Allow them in your browser's site settings.","settings.deviceNotifications.show":"Notify me when a bot finishes","settings.notificationFeed.title":"Notification feed","settings.notificationFeed.subtitle":"Show a bell on the right edge of the window that keeps the last 500 notifications from every bot, read or not.","settings.notificationFeed.show":"Show the notification feed","notifications.title":"Notifications","notifications.railUnread":"Notifications, {count} unread","notifications.unread":"{count} unread","notifications.markAllRead":"Mark all read","notifications.pin":"Pin Notifications open","notifications.unpin":"Unpin Notifications","notifications.close":"Close Notifications","notifications.filter":"Filter notifications by bot","notifications.allBots":"All bots","notifications.empty":"Nothing yet.","notifications.emptyForBot":"No notifications for this bot.","notifications.retention":"Last 500 events, newest first","notifications.status.done":"Done","notifications.status.problem":"Problem","notifications.status.approval":"Approval","notifications.status.question":"Question","notifications.status.signIn":"Sign-in","notifications.status.secret":"Password or key","notifications.status.mention":"Mention","notifications.status.failed":"Failed","notifications.status.deferred":"Deferred","notifications.status.spend":"Spend","notifications.status.brief":"Brief","notifications.status.notice":"Notice","settings.roomTurns.title":"Group turns","settings.roomTurns.subtitle":"Stop a bot's turn in a group when it shows no progress for this long. A conversation can choose its own.","settings.roomTurns.label":"Stop after no progress for","settings.roomTurns.minutes":"minutes","settings.roomTurns.help":"Applies to every bot turn in a group, unless that conversation sets its own limit. A turn keeps going while the bot is working. Direct threads use the inactivity watchdog instead.","settings.roomTurns.error":"Could not save the group turn limit.","settings.roomTurns.range":"Enter a whole number from 1 to 1,440.","settings.mcpCalls.title":"Tool time limit","settings.mcpCalls.subtitle":"How long a bot may wait for one tool from your MCP servers.","settings.mcpCalls.label":"Maximum call length","settings.mcpCalls.minutes":"minutes","settings.mcpCalls.help":"Applies to every tool a bot uses from your MCP servers. A tool that runs past the limit is stopped, and the bot is told it may not have finished.","settings.mcpCalls.error":"Couldn't save the time limit. Try again.","settings.mcpCalls.range":"Enter a whole number from 1 to 60.","settings.language.title":"Language","settings.language.subtitle":"The app follows your system language unless you pick one here. Only part of the interface is translated so far. Untranslated text stays in English.","settings.language.system":"System","settings.language.aria":"App language","settings.language.error":"Could not save the language.","settings.newBotEffort.title":"Effort for new bots","settings.newBotEffort.subtitle":"How hard every new bot thinks from its first message. A bot can change its own level; model providers without this level keep their default.","settings.newBotEffort.default":"Provider default","settings.newBotEffort.aria":"Effort for new bots","settings.newBotEffort.error":"Could not save the effort for new bots.","settings.toolCalls.title":"Tool calls","settings.toolCalls.subtitle":"Show each tool a bot runs in the transcript. Off by default, since the mascot already shows that work is happening.","settings.toolCalls.show":"Show tool calls","settings.toolCalls.detail":"Named chips for Bash, search, and other tools. Errors and bot-to-bot messages still appear.","settings.toolCalls.aria":"Show tool calls in chat","settings.toolCalls.error":"Could not save the tool-call setting.","settings.updates.title":"Updates","settings.updates.checking":"Checking…","settings.updates.downloading":"Downloading {percent}%","settings.updates.ready":"{app} {version} is ready. Restart the app to apply it.","settings.updates.failed":"Update failed: {message}","settings.updates.unknownError":"unknown error","settings.updates.latest":"You're on the latest version we know of.","settings.updates.restart":"Restart and install","settings.updates.check":"Check for updates","settings.diagnostics.title":"Diagnostics","settings.diagnostics.subtitle":"Versions, which settings are on or off, and the end of the app's logs with secrets removed. Review the file before sharing it.","settings.diagnostics.aria":"Export diagnostics to a text file","settings.diagnostics.export":"Export Diagnostics…","settings.diagnostics.exporting":"Exporting…","settings.diagnostics.saved":"Saved to {path}","settings.diagnostics.openLogs":"Open logs folder","settings.diagnostics.logsAt":"Logs are in {folder}.","settings.diagnostics.openFailed":"Could not open the logs folder. It is {folder}.","settings.diagnostics.logsHelp":"Logs stay on this computer. Export Diagnostics saves their most recent part with keys, passwords and sign-ins removed, ready to send to support.","settings.diagnostics.elsewhere":"Logs are kept where {app} runs. To open or export this computer's, use Settings in the desktop app on it. Limix Bot Cloud support can read the Cloud's.","settings.savedSteps.title":"Repeat computer tasks without AI","settings.savedSteps.subtitle":"When you ask a bot for a computer task it has done before, it repeats the saved steps instead of asking the AI. Off stops saving and repeating.","settings.savedSteps.aria":"Repeat computer tasks without AI","settings.savedSteps.error":"Couldn't change this setting. Try again.","settings.analytics.title":"Usage analytics","settings.analytics.subtitle":"Anonymous product events and a once-a-day count of what's set up: which providers have a key (never the key) and how many bots, rooms, routines and computers. Never conversations, prompts, file contents, names or addresses. Your email is only attached if you shared it during setup, or if you choose upgrade, manage or compare plans on the Cloud Pro popup while signed in to Limix Bot Cloud (your Cloud account's email).","settings.analytics.link":"See everything it sends","settings.analytics.aria":"Send usage analytics","settings.talk.title":"Talk to Limix Bot from any app","settings.talk.subtitle":"Hold {key}, speak, let go. Limix Bot answers in a small box at the bottom of the screen; click it to open the chat.","settings.talk.aria":"Talk to Limix Bot from any app","settings.talk.keyAria":"Talk shortcut","settings.talk.taken":"{key} is used by another app. Pick another shortcut.","settings.talk.failed":"Could not change this. Try again.","updatesConsent.title":"Get Limix Bot updates?","updatesConsent.body":"We'll email you about new features and tips, about twice a month. You can unsubscribe any time.","updatesConsent.yes":"Yes, send me updates","updatesConsent.no":"No thanks","updatesConsent.email":"Your email","updatesConsent.emailHint":"Optional. Leave it empty and we'll use your Limix Bot Cloud email once you sign in.","updatesConsent.badEmail":"Enter a valid email address.","updatesConsent.failed":"That didn't save. Try again.","simpleModePrompt.title":"Try the new Simple mode","simpleModePrompt.titleOn":"You're on Simple mode","simpleModePrompt.body":"A calmer screen, with every feature still there.","simpleModePrompt.switch":"Simple mode","simpleModePrompt.switchHint":"Flip it to see the difference right away.","simpleModePrompt.where":"Switch any time in Settings → General.","newLook.title":"{app} has a simpler look","newLook.body":"Everything you need is still here; rarer settings are under Settings → More settings.","advancedBack.title":"Advanced mode is back","advancedBack.body":"This device is on Advanced mode again. Turn it off any time in Settings → General.","settings.openAtLogin.title":"Open at login","settings.openAtLogin.subtitle":"Open {app} when you sign in to this computer, so your bots and routines are ready without opening it yourself.","settings.openAtLogin.failed":"Could not change this. Try again, or check Login Items in your system settings.","settings.updatesConsent.title":"Product updates by email","settings.updatesConsent.subtitle":"New features and tips, about twice a month. You can unsubscribe any time.","settings.updatesConsent.to":"Sent to {email}.","settings.updatesConsent.aria":"Get product updates by email","settings.updates.startingDownload":"Starting download…","settings.updates.preparing":"Download complete. macOS is preparing the update.","settings.updates.readyInstall":"{app} {version} is ready. Install it in a terminal.","settings.updates.openingTerminal":"Opening a terminal…","settings.updates.restarting":"Restarting to update…","settings.updates.handedOff":"Command copied. Finish the update in your terminal.","settings.updates.quitReopen":"Quit and reopen the app","settings.updates.install":"Install","settings.updates.preparingShort":"Preparing…","settings.updates.opening":"Opening…","settings.updates.restartingShort":"Restarting…","update.button.ready":"Update ready: {app} {version}","update.button.preparing":"Preparing the update","update.button.downloadingStart":"Downloading an update","update.button.downloading":"Downloading an update, {percent}%","update.card.title":"Update available","update.card.current":"you have {version}","update.card.whatsNew":"What's new","update.card.allNotes":"All release notes","update.card.progress":"Download progress","update.card.downloadingStart":"Starting download…","update.card.downloading":"Downloading {percent}%","update.card.downloadingNote":"It downloads in the background. You can keep working.","update.card.restart":"Restart to update","update.card.restartNote":"{app} closes and reopens in a moment. Your chats and bots stay as they are.","update.card.handoffNote":"The install command is copied and a terminal opens to finish it.","update.card.tryAgain":"Try again","update.card.failed":"The update did not finish.","update.card.later":"Later","update.card.close":"Close","update.card.idleNote":"Restart now, or leave it: {app} installs it by itself the next time you're away and nothing is running.","update.updatedItself":"{app} updated itself to {version}.","common.save":"Save","common.saved":"Saved","common.cancel":"Cancel","common.ok":"OK","common.close":"Close","common.copyFailed":"Could not copy","team.create":"Create department","team.name":"Department name","team.closeDialog":"Close department dialog","team.duplicate":"A department with that name already exists. Use Move bots on its department card.","team.moveIntro":"Choose existing bots to move here.","team.createIntro":"Start empty, or choose existing bots to move here.","team.moveWarning":"Moving changes who they can work with and which shared instructions they read. Their chats stay with them.","team.existingBots":"Existing bots","team.noBots":"No other bots to move. You can add bots later.","team.saving":"Saving…","team.move":"Move bots","team.moveTo":"Move bots to {name}","team.moveOne":"Move 1 bot","team.moveMany":"Move {count} bots","team.moveSelected":"Move selected bots","team.addBots":"Add bots","team.markAllRead":"Mark all as read","team.markingAllRead":"Marking as read…","team.manageBots":"Add or remove bots","team.manageBotsIn":"Add or remove bots in {name}","team.manageIntro":"Checked bots belong to this department. Uncheck a bot to move it to General.","team.addBotsTo":"Add bots to {name}","team.renameEmpty":"Rename empty department","team.rename":"Rename department","team.renameAria":"Rename {name} department","team.deleteEmpty":"Delete empty department","team.deleteAria":"Delete {name} department","team.deleteTitle":"Delete {name} department?","team.deleteDescription":"This deletes the empty department and its shared instructions. This cannot be undone.","team.deleteKeepBotsDescription":"Bots and group chats move to General with their conversations intact. The department and its shared instructions are deleted. This cannot be undone.","team.deleteKeepBotsSimple":"Its bots and group chats stay, with their conversations, outside any department. The department and its shared instructions are deleted. This cannot be undone.","team.delete":"Delete department","team.share":"Share department…","team.actions":"Actions for {name} department","teamSettings.menu":"Set for all bots in this department…","teamSettings.title":"Set for all bots in {name}","teamSettings.general":"General","teamSettings.close":"Close department settings","teamSettings.intro":"Applies to the {count} bots in this department, one bot at a time, with the same checks as each bot's own settings. Bots that would be refused are skipped and listed with the reason.","teamSettings.tab.approval":"Approval level","teamSettings.tab.model":"Model and effort","teamSettings.tab.access":"Access","teamSettings.keepEveryone":"Keep each bot's setting","teamSettings.person":"A person","teamSettings.everyone":"Everyone in {team}","teamSettings.noPerson":"Don't add or remove anyone","teamSettings.personAction":"Add or remove","teamSettings.addPerson":"Add them","teamSettings.removePerson":"Remove them","teamSettings.accessHint":"Admins and whoever looks after each bot can always use and change it.","teamSettings.skip.ownMausBot":"it's someone's own Limix Bot","teamSettings.skip.cantShare":"you can't change who can use it","teamSettings.customPerBot":"Custom approval stays a per-bot setting in that bot's settings.","teamSettings.allThreads":"Each bot gets this level on every one of its threads.","teamSettings.threadModels":"Threads that use their bot's model move with it. A thread with a model of its own keeps it.","teamSettings.model":"Model","teamSettings.effort":"Effort","teamSettings.keepModel":"Keep each bot's model","teamSettings.keepEffort":"Keep each bot's effort","teamSettings.engineDefaultEffort":"Default (send no level)","teamSettings.preview":"What each bot gets","teamSettings.row.willChange":"Will change","teamSettings.row.applied":"Applied","teamSettings.row.unchanged":"Already set","teamSettings.row.skipped":"Skipped: {reason}","teamSettings.skip.busy":"busy. Stop its turn, then try again","teamSettings.skip.modeUnsupported":"{engine} does not offer this approval level","teamSettings.skip.engineMissing":"its AI isn't available","teamSettings.skip.modelUnsupported":"{engine} does not offer {model}","teamSettings.skip.effortUnsupported":"{engine} does not offer this effort level","teamSettings.skip.variantsOnly":"{engine} uses reasoning variants instead of effort levels","teamSettings.applyOne":"Apply to 1 bot","teamSettings.applyMany":"Apply to {count} bots","teamSettings.progress":"{done} of {count}…","teamSettings.summary":"{applied} applied · {unchanged} already set · {skipped} skipped","teamSettings.done":"Done","teamShare.title":"Share {name}","teamShare.intro":"Saves the whole department as one file: its bots, their instructions, pictures and skills, group chats, routines and shared instructions. Send the file to someone, or upload it in Admin → Packages.","teamShare.close":"Close share department","teamShare.preparing":"Preparing the department…","teamShare.name":"Name","teamShare.tagline":"Tagline","teamShare.summary":"Summary","teamShare.release":"Version","teamShare.releaseHint":"Use a higher version each time you share an update, such as 1.0.1.","teamShare.notes":"Release notes","teamShare.included":"What's in the file","teamShare.part.bots":"Bots","teamShare.part.skills":"Skills · arrive switched off","teamShare.part.playbooks":"Playbooks","teamShare.part.rooms":"Group chats","teamShare.part.routines":"Routines · arrive paused","teamShare.part.brief":"Shared instructions","teamShare.part.leader":"Chief of Staff","teamShare.part.connections":"Connections · addresses only","teamShare.part.pictures":"Pictures","teamShare.part.notes":"Starter notes","teamShare.addresses":"Connection addresses in the file","teamShare.yes":"Included","teamShare.none":"None","teamShare.never":"Never included: chat history, keys and passwords, model choices, computers, and who can see each bot.","teamShare.includeSkills":"Include skills","teamShare.noSkills":"This department's bots have no skills.","teamShare.includePictures":"Include pictures","teamShare.includeNotes":"Include starter notes (each bot's MEMORY.md and topic notes)","teamShare.notesIncluded":"Starter notes are included: what each bot has learned. Anything that looks like a key or password is removed. Daily logs and chat history are not included. Untick the box if the notes hold private details about you.","teamShare.notesExcluded":"Starter notes are not included. Whoever imports the department gets bots that start with empty notes.","teamShare.redacted":"Removed what looked like a key or password from:","teamShare.skipped":"Left out:","teamShare.skip.picture_too_large":"picture is larger than 64 KB","teamShare.skip.picture_invalid":"picture could not be read","teamShare.skip.pictures_budget":"the file already holds as many pictures as it can","teamShare.skip.stdio_server":"runs a command on this computer, so it is not shared","teamShare.skip.insecure_address":"does not use https, so it is not shared","teamShare.skip.files_not_shared":"attached files are not shared","teamShare.skip.lead_not_in_group_chat":"its lead is no longer in the group chat","teamShare.skip.notes_too_large":"is larger than the starter notes limit","teamShare.skip.skill_changed":"changed after it was reviewed","teamShare.skip.skill_conflict":"two bots have different skills with this name","teamShare.skip.bot_skill_limit":"a bot can share at most 30 skills (switched-on skills go first)","teamShare.skip.team_skill_limit":"a department can share at most 60 skills","teamShare.field.soul":"standing instructions","teamShare.field.notes":"starter notes","teamShare.field.brief":"shared instructions","teamShare.field.bulletin":"group chat instructions","teamShare.field.prompt":"routine instructions","teamShare.field.skill":"skill","teamShare.field.address":"address","teamShare.field.picture":"picture","teamShare.field.connection":"connection","teamShare.save":"Save file","teamShare.saving":"Saving…","teamShare.saved":"Saved {filename}","teamShare.savedHint":"Send it to someone to add in Templates → Import, or upload it in Admin → Packages. Share the department again after changes to make a new version.","teamShare.done":"Done","teamShare.includePreset":"Include my New bot defaults as a preset","teamShare.presetHint":"Whoever adds the file also gets a preset bot in New bot: your defaults' name, look, standing instructions, skills and (with starter notes) notes. Never their model, folder, computer, approval level or connected apps.","teamShare.part.presets":"Preset bots","teamShare.skip.preset_empty":"empty: give your New bot defaults a name, instructions, skills or notes first","teamShare.defaultsPreset":"New bot defaults preset","teamShare.skip.preset_skill_conflict":"a bot in the department has a different skill with this name","presetShare.title":"Share New bot defaults as a preset","presetShare.intro":"Saves your New bot defaults as a preset file. Whoever adds it in Templates → Import picks the preset in New bot. You can also upload it in Admin → Packages.","presetShare.close":"Close share preset","presetShare.preparing":"Preparing the preset…","presetShare.name":"Preset name","presetShare.description":"Description","presetShare.includePicture":"Include picture","presetShare.includeNotes":"Include starter notes (MEMORY.md and topic notes)","presetShare.never":"Never included: model choices, folders, where bots work, approval levels, connected apps, MCP servers and routines.","presetShare.savedHint":"Send it to someone to add in Templates → Import, or upload it in Admin → Packages. Share again after changes to make a new version.","teamLibrary.shareTab":"Share","teamLibrary.shareIntro":"Share a whole department as one file: bots, skills, group chats, routines and more. Chat history, keys and passwords never go in it.","teamLibrary.shareTeam":"Share department…","teamLibrary.shareTeamAria":"Share the {name} department","teamLibrary.shareBots":"Bots: {count}","teamLibrary.shareEmpty":"Add a bot to a department first, then share the department here.","teamLibrary.general":"General","orgLibrary.tab":"From {name}","orgLibrary.intro":"Packages {name} shares with you. Add one and it is yours: bots, skills and group chats arrive ready to use, routines paused.","orgLibrary.empty":"{name} hasn't shared any packages with you yet.","orgLibrary.from":"From {name}","orgLibrary.fromSelf":"Your organization","orgLibrary.recommended":"Recommended by {name}","orgLibrary.withdrawn":"Withdrawn by {name}","orgLibrary.newerRelease":"Version {version} available. It comes over on its own once it's downloaded, and keeps your changes.","orgLibrary.bots":"Bots: {count}","orgLibrary.skills":"Skills: {count}","orgLibrary.presets":"Preset bots: {count}","orgLibrary.rooms":"Group chats: {count}","orgLibrary.routines":"Routines: {count}","orgLibrary.connections":"Connections: {count}","orgLibrary.add":"Add","orgLibrary.adding":"Adding…","orgLibrary.added":"Added","orgLibrary.addAria":"Add {name}","orgLibrary.details":"Details","orgLibrary.detailsAria":"Details of {name}","orgLibrary.updateApp":"Update {app} to add this","orgLibrary.notReady":"Downloading…","orgLibrary.noRelease":"No release yet","orgLibrary.addedSkills":"{name} is added. Its skills are offered under each bot's Skills.","orgLibrary.skillsOn":"Included skills (switched on)","orgLibrary.teamSafety":"Bots, pictures, shared instructions, the Chief of Staff, group chats, playbooks and starter notes are added. Skills arrive switched on and routines paused. Connections arrive without their keys; finish them in Apps → MCP servers. Chat history, keys and passwords, model choices and computers are never included.","orgLibrary.librarySafety":"Nothing is added to your bots yet. Its skills are offered under each bot's Skills, ready to switch on, and its preset bots appear in New bot.","orgLibrary.provenance":"From {name} {release} · {publisher}","orgLibrary.provenanceFile":"From {name} {release}","orgLibrary.skillsHint":"Skills your organization shares. Adding one puts it on this bot, switched on.","orgLibrary.skillFrom":"{package} {release} · {publisher}","orgLibrary.skillAddAria":"Add {name} to this bot","team.empty":"No active bots yet. Move existing bots here when you are ready.","team.organizationHint":"Departments organize your bots and share instructions. Group chats bring bots into one conversation.","team.instructions":"Shared instructions","team.instructionsTitle":"{name} shared instructions","team.instructionsEdit":"Edit {name} shared instructions","team.instructionsHint":"Shared instructions shown to every bot in this department at the start of each turn. Only you can edit them.","team.instructionsClose":"Close shared instructions","team.instructionsLoading":"Loading shared instructions","team.memory":"Department memory","team.memoryFor":"{name} department memory","team.instructionsSave":"Save shared instructions","team.instructionsDiscard":"Discard unsaved changes to these shared instructions?","common.add":"Add","common.delete":"Delete","common.undo":"Undo","sidebar.aria":"Bots and navigation","sidebar.cloudOwner":"{email}’s Cloud","sidebar.search":"Search","sidebar.searchAria":"Search bots and messages","sidebar.searchClose":"Close search","sidebar.noMatch":"Nothing matches “{query}”","sidebar.preview.waiting":"Waiting for you…","sidebar.preview.waitingOnTeammate":"Waiting on a teammate…","sidebar.preview.working":"Working…","sidebar.preview.botWorking":"{name} is working…","sidebar.preview.botWorkingQueued":"{name} is working… · {count} queued","sidebar.preview.aBot":"A bot","sidebar.preview.teamWorking":"The team is working…","sidebar.preview.noMessages":"No messages yet","sidebar.preview.signedOut":"{name} isn't signed in","sidebar.preview.you":"You: {text}","sidebar.section.pinned":"Pinned","sidebar.section.channels":"Group chats","sidebar.section.botChats":"Bot threads","sidebar.section.bots":"Bots","sidebar.section.moved":"{name} moved to position {position} of {count}","sidebar.section.moveToContext":"Move to department","sidebar.section.newContext":"New department…","sidebar.section.newContextAria":"New department name","sidebar.section.removeFromContext":"Move to General","sidebar.section.removeFromDepartment":"Remove from department","sidebar.section.newName":"New department","sidebar.room.renameAria":"Rename {name}","sidebar.room.saveChatName":"Save thread name","sidebar.room.saveChannelName":"Save group chat name","sidebar.room.cancelChatRename":"Cancel thread rename","sidebar.room.cancelChannelRename":"Cancel group chat rename","sidebar.room.renameChat":"Rename thread","sidebar.room.renameChannel":"Rename group chat","sidebar.room.deleteChat":"Delete thread","sidebar.room.deleteChannel":"Delete group chat","sidebar.room.deleteConfirmTitle":"Delete {name}?","sidebar.room.deleteChannelBody":"This permanently deletes the {name} group chat, its messages, and every thread in it, and turns off the routines that run there. The bots in it are not deleted. This cannot be undone.","sidebar.room.deleteChatBody":"This permanently deletes the {name} thread and its messages. The bots in it are not deleted. This cannot be undone.","sidebar.copyConversationId":"Copy conversation ID","sidebar.newChannel.title":"New group chat","sidebar.newConversationWith":"New conversation with {name}","sidebar.newChannel.name":"Group chat name (for example, Website launch)","sidebar.newChannel.nameLabel":"Group chat name","sidebar.newChannel.context":"Department (optional): Work, Personal, Client…","sidebar.newChannel.contextAria":"Group chat department","sidebar.newChannel.emptyHint":"Create a bot first. Group chats are made of bots.","sidebar.newChannel.create":"Create group chat","sidebar.newChannel.createOne":"Create group chat · 1 bot","sidebar.newChannel.createMany":"Create group chat · {count} bots","sidebar.bot.pin":"Pin","sidebar.bot.unpin":"Unpin","sidebar.bot.makeChief":"Make Chief of Staff","sidebar.bot.removeChief":"Remove Chief of Staff","sidebar.bot.chiefNeedsEngine":"Choose Claude or an ACP model provider first","sidebar.bot.chiefAdminOnly":"Only an admin of this installation can choose the Chief of Staff.","sidebar.bot.chiefOfStaff":"Chief of Staff","sidebar.bot.modelBadge":"Model: {model} ({engine})","sidebar.bot.moveToSection":"Move to department","owner.you":"{name} (you)","lookedAfter.pickTitle":"Looked after by","lookedAfter.pickHint":"Its questions, approvals, failures and routine reports go to this person.","lookedAfter.change":"Change who looks after {bot}","lookedAfter.menu":"Looked after by {name}…","lookedAfter.menuNone":"Looked after by…","lookedAfter.newBot":"Looked after by","lookedAfter.badge":"Looks after it","lookedAfter.line":"Looked after by {name}","lookedAfter.nobody":"Nobody looks after it yet","lookedAfter.make":"Have {name} look after it","lookedAfter.makeTitle":"Have {name} look after {bot}?","lookedAfter.makeBody":"{bot}'s questions, approvals and routine reports will go to {name}.","lookedAfter.mode":"Who looks after what","lookedAfter.seeWho":"See who looks after what","lookedAfter.nobodyHint":"Their questions go to the admins.","lookedAfter.empty":"{name} looks after no bots yet.","lookedAfter.dropHint":"Drag a bot onto a person to change who looks after it.","lookedAfter.setForAll":"Set who looks after all bots…","lookedAfter.setForAllTitle":"Everyone in {name} is looked after by","owner.asking":"Asking {name}","owner.askingYou":"Asking you","needsYou.title":"Needs you","needsYou.count":"Needs you, {count}","needsYou.asking":"{bot} is asking you","needsYou.fix":"{bot} needs a fix","needsYou.message":"Message from {name}","needsYou.aBot":"A bot","relay.told":"Told {name}","relay.toldHint":"{name} got this message","inbox.from":"From {name}","inbox.via":"via {name}","inbox.in":"in {title}","inbox.openOrigin":"Open {title}","inbox.assistantOf":"{name}'s assistant","inbox.assistantAnswered":"Your assistant answered","inbox.assistantHint":"From what you share with the team. Reply to correct it.","relay.reply":"{name} replied","relay.assistant":"{name}'s assistant answered","sidebar.people.title":"People","sidebar.people.yourInbox":"Your inbox: everything sent to you","sidebar.people.yourInboxWaiting":"Your inbox: waiting on you, {count}","sidebar.people.invite":"Invite someone","inbox.panel.title":"Inbox","inbox.empty":"Nothing for you yet.","inbox.emptyHint":"When a bot needs your OK, has a question or finishes something, it shows up here.","inbox.row.count":"Inbox, {count} waiting","inbox.workingFor":"{name}, working for {other}","inbox.askedBy":"{name}, asked by {who}","inbox.askedBySomeone":"{name}, asked by someone else","inbox.waitsOnYou":"Waits on you","inbox.card.summary":"{needs} need you · {info} for your info","inbox.card.forInfo":"{count} for your info","inbox.card.caughtUp":"All caught up","inbox.card.open":"Open inbox","inbox.action.openInChat":"Open in chat","inbox.action.back":"Back to the list","inbox.reply.placeholder":"Write your answer","inbox.subject.approval":"Approval","inbox.subject.question":"Question","inbox.subject.message":"Message","inbox.subject.result":"Routine report","inbox.subject.notice":"Needs a look","inbox.reviewInChat":"Look at this in the chat it came from to answer it.","inbox.search":"Search inbox","inbox.noMatch":"Nothing in the inbox matches.","inbox.position":"{index} of {count}","inbox.breadcrumb":"Where this came from","inbox.action.previous":"Previous","inbox.action.next":"Next","inbox.action.more":"More","inbox.action.closePanel":"Close inbox","inbox.action.widen":"Wider","inbox.action.narrow":"Narrower","inbox.recommended":"Recommended","inbox.recommendedInline":"(recommended)","inbox.note":"Add a note","inbox.you":"You","inbox.headline.signIn":"Sign in to {site}","inbox.headline.connect":"Connect {app}","inbox.youReplied":"You replied","sidebar.people.mention":"Write to {name}","sidebar.people.mentionHere":"Write to {name}. Here now","sidebar.people.loading":"Loading people…","sidebar.people.failed":"Couldn't load people","sidebar.people.retry":"Try again","presence.hasOpen":"{names} has this open","presence.haveOpen":"{names} have this open","orgChart.mode.departments":"Departments","orgChart.chief":"Chief of Staff","newBot.sharedWith":"Shared with everyone in {team}.","newBot.justForYou":"Just for you? Create it in your own place →","sidebar.bot.markUnread":"Mark as Unread","sidebar.bot.rename":"Rename","sidebar.bot.markRead":"Mark as Read","sidebar.bot.more":"More","sidebar.bot.markAllRead":"Mark all conversations as read","sidebar.bot.markingAllRead":"Marking conversations as read…","sidebar.bot.markAllReadFailed":"Could not mark all conversations as read. Completed reads were kept. Try again.","sidebar.bot.editProfile":"Edit Profile","sidebar.bot.simple.editProfile":"Edit profile","sidebar.bot.simple.markRead":"Mark as read","sidebar.bot.simple.markUnread":"Mark as unread","sidebar.bot.simple.viewThreads":"View threads","sidebar.bot.simple.setMainThread":"Set as main thread","sidebar.bot.simple.isMainThread":"This is already the main thread","sidebar.bot.duplicate":"Duplicate","sidebar.bot.archive":"Archive","sidebar.bot.archiveAria":"Archive {name}","sidebar.bot.archiveBlockedChief":"Choose another Chief of Staff first","sidebar.bot.archiveBlockedLast":"Keep at least one active bot","sidebar.bot.deleteCheckingTitle":"Deleting this bot and any desktop it owns","sidebar.bot.deleteChecking":"Deleting the bot and its desktop…","sidebar.bot.deletingRow":"Deleting the bot and any desktop it owns…","sidebar.bot.deletingAria":"{name}, deleting the bot and any desktop it owns","sidebar.bot.archived":"{name} archived","sidebar.confirm.archiveTitle":"Archive {name}?","sidebar.confirm.archiveBody":"{name} leaves the sidebar, but every conversation is kept. You can restore it any time from Archived bots.","sidebar.confirm.deleteTitle":"Delete {name}?","sidebar.confirm.deleteBody":"This permanently removes {name}, its conversations, files, memory, automations, and any desktop it owns, with that desktop's files and browser sign-ins. Shared department desktops stay. This cannot be undone.","sidebar.confirm.deleteChiefBody":"{name} is your Chief of Staff, and its chats hold your team's whole setup. Archive it instead to keep every conversation: you can restore it any time. Deleting erases them for good, with its files, memory and automations. Either way it stops being your Chief.","sidebar.confirm.archiveInstead":"Archive instead","sidebar.archived.title":"Archived bots","sidebar.archived.subtitle":"Conversations are kept until you choose to delete a bot.","sidebar.archived.restoreAll":"Restore all","sidebar.archived.close":"Close archived bots","sidebar.archived.count":"{count} archived","sidebar.archived.botFallback":"Bot","sidebar.archived.restore":"Restore","sidebar.archived.deleteAria":"Delete {name}","sidebar.archived.deleteAll":"Delete all","sidebar.archived.deleteAllTitle":"Delete all archived bots?","sidebar.archived.deleteAllBody":"This permanently deletes every archived bot listed here, conversations and bot folders included. This cannot be undone.","sidebar.archived.restored":"{name} restored","sidebar.archived.restoredOne":"1 bot restored","sidebar.archived.restoredMany":"{count} bots restored","sidebar.resize":"Resize sidebar","sidebar.toolsLayout.title":"Tools layout","sidebar.toolsLayout.subtitle":"Show Routines, Triggers, and Team map as rows or as one row of icons. As a column of avatars, the sidebar always shows icons.","sidebar.toolsLayout.rows":"Rows","sidebar.toolsLayout.toolbar":"Toolbar","sidebar.toolsLayout.chooseAria":"Choose tools layout","sidebar.new":"New","sidebar.newOrShare":"New or share","sidebar.servers":"Servers","sidebar.switchServer":"Switch server: {name}","sidebar.switchServerError":"Could not open the server list. Try the Server menu.","sidebar.newBot":"New Bot","sidebar.newBotSimple":"New bot","sidebar.newChat.title":"New chat","sidebar.newChat.to":"To:","sidebar.newChat.placeholder":"Start a chat with…","sidebar.newChat.createBot":"Create new bot","sidebar.newChat.createGroup":"Create group chat","sidebar.newChat.start":"New chat","sidebar.newChat.open":"Open","sidebar.newChat.noMatch":"No bot matches “{query}”","sidebar.backup.hint":"Private backup of bot setup, conversation text, and each bot's memory notes. Files, images and connections are not included.","sidebar.backup.exporting":"Exporting…","sidebar.backup.export":"Export backup","sidebar.backup.downloaded":"Backup downloaded · {members} bots and conversation text.","sidebar.backup.notes":"{count} backup notes about deleted bots and groups. Review them when importing.","sidebar.backup.private":"Keep this file private.","sidebar.teamLibrary":"Templates","sidebar.teamImportedOne":"1 bot added · existing bots and chats kept","sidebar.teamImportedMany":"{count} bots added · existing bots and chats kept","sidebar.connectionsToFinish":"Connections to finish in Apps → MCP servers: {count}","sidebar.presetsImported":"Preset bots added to New bot: {count}","sidebar.nav.teamMap":"Team map","sidebar.nav.automations":"Automations","sidebar.nav.connectedApps":"Connected apps","sidebar.connectApps":"Connect apps","sidebar.appSettings":"App settings","sidebar.tools":"Tools","sidebar.section.expand":"Expand {name}","sidebar.section.collapse":"Collapse {name}","sidebar.section.expandReorder":"Expand {name}. Alt+Up/Down reorders it.","sidebar.section.collapseReorder":"Collapse {name}. Alt+Up/Down reorders it.","sidebar.section.dragToReorder":"Drag to reorder","sidebar.section.deleteAria":"Delete {name} department","sidebar.profile.you":"You","sidebar.account.automationsNeedYou":"Automations need you","sidebar.account.moveNeedsYou":"My Cloud move needs you","sidebar.account.moveAndAutomationsNeedYou":"My Cloud move and automations need you","sidebar.account.moving":"Moving to My Cloud…","sidebar.account.moveDismiss":"Got it","sidebar.account.moveRetry":"Try My Cloud move again","sidebar.account.moveRetryName":"Try again to move to My Cloud","sidebar.account.movingNamed":"Moving to {place}…","sidebar.account.moveNeedsYouNamed":"{place} move needs you","sidebar.account.moveRetryNamed":"Try {place} move again","sidebar.account.moveRetryNameNamed":"Try again to move to {place}","sidebar.menu.connectPhone":"Connect your phone","sidebar.menu.connectPhone.team":"to {team}","sidebar.menu.connectPhone.computer":"to this computer","sidebar.menu.connectPhone.cloud":"to the Cloud","sidebar.menu.connectPhone.cloudAlwaysOn":"to the Cloud (always on)","sidebar.menu.connectPhone.cloudNotReady":"The Cloud shows here once it's ready.","sidebar.menu.connectPhone.server":"to the bots here","sidebar.menu.getPhoneApp":"Get the phone app","phoneApp.title":"Get the phone app","phoneApp.subtitle":"Scan a code with your phone's camera, or open its link on the phone.","phoneApp.ios":"iPhone","phoneApp.iosAction":"Open in the App Store","phoneApp.android":"Android","phoneApp.androidAction":"Download the APK","phoneApp.next":"Installed? Connect your phone next, and scan the pairing code with the app.","accounts.heading":"Signed in as","accounts.add":"Add another account","rail.accountSub":"Stay signed in to more than one, and move between them from here.","accounts.moving":"This computer's bots are moving to the Cloud. You can open this once that's done.","accounts.added":"{email} is signed in too. You can open its Clouds once this computer's bots have finished moving.","accounts.already":"You're already signed in as {email}.","accounts.gone":"That account isn't signed in here any more.","accounts.needsSignIn":"Sign in again","accounts.browserTitle":"Finish signing in in your browser","accounts.browserBody":"Check that the browser shows the account you want to add. If it shows another one, change it there.","accounts.browserOpen":"Open the browser again","accounts.signOut":"Sign out","accounts.signInAgain":"Sign in again","accounts.manage":"Account and sign out","accounts.title":"Your account","accounts.close":"Close","accounts.failed":"That didn't work. Try again in a moment.","sidebar.menu.settings":"Settings","sidebar.menu.about":"About","about.version":"Version {version}","about.connectedTo":"Connected to {name} · version {version}","sidebar.menu.shortcuts":"Keyboard shortcuts","sidebar.menu.support":"Help and support","sidebar.menu.help":"Help Center","sidebar.menu.feedback":"Send Feedback","sidebar.menu.usageUsed":"{percent}% used","sidebar.menu.weeklyUsage":"Weekly usage","sidebar.menu.resets":"Resets {when}","sidebar.menu.switchTo":"Switch to…","sidebar.update.startingDownload":"Starting download…","sidebar.update.downloading":"Downloading… {percent}%","sidebar.update.ready":"Restart to update to {app} {version}","sidebar.update.installing":"Restarting to update…","sidebar.update.checking":"Checking for updates…","sidebar.update.handedOff":"Finish the update in your terminal","sidebar.update.failed":"The update didn't finish. Try again.","sidebar.update.upToDate":"You're up to date","sidebar.update.check":"Check for updates","sidebar.update.availableServer":"Version {version} available (release notes)","sidebar.update.how":"Update with: {command}","sidebar.update.howRestart":"Update with: {command}, then restart the app","sidebar.update.howDesktop":"Updates come from the {app} app on the computer these bots run on","sidebar.update.managed":"Kept up to date for you","sidebar.update.availableOther":"{name} can update to {version}","sidebar.update.upToDateOther":"{name} is up to date","sidebar.update.howOther":"Whoever runs that server updates it with: {command}","sidebar.update.howOtherRestart":"Whoever runs that server updates it with: {command}, then restarts it","sidebar.update.checkFailed":"Couldn't check for updates. Try again.","sidebar.update.reloadPage":"Reload for v{version}","sidebar.update.pageVersion":"This page is still running v{version}","sidebar.phone.checking":"Checking device status","sidebar.phone.unavailable":"Device status unavailable","sidebar.phone.off":"Remote access off","sidebar.phone.pair":"Pair a device","sidebar.phone.connectedOne":"Device connected","sidebar.phone.connectedAll":"{count} devices connected","sidebar.phone.connectedSome":"{connected} of {count} devices connected","sidebar.phone.disconnectedOne":"Device paired, not connected","sidebar.phone.disconnectedMany":"{count} devices paired, none connected","sidebar.phone.recentOne":"Device active recently","sidebar.phone.recentAll":"{count} devices active recently","sidebar.phone.recentSome":"{recent} of {count} devices active recently","sidebar.phone.staleOne":"Device paired, not active recently","sidebar.phone.staleMany":"{count} devices paired, none active recently","sidebar.update.preparing":"Preparing update…","sidebar.update.readyInstall":"Install {app} {version}","sidebar.update.openingTerminal":"Opening a terminal…","sidebar.update.readyShort":"Update ready","sidebar.update.failedShort":"Update failed","sidebar.update.restartAction":"Restart","sidebar.update.installAction":"Install","sidebar.update.retryAction":"Retry","links.card.pullRequest":"Pull request {id}","links.card.issue":"Issue {id}","links.card.reference":"Issue or pull request {id}","links.card.commit":"Commit {id}","chat.announce.replied":"{name} replied: {text}","chat.announce.repliedEmpty":"{name} replied","chat.announce.failed":"{name} failed: {text}","chat.announce.failedEmpty":"{name} failed","chat.announce.partial":"{name} partly done: {text}","chat.announce.approval":"{name} needs your approval","chat.day.today":"Today","chat.day.yesterday":"Yesterday","chat.timeline.title":"Execution timeline","chat.timeline.titleRunning":"Execution timeline · running","inspector.views":"Inspector views","inspector.run.title":"Run log","inspector.run.hint":"Recorded activity for this conversation. Commands may be shortened; Events and Raw contain the recorded technical details.","inspector.run.copy":"Copy redacted run log","inspector.run.copied":"Copied. Review the log before sharing; redaction may not catch every secret.","inspector.run.copyFailed":"Could not copy the log. Select the text to copy it manually.","inspector.run.recent":"Showing the latest {count} entries.","inspector.run.empty":"No recorded activity in this conversation yet.","inspector.run.running":"In progress","inspector.run.complete":"Completed","inspector.run.failed":"Failed","inspector.run.observed":"Recorded","inspector.run.unverified":"No result","inspector.run.userInput":"User input","inspector.run.screen":"Screen observed","inspector.run.response":"Response recorded","chat.copyMessage":"Copy message","chat.copyMessageId":"Copy message ID","chat.copyMessageDone":"Copied","chat.copyMessageFailed":"Copy failed","chat.showRawMarkdown":"Show raw markdown","chat.showRenderedMarkdown":"Show rendered markdown","chat.retry":"Retry","chat.turnStopped":"Stopped","chat.turnStoppedByYou":"You stopped this.","chat.turnStoppedBy":"{name} stopped this.","chat.rescue.waiting":"{bot} hasn't heard back from {ai} yet.","chat.rescue.over":"{bot} didn't hear back from {ai}.","chat.rescue.switchAi":"Switch AI","chat.rescue.switchAiHint":"Stop waiting and pick another AI for {bot}","chat.rescue.connect":"Connect your subscription","chat.rescue.connectHint":"Sign in with an AI plan you already pay for","chat.error.signedOut":"{name} isn't signed in yet. Sign in below, then send your message again.","chat.notice.signIn":"Sign in","chat.notice.signInHint":"Open AI settings to sign in again","chat.error.pastUsageLimit":"Past usage-limit notice (reset time passed; check current usage)","chat.error.details":"Details","chat.error.partial":"Partly done. The reply came back, but a step didn't work, so check that step before relying on it.","chat.error.partialPreview":"Partly done: a step didn't work","chat.error.requestTooLarge":"This message is too large for {model}. Start a new chat or pick a model that accepts more.","chat.error.dismiss":"Dismiss","error.plain.unreachable":"Couldn't reach {app}. Check that it's running, then try again.","error.plain.rateLimited":"Too many requests right now. Wait a moment, then try again.","error.plain.busy":"The service is busy right now. Try again in a moment.","error.plain.connection":"The connection dropped. Try again.","error.plain.timeout":"That took too long. Try again.","error.plain.access":"Access was refused. Check the sign-in, then try again.","error.plain.permission":"This computer didn't allow that. Check the file or folder permissions, then try again.","error.plain.notFound":"That couldn't be found. It may have been removed.","error.plain.tooLarge":"That's too large to send. Try a smaller file or a shorter message.","error.plain.server":"Something went wrong on the other end. Try again.","error.plain.generic":"Something went wrong. Try again.","chat.cloudGuest.notYours":"You can only write in conversations you started on this Cloud.","chat.cloudGuest.newConversation":"New conversation","chat.claudeUpdate.aria":"Update Claude Code","chat.claudeUpdate.offer":"This model needs a newer Claude Code. I can update Claude for you.","chat.claudeUpdate.doIt":"Update Claude for me","chat.claudeUpdate.myself":"I'll do it myself","chat.claudeUpdate.updating":"Updating Claude Code… this can take a minute.","chat.claudeUpdate.manual":"Run this in Terminal, then retry:","chat.claudeUpdate.copy":"Copy command","chat.claudeUpdate.tryAgain":"Try updating again","chat.send":"Send","chat.editMessage":"Edit message","chat.reply":"Reply","chat.replyToMessage":"Reply to message","chat.react":"Add reaction","chat.reactions":"Reactions","chat.reaction.yes":"Thumbs up: yes, go ahead","chat.reaction.no":"Thumbs down: no, not that","chat.reaction.love":"Heart","chat.reaction.laugh":"Laughing","chat.reaction.celebrate":"Celebrate","chat.reaction.looking":"Eyes","chat.reaction.chip":"{reaction}: {people}","chat.pinMessage":"Pin message","chat.unpinMessage":"Unpin message","chat.pinHint":"Pin this message to the top of the thread","chat.unpinHint":"Unpin this message","chat.unpin":"Unpin","chat.pinnedJump":"Jump to the pinned message","chat.you":"You","chat.peer.asked":"asked via ask_bot","chat.peer.handedTask":"handed on a task","chat.peer.openedThread":"opened this thread","chat.peer.requested":"sent a request","chat.automation.openRun":"See run","chat.automation.openRunFor":"See the run behind this {name} message","chat.automation.needsYou":"needs you","chat.automation.failed":"didn't finish","chat.automation.partial":"partly done","chat.assistant":"Assistant","chat.webhookTask":"Webhook task","chat.viewPayload":"View event payload","chat.sentMidTurn":"sent mid-turn","chat.sentMidTurnHint":"Sent while the bot was working. It saw this before its next step, inside the same turn.","chat.viaCall":"via call","chat.callRecord.title":"Call with {name}","chat.callRecord.label":"Live call: {title}, {duration}","chat.callRecord.approval":"{outcome}: {action}","chat.callRecord.waiting":"Waiting","chat.callRecord.expired":"Expired","chat.callRecord.partial":"Some of this call may be in earlier messages. Load earlier messages to see all of it.","chat.callRecord.open":"Open the call: {title}","chat.callSheet.kicker":"Live call","chat.callSheet.empty":"Nothing was asked on this call.","chat.callSheet.kept":"Your requests and {name}’s answers and steps. Nothing else said on the call is kept.","chat.showFull":"Show full message","chat.showLess":"Show less","chat.generatedImage":"Generated image","chat.regenerate":"Regenerate response","chat.messageActions":"Message actions","chat.previousVersion":"Previous version","chat.nextVersion":"Next version","chat.openConversationWith":"Open the conversation with {name}","chat.handoffDoneWhen":"Done when: {criteria}","chat.openThread":"Open #{title}","chat.openThreadOn":"Open #{title} on {name}","chat.sentDirectly":"Sent to {name} directly: it isn't in this room.","chat.sentDirectlyNotInRoom":"Sent to {name} directly: it isn't in {room}.","chat.botScreen":"Bot's screen","chat.digestChip":"Did {tools} tool calls · {files} files changed","chat.digestChipNoFiles":"Did {tools} tool calls","chat.digestTitle":"What this turn did","chat.compactionTitle":"Earlier context summarized","chat.engineCompactionTitle":"Chat condensed into a summary","chat.engineCompactionHint":"The AI summarized earlier messages to make room. Your full conversation is still here, but the agent may not recall older details exactly.","chat.compactionHint":"Your full conversation is still here. The agent uses this summary and recent messages when continuing.","chat.startFresh":"Start fresh","chat.startFresh.hint":"Starts a new session for this chat. Every message stays visible, and the bot's instructions, skills and memory don't change.","chat.startFresh.divider":"Fresh start","chat.startFresh.dividerHint":"Messages above this line aren't sent to the bot","chat.compactionExcerptTitle":"Earlier context shortened to recent excerpts","chat.compactionExcerptHint":"A written summary wasn't available, so the agent continues from these excerpts and recent messages. Older details may be missing from its context. Your full conversation is still here.","contextWarning.short":"Context {percent}%","contextWarning.threadHint":"{name}'s context is {percent}% full. Compact now summarizes older messages into a short note; the whole conversation stays here.","contextWarning.compactNow":"Compact now","contextWarning.compacting":"Compacting…","contextWarning.busy":"Stop this bot's turn first","contextWarning.room":"{name}'s context in this room is {percent}% full.","contextWarning.roomHint":"Its next turn here starts fresh with the room's recent messages. Nothing in the room is deleted.","contextWarning.roomRequested":"Compacts before its next turn.","chat.emptyPrompt":"Send a message to start the conversation.","chat.chiefOfStaff":"Chief of Staff","chat.openProfile":"Open agent profile","chat.openBotPanel":"Details and conversations","chat.backToMainThread":"Back to your chat","chat.openProfileAria":"Open {name}'s profile","chat.showConversations":"Show {name}'s conversations","chat.find":"Find in conversation","chat.findShortcut":"Find in conversation (⌘F)","chat.stop":"Stop","chat.stopTurn":"Stop this turn","chat.computer":"Bot's screen","chat.watchScreen":"Watch","chat.watchScreenHint":"Watch what the bot is doing on its screen","chat.advancedOnly":"In Advanced mode","chat.inspector":"Inspector","chat.inspectorHint":"Inspector: runtime events and raw protocol for this thread","chat.more":"More","chat.export.heading":"Share","chat.export.copy":"Copy as Markdown","chat.export.copied":"Copied","chat.export.copyFailed":"Couldn't copy. Use Download instead.","chat.export.download":"Download as .md","chat.export.copyConversation":"Copy conversation","chat.export.downloadConversation":"Download conversation","chat.usage.menu":"Usage","chat.conversationWith":"Conversation with {name}","chat.showEarlier":"Show earlier messages ({count} more)","chat.loadEarlier":"Load earlier messages","chat.loadingEarlier":"Loading earlier messages…","chat.showLater":"Show later messages ({count} more)","chat.provisioning":"Setting up this bot's desktop…","chat.computerStarting":"Starting {name}'s cloud desktop. The first start takes about a minute.","chat.computerWaking":"Waking {name}'s cloud desktop…","chat.jumpToLatest":"Jump to latest","chat.jumpToLatestAria":"Jump to latest messages","chat.newMessages":"New","chat.newMessagesAria":"New messages","chat.verify.title":"This run","chat.verify.aria":"This run","chat.verify.steps":"Run steps","chat.verify.stepsOne":"1 step","chat.verify.stepsMany":"{count} steps","chat.verify.verifiedCount":"{count} verified","chat.verify.verifiedTag":"verified","chat.verify.failed":"{count} failed","chat.verify.running":"{count} running","chat.verify.unverified":"{count} with no result","chat.verify.dryRunOne":"1 dry run","chat.verify.dryRunMany":"{count} dry runs","chat.verify.collapse":"Collapse the run","chat.verify.expand":"Expand the run","chat.verify.dismiss":"Dismiss the run","chat.verify.save":"Save as skill","chat.verify.saveHint":"Adds the run to your message; add any notes, then send.","chat.verify.staged":"Skill staged for your review","chat.verify.saved":"Saved as a skill","chat.workingFolder":"Working folder: {folder}","task.folder.new":"New thread in a working folder…","task.folder.detail":"The folder is fixed for this thread. Enter a path on the computer running {app}.","task.folder.path":"Working folder","task.folder.placeholder":"Absolute folder path","task.folder.creating":"Creating…","chat.usage.turnsOne":"1 turn","chat.usage.turnsMany":"{count} turns","chat.usage.cachedNote":"cached = context re-read each turn, not new text","chat.usage.uncachedInput":"{tokens} uncached input","chat.usage.cachedInput":"{tokens} cached input","chat.usage.totalInput":"{tokens} input (cached + uncached)","chat.usage.output":"{tokens} output","chat.usage.lastTurnSplit":"Last message: {detail}","chat.usage.uncachedShort":"{tokens} uncached","chat.usage.inputShort":"{tokens} input","chat.usage.tokens":"{tokens} tok","chat.usage.new":"{tokens} new","chat.usage.reread":"{tokens} re-read from cache","chat.usage.lastTurn":"Last message: {read} read · {fresh} new","chat.usage.context":"Context {tokens}","chat.usage.contextOfWindow":"Context {tokens} ({percent}% of {window})","chat.usage.contextShort":"{value} context used","chat.usage.contextNudge":"Long thread: the model re-reads all of it on every message. A new thread starts small.","chat.usage.newNote":"new = text the model had not seen before; the rest is context re-read from cache each turn","chat.usage.in":"{tokens} in","chat.usage.inCached":"{tokens} in ({cached} cached)","chat.usage.out":"{tokens} out","chat.usage.captionSubscription":"equivalent (on your subscription, not billed)","chat.keepWarm.warm":"cache warm","chat.keepWarm.next":"next ping {time}","chat.keepWarm.until":"until {time}","chat.keepWarm.last":"last ping read {tokens}","chat.keepWarm.lastCost":"last ping read {tokens} for {cost}","chat.keepWarm.stopped":"keep-warm stopped: {reason}","chat.usage.captionMetered":"billed to your API key","chat.usage.captionEngine":"as reported by the provider","chat.find.placeholder":"Find in this conversation","chat.find.searching":"Searching…","chat.find.position":"{index} of {count}","chat.find.noResults":"No results","chat.find.previous":"Previous result","chat.find.next":"Next result","chat.find.close":"Close find","chat.find.failed":"Search didn't work. Try again.","chat.find.unavailable":"That message is unavailable","chat.reply.replyingTo":"Replying to {name}","chat.reply.jump":"Jump to original message","chat.reply.cancel":"Cancel reply","chat.reply.image":"[image]","chat.reply.file":"[file]","chat.speak.needsKey":"Add an ElevenLabs key in an agent profile to read messages aloud","chat.speak.needsSetup":"Set up a voice provider in this agent's profile to read messages aloud","chat.speak.needsVoice":"Pick a voice in this agent's profile to read messages aloud","chat.speak.stop":"Stop speaking","chat.speak.read":"Read this aloud","chat.voiceNote.play":"Play voice note","chat.voiceNote.pause":"Pause voice note","chat.voiceNote.seek":"Seek voice note","chat.voiceNote.onLiveCall":"Voice notes can't play during a Live call.","chat.voiceNote.transcript":"Transcript","chat.activity.thinking":"Thinking","chat.activity.working":"Working","chat.typing":"Typing…","chat.queue.workingFor":"Working on {name}'s request","chat.queue.workingForYou":"Working on your request","chat.queue.next":"Next: {name}'s request","chat.queue.nextYours":"Next: your request","chat.queue.nextMore":"Next: {name}'s request, then {count} more","chat.queue.nextYoursMore":"Next: your request, then {count} more","chat.queue.removeYours":"Remove your waiting message","chat.queue.yoursWaiting":"Yours: {text}","chat.teammatesWorking":"Teammates working","chat.friendly.thinking":"Thinking it through","chat.friendly.mulling":"Mulling it over","chat.friendly.working":"Working on it","chat.friendly.chipping":"Chipping away","chat.friendly.digging":"Digging around","chat.friendly.code":"Writing some code","chat.friendly.commands":"Running a few commands","chat.friendly.clicking":"Clicking around","chat.friendly.team":"Checking in with the team","chat.friendly.service":"Working in {service}","chat.activity.runCommand":"Running a command","chat.activity.readFile":"Reading a file","chat.activity.writeFile":"Writing a file","chat.activity.editFile":"Editing a file","chat.activity.searchWeb":"Searching the web","chat.activity.readPage":"Reading a page","chat.activity.searching":"Searching","chat.activity.screen":"Looking at the screen","chat.activity.computer":"Using the screen","chat.activity.openPage":"Opening a page","chat.activity.whosAround":"Checking who's around","chat.activity.rooms":"Checking the groups","chat.activity.postRoom":"Posting in a group","chat.activity.messagePerson":"Passing on a message","chat.activity.handoff":"Handing off a task","chat.activity.askTeammate":"Asking a teammate","chat.activity.reply":"Writing a reply","chat.activity.writingNamed":"Writing {file}","chat.activity.editingNamed":"Editing {file}","chat.activity.readingNamed":"Reading {file}","chat.activity.runningNamed":"Running {target}","chat.activity.searchingWebFor":"Searching the web for “{target}”","chat.activity.readingSite":"Reading {target}","chat.liveness.outputJustNow":"last output just now","chat.liveness.outputMinutes":"last output {count} min ago","chat.liveness.outputHours":"last output {count} h ago","chat.liveness.network":"waiting on the network","chat.liveness.busy":"busy, no output yet","chat.liveness.idle":"idle, no output yet","chat.now.title":"What {name} is doing","chat.now.openActivity":"Open activity","chat.now.output":"Latest output","chat.now.stateDone":"done","chat.now.stateNow":"in progress","chat.now.stateFailed":"failed","chat.now.ranNamed":"Ran {target}","chat.now.searchedWebFor":"Searched the web for “{target}”","chat.now.readSite":"Read {target}","chat.now.readNamed":"Read {target}","chat.now.wroteNamed":"Wrote {target}","chat.now.editedNamed":"Edited {target}","chat.now.ranCommand":"Ran a command","chat.now.searchedWeb":"Searched the web","chat.now.readPage":"Read a page","chat.now.readFile":"Read a file","chat.now.wroteFile":"Wrote a file","chat.now.editedFile":"Edited a file","chat.now.searchedFiles":"Searched files","chat.activity.sizeKb":"{count} KB","chat.activity.sizeMb":"{count} MB","chat.activity.alt.mullingItOver":"Mulling it over","chat.activity.alt.piecingItTogether":"Piecing it together","chat.activity.alt.workingItOut":"Working it out","chat.activity.alt.weighingOptions":"Weighing options","chat.activity.alt.chippingAway":"Chipping away","chat.activity.alt.diggingIn":"Digging in","chat.activity.alt.liningThingsUp":"Lining things up","chat.activity.alt.makingProgress":"Making progress","chat.activity.alt.checkingTheOutput":"Checking the output","chat.activity.alt.readingThrough":"Reading through","chat.activity.alt.lookingItOver":"Looking it over","chat.activity.alt.draftingIt":"Drafting it","chat.activity.alt.makingChanges":"Making changes","chat.activity.alt.lookingItUp":"Looking it up","chat.activity.alt.goingThroughResults":"Going through results","chat.activity.alt.skimmingThePage":"Skimming the page","chat.activity.alt.narrowingItDown":"Narrowing it down","chat.activity.alt.takingALook":"Taking a look","chat.activity.alt.clickingThrough":"Clicking through","chat.activity.alt.passingItAlong":"Passing it along","chat.run.worked":"Worked","chat.run.workedFor":"Worked for {elapsed}","chat.run.steps":"{count} steps · {tools}","chat.run.showSteps":"Show every step","chat.run.more":"+{count} more","composer.command.goalDesc":"Keep a team working until the goal is complete","composer.command.goalBotDesc":"Keep this bot working until the goal is complete","composer.command.learnDesc":"Draft a reusable skill from this conversation","composer.command.setupDesc":"Have this bot interview you and set itself up","composer.command.burstDesc":"Run many parts of a job at once, then merge the results","burst.title":"Burst: {task}","burst.plan":"{count} tasks · {model} · {parallel} at once · about {minutes} min","burst.moreItems":"+{count} more","burst.limitCut":"{total} of the {requested} tasks will run: this plan runs up to {limit} per burst.","burst.morePlan":"Pro runs more at once.","burst.run":"Run","burst.edit":"Edit","burst.cancel":"Cancel","burst.progress":"{done} of {total} done","burst.running":"{count} running","burst.failed":"{count} failed","burst.waiting":"{count} waiting","burst.phase.merging":"Writing one result…","burst.phase.done":"Done","burst.phase.cancelled":"Cancelled","burst.retryFailed":"Retry failed","burst.cancelAll":"Cancel all","burst.showTasks":"Show tasks","burst.hideTasks":"Hide tasks","burst.notFinished":"Not finished: {names}","burst.notFinishedMore":"Not finished: {names}, and {count} more","burst.editInstructions":"Instructions every task gets","burst.editItems":"One task per line","burst.save":"Save","burst.back":"Back","burst.statusLabel":"Burst: {status}","burst.status.queued":"Waiting","burst.status.running":"Running","burst.status.done":"Done","burst.status.failed":"Failed","burst.status.cancelled":"Cancelled","burst.error.action":"That didn't work. Try again in a moment.","composer.command.skillTag":"skill","composer.busy.team":"The team","composer.busy.aBot":"A bot","composer.busy.theBot":"The bot","composer.error.noImages":"The selected responder does not support image attachments.","composer.error.clipboardImage":"Could not read the clipboard image. Try attaching the image file instead.","composer.dictation.macOnly":"Dictation is only available on macOS for now.","composer.dictation.permission":"Dictation needs Microphone and Speech Recognition access. Turn both on in System Settings → Privacy & Security.","composer.dictation.disabled":"Turn on Dictation in System Settings → Keyboard, then try again.","composer.dictation.failed":"Dictation couldn't start. Try again.","composer.dictation.unavailable":"Dictation isn't available in this build.","composer.dictation.start":"Start dictation","composer.dictation.stop":"Stop dictation","composer.dictation.stopHint":"Stop dictation (Esc)","composer.dictation.hint":"Dictate","composer.failed.notSent":"Not sent: “{text}”","composer.failed.attachment":"attachment","composer.failed.dismiss":"Dismiss","composer.failed.dismissAria":"Dismiss failed message","composer.commands.aria":"Composer commands","composer.commands.title":"Commands","composer.mention.aria":"Tag a bot","composer.mention.agent":"Agent","composer.mention.person":"Person","composer.mention.channel":"Group chat","composer.mention.everyoneOne":"1 bot in this chat","composer.mention.everyoneMany":"{count} bots in this chat","composer.mention.team":"Department","composer.mention.teamOne":"1 bot in this department","composer.mention.teamMany":"{count} bots in this department","composer.mention.allOne":"The only bot here","composer.mention.allMany":"All {count} bots","composer.mention.devs":"Developers","composer.mention.devsDesc":"Report a bug to Limix Bot","devs.report.received":"Bug report sent · Got it, we're looking","devs.report.fixedSoon":"Bug report · Fixed, coming in an update","devs.report.fixedComing":"Bug report · Fixed in {version}, coming in your next update","devs.report.fixed":"Bug report · Fixed in {version}","devs.report.tryAgain":"Fixed in {version}. Want to try again?","composer.attach":"Attach a file","composer.attachFiles":"Attach files","composer.teachTask":"Teach a task","composer.goal.aria":"Finish together","composer.goal.title":"Finish together: the team keeps working until the goal is complete","composer.goal.soloAria":"Work until done","composer.goal.soloTitle":"Work until done: the bot keeps working until the goal is complete","composer.goal.offSolo":"Turn off Work until done","composer.goal.off":"Turn off Finish together","composer.goal.chip":"Goal","composer.placeholder.locked":"Finish group setup to start a thread","composer.placeholder.reply":"Reply…","composer.placeholder.approval":"Answer the approval above to continue","composer.placeholder.attaching":"Attaching files…","composer.placeholder.listening":"Listening…","composer.placeholder.steer":"{name} is working. {key} sends this into the running turn","composer.placeholder.steerQueued":"{name} is working. Press {key} again to steer the queued message into the running turn","composer.placeholder.queueGroup":"{name} is working. {key} queues your message","composer.placeholder.queue":"{name} is working. Sends when this turn finishes","composer.placeholder.goal":"Describe what {name} should finish together","composer.placeholder.goalSolo":"Describe what {name} should finish","composer.placeholder.group":"Message {name} ({hint})","composer.placeholder.bot":"Message {name}","composer.hint.dm":"continue the conversation","composer.hint.everyone":"everyone responds","composer.hint.mentions":"@ to bring a bot in","composer.hint.responder":"{name} responds","composer.hint.lead":"Lead","composer.hint.auto":"Jev picks who responds","composer.queued.steering":"Steering…","composer.queued.steerAll":"Steer all","composer.queued.steerNext":"Steer next","composer.queued.steer":"Steer","composer.queued.steerAllHint":"Steer all {count} queued messages now","composer.queued.steerNextHint":"Steer the next queued message now","composer.queued.steerHint":"Steer queued message now","composer.queued.steerInterruptHint":"Stop the running turn and send this message now","composer.queued.steerAllInterruptHint":"Stop the running turn and send all {count} queued messages now","composer.queued.steerNextInterruptHint":"Stop the running turn and send the next queued message now","composer.queued.steeringAria":"Steering queued messages","composer.queued.steerImagesHeld":"Pictures can't be steered into this bot's running turn. Your message will be sent as the next turn.","composer.queued.regionOne":"1 queued message","composer.queued.regionMany":"{count} queued messages","composer.queued.list":"Queued messages","composer.queued.capacity":"Queued. Starts when this bot has a free thread slot.","composer.queued.groupTurn":"Queued. This bot's room turn runs one at a time; it starts when that finishes.","settings.threads.title":"Parallel threads","settings.threads.subtitle":"Choose how much each bot can work on at once.","settings.threads.label":"Maximum running threads per bot","settings.threads.helpHanded":"Applies to a bot's 1:1 threads. Extra messages queue until a slot opens. A room turn runs one at a time per bot, and direct messages queue behind it. Work handed on by another bot waits for a free thread. Threads waiting for approval use a slot. Lowering this limit does not stop running work; model limits and shared-computer protections still apply.","settings.threads.saving":"Saving…","settings.threads.error":"Could not save the thread limit. Please try again.","settings.recovery.title":"Automatic recovery","settings.recovery.enable":"Use a backup model","settings.recovery.help":"If an ACP model provider (such as Qwen or OpenCode) fails before starting, try a backup once. Work that may have already run is not replayed.","settings.recovery.scopeHanded":"Applies to direct bot threads, including Chief and work handed on. Channels are not included. Only this thread switches; bot defaults stay unchanged.","settings.recovery.ownBackups":"Bots with backups of their own (Model → Backup models for this bot) use those instead, whether or not this is on.","settings.recovery.engine":"Backup provider","settings.recovery.model":"Backup model","settings.recovery.chooseEngine":"Choose a provider","settings.recovery.chooseModel":"Choose a model","settings.recovery.unavailable":"{name} (unavailable)","settings.recovery.required":"Choose an available backup provider and model before saving.","settings.recovery.charges":"Permissions stay unchanged; some provider switches need confirmation. Using the backup can incur charges from its provider.","settings.recovery.error":"Could not save automatic recovery. Please try again.","settings.keepWarm.title":"Keep prompt cache warm","settings.keepWarm.subtitle":"For Claude bots signed in with a subscription. Design from Cache Tax (MIT) by Karan Bansal.","settings.keepWarm.enable":"Keep idle threads' prompt cache warm","settings.keepWarm.help":"After a turn in a thread with at least 50k tokens of context, {app} sends one tool-less, forked request every 50 idle minutes so the next message re-reads the cache instead of re-writing the whole thread. Nothing appears in the chat. It stops at the end of the window, when a ping finds the cache already gone, at the spend limit or at the usage limit.","settings.keepWarm.cost":"Each ping reads the thread's context at the cache-read rate and counts toward usage, spend limits and your plan's usage limit. Bots on an API key are never pinged: their cache lasts five minutes.","settings.keepWarm.window":"Keep warm for","settings.keepWarm.hours":"{hours} h","settings.keepWarm.error":"Could not save keep-warm. Please try again.","bot.keepWarm.title":"Keep prompt cache warm","bot.keepWarm.help":"Idle Claude threads with a big context get one cache read every 50 minutes for the window set in Settings → Model providers.","bot.keepWarm.follow":"Same as Settings ({state})","bot.keepWarm.on":"On","bot.keepWarm.off":"Off","settings.threadCleanup.title":"Event log cleanup","settings.threadCleanup.subtitle":"Trim the logs threads accumulate while they run.","settings.threadCleanup.retention.enable":"Delete event logs of finished threads after","settings.threadCleanup.retention.unit":"days","settings.threadCleanup.retention.help":"Off by default. When on, a daily sweep deletes the event-log files of threads that closed or were archived more than this many days ago. It only removes event-log files, never threads or transcripts.","settings.threadCleanup.cap.enable":"Trim each event log to","settings.threadCleanup.cap.unit":"MiB","settings.threadCleanup.cap.help":"Off by default. When on, each thread's event log is kept at or below this size. Cleanup only removes event-log files, never threads or transcripts.","settings.threadCleanup.invalidRetention":"Enter a number of days between 1 and 3650.","settings.threadCleanup.invalidCap":"Enter a size between 0.25 and 4096 MiB.","settings.threadCleanup.saving":"Saving…","settings.threadCleanup.error":"Could not save event log settings. Please try again.","settings.attachments.title":"Attachments","settings.attachments.used":"{used} of {max} used","settings.attachments.help":"Pictures and files added to chats are kept here. Clearing removes the ones older than 10 minutes; bot and profile pictures, the sidebar banner and files your routines use stay.","settings.attachments.confirmText":"Older messages will no longer show the files they had. This can't be undone.","settings.attachments.clear":"Clear attachments","settings.attachments.confirm":"Clear now","settings.attachments.cancel":"Cancel","settings.attachments.clearing":"Clearing…","settings.attachments.cleared":"Done. Files removed: {count} ({freed} freed).","settings.attachments.failed":"{count} could not be removed (in use or read-only). Try again later.","composer.queued.deleteAria":"Delete queued message {index} of {count}","composer.queued.deleteTitle":"Delete this queued message","composer.queued.editAria":"Edit queued message {index} of {count}","composer.queued.editTitle":"Edit: move this message back into the composer","composer.send.steer":"Send into the running turn","composer.send.queue":"Queue message","composer.send.message":"Send message","composer.send.queueHint":"Sends when the current turn finishes","composer.send.steerSimple":"Add this to what {name} is doing","composer.send.queueSimple":"Sends when {name} is done","composer.followUp.menu":"Choose how to send this message","composer.followUp.steer":"Steer now","composer.followUp.queue":"Queue","composer.followUp.restart":"Restart turn","composer.followUp.steerHint":"Interrupt what {name} is doing","composer.followUp.queueHint":"Run after the current turn","composer.followUp.restartHint":"Start the turn over with this message","composer.followUp.buttonTitle":"{title} · {key}: {alternate}","attach.unavailableOld":"This older file reference is no longer available to download","attach.downloadFailed":"Couldn't download that file. Try again.","attach.saveFailed":"That file could not be saved","attach.previewAria":"Preview {name}","attach.imagePreview":"Image preview","attach.position":"{index} of {count}","attach.downloadAria":"Download {name}","attach.download":"Download","attach.openOriginalAria":"Open original {name}","attach.openOriginal":"Open original","attach.close":"Close image preview","attach.previous":"Previous image","attach.next":"Next image","attach.retryAria":"Retry loading {name}","attach.imageUnavailable":"Image unavailable","attach.imageOutsideWorkspace":"This picture is outside this chat's working folder, so it can't be shown here","attach.previewImageAria":"Preview attached image {name}","attach.externalHidden":"External image hidden for privacy","attach.savedTo":"Saved to {path}","attach.saveAria":"Save a copy of {name}","attach.retrySaveAria":"Retry saving {name}","attach.downloading":"Downloading…","attach.downloaded":"Downloaded","attach.showInFolder":"Show in folder","attach.showInFinder":"Show in Finder","attach.originalMissing":"The original file was moved or deleted","attach.folderEmpty":"This folder has no files to open here","attach.folderFilesAria":"Files in {name}","attach.folderTruncated":"Only the first files are listed","attach.outsideWorkspace":"This file is outside this chat's working folder, so it can't be saved from here","attach.outsideWorkspacePath":"Find this file at this path on the computer running {app}","attach.revealMissing":"That file is no longer there","attach.revealFailed":"Couldn't show that file in its folder. It may have been moved or deleted.","task.renameHint":"Click to switch · double-click or right-click to rename","task.newBusy":"Let this turn finish first","task.new":"New thread: a fresh conversation","task.switchWithUsage":"All threads · {label} ({input} in · {output} out)","task.switchWithUsageDetail":"All threads · {label} ({detail})","task.switch":"All threads","task.otherActivity":"Other activity ({count})","task.workingElsewhere":"Working in other threads: {count}","attention.title":"Active Threads","attention.titleCount":"Active Threads, {count}","attention.empty":"No active threads","attention.item":"{title} · {name} · {status}","attention.pin":"Pin","attention.unpin":"Unpin","sidebar.pinnedThreads.title":"Pinned threads","sidebar.pinnedThreads.item":"{title} · {name}","task.search":"Search threads","task.renameAria":"Rename thread","task.renameNamed":"Rename {title}","task.renameTitle":"Rename this thread","task.regenerateTitle":"Regenerate title","task.regeneratingTitle":"Regenerating…","task.deleteAria":"Delete thread","task.deleteTitle":"Delete this thread and its conversation","model.effort.off":"Off","model.effort.quick":"Quick","model.effort.balanced":"Balanced","model.effort.deep":"Deep","model.effort.deeper":"Deeper","model.effort.max":"Max","model.blurb.smartest":"Smartest. Best for hard, long jobs.","model.blurb.balanced":"Fast and smart. Good for most work.","model.blurb.fastest":"Quickest and cheapest. Simple tasks.","model.blurb.light":"Quick and light.","model.simple.model":"Model","model.simple.manage":"Manage AI accounts","model.simple.needsSetup":"{name} needs to be set up before you can use it.","model.simple.setUp":"Set up","model.simple.apiKey":"API key","model.simple.noModels":"No models to show here yet.","model.simple.signInForOwn":"Sign in for {name}'s own models","model.simple.reasoning":"Reasoning","model.simple.botsModel":"{name}'s model","model.simple.botsModelScope":"{name}'s model, used in all its chats","model.simple.unavailable":"Unavailable","model.orgBlocked":"Turned off by your organization","model.simple.signIn":"Sign in","model.simple.lookingModels":"Looking for models…","model.simple.auto":"Auto","model.simple.useDefault":"Use default","model.simple.back":"Back","model.simple.clearSearch":"Clear search","model.simple.thinkingLevel":"{level} thinking. Higher is slower but more careful.","model.simple.thinkingDefault":"The model decides how hard to think.","model.simple.thinkingAuto":"Recommended. Effort is picked per message.","model.simple.effortHint.none":"No extra thinking. The fastest replies.","model.simple.effortHint.low":"A little thinking. Quick replies for simple asks.","model.simple.effortHint.medium":"Some thinking. A good balance for most work.","model.simple.effortHint.high":"Careful thinking for harder problems. Slower.","model.simple.effortHint.xhigh":"Very careful, for tricky multi-step work. Slower still.","model.simple.effortHint.max":"Thinks as long as it needs. Slowest, for the hardest jobs.","model.simple.thinkingSummary":"{level} thinking","model.setupRequired":"Setup required","model.signInRequired":"Sign-in required","model.ready":"Ready","model.provider":"Provider: {name}","model.search":"Search models","model.searchLocal":"Search local models","model.busy":"Stop this bot's turn before changing its model","model.threadBusy":"Stop this thread's turn before changing its model","model.reasoningNextTurn":"Reasoning level applies from the next message","model.choose":"Choose model","model.customSwitchOnHost":"This thread uses Custom approval. Switch its model in the app on the host computer, so leaving Custom can be confirmed there.","model.providerSwitch.title":"Switch model with Ask permissions?","model.providerSwitch.threadBody":"Switch this thread to {model} and reset its permissions to Ask. Existing tool approvals are cleared. Your bot default and other threads stay unchanged. You can review access for the new provider afterward.","model.providerSwitch.botBody":"Switch the bot's model to {model}, with Ask permissions and existing tool approvals cleared for this thread and the bot. Every thread that uses the bot's model switches too, back to Ask where the new provider needs it. Threads with their own model stay as they are. You can review access for the new provider afterward.","model.providerSwitch.confirm":"Switch with Ask","model.useBotModel":"Use {name}'s model","model.botModelTag":"(bot's model)","model.followsBot":"Uses {name}'s model","model.ownModel":"This thread's own model","model.threadsOwnModel":"{count} threads use their own model.","model.threadsOwnModelOne":"1 thread uses its own model.","model.switchThemToo":"Switch them too","model.switchItToo":"Switch it too","model.busyThreadKeptModelOne":"1 thread is busy, so it kept its own model. Try again when it's done.","model.busyThreadsKeptModel":"{count} threads are busy, so they kept their own model. Try again when they're done.","model.account":"Account","model.refreshing":"Refreshing {name} models","model.refresh":"Refresh {name} models","model.refreshTitle":"Refresh models","model.unconfirmed":"{name} hasn't listed its models yet. These may be out of date.","model.localModels":"Local models","model.local.noTools":"No tools","model.favorite.add":"Add {name} to favorites","model.favorite.remove":"Remove {name} from favorites","model.localHint":"Run this agent with a model already on your machine.","model.apiKeyHint":"Runs on your API key. The provider bills you for what it uses.","model.chooseHint":"Choose a model for this bot.","model.chooseThreadHint":"Choose a model for this thread.","model.localSoon":"Local models will appear as soon as the agent is installed.","model.results":"{count} results","model.allModels":"All models · {count}","model.suggested":"Suggested","model.useLocalCount":"Use a local model ({count} available)","model.useLocal":"Use a local model","model.addApiKeys":"Add API keys","model.addOrChangeApiKeys":"Add or change API keys","model.rail.cloud":"Cloud","model.rail.apiKeys":"API keys","model.rail.local":"Local","attach.loadImage":"Load image","attach.oldImage":"This older image reference is no longer available","attach.legacyFile":"{name} (unavailable legacy attachment)","attach.unavailable":"Unavailable","task.chip":"Thread","task.newShort":"New thread","task.sharedChat":"Shared chat","task.untitledConversation":"New conversation","task.untitledChat":"Untitled chat","task.matching":"{count} matching threads","task.list":"Threads","task.namedList":"{name} threads","task.collapseNamed":"Collapse {name} threads","task.expandNamed":"Expand {name} threads","task.showAll":"Show all {count} threads","task.bulk.select":"Select threads","task.bulk.done":"Done","task.bulk.selectAll":"Select all","task.bulk.older":"Older than {days} days","task.bulk.archived":"Archived","task.bulk.clear":"Clear","task.bulk.selected":"{count} selected","task.bulk.cancel":"Cancel","task.bulk.delete":"Delete {count}","task.bulk.deleting":"Deleting…","task.bulk.rowCheck":"Select {title}","task.bulk.running":"Running threads cannot be selected","task.bulk.confirmTitle":"Delete selected threads ({count})?","task.bulk.confirmBody":"This permanently removes these conversations and their messages. Generated project files are kept.","task.bulk.pinnedNote":"Pinned threads included: {count}.","task.bulk.freshNote":"Every thread is selected, so a new empty conversation will be started.","task.bulk.channelLimit":"A channel keeps at least one thread, so one stays unselected.","task.bulk.result":"Deleted: {count}.","task.bulk.resultBusy":"Kept because they are running: {count}.","task.bulk.resultMissing":"Already gone: {count}.","task.bulk.resultError":"Stopped early: {message}","task.archivedList":"Archived ({count})","task.empty":"No threads yet","task.newIn":"New thread in {name}","task.actions":"Actions for {title}","task.waiting":"Waiting","task.waitingOnTeammate":"Waiting on teammate","task.openedBy":"opened by {name}","task.helperGroup":"Opened by bots","task.closedBy":"closed by {name}","task.closed":"Closed","task.archive":"Archive","task.copyLink":"Copy link","task.link":"Link","task.openLink":"Open {link}","task.removeLink":"Remove link","task.assignLink":"Assign to thread","task.unassignLink":"Remove from thread","task.refreshPermissions":"Refresh permissions","task.refreshPermissionsHint":"Apply this bot's current approval level and saved approvals to this thread. Other threads stay as they are.","task.unarchive":"Unarchive","task.archived":"Archived","task.snooze":"Snooze","task.snoozeUntilActivity":"Until new activity","task.snoozeTonight":"Until 6 PM","task.snoozeTomorrow":"Until 9 AM tomorrow","task.stopSnoozing":"Stop snoozing","task.snoozed":"Snoozed","thread.gone":"That thread is no longer here.","thread.goneShowing":"That thread is no longer here. Showing {name} instead.","thread.botGone":"That bot is no longer here.","task.unread":"Unread","task.updated.justNow":"just now","task.updated.minutes":"{count} min ago","task.updated.hours":"{count} h ago","task.updated.yesterday":"yesterday","task.updated.days":"{count} d ago","task.unreadMany":"Unread threads","task.deleteConfirm":"Delete thread?","task.deleteBody":"“{title}” and its conversation will be deleted. This cannot be undone.","task.deleteAll":"Delete all threads…","task.deleteAllConfirm":"Delete all threads ({count})?","task.deleteAllConversations":"Delete all conversations…","task.deleteAllConversationsConfirm":"Delete all conversations ({count})?","folder.settings":"Folder settings","folder.markRead":"Mark folder as read","folder.showAll":"Show all","folder.markingRead":"Marking folder as read…","folder.markedRead":"Folder marked as read","folder.namedSettings":"{name} settings","folder.create":"Create folder","folder.new":"New folder","folder.newNamed":"New folder under {name}","folder.icon":"Choose folder icon","folder.iconNamed":"Change {name} folder icon","folder.emoji":"Custom emoji","folder.emojiHint":"Choose an emoji or paste one below. Leave blank for the default folder icon.","folder.defaultIcon":"Default folder icon","folder.save":"Save folder","folder.saving":"Saving…","folder.actions":"Actions for {name} folder","sidebar.bot.actions":"Actions for {name}","folder.moveUp":"Move folder up","folder.moveDown":"Move folder down","folder.reordering":"Saving folder order…","folder.reordered":"Folder order saved","task.queued":"Queued","folder.creating":"Creating…","folder.close":"Close folder settings","folder.name":"Folder name","folder.detail":"Keep related threads together under {name}. Moving a thread never changes its model, permissions, or conversation.","folder.saveName":"Save name","folder.delete":"Delete folder…","folder.deleteConfirm":"Delete folder, keep threads","folder.deleteBody":"Delete this folder? Its threads move out of the folder. All conversation history is kept.","folder.choose":"Choose folder for new thread","folder.newIn":"New thread in","folder.none":"No folder","folder.move":"Move to folder","folder.moveNamed":"Move {title} to folder","task.noMatch":"Nothing matches “{query}”","model.backTo":"Back to {name} models","model.afterSetupOne":"1 model will appear after setup.","model.afterSetupMany":"{count} models will appear after setup.","model.showAll":"Show all {count} models","model.showSuggested":"Show suggested only","model.loadedNow":"Loaded now","model.noLocal":"No local models found","model.noLocalHint":"Start oMLX, Ollama, Unsloth, LM Studio, or EXO, then reopen this picker.","model.lookingLocal":"Looking for local models…","model.loadingModels":"Loading {name} models…","model.available":"{count} available","model.noProviders":"No model providers are available.","model.noMatch":"Nothing matches “{query}”","model.typedByHand":"{id} · typed by hand","model.section.default":"Default model","model.section.starting":"Starting model for the new bot and its threads.","model.section.threads":"For groups and every thread that uses the bot's model. A thread keeps its own model only when you pick one in it.","model.section.installationDefault":"A new bot starts on this installation's default model unless you pick another here. To switch automatically when this model is at its usage limit, add backup models below.","model.section.effort":"Effort","model.section.startingReasoning":"Starting reasoning variant for the new bot.","model.section.effortHelp":"How hard this bot thinks in groups and every thread that uses its model.","model.section.effortHelpDefault":"How hard this bot thinks in groups and every thread that uses its model. By default, no level is sent.","model.effort.summary":"{level} effort","model.fallback.title":"Backup models for this bot","model.fallback.uses":"Used in order, with no other setting, when this bot's AI is at its usage limit or the provider proves a request never started. Work that may have run is not replayed. Only that thread switches; bot defaults and other threads stay unchanged. Backup provider charges may apply.","model.fallback.remove":"Remove {name} from the fallback list","model.fallback.model":"Model for {name}","model.fallback.add":"Add a backup AI","model.fallback.none":"No other AI is available","model.fallback.addOption":"Add an AI…","model.effort.label":"Reasoning effort","model.effort.default":"Default","model.effort.none":"None","model.effort.low":"Low","model.effort.medium":"Medium","model.effort.high":"High","model.effort.xhigh":"X-High","model.effort.noLevel":"Send no effort level and let the provider decide","model.effort.ask":"Ask for {level} reasoning effort","model.variant.label":"Reasoning variant","model.variant.openCodeDefault":"OpenCode default","model.variant.session":"Use session setting","model.variant.unavailable":"unavailable","model.variant.unverified":"unverified","model.variant.unavailableHelp":"Saved variant is unavailable. Choose another or use the session setting.","model.variant.unverifiedHelp":"Saved variant has not been checked in this session.","model.variant.unavailableChoice":"Saved variant “{variant}” is unavailable. Choose an available variant.","model.variant.unverifiedChoice":"Saved variant “{variant}” has not been checked in this session.","model.variant.none":"No variant selected.","model.variant.on":"On","model.variant.sessionValue":"Session: {variant}.","model.variant.clearHint":"Send no thinking selection; the agent keeps its session or configured setting","model.variant.clear":"Clear variant selection","model.variant.use":"Use {variant} for this model","model.scope.label":"Apply model changes to","model.scope.bot":"Thread + bot default","model.scope.thread":"Only this thread","model.scope.botHelp":"The bot's model: this thread, groups, and every thread that uses the bot's model.","model.scope.threadHelp":"This thread only. It keeps this model when the bot's model changes.","permissions.cannotCoordinate":"This model cannot contact other bots","permissions.openSystemSettings":"Open System Settings","permissions.chief.title":"Chief of Staff","permissions.chief.oneFor":"One for {section}","permissions.chief.unsupportedCurrent":"This bot still holds the role, but its current provider cannot contact teammates. Choose a provider that supports bot coordination.","permissions.chief.active":"This is the primary contact for {section}. It can create and coordinate specialists in this department, then combine their work into one answer.","permissions.chief.unsupported":"Choose a provider that supports bot coordination.","permissions.chief.replace":"Make this bot the {section} Chief and hand the role over from {current}.","permissions.chief.make":"Make this bot the primary contact for the {section} department.","permissions.approval.title":"Approval level","permissions.approval.draftHanded":"Default for the new bot's threads, routines and work handed to it.","permissions.approval.helpHanded":"Default for new threads, routines and work handed to it. Full access also applies at once to every existing thread. Use Refresh permissions on a thread to apply the current level to that conversation.","permissions.approval.applyFull":"Apply Full access to all threads","permissions.outbound.title":"Sending on your behalf","permissions.outbound.help":"Emails, messages, posts, invites, and payments through connected apps. Reading and drafting don't count as sending. Full access sends without asking unless you set a rule here.","permissions.outbound.ask":"Ask every time","permissions.outbound.askHint":"Every send waits for your tap.","permissions.outbound.allow":"Send without asking","permissions.outbound.allowHint":"Sends go out without waiting for your tap.","permissions.localAuto.title":"Allow Auto mode on this computer?","permissions.localAuto.body":"Auto mode will let this bot click, type, and run tools on this computer without asking first. Destructive and sensitive actions still stop. Continue only if you are watching.","rename.aria":"Rename","rename.named":"Rename {name}","rename.agent":"Rename agent","rename.doubleClick":"Double-click to rename","approvalMode.ask.label":"Ask for approval","approvalMode.ask.chip":"Ask","approvalMode.ask.desc":"Requests approval for commands and file changes","approvalMode.edits.label":"Auto-accept edits","approvalMode.edits.chip":"Edits","approvalMode.edits.desc":"Approves file edits automatically; other actions can still require approval","approvalMode.auto.label":"Approve for me","approvalMode.auto.chip":"Auto","approvalMode.auto.desc":"Uses the provider's automatic review to approve routine actions and ask about others. Web search is allowed without asking.","approvalMode.full.label":"Full access","approvalMode.full.chip":"Full access","approvalMode.full.desc":"Full computer access (elevated risk)","approvalMode.custom.label":"Custom (config.toml)","approvalMode.custom.chip":"Custom","approvalMode.custom.desc":"Uses permissions defined in config.toml","approvalMode.antigravity.label":"Auto (full access)","approvalMode.antigravity.desc":"Automatically approve tool requests for this bot, including commands, edits, and computer actions. No automatic review.","approvalMode.noNativeReview":"This provider has no automatic review; behaves like Ask","approvalMode.triggerAria":"{mode} for {provider}","approvalMode.whileWorking":"The bot is working. A change applies from its next step where its AI allows it, otherwise from its next turn.","approvalMode.threadTrustedNotice":"Full and Custom access are managed in bot settings in the desktop app.","approvalMode.menuAria":"Approval mode for {provider}","approvalMode.question":"How should {provider} actions be approved?","approvalMode.learnMore":"Learn more","approvalMode.customLocalOnly":"Custom approval must be changed in the local packaged desktop app","approvalMode.customLocalOnlyDot":"Custom approval must be changed in the local packaged desktop app.","onboarding.meet.title":"Meet {app}","onboarding.meet.next":"Next","onboarding.meet.demo":"Hand off any task to your team of bots","onboarding.meet.placeholder":"Welcome to {app}","onboarding.meet.connected":"Connected to {name}","onboarding.meet.otherWays":"Other ways to connect","onboarding.meet.setupLater":"Set up later","onboarding.meet.connectAi":"Connect an AI","onboarding.meet.connectNamed":"Connect {name}","onboarding.meet.signIn":"Sign in with {name}","onboarding.meet.install":"Install {name}","onboarding.meet.waiting":"Waiting for {name}…","onboarding.meet.paste":"Paste the code from {name}","onboarding.meet.pasteSubmit":"Use this code","onboarding.shell.placeholder":"Ask anything, or drop a file","onboarding.shell.noBots":"No bots yet","onboarding.hint.approval":"Bots ask before doing anything important.","onboarding.hint.connector":"Sign in once in your browser and every bot can use it.","onboarding.chief.title":"Introducing your Chief of Staff","onboarding.chief.body":"Your main point of contact. It checks in on its own and coordinates work with your other bots.","onboarding.chief.create":"Create Chief of Staff","onboarding.chief.choose":"Choose an existing bot","onboarding.chief.chooseTitle":"Choose your Chief of Staff","onboarding.chief.confirm":"Confirm","onboarding.continue":"Continue","onboarding.engines.error":"Couldn't check your AI connections. Try again.","onboarding.tour.error":"Couldn't save your progress. Try again, or skip the tour.","onboarding.engines.otherWays":"Other ways","onboarding.engines.connected":"{name} is connected. Your bots can start now.","onboarding.engines.answered":"Connected · {name}","onboarding.engines.checkingAnswer":"Checking that {name} answers…","onboarding.engines.noAnswer":"{name} is signed in but didn't answer. Try another way.","onboarding.engines.orAnother":"Or connect another AI below.","onboarding.engines.freeBackup":"{name}'s free model is ready as a backup. For the best answers, connect an AI you already use.","onboarding.engines.signInHint":"Use the {name} account you already have. You sign in on their own website, so your password stays with them.","onboarding.engines.ready":"Ready","onboarding.engines.needsSetup":"Needs setup","onboarding.org.title":"Using {app} at work?","onboarding.org.body":"Sign in with your organization.","onboarding.org.signIn":"Sign in","onboarding.org.otherAddress":"Other Admin address","onboarding.org.finish":"Finish in your browser","onboarding.org.finishHelp":"Sign in on the page that opened. It shows this code:","onboarding.org.connected":"Signed in to {organization}","onboarding.org.models":"Company models: {count}","onboarding.org.manage":"Organization settings","onboarding.import.skills":"Skills","onboarding.import.skillsFrom":"{count} from {sources}","onboarding.import.skillsHint":"Copied in, so your bots can use them with any AI.","onboarding.import.tools":"Tools","onboarding.import.toolsFrom":"{count} MCP servers from {sources}","onboarding.import.toolsFromOne":"1 MCP server from {sources}","onboarding.import.toolsHint":"Added switched off. Turn them on in Apps → MCP servers.","onboarding.import.source.claudeCode":"Claude Code","onboarding.import.source.claudeDesktop":"Claude Desktop","onboarding.import.source.cursor":"Cursor","onboarding.import.source.codex":"Codex","onboarding.import.source.gemini":"Gemini CLI","onboarding.import.bring":"Bring them in","onboarding.import.bringing":"Bringing them in…","onboarding.import.error":"Couldn't bring them in. Try again, or skip.","onboarding.import.added":"Added {list}.","onboarding.import.addedSkills":"{count} skills","onboarding.import.addedSkillsOne":"1 skill","onboarding.import.addedTools":"{count} tools","onboarding.import.addedToolsOne":"1 tool","onboarding.import.nothingNew":"All of it was already here.","onboarding.import.nothingAdded":"Nothing new was added.","onboarding.import.review":"{names}: switched off until you check what the scan found, in a bot's Skills settings.","onboarding.import.conflict":"Skipped {names}: a different skill with that name is already here.","onboarding.import.toolConflict":"Skipped {names}: a different MCP server with that name is already here.","onboarding.import.failed":"Couldn't bring in {names}. Try again later from Settings → Replay welcome tour.","onboarding.import.filesLeftOut":"Large or non-text files in skill folders were left out.","onboarding.import.limit":"{names} didn't fit: your list of MCP servers is full.","onboarding.import.policy":"Your organization doesn't allow {names}.","onboarding.import.busy":"Your MCP servers were being changed. Add {names} later in Apps → MCP servers.","settings.welcome.appTour":"Replay app tour","onboarding.tour.progress":"Step {current} of {total}","onboarding.tour.skip":"Skip tour","onboarding.tour.finish":"Finish","onboarding.tour.next":"Next","onboarding.tour.composer":"This is where you talk to your bots. Type anything and press {key}. Every chat is a real agent that does the work.","onboarding.tour.model":"Every bot has its own brain. This chip shows the model; click it to switch, even mid-conversation.","onboarding.tour.computer":"Bots have hands. This button opens the bot's screen, where you watch it work. Let's open it.","onboarding.tour.model-simple":"Click the bot's name up here to open its panel. Its instructions, schedules and apps are on the Details tab, and you can change them any time.","onboarding.tour.computer-simple":"Bots have hands. The bot's panel shows where it works, and you can watch its screen as it goes. Let's open that.","onboarding.tour.computer-browser":"The bot's screen. Switch between its desktop and its own browser here. The browser is where it reads the web and fills in forms for you.","onboarding.tour.tools":"The Tools menu. Connected apps, Automations, and the team map all live behind it. Let's open it.","onboarding.tour.apps":"Connected apps. Gmail, Slack, GitHub, Notion, and hundreds more. Let's have a look.","onboarding.tour.apps-panel":"The marketplace. Sign in to an app once and every bot can use it as a tool. We'll close this and move on.","onboarding.tour.automations":"Automations. Bots that run on a schedule, or when a webhook calls. Let's open it.","onboarding.tour.automations-page":"A calendar. Drop a bot on a time and it runs by itself; the result lands in its chat. Next takes you back to the chat.","onboarding.tour.done":"That's the tour, and you're back in the chat. Your phone, the terminal, and everything else is in Settings. Replay this any time from Settings → General.","onboarding.card.custom":"Type your own answer","onboarding.card.dismiss":"Dismiss question","onboarding.spot.gotIt":"Got it","onboarding.spot.composer":"This is where you talk to your bots. ⌘K finds any bot, room, or message.","onboarding.spot.model":"This bot runs on the model shown here. Change it any time, even mid-conversation.","onboarding.spot.approval":"When a bot needs your OK, it asks with a card like this. Allow or deny.","onboarding.spot.connector":"When a bot needs an app you haven't connected, it asks here. Sign in once in your browser and every bot can use it.","onboarding.back":"Back","onboarding.bot.name":"Bot name","onboarding.bot.color":"Color","chief.addBotStarter":"I'd like another bot to help me. Ask me what it should do.","onboarding.hosted.intro":"This is your team's shared {app}. Everyone who joins sees the same bots, chats and files. Your organization provides the AI models, so there is nothing to install.","onboarding.shared.title":"Your team's shared {app}","onboarding.shared.body":"Bots, chats and files here are shared with your team. Your administrator sets up the AI models and settings, so you can start chatting right away.","settings.welcome.title":"Welcome tour","settings.welcome.subtitle":"The first-run walkthrough: model providers, permissions, phone, and your first bot.","settings.welcome.subtitleShort":"Meet the app and your Chief of Staff again, and connect an AI.","settings.welcome.replay":"Replay welcome tour","engineSetup.copyCommand":"Copy command","engineSetup.setupTitle":"Set up {name}","engineSetup.terminalSignInCheck":"Installed. Finish signing in to your account in Terminal, then choose Check again.","engineSetup.sameMachine":"Install and sign in on the computer running {app}, as the same user. On a remote connection, that means the machine it runs on, not this device. Then choose Check again. No app restart needed.","engineSetup.cloudCantInstall":"{name} can’t be installed on the Cloud yet. Choose another AI in the model picker.","engineSetup.pathHint":"Already installed but still not detected? In Settings → Model providers and accounts, expand CLI path and updates and use Set CLI to choose the executable.","engineSetup.checkFailed":"Could not refresh provider status. The previous status is still shown. {reason}","engineSetup.checked":"Provider status refreshed.","engineSetup.invalidStatus":"Couldn't get the status of your AIs. Try checking again.","engineSetup.installNotVerified":"The installer finished, but the provider is not usable yet. {reason}","engineSetup.installVerified":"Installation verified. Sign in if requested.","engineSetup.copied":"Copied","engineSetup.copy":"Copy","engineSetup.opened":"Opened","engineSetup.terminal":"Terminal","engineSetup.openedHint":"Terminal opened. Paste the command and press Enter.","engineSetup.terminalOpened":"Terminal opened","engineSetup.pasteHint":"Paste the command and press Enter.","engineSetup.copyOnOpenHint":"The command is copied when Terminal opens.","engineSetup.commandCopied":"Command copied","engineSetup.openUpdate":"Open update in Terminal","engineSetup.installing":"Downloading and verifying…","engineSetup.downloadNote":"{mb} MB download from Google. {app} verifies it before use.","engineSetup.startingGoogle":"Starting Google sign-in…","engineSetup.openGoogleAgain":"Open Google sign-in again","engineSetup.signInGoogle":"Sign in with Google","engineSetup.antigravitySlow":"Starting Antigravity can take up to 90 seconds. Your browser will open when it’s ready.","engineSetup.finishedSignIn":"I finished signing in","engineSetup.otherComputer":"Signing in from another computer?","engineSetup.otherComputerHint":"After Google redirects to a page that cannot load, paste that page’s complete URL here.","engineSetup.otherComputerUrl":"Page address from the other computer","engineSetup.sending":"Sending…","engineSetup.sendRedirect":"Send redirect","engineSetup.googleNoLink":"Google sign-in did not return a link.","engineSetup.signInTitle":"Sign in to {name}","engineSetup.installTitle":"Install {name}","engineSetup.managedSignIn":"Each Antigravity setup has its own Google account. Your browser completes the secure sign-in.","engineSetup.terminalSignIn":"Finish the account sign-in in Terminal. Reopen this menu afterward and we’ll check again.","engineSetup.injectDesc":"Install the agent once, then you can run it with local models. No cloud sign-in required.","engineSetup.managedDesc":"{app} installs its own verified Antigravity runtime. It is separate from the Antigravity app and agy CLI; install it here, sign in with Google, and this model list will refresh from your account.","engineSetup.installDesc":"Install the command-line app once. Models will appear here as soon as it’s ready.","engineSetup.installDescSignIn":"Install the command-line app once. Models will appear here as soon as it’s ready; sign-in may follow.","engineSetup.notReady":"{name} isn’t ready","engineSetup.noReason":"This model provider is not available on this machine.","engineSetup.openSignIn":"Open sign-in in Terminal","engineSetup.openInstall":"Open install in Terminal","engineSetup.noInstaller":"There isn’t a one-line installer for this platform. Use the setup guide below.","engineSetup.apiKey.rejected":"The provider rejected the saved key.","engineSetup.apiKey.title":"{name} needs an API key","engineSetup.apiKey.description":"Paste your key in Settings → API keys. It saves and checks itself, and the models show up here.","engineSetup.apiKey.remote":"Add the key in Settings → API keys on the computer running {app}.","engineSetup.apiKey.open":"Open API keys","engineSetup.apiKey.configuredTitle":"{name} uses your API key","engineSetup.apiKey.configuredDescription":"To fix a typo or use a new key, replace or clear it in Settings → API keys.","engineSetup.apiKey.configuredRemote":"To change the key, open Settings → API keys on the computer running {app}.","engineSetup.apiKey.change":"Change key","engineSetup.serverInstall":"Install {name} here","engineSetup.serverUpdate":"Update {name} here","engineSetup.serverInstalling":"Installing. This can take a minute.","engineSetup.serverInstalled":"Installed. Checking the model provider.","engineSetup.usingAppCopy":"Another copy of {name} on this computer doesn't start, so {name} now uses the copy {app} installed.","engineSetup.usingAppCopyDismiss":"Dismiss","engineSetup.appCopy.title":"{name} is installed","engineSetup.appCopy.description":"{name} works with its free models, so choose Check again to load them. To use your own account instead, add your {name} API key in Settings → API keys.","engineSetup.appCopy.remote":"{name} works with its free models, so choose Check again to load them. To use your own account instead, add your {name} API key in Settings → API keys on the computer running {app}.","engineSetup.standaloneDownloadNote":"About {mb} MB download. {app} checks it before installing.","engineSetup.serverInstallDesc":"{app} installs the command-line app on the machine it runs on, as its own user, in its own folder. No terminal needed; sign-in may follow.","engineSetup.serverUpdateDesc":"{app} updates the command-line app on the machine it runs on. No terminal needed.","engineSetup.preferTerminal":"Prefer a terminal?","engineSetup.details":"Details","engineSetup.needsNode":"Requires Node.js and {npm}.","engineSetup.viewGuide":"View setup guide","settings.experimental.title":"Experimental features","settings.experimental.subtitle":"Early features may change while we test them. Each one says whether it starts on or off.","settings.experimental.error":"Could not save the experimental feature setting.","settings.experimental.skillAuthoring":"Bots may write their own skills","settings.experimental.skillAuthoringDetail":"On by default. Save a bot's verification run as a skill from the Verify card, or ask a supported bot to run /create-verification-skill. Each new or changed skill shows in the chat with Undo.","settings.experimental.skillAuthoringAria":"Allow bots to draft skills","settings.experimental.skillReview":"Learn skills automatically","settings.experimental.skillReviewDetail":"On by default. After a bot has run enough tool steps in a conversation, it reviews that conversation in the background and may create or improve its own skills. The review uses the bot's AI and counts toward spend limits. Each change shows in the chat with Undo.","settings.experimental.skillReviewNeedsAuthoring":"Turn on “Bots may write their own skills” first.","settings.experimental.skillReviewAria":"Let bots learn skills automatically","settings.experimental.skillAutoApply":"Learn new skills without asking","settings.experimental.skillAutoApplyDetail":"On: a skill a bot learns is added at once, with Undo. Off: the bot asks “Learn this new skill?” first.","settings.experimental.skillAutoApplyAria":"Learn new skills without asking","settings.experimental.skillReviewSteps":"Review after this many tool steps","settings.experimental.skillReviewStepsRange":"Enter a whole number from {min} to {max}.","settings.experimental.shareSkills":"Share learned skills with the department","settings.experimental.shareSkillsDetail":"When a bot learns or improves a skill, it moves into the skills library and every bot in the same department gets it. Conversations already running hear about it on their next message; new ones list it. A teammate with its own skill of that name keeps it.","settings.experimental.shareSkillsNeedsAuthoring":"Turn on “Bots may write their own skills” first.","settings.experimental.shareSkillsAria":"How learned skills are shared with the department","settings.experimental.shareSkillsOff":"Off","settings.experimental.shareSkillsAsk":"Ask","settings.experimental.shareSkillsAuto":"Automatic","settings.experimental.skillReviewNoEngine":"Bots on {engines} won't learn skills this way: their AI can't run the background review.","settings.experimental.browser":"Built-in browser","settings.experimental.browserOn":"Enabled for this installation. Each bot also has its own browser switch.","settings.experimental.browserOff":"Off by default. Enable it to let supported bots use a browser tab you can watch and take over.","settings.experimental.browserWindows":"Not available on this Windows machine yet: install the browser with `limixbot browser install`.","settings.experimental.browserAria":"Enable the built-in browser","settings.browser.serverSites":"Open sites on this server","settings.browser.serverSitesDetail":"Off by default. Turn it on to let bots' browsers open websites hosted on this server and on its local network. Limix Bot itself stays blocked.","settings.experimental.newBrowser":"New browser","settings.experimental.newBrowserDetail":"Off by default. Bots' browsers run on {app}'s own Chrome driver instead of agent-browser: pages render at your screen's sharpness, and bots can handle uploads, downloads, dialogs and pop-ups. Profiles that use your own Chrome are not affected. Switching closes open browsers, and sign-ins saved in one do not carry over to the other.","settings.experimental.newBrowserAria":"Use the new browser","browser.notInstalled":"The browser isn't installed here yet. Turn on the browser switches in App Settings → Devices and in the bot's Access settings, then open Bot's screen → Browser to install it. Or run `limixbot browser install` where the app runs.","browser.panel.profileTitle":"Browser profile: {name}","browser.panel.profiles":"Browser profiles","browser.panel.closeProfiles":"Close browser profiles","browser.panel.closeTyping":"Close typing","browser.panel.typeTextTitle":"Type into the selected page field","browser.panel.typeTextField":"Text for the page","browser.panel.typeTextPlaceholder":"Type or paste text","browser.panel.typeButton":"Type","browser.panel.enableBot":"Enable the browser in this bot's profile to use it.","browser.panel.installIncomplete":"Browser installation incomplete","browser.panel.engineNotInstalled":"The browser isn't installed","browser.panel.engineNotInstalledHelp":"Install it so {name} can open web pages. It's a one-time download of about 160 MB.","browser.panel.installIncompleteHelp":"agent-browser is installed, but Chrome setup has not finished. Retry the browser installation.","browser.panel.installing":"Installing… (a one-time download of about 160 MB)","browser.panel.retryInstall":"Retry browser installation","browser.panel.installEngine":"Install the browser","browser.panel.newTab":"New tab","browser.panel.tab":"tab","browser.panel.closeTab":"Close {title}","browser.panel.fullscreen":"Full screen","browser.panel.exitFullscreen":"Exit full screen","browser.panel.enterAddress":"Enter a web address or something to search for.","browser.panel.back":"Back","browser.panel.forward":"Forward","browser.panel.reload":"Reload page","browser.panel.address":"Browser address","browser.panel.connecting":"Connecting…","browser.panel.menu":"Browser menu","browser.panel.typeTextMenu":"Type or paste text…","browser.panel.reconnectView":"Reconnect view","browser.panel.confirmRestart":"Restart this profile’s browser? Open tabs will close. Saved logins are kept. Stop any bots using it first.","browser.panel.restartBrowser":"Restart browser…","browser.panel.connectionFirst":"Open the browser connection first.","browser.panel.heldElsewhere":"Another window or device controls this browser. Hand control back there to use it here.","browser.panel.reconnecting":"Reconnecting…","browser.panel.disconnected":"Browser disconnected","browser.panel.opening":"Opening the live browser…","browser.panel.connectionInterrupted":"Connection interrupted. Reconnecting the browser view…","browser.noEngine":"The browser isn't available here.","browser.panel.connectionEnded":"Browser connection ended. Reconnect to continue watching.","browser.panel.reconnect":"Reconnect","browser.panel.asleep":"This browser closed after it sat unused, to save memory.","browser.panel.wake":"Open it again","browser.panel.waking":"Opening…","browser.passkey.title":"This browser can’t use your passkey","browser.passkey.body":"{provider} is asking for a passkey from your phone or computer. A bot’s browser can’t reach it, so this step won’t finish here. What works instead:","browser.passkey.appsGoogle":"For Gmail, Calendar or Drive, connect Google as an app. {name} then works without signing in here.","browser.passkey.appsMicrosoft":"For Outlook, Calendar or OneDrive, connect Microsoft as an app. {name} then works without signing in here.","browser.passkey.connect":"Open Connected apps","browser.passkey.otherWayGoogle":"To sign in here anyway, choose Try another way on this page, then use your password and a code from your authenticator app, a text message or a backup code.","browser.passkey.otherWayMicrosoft":"To sign in here anyway, choose Other ways to sign in on this page, then use your password and a code from your authenticator app, a text message or a backup code.","browser.passkey.lentPc":"Your PC {computer} is shared with the Cloud: ask {name} to sign in with the browser on that PC, where your passkey works. You approve it at the PC.","browser.passkey.lendPc":"Or open {app} on your PC: it shares its apps and screen with the Cloud by itself, so {name} can use the browser on that PC, where your passkey works.","browser.passkey.learnMore":"Learn more","browser.passkey.dismiss":"Dismiss","browser.control.yours":"You’re using the browser","browser.control.yoursHint":"{name}’s browser tools are paused while you use it. Control goes back to {name} after a few seconds without input.","browser.control.waiting":"Waiting for {name} to finish…","browser.control.stale":"{name} was busy, so that wasn’t sent. Try again.","browser.control.keptHint":"{name}’s browser tools are paused until you hand back. Control goes back to {name} by itself after 5 minutes without input, or 2 minutes after you close the browser.","browser.control.take":"Take control","browser.control.handBack":"Hand back","browser.typeSecret":"Type a password or code…","browser.typeSecret.title":"Type a password or code into the selected field","browser.typeSecret.field":"Password or code for the page","browser.typeSecret.note":"It goes only to the page. {app} does not keep, log or show it.","signIn.title":"Sign in needed","signIn.cardLabel":"{name} needs you to sign in to {site}","signIn.banner":"needs you to sign in to {site}","signIn.open":"Open","signIn.done":"Done","signIn.cancel":"Cancel","signIn.where.browser":"Sign in in {name}’s built-in browser. Open takes you to its Browser tab, already in your control.","signIn.where.vm":"Sign in on the private desktop {name} works on. Open shows it with Take control.","signIn.where.cloud":"Sign in on the cloud desktop {name} works on. Open shows it with Take control.","signIn.where.local":"Sign in on this computer, in the browser {name} is using.","signIn.where.host":"Sign in on the computer {app} runs on, in the browser {name} is using.","signIn.local.explain":"Go to the browser window {name} is using on this computer and sign in there. Not the Browser tab: it keeps its own sign-ins, which {name} does not use here. Then press Done.","signIn.local.explainHost":"Sign in at the computer {app} runs on, in the browser window {name} is using there. A Browser tab keeps its own sign-ins, which {name} does not use here. Then press Done.","signIn.private":"You type the password into the page yourself. {app} never sees it.","signIn.superseded":"Superseded by a newer request","signIn.answeredInChat":"You answered in the chat","signIn.retry":"Try again","signIn.settled.done":"Signed in to {site}","signIn.settled.cancelled":"Sign-in to {site} declined","signIn.settled.resumed":"{name} is continuing","signIn.settled.waiting":"Waiting to resume","signIn.settled.failed":"Resuming failed","signIn.saveLogin":"Save a login","signIn.save.note":"Save the username and password for {site}. From now on {name} signs in with them without you, and never sees the password. Change or delete it in Settings → Logins.","signIn.save.noteShared":"Save the username and password for {site}. {name} and the bots that share its browser ({bots}) sign in with them from now on, without you, and never see the password. Change or delete it in Settings → Logins.","signIn.save.submit":"Save and continue","signIn.save.elsewhere":"Also fill it on {host}, the sign-in page open in the browser now","signIn.settled.saved":"Login saved for {site}","browser.live.botBusy":"{name} is using this browser. The live view opens when it’s free…","browser.input.tooSlow":"Browser input stopped because the browser is not keeping up with it (it may be stuck, or the connection may be slow). Reconnect the view before typing again. If it stays stuck, restart the browser.","browser.profiles.heldElsewhere":"Another window is using this browser. Switch profiles once it’s done.","browser.profiles.busy":"Profiles unlock once the current browser action finishes.","browser.viewport.keysHint":"Once you click or type in the page, your keys go to it; until then Tab moves on. Press Shift+Escape to return to the browser address bar.","settings.profiles.title":"Browser profiles","settings.profiles.subtitle":"Named sign-in sessions any bot can use. Create one from a bot's Browser tab; sign in once and it stays.","settings.profiles.empty":`No profiles yet. Pick "+ Add profile…" under a bot's browser.`,"settings.profiles.saveError":"Could not save browser profiles.","settings.profiles.deleteError":"Couldn't delete the browser profile. Try again.","settings.profiles.confirm":"Delete “{name}”?{bots} This permanently signs out of this profile and erases its browser data.","settings.profiles.confirmOneBot":" {name} will switch to their own browser sessions.","settings.profiles.confirmManyBots":" {count} bots will switch to their own browser sessions.","settings.profiles.nameAria":"Profile name","settings.profiles.rename":"Rename","settings.profiles.usedBy":"used by {names}","settings.profiles.notInUse":"not in use","settings.profiles.deleteTitle":"Delete this profile and forget its logins","settings.profiles.busyOne":"{names} is still running. Stop that bot before deleting this browser profile.","settings.profiles.busyMany":"{names} are still running. Stop those bots before deleting this browser profile.","settings.profiles.browserSession":"Browser profile","settings.profiles.sharedSubtitle":"Shared browser logins for your bots. Create a profile here, then choose it in a bot's Browser tab.","settings.profiles.sharedEmpty":"No shared profiles yet. Each bot still has its own browser.","settings.profiles.own":"Own browser","settings.profiles.temporary":"Temporary (don't save logins)","settings.profiles.temporaryHint":"Temporary sessions keep logins only while the app is running. They aren't saved to disk.","settings.profiles.sharedHint":"Your own browser keeps logins private to this bot. Bots on a shared profile share whatever it is signed in to; a saved login kept to some bots is filled there only if every bot on the profile may use it.","settings.profiles.stopToSwitch":"Stop this bot's turn before switching browser profiles.","settings.profiles.manage":"Manage profiles","settings.profiles.newName":"New profile name","settings.profiles.create":"Create profile","settings.profiles.limit":"You can keep up to 20 shared profiles.","settings.adminOnly.change":"Only an admin of this installation can change this.","settings.adminOnly.usage":"Only an admin of this installation can see usage.","settings.profiles.ownerOnly":"Only an admin of this installation can manage browser profiles.","settings.profiles.refreshError":"Could not refresh browser profiles. Reload this page before trying again.","settings.profiles.removed":"This profile was removed. Choose another browser profile.","settings.profiles.deleteUsers":"These bots will switch to their own browser: {names}.","settings.profiles.browserLabel":"Browser","settings.profiles.builtIn":"Built-in","settings.profiles.myChrome":"My Chrome","settings.profiles.myChromeHint":"Bots on this profile act inside your real Chrome, signed in as you, with your cookies and your open tabs. Use it for sites that refuse the built-in browser, such as Google sign-in. To connect, open chrome://inspect/#remote-debugging in Chrome and turn remote debugging on; Chrome asks you to allow the connection. Sign in and out of sites in Chrome itself.","settings.profiles.myChromeUnavailable":"My Chrome is for the desktop app, where bots run on your own computer. Anywhere else, such as the Cloud, there is no Chrome of yours to use, so every profile uses the built-in browser.","settings.profiles.myChromeLent":"On My Cloud this is the Chrome on {name}, your {device}. It works while that {device} is awake with {app} open, in conversations you started yourself.","settings.profiles.myChromeLentOffline":"{name} is offline right now.","settings.profiles.myChromeShare":"To use My Chrome on My Cloud, open {app} on your Mac or PC: it shares its Chrome by itself while it's awake. Until then, bots on a My Chrome profile can't browse; switching a profile to Built-in works too.","settings.sites.title":"Signed-in sites","logins.site":"Login page address","logins.sitePlaceholder":"accounts.example.com","logins.siteHint":"The address of the page with the password box. The login fills anywhere on that site (accounts.example.com and www.example.com are both example.com), never on another site.","logins.username":"Username or email","logins.password":"Password","logins.passwordKeep":"New password (leave empty to keep the saved one)","logins.passwordNeeded":"Enter the password.","logins.totp":"2FA setup key (optional)","logins.totpKeep":"New 2FA setup key (leave empty to keep the saved one)","logins.totpHint":"The key or otpauth:// address a site shows when you set up an authenticator app. With it, the one-time code is filled too.","logins.private":"Encrypted on the computer {app} runs on and never shown again. Bots never see it: {app} types it into the login page for them.","logins.cancel":"Cancel","logins.saveError":"Could not save the login.","settings.logins.loading":"Loading saved logins…","settings.logins.loadError":"Could not load saved logins.","settings.logins.deleteError":"Couldn't delete the login. Try again.","settings.logins.save":"Save login","settings.logins.saveChange":"Save changes","settings.logins.change":"Change","settings.logins.changeFor":"Change the login for {site}","settings.logins.delete":"Delete","settings.logins.deleteFor":"Delete the login for {site}","settings.logins.deleteConfirm":"Delete for good","settings.logins.twoFactor":"2FA","settings.logins.noUsername":"No username","settings.logins.source.card":"Saved from a chat","settings.logins.source.settings":"Added here","settings.logins.sharedBrowser":"Not filled for {bots}: that browser is shared with bots this login isn't kept to, and a sign-in there would reach them too. Give each a browser of its own, or keep the login to every bot on it.","settings.logins.source.1password":"From 1Password","settings.logins.used":"Used {when}","settings.logins.neverUsed":"Not used yet","settings.logins.whoCanUse":"Who can use it","settings.logins.allBots":"All bots","settings.logins.onlyThese":"Only these bots","settings.logins.noBots":"No bots","settings.logins.exactHost":"Only on this exact address, not elsewhere on its site","settings.logins.exactHostFor":"Only on {hosts}, not elsewhere on {site}","settings.logins.onlyOn":"Only on {hosts}","settings.logins.signsInOn":"Also signs in on {hosts}","settings.logins.removeTotp":"Remove the saved 2FA key","settings.logins.limits":"Bots get the password typed into the page, never as text, and it is hidden from anything they read back. A screenshot of the page can still show what a site displays, so save logins only for sites you trust your bots with.","settings.logins.onePassword.title":"1Password","settings.logins.onePassword.guide":"Let bots use logins, keys and secrets from 1Password. In 1Password, create a service account that can read one vault only, such as “Shared with {app}”, then paste its token here.","settings.logins.onePassword.token":"Service account token","settings.logins.onePassword.connect":"Connect 1Password","settings.logins.onePassword.connected":"Connected to {vaults} · {count} logins, keys and secrets","settings.logins.onePassword.refresh":"Refresh","settings.logins.onePassword.disconnect":"Disconnect","settings.logins.onePassword.vaults":"1Password vaults","settings.logins.onePassword.vaultUse":"{count} logins · {who}","settings.logins.onePassword.changeVault":"Change who can use {vault}","settings.logins.onePassword.error":"Couldn't reach 1Password. Check your internet connection and the token, then try again.","settings.logins.onePassword.note":"The token is encrypted on the computer {app} runs on and never shown again. 1Password logins appear in the list above, filled the same way, and are changed in 1Password. A vault is for every bot unless you choose bots for it.","settings.logins.cloudOwn":"These are the Cloud's own logins. Your computer's logins come here by themselves when the {app} app on that computer moves your bots here.","settings.vault.title":"Vault","settings.vault.subtitle":"Passwords and keys your bots can use. Bots never see them: {app} types a password into the login page for a bot, and gives a key to its tools without showing it.","settings.vault.adminOnly":"Only an admin of this installation can see and change the Vault.","settings.vault.loading":"Loading the Vault…","settings.vault.loadError":"Could not load the Vault.","settings.vault.empty":"Nothing saved yet. Add a login or a secret here, or save one when a bot asks for it.","settings.vault.noMatch":"Nothing matches your search.","settings.vault.search":"Search the Vault","settings.vault.filter":"Show","settings.vault.filter.all":"All","settings.vault.filter.logins":"Logins","settings.vault.filter.secrets":"Keys & secrets","settings.vault.add":"Add","settings.vault.addLogin":"Add a login","settings.vault.addSecret":"Add a secret","settings.vault.importEnv":"Paste a .env file","settings.vault.secret.name":"Name","settings.vault.secret.namePlaceholder":"Stripe secret key","settings.vault.secret.nameHint":"Bots ask for it by this name.","settings.vault.secret.value":"Secret","settings.vault.secret.valueKeep":"New secret (leave empty to keep the saved one)","settings.vault.secret.save":"Save secret","settings.vault.secret.changeFor":"Change {name}","settings.vault.secret.deleteFor":"Delete {name}","settings.vault.secret.keyOff":"{servers} no longer has its key, so it stays off until it gets a new one.","settings.vault.secret.saveError":"Could not save the secret.","settings.vault.secret.private":"Encrypted on the computer {app} runs on and never shown again. Bots never see it: {app} hands it to their tools.","settings.vault.env.label":".env file","settings.vault.env.hint":"Each NAME=value line becomes a secret called NAME. Lines starting with # are skipped.","settings.vault.env.submit":"Import","settings.vault.env.none":"No NAME=value lines found.","settings.vault.env.done":"Saved to the Vault: {count}.","settings.vault.keys.title":"AI and app keys","settings.vault.keys.hint":"Keys {app} uses itself, such as your AI provider's, are kept in API keys.","settings.vault.manager":"Password manager","settings.sites.loading":"Checking…","settings.sites.none":"Not signed in to any site.","settings.sites.shared":"{names} share this browser: signing out here signs all of them out.","settings.sites.signOut":"Sign out","settings.sites.signOutOf":"Sign out of {site}","settings.sites.signOutAll":"Sign out of all","settings.sites.error":"Couldn't read this browser's sign-ins. Try again in a moment.","settings.connections.title":"API keys","settings.connections.subtitle":"Keys for AI providers and optional services. Paste a key and it saves and checks itself.","settings.connections.ready":"Connected apps service is ready","settings.connections.selfHost":"Self-host connected apps","settings.engines.title":"Model providers and accounts","settings.engines.subtitle":"Manage provider apps and Claude accounts.","keys.composio.label":"Composio project key","keys.composio.desc":"Connect Gmail, GitHub, Slack, Notion, and other apps through your own Composio project.","keys.composio.link":"Create or copy a project key","keys.opencode.label":"OpenCode API key","keys.opencode.placeholder":"Paste an OpenCode API key","keys.opencode.desc":"Optional. Existing OpenCode Zen, Go, and other provider connections are detected automatically.","keys.opencode.link":"Open the OpenCode provider guide","keys.opencode.providersHint":"More providers for OpenCode bots (Anthropic, OpenAI, OpenRouter, Groq, or your own router): run {command} in a terminal, then refresh OpenCode’s models under Model providers.","keys.opencode.otherProviders.title":"Keys for other OpenCode providers","keys.opencode.otherProviders.hint":"Save a key for any provider OpenCode supports, under the name OpenCode reads it from, such as VENICE_API_KEY for Venice. OpenCode then lists that provider's models. Keys go only to OpenCode and can't be shown again.","keys.opencode.otherProviders.name":"Key name","keys.opencode.otherProviders.key":"Key","keys.opencode.otherProviders.keyPlaceholder":"Paste the key","keys.opencode.otherProviders.removeAria":"Remove {name}","keys.aboutAria":"About {label}","keys.helpAria":"{label} help","keys.optional":"Optional","keys.configured":"Configured","keys.includedWithCloudPro":"Included with your Cloud plan","keys.testAuthenticated":"API key authenticated. Chat not tested.","keys.testFreeTier":'Free account: bots will use free models (marked "free" in the model picker).',"keys.testCatalog":"Model catalog reachable: {models}. Authentication and chat not verified.","keys.testCatalogNoModels":"Model catalog reachable. Authentication and chat not verified.","keys.testDraft":"Unsaved key. Save it to use it.","keys.testSaved":"Saved key:","keys.connected":"Connected","keys.replace":"•••••••• (paste to replace)","keys.removeKey":"Remove the saved key","keys.clear":"Clear","keys.notAKey":"That doesn't look like an API key: keys have no spaces. Copy the key again and paste it here.","keys.providers.title":"Provider keys","keys.providers.subtitle":"Keys every bot in this installation runs on, billed per token to your provider account.","lmStudio.title":"LM Studio (Bionic)","lmStudio.desc":"Bionic is the current LM Studio app. Start its local API server, then add it here. Downloaded chat models are detected from the server.","lmStudio.port":"Port","lmStudio.token":"API token (optional)","lmStudio.tokenHint":"Leave this empty unless Require authentication is on in LM Studio.","lmStudio.add":"Add LM Studio","lmStudio.adding":"Adding…","lmStudio.added":"This server is already added.","ollama.title":"Ollama","ollama.checking":"Looking for Ollama…","ollama.ready":"Ollama is running at {url}. Pulled models: {count}.","ollama.noModels":"Ollama is running at {url} but has no models yet. Pull one, then check again:","ollama.notRunning":"Ollama isn’t running at {url}. Open the Ollama app, or start it with:","ollama.unreachable":"Can’t reach Ollama at {url}. Check the address and that this computer can reach it.","ollama.timeout":"Ollama at {url} didn’t answer in time. Check that it’s running and reachable, then check again.","ollama.notOllama":"Something answers at {url}, but it isn’t Ollama. Check the address.","ollama.address":"Ollama address","ollama.addressHint":"Leave this empty for this computer, or enter another computer’s address and check again.","ollama.add":"Add Ollama","ollama.adding":"Adding…","ollama.added":"Ollama at this address is already added.","ollama.download":"Download Ollama","ollama.short.notRunning":"Not running","ollama.short.noModels":"No models yet","ollama.short.unreachable":"Can’t be reached","keys.integrations.title":"Integrations","keys.anthropic.label":"Anthropic API key","keys.anthropic.desc":"Adds “Claude (API key)” to the model picker, billed per token to your Anthropic console. Signed-in Claude bots keep their plan.","keys.anthropic.warning":"While this key is saved, every Claude bot uses it instead of a Claude login, billed per token to your Anthropic account.","keys.anthropic.everyBot":"Use this key for every Claude bot","keys.anthropic.everyBotOn":"Every Claude bot runs on this key instead of its sign-in.","keys.anthropic.everyBotOff":"Only bots set to “Claude (API key)” use it. Signed-in Claude bots stay on their plan.","keys.anthropic.link":"Anthropic console","keys.openai.label":"OpenAI API key","keys.openai.desc":"Adds OpenAI's models to the model picker and lets you make Live calls, billed to your OpenAI account.","keys.openai.note":"Codex doesn't use this key. It signs in with ChatGPT.","keys.openai.link":"OpenAI API keys","keys.openrouter.label":"OpenRouter API key","keys.openrouter.desc":"Adds OpenRouter's catalog of models to the model picker, billed to your OpenRouter credits.","keys.openrouter.link":"OpenRouter keys","keys.other.title":"Other OpenAI-compatible server (Groq, Together, Ollama…)","keys.openaiCompat.label":"OpenAI-compatible API key","keys.openaiCompat.placeholder":"Paste the server's API key","keys.openaiCompat.desc":"For Groq, Together, a local Ollama server or any other server that speaks the OpenAI API. Set its base URL below.","keys.openaiCompat.link":"About the OpenAI API","keys.openaiCompat.url":"OpenAI-compatible base URL","keys.openaiCompat.urlHint":"For example https://api.groq.com/openai/v1, or http://localhost:11434/v1 for Ollama.","keys.mistral.placeholder":"Paste a Mistral API key","keys.mistral.label":"Mistral API key","keys.mistral.desc":"For models served directly by Mistral AI.","keys.mistral.link":"Mistral console","keys.cerebras.label":"Cerebras API key","keys.cerebras.desc":"Open models (GPT OSS, Qwen) on Cerebras chips, many times faster than GPU clouds. Adds Cerebras to your AI choices.","keys.cerebras.link":"Cerebras Cloud","keys.groq.label":"Groq API key","keys.groq.desc":"For models served by Groq. Adds Groq to your AI choices, with its API endpoint already set.","keys.groq.link":"Groq docs","keys.greenference.label":"Greenference API key","keys.greenference.placeholder":"Paste your Greenference API key","keys.modelgo.label":"ModelGo API key","keys.modelgo.placeholder":"Paste your ModelGo API key","keys.modelgo.note":"Make a key in the ModelGo console, under API Keys.","keys.meta.label":"Meta Model API key","keys.meta.desc":"For Meta's Muse models, including Muse Wonder. Adds Meta Muse to your AI choices; new Muse models appear on their own.","keys.meta.link":"Meta Model API","keys.deepseek.label":"DeepSeek API key","keys.deepseek.desc":"For DeepSeek Harness, billed to your DeepSeek account. If dsh already has a DeepSeek key saved in its own settings, it uses that one instead of this.","keys.deepseek.link":"DeepSeek API keys","keys.xai.label":"xAI API key","keys.xai.desc":"For xAI's Grok models and xAI image generation.","keys.xai.link":"xAI console","keys.treg.label":"treg key","keys.postiz.label":"Postiz API key","keys.treg.placeholder":"Paste your treg key","keys.postiz.placeholder":"Paste your Postiz API key","keys.treg.desc":"Lets bots search X and look up companies, people, funding, news and more through treg. Calls are billed to your treg balance, with no limits from Limix Bot.","keys.treg.link":"Get a key at treg.to","keys.treg.working":"treg is working ✓","keys.treg.balance":"Balance: {balance}.","research.title":"Research (treg)","research.ownOn":"This bot can search X and look up companies, people and more through your treg key. Calls are billed to your treg balance.","research.planOn":"Included with your Limix Bot Cloud plan: this bot can search X and look up companies, people and more within the plan's monthly allowance.","research.off":"Off for this bot. Turn it on to let it search X and look up companies, people and more.","research.addKey":"Add your treg key in Settings → API keys to let bots research X, companies, people and more.","research.openKeys":"Open API keys","research.connecting":"Connecting research to your Cloud plan…","research.switch":"Let this bot use research","keys.test":"Test","keys.testing":"Testing…","keys.testOk":"Works. Models include {models}.","keys.testOkNoModels":"Works.","keys.testRejected":"The provider rejected this key.","keys.testUnreachable":"Couldn't reach the provider. Check the address and your internet connection, then test again.","keys.testUnexpected":"The provider answered unexpectedly (status {status}).","decider.intro":"Small, fast models that sort and read things for your bots: who answers in a room, which emails matter, what an invoice says. They can't act on their own, and your bots still do the work.","decider.status.line":"Decisions: {decisions} · Extraction: {extraction}","decider.status.notSetUp":"not set up","decider.status.byJev":"your Jev key","decider.status.byWorkersAi":"your Cloudflare key","decider.status.byOpenRouter":"your OpenRouter key","decider.status.byCloud":"your Cloud plan","decider.workersAi.title":"Cloudflare Workers AI (free tier)","decider.workersAi.detail":"Decides with Clef and reads with Clairic. The free tier covers light use.","decider.workersAi.accountId":"Account ID","decider.workersAi.accountIdPlaceholder":"Account ID, 32 letters and digits from your Cloudflare dashboard","decider.workersAi.token":"API token","decider.workersAi.tokenPlaceholder":"Paste a token with Workers AI permission","decider.workersAi.getKey":"Get a free token at Cloudflare","decider.workersAi.needsAccount":"Add your account ID with the token.","decider.workersAi.test.ok":"Cloudflare answered in {ms} ms.","decider.workersAi.error.rejected":"Cloudflare didn't accept this token. Check that it has Workers AI permission and that the account ID is right.","decider.workersAi.error.unreachable":"Couldn't reach Cloudflare. Check your connection.","decider.workersAi.error.timeout":"Cloudflare didn't answer in time. Try again.","decider.workersAi.error.rateLimited":"Cloudflare is limiting requests right now. Try again in a minute.","decider.workersAi.error.overloaded":"Cloudflare is busy right now. Try again shortly.","decider.workersAi.error.http":"Cloudflare sent back an error ({status}). Try again in a moment.","decider.workersAi.error.malformed":"Cloudflare sent an answer {app} couldn't read.","decider.test.extractionOk":"Extraction works too.","decider.test.extractionFailed":"Extraction didn't answer.","decider.master":"Use fast decisions and extraction","decider.masterNeedsKey":"Save a key below to turn this on.","decider.key.label":"Jev API key","decider.key.placeholder":"Paste your TypeSafe API key","decider.key.getKey":"Get a key at typesafe.ai","decider.status.connected":"Connected","decider.status.notConnected":"Not connected","decider.included.error.rejected":"Limix Bot Cloud did not accept this machine's decisions. Try again later.","decider.included.error.subscription":"Decisions are included with an active Cloud subscription.","decider.included.error.limited":"Your Cloud plan's decisions are busy or used up for this month. Try again later.","decider.test.ok":"Jev answered in {ms} ms.","decider.error.rejected":"Jev rejected this key. Check it at typesafe.ai.","decider.error.unreachable":"Could not reach Jev. Check your connection.","decider.error.timeout":"Jev did not answer in time. Try again.","decider.error.rateLimited":"Jev is limiting requests right now. Try again in a minute.","decider.error.overloaded":"Jev is overloaded right now. Try again shortly.","decider.error.http":"Jev sent back an error ({status}). Try again in a moment.","decider.error.malformed":"Jev sent an answer {app} could not read.","decider.error.noKey":"Paste a key or save one first.","decider.error.misconfigured":"The decision model address is not allowed. It must use https.","decider.error.other":"The test did not finish. Try again.","decider.jobs.title":"What it decides","decider.jobs.roomRouting":"Who answers in rooms","decider.jobs.roomRoutingDetail":"In rooms set to Auto, picks the bot that fits each message nobody @mentioned. When Jev is unsure or unreachable, the room's lead answers.","decider.jobs.browserClicks":"Browser clicks","decider.jobs.toolSelection":"Tool selection","decider.jobs.placement":"Where work runs","decider.jobs.comingSoon":"Coming soon","decider.provider.label":"Another key","decider.provider.jev":"TypeSafe Jev","decider.provider.openrouter":"OpenRouter","decider.model.label":"Model","decider.model.recommended":"Recommended","decider.model.more":"More models","decider.model.builtinNote":"OpenRouter's model catalog could not be loaded, so this is the built-in list.","decider.openrouter.master":"Use OpenRouter for fast decisions","decider.openrouter.key.label":"OpenRouter API key","decider.openrouter.key.placeholder":"Paste your OpenRouter API key","decider.openrouter.key.getKey":"Get a key at openrouter.ai","decider.openrouter.test.ok":"OpenRouter answered in {ms} ms.","decider.masterNeedsKey.openrouter":"Save an OpenRouter key below or under API keys to turn this on.","decider.openrouter.status.shared":"Using your OpenRouter API key","decider.openrouter.status.own":"Connected (separate key)","decider.openrouter.status.sharedHint":"Shared with your OpenRouter models, so decisions use the same OpenRouter credits.","decider.openrouter.status.ownFallbackHint":"Clear this key to use your shared OpenRouter API key instead.","decider.openrouter.status.notConnectedHint":"Save an OpenRouter key under API keys to use it here and for models, or paste one below.","decider.openrouter.key.manageLink":"Manage in API keys","decider.openrouter.key.overridePlaceholder":"Use a different key (optional)","decider.openrouter.test.okShared":"OpenRouter answered in {ms} ms with your shared key.","decider.openrouter.error.rejected":"OpenRouter rejected this key. Check it at openrouter.ai/keys.","decider.openrouter.error.unreachable":"Could not reach OpenRouter. Check your connection.","decider.openrouter.error.timeout":"OpenRouter did not answer in time. Try again.","decider.openrouter.error.rateLimited":"OpenRouter is limiting requests right now. Try again in a moment.","decider.openrouter.error.overloaded":"The model is overloaded right now. Try again shortly.","decider.openrouter.error.http":"OpenRouter sent back an error ({status}). Try again in a moment.","decider.openrouter.error.malformed":"The model sent an answer {app} could not read. Try another model.","decider.openrouter.error.credits":"Your OpenRouter account is out of credits. Add some at openrouter.ai/credits.","decider.test.slow":"That is slower than the 1.5 s a room decision may take, so rooms would fall back to the lead. Try a faster model.","keys.vps.label":"Self-hosted VPS","keys.vps.descBefore":"SSH config alias for the Linux VPS. {app} uses your normal SSH config and agent; it does not store keys or passwords. See the ","keys.vps.descLink":"setup guide","keys.vps.descAfter":" for the required SSH alias shape.","keys.vps.aria":"Self-hosted VPS SSH config alias","keys.vps.removeAlias":"Remove the saved alias","usage.title":"Usage","planUsage.title":"Plan usage","planUsage.subtitle":"Remaining allowance on each signed-in provider. 5-hour and weekly windows, when that plan has them.","planUsage.fiveHour":"5-hour","planUsage.weekly":"Weekly","planUsage.left":"{remaining}% left","planUsage.used":"{used}% used","planUsage.monthlySpend":"Monthly spend","planUsage.spendAmounts":"{used} of {limit} spent","planUsage.byModel":"By model","planUsage.resetsIn":"resets in {when}","planUsage.notReported":"Not reported by this plan","planUsage.empty":"No Claude, Codex, or Grok account is configured.","planUsage.loading":"Checking plan usage…","planUsage.fetchError":"Couldn't load plan usage. Try again in a moment.","planUsage.refresh":"Refresh","planUsage.signInAgain":"Sign in again in {provider}","planUsage.provider.chatgptPlan":"ChatGPT plan","planUsage.provider.claudeApiKey":"Claude (API key)","usage.bot.empty":"No usage recorded yet for this bot.","usage.bot.unpriced":"This provider doesn't report a price; tokens are counted.","usage.colTurns":"Turns","usage.colTokens":"Tokens","usage.colNewTokens":"New tokens","usage.colCost":"Cost","usage.allBots":"All bots","usage.cachedNote":"New tokens leave out {cached} of input re-read from the provider's cache, because each turn resends the whole conversation with the system prompt and tool schemas. Counting those re-reads, {total} went through the model. Hover a figure for the split.","usage.costLine":"Cost is {caption}.","usage.history.period":"Period","usage.history.thisMonth":"This month","usage.history.lastMonth":"Last month","usage.history.last30Days":"Last 30 days","usage.history.groupBy":"Group by","usage.history.byBot":"Bot","usage.history.byModel":"Model","usage.history.byUser":"Person","usage.history.byDay":"Day","usage.history.byEngine":"Provider","usage.history.byRoutine":"Routine","usage.history.byDepartment":"Department","usage.history.noDepartment":"No department","usage.history.notRoutine":"Not from a routine","usage.history.export":"Export CSV","usage.history.owner":"This computer","usage.history.botToBot":"Bot to bot","usage.history.routine":"Routine: {name}","usage.history.privateRoutine":"Private routine","usage.history.privateBot":"Private bot","usage.budget.title":"Monthly spend limit","usage.budget.subtitle":"Once the month's cost reaches the limit, no bot in this installation starts a turn until an admin raises it. Admins are notified once a month at the warning level and once at the limit.","usage.budget.none":"No limit is set. Bots spend freely.","usage.budget.within":"Within the limit","usage.budget.nearing":"Nearing the limit","usage.budget.reached":"Limit reached: new turns are refused","usage.budget.spent":"{spent} of {cap} ({percent}%)","usage.budget.monthly":"Limit per month (USD)","usage.budget.warnAt":"Warn at (%)","usage.budget.hint":"Counts what providers report (real on your keys, an equivalent on personal subscriptions) and, for providers that report no price, an estimate from list prices or your own prices. Models with no known price are not counted. Set 0 to remove the limit.","usage.budget.invalid":"Enter a limit of 0 or more and a warning percentage between 1 and 100.","usage.prices.title":"Sell prices","usage.prices.subtitle":"What you charge per million tokens, by model. History and the CSV export gain a billable column; the provider's own cost stays alongside.","usage.prices.currency":"Currency","usage.prices.colModel":"Model","usage.prices.colInput":"Input / 1M","usage.prices.colOutput":"Output / 1M","usage.prices.colCached":"Cached / 1M","usage.prices.modelPlaceholder":"model id, driver/model, or default","usage.prices.add":"Add model","usage.prices.remove":"Remove this price","usage.prices.hint":"A row named default prices any model not listed. Cached input falls back to the input rate when left blank. For providers that report no cost, a price set here for a model also replaces the list price in its cost estimate and the spend limit.","usage.prices.invalid":"Check the numbers for {model}: prices must be 0 or more.","usage.prices.currencyInvalid":"Currency must be a three-letter code, like USD.","usage.page.subtitle":"Where the time and money went: every run, the bots it brought in and each step they took.","usage.page.today":"Today","usage.page.week":"Last 7 days","usage.page.where":"Where it went","usage.page.whereEmpty":"Nothing spent in this period.","usage.page.runs":"Runs","usage.page.runsHint":"Each message or routine run, with every bot it brought in. Open one to see its trace.","usage.page.runsEmpty":"No runs in this period yet.","usage.page.more":"Show more","usage.page.untimedNote":"Runs from before this update show their totals without a timeline. Only new runs are timed.","usage.page.turns":"{count} turns","trace.title":"Trace","trace.live":"Live","trace.spans":"Steps of this run","trace.span":"Span","trace.stat.duration":"Duration","trace.stat.time":"Time","trace.stat.cost":"Cost","trace.stat.tokens":"Tokens","trace.stat.steps":"AI steps","trace.stat.tools":"Tool uses","trace.stat.errors":"Errors","trace.step":"AI step","trace.stepTokens":"{tokens} out","trace.slowest":"Slowest","trace.costliest":"Most expensive","trace.partial":"Partial","trace.partialHint":"This AI didn't report every token count, so some figures are missing rather than zero.","trace.tokensHover":"{input} in, {cached} of them from cache · {output} out","trace.cacheWrite":"{tokens} saved to cache","trace.reasoning":"{tokens} of the output spent reasoning","trace.context":"Context: {tokens} of {window}","trace.notTimed":"Not timed","trace.endedWithTurn":"Still running when the turn ended","trace.groupErrors":"{count} failed","trace.unknownBot":"A bot","trace.failed":"Failed","trace.expand":"Show the steps inside","trace.collapse":"Hide the steps inside","trace.loading":"Loading the trace…","trace.error":"Couldn't load this trace: {error}","trace.missing":"There's no trace for this turn. Only runs since this update are timed.","trace.back":"All runs","trace.close":"Close","trace.view":"View trace","trace.workedFor":"Worked for {duration}","trace.source.person":"A message to {bot}","trace.source.owner":"A message to {bot}","trace.source.routine":"A routine run by {bot}","trace.source.bot":"Work {bot} picked up from a teammate","trace.source.helper":"Helper model work for {bot}","trace.group.browser":"Used the browser · {count} steps","trace.group.computer":"Used the computer · {count} actions","trace.group.phone":"Used the phone · {count} actions","trace.group.terminal":"Ran {count} commands","trace.group.files":"Worked with files · {count} steps","trace.group.search":"Searched the web {count} times","trace.group.web":"Opened {count} web pages","trace.group.app":"Used {app} · {count} actions","trace.group.other":"{tool} · {count} times","people.title":"People","people.subtitle":"Who can sign in to this installation with an emailed code, what each person spent this month, and a link to invite someone.","people.invite":"Invite","people.inviteEmail":"Email or @domain","people.inviteHint":"Admins change settings, model providers and keys; users chat and answer approvals. An invite adds the address here and gives you a link to send.","people.link":"Invite link","people.linkHint":"The link opens the sign-in page with the address filled in. They still receive a one-time code by email, so only the owner of that address gets in.","people.copy":"Copy","people.copied":"Copied","people.refresh":"Refresh","people.colPerson":"Person","people.colRole":"Role","people.colLastSeen":"Last seen","people.colMonth":"This month","people.roleAdmin":"Admin","people.roleMember":"User","people.never":"Never","people.today":"Today","people.devices":"{count} device(s)","people.turns":"{turns} turns this month","people.everyoneAt":"everyone at {domain}","people.makeAdmin":"Make admin","people.makeMember":"Make user","people.remove":"Remove","people.empty":"Nobody yet. Invite someone, or add @yourcompany.com for everyone there.","people.note":"Changes apply at once. Removing someone ends their account sessions and prevents new sign-ins. Devices connected separately by pairing code can be revoked under Remote access.","people.notHosted":"Email sign-in is not enabled on this server, so invite links will not work here; people connect with a pairing code from Remote access.","people.portalSignIn":"On this installation people sign in through your organization's Admin, so invite links and pairing codes are not used here.","people.portal.subtitle":"Who has signed in to this installation, and what each person spent this month.","people.portal.managed":"People are managed in your organization's Admin. Invite someone, change their role or remove them there; this installation follows within a few seconds.","people.portal.open":"Manage people in Admin","people.portal.empty":"Nobody has signed in here yet.","people.portal.note":"This list only shows who has signed in here. It cannot give or take away access.","activity.title":"Activity","activity.subtitle":"Who changed settings, people, access and bots on this installation, and who answered approval cards. Kept on this server for {days} days; nothing is sent to your organization's Admin.","activity.who":"Who","activity.whoPlaceholder":"Name or email","activity.what":"What","activity.from":"From","activity.to":"To","activity.refresh":"Refresh","activity.export":"Export CSV","activity.empty":"Nothing matches in this range.","activity.error":"Couldn't load the activity: {message}","activity.more":"Showing the newest {shown} of {total}. Narrow the filters, or export CSV for all of them.","activity.what.all":"Admin changes and answered cards","activity.what.approvals":"Answered cards","activity.what.decisions":"Every approval decision","activity.what.config":"Settings","activity.what.people":"People","activity.what.session":"Sessions and pairing codes","activity.what.webhook":"Webhooks","activity.what.mcp":"MCP servers","activity.what.engine":"Model providers and keys","activity.what.bot":"Bots","activity.what.budget":"Spend limits and prices","activity.what.visibility":"Bot visibility","activity.decision.user-approved":"Approved","activity.decision.user-denied":"Declined","activity.decision.user-undone":"Undone","activity.decision.auto-approved":"Allowed automatically","activity.decision.auto-denied":"Declined automatically","activity.decision.card-shown":"Asked for approval","activity.decision.review-would-approve":"Reviewer would approve","activity.decision.review-would-deny":"Reviewer would decline","activity.approvalLine":"{decision}: {tool}","activity.approvalIn":"in {bot}","activity.action.config.update":"Changed settings","activity.action.people.update":"Changed who can sign in","activity.action.budget.update":"Changed the spend limit or prices","activity.action.mcp.update":"Changed MCP servers","activity.action.engine.update":"Changed model providers or keys","activity.action.engine.install":"Installed a model provider","activity.action.engine.auth-complete":"Signed in to a model provider","activity.action.engine.auth-sign-out":"Signed out of a model provider","activity.action.engine.claude-update":"Updated Claude Code","activity.action.engine.leftover-files-remove":"Deleted a model provider's leftover files","activity.action.engine.account-add":"Added a Claude account","activity.action.bot.create":"Created a bot","activity.action.bot.update":"Changed a bot's permissions","activity.action.bot.delete":"Deleted a bot","activity.action.visibility.update":"Changed who can see a bot","activity.action.access.update":"Changed who can use a bot","activity.action.access.allow":"Let someone chat with a bot","activity.action.access.decline":"Turned down a request to chat with a bot","activity.action.owner.update":"Changed who a bot reports to","activity.action.routine.handover":"Handed a routine over","activity.action.member.left":"Left the team","activity.action.room.audience-reset":"Widened who can see a room","activity.action.webhook.create":"Created a webhook","activity.action.webhook.update":"Changed a webhook","activity.action.webhook.delete":"Deleted a webhook","activity.action.webhook.rotate-secret":"Replaced a webhook's secret","activity.action.session.revoke":"Signed a device out","activity.action.pairing.create":"Created a pairing code","activity.changed":"Changed: {paths}","activity.before":"Before","activity.after":"After","activity.actor.loopback":"This computer","activity.actor.worker":"Local service","activity.actor.cli":"Command line","botSettings.proposal.chief":"Chief-proposable: arrives as a card you confirm.","botSettings.proposal.owner":"Owner-only: never arrives as a proposal.","botSettings.simple.close":"Close settings","botSettings.simple.tabs":"Bot settings","botSettings.simple.name":"Name","botSettings.simple.job":"Job","botSettings.simple.jobPlaceholder":"What it does","botSettings.simple.instructions":"Instructions","botSettings.simple.instructionsPlaceholder":"How should {name} work? What should it always or never do?","botSettings.simple.beforeActs":"Before {name} acts","botSettings.simple.ask":"Ask me first","botSettings.simple.askHint":"Checks before changes","botSettings.simple.decide":"Decide for me","botSettings.simple.fullHint":"Acts without checking","botSettings.simple.skills":"Skills","botSettings.simple.noSkills":"No skills yet.","botSettings.simple.skillToggle":"Use {name}","botSettings.replyStyle.title":"Reply style","botSettings.replyStyle.subtitle":"How this bot writes back to you.","botSettings.replyStyle.default":"Default","botSettings.replyStyle.defaultHint":"Full answers, formatted however the bot sees fit","botSettings.replyStyle.conversational":"Conversational","botSettings.replyStyle.conversationalHint":"Short, plain replies sent as a few small messages, often with a quick follow-up question. Simple messages are answered by the same AI's fastest model","chat.quickModel":"Quick reply with {model}","botSettings.simple.routines":"Routines","botSettings.simple.edit":"Edit","botSettings.simple.done":"Done","botSettings.simple.thinking":"Thinking","botSettings.simple.thinkingAria":"How hard {name} thinks","botSettings.simple.skillsHint":"Things {name} has learned to do. Switch one off and {name} stops using it.","botSettings.simple.appToggle":"{name} can use {app}","botSettings.simple.appsNone":"No apps connected yet.","botSettings.simple.appsCannot":"The model {name} runs on can't use apps.","botSettings.simple.appsUnknown":"Couldn't check your apps just now.","botSettings.simple.addLogin":"Add login","botSettings.simple.loginsHint":"Sign in once in {name}'s browser and it stays signed in.","botSettings.simple.loginsOff":"{name}'s browser is off. Turn it on in the Screen panel to sign in to sites.","botPanel.addLabel":"Add a label","botPanel.rename":"Rename","botPanel.conversations.title":"Conversations","botPanel.conversations.search":"Search conversations","botPanel.conversations.searchPlaceholder":"Search {name}'s conversations","botPanel.conversations.new":"New conversation","botPanel.conversations.showMore":"Show {count} more","botPanel.conversations.showFewer":"Show fewer","botPanel.avatar.edit":"Edit avatar","botPanel.avatar.tabBot":"Bot","botPanel.avatar.tabGenerate":"Generate","botPanel.avatar.tabUpload":"Upload","botPanel.avatar.reset":"Reset","botPanel.avatar.face":"Face","botPanel.avatar.halloween":"Halloween","botPanel.avatar.diwali":"Diwali","botPanel.avatar.more":"More looks","botPanel.avatar.costume":"Dressed as the {name} while the {skin} skin is on","botPanel.avatar.drop":"Drop a picture here, or choose one","botPanel.avatar.types":"PNG, JPEG, GIF, or WebP · up to 10 MB","botPanel.avatar.shape":"Shape","botPanel.avatar.circle":"Circle","botPanel.avatar.rounded":"Rounded","botPanel.avatar.square":"Square","botPanel.avatar.remove":"Remove picture","botPanel.avatar.uploadHint":"After uploading, drag the picture to reposition it and scroll to zoom.","botPanel.face.idle":"Idle","botPanel.face.happy":"Happy","botPanel.face.curious":"Curious","botPanel.face.drowsy":"Drowsy","botPanel.face.working":"Working","botPanel.face.thinking":"Thinking","botPanel.face.listening":"Listening","botPanel.face.sleeping":"Sleeping","botPanel.face.suspicious":"Suspicious","botPanel.face.proud":"Proud","botPanel.page.approvals":"Approvals","botPanel.page.always":"Always allowed","botPanel.page.android":"Android phone","botPanel.page.voice":"Voice","botPanel.page.blurb":"What {name} does","botPanel.page.team":"Department","botPanel.page.chiefTeams":"Additional departments","botPanel.page.webhooks":"Webhooks","botPanel.page.slack":"Slack","botPanel.page.settings":"Bot settings","botPanel.page.overview":"Overview","botPanel.page.prompt":"What {name} sees","botPanel.page.history":"History","botPanel.library.memoryOff":"Memory is off for {name}.","botPanel.library.memoryError":"Couldn't read the memory file just now.","botPanel.screen.idle":"Idle","botPanel.screen.working":"Working on a task. Its screen shows here soon; open full view to watch it live.","botPanel.screen.resting":"Not using its computer right now","botPanel.none":"None","botPanel.tab.computer":"Computer","botPanel.tab.details":"Details","botPanel.tab.library":"Library","botPanel.routines.empty":"Routines are recurring tasks this bot runs on a schedule. Ask it in chat to set one up.","botPanel.routines.emptyHint":"Jobs this bot runs on a schedule, like a news roundup every morning.","botPanel.routines.seeAll":"View all routines in Automations","botPanel.routines.add":"Add a routine","botPanel.library.empty":"Pages, files, and apps this bot makes show up here","botPanel.library.pages":"Pages","botPanel.library.apps":"Apps","botPanel.library.files":"Files","botPanel.library.scope":"From this conversation","botPanel.thisConversation":"In this conversation","botPanel.acts.custom":"Custom","botPanel.acts.customHint":"Change this in Advanced mode","botPanel.section.settings":"Settings","botPanel.section.conversation":"This conversation","botPanel.workUntilDone.hint":"{name} keeps going on your next message until it's done","botPanel.instructionsHint":"Tell {name} how to work for you","botSettings.simple.justDoIt":"Just do it","botSettings.simple.custom":"Custom","botPanel.appsRow":"Apps it can use","botPanel.backups.title":"Backup AIs","botPanel.backups.hint":"Used only when {name}'s AI is at its usage limit or can't start on a message. The first one here that can take over does, in that conversation only. After a usage limit resets, the conversation goes back.","botPanel.backups.row":"Backup {position}: {model}","botPanel.backups.remove":"Remove {model} from backups","botPanel.backups.choose":"Choose a backup AI","botPanel.backups.sameAccount":"Same account as the main AI: it shares the usage limit.","botPanel.appsNoneYet":"None yet","botPanel.apps.intro":"Switch on the apps {name} may use. Everything else stays off.","botPanel.apps.connectAnother":"Connect another app","botPanel.routinesOn":"{count} on","botPanel.routines.ask":"Or just ask {name} in chat: “every weekday at 8, send me a summary”.","botPanel.memoryRow":"What it remembers","botPanel.heavy":"This bot loads a lot every turn.","botPanel.tidyMemory":"Tidy memory","botPanel.memory.note":"1 note","botPanel.memory.notes":"{count} notes","botPanel.memory.nothingYet":"Nothing yet","botPanel.memory.off":"Off","botPanel.memory.intro":"{name} keeps these tidy on its own. Tap one to remove it.","botPanel.memory.forget":"Forget","botPanel.memory.empty":"Nothing remembered yet.","botPanel.memory.addPlaceholder":"Tell {name} something to remember","botPanel.memory.editText":"Edit as text","botPanel.skills.remove":"Remove {name}","botPanel.skills.removeConfirm":"Remove the skill “{name}”?","botPanel.skills.removeFailed":"Could not remove this skill.","botPanel.skills.importFailed":"Could not add that skill.","botPanel.skills.importPlaceholder":"Paste a skill link or owner/repo","botPanel.skills.browse":"Browse skills","botPanel.folder.private":"Private","botPanel.folder.intro":"Where {name} keeps and edits files.","botPanel.folder.own":"Its own private folder","botPanel.folder.ownHint":"Nothing on this computer is touched","botPanel.folder.pick":"A folder you choose","botPanel.folder.pickHint":"Desktop, a project, Downloads","botPanel.tryAsking":"Try asking","computer.simple.dest.letItChoose":"Let it choose","botSettings.visibility.title":"Who can see it","botSettings.sections.overview":"Overview","botSettings.sections.identity":"Identity","botSettings.sections.soul":"Soul","botSettings.identity.name":"Name","botSettings.identity.title":"Title","botSettings.identity.titlePlaceholder":"Describe what your agent does","botSettings.identity.blurb":"Blurb","botSettings.identity.viewFull":"View full","botSettings.identity.blurbPlaceholder":"One line on what this bot is for","botSettings.identity.blurbHelp":"Shown in rosters, on the phone, and to other bots. Standing instructions belong in Soul, which has room for a full document.","botSettings.soul.description":"Who this bot is and the rules it never breaks. Always in its context.","botSettings.visibility.subtitle":"Choose who sees this bot, its conversations, the rooms it is in and its files. Admins always can.","botSettings.visibility.everyone":"Everyone who can sign in","botSettings.visibility.admins":"Admins only","botSettings.visibility.people":"Only these people","botSettings.visibility.peopleLabel":"Email addresses","botSettings.visibility.peoplePlaceholder":"One email or @company.com per line","botSettings.visibility.rooms":"A room shows only to people who can see every bot in it, and this bot works only with teammates exactly the same people can see.","botSettings.visibility.save":"Save","botSettings.visibility.saving":"Saving…","botSettings.visibility.saved":"Saved. It applies at once.","botSettings.visibility.needPeople":"Add at least one email address, or choose Admins only.","botSettings.visibility.mixedRooms":"These rooms are visible to fewer people than this bot: {rooms}. A room keeps the narrowest audience it has ever had, so taking a bot out or widening one never shows its transcript to more people, and such a room stays out of this bot's recall. When the room's bots are right, widen it here.","botSettings.visibility.resetRoom":"Show {room} to everyone its bots allow","workspaces.title":"Installations on this server","workspaces.subtitle":"Each installation on this server has its own account, service, data and sign-in list at its own address. Create one, manage who may sign in, pause or remove it, and upgrade them all in one go.","workspaces.empty":"No installations on {domain} yet.","workspaces.colWorkspace":"Installation","workspaces.colState":"State","workspaces.colMonth":"This month","workspaces.running":"Running","workspaces.suspended":"Suspended","workspaces.provisioning":"Setting up","workspaces.error":"Needs recovery","workspaces.retained":"Data retained","workspaces.recoveryHint":"Contact the server operator to inspect or recover this installation.","workspaces.turns":"{turns} turns this month","workspaces.users":"Users","workspaces.suspend":"Suspend","workspaces.resume":"Resume","workspaces.delete":"Delete","workspaces.refresh":"Refresh","workspaces.new":"New installation","workspaces.upgradeAll":"Upgrade all","workspaces.upgraded":"Every running installation restarted on the new release.","workspaces.working":"Working…","workspaces.name":"Name","workspaces.adminEmail":"Admin email","workspaces.members":"Users (optional)","workspaces.cap":"Monthly spend limit (USD, optional)","workspaces.anthropicKey":"Anthropic API key for this installation (optional)","workspaces.createHint":"The name becomes the address. The admin signs in with an emailed code; users get chat and approvals. A key here runs the installation's Claude bots on it and is never shown again.","workspaces.create":"Create installation","workspaces.creating":"Creating… this takes about a minute.","workspaces.usersTitle":"Who may sign in to {slug}","workspaces.email":"Email or @domain","workspaces.chatOnly":"User (chat only)","workspaces.addUser":"Add","workspaces.removeUser":"Remove","workspaces.deleteTitle":"Delete {slug}?","workspaces.deleteHint":"This stops the installation, removes its address and its account, and deletes its data. This cannot be undone.","workspaces.deleteKeepHint":"This stops the installation and removes its address and account. Its data folder is kept on the server.","workspaces.keepData":"Keep the data folder","engines.selectBinary":"Select a detected binary…","engines.manualPath":"Enter path manually…","engines.detectedAria":"{name} detected CLI","engines.customAria":"{name} custom CLI path","engines.testFailed":"Test failed: {message} Register this path anyway?","engines.testPassed":"Test passed: {version}","engines.editPath":"Edit path","engines.saveAnyway":"Save anyway","engines.updateClaude":"Update Claude","engines.updating":"Updating…","engines.reset":"Reset","engines.resetting":"Resetting…","engines.setCli":"Set CLI…","engines.hide":"Hide","engines.hideHint":"Leave this provider out of every model list. Its app and sign-in stay as they are, and you can unhide it here.","engines.hiddenTitle":"Hidden ({count})","engines.hiddenHint":"Left out of every model list. Their apps and sign-ins are unchanged.","engines.unhide":"Unhide","engines.unhiding":"Unhiding…","engines.claudeUpdated":"Claude updated to {version}","engines.updatedTo":"Updated to {version}","engines.account.signInHint":"Run this exact command in a terminal on the computer running {app}, finish Claude CLI sign-in, then click Check account. If you are viewing {app} remotely, run it there, not on this device.","engines.account.powershell":"Use PowerShell for this command.","accounts.claude":"Claude","accounts.chatgpt":"ChatGPT","accounts.count":"{count} accounts · {signedIn} signed in","accounts.signedIn":"Signed in","accounts.notSignedIn":"Not signed in","accounts.unknown":"Sign-in not confirmed yet","accounts.apiKey":"Uses an API key","accounts.signIn":"Sign in","accounts.menu":"Options for {name}","accounts.rename":"Rename","accounts.remove":"Remove","accounts.inUse":"{count} bot(s) use this account. Pick another model for them first.","accounts.signOutTitle":"Sign out of {name}?","accounts.signOutBody":"Bots that use this account need it signed in again before their next task. Running tasks are not cancelled.","accounts.removeTitle":"Remove {name}?","accounts.removeBodyClaude":"This removes the account from {app}. Claude's own sign-in files stay on this computer.","accounts.removeBodyChatgpt":"This signs the account out and removes it from {app}.","accounts.removeBodyAntigravity":"This removes the account and its sign-in from {app}. Your other Antigravity accounts stay connected.","accounts.addClaude":"Add another Claude account","accounts.addChatgpt":"Add another ChatGPT account","accounts.addChatgptWorkspaceNote":"ChatGPT Business and Enterprise organizations can block adding an account here (OpenAI shows 3p_delegated_access_policy_denied).","accounts.nameLabel":"Account name","accounts.namePlaceholder":"Work","accounts.addSubmit":"Add and sign in","accounts.folderToggle":"Use an existing Claude folder","accounts.folderHint":"Leave this empty to keep the account separate. To reuse a sign-in you already have, enter its folder, such as ~/.claude-work.","accounts.claude.step1":"1. Sign in on the Claude page that opened","accounts.claude.openAgain":"Open Claude sign-in","accounts.claude.step2":"2. Paste the code Claude shows you","accounts.claude.codePlaceholder":"Paste code","accounts.claude.finish":"Finish","accounts.claude.security":"The code goes to Claude Code once and is never saved.","claudeEndpoints.title":"Custom endpoint","claudeEndpoints.hint":"Run this account's bots on DeepSeek, GLM or another host that speaks Claude Code's API. It is its own engine, so the Claude Code on this computer and its sign-in stay as they are.","claudeEndpoints.empty":"No custom endpoints yet.","claudeEndpoints.add":"Add endpoint","claudeEndpoints.edit":"Edit","claudeEndpoints.name":"Name","claudeEndpoints.baseUrl":"Base URL","claudeEndpoints.token":"Token","claudeEndpoints.tokenKeep":"Leave empty to keep the saved token","claudeEndpoints.model":"Model","claudeEndpoints.modelHint":"Optional. Leave it empty and Limix Bot reads the host's model list; OpenAI and Anthropic use the standard list. Type a model when the host doesn't list its models. Each bot then picks its own model.","claudeEndpoints.mappings":"Model mappings (optional)","claudeEndpoints.mappingsHint":"Which model the endpoint uses for Opus, Sonnet and Haiku work.","claudeEndpoints.opus":"Opus model","claudeEndpoints.sonnet":"Sonnet model","claudeEndpoints.haiku":"Haiku model","claudeEndpoints.remove":"Remove {name}","claudeEndpoints.removeBody":"This removes the endpoint from app settings. The bots that used it need another model.","claudeEndpoints.failed":"Couldn't save the endpoint. Check the fields and try again.","claudeBedrock.title":"Amazon Bedrock","claudeBedrock.hint":"Run bots on Claude through Amazon Bedrock, signed in with an AWS profile from this computer. It is its own engine, so the Claude Code on this computer and its sign-in stay as they are.","claudeBedrock.awsHint":"Uses the AWS profile from this computer's ~/.aws config. Run `aws sso login --profile …` first if it uses SSO.","claudeBedrock.empty":"No Amazon Bedrock engines yet.","claudeBedrock.add":"Add Amazon Bedrock","claudeBedrock.edit":"Edit","claudeBedrock.name":"Name","claudeBedrock.profile":"AWS profile","claudeBedrock.region":"AWS region","claudeBedrock.model":"Model","claudeBedrock.modelHint":"The Bedrock model id or inference profile {app} runs, as your AWS account lists it. Each bot then picks this model or a tier model below.","claudeBedrock.tiers":"Model per tier","claudeBedrock.opus":"Opus model","claudeBedrock.sonnet":"Sonnet model","claudeBedrock.haiku":"Haiku model","claudeBedrock.smallFast":"Small-fast model","claudeBedrock.rowSubtitle":"Bedrock · {profile} · {region}","claudeBedrock.remove":"Remove {name}","claudeBedrock.removeBody":"This removes the Bedrock engine from app settings. The bots that used it need another model.","claudeBedrock.failed":"Couldn't save the Bedrock engine. Check the fields and try again.","engines.none":"No model provider apps detected yet.","engines.footer":"Set CLI points a model provider at a specific binary: a versioned build, a wrapper script, or an absolute path. Changes are saved only when the selected provider is idle. Other providers keep running.","engines.freeSpace.title":"Leftover files","engines.freeSpace.intro":"On Windows, Antigravity can leave large temporary files behind when it stops. {app} clears its own. This also finds ones left in the Windows temporary folder. Nothing is deleted until you confirm.","engines.freeSpace.action":"Free up space","engines.freeSpace.scanning":"Looking for leftover files…","engines.freeSpace.none":"No leftover files found.","engines.freeSpace.found":"Found {size} of leftover files.","engines.freeSpace.foundAtLeast":"Found at least {size} of leftover files.","engines.freeSpace.delete":"Delete them","engines.freeSpace.deleting":"Deleting leftover files…","engines.freeSpace.freed":"Freed {size}.","engines.freeSpace.someLeft":"Some files are still in use and were left alone. Try again later.","engines.freeSpace.underOneMb":"less than 1 MB","engines.library.custom":"Bring your own model","engines.library.manage":"Manage","engines.library.setup":"Set up","engines.library.count":"{count} model providers","engines.library.countOne":"1 model provider","engines.library.refresh":"Check again","engines.library.advanced":"CLI path and updates","engines.library.later":"You can add more model providers anytime in Settings.","engines.library.intro":"Connect the AI tools that power your bots. Accounts, setup and updates, all in one place.","remote.pairing.tailscale.title":"Tailscale pairing","remote.pairing.tailscale.subtitle":"Private pairing through the tailnet shared by the host and the device being paired.","remote.pairing.wifi.title":"Direct Wi-Fi pairing","remote.pairing.wifi.subtitle":"Use only on a trusted network where both devices can see each other.","remote.pairing.https.title":"Secure HTTPS pairing","remote.pairing.https.subtitle":"Recommended. The simplest setup, and it keeps working when the paired device leaves this Wi-Fi.","remote.status.attention":"Remote access needs attention","remote.status.off":"Remote access off","remote.tailscale.ready":"Ready on {name}","remote.tailscale.readyDetail":"Keep Tailscale connected on the host and the device being paired.","remote.tailscale.magicDns":"Tailscale found, but MagicDNS is still needed","remote.tailscale.magicDnsDetail":"Turn on MagicDNS in Tailscale, then check again so the device gets a secure tailnet name.","remote.title":"Remote access","remote.checking":"Checking device access…","remote.tailscaleSwitch.detail":"Off until you turn it on: {app} never runs Tailscale by itself, and never opens or signs in the Tailscale app. On, devices on your tailnet reach this computer by its tailnet name.","remote.tailscale.linkOff":"On. It answers once a device is paired.","remote.tailscale.notInstalled":"Tailscale isn't installed on this computer.","remote.tailscale.getIt":"Get Tailscale","remote.tailscale.signIn":"Open Tailscale and sign in, then try again.","remote.tailscale.noCli":"Install Tailscale's command-line tool: in the Tailscale app, open Settings and choose Install CLI, then try again.","remote.tailscale.notRunning":"Tailscale isn't running. Open it, then try again.","remote.tailscale.needsPermission":"Tailscale won't let {app} ask it. On Linux, run sudo tailscale set --operator=$USER once, then try again.","remote.notice.wifi":"Same Wi-Fi is on because a paired device uses it.","remote.notice.relay":"Anywhere, through {app} is on because a paired device uses it.","remote.notice.tailscale":"Tailscale is on because a paired device may use it.","remote.notice.https":"Your {app} web address is on because a paired device uses it.","remote.notice.turnOff":"Turn off","remote.checkAgain":"Check again","remote.devices.lastSeen":"Last seen {when}","remote.devices.paused":"Paused after 30 days unused. It reconnects when you open this page.","remote.devices.retired":"This phone has an older Limix Bot app. Update the app, then open it once on the same Wi-Fi as this computer. If that doesn't reconnect it, pair it again here.","remote.devices.retiredNotice":"Phones now reach this computer through Limix Bot Relay, and the older secure link has been switched off. A phone with an older Limix Bot app can no longer connect away from your Wi-Fi. Update the Limix Bot app on that phone, then open it once on the same Wi-Fi as this computer. If that doesn't reconnect it, pair it again here.","remote.devices.remove":"Remove {name}","remote.devices.allowView":"Allow computer view","remote.devices.allowViewDetail":"Full interactive access from this device.","remote.devices.viewAria":"Computer view access for {name}","remote.devices.allowBrowser":"Allow browser control","remote.devices.allowBrowserDetail":"View and control signed-in browser sessions from this device.","remote.devices.browserAria":"Browser control access for {name}","remote.phones.title":"Phone apps","remote.phones.empty":"No phone has allowed its apps yet. Open Limix Bot on your phone and allow them under Settings.","remote.phones.online":"Online","remote.phones.offline":"Offline · last seen {when}","remote.phones.remove":"Remove {name}","remote.phones.platform.ios":"iPhone","remote.phones.platform.android":"Android","remote.time.justNow":"just now","remote.time.minutes":"{count} min ago","remote.time.hours":"{count} h ago","remote.time.days":"{count} d ago","remote.advanced":"Advanced & troubleshooting","remote.keepAwake":"Keep this computer awake","remote.keepAwakeDetail":"Keeps remote access and scheduled work available while the screen is off.","remote.keepAwakeAria":"Keep this computer awake while Remote access is on","remote.account.signedIn":"Signed in as {email}.","remote.account.yourAccount":"your account","remote.account.retrying":"Trying again…","remote.client.active":"Remote connection","remote.client.idle":"Connect to another computer","remote.client.subtitle":"Use this desktop app as a secure client for {app} running on another computer.","phone.intro.title":"Use {app} from another device","phone.intro.detail":"Check chats, answer approvals, and send new work from a phone or another computer.","phone.value.chats":"Your conversations","phone.value.chatsDetail":"Read and reply from another device.","phone.value.approvals":"Quick approvals","phone.value.approvalsDetail":"Keep work moving when you step away.","phone.value.private":"Private by default","phone.value.privateDetail":"Only devices you approve can connect.","phone.intro.pairAnother":"Pair another device","phone.intro.pair":"Pair a device","phone.intro.setUp":"Set up another device","phone.intro.notNow":"Not now","phone.intro.resume":"You can resume anytime from Settings → Remote access.","phone.back":"Back","phone.signIn.attention":"Secure access needs attention","phone.signIn.title":"Sign in to pair securely","phone.signIn.unavailable":"Online remote access is not available right now. You can still pair directly on the same Wi-Fi.","phone.signIn.timedOut":"Secure access is taking longer than expected. You can try again or pair directly on this Wi-Fi.","phone.signIn.failed":"We could not finish creating your private connection.","phone.signIn.emailPrompt":"We’ll email you a one-time code. No password needed.","phone.signIn.email":"Email","phone.signIn.working":"Working…","phone.signIn.verify":"Verify and continue","phone.signIn.sendCode":"Email me a code","phone.signIn.otherEmail":"Use another email","phone.signIn.expires":"The code expires in 10 minutes.","phone.signIn.retry":"Try secure access again","phone.signIn.or":"or","phone.signIn.tailnetNote":"The other device must be signed in to the same tailnet.","phone.signIn.wifiInstead":"Pair on this Wi-Fi instead","phone.signIn.wifiNote":"Both devices must be on a network that lets them see each other.","phone.signIn.tailscaleInstead":"Pair using Tailscale","phone.verifying.local":"Preparing your pairing code","phone.verifying.tailscale":"Preparing Tailscale pairing","phone.verifying.secure":"Creating secure remote access","phone.verifying.localDetail":"This should only take a moment.","phone.verifying.tailscaleDetail":"Your pairing code will use your private tailnet connection.","phone.verifying.secureDetail":"We’re giving this computer a private connection that works even when the paired device is away from this Wi-Fi.","phone.success.title":"Your device is ready","phone.success.detail":"It can now open chats, answer approvals, and send new work.","phone.success.start":"Start using {app}","phone.success.done":"Done","phone.code.expired":"That code expired","phone.code.title":"Scan or enter the code","phone.code.expiredDetail":"Create a fresh code when the other device is ready.","phone.code.detail":"Scan this code in Limix on iPhone, or enter the address and code from pairing details in another desktop app.","phone.code.qrAria":"Device pairing QR code","phone.code.createNew":"Create a new code","phone.code.trouble":"Having trouble?","phone.code.address":"Pairing address","phone.code.publicNetwork":"Windows has this computer's {network} network set to Public, so its firewall may block your phone. If your phone can't connect, open Windows Settings → Network & internet → {network} and set the network profile type to Private.","phone.error.directUnavailable":"Direct Wi-Fi pairing isn’t available on this computer right now. Connect this computer to Wi-Fi, then try again.","phone.error.protectedUnavailable":"The HTTPS pairing route became unavailable. Check secure access, then create a new code.","phone.error.remoteUpdate":"Remote access could not be updated. Open Advanced & troubleshooting and try again.","phone.error.secureUpdate":"Secure remote access could not be updated. Try again.","phone.error.desktopOnly":"Remote access setup is only available in the desktop app.","phone.error.tailscaleUnavailable":"Tailscale pairing isn’t available right now. Make sure Tailscale is connected and MagicDNS is on.","phone.error.pairingPrepare":"Device pairing could not be prepared. Open Advanced & troubleshooting and try again.","phone.error.sendCode":"We could not send the code. Try again.","phone.error.verifyCode":"That code could not be verified. Try again.","phone.error.restore":"Secure access could not be restored. Try again.","phone.error.codeChanged":"The pairing code changed before setup finished. Create a new code and try again.","phone.error.reference":"{message} Reference: {reference}.","remote.client.desktopOnly":"Remote desktop pairing requires the installed app.","remote.client.connected":"Connected to {name}","remote.client.fallbackName":"remote {app}","remote.client.mode":"This app is in client mode. Bots and conversations run on the other computer; the paired-device token stays in this computer’s encrypted credential store.","remote.client.disconnect":"Disconnect and use this computer","remote.client.setUpOnHost":"This app uses the AIs on the host computer. Set up {name} there, then come back and pick it.","remote.client.hostHint":"On the host computer, open Settings → Remote access and open a pairing window over HTTPS, Tailscale, or Wi-Fi. Then enter its address and six-digit code here.","remote.client.hostAddress":"Host address","remote.client.pairingCode":"Pairing code","remote.client.pair":"Pair and switch to client mode","remote.client.restartNote":"Pairing restarts this app. Disconnecting later returns it to normal host mode.","remote.client.connectionType":"Connection type","remote.client.server.option":"Self-hosted server","remote.client.server.hint":"On your server, run this command to create a fresh, single-use pairing link. Paste the full link below, including its 12-character code.","remote.client.server.fullTitle":"Your own server: full access","remote.client.server.clientTitle":"Someone else's server: chat and approvals only","remote.client.server.clientNote":"A chat-only link can't make the server your bots' home, add bots or connect apps. Use full access for a server you own.","remote.client.server.pairingLink":"Server pairing link","remote.client.server.domainHint":"Supports your server’s HTTPS address, including custom domains and Cloudflare Tunnel.","remote.client.server.connect":"Connect to server","remote.client.server.invalidLink":"Paste a full HTTPS server pairing link, such as https://bots.example.com/pair#code=XXXX-XXXX-XXXX. The code belongs after #, not in the URL query.","remote.client.server.switchNote":"Confirm the address, then finish pairing on the server page. Use the Server menu to return to this computer later.","remote.client.companion.option":"Desktop companion","remote.client.companion.hint":"On the other desktop app, open Settings → Remote access and create a six-digit companion code. Use its managed {app} HTTPS address or full Tailscale name ending in .ts.net. For a self-hosted server or custom domain, choose Self-hosted server in this computer’s installed app.","remote.client.companion.address":"Companion address","remote.client.companion.code":"Six-digit companion code","vm.state.notManaged":"Not managed","vm.workspace.localVm":"Private desktop","vm.workspace.desktopRequired":"The two-desktop view requires the {app} desktop app.","vm.workspace.layoutUnavailable":"The viewer area is not laid out yet. Retry after resizing the window.","vm.workspace.connectFailed":"{app} couldn't open this private desktop view. Close it and try again.","vm.workspace.positionFailed":"{app} couldn't place this private desktop view. Close it and try again.","vm.workspace.chooseBot":"Choose a bot with a private desktop","vm.workspace.youHaveControl":"You have control","vm.workspace.controlElsewhere":"Control held elsewhere","vm.workspace.handBack":"Hand back","vm.workspace.takeControlTitle":"Pause only this bot and enable keyboard and pointer input in this pane","vm.workspace.heldElsewhere":"Held elsewhere","vm.workspace.takeControl":"Take control","vm.workspace.chooseAnother":"Choose another bot that works on a private desktop.","vm.workspace.checking":"Checking {name}'s private desktop…","vm.workspace.connecting":"Connecting live view…","vm.workspace.notCreated":"{name}'s private desktop hasn't been created yet.","vm.workspace.stopped":"{name}'s private desktop is stopped.","vm.workspace.notReady":"{name}'s private desktop isn't ready to watch yet.","vm.workspace.retryStatus":"Retry status","vm.workspace.openComputer":"Open Computer","vm.state.inUse":"In use","vm.workspace.bridgeUnavailable":"The two-desktop view bridge is unavailable.","vm.workspace.handoffFailed":"The removed pane could not hand control back safely.","vm.workspace.paneChanged":"The view changed while you were taking control. Try again.","vm.workspace.alreadyControlled":"You're already controlling this desktop in another view. Hand it back there first.","vm.workspace.viewTitle":"Private desktop view","vm.state.stopped":"Stopped","vm.state.running":"Running","vm.state.attention":"Needs attention","vm.state.sleeping":"Sleeping","vm.state.goingToSleep":"Going to sleep","vm.state.starting":"Starting","vm.state.restarting":"Restarting","vm.state.removing":"Removing","vm.state.paused":"Paused","vm.dest.auto":"Auto","vm.dest.vm":"Private desktop","vm.dest.local":"This computer","vm.dest.browser":"Browser","vm.dest.off":"Off","vm.confirm.deleteBotVm":"Delete {name}'s private desktop? Its durable folder and website sign-ins are kept. Apps installed inside the desktop and files outside the durable folder are deleted.","vm.confirm.deleteCloud":"Permanently delete {subject}? Its files and browser sign-ins will be erased. This cannot be undone.","vm.confirm.orphanCloud":"this left-behind cloud desktop","vm.confirm.ownedCloud":"{name}'s cloud desktop","vm.confirm.removeVps":"Permanently remove {subject}? Its files and browser sign-ins will be erased. This cannot be undone.","vm.confirm.orphanVps":"leftover desktop {id} on your VPS","vm.confirm.ownedVps":"{name}'s desktop on your VPS","vm.vps.title":"Self-hosted VPS computers","vm.vps.subtitle":"Desktops {app} keeps on your VPS. Removing one permanently erases its files and browser sign-ins.","vm.vps.sshHost":"SSH host: {alias}. Old and orphaned computers stay visible here.","vm.vps.configuredFallback":"your VPS","vm.vps.needsAlias":"To use your own VPS, add its SSH alias in Settings → API keys.","vm.vps.refreshHint":"Refresh to check {app}'s desktops on your VPS.","vm.vps.refreshAria":"Refresh desktops on your VPS","vm.vps.checking":"Checking desktops on your VPS.","vm.vps.unavailable":"Couldn't list desktops on your VPS: {reason}","vm.vps.notConfigured":"No VPS is set up yet. Add its SSH alias in Settings → API keys.","vm.vps.foundOne":"1 desktop found.","vm.vps.foundMany":"{count} desktops found.","vm.vps.orphan":"Leftover desktop · ID {id}","vm.owner.gone":"Its bot no longer exists","vm.owner.owned":"Owned by this bot","vm.vps.stopFirst":"Stop this bot's work before removing its desktop.","vm.vps.removeTitle":"Permanently remove this desktop","vm.refresh":"Refresh","vm.cloud.title":"Cloud desktops","vm.cloud.subtitle":"Your bots' cloud desktops, by Boat. Deleting one erases it and its files for good.","vm.cloud.includesOrphans":"Includes desktops left behind by deleted bots so they can still be cleaned up.","vm.cloud.needsKey":"Cloud desktops come from Boat, a paid service. Connect your Boat account in Settings → API keys to create and manage them.","vm.cloud.refreshHint":"Refresh to check your bots' cloud desktops.","vm.cloud.refreshAria":"Refresh cloud desktops","vm.cloud.checking":"Checking cloud desktops.","vm.cloud.unavailable":"Couldn't list cloud desktops: {reason}","vm.cloud.notConnected":"Boat is not connected.","vm.cloud.foundOne":"1 cloud desktop found.","vm.cloud.foundMany":"{count} cloud desktops found.","vm.cloud.orphan":"Left-behind desktop","vm.cloud.stopFirst":"Stop this bot's work before changing its desktop.","vm.cloud.sleepTitle":"Put this cloud desktop to sleep","vm.cloud.sleepBlocked":"This cloud desktop is {state}","vm.cloud.sleep":"Sleep","vm.cloud.deleteTitle":"Permanently delete this cloud desktop","vm.perBot.title":"Per-bot desktops","vm.perBot.subtitle":"{count} This list includes old desktops even when their bot now uses another destination.","vm.perBot.created":"{count}/{max} created.","vm.perBot.inventoryUnavailable":"Inventory unavailable.","vm.perBot.refreshAria":"Refresh per-bot desktops","vm.perBot.checking":"Checking existing private desktops.","vm.perBot.unavailable":"Couldn't list private desktops: {reason}","vm.perBot.foundOne":"1 per-bot desktop found.","vm.perBot.foundMany":"{count} per-bot desktops found.","vm.perBot.checkingList":"Checking existing desktops…","vm.perBot.none":"No per-bot desktops have been created.","vm.perBot.destination":"Current destination: {destination}","vm.perBot.unmanaged":"This container is not managed by {app}. Review and remove it directly in Docker or Podman.","vm.perBot.stopFirst":"Stop this bot's turn before deleting its desktop.","vm.perBot.deleteBlocked":"Stop this bot's turn before deleting its private desktop","vm.perBot.deleteTitle":"Delete {name}'s private desktop","vm.main.title":"Private desktops","vm.main.perBotSubtitle":"Private Cua Linux desktops on this {host}, with one container and durable folder per bot. Distinct bots can work concurrently and idle desktops stop after 8 hours.","vm.main.sharedSubtitle":"A shared Cua Linux sandbox on this {host} for bots to browse and work in: isolated, backed by one durable folder, and automatically stopped after the idle timeout.","vm.host.mac":"Mac","vm.host.computer":"computer","vm.main.statusUnavailable":"Status unavailable","vm.main.readyPerBot":"Ready for per-bot desktops","vm.main.perBotUnsupported":"Per-bot mode requires Docker or Podman","vm.main.ready":"Ready","vm.main.notReady":"Not ready","vm.main.recheck":"Re-check","vm.main.watch":"Watch screen","vm.isolation.title":"Isolation","vm.isolation.subtitle":"Shared keeps the original single-desktop behavior. Per bot gives each bot its own container, folder, viewer port, lease, and idle timer.","vm.isolation.shared":"Shared","vm.isolation.perBot":"Per bot","vm.isolation.max":"Maximum per-bot desktops","vm.isolation.maxDetail":"Limits storage and host resource use; each running desktop may use up to its memory and CPU limits, 4 GB and 2 CPUs unless config.json sets others.","vm.isolation.maxAria":"Maximum per-bot desktops","vm.idle.label":"Stop idle desktops after","vm.idle.detail":"Applies to shared and per-bot desktops. A desktop with a running turn is never stopped. Idle shutdown keeps its files and installed apps.","vm.idle.minutes":"minutes","vm.idle.range":"Enter a whole number from 5 to 1,440.","vm.idle.error":"Couldn't save the idle time. Try again.","vm.saving":"Saving…","vm.policyError":"Couldn't save the isolation setting. Try again.","vm.deleteError":"Couldn't delete this private desktop. Try again.","vm.unmanagedError":"This container is not managed by {app} and cannot be removed here.","vm.vpsRemoveError":"Couldn't remove this desktop. Try again.","vm.setup.title":"Setup","vm.setup.subtitle":"Once a container app such as Docker is open, {app} sets up the private desktop for you.","vm.setup.step1":"Install a container runtime","vm.setup.step1Detail":"Podman and Colima are free. Docker Desktop may require a paid licence for larger companies and government use.","vm.setup.podmanGuide":"Open the Podman installation guide","vm.setup.step2Open":"Open and start {runtime}","vm.setup.step2":"Start the container runtime","vm.setup.step2Detail":"Open the container app you installed and let it finish starting, then check again.","vm.setup.step3":"Prepare the Cua desktop (one-time download and build)","vm.setup.prepare":"Prepare Cua desktop","vm.setup.showPull":"Show base-image download","vm.setup.step4PerBot":"Create a private desktop from each bot's Screen panel","vm.setup.step4Recreate":"Replace the older or unsafe desktop","vm.setup.step4":"Create and start the private desktop","vm.setup.applePort":"Apple container requires an explicit host port, so {app} will not guess or expose one. Install or start Docker or Podman for safe per-bot dynamic loopback ports.","vm.setup.recreate":"Delete and recreate","vm.setup.prepareFirst":"Prepare the desktop above before replacing this one.","vm.setup.start":"Start the private desktop","vm.stopped.idle":"Stopped after inactivity to save resources. Your files and installed apps are still here.","vm.stopped.detail":"Your files and installed apps are still here. Start it to continue.","vm.setup.starting":"Starting the private desktop…","computer.phase.vmStopped":"The private desktop is stopped","vm.setup.idleHint":"Choose Private desktop for a bot to start it automatically. Idle desktops stop after the idle time set under Isolation; their files and installed apps are kept.","vm.setup.waiting":"Waiting for the desktop…","vm.setup.create":"Create private desktop","vm.setup.showCommand":"Show command","vm.inspectFailed":"{app} could not inspect the container runtime. Re-check, or review the app logs.","vm.safety.title":"Safety and storage","vm.safety.perBot":"Cua Driver operates only each private desktop. Every bot gets a private host folder mounted at {path}; its files and browser profile survive replacing the desktop. Viewers bind only to loopback, and exact bot-derived targets prevent one bot from attaching to another bot's container. Each desktop keeps its memory and CPU limits (4 GB and 2 CPUs unless config.json sets others), a 4,096-process cap and a fixed, minimal set of Linux capabilities. Private desktops can still reach the internet.","vm.safety.shared":"Cua Driver operates only the private desktop. Exactly one private host folder is mounted at {path}; files and browser sign-ins there survive replacing the desktop, while everything elsewhere in it is disposable. The password-protected viewer is available only on this machine. Docker and Podman runs are limited to 4 GB memory and 2 CPUs unless config.json sets others, and to 4,096 processes; all Linux capabilities are dropped except the few the desktop supervisor and package installs need. Where the desktop's root account would be the host's, as with Docker Engine on Linux, nothing in it can become root. The desktop can still reach the internet, and bots share it one at a time.","vm.safety.stop":"Stop","vm.safety.deleteLegacy":"Delete the old shared desktop","vm.safety.deleteVm":"Delete desktop","vm.safety.workspace":"Durable folder: {path} · Cua Driver: {driver} · Local image: {image}","vm.safety.notCreated":"not created","vm.safety.notPrepared":"not prepared","vm.confirm.deleteShared":"Delete the private desktop? Its durable folder and website sign-ins are kept. Apps installed inside the desktop and files outside the durable folder are deleted.","vm.confirm.recreate":"Replace the private desktop with the current version and its safety limits? Its durable folder and website sign-ins are kept. Apps installed inside the desktop and files outside the durable folder are deleted.","vm.announce.deleted":"Private desktop deleted.","vm.announce.stopped":"Private desktop stopped.","vm.announce.updated":"Private desktop updated.","vm.announce.deletedBot":"Deleted {name}'s private desktop.","vm.announce.vpsRemoved":"{subject} removed.","vm.announce.orphanVps":"Leftover desktop {id}","vm.announce.orphanCloud":"Left-behind cloud desktop","vm.err.status":"Couldn't check the private desktop ({code}). Try again.","vm.err.inventory":"Couldn't list private desktops ({code}). Refresh to try again.","vm.err.cloudInventory":"Couldn't list cloud desktops ({code}). Refresh to try again.","vm.err.vpsInventory":"Couldn't list desktops on your VPS ({code}). Refresh to try again.","vm.err.runtimeUnavailable":"No container app is running. Open Docker or Podman, then check again.","vm.err.cloudUnavailable":"Couldn't list cloud desktops. Refresh to try again.","vm.err.vpsUnavailable":"Couldn't list desktops on your VPS. Refresh to try again.","vm.vps.noneFound":"No {app} desktops found on your VPS.","vm.cloud.noneFound":"No cloud desktops found.","vm.vps.checkingList":"Checking desktops on your VPS…","vm.vps.remove":"Remove","vm.cloud.checkingList":"Checking cloud desktops…","vm.perBot.deleteHint":"Delete Limix-managed desktops you no longer need to free a slot. Files in their durable folders remain.","vm.err.prepare":"Couldn't prepare the private desktop. Try again.","vm.err.create":"Couldn't create the private desktop. Check the setup steps above, then try again.","vm.err.start":"Couldn't start the private desktop. Try again.","vm.err.stop":"Couldn't stop the private desktop. Try again.","vm.cloud.deleteError":"Couldn't delete this cloud desktop. Try again.","vm.cloud.sleepError":"Couldn't put this cloud desktop to sleep. Try again.","vm.announce.cloudDeleted":"{subject} deleted.","vm.announce.cloudSleeping":"{subject} is sleeping.","vm.cloud.deletedRefreshError":"{subject} was deleted, but the list could not refresh: {detail}","vm.cloud.sleepRefreshError":"{subject} was put to sleep, but the list could not refresh: {detail}","vm.setup.perBotHint":"Choose Private desktop for a bot, open Bot's screen, then create its desktop there. {app} assigns a private folder and an available loopback viewer port automatically.","vm.safety.baseImage":"Base: {image}","room.openBot":"Open {name}","room.pinHint":"Pin this message to the top of the group thread","room.fallbackBot":"Bot","room.aBot":"A bot","room.memberWorkingElsewhere":"{name} is working in another thread","room.queue.waitingFor":"Queued · waiting for {name} ({position} of {of})","room.queue.waiting":"Queued ({position} of {of})","room.queue.member":"{name}: {status}","room.responder.everyone":"Plain messages go to every group member; @mentions override this","room.responder.mentions":"Only explicitly @mentioned bots respond","room.responder.lead":"Plain messages go to {name}; @mentions override this","room.responder.leadFallback":"the lead bot","room.responder.aria":"Default responder","room.responder.groupLead":"Group lead","room.responder.leadOption":"Lead: {name}","room.responder.groupBehavior":"Group behavior","room.responder.everyoneOption":"Everyone responds","room.responder.mentionsOption":"Only when mentioned","room.responder.auto":"Jev picks who answers each plain message; @mentions override this","room.responder.autoOff":"Jev is off, so plain messages go to {name}; @mentions override this","room.responder.autoOption":"Auto (Jev)","room.responder.autoOptionOff":"Auto","room.responder.jevOffHint":"Jev is off, so {name} answers plain messages in this Auto room.","room.responder.jevOffOpen":"Turn on Jev","room.chiefAbsent.hint":"{name}, your Chief of Staff, isn't in this room, so work handed out here runs at each bot's own approval level.","room.chiefAbsent.add":"Add {name}","room.holds.banner":"Stopped by you: {names}. @mention a bot or say resume to bring it back.","room.holds.resume":"Resume {name}","room.holds.stop":"Stop {name}","room.holds.stopTitle":"Stop only {name}; the rest of the room keeps going","room.holds.avatarHeld":"{name}: held (stopped by you)","room.routedBy":"Picked by Jev · {percent}%","room.routedBy.openrouter":"Picked by OpenRouter · {percent}%","room.routedBy.workersai":"Picked by Clef · {percent}%","room.turnLimit.aria":"Turn limit for this conversation","room.turnLimit.default":"Default ({minutes} min)","room.turnLimit.minutes":"{minutes} minutes","room.turnLimit.custom":"Custom…","room.turnLimit.help":"How long a bot may go without progress in this conversation before the turn stops. Default uses the group turn limit in Settings. A new choice applies to the next turn.","room.folder.title":"Working folder","room.folder.detail":"Where every bot in this group runs its shell and file tools.","room.folder.own":"Each bot’s own folder","room.folder.placeholder":"Each bot’s own folder, or an absolute path","room.folder.locked":"Fixed for this thread after its first turn. Start a new thread to work somewhere else.","room.folder.choose":"Choose…","room.folder.chipTitle":"Group working folder","room.setup.title":"Set up {name}","room.setup.detail":"Give this group a shared folder, response style, and a little context before the first thread starts.","room.setup.folderDetail":"Where group members run file and shell tools.","room.setup.instructions":"Group instructions","room.setup.instructionsDetail":"A shared brief every member sees on each turn. You can edit it later.","room.setup.instructionsPlaceholder":"Goals, tone, ownership, constraints…","room.setup.skip":"Skip for now","room.setup.save":"Save & continue","room.behavior.lead":"Specific lead","room.behavior.chooseLead":"Choose a lead","room.behavior.chooseLeadDetail":"Plain messages go to this teammate.","room.behavior.chooseTeammate":"Choose a teammate","room.members.manage":"Manage members","room.members.ariaOne":"Manage members: 1 bot in this group","room.members.ariaMany":"Manage members: {count} bots in this group","room.bulletin.placeholder":"Group instructions: every bot in this group follows them (who does what, tone, goals, a task checklist…)","room.bulletin.title":"Group instructions: shared instructions for every bot here","room.bulletin.label":"Group instructions","room.bulletin.none":"No group instructions","room.bulletin.add":"Add group instructions…","room.panel.open":"Room settings","room.panel.openAria":"Open settings for {name}","room.panel.whoResponds":"Who responds","room.panel.responder.intro":"Who answers when you don't @mention anyone.","room.panel.responder.auto":"Limix Bot decides","room.panel.responder.autoOption":"Let Limix Bot choose","room.panel.responder.everyone":"Everyone","room.panel.responder.mentions":"Only who I @mention","room.panel.folder.own":"Its own folder","room.panel.instructions":"Instructions","room.panel.instructionsHint":"Tell the bots what this room is for","room.panel.members":"Members","room.panel.turnLimit":"Time per turn","room.panel.minutes":"{minutes} min","room.panel.hour":"1 hour","room.panel.hours":"{hours} hours","room.aria":"Group chat {name}","room.setup.responderDetail":"Choose who answers when nobody is mentioned.","room.setup.allMembers":"All group members","room.setup.onlyMentioned":"Only @mentioned members","room.setup.autoDetail":"Jev picks who answers each message","room.setup.autoDetailOff":"Jev is off: the lead answers","room.hint.dm":"Reply here to continue the bot-to-bot conversation.","room.hint.everyone":"Everyone responds unless you @mention specific bots.","room.hint.mentions":"Mention a bot with @ to bring them in.","room.hint.lead":"{name} responds by default. @mention someone else to choose them instead.","room.hint.leadFallback":"The lead bot","room.hint.auto":"Jev picks the best-fit bot for each message. @mention someone to choose them yourself.","computer.routine.everyMin":"Every {minutes} min","computer.routine.everyDay":"Every day","computer.routine.weekdays":"Weekdays","computer.day.sun":"Sun","computer.day.mon":"Mon","computer.day.tue":"Tue","computer.day.wed":"Wed","computer.day.thu":"Thu","computer.day.fri":"Fri","computer.day.sat":"Sat","computer.err.localEngine":"This model can't use this computer. Choose a model that can, such as Claude.","computer.err.vmEngine":"This model can't use the private desktop. Choose a model that can, such as Claude.","computer.err.vmNotReady":"The private desktop isn't ready","computer.problem.createVm":"Create the private desktop","computer.problem.vmStopped":"The private desktop is stopped; start it to continue","computer.problem.cuaNotReady":"The private desktop started, but its controls aren't ready yet","computer.problem.localAiCannot":"This bot's AI can't use this computer. Pick another AI for it in the bot's settings.","computer.problem.localWaylandBlocked":"Bots can't use this computer in this kind of desktop session yet. Sign out, choose “Ubuntu on Xorg” on the sign-in screen, and sign back in.","computer.problem.localWaylandDesktop":"In this kind of desktop session, bots can use this computer only on GNOME. Sign out and choose an Xorg session on the sign-in screen to use it here.","computer.problem.localHyprlandPlugin":"Bots can use this computer on Omarchy once its Hyprland add-on is installed and turned on. Open Local control for the steps.","computer.problem.localTurnOn":"Turn on local control in the Screen panel first.","computer.problem.localNotReady":"Bots can't use this computer yet. Restart {app} and try again.","computer.problem.localNeedsApp":"Only the {app} app on this computer can let a bot use it. Open the app here to use it.","computer.problem.localWindows":"Bots can't use this PC right now. Restart {app}, and if that doesn't help, open Settings → Diagnostics.","computer.problem.localMac":"Bots can't use this Mac yet. Check that {app} is allowed under Screen Recording and Accessibility in System Settings → Privacy & Security, then restart it.","computer.problem.localRemoteServer":"Bots on your own server can't use this computer. Switch back to This computer to use it.","computer.problem.oldImage":"The private desktop is out of date; replace it","computer.problem.unmanaged":"The existing container was not created by {app}; recreate it","computer.problem.publicViewer":"The private desktop's viewer is open to the network; replace it","computer.problem.missingLimits":"The private desktop is missing its safety limits; replace it","computer.problem.missingDurableFolder":"The private desktop is missing its own folder; replace it","computer.problem.perBotRuntime":"A private desktop for each bot needs Docker or Podman, because Apple container needs a fixed host port","computer.problem.desktopFailed":"The private desktop didn't start: {detail}","computer.err.vmOpenSettings":"{problem}. Open Settings → Bot desktops.","computer.err.vpsAlias":"Add your VPS's SSH alias in Settings → API keys.","computer.err.vpsNotReady":"The desktop on your VPS isn't ready yet","computer.err.vpsReplaceNotReady":"The new desktop on your VPS isn't ready yet","computer.err.vpsNoContainer":"No desktop is ready on your VPS","computer.err.vpsAuto":"{problem}. Auto will prepare or wake it when this bot next works.","computer.err.vpsManual":"{problem}. Turn on “Start VPS automatically” in this bot’s Access settings, or choose Cloud desktop to start it.","computer.err.emptyFrame":"The screen came back empty. Try again in a moment.","computer.err.frameTimeout":"The screen took too long to update. Try again.","computer.err.screenUnavailable":"The screen isn't available right now. Try again in a moment.","computer.err.noDesktopLink":"Couldn't get a link to the live desktop. Try opening it again.","computer.err.openDesktop":"{app} couldn't open the live desktop. Try again.","computer.err.openDesktopLink":"{app} couldn't open the live desktop link. Try again.","computer.err.popupBlocked":"Your browser blocked the live desktop tab. Allow pop-ups for this page, then try again.","computer.confirm.deleteVm":"Delete {name}'s private desktop? Its durable folder and website sign-ins are kept. Apps installed inside the desktop and files outside the durable folder are deleted.","computer.confirm.replaceVm":"Replace {name}'s private desktop? Its durable folder and website sign-ins are kept. Apps installed inside the desktop and files outside the durable folder are deleted.","computer.confirm.replaceVps":"Replace {name}'s desktop on your VPS with the version this {app} update needs? Files stored only inside the desktop will be deleted.","computer.phase.checking":"Checking…","computer.phase.starting":"Starting your bot's desktop…","computer.phase.vpsUnconfigured":"Your own machine isn't set up for this bot yet","computer.phase.vpsIncompatible":"The desktop on your own machine is from an earlier {app} version","computer.phase.vpsStopped":"The desktop on your own machine is stopped","computer.phase.localUnavailable":"Local computer control isn't ready.","computer.mac.permission.requiredOne":"{permission} is required for {app} to use this computer. Grant it in System Settings → Privacy & Security, then relaunch {app}.","computer.mac.permission.requiredBoth":"Screen Recording and Accessibility are required for {app} to use this computer. Grant them in System Settings → Privacy & Security, then relaunch {app}.","computer.mac.permission.generic":"Local computer control is not ready. {app} needs Accessibility and Screen Recording to use this Mac. Check Driver detail or System Settings, then click Retry.","computer.windows.title":"Screen control isn't running on this PC","computer.windows.body":"Bots here and on the Cloud can't use this PC's apps and screen until it runs.","computer.windows.blocked":"Windows Security may have stopped it. Allow it under Windows Security → Protection history, or reinstall {app}.","computer.windows.start":"Start screen control","computer.windows.starting":"Starting screen control…","computer.windows.detail":"What went wrong","computer.mac.permission.screenSettings":"Open Screen Recording Settings","computer.mac.permission.accessibilitySettings":"Open Accessibility Settings","computer.mac.permission.relaunch":"Relaunch {app}","computer.mac.permission.driverDetail":"Driver detail","computer.phase.vmUnavailable":"The private desktop isn't available for this bot","computer.phase.error":"Couldn't reach the bot's screen","computer.resizeAria":"Resize panel","computer.botSettings":"Bot settings","computer.tab.computer":"Screen","computer.tab.routines":"Routines","routines.list":"Routine list","routines.botPaused":"This routine's bot is paused on this plan, so it won't run.","routines.botPausedSwap":"Swap awake bots","routines.logs":"Run logs","routines.results.label":"Post results to","routines.results.keep":"Keep current destination","routines.results.new":"Create a dedicated results thread","routines.results.unavailable":"Thread unavailable. Choose another.","routines.results.help":"Each run starts with fresh context. Dated results collect here; full execution details stay in Run logs. A dedicated results thread is reused for every run and can be moved into a folder.","routines.results.open":"Open results thread","routines.results.back":"Back to results","routines.results.showReport":"Show report","routines.executionDetails":"Run details · {name}","routines.logsFor":"Run logs for {name}","routines.logsHint":"Recent saved runs across your bots. Open a run for its result, error, and execution thread.","routines.markAllSeen":"Mark all as read","routines.unread":"Unseen failure","routines.activeSchedule":"Active","routines.pausedSchedule":"Paused","routines.heldFor.plan_cancelled":"Paused because the plan was cancelled. Turn it on to keep it running until the plan ends.","routines.heldFor.no_engine":"Paused because none of your AI accounts is signed in here. It turns back on when you sign in again.","routines.heldFor.no_connections":"Paused because every connected app and MCP server was removed. It turns back on when you connect one, or turn it on here.","routines.toggle":"Run {name} on its schedule","routines.paused.close":"Close paused routines","routines.finishedSchedule":"Finished schedule","routines.noNextRun":"No next run scheduled","routines.nextRun":"Next {time}","routines.latestRun":"Latest: {status}","routines.neverRun":"Not run yet","routines.continuityLabel":"Remember the last run","routines.continuityHelp":"Each run starts with the previous run's report, so the bot knows what it found last time. Good for checks like QA or monitoring.","routines.runOnStartupLabel":"Also run when {app} starts","routines.runOnStartupHelp":"Runs once each time the app opens, for a computer that is often off at the scheduled time. The schedule keeps running as usual.","routines.overlapLabel":"If the previous run is still working","routines.overlapSkip":"Skip this occurrence","routines.overlapQueue":"Queue one run","routines.overlapSkipHelp":"Skip scheduled occurrences while this routine is working. Manual runs are separate.","routines.overlapQueueHelp":"Keep one scheduled run waiting until this routine finishes. Skip further occurrences until it starts. Manual runs are separate.","routines.failureStreak":"Recent consecutive failures: {count}","routines.weekRuns":"{ok} of {total} runs OK this week","routines.skippedRuns":"Scheduled occurrences skipped while busy: {count}","routines.lastSkipped":"Last: {date}","routines.loading":"Loading routines…","routines.loadError":"Couldn't refresh routines. Retrying… Saved information may be out of date.","routines.empty":"No schedules yet.","routines.noRuns":"No runs recorded yet. Results will appear here after a routine starts.","routines.noMatchingRuns":"No runs match these filters.","routines.noOutput":"No output recorded yet.","routines.searchLogs":"Search run logs","routines.filterStatus":"Filter runs by status","routines.allStatuses":"All statuses","routines.filteredRoutine":"Showing one routine's runs.","routines.showAll":"Show all routines","routines.loadMore":"Show more runs","routines.openRun":"Open {name} run: {status}","routines.unavailableBot":"Bot unavailable","routines.trigger.schedule":"Scheduled","routines.trigger.manual":"Manual","routines.trigger.webhook":"Webhook","routines.trigger.startup":"On startup","routines.status.queued":"Queued","routines.status.running":"Running","routines.status.waiting":"Waiting","routines.status.completed":"Completed","routines.status.failed":"Failed","routines.status.partial":"Partly done","routines.status.cancelled":"Cancelled","routines.status.missed":"Missed","routines.status.problems":"Problems","routines.retried.stalled":"Retried after the AI stalled · {status}","routines.retried.restarted":"Retried after {app} restarted · {status}","routines.retried.rate_limited":"Retried after a rate limit · {status}","routines.retried.provider":"Retried after a temporary error · {status}","routines.retried.usage_limit":"Ran after the usage limit reset · {status}","routines.retried.failed":"Retried after a failure · {status}","routines.goal.completed":"Completed","routines.goal.needs-input":"Needs your input","routines.goal.blocked":"Blocked","routines.goal.limit-reached":"Turn limit reached","routines.goal.paused":"Paused","routines.goal.stopped":"Stopped","routines.goal.failed":"Failed","routines.title":"Routines","automations.title":"Automations","automations.new":"New","automations.view":"Show as","automations.list":"List","automations.calendar":"Calendar","automations.wake":"Keep this computer awake for scheduled automations","automations.wakeBattery":"Plug in to hold it awake.","automations.allBots":"All bots","automations.allDepartments":"All departments","automations.generalDepartment":"General","automations.status.working":"On","automations.status.paused":"Paused","automations.status.needsYou":"Needs you","automations.status.done":"Done","automations.needsYou":"Needs you: {reason}","automations.lastRan":"last ran {when}","automations.checkedNothingNew":"checked {when}, nothing new","automations.readsAndDrafts":"reads and drafts only","automations.next":"next: {when}","automations.notRunYet":"hasn't run yet","automations.firstRun":"First run {when}","automations.runningNow":"running now","automations.time.today":"today {time}","automations.time.yesterday":"yesterday","automations.time.tomorrow":"tomorrow {time}","automations.when.everyDay":"Every day at {time}","automations.when.everyWeekday":"Every weekday at {time}","automations.when.everyDays":"Every {days} at {time}","automations.when.everyMinutes":"Every {count} minutes","automations.when.everyHour":"Every hour","automations.when.everyHours":"Every {count} hours","automations.when.onWeekdays":"{when} on weekdays","automations.when.between":"{when}, {start}–{end}","automations.when.once":"On {date} at {time}","automations.when.custom":"On a custom schedule","automations.when.limitReset":"When your {engine} limit resets","automations.when.everyLimitReset":"Each time your {engine} limit resets","automations.limit.timeUnknown":"runs when the limit resets (time not known yet)","limits.title":"AI usage limits","limits.used":"{engine}: {percent}% used","limits.atLimit":"{engine}: at its limit","limits.resets":"resets {time}","limits.windowAtLimit":"At its limit","limits.clearsOnReply":"Clears by itself once {engine} replies again.","limits.tryAgainNow":"Try again now","limits.cardTitle":"{engine} usage","limits.checked":"checked {when}","limits.dueOne":"1 automation runs before then","limits.dueMany":"{count} automations run before then","limits.moveAfterReset":"Move to after reset","limits.moved":"Moved to after the reset","limits.marker":"{engine} resets {time}","limits.markerDrop":"Drop a bot or an automation here to run it when {engine}'s limit resets","limits.callNotOnReset":"A call keeps its time. Drop a bot or an automation on a reset instead.","chat.limit.continueAt":"Continue at {time} when your limit resets","routines.limitReset.option":"When my AI limit resets","routines.limitReset.engine":"Which AI","routines.limitReset.repeat":"How often","routines.limitReset.once":"Once","routines.limitReset.every":"Every time it resets","routines.limitReset.next":"Next reset: {time}","routines.limitReset.unknown":"The reset time isn't known yet. It runs as soon as it is.","automations.sentence.schedule":"{when}, {bot} {does}","automations.sentence.app":"When {source} sends something, {bot} {does}","automations.source.other":"another app","automations.source.named":"your {name}","automations.does.default":"does what it's asked","automations.reason.answer":"It's waiting for your answer.","automations.reason.signIn":"It's signed out. Sign in again so it can run.","automations.reason.usage":"It's out of credit or hit a usage limit.","automations.reason.timeLimit":"It ran out of time before finishing.","automations.reason.repeated":"It didn't finish the last {count} times.","automations.reason.done":"Its time has passed. Edit it to pick a new time.","automations.fix.answer":"Answer","automations.fix.signIn":"Sign in","automations.fix.usage":"Check usage","automations.fix.edit":"Edit","automations.fix.run":"Run now","automations.toggle":"Turn “{name}” on or off","automations.run.done":"Done","automations.run.nothingNew":"Nothing new","automations.run.waitingOnTeam":"Waiting for work it handed on to finish","automations.run.stopped":"Stopped","automations.run.stoppedBecause":"Stopped: {reason}","automations.run.failed":"It didn't finish","automations.run.partial":"Partly done: {reason}","automations.panel.label":"Automation","automations.panel.recent":"Recent runs","automations.panel.noRuns":"It hasn't run yet.","automations.panel.close":"Close","automations.panel.open":"Open","automations.runNow":"Run now","automations.starting":"Starting…","automations.pause":"Pause","automations.resume":"Resume","automations.edit":"Edit","automations.delete":"Delete","automations.deleteConfirm":"Delete this automation? “{sentence}”","automations.address.title":"Paste this address into the other app","automations.address.copy":"Copy address","automations.address.copied":"Copied","automations.address.keepOpen":"Keep {app} open so it can receive.","automations.address.unavailable":"This computer can't receive right now.","automations.more":"More","automations.address.showSecret":"Show secret / settings","automations.address.secret":"Secret: {secret}","automations.address.secretUnknown":"The secret is shown once. Copy the address to make a new one.","automations.address.revealSecret":"Show","automations.address.hideSecret":"Hide","automations.address.copySecret":"Copy","automations.address.showSecretLabel":"Show the secret","automations.address.hideSecretLabel":"Hide the secret","automations.address.copySecretLabel":"Copy the secret","automations.address.copyFailed":"Couldn't copy the secret","automations.address.header":"Apps that can't use the full address can send the secret as Authorization: Bearer <secret>.","automations.address.events":"Only accepts: {events}","automations.address.replace":"Replace address","automations.address.replaceConfirm":"Replace this address? The old one stops working.","automations.received.title":"Last thing it received","automations.received.help":"Its instructions can use these fields.","automations.calls.title":"Recent calls","automations.calls.none":"Nothing has arrived yet.","automations.calls.empty":"Nothing to show.","automations.calls.received":"Received","automations.calls.test":"Received as a test","automations.calls.duplicate":"Already received, so it was skipped","automations.calls.skipped":"Skipped: it doesn't accept “{kind}”","automations.calls.noKind":"Skipped: it didn't say what kind it was","automations.calls.wrongSecret":"Wrong secret","automations.calls.wrongSecretTimes":"Wrong secret ({count} times)","automations.calls.paused":"Turned away: it was paused","automations.calls.botGone":"Turned away: its bot was deleted","automations.calls.tooMany":"Turned away: too many still waiting","automations.calls.tooFast":"Turned away: too many at once","automations.calls.tooLarge":"Turned away: too large","automations.calls.unreadable":"Turned away: it couldn't be read","automations.calls.refused":"Turned away","automations.newBox.title":"What should happen?","automations.newBox.placeholder":"e.g. every morning at 9, send me a summary of my inbox","automations.newBox.bot":"Who should do it?","automations.newBox.send":"Set it up","automations.newBox.noBots":"Create a bot first, then come back here.","automations.newBox.yourself":"Set it up yourself","automations.newBox.when":"When","automations.newBox.onSchedule":"On a schedule","automations.newBox.whenApp":"When another app sends something","automations.newBox.continue":"Continue","automations.newBox.back":"Back","automations.newBox.cancel":"Cancel","automations.empty.title":"Your bots can do things on their own.","automations.empty.try":"Try: every morning, summarize my inbox","automations.empty.example":"every morning, summarize my inbox","automations.card.setUp":"Set up: {sentence}","automations.card.next":"Next: {when}","automations.card.lastRan":"Last ran {when}","automations.card.removed":"Automation removed · undone","automations.card.gone":"This automation no longer exists","automations.card.undo":"Undo","automations.card.undoing":"Undoing…","automations.card.changedSince":"It changed since, so it can't be undone here.","automations.preview.finished":"“{name}” finished","automations.preview.failed":"“{name}” didn't finish","automations.preview.needsYou":"“{name}” needs you","automations.preview.stopped":"“{name}” was stopped","automations.preview.missed":"“{name}” didn't run on time","automations.preview.running":"“{name}” is running","automations.editor.new":"New automation","automations.editor.edit":"Edit automation","automations.editor.app.title":"When another app sends something","automations.editor.app.editTitle":"Edit automation","automations.editor.app.subtitle":"Each time it sends something, your bot does this.","automations.editor.app.who":"Who should do it?","automations.editor.app.what":"What should it do?","automations.editor.app.whatPlaceholder":"e.g. draft a short follow-up email for the person in it","automations.editor.app.name":"Name · optional","automations.editor.app.runOn":"Run on","automations.editor.app.thisComputer":"This computer","automations.editor.app.cloud":"Cloud desktop","automations.editor.app.events":"Only accept these kinds · optional","automations.editor.app.eventsHelp":"Comma-separated names the other app sends, for example push.","automations.editor.app.limit":"At most this many at once · optional","automations.editor.app.limitHelp":"More arrivals are turned away until one finishes. Leave blank for {count}.","automations.editor.app.save":"Save","automations.editor.app.create":"Set it up","automations.editor.app.limitError":"Use a whole number from 1 to {max}.","automations.sentence.appEvent":"{when}, {bot} {does}","automations.app.when.email":"When you get an email{details}","automations.app.when.slack":"When a new Slack message arrives{details}","automations.app.when.event":"When “{event}” happens in {app}{details}","automations.app.from":"from {value}","automations.app.about":"about “{value}”","automations.app.labeled":"labeled {value}","automations.app.mentioning":"mentioning “{value}”","automations.app.in":"in {value}","automations.app.checks":"checks every 15 minutes","automations.app.waiting":"waiting for the first one","automations.app.waitingEmail":"waiting for the first email","automations.app.limit":"Up to {count} app events a day {place}.","automations.app.placeDesktop":"on this computer","automations.app.placeCloud":"in the Cloud","automations.reason.reconnect":"{app} needs to be reconnected.","automations.reason.appError":"{app} didn't accept it: {error}","automations.fix.reconnect":"Reconnect","automations.newBox.whenAppEvent":"When something happens in an app","automations.panel.events":"Recent events","automations.panel.noEvents":"Nothing has arrived yet.","automations.panel.skippedToday":"{count} skipped today: {reason}","automations.skip.dailyLimit":"daily limit","automations.skip.queueFull":"too many waiting","automations.skip.expired":"not collected in time","automations.skip.tooMany":"it was already busy","automations.event.started":"Started a run","automations.event.joined":"Added to a waiting run","automations.event.filtered":"Skipped: didn't match","automations.event.duplicate":"Already handled","automations.event.skipped":"Skipped","automations.event.rejected":"Couldn't be handled","automations.editor.appEvent.title":"When something happens in an app","automations.editor.appEvent.app":"App","automations.editor.appEvent.event":"What happens","automations.editor.appEvent.account":"Account","automations.editor.appEvent.from":"From · optional","automations.editor.appEvent.subject":"Subject contains · optional","automations.editor.appEvent.label":"Label · optional","automations.editor.appEvent.text":"Only when it mentions · optional","automations.editor.appEvent.noApps":"No connected app this bot may use has events yet.","automations.editor.appEvent.connect":"Connect an app","automations.editor.appEvent.loading":"Loading apps…","automations.editor.appEvent.checks":"Checks for new ones every 15 minutes.","automations.editor.appEvent.instant":"Arrives as it happens.","automations.editor.appEvent.whatPlaceholder":"e.g. draft a reply with the order status; if it isn't about an order, stop","approval.applied.automation.create":"{name} set up an automation: {title}","approval.applied.automation.update":"{name} changed an automation: {title}","approval.applied.automation.pause":"{name} paused an automation: {title}","approval.applied.automation.resume":"{name} resumed an automation: {title}","approval.applied.automation.runNow":"{name} ran an automation: {title}","approval.applied.automation.delete":"{name} deleted an automation: {title}","routines.newRoutine":"New routine","routines.newWebhook":"New webhook","routines.webhooks":"Webhooks","routines.today":"Today","routines.previous":"Previous dates","routines.next":"Next dates","routines.view.label":"Schedule view","routines.view.day":"Day","routines.view.week":"Week","routines.view.list":"List","routines.drawer.label":"Routine details","routines.drawer.close":"Close details","routines.drawer.bot":"Bot","routines.drawer.lead":"Lead","routines.drawer.guests":"Bots invited","routines.drawer.group":"Group","routines.drawer.schedule":"Schedule","routines.drawer.what":"What to do","routines.drawer.agenda":"Agenda","routines.drawer.runsOn":"Runs on","routines.drawer.runLimit":"Run limit","routines.drawer.noRuns":"No runs yet.","routines.drawer.allRuns":"See all","routines.runsOn.local":"This computer","routines.runsOn.localHint":"Starts while {app} is open here.","routines.runsOn.botCloud":"The bot's cloud desktop","routines.runsOn.botVm":"The bot's private desktop","routines.runsOn.boat":"Cloud desktop","routines.scheduleNote.local":"Runs while {app} is open on this computer. It can't wake a sleeping computer; a run missed by less than 12 hours happens when the app is back.","routines.scheduleNote.addCloud":"To run routines 24/7, add a Cloud.","routines.scheduleNote.openCloud":"To run routines 24/7, create them in the Cloud.","routines.scheduleNote.leave":"Open the Cloud? This routine isn't saved, so it closes without saving.","routines.scheduleNote.cloud":"Runs in the Cloud, 24/7, even when your computer is off.","routines.scheduleNote.server":"Runs while the app is running here.","routines.runsOn.boatHint":"Runs the whole job on the bot's cloud desktop while {app} is open.","routines.runsOn.team":"This computer, with the whole group","routines.runsOn.cloudHome":"The Cloud","routines.runsOn.cloudHomeHint":"Runs on schedule, even when your computer is off.","routines.runsOn.boatHintCloudHome":"Runs the whole job on the bot's cloud desktop, even when your computer is off.","routines.runsOn.teamCloudHome":"The Cloud, with the whole group","routines.results.dedicated":"Its own results thread","routines.results.missing":"A thread that no longer exists","routines.results.main":"The bot's main thread","routines.results.mainHelp":"Each run starts with fresh context. Dated results collect here, in the bot's main thread unless you choose another; full execution details stay in Run logs.","routines.results.justMe":"Just me","routines.results.teamHelp":"Just me: only you see what it reports. Shared chat: everyone who can use the bot sees it.","routines.runNow":"Run now","routines.starting":"Starting…","routines.pause":"Pause","routines.resume":"Resume","routines.edit":"Edit","routines.delete":"Delete","routines.editor.new":"New routine","routines.editor.edit":"Edit routine","routines.editor.titlePlaceholder":"What should happen?","routines.editor.titleLabel":"Title","routines.editor.roomGoalKept":"{app} keeps the group and the work its members hand each other together for the full goal.","routines.editor.descriptionLabel":"Description","routines.editor.who":"Who does it","routines.editor.when":"When","routines.editor.repeat":"Repeat","routines.editor.instructionsPlaceholder":"Tell the bot what to do each time","routines.editor.customRepeat":"This routine uses a custom repeat. Change it under More options.","routines.editor.more":"More options","routines.editor.fewer":"Fewer options","routines.repeat.once":"Once","routines.repeat.daily":"Every day","routines.repeat.weekdays":"Weekdays","routines.repeat.weekly":"Every week","routines.findBot":"Find a bot","routines.sidebar.label":"Schedule sidebar","routines.sidebar.myBots":"My bots","routines.sidebar.searchBots":"Search bots","routines.sidebar.availableBots":"Bots available to schedule","routines.sidebar.dragBot":"Drag {name} onto the schedule","routines.sidebar.drag":"Drag","routines.sidebar.noBots":"Create a bot to schedule work.","routines.sidebar.noMatch":"No bots match your search.","routines.sidebar.dragHint":"Drag a bot onto any time to schedule it.","routines.kind.routine":"Routine","routines.kind.call":"Call","routines.editor.type":"Routine type","routines.editor.botTask":"Bot task","routines.editor.botTaskHelp":"One bot owns and completes each run.","routines.editor.teamGoal":"Goal","routines.editor.teamGoalHelp":"A bot keeps working until the goal is done, alone or leading a group.","routines.editor.teamGoalAttachments":"Team goals cannot carry routine attachments. Put shared context in the goal instructions or the group instructions.","routines.editor.goalWhere":"Where it runs","routines.editor.goalOneOnOne":"Just the bot, in its own chat","routines.editor.goalOneOnOneHelp":"The bot works on the goal in its own chat until it is done.","routines.botCountOne":"{count} bot","routines.botCountMany":"{count} bots","routines.group":"Group","computer.tab.android":"Android","computer.browserSwitch.title":"Let {name} use a browser","computer.tab.browser":"Browser","computer.tab.data":"Data","computer.tab.files":"Files","computer.tabsAria":"Bot panel view","computer.fullScreen":"Full screen","computer.watchFullScreenTitle":"Watch the whole screen; the bot keeps working","computer.watchingBotWorks":"Watching · the bot keeps working","computer.browserOff.title":"The browser is off","computer.browserOff.body":"Turn on the built-in browser to watch {name} browse the web, and take over any time.","computer.browserOff.turnOn":"Turn on the browser","computer.files.folder":"Working folder","computer.files.privateFolder":"{name}'s private folder","computer.files.changeFolder":"Change","computer.files.recent":"Changed in this chat","computer.files.empty":"Files {name} makes or changes in this chat will show up here.","computer.files.notShared":"Not shared","computer.files.notSharedHint":"Ask the bot to share a file link in this chat to save a copy.","computer.simple.whereWorks":"Where {name} works","computer.simple.usingNow":"Right now: {place}","computer.simple.dest.thisMac":"This Mac","computer.simple.dest.thisPc":"This PC","computer.simple.needsSetup":"{name}'s desktop needs a setup step first.","computer.simple.showAdvanced":"Show advanced controls","computer.close":"Close the Screen panel","computer.screenOf":"{name}'s screen","computer.badge.local":"this computer","computer.badge.vps":"your own machine","computer.viewerTitle":"{name}'s live desktop","computer.openLiveDesktopAria":"Open {name}'s live desktop","computer.openLiveDesktop":"Open live desktop","computer.open":"Open","computer.watchOnly":"Watch-only preview","computer.waitingFrame":"Waiting for the first frame…","computer.autoChooseCloudOpen":"Auto found an existing cloud desktop. Choose Cloud desktop to open it.","computer.capturingVm":"Capturing the private desktop's screen…","computer.linuxReady":"Ready for approved bot actions. Start the separate preview below when you want to watch the screen.","computer.needsScreenPerm":"No frames yet. The preview needs Screen Recording permission. After granting it, relaunch the app.","computer.capturingLocal":"Capturing this computer's screen…","computer.openSettings":"Open Settings","computer.openBrowserTab":"Open the Browser tab","computer.chooseCloudWake":"Choose Cloud desktop to wake","computer.chooseCloudOpen":"Choose Cloud desktop to open","computer.chooseCloudManage":"Choose Cloud desktop to manage","computer.createVm":"Create {name}'s private desktop","computer.replaceVm":"Replace {name}'s private desktop","computer.openVmSetup":"Open private desktop setup","computer.openVpsSettings":"Open VPS settings","computer.startVps":"Start the desktop on your VPS","computer.prepareVps":"Prepare the desktop on your VPS","computer.replaceVps":"Replace the desktop on your VPS","computer.vpsAliasHint":"Add your VPS's SSH alias in Settings → API keys. Auto only reuses a desktop that's already ready.","computer.twoDesktopsTitle":"Watch two private desktops together without pausing either bot","computer.twoDesktops":"Open two desktops","computer.takeControl":"Take control","computer.youHaveWheel":"You have the wheel. The bot's clicks and keystrokes are refused until you hand it back.","computer.inControl":"You're in control","computer.useOpenDesktop":"Use “Open live desktop” to drive.","computer.simple.useFullScreen":"Use “Full screen” to drive.","computer.handBack":"Hand control back","computer.deleteVmBlocked":"Stop this bot's turn before deleting its private desktop","computer.deleteVmTitle":"Delete {name}'s private desktop","computer.deleteVm":"Delete this bot's private desktop","computer.takeControlTitle":"Pause the bot's hands and drive this computer yourself","computer.sleepTitle":"Put the desktop to sleep","computer.worksOn":"Works on","computer.worksOnHint":"Choose where this bot works.","computer.worksOnHintCloudHome":"Choose where this bot works. It can also use your computer whenever {app} is open on it.","computer.destinationAria":"Computer destination","computer.dest.autoDesc":"Choose automatically","computer.dest.cloudDesc":"A desktop in the cloud","computer.dest.vmDesc":"Isolated local desktop","computer.dest.localDesc":"Your screen and apps","computer.dest.browserDesc":"Web pages only","computer.dest.offDesc":"No computer access","computer.unavailableLocal":"Local computer control isn't ready","computer.browserOnlyTitle":"The built-in browser tab only; no desktop","computer.routines.title":"Scheduled tasks","computer.routines.subtitle":"Schedule work for {name}. Use its current setup, or run the whole job on its cloud desktop.","computer.routines.offWarning":"Scheduled tasks on this computer will not have desktop access while this is Off. Choose Cloud desktop in the schedule editor to run the whole job there.","computer.routines.needsYou":"needs you","computer.runStatus.queued":"queued","computer.runStatus.running":"running","computer.routines.runsOnVm":"runs on its private desktop","computer.routines.create":"Create schedule","computer.routines.openTitle":"Open schedules","computer.routines.schedules":"Schedules","computer.preview.imageFailed":"Couldn't show the screen image. Try again in a moment.","computer.preview.connecting":"Connecting to live desktop…","computer.preview.connectingScreen":"Connecting to the screen…","computer.preview.paused":"Screen updates paused.","computer.preview.cantConnect":"Couldn't connect to the screen.","computer.preview.retry":"Retry preview","computer.linux.title":"Local control","computer.linux.meta":"Beta · Ubuntu 24.04 GNOME/{session} · Cua Driver 0.41.3","computer.linux.metaOmarchy":"Experimental · Omarchy (Hyprland) · Wayland","computer.linux.ready":"Ready","computer.linux.waylandBadge":"Unavailable on Wayland","computer.linux.waylandBefore":"Local control is available on Ubuntu Xorg. It remains disabled on Wayland until its input-safety boundary is validated. Sign out and choose","computer.linux.waylandXorg":"Ubuntu on Xorg","computer.linux.waylandAfter":"to use This computer; Chat, Cloud desktop, Private desktop, and screen preview still work here.","computer.linux.pluginBadge":"Plugin needed","computer.linux.hyprlandPlugin":"To use This computer on Omarchy, install and turn on Cua's Hyprland plugin (cua-hyprland-plugin), reload Hyprland, then try again.","computer.linux.omarchyGuide":"Cua's Omarchy guide","computer.linux.enableBefore":"Enabling lets bots you explicitly assign to","computer.linux.enableAfter":"inspect the active desktop and request mouse or keyboard actions. Every local action asks you first.","computer.linux.waylandInput":"GNOME may also ask you to allow foreground input for this desktop session.","computer.linux.readyMsg":"Ready for bots explicitly assigned to this computer. Bot actions use a private cursor, so your pointer stays under your control.","computer.linux.hyprlandReady":"Ready for bots explicitly assigned to this computer. Bots act through their own seat inside Hyprland, so your pointer and keyboard stay yours unless you approve a foreground action. Web pages open in the bot's own browser.","computer.linux.checking":"Checking the driver and desktop session…","computer.linux.bundledDriver":"Bundled Cua Driver","computer.linux.stopFailed":"Could not stop active local computer turns.","computer.linux.enable":"Enable local control (Beta)","computer.linux.tryAgain":"Try again","computer.linux.disable":"Disable local control","computer.linux.guide":"Local control guide","computer.linux.driverSetup":"Driver setup and troubleshooting","computer.screen.idle":"Start a private, view-only preview when you need it.","computer.screen.cancelled":"Screen selection was cancelled. Nothing is being shared.","computer.screen.ended":"Screen sharing ended. Nothing is being shared.","computer.screen.unavailable":"Screen preview isn't available in this desktop session.","computer.screen.unavailableNow":"Screen preview isn't available right now.","computer.screen.unavailableWindow":"Screen preview isn't available from this window.","computer.screen.noVideoTrack":"The selected source did not provide a video stream.","computer.screen.error":"Couldn't start screen preview.","computer.screen.displayFailed":"Couldn't display screen preview.","computer.screen.selected":"Selected screen","computer.screen.waiting":"Waiting for screen selection…","computer.screen.active":"Preview active. Previewing does not grant local control; local actions still require approval.","computer.screen.title":"Preview this computer","computer.screen.subtitle":"Preview only: starting a preview does not grant local control.","computer.screen.badge":"Preview only","computer.screen.videoAria":"Live preview of the selected screen","computer.screen.checking":"Checking screen preview…","computer.screen.sharing":"Sharing","computer.screen.choosing":"Choose a screen…","computer.screen.stop":"Stop preview","computer.screen.choose":"Choose a screen","computer.screen.start":"Start preview","computer.android.usbSubtitle":"Connected directly over USB. The screen and controls stay on this computer.","computer.android.usb":"USB","computer.android.unauthorized":"Unlock the Android phone, accept the “Allow USB debugging” prompt, and optionally choose Always allow from this computer.","computer.android.badState":"The phone is {state}. Reconnect the USB cable and keep USB debugging enabled.","computer.android.screenAria":"Interactive Android screen for {name}","computer.android.screenAlt":"{name} screen","computer.android.back":"Back","computer.android.home":"Home","computer.android.recent":"Recent","computer.android.hint":"Click to tap, drag or use a trackpad to scroll, and type after selecting a field.","computer.android.setupTitle":"First-time USB setup","computer.android.step1":"Connect the phone with a data-capable USB cable and keep it unlocked.","computer.android.buildNumber":"Build number","computer.android.usbDebugging":"USB debugging","computer.android.step3a":"Accept","computer.android.allowUsbDebugging":"Allow USB debugging","computer.android.step3b":"on the phone. You can choose Always allow for this trusted computer.","computer.android.agentNote":"Agent control uses this same authorized USB connection. No phone companion app, account, Tailscale, or wireless pairing is needed.","computer.android.harnessNote":"Once connected, ask any compatible Limix to open an Android app or complete a task on your phone. The bundled Phone Harness skill loads automatically for phone requests.","computer.android.step2":"Enable Developer options by tapping {buildNumber} seven times in About phone, then turn on {usbDebugging}.","connectors.card.popupBlocked":"Your browser blocked the connection page. Allow pop-ups, then try again.","connectors.card.connected":"Connected","connectors.card.alsoUseful":"Also useful","connectors.card.resumed":"Connected securely. Your bot is continuing the task.","connectors.card.paused":"Connected securely. Continue the paused task when you're ready.","connectors.card.signInHint":"Sign in or enter the app key on the secure connection page, never in chat.","connectors.card.mcpSignInHint":"Sign in on the page that opens, never in chat.","connectors.card.notNow":"Not now","connectors.card.waiting":"Waiting for sign-in…","connectors.card.readyToUse":"Ready to use","connectors.card.requested":"Requested by your bot","connectors.card.openAgain":"Open again","connectors.card.tryAgain":"Try again","connectors.card.connectSecurely":"Connect securely","connectors.card.signInTo":"Sign in to {label}","connectors.card.signIn":"Sign in","connectors.card.continueTask":"Continue task","connectors.card.continuing":"Continuing","connectors.disconnectConfirm":"Disconnect {identity} from {service}? Only this {service} account will be revoked. Your other {service} accounts will stay connected.","connectors.action.included":"Included","connectors.action.checking":"Checking…","connectors.action.unavailable":"Unavailable","connectors.action.continue":"Continue","connectors.action.checkStatus":"Check status","connectors.action.addAccount":"Add account","connectors.action.retry":"Retry","connectors.action.connect":"Connect","connectors.action.reconnect":"Reconnect","connectors.empty.loadingTitle":"Checking connected apps…","connectors.empty.loadingDesc":"Your accounts will appear here as soon as the secure connection check finishes.","connectors.empty.errorTitle":"Couldn’t load connected apps","connectors.empty.errorDesc":"Retry the connection check before adding another account.","connectors.empty.noneTitle":"No connected apps yet","connectors.empty.noneDesc":"Connect an app from Marketplace and it will appear here.","connectors.popupBlockedContinue":"Your browser blocked the connection page. Click Continue to open it.","connectors.openAuthorizationPage":"Open authorization page","connectors.invalidAuthorizationUrl":"The connection service returned an invalid authorization link.","connectors.aliasNeeded":"This app already has an account. Add a label such as work or personal to connect another.","connectors.title":"Plugins","connectors.subtitle":"Connect apps and your own MCP tools.","connectors.refreshTitle":"Refresh connection status","connectors.closeAria":"Close plugins","connectors.typeAria":"Plugin type","connectors.tab.apps":"Connected apps","connectors.tab.mcp":"MCP servers","connectors.stale":"Showing what was connected last time. The credential store couldn't be opened just now, so these couldn't be re-checked. Your apps are still connected. Restarting {app} usually clears this.","connectors.resetSavedKeys":"Reset saved keys","connectors.savedKeysUnreadable":"The keys saved on this computer couldn't be read.","connectors.viewAria":"Connected apps view","connectors.tab.marketplace":"Marketplace","connectors.tab.connected":"Connected","connectors.searchPlaceholder":"Search apps","connectors.notConfigured":"Connected apps are temporarily unavailable. Retry after restarting the host, or configure the connection service there.","connectors.setupNeeded":"Connected apps are not set up yet. To connect Gmail, Slack and more, add a project key in Settings → API keys, under Self-host connected apps.","connectors.setupNeededRemote":"Connected apps are not set up on the host yet. Add a project key under Self-host connected apps in the host's settings.","connectors.openSettings":"Open settings","connectors.featuredBefore":"Showing featured apps.","connectors.updateKey":"Update your connected apps key","connectors.featuredAfter":"for the full catalog.","connectors.loadingCatalog":"Loading catalog…","connectors.adminOnly":"Only an admin of this installation can connect apps here.","connectors.section.yours":"Your connections","connectors.section.results":"Search results","connectors.section.available":"Available apps","connectors.marketplace.partialCount":"showing {shown} of {total} apps (the connection service returned a partial catalog)","connectors.marketplace.partialStalled":"the connection service returned a partial catalog","connectors.marketplace.partialReason":"the connection service stopped paging early: {reason}","connectors.selfHostOnly":"Self-host only","connectors.selfHostOnlyReason":"Twitter/X needs your own X Developer app and sign-in setup. Use self-hosted connected apps for now.","connectors.finishSetup":"Finish setup in your browser","connectors.finishSetupOrDisconnect":"Finish setup in your browser, or disconnect the pending account below to start again","connectors.authExpired":"Authorization expired. Try again.","connectors.signedOut":"Signed out. Reconnect to keep using it.","connectors.reconnectAria":"Reconnect {account} to {service}","connectors.aliasTaken":"Another account already uses that label. Choose a different one.","connectors.disconnect":"Disconnect","connectors.disconnectAria":"Disconnect {account} from {service}","connectors.aliasRequired":"Enter a label for the account, such as work or personal.","connectors.aliasPlaceholder":"Account label (work, personal…)","connectors.aliasAriaAnother":"Label for another {service} account","connectors.aliasAriaNew":"Label for the new {service} account","connectors.noAppsFound":"No apps found","connectors.tryDifferentSearch":"Try a different search.","mcp.env.invalidName":"“{key}” is not a valid environment variable.","mcp.env.duplicate":"“{key}” is listed more than once.","mcp.err.nameAndCommand":"Add a server name and executable command.","mcp.toggled":"{name} is now {state}. New threads will use this change.","mcp.switchedOnByTest":"{name} is on: it passed its test a moment ago.","mcp.state.on":"on","mcp.state.off":"off","mcp.removeConfirm":"Remove the “{name}” MCP server?","mcp.title":"Your MCP servers","mcp.subtitle":"Add an MCP server once (a command that runs on this computer, or a server at a URL) and every compatible bot can use its tools. Tool calls still follow your normal approval settings.","mcp.refreshAria":"Refresh MCP servers","mcp.addServer":"Add server","mcp.trustNotice":"Commands run on this computer with the environment variables you provide; URL servers receive the headers you provide. Only add software and addresses you trust. A new server is turned on once it answers.","mcp.editorNew":"Add MCP server","mcp.editorEdit":"Edit {name}","mcp.field.name":"Server name","mcp.field.command":"Executable command","mcp.field.args":"Arguments · one per line","mcp.field.resultBudget":"Result size limit · characters","mcp.resultBudgetHint":"Leave blank for the default: 8,000 characters (about 2k tokens). Raise it for tools that return big structured documents; 0 never trims. Each result is re-read on every later model call, so a higher limit costs more.","mcp.err.resultBudget":"Use a whole number of characters from 0 to 2,000,000 for the result size limit.","mcp.cancel":"Cancel","mcp.save":"Save","mcp.loading":"Loading MCP servers…","mcp.empty.title":"No custom MCP servers yet","mcp.empty.desc":"Add a trusted MCP server (a local command or a URL) to give your bots more tools.","mcp.badge.on":"On","mcp.badge.off":"Off","mcp.secretsSaved":"Secrets saved: {keys}","mcp.test":"Test","mcp.toggleAria":"Turn {name} {state}","mcp.turnOff":"Turn off","mcp.turnOn":"Turn on","mcp.editAria":"Edit {name}","mcp.removeAria":"Remove {name}","mcp.auth.signedIn":"Signed in","mcp.auth.needsSignIn":"Needs sign-in","mcp.runsOn":"Runs on {computer}, so it isn't started here.","mcp.ownBot":"Only for {bot}: its files are in {bot}'s own folder.","mcp.offFor":"Off for {bots}, because it doesn't start for them. It's checked again on its own.","mcp.keyOff":"Its key was deleted from the Vault, so it is off. Give it a new key here, or ask your bot to add it again.","mcp.auth.signIn":"Sign in","mcp.auth.signOut":"Sign out","mcp.auth.cancel":"Cancel","mcp.auth.otherComputer":"Signing in from another computer?","mcp.auth.otherComputerHint":"Finish signing in in your browser. If it ends on a localhost page that cannot connect, copy the full URL from the address bar and paste it here. Keep this URL private and use the browser that started sign-in.","mcp.auth.pasteBackHint":"After you approve, your browser shows a page that can't load. Copy that page's full address and paste it here.","mcp.auth.callbackUrl":"Redirect URL","mcp.auth.complete":"Complete sign-in","mcp.auth.completing":"Completing sign-in…","mcp.auth.openAgain":"Open sign-in page","mcp.auth.openFailed":"Could not open the sign-in page. Try again.","mcp.auth.waiting":"Finish signing in in your browser…","mcp.auth.failed":"Sign-in didn't finish. Try again.","mcp.auth.required":"This server needs you to sign in. Sign in opens it in your browser.","mcp.transport.stdio":"Run a command","mcp.transport.remote":"Connect to a URL","mcp.field.url":"Server URL","mcp.field.type":"Connection","mcp.type.http":"Streamable HTTP (most servers)","mcp.type.sse":"SSE (older servers)","mcp.headersHint":"For example Authorization, with Bearer and your key as its value. Values stay hidden; leave a saved one blank to keep it.","mcp.headers.invalidName":"“{key}” is not a valid header name.","mcp.headers.duplicate":"“{key}” is listed more than once.","mcp.err.nameAndUrl":"Add a server name and a full http:// or https:// address.","mcp.headersSaved":"Headers saved: {keys}","mcp.oauth.title":"Sign-in app · optional","mcp.oauth.hint":"Only for a server that signs in apps registered with it in advance, such as one behind Microsoft Entra ID. Leave the client ID blank to let {app} register itself. Save to see the redirect URI to register.","mcp.oauth.hintRedirect":"Only for a server that signs in apps registered with it in advance. Register {uri} as the app's redirect URI. Leave the client ID blank to let {app} register itself.","mcp.oauth.clientId":"Client ID","mcp.oauth.clientSecret":"Client secret","mcp.oauth.secretOptional":"Optional, for a confidential app","mcp.oauth.secretSaved":"Saved · leave blank to keep it","mcp.oauth.removeSecret":"Remove saved secret","mcp.oauth.scopes":"Scopes · separated by spaces","mcp.oauth.saved":"Sign-in app: {clientId}","mcp.oauth.savedWithSecret":"Sign-in app: {clientId} · secret saved","mcp.claude.title":"Also use my Claude Code MCP servers","mcp.claude.desc":"Off: Claude bots only get the servers on this page, plus a bot project's own .mcp.json. On: they also get every MCP server and connector from your own Claude Code setup, on every message, the same way Codex bots already read your Codex config. More tools means more tokens per message, so keep this off unless you need them.","mcp.claude.aria":"Use my Claude Code MCP servers","mcp.claude.error":"Could not save this setting. Try again.","mcp.claudeSkills.title":"Also use my Claude Code skills","mcp.claudeSkills.desc":"On: Claude bots also load every skill in your ~/.claude/skills folder, straight from the folder: scripts and reference files included, and your edits reach them right away. Only skills come along; your hooks, MCP servers and CLAUDE.md stay out, so bots with tool limits keep working.","mcp.claudeSkills.aria":"Use my Claude Code skills","mcp.paste.prompt":"Paste the server's link, or the setup command you were given","mcp.paste.label":"Server link or setup command","mcp.paste.foundOne":"Ready to add {name} ({where}).","mcp.paste.foundMany":"Ready to add {count} servers: {names}.","mcp.paste.notRecognized":"That doesn't look like a server link or a setup command. Check you copied all of it, or fill it in yourself under Edit details.","mcp.paste.badJson":"That settings block is cut off or broken. Copy all of it again and paste it here.","mcp.paste.incomplete":"The command is missing the server's name or address. Copy all of it again and paste it here.","mcp.paste.badPair":"A header or setting in the command isn't written as Name: value or NAME=value. Fix it and paste it again.","mcp.paste.variable":"Paste the real value of {name} here: the command used a variable from your terminal.","mcp.paste.placeholder":"Paste your real {name} here: what you were given has a placeholder for it.","mcp.paste.urlMissing":"Put the server's real address here: the one you pasted has a placeholder in it.","mcp.details":"Edit details","mcp.add":"Add","mcp.field.headerRows":"Headers","mcp.field.envRows":"Environment variables","mcp.row.headerName":"Header name","mcp.row.envName":"Variable name","mcp.row.value":"Value","mcp.row.add":"Add another","mcp.row.remove":"Remove {name}","mcp.err.rowName":"Give every value a name, or remove the row.","mcp.err.missingValue":"Fill in {name}, or remove it.","mcp.check.connectedNone":"Connected, but it offers no tools yet.","mcp.check.connectedOne":"Connected: 1 tool","mcp.check.connectedMany":"Connected: {count} tools","mcp.check.overLimit":"Some AIs take at most {limit} tools at once, so there its tools are found through tool search.","mcp.check.crowdsLimit":"That's {count} of the {limit} tools some AIs take at once, so there other MCP servers may be found through tool search instead.","mcp.check.failed":"Couldn't connect. {reason}","mcp.check.failedOff":"Couldn't connect, so it stays off. {reason}","mcp.check.savedOff":"Saved, but off: the test failed. {reason} Your bots can use it once it's on.","mcp.check.testingOff":"Off until it passes a test: testing it now.","mcp.check.tryAgain":"Try again","mcp.check.keysRefused":"The server didn't accept the keys ({reason}). Check the values of {names}.","mcp.check.keysNeeded":"The server didn't let it in ({reason}). It probably needs a key: add it with Fix the keys.","mcp.check.fixKeys":"Fix the keys","mcp.fixKeys.title":"Fix the keys for {name}","mcp.fixKeys.hint":"Paste each value again. Saved values are never shown, so one left blank keeps what is saved.","mcp.fixKeys.placeholder":"Paste the new value","mcp.team.everyone":"Everyone on your team can use this.","mcp.team.onlyMe":"Only for me","mcp.team.onlyMeOn":"Only you can use this. Teammates can add their own key from their team page.","mcp.auth.loadingTools":"Signed in. Connecting…","engineSetup.device.description":"Connect your ChatGPT account to Codex. Complete sign-in in your own browser; no terminal or password sharing needed.","engineSetup.chatgpt.description":"Use your ChatGPT plan for eligible AI requests in {app}. This is separate from Limix Bot Cloud and from paying with an API key.","engineSetup.chatgpt.start":"Continue with ChatGPT","engineSetup.antigravity.addAccount":"Add Google account","engineSetup.antigravity.emailUnavailable":"Signed in with Google · account email unavailable","engineSetup.chatgpt.modelsAfterSignIn":"Available models appear after you connect your ChatGPT plan.","engineSetup.chatgpt.starting":"Opening ChatGPT sign-in…","engineSetup.chatgpt.security":"Sign in on OpenAI's page and choose whether to share plan usage. Your password stays with OpenAI; credentials stay on this computer.","engineSetup.chatgpt.expires":"Sign-in expires at {time}","engineSetup.chatgpt.expired":"This sign-in expired. Continue with ChatGPT to try again.","engineSetup.chatgpt.cancelled":"Sign-in cancelled. Continue with ChatGPT when you're ready.","engineSetup.chatgpt.invalidChallenge":"A valid OpenAI sign-in link was not returned. Cancel and try again.","engineSetup.chatgpt.failed":"ChatGPT sign-in could not be completed. Please try again.","engineSetup.chatgpt.flowEnded":"This sign-in session is no longer available. Check that this browser is still paired with Full access, then continue with ChatGPT again.","engineSetup.chatgpt.using":"Using ChatGPT plan","engineSetup.chatgpt.manageUsage":"Manage usage","engineSetup.chatgpt.welcome":"You’re using your ChatGPT plan","engineSetup.chatgpt.welcomeBody":"Eligible AI requests in {app} use your ChatGPT plan. Manage usage and access in ChatGPT settings. Your ChatGPT plan is separate from Limix Bot Cloud.","engineSetup.device.start":"Connect ChatGPT","engineSetup.device.starting":"Getting your sign-in code…","engineSetup.device.enterCode":"Enter this one-time code on OpenAI's sign-in page:","engineSetup.device.copyCode":"Copy sign-in code","engineSetup.device.openChatGPT":"Open ChatGPT sign-in","engineSetup.device.waiting":"Waiting for you to finish signing in…","engineSetup.device.expires":"Code expires at {time}","engineSetup.device.security":"Only enter a code you requested here. This signs Codex in for your bots and uses your account's limits. Your password stays with OpenAI, and the sign-in stays where your bots run.","engineSetup.device.enableHint":"Device-code login may need enabling in ChatGPT security settings or by your ChatGPT admin.","engineSetup.device.connected":"ChatGPT connected. Your models are being refreshed.","engineSetup.device.connectedAccount":"ChatGPT connected","engineSetup.device.cancel":"Cancel sign-in","engineSetup.device.cancelling":"Cancelling…","engineSetup.device.cancelled":"Sign-in cancelled. You can request a new code when ready.","engineSetup.device.expired":"This code expired. Request a new code to try again.","engineSetup.device.failed":"Sign-in could not be completed. Try again, or check the Codex installation.","engineSetup.device.unreachable":"Lost touch with the server during sign-in. Check the connection and start again.","engineSetup.device.invalidChallenge":"Codex did not return a valid OpenAI sign-in link and code. Cancel and try again.","engineSetup.device.flowEnded":"This sign-in session is no longer available. Check that this browser is still paired with Full access, then request a new code.","engineSetup.device.tryAgain":"Try again","engineSetup.grok.description":"Sign in with your grok.com account so your bots can use Grok. You finish in your own browser; no terminal or password sharing needed.","engineSetup.grok.start":"Sign in to Grok","engineSetup.grok.enterCode":"Enter this one-time code on xAI's sign-in page:","engineSetup.grok.open":"Open Grok sign-in","engineSetup.grok.security":"Only enter a code you requested here. This signs Grok in for your bots with your grok.com subscription and its limits. Your password stays with xAI, and the sign-in stays where your bots run.","engineSetup.grok.connected":"Grok connected. Your models are being refreshed.","engineSetup.grok.connectedAccount":"Grok connected","engineSetup.grok.failed":"Sign-in could not be completed. Try again, or check the Grok installation.","engineSetup.grok.invalidChallenge":"Grok did not return a valid xAI sign-in link and code. Cancel and try again.","engineSetup.grok.notInstalled":"Grok with your grok.com subscription isn't installed here. Use an xAI API key instead.","engineSetup.grok.addKey":"Add xAI key","engineSetup.kimi.description":"Sign in with your Kimi Code membership so your bots can use Kimi. You finish in your own browser; no terminal or password sharing needed.","engineSetup.kimi.start":"Sign in to Kimi","engineSetup.kimi.enterCode":"Enter this one-time code on Kimi's sign-in page:","engineSetup.kimi.open":"Open Kimi sign-in","engineSetup.kimi.security":"Only enter a code you requested here. This signs Kimi in for your bots with your Kimi Code membership and its limits. Your password stays with Moonshot AI, and the sign-in stays where your bots run.","engineSetup.kimi.connected":"Kimi connected. Your models are being refreshed.","engineSetup.kimi.connectedAccount":"Kimi connected","engineSetup.kimi.failed":"Sign-in could not be completed. Try again, or check the Kimi installation.","engineSetup.kimi.invalidChallenge":"Kimi did not return a valid sign-in link and code. Cancel and try again.","engineSetup.cursor.description":"Sign in with your Cursor account so your bots can use Cursor. You finish in your own browser, on any device; no terminal or password sharing needed.","engineSetup.cursor.start":"Sign in to Cursor","engineSetup.cursor.open":"Open Cursor sign-in","engineSetup.cursor.security":"Only open a link you requested here. This signs Cursor in for your bots with your Cursor plan and its limits. Your password stays with Cursor, and the sign-in stays where your bots run.","engineSetup.cursor.connected":"Cursor connected. Your models are being refreshed.","engineSetup.cursor.connectedAccount":"Cursor connected","engineSetup.cursor.failed":"Sign-in could not be completed. Try again, or check the Cursor installation.","engineSetup.cursor.invalidChallenge":"Cursor did not return a valid sign-in link. Cancel and try again.","settings.domain.title":"Connect your domain","settings.domain.subtitle":"Enter your address, then copy the DNS record to your domain provider.","settings.domain.loading":"Loading server address…","settings.domain.serverOnly":"Custom domains are for a self-hosted {app} server. This desktop app's phone connection is managed separately below.","settings.domain.current":"Current public address","settings.domain.guide":"Advanced server setup","settings.domain.enterDomain":"Enter an address like bots.yourcompany.com to see the DNS values.","settings.domain.dnsRecord":"Add this record in your domain provider’s DNS settings","settings.domain.recordType":"Type","settings.domain.recordName":"Name / Host","settings.domain.recordValue":"Value / IP","settings.domain.copyField":"Copy {field}","settings.domain.recordHint":"Leave TTL at its default. If your provider already adds your domain, enter only the subdomain in Name (or @ for the root domain).","settings.domain.missingIp":"Ask your server administrator for its public IPv4 address.","settings.domain.ipAdminHint":"For Docker, NAT or multiple public addresses, set OMB_PUBLIC_IPV4 to the IPv4 address where your HTTPS proxy is hosted and restart {app}. Private addresses are never shown as DNS values.","settings.domain.httpsNeeded":"Your administrator must enable HTTPS on the server. Then check the connection below.","settings.domain.dns":"In your domain's DNS settings, create an A record for your chosen name pointing to this server's public IPv4 address. Add an AAAA record only if IPv6 reaches this same server. Allow time for DNS to update.","settings.domain.proxy":"Your server administrator must configure HTTPS in front of {app}. For Caddy running on the same host or network namespace, use this example and replace bots.example.com with your domain:","settings.domain.proxyHint":"Allow incoming ports 80 and 443 for Caddy's certificate setup. Keep its certificate storage persistent, preserve the Host header and forwarded headers, and reload Caddy after changing its configuration. For Docker, use the supplied deployment recipe.","settings.domain.verifyHint":"Once HTTPS works, enter your domain below. {app} checks its certificate and confirms that it reaches this exact installation before saving anything.","settings.domain.loopbackWarning":"Keep {app}'s app and webhook listeners on loopback. Never publish the app's internal port directly to the internet.","settings.domain.fullGuide":"Open self-hosting guide","settings.domain.label":"Your domain","settings.domain.inputHint":"For example, bots.yourcompany.com or https://bots.yourcompany.com. No paths, passwords, or pairing codes.","settings.domain.verifying":"Checking connection…","settings.domain.verify":"Connect domain","settings.domain.remove":"Remove custom address","settings.domain.removing":"Removing…","settings.domain.fallback":"Removing the custom address restores {url}. It does not change your DNS or proxy.","settings.domain.noFallback":"No fallback public address is configured. Removing this address stops {app} using it for new pairing links; your DNS and proxy stay unchanged.","settings.domain.scope":"This changes future server pairing links, not existing webhook URLs or the desktop companion connection. Your bots and conversations stay untouched. Each browser must pair separately on the new domain.","settings.domain.saved":"Domain verified and connected. Keep this tab open until you have paired a browser at the new address.","settings.domain.removed":"Custom address removed. Your bots, conversations, DNS and proxy are unchanged.","settings.domain.failed":"The domain could not be updated. Check DNS and HTTPS, then try again.","remote.serverPairing.title":"Pair a phone or another computer","remote.serverPairing.subtitle":"Create a one-time code, then scan it with the {app} app or open the link in a browser. Codes work once and expire after five minutes.","remote.serverPairing.scope.admin":"Full access","remote.serverPairing.scope.client":"Chat and approvals only","remote.serverPairing.create":"Create pairing code","teamPhone.title":"Open on your phone","teamPhone.subtitle":"Scan this code with the {app} phone app. Your phone opens {team} as you, with the chats you see here.","teamPhone.stays":"Your phone stays signed in while {team} is open in this app.","teamPhone.remove":"Remove","remote.serverPairing.creating":"Creating…","remote.serverPairing.expired":"That code expired. Create a new one.","remote.serverPairing.copyLink":"Copy link","remote.serverPairing.copied":"Copied","remote.serverPairing.noLink":"This server has no public address for a link yet: open /pair on the address you use and type the code.","remote.serverPairing.chatOnly":"This device is connected with chat and approvals only, so it cannot pair others. On the computer running the server, run `limixbot pair` (or open Settings there) to make a full-access code, and connect this device again with it.","remote.serverPairing.cloudPersonal":"The Cloud is personal: only your own devices can connect, each with full access.","remote.serverPairing.devices":"Paired devices","remote.serverPairing.noDevices":"No devices paired yet.","remote.serverPairing.thisBrowser":"this browser","remote.serverPairing.signOut":"Sign out","remote.serverPairing.seen":"seen {when}","remote.serverPairing.justNow":"just now","remote.serverPairing.minutesAgo":"{minutes} min ago","remote.serverPairing.hoursAgo":"{hours} h ago","remote.serverPairing.daysAgo":"{days} d ago","remote.serverPairing.error":"Couldn't connect: {error}","remote.computerName.title":"This computer's name","remote.computerName.help":"What your phone calls this computer. Leave it empty to use the default.","remote.computerName.placeholder":"e.g. Office PC","remote.computerName.error":"Couldn't save the name: {error}","remote.serverPairing.portalSubtitle":"Browsers and devices signed in to this installation.","remote.serverPairing.portal":"People sign in to this installation through your organization's Admin, so pairing codes are turned off. To add someone, invite them in your organization's Admin.","remote.serverPairing.portalChatOnly":"You signed in through your organization's Admin. To use this installation on another device, sign in there the same way.","remote.serverPairing.portalDevices":"Signed-in devices","engineSetup.claude.description":"Sign in to Claude Code with your own Claude subscription. Open Anthropic's sign-in page in your browser, sign in, then paste the code it shows you here. No terminal and no password sharing.","engineSetup.claude.start":"Sign in to Claude","engineSetup.claude.starting":"Preparing sign-in…","engineSetup.claude.finishing":"Checking with Claude Code…","engineSetup.claude.connected":"Claude connected. Your models are being refreshed.","engineSetup.claude.connectedAccount":"Claude connected","engineSetup.claude.invalidChallenge":"Claude Code did not return a valid Anthropic sign-in link. Cancel and try again.","remote.signInAccess.title":"Who can sign in with an email","remote.signInAccess.subtitle":"People on this list sign in at /pair with a one-time code sent to their email. Full access is everything the owner can do; chat and approvals is for people who only talk to the bots.","remote.signInAccess.link":"Send them this link:","remote.signInAccess.placeholder":"name@company.com or @company.com","remote.signInAccess.add":"Add","remote.signInAccess.remove":"Remove","remote.signInAccess.empty":"Nobody yet. Add an address, or @yourcompany.com for everyone at your company.","remote.signInAccess.invalid":"Enter an email address, or @domain for everyone at that domain.","remote.signInAccess.note":"Changes apply immediately. Removing someone stops new sign-ins; their existing devices stay signed in until you sign them out above.","remote.signInAccess.error":"Could not save: {error}","botSetup.ideas":"Setup ideas","botSetup.optional":"Optional ways to customize this bot. You can start chatting now.","botSetup.withBot":"Set up with the bot","botSetup.help":"It asks a few questions and helps you set up.","botAccess.mcpDescription":"Controls which servers are offered to this bot. Individual tool approvals depend on the model provider and approval mode.","botAccess.mcpRefreshError":"Could not refresh MCP servers.","botAccess.mcpEmpty":"No MCP servers added yet.","botAccess.mcpDisabled":"Switched off in Apps → MCP servers. Test it and turn it on there first.","botAccess.mcpAllow":"Let this bot use {name}","botAccess.mcpAdd":"Add an MCP server…","botAccess.mcpUseAll":"Use every enabled server","botAccess.mcpBusy":"Wait until this bot finishes all active tasks before changing its MCP servers.","botAccess.connectApp":"Connect an app…","botAccess.recordSteps.title":"Record browser steps","botAccess.recordSteps.on":"Saves a screenshot and a short note of each click, typing and page change, with any errors the page reported. Kept with this conversation for 30 days.","botAccess.recordSteps.off":"Browser steps are not saved.","botAccess.recordSteps.needsBrowser":"Turn on the browser first.","botAccess.recordSteps.myChrome":"This bot uses your own Chrome, so the screenshots show your Chrome.","botSlack.body":"Give this agent its own Slack app, with its own name and picture, so your team can message it directly.","botSlack.manage":"Manage in Admin","skills.learned.hintOn":"Save a bot's verification run as a skill from the Verify card, or import one below. Each new or changed skill shows in the chat with Undo.","skills.learned.hintOff":"Skill authoring is off, but skills you already enabled stay under your control here.","skills.origin.imported":"this computer","skills.origin.importedHint":"Brought in from this computer. Each bot lists the ones that fit its role and finds the rest when a task needs them. Switch it on to list it for this bot, or off to keep it from this bot.","skills.origin.native":"AI","skills.origin.nativeHint":"The bot's AI loads this from the folder under Source. Turn it off here for this bot only; the files stay where they are. On Codex, while any is off here, this bot's replies skip the skills.config list in ~/.codex/config.toml.","skills.write.title":"Write a command","skills.write.hint":"Give the bot a short command for something you ask often. Type /name in a chat to run it. Anything after the name fills in {input}.","skills.write.name":"Command name","skills.write.namePlaceholder":"name","skills.write.description":"What it does","skills.write.descriptionPlaceholder":"What it does, in one line","skills.write.instructions":"Instructions","skills.write.instructionsPlaceholder":"What the bot should do. Use {input} for the text typed after the command.","skills.write.save":"Save command","skills.write.saving":"Saving…","skills.write.saved":"Saved. Type /{name} in a chat with this bot to run it.","skills.write.failed":"Could not save that command.","skills.write.problem.name":"Use lowercase letters, numbers, and single dashes for the name.","skills.write.problem.reserved":"That name is taken by a built-in command.","skills.write.problem.taken":"This bot already has a skill with that name.","skills.write.problem.description":"Add a one-line description.","skills.write.problem.instructions":"Add the instructions the bot should follow.","settings.section.skills":"Skills","skills.library.title":"Skills library","skills.library.subtitle":"Skills every bot can be assigned from, browsed and imported locally. Nothing is fetched from the network.","skills.library.searchPlaceholder":"Search by name, description, or source","skills.library.allTags":"All","skills.library.empty":"The library is empty. Import a skill below to get started.","skills.library.noMatches":"No skills match that search.","skills.library.version":"Version {version}","skills.library.noVersion":"No version","skills.library.importedAt":"Imported {date}","skills.library.notAssigned":"Not assigned to any bot.","skills.library.everyBot":"Every bot","skills.library.everyBotHint":"Make this skill available to every current and future bot.","skills.library.assignLabel":"Assign to bot","skills.library.assignPickBot":"Pick a bot…","skills.library.assign":"Assign","skills.library.removeAssignment":"Unassign {bot}","skills.library.enable":"Enable {skill}","skills.library.disable":"Disable {skill}","skills.library.view":"View {skill}","skills.library.importTitle":"Import a skill","skills.library.importHint":"Paste a SKILL.md file exactly as it exists on disk. Local import only: no URL is fetched.","skills.library.importPlaceholder":`---
|
|
10
10
|
name: my-skill
|
|
11
11
|
description: What it does
|
|
12
12
|
---
|
|
@@ -20,4 +20,4 @@ Decisions
|
|
|
20
20
|
Preferences
|
|
21
21
|
- Use concise weekly updates`,"team.instructionsFactHint":"Keep durable department facts here. Private notes stay in each bot's own Memory.","team.instructionsLastSaved":"Last saved {time}.","canvasComputers.title":"Desktops","canvasComputers.refresh":"Refresh desktops","canvasComputers.close":"Close desktops","canvasComputers.hint":"Drag a desktop onto a department, or choose its department below. Bots on Auto will use it.","canvasComputers.connectBoatHint":"Connect your Boat account before creating a cloud desktop.","canvasComputers.connectBoat":"Connect Boat","canvasComputers.newCloud":"New cloud desktop","canvasComputers.namePlaceholder":"e.g. Engineering desktop","canvasComputers.createHint":"Creates a cloud desktop in your connected boat.dev account. Your Boat plan and usage charges apply. It stays unassigned until you choose a department.","canvasComputers.create":"Create cloud desktop","canvasComputers.dragToTeam":"Drag {name} to a department","canvasComputers.cloudComputer":"Cloud desktop","canvasComputers.updating":"Updating…","canvasComputers.state.idle":"Idle","canvasComputers.state.ready":"Ready","canvasComputers.state.running":"Running","canvasComputers.state.starting":"Starting","canvasComputers.state.provisioning":"Preparing","canvasComputers.state.sleeping":"Sleeping","canvasComputers.teamFor":"Department for {name}","canvasComputers.unassigned":"Not assigned","canvasComputers.unassignHint":"Unassign to move to another department.","canvasComputers.startTitle":"Starts this cloud desktop; your provider's usage charges apply","canvasComputers.startRetry":"Start / retry","canvasComputers.sleep":"Sleep","canvasComputers.openTitle":"Pauses bot control while you use the desktop","canvasComputers.openDesktop":"Open desktop","canvasComputers.returnToBots":"Return to bots","canvasComputers.inUseTitle":"Another viewer has paused bot control on this desktop","canvasComputers.inUse":"In use","canvasComputers.openSecure":"Open secure desktop","canvasComputers.moreSettings":"More desktop settings…","canvasComputers.unassignBeforeMove":"Unassign {computer} from {team} before moving it to another department. Its files and signed-in accounts stay on that desktop.","canvasComputers.unassignBeforeMoving":"Unassign before moving to another department","canvasComputers.assignTo":"Assign to {team}","canvasComputers.dropOntoTeam":"Drop onto a department","canvasComputers.unassignTitle":"Unassign {name}?","canvasComputers.assignTitle":"Assign {name} to {team}?","canvasComputers.unassignBody":"This removes the department default. It does not stop or delete the machine, its files, or its logins. Review the bots' Auto routing before their next task.","canvasComputers.assignBody":"Bots on Auto in this department will share this desktop's files and signed-in accounts. Bots with their own Works on setting keep it. Only one bot can use the desktop at a time. This doesn't move {app} itself or turn on 24/7 hosting.","canvasComputers.computer":"desktop","canvasComputers.assign":"Assign desktop","canvasComputers.unassign":"Unassign desktop","window.minimize":"Minimize","window.maximize":"Maximize","window.restore":"Restore","window.close":"Close","place.cloud":"Cloud desktop","place.vm":"Private desktop","place.local":"This computer","place.browser":"Browser","place.auto":"Auto","place.off":"Off","place.chipTitle":"Where this conversation works","place.chipAria":"Where this conversation works: {place}","place.pinnedHere":"Pinned for this conversation","place.fromBot":"From this bot's Works on setting","place.live":"In use now","place.busy":"Wait for the current turn to finish","place.offHint":"Works on is Off for this bot. Change it in the Screen panel.","place.followBot":"Follow this bot's setting","place.followBotDetail":"Currently {place}","place.autoDetail":"Picks the right place for each task","place.unavailable":"Not available for this bot's model or setup","place.pinnedNote":"This conversation is pinned to {place}. Change it from the composer.","place.pinnedNoteSimple":"This chat is pinned to “{place}”.","place.unpinSimple":"Use {place}","place.view.auto.short":"Chooses for you","place.view.auto.lineMyCloud":"Uses the built-in browser. In a chat, it starts its cloud desktop by itself when a task needs desktop apps.","place.view.auto.lineDesktop":"Uses the built-in browser, a private desktop on this computer, or this computer's screen, whichever the task needs.","place.view.auto.lineLinux":"Uses the built-in browser, or a running private desktop when a task needs one.","place.view.autoTeam.short":"Shared","place.view.autoTeam.line":"Uses {computer}, the cloud desktop this department shares.","place.view.ccCannot.short":"Not with this model","place.view.ccCannot.line":"{model} can't use a desktop. Choose a model that can, such as Claude or ChatGPT.","place.view.ccToolsOff.short":"Not allowed","place.view.ccToolsOff.line":"What {bot} can use doesn't include a desktop.","place.view.ccSignIn.short":"Sign in first","place.view.ccSignIn.line":"Sign in to {engine} first. {bot} uses it on its cloud desktop too.","place.view.ccSignIn.lineMyCloud":"Sign in to {engine} in the Cloud first. {bot} uses it on its cloud desktop too.","place.view.ccNew.short":"Ready","place.view.ccNew.line":"{bot} gets its own cloud desktop from Boat the first time a task needs one. The first start takes about a minute.","place.view.ccStarting.short":"Starting…","place.view.ccStarting.line":"Starting {bot}'s cloud desktop. The first start takes about a minute.","place.view.ccWaking.short":"Waking…","place.view.ccWaking.line":"Waking {bot}'s cloud desktop. This takes a few seconds.","place.view.ccOn.short":"On","place.view.ccOn.line":"{bot}'s cloud desktop is on. It goes to sleep after 10 minutes without use.","place.view.ccAsleep.short":"Asleep","place.view.ccAsleep.line":"{bot}'s cloud desktop is asleep. It wakes in a few seconds when {bot} needs it.","place.view.ccNoHours.short":"No hours left","place.view.ccNoHours.line":"This month's {hours} cloud desktop hours are used up. They come back on 1 {month}.","place.view.ccNoHours.lineUnknown":"This month's cloud desktop hours are used up.","place.view.ccAtOnce.short":"In use","place.view.ccAtOnce.lineOne":"Your {plan} plan includes 1 cloud desktop, and {holders} has it.","place.view.ccAtOnce.lineMany":"Your {plan} plan includes {max} cloud desktops, and {holders} have them.","place.view.ccAtOnce.lineUnknown":"All the cloud desktops your plan includes are in use.","place.view.ccUnavailable.short":"Not available now","place.view.ccUnavailable.line":"Cloud desktops can't start right now. It isn't anything you did.","place.view.ccEnded.short":"Plan ended","place.view.ccEnded.line":"Your Limix Bot Cloud plan has ended, so cloud desktops are off.","place.view.ccNoStart.short":"Didn't start","place.view.ccNoStart.line":"{bot}'s cloud desktop didn't start.","place.view.ccClearing.short":"Clearing up","place.view.ccClearing.line":"{bot}'s previous cloud desktop is still being removed.","place.view.ccProvider.short":"Couldn't start","place.view.ccProvider.line":"Your Boat account couldn't start {bot}'s cloud desktop: {words}","place.view.ccOnMyCloud.short":"For Cloud bots","place.view.ccOnMyCloud.line":"Cloud desktops from your plan work for Cloud bots for now.","place.view.ccNeedsKey.short":"Connect Boat first","place.view.ccNeedsKey.line":"Bots here can get their own cloud desktops from Boat, a paid service.","place.view.vps.short":"Your own machine","place.view.vps.line":"Uses your own Linux machine, connected over SSH.","place.view.browser.short":"Web pages only","place.view.browser.line":"Works in the built-in browser only: web pages, no desktop apps.","place.view.browserOff.short":"Switched off","place.view.browserOff.line":"The bot's own browser is switched off, so it can't open web pages.","place.view.browserCannot.short":"Not with this model","place.view.browserCannot.line":"{model} can't use the built-in browser.","place.view.local.short":"Your screen","place.view.local.line":"Uses your screen, mouse, and keyboard.","place.view.localUnavailable.short":"Can't use it yet","place.view.localUnavailable.line":"{reason}","place.view.vm.short":"Separate from your screen","place.view.vm.line":"A private Linux desktop on this device, separate from your own screen.","place.view.vmCannot.short":"Not with this model","place.view.vmCannot.line":"{model} can't use a private desktop. Choose a model that can, such as Claude or ChatGPT.","place.view.placeFailed.short":"Didn't start","place.view.placeFailed.line":"{cause}","place.view.off.short":"No screen","place.view.off.line":"{bot} has no screen. It can still chat and do anything that doesn't need one.","place.action.chooseModel":"Choose a model","place.action.openTools":"Change what {bot} can use","place.action.signIn":"Sign in","place.action.start":"Start it now","place.action.wake":"Wake it now","place.action.watch":"Watch","place.action.seePlan":"See your plan","place.action.manageComputers":"Manage cloud desktops","place.action.tryAgain":"Try again","place.action.openMyCloud":"Open the Cloud","place.action.addBoatKey":"Connect Boat","place.action.turnOnBrowser":"Turn on the browser","place.action.openTeamMap":"Open Team map","place.action.openVmSettings":"Private desktop settings","place.action.clearPin":"Clear this conversation's place","place.action.usePlace":"Use {place}","place.action.changeRoutine":"Change where it runs","place.action.openComputerPanel":"Open the Screen panel","place.askAdmin":"Ask an Admin to change it.","place.backOnAuto":"This conversation is back on Auto.","access.worksOn":"Where {name} works: {short}","engines.icon.label":"Provider icon","engines.icon.selectAria":"Provider icon for {name}","engines.icon.default":"Default icon","engines.icon.custom":"Custom image","engines.icon.saving":"Saving provider icon","engines.icon.reset":"Reset","engines.icon.help":"Choose a provider or upload a square PNG, JPEG, or WebP image up to 128 KB. This changes only this model provider.","engines.icon.uploadAria":"Upload a custom provider icon for {name}","engines.icon.decodeError":"{app} couldn't read that image. Try a PNG or JPEG.","engines.icon.formatError":"Upload a PNG, JPEG, or WebP image.","engines.icon.sizeError":"Provider icons must be 128 KB or smaller.","engines.icon.invalidError":"Upload a complete PNG, JPEG, or WebP image up to 128 KB and {dimension} × {dimension} pixels.","engines.icon.dimensionError":"Provider icons must be at most {dimension} × {dimension} pixels.","room.usage.uncached":"{tokens} uncached input","room.usage.cached":"{tokens} cached input","room.usage.output":"{tokens} output","room.usage.input":"{tokens} input","room.usage.inputUnknown":"{tokens} input (cache split unknown)","room.usage.total":"This thread: {details}","room.usage.last":"Last turn · {name}: {details}","room.usage.cost":"Reported costs: {cost}","newBot.defaults":"Defaults for new bots","newBot.sections":"Bot settings","newBot.saveDefaults":"Save defaults","newBot.create":"Create bot","newBot.startingRole":"Starting role","newBot.presetsFromOrganization":"From {name}","newBot.presetsImported":"Imported presets","newBot.builtInRoles":"Built-in roles","newBot.presetFrom":"From {package} {release}","newBot.presetFromOrg":"From {package} {release} · {publisher}","newBot.presetSkillsOn":"Skills, added switched on: {names}","newBot.presetSkillsOff":"Skills, added switched off: {names}","newBot.presetNotes":"Starter notes: {names}","newBot.presetPlaybooks":"Playbooks: {names}","newBot.presetKeeps":"The model, where it works, approval level and connected apps stay as set here.","newBot.presetRemove":"Remove from New bot","newBot.sharePreset":"Share as preset…","newBot.customSettings":"Custom settings","newBot.randomName":"Random name","newBot.team":"Department","newBot.enabled":"Enabled","newBot.removeRoutine":"Remove {name}","memory.contents":"Memory contents","memory.addTopic":"Add memory topic","memory.removeTopic":"Remove memory topic","newBot.edit":"Edit","newBot.loading":"Loading settings…","newBot.failed":"Couldn't make a new bot: {error}","newBot.startsOnAsk":"{name} will ask before acting. To let it act on this computer by itself, choose Approve for me in its settings.","newBot.randomFemaleName":"Random female name","newBot.randomMaleName":"Random male name","botAccess.grants.noApps":"No apps connected yet.","botAccess.grants.header":"Per-app tools","botAccess.grants.hint":"Choose exactly which tools this bot may use on each connected app.","botAccess.grants.allTools":"All tools","botAccess.grants.noTools":"No tools","botAccess.grants.toolCount":"Tools: {count}","botAccess.grants.custom":"Custom grant","botAccess.grants.uneditable":"This bot's grants use a format this app version cannot edit.","botAccess.grants.allApps":"All tools for every app","botAccess.grants.firstGrantWarning":"The first grant you save (specific tools or All tools) creates this bot's grants record, which limits every other connected app to no tools until you grant them too.","botAccess.grants.firstGrantTitle":"Save the first grant for {service}?","botAccess.grants.firstGrantBody":"Saving a grant for {service} creates this bot's grants record, so every other connected app gets no tools until you grant them too.","botAccess.grants.saveGrant":"Save grant","botAccess.grants.loadError":"Couldn't load the tool list. Try again.","botAccess.grants.retry":"Try again","botAccess.grants.loading":"Loading tools…","botAccess.grants.noListing":"No tools listed for this service yet. You can still grant all tools.","botAccess.grants.search":"Search tools","botAccess.grants.noMatches":"No tools match that search.","botAccess.grants.verbHint":"Select every tool in this class","botAccess.grants.verb.read":"Read","botAccess.grants.verb.draft":"Draft","botAccess.grants.verb.send":"Send","botAccess.grants.verb.modify":"Modify","botAccess.grants.verb.delete":"Delete","connectors.grants.limited":"Bots with limited tools: {count}","connectors.grants.more":" +{count} more","keys.boat.label":"Boat API key","keys.boat.placeholder":"Paste your Boat API key","keys.boat.desc":"Give bots an isolated remote Linux computer with a desktop and terminal.","keys.boat.link":"Open Boat API key guide","keys.boat.warning":"Boat is a paid service after its trial. Usage may incur charges.","computer.phase.showReadyBoat":"Auto found an existing cloud desktop. It was not opened or changed.","computer.phase.showSleepingBoat":"Auto found a sleeping cloud desktop. It was not woken or changed.","computer.phase.showPendingBoat":"Auto found an existing cloud desktop that is not ready. It was not changed.","computer.cloud.new":"{name} gets its own cloud desktop the first time a task needs one. The first start takes about a minute.","computer.cloud.asleep":"{name}'s cloud desktop is asleep. It wakes in a few seconds when {name} needs it.","computer.badge.autoBoat":"cloud desktop · Auto · read-only","desktopViewer.title":"Desktop viewer","desktopViewer.reconnect":"Reconnect","desktopViewer.keyboard":"Keyboard","desktopViewer.text":"Text to type on the desktop","desktopViewer.send":"Send text","desktopViewer.connecting":"Connecting to the desktop…","desktopViewer.connected":"Desktop connected","desktopViewer.disconnected":"Desktop disconnected. Reconnect to try again.","desktopViewer.controls":"Desktop controls","desktopViewer.clipboard":"Clipboard","desktopViewer.clipboardHint":"Text copied on the desktop appears here. Edits sync automatically; paste them inside the desktop.","desktopViewer.fullscreen":"Enter fullscreen","desktopViewer.exitFullscreen":"Exit fullscreen","desktopViewer.fullscreenFailed":"Fullscreen is unavailable in this browser.","desktopViewer.hideControls":"Hide controls","desktopViewer.showControls":"Show controls","desktopViewer.closePanel":"Close panel","desktopViewer.notice":"noVNC licenses and source","desktopViewer.invalid":"This desktop link is invalid. Open it again from {app}.","desktopViewer.keyTab":"Tab","desktopViewer.keyEscape":"Esc","desktopViewer.keyCtrlAltDel":"Ctrl–Alt–Del","call.live.ended":"Call ended.","call.live.dropped":"Call dropped.","call.live.droppedNoAudio":"Call dropped: the audio could not connect.","call.live.endedIdle":"Call ended after a long silence.","call.live.endedExpired":"Call ended: it reached OpenAI's time limit.","call.live.endedContent":"OpenAI ended the call under its content rules.","call.live.endedDeleted":"Call ended: the chat was deleted.","call.live.endedShutdown":"Call ended: {app} restarted.","call.live.endedSignedOut":"Call ended: you were signed out.","call.live.busy.desktop":"Another Live call is running in the desktop app. Hang up there first.","call.live.busy.web":"Another Live call is running in a web browser. Hang up there first.","call.live.busy.ios":"Another Live call is running on an iPhone. Hang up there first.","call.live.busy.android":"Another Live call is running on an Android phone. Hang up there first.","call.live.micBlocked":"The microphone is blocked. Allow microphone access for this app in your computer's privacy settings, then try again.","call.live.micBlockedBrowser":"The microphone is blocked. Allow it for this site in your browser, then try again.","call.live.micMissing":"No microphone was found. Connect one, then try again.","call.live.micAppRefused":"The app didn't let this page use the microphone. Open it in your web browser to make the Live call.","call.live.unsupported":"Live calls need a microphone, and this window can't use one. Open {app} at a secure https address to make the call.","call.live.noOffer":"The call could not start: no connection offer.","call.live.clickToHear":"Click anywhere in the window to hear the call.","call.live.with":"Live with {name}","call.live.connecting":"Connecting…","call.live.hangingUp":"Hanging up…","call.live.onPhone":"{name} is on a Live call from {device}","call.live.settings":"Call settings","call.live.mute":"Mute","call.live.unmute":"Unmute","call.live.hangUp":"Hang up","call.live.tryAgain":"Try again","call.live.openInBrowser":"Open in browser","call.live.close":"Close","call.live.voice":"Voice","call.live.voiceNext":"A new voice starts with the next call.","call.live.readTyped":"Read replies to typed messages","call.live.readTypedHint":"When this is off, messages you type during a call and the bot's answers to them are not sent to OpenAI.","call.live.idle":"Hang up after this many minutes of silence","call.live.key":"OpenAI key","call.live.keyChange":"Change key","call.live.keyRemove":"Remove key","call.live.cost":"Via OpenAI GPT-Live, about $0.05 per minute.","call.live.disclosure":"A Live call sends your voice to OpenAI, along with the chat's recent messages, the bot's answers and the details of any approval it asks for. The OpenAI key stays on your computer.","call.live.disclosureCloud":"A Live call sends your voice to OpenAI, along with the chat's recent messages, the bot's answers and the details of any approval it asks for. The OpenAI key stays in the Cloud.","call.live.device.ios":"an iPhone","call.live.device.android":"an Android phone","call.live.device.desktop":"another window","call.live.device.web":"a web browser","call.mode.menu":"Call mode","call.mode.turns":"Take turns","call.mode.turnsHint":"You talk, then the bot answers in its own voice. Listening stays on this computer.","call.mode.turnsHintFish":"You talk, then the bot answers in its own voice. Fish Audio turns what you say into text, so your voice goes to Fish Audio.","call.mode.live":"Live","call.mode.liveHint":"Talk naturally and interrupt any time; the bot still does the work.","call.capability.turnsNeedFishKey":"Add a Fish Audio key to take turns on calls","call.capability.turnsNeedFishKeyReason":"On this computer, Take turns hears you through Fish Audio speech-to-text. Add a Fish Audio key in Settings → API keys.","call.capability.turnsNeedDesktop":"Calls where you take turns need the desktop app","call.capability.turnsNeedDesktopReason":"They listen from this computer, so they need {app} on a Mac, Windows or Linux computer.","call.capability.turnsOnThisComputerAnyOs":"Calls where you take turns work with bots on this computer","call.capability.turnsOnThisComputerAnyOsReason":"They listen from this computer's own window, so only bots on this computer can use them.","call.capability.turnsOnThisComputer":"Calls where you take turns work with bots on this Mac","call.capability.turnsOnThisComputerReason":"They listen with your Mac's own speech recognition, which only bots on this Mac can use.","call.capability.unavailable":"Calls aren't available on this device","call.capability.unavailableReason":"This device doesn't currently provide the on-device speech recognition needed for calls.","call.capability.serviceUnavailable":"Calls aren't available right now","call.capability.serviceUnavailableReason":"The speech service is unavailable in this app build. Restart or update {app}.","call.hangUpOn":"Hang up on {name}","call.live.callWith":"Live call with {name}","call.live.startInstead":"Start a Live call instead","call.live.pill":"On a Live call with {name}","call.live.back":"Back to the call","call.live.badge":"On a Live call","call.live.keyTitle":"Live calls use OpenAI GPT-Live","call.live.keyExplain":"Paste an OpenAI API key from a project with GPT-Live access. OpenAI bills about $0.05 per minute of call; the bot's own work is billed as usual.","call.live.keyField":"OpenAI API key for Live calls","call.live.keySaving":"Saving…","call.live.keySaveAndCall":"Save and start the call","call.live.needsKey":"Live calls use your own OpenAI key. Add it in Settings → API keys.","call.live.openApiKeys":"Open API keys","call.live.provider":"Service","call.live.provider.openai":"OpenAI","call.live.provider.azure":"Azure OpenAI","call.live.azureEndpoint":"Azure resource endpoint","call.live.azureDeployment":"GPT-Live deployment name","call.live.azureHint":"Deploy gpt-live-1 on your Azure OpenAI or Foundry resource, then paste the resource endpoint and the deployment name. An empty name means gpt-live-1. A key works only with the endpoint it was saved for: changing the Service or the endpoint's host asks for the key again.","call.live.azureKey":"Azure key","call.live.azureNeedsKey":"Add the key of your Azure OpenAI resource with Change key.","call.live.azureKeyTitle":"Live calls through Azure OpenAI","call.live.azureKeyExplain":"Paste a key of the Azure OpenAI resource that hosts your GPT-Live deployment (Keys and Endpoint in the Azure portal). Azure bills the call to that resource; the bot's own work is billed as usual.","call.live.azureKeyField":"Azure OpenAI key for Live calls","call.live.azureCost":"Via GPT-Live on your Azure OpenAI resource, billed by Azure.","call.live.needsAzure":"Live calls through Azure OpenAI need the resource endpoint, the GPT-Live deployment name and its key.","call.live.disclosureAzure":"A Live call sends your voice to your Azure OpenAI resource, along with the chat's recent messages, the bot's answers and the details of any approval it asks for. The Azure key stays on your computer.","call.live.disclosureAzureCloud":"A Live call sends your voice to your Azure OpenAI resource, along with the chat's recent messages, the bot's answers and the details of any approval it asks for. The Azure key stays in the Cloud.","call.live.keyFromApiKeys":"Uses your OpenAI API key from Settings → API keys.","settings.group.you":"You","settings.group.ai":"AI","settings.group.computers":"Devices","settings.group.account":"Account","settings.simple.page.computer":"Computer","settings.simple.page.billing":"Usage & billing","settings.simple.page.updates":"Updates","settings.simple.page.looks":"Looks","settings.simple.group.typing":"Language and typing","settings.simple.group.system":"System","settings.simple.advanced":"Advanced","settings.simple.advancedMode":"Show every control, including tools for builders. Nothing is deleted either way.","settings.simple.account.edit":"Edit","settings.simple.account.add":"Add","settings.simple.account.noName":"Add your name","settings.simple.account.manage":"Manage","settings.simple.people":"Who can sign in to these bots.","settings.simple.people.invite":"Invite someone","settings.simple.looks.title":"More looks","settings.simple.looks.change":"Change","settings.simple.themes.title":"Color themes","settings.simple.themes.browse":"Browse themes","settings.simple.themes.hint":"Follow system switches between Daylight and Midnight. Other themes stay fixed until you change them.","settings.simple.themes.followHint":"Follows your computer: Daylight when it is light, Midnight when it is dark.","settings.simple.themes.fixedHint":"Stays as it is. Choose Follow system to switch between Daylight and Midnight on its own.","settings.simple.looks.back":"Back","settings.simple.more.title":"More settings","settings.simple.more.subtitle":"Backups, limits and settings you rarely change.","settings.simple.more.limits":"Limits","settings.simple.more.open":"Open","settings.simple.theme.system":"Follow system","settings.simple.language.system":"Follow system","settings.simple.language.partial":"Only part of the app is translated so far.","settings.simple.sendKey":"Pick Shift+Enter or {key} if Enter confirms typed text, as in Japanese input.","settings.simple.followUp":"{key} does the other one for a single message.","settings.simple.deviceNotifications":"Only while the app is open. Questions, approvals and warnings always show.","settings.simple.notificationSounds":"Plays a sound when a bot finishes or needs you.","settings.simple.notificationFeed":"A bell on the right that keeps your last 500 notifications.","settings.simple.openAtLogin":"Starts when you sign in, so your bots are ready.","settings.simple.defaultBot":"Your helper. Hidden, it keeps working and search still finds it.","settings.simple.analytics":"Anonymous usage events. Never your messages, files or keys. Your email only if you shared it at setup or on a Cloud plan screen.","settings.simple.analyticsLink":"See everything it sends","settings.simple.diagnostics":"A file for support, with secrets removed. Check it before you send it.","settings.simple.ai.yours":"Your AI","settings.simple.ai.more":"More AI providers ({count})","settings.simple.ai.manage":"Manage","settings.simple.ai.setUp":"Set up","settings.simple.billing.summary":"{percent}% of this month's included use","settings.simple.billing.included":"This month's included use","settings.simple.billing.weekly":"Weekly usage · {provider}","settings.simple.billing.monthlySpend":"Monthly spend · {provider}","settings.simple.billing.used":"used","settings.simple.billing.ownAi":"Your bots use the AI accounts you connected under AI. Each provider's plan sets its own limits.","settings.simple.billing.limits":"See all limits","settings.simple.billing.plan":"Plan","settings.simple.computer.bots":"Your bots' computers","settings.simple.computer.pair":"Pair a phone or computer","settings.simple.computer.createCode":"Create code","settings.simple.computer.elsewhere":"Connect from elsewhere","settings.simple.updates.seeRelease":"See the release","settings.simple.updates.reload":"Reload","apps.title":"Apps","apps.subtitle":"Connect an app or your own MCP server once. Then choose which bots may use it.","apps.filter.aria":"Show","apps.filter.all":"All","apps.filter.connected":"Connected","apps.filter.mcp":"MCP servers","apps.connected":"Connected","apps.usedBy":"Used by {names}","apps.usedByNone":"No bots yet","apps.usedByChange":"Change","apps.whichBots":"Which bots can use {app}?","apps.botsCanUse":"Your bots can now use {app}.","apps.noBotsUse":"No bot uses {app} yet.","apps.showAll":"Show all {count} apps","apps.mcp.add":"Add MCP server","apps.mcp.manage":"Manage","apps.connectedCount":"{count} connected","apps.categoriesAria":"Categories","apps.more":"More","apps.moreCategories":"More categories","apps.section.connected":"Connected","apps.section.all":"All apps","apps.section.suggested":"Suggested for you","apps.viewAll":"View all","apps.suggested.show":"Show suggested","apps.suggested.picking":"Picking…","apps.suggested.picked":"Picked for what you've connected","apps.suggested.addKey":"Add a Jev key in Settings","apps.category.productivity":"Productivity","apps.category.developerTools":"Developer tools","apps.category.communication":"Communication","apps.category.files":"Files","apps.category.salesCrm":"Sales and CRM","apps.category.design":"Design","apps.category.marketing":"Marketing","apps.category.analytics":"Analytics","apps.category.social":"Social","apps.catalog.googleCalendar.blurb":"Read and create events","apps.catalog.googleSheets.blurb":"Read and update spreadsheets","apps.catalog.googleDocs.blurb":"Read and write documents","apps.catalog.notion.blurb":"Pages and databases","apps.catalog.github.blurb":"Issues, pull requests, and code","apps.catalog.linear.blurb":"Issues and project tracking","apps.catalog.sentry.blurb":"Errors and alerts","apps.catalog.jira.blurb":"Issues and sprints","apps.catalog.slack.blurb":"Post updates and read channels","apps.catalog.gmail.blurb":"Read and send email","apps.catalog.discord.blurb":"Messages and channels","apps.catalog.googleDrive.blurb":"Browse and manage files","apps.catalog.posthog.blurb":"Analytics, feature flags, experiments","apps.catalog.xTwitter.blurb":"Post and read on X","apps.x.title":"X (Twitter)","apps.x.description":"Search and read posts on X for your bots","apps.x.included":"Included with your plan","apps.x.usage":"{used} of {max} X calls this month.","apps.x.usageTrial":"{used} of {max} X calls in your free trial.","apps.x.resets":"They reset on {date}.","apps.x.usedUp":"This month's included X calls are used up. They reset on {date}. Add your own treg key to keep going.","apps.x.usedUpTrial":"Your free trial's included X calls are used up. Your full allowance starts on {date}. Add your own treg key to keep going.","apps.x.own":"Using your treg key","apps.x.ownBilled":"Your bots search and read X with your own treg key. Calls are billed to your treg balance.","apps.x.ownFirst":"Your own treg key is used first, and calls are billed to your treg balance. Your plan's included X calls wait until you remove it.","apps.x.addKey":"Add your treg key","apps.x.addKeyHelp":"Paste a treg key to let your bots search and read X. Calls are billed to your treg balance.","apps.x.connecting":"Connecting your plan's included X calls…","apps.x.useOwnKey":"Use my own treg key","apps.x.remove":"Remove key","apps.catalog.reddit.blurb":"Browse and post","apps.catalog.zapier.blurb":"Connect 9,000+ apps","apps.catalog.hubspot.blurb":"CRM search & updates","apps.catalog.salesforce.blurb":"CRM records and reports","apps.catalog.asana.blurb":"Tasks and projects","apps.catalog.trello.blurb":"Boards and cards","apps.catalog.dropbox.blurb":"Files and folders","apps.catalog.airtable.blurb":"Bases and records","apps.catalog.figma.blurb":"Files and comments","apps.catalog.stripe.blurb":"Payments and customers","sidebar.nav.routines":"Routines","sidebar.nav.triggers":"Triggers","sidebar.nav.apps":"Apps","sidebar.nav.files":"Files","webPanels.settings.title":"Pinned panels","webPanels.settings.subtitle":"Keep a few web pages, like a local dashboard, one click away in the sidebar (Advanced mode).","webPanels.settings.name":"Name","webPanels.settings.url":"Page address","webPanels.settings.add":"Pin page","webPanels.settings.remove":"Remove","webPanels.settings.nameInvalid":"Give the panel a name of up to {max} characters.","webPanels.settings.urlInvalid":"Use a full http:// or https:// address without a user name or password.","webPanels.settings.urlSelf":"That's this app's own address. Pin a different page.","webPanels.settings.chatPage":"A page from a chat","webPanels.settings.help":"Pages open inside the app. Bots can't see them.","webPanels.settings.full":"You've pinned the maximum of {max} pages. Remove one to add another.","webPanels.page.reload":"Reload","webPanels.page.openInBrowser":"Open in browser","webPanels.page.cantEmbed":"This page can't be shown inside the app","webPanels.page.cantEmbedBody":"Some sites refuse to be embedded. Open it in your browser instead.","webPanels.page.pageGone":"This page can't be shown right now","webPanels.page.refusedBody":"{site} doesn't allow other apps to show it. Open it in your browser instead.","botAccess.tools.budget":"Its last turn listed {listed} of the {limit} tools its AI takes at once.","botAccess.tools.budgetSearched":"Found through tool search instead: {names}","botAccess.tools.title":"Tool selection","botAccess.tools.description":"Advanced: narrow the tools offered to this bot. Existing approvals still apply.","botAccess.tools.corrupt":"This bot's saved tool selection is damaged, so the bot can't start. Choose its tools again to fix it.","botAccess.tools.none":"No tools selected","botAccess.tools.all":"All current tools","botAccess.tools.customSaved":"Custom selection saved","botAccess.tools.mode":"Available tools","botAccess.tools.custom":"Custom selection","botAccess.tools.onlyListed":"Only allow listed tools","botAccess.tools.allow":"Allow (one per line)","botAccess.tools.exclude":"Exclude (one per line)","botAccess.tools.emptyHint":"An empty Allow list selects no tools. Save to apply it.","botAccess.tools.syntax":"Use original names: native:NAME or mcp:SERVER:NAME. native:* and mcp:SERVER:* include all tools in that group. Exclude wins.","botAccess.tools.grok":"Grok CLI native selection requires version 1.0.41. For MCP tools, also allow native:search_tool and native:use_tool, or use Pi.","botAccess.tools.nativeUnsupported":"This AI cannot limit native tools. Keep native:* in Allow with no native exclusions, or choose a supported AI. This selection will stop before sending a prompt.","botAccess.tools.unsupported":"Tool selection is not supported by this AI. This selection will stop before sending a prompt. Choose a supported AI.","botAccess.tools.busy":"Wait until this bot finishes all active tasks before changing its tool selection.","botAccess.tools.saving":"Saving tool selection…","botAccess.tools.save":"Save tool selection","botAccess.tools.examples":"Examples and AI support","botAccess.folder.title":"Working folder","botAccess.folder.description":"Where this bot runs its shell and file tools.","botAccess.folder.private":"Private bot folder","botAccess.folder.choose":"Choose…","botAccess.folder.clear":"Clear","botAccess.folder.placeholder":"Private bot folder, or an absolute path","botAccess.folder.save":"Save","botAccess.folder.pinned":"New tasks start here. This task is pinned to {path}. Start a new task to use the new folder.","botAccess.folder.home":"the home folder","botAccess.cloud.autoTitle":"Auto cloud preference.","botAccess.cloud.autoDescription":"This chooses what Auto may reuse during a task; viewing settings does not create or wake a computer.","botAccess.cloud.startVps":"Start VPS automatically","botAccess.cloud.startVpsDescription":"Allow Auto to create or wake this bot's managed container when needed.","botAccess.apps.title":"Connected apps","botAccess.apps.connectInSettings":"Connect apps in App Settings before giving this bot access.","botAccess.apps.modelUnsupported":"This bot's current model cannot use connected apps.","botAccess.apps.partial":"Tool access is tailored per app. Expand an app below to edit its tools.","botAccess.apps.none":"Every connected app is currently limited to no tools. Expand an app to grant tools.","botAccess.apps.enabled":"Let this bot use your connected Gmail, Calendar, Slack, and other apps.","botAccess.apps.disabled":"Keep your connected apps unavailable to this bot.","botAccess.apps.allow":"Allow this bot to use connected apps","botAccess.apps.connectFirst":"Connect apps in App Settings first","botAccess.apps.modelUnsupportedShort":"This model cannot use connected apps","botAccess.browser.title":"Browser","botAccess.browser.windowsUnavailable":"Not available on this Windows machine yet: install the browser with `limixbot browser install`.","botAccess.browser.disabledInSettings":"The built-in browser is switched off under App Settings → Devices.","botAccess.browser.modelUnsupported":"This bot's current model cannot use the built-in browser.","botAccess.browser.off":"Works on is set to Off, so this bot has no browser. Choose another place in the Screen panel to give it one.","botAccess.browser.enabled":"This bot has its own browser with its own logins.","botAccess.browser.disabled":"Keep the built-in browser unavailable to this bot.","botAccess.browser.allow":"Give this bot a built-in browser","botAccess.browser.offShort":"Works on is set to Off, so this bot has no browser","botAccess.webhooks.title":"Webhooks","botAccess.webhooks.description":"Inbound triggers wired to this bot.","botAccess.webhooks.empty":"No webhooks for this bot.","botAccess.webhooks.active":"Active","botAccess.webhooks.paused":"Paused","botAccess.webhooks.deliveries":"{count} deliveries","botAccess.always.title":"Always allowed","botAccess.always.description":"Tools this bot no longer asks about.","botAccess.always.empty":"Nothing standing yet.","botAccess.always.remove":"Remove {entry} from always allowed","botAccess.always.removeButton":"Remove","botAccess.scopes.limited":"Only the apps allowed below, at the level set for each. Everything else is off for this bot.","botAccess.scopes.unlimited":"No app-level limits. The tool grants below still apply.","botAccess.scopes.limitLabel":"Limit this bot to specific apps","botAccess.scopes.empty":"No apps connected yet. Connect one, then allow it here.","botAccess.scopes.notConnected":"not connected","botAccess.scopes.accessLabel":"{app} access","botAccess.phone.title":"Phone apps","botAccess.phone.subtitle":"What this bot may do on {phone}","botAccess.phone.notOnPhone":"Not allowed on the phone","botAccess.phone.default":"Using the default: every bot can use what the phone allows. From the computer, bots change things on the phone only when you ask them to.","botAccess.phone.cap.calendar":"Calendar","botAccess.phone.cap.reminders":"Reminders","botAccess.phone.cap.contacts":"Contacts","botAccess.phone.cap.location":"Location","botAccess.phone.cap.home":"Home","botAccess.phone.cap.messages":"Messages","botAccess.scopes.off":"Off","botAccess.scopes.offHint":"This bot cannot use it.","botAccess.scopes.read":"Read","botAccess.scopes.readHint":"Search, fetch, and list only.","botAccess.scopes.readWrite":"Read & write","botAccess.scopes.readWriteHint":"Tool grants and sending limits still apply.","botAccess.teams.title":"Also in charge of","botAccess.teams.description":"{name} can already talk to every bot, in any department. Pick the other departments it's also in charge of as Chief of Staff: it looks after their bots, hears about their problems, and can suggest changes to how they're set up. Its own department is always included.","botAccess.teams.legend":"Departments {name} is in charge of","botAccess.teams.general":"General","botAccess.teams.empty":"There are no other departments yet.","botAccess.teams.save":"Save departments","botAccess.cloud.provider":"Cloud provider","botAccess.cloud.backend":"Cloud backend","botAccess.cloud.vpsDescription":"Your own server, connected over SSH.","botAccess.cloud.hostedDescription":"A hosted computer managed by Boat.","botAccess.cloud.vpsAutoDescription":"Auto reuses a running desktop on your VPS. Turn on Start VPS automatically to let Auto create or wake it, or choose Cloud to do it explicitly. Open the live desktop securely from the computer panel.","botAccess.cloud.hostedBackendDescription":"Boat is the default hosted computer. Choose Self-hosted VPS to use your SSH-configured Linux Docker host.","botAccess.cloud.selfHostedVps":"Self-hosted VPS","botAccess.cloud.boat":"Boat","botAccess.cloud.server":"Server (SSH alias)","botAccess.cloud.serverDefault":"Leave empty to use {alias} from Settings → API keys.","botAccess.cloud.serverNoDefault":"No default server is set. Type an SSH alias from your SSH config, or set one in Settings → API keys.","botAccess.cloud.serverPlaceholder":"my-vps","botAccess.cloud.serverSave":"Save","screenLoad.failed":"This screen couldn’t load. Reload the window to open it.","screenLoad.reload":"Reload","data.loading":"Loading data…","data.empty":"Ask your bot to load a file, or write SQL below.","data.history":"History","data.latest":"Latest result","data.openResult":"Open in Data","data.openInWorkspace":"Open this result in the desktop app. Data viewing is not yet available over the companion connection.","data.resultUnavailable":"This result is no longer available. Choose another result from History.","data.view.chart":"Chart","data.view.table":"Table","data.loadFailed":"The data sheet could not be loaded: {reason}","data.sources.label":"Tables","data.sources.rows":"{count} rows","data.card.running":"Running…","data.card.cancel":"Cancel","data.card.failed":"This query failed","data.card.line":"Line {line}","data.card.sql":"SQL","data.card.export":"Export","data.card.exportCsv":"CSV","data.card.exportParquet":"Parquet","data.card.exportXlsx":"Excel (XLSX)","data.card.exportPng":"Image (PNG)","data.card.copyMarkdown":"Copy page as Markdown","data.card.pin":"Pin","data.card.rowsTruncated":"{count} rows, cut at the limit","data.card.reduction":"Charted {output} of {input} rows, {method}","data.card.reduction.group":"grouped","data.card.reduction.bins":"in bins","data.card.reduction.topN":"top categories","data.card.reduction.timeBucket":"by time","data.card.reduction.m4":"downsampled","data.card.reduction.sample":"sampled","data.card.reduction.none":"as they are","data.card.exported":"Saved to {path}","data.card.exportFailed":"Export failed: {reason}","data.card.copied":"Copied","data.card.copyFailed":"Could not copy","data.grid.filter":"Filter rows","data.filter.button":"Filter","data.filter.searchColumns":"Search columns","data.filter.allColumns":"All columns","data.filter.chooseColumn":"Choose column","data.filter.contains":"Contains","data.filter.value":"Filter value","data.filter.clear":"Clear filter","data.filter.noColumns":"No matching columns","data.grid.count":"{count} rows · {columns} columns","data.grid.countFiltered":"{shown} of {total} rows · {columns} columns","data.grid.null":"null","data.grid.loadFailed":"Rows could not be loaded: {reason}","data.grid.label":"Rows of {name}","data.chart.loading":"Drawing chart…","data.chart.failed":"The chart could not be drawn: {reason}","data.editor.label":"SQL","data.editor.resize":"Resize SQL editor","computer.files.homeFolder":"Home folder","computer.files.changeDefaultFolder":"Change default","computer.files.pinnedFolderHint":"This chat keeps its current folder. Change the default for new chats.","widget.aria.card":"Card from your bot","widget.showAll":"Show all ({count})","widget.required":"{label} is required.","widget.sending":"Sending","widget.sent":"Sent","widget.sendFailed":"That did not send. Try again.","widget.choose":"Choose","widget.clear":"Clear {label}","widget.progress":"Progress","widget.chart.label":"Chart of {series} across {count} points","widget.time.choose":"Choose a time","widget.time.options":"Times for {label}","widget.days.everyDay":"Every day","widget.days.weekdays":"Weekdays","widget.days.weekends":"Weekends","widget.days.none":"No days picked","teamMemory.loadedSummary":"{loaded} of {total} accepted notes load automatically. Other notes remain searchable by the bots. Pin essential rules to load them first.","teamMemory.title":"{name} department memory","teamMemory.description":"People, places, decisions and terms every bot in this department shares. Every bot proposal waits for an admin's review before it is shared. Your own additions are shared immediately. Edit or remove anything.","teamMemory.close":"Close department memory","teamMemory.loading":"Loading department memory","teamMemory.waiting":"Waiting for you","bot.soul.placeholder":"Who this bot is and the rules it never breaks. Keep it short; put step-by-step procedure into a skill.","teamMemory.reload":"Reload latest","teamMemory.unsaved":"Your unsaved draft: {text}","teamMemory.loaded":"Loaded","teamMemory.searchable":"Searchable","teamMemory.history":"Previous versions","teamMemory.restore":"Restore text","teamMemory.pin":"Pin {name}","teamMemory.unpin":"Unpin {name}","teamMemory.kind.people":"People","teamMemory.kind.person":"Person","teamMemory.kind.peopleHint":"Who someone is and the names they go by","teamMemory.kind.places":"Places","teamMemory.kind.place":"Place","teamMemory.kind.placesHint":"Where a document or a thing lives","teamMemory.kind.decisions":"Decisions","teamMemory.kind.decision":"Decision","teamMemory.kind.decisionsHint":"What was decided, and where","teamMemory.kind.terms":"Terms","teamMemory.kind.term":"Term","teamMemory.kind.termsHint":"What an abbreviation or a nickname means","teamMemory.also":"also","teamMemory.source":"from {name}","teamMemory.sourceQuote":"source: “{quote}”","teamMemory.remember":"Remember","teamMemory.skip":"Skip","teamMemory.empty":"Nothing shared yet. Review what bots propose as they learn who is who and where things live, or add one yourself below.","teamMemory.you":"you","teamMemory.remove":"Remove {name}","teamMemory.kindLabel":"Kind","teamMemory.namePlaceholder":"Name","teamMemory.nameLabel":"Name","teamMemory.detailPlaceholder":"What every bot should know about it","teamMemory.detailLabel":"Detail","teamMemory.adding":"Adding…","teamMemory.add":"Add","teamMemory.addEntry":"Add an entry","apiInstances.title":"More servers","apiInstances.subtitle":"Add another OpenAI-compatible server with its own base URL and API key. Every bot can choose it.","apiInstances.name":"Display name","apiInstances.url":"Base URL","apiInstances.key":"API key","apiInstances.models":"Model IDs, separated by commas (optional)","apiInstances.modelsHint":"Leave the model IDs empty to detect them. If the model picker then shows only sample models, this server does not list its models: enter them here.","apiInstances.geminiPreset":"Fill in Google Gemini","apiInstances.geminiKeyHint":"Paste a Gemini API key from Google AI Studio (aistudio.google.com/apikey). Models are detected after you add it.","apiInstances.add":"Add server","apiInstances.adding":"Adding…","apiInstances.remove":"Remove {name}","apiInstances.refreshModels":"Detect models for {name} again","apiInstances.editModels":"Change model IDs for {name}","apiInstances.modelsFor":"Model IDs for {name}","apiInstances.editModelsHint":"Separate model IDs with commas or spaces. Leave empty to detect them from the server again.","apiInstances.modelsLimit":"Use at most {count} model IDs, each up to {length} characters.","apiInstances.empty":"No other servers yet.","apiInstances.failed":"Couldn't save the server. Check the fields and try again.","apiInstances.replyWaitFor":"How long to wait for {name} to reply","apiInstances.replyWaitHint":"How long to wait for the next words of a reply before giving up. Local models can take a while to answer on a slow computer.","apiInstances.replyWaitDefault":"Wait: default","apiInstances.replyWaitMinutes":"Wait {minutes} min","botOverview.loading":"Loading…","botOverview.refreshError":"Couldn’t refresh. Showing the last loaded overview.","botOverview.readAll":"Read all","botOverview.does":"Does","botOverview.doesEmpty":"Nothing scheduled or learned yet.","botOverview.canReach":"Can reach","botOverview.reachEmpty":"Nothing yet.","botOverview.wont":"Won’t","botOverview.recentChanges":"Recent changes","botOverview.viewAll":"View all","botOverview.recentEmpty":"Nothing changed recently.","botOverview.promptPreview":"Prompt preview","botOverview.promptPreviewCount":"Prompt preview · {bytes} bytes ≈ {tokens} tokens","botOverview.promptError":"Couldn’t load the prompt preview.","botOverview.bytes":"{count} bytes","botSettings.search":"Search","botSettings.searchAria":"Search settings","botSettings.searchNone":"Nothing matches “{query}”","botSettings.sections.skills":"Skills","botSettings.sections.memory":"Memory","botSettings.sections.routines":"Routines","botSettings.sections.access":"Access","botSettings.sections.model":"Model","botSettings.sections.permissions":"Permissions","botSettings.sections.voice":"Voice & alerts","botSettings.sections.history":"History","botSettings.sections.usage":"Usage","botOverview.setup.identity":"Give it a name and a role","botOverview.setup.soul":"Write its standing instructions","botOverview.setup.folder":"Choose a working folder","botOverview.setup.apps":"Connect the apps it needs","botOverview.setup.schedule":"Add a schedule or a trigger","botOverview.line.privateWorkspace":"Works in its own private folder.","botOverview.line.browser":"Has the built-in browser.","botOverview.line.noApps":"Has no connected apps.","botOverview.line.noSchedule":"Won't act on a schedule.","botOverview.line.computer":"Works on: {preference}.","botOverview.line.talksToAll":"Can talk to all {count} other bots, in any department.","botOverview.line.talksToOne":"Can talk to the other bot.","botOverview.line.talksToChosen":"Talks only to the bots chosen for it.","botOverview.line.alsoInCharge":"Also in charge of these departments: {departments}.","botOverview.preference.auto":"Auto; availability is checked when a task starts","botOverview.preference.cloud":"cloud desktop","botOverview.preference.vm":"private desktop","botOverview.preference.local":"this computer","botOverview.preference.browser":"browser only","botIdentity.faceColor":"Facial features","botIdentity.faceColor.white":"White","botIdentity.faceColor.black":"Black","botIdentity.faceColor.default":"Body default","botIdentity.avatar":"Avatar","botIdentity.resetMascot":"Reset mascot","botIdentity.uploadImage":"Upload image","botIdentity.removeAvatar":"Remove custom avatar image","botIdentity.removeImage":"Remove custom image","botIdentity.imageTypes":"PNG, JPEG, GIF, or WebP · up to 10 MB","botIdentity.shape":"Shape","botIdentity.expression":"Expression","botIdentity.color":"Color","mascotColor.green":"Green","mascotColor.blue":"Blue","mascotColor.red":"Red","mascotColor.orange":"Orange","mascotColor.purple":"Purple","mascotColor.cyan":"Cyan","mascotColor.pink":"Pink","mascotColor.yellow":"Yellow","mascotColor.teal":"Teal","mascotColor.coral":"Coral","mascotColor.silver":"Silver","mascotColor.chrome":"Chrome","defaultBot.hide":"Hide from sidebar","defaultBot.hideHint":"It keeps working. Show it again in Settings → General.","defaultBot.hidden":"{name} is off the sidebar. Show it again in Settings → General.","defaultBot.show.title":"Show {name} in the sidebar","defaultBot.show.subtitle":"Your helper for everything in the app. Hidden, it keeps working and search still finds it.","teamMove.blockedDefault":"{name} stays here: everyone on a team gets their own","helperIntro.hi.helper":"Hi! I'm {name}, your helper for everything here.","helperIntro.hi.helperNamed":"Hi {person}! I'm {name}, your helper for everything here.","helperIntro.lead.helper":"Ask me how to do anything here. I can set up bots, apps and routines with you, and keep an eye on your day.","helperIntro.lead.member":"Ask me how to do anything here. I can set up bots, apps and routines with you.","helperIntro.typing":"Typing…","helperIntro.hello":"Hey! I'm {name}. I'm new here.","helperIntro.lead.chiefOfStaff":"I'm here to be your Chief of Staff. I can manage your other bots. Task me with anything. I'll make sure it gets to the right bot.","helperIntro.lookingAround":"I'm taking a look around to see if there's anything I can pick up for you. I'll follow up in a moment.","helperIntro.followup.found":"I looked around and nothing's waiting on you yet.","helperIntro.followup.empty":"There's no unfinished work, no other bots or routines, and no apps are connected so far.","helperIntro.followup.counts":"You have {bots} and {routines}, and no apps are connected so far.","helperIntro.followup.botsNone":"no other bots","helperIntro.followup.botOne":"1 other bot","helperIntro.followup.bots":"{count} other bots","helperIntro.followup.routinesNone":"no routines","helperIntro.followup.routineOne":"1 routine","helperIntro.followup.routines":"{count} routines","helperIntro.followup.offer":"If you'd like me to keep an eye on your day, I can connect your email and calendar so I can flag what matters each morning. Just say the word, or hand me whatever's on your plate today.","helperIntro.followup.apps":"I can already use {apps}. Hand me whatever's on your plate today, or ask me to set up a bot for something you do every week.","helperIntro.followup.more":"{count} more","helperIntro.followup.noAi":"I looked around. Before I can do real work, I need an AI to think with. Sign in with an account you already have, like Claude or ChatGPT, and I'll take it from there.","helperIntro.followup.backup":"I looked around. For now I'm thinking with a free backup model. Sign in with an account you already have, like Claude or ChatGPT, and I'll take it from there.","helperIntro.followup.noAiOwner":"I looked around. Before I can do real work, I need an AI to think with. {name} connects that for the team, and I'll take it from there.","helperIntro.followup.noAiTeamOwner":"I looked around. Before I can do real work, I need an AI to think with. The team's owner connects that, and I'll take it from there.","helperIntro.followup.backupOwner":"I looked around. For now I'm thinking with a free backup model. {name} can connect a better one for the team.","helperIntro.followup.backupTeamOwner":"I looked around. For now I'm thinking with a free backup model. The team's owner can connect a better one.","helperIntro.chip.ai":"Connect an AI","helperIntro.chip.mail":"Connect email & calendar","helperIntro.chip.skills":"Bring in my skills","helperIntro.chip.phone":"Connect your phone","helperIntro.chip.cloud":"Try Cloud","helperIntro.team":"On {team}, I'm here for you and look after your own bots.","helperIntro.title":"Hi, I'm {name}, your helper for everything here.","helperIntro.body":"I know this app inside out, so ask me how to do anything. I can set up new bots, apps and routines with you, and tell you what your bots are up to.","helperIntro.chief":"As your Chief of Staff, I also keep an eye on your day and send you a short brief.","helperIntro.watch":"I also keep an eye on your day and send you a short brief.","helperIntro.try":"Try one of these, or just say what you need.","helperIntro.step.ai":"Connect an AI","helperIntro.step.bots":"Add your first bots","helperIntro.step.apps":"Connect apps like Gmail or Slack","helperIntro.step.phone":"Connect your phone","helperIntro.step.cloud":"Try Limix Bot Cloud","helperIntro.asks":"Things to ask","helperIntro.dismiss":"Hide these suggestions","helperIntro.ask.overview":"What are my bots up to?","helperIntro.ask.inbox":"Set up a bot for my inbox","helperIntro.ask.routine":"Make me a morning routine","helperIntro.ask.howto":"How do I connect my email?","helperIntro.setup":"A few things left to set up, all optional:","mausbotWelcome.title":"Meet {name}","mausbotWelcome.line.helper":"Your helper for everything in the app.","mausbotWelcome.line.knows":"Knows the app, so ask it how to do anything.","mausbotWelcome.line.setup":"Sets up bots, apps and routines for you.","mausbotWelcome.line.powers":"Has a Chief of Staff's powers over your bots.","mausbotWelcome.look":"Look","mausbotWelcome.generate":"Generate a picture with AI","mausbotWelcome.customize":"Customize {name}","mausbotWelcome.upload":"Upload a picture","mausbotWelcome.removePicture":"Remove picture","mausbotWelcome.add":"Add {name}","mausbotWelcome.notNow":"Not now","mausbotWelcome.notNowHint":"{name} stays off the sidebar. Turn it on any time in Settings → General.","botIdentity.body":"Body","botIdentity.crop.mascot":"Mascot","botIdentity.crop.circle":"Circle","botIdentity.crop.rounded":"Rounded","botIdentity.crop.square":"Square","botIdentity.ai.generateWith":"Generate with AI","botIdentity.ai.generating":"Generating…","botIdentity.ai.generate":"Generate avatar","botIdentity.ai.directionPlaceholder":"Optional direction, e.g. “a calm navigator inspired by {name}”","botIdentity.ai.directionLabel":"Avatar generation direction","botIdentity.soul.label":"Standing instructions (SOUL.md)","botIdentity.soul.moveToFile":"Move instructions into SOUL.md","botIdentity.soul.externalEdit":"SOUL.md on disk was edited outside the app.","botIdentity.soul.externalEditHelp":"The bot keeps using the saved version until you choose.","botIdentity.soul.fileLabel":"File:","botIdentity.soul.useFile":"Use the file","botIdentity.soul.keepSaved":"Keep the saved version","botIdentity.soul.contextHelp":"In this bot’s context on every turn.","botIdentity.soul.mirroredTo":"Mirrored to","botIdentity.dialog.title":"Bot instructions","botIdentity.dialog.close":"Close bot instructions","botIdentity.dialog.empty":"No instructions yet","botIdentity.dialog.emptyHelp":"Add them from this bot’s profile.","botIdentity.dialog.contextHelp":"Included in this bot’s context on every turn.","common.done":"Done","skills.learned.title":"Learned skills","skills.library.addLabel":"Add a skill from the library","skills.library.addPlaceholder":"Add a skill from the library…","skills.library.allAssigned":"Every skill in the library is already assigned to this bot.","skills.library.manageHint":"Import and manage library skills in Settings → Skills.","skills.import.placeholder":"owner/repo, https://github.com/…/SKILL.md, or https://skills.sh/…","skills.import.label":"Import a skill","skills.import.importing":"Importing…","skills.import.button":"Import","skills.import.arrived":"Imported {name}: {what}.","skills.import.files.one":"1 file","skills.import.files.other":"{count} files","skills.import.scripts.one":"1 script","skills.import.scripts.other":"{count} scripts","skills.import.leftOut":"Left out: {list}.","skills.import.leftOutItem":"{path} ({reason})","skills.import.leftOutMore":"{count} more","skills.import.reviewBelow":"Review each one and turn it on below.","skills.import.reason.link":"a link","skills.import.reason.submodule":"another repository","skills.import.reason.hidden":"hidden","skills.import.reason.generated":"a cache","skills.import.reason.name":"a name some computers can't use","skills.import.reason.duplicate":"same name as another file","skills.import.reason.deep":"too deep in folders","skills.import.reason.large":"over 2 MB","skills.import.reason.full":"past the folder's limit","skills.import.reason.lfs":"kept in GitHub's large-file storage","skills.import.reason.unlisted":"GitHub didn't list the folder, so only the main file came in","skills.loading":"Loading…","skills.empty":"No installed skills yet.","memory.title":"Memory","memory.enable":"Let this bot use memory","memory.enableHelp":"Off stops memory prompts, recall, native memory tools, upkeep, and automatic turn logs. Existing files remain available for review.","memory.notesHelp":"Notes this bot keeps between tasks. They are plain markdown files in a folder on this computer. Open them in any editor, or in Obsidian.","memory.backToIndex":"Back to MEMORY.md","memory.logsReadOnly":"Daily logs are the bot's own record of what it did; they are not loaded into conversations and are read-only here.","memory.discard":"Discard changes","memory.unsavedDraft":"Your unsaved draft, kept so nothing is lost:","memory.dismissDraft":"Dismiss draft","memory.topicFiles":"Topic files","memory.dailyLogs":"Daily logs","memory.changes":"Changes","memory.changesHelp":"Every change to these files, whoever made it. Undo puts a file back the way it was before that change.","memory.loading":"Loading…","memory.noChanges":"No changes recorded yet.","memory.noneYet":"None yet.","memory.delete":"Delete","memory.confirmDelete":"Delete {name}?","memory.undoing":"Undoing…","memory.undo":"Undo","memory.cantUndo":"Can't undo","memory.upkeep.help":"Keeps these notes in shape without the bot having to remember: notices facts you mention in chats and files them (core facts here, detail in topic files it creates) and tidies up every night: expired notes are archived, duplicates merged, contradicted notes crossed out. Facts about you are added to About me (Settings → General), where every bot reads them and you can remove any. Every change shows below and can be undone.","memory.upkeep.lastTidy":"Last tidy-up {time}: {summary}.","memory.source.undo":"undone","memory.source.disk":"changed outside the app","memory.source.tidy":"tidied up","memory.source.organize":"filed into topics","memory.source.capture":"noticed in a chat","memory.source.captureWithTitle":"noticed in chat “{title}”","memory.source.chat":"from chat “{title}”","memory.source.task":"during a task","memory.source.settings":"in Settings","memory.source.api":"through the API","memory.journal.actor.you":"You","memory.journal.actor.import":"An import","memory.journal.actor.upkeep":"Memory upkeep","memory.journal.actor.teamSetup":"Team setup","memory.journal.log":"the {file} log","memory.journal.topic":"the {file} topic","memory.journal.instructions":"the instructions","memory.journal.line.one":"1 line","memory.journal.line.many":"{count} lines","memory.journal.withLines":" with {lines}","memory.journal.created":"{who} created {topic}{detail}","memory.journal.deleted":"{who} deleted {topic}","memory.journal.added":"{who} added {lines} to {topic}","memory.journal.removed":"{who} removed {lines} from {topic}","memory.journal.rewrote":"{who} rewrote {lines} in {topic}","memory.upkeep.summary.none":"Nothing to tidy","memory.upkeep.summary.archived.one":"archived {count} expired note","memory.upkeep.summary.archived.many":"archived {count} expired notes","memory.upkeep.summary.merged.one":"merged {count} duplicate","memory.upkeep.summary.merged.many":"merged {count} duplicates","memory.upkeep.summary.crossed.one":"crossed out {count} contradicted note","memory.upkeep.summary.crossed.many":"crossed out {count} contradicted notes","memory.upkeep.summary.filed.one":"filed {count} note into topics","memory.upkeep.summary.filed.many":"filed {count} notes into topics","memory.upkeep.lastNoticed.one":"Last noticed {count} fact {time}.","memory.upkeep.lastNoticed.many":"Last noticed {count} facts {time}.","memory.conflict.title":"{name} changed this file while you were editing.","memory.conflict.help":"Nothing has been saved. Reload to see {name}'s version, or overwrite it with yours.","memory.reload":"Reload","memory.overwrite":"Overwrite with mine","memory.showChanged":"show what changed","memory.deleteFile":"Delete {name}","memory.fileLabel":"Memory file {path}","memory.topicNameError":"Give the topic a name using letters, numbers, spaces, dots or dashes.","memory.restored":"Put {path} back the way it was.","memory.busyHelp":"Stop this bot's turn before changing this setting.","memory.indexPlaceholder":"Nothing remembered yet. The bot writes durable notes here, or add your own.","memory.notePlaceholder":"Write the note here.","memory.botMemory":"Bot memory","memory.saving":"Saving…","memory.save":"Save","memory.topicFilesHint":"Longer notes the bot reads on demand. Click one to edit it.","memory.newTopicPlaceholder":"New topic name, e.g. clients","memory.newTopicLabel":"New topic name","memory.newTopic":"New topic","memory.dailyLogsHint":"What the bot did each day, in its own words. Not loaded into conversations.","memory.upkeep.title":"Memory upkeep","memory.upkeep.tidying":"Tidying…","memory.upkeep.tidyNow":"Tidy up now","memory.upkeep.notTidied":"Not tidied yet.","memory.capacity.title":"How much of MEMORY.md loads","memory.capacity.lines":"Lines","memory.capacity.size":"Size","memory.capacity.used":"{label} used","memory.openObsidian":"Open in Obsidian","memory.showFileManager":"Show in file manager","memory.capacity.sentence":"{lines} of {maxLines} lines · {bytes} of {maxBytes}. Only the first {maxLoaded} lines load each turn.","activity.panel.aria":"{name} activity","activity.panel.title":"Activity","activity.panel.reload":"Reload activity","activity.panel.close":"Close activity","activity.panel.subtitle":"Every tool {name} used and every approval it asked for, newest first.","activity.panel.error":"Couldn't load: {message}","activity.panel.empty":"Nothing yet. Once {name} runs a tool or asks for an approval, it shows up here.","activity.panel.loading":"Loading…","activity.panel.openOtherTask":"{tool} (in another task, click to open it)","templates.title":"Templates","readyBots.title":"Ready-made bots","readyBots.subtitle":"Add one and start chatting. You review everything before it's created.","readyBots.categories":"Bot categories","readyBots.all":"All","readyBots.category.everyday":"Everyday","readyBots.category.work":"Work","readyBots.category.writing":"Writing","readyBots.category.design":"Design","readyBots.category.sales":"Sales","readyBots.category.personal":"Personal","readyBots.add":"Add","readyBots.addAria":"Add {name}, {title}","readyBots.try":"Try: “{prompt}”","readyBots.worksWith":"Works with {apps}","readyBots.pausedRoutine":"Includes a paused routine","templates.subtitle":"Start with a complete playbook or bring your own.","templates.back":"Back to templates","templates.close":"Close templates","templates.openRepository":"Open the community templates repository","templates.communityRepo":"Community repo","templates.backupNotes":"Backup notes","templates.leads":"{name} leads","templates.groupChats":"{count} group chat(s)","templates.playbooks":"{count} playbook(s)","templates.backupSummary":"{bots} bot(s) · {conversations} conversation(s) · portable backup","templates.playbookSummary":"{count} bots · portable Markdown playbook","templates.readyBots":"{count} ready-to-load bots","templates.archivedBots":"{count} archived bot(s) will remain archived.","templates.backupSafety":"Files, images, custom avatars, account connections, model settings and permissions are not included. Action cards are saved as text. Memory is saved with secrets removed. Imported routines start paused. {archived}","templates.packageSafety":"Bots, Chief of Staff, group chats, and reviewed playbooks are loaded. Suggested routines arrive paused, and connected apps stay off until you approve them. Conversations, credentials, permissions, and computer access stay private.","templates.legacySafety":"Only roles and appearance are loaded. Your conversations, account connections, permissions, and computer access stay private.","templates.communityBot":"Community bot","templates.fileTooLarge":"That file exceeds the 50 MB import limit.","templates.botCount":"{count} bot(s)","templates.playbookCount":"{count} playbook(s)","templates.minutes":"~{count} min","templates.catalog.seoGrowth.name":"SEO Growth Team","templates.catalog.seoGrowth.summary":"Find and prioritize the search work most likely to grow qualified traffic.","templates.catalog.seoGrowth.outcome":"Find and prioritize the search work most likely to grow qualified traffic.","templates.catalog.engineering.name":"Engineering Team","templates.catalog.engineering.summary":"Take a software change from product intent to a verified release decision.","templates.catalog.engineering.outcome":"Take a software change from product intent to a verified release decision.","templates.catalog.marketing100x.name":"100x Marketing Team","templates.catalog.marketing100x.summary":"Launch one focused campaign and make an evidence-based stop-or-scale decision.","templates.catalog.marketing100x.outcome":"Launch one focused campaign and make an evidence-based stop-or-scale decision.","templates.catalog.redditLeadMiner.name":"Reddit Lead Miner","templates.catalog.redditLeadMiner.summary":"Surface qualified Reddit leads with evidence and a useful next step each morning.","templates.catalog.redditLeadMiner.outcome":"Surface qualified Reddit leads with evidence and a useful next step each morning.","templates.catalog.competitorWatch.name":"Competitor Watch","templates.catalog.competitorWatch.summary":"Know which competitor moves deserve a response and which should be ignored.","templates.catalog.competitorWatch.outcome":"Know which competitor moves deserve a response and which should be ignored.","templates.catalog.inboxFollowup.name":"Inbox Follow-up","templates.catalog.inboxFollowup.summary":"Recover conversations where your team owes the next step without sending automatically.","templates.catalog.inboxFollowup.outcome":"Recover conversations where your team owes the next step without sending automatically.","templates.pausedRoutines":"{count} paused routine(s)","templates.connections":"{count} connections","templates.skillsDisabled":"Included skills (disabled on import)","templates.skillsReview":"Review each skill in its bot profile before enabling it. Imported instructions do not run automatically.","templates.teamMembers":"Team members","templates.newCopyOf":"New copy of {name}","templates.generalAssistant":"General assistant","templates.existingNone":"Your existing conversations stay unchanged.","templates.existingOne":"Your existing bot and its conversations stay unchanged.","templates.existingMany":"Your {count} existing bots and their conversations stay unchanged.","templates.importing":"Importing…","templates.importBackup":"Import backup","templates.addTeam":"Add team","templates.source":"Template source","templates.explore":"Explore","templates.import":"Import","templates.fromFolder":"From a folder","templates.search":"Search templates","templates.searchResults":"Search results","templates.communityTemplates":"Community templates","templates.loading":"Loading templates…","templates.loadingShort":"Loading","templates.load":"Load","templates.noneFound":"No templates found","templates.tryDifferentSearch":"Try a different search.","templates.bringYourOwn":"Bring your own team","templates.chooseFile":"Choose a backup or team file","templates.dropFile":"Drop a .mausbackup.json, BotMRR .md or legacy .mausteam.json here. You’ll preview it before anything is added.","templates.loadGithub":"Load from GitHub","templates.githubHint":"Paste a public repo or a direct team JSON link.","templates.githubPlaceholder":"github.com/owner/repo","templates.githubUrl":"GitHub team URL","templates.startFolder":"Start from a project folder","templates.scoutHint":"Point the scout at a folder. It reads what’s in there (README, dependencies, layout) and suggests a team for it. Nothing is created until you say so.","templates.projectFolder":"Project folder to scout","templates.browse":"Browse","templates.scouting":"Scouting…","templates.scout":"Scout","templates.suggestedTeam":"Suggested team","templates.communityDirectory":"From the community directory. Tick to add.","templates.matches":"Matches {values}","templates.openDirectory":"Open {name} on botdirectory.ai","templates.readBeforeAdding":"Read this bot’s page before adding it","templates.groupChatName":"Group chat name","templates.creating":"Creating…","templates.createGroupChat":"Create group chat","templates.createGroupHint":"Creates the team as new bots, opens a group chat for them, and points its working folder here.","common.tryAgain":"Try again","app.loading.noBots":"No bots yet","app.loading.connecting":"Connecting to your bots…","app.loading.updating":"Updating My Cloud…","app.loading.startServer":"Start it with","history.loading":"Loading…","history.empty":"No changes recorded yet.","history.refreshError":"Couldn’t refresh history.","history.undo":"Undo this change","history.restoreUnavailable":"The exact previous instructions are unavailable, so this change cannot be undone.","homeScreen.openingNamed":"Opening {name}…","homeScreen.offlineNamed":"Can't reach {name} right now.","homeScreen.signInNamed":"Sign in to open {name}","homeScreen.planNamed":"{name} isn't running","homeScreen.setupNamed":"Setting up {name}…","homeLine.left":"You're no longer in {name}.","homeLine.clean":"Your bots are in the Cloud. Sign in to get them.","homeLine.cleanSaved":"Your bots are in your other account's Cloud. Click its icon on the left of the app to get them.","homeLine.profile":"{name} starts fresh, separate from My Cloud. The bots you had here are on My Cloud; to bring in an older copy, import its backup in Settings → Backups.","homeLine.local":"{name} starts fresh: a separate place on this computer, with its own bots, chats and files.","teamMove.menu":"Move to {team}","teamMove.title":"Move {bot} to {team}?","teamMove.everyone":"Everyone in {team} can use {bot}. Only {team}'s admins can change it.","teamMove.goes":"Goes with {bot}: instructions, skills, files, routines, and your chats with {bot}","teamMove.private":"Your chats stay private there: only you can see them.","teamMove.staysOnMyCloud":"Stays on My Cloud: what {bot} remembers, your connections, and Limix Bot","teamMove.noWayBack":"There's no way back: you can't move it back to My Cloud.","teamMove.confirm":"Move to {team}","teamMove.moving":"Moving {bot} to {team}…","teamMove.done":"{bot} is in {team} now, with your chats.","teamMove.open":"Open {bot} in {team}","teamMove.failed":"Couldn't move {bot}. It's still here, unchanged.","teamMove.pointer":"{bot} moved to {team}","teamMove.blockedChief":"Your Chief of Staff stays on My Cloud","teamMove.blockedLast":"Keep at least one bot on My Cloud","homeScreen.opening":"Opening My Cloud…","homeScreen.waking":"Waking My Cloud…","homeScreen.moving":"Moving to My Cloud… almost done","homeScreen.movingNamed":"Moving to {name}… almost done","homeScreen.setup":"Setting up My Cloud…","homeScreen.setupBody":"This takes about a minute. It opens by itself when it's ready.","homeScreen.offline":"Can't reach My Cloud right now.","homeScreen.offlineBack":"It comes back by itself when it answers.","homeScreen.signIn":"Sign in to open My Cloud","homeScreen.signInEnded":"This computer's sign-in to Limix Bot Cloud has ended. Your bots and chats are safe on My Cloud.","homeScreen.signInOther":"This computer is signed in to Limix Bot Cloud with another account. Sign in with the account My Cloud belongs to.","homeScreen.signInButton":"Sign in","homeScreen.plan":"My Cloud isn't running","app.aria.row":"App: {title}","app.origin.page":"Page made by {bot}","app.origin.mcp":"App from {server}","app.info":"About this app","app.info.sandbox":"It runs in a locked frame: it cannot see the rest of the app, your other chats or your files.","app.info.loads":"Loads files from","app.info.connects":"Connects to","app.info.refused":"Asked for, refused","app.info.nothing":"Nothing","app.info.size":"Size","app.info.off":"Always off","app.info.offList":"Camera, microphone, location, clipboard, pop-ups and downloads","app.reload":"Reload app","page.broken.title":"This page hit an error.","page.broken.body":"Reload to carry on where you were.","page.broken.reload":"Reload","app.open":"Open app","app.openAgain":"Open again","app.done":"Done: {tool}","app.doneOpen":"Open","app.loading":"Opening the app","app.strip.signIn":"Sign in to {server} again","app.strip.signInAction":"Sign in","app.strip.offline":"Reconnect to use this app","app.strip.retry":"Try again","app.sentFrom":"Sent from {title}","mcp.apps.title":"Show its apps in chat","mcp.apps.desc":"When one of its tools has an app, the app opens in the chat.","mcp.apps.toggleAria":"Show apps from {name} in chat","teamWelcome.title":"Welcome to {team}","teamWelcome.invited":"{person} invited you to {team}.","teamWelcome.invitedNobody":"You’re in {team} now.","teamWelcome.people":"Who’s in {team}","teamWelcome.more":"and {count} more","teamWelcome.bots":"Bots shared with you","teamWelcome.moreBots":"and {count} more in the sidebar","teamWelcome.noBots":"No bots are shared with you in {team} yet. Your own Limix Bot is in the sidebar.","teamWelcome.start":"Start a chat with {bot}","teamWelcome.look":"Look around","teamWelcome.later":"Not now","team.privateChats":"Your chats in {team} are private. Only you can see them: not other members, not {team}'s admins.","team.privateHeader":"Private · only you","team.sharedHeader":"Shared · everyone in {team} can see","team.sharedHeaderPeople":"Shared · only people added and admins can see","liveConnection.reconnecting":"Reconnecting… New replies show up once the connection is back.","liveConnection.help":"Still unable to connect. Check your connection, sign-in, and any ad or tracker blocker for this site, then retry.","liveConnection.retry":"Try again","liveConnection.offline":"You're offline. New replies show up once you're back online.","team.ownHelperHeader":"Own helper · other members can't see it","teamSide.label":"Whose chats to show","teamSide.me":"Just me","teamSide.team":"Team","teamSide.hint":"Just me is private, even from admins. Team is shared.","teamSide.groupAudience":"Shared · everyone in this group chat can see","chat.page.usage":"{pages} of {limit} pages","chat.page.copyLink":"Copy link","chat.page.copied":"Copied","chat.page.open":"Open","chat.page.unpublish":"Unpublish","chat.page.unpublished":"Unpublished. The link no longer opens.","chat.page.uncertain":"This page may be live. Unpublish it to remove it.","chat.page.unpublishFailed":"Couldn’t unpublish this page. Try again in a moment.","chat.page.freeLimit":"You’ve used your {limit} free pages. Limix Bot Cloud gives you more, and pages without the badge.","chat.page.planLimit":"You’ve used all {limit} pages on your {plan} plan. Unpublish a page to make room.","chat.page.morePages":"Get more pages","chat.preview.older":"Earlier version","chat.preview.newer":"Later version","chat.preview.version":"v{n}","chat.preview.versionOf":"v{n} of {count}","chat.preview.latest":"Back to the latest","chat.preview.updated":"Updated","chat.preview.point":"Point","chat.preview.pointHint":"Click the part of the page you want changed. Press Esc to stop.","chat.preview.share":"Share","chat.preview.pin":"Pin to sidebar","chat.preview.unpin":"Unpin","chat.preview.pinHint":"Keep this page one click away in the sidebar","chat.preview.unpinHint":"Remove this page from the sidebar","chat.preview.pinFull":"You've pinned the maximum of {max} pages. Remove one in Settings to pin this one.","chat.preview.republish":"Update link","chat.preview.published":"Published","chat.preview.updatedLink":"Updated at the same link","chat.preview.publishFailed":"Couldn’t publish this page. Try again in a moment.","chat.preview.openTab":"Open in new tab","chat.preview.save":"Save to device","chat.preview.saveFailed":"Couldn't save the page.","serverError.page.downloadHasFiles":"This page has files beside it, so it can't be saved as one file. Share it for a link instead.","chat.preview.openTabNeedsLink":"Share the page to open it in a new tab","chat.preview.fullScreen":"Full screen","chat.preview.exitFullScreen":"Close full screen","chat.preview.openPage":"Open page","chat.preview.closePage":"Close page","chat.preview.pointedPart":"a part of the page","chat.preview.removePoint":"Remove {label}","chat.preview.pointedAt":"Pointed at {parts}","chat.helperSuggestion.text":"Want me to sort your email for free? Add a Cloudflare Workers AI key (free tier) or a Jev key.","chat.helperSuggestion.addKey":"Add key","chat.helperSuggestion.notNow":"Not now","chat.helperSuggestion.declined":"Okay, I won't ask again.","chat.activity.publishPage":"Publishing a page","sidebar.room.descriptionPlaceholder":"Short description (optional)","sidebar.room.descriptionAria":"Set description for {name}","sidebar.room.saveDescription":"Save description","sidebar.room.setDescription":"Set description","usageMeter.title":"Limix Bot Cloud usage","usageMeter.subtitle":"What your {plan} plan includes this month, and how much you've used.","usageMeter.empty":"Nothing to show yet. Your plan's allowances appear here once the Cloud is ready.","usageMeter.resets":"Resets on {date}.","usageMeter.trialFull":"Your full allowance starts on {date}.","usageMeter.kind.computerHours":"Cloud desktop hours","usageMeter.kind.voice":"Voice replies","usageMeter.kind.decisions":"Decisions","usageMeter.kind.x":"X research","usageMeter.kind.research":"Research","usageMeter.kind.storage":"Storage","usageMeter.amount.hours":"{used} of {max} hours","usageMeter.amount.characters":"{used} of {max} characters","usageMeter.amount.decisions":"{used} of {max}","usageMeter.amount.calls":"{used} of {max} calls","usageMeter.amount.dollars":"{used} of {max}","usageMeter.amount.gb":"{used} of {max} GB","usageMeter.upgrade":"Upgrade","usageMeter.upgradeToShort":"Upgrade to {plan}","usageMeter.upgradeTo":"Upgrade to {plan} · {price}/month","usageMeter.topPlan":"You're on the top plan.","usageMeter.teamPlan":"To change your team's plan, write to us.","usageMeter.card.near":"You're close to your plan's limit","usageMeter.card.full":"You've reached your plan's limit","usageMeter.card.hide":"Hide for now","usageMeter.card.seeAll":"See all usage","usageMeter.confirm.title":"Upgrade to {plan}?","usageMeter.confirm.action":"Upgrade to {plan}","usageMeter.confirm.cancel":"Not now","usageMeter.confirm.paid":"{plan} is {price} a month and starts right away.","usageMeter.confirm.today":"Today you pay {amount}, the difference for the rest of this billing month.","usageMeter.confirm.todayTax":"Today you pay {amount} with tax, the difference for the rest of this billing month.","usageMeter.confirm.next":"From {date} it's {price} a month, plus any tax.","usageMeter.confirm.trial.one":"Your free trial moves to {plan} now. Your first payment on {date} will be {price}, plus any tax.","usageMeter.confirm.trial.many":"Your free trial moves to {plan} now, and nothing is charged today. Your first payment on {date} will be {price}, plus any tax.","usageMeter.confirm.trialNoDate.one":"Your free trial moves to {plan} now. When it ends, {plan} is {price} a month, plus any tax.","usageMeter.confirm.trialNoDate.many":"Your free trial moves to {plan} now, and nothing is charged today. When it ends, {plan} is {price} a month, plus any tax.","usageMeter.done":"You're on {plan} now. Your new allowances are ready.","usageMeter.pending":"Your upgrade is going through. This can take a minute.","usageMeter.unconfirmed":"We couldn't confirm your upgrade yet. Check back in a minute before trying again.","usageMeter.browser":"Your Plan page opened in your browser. You can change your plan there.","usageMeter.err.paymentFailed":"Your payment didn't go through, so your plan hasn't changed. Update your card on your Plan page, then try again.","usageMeter.err.notSubscribed":"You don't have a Cloud plan to change yet.","usageMeter.err.alreadyOnPlan":"You're already on that plan.","usageMeter.err.unavailable":"Your plan can't be changed from the app right now. Nothing was charged. Open your Plan page to see your options.","usageMeter.err.priceChanged":"The price changed since you looked, so nothing was charged. Choose Upgrade to see the new price.","usageMeter.err.rateLimited":"Too many tries. Wait a few minutes, then try again.","usageMeter.err.failed":"We couldn't change your plan. Nothing was charged. Try again in a minute.","roomCard.title.memory":"This Cloud is short on room","roomCard.title.disk":"This Cloud is almost out of space","roomCard.tasks.one":"1 task","roomCard.tasks.many":"{count} tasks","roomCard.minutes.one":"1 minute","roomCard.minutes.many":"{count} minutes","roomCard.cause.waited":"{tasks} waited {minutes} for memory today.","roomCard.cause.waitedBriefly":"{tasks} had to wait for memory today.","roomCard.cause.stopped.one":"1 task was stopped today to keep everything else running.","roomCard.cause.stopped.many":"{count} tasks were stopped today to keep everything else running.","roomCard.cause.disk":"{used} GB of {cap} GB used.","roomCard.offer.memoryTwice":"{plan} has twice the memory.","roomCard.offer.memoryTimes":"{plan} has {times} times the memory.","roomCard.offer.memoryMore":"{plan} has {gb} GB of memory.","roomCard.offer.disk":"{plan} has room for {gb} GB.","roomCard.price":"{price} a month. Today you pay only for the rest of this month.","roomCard.priceTrial.one":"{price} a month once your trial ends.","roomCard.priceTrial.many":"{price} a month once your trial ends. Nothing is charged today.","roomCard.tip.memory":"You're on the biggest plan. To give it more room, run fewer bots at once and close browsers you're not using.","roomCard.tip.disk":"You're on the biggest plan. To free up space, delete files and folders you no longer need.","roomCard.upgrade":"Upgrade","roomCard.notNow":"Not now","roomCard.gotIt":"Got it","roomCard.done":"You're on {plan} now. This Cloud gets its new size the next time it's not busy.","botLimit.title":"You've reached Starter's {count} bots","botLimit.titleTooMany":"That's more bots than Starter has room for","botLimit.body":"To create more, upgrade this Cloud. Every bot you have stays as it is.","botLimit.bodyElsewhere":"To create more, upgrade this Cloud on its Plan page. Every bot you have stays as it is.","botLimit.openPlan":"Open the Plan page","botLimit.tasks.title":"Starter runs {count} tasks at once","botLimit.tasks.body":"Your bots tried to hand out more work than this Cloud holds, so some of it wasn't started. Upgrade to run more at once.","botLimit.paused.title":"Starter keeps {count} bots awake","botLimit.paused.body":"The others are paused, with everything they know kept. Choose which {count} stay awake, or upgrade to wake them all.","botLimit.paused.keep":"Keep these awake","botLimit.paused.chosen":"{chosen} of {count} chosen","botLimit.paused.badge":"Paused","botLimit.paused.saveFailed":"Couldn't save that. Try again.","botLimit.paused.chooseAction":"Choose awake bots ({count} paused)","botLimit.created.title":"Created {name}, paused for now","botLimit.created.body":"Starter keeps {count} bots awake, so this one is paused. Choose which {count} stay awake, or upgrade to wake them all.","roomCard.restartNow":"Restart now","roomCard.restartHint":"Takes about a minute, and stops anything running now.","roomCard.restarting":"Restarting this Cloud with its new size. It's back in about a minute.","roomCard.current":"This Cloud already has its new size.","roomCard.restartFailed":"Couldn't restart it now. It gets its new size the next time it's not busy.","chat.savedSteps.learned":"Saved these steps · next time no AI","chat.savedSteps.replayed":"Repeated saved steps · no AI","chat.savedSteps.forget":"Forget","chat.savedSteps.forgotten":"Forgotten","chat.savedSteps.forgetFailed":"Couldn't forget these steps. Try again.","chat.setupCard.title":"What should I help you with first?","chat.setupCard.hint":"{name} sets itself up for whichever you choose, or type your own below.","chat.setupCard.heading":"Pick a starting point","chat.setupCard.other":"Something else","chat.setupCard.answer":"Your answer","chat.setupCard.research":"Research and digging into topics","chat.setupCard.watch":"Keeping an eye on things for me","chat.setupCard.inbox":"Email, calendar and messages","chat.setupCard.errands":"Bookings, shopping and errands","chat.setupCard.data":"Data, spreadsheets and reports","composer.setupRequest.placeholder":"Tell {name} what you'd like help with","composer.setupRequest.waiting":"{name} is ready to be set up","composer.setupRequest.cancel":"Stop setting up {name}","keys.section.ai":"AI providers","keys.section.ai.purpose":"Keys for the models your bots run on.","keys.section.servers":"Your own model servers","keys.section.servers.purpose":"LM Studio and servers that speak the OpenAI API.","keys.section.voice":"Voice and calls","keys.section.voice.purpose":"Voices for spoken replies and live calls.","keys.section.computers":"Computers and browser","keys.section.computers.purpose":"Cloud desktops, your own server and website logins.","keys.section.apps":"Apps and tools","keys.section.apps.purpose":"Connected apps and research.","keys.section.helpers":"Helpers and pictures","keys.section.helpers.purpose":"Small models that sort things for your bots, and avatar pictures.","keys.section.connected":"{count} connected","keys.purpose.openai":"OpenAI's models and live calls","keys.purpose.anthropic":"Claude models, billed per token","keys.purpose.xai":"Grok models and xAI pictures","keys.purpose.openrouter":"Hundreds of models through one key","keys.purpose.mistral":"Models served by Mistral AI","keys.purpose.cerebras":"Open models on very fast chips","keys.purpose.groq":"Open models served fast by Groq","keys.purpose.greenference":"Open models run on solar power in Europe","keys.purpose.modelgo":"One API key, every model","keys.purpose.meta":"Meta's Muse models","keys.purpose.deepseek":"DeepSeek Harness","keys.purpose.opencodeGo":"OpenCode Zen and Go","keys.purpose.opencodeProviders":"Any other provider OpenCode supports","keys.purpose.lmStudio":"Models from the LM Studio app","keys.purpose.ollama":"Models you run with Ollama, on this computer or your network. No key needed.","keys.purpose.openaiCompat":"Ollama, Together or any server that speaks the OpenAI API","keys.purpose.liveCalls":"Live calls use the same key as OpenAI's models","keys.purpose.liveKey":"Optional. Live calls use it instead of your OpenAI key","keys.purpose.liveKeyAzure":"Required. A key of the Azure resource your Live calls use","keys.purpose.elevenlabs":"Voices for spoken replies and calls","keys.purpose.fishAudio":"Fish Audio voices for spoken replies and calls","keys.purpose.box":"Cloud desktops your bots can use","keys.purpose.vps":"Your own Linux server, reached over SSH","keys.purpose.onePassword":"Website logins your bots can use","keys.purpose.composio":"Gmail, Slack, GitHub and more through your own Composio project","keys.purpose.treg":"Research on X, companies and people","keys.purpose.postiz":"Draft, schedule and publish social posts","keys.purpose.jev":"Fast decisions and reading for your bots","keys.purpose.openrouterHelper":"Fast decisions through OpenRouter","keys.purpose.workersAi":"Free decisions and reading on Cloudflare","keys.purpose.imageOpenai":"Pictures for your bots' avatars","keys.purpose.imageCustom":"A picture service of your own","keys.label.liveKey":"Separate key for live calls","keys.label.elevenlabs":"ElevenLabs API key","keys.label.fishAudio":"Fish Audio API key","keys.label.openrouterHelper":"OpenRouter key for decisions","keys.label.imageOpenai":"OpenAI key for pictures","keys.label.imageCustom":"Custom picture service key","keys.where.vault":"Set up in Vault.","keys.where.decisions":"Set up with its account ID under Decision and extraction.","keys.where.pictures":"Set up in a bot's picture maker, with the service's address and model.","keys.label.imageGemini":"Gemini key for pictures","keys.purpose.imageGemini":"Pictures from Google's Gemini image models","keys.where.imageGeneration":"Set up in Image generation, where you pick the base and the backup provider.","keys.row.saving":"Saving…","keys.row.removing":"Removing…","keys.row.didntWork":"Didn't work","keys.row.failed":"Didn't work: {reason}","keys.row.looksLike":"That looks like the {label}, not this one.","keys.row.engineMissing":"Saved, but {engine} can't run on this computer yet, so this key isn't used. Install it with this command, then check again:","keys.row.notKept":"The key didn't stay saved. Try again.","keys.row.newKey":"Paste the new key","keys.row.show":"Show key","keys.row.hide":"Hide key","keys.row.replace":"Replace","keys.row.remove":"Remove","keys.row.useOwn":"Use your own key","keys.row.getKey":"Get a key","keys.row.endsIn":"{label} is saved and ends in {last4}","keys.row.savedKey":"{label} is saved","keys.row.open":"Open","keys.search.placeholder":"Search keys","keys.search.aria":"Search API keys","keys.search.none":"No keys match “{query}”.","keys.openPage":"Open API keys","engineSetup.apiKey.inline":"Paste it here. It saves and checks itself, and the models show up here.","commandPalette.searchLabel":"Search bots, group chats and messages","commandPalette.searchPlaceholder":"Search bots, group chats, messages…","secretCard.ref":"{app} keeps it for one use by its own tools. Your bot never sees it, and it is never added to chat.","secretCard.email":"Kept by Limix Bot, which signs in for your bots. They never see it.","secretCard.emailResumed":"Connected. Your bot is continuing.","secretCard.file":"Saved to a private file your bot's commands can read for 24 hours, then deleted. It is never added to chat.","secretCard.resumed":"Bot resumed","botAccess.share":"Share","botAccess.title":"Share {bot}","botAccess.addPlaceholder":"Add people by name or email","botAccess.noMatch":"Nobody in the team matches","botAccess.nobodyLeft":"Everyone in the team already has access","botAccess.people":"People with access","botAccess.you":"{name} (you)","botAccess.admins":"Admins can always edit every bot.","botAccess.general":"General access","botAccess.onlyAdded":"Only people added","botAccess.onlyAddedHint":"Only the people above can find it.","botAccess.everyoneHint.view":"Everyone in {team} can find it and read its shared conversations.","botAccess.everyoneHint.chat":"Everyone in {team} can find it and chat with it.","botAccess.everyoneHint.edit":"Everyone in {team} can chat with it and change it.","botAccess.remove":"Remove access","botAccess.added":"Added","botAccess.everyoneUse":"Everyone in {team} can use it","botAccess.toast.addedPlain":"Added {name}","botAccess.toast.everyoneUse":"Everyone in {team} can use it now","botAccess.overview.introUse":"Which bots everyone in {team} can use, and which only the people added to them. Changes apply at once.","botAccess.overview.removeFrom":"Remove {name} from {bot}","botAccess.personMenu":"{name}'s access","botAccess.overview.everyoneUses":"Everyone can use it","botAccess.everyoneEdits":"Everyone in the team can already edit it.","botAccess.toast.removed":"Removed {name}","botAccess.toast.onlyAdded":"Only people added can find it now","botAccess.undoFailed":"Couldn't undo that. Open Share to change it back.","botAccess.viewOnly":"You can view {bot}, not chat with it.","botAccess.viewOnlyRoom":"You can only view {bot}, so you can read this room but not write in it.","botAccess.ask":"Ask {name} to chat","botAccess.askAdmins":"Ask an admin to chat","botAccess.asked":"Asked {name}","botAccess.theAdmins":"the admins","botAccess.request.question":"{name} asks to chat with {bot}. Allow lets them chat with it and start their own conversations.","botAccess.request.allow":"Allow","botAccess.request.notNow":"Not now","settings.section.botAccess":"Bot access","botAccess.overview.noBots":"There are no team bots yet.","botAccess.overview.noPeople":"Nobody but admins is on the team yet.","botAccess.overview.byBot":"By bot","botAccess.overview.byPerson":"By person","botAccess.overview.listBy":"List by","botAccess.overview.searchBots":"Search bots","botAccess.overview.searchPeople":"Search people","botAccess.overview.noBotMatch":"No bot matches","botAccess.overview.botCount.one":"1 bot","botAccess.overview.botCount.other":"{count} bots","botAccess.overview.noBotsForPerson":"{name} has no bots yet.","botAccess.overview.allPeople":"All people","botAccess.overview.toastRemoved":"{bot}: removed {name}","server.browser.waiting":"Waiting for the browser: {name} is using it. This continues by itself when it is free.","server.browser.waitingTask":"Waiting for the browser: {name} is using it for {task}. This continues by itself when it is free.","server.browser.free":"The browser is free. Continuing.","server.browser.stoppedWaiting":"Stopped waiting for the browser.","composer.queued.capacityStarter":"Queued. Starter runs one thread at a time per bot, so this starts when the one running finishes. A bigger plan runs more.","composer.queued.seePlans":"See plans","settings.threads.starter":"Starter runs one thread at a time per bot, and a bigger plan runs more. Work a bot starts for itself still runs, and each bot has its own one.","botApi.title":"Bot API","botApi.switch":"Let apps talk to this bot","botApi.hint":"Apps and scripts send {name} a message with a key and get a reply. {name} answers from its instructions and memory, and uses no tools for them.","botApi.keyOnce":"Your key is in the command, shown this once. Copy it now: after you leave, YOUR_KEY takes its place.","botApi.keyHidden":"Put your key in place of YOUR_KEY. Lost it? Make a new one.","botApi.copy":"Copy","botApi.copied":"Copied","botApi.copyFailed":"Couldn’t copy","botApi.newKey":"New key","botApi.newKeyConfirm":"A new key replaces the old one. Apps still using the old key stop working.","botApi.replace":"Replace","botApi.calls":"{count} calls, last {when}","botApi.callsOne":"1 call, {when}","botApi.callsNone":"No calls yet","botApi.webhooks":"Webhooks: {count} triggers","botApi.webhooksOne":"Webhooks: 1 trigger","botApi.webhooksNone":"Webhooks: none","botApi.notAllowed":"Only people who can edit {name} can change this.","botApi.error":"Couldn’t change the Bot API. Try again.","chat.viaBotApi":"Sent through the Bot API","activity.what.bot-api":"Bot API","activity.action.bot-api.on":"Turned on Bot API","activity.action.bot-api.new-key":"Made a new Bot API key","activity.action.bot-api.off":"Turned off Bot API","botApi.localOnly":"This address works only on this computer.","botApi.call.replied":"Replied","botApi.call.accepted":"Taken, reply not ready","botApi.call.wrongKey":"Wrong key","botApi.call.off":"Turned away: Bot API was off","botApi.call.busy":"Turned away: the bot was busy","botApi.call.failed":"The bot couldn't answer","botApi.starter":"Bot API comes with a higher plan.","botApi.password":"A key is like a password: whoever holds it can read what this bot can read.","botApi.cantTake":"This bot's AI can't take Bot API calls. Choose another AI to use them.","grokMove.intro":"Grok Bot has no export button, so each Bot writes down its own setup. Nothing changes in Grok Bot.","grokMove.step1":"1. Send your Bot this message","grokMove.step1Hint":"Copy it and send it in your Bot's chat. Do this once per Bot.","grokMove.roster":"Your Bots on this computer: {names}","grokMove.copy":"Copy the message","grokMove.copied":"Copied","grokMove.copyFailed":"Could not copy","grokMove.step2":"2. Bring back what it wrote","grokMove.step2Hint":"Paste its whole reply here, or drop the file it made.","grokMove.found":"Found in Downloads: {names}","grokMove.useFound":"Use these","grokMove.refused":"{file}: {reason}","grokMove.replyLabel":"Your Bot's reply","grokMove.replyPlaceholder":"Paste your Bot's whole reply","grokMove.chooseFile":"Choose a file","grokMove.back":"Back","grokMove.import":"Import","grokMove.importing":"Importing…","grokMove.another":"Move another Bot","grokMove.previewTitle":"What would come over","grokMove.error.notExport":"That doesn't look like what your Bot writes. Copy its whole reply, or choose the file it made.","grokMove.error.cutOff":"Your Bot's reply looks cut off. Ask it to send the rest as another message in the same shape, then paste both.","grokMove.error.tooLarge":"That's larger than 4 MB. Ask your Bot to split it into several messages.","grokMove.error.credentials":"This has passwords or keys in it, so nothing was read: {keys}. Ask your Bot to write it again without them.","grokMove.error.newerVersion":"This was written for a newer Limix Bot. Update the app, then try again.","grokMove.error.unusable":"This couldn't be turned into a bot. Ask your Bot to write it again.","grokMove.popup.body":"Bring your Bots here, with their skills, routines and memories.","grokMove.popup.start":"Let's start","grokMove.count.skills":"Skills","grokMove.count.routines":"Routines","grokMove.count.memories":"Memories","grokMove.count.notes":"Routines saved as notes","grokMove.pausedPreview":"Routines come over paused.","grokMove.pausedReport":"Routines are paused. Turn each one off in Grok Bot, then on here.","grokMove.filesStay":"Files on Grok Bot's computer don't come over. Add any your Bot needs.","grokMove.appsOne":"1 app needs connecting again here","grokMove.appsMany":"{count} apps need connecting again here","grokMove.skillsOff":"A safety check keeps these skills off: {names}","grokMove.alreadyHere":"Already here: {names}","grokMove.unreadable":"Couldn't be read: {names}","grokMove.notAdded":"Couldn't be added: {names}","grokMove.isHere":"{name} is here","engines.defaultName.claudeApi":"Claude (API key)","engines.defaultName.chatgpt":"ChatGPT plan","engines.defaultName.openaiCompat":"Other (OpenAI-compatible)","cloudAccount.keepHere.unclicked":"Turn the switch to keep this computer's bots here.","cloudSend.move.unclicked":"Choose Try again to move.","lending.removeFolder":"Remove {name}","organization.status.clearFailed":"The saved company sign-in could not be cleared. Unlock your system keychain and Disconnect again before reconnecting.","organization.status.disconnected":"Disconnected on this computer.","organization.status.runtimeRunning":"The local runtime did not confirm stopping Company tasks. Quit and reopen Limix Bot before using Company models again.","organization.status.portalUnreachable":"The portal was unreachable; ask your administrator to revoke this device there too.","organization.status.confirmStopped":"Quit and reopen Limix Bot to confirm Company tasks have stopped.","organization.status.expired":"Your company sign-in expired. Reconnect to continue using company models and backups.","organization.status.accessEnded":"Company access ended or needs a new sign-in. Your personal and local providers are unchanged.","organization.status.retrying":"Can't reach the Admin portal or apply company models. Personal and local providers are still available. We'll retry shortly.","organization.status.codeExpired":"The sign-in code expired. Start again.","organization.status.denied":"Sign-in was denied, expired or already used. Start again on this computer.","organization.status.completeFailed":"Could not complete sign-in. Check your Admin address and start again.","organization.status.removed":"This computer's company sign-in couldn't be read, so it was removed. Sign in again.","organization.status.restoreFailed":"The saved company sign-in can't be read right now. Limix Bot tries again every minute.","organization.status.startFailed":"Could not start company sign-in. Check the Admin portal address and your connection.","brief.card.title":"Your brief","brief.card.date":"{date}","brief.card.intro":"I keep an eye on your calendar and email and put what needs you here, once a day and when you come back. Tell me to stop, or what to watch for.","brief.card.needsYou":"Needs you","brief.card.nothingNeedsYou":"Nothing needs you right now.","brief.card.yourDay":"Your day","brief.card.noMeetings":"No more meetings today.","brief.card.importantEmails":"Important emails","brief.card.routines":"Routines","brief.card.more":"and {count} more","brief.card.join":"Join","brief.card.open":"Open","brief.card.openGmail":"Open in Gmail","brief.card.openPage":"Open page","brief.card.draftReply":"Draft a reply to {who}","brief.card.dismissEmail":"Dismiss {who}'s email","brief.card.emailLine":"{sender}: {subject}","brief.card.waitingReply":"Waiting on your reply","brief.card.waitingReplyWhy":"Waiting on your reply · {why}","brief.card.important":"Important","brief.card.meetingLine":"{time} · {title}","brief.card.waitingMany":"More new emails than one check reads; I'll sort the rest next.","brief.card.waitingOne":"{count} more new email since you were away; I'll sort them next.","brief.card.waitingOther":"{count} more new emails since you were away; I'll sort them next.","brief.card.prepTitle":"Prep: {title}","brief.card.meetingWhen":"{day}, {start} to {end}{where}","brief.card.reminderOne":"{title} with {who} in {minutes} minute","brief.card.reminderMany":"{title} with {who} in {minutes} minutes","brief.part.today":"Today","brief.part.tomorrow":"Tomorrow","brief.part.noSubject":"(no subject)","brief.part.noSender":"(no sender)","brief.part.yourMeeting":"your meeting","brief.part.andOneOther":"{name} and {count} other","brief.part.andOthers":"{name} and {count} others","brief.part.aBot":"A bot","brief.row.finished":"Finished","brief.row.missed":"{name} was missed","brief.row.failed":"{name} failed","brief.row.didNotFinish":"It did not finish","brief.row.watchUnreadable":"The watch's answer could not be read, so nothing was posted. Its emails and meetings wait for the next check.","brief.row.watchRestarted":"Limix Bot restarted before this run's answer was read; its emails and meetings wait for the next check.","brief.row.signedOut":"{engine} is signed out","brief.row.signInAgain":"Sign in again in Settings, Model providers.","brief.row.usageLimit":"An AI reached its usage limit","brief.row.trialCredit":"The trial credit can't run this","brief.row.trialCreditNote":"Sign in with your own AI account, or add a key.","brief.row.reconnect":"{app} needs reconnecting","brief.row.place":"A bot couldn't reach its computer","brief.row.placeNote":"Open it to choose another place.","brief.row.asked":"{name} asked you","brief.row.noticedAcross":"Noticed across {count} chats","brief.row.clash":"{first} and {second} overlap","brief.row.clashNote":"{first} and {second}","brief.row.cantRead":"Couldn't read {app}","brief.row.reconnectIn":"Reconnect {app} in Connected apps.","brief.row.tryAgainSoon":"I'll try again soon.","brief.row.unfenced":"I didn't sort email or prepare meetings","brief.row.unfencedNote":"That needs a Claude model as {name}'s AI. Your day, reminders and clashes still show here.","settings.language.subtitleComplete":"The app follows your system language unless you pick one here.","update.error.tls":"The update connection could not be verified. Check your clock, VPN or proxy; do not disable certificate checks.","update.error.integrity":"The update failed verification. Download a fresh installer from the official release page.","update.error.disk":"Not enough disk space to prepare the update. Free some space, then try again.","update.error.permission":"The update could not write to the app or its cache. Check folder permissions, or use the official installer.","update.error.busy":"An update file is in use. Close other copies of Limix Bot, then try again.","update.error.feed":"The update files are missing or invalid. Check the official release page, or try again later.","update.error.network":"The update download was interrupted or the server is unavailable. Check your connection and try again.","update.error.prepareTimeout":"Preparing the update took too long.","update.error.slowRestart":"Restart is taking longer than expected. Quit and reopen Limix Bot to finish the update.","update.error.unavailable":"updater unavailable","update.error.restartFirst":"Quit and reopen Limix Bot before trying the update again.","common.emailPlaceholder":"you@example.com","chat.notice.restartInterrupted":"turn interrupted — Limix Bot restarted","chat.notice.resumingAfterRestart":"Resuming after a restart","chat.notice.cutOffByRestart":"{name} was cut off by a restart; resuming","chat.notice.stalled":"no activity for {minutes} minutes — the turn was stopped","chat.notice.followupInterrupted":"Queued follow-up interrupted by restart or restore — it may have already run. Review the result before sending it again.","chat.notice.usageLimit":"This {provider} account has reached its usage limit{detail}. Wait for it to reset, or switch this bot to another AI.","chat.notice.claudeExtraUsage":"Claude refused this turn because this model runs on extra usage for your account, and those credits are used up. Your plan's own usage is not affected: switch this bot to a model your plan includes, or add extra usage in your Claude account.","chat.notice.claudeLimitResets":"This Claude account has reached its {limit}, which resets {resets}. Until then, {meanwhile}.","chat.notice.claudeLimitSaid":'This Claude account has reached its {limit} (Claude says: "{said}"). For now, {meanwhile}.',"chat.notice.claudeLimit":"This Claude account has reached its {limit}. For now, {meanwhile}.","chat.notice.part.fiveHourLimit":"5-hour limit","chat.notice.part.weeklyLimit":"weekly limit","chat.notice.part.weeklyOpusLimit":"weekly Opus limit","chat.notice.part.weeklySonnetLimit":"weekly Sonnet limit","chat.notice.part.usageLimit":"usage limit","chat.notice.part.chooseModel":"choose another model for this bot","chat.notice.part.switchAccount":"switch this bot to another AI or Claude account","chat.notice.webhookHome":`I'm back on this computer, so my webhook "{name}" has an address here again. Open Automations, choose Copy address on "{name}", and paste it into the app that sends to it.`,"chat.digestChipNoFilesOne":"Did 1 tool call","chat.digestChipOneTool":"Did 1 tool call · {files} files changed","chat.digestChipOneFile":"Did {tools} tool calls · 1 file changed","chat.digestChipOneEach":"Did 1 tool call · 1 file changed","trace.action.open":"Open","trace.action.click":"Click","trace.action.doubleClick":"Double click","trace.action.rightClick":"Right click","trace.action.snapshot":"Snapshot","trace.action.eval":"Eval","trace.action.status":"Status","trace.action.fill":"Fill","trace.action.tabs":"Tabs","trace.action.getUrl":"Get url","trace.action.openUrl":"Open url","trace.action.read":"Read","trace.action.close":"Close","trace.action.screenshot":"Screenshot","trace.action.navigate":"Navigate","trace.action.wait":"Wait","trace.action.waitFor":"Wait for","trace.action.waitForText":"Wait for text","trace.action.waitForLoad":"Wait for load","trace.action.type":"Type","trace.action.typeText":"Type text","trace.action.scroll":"Scroll","trace.action.press":"Press","trace.action.key":"Key","trace.action.keyPress":"Key press","trace.action.getText":"Get text","trace.action.getTitle":"Get title","trace.action.check":"Check","trace.action.uncheck":"Uncheck","trace.action.select":"Select","trace.action.selectOption":"Select option","trace.action.dialog":"Dialog","trace.action.upload":"Upload","trace.action.tabNew":"Tab new","trace.action.tabList":"Tab list","trace.action.tabSwitch":"Tab switch","trace.action.tabClose":"Tab close","trace.action.hover":"Hover","trace.action.back":"Back","trace.action.forward":"Forward","trace.action.reload":"Reload","trace.action.drag":"Drag","trace.action.move":"Move","trace.action.tap":"Tap","trace.action.swipe":"Swipe","computer.problem.noRuntime":"Install a supported container runtime first","computer.problem.startRuntime":"Start {runtime} first","routines.weekRunsOne":"{ok} of {total} runs OK this week","routines.server.checksFailed":"The checks could not run; they try again at the next check.","routines.server.nothingNew":"Nothing new since the last check","routines.server.limitWait":"Waiting for the AI's usage limit to reset; this run starts again at {resets}","routines.server.retryAfter":"Starting again shortly after {why}: {failure}","routines.server.retryAfterRestart":"Starting again shortly after Limix Bot restarted while it ran","routines.server.backupAi":"Starting again on the backup AI: this bot's AI reached its usage limit","routines.server.waitingToStart":"Waiting to start: {failure}","routines.server.stillBusy":"Did not start: still busy after {minutes} minutes ({failure})","routines.server.failedAfterRetry":"Failed after one automatic retry: {failure}","routines.server.signedOut":"This bot's AI is signed out. Sign in again in Settings → AI. The AI said: “{failure}”","routines.server.part.stalled":"the AI stalled","routines.server.part.rateLimited":"a rate limit","routines.server.part.provider":"a temporary error","automations.time.dayAt":"{day} {time}","routines.sidebar.botFallback":"BotAgent","botOverview.line.noPeerContact":"Cannot initiate contact with other bots.","botOverview.line.askMode":"Command approvals use Ask mode; saved permissions and provider rules still apply.","botOverview.line.peersSectionOne":"Can talk to {count} other bot in its department.","botOverview.line.peersSectionMany":"Can talk to {count} other bots in its department.","botOverview.line.peersTeamsOne":"Can talk to {count} other bot in its allowed departments.","botOverview.line.peersTeamsMany":"Can talk to {count} other bots in its allowed departments.","botOverview.routine.paused":"Paused: {name}.","botOverview.routine.line":"{schedule}: {name}.","botOverview.routine.next":"Next run {time}.","botOverview.routine.last.completed":"Last run completed at {time}.","botOverview.routine.last.failed":"Last run failed at {time}.","botOverview.routine.last.missed":"Last run missed at {time}.","botOverview.routine.last.cancelled":"Last run cancelled at {time}.","botOverview.routine.last.running":"Last run running at {time}.","botOverview.routine.last.queued":"Last run queued at {time}.","botOverview.routine.last.waiting":"Last run waiting at {time}.","botOverview.line.appsOne":"Can use {count} connected app: {apps}.","botOverview.line.appsMany":"Can use {count} connected apps: {apps}.","botOverview.line.appsUnchecked":"Connected apps could not be checked.","botOverview.line.chief":"Coordinates its department as {role}.","botOverview.line.alsoTeams":"May also coordinate these departments: {teams}.","botOverview.line.computerNotOnCloud":"Works on: {preference}, which isn't available on My Cloud.","botOverview.line.folder":"Works in {folder}.","botOverview.line.customApprovals":"Command approvals follow the provider's custom configuration.","botOverview.line.asksPeers":"Asks before contacting other bots.","botOverview.line.noComputer":"Can't use a computer.","botOverview.line.profileApproval":"Profile proposal cards require your approval.","botOverview.line.skill":"Knows how to {skill}.","botOverview.line.webhook":"Listens for “{name}” webhooks.","teamMove.unclicked":"Choose Move to move the bot.","teamMove.refused.notInTeam":"You're not in that team.","teamMove.refused.notABot":"Choose one of your bots to move.","teamMove.refused.movingElsewhere":"{bot} is moving to {team}.","routines.duration.minutes":"{minutes} min","routines.duration.hours":"{hours} hr","routines.duration.hoursMinutes":"{hours} hr {minutes} min","routines.interval.minutes":"Every {minutes} min","routines.interval.hour":"Every hour","routines.interval.hours":"Every {hours} hr","routines.interval.hoursMinutes":"Every {hours} hr {minutes} min","routines.schedule.weekdays":"weekdays","routines.schedule.until":"until {date}","routines.schedule.everyWeekday":"Every weekday","routines.schedule.weeklyOn":"Weekly on {day}","routines.schedule.at":"{label} at {time}","routines.attachment.remove":"Remove {name}","routines.interval.endAfterFirstRun":"Choose an end date after the first run.","routines.error.invalidSchedule":"Choose a valid schedule.","routines.error.callSchedule":"Choose a supported call schedule.","routines.editor.starts":"Starts","routines.editor.on":"On","routines.editor.to":"to","routines.editor.callDuration":"Call duration","routines.repeat.none":"Does not repeat","routines.repeat.interval":"Every X minutes","routines.repeat.dailyOption":"Daily","routines.repeat.weekdaysOption":"Every weekday (Monday to Friday)","routines.repeat.selectedWeekdays":"Selected weekdays","routines.repeat.monthly":"Monthly","routines.repeat.yearly":"Yearly","routines.repeat.customCron":"Custom cron (advanced)","routines.cron.raw":"Cron {expression}","routines.cron.everyDay":"Every day at {time}","routines.cron.monthlyLastDay":"Monthly on the last day at {time}","routines.cron.monthlyDay":"Monthly on day {day} at {time}","routines.cron.yearly":"Yearly on {month} {day} at {time}","routines.cron.weekdays":"Every weekday at {time}","routines.cron.weekly":"Weekly on {weekday} at {time}","routines.cron.weeklySaturdaySunday":"Weekly on {weekday} at {time}","routines.cron.nth.first":"Monthly on the first {weekday} at {time}","routines.cron.nth.second":"Monthly on the second {weekday} at {time}","routines.cron.nth.third":"Monthly on the third {weekday} at {time}","routines.cron.nth.fourth":"Monthly on the fourth {weekday} at {time}","routines.cron.nth.fifth":"Monthly on the fifth {weekday} at {time}","routines.cron.nth.last":"Monthly on the last {weekday} at {time}","routines.cron.nthWeekend.first":"Monthly on the first {weekday} at {time}","routines.cron.nthWeekend.second":"Monthly on the second {weekday} at {time}","routines.cron.nthWeekend.third":"Monthly on the third {weekday} at {time}","routines.cron.nthWeekend.fourth":"Monthly on the fourth {weekday} at {time}","routines.cron.nthWeekend.fifth":"Monthly on the fifth {weekday} at {time}","routines.cron.nthWeekend.last":"Monthly on the last {weekday} at {time}","routines.interval.runsEvery":"Runs every","routines.interval.howOften":"How often this routine runs","routines.interval.custom":"Custom…","routines.interval.customMinutes":"Custom interval in minutes","routines.interval.minutesUnit":"minutes","routines.interval.on":"On","routines.interval.daysLabel":"Days this interval runs","routines.interval.during":"During","routines.interval.hoursLabel":"Hours this interval runs","routines.interval.allDay":"All day","routines.interval.customHours":"Custom hours…","routines.interval.ends":"Ends","routines.interval.endsLabel":"When this interval ends","routines.interval.never":"Never","routines.interval.onDate":"On a date…","routines.interval.chooseDays":"Choose the days","routines.interval.customDays":"Custom interval days","routines.interval.daySelected":"{day}, selected","routines.interval.dayNotSelected":"{day}, not selected","routines.interval.dayChips":"Su Mo Tu We Th Fr Sa","routines.interval.runBetween":"Run between","routines.interval.windowStart":"Interval window start","routines.interval.and":"and","routines.interval.windowEnd":"Interval window end","routines.interval.stopAfter":"Stop scheduling after","routines.interval.endDate":"Interval end date","routines.interval.invalidMinutes":"Choose a whole number from 5 to 1,440 minutes.","routines.interval.invalidDays":"Choose at least one day.","routines.interval.invalidWindow":"Choose a same-day window at least {minutes} minutes long.","routines.runLimit.none":"Advanced · no run limit","routines.runLimit.some":"Advanced · {duration} run limit","routines.runLimit.stopAfter":"Stop if still running after","routines.runLimit.label":"Routine safety limit","routines.runLimit.noLimit":"No limit","routines.runLimit.help":"Optional. The clock starts when work actually begins and does not control how often the routine starts.","routines.editor.groupContext":"Use the group’s shared context","routines.attachment.add":"Add attachment","routines.attachment.routineHelp":"Attachments are passed to each local routine run and excluded from shared team files.","routines.attachment.callSharedHelp":"References will be shared in the group when the event starts.","routines.attachment.callKeptHelp":"References stay with the event and are available when you join the group.","routines.editor.goalRunsOnCloud":"Runs on My Cloud","routines.editor.goalRunsOnComputer":"Runs on this computer","routines.editor.currentSetup":"Bot’s current setup","routines.event.edit":"Edit event","routines.event.new":"New event","routines.event.editLabel":"Edit calendar event","routines.event.createLabel":"Create calendar event","routines.event.addTitle":"Add title","routines.event.addCallTitle":"Add call title","routines.goal.chooseLead":"Choose the lead","routines.goal.leadHelp":"The lead coordinates {name} and assigns work to its active members.","routines.goal.noMembers":"This group has no active members. Add or restore a bot before scheduling the goal.","routines.event.assignBot":"Assign a bot","routines.event.addGuests":"Add guests","routines.event.botOwnsRuns":"This bot owns each scheduled run.","routines.event.invitedNone":"No bots invited to the call.","routines.event.invitedOne":"1 bot invited to the call.","routines.event.invitedMany":"{count} bots invited to the call.","routines.event.createFirstBot":"Create your first bot","routines.event.needsBot":"A calendar event needs at least one bot.","routines.goal.instructionsPlaceholder":"What should the team accomplish?","routines.event.instructionsPlaceholder":"Add instructions for the bot","routines.event.agendaPlaceholder":"Add description or agenda","routines.attachment.attaching":"Attaching…","routines.event.scheduleCall":"Schedule call","routines.goal.schedule":"Schedule team goal","routines.quick.label":"Quick create","routines.quick.title":"New calendar event","routines.quick.comeBack":"Then come back to schedule it.","routines.quick.whatToDo":"What should the bot do?","routines.quick.description":"Add a description (optional)","routines.quick.moreTitle":"Choose repeating schedules and other options","routines.calendar.label":"Routine and call calendar","routines.calendar.day":"{date} calendar","routines.event.deleteConfirm":"Delete “{title}”?","routines.drawer.runWaiting":"This run is waiting. Open its execution thread for more context.","routines.drawer.groupUnavailable":"Group unavailable","routines.drawer.attachments":"Attachments","routines.drawer.callSharedHelp":"These references will be shared in the group when the event starts.","routines.drawer.callKeptHelp":"These references stay with the event and are available when you join the group.","routines.drawer.noTimeLimit":"No time limit","routines.drawer.stopsAfter":"Stops if still running after {duration}","routines.drawer.pauseRoutine":"Pause routine","routines.drawer.resumeRoutine":"Resume routine","routines.drawer.joinGroup":"Join group","routines.drawer.openGroup":"Open group","routines.drawer.openGroupThread":"Open group thread","routines.drawer.openThread":"Open thread","routines.drawer.cancelRun":"Cancel run","routines.paused.title":"Paused routines","routines.paused.help":"History is kept; no new tasks will run.","mascot.body.cursor":"Limi","mascot.body.blob":"Blob","mascot.body.circle":"Circle","mascot.body.squircle":"Squircle","mascot.body.capsule":"Capsule","mascot.body.drop":"Drop","mascot.body.shield":"Shield","mascot.body.hexagon":"Hexagon","mascot.body.diamond":"Diamond","mascot.body.star":"Blend","mascot.body.pumpkin":"Pumpkin","mascot.body.ghost":"Ghost","mascot.body.witch":"Witch","mascot.body.bat":"Bat","mascot.body.cat":"Cat","mascot.body.skull":"Skull","mascot.body.monster":"Monster","mascot.body.mummy":"Mummy","mascot.body.vampire":"Vampire","mascot.body.spider":"Spider","mascot.body.rocket":"Rocket","mascot.body.anaar":"Anaar","mascot.body.chakri":"Chakri","mascot.body.sparkler":"Sparkler","mascot.body.bomb":"Bomb","mascot.body.laddu":"Laddu","mascot.body.chakli":"Chakli","mascot.body.jalebi":"Jalebi","mascot.body.katli":"Kaju katli","mascot.body.karanji":"Karanji","mascot.color.green":"green","mascot.color.blue":"blue","mascot.color.red":"red","mascot.color.orange":"orange","mascot.color.purple":"purple","mascot.color.cyan":"cyan","mascot.color.pink":"pink","mascot.color.yellow":"yellow","mascot.color.teal":"teal","mascot.color.coral":"coral","mascot.color.silver":"silver","mascot.color.chrome":"chrome","mascot.expression.idle":"idle","mascot.expression.happy":"happy","mascot.expression.curious":"curious","mascot.expression.drowsy":"drowsy","mascot.expression.working":"working","mascot.expression.thinking":"thinking","mascot.expression.listening":"listening","mascot.expression.sleeping":"sleeping","mascot.expression.suspicious":"suspicious","mascot.expression.proud":"proud","mascot.useExpression":"Use {expression} expression","mascot.useColor":"Use {color} mascot color","mascot.useBody":"Use the {name} body","mascot.label":"{name} mascot","avatar.alt":"{name} avatar","avatar.altFallback":"Bot avatar","botIdentity.framing.preview":"{name} avatar preview","botIdentity.framing.zoom":"Zoom avatar","botIdentity.framing.hint":"Drag the picture to reposition it. Scroll to zoom.","botIdentity.framing.reset":"Reset framing","botIdentity.orgIcons":"{name} icons","botIdentity.useOrgIcon":"Use {name} icon","botIdentity.uploadUnusable":"The uploaded image could not be used as an avatar","app.openBotList":"Open bot list","about.tagline":"A desktop home for your agents, built on {app}: open source, Apache 2.0 licensed.","about.docs":"Docs","about.releases":"Releases","about.license":"License","attach.imageLoading":"Loading image…","attach.imageFailed":"This image could not be loaded.","attach.tooLarge":"{name} exceeds {limit} MB","attach.unsupported":"Unable to attach {names}. Choose a supported image, document, or audio file.","attach.uploadFailed":"{name}: {reason}","botIdentity.ai.modelInvalid":"Use a model ID of at most 200 characters without control characters","botIdentity.ai.modelPlaceholder":"Model ID from your image provider","botIdentity.ai.customApiHint":"OpenAI-compatible Images API. localhost refers to the {app} server, including when you open this page remotely.","botIdentity.ai.xaiSharedKey":"Shares the Grok API key in Settings. Changing or removing it also affects other Grok features.","botIdentity.ai.customSavedKey":"The saved custom key will be used. Remove it for a keyless connection.","botIdentity.ai.customProvider":"Custom","botSettings.overviewFailed":"Couldn’t load the overview.","botSettings.historyFailed":"Couldn’t load history.","browser.panel.temporary":"Temporary browser","browser.panel.ownBrowser":"{name}’s own browser","browser.panel.exitFullscreenFailed":"Could not leave full screen. Press Esc instead.","browser.panel.fullscreenUnavailable":"Full screen is unavailable in this browser.","browser.panel.notConnected":"The browser view is not connected. Reconnect it, then try again.","browser.panel.pipUnavailable":"Picture in picture is unavailable here.","browser.panel.pageLabel":"{name}’s browser page","browser.panel.starting":"Starting the browser…","call.turns.checking":"Checking call availability","call.turns.unavailable":"Call unavailable","call.turns.setUpVoice":"Set up a voice in an agent profile to make calls","call.turns.pickVoice":"Pick a voice in an agent profile to make calls","call.turns.callName":"Call {name}","call.turns.checkingReason":"Checking whether this device can make calls.","call.turns.setUpVoiceReason":"Set up ElevenLabs, Fish Audio, Chatterbox, or a built-in Mac voice so the bot can speak during calls.","call.turns.groupVoicesReason":"Give every group member a voice before starting a group call.","call.turns.pickVoiceReason":"Choose a voice before starting a call.","call.turns.pushToTalkFailed":"Push to talk couldn't start. Check Microphone and Speech Recognition access.","call.turns.micFailed":"The microphone couldn't start. Check Microphone and Speech Recognition access.","call.turns.dictationStopped":"Dictation stopped unexpectedly. Check Microphone and Speech Recognition access.","call.turns.needsDictation":"Calls need macOS dictation, which isn't available here yet.","call.turns.helperBuildFailed":"The dictation helper couldn't be built. Install Apple's Command Line Tools and try again.","call.turns.speechNotAuthorized":"Allow Speech Recognition in System Settings → Privacy & Security, then try again.","call.turns.pushToTalk":"Push to talk","call.turns.listening":"Listening","call.turns.oneMoment":"One moment","call.turns.releaseToSend":"Release {keys} to send…","call.turns.saySomething":"Say something…","call.turns.tryMicrophone":"Try microphone again","call.turns.interrupt":"Interrupt","call.turns.keysHint":"Hold {keys} to talk · Space interrupts · Esc hangs up","call.group.sayNameOf":"Say a member's name — {names} — or say everyone.","call.group.sayName":"Say a member's name — or say everyone.","call.group.bringingIn":"Bringing the group in","call.group.speaking":"{name} is speaking","call.group.member":"Group member","call.group.working":"{name} is working","call.group.sayPrompt":"Say a name, say “everyone,” or just talk to the group…","call.group.inTurn":"You’ll hear each response in turn.","call.group.keysHint":"Hold {keys} to talk · Say a member’s name to direct the turn · Space interrupts · Esc hangs up","common.copy":"Copy","common.saving":"Saving…","chat.code.copied":"Copied to clipboard","chat.code.copiedShort":"Copied!","chat.mermaid.title":"Mermaid diagram","chat.mermaid.showSourceTitle":"Show diagram source","chat.mermaid.hideSourceTitle":"Hide diagram source","chat.mermaid.showSource":"Show source","chat.mermaid.hideSource":"Hide source","chat.mermaid.copy":"Copy diagram source","chat.mermaid.copiedLabel":"Diagram source copied to clipboard","chat.mermaid.copyLabel":"Copy diagram source to clipboard","chat.file.legacy":"Unavailable legacy file reference","chat.file.saveCopy":"Save a copy","chat.spoiler.reveal":"Reveal spoiler","chat.spoiler.hide":"Hide spoiler","chat.spoiler.hideShort":"Hide","chat.providerSafety.guidance":"The provider stopped this task. Full access controls tool approvals, not provider safety checks. Review the provider’s findings in Codex if available; Limix Bot cannot override this block.","chat.providerSafety.about":"About provider safety checks","chat.citation.commentDialog":"Comment on citation","chat.citation.quoted":"Quoted message","chat.citation.commentLabel":"Comment on selected text","chat.citation.commentPlaceholder":"Add an optional comment…","chat.citation.commentTooLong":"Comments can contain up to {count} characters.","chat.citation.tooLongLabel":"Selection is too long to cite","chat.citation.citeLabel":"Cite selected text","chat.citation.shorten":"Shorten selection","chat.citation.cite":"Cite","chat.citation.open":"Open citation: {quote}","chat.citation.remove":"Remove citation","chat.citation.details":"Citation details","chat.citation.comment":"Comment:","chat.citation.unavailable":"Source unavailable or changed. The saved quote is still available.","chat.citation.goToSource":"Go to source","chat.citation.editComment":"Edit comment","palette.label":"Command palette","palette.empty":"Nothing to switch to yet","palette.bots":"Bots","palette.groups":"Groups","palette.messages":"Messages","remote.status.pairedOne":"1 device paired","remote.status.pairedMany":"{count} devices paired","companyBackup.restorePending":"An earlier restore needs recovery first.","composer.dropToAttach":"Drop to attach","composer.notice.dismiss":"Dismiss","composer.chip.pasted":"PASTED","composer.chip.image":"IMAGE","composer.chip.file":"FILE","composer.chip.displayLabel":"Display pasted text in chat box","composer.chip.display":"Display in chat box","composer.chip.uploading":"Uploading…","composer.chip.pasteSummary":"{lines} lines, {size}","composer.chip.removePasted":"Remove pasted text","composer.chip.removeFile":"Remove file","computerSharing.loadFailed":"Could not load computer access. Reopen this page to try again.","computerSharing.title":"Computer access · {name}","computerSharing.loading":"Loading access…","computerSharing.notShared":"Not shared","computerSharing.sharing":"Sharing while this desktop is open","computerSharing.close":"Close computer access","computerSharing.folders":"Shared folders","computerSharing.noFolders":"No folders shared. New folders are read-only by default.","computerSharing.allowEdits":"Allow edits","computerSharing.chooseFolder":"Choose folder","computerSharing.smallFiles":"Small files only (256 KB). Folder access does not follow links or delete files.","computerSharing.broader":"Broader access · optional","computerSharing.terminal":"Unrestricted terminal","computerSharing.terminalHint":"Run commands as you. This can access or delete files anywhere you can, including credentials—not just the folders above.","computerSharing.control":"Computer control","computerSharing.controlHint":"View your screen and operate your signed-in apps, outside the shared folders. Requires local computer control and OS permissions.","computerSharing.save":"Save access","computerSharing.share":"Share selected access","computerSharing.stop":"Stop sharing","computerSharing.stopHint":"Stopping blocks new requests and cancels running work where possible. An action already sent to an app may still finish.","computerSharing.ownIntro":"Choose what {name}'s bots can use on this computer while this app is open. Files and screen content they use go to that server and its AI provider.","computerSharing.pauseHint":"Pause stops every server and Cloud from using this computer until you resume.","computerSharing.paused":"Paused: no server or Cloud can use this computer until you resume.","computerSharing.pause":"Pause","computerSharing.resume":"Resume","servers.loadFailed":"Could not load saved servers. Please reopen this page.","servers.desktopOnly":"Manage server connections in the desktop app.","servers.intro":"One desktop app, wherever your bots live. Switching servers does not move or replace your bots, conversations, or provider accounts.","servers.current":"Current","servers.switchTo":"Switch to {name}","servers.switch":"Switch","servers.yours.title":"Your servers","servers.yours.subtitle":"Saved on this computer. Your hosted bots keep running when you switch away.","servers.yours.loadFailed":"Saved servers could not be loaded.","servers.yours.loading":"Loading servers…","servers.managed":"Managed by Limix Bot","servers.transport.https":"HTTPS","servers.transport.tailscale":"Tailscale","servers.transport.privateHttp":"Private network, not encrypted","servers.transport.loopback":"This computer","servers.state.checking":"Checking…","servers.state.reconnecting":"Reconnecting…","servers.state.cantReach":"Can't reach · since {time}","servers.state.signedOut":"Needs a new code","servers.state.insecure":"Not encrypted on the open internet","servers.tryNow":"Try now","servers.pairAgain":"Pair again","servers.editAddress":"Edit address","servers.copyAddress":"Copy address","servers.copyAddressFor":"Copy the address of {name}","servers.copied":"Copied","servers.removeName":"Remove {name}","servers.behind":"{name} runs Limix Bot {server}. This app is {app}.","servers.behind.copy":"Copy update command","servers.behind.hide":"Hide this note","servers.pairAgainTitle":"Pair again with {name}","servers.localHint":"Local bots and conversations","servers.computerAccessFor":"Computer access for {name}","servers.computerAccess":"Computer access","servers.share.title":"Share this computer","servers.share.off":"Let {name}'s bots use folders you choose, a terminal and the apps on your screen.","servers.share.on":"{name}'s bots can use this computer while this app is open.","servers.share.paused":"Paused: {name}'s bots can't use this computer until you resume.","servers.share.choose":"Choose what it can use","servers.share.for":"Share this computer with {name}","routines.status.deferred":"Deferred: target busy","routines.run.review":"Review","routines.run.open":"Open run","routines.run.cardLabel":"{name} routine run: {status}","routines.run.actionFor":"{action} for {name}","routines.goal.working":"Working","routines.goal.turnOf":"Turn {turn} of {max}","routines.goal.turnsOne":"1 turn","routines.goal.turnsMany":"{count} turns","routines.goal.runLabel":"Goal run: {status}","routines.goal.groupGoal":"Group goal","routines.goal.coordinating":"{name} coordinating · {turns}","connectionDetail.hide":"Hide","connectionDetail.reveal":"Reveal","connectionDetail.copy":"Copy {label}","chat.export.label":"Export conversation","chat.export.title":"Export conversation as Markdown","chat.export.options":"Export options","chat.export.menuTitle":"Export Conversation","chat.export.empty":"No messages to export yet.","chat.export.copiedToClipboard":"Copied to clipboard!","chat.export.clipboardUnavailable":"Clipboard unavailable. Download the Markdown file instead.","room.viaApi":"Sent through the API, not typed here","room.folder.chooseShort":"Choose","room.member.working":"working…","inspector.title":"Inspector","inspector.close":"Close the Inspector","inspector.tab.events":"events","inspector.tab.raw":"raw","inspector.entries.lastOf":"last {shown} of {total}","inspector.entries.count":"{count} entries","inspector.entries.loading":"loading…","inspector.reload":"Reload from disk","inspector.loadFailed":"couldn't load: {error}","inspector.emptyRaw":"No native protocol messages recorded for this thread yet.","inspector.emptyEvents":"No runtime events for this thread yet.","shortcuts.title":"Keyboard Shortcuts","shortcuts.subtitle":"Quick commands and navigation","shortcuts.close":"Close keyboard shortcuts","shortcuts.searchPlaceholder":"Search shortcuts…","shortcuts.search":"Search shortcuts","shortcuts.noMatch":"No shortcuts found for “{query}”","shortcuts.openHintBefore":"Press","shortcuts.openHintAfter":"when not typing to open","shortcuts.category.navigation":"Navigation","shortcuts.category.chat":"Chat & Composer","shortcuts.category.calls":"Calls","shortcuts.category.groups":"Management & Groups","shortcuts.command-palette":"Open command palette (switcher & transcript search)","shortcuts.new-bot":"Create a new bot","shortcuts.new-thread":"Start a new thread with the selected bot","shortcuts.jump-bot":"Jump to bot 1–9 in the roster","shortcuts.switch-bot":"Switch to previous / next bot","shortcuts.find-conversation":"Find in conversation","shortcuts.send-message":"Send message","shortcuts.new-line":"Insert new line without sending","shortcuts.edit-last-message":"Edit last message (when composer is empty)","shortcuts.close-panel":"Close active drawer, modal, or find bar","shortcuts.shortcuts-cheat-sheet":"Show keyboard shortcuts cheat sheet","shortcuts.live-call-mute":"Mute or unmute a Live call","shortcuts.live-call-hang-up":"Hang up a Live call","shortcuts.save-bulletin":"Save group instruction changes","shortcuts.reorder-section":"Reorder sidebar sections (focus a section heading)","vm.workspace.status.checking":"Checking VM","vm.workspace.status.missing":"VM not created","vm.workspace.status.stopped":"VM stopped","vm.workspace.status.unavailable":"VM unavailable","vm.workspace.status.viewerUnavailable":"Viewer unavailable","vm.workspace.status.connecting":"Connecting viewer","vm.workspace.status.live":"Live · watch-only","vm.workspace.windowTitle":"{name}'s Local VM","vm.workspace.paneLabel":"Local VM for pane {number}","vm.workspace.handBackFailed":"{app} could not hand control back. The view stayed open.","vm.workspace.switchFailed":"Control could not switch safely. Any remaining hold stayed paused.","vm.workspace.viewSubtitle":"Two live desktops · one active controller · watch-only by default","vm.workspace.closeView":"Close private desktop view","computer.mac.allowTitle":"Allow control of this computer","computer.mac.openSystemSettings":"Open System Settings","noEngines.remote.title":"The host needs an AI","noEngines.remote.body":"Set up Claude or another supported AI in {app} on the host computer, then come back here.","room.members.changed":"This group's members changed while the panel was open. Close it and try again.","room.members.dialogLabel":"Manage members of {name}","room.members.title":"Manage Members","room.members.emptyHint":"Create a bot first — groups are made of bots.","room.members.needOne":"A group needs at least one bot.","room.members.saveOne":"Save · 1 bot","room.members.saveMany":"Save · {count} bots","organization.logoAlt":"{name} logo","organization.logo":"Organization logo","remoteAgent.updateFailed":"Could not update this agent.","remoteAgent.collapse":"Collapse remote agent settings","remoteAgent.title":"Remote agent settings","remoteAgent.close":"Close remote agent settings","remoteAgent.removeAvatar":"Remove custom avatar","remoteAgent.description":"Description","remoteAgent.notificationsHint":"Enable completion and attention notifications for this agent on the host and paired clients.","remoteAgent.notifications":"Agent notifications","search.messages":"Messages","search.messagesCount":"Messages · {count}","search.failed":"couldn't search: {error}","search.noMatch":"No messages match “{query}”","search.otherVersion":"other version","chat.secret.superseded":"This request was replaced by a newer one for the same key. Use the newest card to provide it.","chat.secret.saved":"Saved securely.","chat.secret.savedContinuing":"Saved securely. Your bot is continuing the task.","chat.secret.savedWaiting":"Saved securely. Your bot will continue when its current turn settles.","chat.secret.declined":"You chose not to provide this credential. {app} could not resume the bot yet.","chat.secret.stopped":"Stopped","chat.secret.declinedFailed":"Continuing without this credential failed","chat.secret.resumedWithout":"Bot resumed without seeing the key","chat.secret.resumeFailed":"The key is safe; resuming failed","chat.secret.waiting":"Waiting to resume safely","chat.secret.supersededShort":"Superseded by a newer request","chat.secret.labelSaved":"{label} saved securely","chat.secret.remoteClient":"This key must be saved on the host computer. Open this conversation on the host to continue securely.","chat.secret.continue":"Continue task","chat.secret.save":"Save securely","chat.secret.storedHint":"Stored securely by {app} and never added to chat.","chat.secret.whereToGet":"Where to get this key","vault.choices.secret":"Use a saved one","vault.choices.login":"Use a saved login","vault.choices.note":"{bot} can use the one you pick from now on.","vault.choices.error":"Couldn't use that one. Try again, or type it below.","skills.request.legacyUpdate":"This proposal was created by an older build and cannot be safely applied. Deny it, then ask the bot to propose the update again.","skills.request.legacyCreate":"This proposal was created by an older build and cannot be safely applied. Deny it, then ask the bot to create the skill again.","skills.request.reviewEnable":"Review the complete SKILL.md before enabling","skills.request.reviewEnableRefs":"Review the complete SKILL.md and its reference files before enabling","skills.request.reviewReplace":"Review the complete SKILL.md before replacing the current version","skills.request.reviewReplaceRefs":"Review the complete SKILL.md and its reference files before replacing the current version","skills.request.legacyOther":"This proposal was created by an older build and cannot be safely applied. Deny it, then ask the bot again.","skills.request.reviewTurnOn":"Review the complete SKILL.md before turning it on","skills.request.reviewTurnOnRefs":"Review the complete SKILL.md and its reference files before turning it on","skills.request.reviewTurnOff":"Review the complete SKILL.md before turning it off","skills.request.reviewTurnOffRefs":"Review the complete SKILL.md and its reference files before turning it off","skills.request.reviewDelete":"Review the complete SKILL.md before deleting it","skills.request.reviewDeleteRefs":"Review the complete SKILL.md and its reference files before deleting it","skills.source":"Source: {source}","skills.sourceUnknown":"Unknown","skills.fullSkill":"Full SKILL.md for {name}","skills.fullFile":"Full {path} for {name}","skills.error.assignments":"Could not update assignments.","skills.error.update":"Could not update this skill.","skills.error.load":"Could not load this skill.","skills.error.contentsImport":"The skill contents are unavailable; import it again.","skills.error.import":"Could not import that skill.","skills.reviewTitle":"Review {name} before enabling","skills.enableReviewed":"Enable reviewed skill","skills.error.loadLearned":"Could not load learned skills.","skills.error.assign":"Could not assign that skill.","skills.error.contentsRelearn":"The skill contents are unavailable; remove and import or learn it again.","skills.error.enable":"Could not enable this skill.","skills.unassignConfirm":"Unassign “{name}” from this bot? The skill stays in the library.","skills.error.unassign":"Could not unassign that skill.","skills.removeLearnedConfirm":"Remove the learned skill “{name}”?","skills.error.remove":"Could not remove this skill.","skills.origin.library":"library","skills.origin.private":"private","skills.usedWhenRelevant":"Used when the bot decides it's relevant","skills.foundWhenNeeded":"Not in this bot's list. It finds this skill when a task needs it.","skills.enableName":"Enable {name}","skills.disableName":"Disable {name}","skills.removeName":"Remove {name}","skills.remove":"Remove skill","skills.stagedOne":"1 proposal is waiting for a decision in chat.","skills.stagedMany":"{count} proposals are waiting for a decision in chat.","update.banner.somethingWrong":"Something went wrong.","update.banner.noRelease":"No update has been published for this platform yet.","update.banner.offline":"Couldn't check for updates. Check your internet connection.","update.banner.ready":"{app} {version} is ready","update.banner.finishInTerminal":"Finish in a terminal","update.banner.failed":"Update failed","update.banner.copyCommand":"Copy the install command and open a terminal.","update.banner.restartToFinish":"Restart to finish updating.","update.banner.copying":"Copying the command…","update.banner.reopening":"{app} will reopen in a moment.","update.banner.copiedOpened":"Command copied — paste it in the terminal that opened.","update.banner.copiedPaste":"Command copied — paste it in a terminal to finish.","update.banner.quitReopen":"{error} Quit and reopen {app} before trying the update again.","update.banner.dismiss":"Dismiss","chat.narration.hide":"Hide progress messages","chat.narration.show":"Show progress messages","automations.back":"Back","botIdentity.soul.bytes":"{bytes} / {limit} bytes","botIdentity.soul.bytesOver":"{bytes} / {limit} bytes — not saved","team.instructionsBytes":"{bytes} / {limit} bytes","voice.keySavedPlaceholder":"•••••••• (paste to replace)","voice.keyLabel":"{name} key","voice.pickerLabel":"{name}'s voice","teamMemory.entryDetailLabel":"{name} detail","teamLibrary.invalidJson":"That backup or team file is not valid JSON.","time.hoursAgo":"{count} hr ago","time.yesterday":"yesterday","time.daysAgo":"{count} days ago","memory.capacity.overLinesOne":"{lines} lines saved, {loaded} load into every conversation. 1 line is not being loaded. Trim this file or move notes into a topic file.","memory.capacity.overLinesMany":"{lines} lines saved, {loaded} load into every conversation. {missing} lines are not being loaded. Trim this file or move notes into a topic file.","memory.capacity.overBytes":"{bytes} saved, {loaded} load into every conversation. The rest is not being loaded. Trim this file or move notes into a topic file.","memory.capacity.summary":"{lines} / {maxLines} lines · {bytes} / {maxBytes}","routines.miniCalendar.label":"Mini calendar","routines.miniCalendar.previous":"Previous month","routines.miniCalendar.next":"Next month","remoteDesktop.noLink":"The host did not return a live desktop link","remoteDesktop.startingAt":"{cadence} · starting {date}","remoteDesktop.viewerUnavailable":"The desktop viewer is unavailable in this build","remoteDesktop.title":"{name}'s computer","remoteDesktop.cloudDesktop":"Cloud desktop","remoteDesktop.desktop":"Desktop","remoteDesktop.close":"Close computer panel","remoteDesktop.browserHint":"Watching and driving this browser needs browser control for this paired device, in Settings → Remote access on the host computer.","remoteDesktop.previewUnavailableLabel":"VPS preview unavailable","remoteDesktop.previewAlt":"{name}'s VPS desktop preview","remoteDesktop.previewUnavailable":"Preview unavailable","remoteDesktop.previewWaiting":"Waiting for preview","remoteDesktop.openLive":"Open the live desktop","remoteDesktop.relayHint":"The host creates a temporary, encrypted viewer relay. VPS SSH and VNC credentials stay on the host computer.","remoteDesktop.accessHint":"The host must enable cloud desktop access for this paired device in Settings → Remote access.","remoteDesktop.runsOnVm":"runs on VM","routines.cron.pausedPreviewLabel":"Paused schedule preview","routines.cron.nextRunsLabel":"Next scheduled runs","routines.cron.pausedPreview":"Paused — schedule preview","routines.cron.nextRuns":"Next runs","routines.cron.clockChanges":"Clock changes: skipped times shift forward; repeated times run once.","routines.cron.expression":"Cron expression","routines.cron.expressionHelp":"Minute · hour · day of month · month · day of week. For example, 0 9 1 * * runs at 9 am on the first of each month.","routines.cron.month":"Month","routines.cron.dayOfMonth":"Day of month","routines.cron.lastDay":"Last day","routines.cron.time":"Time","routines.cron.skippedMonths":"Months without this date are skipped. Choose Last day to always use the end of the month.","routines.cron.timeZone":"Time zone","routines.cron.chooseTime":"Choose a time for this routine.","browser.control.watching":"Watching","browser.control.botHas":"{name} has control","browser.control.elsewhere":"Held on another device","browser.control.taking":"Taking control…","browser.panel.tabs":"Browser tabs","browser.panel.navigation":"Navigation","browser.panel.loadingReload":"Loading, reload page","browser.panel.reloadShort":"Reload","browser.panel.searchOrAddress":"Search or enter address","browser.viewport.fill":"Fill the panel","browser.viewport.fullHd":"Full HD · 1920×1080","browser.viewport.desktop":"Desktop · 1280×800","browser.viewport.tablet":"Tablet · 820×1180","browser.viewport.phone":"Phone · 390×844","browser.viewport.title":"Page size","browser.extensions.title":"Extensions","browser.extensions.empty":"No extensions with a page to open in this browser.","browser.extensions.takeControl":"Take control to open an extension.","browser.zoom.out":"Zoom out","browser.zoom.in":"Zoom in","browser.zoom.reset":"Reset zoom","browser.pip.close":"Close the floating view","browser.pip.open":"Pop out (picture in picture)","browser.page.uploadFailed":"Could not send the files to the page: {error}","browser.page.label":"Browser page","browser.page.keysHint":"Your keys go to the page. Press Shift+Escape to return to the browser address bar.","browser.page.chooseFilesLabel":"Choose files for the page","browser.page.asksFiles":"The page asks for files.","browser.page.asksFile":"The page asks for a file.","browser.page.chooseFiles":"Choose files","browser.page.chooseFile":"Choose file","browser.dialog.label":"Browser dialog","browser.dialog.response":"Dialog response","browser.dialog.dismiss":"Dismiss","browser.dialog.accept":"Accept","browser.dialog.takeControl":"Take control to respond.","browser.notice.downloaded":"Downloaded {name}","browser.notice.copied":"The page copied text","browser.auth.label":"Sign in to this site","browser.auth.signIn":"Sign in","browser.auth.asks":"{origin} asks for “{realm}”","browser.auth.username":"Username","browser.select.label":"Choose an option","newBot.avatar.invalidType":"Choose a PNG, JPEG, GIF, or WebP image","newBot.avatar.tooLarge":"Choose an image smaller than 10 MiB","newBot.skillExists":"A skill with this name is already in the draft","newBot.avatar.chooseAgain":"Choose the avatar image again","newBot.avatar.storeFailed":"Could not store the avatar image","newBot.nameRequired":"Give the bot a name","newBot.approvalNotGranted":"The bot's requested approval level was not granted","newBot.threadApprovalNotGranted":"The initial thread's requested approval level was not granted","browser.panel.takeFailed":"Could not take control of the browser. Try again shortly.","browser.panel.viewDisconnected":"The browser view disconnected.","computer.err.pauseBrowser":"{app} could not pause this bot's browser safely","computer.err.confirmControl":"{app} could not confirm computer control","computer.err.releaseControl":"{app} could not release computer control","computer.err.browserStillPaused":"The computer was released, but the browser remains paused for safety","chat.conversationGone":"That conversation is no longer available.","vm.workspace.holdNotAcquired":"The Local VM control hold was not acquired","routines.cron.editToMove":"Edit this routine's schedule to change its cron timing.","teamImport.noTeam":"This file does not contain a team.","teamImport.unknownFormat":"This is not an Limix backup, BotMRR playbook or legacy team.","teamImport.teamVersion":"Team file version {version} is not supported.","teamImport.teamMissing":"This team file is missing its team definition.","teamImport.teamNoName":"This team does not have a name.","teamImport.teamNoMembers":"This team has no members.","teamImport.teamTooMany":"This team has too many members.","teamImport.memberInvalid":"Team member {number} is invalid.","teamImport.memberNoName":"Team member {number} does not have a name.","teamImport.markdownNoFrontmatter":"This Markdown is missing its BotMRR frontmatter.","teamImport.markdownBadYaml":"This Markdown has invalid YAML frontmatter.","teamImport.markdownNoBlueprint":"This Markdown is missing its BotMRR blueprint.","teamImport.markdownVersion":"This BotMRR Markdown version is not supported.","teamImport.libraryEmpty":"This file has no bots or preset bots to add. Its skills can be added from your organization's shelf.","teamImport.newer":"This file was made by a newer Limix Bot. Update the app, then import it again.","teamImport.playbookVersion":"BotMRR playbook version {version} is not supported.","teamImport.playbookMissing":"This playbook is missing its team definition.","teamImport.playbookNoName":"This playbook does not have a name.","teamImport.playbookNoBots":"This playbook has no bots.","teamImport.playbookTooMany":"This playbook has too many bots.","teamImport.botInvalid":"Bot {number} is invalid.","teamImport.botNoName":"Bot {number} does not have a name.","voice.error.clip":"The generated voice clip couldn't be played.","voice.error.macPlay":"This Mac could not play its selected voice.","voice.error.macStart":"This Mac could not start its selected voice.","voice.error.service":"the voice service returned {status}","voice.error.notReady":"Set up a voice provider in an agent profile on this computer, then pick a voice for the agent.","approvalMode.needsDesktopApp":"This approval change requires the packaged desktop app","approvalMode.levelNeedsDesktopApp":"This approval-level change requires the packaged desktop app","approvalMode.custom.name":"Custom approval","approvalMode.revokeFailed":"The cancelled {mode} grant could not be revoked: {error}","approvalMode.settingsNotSaved":"The approval level, memory setting, or model could not be saved, so this work was not started","task.threadGone":"That thread is no longer available","pair.unreachable":"could not reach the server ({error})","pair.intro.emailSent":"We emailed an 8-digit code to {email}. It works once and expires in ten minutes.","pair.intro.email":"Enter your email and we will send you a one-time code.","pair.intro.cloud":"To open the Cloud, choose {open} in the {app} app on your computer (Settings → {section}), or Use in your browser on your Plan page. Have a pairing code? Enter it below.","pair.intro.code":"Enter the pairing code from the server. It works once, for ten minutes.","pair.openingCloud":"Opening the Cloud…","pair.connectingTo":"Connecting to {name}…","pair.thisOpenMausBot":"this {app}","pair.version":"Version {version} on {platform}.","pair.expired":"This link has expired or was already used. In the {app} app on your computer, open Settings → {section} and choose {open}.","pair.alreadyConnected":"This browser is already connected.","pair.openApp":"Open the app","pair.emailCode":"Sign-in code from your email","pair.deviceLabel":"This device","pair.signingIn":"Signing in…","pair.sending":"Sending…","pair.signIn":"Sign in","pair.resend":"Send a new code","pair.useCode":"Have a pairing code instead?","pair.code":"Pairing code","pair.connecting":"Connecting…","pair.connect":"Connect","pair.useEmail":"Sign in with email","pair.browser.title":"Signing in to {owner}’s Cloud","pair.browser.teamTitle":"Open {team} as {owner}","pair.browser.notYou":"Not your email? Close this tab.","pair.continue":"Continue","pair.fromLink":"From the link","pair.onPhone":"On your phone?","pair.openInApp":"Open in the {app} app","pair.noCode":"No code? On the server, run","pair.invitedByEmail":"Invited by email?","pair.notEncrypted":"This connection isn't encrypted.","pairing.worksOnceUntil":"Works once, until {time}","readyBots.bot.assistant.title":"General assistant","readyBots.bot.assistant.description":"Answers questions, drafts text, and takes on whatever you hand it.","readyBots.bot.assistant.try":"Plan my week from this list of to-dos","readyBots.bot.inbox.title":"Email triage","readyBots.bot.inbox.description":"Reads your inbox, flags what needs you, and drafts replies for approval.","readyBots.bot.inbox.try":"What in my inbox needs me today?","readyBots.bot.research.title":"Researcher","readyBots.bot.research.description":"Digs through the web and your files, and comes back with a sourced brief.","readyBots.bot.research.try":"What changed in EU AI rules this year? Sources please","readyBots.bot.coder.title":"Coding partner","readyBots.bot.coder.description":"Works inside a project folder: reads, edits, runs tests, explains changes.","readyBots.bot.coder.try":"Find why the tests fail and fix it","readyBots.bot.community.title":"Community monitor","readyBots.bot.community.description":"Watches Discord, Slack, or forums and reports what matters, on a schedule.","readyBots.bot.community.try":"What did the community ask about since yesterday?","readyBots.bot.ops.title":"Operations","readyBots.bot.ops.description":"Keeps calendars, tasks, and follow-ups moving; nudges you before things slip.","readyBots.bot.ops.try":"What's on today, and what's overdue?","readyBots.bot.writer.title":"Writer","readyBots.bot.writer.description":"Drafts and edits posts, emails, and docs in your voice, from a rough note to a final draft.","readyBots.bot.writer.try":"Turn these notes into a LinkedIn post","readyBots.bot.analyst.title":"Data analyst","readyBots.bot.analyst.description":"Answers questions about spreadsheets and CSVs with numbers, tables, and charts you can check.","readyBots.bot.analyst.try":"What are the top 10 customers by revenue in this CSV?","readyBots.bot.meeting-notes.title":"Meeting notes","readyBots.bot.meeting-notes.description":"Turns transcripts and rough notes into decisions, owners, and follow-ups.","readyBots.bot.meeting-notes.try":"Summarise this transcript into decisions and action items","readyBots.bot.travel.title":"Travel planner","readyBots.bot.travel.description":"Plans trips day by day around your budget and pace, and keeps the details in one place.","readyBots.bot.travel.try":"Plan four relaxed days in Lisbon in May","readyBots.bot.study.title":"Study buddy","readyBots.bot.study.description":"Explains topics step by step, quizzes you, and tracks what you still need to review.","readyBots.bot.study.try":"Explain recursion like I'm new to programming","readyBots.bot.humanizer.title":"Humanizer","readyBots.bot.humanizer.description":"Rewrites stiff or AI-sounding drafts so they read like you, and shows every change.","readyBots.bot.humanizer.try":"Make this email sound less robotic","readyBots.bot.design-critic.title":"Design critic","readyBots.bot.design-critic.description":"Gives a ranked critique of a screenshot or page: hierarchy, type, colour, copy, and accessibility.","readyBots.bot.design-critic.try":"Critique this landing page screenshot","readyBots.bot.call-coach.title":"Sales call coach","readyBots.bot.call-coach.description":"Scores a sales call from its transcript and suggests the three changes that would help most.","readyBots.bot.call-coach.try":"Score this discovery call transcript","readyBots.bot.plant-care.title":"Plant care log","readyBots.bot.plant-care.description":"Keeps a private journal of your houseplants and reminds you when they need water or care.","readyBots.bot.plant-care.try":"Add my monstera: living room, bright indirect light","activity.outcome.ran":"Ran","activity.outcome.failed":"Failed","activity.outcome.running":"Running","activity.outcome.allowed":"Allowed","activity.outcome.denied":"Denied","activity.outcome.waiting":"Needs you","activity.day.date":"{weekday} {day} {month}","activity.day.dateYear":"{date} {year}","activity.tool.ranCommand":"Ran a command","activity.tool.readFile":"Read a file","activity.tool.editedFile":"Edited a file","activity.tool.editedFiles":"Edited files","activity.tool.wroteFile":"Wrote a file","activity.tool.searchedFiles":"Searched files","activity.tool.listedFolder":"Listed a folder","activity.tool.searchedWeb":"Searched the web","activity.tool.fetchedPage":"Fetched a page","activity.tool.usedSkill":"Used a skill","activity.tool.ranSubagent":"Ran a subagent","activity.tool.askedQuestion":"Asked you a question","activity.tool.updatedTasks":"Updated its task list","activity.tool.searchedX":"Searched X","activity.tool.readXPosts":"Read X posts","activity.tool.readXPost":"Read an X post","activity.tool.lookedUpXProfile":"Looked up an X profile","activity.tool.searchedResearch":"Searched research tools","activity.tool.readResearchTool":"Read a research tool","activity.tool.ranResearchCall":"Ran a research call","activity.tool.lookedUpPeople":"Looked up people","activity.tool.lookedUpCompanies":"Looked up companies","activity.tool.lookedUpFunding":"Looked up funding","activity.tool.readNews":"Read the news","activity.tool.lookedUpSocial":"Looked up social data","activity.tool.lookedUpTrends":"Looked up trends","activity.tool.lookedUpSeo":"Looked up SEO data","activity.tool.generatedMedia":"Generated media","activity.tool.team.addMcpServer":"Add mcp server","activity.tool.team.askBot":"Ask bot","activity.tool.team.assignmentStatus":"Assignment status","activity.tool.team.attachFile":"Attach file","activity.tool.team.closeThread":"Close thread","activity.tool.team.coordinateBots":"Coordinate bots","activity.tool.team.createBot":"Create bot","activity.tool.team.createRoom":"Create room","activity.tool.team.createTrigger":"Create trigger","activity.tool.team.delegateBot":"Delegate bot","activity.tool.team.fillLogin":"Fill login","activity.tool.team.findTool":"Find tool","activity.tool.team.generateImage":"Generate image","activity.tool.team.listBots":"List bots","activity.tool.team.listRoomTargets":"List room targets","activity.tool.team.listRooms":"List rooms","activity.tool.team.listSharedComputers":"List shared computers","activity.tool.team.listTeamLibrary":"List team library","activity.tool.team.listModels":"List models","activity.tool.team.listTeamSetup":"List team setup","activity.tool.team.listThreads":"List threads","activity.tool.team.listTriggerEvents":"List trigger events","activity.tool.team.listTriggers":"List triggers","activity.tool.team.manageRoom":"Manage room","activity.tool.team.manageTrigger":"Manage trigger","activity.tool.team.mcpServer":"Mcp server","activity.tool.team.memoryLog":"Memory log","activity.tool.team.memoryUpdate":"Memory update","activity.tool.team.postToRoom":"Post to room","activity.tool.team.proposeBotDeletion":"Propose bot deletion","activity.tool.team.proposeModel":"Propose model","activity.tool.team.proposeProfile":"Propose profile","activity.tool.team.proposeTeamMemory":"Propose team memory","activity.tool.team.proposeTeamSetup":"Propose team setup","activity.tool.team.publishPage":"Publish page","activity.tool.team.raiseEscalation":"Raise escalation","activity.tool.team.requestCredential":"Request credential","activity.tool.team.requestSignIn":"Request sign in","activity.tool.team.retryThread":"Retry thread","activity.tool.team.selectComputer":"Select computer","activity.tool.team.send":"Send","activity.tool.team.sendVoiceNote":"Send voice note","activity.tool.team.sessionRead":"Session read","activity.tool.team.sessionSearch":"Session search","activity.tool.team.sharedComputer":"Shared computer","activity.tool.team.showHtml":"Show html","activity.tool.team.showWidget":"Show widget","activity.tool.team.skillManage":"Skill manage","activity.tool.team.skillsList":"Skills list","activity.tool.team.startThread":"Start thread","activity.tool.team.burst":"Burst","activity.tool.team.toolResultRead":"Tool result read","activity.tool.team.unpublishPage":"Unpublish page","activity.tool.team.updateHtml":"Update html","activity.tool.team.updateWidget":"Update widget","activity.tool.team.usageLimits":"Usage limits","activity.tool.team.useTool":"Use tool","activity.tool.team.vmExec":"Vm exec","activity.tool.team.xSearch":"X search","activity.tool.team.xUserPosts":"X user posts","activity.tool.team.xPost":"X post","activity.tool.team.xProfile":"X profile","activity.tool.team.researchSearch":"Research search","activity.tool.team.researchEndpoint":"Research endpoint","activity.tool.team.researchCall":"Research call","activity.tool.computer.click":"Click","activity.tool.computer.computerExec":"Computer exec","activity.tool.computer.drag":"Drag","activity.tool.computer.exec":"Exec","activity.tool.computer.getScreenSize":"Get screen size","activity.tool.computer.keyPress":"Key press","activity.tool.computer.move":"Move","activity.tool.computer.openUrl":"Open url","activity.tool.computer.screenshot":"Screenshot","activity.tool.computer.scroll":"Scroll","activity.tool.computer.typeText":"Type text","activity.tool.computer.waitFor":"Wait for","activity.app.team":"Team","activity.app.computer":"Computer","activity.app.research":"Research","activity.app.email":"Email","canvas.status.waiting":"Waiting for you","canvas.status.noSignal":"No signal","canvas.status.working":"Working","canvas.status.ready":"Ready","skins.tagline.midnight":"The original. Cool and dark.","skins.tagline.atelier":"Daylight on paper, warm and quiet.","skins.tagline.foundry":"Night shift. Dark, warm, lit in brass.","skins.tagline.lagoon":"Cool daylight. Porcelain and deep teal.","skins.tagline.graphite":"Quiet charcoal and softened steel blue.","skins.tagline.linen":"Clean daylight with a restrained navy accent.","skins.tagline.dusk":"Muted plum after dark, calm and low-key.","skins.tagline.daylight":"Midnight in reverse. Near-white, ink-black bubbles.","skins.tagline.meadow":"Fresh white with a calm green. The Limix Bot look.","skins.tagline.pop":"Cream paper, thick ink outlines, hard shadows. Chunky and cheerful.","skins.tagline.halloween":"Plum after dark, lit in pumpkin orange. Bats optional.","skins.tagline.diwali":"Indigo night, lit in marigold and diya gold. Fireworks optional.","skins.tagline.aurora":"Near-black, crossed by a band of green light. Glass on top.","automations.calendar.cronMove":"Open this automation to change its repeating schedule.","automations.calendar.moveSeries":"Move every time it repeats?","automations.address.copyAddressFailed":"Couldn't copy the address","botOverview.undoFailed":"Couldn't undo that change.","botOverview.restoreSoul.title":"Restore previous instructions?","botOverview.restoreSoul.body":"Replaces current SOUL with the version before this change. Current version stays in History.","botOverview.restoreSoul.confirm":"Restore instructions","approval.status.botDeleted":"Bot deleted","approval.status.teamApplied":"Team setup applied","sidebar.attention.waiting":"{count} waiting for you","sidebar.attention.unread":"{count} unread","sidebar.attention.working":"{count} working","browser.page.uploadRefused":"The upload was refused.","phone.setup.pairingOpenFailed":"Device pairing did not open. Open {advanced}, confirm {remote} is on, then try again.","phone.setup.startFailed":"{remote} could not start. Open {advanced}, then try turning {remote} on again.","newBot.warning.chiefOfStaff":"Review this bot's Chief of Staff setting: {error}","newBot.warning.routine":"Could not activate a routine: {error}","pair.browser.signInFailed":"This sign-in link has expired or was already used. On My Cloud, choose “Use in your browser” again.","pair.serviceTrust":"This server does not treat this computer as its owner. Sign in or pair this browser to continue.","serverError.pair.codeWrong":"pairing code is wrong or has expired; create a new one on the server","serverError.pair.tooMany":"Too many wrong codes. Try again at {time}.","serverError.pair.linkExpired":"this sign-in link has expired or was already used","serverError.pair.emailCode":"That's a sign-in code from an email. Pairing needs a 12-character code like 7KQ2-M9XD-H4TP.","serverError.pair.oldCode":"That's a code from an older Limix Bot. Make a new one on the other computer: Phone & devices → Pair a device.","serverError.pair.scriptKey":"That's a script key. Pairing needs a pairing code.","serverError.pair.notACode":"That isn't a pairing code. Pairing needs a 12-character code like 7KQ2-M9XD-H4TP.","serverError.email.invalid":"enter a valid email address","serverError.email.codeFormat":"enter the 8-digit code from the email","serverError.email.tooMany":"too many attempts; wait a minute and request a new code","serverError.email.codeWrong":"that code is wrong or has expired; request a new one","serverError.email.notAllowed":"this email is not on this server's sign-in list; ask the server's owner to add it","serverError.email.unavailable":"the sign-in service could not be reached ({detail}); try again in a moment","serverError.email.notSetUp":"email sign-in is not set up on this server; use a pairing code","serverError.signIn.tooMany":"too many failed sign-in attempts from your address; try again in {seconds}s","serverError.cloud.personal":"My Cloud is personal: only your own devices can connect.","serverError.model.botBusy":"the bot is working — stop it before changing models","serverError.model.accountUpdating":"this provider account is being updated — try again shortly","serverError.chat.busyEdit":"the thread is working — stop it before editing","serverError.chat.busyVersion":"the thread is working — stop it before switching versions","serverError.chat.busyFresh":"the thread is working — stop it before starting fresh","serverError.chat.questionGone":"this question is no longer available","serverError.chat.askerGone":"the bot that asked this question is no longer available","serverError.chat.routineElsewhere":"this bot is running a routine in another conversation","serverError.chat.busyInRoom":"this bot is working in channel {room}","serverError.chat.answerSent":"That answer is already on its way.","serverError.chat.savingCredential":"this task is securely saving a credential — try again when it finishes","serverError.team.personalMove":"Moving a computer's bots, chats and logins goes to My Cloud only. Nothing personal comes into {team}.","serverError.team.memberLogin":"On {team} only an admin can save a login, and it is then used by every bot in {team}.","serverError.team.signInFirst":"Sign in to {team} in the app first.","serverError.team.ownAppsNeedKey":"Your own apps can't be connected on {team} yet. Ask an admin to add the team's Composio key.","serverError.chat.ownerOrAdmin":"Only the owner or an admin can do that.","serverError.routine.checks":"Choose checks from calendar, mail and runs","serverError.routine.checksRepeat":"Checks need a bot routine that repeats","serverError.routine.access":"Choose read-and-draft access or none","serverError.routine.deliver":"Only a bot routine can deliver to the brief","serverError.department.chiefOnlyExtra":"Only a Chief may manage existing additional departments","serverError.department.confirmExtra":"Confirm additional department access (acknowledgePeerScope)","serverError.team.sessionEnded":"Your session ended. Sign in again before creating a pairing code.","serverError.team.noSuchPhone":"no such phone","serverError.page.roomOrClosed":"Pages from a room or a closed conversation can't be published here.","serverError.page.notHere":"That page is not in this conversation.","serverError.page.fromMcp":"That app came from an MCP server; only a page a bot made can be published.","serverError.page.versionGone":"That version of the page is no longer kept.","serverError.page.notStored":"This app's page is not stored on this computer.","serverError.department.notFound":"No such department","serverError.department.missing":"no such department","serverError.department.nameLength":"Department name must be 1 to 60 characters","serverError.department.nameRule":"Department name must be 1 to 60 characters without control characters","serverError.department.unassignComputer":"Unassign this department's computer before deleting the department","serverError.department.oneChief":"A department can have only one Chief of Staff. Choose one Chief or use a department without one.","serverError.department.memoryChanged":"This department memory changed. Reload it before saving or approving.","serverError.department.shareTooLarge":"This department is too large to share (4 MB). Leave out pictures, starter notes or some skills and try again.","serverError.department.shareSkillClash":'Two bots in this department have different skills named "{skill}". Leave that skill out and try again.',"serverError.department.shareNoBots":"Add a bot to this department before sharing it.","serverError.department.shareSkillLimit":"A department can share at most {count} skills. Choose fewer skills and try again.","serverError.department.shareBotSkillLimit":"{name} has more than {count} skills. Choose fewer skills and try again.","serverError.department.createFirst":"Create the named department before making a Chief responsible for it","serverError.department.stopBots":"Stop running bots before granting access to another department, or use the desktop app or a paired Full-access session.","serverError.share.version":"Use a version like 1.2.3.","serverError.preset.empty":"Your New bot defaults are empty. Give them a name, instructions, skills or starter notes first.","serverError.preset.tooLarge":"This preset is too large to share (4 MB). Leave out starter notes or some skills and try again.","app.strip.incomplete":"The app's page did not arrive whole.","app.blocked.signedOut":"Sign in to {server} again","app.blocked.serverRemoved":"{server} is no longer connected","app.blocked.serverDisabled":"{server} is switched off in Settings","app.blocked.appsOff":"Apps from {server} are switched off in Settings","app.blocked.tooLarge":"This app is too large to store","app.blocked.unavailable":"{server} did not send this app's page","app.blocked.thisServer":"This app's server","native.menu.server":"Server","native.menu.backToMyCloud":"Back to My Cloud","native.menu.addFromLink":"Add Server from Copied Pairing Link…","native.menu.forgetNamed":"Forget “{name}”","native.menu.forgetServer":"Forget Server","native.menu.addCloud":"Add a Cloud…","native.menu.orgSignIn":"Sign in with your organization…","native.menu.connect":"Connect to a server…","native.menu.newLocal":"New workspace on this computer…","native.menu.preferences":"Preferences…","native.role.about":"About {app}","native.role.hide":"Hide {app}","native.role.hideOthers":"Hide Others","native.role.unhide":"Show All","native.role.quitApp":"Quit {app}","native.role.file":"File","native.role.edit":"Edit","native.role.view":"View","native.role.window":"Window","native.role.closeWindow":"Close Window","native.role.close":"Close","native.role.exit":"Exit","native.role.quit":"Quit","native.role.undo":"Undo","native.role.redo":"Redo","native.role.cut":"Cut","native.role.copy":"Copy","native.role.paste":"Paste","native.role.pasteAndMatchStyle":"Paste and Match Style","native.role.delete":"Delete","native.role.selectAll":"Select All","native.role.substitutions":"Substitutions","native.role.showSubstitutions":"Show Substitutions","native.role.smartQuotes":"Smart Quotes","native.role.smartDashes":"Smart Dashes","native.role.textReplacement":"Text Replacement","native.role.speech":"Speech","native.role.startSpeaking":"Start Speaking","native.role.stopSpeaking":"Stop Speaking","native.role.reload":"Reload","native.role.forceReload":"Force Reload","native.role.toggleDevTools":"Toggle Developer Tools","native.role.actualSize":"Actual Size","native.role.zoomIn":"Zoom In","native.role.zoomOut":"Zoom Out","native.role.toggleFullScreen":"Toggle Full Screen","native.role.minimize":"Minimize","native.role.zoom":"Zoom","native.role.front":"Bring All to Front","native.context.copyLink":"Copy Link","native.title.connected":"Limix Bot — Connected to: {server} ({host})","native.title.hosted":"Limix Bot — Hosted: {name} ({host})","native.switcher.addCloudSub":"Keeps your bots running 24/7","native.switcher.forgetNamed":"Forget “{name}”…","native.switcher.andMore":"{names} and {count} more","native.places.cloudWith":"Your bots live on {cloud}. This computer has its own: {names}.","native.places.cloudNone":"Your bots live on {cloud}. This computer has none of its own.","native.places.hereWith":"These bots live on this computer: {names}. {cloud} has its own.","native.places.hereNone":"This computer has no bots of its own yet. {cloud} has its own.","native.cloud.sub.trialUntil":"Free trial until {date}","native.cloud.sub.sleeps":"Sleeps when idle","native.cloud.sub.alwaysOn":"Always on","native.cloud.sub.stopped":"Stopped","native.cloud.ready.title":"{name} is ready","native.cloud.ready.body":"Click to open it. It keeps your bots running 24/7.","native.cloud.unreachable.host":"The server My Cloud runs on is being restarted by our hosting provider. My Cloud and its files are safe, and it comes back on its own, usually within about 20 minutes.","native.cloud.unreachable.noAnswer":"My Cloud hasn't answered for a few minutes. Nothing was lost, and we've been told.","native.cloud.notReady":"My Cloud is not ready to connect yet.","native.cloud.keepUnderWay":"This computer's bots are on their way back. Try again once they're here.","native.cloud.keepNoCloud":"This computer has no My Cloud to keep its bots from.","native.splash.openingCloud":"Opening My Cloud…","native.splash.wakingCloud":"Waking My Cloud…","native.splash.openingNamed":"Opening {name}…","native.splash.wakingNamed":"Waking {name}…","native.common.close":"Close","native.tray.open":"Open Limix Bot","native.tray.quit":"Quit Limix Bot","native.lendTray.computer":"computer","native.lend.server":"Server: {origin}","native.lend.readWrite":"Read and write: {path}","native.lend.readOnly":"Read only: {path}","native.lend.wholeHome":"(your whole home folder)","native.lend.terminalOn":"Terminal: UNRESTRICTED commands as your user. Can access files outside the folders above, including credentials.","native.lend.terminalOff":"Terminal: off","native.lend.computerOn":"Computer control: can view your screen and operate logged-in apps. Can access information outside the folders above.","native.lend.computerOff":"Computer control: off","native.lend.footer":"Shared content is sent to this server and may reach its model provider. Bots on this server can use these permissions until you revoke them. Closing the desktop stops access.","native.lend.allow.title":"Allow computer access for {name}?","native.lend.allow.button":"Allow access","native.lend.home.title":"Share your whole home folder?","native.lend.home.detail":"Everything in your home folder becomes readable by the bots you allow. The places that hold keys, passwords and browser data, like .ssh and your browsers' profiles, always stay private.","native.lend.home.button":"Share home folder","native.common.cancel":"Cancel","native.badge.one":"{count} unread conversation","native.badge.many":"{count} unread conversations","native.badge.none":"No unread conversations","native.dialog.serverStopped.title":"The bot server stopped","native.dialog.serverStopped.body":`Automatic recovery could not restart the background server. Quit and reopen Limix Bot to try again. Interrupted chat turns were not resent.
|
|
22
22
|
|
|
23
|
-
Server log: {log}`,"native.dialog.serverFailed.title":"Couldn't start the bot server","native.dialog.serverFailed.portsTaken":"Every Limix Bot port answered health checks from another process — likely a second copy of the app, or another program on ports 8799–28799. Quit that program, then quit and reopen Limix Bot.","native.dialog.serverFailed.slow":"The background server didn't come up in time — this is usually slow startup, not a port conflict. Quit and reopen Limix Bot.","native.dialog.serverFailed.keepsHappening":"If it keeps happening, check {log}.","native.viewer.title":"Desktop unavailable","native.viewer.heading":"Couldn't open the live desktop","native.viewer.open":"Open in browser","native.viewer.fallbackTitle":"Live desktop","native.viewer.noResponse":"The viewer did not respond.","native.dialog.share.title":"Share this computer with {name}?","native.dialog.share.detail":"Let this server’s bots use folders and capabilities you choose while this desktop app is running. Nothing is shared unless you enable it. You can change this later in Settings → Servers.","native.dialog.share.choose":"Choose access","native.dialog.share.notNow":"Not now","native.lend.own.title":"Let {name} use this computer?","native.lend.own.detail":"Its bots can then see and use the apps on your screen while this app is open. In Settings → Servers you can also let them use folders you choose and run commands in a terminal. Turn it off there any time, or pause it from the Limix Bot icon's menu.","native.lend.own.allow":"Allow","native.lend.notOwnServer":"Only your own server can use this computer. Pair this app with it again as its owner.","native.dialog.updateServers.title":"Could not update servers","native.dialog.updateServers.saveFailed":"Could not save server connections on this computer. Please try again.","native.dialog.switchEnv.title":"Could not switch environments","native.dialog.switchEnv.body":"Limix Bot could not switch to that environment. The app log has the details.","native.dialog.org.disconnect":"Disconnect and restart locally","native.dialog.org.useHere":"Use this computer","native.dialog.org.msgCompanion":"Disconnect from {name} to sign in locally?","native.dialog.org.msgHosted":"Leave {name} and sign in on this computer?","native.dialog.org.detail":"Organization sign-in connects company models to this computer. {consequence} No remote bots, conversations or provider accounts are moved or deleted.","native.dialog.org.consCompanion":"This disconnects desktop companion access and restarts the app. You can pair again later.","native.dialog.org.consHosted":"The hosted connection stays saved and can be selected again from the Server menu.","native.dialog.connectFailed.title":"Could not connect to the server","native.dialog.connectFailed.detail":"You can also choose Connect to a server to enter an address in Settings.","native.dialog.connect.button":"Connect","native.dialog.connect.title":"Connect to {host}?","native.dialog.connect.withCode":"The pairing code in the link is used once, then this app stays signed in to that server.","native.dialog.connect.noCode":"The link has no pairing code; the server will ask for one.","native.dialog.resetSavedKeys.title":"Reset saved keys?","native.dialog.resetSavedKeys.detail":"{app} can't read its saved keys here, so it can't use them or save new ones. Resetting puts the unreadable file aside and restarts {app}. Then enter your keys again and reconnect your apps.","native.dialog.resetSavedKeys.button":"Reset and restart","native.dialog.resetSavedKeys.failed":"Couldn't reset saved keys","native.connect.empty":"Enter the server's address or paste its link.","native.connect.codeOnly":"That's a pairing code. Also enter the server's address, like {example}.","native.connect.emailCode":"That's a sign-in code from an email. Pairing needs a 12-character code like 7KQ2-M9XD-H4TP.","native.connect.oldCode":"That 6-digit code pairs a phone with a desktop app, and one desktop app can't connect to another: share that computer with My Cloud, or use My Cloud. A server's code has 12 characters like 7KQ2-M9XD-H4TP: on the server, run limixbot pair.","native.connect.scriptKey":"That's a script key. Pairing needs a pairing code.","native.connect.notACode":"That isn't a pairing code. Pairing needs a 12-character code like 7KQ2-M9XD-H4TP.","native.connect.publicHttp":"http://{host} is on the open internet and isn't encrypted, so others could read your chats. Use its https address, or put HTTPS in front (cloudflared, Caddy or Tailscale).","native.connect.phoneLink":"That link is for the Limix Bot phone app. Paste the link the server printed, or its address.","native.connect.notAnAddress":"That isn't a server address. Paste the link the server printed, or type its address, like {example}.","native.connect.unreachable":"Can't reach {host}. Check the server is running and reachable from this computer.","native.connect.dns":"{host} doesn't exist yet. Check the spelling, or wait for the DNS record.","native.connect.certificate":"{host}'s certificate isn't valid yet. A new server can take a minute to get one.","native.connect.notMausBot":"That address answers, but it isn't a Limix Bot server.","native.connect.desktopApp":"{host} is a Limix Bot desktop app, and one desktop app can't connect to another. To use that computer from here, share it with My Cloud from its own app, or use My Cloud.","native.connect.desktopAppTailnet":"{host} is a Limix Bot desktop app on your tailnet. To open it from here, turn on Tailscale and Your other computers in its Settings → Phone & devices, then use the address shown there.","native.connect.loopback":"This points at this computer ({host}), not at the server. Use the server's own address.","native.connect.localNetwork":"Can't reach {host}. On a Mac, turn on Limix Bot in System Settings → Privacy & Security → Local Network, then try again. Also check that the server is running on this network.","native.connect.tailscaleOff":"{host} is on a Tailscale network, and Tailscale isn't connected on this computer. Open Tailscale here, sign in to the same tailnet, then try again.","native.connect.otherTailnet":"{host} isn't on this computer's tailnet. Sign in to Tailscale here with the account that computer uses, keep MagicDNS on, then try again.","native.connect.tailnetBlocked":"macOS blocked the connection to {host}. Allow Limix Bot in System Settings → Privacy & Security → Local Network (Tailscale addresses count as local), then try again. If it's on already, turn it off and on again.","native.connect.tailnetSilent":"{host} is on your tailnet but didn't answer. Check that the computer is awake with Tailscale connected, and that Limix Bot is shared on Tailscale there: in its Settings → Phone & devices, or with limixbot serve --tailscale.","native.dialog.mic.allow":"Allow","native.dialog.mic.deny":"Don’t Allow","native.dialog.mic.title":"Allow “{name}” to use the microphone?","native.dialog.mic.detail":"{host} wants to hear you for a Live call. Allow only a server you trust; this app remembers your answer for this server until you forget it.","native.dialog.forgotten.title":"Connection forgotten; server sign-out could not be confirmed","native.dialog.forgotten.detail":"Computer sharing is stopped. Revoke this desktop’s session on that server when it is reachable again.","native.dialog.unreachable.title":"{name} is not reachable","native.dialog.unreachable.detail":"{reason} Showing the local server instead; choose it again from the Server menu when it is back.","native.dialog.removeServer.button":"Remove","native.dialog.removeServer.title":"Remove {name} from this app?","native.dialog.removeServer.detail":"The server keeps running and your bots stay there. You'll need a new pairing code to add it back.","native.picker.workingFolder":"Choose a working folder","native.picker.shareFolder":"Choose a folder or drive to share","native.picker.diagnostics":"Export diagnostics","native.picker.textFilter":"Text","native.picker.saveWhere":"Where do you want to save it?","native.picker.save":"Save","native.common.ok":"OK","native.boot.folderMissing.title":"The environment's folder is missing","native.boot.folderMissing.body":"{folder} is not there anymore, so Limix Bot came up on this computer's default data folder instead. Restore or remount that folder, then choose the environment again from the Server menu.","native.boot.unsafe.title":"Limix Bot could not start safely","native.boot.unsafe.fallback":"Another process is using this Limix Bot data folder.","native.boot.unhealthy.title":"The environment was unhealthy","native.boot.unhealthy.body":"Limix Bot could not start on {folder} and came up on this computer's default data folder instead. Choose that environment again from the Server menu once it is available.","native.boot.failed.title":"Limix Bot could not start","native.boot.failed.body":"Limix Bot could not start on {folder} or on this computer's default data folder. Check that both folders are readable, then start the app again.","native.teamRole.owner":"Super admin","native.teamRole.admin":"Admin","native.teamRole.member":"User","brief.row.unpreparedMeetings":"I didn't prepare meetings","brief.row.unpreparedNote":"That needs a Claude model as {name}'s AI. Your email is still sorted, and your day, reminders and clashes show here.","brief.inbox.ask":"Asks you to {ask}.","brief.inbox.waiting.ask":"Waiting on your reply · Asks you to {ask}.","brief.inbox.due":"due {deadline}.","brief.inbox.waiting.due":"Waiting on your reply · due {deadline}.","brief.inbox.amount":"about {amount}.","brief.inbox.waiting.amount":"Waiting on your reply · about {amount}.","brief.inbox.askDue":"Asks you to {ask}, due {deadline}.","brief.inbox.waiting.askDue":"Waiting on your reply · Asks you to {ask}, due {deadline}.","brief.inbox.askAmount":"Asks you to {ask}, about {amount}.","brief.inbox.waiting.askAmount":"Waiting on your reply · Asks you to {ask}, about {amount}.","brief.inbox.dueAmount":"due {deadline}, about {amount}.","brief.inbox.waiting.dueAmount":"Waiting on your reply · due {deadline}, about {amount}.","brief.inbox.askDueAmount":"Asks you to {ask}, due {deadline}, about {amount}.","brief.inbox.waiting.askDueAmount":"Waiting on your reply · Asks you to {ask}, due {deadline}, about {amount}.","chat.notice.phone.notOwner":"not the owner's own turn","chat.notice.phone.noPhone":"no phone paired with its apps allowed","chat.notice.phone.allowed":"allowed {tool}","chat.notice.phone.denied.calendar":"Calendar is not allowed on the phone","chat.notice.phone.denied.reminders":"Reminders is not allowed on the phone","chat.notice.phone.denied.contacts":"Contacts is not allowed on the phone","chat.notice.phone.denied.location":"Location is not allowed on the phone","chat.notice.phone.denied.home":"Home is not allowed on the phone","chat.notice.phone.denied.messages":"Messages is not allowed on the phone","chat.notice.phone.write.PHONE_CREATE_EVENT":"Create event on {phone}","chat.notice.phone.write.PHONE_UPDATE_EVENT":"Update event on {phone}","chat.notice.phone.write.PHONE_DELETE_EVENT":"Delete event on {phone}","chat.notice.phone.write.PHONE_RESPOND_TO_INVITE":"Respond to invite on {phone}","chat.notice.phone.write.PHONE_CREATE_REMINDER":"Create reminder on {phone}","chat.notice.phone.write.PHONE_UPDATE_REMINDER":"Update reminder on {phone}","chat.notice.phone.write.PHONE_COMPLETE_REMINDER":"Complete reminder on {phone}","chat.notice.phone.write.PHONE_DELETE_REMINDER":"Delete reminder on {phone}","chat.notice.phone.write.PHONE_CREATE_CONTACT":"Create contact on {phone}","chat.notice.phone.write.PHONE_UPDATE_CONTACT":"Update contact on {phone}","chat.notice.phone.write.PHONE_SET_ACCESSORY":"Set accessory on {phone}","chat.notice.phone.write.PHONE_RUN_SCENE":"Run scene on {phone}","chat.notice.phone.write.PHONE_SEND_MESSAGE":"Send message on {phone}","chat.notice.phone.write.PHONE_SEND_WHATSAPP":"Send whatsapp on {phone}","serverError.decider.accountRequired":"Add your Cloudflare account ID with the token.","serverError.decider.keyRequired":"Save a Cloudflare Workers AI, Jev or OpenRouter key before turning on fast decisions.","serverError.decider.jevRejected":"Jev rejected this key. Check it at typesafe.ai and paste it again.","serverError.decider.workersRejected":"Cloudflare rejected this token. Check that it has Workers AI permission and belongs to this account ID.","serverError.decider.routerRejected":"OpenRouter rejected this key. Check it at openrouter.ai/keys and paste it again.","serverError.decider.accountId":"A Cloudflare account ID is 32 letters and digits.","serverError.goal.alreadyRunning":"A goal is already running in this chat. Stop it before starting another.","serverError.chat.missingConversation":"no such conversation","serverError.department.chiefResponsibility":"Only a Chief of Staff can be made responsible for additional departments","serverError.department.confirmResponsibility":"Confirm which additional departments this Chief is responsible for (acknowledgePeerScope)","serverError.owner.teamOnly":"Only a team's bots report to someone.","serverError.owner.choose":"Choose someone in {team}.","serverError.owner.chiefConflict":"{name} already has a Chief of Staff. Take the crown off one of them first.","serverError.owner.unassignedChiefConflict":"That person already has a Chief of Staff. Take the crown off one of them first.","serverError.owner.departmentAdmin":"Only {team}'s admins can set who a department's bots report to.","serverError.owner.unavailable":"One or more bots are unavailable.","serverError.bot.missing":"no such bot","serverError.owner.personal":"{bot} is {name}'s own Limix Bot: it always reports to them.","serverError.owner.change":"Only {team}'s admins, or the person {bot} reports to, can change who it reports to.","serverError.helper.ownerOnly":"Only the owner can answer this.","serverError.helper.missing":"There is no such suggestion.","serverError.notification.missing":"no such notification","serverError.phone.list":"Only the owner or an admin can list phones.","serverError.phone.remove":"Only the owner or an admin can remove phones.","serverError.model.defaultAdmin":"forbidden: this session may change this thread's model, not the bot's default (needs the admin scope)","serverError.department.readFailed":"Saved departments and shared instructions could not be read; the existing file was left unchanged","serverError.department.duplicate":"A department with that name already exists","serverError.department.renameBusy":"Stop this department's active work before renaming it","serverError.department.emptyFirst":"Move all bots (including archived bots) and group chats out of this department first","serverError.department.deleteBusy":"Stop this department's active work before deleting it","serverError.department.generalChief":"General already has a Chief of Staff. Move or change this department's Chief before deleting it","chat.notice.acpRestarted":"{provider} was restarted because a session sharing its process ignored Stop","chat.notice.acpStopFailed":"{provider} ignored Stop and its process could not be ended","chat.notice.toolCount":"{provider} refused this turn because this model takes at most {limit} tools and this bot offers more, even with its tool lists trimmed, so nothing ran. Turn off some of this bot's apps or MCP servers, or switch the bot to another model.","chat.notice.toolCountUnknown":"{provider} refused this turn because this model takes at most a limited number of tools and this bot offers more, even with its tool lists trimmed, so nothing ran. Turn off some of this bot's apps or MCP servers, or switch the bot to another model.","chat.notice.goalRetry":"{name}'s turn did not settle ({why}) — retrying once.","chat.notice.part.providerFailed":"provider failed","chat.notice.part.dispatchFailed":"dispatch failed","chat.notice.part.goalStalled":"stalled","chat.notice.part.goalTimedOut":"timed out","chat.notice.goalWaiting":"{name} is finishing what it is doing. This goal will continue when it is free.","chat.notice.goalBusyOne":"{name} stayed busy for {minutes} minute","chat.notice.goalBusyMany":"{name} stayed busy for {minutes} minutes","chat.notice.goalBusyOneAgain":"{name} stayed busy for {minutes} minute — send the goal again when they are free.","chat.notice.goalBusyManyAgain":"{name} stayed busy for {minutes} minutes — send the goal again when they are free.","chat.notice.goalWorking":"{name} is working on turn {turn} of {max}.","chat.notice.goalEnded":"The goal run ended before the bot reported an outcome.","chat.notice.teammateWorking":"Stopped here — {name} is still working; open to stop it too","chat.notice.unknownTeammateWorking":"Stopped here — A teammate is still working; open to stop it too","model.agentDefault":"Agent default","chat.notice.approve":"Approve: {what}","native.decider.accountRequired":"Add your Cloudflare account ID with the token.","native.decider.jevRejected":"Jev rejected this key. Check it at typesafe.ai and paste it again.","native.decider.workersRejected":"Cloudflare rejected this token. Check that it has Workers AI permission and belongs to this account ID.","native.decider.routerRejected":"OpenRouter rejected this key. Check it at openrouter.ai/keys and paste it again.","serverError.decider.accountFormat":"decider.workersAiAccountId a Cloudflare account ID is 32 letters and digits","serverError.backup.recursiveLink":"Cannot back up a symbolic link to the folder that contains it: {path}","chat.notice.exportedGoal.working":"{before}[Goal: working]{content}","chat.notice.exportedGoal.completed":"{before}[Goal: completed]{content}","chat.notice.exportedGoal.needs-input":"{before}[Goal: needs-input]{content}","chat.notice.exportedGoal.blocked":"{before}[Goal: blocked]{content}","chat.notice.exportedGoal.limit-reached":"{before}[Goal: limit-reached]{content}","chat.notice.exportedGoal.paused":"{before}[Goal: paused]{content}","chat.notice.exportedGoal.stopped":"{before}[Goal: stopped]{content}","chat.notice.exportedGoal.failed":"{before}[Goal: failed]{content}","activity.tool.team.decide":"Decide","activity.tool.team.extract":"Extract","serverError.voice.utteranceTooLong":"voice utterances are limited to 500 characters","browser.panel.restore":"Restore size","browser.panel.maximize":"Maximize","brief.card.ideas":"Ideas","routines.server.part.failed":"a failure","native.menu.openAtLogin":"Open at Login","serverError.setup.noTools":"This bot's AI can't set it up by itself. Tell the bot what you'd like it to do instead.","serverError.setup.missingConversation":"There is no such conversation.","serverError.setup.stopOwner":"Only the person who pressed Set me up, or an owner or admin, can stop it.","serverError.setup.hasInstructions":"This bot already has instructions. To change its job, type /setup and what you'd like it to do.","serverError.setup.started":"This chat has already started. Type /setup and what you'd like this bot to do.","serverError.setup.someoneElse":"Someone else is setting this bot up.","serverError.approval.allThreads":"Finish this bot's approval change first. Every thread's provider must support this approval level.","serverError.approval.pending":"Finish this bot's pending approval change first","serverError.approval.provider":"Use the bot's provider on this thread before applying its approval level","serverError.engineCheck.timeout":"{name} didn't answer within {seconds} seconds.","chat.notice.acpEmpty":"{provider} finished without replying.","chat.notice.acpNoReason":"{provider} stopped without saying why.","chat.notice.acpMcpAppsFailed":"Connected apps couldn't be set up, so {provider} couldn't start this reply. Try again, or switch this bot to another AI.","chat.notice.acpMcpServerFailed":`The "{server}" MCP server couldn't be set up, so {provider} couldn't start this reply. Try again, or switch this bot to another AI.`,"chat.notice.stop.refusal":"{provider} refused to go on with this request (stop reason: {reason}). Try again, reword the request, or switch this bot to another AI.","chat.notice.stop.refusalGeneric":"The AI refused to go on with this request (stop reason: {reason}). Try again, reword the request, or switch this bot to another AI.","chat.notice.stop.maxTokens":"{provider}'s reply reached its maximum length before it finished (stop reason: {reason}). Ask it to continue, or ask for a shorter answer.","chat.notice.stop.maxTokensGeneric":"The AI's reply reached its maximum length before it finished (stop reason: {reason}). Ask it to continue, or ask for a shorter answer.","chat.notice.stop.maxRequests":"The turn made as many model requests as one turn may before it finished (stop reason: {reason}). Ask it to carry on from where it stopped, or split the task.","chat.notice.unaskedStop":`The AI's request was cut off before it finished, and nobody stopped it (it said only "{said}"). Send the message again to try once more.`,"chat.notice.piSessionSlow":"Pi is taking longer than usual to start this conversation's session. The turn goes on when Pi answers. Press Stop to cancel it.","chat.notice.unreadMessage":"This turn ended before the model read a message sent while it ran. Send that message again.","chat.notice.codexUnsupportedOne":`Codex could not run the tool {tools} ("unsupported call"): the AI provider sent the call back without the tool's app name, so it never reached the tool. Pick a model for this bot whose provider handles tool calls fully.`,"chat.notice.codexUnsupportedMany":`Codex could not run the tools {tools} ("unsupported call"): the AI provider sent the call back without the tool's app name, so it never reached the tool. Pick a model for this bot whose provider handles tool calls fully.`,"chat.notice.codexUnsupportedMore":`Codex could not run the tools {tools} and {count} more ("unsupported call"): the AI provider sent the call back without the tool's app name, so it never reached the tool. Pick a model for this bot whose provider handles tool calls fully.`,"native.approval.allThreads":"Finish this bot's approval change first. Every thread's provider must support this approval level.","native.approval.pending":"Finish this bot's pending approval change first","native.approval.provider":"Use the bot's provider on this thread before applying its approval level","native.lend.chooseCapability":"Choose at least one folder, apps and screen, the internet connection, your Chrome, or the terminal.","native.update.packageMissing":"The downloaded package is no longer available. Try the update again.","native.update.noChecksum":"The update feed gave no checksum to verify the package against.","native.update.noPkexec":"pkexec is not installed.","native.update.promptClosed":"The password prompt was closed.","native.update.noAdmin":"This session could not ask for administrator rights.","native.update.checksumMismatch":"The downloaded update did not match its checksum. Check again to download it fresh.","native.update.installTimedOut":"The install took too long.","native.update.installFailed":"The install did not finish: {reason}","native.update.checkFailed":"Couldn't check for updates. {error}","native.update.installing":"Installing the update. Enter your password if asked.","native.update.installFailedPlain":"The update could not be installed.","mcp.check.unauthorized":"unauthorized","activity.tool.team.messagePerson":"Message person","activity.tool.team.reportBug":"Report bug","browser.control.held":"{name} is paused for you","native.lendTray.and":" and ","native.lendTray.clouds":"{count} Clouds","native.lendTray.pausedLine":"Paused: {clouds} can't use this {device}","native.lendTray.paused":"Paused","native.lendTray.usingMany":"{clouds} are using this {device}","native.lendTray.usingOne":"{clouds} is using this {device}","native.lendTray.canUse":"{clouds} can use this {device}","native.lendTray.problem":"{cloud} can't use this {device}: {why}","native.lendTray.problemNoticeTitle":"{cloud} can't use this {device}","native.lendTray.myCloud":"My Cloud","native.lendTray.whySignIn":"this app's sign-in to it ended. Open it from this app to sign in again.","native.lendTray.whyMoved":"its address changed. Open it from this app to start lending again.","native.lendTray.whyAccount":"you're signed in with a different account now. Sign in with the one you lent it from to keep lending.","native.lendTray.whyNoServer":"this app has no saved place for it yet. Open My Cloud from this app once.","native.lendTray.whyUnreachable":"this app can't reach it. Check the internet connection, and update Limix Bot if it's out of date.","native.lendTray.waiting":"Waiting for {clouds} to accept this {device}","routines.event.automation":"Automation","routines.event.cronMoveHint":"Open this automation to change its repeating schedule and time zone.","routines.event.resize":"Resize event","routines.event.resizeSeries":"Resize this entire recurring series?","chat.mermaid.failed":"Diagram could not be rendered: {error}","pair.myCloud":"My Cloud","pair.team.open":"Open {team} with Limix Bot Cloud","pair.team.openHint":"You sign in there with your email, then come straight back here.","pair.signInTo":"Sign in to {name}","pair.connectTo":"Connect to {name}","shortcuts.toggle-sidebar":"Collapse or expand the sidebar","readyBots.bot.social.title":"Social media manager","readyBots.bot.social.description":"Plans your posts and adds them to Postiz as drafts or scheduled posts, ready for you to review.","readyBots.bot.social.try":"Plan next week's posts for LinkedIn and X","native.cloud.otherGone":"That Cloud is no longer one of yours.","native.cloud.otherNotReady":"{name} isn't ready to open yet.","native.cloud.otherNoLongerYours":"{name} is no longer one of your Clouds.","native.cloud.otherNotRunning":"{name} isn't running right now.","native.cloud.invalidAdd":"Invalid Cloud to add.","native.cloud.invalidOrganization":"Invalid organization to add.","native.cloud.invalidColor":"Invalid Cloud color.","native.cloud.invalidRemove":"Invalid Cloud to remove.","native.cloud.ready.open":"Click to open it.","native.cloud.ready.quotedTitle":"“{name}” is ready","native.places.noLongerHere":"That place isn't here any more.","native.places.profileFailed":"This computer's own place didn't open. Try again in a moment.","native.places.cannotAdd":"That isn't something to add here.","native.cloud.addSignIn":"Sign in to Limix Bot Cloud first.","native.cloud.addPlanAndName":"Choose a plan and a name to continue.","native.cloud.addOrganizationName":"Give the organization a name to continue.","native.cloud.noNewCloud":"There is no new Cloud to open.","native.lend.moveWaiting":"Lending to your bots' home waits until it is signed in and not paused.","native.lend.moveNotStarted":"Lending to My Cloud did not start.","native.boot.sharedFolderAdvice":" If Limix Bot is not running on another computer or container that shares this folder, quit Limix Bot, delete {path} and start again.","native.lendTray.pause":"Pause","native.lendTray.resume":"Resume","native.lendTray.pauseUnsaved":"Pause is not saved. Sharing is stopped now. Retry saving pause before quitting.","native.lendTray.pauseUnsavedTitle":"Paused, not saved","native.lendTray.retryPause":"Retry saving pause","native.lendTray.activity":"See activity","native.files.newFromCloud":"new from My Cloud","native.files.nameNotSupported":"This computer can't hold that name.","native.files.gitProtected":"Files inside .git are never changed from My Cloud.","native.files.changeDamaged":"The change was damaged on its way; it will be fetched again.","native.places.chooseColor":"Choose one of the colors.","native.places.noColor":"This place has no color to change.","native.talk.listening":"Listening…","native.talk.sending":"Sending to Limix Bot…","native.talk.thinking":"Limix Bot is thinking…","native.talk.needsYou":"Limix Bot needs you · Open chat","native.talk.stillWorking":"Still working · Open chat","native.talk.dismiss":"Dismiss","native.talk.releaseToSend":"Let go to send","native.talk.voiceBusy":"Voice is in use in Limix Bot","native.talk.openMausBot":"Open Limix Bot to talk","native.talk.starting":"Limix Bot is still starting. Try again in a moment.","native.talk.setUpFirst":"Set up Limix Bot first, then try again.","native.talk.movedToCloud":"Limix Bot lives on My Cloud now — talk to it there","native.talk.permissions":"Talking needs Microphone + Speech Recognition access — System Settings → Privacy & Security.","native.talk.dictationOff":"Turn on Dictation in System Settings → Keyboard, then try again.","native.talk.unavailable":"Talking couldn't start. Try again.","native.talk.failed":"Limix Bot couldn't take that · Open chat","activity.tool.team.cancelWait":"Cancel wait","activity.tool.team.deleteTrigger":"Delete trigger","activity.tool.team.listWaits":"List waits","activity.tool.team.waitUntil":"Wait until","serverError.request.bodyTimeout":"The request took too long. Check the connection and try again.","serverError.browser.restartingUnresponsive":"The browser stopped responding, so it is being restarted. The live view reconnects by itself.","serverError.computer.desktopOnly":"Only the Limix Bot app on this computer can let a bot use it. Open the app here, or let the bot work in its own browser or on a cloud desktop instead.","serverError.computer.permissionsThenRestart":"Limix Bot can't use this computer yet — make sure Limix Bot has the permissions it asks for, then restart it","serverError.computer.notReadyDetail":"Limix Bot can't use this computer yet — {reason}","serverError.computer.notReadyMacPermission":"Limix Bot can't use this computer yet — {reason}. Relaunch Limix Bot after granting the missing macOS permission.","chat.notice.copilotAccountRefused":"GitHub Copilot refused this request for the signed-in account. Check its Copilot plan and premium request allowance, then try again.","chat.notice.commandCodeAccountRefused":"Command Code refused this request for the signed-in account. Check its plan and credits on commandcode.ai, then try again.","chat.notice.kiroAccountRefused":"Kiro refused this request for the signed-in account. Check its Kiro plan and credits, then try again.","chat.notice.acpQuietUsageLimit":"{name} reached a usage limit{said} and is waiting it out without replying, so this turn was stopped.","chat.notice.acpQuietStuck":"{name} sent nothing for {quiet} with no tool running, no open request to its model and no CPU use, so the turn was stopped as stuck. Send the message again to retry.","chat.notice.acpModelRequestFailed":`{name}'s model request failed: "{message}" {name} may retry or stop; no reply for {quiet} so far.`,"chat.notice.acpModelFallback":"{displayName} no longer offers {wanted}, so this conversation uses {fallback}. Choose another model for this bot to stop seeing this.","chat.notice.codexActionMayHaveRun":"{message} A tool action may have run. Check its effects before trying again.","chat.notice.modelServerStoppedAnswering":"The model server at {host} stopped answering, so the reply was stopped.","chat.notice.piModelNotConfirmed":"Pi did not confirm the selected model","serverError.install.invalidDetails":"{name}'s install details are invalid. Nothing was downloaded.","serverError.install.versionGone":"This version of {name} is no longer available to download. Update Limix Bot, then try again.","serverError.install.downloadLimited":"The download site is limiting downloads right now. Try again in a few minutes.","serverError.install.siteNotAnswering":"{name}'s download site isn't answering right now. Try again later.","serverError.install.downloadFailed":"{name} couldn't be downloaded. Check the internet connection and try again.","serverError.install.downloadTooLarge":"The {name} download was larger than expected, so it was stopped. Nothing was installed.","serverError.install.unofficialDownload":"The {name} download did not come from its official site, so it was stopped. Nothing was installed.","serverError.install.redirects":"The {name} download kept redirecting, so it was stopped. Nothing was installed.","serverError.install.safetyCheck":"The {name} download failed its safety check, so nothing was installed. Try again later.","serverError.install.downloadTimeout":"The {name} download took too long and was stopped. Check the internet connection and try again.","serverError.install.unsafeArchive":"The archive contains an unexpected or unsafe file. Nothing was installed.","serverError.install.unsafeFile":"The {name} download holds an unexpected or unsafe file, so nothing was installed.","serverError.install.notPlainFolder":"Limix Bot's folder for {name} is not a plain folder ({path}), so nothing was changed. Move it away, then try again.","serverError.install.unexpectedFolder":"Limix Bot's folder for {name} holds something it did not put there ({path}), so nothing was changed. Move it away, then try again.","serverError.install.diskSpace":"There is not enough free disk space to install {name}. Free up about {megabytes} MB, then try again.","serverError.install.openElsewhere":"{name} is open in another window. Close it, then try again.","serverError.install.cannotWrite":"Limix Bot can't write to its folder for {name}. Check the folder's permissions, then try again.","serverError.install.failed":"{name} couldn't be installed. Try again.","serverError.install.noDownload":"{name} has no download for this computer.","serverError.install.existingDoesNotStart":"{name} is installed, but it doesn't start on this computer ({failure}). Nothing was changed.","serverError.install.programMissing":"The {name} download did not contain the program it should, so nothing was installed.","serverError.install.notSigned":"The downloaded {name} is not signed by its maker, so nothing was installed.","serverError.install.downloadDoesNotStart":"{name} was downloaded, but it doesn't start on this computer ({failure}). Nothing was installed.","chat.notice.waitingApprovalElsewhere":"Waiting on your approval in @{name}","chat.notice.waitingAnswerElsewhere":"Waiting on your answer in @{name}","chat.notice.teammateNeedsInput":"{name} needs your input: {question}","chat.notice.relayCouldNotContinue":"this conversation could not carry on — {error}","secretCard.delivery.fileNamed":"{botName}'s commands can read it from a private file for 24 hours; it is never added to chat.","secretCard.delivery.refNamed":"{botName} gets a one-use reference for Limix Bot's own tools and never sees it.","serverError.secret.missing":"no such credential request","serverError.secret.settingsCard":"this card saves a key in Settings","serverError.secret.savingFromPhone":"this secret is currently being saved from a phone","serverError.secret.declined":"this request was declined","serverError.secret.replaced":"this request was replaced by a newer one","serverError.secret.taskStopped":"this request stopped with its task","serverError.secret.alreadySaved":"this secret was already saved","serverError.secret.valueSize":"Enter the secret: up to {bytes} bytes.","serverError.secret.notKeptSafely":"The secret could not be kept safely. Nothing was saved.","serverError.secret.unavailableLower":"this credential request is no longer available","serverError.signIn.requestMissing":"no such sign-in request","serverError.signIn.requestReplaced":"this sign-in request was superseded by a newer one","serverError.signIn.answeredInChat":"this sign-in request was already answered in the chat","serverError.signIn.alreadyDone":"this sign-in request was already marked done","serverError.signIn.alreadyCancelled":"this sign-in request was already cancelled","serverError.inbox.answerNotPassed":"That answer can't be passed back.","serverError.room.nameOneLine":"room name must fit on one line","serverError.computer.systemUnsupported":"bots can't use this computer on this system — choose another place for this bot to work","serverError.computer.aiUnsupported":"this bot's AI can't use this computer — pick another AI for this bot, or choose another place for it to work","chat.notice.engineSignedOut":"{name} is signed out.","serverError.wait.alreadyEnded":"This wait has already ended.","chat.notice.failoverSignedInAgain":"{engine} is signed in again, so this conversation is back on {engine}.","chat.notice.failoverSignedOut":"{from} is signed out, so {to} took over.","serverError.botDefaults.nameLength":"name must be at most 100 characters","serverError.botDefaults.sectionLength":"section must be at most 60 characters","serverError.botDefaults.invalid":"These bot settings are not valid.","serverError.postiz.addressHttps":"Enter your Postiz server's address, starting with https://.","serverError.postiz.addressNoCredentials":"Leave any user name or password out of the Postiz address.","serverError.postiz.addressNoQuery":"Enter the Postiz address without anything after ? or #.","serverError.postiz.addressLocalHttp":"Use an https:// address. Plain http:// works only for a Postiz server on this computer.","serverError.postiz.addressUseHttps":"Use your Postiz server's https:// address.","serverError.postiz.addressContainsKey":"That address has a key in it. Enter the server address alone, and paste the key in its own box.","serverError.postiz.mcpUpdating":"MCP servers are being updated. Try again in a moment.","chat.notice.backupCardWaiting":"switched to {name}. Your request waits on a card above and continues on {name} once you act on it.","chat.notice.backupRequestUnderWay":"switched to {name}. Your request is still under way here and continues on {name}.","chat.notice.backupConversationBusy":"switched to {name}. This conversation is working, so your message was not sent again.","chat.notice.backupQuestionWaiting":"switched to {name}. A teammate's question is waiting for your answer in this conversation, so your message was not sent again. Answer it, then send your message again.","chat.notice.backupMessageMissing":"switched to {name}, but your message could not be found to send again. Send it again.","chat.notice.backupContinuingLimit":"continuing on {name} after hitting the usage limit","chat.notice.backupContinuingSignedOut":"continuing on {name} while {engine} is signed out","chat.notice.backupCouldNotContinue":"could not continue on {name}: {error}","serverError.setup.mausbotMissing":"no such Limix Bot","serverError.setup.mausbotOwnerOnly":"only Limix Bot's own person can do this","serverError.setup.noIntroToFollowUp":"this conversation has no intro to follow up","serverError.inbox.missing":"There is no inbox here.","serverError.inbox.lineMissing":"That line is not in your inbox.","serverError.inbox.answerRequired":"This waits on your answer: answer it, or close it, where it asks.","serverError.instance.settingsInvalid":"Supply a valid CLI path, account name, configuration directory, boolean tools setting or a reply wait of 1 to 60 minutes.","serverError.instance.replyWaitUnsupported":"The reply wait is available for OpenAI-compatible servers only.","serverError.instance.modelsUnsupported":"Model IDs can be changed for added OpenAI-compatible servers only.","serverError.instance.defaultModelRemoved":"{model} is the default model. Choose another default model before removing it from this server.","serverError.postiz.adminOnly":"Only the owner or an admin can manage the Postiz connection.","serverError.postiz.keyAlone":"Paste the Postiz API key alone.","serverError.postiz.addressAsText":"Send the Postiz address as text.","serverError.secret.localService":"A local service cannot enter a secret. Enter it in Limix Bot.","serverError.secret.cloudOwnerOnly":"Only the owner of this Cloud can enter this secret.","serverError.secret.conversationOwnerOnly":"Only the person this conversation belongs to can enter this secret.","serverError.secret.credentialSavingFromPhone":"this credential is currently being saved from a phone","serverError.secret.credentialDismissed":"this credential request was dismissed","serverError.secret.credentialSuperseded":"this credential request was superseded by a newer one","serverError.secret.notSavedYet":"{label} was not saved yet","serverError.secret.notReadyToResume":"this credential request is not ready to resume","serverError.secret.noLongerConfigured":"{label} is no longer configured","serverError.department.moveChiefConflict":"A department can have only one Chief of Staff. Change the Chief before moving this bot.","serverError.department.membershipChanged":"Department membership changed. Reopen the dialog and try again.","serverError.mcp.addressAsText":"Send the MCP server address as text.","serverError.mcp.addressChanged":"The MCP server address changed. Reload the server and try again.","serverError.attachment.alreadyInMessage":"This file is already in a message, so it stays.","routines.server.backupSignedOut":"Starting again on the backup AI: this bot's AI is signed out","approval.applied.waitFollowUp":"Then {name} will: {followUp}","chat.notice.waitDone.urlContains":"{label}: done. {url} now says “{text}”.","chat.notice.waitDone.urlMissing":"{label}: done. {url} no longer says “{text}”.","chat.notice.waitDone.fileExists":"{label}: done. {path} is there now.","chat.notice.waitDone.fileMissing":"{label}: done. {path} is gone.","chat.notice.waitDone.fileChanged":"{label}: done. {path} changed.","chat.notice.waitDone.processRunning":"{label}: done. {process} is running.","chat.notice.waitDone.processGone":"{label}: done. {process} stopped.","chat.notice.waitDone.botIdle":"{label}: done. {botName} finished.","chat.notice.waitBotGone":"Stopped waiting for {label}: {botName} no longer exists.","chat.notice.waitExpiredOne":"Stopped waiting for {label} after {hours} hour.","chat.notice.waitExpiredMany":"Stopped waiting for {label} after {hours} hours.","mcp.personal.oneHeader":"Personal MCP connections support one header. Remove the extra headers before saving.","readyBots.routine.socialWeekly":"Weekly post plan","pair.sessionEnded":"Your session ended. Pair this device again to keep using it.","chat.notice.computerDesktopOnly":"Only the Limix Bot app on this computer can let a bot use it. Open the app here, or let the bot work in its own browser or on a cloud desktop instead.","chat.notice.computerPermissionsThenRestart":"Limix Bot can't use this computer yet — make sure Limix Bot has the permissions it asks for, then restart it","chat.notice.computerNotReadyDetail":"Limix Bot can't use this computer yet — {reason}","chat.notice.computerNotReadyMacPermission":"Limix Bot can't use this computer yet — {reason}. Relaunch Limix Bot after granting the missing macOS permission.","chat.notice.computerSystemUnsupported":"bots can't use this computer on this system — choose another place for this bot to work","chat.notice.computerAiUnsupported":"this bot's AI can't use this computer — pick another AI for this bot, or choose another place for it to work","serverError.engine.signedOut":"{name} is signed out.","attach.loadingName":"Loading {name}","serverError.mcp.personalHeadersShared":"Personal MCP header values cannot be saved in shared configuration. Save your key in your personal connection.","serverError.mcp.testSignInFirst":"Sign in to the team to test your own connection.","server.routines.cron.raw":"Cron {expression}","server.routines.cron.everyDay":"Every day at {time}","server.routines.cron.monthlyLastDay":"Monthly on the last day at {time}","server.routines.cron.monthlyDay":"Monthly on day {day} at {time}","server.routines.cron.yearly":"Yearly on {month} {day} at {time}","server.routines.cron.weekdays":"Every weekday at {time}","server.routines.cron.weekly":"Weekly on {weekday} at {time}","server.routines.cron.weeklySaturdaySunday":"Weekly on {weekday} at {time}","server.routines.cron.nth.first":"Monthly on the first {weekday} at {time}","server.routines.cron.nth.second":"Monthly on the second {weekday} at {time}","server.routines.cron.nth.third":"Monthly on the third {weekday} at {time}","server.routines.cron.nth.fourth":"Monthly on the fourth {weekday} at {time}","server.routines.cron.nth.fifth":"Monthly on the fifth {weekday} at {time}","server.routines.cron.nth.last":"Monthly on the last {weekday} at {time}","server.routines.cron.nthWeekend.first":"Monthly on the first {weekday} at {time}","server.routines.cron.nthWeekend.second":"Monthly on the second {weekday} at {time}","server.routines.cron.nthWeekend.third":"Monthly on the third {weekday} at {time}","server.routines.cron.nthWeekend.fourth":"Monthly on the fourth {weekday} at {time}","server.routines.cron.nthWeekend.fifth":"Monthly on the fifth {weekday} at {time}","server.routines.cron.nthWeekend.last":"Monthly on the last {weekday} at {time}","attach.imagesLeftOutOne":"A message takes up to {count} images, {megabytes} MB in all. {names} wasn't attached.","attach.imagesLeftOutMany":"A message takes up to {count} images, {megabytes} MB in all. {names} weren't attached.","attach.archivesUnsupported":"Archives can't be attached: unzip {names} and attach the files inside.","native.home.ownCopyNotReady":"Limix Bot on this computer could not go back to its own copy yet.","native.home.ownCopyNotRunning":"This computer's own copy isn't running.","native.cloud.connectedAppsStay":"Your connected apps stay on this computer: that server has no connected-apps service of its own. Connect them again there in Apps.","native.home.notAvailable":"That server can't be your bots' home now.","native.lend.homeChanged":"This server is not your bots' home any more","native.lend.terminalSignIn":"Sign in to the Cloud before lending it the terminal.","native.lend.terminalAllow":"Let them run commands","native.lend.terminalTitle":"Let your Clouds run commands on this computer?","native.lend.terminalDetail":"Bots on your own Clouds could run any command on this computer as you, including reading and changing any file you can. You can turn this off from the Limix Bot icon's menu.","native.lendTray.canUseWithoutScreen":"{clouds} can use this {device}, but not its apps and screen","native.lendTray.terminal":"Let Clouds run commands on this {device}","native.screen.windowsHelperBlocked":"Computer control could not start on this PC: its helper, cua-driver-background.exe or cua-driver.exe, is missing or blocked. Windows Security may have quarantined it: open Windows Security → Virus & threat protection → Protection history, restore or allow it (or reinstall Limix Bot), then restart Limix Bot.","native.home.itemDidNotMove":"It did not move.","native.home.signedOut":"This app isn't signed in to {name}. Open {name} in this app, then try again.","native.home.serverChanged":"The server at {name}'s address is another one now, so nothing more goes there.","native.home.otherPeople":"{name} has other people on it now, so your bots can't move there.","native.home.localNoAnswer":"Limix Bot on this computer did not answer. Try again in a moment.","native.home.localResumeFailed":"Limix Bot on this computer could not go on again.","native.home.serverGone":"That server isn't in this app any more.","native.home.alreadyMoving":"Your bots are already moving.","native.home.movingToCloud":"Your bots are moving to My Cloud.","native.home.personalServerOnly":"{name} has other people on it, so your bots stay here. Only a server that's yours alone can be your bots' home.","native.home.updateServer":"Update Limix Bot on {name} first, then try again.","native.server.notAnswering":"{name} isn't answering","native.server.notAnsweringDetail":"Nothing answers at {host}. If that server is gone for good, remove it from your list. Your bots elsewhere aren't affected.","native.screen.starting":"Screen control is starting on this {device}","native.screen.permissions":"macOS hasn't allowed screen control yet","native.screen.blockedWindows":"Screen control is blocked: Windows Security may have stopped it","native.screen.blocked":"Screen control is blocked on this {device}","native.screen.off":"Screen control is off on this {device}","native.screen.unsupported":"Screen control can't work on this {device}","native.screen.notRunning":"Screen control isn't running on this {device}","native.screen.allow":"Allow screen control…","native.screen.turnOn":"Turn on screen control","native.screen.wantScreen":"use this {device}'s apps and screen","native.screen.wantFiles":"use the files on this {device}","native.screen.wantTerminal":"run commands on this {device}","native.screen.paused":"Using this {device} is paused.","native.screen.terminalOff":"Running commands isn't turned on for this {device}.","native.screen.allowMac":"macOS hasn't allowed Limix Bot to see and use the screen yet. Turn on asks macOS.","native.screen.askTitle":"{bot} on {cloud} wants to {want}","native.home.placeNotSuggested":"That isn't a place this app suggested.","native.home.bringUnavailable":"Your bots can't be brought together there now.","chat.notice.memoryReclaimedBrowser":"Ran out of room, so I closed the browser to keep everything else running.","chat.notice.memoryReclaimedTask":"Ran out of room, so I stopped this task to keep everything else running.","chat.notice.memoryReclaimedBrowserDetail":"Ran out of room, so I closed the browser to keep everything else running. ({detail})","chat.notice.memoryReclaimedTaskDetail":"Ran out of room, so I stopped this task to keep everything else running. ({detail})","server.personFirst.stoppedSeconds":"Stopped a step that had run for {seconds} s, to answer you first","server.personFirst.stoppedMinutes":"Stopped a step that had run for {minutes} min, to answer you first","server.runOwner.onlyAskerStops":"Only {name} or an admin can stop this.","server.runOwner.notYourQueued":"Only the person who sent this message can remove it.","server.runOwner.waitsItsTurn":"This message waits its turn and runs after the request that is running now.","server.runOwner.onlyAskerRetries":"Only {name} or an admin can run this request again.","server.routines.held.planCancelled":"Your routines are paused because the plan was cancelled. To keep one running until the plan ends, turn it back on in Routines.","server.routines.held.noEngine":"Your routines are paused: none of your AI accounts is signed in here any more. They turn back on by themselves when you sign in again.","server.routines.held.noConnections":"Your routines are paused: every connected app and MCP server was removed. They turn back on when you connect one, or turn one back on in Routines.","mcp.request.change":"Change","mcp.request.remove":"Remove","secretCard.greenference.description":"Runs Greenference models with your own key.","secretCard.modelgo.description":"Runs ModelGo models with your own key.","secretCard.geminiTts.description":"Generates spoken replies, voice notes and call speech with Gemini.","chat.notice.elicitationUrlDeclined":"{server} asked you to open a link to continue. Limix Bot can't open it from here, so the request was declined. Open the link yourself, then ask the bot to try again.","chat.notice.elicitationUrlDeclinedWithUrl":"{server} asked you to open a link to continue: {url}. Limix Bot can't open it from here, so the request was declined. Open the link yourself, then ask the bot to try again.","chat.notice.elicitationUrlDeclinedGeneric":"An MCP server asked you to open a link to continue. Limix Bot can't open it from here, so the request was declined. Open the link yourself, then ask the bot to try again.","chat.notice.elicitationUrlDeclinedGenericWithUrl":"An MCP server asked you to open a link to continue: {url}. Limix Bot can't open it from here, so the request was declined. Open the link yourself, then ask the bot to try again.","chat.notice.elicitationFormDeclinedOne":"{server} asked you to fill in a field. Limix Bot can't show that form yet, so the request was declined.","chat.notice.elicitationFormDeclinedMany":"{server} asked you to fill in {fields} fields. Limix Bot can't show that form yet, so the request was declined.","chat.notice.elicitationFormDeclinedOneMessage":`{server} asked you to fill in a field ("{message}"). Limix Bot can't show that form yet, so the request was declined.`,"chat.notice.elicitationFormDeclinedManyMessage":`{server} asked you to fill in {fields} fields ("{message}"). Limix Bot can't show that form yet, so the request was declined.`,"chat.notice.elicitationFormDeclinedGenericOne":"An MCP server asked you to fill in a field. Limix Bot can't show that form yet, so the request was declined.","chat.notice.elicitationFormDeclinedGenericMany":"An MCP server asked you to fill in {fields} fields. Limix Bot can't show that form yet, so the request was declined.","chat.notice.elicitationFormDeclinedGenericOneMessage":`An MCP server asked you to fill in a field ("{message}"). Limix Bot can't show that form yet, so the request was declined.`,"chat.notice.elicitationFormDeclinedGenericManyMessage":`An MCP server asked you to fill in {fields} fields ("{message}"). Limix Bot can't show that form yet, so the request was declined.`,"chat.notice.elicitationContinue":"{server} asks to continue","chat.notice.elicitationContinueGeneric":"An MCP server asks to continue","chat.notice.elicitationMessageGeneric":"An MCP server: {message}","chat.notice.appAccessRequested":"App access requested","chat.notice.codexModelUnavailable":"This model isn't available on your ChatGPT plan, so it's now hidden from this account's model list. Pick another model.","chat.notice.codexElicitationDeclined":"{server} asked for input Limix Bot can't show yet, so the request was declined.","chat.notice.codexElicitationDeclinedGeneric":"An MCP server asked for input Limix Bot can't show yet, so the request was declined.","chat.notice.usageLimitResets":"This {provider} account has reached its usage limit{detail}, which resets {resets}. Until then, switch this bot to another AI.","approval.voice.titled":"{requester}: {title} Review the details and choose {allow} or {cancel}.","approval.action.deleteBot":"Delete bot","approval.action.applySetup":"Apply setup","routines.editor.roomMissing":"Room no longer exists. Choose another.","browser.panel.maximizeHint":"Maximize (fill the app window)","browser.panel.fullscreenHint":"Full screen (whole display)","time.invalid":"Invalid Date","shortcuts.send-follow-up":"While a bot works: queue instead of steering, or the other way round","serverError.bot.viewOnly":"You can view {bot}, not chat with it.","native.teamMove.sessionLabel":"Move to a team","native.teamMove.homeNoAnswer":"My Cloud did not answer.","native.teamMove.openTeam":"Open the team you're moving a bot into.","server.lendingLift.chooseAnswer":"Choose Allow or Not now.","server.lendingLift.ownerDeviceOnly":"Only you can allow this, from one of your own devices.","server.teammates.waitCardClosed":"The card it waited on was replaced or closed","native.cloud.stayed.something":"Something","native.cloud.stayed.notArrived":"It didn't reach My Cloud.","native.cloud.stayed.settings":"Some of its settings didn't reach My Cloud.","native.cloud.stayed.room":"A room","native.cloud.stayed.roomNotArrived":"This room didn't reach My Cloud.","native.cloud.stayed.memoryOne":"One of its memory notes didn't reach My Cloud.","native.cloud.stayed.memoryMany":"{n} of its memory notes didn't reach My Cloud.","native.cloud.stayed.memoryHistory":"Some of its memory history didn't reach My Cloud.","native.cloud.stayed.fileOne":"One of its files didn't reach My Cloud.","native.cloud.stayed.fileMany":"{n} of its files didn't reach My Cloud.","native.cloud.stayed.chats":"Chats","native.cloud.stayed.chatOne":"Part of one chat didn't reach My Cloud.","native.cloud.stayed.chatMany":"Parts of {n} chats didn't reach My Cloud.","native.cloud.stayed.routineHistory":"Routine history","native.cloud.stayed.runOne":"One past run didn't reach My Cloud.","native.cloud.stayed.runMany":"{n} past runs didn't reach My Cloud.","native.cloud.stayed.learned":"What your bots learned about you","native.cloud.stayed.learnedNotArrived":"Some of it didn't reach My Cloud.","native.cloud.stayed.teamNotes":"Team notes","native.cloud.stayed.teamNotesNotArrived":"Some of them didn't reach My Cloud.","native.cloud.stayed.app":"An app","native.cloud.stayed.addAgain":"It didn't reach My Cloud. Add it there again if a bot needs it.","native.cloud.stayed.attachmentOne":"An attachment","native.cloud.stayed.attachmentMany":"{n} attachments","native.cloud.stayed.notArrivedMany":"They didn't reach My Cloud.","native.cloud.stayed.secretOne":"A sign-in or key","native.cloud.stayed.secretMany":"{n} sign-ins and keys","native.cloud.stayed.addAgainMany":"They didn't reach My Cloud. Add them there again if a bot needs them.","native.cloud.stayed.more":"{n} more","native.cloud.incomplete":"Some things didn't reach My Cloud yet. It tries again by itself, and if they still can't go, the rest moves without them and you'll see what stayed here.","native.cloud.otherAccount":"Another Limix Bot Cloud account signed in.","native.cloud.mailRead":"The mailboxes could not be read on this computer.","native.cloud.mailOutdated":"My Cloud can't take your mailboxes yet. Connect them there under Connected apps.","native.cloud.mailRefused":"My Cloud did not take your mailboxes.","native.html.nothingToOpen":"Nothing to open","native.html.tooLarge":"This page is too large to open (2 MB)","native.accounts.moving":"This computer's bots are moving to the Cloud. Try again once that's done.","native.accounts.myComputer":"My computer","native.teamLink.otherTitle":"This team isn’t on the account signed in here","native.teamLink.otherDetail":"Limix Bot is signed in as {email}. If you joined the team with another address, sign in with that one. {email} stays signed in too.","native.teamLink.signIn":"Sign in with another address","server.outside.routineFromBefore":"This routine was made before this update. Open it and save it once to run it with full access.","server.outside.routineFromOutside":"A webhook's run made or changed this routine, so it runs without full access. Open it and save it once to run it with full access.","server.outside.conversationFromBefore":"This conversation is from before My Cloud was only yours, so this bot works in it without a shell. Start a new conversation to use it fully.","server.outside.conversationFromOutside":"Work from outside came into this conversation, so this bot works in it without a shell. Start a new conversation to use it fully.","server.outside.engineRefusal":"This bot's AI can't run it that way. {why}","server.outside.engineRefusalOldConversation":"This conversation is from before the Cloud was only yours, and this bot's AI can't work in it. Start a new conversation.","server.memory.movedNote":"This note moved here from where the bot kept it before, so it can't be reverted here.","server.email.sent":"Sent from {address} to {count} recipient(s)","serverError.secret.mailboxAlreadyConnected":"this mailbox was already connected","serverError.secret.emailAndPassword":"Enter your email address and its password.","serverError.secret.emailUnavailable":"Email can't be connected here.","server.connect.emailOnComputer":"Type your email address and password on your computer.","serverError.mailbox.adminOnly":"Only the owner or an admin can manage the mailboxes.","serverError.mailbox.addressAndPassword":"Enter your email address and password.","serverError.voice.fishKeyRequired":"Add a Fish Audio key in Settings → API keys to talk to your bots here.","serverError.voice.fishTranscribeConnection":"Couldn't reach Fish Audio to hear you — check your connection.","serverError.file.tooLarge":"This file is {size}, over the {limit} limit for opening files from chat. The file itself is still saved as {name}.","server.botApi.engineRefusal":"This thread came in through the Bot API, and this bot's AI can't work in it. Start a new conversation.","server.botApi.confinedWhy":"This call came in through the Bot API, so it can only answer from what this bot already knows.","voice.openai.description":"Read replies and voice messages with AI-generated voices. Uses your OpenAI API key and is billed by OpenAI based on API usage. Live call settings are separate.","voice.openai.missingKey":"Add an OpenAI API key in Settings → API keys on the host to use readout.","voice.sample":"Good morning. The tests passed overnight, and I left two notes for you in the chat.","voice.openai.error.key":"Add an OpenAI API key in Settings → API keys to read replies aloud.","voice.openai.error.auth":"OpenAI rejected the API key or its Realtime access. Check the key and project permissions in Settings.","voice.openai.error.rateLimit":"OpenAI speech is rate limited or out of API credits. Check your API usage before trying again.","voice.openai.error.timeout":"OpenAI speech timed out. No audio was played for this segment.","voice.openai.error.connection":"OpenAI speech was interrupted. Check your connection and proxy settings.","voice.openai.error.empty":"OpenAI returned no speech audio for this segment.","voice.openai.error.invalid":"OpenAI returned an unexpected speech response.","voice.openai.error.limit":"OpenAI speech exceeded the 8 MiB limit for one segment.","voice.openai.error.cancelled":"OpenAI speech was cancelled.","voice.openai.error.failed":"OpenAI could not generate speech for this segment. Check your API access and usage.","voice.openai.error.voice":"Choose an OpenAI voice before reading replies aloud.","keys.purpose.openaiModelsVoice":"OpenAI models, reply readout and live calls","settings.section.imageGeneration":"Image generation","imageGen.intro":"Bots use this when you ask for an image in a chat, and bot avatars use it too. The backup is tried only when the base could not start: no key, no credit, rate limited or unreachable.","imageGen.status.ready":"Ready · images are made with {provider}","imageGen.status.backupOnly":"Ready with the backup only · images are made with {provider}","imageGen.status.notReady":"Not set up · add a key for the base or the backup provider; Custom also needs a base URL and a model ID","imageGen.primary.label":"Base provider","imageGen.primary.help":"Used first for every image.","imageGen.fallback.label":"Backup provider","imageGen.fallback.help":"Used only when the base could not start.","imageGen.fallback.none":"None","imageGen.slot.needsKey":"Needs a key: add it below.","imageGen.slot.needsConnection":"Needs a base URL and a model ID: add them below.","imageGen.model.label":"{slot} model","imageGen.model.placeholder":"Model ID","imageGen.model.other":"Other (type a model ID)","imageGen.model.idLabel":"{slot} model ID","imageGen.test.ok":"The key is accepted. The model is checked when the first image is made.","imageGen.test.okOpenrouter":"Works: the key is accepted and OpenRouter has the chosen model.","imageGen.test.noCredit":"The key is accepted, but this OpenRouter account has no credit, and image models are paid.","imageGen.test.modelMissing":"OpenRouter has no model {model}. Pick one from the list.","imageGen.test.rejected":"The provider refused this key. Check it or paste a new one.","imageGen.test.unreachable":"Could not reach the provider. Check the connection or the URL.","imageGen.test.unexpected":"The provider gave an unexpected answer.","imageGen.test.noUrl":"Add the base URL first, so the key is only sent to your endpoint.","imageGen.maxPerTurn.label":"Images per reply","imageGen.maxPerTurn.help":"The most images a bot may create in one reply.","imageGen.key.openai":"OpenAI API key","imageGen.key.gemini":"Gemini API key","imageGen.key.custom":"Custom image API key","imageGen.key.paste":"Paste API key","imageGen.key.get":"Get a key","imageGen.key.saved":"Key saved","imageGen.key.missing":"No key yet","imageGen.key.optional":"Key optional","imageGen.key.sharedXai":"This is the same Grok (xAI) key as under API keys, also used by the other Grok features. A Grok subscription does not include API access.","imageGen.key.sharedOpenrouter":"This is the same OpenRouter key as under API keys, also used by the OpenRouter models your bots run.","imageGen.key.manage":"Open API keys","imageGen.custom.url":"Base URL","imageGen.custom.help":"Any OpenAI-compatible Images API. localhost is the computer running {app}.","botIdentity.ai.usingProvider":"Uses {provider}, as set in Image generation.","botIdentity.ai.noProvider":"No image provider is set up yet.","botIdentity.ai.openImageSettings":"Open image settings","imageGen.key.xai":"Grok (xAI) API key","imageGen.key.openrouter":"OpenRouter API key","server.voice.noNoteNoVoice":"No voice note with this reply: this bot has no voice set up yet.","server.voice.noNoteFailed":"No voice note with this reply: the voice couldn't be made ({reason}).","agentEndpoints.responses":"Uses an API key without OAuth. The gateway must support streaming Responses (/v1/responses), including tool calls. Chat Completions alone is not enough. Use HTTPS or a secure tunnel to localhost.","agentEndpoints.messages":"Uses an API key without OAuth. The gateway must support Anthropic Messages (/v1/messages), including streaming and tool calls. HTTP sends your key unencrypted; prefer HTTPS or a secure tunnel.","agentEndpoints.codexTitle":"Codex direct API","agentEndpoints.codexHint":"Run the native Codex agent on an API key: OpenAI, or a gateway that speaks the Responses API. Each connection has its own key and Codex settings, and the provider behind the URL bills the usage.","server.voice.turnEnded":"I stopped before finishing: {reason}","phone.code.e2e.scan":"Open the {app} app on your phone and scan.","phone.code.e2e.wifi":"This Wi-Fi","phone.code.e2e.tailscale":"Tailscale","phone.code.e2e.relay":"Limix Bot Relay","phone.code.e2e.fromAnywhere":"from anywhere","phone.code.e2e.tailscaleOff":"not running on this computer","phone.code.e2e.signIn":"Sign in to reach it from anywhere","phone.code.e2e.relayOff":"not available right now","phone.code.e2e.encrypted":"End-to-end encrypted. Only your phone and this computer can read it.","phone.code.e2e.copyLink":"Copy link","phone.code.e2e.copied":"Link copied. Open it on your phone.","phone.code.e2e.getApp":"No app yet? Get it","phone.code.e2e.getAppDetail":"Scan with your phone camera.","remote.devices.connected":"Connected · {route}","remote.devices.connectedLegacy":"Connected · update the app to encrypt","remote.devices.connectedNow":"Connected","remote.devices.route.wifi":"Wi-Fi","remote.devices.route.tailscale":"Tailscale","remote.devices.route.relay":"Relay","remote.devices.localOnly":"Wi-Fi and Tailscale only","remote.devices.connectFrom":"Connect from","remote.devices.anywhere":"Anywhere","remote.devices.more":"Options for {name}","remote.devices.removePhone":"Remove phone","remote.devices.removed":"Removed {name}.","remote.e2e.anywhere":"Reachable from anywhere · end-to-end encrypted","remote.e2e.connecting":"Connecting to Limix Bot Relay…","remote.e2e.local":"On this Wi-Fi and Tailscale · end-to-end encrypted","serverError.mailbox.outgoingFields":"Check the outgoing server: a name like mail.example.com, a port from 1 to 65535, and SSL/TLS or STARTTLS.","server.meetings.card.title":"Meeting notes","server.meetings.card.starting":"Getting the cloud computer ready…","server.meetings.card.joining":"Joining the meeting…","server.meetings.card.lobby":"Waiting for the host to let me in","server.meetings.card.live":"In the meeting · others here: {count} · {minutes} min","server.meetings.card.ended":"Ended after {minutes} min. {reason}","server.meetings.card.questions":"Questions answered in the chat: {count}","server.meetings.card.writing":"Writing the notes…","server.meetings.card.leave":"Leave meeting","server.meetings.notes.summary":"Summary","server.meetings.notes.decisions":"Decisions","server.meetings.notes.actions":"Action items","server.meetings.notes.questions":"Open questions","server.meetings.notes.attendees":"Attendees","server.meetings.notes.transcript":"The full transcript is attached below.","server.meetings.nothingHeard":"{reason} Nobody said anything I could transcribe, so there are no notes.","server.meetings.endedDetail":"{reason} ({detail})","server.meetings.end.left":"I left the meeting.","server.meetings.end.stop_requested":'Someone in the meeting typed "@notes stop", so I left.',"server.meetings.end.meeting_ended":"The meeting ended.","server.meetings.end.removed":"Someone removed me from the meeting.","server.meetings.end.denied":"The host turned down my request to join.","server.meetings.end.lobby_timeout":"Nobody let me in, so I gave up waiting.","server.meetings.end.guests_blocked":"This meeting doesn't let guests join (the organizer's settings need a signed-in account), so I couldn't get in.","server.meetings.end.not_found":"This meeting link isn't active. Check the link; the meeting may have ended.","server.meetings.end.join_failed":"I couldn't get through the meeting's join screen.","server.meetings.end.consent_failed":"I couldn't post my note-taking notice in the meeting chat (chat may be off for guests), so I left without recording anything.","server.meetings.end.alone":"Everyone else left, so I left too.","server.meetings.end.max_length":"The meeting reached the 4-hour limit, so I left.","server.meetings.end.crashed":"The meeting bot stopped unexpectedly. What it heard until then is kept.","server.meetings.end.lost":"I lost contact with the cloud computer running the meeting. What it heard until then is kept.","server.meetings.end.meet_refused":"Google Meet didn't let me in as a guest. The host can allow guests in Host controls, or the meeting may not allow people outside the organization.","server.meetings.end.speech_unavailable":"I couldn't get speech-to-text for this meeting, so I didn't join.","server.meetings.card.settingUp":"Setting up transcription (one-time, about a minute)…","server.meetings.card.speechStopped":"Transcription stopped: {problem}","settings.section.phoneDevices":"Phone & devices","settings.section.thisServer":"This server","devices.title":"Phone & devices","devices.intro":"Let your phone and other computers use this computer.","devices.pair":"Pair a device","devices.pairAnother":"Pair another device","devices.paired":"Paired","devices.pairedNone":"Nothing paired yet.","devices.howTheyReach":"How they reach this computer","devices.moreWays":"More ways in","devices.computers.title":"Your other computers","devices.computers.detail":"Off until you turn it on. On, a computer on your tailnet can open this one from Connect to a server, once you give it a pairing code.","devices.computers.https":"Ready at {address}, with Tailscale's HTTPS certificate.","devices.computers.http":"Ready at {address}. Only your tailnet reaches it, and WireGuard encrypts it. For an https address, turn on HTTPS Certificates in Tailscale's DNS settings, then check again.","devices.computers.waiting":"Tailscale isn't connected on this computer yet. {app} answers here as soon as it is.","devices.route.wifi":"Same Wi-Fi","devices.route.wifiDetail":"Devices on this network. End-to-end encrypted.","devices.route.relay":"Anywhere, through {app}","devices.route.relayDetail":"End-to-end encrypted. {app} can't read it.","devices.route.https":"HTTPS address","devices.route.httpsDetail":"A free {app} web address, for browsers and other computers.","devices.route.httpsOn":"On · {address}","devices.route.on":"On","devices.route.onSince":"On · since {date}","devices.route.waiting":"On · waiting for a paired device","devices.route.off":"Off","devices.route.turnOn":"Turn on","devices.route.turnOff":"Turn off","devices.route.setUp":"Set up","devices.pair.title":"Pair a device with this computer","devices.pair.titlePhone":"Pair a phone with this computer","devices.pair.willTurnOn":"To reach this computer, {app} will turn on:","devices.pair.changeLater":"You can turn these off any time in Phone & devices.","devices.pair.pickOne":"Pick at least one way in.","devices.pair.done":"Done","devices.reach.wifi":"on Same Wi-Fi","devices.reach.tailscale":"on your tailnet","devices.reach.https":"at its {app} web address","devices.reach.relay":"anywhere through {app}","devices.reach.line":"Reaches this computer {ways}.","devices.reach.none":"No way in is on yet.","devices.simple.setUpTitle":"Use {app} on your phone","devices.simple.setUp":"Set up","devices.simple.yourPhone":"Your phone","devices.change":"Change","devices.done":"Done","devices.openCode":"Pairing code open · works until {until}","devices.revoke":"Revoke","remote.client.endsDec7":"This connection type ends Dec 7. After that, pair this computer again from the other computer's Phone & devices.","phone.code.pairingCode":"Pairing code","phone.code.typeIntro":"Open the {app} app and type this pairing code.","phone.signIn.emailCode":"Sign-in code from your email","settings.simple.account.noNameHint":"Not set yet","settings.simple.account.yourName":"Your name","phoneUpdate.title":"Update Limix Bot on your phone","phoneUpdate.body":"{phone} has an older version of the Limix Bot app, which can no longer connect to this computer away from your Wi-Fi. Update the app on that phone, then open it once on the same Wi-Fi as this computer. If that doesn't reconnect it, pair it again.","phoneUpdate.bodyMany":"{count} of your phones have an older version of the Limix Bot app, which can no longer connect to this computer away from your Wi-Fi. Update the app on each phone, then open it once on the same Wi-Fi as this computer. If that doesn't reconnect it, pair it again.","phoneUpdate.open":"Open Phone & devices","remote.devices.pairAgain":"Pair again"},Yv={de:()=>et(()=>import("./de-B1J17cai.js"),[]),es:()=>et(()=>import("./es-CS_V7OdX.js"),[]),fr:()=>et(()=>import("./fr-Dn65EJNi.js"),[]),hi:()=>et(()=>import("./hi-CHU0sl7u.js"),[]),ja:()=>et(()=>import("./ja-CJbW-M3a.js"),[]),"pt-br":()=>et(()=>import("./pt-br-BtcqPDCE.js"),[]),zh:()=>et(()=>import("./zh-BwjuB8Xo.js"),[]),"zh-tw":()=>et(()=>import("./zh-tw-CWDGum-b.js"),[]),uk:()=>et(()=>import("./uk-B_Q6nXm0.js"),[]),vi:()=>et(()=>import("./vi-KgT8L8Qj.js"),[]),tr:()=>et(()=>import("./tr-3Jw0E4fc.js"),[]),pl:()=>et(()=>import("./pl-tZIDksyW.js"),[]),ru:()=>et(()=>import("./ru-Bfcy52OT.js"),[]),it:()=>et(()=>import("./it-CbDr93sA.js"),[]),ko:()=>et(()=>import("./ko-ZQvzPil_.js"),[])},ci={en:"en",de:"de",es:"es",fr:"fr",hi:"hi",ja:"ja",pt:"pt-br","pt-br":"pt-br",zh:"zh","zh-hant":"zh-tw","zh-hk":"zh-tw","zh-mo":"zh-tw","zh-tw":"zh-tw",uk:"uk",vi:"vi",tr:"tr",pl:"pl",ru:"ru",it:"it",ko:"ko"},ia={en:Yo};async function Wv(a){const r=ci[a];if(ia[a]||!r||r==="en")return ia[a];const d=(await Yv[r]()).default;for(const[c,h]of Object.entries(ci))h===r&&(ia[c]??=d);return d}const Fv=[{code:"en",label:"English"},{code:"de",label:"Deutsch"},{code:"es",label:"Español"},{code:"fr",label:"Français"},{code:"hi",label:"हिन्दी"},{code:"ja",label:"日本語"},{code:"pt-br",label:"Português (Brasil)"},{code:"zh",label:"简体中文"},{code:"zh-tw",label:"繁體中文(台灣)"},{code:"uk",label:"Українська"},{code:"vi",label:"Tiếng Việt"},{code:"tr",label:"Türkçe"},{code:"pl",label:"Polski"},{code:"ru",label:"Русский"},{code:"it",label:"Italiano"},{code:"ko",label:"한국어"}];function dm(a,r){if(!a)return"en";let d=a.toLowerCase();for(;d;){if(r.has(d))return d;const c=d.lastIndexOf("-");if(c<0)break;d=d.slice(0,c)}return"en"}const jv=new Set(["ar","fa","he","ur"]);function Vv(){return new Set([...Object.keys(ci),...Object.keys(ia)])}async function Km(a){const r=++um;return await Wv(dm(a,Vv())).catch(()=>{}),r===um?Kv(dm(a,new Set(Object.keys(ia)))):Qs}function Kv(a){di=ia[a]??Yo,Qs=a;const r=typeof document>"u"?void 0:document?.documentElement;return r&&(r.lang=Qm(a),r.dir=jv.has(r.lang.split("-")[0])?"rtl":"ltr"),a}function Qm(a){const r=ci[a];return(r&&Fv.find(c=>ci[c.code]===r)?.code||a).split("-").map((c,h)=>h===0?c.toLowerCase():c.length===2?c.toUpperCase():c.length===4?c[0].toUpperCase()+c.slice(1).toLowerCase():c.toLowerCase()).join("-")}function ho(){return Qs}function Xm(a=globalThis.navigator?.language){const r=Qm(Qs);if(r.includes("-")||!a)return r;let d;try{d=Intl.getCanonicalLocales(a)[0]}catch{return r}return d?.toLowerCase().split("-")[0]===r?d:r}let Qs="en",di=Yo,um=0;function Zm(a,r,d){return!a||!Object.hasOwn(Yo,a)||[...(di[a]??Yo[a]).matchAll(/\{(\w+)\}/g)].some(([,w])=>!d||!Object.hasOwn(d,w))?r:T(a,d)}function hS(){return di!==Yo&&Object.keys(Yo).every(a=>Object.hasOwn(di,a))}function T(a,r){const d=di[a]??Yo[a];return!r&&!d.includes("{app}")?d:d.replace(/\{(\w+)\}/g,(c,h)=>r&&h in r?String(r[h]):h==="app"?jm():c)}const Oc=new Map,mS=()=>ho()==="en"?"en-US":Xm();function Qv(a,r=!1){if(ho()==="en")return r?{hour:"numeric"}:{hour:"numeric",minute:"2-digit"};if(!Oc.has(a)){const d=new Intl.DateTimeFormat(a,{hour:"numeric"}).resolvedOptions().hourCycle;Oc.set(a,d==="h23"||d==="h24")}return Oc.get(a)?{hour:"2-digit",minute:"2-digit"}:r?{hour:"numeric"}:{hour:"numeric",minute:"2-digit"}}let xc;function Xv(a){const r=new Date(a);if(Number.isNaN(r.getTime()))return T("time.invalid");const d=Xm();return xc?.locale!==d&&(xc={locale:d,clock:new Intl.DateTimeFormat(d,Qv(d))}),xc.clock.format(r)}function Zv(a){if(!a||typeof a!="object"||Array.isArray(a))return;const r=Object.entries(a);if(!r.every(([,c])=>typeof c=="string"||typeof c=="number"))return;const d=Object.fromEntries(r);return typeof d.until=="number"&&(d.time=Xv(d.until)),d}function Us(a,r){const{errorKey:d,errorParams:c}=Object(a);return typeof d!="string"||!d.startsWith("serverError.")?r:Zm(d,r,Zv(c))}const Hs="omb-language";let pn,pm=!1;const ai=new Set;function Hc(){try{return globalThis.localStorage}catch{return}}const Xs=()=>globalThis.window?.ogb?.desktopLanguage;function Jm(){try{return Hc()?.getItem(Hs)??null}catch{return null}}function Jv(a){const r=a.choice();if(r!==null||pm)return r;pm=!0;const d=Jm();return d!==null&&a.set(d).catch(()=>{}),d}function $m(){if(pn!==void 0)return pn;const a=Xs();return a?Jv(a):Jm()}function $v(a,r){return a??r??""}function zc(){for(const a of ai)a()}function hm(a){a.key!==Hs&&a.key!==null||a.storageArea&&a.storageArea!==Hc()||(pn=void 0,zc())}function eb(){pn=void 0,zc()}let Mc;function tb(a){return ai.add(a),ai.size===1&&typeof window<"u"&&(window.addEventListener("storage",hm),Mc=Xs()?.onChange(eb)),()=>{ai.delete(a),ai.size===0&&typeof window<"u"&&(window.removeEventListener("storage",hm),Mc?.(),Mc=void 0)}}function gS(a){pn=a;const r=Xs();r&&(r.set(a).catch(()=>{}),r.choice()===a&&(pn=void 0));try{const d=Hc();d?.setItem(Hs,a),!r&&d?.getItem(Hs)===a&&(pn=void 0)}catch{}zc()}function fS(){return je.useSyncExternalStore(tb,$m,()=>null)}function yS(){return Km($v($m(),void 0)||globalThis.navigator?.language)}function vS(a,r=!1){const[,d]=je.useState(0);je.useEffect(()=>{Km(a||globalThis.navigator?.language).then(c=>{r&&Xs()?.shown?.(c),d(h=>h+1)})},[a,r])}const mm=3,gm=2,fm=5,ob=[0,8,2,10,12,4,14,6,3,11,1,9,15,7,13,5].map(a=>(a+.5)/16),nb=[.02,.22,.12],ab=[.05,.55,.26],ib=[.1,.78,.62],sb=[.92,1,.8],rb=[.8,.95,.25],lb=[.55,.36,1],cb=[.25,.1,.45],ti={a:-.087,b:1.157,c:-.262},db=1162;function oi(a,r,d){return[a[0]+(r[0]-a[0])*d,a[1]+(r[1]-a[1])*d,a[2]+(r[2]-a[2])*d]}function Ec(a,r){return[a[0]*r,a[1]*r,a[2]*r]}function ub(a){let r=a;return()=>{r=r+1831565813|0;let d=Math.imul(r^r>>>15,1|r);return d=d+Math.imul(d^d>>>7,61|d)^d,((d^d>>>14)>>>0)/4294967296}}function pb(a,r,d,c){const h=a/d,w=c/db,C=c*(ti.a+ti.b*h+ti.c*h*h),L=c/d*(ti.b+2*ti.c*h),B=(r-C)/Math.sqrt(1+L*L)/w,y=.7+.3*Math.exp(-(((a/w-820)/800)**2)),P=.82+.18*Math.sin(B*.11+Math.sin(a*.004)*3)+.08*Math.sin(B*.37+a*.002);let R;if(B<0){const W=Math.exp(B/250);R=Ec(oi(nb,oi(ab,ib,Math.exp(B/80)),Math.min(1,W*1.5)),W*1.55)}else{const W=Math.exp(-B/130);R=Ec(oi(cb,oi(lb,rb,Math.exp(-B/14)),Math.min(1,Math.exp(-B/40)*1.1+W*.5)),W*1.5)}return Ec(oi(R,sb,Math.exp(-((B/24)**2))*.85),y*P)}function hb(a,r,d){const c=ub(7);a.fillStyle="#080908",a.fillRect(0,0,r,d);for(let w=0,C=0;w<d;w+=mm,C++)for(let L=0,B=0;L<r;L+=mm,B++){let[y,P,R]=pb(L,w,r,d);if(c()<.45){const te=c(),he=.05+.09*c();y+=he*(te<.33?1.4:.6),P+=he*(te>.33&&te<.66?1.3:.7),R+=he*(te>.66?1.2:.7)}const W=ob[(C&3)*4+(B&3)],le=te=>Math.round(Math.floor(Math.min(1,Math.max(0,te))*fm+W)/fm*255),ce=[le(y),le(P),le(R)];ce[0]+ce[1]+ce[2]<6||(a.fillStyle=`rgb(${ce[0]},${ce[1]},${ce[2]})`,a.fillRect(L,w,gm,gm))}a.globalCompositeOperation="lighter",a.filter="blur(36px)",a.globalAlpha=.34,a.drawImage(a.canvas,0,0),a.filter="none",a.globalAlpha=1,a.globalCompositeOperation="source-over";const h=a.createLinearGradient(0,d*.55,0,d);h.addColorStop(0,"rgb(8 9 8 / 0)"),h.addColorStop(1,"rgb(8 9 8 / 0.55)"),a.fillStyle=h,a.fillRect(0,0,r,d)}let ym=!1;function mb(){if(ym||typeof document>"u")return;const a=Math.ceil(Math.max(window.screen?.width??0,window.innerWidth)),r=Math.ceil(Math.max(window.screen?.height??0,window.innerHeight)),d=document.createElement("canvas");d.width=a,d.height=r;const c=d.getContext("2d");!c||!a||!r||(ym=!0,hb(c,a,r),d.toBlob(h=>{if(!h)return;const w=document.documentElement.style;w.setProperty("--aurora-field",`url(${URL.createObjectURL(h)})`),w.setProperty("--aurora-field-size",`${a}px ${r}px`)}))}const gb=["omb-skin","omb-installed","omb-email-gate","omb-drafts","omb-show-threads"];function _c(a){try{return gb.some(r=>a?.getItem(r)!=null)}catch{return!1}}const fb=["midnight","atelier","foundry","lagoon","graphite","linen","dusk","daylight","meadow","pop","halloween","diwali","aurora"],bS=[{id:"midnight",name:"Midnight",tagline:"The original. Cool and dark."},{id:"atelier",name:"Atelier",tagline:"Daylight on paper, warm and quiet."},{id:"foundry",name:"Foundry",tagline:"Night shift. Dark, warm, lit in brass."},{id:"lagoon",name:"Lagoon",tagline:"Cool daylight. Porcelain and deep teal."},{id:"graphite",name:"Graphite",tagline:"Quiet charcoal and softened steel blue."},{id:"linen",name:"Linen",tagline:"Clean daylight with a restrained navy accent."},{id:"dusk",name:"Dusk",tagline:"Muted plum after dark, calm and low-key."},{id:"daylight",name:"Daylight",tagline:"Midnight in reverse. Near-white, ink-black bubbles."},{id:"meadow",name:"Meadow",tagline:"Fresh white with a calm green. The Limix Bot look."},{id:"pop",name:"Pop",tagline:"Cream paper, thick ink outlines, hard shadows. Chunky and cheerful."},{id:"halloween",name:"Halloween",tagline:"Plum after dark, lit in pumpkin orange. Bats optional."},{id:"diwali",name:"Diwali",tagline:"Indigo night, lit in marigold and diya gold. Fireworks optional."},{id:"aurora",name:"Aurora",tagline:"Near-black, crossed by a band of green light. Glass on top."}],vm={light:"daylight",dark:"midnight"},yb="system",bm="midnight",eg="omb-skin",tg="(prefers-color-scheme: dark)";function og(a){return fb.includes(a)}function vb(a){return a==="system"||og(a)}function bb(){try{return typeof matchMedia=="function"&&matchMedia(tg).matches}catch{return!0}}function ng(a,r=bb()){return a!=="system"?a:r?vm.dark:vm.light}function ag(){try{return typeof localStorage>"u"?void 0:localStorage}catch{return}}function wS(){try{const a=ag(),r=a?.getItem(eg);return vb(r)?r:_c(a)?bm:yb}catch{return bm}}let oa=null;const zs=new Set;function kS(a){return zs.add(a),()=>{zs.delete(a)}}function ig(a){document.documentElement.dataset.skin=a,a==="aurora"&&mb();for(const r of zs)r();try{window.ogb?.applySkin?.(a)?.catch(()=>{})}catch{}}function wb(a){if(oa&&!a&&(oa.query.removeEventListener("change",oa.onChange),oa=null),!(!a||oa||typeof matchMedia!="function"))try{const r=matchMedia(tg),d=()=>ig(ng("system",r.matches));r.addEventListener("change",d),oa={query:r,onChange:d}}catch{}}function SS(a){if(og(a)){document.documentElement.dataset.skin=a;for(const r of zs)r()}}function kb(a){try{ag()?.setItem(eg,a)}catch{}wb(a==="system"),ig(ng(a))}function CS(a){kb(a)}const Sb=["standard","wide","full"],Rc="standard",Gc="omb-chat-width";function Cb(a){return Sb.includes(a)}function sg(){try{return typeof localStorage>"u"?void 0:localStorage}catch{return}}function AS(){try{const a=sg()?.getItem(Gc);return Cb(a)?a:Rc}catch{return Rc}}function TS(a){a===Rc?delete document.documentElement.dataset.chatWidth:document.documentElement.dataset.chatWidth=a;try{sg()?.setItem(Gc,a)}catch{}}const Ab=["skin","system","inter","poppins","serif"],Lc="skin",qc="omb-font";function Tb(a){return Ab.includes(a)}function rg(){try{return typeof localStorage>"u"?void 0:localStorage}catch{return}}function OS(){try{const a=rg()?.getItem(qc);return Tb(a)?a:Lc}catch{return Lc}}function xS(a){a===Lc?delete document.documentElement.dataset.font:document.documentElement.dataset.font=a;try{rg()?.setItem(qc,a)}catch{}}const Ob=!1,hn="omb-advanced-mode";let _s;const ii=new Set;function Zs(){try{return globalThis.localStorage}catch{return}}function Yc(){if(_s!==void 0)return _s;try{const a=Zs(),r=a?.getItem(hn);return r==="1"?!0:r==="0"?!1:_c(a)}catch{return!1}}function xb(){try{Zs()?.getItem(hn)==null&&cg(Yc())}catch{}}function lg(){for(const a of ii)a()}function wm(a){a.key!==hn&&a.key!==null||a.storageArea&&a.storageArea!==Zs()||(_s=void 0,lg())}function Mb(a){return ii.add(a),ii.size===1&&typeof window<"u"&&window.addEventListener("storage",wm),()=>{ii.delete(a),ii.size===0&&typeof window<"u"&&window.removeEventListener("storage",wm)}}function cg(a){_s=a;try{Zs()?.setItem(hn,a?"1":"0")}catch{}lg()}function Eb(){return je.useSyncExternalStore(Mb,Yc,()=>!1)}const Js="omb-show-run-card";let Gs;const si=new Set;function Wc(){try{return globalThis.localStorage}catch{return}}function Bb(){if(Gs!==void 0)return Gs;try{return Wc()?.getItem(Js)!=="0"}catch{return!0}}function dg(){for(const a of si)a()}function km(a){a.key!==Js&&a.key!==null||a.storageArea&&a.storageArea!==Wc()||(Gs=void 0,dg())}function Rb(a){return si.add(a),si.size===1&&typeof window<"u"&&window.addEventListener("storage",km),()=>{si.delete(a),si.size===0&&typeof window<"u"&&window.removeEventListener("storage",km)}}function MS(a){Gs=a;try{Wc()?.setItem(Js,a?"1":"0")}catch{}dg()}function ES(){return je.useSyncExternalStore(Rb,Bb,()=>!0)}const $s="omb-show-threads";let qs;const ri=new Set;function Fc(){try{return globalThis.localStorage}catch{return}}function Lb(){if(qs!==void 0)return qs;try{return Fc()?.getItem($s)!=="0"}catch{return!0}}function ug(){for(const a of ri)a()}function Sm(a){a.key!==$s&&a.key!==null||a.storageArea&&a.storageArea!==Fc()||(qs=void 0,ug())}function Nb(a){return ri.add(a),ri.size===1&&typeof window<"u"&&window.addEventListener("storage",Sm),()=>{ri.delete(a),ri.size===0&&typeof window<"u"&&window.removeEventListener("storage",Sm)}}function BS(a){qs=a;try{Fc()?.setItem($s,a?"1":"0")}catch{}ug()}function Ib(){return je.useSyncExternalStore(Nb,Lb,()=>!0)}function RS(){const a=Ib();return Eb()&&a}const pg=6,hg=40;function Db(a,r){const d=a.name.trim();if(!d||d.length>hg)return{ok:!1,error:"name"};let c;try{c=new URL(a.url.trim())}catch{return{ok:!1,error:"url"}}return c.protocol!=="http:"&&c.protocol!=="https:"?{ok:!1,error:"url"}:c.username||c.password||!c.hostname?{ok:!1,error:"url"}:r&&Pb(c.href,r)?{ok:!1,error:"self"}:{ok:!0,name:d,url:c.href}}function Pb(a,r){try{return new URL(a).origin===r}catch{return!1}}function jc(a){if(!a)return[];let r;try{r=JSON.parse(a)}catch{return[]}if(!Array.isArray(r))return[];const d=[],c=new Set;for(const h of r){if(d.length>=pg)break;if(!h||typeof h!="object")continue;const{id:w,name:C,url:L,page:B}=h;if(typeof w!="string"||!w||c.has(w)||typeof C!="string")continue;if(B!==void 0){const P=Hb(B),R=mg(C);if(!P||!R)continue;c.add(w),d.push({id:w,name:R,page:P});continue}if(typeof L!="string")continue;const y=Db({name:C,url:L});y.ok&&(c.add(w),d.push({id:w,name:y.name,url:y.url}))}return d}const Ub=200;function Hb(a){if(!a||typeof a!="object"||Array.isArray(a))return;const{botId:r,threadId:d,messageId:c}=a,h=w=>typeof w=="string"&&w.length>0&&w.length<=Ub;return h(r)&&h(d)&&h(c)?{botId:r,threadId:d,messageId:c}:void 0}function mg(a){return a.replace(/\s+/g," ").trim().slice(0,hg).trim()}function zb(a,r){return a.find(d=>d.page?.threadId===r.threadId&&d.page.messageId===r.messageId)}function LS(a,r,d){const c=zb(a,r);return c?a.filter(h=>h!==c):a.length>=pg?a:[...a,{id:_b(a),name:mg(d)||"Page",page:r}]}function _b(a){let r=a.length+1;const d=new Set(a.map(c=>c.id));for(;d.has(`panel-${r}`);)r++;return`panel-${r}`}const mi="omb-web-panels";let Ys,Cm,Am=[],Nc=!1;const li=new Set,gg=[];function er(){try{return globalThis.localStorage}catch{return}}function fg(){if(Ys!==void 0)return Ys;let a=null;try{a=er()?.getItem(mi)??null}catch{return gg}return a!==Cm&&(Cm=a,Am=jc(a)),Am}function yg(){for(const a of li)a()}function Tm(a){a.key!==mi&&a.key!==null||a.storageArea&&a.storageArea!==er()||(Ys=void 0,yg())}function Gb(a){return li.add(a),li.size===1&&typeof window<"u"&&window.addEventListener("storage",Tm),()=>{li.delete(a),li.size===0&&typeof window<"u"&&window.removeEventListener("storage",Tm)}}function NS(a){const r=JSON.stringify(a);Ys=jc(r);try{er()?.setItem(mi,r),Nc=!1}catch{Nc=!0}yg()}function IS(){if(!Nc)try{const a=er();if(a)return jc(a.getItem(mi))}catch{}return fg()}function DS(){return je.useSyncExternalStore(Gb,fg,()=>gg)}const ui="omb-new-look",qb=[qc,Gc,$s,Js,mi,"openmausbot.sidebarToolsLayout","openmausbot.pinnedCircles","openmausbot.universalPins"],pi="omb-advanced-back",vg=new Set,na=new Set;function Vc(){try{return globalThis.localStorage}catch{return}}function PS(){try{const a=Vc(),r=a?.getItem(ui);if(!Ob){if(a&&r&&a.getItem(hn)==null){const d=r==="due"||r==="seen";d&&a.getItem(pi)==null&&a.setItem(pi,"due"),cg(d)}xb();return}if(!a)return;if(r==null){const d=a.getItem(hn),c=d==="1"||d==null&&_c(a);for(const h of qb)a.removeItem(h);a.setItem(ui,c?"due":"none")}a.removeItem(hn)}catch{}}function bg(a){if(vg.has(a))return!1;try{return Vc()?.getItem(a)==="due"}catch{return!1}}function wg(a){try{Vc()?.setItem(a,"seen")}catch{vg.add(a)}for(const r of na)r()}const Yb=()=>bg(ui),US=()=>wg(ui),Wb=()=>bg(pi),HS=()=>wg(pi);function Om(a){if(!(a.key!==ui&&a.key!==pi&&a.key!==null))for(const r of na)r()}function kg(a){return na.add(a),na.size===1&&typeof window<"u"&&window.addEventListener("storage",Om),()=>{na.delete(a),na.size===0&&typeof window<"u"&&window.removeEventListener("storage",Om)}}function zS(){return je.useSyncExternalStore(kg,Yb,()=>!1)}function _S(){return je.useSyncExternalStore(kg,Wb,()=>!1)}const Fb=a=>a.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),jb=a=>a.replace(/^([A-Z])|[\s-_]+(\w)/g,(r,d,c)=>c?c.toUpperCase():d.toLowerCase()),xm=a=>{const r=jb(a);return r.charAt(0).toUpperCase()+r.slice(1)},Sg=(...a)=>a.filter((r,d,c)=>!!r&&r.trim()!==""&&c.indexOf(r)===d).join(" ").trim(),Vb=a=>{for(const r in a)if(r.startsWith("aria-")||r==="role"||r==="title")return!0};var Kb={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const Qb=je.forwardRef(({color:a="currentColor",size:r=24,strokeWidth:d=2,absoluteStrokeWidth:c,className:h="",children:w,iconNode:C,...L},B)=>je.createElement("svg",{ref:B,...Kb,width:r,height:r,stroke:a,strokeWidth:c?Number(d)*24/Number(r):d,className:Sg("lucide",h),...!w&&!Vb(L)&&{"aria-hidden":"true"},...L},[...C.map(([y,P])=>je.createElement(y,P)),...Array.isArray(w)?w:[w]]));const gn=(a,r)=>{const d=je.forwardRef(({className:c,...h},w)=>je.createElement(Qb,{ref:w,iconNode:r,className:Sg(`lucide-${Fb(xm(a))}`,`lucide-${a}`,c),...h}));return d.displayName=xm(a),d};const Xb=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],Cg=gn("check",Xb);const Zb=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],GS=gn("chevron-down",Zb);const Jb=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],$b=gn("chevron-left",Jb);const ew=[["path",{d:"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z",key:"p7xjir"}]],tw=gn("cloud",ew);const ow=[["path",{d:"M18 5a2 2 0 0 1 2 2v8.526a2 2 0 0 0 .212.897l1.068 2.127a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45l1.068-2.127A2 2 0 0 0 4 15.526V7a2 2 0 0 1 2-2z",key:"1pdavp"}],["path",{d:"M20.054 15.987H3.946",key:"14rxg9"}]],qS=gn("laptop",ow);const nw=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],YS=gn("search",nw);const aw=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],WS=gn("x",aw),FS="Limix Bot",gi="https://github.com/leomieo/limix-bot",iw=`${gi}/tree/main/docs`,jS=iw,VS=`${gi}/blob/main/docs/approval-levels.md`,KS="https://docs.openmausbot.com/docs/troubleshooting/google-sign-in-cloud-browser",QS="https://discord.gg/9Wb8MEpXRs",XS=`${gi}/releases`,ZS="https://cloud.openmausbot.com/cloud",JS=`${gi}/blob/main/LICENSE`,$S="https://apps.apple.com/in/app/mausbot/id6803387923",eC=`${gi}/releases/download/android-v1.5.0/OpenMausBot.apk`;function sw(){return"0.2.13"}const rw={darwin:"macOS",win32:"Windows",linux:"Linux"};function tC(a){return(a&&rw[a])??null}async function lw(a){if(window.ogb?.openExternal){await window.ogb.openExternal(a);return}window.open(a,"_blank","noopener,noreferrer")}async function oC(a){if(window.ogb)return lw(a);window.location.href=a}const cw="phc_m2hP39w8y2gLPvHgDvSXAu6xcZ3agjf4ruL56rGcMZEe",Kc="omb-analytics-opt-out",Qc=()=>globalThis.window?.ogb?.desktopAnalytics;let uo,Ps,hi=[],Ic;function tr(){if(Ic!==void 0)return Ic;const a=Qc()?.enabled();if(typeof a=="boolean")return a;try{return localStorage.getItem(Kc)!=="1"}catch{return!0}}function dw(a,r){return a?r?"opt-in":"init":r?"opt-out":"none"}function nC(a){Ic=a,Qc()?.set?.(a).catch(()=>{});try{localStorage.setItem(Kc,a?"0":"1")}catch{}switch(a||(hi=[]),dw(a,uo!==void 0)){case"opt-out":uo?.opt_out_capturing();break;case"opt-in":uo?.opt_in_capturing({captureEventName:!1});break;case"init":pw();break}}function uw(){const a=Qc();if(!(!a?.set||a.enabled()!==null)){try{if(localStorage.getItem(Kc)!=="1")return}catch{return}a.set(!1).catch(()=>{})}}function pw(){return uw(),uo||!tr()?Promise.resolve():(Ps??=et(async()=>{const{default:a}=await import("./module-DCUsy2BQ.js");return{default:a}},[]).then(({default:a})=>hw(a)).catch(()=>{hi=[]}).finally(()=>{Ps=void 0}),Ps)}function hw(a){if(!tr()){hi=[];return}a.init(cw,{api_host:"https://us.i.posthog.com",autocapture:!1,capture_pageview:!1,person_profiles:"identified_only",persistence:"localStorage",disable_surveys:!0,save_referrer:!1,save_campaign_params:!1,disable_capture_url_hashes:!0,before_send:kw,advanced_disable_flags:!0});for(const d of["$initial_person_info","$initial_referrer_info","$initial_campaign_params"])a.unregister(d);a.has_opted_out_capturing()&&a.opt_in_capturing({captureEventName:!1}),uo=a,a.register({app_version:sw(),surface:Sw()});const r=Ag();localStorage.getItem("omb-installed")||(localStorage.setItem("omb-installed",new Date().toISOString()),a.capture("app_first_open",{platform:r})),a.capture("app_opened",{platform:r}),yw();for(const d of hi.splice(0))d(a)}function Ag(){return navigator.userAgent.includes("Electron")?"desktop":"browser"}const Mm="omb-analytics-active-day",mw=10*6e4;function gw(a=new Date){const r=d=>String(d).padStart(2,"0");return`${a.getFullYear()}-${r(a.getMonth()+1)}-${r(a.getDate())}`}let Em;function fw(a){if(Em===a)return!1;try{if(localStorage.getItem(Mm)===a)return!1}catch{}Em=a;try{localStorage.setItem(Mm,a)}catch{}return!0}function Ns(){!uo||!tr()||globalThis.document?.visibilityState!=="visible"||fw(gw())&&uo.capture("app_active",{platform:Ag(),mode:Yc()?"advanced":"simple"})}function yw(){globalThis.document&&(Ns(),document.addEventListener("visibilitychange",Ns),window.addEventListener("focus",Ns),setInterval(()=>{document.hasFocus()&&Ns()},mw))}const vw=new Set(["current_url","url","host","pathname","prev_pageview_pathname","referrer","referring_domain","search_engine","ph_keyword","gad_source","mc_cid","gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"]);function bw(a){const r=a.replace(/^\$/,"").replace(/^(?:initial_|session_entry_)/,"");return r.startsWith("utm_")||vw.has(r)}function ww(a){if(!(!a||typeof a!="object"))for(const r of Object.keys(a))bw(r)&&delete a[r]}function kw(a){if(!a)return a;for(const r of[a.properties,a.$set,a.$set_once,a.properties?.$set,a.properties?.$set_once])ww(r);return a}function Sw(){return globalThis.window?.ogb?.environments?"local":"server"}function Cw(a){tr()&&(uo?a(uo):Ps&&hi.push(a))}function aC(a,r){Cw(d=>d.capture(a,r))}const Tg="omb-email-gate";function iC(){return!!localStorage.getItem(Tg)}function sC(a){localStorage.setItem(Tg,a)}function Og(a){var r,d,c="";if(typeof a=="string"||typeof a=="number")c+=a;else if(typeof a=="object")if(Array.isArray(a)){var h=a.length;for(r=0;r<h;r++)a[r]&&(d=Og(a[r]))&&(c&&(c+=" "),c+=d)}else for(d in a)a[d]&&(c&&(c+=" "),c+=d);return c}function Aw(){for(var a,r,d=0,c="",h=arguments.length;d<h;d++)(a=arguments[d])&&(r=Og(a))&&(c&&(c+=" "),c+=r);return c}const Tw=(a,r)=>{const d=new Array(a.length+r.length);for(let c=0;c<a.length;c++)d[c]=a[c];for(let c=0;c<r.length;c++)d[a.length+c]=r[c];return d},Ow=(a,r)=>({classGroupId:a,validator:r}),xg=(a=new Map,r=null,d)=>({nextPart:a,validators:r,classGroupId:d}),Ws="-",Bm=[],xw="arbitrary..",Mw=a=>{const r=Bw(a),{conflictingClassGroups:d,conflictingClassGroupModifiers:c}=a;return{getClassGroupId:C=>{if(C.startsWith("[")&&C.endsWith("]"))return Ew(C);const L=C.split(Ws),B=L[0]===""&&L.length>1?1:0;return Mg(L,B,r)},getConflictingClassGroupIds:(C,L)=>{if(L){const B=c[C],y=d[C];return B?y?Tw(y,B):B:y||Bm}return d[C]||Bm}}},Mg=(a,r,d)=>{if(a.length-r===0)return d.classGroupId;const h=a[r],w=d.nextPart.get(h);if(w){const y=Mg(a,r+1,w);if(y)return y}const C=d.validators;if(C===null)return;const L=r===0?a.join(Ws):a.slice(r).join(Ws),B=C.length;for(let y=0;y<B;y++){const P=C[y];if(P.validator(L))return P.classGroupId}},Ew=a=>a.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const r=a.slice(1,-1),d=r.indexOf(":"),c=r.slice(0,d);return c?xw+c:void 0})(),Bw=a=>{const{theme:r,classGroups:d}=a;return Rw(d,r)},Rw=(a,r)=>{const d=xg();for(const c in a){const h=a[c];Xc(h,d,c,r)}return d},Xc=(a,r,d,c)=>{const h=a.length;for(let w=0;w<h;w++){const C=a[w];Lw(C,r,d,c)}},Lw=(a,r,d,c)=>{if(typeof a=="string"){Nw(a,r,d);return}if(typeof a=="function"){Iw(a,r,d,c);return}Dw(a,r,d,c)},Nw=(a,r,d)=>{const c=a===""?r:Eg(r,a);c.classGroupId=d},Iw=(a,r,d,c)=>{if(Pw(a)){Xc(a(c),r,d,c);return}r.validators===null&&(r.validators=[]),r.validators.push(Ow(d,a))},Dw=(a,r,d,c)=>{const h=Object.entries(a),w=h.length;for(let C=0;C<w;C++){const[L,B]=h[C];Xc(B,Eg(r,L),d,c)}},Eg=(a,r)=>{let d=a;const c=r.split(Ws),h=c.length;for(let w=0;w<h;w++){const C=c[w];let L=d.nextPart.get(C);L||(L=xg(),d.nextPart.set(C,L)),d=L}return d},Pw=a=>"isThemeGetter"in a&&a.isThemeGetter===!0,Uw=a=>{if(a<1)return{get:()=>{},set:()=>{}};let r=0,d=Object.create(null),c=Object.create(null);const h=(w,C)=>{d[w]=C,r++,r>a&&(r=0,c=d,d=Object.create(null))};return{get(w){let C=d[w];if(C!==void 0)return C;if((C=c[w])!==void 0)return h(w,C),C},set(w,C){w in d?d[w]=C:h(w,C)}}},Dc="!",Rm=":",Hw=[],Lm=(a,r,d,c,h)=>({modifiers:a,hasImportantModifier:r,baseClassName:d,maybePostfixModifierPosition:c,isExternal:h}),zw=a=>{const{prefix:r,experimentalParseClassName:d}=a;let c=h=>{const w=[];let C=0,L=0,B=0,y;const P=h.length;for(let te=0;te<P;te++){const he=h[te];if(C===0&&L===0){if(he===Rm){w.push(h.slice(B,te)),B=te+1;continue}if(he==="/"){y=te;continue}}he==="["?C++:he==="]"?C--:he==="("?L++:he===")"&&L--}const R=w.length===0?h:h.slice(B);let W=R,le=!1;R.endsWith(Dc)?(W=R.slice(0,-1),le=!0):R.startsWith(Dc)&&(W=R.slice(1),le=!0);const ce=y&&y>B?y-B:void 0;return Lm(w,le,W,ce)};if(r){const h=r+Rm,w=c;c=C=>C.startsWith(h)?w(C.slice(h.length)):Lm(Hw,!1,C,void 0,!0)}if(d){const h=c;c=w=>d({className:w,parseClassName:h})}return c},_w=a=>{const r=new Map;return a.orderSensitiveModifiers.forEach((d,c)=>{r.set(d,1e6+c)}),d=>{const c=[];let h=[];for(let w=0;w<d.length;w++){const C=d[w],L=C[0]==="[",B=r.has(C);L||B?(h.length>0&&(h.sort(),c.push(...h),h=[]),c.push(C)):h.push(C)}return h.length>0&&(h.sort(),c.push(...h)),c}},Gw=a=>({cache:Uw(a.cacheSize),parseClassName:zw(a),sortModifiers:_w(a),postfixLookupClassGroupIds:qw(a),...Mw(a)}),qw=a=>{const r=Object.create(null),d=a.postfixLookupClassGroups;if(d)for(let c=0;c<d.length;c++)r[d[c]]=!0;return r},Yw=/\s+/,Ww=(a,r)=>{const{parseClassName:d,getClassGroupId:c,getConflictingClassGroupIds:h,sortModifiers:w,postfixLookupClassGroupIds:C}=r,L=[],B=a.trim().split(Yw);let y="";for(let P=B.length-1;P>=0;P-=1){const R=B[P],{isExternal:W,modifiers:le,hasImportantModifier:ce,baseClassName:te,maybePostfixModifierPosition:he}=d(R);if(W){y=R+(y.length>0?" "+y:y);continue}let Be=!!he,Oe;if(Be){const Q=te.substring(0,he);Oe=c(Q);const U=Oe&&C[Oe]?c(te):void 0;U&&U!==Oe&&(Oe=U,Be=!1)}else Oe=c(te);if(!Oe){if(!Be){y=R+(y.length>0?" "+y:y);continue}if(Oe=c(te),!Oe){y=R+(y.length>0?" "+y:y);continue}Be=!1}const xe=le.length===0?"":le.length===1?le[0]:w(le).join(":"),He=ce?xe+Dc:xe,Ve=He+Oe;if(L.indexOf(Ve)>-1)continue;L.push(Ve);const Re=h(Oe,Be);for(let Q=0;Q<Re.length;++Q){const U=Re[Q];L.push(He+U)}y=R+(y.length>0?" "+y:y)}return y},Fw=(...a)=>{let r=0,d,c,h="";for(;r<a.length;)(d=a[r++])&&(c=Bg(d))&&(h&&(h+=" "),h+=c);return h},Bg=a=>{if(typeof a=="string")return a;let r,d="";for(let c=0;c<a.length;c++)a[c]&&(r=Bg(a[c]))&&(d&&(d+=" "),d+=r);return d},jw=(a,...r)=>{let d,c,h,w;const C=B=>{const y=r.reduce((P,R)=>R(P),a());return d=Gw(y),c=d.cache.get,h=d.cache.set,w=L,L(B)},L=B=>{const y=c(B);if(y)return y;const P=Ww(B,d);return h(B,P),P};return w=C,(...B)=>w(Fw(...B))},Vw=[],Ge=a=>{const r=d=>d[a]||Vw;return r.isThemeGetter=!0,r},Rg=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Lg=/^\((?:(\w[\w-]*):)?(.+)\)$/i,Kw=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,Qw=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Xw=/\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$/,Zw=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,Jw=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,$w=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,qo=a=>Kw.test(a),ee=a=>!!a&&!Number.isNaN(Number(a)),qt=a=>!!a&&Number.isInteger(Number(a)),Bc=a=>a.endsWith("%")&&ee(a.slice(0,-1)),co=a=>Qw.test(a),Ng=()=>!0,ek=a=>Xw.test(a)&&!Zw.test(a),Zc=()=>!1,tk=a=>Jw.test(a),ok=a=>$w.test(a),nk=a=>!H(a)&&!_(a),ak=a=>a.startsWith("@container")&&(a[10]==="/"&&a[11]!==void 0||a[11]==="s"&&a[16]!==void 0&&a.startsWith("-size/",10)||a[11]==="n"&&a[18]!==void 0&&a.startsWith("-normal/",10)),ik=a=>Wo(a,Pg,Zc),H=a=>Rg.test(a),dn=a=>Wo(a,Ug,ek),Nm=a=>Wo(a,hk,ee),sk=a=>Wo(a,zg,Ng),rk=a=>Wo(a,Hg,Zc),Im=a=>Wo(a,Ig,Zc),lk=a=>Wo(a,Dg,ok),Is=a=>Wo(a,_g,tk),_=a=>Lg.test(a),ni=a=>fn(a,Ug),ck=a=>fn(a,Hg),Dm=a=>fn(a,Ig),dk=a=>fn(a,Pg),uk=a=>fn(a,Dg),Ds=a=>fn(a,_g,!0),pk=a=>fn(a,zg,!0),Wo=(a,r,d)=>{const c=Rg.exec(a);return c?c[1]?r(c[1]):d(c[2]):!1},fn=(a,r,d=!1)=>{const c=Lg.exec(a);return c?c[1]?r(c[1]):d:!1},Ig=a=>a==="position"||a==="percentage",Dg=a=>a==="image"||a==="url",Pg=a=>a==="length"||a==="size"||a==="bg-size",Ug=a=>a==="length",hk=a=>a==="number",Hg=a=>a==="family-name",zg=a=>a==="number"||a==="weight",_g=a=>a==="shadow",mk=()=>{const a=Ge("color"),r=Ge("font"),d=Ge("text"),c=Ge("font-weight"),h=Ge("tracking"),w=Ge("leading"),C=Ge("breakpoint"),L=Ge("container"),B=Ge("spacing"),y=Ge("radius"),P=Ge("shadow"),R=Ge("inset-shadow"),W=Ge("text-shadow"),le=Ge("drop-shadow"),ce=Ge("blur"),te=Ge("perspective"),he=Ge("aspect"),Be=Ge("ease"),Oe=Ge("animate"),xe=()=>["auto","avoid","all","avoid-page","page","left","right","column"],He=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],Ve=()=>[...He(),_,H],Re=()=>["auto","hidden","clip","visible","scroll"],Q=()=>["auto","contain","none"],U=()=>[_,H,B],Ae=()=>[qo,"full","auto",...U()],Yt=()=>[qt,"none","subgrid",_,H],ct=()=>["auto",{span:["full",qt,_,H]},qt,_,H],ze=()=>[qt,"auto",_,H],Ut=()=>["auto","min","max","fr",_,H],dt=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],qe=()=>["start","end","center","stretch","center-safe","end-safe"],A=()=>["auto",...U()],N=()=>[qo,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...U()],V=()=>[qo,"screen","full","dvw","lvw","svw","min","max","fit",...U()],de=()=>[qo,"screen","full","lh","dvh","lvh","svh","min","max","fit",...U()],I=()=>[a,_,H],g=()=>[...He(),Dm,Im,{position:[_,H]}],E=()=>["no-repeat",{repeat:["","x","y","space","round"]}],D=()=>["auto","cover","contain",dk,ik,{size:[_,H]}],z=()=>[Bc,ni,dn],Y=()=>["","none","full",y,_,H],j=()=>["",ee,ni,dn],se=()=>["solid","dashed","dotted","double"],Ye=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],$=()=>[ee,Bc,Dm,Im],go=()=>["","none",ce,_,H],Wt=()=>["none",ee,_,H],fo=()=>["none",ee,_,H],yn=()=>[ee,_,H],kt=()=>[qo,"full",...U()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[co],breakpoint:[co],color:[Ng],container:[co],"drop-shadow":[co],ease:["in","out","in-out"],font:[nk],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[co],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[co],shadow:[co],spacing:["px",ee],text:[co],"text-shadow":[co],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",qo,H,_,he]}],container:["container"],"container-type":[{"@container":["","normal","size",_,H]}],"container-named":[ak],columns:[{columns:[ee,H,_,L]}],"break-after":[{"break-after":xe()}],"break-before":[{"break-before":xe()}],"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:Ve()}],overflow:[{overflow:Re()}],"overflow-x":[{"overflow-x":Re()}],"overflow-y":[{"overflow-y":Re()}],overscroll:[{overscroll:Q()}],"overscroll-x":[{"overscroll-x":Q()}],"overscroll-y":[{"overscroll-y":Q()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:Ae()}],"inset-x":[{"inset-x":Ae()}],"inset-y":[{"inset-y":Ae()}],start:[{"inset-s":Ae(),start:Ae()}],end:[{"inset-e":Ae(),end:Ae()}],"inset-bs":[{"inset-bs":Ae()}],"inset-be":[{"inset-be":Ae()}],top:[{top:Ae()}],right:[{right:Ae()}],bottom:[{bottom:Ae()}],left:[{left:Ae()}],visibility:["visible","invisible","collapse"],z:[{z:[qt,"auto",_,H]}],basis:[{basis:[qo,"full","auto",L,...U()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[ee,qo,"auto","initial","none",H]}],grow:[{grow:["",ee,_,H]}],shrink:[{shrink:["",ee,_,H]}],order:[{order:[qt,"first","last","none",_,H]}],"grid-cols":[{"grid-cols":Yt()}],"col-start-end":[{col:ct()}],"col-start":[{"col-start":ze()}],"col-end":[{"col-end":ze()}],"grid-rows":[{"grid-rows":Yt()}],"row-start-end":[{row:ct()}],"row-start":[{"row-start":ze()}],"row-end":[{"row-end":ze()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":Ut()}],"auto-rows":[{"auto-rows":Ut()}],gap:[{gap:U()}],"gap-x":[{"gap-x":U()}],"gap-y":[{"gap-y":U()}],"justify-content":[{justify:[...dt(),"normal"]}],"justify-items":[{"justify-items":[...qe(),"normal"]}],"justify-self":[{"justify-self":["auto",...qe()]}],"align-content":[{content:["normal",...dt()]}],"align-items":[{items:[...qe(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...qe(),{baseline:["","last"]}]}],"place-content":[{"place-content":dt()}],"place-items":[{"place-items":[...qe(),"baseline"]}],"place-self":[{"place-self":["auto",...qe()]}],p:[{p:U()}],px:[{px:U()}],py:[{py:U()}],ps:[{ps:U()}],pe:[{pe:U()}],pbs:[{pbs:U()}],pbe:[{pbe:U()}],pt:[{pt:U()}],pr:[{pr:U()}],pb:[{pb:U()}],pl:[{pl:U()}],m:[{m:A()}],mx:[{mx:A()}],my:[{my:A()}],ms:[{ms:A()}],me:[{me:A()}],mbs:[{mbs:A()}],mbe:[{mbe:A()}],mt:[{mt:A()}],mr:[{mr:A()}],mb:[{mb:A()}],ml:[{ml:A()}],"space-x":[{"space-x":U()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":U()}],"space-y-reverse":["space-y-reverse"],size:[{size:N()}],"inline-size":[{inline:["auto",...V()]}],"min-inline-size":[{"min-inline":["auto",...V()]}],"max-inline-size":[{"max-inline":["none",...V()]}],"block-size":[{block:["auto",...de()]}],"min-block-size":[{"min-block":["auto",...de()]}],"max-block-size":[{"max-block":["none",...de()]}],w:[{w:[L,"screen",...N()]}],"min-w":[{"min-w":[L,"screen","none",...N()]}],"max-w":[{"max-w":[L,"screen","none","prose",{screen:[C]},...N()]}],h:[{h:["screen","lh",...N()]}],"min-h":[{"min-h":["screen","lh","none",...N()]}],"max-h":[{"max-h":["screen","lh",...N()]}],"font-size":[{text:["base",d,ni,dn]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[c,pk,sk]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",Bc,H]}],"font-family":[{font:[ck,rk,r]}],"font-features":[{"font-features":[H]}],"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:[h,_,H]}],"line-clamp":[{"line-clamp":[ee,"none",_,Nm]}],leading:[{leading:[w,...U()]}],"list-image":[{"list-image":["none",_,H]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",_,H]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:I()}],"text-color":[{text:I()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...se(),"wavy"]}],"text-decoration-thickness":[{decoration:[ee,"from-font","auto",_,dn]}],"text-decoration-color":[{decoration:I()}],"underline-offset":[{"underline-offset":[ee,"auto",_,H]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:U()}],"tab-size":[{tab:[qt,_,H]}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",_,H]}],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",_,H]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:g()}],"bg-repeat":[{bg:E()}],"bg-size":[{bg:D()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},qt,_,H],radial:["",_,H],conic:[qt,_,H]},uk,lk]}],"bg-color":[{bg:I()}],"gradient-from-pos":[{from:z()}],"gradient-via-pos":[{via:z()}],"gradient-to-pos":[{to:z()}],"gradient-from":[{from:I()}],"gradient-via":[{via:I()}],"gradient-to":[{to:I()}],rounded:[{rounded:Y()}],"rounded-s":[{"rounded-s":Y()}],"rounded-e":[{"rounded-e":Y()}],"rounded-t":[{"rounded-t":Y()}],"rounded-r":[{"rounded-r":Y()}],"rounded-b":[{"rounded-b":Y()}],"rounded-l":[{"rounded-l":Y()}],"rounded-ss":[{"rounded-ss":Y()}],"rounded-se":[{"rounded-se":Y()}],"rounded-ee":[{"rounded-ee":Y()}],"rounded-es":[{"rounded-es":Y()}],"rounded-tl":[{"rounded-tl":Y()}],"rounded-tr":[{"rounded-tr":Y()}],"rounded-br":[{"rounded-br":Y()}],"rounded-bl":[{"rounded-bl":Y()}],"border-w":[{border:j()}],"border-w-x":[{"border-x":j()}],"border-w-y":[{"border-y":j()}],"border-w-s":[{"border-s":j()}],"border-w-e":[{"border-e":j()}],"border-w-bs":[{"border-bs":j()}],"border-w-be":[{"border-be":j()}],"border-w-t":[{"border-t":j()}],"border-w-r":[{"border-r":j()}],"border-w-b":[{"border-b":j()}],"border-w-l":[{"border-l":j()}],"divide-x":[{"divide-x":j()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":j()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...se(),"hidden","none"]}],"divide-style":[{divide:[...se(),"hidden","none"]}],"border-color":[{border:I()}],"border-color-x":[{"border-x":I()}],"border-color-y":[{"border-y":I()}],"border-color-s":[{"border-s":I()}],"border-color-e":[{"border-e":I()}],"border-color-bs":[{"border-bs":I()}],"border-color-be":[{"border-be":I()}],"border-color-t":[{"border-t":I()}],"border-color-r":[{"border-r":I()}],"border-color-b":[{"border-b":I()}],"border-color-l":[{"border-l":I()}],"divide-color":[{divide:I()}],"outline-style":[{outline:[...se(),"none","hidden"]}],"outline-offset":[{"outline-offset":[ee,_,H]}],"outline-w":[{outline:["",ee,ni,dn]}],"outline-color":[{outline:I()}],shadow:[{shadow:["","none",P,Ds,Is]}],"shadow-color":[{shadow:I()}],"inset-shadow":[{"inset-shadow":["none",R,Ds,Is]}],"inset-shadow-color":[{"inset-shadow":I()}],"ring-w":[{ring:j()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:I()}],"ring-offset-w":[{"ring-offset":[ee,dn]}],"ring-offset-color":[{"ring-offset":I()}],"inset-ring-w":[{"inset-ring":j()}],"inset-ring-color":[{"inset-ring":I()}],"text-shadow":[{"text-shadow":["none",W,Ds,Is]}],"text-shadow-color":[{"text-shadow":I()}],opacity:[{opacity:[ee,_,H]}],"mix-blend":[{"mix-blend":[...Ye(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":Ye()}],"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":[ee]}],"mask-image-linear-from-pos":[{"mask-linear-from":$()}],"mask-image-linear-to-pos":[{"mask-linear-to":$()}],"mask-image-linear-from-color":[{"mask-linear-from":I()}],"mask-image-linear-to-color":[{"mask-linear-to":I()}],"mask-image-t-from-pos":[{"mask-t-from":$()}],"mask-image-t-to-pos":[{"mask-t-to":$()}],"mask-image-t-from-color":[{"mask-t-from":I()}],"mask-image-t-to-color":[{"mask-t-to":I()}],"mask-image-r-from-pos":[{"mask-r-from":$()}],"mask-image-r-to-pos":[{"mask-r-to":$()}],"mask-image-r-from-color":[{"mask-r-from":I()}],"mask-image-r-to-color":[{"mask-r-to":I()}],"mask-image-b-from-pos":[{"mask-b-from":$()}],"mask-image-b-to-pos":[{"mask-b-to":$()}],"mask-image-b-from-color":[{"mask-b-from":I()}],"mask-image-b-to-color":[{"mask-b-to":I()}],"mask-image-l-from-pos":[{"mask-l-from":$()}],"mask-image-l-to-pos":[{"mask-l-to":$()}],"mask-image-l-from-color":[{"mask-l-from":I()}],"mask-image-l-to-color":[{"mask-l-to":I()}],"mask-image-x-from-pos":[{"mask-x-from":$()}],"mask-image-x-to-pos":[{"mask-x-to":$()}],"mask-image-x-from-color":[{"mask-x-from":I()}],"mask-image-x-to-color":[{"mask-x-to":I()}],"mask-image-y-from-pos":[{"mask-y-from":$()}],"mask-image-y-to-pos":[{"mask-y-to":$()}],"mask-image-y-from-color":[{"mask-y-from":I()}],"mask-image-y-to-color":[{"mask-y-to":I()}],"mask-image-radial":[{"mask-radial":[_,H]}],"mask-image-radial-from-pos":[{"mask-radial-from":$()}],"mask-image-radial-to-pos":[{"mask-radial-to":$()}],"mask-image-radial-from-color":[{"mask-radial-from":I()}],"mask-image-radial-to-color":[{"mask-radial-to":I()}],"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":He()}],"mask-image-conic-pos":[{"mask-conic":[ee]}],"mask-image-conic-from-pos":[{"mask-conic-from":$()}],"mask-image-conic-to-pos":[{"mask-conic-to":$()}],"mask-image-conic-from-color":[{"mask-conic-from":I()}],"mask-image-conic-to-color":[{"mask-conic-to":I()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:g()}],"mask-repeat":[{mask:E()}],"mask-size":[{mask:D()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",_,H]}],filter:[{filter:["","none",_,H]}],blur:[{blur:go()}],brightness:[{brightness:[ee,_,H]}],contrast:[{contrast:[ee,_,H]}],"drop-shadow":[{"drop-shadow":["","none",le,Ds,Is]}],"drop-shadow-color":[{"drop-shadow":I()}],grayscale:[{grayscale:["",ee,_,H]}],"hue-rotate":[{"hue-rotate":[ee,_,H]}],invert:[{invert:["",ee,_,H]}],saturate:[{saturate:[ee,_,H]}],sepia:[{sepia:["",ee,_,H]}],"backdrop-filter":[{"backdrop-filter":["","none",_,H]}],"backdrop-blur":[{"backdrop-blur":go()}],"backdrop-brightness":[{"backdrop-brightness":[ee,_,H]}],"backdrop-contrast":[{"backdrop-contrast":[ee,_,H]}],"backdrop-grayscale":[{"backdrop-grayscale":["",ee,_,H]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[ee,_,H]}],"backdrop-invert":[{"backdrop-invert":["",ee,_,H]}],"backdrop-opacity":[{"backdrop-opacity":[ee,_,H]}],"backdrop-saturate":[{"backdrop-saturate":[ee,_,H]}],"backdrop-sepia":[{"backdrop-sepia":["",ee,_,H]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":U()}],"border-spacing-x":[{"border-spacing-x":U()}],"border-spacing-y":[{"border-spacing-y":U()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",_,H]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[ee,"initial",_,H]}],ease:[{ease:["linear","initial",Be,_,H]}],delay:[{delay:[ee,_,H]}],animate:[{animate:["none",Oe,_,H]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[te,_,H]}],"perspective-origin":[{"perspective-origin":Ve()}],rotate:[{rotate:Wt()}],"rotate-x":[{"rotate-x":Wt()}],"rotate-y":[{"rotate-y":Wt()}],"rotate-z":[{"rotate-z":Wt()}],scale:[{scale:fo()}],"scale-x":[{"scale-x":fo()}],"scale-y":[{"scale-y":fo()}],"scale-z":[{"scale-z":fo()}],"scale-3d":["scale-3d"],skew:[{skew:yn()}],"skew-x":[{"skew-x":yn()}],"skew-y":[{"skew-y":yn()}],transform:[{transform:[_,H,"","none","gpu","cpu"]}],"transform-origin":[{origin:Ve()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:kt()}],"translate-x":[{"translate-x":kt()}],"translate-y":[{"translate-y":kt()}],"translate-z":[{"translate-z":kt()}],"translate-none":["translate-none"],zoom:[{zoom:[qt,_,H]}],accent:[{accent:I()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:I()}],"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",_,H]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scrollbar-thumb-color":[{"scrollbar-thumb":I()}],"scrollbar-track-color":[{"scrollbar-track":I()}],"scrollbar-gutter":[{"scrollbar-gutter":["auto","stable","both"]}],"scrollbar-w":[{scrollbar:["auto","thin","none"]}],"scroll-m":[{"scroll-m":U()}],"scroll-mx":[{"scroll-mx":U()}],"scroll-my":[{"scroll-my":U()}],"scroll-ms":[{"scroll-ms":U()}],"scroll-me":[{"scroll-me":U()}],"scroll-mbs":[{"scroll-mbs":U()}],"scroll-mbe":[{"scroll-mbe":U()}],"scroll-mt":[{"scroll-mt":U()}],"scroll-mr":[{"scroll-mr":U()}],"scroll-mb":[{"scroll-mb":U()}],"scroll-ml":[{"scroll-ml":U()}],"scroll-p":[{"scroll-p":U()}],"scroll-px":[{"scroll-px":U()}],"scroll-py":[{"scroll-py":U()}],"scroll-ps":[{"scroll-ps":U()}],"scroll-pe":[{"scroll-pe":U()}],"scroll-pbs":[{"scroll-pbs":U()}],"scroll-pbe":[{"scroll-pbe":U()}],"scroll-pt":[{"scroll-pt":U()}],"scroll-pr":[{"scroll-pr":U()}],"scroll-pb":[{"scroll-pb":U()}],"scroll-pl":[{"scroll-pl":U()}],"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",_,H]}],fill:[{fill:["none",...I()]}],"stroke-w":[{stroke:[ee,ni,dn,Nm]}],stroke:[{stroke:["none",...I()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{"container-named":["container-type"],overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","inset-bs","inset-be","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","pbs","pbe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mbs","mbe","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-bs","border-w-be","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-bs","border-color-be","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-mbs","scroll-mbe","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-pbs","scroll-pbe","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"]},postfixLookupClassGroups:["container-type"],orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},gk=jw(mk);function sa(...a){return gk(Aw(a))}const fk=["blue","teal","purple","orange","red","yellow"],rC="blue",lC=28,cC={blue:"cloudBuy.color.blue",teal:"cloudBuy.color.teal",purple:"cloudBuy.color.purple",orange:"cloudBuy.color.orange",red:"cloudBuy.color.red",yellow:"cloudBuy.color.yellow"};function yk(a){return fk.includes(a)?a:null}function vk(a){const r=yk(a);return r?`var(--identity-${r})`:"var(--color-control)"}function dC(a,r){return a.trim().replace(/\s+/g," ")||r}const Lt=(a,r,d)=>T(a===1?r:d,{count:a}),bk=a=>new Intl.ListFormat(ho(),{type:"conjunction"}).format(a),Pm={"Turn the switch to keep this computer's bots here.":"cloudAccount.keepHere.unclicked","Choose Try again to move.":"cloudSend.move.unclicked","Choose Move to move the bot.":"teamMove.unclicked","Choose which bots move.":"cloudSend.choose.unclicked"};function wk(a){const r=a instanceof Error&&a.message?a.message.replace(/^Error invoking remote method '[^']*':\s*(?:\w*Error:\s*)?/u,""):null;return r!==null&&Object.hasOwn(Pm,r)?T(Pm[r]):r}function uC(a){const r=a.chats;return[...a.bots?[Lt(a.bots,"cloudSend.list.botOne","cloudSend.list.bots")]:[],...a.updatedBots?[Lt(a.updatedBots,"cloudSend.list.changedBotOne","cloudSend.list.changedBots")]:[],...a.skills?[Lt(a.skills,"cloudSend.list.skillOne","cloudSend.list.skills")]:[],...a.logins?[Lt(a.logins,"cloudSend.list.loginOne","cloudSend.list.logins")]:[],...a.secrets?[Lt(a.secrets,"cloudSend.list.secretOne","cloudSend.list.secrets")]:[],...a.onePassword?[T("cloudSend.list.onePassword")]:[],...a.settings?[T("cloudSend.list.settings")]:[],...r?.conversations?[Lt(r.conversations,"cloudSend.list.chatOne","cloudSend.list.chats")]:r?.messages?[Lt(r.messages,"cloudSend.list.messageOne","cloudSend.list.messages")]:[]]}function kk(a){return[...a.bots?[Lt(a.bots,"cloudSend.list.botOne","cloudSend.list.bots")]:[],...a.skills?[Lt(a.skills,"cloudSend.list.skillOne","cloudSend.list.skills")]:[],...a.logins?[Lt(a.logins,"cloudSend.list.loginOne","cloudSend.list.logins")]:[],...a.onePassword?[T("cloudSend.list.onePassword")]:[],...a.chats?[Lt(a.chats,"cloudSend.list.chatOne","cloudSend.list.chats")]:[],...a.routines?[Lt(a.routines,"cloudSend.list.routineOne","cloudSend.list.routines")]:[]]}const Sk=5*6e4;function pC(a){return!a||a.phase==="choose"?0:a.phase==="done"?a.at?a.at+Sk:0:1/0}const Fs=a=>(a??[]).map(r=>`${r.label}: ${r.error}`),Gg=a=>(a??[]).map(r=>r.needs?T("cloudSend.move.stayedNeeds",{name:r.name,program:r.needs}):T("cloudSend.move.stayedHere",{name:r.name})),Um=a=>new Intl.DateTimeFormat(ho(),{timeStyle:"short"}).format(a),Ck=(a,r)=>Math.min(100,Math.floor(a/Math.max(1,r)*100));function qg(a,r){const d="slow"in a?a.slow:void 0;if(d)return r?T("cloudSend.move.slowNamed",{place:r,time:Um(d.until)}):T("cloudSend.move.slow",{time:Um(d.until)});const c="queued"in a?a.queued:void 0;if(c&&!r)return c.name?T("cloudSend.move.queued",{name:c.name}):T("cloudSend.move.queuedAny");const h=a.phase==="finishing"?a.checking:void 0;if(!h)return null;const w=Ck(h.done,h.total);return r?h.step==="chats"&&h.total?T("cloudSend.move.checkingChatsNamed",{place:r,bots:h.bots,percent:w}):T("cloudSend.move.checkingNamed",{place:r}):h.step==="chats"&&h.total?h.bots===1?T("cloudSend.move.checkingChatsOne",{percent:w}):T("cloudSend.move.checkingChats",{bots:h.bots,percent:w}):h.step==="files"&&h.total?T("cloudSend.move.checkingFiles",{percent:w}):h.step==="attachments"&&h.total?T("cloudSend.move.checkingAttachments",{percent:w}):T("cloudSend.move.checking")}function hC(a,r){if(a.phase==="choose")return null;if(a.place)return Ak(a,a.place,r);if(a.phase==="done"){if(r!=="cloud")return null;const C=a.counts?kk(a.counts):[];return{kind:"done",text:a.left?.length||a.stayed?.length?T("cloudSend.move.doneLeft"):C.length?T("cloudSend.move.done",{list:bk(C)}):T("cloudSend.move.doneAll"),extra:[...Fs(a.left),...Gg(a.stayed),...a.held.map(B=>T("cloudSend.result.held",{key:B}))],...a.phone?{phone:!0}:{}}}if(a.phase==="keeping")return{kind:"sending",text:T(a.updating?"cloudSend.move.keepingUpdating":"cloudSend.move.keeping"),extra:[]};if(a.phase==="home-again"||a.phase==="back"){if(r!=="local")return null;if(a.phase==="back"&&a.kept)return{kind:"done",text:T("cloudSend.move.kept"),extra:[]};if(a.phase==="back"&&a.gone)return{kind:"done",text:T("cloudSend.move.backGone"),extra:[]};const C=a.phase==="back"?a.elsewhere:void 0;return C?{kind:"done",extra:[],text:C.since?T("cloudSend.move.elsewhere",{name:C.name,date:new Intl.DateTimeFormat(ho(),{dateStyle:"long"}).format(C.since)}):T("cloudSend.move.elsewhereEmpty",{name:C.name})}:{kind:"done",text:T(a.phase==="home-again"?"cloudSend.move.homeAgain":a.lost?"cloudSend.move.backLost":"cloudSend.move.back"),extra:[]}}if(a.phase==="copy"&&a.updating)return{kind:"sending",text:T("cloudSend.move.updating"),extra:[]};const d="failing"in a?a.failing:void 0;if(d){const C=Fs(d.items);return d.error?{kind:"failed",text:T("cloudSend.move.failing",{error:Us(d,d.error)}),extra:C,retry:!0,reason:Us(d,d.error)}:{kind:"failed",text:T("cloudSend.move.failingPlain"),extra:C,retry:!0}}const c=qg(a);if(c)return{kind:"sending",text:c,extra:[]};if(a.phase==="finishing")return{kind:"sending",text:T("cloudSend.move.finishing"),extra:[]};if(a.phase==="wait"&&a.waitingFor!==void 0)return{kind:"sending",text:a.waitingFor?T("cloudSend.move.waiting",{name:a.waitingFor}):a.waitingWhat==="sign-in"?T("cloudSend.move.waitingSignIn"):T("cloudSend.move.waitingAny"),extra:[]};const h=a.phase==="copy"?a.chats:void 0;return{kind:"sending",text:T(r==="cloud"?h?"cloudSend.move.bringingChats":"cloudSend.move.bringing":h?"cloudSend.move.copyChats":"cloudSend.move.copy",h?{done:h.done,total:h.total}:{}),extra:[]}}function Ak(a,r,d){if(a.phase==="done"&&d==="cloud"&&(a.left?.length||a.stayed?.length))return{kind:"done",text:T("cloudSend.move.doneLeft"),extra:[...Fs(a.left),...Gg(a.stayed)],place:r};if(d!=="local"||!["copy","wait","finishing"].includes(a.phase))return null;const c=(L,B,y={})=>({kind:L,text:B,extra:[],place:r,...y}),h="failing"in a?a.failing:void 0;if(h){const L=Fs(h.items);return h.error?c("failed",T("cloudSend.move.failingNamed",{place:r,error:Us(h,h.error)}),{retry:!0,reason:Us(h,h.error),extra:L}):c("failed",T("cloudSend.move.failingPlainNamed",{place:r}),{retry:!0,extra:L})}if(a.phase==="copy"&&a.updating)return c("sending",T("cloudSend.move.updatingNamed",{place:r}));const w=qg(a,r);if(w)return c("sending",w);if(a.phase==="finishing")return c("sending",T("cloudSend.move.finishingNamed",{place:r}));if(a.phase==="wait"&&a.waitingFor!==void 0)return c("sending",a.waitingFor?T("cloudSend.move.waitingNamed",{place:r,name:a.waitingFor}):T(a.waitingWhat==="sign-in"?"cloudSend.move.waitingSignInNamed":"cloudSend.move.waitingAnyNamed",{place:r}));const C=a.phase==="copy"?a.chats:void 0;return c("sending",C?T("cloudSend.move.copyChatsNamed",{place:r,done:C.done,total:C.total}):T("cloudSend.move.copyNamed",{place:r}))}const mC="my-cloud",gC=200;function fC(a,r){const d=r.trim().toLocaleLowerCase(ho()).split(/\s+/u).filter(Boolean);return d.length?a.filter(c=>{const h=c.name.toLocaleLowerCase(ho());return d.every(w=>h.includes(w))}):a}function yC(a){const r=a.bots??1,d=r>1,c=d?{count:r}:{bot:a.bot.name};return a.phase==="done"?{kind:"done",text:T(d?"cloudSend.botMove.doneMany":"cloudSend.botMove.done",c)}:a.phase==="failed"?{kind:"failed",text:T(d?"cloudSend.botMove.failedMany":"cloudSend.botMove.failed",c)}:{kind:"sending",text:T(d?"cloudSend.botMove.movingMany":"cloudSend.botMove.moving",c)}}function vC(a){const r={bot:a.bot.name,team:a.team.name};return a.phase==="done"?{kind:"done",text:T("teamMove.done",r)}:a.phase==="failed"?{kind:"failed",text:T("teamMove.failed",r)}:{kind:"sending",text:T("teamMove.moving",r)}}const Hm={notInTeam:"teamMove.refused.notInTeam",notABot:"teamMove.refused.notABot",movingElsewhere:"teamMove.refused.movingElsewhere"};function bC(a){const r=Object.fromEntries(Object.entries(Object(a.params)).filter(d=>typeof d[1]=="string"));return Object.hasOwn(Hm,a.code)?Zm(Hm[a.code],a.message,r):a.message}const Yg={places:[],add:{cloud:!1,link:!1,address:!1}};let js=Yg,zm=!1;const Pc=new Set;function mo(){const a=typeof window>"u"||window.ogb?.remoteClient?.active?void 0:window.ogb?.workspaces;return a?.places?a:void 0}function po(){const a=mo();return a?.places?a.places().then(r=>{js=r&&Array.isArray(r.places)?r:Yg;for(const d of Pc)d(js)},()=>{}):Promise.resolve()}function Tk(){zm||(zm=!0,mo()?.onChanged?.(()=>{po()}),window.addEventListener("focus",()=>{po()}),po())}function wC(){const[a,r]=je.useState(js);return je.useEffect(()=>{if(mo())return Pc.add(r),Tk(),r(js),()=>{Pc.delete(r)}},[]),a}async function kC(a,r){const d=await mo()?.recolor?.(a,r).catch(()=>null);return d?(d.outcome==="saved"&&po(),d.outcome):"failed"}async function SC(a){const r=mo()?.remove;if(!r)return"unsupported";const d=await r(a).catch(()=>null);return d?((d.outcome==="removed"||d.outcome==="gone")&&po(),d.outcome):"failed"}async function CC(a){const r=mo()?.makeHome;if(!r)return T("rail.makeHomeFailed");try{return await r(a),po(),!0}catch(d){return wk(d)??T("rail.makeHomeFailed")}}const AC=a=>a.beside===!0||a.places.length>0;function TC(a,r=typeof window>"u"?void 0:window.ogb?.platform){return a.profile?a.named&&a.name?a.name:T(r==="darwin"?"rail.thisMac":"rail.thisPc"):T("rail.thisComputer")}function OC(a){const r=new Set(a.map(c=>c.toLocaleLowerCase())),d=c=>!r.has(c.toLocaleLowerCase());for(const c of[T("rail.localWork"),T("rail.localPersonal")])if(d(c))return c;for(let c=2;;c++){const h=T("rail.localNumbered",{count:c});if(d(h))return h}}async function xC(a,r){const d=await mo()?.local?.create(a,r).catch(()=>null);return d?(d.outcome==="made"&&po(),d.outcome):"failed"}async function MC(a,r){const d=await mo()?.local?.edit(a,r).catch(()=>null);return d?(d.outcome==="saved"&&po(),d.outcome==="saved"||d.outcome==="name"||d.outcome==="taken"?d.outcome:"failed"):"failed"}async function EC(a){const r=await mo()?.local?.remove(a).catch(()=>null);return r?.outcome==="removed"||r?.outcome==="gone"?(po(),"removed"):"failed"}function BC(a){const r=a.trim().split(/\s+/).filter(Boolean),d=c=>c?Array.from(c)[0]??"":"";return(d(r[0])+(r.length>1?d(r[1]):"")).toLocaleUpperCase()}const RC="rounded-2xl border-[0.5px] border-ink/10 bg-app text-ink",LC="flex flex-col gap-5 px-6 pb-6 pt-5",NC="group-has-[[data-night-card]]/sheet:[color-scheme:var(--code-color-scheme)] group-has-[[data-night-card]]/sheet:text-(--cloud-night-ink-quiet) group-has-[[data-night-card]]/sheet:hover:bg-white/15 group-has-[[data-night-card]]/sheet:hover:text-(--cloud-night-ink)",IC="flex size-8 items-center justify-center rounded-full text-ink-secondary transition-colors hover:bg-ink/[0.06] hover:text-ink motion-reduce:transition-none",Ok="ui-button ui-button-primary ui-button-pill",xk="ui-button ui-button-pill",DC=`${Ok} ui-button-lg w-full`,PC=`${xk} ui-button-lg w-full`,UC="flex flex-wrap items-center justify-end gap-2",HC="rounded-sm text-[13px] font-medium text-ink underline decoration-ink/30 underline-offset-[3px] hover:decoration-ink disabled:opacity-50",zC="h-9 w-full rounded-[8px] border border-ink/15 bg-transparent px-3 text-[14px] text-ink outline-none transition-[border-color] duration-150 placeholder:text-ink-tertiary disabled:opacity-60 motion-reduce:transition-none",Wg="inline-flex min-h-5 items-center gap-1 rounded-full bg-ink/[0.06] px-2 text-[12px] font-medium leading-4 text-ink-secondary";function _C({title:a,sub:r}){return ye.jsxs("div",{className:"flex flex-col gap-1 pe-10",children:[ye.jsx("h2",{id:"cloud-add-title",tabIndex:-1,className:"text-[17px] font-medium leading-6 tracking-[-0.008em] text-ink outline-none! [text-wrap:balance]",children:a}),r&&ye.jsx("p",{className:"text-[14px] leading-5 text-ink-secondary [text-wrap:pretty]",children:r})]})}function GC({label:a,onClick:r}){return ye.jsxs("button",{type:"button",onClick:r,className:"-ms-1.5 inline-flex items-center gap-0.5 self-start rounded-full py-1 pe-2.5 ps-1 text-[13px] leading-[18px] text-ink-secondary transition-colors hover:bg-ink/[0.06] hover:text-ink motion-reduce:transition-none",children:[ye.jsx($b,{size:16,strokeWidth:1.5,"aria-hidden":"true",className:"rtl:-scale-x-100"}),a]})}function qC({children:a,className:r,...d}){return ye.jsx("span",{...d,className:sa(Wg,r),children:a})}function Mk({state:a,size:r=20}){return a==="done"?ye.jsx("span",{"aria-hidden":"true",style:{width:r,height:r},className:"grid shrink-0 place-items-center rounded-full bg-ink text-app",children:ye.jsx(Cg,{size:Math.round(r*.6),strokeWidth:2.4})}):ye.jsx("span",{"aria-hidden":"true",style:{width:r,height:r},className:sa("block shrink-0 rounded-full border-[1.5px]",a==="now"?"animate-spin border-ink/15 border-t-ink motion-reduce:animate-none":"border-ink/20")})}function YC({items:a,label:r}){return ye.jsx("ol",{"aria-label":r,className:"flex flex-col gap-0.5",children:a.map(d=>ye.jsxs("li",{"aria-current":d.state==="now"?"step":void 0,className:sa("grid grid-cols-[20px_minmax(0,1fr)] items-start gap-3 rounded-[12px] px-3 py-2.5",d.state==="now"&&"bg-ink/[0.04]"),children:[ye.jsx(Mk,{state:d.state}),ye.jsxs("span",{className:"min-w-0",children:[ye.jsx("span",{className:sa("block text-[14px] leading-5",d.state==="next"?"text-ink-secondary":"text-ink"),children:d.title}),d.detail&&ye.jsx("span",{className:"block break-words text-[13px] leading-[18px] text-ink-secondary",children:d.detail})]})]},d.key))})}function WC({value:a,label:r}){const d=Math.round(Math.max(0,Math.min(1,a))*100);return ye.jsx("div",{role:"progressbar","aria-label":r,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":d,className:"h-1 overflow-hidden rounded-full bg-ink/10",children:ye.jsx("div",{className:"h-full rounded-full bg-ink transition-[width] duration-500 ease-out motion-reduce:transition-none",style:{width:`${d}%`}})})}function FC({color:a,size:r=22}){return ye.jsx("span",{"aria-hidden":"true",style:{width:r,height:r,background:vk(a)},className:"grid shrink-0 place-items-center rounded-[8px] text-white",children:ye.jsx(tw,{size:Math.round(r*.62),strokeWidth:2.2})})}function jC({children:a}){return ye.jsxs("span",{className:sa(Wg,"min-h-6 self-start px-2.5"),children:[ye.jsx(Cg,{size:13,strokeWidth:2.2,"aria-hidden":"true"}),a]})}function VC({className:a}){return ye.jsxs("span",{"data-cloud-staging":!0,title:T("cloudBuy.stagingHint"),className:sa("inline-flex items-center rounded-full border border-warning/50 bg-warning/10 px-2 py-0.5 text-[11px] font-semibold uppercase tracking-[0.06em] text-warning",a),children:[T("cloudBuy.staging"),ye.jsxs("span",{className:"sr-only",children:[": ",T("cloudBuy.stagingHint")]})]})}const Ek=Object.freeze(["team","business"]);function Fg(a){return a?.status==="connected"&&!a.machine&&a.entitlement?.plan==="pro"&&Ek.includes(a.entitlement.tier??"")}function Bk(a){if(!Fg(a))return null;const r=Array.isArray(a.teams)?a.teams:[];return r.find(d=>d?.role==="owner")??r[0]??null}const Rk=!1,KC=!1,Vs={starter:"Starter",personal:"Personal",pro:"Pro",max:"Max"},_m=["starter","personal","pro","max"];function Lk(a,r){const d=_m.indexOf(r);return a!==void 0&&d>=0&&_m.indexOf(a)>d}function un(a){return a===void 0?"Pro":Object.hasOwn(Vs,a)?Vs[a]:"Cloud"}function Nk(a){if(!a||a.status==="signed-out"&&a.message==="restoring")return{kind:"unknown"};const r=a.lastPlan?un(a.lastPlan.tier):null;if(a.status==="signed-out")return a.message==="restore-removed"?{kind:"removed"}:{kind:"signed-out"};if(a.status==="connecting")return{kind:"connecting"};if(a.status==="reauth-required")return{kind:"reauth",label:r,reason:a.message==="expired"?"expired":"access-ended"};if(a.status!=="connected")return{kind:"unverified",label:r};const d=a.entitlement;return d?.plan==="pro"&&d.status==="active"?{kind:"paid",label:un(d.tier),checking:a.checking===!0,...jg(a.trial)?{trial:!0}:{}}:a.purchase?{kind:"purchase",label:a.purchase.tier?un(a.purchase.tier):null,...a.purchase.paidAt?{paidAt:a.purchase.paidAt}:{}}:d?.plan==="pro"?{kind:"attention",label:un(d.tier)}:a.machine?{kind:"attention",label:null}:a.landing?{kind:"free",invited:!0}:{kind:"free"}}function QC(a){return Rk}function XC(a){return null}function ZC(a){switch(a.kind){case"paid":return T(a.trial?"cloudAccount.trialPlan":"cloudAccount.pro",{plan:a.label});case"attention":return T("cloudAccount.inactive",{plan:a.label??"Limix Bot Cloud"});case"purchase":return T("cloudAccount.purchaseReceived",{plan:a.label??"Limix Bot Cloud"});case"unverified":return a.label?T("cloudAccount.lastPlan",{plan:a.label}):null;case"reauth":return a.label?T("cloudAccount.planName",{plan:a.label}):null;case"free":return T("cloudAccount.free");default:return null}}function jg(a){return a?.state==="active"||a?.state==="ending"||a?.state==="processing"}const aa=a=>new Intl.DateTimeFormat(ho(),{day:"numeric",month:"short"}).format(new Date(a));function Pt(a){const r=Math.round(a*100);return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:r%100?2:0}).format(r/100)}function Ik(a,r){const d=a.switchTo??(a.personalAmount?{tier:"personal",amount:a.personalAmount}:null),c=a.tier?un(a.tier):T("cloudTrial.yourPlan"),h=aa(a.endsAt),w=a.deleteAt?aa(a.deleteAt):null,C={kind:"subscribe",label:T("cloudTrial.subscribe")};switch(a.state){case"active":return{state:"active",title:T("cloudTrial.endsOn",{date:h}),body:a.amount===null?T("cloudTrial.activeNoPrice",{plan:c,date:aa(a.chargeAt??a.endsAt)}):T("cloudTrial.active",{plan:c,price:Pt(a.amount/100),date:aa(a.chargeAt??a.endsAt)}),...r?.state==="active"?{credit:T("cloudTrial.credit",{granted:Pt(r.grantedUsd),left:Pt(r.remainingUsd)})}:{},...d&&Lk(a.tier,d.tier)?{switchPlan:T("cloudTrial.preferPlan",{plan:un(d.tier),price:Pt(d.amount/100),date:h})}:{},action:{kind:"manage",label:T("cloudTrial.manage")}};case"ending":return a.keep==="portal"?{state:"ending",title:T("cloudTrial.endsOn",{date:h}),body:w?T("cloudTrial.ending",{date:w}):T("cloudTrial.endingNoDate"),action:C}:{state:"ending",title:T("cloudTrial.endsOn",{date:h}),body:w?T("cloudTrial.cancelled",{date:w}):T("cloudTrial.cancelledNoDate"),action:null};case"processing":return{state:"processing",title:T("cloudTrial.processingTitle"),body:T("cloudTrial.processing"),action:null};case"late":return{state:"late",title:T("cloudTrial.lateTitle"),body:w?T("cloudTrial.late",{date:w}):T("cloudTrial.lateNoDate"),action:{kind:"status",label:T("cloudTrial.checkPayment")}};case"ended":return{state:"ended",title:T("cloudTrial.endedTitle"),body:w?T("cloudTrial.ended",{date:w}):T("cloudTrial.endedNoDate"),action:C}}}function JC(a){return!a?.notice||!a.trial||a.trial.state!==a.notice?null:Ik(a.trial,a.credit)}function $C(a){return a.state==="used_up"?T("cloudCredit.usedUp",{granted:Pt(a.grantedUsd)}):T("cloudCredit.left",{left:Pt(a.remainingUsd),granted:Pt(a.grantedUsd)})}function eA(a,r){return a.kind==="reauth"&&r?.lastPlan?.active===!0?"sign-in-again":a.kind==="removed"?"removed":null}function Dk(a){return Object.hasOwn(Vs,a.tier)?Vs[a.tier]:a.label??un(a.tier)}function Pk(a,r){return a.plans.find(d=>d.tier===r)??a.plans.find(d=>d.tier===a.recommended)??a.plans[0]}function Uk(a){return a?Pk(a).trialDays??a.plans.find(r=>r.trialDays)?.trialDays??null:null}function Hk(a){return a?.refundDays?T("cloudAdd.moneyBack",{days:a.refundDays}):null}function tA(a){return a.refundDays?T("cloudBuy.moneyBack",{days:a.refundDays}):null}const Gm={starter:"cloudBuy.promise.starter",pro:"cloudBuy.promise.pro",max:"cloudBuy.promise.max"},Ks=a=>new Intl.NumberFormat(ho(),{maximumFractionDigits:1}).format(a),qm=a=>Ks(Math.round(a/102.4)/10);function zk(a){const r=Math.max(1,Math.round(a/1e3));if(r<60)return T("cloudBuy.plan.voiceMinutes",{minutes:Ks(r)});const d=Math.round(r/6)/10;return d===1?T("cloudBuy.plan.voiceHour"):T("cloudBuy.plan.voiceHours",{hours:Ks(d)})}function _k(a){const r=a.cpuKind==="shared"?T("cloudBuy.plan.cpusShared",{count:a.cpus}):T("cloudBuy.plan.cpus",{count:a.cpus});return[{key:"power",text:a.sleeps?T("cloudBuy.sleeps"):T("cloudBuy.row.alwaysOn")},{key:"desktops",text:T("cloudBuy.row.desktops"),note:T("cloudBuy.plan.limit",{count:a.computers})},{key:"hours",text:T("cloudAdd.hours",{hours:Ks(a.computerHours)})},{key:"machine",text:T("cloudBuy.row.machine",{cpus:r,memory:qm(a.memoryMb)}),...a.swapMb?{note:T("cloudBuy.row.swap",{swap:qm(a.swapMb)})}:{}},{key:"storage",text:a.maxDiskGb>a.diskGb?T("cloudBuy.row.storageGrows",{gb:a.diskGb,max:a.maxDiskGb}):T("cloudBuy.row.storage",{gb:a.diskGb})},{key:"voice",text:zk(a.voiceCharacters)},...a.snapshotDays?[{key:"backups",text:T("cloudBuy.row.backups",{days:a.snapshotDays})}]:[]]}function Gk(a,r){return a===1?T("cloudBuy.card.trial.one",{price:r}):T("cloudBuy.card.trial.many",{days:a,price:r})}function qk(a,r,d){const c=Dk(a),h=Pt(a.amount/100),w=a.tier===d;return{tier:a.tier,name:c,price:h,popular:a.tier===r,current:w,promise:Object.hasOwn(Gm,a.tier)?T(Gm[a.tier]):a.allowances?.seats?T("cloudBuy.promise.team",{seats:a.allowances.seats}):null,action:w?null:a.trialDays?T("cloudIntro.start"):T("cloudBuy.card.get",{plan:c}),terms:w?null:a.trialDays?Gk(a.trialDays,h):T("cloudBuy.card.paid",{price:h}),rows:a.allowances?_k(a.allowances):[]}}function oA(a,{current:r=null,own:d=null}={}){const c=[...a.plans];if(r&&d?.tier===r&&!c.some(h=>h.tier===r)){const h=c.findIndex(w=>w.amount>d.amount);c.splice(h===-1?c.length:h,0,d)}return c.map(h=>qk(h,a.recommended,r))}const Yk=new Set(["hours","storage","voice"]);function nA(a){const r=new Set(a.flatMap(c=>c.rows.filter(h=>h.key==="power").map(h=>h.text))),d=c=>Yk.has(c.key)||c.key==="power"&&r.size>1;return a.map(c=>({shown:c.rows.filter(d),details:c.rows.filter(h=>!d(h))}))}const Ym=864e5;function Wk(a){const r=a.plans[0]?.trialDays;return r&&a.plans.every(d=>d.trialDays===r)?r:null}function aA(a,r){const d=Wk(a);if(!d)return[];const c=r+d*Ym,h={when:T("cloudAdd.today"),text:a.creditUsd?T("cloudBuy.timeline.startCredit",{credit:Pt(a.creditUsd)}):T("cloudBuy.timeline.start")},w=a.reminderDays&&a.reminderDays<d?[{when:aa(c-a.reminderDays*Ym),text:T("cloudBuy.timeline.reminder")}]:[];return[h,...w,{when:aa(c),text:T("cloudBuy.timeline.firstPayment")}]}function iA(a,r,d){const c=a?.plans.find(w=>w.tier===d),h=r?.plans.find(w=>w.tier===d);return!!(c&&h&&c.amount===h.amount&&(c.trialDays??0)===(h.trialDays??0))}function sA(a){return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:2}).format(a/100)}function rA(a){const r=Uk(a);if(!a||!r)return null;const d=Math.min(...a.plans.filter(c=>c.trialDays).map(c=>c.amount));return{badge:r===1?T("cloudIntro.badge.one"):T("cloudIntro.badge.many",{days:r}),points:[T("cloudIntro.routines"),T("cloudIntro.phone"),a.creditUsd?T("cloudIntro.credit",{credit:Pt(a.creditUsd)}):T("cloudIntro.included")],price:T("cloudIntro.price",{price:Pt(d/100)}),moneyBack:Hk(a)}}const Fk=30*6e4;function lA(a,r){const d=a.tier??a.trial?.tier;return a.sleeps===!0||!!(d&&r?.plans.find(c=>c.tier===d)?.allowances?.sleeps)}function jk(a){const r=a?.machine??null;return!a||!r||r.status==="provisioning"?{kind:"team-starting",team:a?.name??null,step:r?.setup?.step??null,slow:r?.setup?.slow===!0}:r.status==="ready"?{kind:"team-ready",team:{id:a.id,name:a.name}}:{kind:"settings"}}function cA(a,r,{now:d,error:c=null,choosing:h=!1,conflict:w=!1,signIn:C=null,arrived:L=!1,terms:B=!1}){const y=Nk(a),P=()=>({tier:a?.entitlement?.tier??a?.purchase?.tier??null,trial:a?.trial&&jg(a.trial)?a.trial:null,credit:a?.credit?.state==="active"?a.credit:null,...a?.machine?.power?.sleeps?{sleeps:!0}:{}});if(C&&!c&&(y.kind==="signed-out"||y.kind==="removed"))return{kind:"sign-in",phase:C};switch(y.kind){case"unknown":return{kind:"checking"};case"connecting":return{kind:"signing-in",code:a?.enrollment?.userCode??null,checkout:!!a?.checkout};case"purchase":return{kind:"starting",...P(),step:null,slow:!1,received:!0};case"paid":{if(Fg(a))return jk(Bk(a));const R=a?.machine;return!R||R.status==="provisioning"?{kind:"starting",...P(),step:R?.setup?.step??null,slow:R?.setup?.slow===!0,received:!1}:R.status!=="ready"?{kind:"settings"}:a?.checkout&&!a.checkout.done||L?{kind:"ready",...P()}:{kind:"has-cloud"}}case"signed-out":case"free":{if(c)return{kind:"error",reason:c};if(r===void 0)return{kind:"checking"};if(r===null)return{kind:"unreachable"};const R=a?.checkout??null;if(C&&!R&&(y.kind==="signed-out"||C.step==="done"))return{kind:"sign-in",phase:C};const W=r.checkout&&r.checkout.openUntil>d?r.checkout:null;if(y.kind==="free"&&!h&&(R||W)){const ce=R?d-R.startedAt>=Fk:!1;return{kind:"waiting",plan:R?.plan??W.plan,browser:R?.signIn&&!R.link&&!W?"signin":"checkout",late:ce,link:R?.link===!0,email:a?.account?.email??null}}const le=a?.status==="signed-out"&&a.message==="enrollment-expired"?"code-expired":a?.status==="signed-out"&&(a.message==="enrollment-ended"||a.message==="signin-failed")?"signin-ended":w?"preparing":B?"terms":null;return{kind:"offer",offer:r,signedOut:y.kind==="signed-out",notice:le}}default:return{kind:"settings"}}}const Vk=/^fd7a:115c:a1e0:/i,Wm="[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?",Kk=new RegExp(`^(?=.{1,253}$)${Wm}(?:\\.${Wm})*\\.ts\\.net$`),Qk=a=>String(a??"").trim().replace(/^\[|\]$/g,"").replace(/^::ffff:(?=\d)/i,"").replace(/%.*$/,"").toLowerCase();function Xk(a){const r=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(a);if(!r)return null;const d=r.slice(1).map(Number);return d.some(c=>c>255)?null:d}function Zk(a){const r=Qk(a),d=Xk(r);return d?d[0]===100&&d[1]>=64&&d[1]<=127:Vk.test(r)}function Vg(a){return Kk.test(String(a??"").trim().toLowerCase().replace(/\.$/,""))}const Jk=a=>Vg(a)||Zk(a),$k="23456789ABCDEFGHJKLMNPQRSTUVWXYZ",eS=12,tS=/^omb_pair_[A-Za-z0-9_-]{43}$/,Kg=8799,dA=`http://192.168.1.20:${Kg}`,or=a=>String(a??"").trim().toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,"");function Qg(a){const r=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(a);if(!r)return null;const d=r.slice(1).map(Number);return d.some(c=>c>255)?null:d}function Xg(a){const r=or(a),d=Qg(r);return r==="localhost"||r.endsWith(".localhost")||r==="::1"||d!==null&&d[0]===127}function oS(a){const r=or(a);if(!r)return!1;const d=Qg(r);if(d){const[c,h]=d;return c===127||c===10||c===172&&h>=16&&h<=31||c===192&&h===168||c===169&&h===254||c===100&&h>=64&&h<=127}return/^\d+(\.\d+){0,3}$/.test(r)?!1:r.includes(":")?r==="::1"||/^f[cd][0-9a-f]{0,2}:/.test(r)||/^fe[89ab][0-9a-f]?:/.test(r):Xg(r)||[".ts.net",".local",".home.arpa"].some(c=>r.endsWith(c))?!0:!r.includes(".")&&/^[a-z0-9-]+$/.test(r)}function uA(a){const r=new URL(a);return Vg(or(r.hostname))?"tailscale":r.protocol==="https:"?"https":Xg(r.hostname)?"loopback":"private-http"}function Zg(a){return String(a).toUpperCase().replace(/[^A-Z0-9]/g,"").replace(/0/g,"O").replace(/1/g,"I")}function nS(a){return Zg(a).match(/.{1,4}/g)?.join("-")??a}function Fm(a){const r=String(a??"").trim();if(!r)return{kind:"empty"};if(r.startsWith("omb_sess_"))return{kind:"wrong",problem:"scriptKey"};if(r.startsWith("omb_pair_"))return tS.test(r)?{kind:"credential",credential:r}:{kind:"wrong",problem:"notACode"};const d=r.replace(/[\s-]/g,"");if(/^\d{8}$/.test(d))return{kind:"wrong",problem:"emailCode"};if(/^\d{6}$/.test(d))return{kind:"wrong",problem:"oldCode"};const c=Zg(r);return c.length!==eS||[...c].some(h=>!$k.includes(h))?{kind:"wrong",problem:"notACode"}:{kind:"code",code:nS(c)}}function aS(a){try{return decodeURIComponent(a)}catch{return null}}function iS(a){const r=a.searchParams.get("address")??"";return/^https?:\/\//i.test(r)?{address:r,secret:a.searchParams.get("code")??a.searchParams.get("token")}:null}function sS(a){const r=/(?:^|[#&])code=([^&]*)/.exec(a.hash)?.[1];return r!==void 0?aS(r):a.searchParams.get("code")}function pA(a,r=""){let d=String(a??"").trim();if(!d)return{ok:!1,problem:"empty"};const c=Fm(d);if(c.kind==="code")return{ok:!1,problem:"codeOnly",code:c.code};if(c.kind==="wrong"&&c.problem!=="notACode")return{ok:!1,problem:c.problem};if(/[\s\\]/.test(d))return{ok:!1,problem:"notAnAddress"};let h=null;if(/^openmausbot:/i.test(d)){let he;try{he=iS(new URL(d))}catch{he=null}if(!he)return{ok:!1,problem:"phoneLink"};d=he.address,h=he.secret}const w=/^[a-z][a-z0-9+.-]*:\/\//i.test(d);let C;try{C=new URL(w?d:`https://${d}`)}catch{return{ok:!1,problem:"notAnAddress"}}if(C.protocol!=="https:"&&C.protocol!=="http:"||C.username||C.password||!C.hostname)return{ok:!1,problem:"notAnAddress"};if(!["/","","/pair","/pair/"].includes(C.pathname))return{ok:!1,problem:"notAnAddress"};const L=h??sS(C),B=C.hash||C.searchParams.has("code")||h!==null,y=String(r??"").trim();if(!y&&B&&!L?.trim())return{ok:!1,problem:"notACode"};const P=Fm(y||L||"");if(P.kind==="wrong")return{ok:!1,problem:P.problem};const R=oS(C.hostname);if(C.protocol==="http:"&&w&&!R)return{ok:!1,problem:"publicHttp",host:C.host};const W=`https://${C.host}`,le=`http://${C.host}`,ce=!w&&!C.port&&Jk(or(C.hostname))?[`http://${C.host}:${Kg}`]:[];return{ok:!0,candidates:w?[C.origin]:R?[W,le,...ce]:[W],code:P.kind==="code"?P.code:null,credential:P.kind==="credential"?P.credential:null}}class hA extends je.Component{state={error:null};static getDerivedStateFromError(r){return{error:r instanceof Error?r:new Error(String(r))}}render(){return this.state.error?ye.jsx("div",{role:"alert",className:"flex min-h-screen items-center justify-center p-6 text-center",children:ye.jsxs("div",{className:"max-w-md space-y-3",children:[ye.jsx("h1",{className:"text-lg font-semibold",children:T("page.broken.title")}),ye.jsx("p",{className:"text-sm opacity-75",children:T("page.broken.body")}),ye.jsx("p",{className:"break-words text-xs opacity-60",children:this.state.error.message}),ye.jsx("button",{type:"button",className:"rounded-md border px-3 py-1.5 text-sm",onClick:()=>location.reload(),children:T("page.broken.reload")})]})}):this.props.children}}export{fk as $,eC as A,RS as B,$b as C,aC as D,LC as E,FC as F,UC as G,_C as H,$S as I,Ok as J,Dk as K,qS as L,un as M,sA as N,Pt as O,hA as P,xk as Q,lS as R,YS as S,YC as T,HC as U,WC as V,jC as W,WS as X,zC as Y,lC as Z,et as _,sa as a,uA as a$,vk as a0,cC as a1,cA as a2,dC as a3,rC as a4,yk as a5,NC as a6,IC as a7,VC as a8,RC as a9,ia as aA,GC as aB,DC as aC,Rv as aD,Fk as aE,oA as aF,nA as aG,aA as aH,tA as aI,Wk as aJ,qC as aK,PC as aL,BC as aM,po as aN,OC as aO,pA as aP,dA as aQ,TC as aR,xC as aS,MC as aT,kC as aU,EC as aV,CC as aW,SC as aX,tr as aY,nC as aZ,KC as a_,lA as aa,Pk as ab,iA as ac,Xv as ad,GS as ae,rS as af,Av as ag,Eb as ah,cg as ai,Fv as aj,gS as ak,hS as al,Ib as am,BS as an,ES as ao,MS as ap,Us as aq,wC as ar,AC as as,Nk as at,Fg as au,oS as av,TS as aw,AS as ax,KS as ay,XC as az,ho as b,uC as b$,wk as b0,hC as b1,QC as b2,ZC as b3,Bk as b4,Hk as b5,jg as b6,Ik as b7,$C as b8,Qm as b9,mC as bA,vC as bB,bC,pC as bD,XS as bE,tC as bF,FS as bG,gi as bH,iw as bI,JS as bJ,QS as bK,jS as bL,zb as bM,IS as bN,LS as bO,Ek as bP,Gk as bQ,oC as bR,rA as bS,HS as bT,US as bU,JC as bV,zS as bW,_S as bX,eA as bY,ZS as bZ,bk as b_,vm as ba,bS as bb,kS as bc,ng as bd,CS as be,Ab as bf,Sb as bg,DS as bh,pg as bi,NS as bj,hg as bk,Db as bl,_b as bm,sw as bn,Rk as bo,Ob as bp,uS as bq,dS as br,sC as bs,iC as bt,Yc as bu,Qv as bv,VS as bw,gC as bx,fC as by,yC as bz,gn as c,dm as c0,Vv as c1,$m as c2,Pb as c3,pw as c4,Zm as d,Yo as e,Cg as f,tw as g,$v as h,Xm as i,ye as j,fS as k,kb as l,wS as m,mS as n,lw as o,jm as p,xS as q,je as r,PS as s,T as t,vS as u,OS as v,SS as w,pS as x,yS as y,cS as z};
|
|
23
|
+
Server log: {log}`,"native.dialog.serverFailed.title":"Couldn't start the bot server","native.dialog.serverFailed.portsTaken":"Every Limix Bot port answered health checks from another process — likely a second copy of the app, or another program on ports 8799–28799. Quit that program, then quit and reopen Limix Bot.","native.dialog.serverFailed.slow":"The background server didn't come up in time — this is usually slow startup, not a port conflict. Quit and reopen Limix Bot.","native.dialog.serverFailed.keepsHappening":"If it keeps happening, check {log}.","native.viewer.title":"Desktop unavailable","native.viewer.heading":"Couldn't open the live desktop","native.viewer.open":"Open in browser","native.viewer.fallbackTitle":"Live desktop","native.viewer.noResponse":"The viewer did not respond.","native.dialog.share.title":"Share this computer with {name}?","native.dialog.share.detail":"Let this server’s bots use folders and capabilities you choose while this desktop app is running. Nothing is shared unless you enable it. You can change this later in Settings → Servers.","native.dialog.share.choose":"Choose access","native.dialog.share.notNow":"Not now","native.lend.own.title":"Let {name} use this computer?","native.lend.own.detail":"Its bots can then see and use the apps on your screen while this app is open. In Settings → Servers you can also let them use folders you choose and run commands in a terminal. Turn it off there any time, or pause it from the Limix Bot icon's menu.","native.lend.own.allow":"Allow","native.lend.notOwnServer":"Only your own server can use this computer. Pair this app with it again as its owner.","native.dialog.updateServers.title":"Could not update servers","native.dialog.updateServers.saveFailed":"Could not save server connections on this computer. Please try again.","native.dialog.switchEnv.title":"Could not switch environments","native.dialog.switchEnv.body":"Limix Bot could not switch to that environment. The app log has the details.","native.dialog.org.disconnect":"Disconnect and restart locally","native.dialog.org.useHere":"Use this computer","native.dialog.org.msgCompanion":"Disconnect from {name} to sign in locally?","native.dialog.org.msgHosted":"Leave {name} and sign in on this computer?","native.dialog.org.detail":"Organization sign-in connects company models to this computer. {consequence} No remote bots, conversations or provider accounts are moved or deleted.","native.dialog.org.consCompanion":"This disconnects desktop companion access and restarts the app. You can pair again later.","native.dialog.org.consHosted":"The hosted connection stays saved and can be selected again from the Server menu.","native.dialog.connectFailed.title":"Could not connect to the server","native.dialog.connectFailed.detail":"You can also choose Connect to a server to enter an address in Settings.","native.dialog.connect.button":"Connect","native.dialog.connect.title":"Connect to {host}?","native.dialog.connect.withCode":"The pairing code in the link is used once, then this app stays signed in to that server.","native.dialog.connect.noCode":"The link has no pairing code; the server will ask for one.","native.dialog.resetSavedKeys.title":"Reset saved keys?","native.dialog.resetSavedKeys.detail":"{app} can't read its saved keys here, so it can't use them or save new ones. Resetting puts the unreadable file aside and restarts {app}. Then enter your keys again and reconnect your apps.","native.dialog.resetSavedKeys.button":"Reset and restart","native.dialog.resetSavedKeys.failed":"Couldn't reset saved keys","native.connect.empty":"Enter the server's address or paste its link.","native.connect.codeOnly":"That's a pairing code. Also enter the server's address, like {example}.","native.connect.emailCode":"That's a sign-in code from an email. Pairing needs a 12-character code like 7KQ2-M9XD-H4TP.","native.connect.oldCode":"That 6-digit code pairs a phone with a desktop app, and one desktop app can't connect to another: share that computer with My Cloud, or use My Cloud. A server's code has 12 characters like 7KQ2-M9XD-H4TP: on the server, run limixbot pair.","native.connect.scriptKey":"That's a script key. Pairing needs a pairing code.","native.connect.notACode":"That isn't a pairing code. Pairing needs a 12-character code like 7KQ2-M9XD-H4TP.","native.connect.publicHttp":"http://{host} is on the open internet and isn't encrypted, so others could read your chats. Use its https address, or put HTTPS in front (cloudflared, Caddy or Tailscale).","native.connect.phoneLink":"That link is for the Limix Bot phone app. Paste the link the server printed, or its address.","native.connect.notAnAddress":"That isn't a server address. Paste the link the server printed, or type its address, like {example}.","native.connect.unreachable":"Can't reach {host}. Check the server is running and reachable from this computer.","native.connect.dns":"{host} doesn't exist yet. Check the spelling, or wait for the DNS record.","native.connect.certificate":"{host}'s certificate isn't valid yet. A new server can take a minute to get one.","native.connect.notMausBot":"That address answers, but it isn't a Limix Bot server.","native.connect.desktopApp":"{host} is a Limix Bot desktop app, and one desktop app can't connect to another. To use that computer from here, share it with My Cloud from its own app, or use My Cloud.","native.connect.desktopAppTailnet":"{host} is a Limix Bot desktop app on your tailnet. To open it from here, turn on Tailscale and Your other computers in its Settings → Phone & devices, then use the address shown there.","native.connect.loopback":"This points at this computer ({host}), not at the server. Use the server's own address.","native.connect.localNetwork":"Can't reach {host}. On a Mac, turn on Limix Bot in System Settings → Privacy & Security → Local Network, then try again. Also check that the server is running on this network.","native.connect.tailscaleOff":"{host} is on a Tailscale network, and Tailscale isn't connected on this computer. Open Tailscale here, sign in to the same tailnet, then try again.","native.connect.otherTailnet":"{host} isn't on this computer's tailnet. Sign in to Tailscale here with the account that computer uses, keep MagicDNS on, then try again.","native.connect.tailnetBlocked":"macOS blocked the connection to {host}. Allow Limix Bot in System Settings → Privacy & Security → Local Network (Tailscale addresses count as local), then try again. If it's on already, turn it off and on again.","native.connect.tailnetSilent":"{host} is on your tailnet but didn't answer. Check that the computer is awake with Tailscale connected, and that Limix Bot is shared on Tailscale there: in its Settings → Phone & devices, or with limixbot serve --tailscale.","native.dialog.mic.allow":"Allow","native.dialog.mic.deny":"Don’t Allow","native.dialog.mic.title":"Allow “{name}” to use the microphone?","native.dialog.mic.detail":"{host} wants to hear you for a Live call. Allow only a server you trust; this app remembers your answer for this server until you forget it.","native.dialog.forgotten.title":"Connection forgotten; server sign-out could not be confirmed","native.dialog.forgotten.detail":"Computer sharing is stopped. Revoke this desktop’s session on that server when it is reachable again.","native.dialog.unreachable.title":"{name} is not reachable","native.dialog.unreachable.detail":"{reason} Showing the local server instead; choose it again from the Server menu when it is back.","native.dialog.removeServer.button":"Remove","native.dialog.removeServer.title":"Remove {name} from this app?","native.dialog.removeServer.detail":"The server keeps running and your bots stay there. You'll need a new pairing code to add it back.","native.picker.workingFolder":"Choose a working folder","native.picker.shareFolder":"Choose a folder or drive to share","native.picker.diagnostics":"Export diagnostics","native.picker.textFilter":"Text","native.picker.saveWhere":"Where do you want to save it?","native.picker.save":"Save","native.common.ok":"OK","native.boot.folderMissing.title":"The environment's folder is missing","native.boot.folderMissing.body":"{folder} is not there anymore, so Limix Bot came up on this computer's default data folder instead. Restore or remount that folder, then choose the environment again from the Server menu.","native.boot.unsafe.title":"Limix Bot could not start safely","native.boot.unsafe.fallback":"Another process is using this Limix Bot data folder.","native.boot.unhealthy.title":"The environment was unhealthy","native.boot.unhealthy.body":"Limix Bot could not start on {folder} and came up on this computer's default data folder instead. Choose that environment again from the Server menu once it is available.","native.boot.failed.title":"Limix Bot could not start","native.boot.failed.body":"Limix Bot could not start on {folder} or on this computer's default data folder. Check that both folders are readable, then start the app again.","native.teamRole.owner":"Super admin","native.teamRole.admin":"Admin","native.teamRole.member":"User","brief.row.unpreparedMeetings":"I didn't prepare meetings","brief.row.unpreparedNote":"That needs a Claude model as {name}'s AI. Your email is still sorted, and your day, reminders and clashes show here.","brief.inbox.ask":"Asks you to {ask}.","brief.inbox.waiting.ask":"Waiting on your reply · Asks you to {ask}.","brief.inbox.due":"due {deadline}.","brief.inbox.waiting.due":"Waiting on your reply · due {deadline}.","brief.inbox.amount":"about {amount}.","brief.inbox.waiting.amount":"Waiting on your reply · about {amount}.","brief.inbox.askDue":"Asks you to {ask}, due {deadline}.","brief.inbox.waiting.askDue":"Waiting on your reply · Asks you to {ask}, due {deadline}.","brief.inbox.askAmount":"Asks you to {ask}, about {amount}.","brief.inbox.waiting.askAmount":"Waiting on your reply · Asks you to {ask}, about {amount}.","brief.inbox.dueAmount":"due {deadline}, about {amount}.","brief.inbox.waiting.dueAmount":"Waiting on your reply · due {deadline}, about {amount}.","brief.inbox.askDueAmount":"Asks you to {ask}, due {deadline}, about {amount}.","brief.inbox.waiting.askDueAmount":"Waiting on your reply · Asks you to {ask}, due {deadline}, about {amount}.","chat.notice.phone.notOwner":"not the owner's own turn","chat.notice.phone.noPhone":"no phone paired with its apps allowed","chat.notice.phone.allowed":"allowed {tool}","chat.notice.phone.denied.calendar":"Calendar is not allowed on the phone","chat.notice.phone.denied.reminders":"Reminders is not allowed on the phone","chat.notice.phone.denied.contacts":"Contacts is not allowed on the phone","chat.notice.phone.denied.location":"Location is not allowed on the phone","chat.notice.phone.denied.home":"Home is not allowed on the phone","chat.notice.phone.denied.messages":"Messages is not allowed on the phone","chat.notice.phone.write.PHONE_CREATE_EVENT":"Create event on {phone}","chat.notice.phone.write.PHONE_UPDATE_EVENT":"Update event on {phone}","chat.notice.phone.write.PHONE_DELETE_EVENT":"Delete event on {phone}","chat.notice.phone.write.PHONE_RESPOND_TO_INVITE":"Respond to invite on {phone}","chat.notice.phone.write.PHONE_CREATE_REMINDER":"Create reminder on {phone}","chat.notice.phone.write.PHONE_UPDATE_REMINDER":"Update reminder on {phone}","chat.notice.phone.write.PHONE_COMPLETE_REMINDER":"Complete reminder on {phone}","chat.notice.phone.write.PHONE_DELETE_REMINDER":"Delete reminder on {phone}","chat.notice.phone.write.PHONE_CREATE_CONTACT":"Create contact on {phone}","chat.notice.phone.write.PHONE_UPDATE_CONTACT":"Update contact on {phone}","chat.notice.phone.write.PHONE_SET_ACCESSORY":"Set accessory on {phone}","chat.notice.phone.write.PHONE_RUN_SCENE":"Run scene on {phone}","chat.notice.phone.write.PHONE_SEND_MESSAGE":"Send message on {phone}","chat.notice.phone.write.PHONE_SEND_WHATSAPP":"Send whatsapp on {phone}","serverError.decider.accountRequired":"Add your Cloudflare account ID with the token.","serverError.decider.keyRequired":"Save a Cloudflare Workers AI, Jev or OpenRouter key before turning on fast decisions.","serverError.decider.jevRejected":"Jev rejected this key. Check it at typesafe.ai and paste it again.","serverError.decider.workersRejected":"Cloudflare rejected this token. Check that it has Workers AI permission and belongs to this account ID.","serverError.decider.routerRejected":"OpenRouter rejected this key. Check it at openrouter.ai/keys and paste it again.","serverError.decider.accountId":"A Cloudflare account ID is 32 letters and digits.","serverError.goal.alreadyRunning":"A goal is already running in this chat. Stop it before starting another.","serverError.chat.missingConversation":"no such conversation","serverError.department.chiefResponsibility":"Only a Chief of Staff can be made responsible for additional departments","serverError.department.confirmResponsibility":"Confirm which additional departments this Chief is responsible for (acknowledgePeerScope)","serverError.owner.teamOnly":"Only a team's bots report to someone.","serverError.owner.choose":"Choose someone in {team}.","serverError.owner.chiefConflict":"{name} already has a Chief of Staff. Take the crown off one of them first.","serverError.owner.unassignedChiefConflict":"That person already has a Chief of Staff. Take the crown off one of them first.","serverError.owner.departmentAdmin":"Only {team}'s admins can set who a department's bots report to.","serverError.owner.unavailable":"One or more bots are unavailable.","serverError.bot.missing":"no such bot","serverError.owner.personal":"{bot} is {name}'s own Limix Bot: it always reports to them.","serverError.owner.change":"Only {team}'s admins, or the person {bot} reports to, can change who it reports to.","serverError.helper.ownerOnly":"Only the owner can answer this.","serverError.helper.missing":"There is no such suggestion.","serverError.notification.missing":"no such notification","serverError.phone.list":"Only the owner or an admin can list phones.","serverError.phone.remove":"Only the owner or an admin can remove phones.","serverError.model.defaultAdmin":"forbidden: this session may change this thread's model, not the bot's default (needs the admin scope)","serverError.department.readFailed":"Saved departments and shared instructions could not be read; the existing file was left unchanged","serverError.department.duplicate":"A department with that name already exists","serverError.department.renameBusy":"Stop this department's active work before renaming it","serverError.department.emptyFirst":"Move all bots (including archived bots) and group chats out of this department first","serverError.department.deleteBusy":"Stop this department's active work before deleting it","serverError.department.generalChief":"General already has a Chief of Staff. Move or change this department's Chief before deleting it","chat.notice.acpRestarted":"{provider} was restarted because a session sharing its process ignored Stop","chat.notice.acpStopFailed":"{provider} ignored Stop and its process could not be ended","chat.notice.toolCount":"{provider} refused this turn because this model takes at most {limit} tools and this bot offers more, even with its tool lists trimmed, so nothing ran. Turn off some of this bot's apps or MCP servers, or switch the bot to another model.","chat.notice.toolCountUnknown":"{provider} refused this turn because this model takes at most a limited number of tools and this bot offers more, even with its tool lists trimmed, so nothing ran. Turn off some of this bot's apps or MCP servers, or switch the bot to another model.","chat.notice.goalRetry":"{name}'s turn did not settle ({why}) — retrying once.","chat.notice.part.providerFailed":"provider failed","chat.notice.part.dispatchFailed":"dispatch failed","chat.notice.part.goalStalled":"stalled","chat.notice.part.goalTimedOut":"timed out","chat.notice.goalWaiting":"{name} is finishing what it is doing. This goal will continue when it is free.","chat.notice.goalBusyOne":"{name} stayed busy for {minutes} minute","chat.notice.goalBusyMany":"{name} stayed busy for {minutes} minutes","chat.notice.goalBusyOneAgain":"{name} stayed busy for {minutes} minute — send the goal again when they are free.","chat.notice.goalBusyManyAgain":"{name} stayed busy for {minutes} minutes — send the goal again when they are free.","chat.notice.goalWorking":"{name} is working on turn {turn} of {max}.","chat.notice.goalEnded":"The goal run ended before the bot reported an outcome.","chat.notice.teammateWorking":"Stopped here — {name} is still working; open to stop it too","chat.notice.unknownTeammateWorking":"Stopped here — A teammate is still working; open to stop it too","model.agentDefault":"Agent default","chat.notice.approve":"Approve: {what}","native.decider.accountRequired":"Add your Cloudflare account ID with the token.","native.decider.jevRejected":"Jev rejected this key. Check it at typesafe.ai and paste it again.","native.decider.workersRejected":"Cloudflare rejected this token. Check that it has Workers AI permission and belongs to this account ID.","native.decider.routerRejected":"OpenRouter rejected this key. Check it at openrouter.ai/keys and paste it again.","serverError.decider.accountFormat":"decider.workersAiAccountId a Cloudflare account ID is 32 letters and digits","serverError.backup.recursiveLink":"Cannot back up a symbolic link to the folder that contains it: {path}","chat.notice.exportedGoal.working":"{before}[Goal: working]{content}","chat.notice.exportedGoal.completed":"{before}[Goal: completed]{content}","chat.notice.exportedGoal.needs-input":"{before}[Goal: needs-input]{content}","chat.notice.exportedGoal.blocked":"{before}[Goal: blocked]{content}","chat.notice.exportedGoal.limit-reached":"{before}[Goal: limit-reached]{content}","chat.notice.exportedGoal.paused":"{before}[Goal: paused]{content}","chat.notice.exportedGoal.stopped":"{before}[Goal: stopped]{content}","chat.notice.exportedGoal.failed":"{before}[Goal: failed]{content}","activity.tool.team.decide":"Decide","activity.tool.team.extract":"Extract","serverError.voice.utteranceTooLong":"voice utterances are limited to 500 characters","browser.panel.restore":"Restore size","browser.panel.maximize":"Maximize","brief.card.ideas":"Ideas","routines.server.part.failed":"a failure","native.menu.openAtLogin":"Open at Login","serverError.setup.noTools":"This bot's AI can't set it up by itself. Tell the bot what you'd like it to do instead.","serverError.setup.missingConversation":"There is no such conversation.","serverError.setup.stopOwner":"Only the person who pressed Set me up, or an owner or admin, can stop it.","serverError.setup.hasInstructions":"This bot already has instructions. To change its job, type /setup and what you'd like it to do.","serverError.setup.started":"This chat has already started. Type /setup and what you'd like this bot to do.","serverError.setup.someoneElse":"Someone else is setting this bot up.","serverError.approval.allThreads":"Finish this bot's approval change first. Every thread's provider must support this approval level.","serverError.approval.pending":"Finish this bot's pending approval change first","serverError.approval.provider":"Use the bot's provider on this thread before applying its approval level","serverError.engineCheck.timeout":"{name} didn't answer within {seconds} seconds.","chat.notice.acpEmpty":"{provider} finished without replying.","chat.notice.acpNoReason":"{provider} stopped without saying why.","chat.notice.acpMcpAppsFailed":"Connected apps couldn't be set up, so {provider} couldn't start this reply. Try again, or switch this bot to another AI.","chat.notice.acpMcpServerFailed":`The "{server}" MCP server couldn't be set up, so {provider} couldn't start this reply. Try again, or switch this bot to another AI.`,"chat.notice.stop.refusal":"{provider} refused to go on with this request (stop reason: {reason}). Try again, reword the request, or switch this bot to another AI.","chat.notice.stop.refusalGeneric":"The AI refused to go on with this request (stop reason: {reason}). Try again, reword the request, or switch this bot to another AI.","chat.notice.stop.maxTokens":"{provider}'s reply reached its maximum length before it finished (stop reason: {reason}). Ask it to continue, or ask for a shorter answer.","chat.notice.stop.maxTokensGeneric":"The AI's reply reached its maximum length before it finished (stop reason: {reason}). Ask it to continue, or ask for a shorter answer.","chat.notice.stop.maxRequests":"The turn made as many model requests as one turn may before it finished (stop reason: {reason}). Ask it to carry on from where it stopped, or split the task.","chat.notice.unaskedStop":`The AI's request was cut off before it finished, and nobody stopped it (it said only "{said}"). Send the message again to try once more.`,"chat.notice.piSessionSlow":"Pi is taking longer than usual to start this conversation's session. The turn goes on when Pi answers. Press Stop to cancel it.","chat.notice.unreadMessage":"This turn ended before the model read a message sent while it ran. Send that message again.","chat.notice.codexUnsupportedOne":`Codex could not run the tool {tools} ("unsupported call"): the AI provider sent the call back without the tool's app name, so it never reached the tool. Pick a model for this bot whose provider handles tool calls fully.`,"chat.notice.codexUnsupportedMany":`Codex could not run the tools {tools} ("unsupported call"): the AI provider sent the call back without the tool's app name, so it never reached the tool. Pick a model for this bot whose provider handles tool calls fully.`,"chat.notice.codexUnsupportedMore":`Codex could not run the tools {tools} and {count} more ("unsupported call"): the AI provider sent the call back without the tool's app name, so it never reached the tool. Pick a model for this bot whose provider handles tool calls fully.`,"native.approval.allThreads":"Finish this bot's approval change first. Every thread's provider must support this approval level.","native.approval.pending":"Finish this bot's pending approval change first","native.approval.provider":"Use the bot's provider on this thread before applying its approval level","native.lend.chooseCapability":"Choose at least one folder, apps and screen, the internet connection, your Chrome, or the terminal.","native.update.packageMissing":"The downloaded package is no longer available. Try the update again.","native.update.noChecksum":"The update feed gave no checksum to verify the package against.","native.update.noPkexec":"pkexec is not installed.","native.update.promptClosed":"The password prompt was closed.","native.update.noAdmin":"This session could not ask for administrator rights.","native.update.checksumMismatch":"The downloaded update did not match its checksum. Check again to download it fresh.","native.update.installTimedOut":"The install took too long.","native.update.installFailed":"The install did not finish: {reason}","native.update.checkFailed":"Couldn't check for updates. {error}","native.update.installing":"Installing the update. Enter your password if asked.","native.update.installFailedPlain":"The update could not be installed.","mcp.check.unauthorized":"unauthorized","activity.tool.team.messagePerson":"Message person","activity.tool.team.reportBug":"Report bug","browser.control.held":"{name} is paused for you","native.lendTray.and":" and ","native.lendTray.clouds":"{count} Clouds","native.lendTray.pausedLine":"Paused: {clouds} can't use this {device}","native.lendTray.paused":"Paused","native.lendTray.usingMany":"{clouds} are using this {device}","native.lendTray.usingOne":"{clouds} is using this {device}","native.lendTray.canUse":"{clouds} can use this {device}","native.lendTray.problem":"{cloud} can't use this {device}: {why}","native.lendTray.problemNoticeTitle":"{cloud} can't use this {device}","native.lendTray.myCloud":"My Cloud","native.lendTray.whySignIn":"this app's sign-in to it ended. Open it from this app to sign in again.","native.lendTray.whyMoved":"its address changed. Open it from this app to start lending again.","native.lendTray.whyAccount":"you're signed in with a different account now. Sign in with the one you lent it from to keep lending.","native.lendTray.whyNoServer":"this app has no saved place for it yet. Open My Cloud from this app once.","native.lendTray.whyUnreachable":"this app can't reach it. Check the internet connection, and update Limix Bot if it's out of date.","native.lendTray.waiting":"Waiting for {clouds} to accept this {device}","routines.event.automation":"Automation","routines.event.cronMoveHint":"Open this automation to change its repeating schedule and time zone.","routines.event.resize":"Resize event","routines.event.resizeSeries":"Resize this entire recurring series?","chat.mermaid.failed":"Diagram could not be rendered: {error}","pair.myCloud":"My Cloud","pair.team.open":"Open {team} with Limix Bot Cloud","pair.team.openHint":"You sign in there with your email, then come straight back here.","pair.signInTo":"Sign in to {name}","pair.connectTo":"Connect to {name}","shortcuts.toggle-sidebar":"Collapse or expand the sidebar","readyBots.bot.social.title":"Social media manager","readyBots.bot.social.description":"Plans your posts and adds them to Postiz as drafts or scheduled posts, ready for you to review.","readyBots.bot.social.try":"Plan next week's posts for LinkedIn and X","native.cloud.otherGone":"That Cloud is no longer one of yours.","native.cloud.otherNotReady":"{name} isn't ready to open yet.","native.cloud.otherNoLongerYours":"{name} is no longer one of your Clouds.","native.cloud.otherNotRunning":"{name} isn't running right now.","native.cloud.invalidAdd":"Invalid Cloud to add.","native.cloud.invalidOrganization":"Invalid organization to add.","native.cloud.invalidColor":"Invalid Cloud color.","native.cloud.invalidRemove":"Invalid Cloud to remove.","native.cloud.ready.open":"Click to open it.","native.cloud.ready.quotedTitle":"“{name}” is ready","native.places.noLongerHere":"That place isn't here any more.","native.places.profileFailed":"This computer's own place didn't open. Try again in a moment.","native.places.cannotAdd":"That isn't something to add here.","native.cloud.addSignIn":"Sign in to Limix Bot Cloud first.","native.cloud.addPlanAndName":"Choose a plan and a name to continue.","native.cloud.addOrganizationName":"Give the organization a name to continue.","native.cloud.noNewCloud":"There is no new Cloud to open.","native.lend.moveWaiting":"Lending to your bots' home waits until it is signed in and not paused.","native.lend.moveNotStarted":"Lending to My Cloud did not start.","native.boot.sharedFolderAdvice":" If Limix Bot is not running on another computer or container that shares this folder, quit Limix Bot, delete {path} and start again.","native.lendTray.pause":"Pause","native.lendTray.resume":"Resume","native.lendTray.pauseUnsaved":"Pause is not saved. Sharing is stopped now. Retry saving pause before quitting.","native.lendTray.pauseUnsavedTitle":"Paused, not saved","native.lendTray.retryPause":"Retry saving pause","native.lendTray.activity":"See activity","native.files.newFromCloud":"new from My Cloud","native.files.nameNotSupported":"This computer can't hold that name.","native.files.gitProtected":"Files inside .git are never changed from My Cloud.","native.files.changeDamaged":"The change was damaged on its way; it will be fetched again.","native.places.chooseColor":"Choose one of the colors.","native.places.noColor":"This place has no color to change.","native.talk.listening":"Listening…","native.talk.sending":"Sending to Limix Bot…","native.talk.thinking":"Limix Bot is thinking…","native.talk.needsYou":"Limix Bot needs you · Open chat","native.talk.stillWorking":"Still working · Open chat","native.talk.dismiss":"Dismiss","native.talk.releaseToSend":"Let go to send","native.talk.voiceBusy":"Voice is in use in Limix Bot","native.talk.openMausBot":"Open Limix Bot to talk","native.talk.starting":"Limix Bot is still starting. Try again in a moment.","native.talk.setUpFirst":"Set up Limix Bot first, then try again.","native.talk.movedToCloud":"Limix Bot lives on My Cloud now — talk to it there","native.talk.permissions":"Talking needs Microphone + Speech Recognition access — System Settings → Privacy & Security.","native.talk.dictationOff":"Turn on Dictation in System Settings → Keyboard, then try again.","native.talk.unavailable":"Talking couldn't start. Try again.","native.talk.failed":"Limix Bot couldn't take that · Open chat","activity.tool.team.cancelWait":"Cancel wait","activity.tool.team.deleteTrigger":"Delete trigger","activity.tool.team.listWaits":"List waits","activity.tool.team.waitUntil":"Wait until","serverError.request.bodyTimeout":"The request took too long. Check the connection and try again.","serverError.browser.restartingUnresponsive":"The browser stopped responding, so it is being restarted. The live view reconnects by itself.","serverError.computer.desktopOnly":"Only the Limix Bot app on this computer can let a bot use it. Open the app here, or let the bot work in its own browser or on a cloud desktop instead.","serverError.computer.permissionsThenRestart":"Limix Bot can't use this computer yet — make sure Limix Bot has the permissions it asks for, then restart it","serverError.computer.notReadyDetail":"Limix Bot can't use this computer yet — {reason}","serverError.computer.notReadyMacPermission":"Limix Bot can't use this computer yet — {reason}. Relaunch Limix Bot after granting the missing macOS permission.","chat.notice.copilotAccountRefused":"GitHub Copilot refused this request for the signed-in account. Check its Copilot plan and premium request allowance, then try again.","chat.notice.commandCodeAccountRefused":"Command Code refused this request for the signed-in account. Check its plan and credits on commandcode.ai, then try again.","chat.notice.kiroAccountRefused":"Kiro refused this request for the signed-in account. Check its Kiro plan and credits, then try again.","chat.notice.acpQuietUsageLimit":"{name} reached a usage limit{said} and is waiting it out without replying, so this turn was stopped.","chat.notice.acpQuietStuck":"{name} sent nothing for {quiet} with no tool running, no open request to its model and no CPU use, so the turn was stopped as stuck. Send the message again to retry.","chat.notice.acpModelRequestFailed":`{name}'s model request failed: "{message}" {name} may retry or stop; no reply for {quiet} so far.`,"chat.notice.acpModelFallback":"{displayName} no longer offers {wanted}, so this conversation uses {fallback}. Choose another model for this bot to stop seeing this.","chat.notice.codexActionMayHaveRun":"{message} A tool action may have run. Check its effects before trying again.","chat.notice.modelServerStoppedAnswering":"The model server at {host} stopped answering, so the reply was stopped.","chat.notice.piModelNotConfirmed":"Pi did not confirm the selected model","serverError.install.invalidDetails":"{name}'s install details are invalid. Nothing was downloaded.","serverError.install.versionGone":"This version of {name} is no longer available to download. Update Limix Bot, then try again.","serverError.install.downloadLimited":"The download site is limiting downloads right now. Try again in a few minutes.","serverError.install.siteNotAnswering":"{name}'s download site isn't answering right now. Try again later.","serverError.install.downloadFailed":"{name} couldn't be downloaded. Check the internet connection and try again.","serverError.install.downloadTooLarge":"The {name} download was larger than expected, so it was stopped. Nothing was installed.","serverError.install.unofficialDownload":"The {name} download did not come from its official site, so it was stopped. Nothing was installed.","serverError.install.redirects":"The {name} download kept redirecting, so it was stopped. Nothing was installed.","serverError.install.safetyCheck":"The {name} download failed its safety check, so nothing was installed. Try again later.","serverError.install.downloadTimeout":"The {name} download took too long and was stopped. Check the internet connection and try again.","serverError.install.unsafeArchive":"The archive contains an unexpected or unsafe file. Nothing was installed.","serverError.install.unsafeFile":"The {name} download holds an unexpected or unsafe file, so nothing was installed.","serverError.install.notPlainFolder":"Limix Bot's folder for {name} is not a plain folder ({path}), so nothing was changed. Move it away, then try again.","serverError.install.unexpectedFolder":"Limix Bot's folder for {name} holds something it did not put there ({path}), so nothing was changed. Move it away, then try again.","serverError.install.diskSpace":"There is not enough free disk space to install {name}. Free up about {megabytes} MB, then try again.","serverError.install.openElsewhere":"{name} is open in another window. Close it, then try again.","serverError.install.cannotWrite":"Limix Bot can't write to its folder for {name}. Check the folder's permissions, then try again.","serverError.install.failed":"{name} couldn't be installed. Try again.","serverError.install.noDownload":"{name} has no download for this computer.","serverError.install.existingDoesNotStart":"{name} is installed, but it doesn't start on this computer ({failure}). Nothing was changed.","serverError.install.programMissing":"The {name} download did not contain the program it should, so nothing was installed.","serverError.install.notSigned":"The downloaded {name} is not signed by its maker, so nothing was installed.","serverError.install.downloadDoesNotStart":"{name} was downloaded, but it doesn't start on this computer ({failure}). Nothing was installed.","chat.notice.waitingApprovalElsewhere":"Waiting on your approval in @{name}","chat.notice.waitingAnswerElsewhere":"Waiting on your answer in @{name}","chat.notice.teammateNeedsInput":"{name} needs your input: {question}","chat.notice.relayCouldNotContinue":"this conversation could not carry on — {error}","secretCard.delivery.fileNamed":"{botName}'s commands can read it from a private file for 24 hours; it is never added to chat.","secretCard.delivery.refNamed":"{botName} gets a one-use reference for Limix Bot's own tools and never sees it.","serverError.secret.missing":"no such credential request","serverError.secret.settingsCard":"this card saves a key in Settings","serverError.secret.savingFromPhone":"this secret is currently being saved from a phone","serverError.secret.declined":"this request was declined","serverError.secret.replaced":"this request was replaced by a newer one","serverError.secret.taskStopped":"this request stopped with its task","serverError.secret.alreadySaved":"this secret was already saved","serverError.secret.valueSize":"Enter the secret: up to {bytes} bytes.","serverError.secret.notKeptSafely":"The secret could not be kept safely. Nothing was saved.","serverError.secret.unavailableLower":"this credential request is no longer available","serverError.signIn.requestMissing":"no such sign-in request","serverError.signIn.requestReplaced":"this sign-in request was superseded by a newer one","serverError.signIn.answeredInChat":"this sign-in request was already answered in the chat","serverError.signIn.alreadyDone":"this sign-in request was already marked done","serverError.signIn.alreadyCancelled":"this sign-in request was already cancelled","serverError.inbox.answerNotPassed":"That answer can't be passed back.","serverError.room.nameOneLine":"room name must fit on one line","serverError.computer.systemUnsupported":"bots can't use this computer on this system — choose another place for this bot to work","serverError.computer.aiUnsupported":"this bot's AI can't use this computer — pick another AI for this bot, or choose another place for it to work","chat.notice.engineSignedOut":"{name} is signed out.","serverError.wait.alreadyEnded":"This wait has already ended.","chat.notice.failoverSignedInAgain":"{engine} is signed in again, so this conversation is back on {engine}.","chat.notice.failoverSignedOut":"{from} is signed out, so {to} took over.","serverError.botDefaults.nameLength":"name must be at most 100 characters","serverError.botDefaults.sectionLength":"section must be at most 60 characters","serverError.botDefaults.invalid":"These bot settings are not valid.","serverError.postiz.addressHttps":"Enter your Postiz server's address, starting with https://.","serverError.postiz.addressNoCredentials":"Leave any user name or password out of the Postiz address.","serverError.postiz.addressNoQuery":"Enter the Postiz address without anything after ? or #.","serverError.postiz.addressLocalHttp":"Use an https:// address. Plain http:// works only for a Postiz server on this computer.","serverError.postiz.addressUseHttps":"Use your Postiz server's https:// address.","serverError.postiz.addressContainsKey":"That address has a key in it. Enter the server address alone, and paste the key in its own box.","serverError.postiz.mcpUpdating":"MCP servers are being updated. Try again in a moment.","chat.notice.backupCardWaiting":"switched to {name}. Your request waits on a card above and continues on {name} once you act on it.","chat.notice.backupRequestUnderWay":"switched to {name}. Your request is still under way here and continues on {name}.","chat.notice.backupConversationBusy":"switched to {name}. This conversation is working, so your message was not sent again.","chat.notice.backupQuestionWaiting":"switched to {name}. A teammate's question is waiting for your answer in this conversation, so your message was not sent again. Answer it, then send your message again.","chat.notice.backupMessageMissing":"switched to {name}, but your message could not be found to send again. Send it again.","chat.notice.backupContinuingLimit":"continuing on {name} after hitting the usage limit","chat.notice.backupContinuingSignedOut":"continuing on {name} while {engine} is signed out","chat.notice.backupCouldNotContinue":"could not continue on {name}: {error}","serverError.setup.mausbotMissing":"no such Limix Bot","serverError.setup.mausbotOwnerOnly":"only Limix Bot's own person can do this","serverError.setup.noIntroToFollowUp":"this conversation has no intro to follow up","serverError.inbox.missing":"There is no inbox here.","serverError.inbox.lineMissing":"That line is not in your inbox.","serverError.inbox.answerRequired":"This waits on your answer: answer it, or close it, where it asks.","serverError.instance.settingsInvalid":"Supply a valid CLI path, account name, configuration directory, boolean tools setting or a reply wait of 1 to 60 minutes.","serverError.instance.replyWaitUnsupported":"The reply wait is available for OpenAI-compatible servers only.","serverError.instance.modelsUnsupported":"Model IDs can be changed for added OpenAI-compatible servers only.","serverError.instance.defaultModelRemoved":"{model} is the default model. Choose another default model before removing it from this server.","serverError.postiz.adminOnly":"Only the owner or an admin can manage the Postiz connection.","serverError.postiz.keyAlone":"Paste the Postiz API key alone.","serverError.postiz.addressAsText":"Send the Postiz address as text.","serverError.secret.localService":"A local service cannot enter a secret. Enter it in Limix Bot.","serverError.secret.cloudOwnerOnly":"Only the owner of this Cloud can enter this secret.","serverError.secret.conversationOwnerOnly":"Only the person this conversation belongs to can enter this secret.","serverError.secret.credentialSavingFromPhone":"this credential is currently being saved from a phone","serverError.secret.credentialDismissed":"this credential request was dismissed","serverError.secret.credentialSuperseded":"this credential request was superseded by a newer one","serverError.secret.notSavedYet":"{label} was not saved yet","serverError.secret.notReadyToResume":"this credential request is not ready to resume","serverError.secret.noLongerConfigured":"{label} is no longer configured","serverError.department.moveChiefConflict":"A department can have only one Chief of Staff. Change the Chief before moving this bot.","serverError.department.membershipChanged":"Department membership changed. Reopen the dialog and try again.","serverError.mcp.addressAsText":"Send the MCP server address as text.","serverError.mcp.addressChanged":"The MCP server address changed. Reload the server and try again.","serverError.attachment.alreadyInMessage":"This file is already in a message, so it stays.","routines.server.backupSignedOut":"Starting again on the backup AI: this bot's AI is signed out","approval.applied.waitFollowUp":"Then {name} will: {followUp}","chat.notice.waitDone.urlContains":"{label}: done. {url} now says “{text}”.","chat.notice.waitDone.urlMissing":"{label}: done. {url} no longer says “{text}”.","chat.notice.waitDone.fileExists":"{label}: done. {path} is there now.","chat.notice.waitDone.fileMissing":"{label}: done. {path} is gone.","chat.notice.waitDone.fileChanged":"{label}: done. {path} changed.","chat.notice.waitDone.processRunning":"{label}: done. {process} is running.","chat.notice.waitDone.processGone":"{label}: done. {process} stopped.","chat.notice.waitDone.botIdle":"{label}: done. {botName} finished.","chat.notice.waitBotGone":"Stopped waiting for {label}: {botName} no longer exists.","chat.notice.waitExpiredOne":"Stopped waiting for {label} after {hours} hour.","chat.notice.waitExpiredMany":"Stopped waiting for {label} after {hours} hours.","mcp.personal.oneHeader":"Personal MCP connections support one header. Remove the extra headers before saving.","readyBots.routine.socialWeekly":"Weekly post plan","pair.sessionEnded":"Your session ended. Pair this device again to keep using it.","chat.notice.computerDesktopOnly":"Only the Limix Bot app on this computer can let a bot use it. Open the app here, or let the bot work in its own browser or on a cloud desktop instead.","chat.notice.computerPermissionsThenRestart":"Limix Bot can't use this computer yet — make sure Limix Bot has the permissions it asks for, then restart it","chat.notice.computerNotReadyDetail":"Limix Bot can't use this computer yet — {reason}","chat.notice.computerNotReadyMacPermission":"Limix Bot can't use this computer yet — {reason}. Relaunch Limix Bot after granting the missing macOS permission.","chat.notice.computerSystemUnsupported":"bots can't use this computer on this system — choose another place for this bot to work","chat.notice.computerAiUnsupported":"this bot's AI can't use this computer — pick another AI for this bot, or choose another place for it to work","serverError.engine.signedOut":"{name} is signed out.","attach.loadingName":"Loading {name}","serverError.mcp.personalHeadersShared":"Personal MCP header values cannot be saved in shared configuration. Save your key in your personal connection.","serverError.mcp.testSignInFirst":"Sign in to the team to test your own connection.","server.routines.cron.raw":"Cron {expression}","server.routines.cron.everyDay":"Every day at {time}","server.routines.cron.monthlyLastDay":"Monthly on the last day at {time}","server.routines.cron.monthlyDay":"Monthly on day {day} at {time}","server.routines.cron.yearly":"Yearly on {month} {day} at {time}","server.routines.cron.weekdays":"Every weekday at {time}","server.routines.cron.weekly":"Weekly on {weekday} at {time}","server.routines.cron.weeklySaturdaySunday":"Weekly on {weekday} at {time}","server.routines.cron.nth.first":"Monthly on the first {weekday} at {time}","server.routines.cron.nth.second":"Monthly on the second {weekday} at {time}","server.routines.cron.nth.third":"Monthly on the third {weekday} at {time}","server.routines.cron.nth.fourth":"Monthly on the fourth {weekday} at {time}","server.routines.cron.nth.fifth":"Monthly on the fifth {weekday} at {time}","server.routines.cron.nth.last":"Monthly on the last {weekday} at {time}","server.routines.cron.nthWeekend.first":"Monthly on the first {weekday} at {time}","server.routines.cron.nthWeekend.second":"Monthly on the second {weekday} at {time}","server.routines.cron.nthWeekend.third":"Monthly on the third {weekday} at {time}","server.routines.cron.nthWeekend.fourth":"Monthly on the fourth {weekday} at {time}","server.routines.cron.nthWeekend.fifth":"Monthly on the fifth {weekday} at {time}","server.routines.cron.nthWeekend.last":"Monthly on the last {weekday} at {time}","attach.imagesLeftOutOne":"A message takes up to {count} images, {megabytes} MB in all. {names} wasn't attached.","attach.imagesLeftOutMany":"A message takes up to {count} images, {megabytes} MB in all. {names} weren't attached.","attach.archivesUnsupported":"Archives can't be attached: unzip {names} and attach the files inside.","native.home.ownCopyNotReady":"Limix Bot on this computer could not go back to its own copy yet.","native.home.ownCopyNotRunning":"This computer's own copy isn't running.","native.cloud.connectedAppsStay":"Your connected apps stay on this computer: that server has no connected-apps service of its own. Connect them again there in Apps.","native.home.notAvailable":"That server can't be your bots' home now.","native.lend.homeChanged":"This server is not your bots' home any more","native.lend.terminalSignIn":"Sign in to the Cloud before lending it the terminal.","native.lend.terminalAllow":"Let them run commands","native.lend.terminalTitle":"Let your Clouds run commands on this computer?","native.lend.terminalDetail":"Bots on your own Clouds could run any command on this computer as you, including reading and changing any file you can. You can turn this off from the Limix Bot icon's menu.","native.lendTray.canUseWithoutScreen":"{clouds} can use this {device}, but not its apps and screen","native.lendTray.terminal":"Let Clouds run commands on this {device}","native.screen.windowsHelperBlocked":"Computer control could not start on this PC: its helper, cua-driver-background.exe or cua-driver.exe, is missing or blocked. Windows Security may have quarantined it: open Windows Security → Virus & threat protection → Protection history, restore or allow it (or reinstall Limix Bot), then restart Limix Bot.","native.home.itemDidNotMove":"It did not move.","native.home.signedOut":"This app isn't signed in to {name}. Open {name} in this app, then try again.","native.home.serverChanged":"The server at {name}'s address is another one now, so nothing more goes there.","native.home.otherPeople":"{name} has other people on it now, so your bots can't move there.","native.home.localNoAnswer":"Limix Bot on this computer did not answer. Try again in a moment.","native.home.localResumeFailed":"Limix Bot on this computer could not go on again.","native.home.serverGone":"That server isn't in this app any more.","native.home.alreadyMoving":"Your bots are already moving.","native.home.movingToCloud":"Your bots are moving to My Cloud.","native.home.personalServerOnly":"{name} has other people on it, so your bots stay here. Only a server that's yours alone can be your bots' home.","native.home.updateServer":"Update Limix Bot on {name} first, then try again.","native.server.notAnswering":"{name} isn't answering","native.server.notAnsweringDetail":"Nothing answers at {host}. If that server is gone for good, remove it from your list. Your bots elsewhere aren't affected.","native.screen.starting":"Screen control is starting on this {device}","native.screen.permissions":"macOS hasn't allowed screen control yet","native.screen.blockedWindows":"Screen control is blocked: Windows Security may have stopped it","native.screen.blocked":"Screen control is blocked on this {device}","native.screen.off":"Screen control is off on this {device}","native.screen.unsupported":"Screen control can't work on this {device}","native.screen.notRunning":"Screen control isn't running on this {device}","native.screen.allow":"Allow screen control…","native.screen.turnOn":"Turn on screen control","native.screen.wantScreen":"use this {device}'s apps and screen","native.screen.wantFiles":"use the files on this {device}","native.screen.wantTerminal":"run commands on this {device}","native.screen.paused":"Using this {device} is paused.","native.screen.terminalOff":"Running commands isn't turned on for this {device}.","native.screen.allowMac":"macOS hasn't allowed Limix Bot to see and use the screen yet. Turn on asks macOS.","native.screen.askTitle":"{bot} on {cloud} wants to {want}","native.home.placeNotSuggested":"That isn't a place this app suggested.","native.home.bringUnavailable":"Your bots can't be brought together there now.","chat.notice.memoryReclaimedBrowser":"Ran out of room, so I closed the browser to keep everything else running.","chat.notice.memoryReclaimedTask":"Ran out of room, so I stopped this task to keep everything else running.","chat.notice.memoryReclaimedBrowserDetail":"Ran out of room, so I closed the browser to keep everything else running. ({detail})","chat.notice.memoryReclaimedTaskDetail":"Ran out of room, so I stopped this task to keep everything else running. ({detail})","server.personFirst.stoppedSeconds":"Stopped a step that had run for {seconds} s, to answer you first","server.personFirst.stoppedMinutes":"Stopped a step that had run for {minutes} min, to answer you first","server.runOwner.onlyAskerStops":"Only {name} or an admin can stop this.","server.runOwner.notYourQueued":"Only the person who sent this message can remove it.","server.runOwner.waitsItsTurn":"This message waits its turn and runs after the request that is running now.","server.runOwner.onlyAskerRetries":"Only {name} or an admin can run this request again.","server.routines.held.planCancelled":"Your routines are paused because the plan was cancelled. To keep one running until the plan ends, turn it back on in Routines.","server.routines.held.noEngine":"Your routines are paused: none of your AI accounts is signed in here any more. They turn back on by themselves when you sign in again.","server.routines.held.noConnections":"Your routines are paused: every connected app and MCP server was removed. They turn back on when you connect one, or turn one back on in Routines.","mcp.request.change":"Change","mcp.request.remove":"Remove","secretCard.greenference.description":"Runs Greenference models with your own key.","secretCard.modelgo.description":"Runs ModelGo models with your own key.","secretCard.geminiTts.description":"Generates spoken replies, voice notes and call speech with Gemini.","chat.notice.elicitationUrlDeclined":"{server} asked you to open a link to continue. Limix Bot can't open it from here, so the request was declined. Open the link yourself, then ask the bot to try again.","chat.notice.elicitationUrlDeclinedWithUrl":"{server} asked you to open a link to continue: {url}. Limix Bot can't open it from here, so the request was declined. Open the link yourself, then ask the bot to try again.","chat.notice.elicitationUrlDeclinedGeneric":"An MCP server asked you to open a link to continue. Limix Bot can't open it from here, so the request was declined. Open the link yourself, then ask the bot to try again.","chat.notice.elicitationUrlDeclinedGenericWithUrl":"An MCP server asked you to open a link to continue: {url}. Limix Bot can't open it from here, so the request was declined. Open the link yourself, then ask the bot to try again.","chat.notice.elicitationFormDeclinedOne":"{server} asked you to fill in a field. Limix Bot can't show that form yet, so the request was declined.","chat.notice.elicitationFormDeclinedMany":"{server} asked you to fill in {fields} fields. Limix Bot can't show that form yet, so the request was declined.","chat.notice.elicitationFormDeclinedOneMessage":`{server} asked you to fill in a field ("{message}"). Limix Bot can't show that form yet, so the request was declined.`,"chat.notice.elicitationFormDeclinedManyMessage":`{server} asked you to fill in {fields} fields ("{message}"). Limix Bot can't show that form yet, so the request was declined.`,"chat.notice.elicitationFormDeclinedGenericOne":"An MCP server asked you to fill in a field. Limix Bot can't show that form yet, so the request was declined.","chat.notice.elicitationFormDeclinedGenericMany":"An MCP server asked you to fill in {fields} fields. Limix Bot can't show that form yet, so the request was declined.","chat.notice.elicitationFormDeclinedGenericOneMessage":`An MCP server asked you to fill in a field ("{message}"). Limix Bot can't show that form yet, so the request was declined.`,"chat.notice.elicitationFormDeclinedGenericManyMessage":`An MCP server asked you to fill in {fields} fields ("{message}"). Limix Bot can't show that form yet, so the request was declined.`,"chat.notice.elicitationContinue":"{server} asks to continue","chat.notice.elicitationContinueGeneric":"An MCP server asks to continue","chat.notice.elicitationMessageGeneric":"An MCP server: {message}","chat.notice.appAccessRequested":"App access requested","chat.notice.codexModelUnavailable":"This model isn't available on your ChatGPT plan, so it's now hidden from this account's model list. Pick another model.","chat.notice.codexElicitationDeclined":"{server} asked for input Limix Bot can't show yet, so the request was declined.","chat.notice.codexElicitationDeclinedGeneric":"An MCP server asked for input Limix Bot can't show yet, so the request was declined.","chat.notice.usageLimitResets":"This {provider} account has reached its usage limit{detail}, which resets {resets}. Until then, switch this bot to another AI.","approval.voice.titled":"{requester}: {title} Review the details and choose {allow} or {cancel}.","approval.action.deleteBot":"Delete bot","approval.action.applySetup":"Apply setup","routines.editor.roomMissing":"Room no longer exists. Choose another.","browser.panel.maximizeHint":"Maximize (fill the app window)","browser.panel.fullscreenHint":"Full screen (whole display)","time.invalid":"Invalid Date","shortcuts.send-follow-up":"While a bot works: queue instead of steering, or the other way round","serverError.bot.viewOnly":"You can view {bot}, not chat with it.","native.teamMove.sessionLabel":"Move to a team","native.teamMove.homeNoAnswer":"My Cloud did not answer.","native.teamMove.openTeam":"Open the team you're moving a bot into.","server.lendingLift.chooseAnswer":"Choose Allow or Not now.","server.lendingLift.ownerDeviceOnly":"Only you can allow this, from one of your own devices.","server.teammates.waitCardClosed":"The card it waited on was replaced or closed","native.cloud.stayed.something":"Something","native.cloud.stayed.notArrived":"It didn't reach My Cloud.","native.cloud.stayed.settings":"Some of its settings didn't reach My Cloud.","native.cloud.stayed.room":"A room","native.cloud.stayed.roomNotArrived":"This room didn't reach My Cloud.","native.cloud.stayed.memoryOne":"One of its memory notes didn't reach My Cloud.","native.cloud.stayed.memoryMany":"{n} of its memory notes didn't reach My Cloud.","native.cloud.stayed.memoryHistory":"Some of its memory history didn't reach My Cloud.","native.cloud.stayed.fileOne":"One of its files didn't reach My Cloud.","native.cloud.stayed.fileMany":"{n} of its files didn't reach My Cloud.","native.cloud.stayed.chats":"Chats","native.cloud.stayed.chatOne":"Part of one chat didn't reach My Cloud.","native.cloud.stayed.chatMany":"Parts of {n} chats didn't reach My Cloud.","native.cloud.stayed.routineHistory":"Routine history","native.cloud.stayed.runOne":"One past run didn't reach My Cloud.","native.cloud.stayed.runMany":"{n} past runs didn't reach My Cloud.","native.cloud.stayed.learned":"What your bots learned about you","native.cloud.stayed.learnedNotArrived":"Some of it didn't reach My Cloud.","native.cloud.stayed.teamNotes":"Team notes","native.cloud.stayed.teamNotesNotArrived":"Some of them didn't reach My Cloud.","native.cloud.stayed.app":"An app","native.cloud.stayed.addAgain":"It didn't reach My Cloud. Add it there again if a bot needs it.","native.cloud.stayed.attachmentOne":"An attachment","native.cloud.stayed.attachmentMany":"{n} attachments","native.cloud.stayed.notArrivedMany":"They didn't reach My Cloud.","native.cloud.stayed.secretOne":"A sign-in or key","native.cloud.stayed.secretMany":"{n} sign-ins and keys","native.cloud.stayed.addAgainMany":"They didn't reach My Cloud. Add them there again if a bot needs them.","native.cloud.stayed.more":"{n} more","native.cloud.incomplete":"Some things didn't reach My Cloud yet. It tries again by itself, and if they still can't go, the rest moves without them and you'll see what stayed here.","native.cloud.otherAccount":"Another Limix Bot Cloud account signed in.","native.cloud.mailRead":"The mailboxes could not be read on this computer.","native.cloud.mailOutdated":"My Cloud can't take your mailboxes yet. Connect them there under Connected apps.","native.cloud.mailRefused":"My Cloud did not take your mailboxes.","native.html.nothingToOpen":"Nothing to open","native.html.tooLarge":"This page is too large to open (2 MB)","native.accounts.moving":"This computer's bots are moving to the Cloud. Try again once that's done.","native.accounts.myComputer":"My computer","native.teamLink.otherTitle":"This team isn’t on the account signed in here","native.teamLink.otherDetail":"Limix Bot is signed in as {email}. If you joined the team with another address, sign in with that one. {email} stays signed in too.","native.teamLink.signIn":"Sign in with another address","server.outside.routineFromBefore":"This routine was made before this update. Open it and save it once to run it with full access.","server.outside.routineFromOutside":"A webhook's run made or changed this routine, so it runs without full access. Open it and save it once to run it with full access.","server.outside.conversationFromBefore":"This conversation is from before My Cloud was only yours, so this bot works in it without a shell. Start a new conversation to use it fully.","server.outside.conversationFromOutside":"Work from outside came into this conversation, so this bot works in it without a shell. Start a new conversation to use it fully.","server.outside.engineRefusal":"This bot's AI can't run it that way. {why}","server.outside.engineRefusalOldConversation":"This conversation is from before the Cloud was only yours, and this bot's AI can't work in it. Start a new conversation.","server.memory.movedNote":"This note moved here from where the bot kept it before, so it can't be reverted here.","server.email.sent":"Sent from {address} to {count} recipient(s)","serverError.secret.mailboxAlreadyConnected":"this mailbox was already connected","serverError.secret.emailAndPassword":"Enter your email address and its password.","serverError.secret.emailUnavailable":"Email can't be connected here.","server.connect.emailOnComputer":"Type your email address and password on your computer.","serverError.mailbox.adminOnly":"Only the owner or an admin can manage the mailboxes.","serverError.mailbox.addressAndPassword":"Enter your email address and password.","serverError.voice.fishKeyRequired":"Add a Fish Audio key in Settings → API keys to talk to your bots here.","serverError.voice.fishTranscribeConnection":"Couldn't reach Fish Audio to hear you — check your connection.","serverError.file.tooLarge":"This file is {size}, over the {limit} limit for opening files from chat. The file itself is still saved as {name}.","server.botApi.engineRefusal":"This thread came in through the Bot API, and this bot's AI can't work in it. Start a new conversation.","server.botApi.confinedWhy":"This call came in through the Bot API, so it can only answer from what this bot already knows.","voice.openai.description":"Read replies and voice messages with AI-generated voices. Uses your OpenAI API key and is billed by OpenAI based on API usage. Live call settings are separate.","voice.openai.missingKey":"Add an OpenAI API key in Settings → API keys on the host to use readout.","voice.sample":"Good morning. The tests passed overnight, and I left two notes for you in the chat.","voice.openai.error.key":"Add an OpenAI API key in Settings → API keys to read replies aloud.","voice.openai.error.auth":"OpenAI rejected the API key or its Realtime access. Check the key and project permissions in Settings.","voice.openai.error.rateLimit":"OpenAI speech is rate limited or out of API credits. Check your API usage before trying again.","voice.openai.error.timeout":"OpenAI speech timed out. No audio was played for this segment.","voice.openai.error.connection":"OpenAI speech was interrupted. Check your connection and proxy settings.","voice.openai.error.empty":"OpenAI returned no speech audio for this segment.","voice.openai.error.invalid":"OpenAI returned an unexpected speech response.","voice.openai.error.limit":"OpenAI speech exceeded the 8 MiB limit for one segment.","voice.openai.error.cancelled":"OpenAI speech was cancelled.","voice.openai.error.failed":"OpenAI could not generate speech for this segment. Check your API access and usage.","voice.openai.error.voice":"Choose an OpenAI voice before reading replies aloud.","keys.purpose.openaiModelsVoice":"OpenAI models, reply readout and live calls","settings.section.imageGeneration":"Image generation","imageGen.intro":"Bots use this when you ask for an image in a chat, and bot avatars use it too. The backup is tried only when the base could not start: no key, no credit, rate limited or unreachable.","imageGen.status.ready":"Ready · images are made with {provider}","imageGen.status.backupOnly":"Ready with the backup only · images are made with {provider}","imageGen.status.notReady":"Not set up · add a key for the base or the backup provider; Custom also needs a base URL and a model ID","imageGen.primary.label":"Base provider","imageGen.primary.help":"Used first for every image.","imageGen.fallback.label":"Backup provider","imageGen.fallback.help":"Used only when the base could not start.","imageGen.fallback.none":"None","imageGen.slot.needsKey":"Needs a key: add it below.","imageGen.slot.needsConnection":"Needs a base URL and a model ID: add them below.","imageGen.model.label":"{slot} model","imageGen.model.placeholder":"Model ID","imageGen.model.other":"Other (type a model ID)","imageGen.model.idLabel":"{slot} model ID","imageGen.test.ok":"The key is accepted. The model is checked when the first image is made.","imageGen.test.okOpenrouter":"Works: the key is accepted and OpenRouter has the chosen model.","imageGen.test.noCredit":"The key is accepted, but this OpenRouter account has no credit, and image models are paid.","imageGen.test.modelMissing":"OpenRouter has no model {model}. Pick one from the list.","imageGen.test.rejected":"The provider refused this key. Check it or paste a new one.","imageGen.test.unreachable":"Could not reach the provider. Check the connection or the URL.","imageGen.test.unexpected":"The provider gave an unexpected answer.","imageGen.test.noUrl":"Add the base URL first, so the key is only sent to your endpoint.","imageGen.maxPerTurn.label":"Images per reply","imageGen.maxPerTurn.help":"The most images a bot may create in one reply.","imageGen.key.openai":"OpenAI API key","imageGen.key.gemini":"Gemini API key","imageGen.key.custom":"Custom image API key","imageGen.key.paste":"Paste API key","imageGen.key.get":"Get a key","imageGen.key.saved":"Key saved","imageGen.key.missing":"No key yet","imageGen.key.optional":"Key optional","imageGen.key.sharedXai":"This is the same Grok (xAI) key as under API keys, also used by the other Grok features. A Grok subscription does not include API access.","imageGen.key.sharedOpenrouter":"This is the same OpenRouter key as under API keys, also used by the OpenRouter models your bots run.","imageGen.key.manage":"Open API keys","imageGen.custom.url":"Base URL","imageGen.custom.help":"Any OpenAI-compatible Images API. localhost is the computer running {app}.","botIdentity.ai.usingProvider":"Uses {provider}, as set in Image generation.","botIdentity.ai.noProvider":"No image provider is set up yet.","botIdentity.ai.openImageSettings":"Open image settings","imageGen.key.xai":"Grok (xAI) API key","imageGen.key.openrouter":"OpenRouter API key","server.voice.noNoteNoVoice":"No voice note with this reply: this bot has no voice set up yet.","server.voice.noNoteFailed":"No voice note with this reply: the voice couldn't be made ({reason}).","agentEndpoints.responses":"Uses an API key without OAuth. The gateway must support streaming Responses (/v1/responses), including tool calls. Chat Completions alone is not enough. Use HTTPS or a secure tunnel to localhost.","agentEndpoints.messages":"Uses an API key without OAuth. The gateway must support Anthropic Messages (/v1/messages), including streaming and tool calls. HTTP sends your key unencrypted; prefer HTTPS or a secure tunnel.","agentEndpoints.codexTitle":"Codex direct API","agentEndpoints.codexHint":"Run the native Codex agent on an API key: OpenAI, or a gateway that speaks the Responses API. Each connection has its own key and Codex settings, and the provider behind the URL bills the usage.","server.voice.turnEnded":"I stopped before finishing: {reason}","phone.code.e2e.scan":"Open the {app} app on your phone and scan.","phone.code.e2e.wifi":"This Wi-Fi","phone.code.e2e.tailscale":"Tailscale","phone.code.e2e.relay":"Limix Bot Relay","phone.code.e2e.fromAnywhere":"from anywhere","phone.code.e2e.tailscaleOff":"not running on this computer","phone.code.e2e.signIn":"Sign in to reach it from anywhere","phone.code.e2e.relayOff":"not available right now","phone.code.e2e.encrypted":"End-to-end encrypted. Only your phone and this computer can read it.","phone.code.e2e.copyLink":"Copy link","phone.code.e2e.copied":"Link copied. Open it on your phone.","phone.code.e2e.getApp":"No app yet? Get it","phone.code.e2e.getAppDetail":"Scan with your phone camera.","remote.devices.connected":"Connected · {route}","remote.devices.connectedLegacy":"Connected · update the app to encrypt","remote.devices.connectedNow":"Connected","remote.devices.route.wifi":"Wi-Fi","remote.devices.route.tailscale":"Tailscale","remote.devices.route.relay":"Relay","remote.devices.localOnly":"Wi-Fi and Tailscale only","remote.devices.connectFrom":"Connect from","remote.devices.anywhere":"Anywhere","remote.devices.more":"Options for {name}","remote.devices.removePhone":"Remove phone","remote.devices.removed":"Removed {name}.","remote.e2e.anywhere":"Reachable from anywhere · end-to-end encrypted","remote.e2e.connecting":"Connecting to Limix Bot Relay…","remote.e2e.local":"On this Wi-Fi and Tailscale · end-to-end encrypted","serverError.mailbox.outgoingFields":"Check the outgoing server: a name like mail.example.com, a port from 1 to 65535, and SSL/TLS or STARTTLS.","server.meetings.card.title":"Meeting notes","server.meetings.card.starting":"Getting the cloud computer ready…","server.meetings.card.joining":"Joining the meeting…","server.meetings.card.lobby":"Waiting for the host to let me in","server.meetings.card.live":"In the meeting · others here: {count} · {minutes} min","server.meetings.card.ended":"Ended after {minutes} min. {reason}","server.meetings.card.questions":"Questions answered in the chat: {count}","server.meetings.card.writing":"Writing the notes…","server.meetings.card.leave":"Leave meeting","server.meetings.notes.summary":"Summary","server.meetings.notes.decisions":"Decisions","server.meetings.notes.actions":"Action items","server.meetings.notes.questions":"Open questions","server.meetings.notes.attendees":"Attendees","server.meetings.notes.transcript":"The full transcript is attached below.","server.meetings.nothingHeard":"{reason} Nobody said anything I could transcribe, so there are no notes.","server.meetings.endedDetail":"{reason} ({detail})","server.meetings.end.left":"I left the meeting.","server.meetings.end.stop_requested":'Someone in the meeting typed "@notes stop", so I left.',"server.meetings.end.meeting_ended":"The meeting ended.","server.meetings.end.removed":"Someone removed me from the meeting.","server.meetings.end.denied":"The host turned down my request to join.","server.meetings.end.lobby_timeout":"Nobody let me in, so I gave up waiting.","server.meetings.end.guests_blocked":"This meeting doesn't let guests join (the organizer's settings need a signed-in account), so I couldn't get in.","server.meetings.end.not_found":"This meeting link isn't active. Check the link; the meeting may have ended.","server.meetings.end.join_failed":"I couldn't get through the meeting's join screen.","server.meetings.end.consent_failed":"I couldn't post my note-taking notice in the meeting chat (chat may be off for guests), so I left without recording anything.","server.meetings.end.alone":"Everyone else left, so I left too.","server.meetings.end.max_length":"The meeting reached the 4-hour limit, so I left.","server.meetings.end.crashed":"The meeting bot stopped unexpectedly. What it heard until then is kept.","server.meetings.end.lost":"I lost contact with the cloud computer running the meeting. What it heard until then is kept.","server.meetings.end.meet_refused":"Google Meet didn't let me in as a guest. The host can allow guests in Host controls, or the meeting may not allow people outside the organization.","server.meetings.end.speech_unavailable":"I couldn't get speech-to-text for this meeting, so I didn't join.","server.meetings.card.settingUp":"Setting up transcription (one-time, about a minute)…","server.meetings.card.speechStopped":"Transcription stopped: {problem}","settings.section.phoneDevices":"Phone & devices","settings.section.thisServer":"This server","devices.title":"Phone & devices","devices.intro":"Let your phone and other computers use this computer.","devices.pair":"Pair a device","devices.pairAnother":"Pair another device","devices.paired":"Paired","devices.pairedNone":"Nothing paired yet.","devices.howTheyReach":"How they reach this computer","devices.moreWays":"More ways in","devices.computers.title":"Your other computers","devices.computers.detail":"Off until you turn it on. On, a computer on your tailnet can open this one from Connect to a server, once you give it a pairing code.","devices.computers.https":"Ready at {address}, with Tailscale's HTTPS certificate.","devices.computers.http":"Ready at {address}. Only your tailnet reaches it, and WireGuard encrypts it. For an https address, turn on HTTPS Certificates in Tailscale's DNS settings, then check again.","devices.computers.waiting":"Tailscale isn't connected on this computer yet. {app} answers here as soon as it is.","devices.route.wifi":"Same Wi-Fi","devices.route.wifiDetail":"Devices on this network. End-to-end encrypted.","devices.route.relay":"Anywhere, through {app}","devices.route.relayDetail":"End-to-end encrypted. {app} can't read it.","devices.route.https":"HTTPS address","devices.route.httpsDetail":"A free {app} web address, for browsers and other computers.","devices.route.httpsOn":"On · {address}","devices.route.on":"On","devices.route.onSince":"On · since {date}","devices.route.waiting":"On · waiting for a paired device","devices.route.off":"Off","devices.route.turnOn":"Turn on","devices.route.turnOff":"Turn off","devices.route.setUp":"Set up","devices.pair.title":"Pair a device with this computer","devices.pair.titlePhone":"Pair a phone with this computer","devices.pair.willTurnOn":"To reach this computer, {app} will turn on:","devices.pair.changeLater":"You can turn these off any time in Phone & devices.","devices.pair.pickOne":"Pick at least one way in.","devices.pair.done":"Done","devices.reach.wifi":"on Same Wi-Fi","devices.reach.tailscale":"on your tailnet","devices.reach.https":"at its {app} web address","devices.reach.relay":"anywhere through {app}","devices.reach.line":"Reaches this computer {ways}.","devices.reach.none":"No way in is on yet.","devices.simple.setUpTitle":"Use {app} on your phone","devices.simple.setUp":"Set up","devices.simple.yourPhone":"Your phone","devices.change":"Change","devices.done":"Done","devices.openCode":"Pairing code open · works until {until}","devices.revoke":"Revoke","remote.client.endsDec7":"This connection type ends Dec 7. After that, pair this computer again from the other computer's Phone & devices.","phone.code.pairingCode":"Pairing code","phone.code.typeIntro":"Open the {app} app and type this pairing code.","phone.signIn.emailCode":"Sign-in code from your email","settings.simple.account.noNameHint":"Not set yet","settings.simple.account.yourName":"Your name","phoneUpdate.title":"Update Limix Bot on your phone","phoneUpdate.body":"{phone} has an older version of the Limix Bot app, which can no longer connect to this computer away from your Wi-Fi. Update the app on that phone, then open it once on the same Wi-Fi as this computer. If that doesn't reconnect it, pair it again.","phoneUpdate.bodyMany":"{count} of your phones have an older version of the Limix Bot app, which can no longer connect to this computer away from your Wi-Fi. Update the app on each phone, then open it once on the same Wi-Fi as this computer. If that doesn't reconnect it, pair it again.","phoneUpdate.open":"Open Phone & devices","remote.devices.pairAgain":"Pair again"},Yv={de:()=>et(()=>import("./de-B1J17cai.js"),[]),es:()=>et(()=>import("./es-CS_V7OdX.js"),[]),fr:()=>et(()=>import("./fr-Dn65EJNi.js"),[]),hi:()=>et(()=>import("./hi-CHU0sl7u.js"),[]),ja:()=>et(()=>import("./ja-CJbW-M3a.js"),[]),"pt-br":()=>et(()=>import("./pt-br-BtcqPDCE.js"),[]),zh:()=>et(()=>import("./zh-BwjuB8Xo.js"),[]),"zh-tw":()=>et(()=>import("./zh-tw-CWDGum-b.js"),[]),uk:()=>et(()=>import("./uk-B_Q6nXm0.js"),[]),vi:()=>et(()=>import("./vi-NX09tr5q.js"),[]),tr:()=>et(()=>import("./tr-3Jw0E4fc.js"),[]),pl:()=>et(()=>import("./pl-tZIDksyW.js"),[]),ru:()=>et(()=>import("./ru-Bfcy52OT.js"),[]),it:()=>et(()=>import("./it-CbDr93sA.js"),[]),ko:()=>et(()=>import("./ko-ZQvzPil_.js"),[])},ci={en:"en",de:"de",es:"es",fr:"fr",hi:"hi",ja:"ja",pt:"pt-br","pt-br":"pt-br",zh:"zh","zh-hant":"zh-tw","zh-hk":"zh-tw","zh-mo":"zh-tw","zh-tw":"zh-tw",uk:"uk",vi:"vi",tr:"tr",pl:"pl",ru:"ru",it:"it",ko:"ko"},ia={en:Yo};async function Wv(a){const r=ci[a];if(ia[a]||!r||r==="en")return ia[a];const d=(await Yv[r]()).default;for(const[c,h]of Object.entries(ci))h===r&&(ia[c]??=d);return d}const Fv=[{code:"en",label:"English"},{code:"de",label:"Deutsch"},{code:"es",label:"Español"},{code:"fr",label:"Français"},{code:"hi",label:"हिन्दी"},{code:"ja",label:"日本語"},{code:"pt-br",label:"Português (Brasil)"},{code:"zh",label:"简体中文"},{code:"zh-tw",label:"繁體中文(台灣)"},{code:"uk",label:"Українська"},{code:"vi",label:"Tiếng Việt"},{code:"tr",label:"Türkçe"},{code:"pl",label:"Polski"},{code:"ru",label:"Русский"},{code:"it",label:"Italiano"},{code:"ko",label:"한국어"}];function dm(a,r){if(!a)return"en";let d=a.toLowerCase();for(;d;){if(r.has(d))return d;const c=d.lastIndexOf("-");if(c<0)break;d=d.slice(0,c)}return"en"}const jv=new Set(["ar","fa","he","ur"]);function Vv(){return new Set([...Object.keys(ci),...Object.keys(ia)])}async function Km(a){const r=++um;return await Wv(dm(a,Vv())).catch(()=>{}),r===um?Kv(dm(a,new Set(Object.keys(ia)))):Qs}function Kv(a){di=ia[a]??Yo,Qs=a;const r=typeof document>"u"?void 0:document?.documentElement;return r&&(r.lang=Qm(a),r.dir=jv.has(r.lang.split("-")[0])?"rtl":"ltr"),a}function Qm(a){const r=ci[a];return(r&&Fv.find(c=>ci[c.code]===r)?.code||a).split("-").map((c,h)=>h===0?c.toLowerCase():c.length===2?c.toUpperCase():c.length===4?c[0].toUpperCase()+c.slice(1).toLowerCase():c.toLowerCase()).join("-")}function ho(){return Qs}function Xm(a=globalThis.navigator?.language){const r=Qm(Qs);if(r.includes("-")||!a)return r;let d;try{d=Intl.getCanonicalLocales(a)[0]}catch{return r}return d?.toLowerCase().split("-")[0]===r?d:r}let Qs="en",di=Yo,um=0;function Zm(a,r,d){return!a||!Object.hasOwn(Yo,a)||[...(di[a]??Yo[a]).matchAll(/\{(\w+)\}/g)].some(([,w])=>!d||!Object.hasOwn(d,w))?r:T(a,d)}function hS(){return di!==Yo&&Object.keys(Yo).every(a=>Object.hasOwn(di,a))}function T(a,r){const d=di[a]??Yo[a];return!r&&!d.includes("{app}")?d:d.replace(/\{(\w+)\}/g,(c,h)=>r&&h in r?String(r[h]):h==="app"?jm():c)}const Oc=new Map,mS=()=>ho()==="en"?"en-US":Xm();function Qv(a,r=!1){if(ho()==="en")return r?{hour:"numeric"}:{hour:"numeric",minute:"2-digit"};if(!Oc.has(a)){const d=new Intl.DateTimeFormat(a,{hour:"numeric"}).resolvedOptions().hourCycle;Oc.set(a,d==="h23"||d==="h24")}return Oc.get(a)?{hour:"2-digit",minute:"2-digit"}:r?{hour:"numeric"}:{hour:"numeric",minute:"2-digit"}}let xc;function Xv(a){const r=new Date(a);if(Number.isNaN(r.getTime()))return T("time.invalid");const d=Xm();return xc?.locale!==d&&(xc={locale:d,clock:new Intl.DateTimeFormat(d,Qv(d))}),xc.clock.format(r)}function Zv(a){if(!a||typeof a!="object"||Array.isArray(a))return;const r=Object.entries(a);if(!r.every(([,c])=>typeof c=="string"||typeof c=="number"))return;const d=Object.fromEntries(r);return typeof d.until=="number"&&(d.time=Xv(d.until)),d}function Us(a,r){const{errorKey:d,errorParams:c}=Object(a);return typeof d!="string"||!d.startsWith("serverError.")?r:Zm(d,r,Zv(c))}const Hs="omb-language";let pn,pm=!1;const ai=new Set;function Hc(){try{return globalThis.localStorage}catch{return}}const Xs=()=>globalThis.window?.ogb?.desktopLanguage;function Jm(){try{return Hc()?.getItem(Hs)??null}catch{return null}}function Jv(a){const r=a.choice();if(r!==null||pm)return r;pm=!0;const d=Jm();return d!==null&&a.set(d).catch(()=>{}),d}function $m(){if(pn!==void 0)return pn;const a=Xs();return a?Jv(a):Jm()}function $v(a,r){return a??r??""}function zc(){for(const a of ai)a()}function hm(a){a.key!==Hs&&a.key!==null||a.storageArea&&a.storageArea!==Hc()||(pn=void 0,zc())}function eb(){pn=void 0,zc()}let Mc;function tb(a){return ai.add(a),ai.size===1&&typeof window<"u"&&(window.addEventListener("storage",hm),Mc=Xs()?.onChange(eb)),()=>{ai.delete(a),ai.size===0&&typeof window<"u"&&(window.removeEventListener("storage",hm),Mc?.(),Mc=void 0)}}function gS(a){pn=a;const r=Xs();r&&(r.set(a).catch(()=>{}),r.choice()===a&&(pn=void 0));try{const d=Hc();d?.setItem(Hs,a),!r&&d?.getItem(Hs)===a&&(pn=void 0)}catch{}zc()}function fS(){return je.useSyncExternalStore(tb,$m,()=>null)}function yS(){return Km($v($m(),void 0)||globalThis.navigator?.language)}function vS(a,r=!1){const[,d]=je.useState(0);je.useEffect(()=>{Km(a||globalThis.navigator?.language).then(c=>{r&&Xs()?.shown?.(c),d(h=>h+1)})},[a,r])}const mm=3,gm=2,fm=5,ob=[0,8,2,10,12,4,14,6,3,11,1,9,15,7,13,5].map(a=>(a+.5)/16),nb=[.02,.22,.12],ab=[.05,.55,.26],ib=[.1,.78,.62],sb=[.92,1,.8],rb=[.8,.95,.25],lb=[.55,.36,1],cb=[.25,.1,.45],ti={a:-.087,b:1.157,c:-.262},db=1162;function oi(a,r,d){return[a[0]+(r[0]-a[0])*d,a[1]+(r[1]-a[1])*d,a[2]+(r[2]-a[2])*d]}function Ec(a,r){return[a[0]*r,a[1]*r,a[2]*r]}function ub(a){let r=a;return()=>{r=r+1831565813|0;let d=Math.imul(r^r>>>15,1|r);return d=d+Math.imul(d^d>>>7,61|d)^d,((d^d>>>14)>>>0)/4294967296}}function pb(a,r,d,c){const h=a/d,w=c/db,C=c*(ti.a+ti.b*h+ti.c*h*h),L=c/d*(ti.b+2*ti.c*h),B=(r-C)/Math.sqrt(1+L*L)/w,y=.7+.3*Math.exp(-(((a/w-820)/800)**2)),P=.82+.18*Math.sin(B*.11+Math.sin(a*.004)*3)+.08*Math.sin(B*.37+a*.002);let R;if(B<0){const W=Math.exp(B/250);R=Ec(oi(nb,oi(ab,ib,Math.exp(B/80)),Math.min(1,W*1.5)),W*1.55)}else{const W=Math.exp(-B/130);R=Ec(oi(cb,oi(lb,rb,Math.exp(-B/14)),Math.min(1,Math.exp(-B/40)*1.1+W*.5)),W*1.5)}return Ec(oi(R,sb,Math.exp(-((B/24)**2))*.85),y*P)}function hb(a,r,d){const c=ub(7);a.fillStyle="#080908",a.fillRect(0,0,r,d);for(let w=0,C=0;w<d;w+=mm,C++)for(let L=0,B=0;L<r;L+=mm,B++){let[y,P,R]=pb(L,w,r,d);if(c()<.45){const te=c(),he=.05+.09*c();y+=he*(te<.33?1.4:.6),P+=he*(te>.33&&te<.66?1.3:.7),R+=he*(te>.66?1.2:.7)}const W=ob[(C&3)*4+(B&3)],le=te=>Math.round(Math.floor(Math.min(1,Math.max(0,te))*fm+W)/fm*255),ce=[le(y),le(P),le(R)];ce[0]+ce[1]+ce[2]<6||(a.fillStyle=`rgb(${ce[0]},${ce[1]},${ce[2]})`,a.fillRect(L,w,gm,gm))}a.globalCompositeOperation="lighter",a.filter="blur(36px)",a.globalAlpha=.34,a.drawImage(a.canvas,0,0),a.filter="none",a.globalAlpha=1,a.globalCompositeOperation="source-over";const h=a.createLinearGradient(0,d*.55,0,d);h.addColorStop(0,"rgb(8 9 8 / 0)"),h.addColorStop(1,"rgb(8 9 8 / 0.55)"),a.fillStyle=h,a.fillRect(0,0,r,d)}let ym=!1;function mb(){if(ym||typeof document>"u")return;const a=Math.ceil(Math.max(window.screen?.width??0,window.innerWidth)),r=Math.ceil(Math.max(window.screen?.height??0,window.innerHeight)),d=document.createElement("canvas");d.width=a,d.height=r;const c=d.getContext("2d");!c||!a||!r||(ym=!0,hb(c,a,r),d.toBlob(h=>{if(!h)return;const w=document.documentElement.style;w.setProperty("--aurora-field",`url(${URL.createObjectURL(h)})`),w.setProperty("--aurora-field-size",`${a}px ${r}px`)}))}const gb=["omb-skin","omb-installed","omb-email-gate","omb-drafts","omb-show-threads"];function _c(a){try{return gb.some(r=>a?.getItem(r)!=null)}catch{return!1}}const fb=["midnight","atelier","foundry","lagoon","graphite","linen","dusk","daylight","meadow","pop","halloween","diwali","aurora"],bS=[{id:"midnight",name:"Midnight",tagline:"The original. Cool and dark."},{id:"atelier",name:"Atelier",tagline:"Daylight on paper, warm and quiet."},{id:"foundry",name:"Foundry",tagline:"Night shift. Dark, warm, lit in brass."},{id:"lagoon",name:"Lagoon",tagline:"Cool daylight. Porcelain and deep teal."},{id:"graphite",name:"Graphite",tagline:"Quiet charcoal and softened steel blue."},{id:"linen",name:"Linen",tagline:"Clean daylight with a restrained navy accent."},{id:"dusk",name:"Dusk",tagline:"Muted plum after dark, calm and low-key."},{id:"daylight",name:"Daylight",tagline:"Midnight in reverse. Near-white, ink-black bubbles."},{id:"meadow",name:"Meadow",tagline:"Fresh white with a calm green. The Limix Bot look."},{id:"pop",name:"Pop",tagline:"Cream paper, thick ink outlines, hard shadows. Chunky and cheerful."},{id:"halloween",name:"Halloween",tagline:"Plum after dark, lit in pumpkin orange. Bats optional."},{id:"diwali",name:"Diwali",tagline:"Indigo night, lit in marigold and diya gold. Fireworks optional."},{id:"aurora",name:"Aurora",tagline:"Near-black, crossed by a band of green light. Glass on top."}],vm={light:"daylight",dark:"midnight"},yb="system",bm="midnight",eg="omb-skin",tg="(prefers-color-scheme: dark)";function og(a){return fb.includes(a)}function vb(a){return a==="system"||og(a)}function bb(){try{return typeof matchMedia=="function"&&matchMedia(tg).matches}catch{return!0}}function ng(a,r=bb()){return a!=="system"?a:r?vm.dark:vm.light}function ag(){try{return typeof localStorage>"u"?void 0:localStorage}catch{return}}function wS(){try{const a=ag(),r=a?.getItem(eg);return vb(r)?r:_c(a)?bm:yb}catch{return bm}}let oa=null;const zs=new Set;function kS(a){return zs.add(a),()=>{zs.delete(a)}}function ig(a){document.documentElement.dataset.skin=a,a==="aurora"&&mb();for(const r of zs)r();try{window.ogb?.applySkin?.(a)?.catch(()=>{})}catch{}}function wb(a){if(oa&&!a&&(oa.query.removeEventListener("change",oa.onChange),oa=null),!(!a||oa||typeof matchMedia!="function"))try{const r=matchMedia(tg),d=()=>ig(ng("system",r.matches));r.addEventListener("change",d),oa={query:r,onChange:d}}catch{}}function SS(a){if(og(a)){document.documentElement.dataset.skin=a;for(const r of zs)r()}}function kb(a){try{ag()?.setItem(eg,a)}catch{}wb(a==="system"),ig(ng(a))}function CS(a){kb(a)}const Sb=["standard","wide","full"],Rc="standard",Gc="omb-chat-width";function Cb(a){return Sb.includes(a)}function sg(){try{return typeof localStorage>"u"?void 0:localStorage}catch{return}}function AS(){try{const a=sg()?.getItem(Gc);return Cb(a)?a:Rc}catch{return Rc}}function TS(a){a===Rc?delete document.documentElement.dataset.chatWidth:document.documentElement.dataset.chatWidth=a;try{sg()?.setItem(Gc,a)}catch{}}const Ab=["skin","system","inter","poppins","serif"],Lc="skin",qc="omb-font";function Tb(a){return Ab.includes(a)}function rg(){try{return typeof localStorage>"u"?void 0:localStorage}catch{return}}function OS(){try{const a=rg()?.getItem(qc);return Tb(a)?a:Lc}catch{return Lc}}function xS(a){a===Lc?delete document.documentElement.dataset.font:document.documentElement.dataset.font=a;try{rg()?.setItem(qc,a)}catch{}}const Ob=!1,hn="omb-advanced-mode";let _s;const ii=new Set;function Zs(){try{return globalThis.localStorage}catch{return}}function Yc(){if(_s!==void 0)return _s;try{const a=Zs(),r=a?.getItem(hn);return r==="1"?!0:r==="0"?!1:_c(a)}catch{return!1}}function xb(){try{Zs()?.getItem(hn)==null&&cg(Yc())}catch{}}function lg(){for(const a of ii)a()}function wm(a){a.key!==hn&&a.key!==null||a.storageArea&&a.storageArea!==Zs()||(_s=void 0,lg())}function Mb(a){return ii.add(a),ii.size===1&&typeof window<"u"&&window.addEventListener("storage",wm),()=>{ii.delete(a),ii.size===0&&typeof window<"u"&&window.removeEventListener("storage",wm)}}function cg(a){_s=a;try{Zs()?.setItem(hn,a?"1":"0")}catch{}lg()}function Eb(){return je.useSyncExternalStore(Mb,Yc,()=>!1)}const Js="omb-show-run-card";let Gs;const si=new Set;function Wc(){try{return globalThis.localStorage}catch{return}}function Bb(){if(Gs!==void 0)return Gs;try{return Wc()?.getItem(Js)!=="0"}catch{return!0}}function dg(){for(const a of si)a()}function km(a){a.key!==Js&&a.key!==null||a.storageArea&&a.storageArea!==Wc()||(Gs=void 0,dg())}function Rb(a){return si.add(a),si.size===1&&typeof window<"u"&&window.addEventListener("storage",km),()=>{si.delete(a),si.size===0&&typeof window<"u"&&window.removeEventListener("storage",km)}}function MS(a){Gs=a;try{Wc()?.setItem(Js,a?"1":"0")}catch{}dg()}function ES(){return je.useSyncExternalStore(Rb,Bb,()=>!0)}const $s="omb-show-threads";let qs;const ri=new Set;function Fc(){try{return globalThis.localStorage}catch{return}}function Lb(){if(qs!==void 0)return qs;try{return Fc()?.getItem($s)!=="0"}catch{return!0}}function ug(){for(const a of ri)a()}function Sm(a){a.key!==$s&&a.key!==null||a.storageArea&&a.storageArea!==Fc()||(qs=void 0,ug())}function Nb(a){return ri.add(a),ri.size===1&&typeof window<"u"&&window.addEventListener("storage",Sm),()=>{ri.delete(a),ri.size===0&&typeof window<"u"&&window.removeEventListener("storage",Sm)}}function BS(a){qs=a;try{Fc()?.setItem($s,a?"1":"0")}catch{}ug()}function Ib(){return je.useSyncExternalStore(Nb,Lb,()=>!0)}function RS(){const a=Ib();return Eb()&&a}const pg=6,hg=40;function Db(a,r){const d=a.name.trim();if(!d||d.length>hg)return{ok:!1,error:"name"};let c;try{c=new URL(a.url.trim())}catch{return{ok:!1,error:"url"}}return c.protocol!=="http:"&&c.protocol!=="https:"?{ok:!1,error:"url"}:c.username||c.password||!c.hostname?{ok:!1,error:"url"}:r&&Pb(c.href,r)?{ok:!1,error:"self"}:{ok:!0,name:d,url:c.href}}function Pb(a,r){try{return new URL(a).origin===r}catch{return!1}}function jc(a){if(!a)return[];let r;try{r=JSON.parse(a)}catch{return[]}if(!Array.isArray(r))return[];const d=[],c=new Set;for(const h of r){if(d.length>=pg)break;if(!h||typeof h!="object")continue;const{id:w,name:C,url:L,page:B}=h;if(typeof w!="string"||!w||c.has(w)||typeof C!="string")continue;if(B!==void 0){const P=Hb(B),R=mg(C);if(!P||!R)continue;c.add(w),d.push({id:w,name:R,page:P});continue}if(typeof L!="string")continue;const y=Db({name:C,url:L});y.ok&&(c.add(w),d.push({id:w,name:y.name,url:y.url}))}return d}const Ub=200;function Hb(a){if(!a||typeof a!="object"||Array.isArray(a))return;const{botId:r,threadId:d,messageId:c}=a,h=w=>typeof w=="string"&&w.length>0&&w.length<=Ub;return h(r)&&h(d)&&h(c)?{botId:r,threadId:d,messageId:c}:void 0}function mg(a){return a.replace(/\s+/g," ").trim().slice(0,hg).trim()}function zb(a,r){return a.find(d=>d.page?.threadId===r.threadId&&d.page.messageId===r.messageId)}function LS(a,r,d){const c=zb(a,r);return c?a.filter(h=>h!==c):a.length>=pg?a:[...a,{id:_b(a),name:mg(d)||"Page",page:r}]}function _b(a){let r=a.length+1;const d=new Set(a.map(c=>c.id));for(;d.has(`panel-${r}`);)r++;return`panel-${r}`}const mi="omb-web-panels";let Ys,Cm,Am=[],Nc=!1;const li=new Set,gg=[];function er(){try{return globalThis.localStorage}catch{return}}function fg(){if(Ys!==void 0)return Ys;let a=null;try{a=er()?.getItem(mi)??null}catch{return gg}return a!==Cm&&(Cm=a,Am=jc(a)),Am}function yg(){for(const a of li)a()}function Tm(a){a.key!==mi&&a.key!==null||a.storageArea&&a.storageArea!==er()||(Ys=void 0,yg())}function Gb(a){return li.add(a),li.size===1&&typeof window<"u"&&window.addEventListener("storage",Tm),()=>{li.delete(a),li.size===0&&typeof window<"u"&&window.removeEventListener("storage",Tm)}}function NS(a){const r=JSON.stringify(a);Ys=jc(r);try{er()?.setItem(mi,r),Nc=!1}catch{Nc=!0}yg()}function IS(){if(!Nc)try{const a=er();if(a)return jc(a.getItem(mi))}catch{}return fg()}function DS(){return je.useSyncExternalStore(Gb,fg,()=>gg)}const ui="omb-new-look",qb=[qc,Gc,$s,Js,mi,"openmausbot.sidebarToolsLayout","openmausbot.pinnedCircles","openmausbot.universalPins"],pi="omb-advanced-back",vg=new Set,na=new Set;function Vc(){try{return globalThis.localStorage}catch{return}}function PS(){try{const a=Vc(),r=a?.getItem(ui);if(!Ob){if(a&&r&&a.getItem(hn)==null){const d=r==="due"||r==="seen";d&&a.getItem(pi)==null&&a.setItem(pi,"due"),cg(d)}xb();return}if(!a)return;if(r==null){const d=a.getItem(hn),c=d==="1"||d==null&&_c(a);for(const h of qb)a.removeItem(h);a.setItem(ui,c?"due":"none")}a.removeItem(hn)}catch{}}function bg(a){if(vg.has(a))return!1;try{return Vc()?.getItem(a)==="due"}catch{return!1}}function wg(a){try{Vc()?.setItem(a,"seen")}catch{vg.add(a)}for(const r of na)r()}const Yb=()=>bg(ui),US=()=>wg(ui),Wb=()=>bg(pi),HS=()=>wg(pi);function Om(a){if(!(a.key!==ui&&a.key!==pi&&a.key!==null))for(const r of na)r()}function kg(a){return na.add(a),na.size===1&&typeof window<"u"&&window.addEventListener("storage",Om),()=>{na.delete(a),na.size===0&&typeof window<"u"&&window.removeEventListener("storage",Om)}}function zS(){return je.useSyncExternalStore(kg,Yb,()=>!1)}function _S(){return je.useSyncExternalStore(kg,Wb,()=>!1)}const Fb=a=>a.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),jb=a=>a.replace(/^([A-Z])|[\s-_]+(\w)/g,(r,d,c)=>c?c.toUpperCase():d.toLowerCase()),xm=a=>{const r=jb(a);return r.charAt(0).toUpperCase()+r.slice(1)},Sg=(...a)=>a.filter((r,d,c)=>!!r&&r.trim()!==""&&c.indexOf(r)===d).join(" ").trim(),Vb=a=>{for(const r in a)if(r.startsWith("aria-")||r==="role"||r==="title")return!0};var Kb={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const Qb=je.forwardRef(({color:a="currentColor",size:r=24,strokeWidth:d=2,absoluteStrokeWidth:c,className:h="",children:w,iconNode:C,...L},B)=>je.createElement("svg",{ref:B,...Kb,width:r,height:r,stroke:a,strokeWidth:c?Number(d)*24/Number(r):d,className:Sg("lucide",h),...!w&&!Vb(L)&&{"aria-hidden":"true"},...L},[...C.map(([y,P])=>je.createElement(y,P)),...Array.isArray(w)?w:[w]]));const gn=(a,r)=>{const d=je.forwardRef(({className:c,...h},w)=>je.createElement(Qb,{ref:w,iconNode:r,className:Sg(`lucide-${Fb(xm(a))}`,`lucide-${a}`,c),...h}));return d.displayName=xm(a),d};const Xb=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],Cg=gn("check",Xb);const Zb=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],GS=gn("chevron-down",Zb);const Jb=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],$b=gn("chevron-left",Jb);const ew=[["path",{d:"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z",key:"p7xjir"}]],tw=gn("cloud",ew);const ow=[["path",{d:"M18 5a2 2 0 0 1 2 2v8.526a2 2 0 0 0 .212.897l1.068 2.127a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45l1.068-2.127A2 2 0 0 0 4 15.526V7a2 2 0 0 1 2-2z",key:"1pdavp"}],["path",{d:"M20.054 15.987H3.946",key:"14rxg9"}]],qS=gn("laptop",ow);const nw=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],YS=gn("search",nw);const aw=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],WS=gn("x",aw),FS="Limix Bot",gi="https://github.com/leomieo/limix-bot",iw=`${gi}/tree/main/docs`,jS=iw,VS=`${gi}/blob/main/docs/approval-levels.md`,KS="https://docs.openmausbot.com/docs/troubleshooting/google-sign-in-cloud-browser",QS="https://zalo.me/0977242439",XS=`${gi}/releases`,ZS="https://cloud.openmausbot.com/cloud",JS=`${gi}/blob/main/LICENSE`,$S="https://apps.apple.com/in/app/mausbot/id6803387923",eC=`${gi}/releases/download/android-v1.5.0/OpenMausBot.apk`;function sw(){return"0.3.1"}const rw={darwin:"macOS",win32:"Windows",linux:"Linux"};function tC(a){return(a&&rw[a])??null}async function lw(a){if(window.ogb?.openExternal){await window.ogb.openExternal(a);return}window.open(a,"_blank","noopener,noreferrer")}async function oC(a){if(window.ogb)return lw(a);window.location.href=a}const cw="phc_m2hP39w8y2gLPvHgDvSXAu6xcZ3agjf4ruL56rGcMZEe",Kc="omb-analytics-opt-out",Qc=()=>globalThis.window?.ogb?.desktopAnalytics;let uo,Ps,hi=[],Ic;function tr(){if(Ic!==void 0)return Ic;const a=Qc()?.enabled();if(typeof a=="boolean")return a;try{return localStorage.getItem(Kc)!=="1"}catch{return!0}}function dw(a,r){return a?r?"opt-in":"init":r?"opt-out":"none"}function nC(a){Ic=a,Qc()?.set?.(a).catch(()=>{});try{localStorage.setItem(Kc,a?"0":"1")}catch{}switch(a||(hi=[]),dw(a,uo!==void 0)){case"opt-out":uo?.opt_out_capturing();break;case"opt-in":uo?.opt_in_capturing({captureEventName:!1});break;case"init":pw();break}}function uw(){const a=Qc();if(!(!a?.set||a.enabled()!==null)){try{if(localStorage.getItem(Kc)!=="1")return}catch{return}a.set(!1).catch(()=>{})}}function pw(){return uw(),uo||!tr()?Promise.resolve():(Ps??=et(async()=>{const{default:a}=await import("./module-DCUsy2BQ.js");return{default:a}},[]).then(({default:a})=>hw(a)).catch(()=>{hi=[]}).finally(()=>{Ps=void 0}),Ps)}function hw(a){if(!tr()){hi=[];return}a.init(cw,{api_host:"https://us.i.posthog.com",autocapture:!1,capture_pageview:!1,person_profiles:"identified_only",persistence:"localStorage",disable_surveys:!0,save_referrer:!1,save_campaign_params:!1,disable_capture_url_hashes:!0,before_send:kw,advanced_disable_flags:!0});for(const d of["$initial_person_info","$initial_referrer_info","$initial_campaign_params"])a.unregister(d);a.has_opted_out_capturing()&&a.opt_in_capturing({captureEventName:!1}),uo=a,a.register({app_version:sw(),surface:Sw()});const r=Ag();localStorage.getItem("omb-installed")||(localStorage.setItem("omb-installed",new Date().toISOString()),a.capture("app_first_open",{platform:r})),a.capture("app_opened",{platform:r}),yw();for(const d of hi.splice(0))d(a)}function Ag(){return navigator.userAgent.includes("Electron")?"desktop":"browser"}const Mm="omb-analytics-active-day",mw=10*6e4;function gw(a=new Date){const r=d=>String(d).padStart(2,"0");return`${a.getFullYear()}-${r(a.getMonth()+1)}-${r(a.getDate())}`}let Em;function fw(a){if(Em===a)return!1;try{if(localStorage.getItem(Mm)===a)return!1}catch{}Em=a;try{localStorage.setItem(Mm,a)}catch{}return!0}function Ns(){!uo||!tr()||globalThis.document?.visibilityState!=="visible"||fw(gw())&&uo.capture("app_active",{platform:Ag(),mode:Yc()?"advanced":"simple"})}function yw(){globalThis.document&&(Ns(),document.addEventListener("visibilitychange",Ns),window.addEventListener("focus",Ns),setInterval(()=>{document.hasFocus()&&Ns()},mw))}const vw=new Set(["current_url","url","host","pathname","prev_pageview_pathname","referrer","referring_domain","search_engine","ph_keyword","gad_source","mc_cid","gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"]);function bw(a){const r=a.replace(/^\$/,"").replace(/^(?:initial_|session_entry_)/,"");return r.startsWith("utm_")||vw.has(r)}function ww(a){if(!(!a||typeof a!="object"))for(const r of Object.keys(a))bw(r)&&delete a[r]}function kw(a){if(!a)return a;for(const r of[a.properties,a.$set,a.$set_once,a.properties?.$set,a.properties?.$set_once])ww(r);return a}function Sw(){return globalThis.window?.ogb?.environments?"local":"server"}function Cw(a){tr()&&(uo?a(uo):Ps&&hi.push(a))}function aC(a,r){Cw(d=>d.capture(a,r))}const Tg="omb-email-gate";function iC(){return!!localStorage.getItem(Tg)}function sC(a){localStorage.setItem(Tg,a)}function Og(a){var r,d,c="";if(typeof a=="string"||typeof a=="number")c+=a;else if(typeof a=="object")if(Array.isArray(a)){var h=a.length;for(r=0;r<h;r++)a[r]&&(d=Og(a[r]))&&(c&&(c+=" "),c+=d)}else for(d in a)a[d]&&(c&&(c+=" "),c+=d);return c}function Aw(){for(var a,r,d=0,c="",h=arguments.length;d<h;d++)(a=arguments[d])&&(r=Og(a))&&(c&&(c+=" "),c+=r);return c}const Tw=(a,r)=>{const d=new Array(a.length+r.length);for(let c=0;c<a.length;c++)d[c]=a[c];for(let c=0;c<r.length;c++)d[a.length+c]=r[c];return d},Ow=(a,r)=>({classGroupId:a,validator:r}),xg=(a=new Map,r=null,d)=>({nextPart:a,validators:r,classGroupId:d}),Ws="-",Bm=[],xw="arbitrary..",Mw=a=>{const r=Bw(a),{conflictingClassGroups:d,conflictingClassGroupModifiers:c}=a;return{getClassGroupId:C=>{if(C.startsWith("[")&&C.endsWith("]"))return Ew(C);const L=C.split(Ws),B=L[0]===""&&L.length>1?1:0;return Mg(L,B,r)},getConflictingClassGroupIds:(C,L)=>{if(L){const B=c[C],y=d[C];return B?y?Tw(y,B):B:y||Bm}return d[C]||Bm}}},Mg=(a,r,d)=>{if(a.length-r===0)return d.classGroupId;const h=a[r],w=d.nextPart.get(h);if(w){const y=Mg(a,r+1,w);if(y)return y}const C=d.validators;if(C===null)return;const L=r===0?a.join(Ws):a.slice(r).join(Ws),B=C.length;for(let y=0;y<B;y++){const P=C[y];if(P.validator(L))return P.classGroupId}},Ew=a=>a.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const r=a.slice(1,-1),d=r.indexOf(":"),c=r.slice(0,d);return c?xw+c:void 0})(),Bw=a=>{const{theme:r,classGroups:d}=a;return Rw(d,r)},Rw=(a,r)=>{const d=xg();for(const c in a){const h=a[c];Xc(h,d,c,r)}return d},Xc=(a,r,d,c)=>{const h=a.length;for(let w=0;w<h;w++){const C=a[w];Lw(C,r,d,c)}},Lw=(a,r,d,c)=>{if(typeof a=="string"){Nw(a,r,d);return}if(typeof a=="function"){Iw(a,r,d,c);return}Dw(a,r,d,c)},Nw=(a,r,d)=>{const c=a===""?r:Eg(r,a);c.classGroupId=d},Iw=(a,r,d,c)=>{if(Pw(a)){Xc(a(c),r,d,c);return}r.validators===null&&(r.validators=[]),r.validators.push(Ow(d,a))},Dw=(a,r,d,c)=>{const h=Object.entries(a),w=h.length;for(let C=0;C<w;C++){const[L,B]=h[C];Xc(B,Eg(r,L),d,c)}},Eg=(a,r)=>{let d=a;const c=r.split(Ws),h=c.length;for(let w=0;w<h;w++){const C=c[w];let L=d.nextPart.get(C);L||(L=xg(),d.nextPart.set(C,L)),d=L}return d},Pw=a=>"isThemeGetter"in a&&a.isThemeGetter===!0,Uw=a=>{if(a<1)return{get:()=>{},set:()=>{}};let r=0,d=Object.create(null),c=Object.create(null);const h=(w,C)=>{d[w]=C,r++,r>a&&(r=0,c=d,d=Object.create(null))};return{get(w){let C=d[w];if(C!==void 0)return C;if((C=c[w])!==void 0)return h(w,C),C},set(w,C){w in d?d[w]=C:h(w,C)}}},Dc="!",Rm=":",Hw=[],Lm=(a,r,d,c,h)=>({modifiers:a,hasImportantModifier:r,baseClassName:d,maybePostfixModifierPosition:c,isExternal:h}),zw=a=>{const{prefix:r,experimentalParseClassName:d}=a;let c=h=>{const w=[];let C=0,L=0,B=0,y;const P=h.length;for(let te=0;te<P;te++){const he=h[te];if(C===0&&L===0){if(he===Rm){w.push(h.slice(B,te)),B=te+1;continue}if(he==="/"){y=te;continue}}he==="["?C++:he==="]"?C--:he==="("?L++:he===")"&&L--}const R=w.length===0?h:h.slice(B);let W=R,le=!1;R.endsWith(Dc)?(W=R.slice(0,-1),le=!0):R.startsWith(Dc)&&(W=R.slice(1),le=!0);const ce=y&&y>B?y-B:void 0;return Lm(w,le,W,ce)};if(r){const h=r+Rm,w=c;c=C=>C.startsWith(h)?w(C.slice(h.length)):Lm(Hw,!1,C,void 0,!0)}if(d){const h=c;c=w=>d({className:w,parseClassName:h})}return c},_w=a=>{const r=new Map;return a.orderSensitiveModifiers.forEach((d,c)=>{r.set(d,1e6+c)}),d=>{const c=[];let h=[];for(let w=0;w<d.length;w++){const C=d[w],L=C[0]==="[",B=r.has(C);L||B?(h.length>0&&(h.sort(),c.push(...h),h=[]),c.push(C)):h.push(C)}return h.length>0&&(h.sort(),c.push(...h)),c}},Gw=a=>({cache:Uw(a.cacheSize),parseClassName:zw(a),sortModifiers:_w(a),postfixLookupClassGroupIds:qw(a),...Mw(a)}),qw=a=>{const r=Object.create(null),d=a.postfixLookupClassGroups;if(d)for(let c=0;c<d.length;c++)r[d[c]]=!0;return r},Yw=/\s+/,Ww=(a,r)=>{const{parseClassName:d,getClassGroupId:c,getConflictingClassGroupIds:h,sortModifiers:w,postfixLookupClassGroupIds:C}=r,L=[],B=a.trim().split(Yw);let y="";for(let P=B.length-1;P>=0;P-=1){const R=B[P],{isExternal:W,modifiers:le,hasImportantModifier:ce,baseClassName:te,maybePostfixModifierPosition:he}=d(R);if(W){y=R+(y.length>0?" "+y:y);continue}let Be=!!he,Oe;if(Be){const Q=te.substring(0,he);Oe=c(Q);const U=Oe&&C[Oe]?c(te):void 0;U&&U!==Oe&&(Oe=U,Be=!1)}else Oe=c(te);if(!Oe){if(!Be){y=R+(y.length>0?" "+y:y);continue}if(Oe=c(te),!Oe){y=R+(y.length>0?" "+y:y);continue}Be=!1}const xe=le.length===0?"":le.length===1?le[0]:w(le).join(":"),He=ce?xe+Dc:xe,Ve=He+Oe;if(L.indexOf(Ve)>-1)continue;L.push(Ve);const Re=h(Oe,Be);for(let Q=0;Q<Re.length;++Q){const U=Re[Q];L.push(He+U)}y=R+(y.length>0?" "+y:y)}return y},Fw=(...a)=>{let r=0,d,c,h="";for(;r<a.length;)(d=a[r++])&&(c=Bg(d))&&(h&&(h+=" "),h+=c);return h},Bg=a=>{if(typeof a=="string")return a;let r,d="";for(let c=0;c<a.length;c++)a[c]&&(r=Bg(a[c]))&&(d&&(d+=" "),d+=r);return d},jw=(a,...r)=>{let d,c,h,w;const C=B=>{const y=r.reduce((P,R)=>R(P),a());return d=Gw(y),c=d.cache.get,h=d.cache.set,w=L,L(B)},L=B=>{const y=c(B);if(y)return y;const P=Ww(B,d);return h(B,P),P};return w=C,(...B)=>w(Fw(...B))},Vw=[],Ge=a=>{const r=d=>d[a]||Vw;return r.isThemeGetter=!0,r},Rg=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Lg=/^\((?:(\w[\w-]*):)?(.+)\)$/i,Kw=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,Qw=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Xw=/\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$/,Zw=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,Jw=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,$w=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,qo=a=>Kw.test(a),ee=a=>!!a&&!Number.isNaN(Number(a)),qt=a=>!!a&&Number.isInteger(Number(a)),Bc=a=>a.endsWith("%")&&ee(a.slice(0,-1)),co=a=>Qw.test(a),Ng=()=>!0,ek=a=>Xw.test(a)&&!Zw.test(a),Zc=()=>!1,tk=a=>Jw.test(a),ok=a=>$w.test(a),nk=a=>!H(a)&&!_(a),ak=a=>a.startsWith("@container")&&(a[10]==="/"&&a[11]!==void 0||a[11]==="s"&&a[16]!==void 0&&a.startsWith("-size/",10)||a[11]==="n"&&a[18]!==void 0&&a.startsWith("-normal/",10)),ik=a=>Wo(a,Pg,Zc),H=a=>Rg.test(a),dn=a=>Wo(a,Ug,ek),Nm=a=>Wo(a,hk,ee),sk=a=>Wo(a,zg,Ng),rk=a=>Wo(a,Hg,Zc),Im=a=>Wo(a,Ig,Zc),lk=a=>Wo(a,Dg,ok),Is=a=>Wo(a,_g,tk),_=a=>Lg.test(a),ni=a=>fn(a,Ug),ck=a=>fn(a,Hg),Dm=a=>fn(a,Ig),dk=a=>fn(a,Pg),uk=a=>fn(a,Dg),Ds=a=>fn(a,_g,!0),pk=a=>fn(a,zg,!0),Wo=(a,r,d)=>{const c=Rg.exec(a);return c?c[1]?r(c[1]):d(c[2]):!1},fn=(a,r,d=!1)=>{const c=Lg.exec(a);return c?c[1]?r(c[1]):d:!1},Ig=a=>a==="position"||a==="percentage",Dg=a=>a==="image"||a==="url",Pg=a=>a==="length"||a==="size"||a==="bg-size",Ug=a=>a==="length",hk=a=>a==="number",Hg=a=>a==="family-name",zg=a=>a==="number"||a==="weight",_g=a=>a==="shadow",mk=()=>{const a=Ge("color"),r=Ge("font"),d=Ge("text"),c=Ge("font-weight"),h=Ge("tracking"),w=Ge("leading"),C=Ge("breakpoint"),L=Ge("container"),B=Ge("spacing"),y=Ge("radius"),P=Ge("shadow"),R=Ge("inset-shadow"),W=Ge("text-shadow"),le=Ge("drop-shadow"),ce=Ge("blur"),te=Ge("perspective"),he=Ge("aspect"),Be=Ge("ease"),Oe=Ge("animate"),xe=()=>["auto","avoid","all","avoid-page","page","left","right","column"],He=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],Ve=()=>[...He(),_,H],Re=()=>["auto","hidden","clip","visible","scroll"],Q=()=>["auto","contain","none"],U=()=>[_,H,B],Ae=()=>[qo,"full","auto",...U()],Yt=()=>[qt,"none","subgrid",_,H],ct=()=>["auto",{span:["full",qt,_,H]},qt,_,H],ze=()=>[qt,"auto",_,H],Ut=()=>["auto","min","max","fr",_,H],dt=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],qe=()=>["start","end","center","stretch","center-safe","end-safe"],A=()=>["auto",...U()],N=()=>[qo,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...U()],V=()=>[qo,"screen","full","dvw","lvw","svw","min","max","fit",...U()],de=()=>[qo,"screen","full","lh","dvh","lvh","svh","min","max","fit",...U()],I=()=>[a,_,H],g=()=>[...He(),Dm,Im,{position:[_,H]}],E=()=>["no-repeat",{repeat:["","x","y","space","round"]}],D=()=>["auto","cover","contain",dk,ik,{size:[_,H]}],z=()=>[Bc,ni,dn],Y=()=>["","none","full",y,_,H],j=()=>["",ee,ni,dn],se=()=>["solid","dashed","dotted","double"],Ye=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],$=()=>[ee,Bc,Dm,Im],go=()=>["","none",ce,_,H],Wt=()=>["none",ee,_,H],fo=()=>["none",ee,_,H],yn=()=>[ee,_,H],kt=()=>[qo,"full",...U()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[co],breakpoint:[co],color:[Ng],container:[co],"drop-shadow":[co],ease:["in","out","in-out"],font:[nk],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[co],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[co],shadow:[co],spacing:["px",ee],text:[co],"text-shadow":[co],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",qo,H,_,he]}],container:["container"],"container-type":[{"@container":["","normal","size",_,H]}],"container-named":[ak],columns:[{columns:[ee,H,_,L]}],"break-after":[{"break-after":xe()}],"break-before":[{"break-before":xe()}],"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:Ve()}],overflow:[{overflow:Re()}],"overflow-x":[{"overflow-x":Re()}],"overflow-y":[{"overflow-y":Re()}],overscroll:[{overscroll:Q()}],"overscroll-x":[{"overscroll-x":Q()}],"overscroll-y":[{"overscroll-y":Q()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:Ae()}],"inset-x":[{"inset-x":Ae()}],"inset-y":[{"inset-y":Ae()}],start:[{"inset-s":Ae(),start:Ae()}],end:[{"inset-e":Ae(),end:Ae()}],"inset-bs":[{"inset-bs":Ae()}],"inset-be":[{"inset-be":Ae()}],top:[{top:Ae()}],right:[{right:Ae()}],bottom:[{bottom:Ae()}],left:[{left:Ae()}],visibility:["visible","invisible","collapse"],z:[{z:[qt,"auto",_,H]}],basis:[{basis:[qo,"full","auto",L,...U()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[ee,qo,"auto","initial","none",H]}],grow:[{grow:["",ee,_,H]}],shrink:[{shrink:["",ee,_,H]}],order:[{order:[qt,"first","last","none",_,H]}],"grid-cols":[{"grid-cols":Yt()}],"col-start-end":[{col:ct()}],"col-start":[{"col-start":ze()}],"col-end":[{"col-end":ze()}],"grid-rows":[{"grid-rows":Yt()}],"row-start-end":[{row:ct()}],"row-start":[{"row-start":ze()}],"row-end":[{"row-end":ze()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":Ut()}],"auto-rows":[{"auto-rows":Ut()}],gap:[{gap:U()}],"gap-x":[{"gap-x":U()}],"gap-y":[{"gap-y":U()}],"justify-content":[{justify:[...dt(),"normal"]}],"justify-items":[{"justify-items":[...qe(),"normal"]}],"justify-self":[{"justify-self":["auto",...qe()]}],"align-content":[{content:["normal",...dt()]}],"align-items":[{items:[...qe(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...qe(),{baseline:["","last"]}]}],"place-content":[{"place-content":dt()}],"place-items":[{"place-items":[...qe(),"baseline"]}],"place-self":[{"place-self":["auto",...qe()]}],p:[{p:U()}],px:[{px:U()}],py:[{py:U()}],ps:[{ps:U()}],pe:[{pe:U()}],pbs:[{pbs:U()}],pbe:[{pbe:U()}],pt:[{pt:U()}],pr:[{pr:U()}],pb:[{pb:U()}],pl:[{pl:U()}],m:[{m:A()}],mx:[{mx:A()}],my:[{my:A()}],ms:[{ms:A()}],me:[{me:A()}],mbs:[{mbs:A()}],mbe:[{mbe:A()}],mt:[{mt:A()}],mr:[{mr:A()}],mb:[{mb:A()}],ml:[{ml:A()}],"space-x":[{"space-x":U()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":U()}],"space-y-reverse":["space-y-reverse"],size:[{size:N()}],"inline-size":[{inline:["auto",...V()]}],"min-inline-size":[{"min-inline":["auto",...V()]}],"max-inline-size":[{"max-inline":["none",...V()]}],"block-size":[{block:["auto",...de()]}],"min-block-size":[{"min-block":["auto",...de()]}],"max-block-size":[{"max-block":["none",...de()]}],w:[{w:[L,"screen",...N()]}],"min-w":[{"min-w":[L,"screen","none",...N()]}],"max-w":[{"max-w":[L,"screen","none","prose",{screen:[C]},...N()]}],h:[{h:["screen","lh",...N()]}],"min-h":[{"min-h":["screen","lh","none",...N()]}],"max-h":[{"max-h":["screen","lh",...N()]}],"font-size":[{text:["base",d,ni,dn]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[c,pk,sk]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",Bc,H]}],"font-family":[{font:[ck,rk,r]}],"font-features":[{"font-features":[H]}],"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:[h,_,H]}],"line-clamp":[{"line-clamp":[ee,"none",_,Nm]}],leading:[{leading:[w,...U()]}],"list-image":[{"list-image":["none",_,H]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",_,H]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:I()}],"text-color":[{text:I()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...se(),"wavy"]}],"text-decoration-thickness":[{decoration:[ee,"from-font","auto",_,dn]}],"text-decoration-color":[{decoration:I()}],"underline-offset":[{"underline-offset":[ee,"auto",_,H]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:U()}],"tab-size":[{tab:[qt,_,H]}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",_,H]}],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",_,H]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:g()}],"bg-repeat":[{bg:E()}],"bg-size":[{bg:D()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},qt,_,H],radial:["",_,H],conic:[qt,_,H]},uk,lk]}],"bg-color":[{bg:I()}],"gradient-from-pos":[{from:z()}],"gradient-via-pos":[{via:z()}],"gradient-to-pos":[{to:z()}],"gradient-from":[{from:I()}],"gradient-via":[{via:I()}],"gradient-to":[{to:I()}],rounded:[{rounded:Y()}],"rounded-s":[{"rounded-s":Y()}],"rounded-e":[{"rounded-e":Y()}],"rounded-t":[{"rounded-t":Y()}],"rounded-r":[{"rounded-r":Y()}],"rounded-b":[{"rounded-b":Y()}],"rounded-l":[{"rounded-l":Y()}],"rounded-ss":[{"rounded-ss":Y()}],"rounded-se":[{"rounded-se":Y()}],"rounded-ee":[{"rounded-ee":Y()}],"rounded-es":[{"rounded-es":Y()}],"rounded-tl":[{"rounded-tl":Y()}],"rounded-tr":[{"rounded-tr":Y()}],"rounded-br":[{"rounded-br":Y()}],"rounded-bl":[{"rounded-bl":Y()}],"border-w":[{border:j()}],"border-w-x":[{"border-x":j()}],"border-w-y":[{"border-y":j()}],"border-w-s":[{"border-s":j()}],"border-w-e":[{"border-e":j()}],"border-w-bs":[{"border-bs":j()}],"border-w-be":[{"border-be":j()}],"border-w-t":[{"border-t":j()}],"border-w-r":[{"border-r":j()}],"border-w-b":[{"border-b":j()}],"border-w-l":[{"border-l":j()}],"divide-x":[{"divide-x":j()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":j()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...se(),"hidden","none"]}],"divide-style":[{divide:[...se(),"hidden","none"]}],"border-color":[{border:I()}],"border-color-x":[{"border-x":I()}],"border-color-y":[{"border-y":I()}],"border-color-s":[{"border-s":I()}],"border-color-e":[{"border-e":I()}],"border-color-bs":[{"border-bs":I()}],"border-color-be":[{"border-be":I()}],"border-color-t":[{"border-t":I()}],"border-color-r":[{"border-r":I()}],"border-color-b":[{"border-b":I()}],"border-color-l":[{"border-l":I()}],"divide-color":[{divide:I()}],"outline-style":[{outline:[...se(),"none","hidden"]}],"outline-offset":[{"outline-offset":[ee,_,H]}],"outline-w":[{outline:["",ee,ni,dn]}],"outline-color":[{outline:I()}],shadow:[{shadow:["","none",P,Ds,Is]}],"shadow-color":[{shadow:I()}],"inset-shadow":[{"inset-shadow":["none",R,Ds,Is]}],"inset-shadow-color":[{"inset-shadow":I()}],"ring-w":[{ring:j()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:I()}],"ring-offset-w":[{"ring-offset":[ee,dn]}],"ring-offset-color":[{"ring-offset":I()}],"inset-ring-w":[{"inset-ring":j()}],"inset-ring-color":[{"inset-ring":I()}],"text-shadow":[{"text-shadow":["none",W,Ds,Is]}],"text-shadow-color":[{"text-shadow":I()}],opacity:[{opacity:[ee,_,H]}],"mix-blend":[{"mix-blend":[...Ye(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":Ye()}],"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":[ee]}],"mask-image-linear-from-pos":[{"mask-linear-from":$()}],"mask-image-linear-to-pos":[{"mask-linear-to":$()}],"mask-image-linear-from-color":[{"mask-linear-from":I()}],"mask-image-linear-to-color":[{"mask-linear-to":I()}],"mask-image-t-from-pos":[{"mask-t-from":$()}],"mask-image-t-to-pos":[{"mask-t-to":$()}],"mask-image-t-from-color":[{"mask-t-from":I()}],"mask-image-t-to-color":[{"mask-t-to":I()}],"mask-image-r-from-pos":[{"mask-r-from":$()}],"mask-image-r-to-pos":[{"mask-r-to":$()}],"mask-image-r-from-color":[{"mask-r-from":I()}],"mask-image-r-to-color":[{"mask-r-to":I()}],"mask-image-b-from-pos":[{"mask-b-from":$()}],"mask-image-b-to-pos":[{"mask-b-to":$()}],"mask-image-b-from-color":[{"mask-b-from":I()}],"mask-image-b-to-color":[{"mask-b-to":I()}],"mask-image-l-from-pos":[{"mask-l-from":$()}],"mask-image-l-to-pos":[{"mask-l-to":$()}],"mask-image-l-from-color":[{"mask-l-from":I()}],"mask-image-l-to-color":[{"mask-l-to":I()}],"mask-image-x-from-pos":[{"mask-x-from":$()}],"mask-image-x-to-pos":[{"mask-x-to":$()}],"mask-image-x-from-color":[{"mask-x-from":I()}],"mask-image-x-to-color":[{"mask-x-to":I()}],"mask-image-y-from-pos":[{"mask-y-from":$()}],"mask-image-y-to-pos":[{"mask-y-to":$()}],"mask-image-y-from-color":[{"mask-y-from":I()}],"mask-image-y-to-color":[{"mask-y-to":I()}],"mask-image-radial":[{"mask-radial":[_,H]}],"mask-image-radial-from-pos":[{"mask-radial-from":$()}],"mask-image-radial-to-pos":[{"mask-radial-to":$()}],"mask-image-radial-from-color":[{"mask-radial-from":I()}],"mask-image-radial-to-color":[{"mask-radial-to":I()}],"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":He()}],"mask-image-conic-pos":[{"mask-conic":[ee]}],"mask-image-conic-from-pos":[{"mask-conic-from":$()}],"mask-image-conic-to-pos":[{"mask-conic-to":$()}],"mask-image-conic-from-color":[{"mask-conic-from":I()}],"mask-image-conic-to-color":[{"mask-conic-to":I()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:g()}],"mask-repeat":[{mask:E()}],"mask-size":[{mask:D()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",_,H]}],filter:[{filter:["","none",_,H]}],blur:[{blur:go()}],brightness:[{brightness:[ee,_,H]}],contrast:[{contrast:[ee,_,H]}],"drop-shadow":[{"drop-shadow":["","none",le,Ds,Is]}],"drop-shadow-color":[{"drop-shadow":I()}],grayscale:[{grayscale:["",ee,_,H]}],"hue-rotate":[{"hue-rotate":[ee,_,H]}],invert:[{invert:["",ee,_,H]}],saturate:[{saturate:[ee,_,H]}],sepia:[{sepia:["",ee,_,H]}],"backdrop-filter":[{"backdrop-filter":["","none",_,H]}],"backdrop-blur":[{"backdrop-blur":go()}],"backdrop-brightness":[{"backdrop-brightness":[ee,_,H]}],"backdrop-contrast":[{"backdrop-contrast":[ee,_,H]}],"backdrop-grayscale":[{"backdrop-grayscale":["",ee,_,H]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[ee,_,H]}],"backdrop-invert":[{"backdrop-invert":["",ee,_,H]}],"backdrop-opacity":[{"backdrop-opacity":[ee,_,H]}],"backdrop-saturate":[{"backdrop-saturate":[ee,_,H]}],"backdrop-sepia":[{"backdrop-sepia":["",ee,_,H]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":U()}],"border-spacing-x":[{"border-spacing-x":U()}],"border-spacing-y":[{"border-spacing-y":U()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",_,H]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[ee,"initial",_,H]}],ease:[{ease:["linear","initial",Be,_,H]}],delay:[{delay:[ee,_,H]}],animate:[{animate:["none",Oe,_,H]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[te,_,H]}],"perspective-origin":[{"perspective-origin":Ve()}],rotate:[{rotate:Wt()}],"rotate-x":[{"rotate-x":Wt()}],"rotate-y":[{"rotate-y":Wt()}],"rotate-z":[{"rotate-z":Wt()}],scale:[{scale:fo()}],"scale-x":[{"scale-x":fo()}],"scale-y":[{"scale-y":fo()}],"scale-z":[{"scale-z":fo()}],"scale-3d":["scale-3d"],skew:[{skew:yn()}],"skew-x":[{"skew-x":yn()}],"skew-y":[{"skew-y":yn()}],transform:[{transform:[_,H,"","none","gpu","cpu"]}],"transform-origin":[{origin:Ve()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:kt()}],"translate-x":[{"translate-x":kt()}],"translate-y":[{"translate-y":kt()}],"translate-z":[{"translate-z":kt()}],"translate-none":["translate-none"],zoom:[{zoom:[qt,_,H]}],accent:[{accent:I()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:I()}],"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",_,H]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scrollbar-thumb-color":[{"scrollbar-thumb":I()}],"scrollbar-track-color":[{"scrollbar-track":I()}],"scrollbar-gutter":[{"scrollbar-gutter":["auto","stable","both"]}],"scrollbar-w":[{scrollbar:["auto","thin","none"]}],"scroll-m":[{"scroll-m":U()}],"scroll-mx":[{"scroll-mx":U()}],"scroll-my":[{"scroll-my":U()}],"scroll-ms":[{"scroll-ms":U()}],"scroll-me":[{"scroll-me":U()}],"scroll-mbs":[{"scroll-mbs":U()}],"scroll-mbe":[{"scroll-mbe":U()}],"scroll-mt":[{"scroll-mt":U()}],"scroll-mr":[{"scroll-mr":U()}],"scroll-mb":[{"scroll-mb":U()}],"scroll-ml":[{"scroll-ml":U()}],"scroll-p":[{"scroll-p":U()}],"scroll-px":[{"scroll-px":U()}],"scroll-py":[{"scroll-py":U()}],"scroll-ps":[{"scroll-ps":U()}],"scroll-pe":[{"scroll-pe":U()}],"scroll-pbs":[{"scroll-pbs":U()}],"scroll-pbe":[{"scroll-pbe":U()}],"scroll-pt":[{"scroll-pt":U()}],"scroll-pr":[{"scroll-pr":U()}],"scroll-pb":[{"scroll-pb":U()}],"scroll-pl":[{"scroll-pl":U()}],"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",_,H]}],fill:[{fill:["none",...I()]}],"stroke-w":[{stroke:[ee,ni,dn,Nm]}],stroke:[{stroke:["none",...I()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{"container-named":["container-type"],overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","inset-bs","inset-be","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","pbs","pbe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mbs","mbe","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-bs","border-w-be","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-bs","border-color-be","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-mbs","scroll-mbe","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-pbs","scroll-pbe","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"]},postfixLookupClassGroups:["container-type"],orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},gk=jw(mk);function sa(...a){return gk(Aw(a))}const fk=["blue","teal","purple","orange","red","yellow"],rC="blue",lC=28,cC={blue:"cloudBuy.color.blue",teal:"cloudBuy.color.teal",purple:"cloudBuy.color.purple",orange:"cloudBuy.color.orange",red:"cloudBuy.color.red",yellow:"cloudBuy.color.yellow"};function yk(a){return fk.includes(a)?a:null}function vk(a){const r=yk(a);return r?`var(--identity-${r})`:"var(--color-control)"}function dC(a,r){return a.trim().replace(/\s+/g," ")||r}const Lt=(a,r,d)=>T(a===1?r:d,{count:a}),bk=a=>new Intl.ListFormat(ho(),{type:"conjunction"}).format(a),Pm={"Turn the switch to keep this computer's bots here.":"cloudAccount.keepHere.unclicked","Choose Try again to move.":"cloudSend.move.unclicked","Choose Move to move the bot.":"teamMove.unclicked","Choose which bots move.":"cloudSend.choose.unclicked"};function wk(a){const r=a instanceof Error&&a.message?a.message.replace(/^Error invoking remote method '[^']*':\s*(?:\w*Error:\s*)?/u,""):null;return r!==null&&Object.hasOwn(Pm,r)?T(Pm[r]):r}function uC(a){const r=a.chats;return[...a.bots?[Lt(a.bots,"cloudSend.list.botOne","cloudSend.list.bots")]:[],...a.updatedBots?[Lt(a.updatedBots,"cloudSend.list.changedBotOne","cloudSend.list.changedBots")]:[],...a.skills?[Lt(a.skills,"cloudSend.list.skillOne","cloudSend.list.skills")]:[],...a.logins?[Lt(a.logins,"cloudSend.list.loginOne","cloudSend.list.logins")]:[],...a.secrets?[Lt(a.secrets,"cloudSend.list.secretOne","cloudSend.list.secrets")]:[],...a.onePassword?[T("cloudSend.list.onePassword")]:[],...a.settings?[T("cloudSend.list.settings")]:[],...r?.conversations?[Lt(r.conversations,"cloudSend.list.chatOne","cloudSend.list.chats")]:r?.messages?[Lt(r.messages,"cloudSend.list.messageOne","cloudSend.list.messages")]:[]]}function kk(a){return[...a.bots?[Lt(a.bots,"cloudSend.list.botOne","cloudSend.list.bots")]:[],...a.skills?[Lt(a.skills,"cloudSend.list.skillOne","cloudSend.list.skills")]:[],...a.logins?[Lt(a.logins,"cloudSend.list.loginOne","cloudSend.list.logins")]:[],...a.onePassword?[T("cloudSend.list.onePassword")]:[],...a.chats?[Lt(a.chats,"cloudSend.list.chatOne","cloudSend.list.chats")]:[],...a.routines?[Lt(a.routines,"cloudSend.list.routineOne","cloudSend.list.routines")]:[]]}const Sk=5*6e4;function pC(a){return!a||a.phase==="choose"?0:a.phase==="done"?a.at?a.at+Sk:0:1/0}const Fs=a=>(a??[]).map(r=>`${r.label}: ${r.error}`),Gg=a=>(a??[]).map(r=>r.needs?T("cloudSend.move.stayedNeeds",{name:r.name,program:r.needs}):T("cloudSend.move.stayedHere",{name:r.name})),Um=a=>new Intl.DateTimeFormat(ho(),{timeStyle:"short"}).format(a),Ck=(a,r)=>Math.min(100,Math.floor(a/Math.max(1,r)*100));function qg(a,r){const d="slow"in a?a.slow:void 0;if(d)return r?T("cloudSend.move.slowNamed",{place:r,time:Um(d.until)}):T("cloudSend.move.slow",{time:Um(d.until)});const c="queued"in a?a.queued:void 0;if(c&&!r)return c.name?T("cloudSend.move.queued",{name:c.name}):T("cloudSend.move.queuedAny");const h=a.phase==="finishing"?a.checking:void 0;if(!h)return null;const w=Ck(h.done,h.total);return r?h.step==="chats"&&h.total?T("cloudSend.move.checkingChatsNamed",{place:r,bots:h.bots,percent:w}):T("cloudSend.move.checkingNamed",{place:r}):h.step==="chats"&&h.total?h.bots===1?T("cloudSend.move.checkingChatsOne",{percent:w}):T("cloudSend.move.checkingChats",{bots:h.bots,percent:w}):h.step==="files"&&h.total?T("cloudSend.move.checkingFiles",{percent:w}):h.step==="attachments"&&h.total?T("cloudSend.move.checkingAttachments",{percent:w}):T("cloudSend.move.checking")}function hC(a,r){if(a.phase==="choose")return null;if(a.place)return Ak(a,a.place,r);if(a.phase==="done"){if(r!=="cloud")return null;const C=a.counts?kk(a.counts):[];return{kind:"done",text:a.left?.length||a.stayed?.length?T("cloudSend.move.doneLeft"):C.length?T("cloudSend.move.done",{list:bk(C)}):T("cloudSend.move.doneAll"),extra:[...Fs(a.left),...Gg(a.stayed),...a.held.map(B=>T("cloudSend.result.held",{key:B}))],...a.phone?{phone:!0}:{}}}if(a.phase==="keeping")return{kind:"sending",text:T(a.updating?"cloudSend.move.keepingUpdating":"cloudSend.move.keeping"),extra:[]};if(a.phase==="home-again"||a.phase==="back"){if(r!=="local")return null;if(a.phase==="back"&&a.kept)return{kind:"done",text:T("cloudSend.move.kept"),extra:[]};if(a.phase==="back"&&a.gone)return{kind:"done",text:T("cloudSend.move.backGone"),extra:[]};const C=a.phase==="back"?a.elsewhere:void 0;return C?{kind:"done",extra:[],text:C.since?T("cloudSend.move.elsewhere",{name:C.name,date:new Intl.DateTimeFormat(ho(),{dateStyle:"long"}).format(C.since)}):T("cloudSend.move.elsewhereEmpty",{name:C.name})}:{kind:"done",text:T(a.phase==="home-again"?"cloudSend.move.homeAgain":a.lost?"cloudSend.move.backLost":"cloudSend.move.back"),extra:[]}}if(a.phase==="copy"&&a.updating)return{kind:"sending",text:T("cloudSend.move.updating"),extra:[]};const d="failing"in a?a.failing:void 0;if(d){const C=Fs(d.items);return d.error?{kind:"failed",text:T("cloudSend.move.failing",{error:Us(d,d.error)}),extra:C,retry:!0,reason:Us(d,d.error)}:{kind:"failed",text:T("cloudSend.move.failingPlain"),extra:C,retry:!0}}const c=qg(a);if(c)return{kind:"sending",text:c,extra:[]};if(a.phase==="finishing")return{kind:"sending",text:T("cloudSend.move.finishing"),extra:[]};if(a.phase==="wait"&&a.waitingFor!==void 0)return{kind:"sending",text:a.waitingFor?T("cloudSend.move.waiting",{name:a.waitingFor}):a.waitingWhat==="sign-in"?T("cloudSend.move.waitingSignIn"):T("cloudSend.move.waitingAny"),extra:[]};const h=a.phase==="copy"?a.chats:void 0;return{kind:"sending",text:T(r==="cloud"?h?"cloudSend.move.bringingChats":"cloudSend.move.bringing":h?"cloudSend.move.copyChats":"cloudSend.move.copy",h?{done:h.done,total:h.total}:{}),extra:[]}}function Ak(a,r,d){if(a.phase==="done"&&d==="cloud"&&(a.left?.length||a.stayed?.length))return{kind:"done",text:T("cloudSend.move.doneLeft"),extra:[...Fs(a.left),...Gg(a.stayed)],place:r};if(d!=="local"||!["copy","wait","finishing"].includes(a.phase))return null;const c=(L,B,y={})=>({kind:L,text:B,extra:[],place:r,...y}),h="failing"in a?a.failing:void 0;if(h){const L=Fs(h.items);return h.error?c("failed",T("cloudSend.move.failingNamed",{place:r,error:Us(h,h.error)}),{retry:!0,reason:Us(h,h.error),extra:L}):c("failed",T("cloudSend.move.failingPlainNamed",{place:r}),{retry:!0,extra:L})}if(a.phase==="copy"&&a.updating)return c("sending",T("cloudSend.move.updatingNamed",{place:r}));const w=qg(a,r);if(w)return c("sending",w);if(a.phase==="finishing")return c("sending",T("cloudSend.move.finishingNamed",{place:r}));if(a.phase==="wait"&&a.waitingFor!==void 0)return c("sending",a.waitingFor?T("cloudSend.move.waitingNamed",{place:r,name:a.waitingFor}):T(a.waitingWhat==="sign-in"?"cloudSend.move.waitingSignInNamed":"cloudSend.move.waitingAnyNamed",{place:r}));const C=a.phase==="copy"?a.chats:void 0;return c("sending",C?T("cloudSend.move.copyChatsNamed",{place:r,done:C.done,total:C.total}):T("cloudSend.move.copyNamed",{place:r}))}const mC="my-cloud",gC=200;function fC(a,r){const d=r.trim().toLocaleLowerCase(ho()).split(/\s+/u).filter(Boolean);return d.length?a.filter(c=>{const h=c.name.toLocaleLowerCase(ho());return d.every(w=>h.includes(w))}):a}function yC(a){const r=a.bots??1,d=r>1,c=d?{count:r}:{bot:a.bot.name};return a.phase==="done"?{kind:"done",text:T(d?"cloudSend.botMove.doneMany":"cloudSend.botMove.done",c)}:a.phase==="failed"?{kind:"failed",text:T(d?"cloudSend.botMove.failedMany":"cloudSend.botMove.failed",c)}:{kind:"sending",text:T(d?"cloudSend.botMove.movingMany":"cloudSend.botMove.moving",c)}}function vC(a){const r={bot:a.bot.name,team:a.team.name};return a.phase==="done"?{kind:"done",text:T("teamMove.done",r)}:a.phase==="failed"?{kind:"failed",text:T("teamMove.failed",r)}:{kind:"sending",text:T("teamMove.moving",r)}}const Hm={notInTeam:"teamMove.refused.notInTeam",notABot:"teamMove.refused.notABot",movingElsewhere:"teamMove.refused.movingElsewhere"};function bC(a){const r=Object.fromEntries(Object.entries(Object(a.params)).filter(d=>typeof d[1]=="string"));return Object.hasOwn(Hm,a.code)?Zm(Hm[a.code],a.message,r):a.message}const Yg={places:[],add:{cloud:!1,link:!1,address:!1}};let js=Yg,zm=!1;const Pc=new Set;function mo(){const a=typeof window>"u"||window.ogb?.remoteClient?.active?void 0:window.ogb?.workspaces;return a?.places?a:void 0}function po(){const a=mo();return a?.places?a.places().then(r=>{js=r&&Array.isArray(r.places)?r:Yg;for(const d of Pc)d(js)},()=>{}):Promise.resolve()}function Tk(){zm||(zm=!0,mo()?.onChanged?.(()=>{po()}),window.addEventListener("focus",()=>{po()}),po())}function wC(){const[a,r]=je.useState(js);return je.useEffect(()=>{if(mo())return Pc.add(r),Tk(),r(js),()=>{Pc.delete(r)}},[]),a}async function kC(a,r){const d=await mo()?.recolor?.(a,r).catch(()=>null);return d?(d.outcome==="saved"&&po(),d.outcome):"failed"}async function SC(a){const r=mo()?.remove;if(!r)return"unsupported";const d=await r(a).catch(()=>null);return d?((d.outcome==="removed"||d.outcome==="gone")&&po(),d.outcome):"failed"}async function CC(a){const r=mo()?.makeHome;if(!r)return T("rail.makeHomeFailed");try{return await r(a),po(),!0}catch(d){return wk(d)??T("rail.makeHomeFailed")}}const AC=a=>a.beside===!0||a.places.length>0;function TC(a,r=typeof window>"u"?void 0:window.ogb?.platform){return a.profile?a.named&&a.name?a.name:T(r==="darwin"?"rail.thisMac":"rail.thisPc"):T("rail.thisComputer")}function OC(a){const r=new Set(a.map(c=>c.toLocaleLowerCase())),d=c=>!r.has(c.toLocaleLowerCase());for(const c of[T("rail.localWork"),T("rail.localPersonal")])if(d(c))return c;for(let c=2;;c++){const h=T("rail.localNumbered",{count:c});if(d(h))return h}}async function xC(a,r){const d=await mo()?.local?.create(a,r).catch(()=>null);return d?(d.outcome==="made"&&po(),d.outcome):"failed"}async function MC(a,r){const d=await mo()?.local?.edit(a,r).catch(()=>null);return d?(d.outcome==="saved"&&po(),d.outcome==="saved"||d.outcome==="name"||d.outcome==="taken"?d.outcome:"failed"):"failed"}async function EC(a){const r=await mo()?.local?.remove(a).catch(()=>null);return r?.outcome==="removed"||r?.outcome==="gone"?(po(),"removed"):"failed"}function BC(a){const r=a.trim().split(/\s+/).filter(Boolean),d=c=>c?Array.from(c)[0]??"":"";return(d(r[0])+(r.length>1?d(r[1]):"")).toLocaleUpperCase()}const RC="rounded-2xl border-[0.5px] border-ink/10 bg-app text-ink",LC="flex flex-col gap-5 px-6 pb-6 pt-5",NC="group-has-[[data-night-card]]/sheet:[color-scheme:var(--code-color-scheme)] group-has-[[data-night-card]]/sheet:text-(--cloud-night-ink-quiet) group-has-[[data-night-card]]/sheet:hover:bg-white/15 group-has-[[data-night-card]]/sheet:hover:text-(--cloud-night-ink)",IC="flex size-8 items-center justify-center rounded-full text-ink-secondary transition-colors hover:bg-ink/[0.06] hover:text-ink motion-reduce:transition-none",Ok="ui-button ui-button-primary ui-button-pill",xk="ui-button ui-button-pill",DC=`${Ok} ui-button-lg w-full`,PC=`${xk} ui-button-lg w-full`,UC="flex flex-wrap items-center justify-end gap-2",HC="rounded-sm text-[13px] font-medium text-ink underline decoration-ink/30 underline-offset-[3px] hover:decoration-ink disabled:opacity-50",zC="h-9 w-full rounded-[8px] border border-ink/15 bg-transparent px-3 text-[14px] text-ink outline-none transition-[border-color] duration-150 placeholder:text-ink-tertiary disabled:opacity-60 motion-reduce:transition-none",Wg="inline-flex min-h-5 items-center gap-1 rounded-full bg-ink/[0.06] px-2 text-[12px] font-medium leading-4 text-ink-secondary";function _C({title:a,sub:r}){return ye.jsxs("div",{className:"flex flex-col gap-1 pe-10",children:[ye.jsx("h2",{id:"cloud-add-title",tabIndex:-1,className:"text-[17px] font-medium leading-6 tracking-[-0.008em] text-ink outline-none! [text-wrap:balance]",children:a}),r&&ye.jsx("p",{className:"text-[14px] leading-5 text-ink-secondary [text-wrap:pretty]",children:r})]})}function GC({label:a,onClick:r}){return ye.jsxs("button",{type:"button",onClick:r,className:"-ms-1.5 inline-flex items-center gap-0.5 self-start rounded-full py-1 pe-2.5 ps-1 text-[13px] leading-[18px] text-ink-secondary transition-colors hover:bg-ink/[0.06] hover:text-ink motion-reduce:transition-none",children:[ye.jsx($b,{size:16,strokeWidth:1.5,"aria-hidden":"true",className:"rtl:-scale-x-100"}),a]})}function qC({children:a,className:r,...d}){return ye.jsx("span",{...d,className:sa(Wg,r),children:a})}function Mk({state:a,size:r=20}){return a==="done"?ye.jsx("span",{"aria-hidden":"true",style:{width:r,height:r},className:"grid shrink-0 place-items-center rounded-full bg-ink text-app",children:ye.jsx(Cg,{size:Math.round(r*.6),strokeWidth:2.4})}):ye.jsx("span",{"aria-hidden":"true",style:{width:r,height:r},className:sa("block shrink-0 rounded-full border-[1.5px]",a==="now"?"animate-spin border-ink/15 border-t-ink motion-reduce:animate-none":"border-ink/20")})}function YC({items:a,label:r}){return ye.jsx("ol",{"aria-label":r,className:"flex flex-col gap-0.5",children:a.map(d=>ye.jsxs("li",{"aria-current":d.state==="now"?"step":void 0,className:sa("grid grid-cols-[20px_minmax(0,1fr)] items-start gap-3 rounded-[12px] px-3 py-2.5",d.state==="now"&&"bg-ink/[0.04]"),children:[ye.jsx(Mk,{state:d.state}),ye.jsxs("span",{className:"min-w-0",children:[ye.jsx("span",{className:sa("block text-[14px] leading-5",d.state==="next"?"text-ink-secondary":"text-ink"),children:d.title}),d.detail&&ye.jsx("span",{className:"block break-words text-[13px] leading-[18px] text-ink-secondary",children:d.detail})]})]},d.key))})}function WC({value:a,label:r}){const d=Math.round(Math.max(0,Math.min(1,a))*100);return ye.jsx("div",{role:"progressbar","aria-label":r,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":d,className:"h-1 overflow-hidden rounded-full bg-ink/10",children:ye.jsx("div",{className:"h-full rounded-full bg-ink transition-[width] duration-500 ease-out motion-reduce:transition-none",style:{width:`${d}%`}})})}function FC({color:a,size:r=22}){return ye.jsx("span",{"aria-hidden":"true",style:{width:r,height:r,background:vk(a)},className:"grid shrink-0 place-items-center rounded-[8px] text-white",children:ye.jsx(tw,{size:Math.round(r*.62),strokeWidth:2.2})})}function jC({children:a}){return ye.jsxs("span",{className:sa(Wg,"min-h-6 self-start px-2.5"),children:[ye.jsx(Cg,{size:13,strokeWidth:2.2,"aria-hidden":"true"}),a]})}function VC({className:a}){return ye.jsxs("span",{"data-cloud-staging":!0,title:T("cloudBuy.stagingHint"),className:sa("inline-flex items-center rounded-full border border-warning/50 bg-warning/10 px-2 py-0.5 text-[11px] font-semibold uppercase tracking-[0.06em] text-warning",a),children:[T("cloudBuy.staging"),ye.jsxs("span",{className:"sr-only",children:[": ",T("cloudBuy.stagingHint")]})]})}const Ek=Object.freeze(["team","business"]);function Fg(a){return a?.status==="connected"&&!a.machine&&a.entitlement?.plan==="pro"&&Ek.includes(a.entitlement.tier??"")}function Bk(a){if(!Fg(a))return null;const r=Array.isArray(a.teams)?a.teams:[];return r.find(d=>d?.role==="owner")??r[0]??null}const Rk=!1,KC=!1,Vs={starter:"Starter",personal:"Personal",pro:"Pro",max:"Max"},_m=["starter","personal","pro","max"];function Lk(a,r){const d=_m.indexOf(r);return a!==void 0&&d>=0&&_m.indexOf(a)>d}function un(a){return a===void 0?"Pro":Object.hasOwn(Vs,a)?Vs[a]:"Cloud"}function Nk(a){if(!a||a.status==="signed-out"&&a.message==="restoring")return{kind:"unknown"};const r=a.lastPlan?un(a.lastPlan.tier):null;if(a.status==="signed-out")return a.message==="restore-removed"?{kind:"removed"}:{kind:"signed-out"};if(a.status==="connecting")return{kind:"connecting"};if(a.status==="reauth-required")return{kind:"reauth",label:r,reason:a.message==="expired"?"expired":"access-ended"};if(a.status!=="connected")return{kind:"unverified",label:r};const d=a.entitlement;return d?.plan==="pro"&&d.status==="active"?{kind:"paid",label:un(d.tier),checking:a.checking===!0,...jg(a.trial)?{trial:!0}:{}}:a.purchase?{kind:"purchase",label:a.purchase.tier?un(a.purchase.tier):null,...a.purchase.paidAt?{paidAt:a.purchase.paidAt}:{}}:d?.plan==="pro"?{kind:"attention",label:un(d.tier)}:a.machine?{kind:"attention",label:null}:a.landing?{kind:"free",invited:!0}:{kind:"free"}}function QC(a){return Rk}function XC(a){return null}function ZC(a){switch(a.kind){case"paid":return T(a.trial?"cloudAccount.trialPlan":"cloudAccount.pro",{plan:a.label});case"attention":return T("cloudAccount.inactive",{plan:a.label??"Limix Bot Cloud"});case"purchase":return T("cloudAccount.purchaseReceived",{plan:a.label??"Limix Bot Cloud"});case"unverified":return a.label?T("cloudAccount.lastPlan",{plan:a.label}):null;case"reauth":return a.label?T("cloudAccount.planName",{plan:a.label}):null;case"free":return T("cloudAccount.free");default:return null}}function jg(a){return a?.state==="active"||a?.state==="ending"||a?.state==="processing"}const aa=a=>new Intl.DateTimeFormat(ho(),{day:"numeric",month:"short"}).format(new Date(a));function Pt(a){const r=Math.round(a*100);return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:r%100?2:0}).format(r/100)}function Ik(a,r){const d=a.switchTo??(a.personalAmount?{tier:"personal",amount:a.personalAmount}:null),c=a.tier?un(a.tier):T("cloudTrial.yourPlan"),h=aa(a.endsAt),w=a.deleteAt?aa(a.deleteAt):null,C={kind:"subscribe",label:T("cloudTrial.subscribe")};switch(a.state){case"active":return{state:"active",title:T("cloudTrial.endsOn",{date:h}),body:a.amount===null?T("cloudTrial.activeNoPrice",{plan:c,date:aa(a.chargeAt??a.endsAt)}):T("cloudTrial.active",{plan:c,price:Pt(a.amount/100),date:aa(a.chargeAt??a.endsAt)}),...r?.state==="active"?{credit:T("cloudTrial.credit",{granted:Pt(r.grantedUsd),left:Pt(r.remainingUsd)})}:{},...d&&Lk(a.tier,d.tier)?{switchPlan:T("cloudTrial.preferPlan",{plan:un(d.tier),price:Pt(d.amount/100),date:h})}:{},action:{kind:"manage",label:T("cloudTrial.manage")}};case"ending":return a.keep==="portal"?{state:"ending",title:T("cloudTrial.endsOn",{date:h}),body:w?T("cloudTrial.ending",{date:w}):T("cloudTrial.endingNoDate"),action:C}:{state:"ending",title:T("cloudTrial.endsOn",{date:h}),body:w?T("cloudTrial.cancelled",{date:w}):T("cloudTrial.cancelledNoDate"),action:null};case"processing":return{state:"processing",title:T("cloudTrial.processingTitle"),body:T("cloudTrial.processing"),action:null};case"late":return{state:"late",title:T("cloudTrial.lateTitle"),body:w?T("cloudTrial.late",{date:w}):T("cloudTrial.lateNoDate"),action:{kind:"status",label:T("cloudTrial.checkPayment")}};case"ended":return{state:"ended",title:T("cloudTrial.endedTitle"),body:w?T("cloudTrial.ended",{date:w}):T("cloudTrial.endedNoDate"),action:C}}}function JC(a){return!a?.notice||!a.trial||a.trial.state!==a.notice?null:Ik(a.trial,a.credit)}function $C(a){return a.state==="used_up"?T("cloudCredit.usedUp",{granted:Pt(a.grantedUsd)}):T("cloudCredit.left",{left:Pt(a.remainingUsd),granted:Pt(a.grantedUsd)})}function eA(a,r){return a.kind==="reauth"&&r?.lastPlan?.active===!0?"sign-in-again":a.kind==="removed"?"removed":null}function Dk(a){return Object.hasOwn(Vs,a.tier)?Vs[a.tier]:a.label??un(a.tier)}function Pk(a,r){return a.plans.find(d=>d.tier===r)??a.plans.find(d=>d.tier===a.recommended)??a.plans[0]}function Uk(a){return a?Pk(a).trialDays??a.plans.find(r=>r.trialDays)?.trialDays??null:null}function Hk(a){return a?.refundDays?T("cloudAdd.moneyBack",{days:a.refundDays}):null}function tA(a){return a.refundDays?T("cloudBuy.moneyBack",{days:a.refundDays}):null}const Gm={starter:"cloudBuy.promise.starter",pro:"cloudBuy.promise.pro",max:"cloudBuy.promise.max"},Ks=a=>new Intl.NumberFormat(ho(),{maximumFractionDigits:1}).format(a),qm=a=>Ks(Math.round(a/102.4)/10);function zk(a){const r=Math.max(1,Math.round(a/1e3));if(r<60)return T("cloudBuy.plan.voiceMinutes",{minutes:Ks(r)});const d=Math.round(r/6)/10;return d===1?T("cloudBuy.plan.voiceHour"):T("cloudBuy.plan.voiceHours",{hours:Ks(d)})}function _k(a){const r=a.cpuKind==="shared"?T("cloudBuy.plan.cpusShared",{count:a.cpus}):T("cloudBuy.plan.cpus",{count:a.cpus});return[{key:"power",text:a.sleeps?T("cloudBuy.sleeps"):T("cloudBuy.row.alwaysOn")},{key:"desktops",text:T("cloudBuy.row.desktops"),note:T("cloudBuy.plan.limit",{count:a.computers})},{key:"hours",text:T("cloudAdd.hours",{hours:Ks(a.computerHours)})},{key:"machine",text:T("cloudBuy.row.machine",{cpus:r,memory:qm(a.memoryMb)}),...a.swapMb?{note:T("cloudBuy.row.swap",{swap:qm(a.swapMb)})}:{}},{key:"storage",text:a.maxDiskGb>a.diskGb?T("cloudBuy.row.storageGrows",{gb:a.diskGb,max:a.maxDiskGb}):T("cloudBuy.row.storage",{gb:a.diskGb})},{key:"voice",text:zk(a.voiceCharacters)},...a.snapshotDays?[{key:"backups",text:T("cloudBuy.row.backups",{days:a.snapshotDays})}]:[]]}function Gk(a,r){return a===1?T("cloudBuy.card.trial.one",{price:r}):T("cloudBuy.card.trial.many",{days:a,price:r})}function qk(a,r,d){const c=Dk(a),h=Pt(a.amount/100),w=a.tier===d;return{tier:a.tier,name:c,price:h,popular:a.tier===r,current:w,promise:Object.hasOwn(Gm,a.tier)?T(Gm[a.tier]):a.allowances?.seats?T("cloudBuy.promise.team",{seats:a.allowances.seats}):null,action:w?null:a.trialDays?T("cloudIntro.start"):T("cloudBuy.card.get",{plan:c}),terms:w?null:a.trialDays?Gk(a.trialDays,h):T("cloudBuy.card.paid",{price:h}),rows:a.allowances?_k(a.allowances):[]}}function oA(a,{current:r=null,own:d=null}={}){const c=[...a.plans];if(r&&d?.tier===r&&!c.some(h=>h.tier===r)){const h=c.findIndex(w=>w.amount>d.amount);c.splice(h===-1?c.length:h,0,d)}return c.map(h=>qk(h,a.recommended,r))}const Yk=new Set(["hours","storage","voice"]);function nA(a){const r=new Set(a.flatMap(c=>c.rows.filter(h=>h.key==="power").map(h=>h.text))),d=c=>Yk.has(c.key)||c.key==="power"&&r.size>1;return a.map(c=>({shown:c.rows.filter(d),details:c.rows.filter(h=>!d(h))}))}const Ym=864e5;function Wk(a){const r=a.plans[0]?.trialDays;return r&&a.plans.every(d=>d.trialDays===r)?r:null}function aA(a,r){const d=Wk(a);if(!d)return[];const c=r+d*Ym,h={when:T("cloudAdd.today"),text:a.creditUsd?T("cloudBuy.timeline.startCredit",{credit:Pt(a.creditUsd)}):T("cloudBuy.timeline.start")},w=a.reminderDays&&a.reminderDays<d?[{when:aa(c-a.reminderDays*Ym),text:T("cloudBuy.timeline.reminder")}]:[];return[h,...w,{when:aa(c),text:T("cloudBuy.timeline.firstPayment")}]}function iA(a,r,d){const c=a?.plans.find(w=>w.tier===d),h=r?.plans.find(w=>w.tier===d);return!!(c&&h&&c.amount===h.amount&&(c.trialDays??0)===(h.trialDays??0))}function sA(a){return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:2}).format(a/100)}function rA(a){const r=Uk(a);if(!a||!r)return null;const d=Math.min(...a.plans.filter(c=>c.trialDays).map(c=>c.amount));return{badge:r===1?T("cloudIntro.badge.one"):T("cloudIntro.badge.many",{days:r}),points:[T("cloudIntro.routines"),T("cloudIntro.phone"),a.creditUsd?T("cloudIntro.credit",{credit:Pt(a.creditUsd)}):T("cloudIntro.included")],price:T("cloudIntro.price",{price:Pt(d/100)}),moneyBack:Hk(a)}}const Fk=30*6e4;function lA(a,r){const d=a.tier??a.trial?.tier;return a.sleeps===!0||!!(d&&r?.plans.find(c=>c.tier===d)?.allowances?.sleeps)}function jk(a){const r=a?.machine??null;return!a||!r||r.status==="provisioning"?{kind:"team-starting",team:a?.name??null,step:r?.setup?.step??null,slow:r?.setup?.slow===!0}:r.status==="ready"?{kind:"team-ready",team:{id:a.id,name:a.name}}:{kind:"settings"}}function cA(a,r,{now:d,error:c=null,choosing:h=!1,conflict:w=!1,signIn:C=null,arrived:L=!1,terms:B=!1}){const y=Nk(a),P=()=>({tier:a?.entitlement?.tier??a?.purchase?.tier??null,trial:a?.trial&&jg(a.trial)?a.trial:null,credit:a?.credit?.state==="active"?a.credit:null,...a?.machine?.power?.sleeps?{sleeps:!0}:{}});if(C&&!c&&(y.kind==="signed-out"||y.kind==="removed"))return{kind:"sign-in",phase:C};switch(y.kind){case"unknown":return{kind:"checking"};case"connecting":return{kind:"signing-in",code:a?.enrollment?.userCode??null,checkout:!!a?.checkout};case"purchase":return{kind:"starting",...P(),step:null,slow:!1,received:!0};case"paid":{if(Fg(a))return jk(Bk(a));const R=a?.machine;return!R||R.status==="provisioning"?{kind:"starting",...P(),step:R?.setup?.step??null,slow:R?.setup?.slow===!0,received:!1}:R.status!=="ready"?{kind:"settings"}:a?.checkout&&!a.checkout.done||L?{kind:"ready",...P()}:{kind:"has-cloud"}}case"signed-out":case"free":{if(c)return{kind:"error",reason:c};if(r===void 0)return{kind:"checking"};if(r===null)return{kind:"unreachable"};const R=a?.checkout??null;if(C&&!R&&(y.kind==="signed-out"||C.step==="done"))return{kind:"sign-in",phase:C};const W=r.checkout&&r.checkout.openUntil>d?r.checkout:null;if(y.kind==="free"&&!h&&(R||W)){const ce=R?d-R.startedAt>=Fk:!1;return{kind:"waiting",plan:R?.plan??W.plan,browser:R?.signIn&&!R.link&&!W?"signin":"checkout",late:ce,link:R?.link===!0,email:a?.account?.email??null}}const le=a?.status==="signed-out"&&a.message==="enrollment-expired"?"code-expired":a?.status==="signed-out"&&(a.message==="enrollment-ended"||a.message==="signin-failed")?"signin-ended":w?"preparing":B?"terms":null;return{kind:"offer",offer:r,signedOut:y.kind==="signed-out",notice:le}}default:return{kind:"settings"}}}const Vk=/^fd7a:115c:a1e0:/i,Wm="[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?",Kk=new RegExp(`^(?=.{1,253}$)${Wm}(?:\\.${Wm})*\\.ts\\.net$`),Qk=a=>String(a??"").trim().replace(/^\[|\]$/g,"").replace(/^::ffff:(?=\d)/i,"").replace(/%.*$/,"").toLowerCase();function Xk(a){const r=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(a);if(!r)return null;const d=r.slice(1).map(Number);return d.some(c=>c>255)?null:d}function Zk(a){const r=Qk(a),d=Xk(r);return d?d[0]===100&&d[1]>=64&&d[1]<=127:Vk.test(r)}function Vg(a){return Kk.test(String(a??"").trim().toLowerCase().replace(/\.$/,""))}const Jk=a=>Vg(a)||Zk(a),$k="23456789ABCDEFGHJKLMNPQRSTUVWXYZ",eS=12,tS=/^omb_pair_[A-Za-z0-9_-]{43}$/,Kg=8799,dA=`http://192.168.1.20:${Kg}`,or=a=>String(a??"").trim().toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,"");function Qg(a){const r=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(a);if(!r)return null;const d=r.slice(1).map(Number);return d.some(c=>c>255)?null:d}function Xg(a){const r=or(a),d=Qg(r);return r==="localhost"||r.endsWith(".localhost")||r==="::1"||d!==null&&d[0]===127}function oS(a){const r=or(a);if(!r)return!1;const d=Qg(r);if(d){const[c,h]=d;return c===127||c===10||c===172&&h>=16&&h<=31||c===192&&h===168||c===169&&h===254||c===100&&h>=64&&h<=127}return/^\d+(\.\d+){0,3}$/.test(r)?!1:r.includes(":")?r==="::1"||/^f[cd][0-9a-f]{0,2}:/.test(r)||/^fe[89ab][0-9a-f]?:/.test(r):Xg(r)||[".ts.net",".local",".home.arpa"].some(c=>r.endsWith(c))?!0:!r.includes(".")&&/^[a-z0-9-]+$/.test(r)}function uA(a){const r=new URL(a);return Vg(or(r.hostname))?"tailscale":r.protocol==="https:"?"https":Xg(r.hostname)?"loopback":"private-http"}function Zg(a){return String(a).toUpperCase().replace(/[^A-Z0-9]/g,"").replace(/0/g,"O").replace(/1/g,"I")}function nS(a){return Zg(a).match(/.{1,4}/g)?.join("-")??a}function Fm(a){const r=String(a??"").trim();if(!r)return{kind:"empty"};if(r.startsWith("omb_sess_"))return{kind:"wrong",problem:"scriptKey"};if(r.startsWith("omb_pair_"))return tS.test(r)?{kind:"credential",credential:r}:{kind:"wrong",problem:"notACode"};const d=r.replace(/[\s-]/g,"");if(/^\d{8}$/.test(d))return{kind:"wrong",problem:"emailCode"};if(/^\d{6}$/.test(d))return{kind:"wrong",problem:"oldCode"};const c=Zg(r);return c.length!==eS||[...c].some(h=>!$k.includes(h))?{kind:"wrong",problem:"notACode"}:{kind:"code",code:nS(c)}}function aS(a){try{return decodeURIComponent(a)}catch{return null}}function iS(a){const r=a.searchParams.get("address")??"";return/^https?:\/\//i.test(r)?{address:r,secret:a.searchParams.get("code")??a.searchParams.get("token")}:null}function sS(a){const r=/(?:^|[#&])code=([^&]*)/.exec(a.hash)?.[1];return r!==void 0?aS(r):a.searchParams.get("code")}function pA(a,r=""){let d=String(a??"").trim();if(!d)return{ok:!1,problem:"empty"};const c=Fm(d);if(c.kind==="code")return{ok:!1,problem:"codeOnly",code:c.code};if(c.kind==="wrong"&&c.problem!=="notACode")return{ok:!1,problem:c.problem};if(/[\s\\]/.test(d))return{ok:!1,problem:"notAnAddress"};let h=null;if(/^openmausbot:/i.test(d)){let he;try{he=iS(new URL(d))}catch{he=null}if(!he)return{ok:!1,problem:"phoneLink"};d=he.address,h=he.secret}const w=/^[a-z][a-z0-9+.-]*:\/\//i.test(d);let C;try{C=new URL(w?d:`https://${d}`)}catch{return{ok:!1,problem:"notAnAddress"}}if(C.protocol!=="https:"&&C.protocol!=="http:"||C.username||C.password||!C.hostname)return{ok:!1,problem:"notAnAddress"};if(!["/","","/pair","/pair/"].includes(C.pathname))return{ok:!1,problem:"notAnAddress"};const L=h??sS(C),B=C.hash||C.searchParams.has("code")||h!==null,y=String(r??"").trim();if(!y&&B&&!L?.trim())return{ok:!1,problem:"notACode"};const P=Fm(y||L||"");if(P.kind==="wrong")return{ok:!1,problem:P.problem};const R=oS(C.hostname);if(C.protocol==="http:"&&w&&!R)return{ok:!1,problem:"publicHttp",host:C.host};const W=`https://${C.host}`,le=`http://${C.host}`,ce=!w&&!C.port&&Jk(or(C.hostname))?[`http://${C.host}:${Kg}`]:[];return{ok:!0,candidates:w?[C.origin]:R?[W,le,...ce]:[W],code:P.kind==="code"?P.code:null,credential:P.kind==="credential"?P.credential:null}}class hA extends je.Component{state={error:null};static getDerivedStateFromError(r){return{error:r instanceof Error?r:new Error(String(r))}}render(){return this.state.error?ye.jsx("div",{role:"alert",className:"flex min-h-screen items-center justify-center p-6 text-center",children:ye.jsxs("div",{className:"max-w-md space-y-3",children:[ye.jsx("h1",{className:"text-lg font-semibold",children:T("page.broken.title")}),ye.jsx("p",{className:"text-sm opacity-75",children:T("page.broken.body")}),ye.jsx("p",{className:"break-words text-xs opacity-60",children:this.state.error.message}),ye.jsx("button",{type:"button",className:"rounded-md border px-3 py-1.5 text-sm",onClick:()=>location.reload(),children:T("page.broken.reload")})]})}):this.props.children}}export{fk as $,eC as A,RS as B,$b as C,aC as D,LC as E,FC as F,UC as G,_C as H,$S as I,Ok as J,Dk as K,qS as L,un as M,sA as N,Pt as O,hA as P,xk as Q,lS as R,YS as S,YC as T,HC as U,WC as V,jC as W,WS as X,zC as Y,lC as Z,et as _,sa as a,uA as a$,vk as a0,cC as a1,cA as a2,dC as a3,rC as a4,yk as a5,NC as a6,IC as a7,VC as a8,RC as a9,ia as aA,GC as aB,DC as aC,Rv as aD,Fk as aE,oA as aF,nA as aG,aA as aH,tA as aI,Wk as aJ,qC as aK,PC as aL,BC as aM,po as aN,OC as aO,pA as aP,dA as aQ,TC as aR,xC as aS,MC as aT,kC as aU,EC as aV,CC as aW,SC as aX,tr as aY,nC as aZ,KC as a_,lA as aa,Pk as ab,iA as ac,Xv as ad,GS as ae,rS as af,Av as ag,Eb as ah,cg as ai,Fv as aj,gS as ak,hS as al,Ib as am,BS as an,ES as ao,MS as ap,Us as aq,wC as ar,AC as as,Nk as at,Fg as au,oS as av,TS as aw,AS as ax,KS as ay,XC as az,ho as b,uC as b$,wk as b0,hC as b1,QC as b2,ZC as b3,Bk as b4,Hk as b5,jg as b6,Ik as b7,$C as b8,Qm as b9,mC as bA,vC as bB,bC,pC as bD,XS as bE,tC as bF,FS as bG,gi as bH,iw as bI,JS as bJ,QS as bK,jS as bL,zb as bM,IS as bN,LS as bO,Ek as bP,Gk as bQ,oC as bR,rA as bS,HS as bT,US as bU,JC as bV,zS as bW,_S as bX,eA as bY,ZS as bZ,bk as b_,vm as ba,bS as bb,kS as bc,ng as bd,CS as be,Ab as bf,Sb as bg,DS as bh,pg as bi,NS as bj,hg as bk,Db as bl,_b as bm,sw as bn,Rk as bo,Ob as bp,uS as bq,dS as br,sC as bs,iC as bt,Yc as bu,Qv as bv,VS as bw,gC as bx,fC as by,yC as bz,gn as c,dm as c0,Vv as c1,$m as c2,Pb as c3,pw as c4,Zm as d,Yo as e,Cg as f,tw as g,$v as h,Xm as i,ye as j,fS as k,kb as l,wS as m,mS as n,lw as o,jm as p,xS as q,je as r,PS as s,T as t,vS as u,OS as v,SS as w,pS as x,yS as y,cS as z};
|