limixbot 0.2.3 → 0.2.4
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-SyXMCej4.js → ActivityPanel-Yt1JPJtx.js} +1 -1
- package/dist/assets/{App-X_zk2xl3.js → App-CVCxQPpR.js} +9 -9
- package/dist/assets/{AppEventEditor-B-cNA9KG.js → AppEventEditor-C0O8Bn2f.js} +1 -1
- package/dist/assets/{BotSettingsDialog-CmheslCU.js → BotSettingsDialog-tUYy15lC.js} +1 -1
- package/dist/assets/{BrowserPanel-BHNWYfsE.js → BrowserPanel-C5enR5R1.js} +1 -1
- package/dist/assets/{BrowserProfilesManager-TkQi-a3T.js → BrowserProfilesManager-CSo4X7HO.js} +1 -1
- package/dist/assets/{CloudAddDialog-CqMPQ-0_.js → CloudAddDialog-DsTSypGV.js} +1 -1
- package/dist/assets/{ComputerFilesPane-C2_Khy6Z.js → ComputerFilesPane-DyhJMTEu.js} +1 -1
- package/dist/assets/{ComputerPanel-Zc6gSPqv.js → ComputerPanel-DQydmwiD.js} +2 -2
- package/dist/assets/{DataPanel-BQfys1jK.js → DataPanel-DrjKXaiE.js} +1 -1
- package/dist/assets/{DesktopViewer-CmQvv2Qp.js → DesktopViewer-CYiF8QbG.js} +1 -1
- package/dist/assets/{FilesView-DIvdjTfH.js → FilesView-DHmDJZVD.js} +1 -1
- package/dist/assets/{GrokMoveDialog-ClB9Gmym.js → GrokMoveDialog-BU8ItDTb.js} +1 -1
- package/dist/assets/{InspectorPanel-D86H4VDB.js → InspectorPanel-DgSqJslV.js} +1 -1
- package/dist/assets/{KeyboardShortcutsModal--OBnvszl.js → KeyboardShortcutsModal-D7Y75zbh.js} +1 -1
- package/dist/assets/{LiveDesktop-qaS7h5XB.js → LiveDesktop-DIFFdwoj.js} +1 -1
- package/dist/assets/{LocalVmWorkspace-B-P5zHz6.js → LocalVmWorkspace-cE5VrI75.js} +1 -1
- package/dist/assets/{MacLocalControl-BYNcLKoB.js → MacLocalControl-CR1xsN8C.js} +1 -1
- package/dist/assets/{MarkdownFilePreview-DlUycNRH.js → MarkdownFilePreview-C9-_VWg5.js} +1 -1
- package/dist/assets/{MenuMotion-V6wxTHIu.js → MenuMotion-Dh3Gi4kY.js} +1 -1
- package/dist/assets/{NewBotDialog-oiX-W3q2.js → NewBotDialog-0aO27qTW.js} +1 -1
- package/dist/assets/{PhoneAppDialog-PE1xfgqx.js → PhoneAppDialog-CJeGAXQD.js} +1 -1
- package/dist/assets/{PlacesRail-B9RHHjvB.js → PlacesRail-BI7EZKaw.js} +1 -1
- package/dist/assets/{PluginsPanel-DObrpruo.js → PluginsPanel-CxXhbzxv.js} +1 -1
- package/dist/assets/{ProIntroduction-CC1iFzJ8.js → ProIntroduction-CQDF5fEs.js} +1 -1
- package/dist/assets/{RemoteAgentSettingsPanel-BmTQFEnJ.js → RemoteAgentSettingsPanel-Bmhtewtp.js} +1 -1
- package/dist/assets/{RoomPanel-Dqe-JRuH.js → RoomPanel-8hijlQPG.js} +1 -1
- package/dist/assets/{RoutinesPage-DF0vugaB.js → RoutinesPage-BmR16t7O.js} +1 -1
- package/dist/assets/SettingsModal-BJCVgscC.js +11 -0
- package/dist/assets/{ShareTeamDialog-CAAPet8R.js → ShareTeamDialog-COcdYImw.js} +1 -1
- package/dist/assets/{SignedInSites-DMOzwYFf.js → SignedInSites--xtkgjnC.js} +1 -1
- package/dist/assets/{TeamLibraryPanel-D4zeyxsY.js → TeamLibraryPanel-DOVg7avu.js} +1 -1
- package/dist/assets/{TeamMapPage-DG7S7JTR.js → TeamMapPage-r1iwHXYM.js} +1 -1
- package/dist/assets/{TriggersPage--3O5UVSD.js → TriggersPage-DkPipM4n.js} +1 -1
- package/dist/assets/{VisibilitySection-DQw13aWS.js → VisibilitySection-UlGM_8Ri.js} +1 -1
- package/dist/assets/{WebhookTrigger-D9RAfcql.js → WebhookTrigger-sfrkU37A.js} +1 -1
- package/dist/assets/{WorksOnGrid-CviOksXp.js → WorksOnGrid-Cx__gmQD.js} +1 -1
- package/dist/assets/{abnfDiagram-YUKMZFIV-BLZgYnje.js → abnfDiagram-YUKMZFIV-zKm62LaA.js} +1 -1
- package/dist/assets/{activity-DCHcmn3c.js → activity-CPkAJarW.js} +1 -1
- package/dist/assets/{architectureDiagram-47P4ROYG-D0neESJD.js → architectureDiagram-47P4ROYG-BtuTxvNC.js} +1 -1
- package/dist/assets/{blockDiagram-E7TT5TSB-CrnkLSzZ.js → blockDiagram-E7TT5TSB-BRCjM53y.js} +1 -1
- package/dist/assets/{c4Diagram-CRA5TL53-D0tNc6O-.js → c4Diagram-CRA5TL53-C9p73qnX.js} +1 -1
- package/dist/assets/{calendar-days-C5I0mEXB.js → calendar-days-DdkRWrHv.js} +1 -1
- package/dist/assets/channel-BEZp93ad.js +1 -0
- package/dist/assets/{chunk-2Q5K7J3B-DGtBJhY1.js → chunk-2Q5K7J3B-BVttC6OI.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-D5kTbdEy.js → chunk-5VM5RSS4-BNqqqnGl.js} +1 -1
- package/dist/assets/{chunk-7TKQ45FW-DaN8eX-m.js → chunk-7TKQ45FW-CLkkCMma.js} +1 -1
- package/dist/assets/{chunk-AW2ZBBNX-DMhIBKZU.js → chunk-AW2ZBBNX-ByE3NFnK.js} +1 -1
- package/dist/assets/{chunk-FVRAUYC3-Dos86Pqk.js → chunk-FVRAUYC3-D1NFW9zf.js} +2 -2
- package/dist/assets/{chunk-HTAEGDNF-CsLodVYj.js → chunk-HTAEGDNF-y9-VGZh8.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-6THZlDrB.js → chunk-JWPE2WC7-BOYZL91l.js} +1 -1
- package/dist/assets/{chunk-KQW6MTUR-CoD74fHy.js → chunk-KQW6MTUR-DRtZ-jux.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-DMl-0hJf.js → chunk-XXDRQBXY-DCH3w3v6.js} +1 -1
- package/dist/assets/{classDiagram-v2-K4WV4PDN-BscLWNpw.js → classDiagram-v2-K4WV4PDN-BziSQpNK.js} +1 -1
- package/dist/assets/{coins-CZu-SgM9.js → coins-BvYP8U4w.js} +1 -1
- package/dist/assets/{core-BDlOAqLn.js → core-DgU9fIH7.js} +1 -1
- package/dist/assets/{cose-bilkent-JH36ORCC-BeKB4nW9.js → cose-bilkent-JH36ORCC-BzC7KDhz.js} +1 -1
- package/dist/assets/{cynefin-EF2NZ3EQ-D0aWGmzz.js → cynefin-EF2NZ3EQ-DallfvKE.js} +1 -1
- package/dist/assets/{cynefinDiagram-3GCD6N5R-4SW-h53B.js → cynefinDiagram-3GCD6N5R-BlzPquFR.js} +1 -1
- package/dist/assets/{dagre-W4DXFKR2-DNq2AGoj.js → dagre-W4DXFKR2-XlgF2qP1.js} +1 -1
- package/dist/assets/{diagram-2UJZ2QOL-lSLAkRD3.js → diagram-2UJZ2QOL-D6-7kEyN.js} +1 -1
- package/dist/assets/{diagram-OVF4WLC6-BHf__HqF.js → diagram-OVF4WLC6-BuvgW3fs.js} +1 -1
- package/dist/assets/{diagram-PFPMY2P6-B5YmPbc0.js → diagram-PFPMY2P6-Cxw7BxsQ.js} +1 -1
- package/dist/assets/{diagram-UMYRVEAY-DdOUcYJA.js → diagram-UMYRVEAY-DbaTO7xG.js} +1 -1
- package/dist/assets/{diagram-YEKJPTXX-r41O-hkk.js → diagram-YEKJPTXX-ssS2jDd9.js} +1 -1
- package/dist/assets/{diagram-ZIFT7M5P-DKV_3_Sr.js → diagram-ZIFT7M5P-MSG2hmJt.js} +1 -1
- package/dist/assets/{ebnfDiagram-VR2GEFS7-CD4xgv0O.js → ebnfDiagram-VR2GEFS7-D3iLv4Vh.js} +1 -1
- package/dist/assets/{elk-IJKZMXRS-D0Vwqj3g.js → elk-IJKZMXRS-CN_29WGs.js} +1 -1
- package/dist/assets/{erDiagram-O2IAPWRE-C388tpIL.js → erDiagram-O2IAPWRE-Bcl7Id7T.js} +1 -1
- package/dist/assets/{file-up-DGhlT3MD.js → file-up-CCEcdqcW.js} +1 -1
- package/dist/assets/{flowDiagram-OXPTDLAJ-B1p6s4tu.js → flowDiagram-OXPTDLAJ-n2WLJBHk.js} +1 -1
- package/dist/assets/{ganttDiagram-R7TSEDQI-BzJAoXbd.js → ganttDiagram-R7TSEDQI-BXBxYc2Z.js} +1 -1
- package/dist/assets/{gitGraphDiagram-XJZIOB7I-Bb3SHitI.js → gitGraphDiagram-XJZIOB7I-B3rVvw07.js} +1 -1
- package/dist/assets/{import-name-B7AGian6.js → import-name-QCV3NxTT.js} +1 -1
- package/dist/assets/{index-CmUdQ2of.js → index-DMDRA73w.js} +1 -1
- package/dist/assets/{index-DJPPxxyF.js → index-DeIGTf2I.js} +2 -2
- package/dist/assets/{index-C-EiNxm_.js → index-DxGSNARA.js} +1 -1
- package/dist/assets/{infoDiagram-5W2HQ5XZ-DUF-NVrB.js → infoDiagram-5W2HQ5XZ-BxRrhDe0.js} +1 -1
- package/dist/assets/{ishikawaDiagram-K3B6WC7H-CITswxnS.js → ishikawaDiagram-K3B6WC7H-ZOdsAPxi.js} +1 -1
- package/dist/assets/{journeyDiagram-COXZFDF6-C8xhr3tj.js → journeyDiagram-COXZFDF6-axLKau4X.js} +1 -1
- package/dist/assets/{kanban-definition-P3RFRI5V-C94FCxQq.js → kanban-definition-P3RFRI5V-DTVUrJqt.js} +1 -1
- package/dist/assets/{mcp-servers-Cu4E6BBW.js → mcp-servers-kshb3G8M.js} +1 -1
- package/dist/assets/{mermaid.core-5_WMXhyJ.js → mermaid.core-D8G0v7ax.js} +4 -4
- package/dist/assets/{mindmap-definition-LZFPQGKD-Dgq8HUHz.js → mindmap-definition-LZFPQGKD-eR6Dlm_o.js} +1 -1
- package/dist/assets/{minimize-C8Om8qhk.js → minimize-DsfIgSIh.js} +1 -1
- package/dist/assets/{monitor-DUEBF6Jm.js → monitor-CJJehAYK.js} +1 -1
- package/dist/assets/{new-bot-DKmgM4tN.js → new-bot-BxtfLvSH.js} +1 -1
- package/dist/assets/{org-library-BqY2D4NK.js → org-library-j54w6Ia7.js} +1 -1
- package/dist/assets/{package-format-BZOfdy7w.js → package-format-CMWKE_F6.js} +1 -1
- package/dist/assets/{pegDiagram-BGZESJAR-DM0SAjez.js → pegDiagram-BGZESJAR-BabDseNJ.js} +1 -1
- package/dist/assets/{pieDiagram-CAPJLFHJ-okeIqCL5.js → pieDiagram-CAPJLFHJ-BKvqDvl1.js} +1 -1
- package/dist/assets/{quadrantDiagram-GDMTTRAM-ihMGhHs3.js → quadrantDiagram-GDMTTRAM-B04ZbGZP.js} +1 -1
- package/dist/assets/{rail-JcqaOG9e.js → rail-COJ1VklA.js} +1 -1
- package/dist/assets/{railroadDiagram-SM67HX2B-CkWYP-ib.js → railroadDiagram-SM67HX2B-DcJknZtN.js} +1 -1
- package/dist/assets/{remote-desktop-panel-ij2w_JZy.js → remote-desktop-panel-CqR9sYPm.js} +1 -1
- package/dist/assets/{requirementDiagram-X7JNWC4A-CSZ3nQJ1.js → requirementDiagram-X7JNWC4A-CkeImvIM.js} +1 -1
- package/dist/assets/{sankeyDiagram-UM26HJRW-RL7DTxjH.js → sankeyDiagram-UM26HJRW-DYxARQh9.js} +1 -1
- package/dist/assets/{sequenceDiagram-ZO4K6R2Y-C6MjuYtv.js → sequenceDiagram-ZO4K6R2Y-DWd9rdXx.js} +1 -1
- package/dist/assets/{sizeCapture-INFHLROL-QtHNQM-7.js → sizeCapture-INFHLROL-CjzuzZLP.js} +1 -1
- package/dist/assets/{stateDiagram-v2-TBUQTH76-CwPZ7nQm.js → stateDiagram-v2-TBUQTH76-CLmc94Ln.js} +1 -1
- package/dist/assets/{styles-Bj-lDRZL.js → styles-NM37uvmJ.js} +1 -1
- package/dist/assets/{swimlanes-N4OXWK64-BfcwKeNi.js → swimlanes-N4OXWK64-Dmc-N6gk.js} +1 -1
- package/dist/assets/swimlanesDiagram-K3J5GTZL-DHOLnd-u.js +8 -0
- package/dist/assets/{team-share-BQnZfIPS.js → team-share-CfzFiDJl.js} +1 -1
- package/dist/assets/{timeline-definition-YOQAKGHF-COZpJ85U.js → timeline-definition-YOQAKGHF-B4YfX3Wn.js} +1 -1
- package/dist/assets/{usecaseDiagram-VIAY4XPW-B6vldE5m.js → usecaseDiagram-VIAY4XPW-tkKvR-PW.js} +1 -1
- package/dist/assets/{vennDiagram-BLWOH2XV-Cmgzf72_.js → vennDiagram-BLWOH2XV-CWEUMDKu.js} +1 -1
- package/dist/assets/{wardleyDiagram-YMQ3BMBF-XlosqW3x.js → wardleyDiagram-YMQ3BMBF-DRcqmHpZ.js} +1 -1
- package/dist/assets/{xychartDiagram-TAQBALBS-Byro5SJm.js → xychartDiagram-TAQBALBS-B-YwOKwp.js} +1 -1
- package/dist/index.html +2 -2
- package/dist/rail.html +4 -4
- package/dist-server/package.json +1 -1
- package/package.json +1 -1
- package/dist/assets/SettingsModal--kx8POGb.js +0 -11
- package/dist/assets/channel-uYq3EMr8.js +0 -1
- package/dist/assets/swimlanesDiagram-K3J5GTZL-D3m_eGXn.js +0 -8
|
@@ -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":"Cursor","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":"Star","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-VlbIiohE.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 pS(){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,hS=()=>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 mS(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 gS(){return je.useSyncExternalStore(tb,$m,()=>null)}function fS(){return Km($v($m(),void 0)||globalThis.navigator?.language)}function yS(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"],vS=[{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 bS(){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 wS(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 kS(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 SS(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 CS(){try{const a=sg()?.getItem(Gc);return Cb(a)?a:Rc}catch{return Rc}}function AS(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 TS(){try{const a=rg()?.getItem(qc);return Tb(a)?a:Lc}catch{return Lc}}function OS(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 xS(a){Gs=a;try{Wc()?.setItem(Js,a?"1":"0")}catch{}dg()}function MS(){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 ES(a){qs=a;try{Fc()?.setItem($s,a?"1":"0")}catch{}ug()}function Ib(){return je.useSyncExternalStore(Nb,Lb,()=>!0)}function BS(){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 RS(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 LS(a){const r=JSON.stringify(a);Ys=jc(r);try{er()?.setItem(mi,r),Nc=!1}catch{Nc=!0}yg()}function NS(){if(!Nc)try{const a=er();if(a)return jc(a.getItem(mi))}catch{}return fg()}function IS(){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 DS(){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),PS=()=>wg(ui),Wb=()=>bg(pi),US=()=>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 HS(){return je.useSyncExternalStore(kg,Yb,()=>!1)}function zS(){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"}]],_S=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"}]],GS=gn("laptop",ow);const nw=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],qS=gn("search",nw);const aw=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],YS=gn("x",aw),WS="Limix Bot",gi="https://github.com/leomieo/limix-bot",iw=`${gi}/tree/main/docs`,FS=iw,jS=`${gi}/blob/main/docs/approval-levels.md`,VS="https://docs.openmausbot.com/docs/troubleshooting/google-sign-in-cloud-browser",KS="https://discord.gg/9Wb8MEpXRs",QS=`${gi}/releases`,XS="https://cloud.openmausbot.com/cloud",ZS=`${gi}/blob/main/LICENSE`,JS="https://apps.apple.com/in/app/mausbot/id6803387923",$S=`${gi}/releases/download/android-v1.5.0/OpenMausBot.apk`;function sw(){return"0.2.3"}const rw={darwin:"macOS",win32:"Windows",linux:"Linux"};function eC(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 tC(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 oC(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 nC(a,r){Cw(d=>d.capture(a,r))}const Tg="omb-email-gate";function aC(){return!!localStorage.getItem(Tg)}function iC(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"],sC="blue",rC=28,lC={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 cC(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 dC(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 uC(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 pC(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 hC="my-cloud",mC=200;function gC(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 fC(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 yC(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 vC(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 bC(){const[a,r]=je.useState(js);return je.useEffect(()=>{if(mo())return Pc.add(r),Tk(),r(js),()=>{Pc.delete(r)}},[]),a}async function wC(a,r){const d=await mo()?.recolor?.(a,r).catch(()=>null);return d?(d.outcome==="saved"&&po(),d.outcome):"failed"}async function kC(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 SC(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 CC=a=>a.beside===!0||a.places.length>0;function AC(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 TC(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 OC(a,r){const d=await mo()?.local?.create(a,r).catch(()=>null);return d?(d.outcome==="made"&&po(),d.outcome):"failed"}async function xC(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 MC(a){const r=await mo()?.local?.remove(a).catch(()=>null);return r?.outcome==="removed"||r?.outcome==="gone"?(po(),"removed"):"failed"}function EC(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 BC="rounded-2xl border-[0.5px] border-ink/10 bg-app text-ink",RC="flex flex-col gap-5 px-6 pb-6 pt-5",LC="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)",NC="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",IC=`${Ok} ui-button-lg w-full`,DC=`${xk} ui-button-lg w-full`,PC="flex flex-wrap items-center justify-end gap-2",UC="rounded-sm text-[13px] font-medium text-ink underline decoration-ink/30 underline-offset-[3px] hover:decoration-ink disabled:opacity-50",HC="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 zC({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 _C({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 GC({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 qC({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 YC({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 WC({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 FC({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 jC({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 Vs={starter:"Starter",personal:"Personal",pro:"Pro",max:"Max"},_m=["starter","personal","pro","max"];function Rk(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 Lk(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 VC(a){return a.kind==="signed-out"||a.kind==="free"&&!a.invited}function KC(a){return a?a.kind==="paid"?"connecting":a.kind==="signed-out"||a.kind==="reauth"?"sign-in":a.kind==="free"?"get-pro":null:null}function QC(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 Nk(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&&Rk(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 XC(a){return!a?.notice||!a.trial||a.trial.state!==a.notice?null:Nk(a.trial,a.credit)}function ZC(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 JC(a,r){return a.kind==="reauth"&&r?.lastPlan?.active===!0?"sign-in-again":a.kind==="removed"?"removed":null}function Ik(a){return Object.hasOwn(Vs,a.tier)?Vs[a.tier]:a.label??un(a.tier)}function Dk(a,r){return a.plans.find(d=>d.tier===r)??a.plans.find(d=>d.tier===a.recommended)??a.plans[0]}function Pk(a){return a?Dk(a).trialDays??a.plans.find(r=>r.trialDays)?.trialDays??null:null}function Uk(a){return a?.refundDays?T("cloudAdd.moneyBack",{days:a.refundDays}):null}function $C(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 Hk(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 zk(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:Hk(a.voiceCharacters)},...a.snapshotDays?[{key:"backups",text:T("cloudBuy.row.backups",{days:a.snapshotDays})}]:[]]}function _k(a,r){return a===1?T("cloudBuy.card.trial.one",{price:r}):T("cloudBuy.card.trial.many",{days:a,price:r})}function Gk(a,r,d){const c=Ik(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?_k(a.trialDays,h):T("cloudBuy.card.paid",{price:h}),rows:a.allowances?zk(a.allowances):[]}}function eA(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=>Gk(h,a.recommended,r))}const qk=new Set(["hours","storage","voice"]);function tA(a){const r=new Set(a.flatMap(c=>c.rows.filter(h=>h.key==="power").map(h=>h.text))),d=c=>qk.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 Yk(a){const r=a.plans[0]?.trialDays;return r&&a.plans.every(d=>d.trialDays===r)?r:null}function oA(a,r){const d=Yk(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 nA(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 aA(a){return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:2}).format(a/100)}function iA(a){const r=Pk(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:Uk(a)}}const Wk=30*6e4;function sA(a,r){const d=a.tier??a.trial?.tier;return a.sleeps===!0||!!(d&&r?.plans.find(c=>c.tier===d)?.allowances?.sleeps)}function Fk(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 rA(a,r,{now:d,error:c=null,choosing:h=!1,conflict:w=!1,signIn:C=null,arrived:L=!1,terms:B=!1}){const y=Lk(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 Fk(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>=Wk:!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 jk=/^fd7a:115c:a1e0:/i,Wm="[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?",Vk=new RegExp(`^(?=.{1,253}$)${Wm}(?:\\.${Wm})*\\.ts\\.net$`),Kk=a=>String(a??"").trim().replace(/^\[|\]$/g,"").replace(/^::ffff:(?=\d)/i,"").replace(/%.*$/,"").toLowerCase();function Qk(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 Xk(a){const r=Kk(a),d=Qk(r);return d?d[0]===100&&d[1]>=64&&d[1]<=127:jk.test(r)}function Vg(a){return Vk.test(String(a??"").trim().toLowerCase().replace(/\.$/,""))}const Zk=a=>Vg(a)||Xk(a),Jk="23456789ABCDEFGHJKLMNPQRSTUVWXYZ",$k=12,eS=/^omb_pair_[A-Za-z0-9_-]{43}$/,Kg=8799,lA=`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 tS(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 cA(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 oS(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 eS.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!==$k||[...c].some(h=>!Jk.includes(h))?{kind:"wrong",problem:"notACode"}:{kind:"code",code:oS(c)}}function nS(a){try{return decodeURIComponent(a)}catch{return null}}function aS(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 iS(a){const r=/(?:^|[#&])code=([^&]*)/.exec(a.hash)?.[1];return r!==void 0?nS(r):a.searchParams.get("code")}function dA(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=aS(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??iS(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=tS(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&&Zk(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 uA 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{UC as $,$S as A,bS as B,$b as C,OS as D,TS as E,uS as F,fS as G,lS as H,JS as I,BS as J,nC as K,GS as L,RC as M,WC as N,zC as O,uA as P,PC as Q,rS as R,qS as S,xk as T,Ok as U,Ik as V,un as W,YS as X,aA as Y,qC as Z,et as _,sa as a,kC as a$,YC as a0,FC as a1,HC as a2,rC as a3,fk as a4,vk as a5,lC as a6,rA as a7,cC as a8,sC as a9,AS as aA,CS as aB,VS as aC,KC as aD,ia as aE,_C as aF,IC as aG,Rv as aH,Wk as aI,eA as aJ,tA as aK,oA as aL,$C as aM,Yk as aN,GC as aO,DC as aP,EC as aQ,po as aR,TC as aS,dA as aT,lA as aU,AC as aV,OC as aW,xC as aX,wC as aY,MC as aZ,SC as a_,yk as aa,LC as ab,NC as ac,jC as ad,BC as ae,sA as af,Dk as ag,nA as ah,Xv as ai,_S as aj,sS as ak,Av as al,Eb as am,cg as an,Fv as ao,mS as ap,pS as aq,Ib as ar,ES as as,MS as at,xS as au,Us as av,bC as aw,CC as ax,Fg as ay,tS as az,ho as b,dm as b$,tr as b0,oC as b1,cA as b2,wk as b3,pC as b4,Bk as b5,jg as b6,Nk as b7,ZC as b8,Qm as b9,yC as bA,vC as bB,uC as bC,QS as bD,eC as bE,WS as bF,gi as bG,iw as bH,ZS as bI,KS as bJ,FS as bK,zb as bL,NS as bM,RS as bN,Ek as bO,_k as bP,tC as bQ,iA as bR,US as bS,PS as bT,XC as bU,HS as bV,zS as bW,JC as bX,XS as bY,bk as bZ,dC as b_,vm as ba,vS as bb,wS as bc,ng as bd,SS as be,Ab as bf,Sb as bg,IS as bh,pg as bi,LS as bj,hg as bk,Db as bl,_b as bm,sw as bn,Ob as bo,dS as bp,cS as bq,iC as br,aC as bs,Yc as bt,Qv as bu,jS as bv,mC as bw,gC as bx,fC as by,hC as bz,gn as c,Vv as c0,$m as c1,Pb as c2,pw as c3,Zm as d,Yo as e,Cg as f,tw as g,Lk as h,Xm as i,ye as j,VC as k,Pk as l,Uk as m,hS as n,lw as o,jm as p,QC as q,je as r,yS as s,T as t,Pt as u,$v as v,gS as w,kS as x,DS as y,kb 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-VlbIiohE.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 pS(){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,hS=()=>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 mS(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 gS(){return je.useSyncExternalStore(tb,$m,()=>null)}function fS(){return Km($v($m(),void 0)||globalThis.navigator?.language)}function yS(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"],vS=[{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 bS(){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 wS(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 kS(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 SS(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 CS(){try{const a=sg()?.getItem(Gc);return Cb(a)?a:Rc}catch{return Rc}}function AS(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 TS(){try{const a=rg()?.getItem(qc);return Tb(a)?a:Lc}catch{return Lc}}function OS(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 xS(a){Gs=a;try{Wc()?.setItem(Js,a?"1":"0")}catch{}dg()}function MS(){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 ES(a){qs=a;try{Fc()?.setItem($s,a?"1":"0")}catch{}ug()}function Ib(){return je.useSyncExternalStore(Nb,Lb,()=>!0)}function BS(){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 RS(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 LS(a){const r=JSON.stringify(a);Ys=jc(r);try{er()?.setItem(mi,r),Nc=!1}catch{Nc=!0}yg()}function NS(){if(!Nc)try{const a=er();if(a)return jc(a.getItem(mi))}catch{}return fg()}function IS(){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 DS(){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),PS=()=>wg(ui),Wb=()=>bg(pi),US=()=>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 HS(){return je.useSyncExternalStore(kg,Yb,()=>!1)}function zS(){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"}]],_S=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"}]],GS=gn("laptop",ow);const nw=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],qS=gn("search",nw);const aw=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],YS=gn("x",aw),WS="Limix Bot",gi="https://github.com/leomieo/limix-bot",iw=`${gi}/tree/main/docs`,FS=iw,jS=`${gi}/blob/main/docs/approval-levels.md`,VS="https://docs.openmausbot.com/docs/troubleshooting/google-sign-in-cloud-browser",KS="https://discord.gg/9Wb8MEpXRs",QS=`${gi}/releases`,XS="https://cloud.openmausbot.com/cloud",ZS=`${gi}/blob/main/LICENSE`,JS="https://apps.apple.com/in/app/mausbot/id6803387923",$S=`${gi}/releases/download/android-v1.5.0/OpenMausBot.apk`;function sw(){return"0.2.4"}const rw={darwin:"macOS",win32:"Windows",linux:"Linux"};function eC(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 tC(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 oC(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 nC(a,r){Cw(d=>d.capture(a,r))}const Tg="omb-email-gate";function aC(){return!!localStorage.getItem(Tg)}function iC(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"],sC="blue",rC=28,lC={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 cC(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 dC(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 uC(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 pC(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 hC="my-cloud",mC=200;function gC(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 fC(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 yC(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 vC(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 bC(){const[a,r]=je.useState(js);return je.useEffect(()=>{if(mo())return Pc.add(r),Tk(),r(js),()=>{Pc.delete(r)}},[]),a}async function wC(a,r){const d=await mo()?.recolor?.(a,r).catch(()=>null);return d?(d.outcome==="saved"&&po(),d.outcome):"failed"}async function kC(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 SC(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 CC=a=>a.beside===!0||a.places.length>0;function AC(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 TC(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 OC(a,r){const d=await mo()?.local?.create(a,r).catch(()=>null);return d?(d.outcome==="made"&&po(),d.outcome):"failed"}async function xC(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 MC(a){const r=await mo()?.local?.remove(a).catch(()=>null);return r?.outcome==="removed"||r?.outcome==="gone"?(po(),"removed"):"failed"}function EC(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 BC="rounded-2xl border-[0.5px] border-ink/10 bg-app text-ink",RC="flex flex-col gap-5 px-6 pb-6 pt-5",LC="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)",NC="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",IC=`${Ok} ui-button-lg w-full`,DC=`${xk} ui-button-lg w-full`,PC="flex flex-wrap items-center justify-end gap-2",UC="rounded-sm text-[13px] font-medium text-ink underline decoration-ink/30 underline-offset-[3px] hover:decoration-ink disabled:opacity-50",HC="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 zC({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 _C({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 GC({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 qC({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 YC({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 WC({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 FC({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 jC({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 Vs={starter:"Starter",personal:"Personal",pro:"Pro",max:"Max"},_m=["starter","personal","pro","max"];function Rk(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 Lk(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 VC(a){return a.kind==="signed-out"||a.kind==="free"&&!a.invited}function KC(a){return a?a.kind==="paid"?"connecting":a.kind==="signed-out"||a.kind==="reauth"?"sign-in":a.kind==="free"?"get-pro":null:null}function QC(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 Nk(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&&Rk(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 XC(a){return!a?.notice||!a.trial||a.trial.state!==a.notice?null:Nk(a.trial,a.credit)}function ZC(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 JC(a,r){return a.kind==="reauth"&&r?.lastPlan?.active===!0?"sign-in-again":a.kind==="removed"?"removed":null}function Ik(a){return Object.hasOwn(Vs,a.tier)?Vs[a.tier]:a.label??un(a.tier)}function Dk(a,r){return a.plans.find(d=>d.tier===r)??a.plans.find(d=>d.tier===a.recommended)??a.plans[0]}function Pk(a){return a?Dk(a).trialDays??a.plans.find(r=>r.trialDays)?.trialDays??null:null}function Uk(a){return a?.refundDays?T("cloudAdd.moneyBack",{days:a.refundDays}):null}function $C(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 Hk(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 zk(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:Hk(a.voiceCharacters)},...a.snapshotDays?[{key:"backups",text:T("cloudBuy.row.backups",{days:a.snapshotDays})}]:[]]}function _k(a,r){return a===1?T("cloudBuy.card.trial.one",{price:r}):T("cloudBuy.card.trial.many",{days:a,price:r})}function Gk(a,r,d){const c=Ik(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?_k(a.trialDays,h):T("cloudBuy.card.paid",{price:h}),rows:a.allowances?zk(a.allowances):[]}}function eA(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=>Gk(h,a.recommended,r))}const qk=new Set(["hours","storage","voice"]);function tA(a){const r=new Set(a.flatMap(c=>c.rows.filter(h=>h.key==="power").map(h=>h.text))),d=c=>qk.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 Yk(a){const r=a.plans[0]?.trialDays;return r&&a.plans.every(d=>d.trialDays===r)?r:null}function oA(a,r){const d=Yk(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 nA(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 aA(a){return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:2}).format(a/100)}function iA(a){const r=Pk(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:Uk(a)}}const Wk=30*6e4;function sA(a,r){const d=a.tier??a.trial?.tier;return a.sleeps===!0||!!(d&&r?.plans.find(c=>c.tier===d)?.allowances?.sleeps)}function Fk(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 rA(a,r,{now:d,error:c=null,choosing:h=!1,conflict:w=!1,signIn:C=null,arrived:L=!1,terms:B=!1}){const y=Lk(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 Fk(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>=Wk:!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 jk=/^fd7a:115c:a1e0:/i,Wm="[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?",Vk=new RegExp(`^(?=.{1,253}$)${Wm}(?:\\.${Wm})*\\.ts\\.net$`),Kk=a=>String(a??"").trim().replace(/^\[|\]$/g,"").replace(/^::ffff:(?=\d)/i,"").replace(/%.*$/,"").toLowerCase();function Qk(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 Xk(a){const r=Kk(a),d=Qk(r);return d?d[0]===100&&d[1]>=64&&d[1]<=127:jk.test(r)}function Vg(a){return Vk.test(String(a??"").trim().toLowerCase().replace(/\.$/,""))}const Zk=a=>Vg(a)||Xk(a),Jk="23456789ABCDEFGHJKLMNPQRSTUVWXYZ",$k=12,eS=/^omb_pair_[A-Za-z0-9_-]{43}$/,Kg=8799,lA=`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 tS(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 cA(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 oS(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 eS.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!==$k||[...c].some(h=>!Jk.includes(h))?{kind:"wrong",problem:"notACode"}:{kind:"code",code:oS(c)}}function nS(a){try{return decodeURIComponent(a)}catch{return null}}function aS(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 iS(a){const r=/(?:^|[#&])code=([^&]*)/.exec(a.hash)?.[1];return r!==void 0?nS(r):a.searchParams.get("code")}function dA(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=aS(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??iS(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=tS(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&&Zk(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 uA 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{UC as $,$S as A,bS as B,$b as C,OS as D,TS as E,uS as F,fS as G,lS as H,JS as I,BS as J,nC as K,GS as L,RC as M,WC as N,zC as O,uA as P,PC as Q,rS as R,qS as S,xk as T,Ok as U,Ik as V,un as W,YS as X,aA as Y,qC as Z,et as _,sa as a,kC as a$,YC as a0,FC as a1,HC as a2,rC as a3,fk as a4,vk as a5,lC as a6,rA as a7,cC as a8,sC as a9,AS as aA,CS as aB,VS as aC,KC as aD,ia as aE,_C as aF,IC as aG,Rv as aH,Wk as aI,eA as aJ,tA as aK,oA as aL,$C as aM,Yk as aN,GC as aO,DC as aP,EC as aQ,po as aR,TC as aS,dA as aT,lA as aU,AC as aV,OC as aW,xC as aX,wC as aY,MC as aZ,SC as a_,yk as aa,LC as ab,NC as ac,jC as ad,BC as ae,sA as af,Dk as ag,nA as ah,Xv as ai,_S as aj,sS as ak,Av as al,Eb as am,cg as an,Fv as ao,mS as ap,pS as aq,Ib as ar,ES as as,MS as at,xS as au,Us as av,bC as aw,CC as ax,Fg as ay,tS as az,ho as b,dm as b$,tr as b0,oC as b1,cA as b2,wk as b3,pC as b4,Bk as b5,jg as b6,Nk as b7,ZC as b8,Qm as b9,yC as bA,vC as bB,uC as bC,QS as bD,eC as bE,WS as bF,gi as bG,iw as bH,ZS as bI,KS as bJ,FS as bK,zb as bL,NS as bM,RS as bN,Ek as bO,_k as bP,tC as bQ,iA as bR,US as bS,PS as bT,XC as bU,HS as bV,zS as bW,JC as bX,XS as bY,bk as bZ,dC as b_,vm as ba,vS as bb,wS as bc,ng as bd,SS as be,Ab as bf,Sb as bg,IS as bh,pg as bi,LS as bj,hg as bk,Db as bl,_b as bm,sw as bn,Ob as bo,dS as bp,cS as bq,iC as br,aC as bs,Yc as bt,Qv as bu,jS as bv,mC as bw,gC as bx,fC as by,hC as bz,gn as c,Vv as c0,$m as c1,Pb as c2,pw as c3,Zm as d,Yo as e,Cg as f,tw as g,Lk as h,Xm as i,ye as j,VC as k,Pk as l,Uk as m,hS as n,lw as o,jm as p,QC as q,je as r,yS as s,T as t,Pt as u,$v as v,gS as w,kS as x,DS as y,kb as z};
|