From a8c1be2215d6ad92a08096006e2e2ff9440dfedd Mon Sep 17 00:00:00 2001 From: JeremiahM37 Date: Sun, 4 Oct 2026 13:54:47 -0600 Subject: [PATCH] Phone polish: no overlapping words, calmer cards, one-row chat controls A pass over every phone view at 360-412px for text sitting on other text, text cut through the middle, and furniture that pushed content off the first screen. - The quota chip covered the Sessions title and pushed Routines/Claims off the Tasks header; it is now a slim line of its own under the title. - A card's preview showed the agent's own prompt box, status line and key hints and cut its last line in half. On a phone it drops that chrome (paneSummary) and shows the last three whole lines of real output. - Card titles end in an ellipsis instead of running into the status badge; machine, uptime and wrap chips leave the phone card. - Menus close on a tap outside, on Escape and on navigation, and only one is open at a time; before, More and the Sessions menu stacked on each other and stayed open on the next view. The Sessions menu is a bottom sheet whose button still closes it. - Chat: the view and session controls share one row with short labels, the composer label is for screen readers only, tool rows keep their name and drop the leading `cd &&`. - Selects and short fields no longer clip their text; the Tasks column, project picker and Overview panes use the full width; page titles drop the sentence describing themselves. - Version 2.8.1. --- frontend/src/App.tsx | 35 ++- frontend/src/i18n/en/conversation.ts | 5 + frontend/src/i18n/en/sessions.ts | 1 + frontend/src/i18n/es/conversation.ts | 5 + frontend/src/i18n/es/sessions.ts | 1 + frontend/src/i18n/fr/conversation.ts | 5 + frontend/src/i18n/fr/sessions.ts | 1 + frontend/src/i18n/ja/conversation.ts | 5 + frontend/src/i18n/ja/sessions.ts | 1 + frontend/src/i18n/ko/conversation.ts | 5 + frontend/src/i18n/ko/sessions.ts | 1 + frontend/src/i18n/zh/conversation.ts | 5 + frontend/src/i18n/zh/sessions.ts | 1 + frontend/src/main.tsx | 1 + frontend/src/mobile/polish.css | 207 ++++++++++++++++++ frontend/src/sessions/Conversation.tsx | 77 ++++--- frontend/src/sessions/SessionCard.tsx | 11 +- frontend/src/sessions/Sessions.tsx | 2 +- frontend/src/sessions/paneSummary.test.ts | 33 +++ frontend/src/sessions/paneSummary.ts | 35 +++ .../src/sessions/tool-views/describe.test.ts | 5 + frontend/src/sessions/tool-views/describe.ts | 5 +- internal/version/version.go | 2 +- web/index.html | 8 +- ...iews-Dgscpqc9.js => PaneViews-CCamo9GT.js} | 2 +- ...n-CTHXOnWq.js => RichMarkdown-Dk2rttMD.js} | 2 +- ...ench-LkIyaV8C.js => Workbench-Bp7HqSdK.js} | 6 +- ...Gi.js => abnfDiagram-VCTEODGH-BZ1FZo0h.js} | 2 +- ...{action-b1uLKwAx.js => action-Drt9J-sE.js} | 2 +- .../{app-CaTkRc0c.css => app-77dz3N0G.css} | 2 +- web/static/react/assets/app-DdKdlzbj.js | 58 +++++ web/static/react/assets/app-qRUQIX5z.js | 56 ----- ... architectureDiagram-5GKGNRK7-BFE1JZS9.js} | 2 +- ...a.js => blockDiagram-I7D4REHJ-CN19ahfj.js} | 2 +- ...lo-E.js => c4Diagram-7LVT6UL2-ChJkkKfU.js} | 2 +- web/static/react/assets/channel-BAtc-kUU.js | 1 + web/static/react/assets/channel-BxYJdls3.js | 1 - ...DNcVsWhT.js => chunk-4HAMMTFA-BTl3sD7V.js} | 2 +- ...BOuUJ_T3.js => chunk-75Z2AOVW-EH--Dbcs.js} | 2 +- ...B5JVZOtj.js => chunk-DU6HZSFF-C7nlYnVp.js} | 2 +- ...DsSgzbdG.js => chunk-F27PBJKO-sUyoaA7x.js} | 2 +- ...BMhCjkAm.js => chunk-GMAD6QVW-uMSmTpYN.js} | 2 +- ...Bzyw-kJS.js => chunk-GVQU2GXP-DY8G9yM_.js} | 2 +- ...D9VOS10J.js => chunk-IMKFNOWR-V-RJ1_rc.js} | 2 +- ...rBeG36DT.js => chunk-L3NEJ4N5-Cmp40Yh-.js} | 2 +- ...49kNt3Df.js => chunk-OSK3NFVY-BB-9dk7M.js} | 2 +- ...C9EDu1iy.js => chunk-P2QGCYS3-DZnvhF4Q.js} | 2 +- ...BS_-p7HX.js => chunk-POPQ4Y6H-DJgvRVBq.js} | 2 +- ...B7X2XlJq.js => chunk-PWAF6VOD-C8G9zrxq.js} | 2 +- ...BqrAJVp9.js => chunk-SHT3W25Y-tfasrUVU.js} | 2 +- ...x_JC8v8-.js => chunk-SVP7TREG-Zl_40xT-.js} | 2 +- ...D-m_omGp.js => chunk-TICWLB2K-s6bWZXiA.js} | 2 +- .../assets/classDiagram-ZZMXUADV-CNr0HSAH.js | 1 - .../assets/classDiagram-ZZMXUADV-Dbac8UEH.js | 1 + .../classDiagram-v2-VYDZK3BY-CNr0HSAH.js | 1 - .../classDiagram-v2-VYDZK3BY-Dbac8UEH.js | 1 + ...js => cynefinDiagram-5FMLGOSQ-HJ_x9Y1n.js} | 2 +- ...DJsP2-jH.js => dagre-GXQ25YYZ-vfFhtRIT.js} | 2 +- ...ZNOvGj.js => diagram-S7CK7UJ4-DUcoF3MQ.js} | 2 +- ...jpw_G0.js => diagram-UQ7AKVKN-BF0sFoBr.js} | 2 +- ...MOuvzO.js => diagram-VSXAHHWV-BfpadMdv.js} | 2 +- ...CP-l2G.js => diagram-VX7I27RA-C2COhrcT.js} | 2 +- ...bdJBrD.js => diagram-Z3DM3KII-CfiHegCS.js} | 2 +- ...fS.js => ebnfDiagram-PWID7BFC-Dnfn6o1c.js} | 2 +- ...8lJc.js => erDiagram-RLTQ6QDP-C_rIDMtR.js} | 2 +- .../assets/{es-cz7-QFmJ.js => es-DIOoJimS.js} | 4 +- .../assets/flowDiagram-HODETNUW-evfIKHYP.js | 1 - .../assets/flowDiagram-HODETNUW-uOJKUcXH.js | 1 + .../assets/{fr-yWodgX7y.js => fr-VV3Owrpj.js} | 4 +- ...x.js => ganttDiagram-EL5Y4UJY-BET2YyyG.js} | 2 +- ...s => gitGraphDiagram-WWUBYQGX-1M_3Y-_D.js} | 2 +- ...bu.js => infoDiagram-27XIBGKW-DV3DH2rf.js} | 2 +- ...s => ishikawaDiagram-5VMMS53U-gGipZkT9.js} | 2 +- .../assets/{ja-D7fFet9z.js => ja-CyXJUBmE.js} | 4 +- ...js => journeyDiagram-3NMN7TZE-CXxV9kKA.js} | 2 +- ...me-CmcDAzcm.js => jsx-runtime-DpvgX3dj.js} | 6 +- ...=> kanban-definition-UXKFOSKX-D59vpBGZ.js} | 2 +- .../assets/{ko-CGjPy1ir.js => ko-bBoPoBUB.js} | 4 +- .../{line-BrVqbptW.js => line-ysfUadNI.js} | 2 +- ...e-CwDJVP0N.js => mermaid.core-B_Tsb3ik.js} | 8 +- ...> mindmap-definition-YA3MSWOX-BTmzHse5.js} | 2 +- ...Te0.js => pegDiagram-XKGWAZYB-w0nF_BtB.js} | 2 +- ...Jkv.js => pieDiagram-E7YTZNPT-BcPNi_nP.js} | 2 +- ...s => quadrantDiagram-AXDQQJYC-Cph6tycK.js} | 2 +- ...s => railroadDiagram-O6MQD6OU-D07JV8CS.js} | 2 +- ...> requirementDiagram-BXWQKSXE-Jd4x11Ps.js} | 2 +- ....js => sankeyDiagram-P5KCCOFB-D6U2J8Nt.js} | 2 +- ...s => sequenceDiagram-WJ2MYXX4-Ca_R7bXK.js} | 2 +- ...R.js => stateDiagram-D77RDMKH-BXhGUBM-.js} | 2 +- .../stateDiagram-v2-MP3YSRHH-_tEXMZis.js | 1 + .../stateDiagram-v2-MP3YSRHH-dij5Iu-B.js | 1 - ...tDy-.js => swimlanes-42K2YHIH-CYmYHtJt.js} | 2 +- .../swimlanesDiagram-VR7AAH4N-CgbrcE-J.js | 8 - .../swimlanesDiagram-VR7AAH4N-DeHyQpvA.js | 8 + ...minal-DmaHdefw.js => terminal-9axba6Ai.js} | 2 +- ... timeline-definition-24CTP7MA-BEtDc74h.js} | 2 +- ...{tokens-zhzSlX7k.js => tokens-Dwwo-z6R.js} | 4 +- ...zG.js => vennDiagram-4TSXK5OY-DALSVYwx.js} | 2 +- ...iewers-f1y6zYtx.js => viewers-Brg_4V67.js} | 6 +- ...js => wardleyDiagram-VM6X3IG4-DJDs_li3.js} | 2 +- ...js => xychartDiagram-S5SC5T6Z-hboZek6k.js} | 2 +- .../assets/{zh-D1hK0Dos.js => zh-DSiUUbqd.js} | 4 +- web/static/sw.js | 2 +- web/static/terminal.html | 8 +- 104 files changed, 562 insertions(+), 203 deletions(-) create mode 100644 frontend/src/mobile/polish.css create mode 100644 frontend/src/sessions/paneSummary.test.ts create mode 100644 frontend/src/sessions/paneSummary.ts rename web/static/react/assets/{PaneViews-Dgscpqc9.js => PaneViews-CCamo9GT.js} (92%) rename web/static/react/assets/{RichMarkdown-CTHXOnWq.js => RichMarkdown-Dk2rttMD.js} (99%) rename web/static/react/assets/{Workbench-LkIyaV8C.js => Workbench-Bp7HqSdK.js} (98%) rename web/static/react/assets/{abnfDiagram-VCTEODGH-Bh-iybGi.js => abnfDiagram-VCTEODGH-BZ1FZo0h.js} (89%) rename web/static/react/assets/{action-b1uLKwAx.js => action-Drt9J-sE.js} (92%) rename web/static/react/assets/{app-CaTkRc0c.css => app-77dz3N0G.css} (96%) create mode 100644 web/static/react/assets/app-DdKdlzbj.js delete mode 100644 web/static/react/assets/app-qRUQIX5z.js rename web/static/react/assets/{architectureDiagram-5GKGNRK7-DZipTRFV.js => architectureDiagram-5GKGNRK7-BFE1JZS9.js} (99%) rename web/static/react/assets/{blockDiagram-I7D4REHJ-38Nqn75a.js => blockDiagram-I7D4REHJ-CN19ahfj.js} (98%) rename web/static/react/assets/{c4Diagram-7LVT6UL2-C5G4lo-E.js => c4Diagram-7LVT6UL2-ChJkkKfU.js} (99%) create mode 100644 web/static/react/assets/channel-BAtc-kUU.js delete mode 100644 web/static/react/assets/channel-BxYJdls3.js rename web/static/react/assets/{chunk-4HAMMTFA-DNcVsWhT.js => chunk-4HAMMTFA-BTl3sD7V.js} (99%) rename web/static/react/assets/{chunk-75Z2AOVW-BOuUJ_T3.js => chunk-75Z2AOVW-EH--Dbcs.js} (99%) rename web/static/react/assets/{chunk-DU6HZSFF-B5JVZOtj.js => chunk-DU6HZSFF-C7nlYnVp.js} (99%) rename web/static/react/assets/{chunk-F27PBJKO-DsSgzbdG.js => chunk-F27PBJKO-sUyoaA7x.js} (93%) rename web/static/react/assets/{chunk-GMAD6QVW-BMhCjkAm.js => chunk-GMAD6QVW-uMSmTpYN.js} (99%) rename web/static/react/assets/{chunk-GVQU2GXP-Bzyw-kJS.js => chunk-GVQU2GXP-DY8G9yM_.js} (90%) rename web/static/react/assets/{chunk-IMKFNOWR-D9VOS10J.js => chunk-IMKFNOWR-V-RJ1_rc.js} (99%) rename web/static/react/assets/{chunk-L3NEJ4N5-rBeG36DT.js => chunk-L3NEJ4N5-Cmp40Yh-.js} (96%) rename web/static/react/assets/{chunk-OSK3NFVY-49kNt3Df.js => chunk-OSK3NFVY-BB-9dk7M.js} (98%) rename web/static/react/assets/{chunk-P2QGCYS3-C9EDu1iy.js => chunk-P2QGCYS3-DZnvhF4Q.js} (96%) rename web/static/react/assets/{chunk-POPQ4Y6H-BS_-p7HX.js => chunk-POPQ4Y6H-DJgvRVBq.js} (77%) rename web/static/react/assets/{chunk-PWAF6VOD-B7X2XlJq.js => chunk-PWAF6VOD-C8G9zrxq.js} (98%) rename web/static/react/assets/{chunk-SHT3W25Y-BqrAJVp9.js => chunk-SHT3W25Y-tfasrUVU.js} (99%) rename web/static/react/assets/{chunk-SVP7TREG-x_JC8v8-.js => chunk-SVP7TREG-Zl_40xT-.js} (99%) rename web/static/react/assets/{chunk-TICWLB2K-D-m_omGp.js => chunk-TICWLB2K-s6bWZXiA.js} (99%) delete mode 100644 web/static/react/assets/classDiagram-ZZMXUADV-CNr0HSAH.js create mode 100644 web/static/react/assets/classDiagram-ZZMXUADV-Dbac8UEH.js delete mode 100644 web/static/react/assets/classDiagram-v2-VYDZK3BY-CNr0HSAH.js create mode 100644 web/static/react/assets/classDiagram-v2-VYDZK3BY-Dbac8UEH.js rename web/static/react/assets/{cynefinDiagram-5FMLGOSQ-CibaU_zZ.js => cynefinDiagram-5FMLGOSQ-HJ_x9Y1n.js} (98%) rename web/static/react/assets/{dagre-GXQ25YYZ-DJsP2-jH.js => dagre-GXQ25YYZ-vfFhtRIT.js} (94%) rename web/static/react/assets/{diagram-S7CK7UJ4-VDZNOvGj.js => diagram-S7CK7UJ4-DUcoF3MQ.js} (96%) rename web/static/react/assets/{diagram-UQ7AKVKN-Dsjpw_G0.js => diagram-UQ7AKVKN-BF0sFoBr.js} (96%) rename web/static/react/assets/{diagram-VSXAHHWV-vDMOuvzO.js => diagram-VSXAHHWV-BfpadMdv.js} (98%) rename web/static/react/assets/{diagram-VX7I27RA-QoCP-l2G.js => diagram-VX7I27RA-C2COhrcT.js} (97%) rename web/static/react/assets/{diagram-Z3DM3KII-CNbdJBrD.js => diagram-Z3DM3KII-CfiHegCS.js} (94%) rename web/static/react/assets/{ebnfDiagram-PWID7BFC-DqiuWufS.js => ebnfDiagram-PWID7BFC-Dnfn6o1c.js} (90%) rename web/static/react/assets/{erDiagram-RLTQ6QDP-C4Li8lJc.js => erDiagram-RLTQ6QDP-C_rIDMtR.js} (98%) rename web/static/react/assets/{es-cz7-QFmJ.js => es-DIOoJimS.js} (76%) delete mode 100644 web/static/react/assets/flowDiagram-HODETNUW-evfIKHYP.js create mode 100644 web/static/react/assets/flowDiagram-HODETNUW-uOJKUcXH.js rename web/static/react/assets/{fr-yWodgX7y.js => fr-VV3Owrpj.js} (76%) rename web/static/react/assets/{ganttDiagram-EL5Y4UJY-SYw88-hx.js => ganttDiagram-EL5Y4UJY-BET2YyyG.js} (99%) rename web/static/react/assets/{gitGraphDiagram-WWUBYQGX-CcgJavni.js => gitGraphDiagram-WWUBYQGX-1M_3Y-_D.js} (99%) rename web/static/react/assets/{infoDiagram-27XIBGKW-wXbG4Nbu.js => infoDiagram-27XIBGKW-DV3DH2rf.js} (80%) rename web/static/react/assets/{ishikawaDiagram-5VMMS53U-CnMMk_WO.js => ishikawaDiagram-5VMMS53U-gGipZkT9.js} (98%) rename web/static/react/assets/{ja-D7fFet9z.js => ja-CyXJUBmE.js} (76%) rename web/static/react/assets/{journeyDiagram-3NMN7TZE-jKH5paOw.js => journeyDiagram-3NMN7TZE-CXxV9kKA.js} (99%) rename web/static/react/assets/{jsx-runtime-CmcDAzcm.js => jsx-runtime-DpvgX3dj.js} (77%) rename web/static/react/assets/{kanban-definition-UXKFOSKX-639Pot0A.js => kanban-definition-UXKFOSKX-D59vpBGZ.js} (97%) rename web/static/react/assets/{ko-CGjPy1ir.js => ko-bBoPoBUB.js} (76%) rename web/static/react/assets/{line-BrVqbptW.js => line-ysfUadNI.js} (93%) rename web/static/react/assets/{mermaid.core-CwDJVP0N.js => mermaid.core-B_Tsb3ik.js} (93%) rename web/static/react/assets/{mindmap-definition-YA3MSWOX-Bi9RMdy1.js => mindmap-definition-YA3MSWOX-BTmzHse5.js} (98%) rename web/static/react/assets/{pegDiagram-XKGWAZYB-BuGpkTe0.js => pegDiagram-XKGWAZYB-w0nF_BtB.js} (87%) rename web/static/react/assets/{pieDiagram-E7YTZNPT-Ba8FcJkv.js => pieDiagram-E7YTZNPT-BcPNi_nP.js} (96%) rename web/static/react/assets/{quadrantDiagram-AXDQQJYC-BD2Azcsy.js => quadrantDiagram-AXDQQJYC-Cph6tycK.js} (99%) rename web/static/react/assets/{railroadDiagram-O6MQD6OU-DizPf6Mu.js => railroadDiagram-O6MQD6OU-D07JV8CS.js} (88%) rename web/static/react/assets/{requirementDiagram-BXWQKSXE-BzRNIxhB.js => requirementDiagram-BXWQKSXE-Jd4x11Ps.js} (98%) rename web/static/react/assets/{sankeyDiagram-P5KCCOFB-BEodbYn-.js => sankeyDiagram-P5KCCOFB-D6U2J8Nt.js} (99%) rename web/static/react/assets/{sequenceDiagram-WJ2MYXX4-DeOKqY92.js => sequenceDiagram-WJ2MYXX4-Ca_R7bXK.js} (99%) rename web/static/react/assets/{stateDiagram-D77RDMKH-CAYEP3ZR.js => stateDiagram-D77RDMKH-BXhGUBM-.js} (93%) create mode 100644 web/static/react/assets/stateDiagram-v2-MP3YSRHH-_tEXMZis.js delete mode 100644 web/static/react/assets/stateDiagram-v2-MP3YSRHH-dij5Iu-B.js rename web/static/react/assets/{swimlanes-42K2YHIH-BDg2tDy-.js => swimlanes-42K2YHIH-CYmYHtJt.js} (99%) delete mode 100644 web/static/react/assets/swimlanesDiagram-VR7AAH4N-CgbrcE-J.js create mode 100644 web/static/react/assets/swimlanesDiagram-VR7AAH4N-DeHyQpvA.js rename web/static/react/assets/{terminal-DmaHdefw.js => terminal-9axba6Ai.js} (99%) rename web/static/react/assets/{timeline-definition-24CTP7MA-CuR7ZECE.js => timeline-definition-24CTP7MA-BEtDc74h.js} (99%) rename web/static/react/assets/{tokens-zhzSlX7k.js => tokens-Dwwo-z6R.js} (99%) rename web/static/react/assets/{vennDiagram-4TSXK5OY-DP8gRpzG.js => vennDiagram-4TSXK5OY-DALSVYwx.js} (99%) rename web/static/react/assets/{viewers-f1y6zYtx.js => viewers-Brg_4V67.js} (98%) rename web/static/react/assets/{wardleyDiagram-VM6X3IG4-a-0j-1KX.js => wardleyDiagram-VM6X3IG4-DJDs_li3.js} (99%) rename web/static/react/assets/{xychartDiagram-S5SC5T6Z-CR9xWmns.js => xychartDiagram-S5SC5T6Z-hboZek6k.js} (99%) rename web/static/react/assets/{zh-D1hK0Dos.js => zh-DSiUUbqd.js} (76%) diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 25afce5e..15253925 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -707,18 +707,39 @@ export default function App() { document.removeEventListener("visibilitychange", visibility); }; }, [api, authVersion, refresh, notice, completeSwitch, switchFailure]); - // More is a flyout: a click anywhere else closes it. + // Menus are flyouts: one is open at a time, and a tap anywhere else or + // Escape closes it. Without this, More and a view's ⋯ stayed open over + // each other, and over the next view. useEffect(() => { - const close = (event: MouseEvent) => { - const menu = document.getElementById("nav-overflow"); - if (menu?.hasAttribute("open") && !menu.contains(event.target as Node)) menu.removeAttribute("open"); + const menus = () => [...document.querySelectorAll("details.action-menu[open]")]; + const close = (event: Event) => { + // A phone sheet's dimmed backdrop is the menu's own ::before. + for (const menu of menus()) if (!menu.contains(event.target as Node) || event.target === menu) menu.open = false; + }; + const opened = (event: Event) => { + const menu = event.target; + if (!(menu instanceof HTMLDetailsElement) || !menu.open || !menu.classList.contains("action-menu")) return; + for (const other of menus()) if (other !== menu && !other.contains(menu)) other.open = false; + }; + const key = (event: KeyboardEvent) => { + if (event.key !== "Escape") return; + const open = menus(); + if (!open.length) return; + for (const menu of open) menu.open = false; + open[open.length - 1]?.querySelector("summary")?.focus(); + }; + document.addEventListener("pointerdown", close); + document.addEventListener("toggle", opened, true); + document.addEventListener("keydown", key); + return () => { + document.removeEventListener("pointerdown", close); + document.removeEventListener("toggle", opened, true); + document.removeEventListener("keydown", key); }; - document.addEventListener("click", close); - return () => document.removeEventListener("click", close); }, []); // ...and so does going anywhere. useEffect(() => { - document.getElementById("nav-overflow")?.removeAttribute("open"); + for (const menu of document.querySelectorAll("details.action-menu[open]")) menu.open = false; }, [view, section.version]); useEffect(() => { document.body.classList.toggle("terminals-open", view === "terminals"); diff --git a/frontend/src/i18n/en/conversation.ts b/frontend/src/i18n/en/conversation.ts index 7bb63b86..5528c58b 100644 --- a/frontend/src/i18n/en/conversation.ts +++ b/frontend/src/i18n/en/conversation.ts @@ -30,6 +30,11 @@ const catalog: Record = { "conversation.chat.smallerText": "Smaller text", "conversation.chat.largerText": "Larger text", "conversation.chat.latest": "↓ Latest", + "conversation.chat.openTerminalShort": "⌨ Terminal", + "conversation.chat.reviewMergeShort": "± Review", + "conversation.chat.showTerminalTextShort": "Text", + "conversation.chat.showChatCardsShort": "Cards", + "conversation.chat.placeholderShort": "Message the agent…", "conversation.chat.openTerminal": "⌨ Open terminal", "conversation.chat.reviewMerge": "± Review & merge", "conversation.chat.browser": "◎ Open a browser", diff --git a/frontend/src/i18n/en/sessions.ts b/frontend/src/i18n/en/sessions.ts index d1e3ad52..e582a10e 100644 --- a/frontend/src/i18n/en/sessions.ts +++ b/frontend/src/i18n/en/sessions.ts @@ -38,6 +38,7 @@ const catalog: Record = { "sessions.list.restoreIt": "Restore it", "sessions.list.restoreCount": "Restore {count}", "sessions.list.searchPlaceholder": "Search sessions, groups, branches or folders", + "sessions.list.searchPlaceholderShort": "Search sessions", "sessions.list.searchLabel": "Find a session or project", "sessions.list.groupBy": "Group by", "sessions.list.groupByLabel": "Group sessions by", diff --git a/frontend/src/i18n/es/conversation.ts b/frontend/src/i18n/es/conversation.ts index 95756af8..b7ee56ce 100644 --- a/frontend/src/i18n/es/conversation.ts +++ b/frontend/src/i18n/es/conversation.ts @@ -20,6 +20,11 @@ const catalog: Record = { "conversation.chat.smallerText": "Texto más pequeño", "conversation.chat.largerText": "Texto más grande", "conversation.chat.latest": "↓ Lo último", + "conversation.chat.openTerminalShort": "⌨ Terminal", + "conversation.chat.reviewMergeShort": "± Revisar", + "conversation.chat.showTerminalTextShort": "Texto", + "conversation.chat.showChatCardsShort": "Tarjetas", + "conversation.chat.placeholderShort": "Escribe al agente…", "conversation.chat.openTerminal": "⌨ Abrir terminal", "conversation.chat.reviewMerge": "± Revisar y fusionar", "conversation.chat.browser": "◎ Abrir un navegador", diff --git a/frontend/src/i18n/es/sessions.ts b/frontend/src/i18n/es/sessions.ts index 232cf9c3..51cbf496 100644 --- a/frontend/src/i18n/es/sessions.ts +++ b/frontend/src/i18n/es/sessions.ts @@ -28,6 +28,7 @@ const catalog: Record = { "sessions.list.restoreIt": "Restaurarla", "sessions.list.restoreCount": "Restaurar {count}", "sessions.list.searchPlaceholder": "Buscar sesiones, grupos, ramas o carpetas", + "sessions.list.searchPlaceholderShort": "Buscar sesiones", "sessions.list.searchLabel": "Buscar una sesión o un proyecto", "sessions.list.groupBy": "Agrupar por", "sessions.list.groupByLabel": "Agrupar sesiones por", diff --git a/frontend/src/i18n/fr/conversation.ts b/frontend/src/i18n/fr/conversation.ts index 58b872dc..af9f678a 100644 --- a/frontend/src/i18n/fr/conversation.ts +++ b/frontend/src/i18n/fr/conversation.ts @@ -20,6 +20,11 @@ const catalog: Record = { "conversation.chat.smallerText": "Texte plus petit", "conversation.chat.largerText": "Texte plus grand", "conversation.chat.latest": "↓ Plus récent", + "conversation.chat.openTerminalShort": "⌨ Terminal", + "conversation.chat.reviewMergeShort": "± Relire", + "conversation.chat.showTerminalTextShort": "Texte", + "conversation.chat.showChatCardsShort": "Cartes", + "conversation.chat.placeholderShort": "Écrire à l’agent…", "conversation.chat.openTerminal": "⌨ Ouvrir le terminal", "conversation.chat.reviewMerge": "± Relire et fusionner", "conversation.chat.browser": "◎ Ouvrir un navigateur", diff --git a/frontend/src/i18n/fr/sessions.ts b/frontend/src/i18n/fr/sessions.ts index 212de52b..115cac5f 100644 --- a/frontend/src/i18n/fr/sessions.ts +++ b/frontend/src/i18n/fr/sessions.ts @@ -28,6 +28,7 @@ const catalog: Record = { "sessions.list.restoreIt": "La restaurer", "sessions.list.restoreCount": "Restaurer {count}", "sessions.list.searchPlaceholder": "Rechercher des sessions, groupes, branches ou dossiers", + "sessions.list.searchPlaceholderShort": "Rechercher des sessions", "sessions.list.searchLabel": "Trouver une session ou un projet", "sessions.list.groupBy": "Regrouper par", "sessions.list.groupByLabel": "Regrouper les sessions par", diff --git a/frontend/src/i18n/ja/conversation.ts b/frontend/src/i18n/ja/conversation.ts index 3d100b39..9a501382 100644 --- a/frontend/src/i18n/ja/conversation.ts +++ b/frontend/src/i18n/ja/conversation.ts @@ -20,6 +20,11 @@ const catalog: Record = { "conversation.chat.smallerText": "文字を小さく", "conversation.chat.largerText": "文字を大きく", "conversation.chat.latest": "↓ 最新", + "conversation.chat.openTerminalShort": "⌨ ターミナル", + "conversation.chat.reviewMergeShort": "± レビュー", + "conversation.chat.showTerminalTextShort": "テキスト", + "conversation.chat.showChatCardsShort": "カード", + "conversation.chat.placeholderShort": "エージェントにメッセージ…", "conversation.chat.openTerminal": "⌨ ターミナルを開く", "conversation.chat.reviewMerge": "± レビューとマージ", "conversation.chat.browser": "◎ ブラウザーを開く", diff --git a/frontend/src/i18n/ja/sessions.ts b/frontend/src/i18n/ja/sessions.ts index 3f7d3916..ee273d97 100644 --- a/frontend/src/i18n/ja/sessions.ts +++ b/frontend/src/i18n/ja/sessions.ts @@ -28,6 +28,7 @@ const catalog: Record = { "sessions.list.restoreIt": "復元する", "sessions.list.restoreCount": "{count} 件を復元", "sessions.list.searchPlaceholder": "セッション、グループ、ブランチ、フォルダーを検索", + "sessions.list.searchPlaceholderShort": "セッションを検索", "sessions.list.searchLabel": "セッションまたはプロジェクトを検索", "sessions.list.groupBy": "グループ化", "sessions.list.groupByLabel": "セッションのグループ化", diff --git a/frontend/src/i18n/ko/conversation.ts b/frontend/src/i18n/ko/conversation.ts index 4679c629..cd64e431 100644 --- a/frontend/src/i18n/ko/conversation.ts +++ b/frontend/src/i18n/ko/conversation.ts @@ -20,6 +20,11 @@ const catalog: Record = { "conversation.chat.smallerText": "글자 작게", "conversation.chat.largerText": "글자 크게", "conversation.chat.latest": "↓ 최신", + "conversation.chat.openTerminalShort": "⌨ 터미널", + "conversation.chat.reviewMergeShort": "± 검토", + "conversation.chat.showTerminalTextShort": "텍스트", + "conversation.chat.showChatCardsShort": "카드", + "conversation.chat.placeholderShort": "에이전트에게 메시지…", "conversation.chat.openTerminal": "⌨ 터미널 열기", "conversation.chat.reviewMerge": "± 리뷰 및 병합", "conversation.chat.browser": "◎ 브라우저 열기", diff --git a/frontend/src/i18n/ko/sessions.ts b/frontend/src/i18n/ko/sessions.ts index ee8151c2..39da6b58 100644 --- a/frontend/src/i18n/ko/sessions.ts +++ b/frontend/src/i18n/ko/sessions.ts @@ -28,6 +28,7 @@ const catalog: Record = { "sessions.list.restoreIt": "복원하기", "sessions.list.restoreCount": "{count}개 복원", "sessions.list.searchPlaceholder": "세션, 그룹, 브랜치 또는 폴더 검색", + "sessions.list.searchPlaceholderShort": "세션 검색", "sessions.list.searchLabel": "세션 또는 프로젝트 찾기", "sessions.list.groupBy": "그룹 기준", "sessions.list.groupByLabel": "세션 그룹 기준", diff --git a/frontend/src/i18n/zh/conversation.ts b/frontend/src/i18n/zh/conversation.ts index 3e9209f1..da4b4fac 100644 --- a/frontend/src/i18n/zh/conversation.ts +++ b/frontend/src/i18n/zh/conversation.ts @@ -20,6 +20,11 @@ const catalog: Record = { "conversation.chat.smallerText": "缩小文字", "conversation.chat.largerText": "放大文字", "conversation.chat.latest": "↓ 最新", + "conversation.chat.openTerminalShort": "⌨ 终端", + "conversation.chat.reviewMergeShort": "± 审查", + "conversation.chat.showTerminalTextShort": "文本", + "conversation.chat.showChatCardsShort": "卡片", + "conversation.chat.placeholderShort": "给智能体发消息…", "conversation.chat.openTerminal": "⌨ 打开终端", "conversation.chat.reviewMerge": "± 审查与合并", "conversation.chat.browser": "◎ 打开浏览器", diff --git a/frontend/src/i18n/zh/sessions.ts b/frontend/src/i18n/zh/sessions.ts index 368d2e2d..a400eb39 100644 --- a/frontend/src/i18n/zh/sessions.ts +++ b/frontend/src/i18n/zh/sessions.ts @@ -28,6 +28,7 @@ const catalog: Record = { "sessions.list.restoreIt": "恢复它", "sessions.list.restoreCount": "恢复 {count} 个", "sessions.list.searchPlaceholder": "搜索会话、分组、分支或文件夹", + "sessions.list.searchPlaceholderShort": "搜索会话", "sessions.list.searchLabel": "查找会话或项目", "sessions.list.groupBy": "分组方式", "sessions.list.groupByLabel": "会话分组方式", diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index 7ffbb8ad..8f5047bd 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -35,6 +35,7 @@ import { bootAppearance } from "./theme/appearance"; // Before the first render: the saved theme paints the first frame. bootAppearance(); import "./mobile/phone.css"; +import "./mobile/polish.css"; // /pair is the one page an unpaired device can reach with no credential — // see internal/api/server.go's withAuth exemption. It gets its own render // root entirely: no board fetches, no SSE, nothing that assumes an diff --git a/frontend/src/mobile/polish.css b/frontend/src/mobile/polish.css new file mode 100644 index 00000000..f5f9489a --- /dev/null +++ b/frontend/src/mobile/polish.css @@ -0,0 +1,207 @@ +/* Phone polish (2.9). Loaded last. + + A pass over every phone view at 360-412px, looking for words that sat on + top of other words, text cut through the middle, and furniture that pushed + the content off the first screen. What it fixes: + + - The quota chip shared the header row with the title and the actions, so + it covered "Sessions" and pushed Routines/Claims off the right edge. On a + phone it is a slim line of its own under the title. + - A card's terminal preview showed its first lines and cut the last one in + half. It now shows the last three whole lines, which is what the agent + is doing now. + - Chips a phone has no room for (the machine, uptime) leave the card; the + ones that need attention (context, cost, checks, CI, warnings) stay. + - Selects and short fields kept the desk's vertical padding in a shorter + box, which cut their text in half horizontally. */ + +@media (max-width: 600px) { + /* ---------- Headers ---------- */ + .sesshead, .page-heading { flex-wrap: wrap; row-gap: 6px; } + .sesshead > div { flex: 1 1 0; min-width: 0; } + .sesshead h2, .page-heading h2 { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; } + .page-heading > h2 { flex: 1 1 0; } + .page-heading > .btnrow { flex: none; display: flex; gap: 6px; margin: 0; } + .page-heading > .btnrow button { width: auto; } + .sesshead > .quota-chip, .page-heading > .quota-chip, .sesshead > .budget-chip, .page-heading > .budget-chip { + order: 10; flex: 1 1 100%; min-width: 0; + display: flex; justify-content: flex-start; gap: 14px; + padding: 4px 10px; border-radius: 8px; font-size: 11px; + white-space: nowrap; overflow: hidden; + } + .quota-window { white-space: nowrap; } + .quota-window small { font-size: 10px; } + + /* ---------- Session cards ---------- */ + #sesslist .scard, .scard { padding: 10px 12px 10px 14px; margin-bottom: 8px; border-radius: 12px; } + .scard-project { + font-size: 10.5px; letter-spacing: .06em; text-transform: uppercase; + color: var(--ink-faint); margin: 0 0 3px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; + } + .scard-top { flex-wrap: nowrap; gap: 7px; min-width: 0; } + .scard-top .nm { + flex: 0 1 auto; min-width: 0; padding: 0; text-align: left; + white-space: nowrap; overflow: hidden; text-overflow: ellipsis; + } + .scard-top .nm-edit { flex: 1 1 auto; min-width: 0; } + /* A blank shell is told apart by its folder name, so that title wraps + whole rather than ending in an ellipsis. */ + .scard[data-scratch-terminal] .scard-top { flex-wrap: wrap; } + .scard[data-scratch-terminal] .scard-top .nm { white-space: normal; overflow: visible; overflow-wrap: anywhere; } + .scard-top .sstate, .scard-top .status-badge { flex: none; font-size: 10px; padding: 1px 7px; } + .scard-top .sidle { flex: none; font-size: 10.5px; } + .smeta { gap: 4px 6px; align-items: center; margin-top: 6px; } + .smeta .chip { font-size: 10.5px; padding: 1px 7px; } + .smeta .chip.tgt, .smeta .chip-uptime, .smeta .chip-wraps { display: none; } + .smeta .ctxbar { font-size: 10.5px; gap: 4px; } + .smeta .ctxbar i { width: 32px; } + .smeta .check-badge { display: inline-flex; } + .smeta .check-chip, .smeta .ci-chip { min-height: 0; height: auto; padding: 1px 7px; font-size: 10.5px; border-radius: 999px; } + /* The last three whole lines of the pane: flex-end keeps the tail in view + and clips the older lines above it, and the height is exactly three + lines so none is cut through. */ + .scard .spane { + display: flex; flex-direction: column; justify-content: flex-end; + --spane-lh: 14px; + height: auto; max-height: calc(3 * var(--spane-lh) + 12px); min-height: 0; + margin-top: 8px; padding: 6px 9px; overflow: hidden; + font-size: 10.5px; line-height: var(--spane-lh); + white-space: pre; word-break: normal; text-overflow: clip; + -webkit-mask-image: linear-gradient(to bottom, transparent 0, var(--ink) 10px); + mask-image: linear-gradient(to bottom, transparent 0, var(--ink) 10px); + } + .scard .spane:empty { display: none; } + /* The successor link is a line of text, not another row of buttons. */ + .scard .session-lineage { margin-top: 6px; } + .scard .lineage-open { + min-height: 28px; padding: 0 8px; font-size: 11.5px; border-radius: 999px; max-width: 100%; + } + .scard .btnrow { margin-top: 8px; gap: 6px; flex-wrap: nowrap; } + .scard .btnrow > .b, .scard .btnrow > .action-menu { flex: 1 1 0; min-width: 0; } + .scard .btnrow > .action-menu { flex: 0 0 auto; } + .scard .btnrow > .action-menu > summary { padding: 0 12px; } + .scard .btnrow > .b { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } + .scard .scard-path { margin-top: 6px; gap: 6px; font-size: 11px; } + .scard .scard-path code { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + + /* ---------- Menus as sheets ---------- */ + /* The Sessions ⋯ menu opens from the bottom edge like a card's. Its own + button stays above the dimmed page, so a second tap closes it. (More + stays a flyout above the tab bar, which has to remain tappable.) */ + #sess-more[open] > summary { position: relative; z-index: 72; } + #sess-more[open]::before { + content: ""; position: fixed; inset: 0; z-index: 70; + background: color-mix(in srgb, var(--bg) 80%, transparent); + animation: sheet-fade .18s ease-out; + } + #sess-more[open] > .action-menu-panel { + position: fixed; left: 0; right: 0; top: auto; bottom: 0; z-index: 71; + width: auto; max-width: none; max-height: 78dvh; overflow-y: auto; + border-radius: 16px 16px 0 0; transform: none; + padding: 14px 12px calc(12px + env(safe-area-inset-bottom, 0px)); + display: flex; flex-direction: column; gap: 4px; + animation: sheet-up .22s cubic-bezier(.2, .8, .2, 1); + overscroll-behavior: contain; + } + .sesshead:has(#sess-more[open]) { position: relative; z-index: 75; } + #sess-more[open] > .action-menu-panel > button, + #sess-more[open] > .action-menu-panel > .b { min-height: 46px; font-size: 15px; justify-content: flex-start; text-align: left; } + #sess-more[open] > .action-menu-panel label, + #sess-more[open] > .action-menu-panel .session-grouping { + display: flex; align-items: center; justify-content: space-between; gap: 10px; + min-height: 46px; font-size: 14px; color: var(--ink-dim); + } + #sess-more[open] > .action-menu-panel select { flex: 0 1 60%; min-width: 0; height: 40px; } + #sess-more[open] > .action-menu-panel .session-filters { display: flex; flex-direction: column; gap: 4px; } + #sess-more[open] > .action-menu-panel .session-filters .session-grouping { font-size: 14px; flex: none; } + + /* ---------- Fields ---------- */ + /* One rule for every short field: no vertical padding, so its 16px text is + centred in the box instead of cut through. */ + #view select:not([multiple]):not([size]), #view input:not([type="checkbox"]):not([type="radio"]):not([type="range"]) { + padding-top: 0; padding-bottom: 0; line-height: normal; min-height: 36px; + } + #view input::placeholder { text-overflow: ellipsis; } + + /* ---------- Tasks ---------- */ + #quickbar { flex-wrap: wrap; } + #qb-mode { display: flex; width: 100%; min-width: 0; } + #qb-mode > button { flex: 1 1 auto; min-width: 0; padding: 0 6px; font-size: 12.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } + #quickbar #qb-project, #quickbar #qb-input { grid-column: 1 / -1; width: 100%; max-width: 100%; box-sizing: border-box; } + .colstrip { padding: 0 10px; scrollbar-width: none; } + .colstrip::-webkit-scrollbar { display: none; } + #board { padding: 0 10px; } + /* One column at a time on a phone (the strip above picks it), so it + takes the width instead of 86% of it. */ + #board .col.mobile-on { flex: 1 1 100%; width: 100%; max-width: 100%; box-sizing: border-box; } + /* The delete control sits in the corner; the title keeps clear of it. */ + .card { position: relative; } + .card .t, .card h3, .card .title { padding-right: 34px; } + .card-x { position: absolute; top: 4px; right: 4px; } + .card .task-chat { margin: 6px 0 4px; } + + /* ---------- Media ---------- */ + #media .pane-head { flex-wrap: wrap; row-gap: 6px; } + #media .pane-head > div:first-child { flex: 1 1 100%; } + .media-filter { flex: 1 1 100%; display: flex; align-items: center; } + .media-filter select { flex: 1; max-width: none; } + + /* ---------- Overview ---------- */ + /* A pane's head is its title on one line and its state beside it; the log + below is three lines, like a session card, not the whole transcript. */ + #deck { padding: 0 10px; gap: 8px; } + #deck .pane { min-height: 0; height: auto; } + #deck .pane-head { + display: flex; align-items: center; gap: 8px; width: 100%; min-width: 0; + padding: 8px 10px; text-align: left; flex-wrap: nowrap; + } + #deck .pane-head .statpill { flex: none; } + #deck .pane-title { flex: 1 1 0; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } + #deck .pane-sub { flex: none; font-size: 11px; } + #deck .pane-log { + height: auto; max-height: calc(4 * 15px + 12px); overflow: hidden; padding: 6px 10px; + display: flex; flex-direction: column; justify-content: flex-end; + } + #deck .pane-line { flex: none; line-height: 15px; font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +} + +@media (max-width: 600px) { + /* ---------- Chat ---------- */ + /* One row of controls above the transcript, not three. */ + .conversation .reader-controls { + display: flex; flex-wrap: nowrap; align-items: center; gap: 6px; + padding: 6px 10px; overflow-x: auto; scrollbar-width: none; + } + .conversation .reader-controls::-webkit-scrollbar { display: none; } + .conversation .reader-controls > .conversation-session-actions { + display: flex; gap: 6px; margin: 0; padding: 0; border: 0; flex: none; + } + .conversation .reader-controls .b { flex: none; min-height: 34px; height: 34px; padding: 0 10px; white-space: nowrap; } + .conversation .reader-controls #reader-latest { margin-left: auto; min-width: 34px; padding: 0; } + /* The composer's field says what it is; its label is for screen readers. */ + #conversation-compose > label[for="conversation-input"] { + position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; + overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; + } + #conversation-input { height: 48px; min-height: 44px; } + .voice-mode > button, #voice-mode > .b { min-height: 36px; font-size: 13px; } + /* A tool row keeps its name ("Terminal", "Edit") whole; the command + after it is what gives way. */ + .tool-card > summary { display: flex; align-items: center; gap: 6px; min-width: 0; } + .tool-card > summary .tool-title { flex: none; white-space: nowrap; overflow: visible; max-width: none; } + .tool-card > summary .tool-subtitle { flex: 1 1 0; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } + .tool-card > summary .tool-sep { flex: none; } + + /* ---------- Start an agent ---------- */ + .session-launch-actions #ns-go { flex: 1 1 auto; } +} + +@media (max-width: 600px) { + /* ---------- Page titles ---------- */ + /* Every page opened with a 22px title and a sentence about itself, which + the tab bar and the page's own content already say; on a phone that + sentence pushed the first control halfway down the screen. */ + .settings-page > header { padding: 2px 0 6px; } + .settings-page > header h2, #media h2, .th-heading h2 { font-size: 17px; margin: 0; } + .settings-page > header p, .th-heading p, #media .pane-head .sub, #media .pane-head p { display: none; } +} diff --git a/frontend/src/sessions/Conversation.tsx b/frontend/src/sessions/Conversation.tsx index b8103047..d9fea07c 100644 --- a/frontend/src/sessions/Conversation.tsx +++ b/frontend/src/sessions/Conversation.tsx @@ -41,6 +41,7 @@ import { ToolCardView } from "./tool-views/ToolCard"; import { VoiceMode } from "./VoiceMode"; import { BrowserPane } from "../browser/BrowserPane"; import { t, useLocale } from "../i18n"; +import { usePhone } from "../mobile/usePhone"; interface Attachment { name: string; path: string; @@ -142,6 +143,7 @@ export function Conversation({ quickReply?: boolean; }) { useLocale(); + const phone = usePhone(); const [enterMode] = usePref(ENTER_PREF, "auto"); const touch = touchOnly(); const key = `lec-draft-${kind}-${id}`; @@ -785,6 +787,28 @@ export function Conversation({ }; }, [workdir, id, onNotice]); const chatCards = kind === "session" ? buildChatCards(liveItems) : []; + const sessionActions = kind === "session" && onAttach && !unavailable && ( +
+ + +
+ ); return ( )} {session && onOpenSession && } + {/* A phone has one row for these: the session's actions and the view + controls, with short labels; the full names stay as accessible names. */}
- - {kind === "session" - ? viewMode === "cards" && !liveUnavailable - ? t("conversation.chat.viewChat") - : t("conversation.chat.viewLiveOutput") - : t("conversation.chat.viewTask")} - + {!phone && ( + + {kind === "session" + ? viewMode === "cards" && !liveUnavailable + ? t("conversation.chat.viewChat") + : t("conversation.chat.viewLiveOutput") + : t("conversation.chat.viewTask")} + + )} + {phone && sessionActions} {kind === "session" && !liveUnavailable && ( )}
- {kind === "session" && onAttach && !unavailable && ( -
- - -
- )} + {!phone && sessionActions} {kind === "session" && showBrowser && ( { const text = event.target.value; diff --git a/frontend/src/sessions/SessionCard.tsx b/frontend/src/sessions/SessionCard.tsx index 6953241f..758b45b2 100644 --- a/frontend/src/sessions/SessionCard.tsx +++ b/frontend/src/sessions/SessionCard.tsx @@ -20,6 +20,8 @@ import { CompactionWarning, ContextBadge, CostBadge, LinesBadge } from "./UsageB import { AwarenessOverlapChip } from "./AwarenessOverlapChip"; import { LimitBanner } from "../limits/LimitBanner"; import { t, useLocale } from "../i18n"; +import { usePhone } from "../mobile/usePhone"; +import { paneSummary } from "./paneSummary"; export function duration(seconds: number) { seconds = Math.max(0, Math.floor(seconds || 0)); return seconds < 60 @@ -98,6 +100,7 @@ export function SessionCard({ // What mods hide or add to this card (docs/mods.md). const modded = useModRender("session.card", { session: modSession(s) }); useLocale(); + const phone = usePhone(); const [progress, setProgress] = useState(""), [progressBusy, setProgressBusy] = useState(false); // Optimistic hide: `approval` is a prop from the parent's own poll (a @@ -256,7 +259,9 @@ export function SessionCard({ (progressError ? "\n" + t("sessions.card.progressUnavailable", { error: progressError }) : "") : s.setup_error ? t("sessions.card.setupFailedPreview", { error: s.setup_error }) - : s.pane_tail || ""; + : phone + ? paneSummary(s.pane_tail || "") + : s.pane_tail || ""; if (modded?.hidden) return null; return (
)} - + {setup ? t("sessions.card.setupFor", { duration: duration(s.uptime_seconds) }) : t("sessions.card.upFor", { duration: duration(s.uptime_seconds) })} {mediaCount > 0 && ( @@ -373,7 +378,7 @@ export function SessionCard({ {t("sessions.card.adopted")} )} - {!!s.wraps && ⇥ {s.wraps}} + {!!s.wraps && ⇥ {s.wraps}} {s.handoff_in_flight && ( {t("sessions.card.writingHandoff")} )} diff --git a/frontend/src/sessions/Sessions.tsx b/frontend/src/sessions/Sessions.tsx index 54674b09..e8a307a3 100644 --- a/frontend/src/sessions/Sessions.tsx +++ b/frontend/src/sessions/Sessions.tsx @@ -591,7 +591,7 @@ export function Sessions({ id="sess-search" className="f" type="search" - placeholder={t("sessions.list.searchPlaceholder")} + placeholder={t(phone ? "sessions.list.searchPlaceholderShort" : "sessions.list.searchPlaceholder")} aria-label={t("sessions.list.searchLabel")} value={query} onChange={(event) => setQuery(event.target.value)} diff --git a/frontend/src/sessions/paneSummary.test.ts b/frontend/src/sessions/paneSummary.test.ts new file mode 100644 index 00000000..894f3384 --- /dev/null +++ b/frontend/src/sessions/paneSummary.test.ts @@ -0,0 +1,33 @@ +import { test } from "node:test"; +import assert from "node:assert/strict"; +import { paneSummary } from "./paneSummary"; + +test("drops Claude Code's prompt box and status line", () => { + const tail = [ + " (ctrl+b ctrl+b (twice) to run in background)", + "· Ionizing… (10m 38s · ↓ 34.7k tokens)", + " ✔ Update installed · Restart to update", + "──────────────────────────────────────────", + "❯ ", + "──────────────────────────────────────────", + " Opus 5.5 (1M context) · 17% ctx · $184.21", + " ⏵⏵ bypass permissions on (shift+tab to cycle) · ← for agents", + ].join("\n"); + assert.equal(paneSummary(tail), " (ctrl+b ctrl+b (twice) to run in background)\n· Ionizing… (10m 38s · ↓ 34.7k tokens)"); +}); + +test("drops Codex's prompt and footer", () => { + const tail = [ + " • All CI jobs green before merge.", + " Worked for 6m 29s · 1:18 PM", + " Tip: Press ctrl+r to search previously entered prompts.", + "› Ask Codex to do anything", + " GPT-6-Astra medium · ~/agentdeck-scratch/shell-1 · Fix Librarr issue", + " ← for agents · ? for shortcuts", + ].join("\n"); + assert.equal(paneSummary(tail), "• All CI jobs green before merge.\nWorked for 6m 29s · 1:18 PM"); +}); + +test("keeps a plain shell untouched", () => { + assert.equal(paneSummary("$ ls\nREADME.md\n$ "), "$ ls\nREADME.md\n$"); +}); diff --git a/frontend/src/sessions/paneSummary.ts b/frontend/src/sessions/paneSummary.ts new file mode 100644 index 00000000..86906fa5 --- /dev/null +++ b/frontend/src/sessions/paneSummary.ts @@ -0,0 +1,35 @@ +// What a phone card shows of a pane: the last lines that say what the agent +// is doing, without the agent's own furniture beneath them. +// +// The bottom of a Claude Code or Codex screen is always the same chrome: a +// rule, the prompt box, a status line and key hints. A desk card is tall +// enough to show it and what is above; a phone card has three lines, and +// they were all chrome. + +const CHROME: RegExp[] = [ + /^[─━—-]{6,}$/, // the rules around the prompt box + /^[❯›>]\s*$/, // an empty prompt + /^›\s+Ask Codex to do anything/, + /bypass permissions|shift\+tab to cycle|for shortcuts|← for agents|ctrl\+r to search|esc to interrupt/i, + /^Tip:/, + /new task\? \/clear/, + /\(\d+[KM] context\)|\b\d+% ctx\b/, // Claude Code's status line + /^(GPT|gpt|o\d|codex)[\w.-]* (low|medium|high|minimal)\b.*·/, // Codex's status line + /^✔ Update installed/, + /^\? for shortcuts/, +]; + +/** The pane with trailing agent chrome removed and long indents trimmed. */ +export function paneSummary(tail: string): string { + const lines = tail.replace(/\u00a0/g, " ").split("\n").map((line) => line.replace(/\s+$/, "")); + while (lines.length) { + const line = (lines[lines.length - 1] ?? "").trim(); + if (line === "" || CHROME.some((pattern) => pattern.test(line))) lines.pop(); + else break; + } + // Right-aligned notices are indented by most of a desk terminal's width; + // what is left loses the indent every line shares. + const kept = lines.map((line) => line.replace(/^\s{8,}/, " ")); + const indent = Math.min(...kept.filter((line) => line.trim()).map((line) => line.length - line.trimStart().length)); + return kept.map((line) => line.slice(Number.isFinite(indent) ? indent : 0)).join("\n"); +} diff --git a/frontend/src/sessions/tool-views/describe.test.ts b/frontend/src/sessions/tool-views/describe.test.ts index b743439f..a915440b 100644 --- a/frontend/src/sessions/tool-views/describe.test.ts +++ b/frontend/src/sessions/tool-views/describe.test.ts @@ -64,3 +64,8 @@ test("an unknown tool falls back to its bare name and category 'other', never a assert.equal(summary.category, "other"); assert.equal(summary.subtitle, undefined); }); + +test("Bash leaves the leading cd out of the subtitle", () => { + assert.equal(describeTool("Bash", { command: "cd /home/admin/projects/robowright && git diff --stat" }).subtitle, "git diff --stat"); + assert.equal(describeTool("Bash", { command: "cd /tmp" }).subtitle, "cd /tmp"); +}); diff --git a/frontend/src/sessions/tool-views/describe.ts b/frontend/src/sessions/tool-views/describe.ts index 541c47d1..597643a6 100644 --- a/frontend/src/sessions/tool-views/describe.ts +++ b/frontend/src/sessions/tool-views/describe.ts @@ -83,7 +83,10 @@ export function describeTool( case "Bash": case "GeminiBash": { const cmd = commandOf(input); - return { title: t("conversation.describe.terminal"), subtitle: cmd ? truncate(cmd, 140) : undefined, category: "terminal" }; + // Agents start most commands with `cd &&`; the summary + // shows what runs there, and the full command stays in the card. + const shown = cmd.replace(/^cd\s+("[^"]*"|'[^']*'|\S+)\s*&&\s*/, ""); + return { title: t("conversation.describe.terminal"), subtitle: shown ? truncate(shown, 140) : undefined, category: "terminal" }; } case "exec_command": case "shell": { diff --git a/internal/version/version.go b/internal/version/version.go index 4869f9f8..bf1262c5 100644 --- a/internal/version/version.go +++ b/internal/version/version.go @@ -4,4 +4,4 @@ package version // Version is stamped into the API's /api/health payload and the UI footer. // A release build overrides it from the tag (-X …/internal/version.Version); // this value is what a plain `go build` reports. -var Version = "2.8.0" +var Version = "2.8.1" diff --git a/web/index.html b/web/index.html index 80d150de..67c4574e 100644 --- a/web/index.html +++ b/web/index.html @@ -16,13 +16,13 @@ - + - - + + - +
diff --git a/web/static/react/assets/PaneViews-Dgscpqc9.js b/web/static/react/assets/PaneViews-CCamo9GT.js similarity index 92% rename from web/static/react/assets/PaneViews-Dgscpqc9.js rename to web/static/react/assets/PaneViews-CCamo9GT.js index 6a0c90de..c019ff3a 100644 --- a/web/static/react/assets/PaneViews-Dgscpqc9.js +++ b/web/static/react/assets/PaneViews-CCamo9GT.js @@ -1 +1 @@ -import{r as e}from"./rolldown-runtime-hePW80VL.js";import{$ as t}from"./tokens-zhzSlX7k.js";import{o as n,t as r,x as i}from"./jsx-runtime-CmcDAzcm.js";import{t as a}from"./app-qRUQIX5z.js";import{a as o,c as s,d as c,f as l,i as u,l as d,n as f,o as p,r as m,u as h}from"./Workbench-LkIyaV8C.js";var g=e(i(),1),_=r(),v=e=>new t(`/api/term/session/${e}`);function y({pane:e,session:t,services:r,close:i,mobile:o}){let p=(0,g.useMemo)(()=>v(t),[t]),m=c(`(pointer: coarse)`),[y,b]=l(),x=y.editor===`full`||y.editor===`auto`&&!o&&!m,S=h({api:p,phone:o,notice:r.notice,autosave:y.autosave}),C=e.params.path||``,w=Number(e.params.line)||0;(0,g.useEffect)(()=>{S.openFile(C,w?{line:w,column:Number(e.params.column)||void 0}:void 0,!!w)},[C,e.params.at]),u(p,[d(C)||`.`],!!S.doc,()=>void S.checkDisk());let T=(n,i)=>r.openPane(a(t,n,i),{beside:e.id,edge:o?`center`:`right`});return(0,_.jsx)(`div`,{className:`wb-pane`,children:(0,_.jsx)(s,{docs:S,api:p,positionPrefix:`/api/term/session/${t}`,phone:o,full:x,settings:y,setSettings:b,notice:r.notice,showTabs:!1,onOpenPath:(e,t)=>T(e,t?.line),onWiki:e=>void f(p,e,void 0,()=>{}).then(t=>t?T(t):r.notice(n(`files.noWiki`,{name:e}),!0),()=>r.notice(n(`files.noWiki`,{name:e}),!0)),onClosed:i,linkBase:{origin:location.origin,pathname:`/terminal/session/${t}`}})})}function b({pane:e,session:t,services:n,mobile:r}){let i=(0,g.useMemo)(()=>v(t),[t]),[o,s]=(0,g.useState)({}),[c,l]=(0,g.useState)(0),[d,f]=(0,g.useState)([`.`]),h=(0,g.useRef)(``),y=(0,g.useCallback)(()=>l(e=>e+1),[]);(0,g.useEffect)(()=>{i.gitStatus().then(e=>s(e.status),()=>{})},[i,c]),u(i,d,!0,y);let b=m(i,n.notice,y,e.title),x=i=>{let o=a(t,i),s=h.current&&h.current!==o.id?h.current:``;n.openPane(o,s?{beside:s,edge:`center`}:{beside:e.id,edge:r?`center`:`right`}),h.current=o.id};return(0,_.jsx)(`div`,{className:`wb-pane wb-panel wb-pane-explorer`,children:(0,_.jsx)(p,{api:i,storageKey:`lec-files-open:pane:`+t,title:n.sessions.find(e=>e.id===t)?.name||e.title,revision:c,status:o,onExpanded:f,actions:{...b,open:x,changed:()=>y()}})})}function x({pane:e,session:t,services:n,mobile:r,shown:i}){let s=(0,g.useMemo)(()=>v(t),[t]);return(0,_.jsx)(`div`,{className:`wb-pane wb-panel wb-pane-search`,children:(0,_.jsx)(o,{api:s,visible:i,focusKey:0,onOpen:i=>n.openPane(a(t,i.path,i.line,i.column),{beside:e.id,edge:r?`center`:`right`})})})}export{b as ExplorerPane,y as FilePane,x as SearchPane}; \ No newline at end of file +import{r as e}from"./rolldown-runtime-hePW80VL.js";import{$ as t}from"./tokens-Dwwo-z6R.js";import{o as n,t as r,x as i}from"./jsx-runtime-DpvgX3dj.js";import{t as a}from"./app-DdKdlzbj.js";import{a as o,c as s,d as c,f as l,i as u,l as d,n as f,o as p,r as m,u as h}from"./Workbench-Bp7HqSdK.js";var g=e(i(),1),_=r(),v=e=>new t(`/api/term/session/${e}`);function y({pane:e,session:t,services:r,close:i,mobile:o}){let p=(0,g.useMemo)(()=>v(t),[t]),m=c(`(pointer: coarse)`),[y,b]=l(),x=y.editor===`full`||y.editor===`auto`&&!o&&!m,S=h({api:p,phone:o,notice:r.notice,autosave:y.autosave}),C=e.params.path||``,w=Number(e.params.line)||0;(0,g.useEffect)(()=>{S.openFile(C,w?{line:w,column:Number(e.params.column)||void 0}:void 0,!!w)},[C,e.params.at]),u(p,[d(C)||`.`],!!S.doc,()=>void S.checkDisk());let T=(n,i)=>r.openPane(a(t,n,i),{beside:e.id,edge:o?`center`:`right`});return(0,_.jsx)(`div`,{className:`wb-pane`,children:(0,_.jsx)(s,{docs:S,api:p,positionPrefix:`/api/term/session/${t}`,phone:o,full:x,settings:y,setSettings:b,notice:r.notice,showTabs:!1,onOpenPath:(e,t)=>T(e,t?.line),onWiki:e=>void f(p,e,void 0,()=>{}).then(t=>t?T(t):r.notice(n(`files.noWiki`,{name:e}),!0),()=>r.notice(n(`files.noWiki`,{name:e}),!0)),onClosed:i,linkBase:{origin:location.origin,pathname:`/terminal/session/${t}`}})})}function b({pane:e,session:t,services:n,mobile:r}){let i=(0,g.useMemo)(()=>v(t),[t]),[o,s]=(0,g.useState)({}),[c,l]=(0,g.useState)(0),[d,f]=(0,g.useState)([`.`]),h=(0,g.useRef)(``),y=(0,g.useCallback)(()=>l(e=>e+1),[]);(0,g.useEffect)(()=>{i.gitStatus().then(e=>s(e.status),()=>{})},[i,c]),u(i,d,!0,y);let b=m(i,n.notice,y,e.title),x=i=>{let o=a(t,i),s=h.current&&h.current!==o.id?h.current:``;n.openPane(o,s?{beside:s,edge:`center`}:{beside:e.id,edge:r?`center`:`right`}),h.current=o.id};return(0,_.jsx)(`div`,{className:`wb-pane wb-panel wb-pane-explorer`,children:(0,_.jsx)(p,{api:i,storageKey:`lec-files-open:pane:`+t,title:n.sessions.find(e=>e.id===t)?.name||e.title,revision:c,status:o,onExpanded:f,actions:{...b,open:x,changed:()=>y()}})})}function x({pane:e,session:t,services:n,mobile:r,shown:i}){let s=(0,g.useMemo)(()=>v(t),[t]);return(0,_.jsx)(`div`,{className:`wb-pane wb-panel wb-pane-search`,children:(0,_.jsx)(o,{api:s,visible:i,focusKey:0,onOpen:i=>n.openPane(a(t,i.path,i.line,i.column),{beside:e.id,edge:r?`center`:`right`})})})}export{b as ExplorerPane,y as FilePane,x as SearchPane}; \ No newline at end of file diff --git a/web/static/react/assets/RichMarkdown-CTHXOnWq.js b/web/static/react/assets/RichMarkdown-Dk2rttMD.js similarity index 99% rename from web/static/react/assets/RichMarkdown-CTHXOnWq.js rename to web/static/react/assets/RichMarkdown-Dk2rttMD.js index 145a1e80..da231446 100644 --- a/web/static/react/assets/RichMarkdown-CTHXOnWq.js +++ b/web/static/react/assets/RichMarkdown-Dk2rttMD.js @@ -1,4 +1,4 @@ -import{r as e}from"./rolldown-runtime-hePW80VL.js";import{o as t,t as n,x as r}from"./jsx-runtime-CmcDAzcm.js";import{n as i}from"./markdown-model-hifq6-C0.js";var a=Object.defineProperty,o=(e,t)=>{let n={};for(var r in e)a(n,r,{get:e[r],enumerable:!0});return t||a(n,Symbol.toStringTag,{value:`Module`}),n};function s(e){this.content=e}s.prototype={constructor:s,find:function(e){for(var t=0;t>1}},s.from=function(e){if(e instanceof s)return e;var t=[];if(e)for(var n in e)t.push(n,e[n]);return new s(t)};function c(e,t,n){for(let r=0;;r++){if(r==e.childCount||r==t.childCount)return e.childCount==t.childCount?null:n;let i=e.child(r),a=t.child(r);if(i==a){n+=i.nodeSize;continue}if(!i.sameMarkup(a))return n;if(i.isText&&i.text!=a.text){let e=i.text,t=a.text,r=0;for(;e[r]==t[r];r++)n++;return r&&r0&&a>0&&e[i-1]==t[a-1];)i--,a--,n--,r--;return i&&a&&i=56320&&e<57344}function d(e){return e>=55296&&e<56320}var f=class e{constructor(e,t){if(this.content=e,this.size=t||0,t==null)for(let t=0;te&&n(s,r+o,i||null,a)!==!1&&s.content.size){let i=o+1;s.nodesBetween(Math.max(0,e-i),Math.min(s.content.size,t-i),n,r+i)}o=c}}descendants(e){this.nodesBetween(0,this.size,e)}textBetween(e,t,n,r){let i=``,a=!0;return this.nodesBetween(e,t,(o,s)=>{let c=o.isText?o.text.slice(Math.max(e,s)-s,t-s):o.isLeaf?r?typeof r==`function`?r(o):r:o.type.spec.leafText?o.type.spec.leafText(o):``:``;o.isBlock&&(o.isLeaf&&c||o.isTextblock)&&n&&(a?a=!1:i+=n),i+=c},0),i}append(t){if(!t.size)return this;if(!this.size)return t;let n=this.lastChild,r=t.firstChild,i=this.content.slice(),a=0;for(n.isText&&n.sameMarkup(r)&&(i[i.length-1]=n.withText(n.text+r.text),a=1);at)for(let e=0,a=0;at&&((an)&&(o=o.isText?o.cut(Math.max(0,t-a),Math.min(o.text.length,n-a)):o.cut(Math.max(0,t-a-1),Math.min(o.content.size,n-a-1))),r.push(o),i+=o.nodeSize),a=s}return new e(r,i)}cutByIndex(t,n){return t==n?e.empty:t==0&&n==this.content.length?this:new e(this.content.slice(t,n))}replaceChild(t,n){let r=this.content[t];if(r==n)return this;let i=this.content.slice(),a=this.size+n.nodeSize-r.nodeSize;return i[t]=n,new e(i,a)}addToStart(t){return new e([t].concat(this.content),this.size+t.nodeSize)}addToEnd(t){return new e(this.content.concat(t),this.size+t.nodeSize)}eq(e){if(this.content.length!=e.content.length)return!1;for(let t=0;tthis.size||e<0)throw RangeError(`Position ${e} outside of fragment (${this})`);for(let t=0,n=0;;t++){let r=this.child(t),i=n+r.nodeSize;if(i>=e)return i==e?m(t+1,i):m(t,n);n=i}}toString(){return`<`+this.toStringInner()+`>`}toStringInner(){return this.content.join(`, `)}toJSON(){return this.content.length?this.content.map(e=>e.toJSON()):null}static fromJSON(t,n){if(!n)return e.empty;if(!Array.isArray(n))throw RangeError(`Invalid input for Fragment.fromJSON`);return e.fromArray(n.map(t.nodeFromJSON))}static fromArray(t){if(!t.length)return e.empty;let n,r=0;for(let e=0;ethis.type.rank&&(t||=e.slice(0,r),t.push(this),n=!0),t&&t.push(i)}return t||=e.slice(),n||t.push(this),t}removeFromSet(e){for(let t=0;te.type.rank-t.type.rank),n}};g.none=[];var _=class extends Error{},v=class e{constructor(e,t,n){this.content=e,this.openStart=t,this.openEnd=n}get size(){return this.content.size-this.openStart-this.openEnd}insertAt(t,n){let r=b(this.content,t+this.openStart,n,this.openStart+1,this.openEnd+1);return r&&new e(r,this.openStart,this.openEnd)}removeBetween(t,n){return new e(y(this.content,t+this.openStart,n+this.openStart),this.openStart,this.openEnd)}eq(e){return this.content.eq(e.content)&&this.openStart==e.openStart&&this.openEnd==e.openEnd}toString(){return this.content+`(`+this.openStart+`,`+this.openEnd+`)`}toJSON(){if(!this.content.size)return null;let e={content:this.content.toJSON()};return this.openStart>0&&(e.openStart=this.openStart),this.openEnd>0&&(e.openEnd=this.openEnd),e}static fromJSON(t,n){if(!n)return e.empty;let r=n.openStart||0,i=n.openEnd||0;if(typeof r!=`number`||typeof i!=`number`)throw RangeError(`Invalid input for Slice.fromJSON`);return new e(f.fromJSON(t,n.content),r,i)}static maxOpen(t,n=!0){let r=0,i=0;for(let e=t.firstChild;e&&!e.isLeaf&&(n||!e.type.spec.isolating);e=e.firstChild)r++;for(let e=t.lastChild;e&&!e.isLeaf&&(n||!e.type.spec.isolating);e=e.lastChild)i++;return new e(t,r,i)}};v.empty=new v(f.empty,0,0);function y(e,t,n){let{index:r,offset:i}=e.findIndex(t),a=e.maybeChild(r),{index:o,offset:s}=e.findIndex(n);if(i==t||a.isText){if(s!=n&&!e.child(o).isText)throw RangeError(`Removing non-flat range`);return e.cut(0,t).append(e.cut(n))}if(r!=o)throw RangeError(`Removing non-flat range`);return e.replaceChild(r,a.copy(y(a.content,t-i-1,n-i-1)))}function b(e,t,n,r,i,a){let{index:o,offset:s}=e.findIndex(t),c=e.maybeChild(o);if(s==t||c.isText)return a&&r<=0&&i<=0&&!a.canReplace(o,o,n)?null:e.cut(0,t).append(n).append(e.cut(t));let l=b(c.content,t-s-1,n,o==0?r-1:0,o==e.childCount-1?i-1:0,c);return l&&e.replaceChild(o,c.copy(l))}function ee(e,t,n){if(n.openStart>e.depth)throw new _(`Inserted content deeper than insertion position`);if(e.depth-n.openStart!=t.depth-n.openEnd)throw new _(`Inconsistent open depths`);return te(e,t,n,0)}function te(e,t,n,r){let i=e.index(r),a=e.node(r);if(i==t.index(r)&&r=0&&e.isText&&e.sameMarkup(t[n])?t[n]=e.withText(t[n].text+e.text):t.push(e)}function ae(e,t,n,r){let i=(t||e).node(n),a=0,o=t?t.index(n):i.childCount;e&&(a=e.index(n),e.depth>n?a++:e.textOffset&&(ie(e.nodeAfter,r),a++));for(let e=a;ei&&re(e,t,i+1),o=r.depth>i&&re(n,r,i+1),s=[];return ae(null,e,i,s),a&&o&&t.index(i)==n.index(i)?(ne(a,o),ie(oe(a,se(e,t,n,r,i+1)),s)):(a&&ie(oe(a,ce(e,t,i+1)),s),ae(t,n,i,s),o&&ie(oe(o,ce(n,r,i+1)),s)),ae(r,null,i,s),new f(s)}function ce(e,t,n){let r=[];return ae(null,e,n,r),e.depth>n&&ie(oe(re(e,t,n+1),ce(e,t,n+1)),r),ae(t,null,n,r),new f(r)}function le(e,t){let n=t.depth-e.openStart,r=t.node(n).copy(e.content);for(let e=n-1;e>=0;e--)r=t.node(e).copy(f.from(r));return{start:r.resolveNoCache(e.openStart+n),end:r.resolveNoCache(r.content.size-e.openEnd-n)}}var ue=class e{constructor(e,t,n){this.pos=e,this.path=t,this.parentOffset=n,this.depth=t.length/3-1}resolveDepth(e){return e==null?this.depth:e<0?this.depth+e:e}get parent(){return this.node(this.depth)}get doc(){return this.node(0)}node(e){return this.path[this.resolveDepth(e)*3]}index(e){return this.path[this.resolveDepth(e)*3+1]}indexAfter(e){return e=this.resolveDepth(e),this.index(e)+(e==this.depth&&!this.textOffset?0:1)}start(e){return e=this.resolveDepth(e),e==0?0:this.path[e*3-1]+1}end(e){return e=this.resolveDepth(e),this.start(e)+this.node(e).content.size}before(e){if(e=this.resolveDepth(e),!e)throw RangeError(`There is no position before the top-level node`);return e==this.depth+1?this.pos:this.path[e*3-1]}after(e){if(e=this.resolveDepth(e),!e)throw RangeError(`There is no position after the top-level node`);return e==this.depth+1?this.pos:this.path[e*3-1]+this.path[e*3].nodeSize}get textOffset(){return this.pos-this.path[this.path.length-1]}get nodeAfter(){let e=this.parent,t=this.index(this.depth);if(t==e.childCount)return null;let n=this.pos-this.path[this.path.length-1],r=e.child(t);return n?e.child(t).cut(n):r}get nodeBefore(){let e=this.index(this.depth),t=this.pos-this.path[this.path.length-1];return t?this.parent.child(e).cut(0,t):e==0?null:this.parent.child(e-1)}posAtIndex(e,t){t=this.resolveDepth(t);let n=this.path[t*3],r=t==0?0:this.path[t*3-1]+1;for(let t=0;t0;t--)if(this.start(t)<=e&&this.end(t)>=e)return t;return 0}blockRange(e=this,t){if(e.pos=0;n--)if(e.pos<=this.end(n)&&(!t||t(this.node(n))))return new me(this,e,n);return null}sameParent(e){return this.pos-this.parentOffset==e.pos-e.parentOffset}max(e){return e.pos>this.pos?e:this}min(e){return e.pos=0&&n<=t.content.size))throw RangeError(`Position `+n+` out of range`);let r=[],i=0,a=n;for(let e=t;;){let{index:t,offset:n}=e.content.findIndex(a),o=a-n;if(r.push(e,t,i+n),!o||(e=e.child(t),e.isText))break;a=o-1,i+=n+1}return new e(n,r,a)}static resolveCached(t,n){let r=pe.get(t);if(r)for(let e=0;ee&&this.nodesBetween(e,t,e=>(n.isInSet(e.marks)&&(r=!0),!r)),r}get isBlock(){return this.type.isBlock}get isTextblock(){return this.type.isTextblock}get inlineContent(){return this.type.inlineContent}get isInline(){return this.type.isInline}get isText(){return this.type.isText}get isLeaf(){return this.type.isLeaf}get isAtom(){return this.type.isAtom}toString(){if(this.type.spec.toDebugString)return this.type.spec.toDebugString(this);let e=this.type.name;return this.content.size&&(e+=`(`+this.content.toStringInner()+`)`),ve(this.marks,e)}contentMatchAt(e){let t=this.type.contentMatch.matchFragment(this.content,0,e);if(!t)throw Error(`Called contentMatchAt on a node with invalid content`);return t}canReplace(e,t,n=f.empty,r=0,i=n.childCount){let a=this.contentMatchAt(e).matchFragment(n,r,i),o=a&&a.matchFragment(this.content,t);if(!o||!o.validEnd)return!1;for(let e=r;ee.type.name)}`);this.content.forEach(e=>e.check())}toJSON(){let e={type:this.type.name};for(let t in this.attrs){e.attrs=this.attrs;break}return this.content.size&&(e.content=this.content.toJSON()),this.marks.length&&(e.marks=this.marks.map(e=>e.toJSON())),e}static fromJSON(e,t){if(!t)throw RangeError(`Invalid input for Node.fromJSON`);let n;if(t.marks){if(!Array.isArray(t.marks))throw RangeError(`Invalid mark data for Node.fromJSON`);n=t.marks.map(e.markFromJSON)}if(t.type==`text`){if(typeof t.text!=`string`)throw RangeError(`Invalid text node in JSON`);return e.text(t.text,n)}let r=f.fromJSON(e,t.content);return e.nodeType(t.type).create(t.attrs,r,n)}};ge.prototype.text=void 0;var _e=class e extends ge{constructor(e,t,n,r){if(super(e,t,null,r),!n)throw RangeError(`Empty text nodes are not allowed`);this.text=n}toString(){return this.type.spec.toDebugString?this.type.spec.toDebugString(this):ve(this.marks,JSON.stringify(this.text))}get textContent(){return this.text}textBetween(e,t){return this.text.slice(e,t)}get nodeSize(){return this.text.length}mark(t){return t==this.marks?this:new e(this.type,this.attrs,this.text,t)}withText(t){return t==this.text?this:new e(this.type,this.attrs,t,this.marks)}cut(e=0,t=this.text.length){return e==0&&t==this.text.length?this:this.withText(this.text.slice(e,t))}eq(e){return this.sameMarkup(e)&&this.text==e.text}toJSON(){let e=super.toJSON();return e.text=this.text,e}};function ve(e,t){for(let n=e.length-1;n>=0;n--)t=e[n].type.name+`(`+t+`)`;return t}function ye(e,t,n,r){for(let i in t)if(!(i in e))throw RangeError(`Unsupported attribute ${i} for ${n} of type ${r}`);for(let n in e)e[n].validate&&e[n].validate(t[n])}var be=class e{constructor(e){this.validEnd=e,this.next=[],this.wrapCache=[]}static parse(t,n){let r=new xe(t,n);if(r.next==null)return e.empty;let i=Se(r);r.next&&r.err(`Unexpected trailing text`);let a=Me(ke(i));return Ne(a,r),a}matchType(e){for(let t=0;te.createAndFill()));for(let e=0;e=this.next.length)throw RangeError(`There's no ${e}th edge in this content match`);return this.next[e]}toString(){let e=[];function t(n){e.push(n);for(let r=0;r{let r=n+(t.validEnd?`*`:` `)+` `;for(let n=0;n`+e.indexOf(t.next[n].next);return r}).join(` +import{r as e}from"./rolldown-runtime-hePW80VL.js";import{o as t,t as n,x as r}from"./jsx-runtime-DpvgX3dj.js";import{n as i}from"./markdown-model-hifq6-C0.js";var a=Object.defineProperty,o=(e,t)=>{let n={};for(var r in e)a(n,r,{get:e[r],enumerable:!0});return t||a(n,Symbol.toStringTag,{value:`Module`}),n};function s(e){this.content=e}s.prototype={constructor:s,find:function(e){for(var t=0;t>1}},s.from=function(e){if(e instanceof s)return e;var t=[];if(e)for(var n in e)t.push(n,e[n]);return new s(t)};function c(e,t,n){for(let r=0;;r++){if(r==e.childCount||r==t.childCount)return e.childCount==t.childCount?null:n;let i=e.child(r),a=t.child(r);if(i==a){n+=i.nodeSize;continue}if(!i.sameMarkup(a))return n;if(i.isText&&i.text!=a.text){let e=i.text,t=a.text,r=0;for(;e[r]==t[r];r++)n++;return r&&r0&&a>0&&e[i-1]==t[a-1];)i--,a--,n--,r--;return i&&a&&i=56320&&e<57344}function d(e){return e>=55296&&e<56320}var f=class e{constructor(e,t){if(this.content=e,this.size=t||0,t==null)for(let t=0;te&&n(s,r+o,i||null,a)!==!1&&s.content.size){let i=o+1;s.nodesBetween(Math.max(0,e-i),Math.min(s.content.size,t-i),n,r+i)}o=c}}descendants(e){this.nodesBetween(0,this.size,e)}textBetween(e,t,n,r){let i=``,a=!0;return this.nodesBetween(e,t,(o,s)=>{let c=o.isText?o.text.slice(Math.max(e,s)-s,t-s):o.isLeaf?r?typeof r==`function`?r(o):r:o.type.spec.leafText?o.type.spec.leafText(o):``:``;o.isBlock&&(o.isLeaf&&c||o.isTextblock)&&n&&(a?a=!1:i+=n),i+=c},0),i}append(t){if(!t.size)return this;if(!this.size)return t;let n=this.lastChild,r=t.firstChild,i=this.content.slice(),a=0;for(n.isText&&n.sameMarkup(r)&&(i[i.length-1]=n.withText(n.text+r.text),a=1);at)for(let e=0,a=0;at&&((an)&&(o=o.isText?o.cut(Math.max(0,t-a),Math.min(o.text.length,n-a)):o.cut(Math.max(0,t-a-1),Math.min(o.content.size,n-a-1))),r.push(o),i+=o.nodeSize),a=s}return new e(r,i)}cutByIndex(t,n){return t==n?e.empty:t==0&&n==this.content.length?this:new e(this.content.slice(t,n))}replaceChild(t,n){let r=this.content[t];if(r==n)return this;let i=this.content.slice(),a=this.size+n.nodeSize-r.nodeSize;return i[t]=n,new e(i,a)}addToStart(t){return new e([t].concat(this.content),this.size+t.nodeSize)}addToEnd(t){return new e(this.content.concat(t),this.size+t.nodeSize)}eq(e){if(this.content.length!=e.content.length)return!1;for(let t=0;tthis.size||e<0)throw RangeError(`Position ${e} outside of fragment (${this})`);for(let t=0,n=0;;t++){let r=this.child(t),i=n+r.nodeSize;if(i>=e)return i==e?m(t+1,i):m(t,n);n=i}}toString(){return`<`+this.toStringInner()+`>`}toStringInner(){return this.content.join(`, `)}toJSON(){return this.content.length?this.content.map(e=>e.toJSON()):null}static fromJSON(t,n){if(!n)return e.empty;if(!Array.isArray(n))throw RangeError(`Invalid input for Fragment.fromJSON`);return e.fromArray(n.map(t.nodeFromJSON))}static fromArray(t){if(!t.length)return e.empty;let n,r=0;for(let e=0;ethis.type.rank&&(t||=e.slice(0,r),t.push(this),n=!0),t&&t.push(i)}return t||=e.slice(),n||t.push(this),t}removeFromSet(e){for(let t=0;te.type.rank-t.type.rank),n}};g.none=[];var _=class extends Error{},v=class e{constructor(e,t,n){this.content=e,this.openStart=t,this.openEnd=n}get size(){return this.content.size-this.openStart-this.openEnd}insertAt(t,n){let r=b(this.content,t+this.openStart,n,this.openStart+1,this.openEnd+1);return r&&new e(r,this.openStart,this.openEnd)}removeBetween(t,n){return new e(y(this.content,t+this.openStart,n+this.openStart),this.openStart,this.openEnd)}eq(e){return this.content.eq(e.content)&&this.openStart==e.openStart&&this.openEnd==e.openEnd}toString(){return this.content+`(`+this.openStart+`,`+this.openEnd+`)`}toJSON(){if(!this.content.size)return null;let e={content:this.content.toJSON()};return this.openStart>0&&(e.openStart=this.openStart),this.openEnd>0&&(e.openEnd=this.openEnd),e}static fromJSON(t,n){if(!n)return e.empty;let r=n.openStart||0,i=n.openEnd||0;if(typeof r!=`number`||typeof i!=`number`)throw RangeError(`Invalid input for Slice.fromJSON`);return new e(f.fromJSON(t,n.content),r,i)}static maxOpen(t,n=!0){let r=0,i=0;for(let e=t.firstChild;e&&!e.isLeaf&&(n||!e.type.spec.isolating);e=e.firstChild)r++;for(let e=t.lastChild;e&&!e.isLeaf&&(n||!e.type.spec.isolating);e=e.lastChild)i++;return new e(t,r,i)}};v.empty=new v(f.empty,0,0);function y(e,t,n){let{index:r,offset:i}=e.findIndex(t),a=e.maybeChild(r),{index:o,offset:s}=e.findIndex(n);if(i==t||a.isText){if(s!=n&&!e.child(o).isText)throw RangeError(`Removing non-flat range`);return e.cut(0,t).append(e.cut(n))}if(r!=o)throw RangeError(`Removing non-flat range`);return e.replaceChild(r,a.copy(y(a.content,t-i-1,n-i-1)))}function b(e,t,n,r,i,a){let{index:o,offset:s}=e.findIndex(t),c=e.maybeChild(o);if(s==t||c.isText)return a&&r<=0&&i<=0&&!a.canReplace(o,o,n)?null:e.cut(0,t).append(n).append(e.cut(t));let l=b(c.content,t-s-1,n,o==0?r-1:0,o==e.childCount-1?i-1:0,c);return l&&e.replaceChild(o,c.copy(l))}function ee(e,t,n){if(n.openStart>e.depth)throw new _(`Inserted content deeper than insertion position`);if(e.depth-n.openStart!=t.depth-n.openEnd)throw new _(`Inconsistent open depths`);return te(e,t,n,0)}function te(e,t,n,r){let i=e.index(r),a=e.node(r);if(i==t.index(r)&&r=0&&e.isText&&e.sameMarkup(t[n])?t[n]=e.withText(t[n].text+e.text):t.push(e)}function ae(e,t,n,r){let i=(t||e).node(n),a=0,o=t?t.index(n):i.childCount;e&&(a=e.index(n),e.depth>n?a++:e.textOffset&&(ie(e.nodeAfter,r),a++));for(let e=a;ei&&re(e,t,i+1),o=r.depth>i&&re(n,r,i+1),s=[];return ae(null,e,i,s),a&&o&&t.index(i)==n.index(i)?(ne(a,o),ie(oe(a,se(e,t,n,r,i+1)),s)):(a&&ie(oe(a,ce(e,t,i+1)),s),ae(t,n,i,s),o&&ie(oe(o,ce(n,r,i+1)),s)),ae(r,null,i,s),new f(s)}function ce(e,t,n){let r=[];return ae(null,e,n,r),e.depth>n&&ie(oe(re(e,t,n+1),ce(e,t,n+1)),r),ae(t,null,n,r),new f(r)}function le(e,t){let n=t.depth-e.openStart,r=t.node(n).copy(e.content);for(let e=n-1;e>=0;e--)r=t.node(e).copy(f.from(r));return{start:r.resolveNoCache(e.openStart+n),end:r.resolveNoCache(r.content.size-e.openEnd-n)}}var ue=class e{constructor(e,t,n){this.pos=e,this.path=t,this.parentOffset=n,this.depth=t.length/3-1}resolveDepth(e){return e==null?this.depth:e<0?this.depth+e:e}get parent(){return this.node(this.depth)}get doc(){return this.node(0)}node(e){return this.path[this.resolveDepth(e)*3]}index(e){return this.path[this.resolveDepth(e)*3+1]}indexAfter(e){return e=this.resolveDepth(e),this.index(e)+(e==this.depth&&!this.textOffset?0:1)}start(e){return e=this.resolveDepth(e),e==0?0:this.path[e*3-1]+1}end(e){return e=this.resolveDepth(e),this.start(e)+this.node(e).content.size}before(e){if(e=this.resolveDepth(e),!e)throw RangeError(`There is no position before the top-level node`);return e==this.depth+1?this.pos:this.path[e*3-1]}after(e){if(e=this.resolveDepth(e),!e)throw RangeError(`There is no position after the top-level node`);return e==this.depth+1?this.pos:this.path[e*3-1]+this.path[e*3].nodeSize}get textOffset(){return this.pos-this.path[this.path.length-1]}get nodeAfter(){let e=this.parent,t=this.index(this.depth);if(t==e.childCount)return null;let n=this.pos-this.path[this.path.length-1],r=e.child(t);return n?e.child(t).cut(n):r}get nodeBefore(){let e=this.index(this.depth),t=this.pos-this.path[this.path.length-1];return t?this.parent.child(e).cut(0,t):e==0?null:this.parent.child(e-1)}posAtIndex(e,t){t=this.resolveDepth(t);let n=this.path[t*3],r=t==0?0:this.path[t*3-1]+1;for(let t=0;t0;t--)if(this.start(t)<=e&&this.end(t)>=e)return t;return 0}blockRange(e=this,t){if(e.pos=0;n--)if(e.pos<=this.end(n)&&(!t||t(this.node(n))))return new me(this,e,n);return null}sameParent(e){return this.pos-this.parentOffset==e.pos-e.parentOffset}max(e){return e.pos>this.pos?e:this}min(e){return e.pos=0&&n<=t.content.size))throw RangeError(`Position `+n+` out of range`);let r=[],i=0,a=n;for(let e=t;;){let{index:t,offset:n}=e.content.findIndex(a),o=a-n;if(r.push(e,t,i+n),!o||(e=e.child(t),e.isText))break;a=o-1,i+=n+1}return new e(n,r,a)}static resolveCached(t,n){let r=pe.get(t);if(r)for(let e=0;ee&&this.nodesBetween(e,t,e=>(n.isInSet(e.marks)&&(r=!0),!r)),r}get isBlock(){return this.type.isBlock}get isTextblock(){return this.type.isTextblock}get inlineContent(){return this.type.inlineContent}get isInline(){return this.type.isInline}get isText(){return this.type.isText}get isLeaf(){return this.type.isLeaf}get isAtom(){return this.type.isAtom}toString(){if(this.type.spec.toDebugString)return this.type.spec.toDebugString(this);let e=this.type.name;return this.content.size&&(e+=`(`+this.content.toStringInner()+`)`),ve(this.marks,e)}contentMatchAt(e){let t=this.type.contentMatch.matchFragment(this.content,0,e);if(!t)throw Error(`Called contentMatchAt on a node with invalid content`);return t}canReplace(e,t,n=f.empty,r=0,i=n.childCount){let a=this.contentMatchAt(e).matchFragment(n,r,i),o=a&&a.matchFragment(this.content,t);if(!o||!o.validEnd)return!1;for(let e=r;ee.type.name)}`);this.content.forEach(e=>e.check())}toJSON(){let e={type:this.type.name};for(let t in this.attrs){e.attrs=this.attrs;break}return this.content.size&&(e.content=this.content.toJSON()),this.marks.length&&(e.marks=this.marks.map(e=>e.toJSON())),e}static fromJSON(e,t){if(!t)throw RangeError(`Invalid input for Node.fromJSON`);let n;if(t.marks){if(!Array.isArray(t.marks))throw RangeError(`Invalid mark data for Node.fromJSON`);n=t.marks.map(e.markFromJSON)}if(t.type==`text`){if(typeof t.text!=`string`)throw RangeError(`Invalid text node in JSON`);return e.text(t.text,n)}let r=f.fromJSON(e,t.content);return e.nodeType(t.type).create(t.attrs,r,n)}};ge.prototype.text=void 0;var _e=class e extends ge{constructor(e,t,n,r){if(super(e,t,null,r),!n)throw RangeError(`Empty text nodes are not allowed`);this.text=n}toString(){return this.type.spec.toDebugString?this.type.spec.toDebugString(this):ve(this.marks,JSON.stringify(this.text))}get textContent(){return this.text}textBetween(e,t){return this.text.slice(e,t)}get nodeSize(){return this.text.length}mark(t){return t==this.marks?this:new e(this.type,this.attrs,this.text,t)}withText(t){return t==this.text?this:new e(this.type,this.attrs,t,this.marks)}cut(e=0,t=this.text.length){return e==0&&t==this.text.length?this:this.withText(this.text.slice(e,t))}eq(e){return this.sameMarkup(e)&&this.text==e.text}toJSON(){let e=super.toJSON();return e.text=this.text,e}};function ve(e,t){for(let n=e.length-1;n>=0;n--)t=e[n].type.name+`(`+t+`)`;return t}function ye(e,t,n,r){for(let i in t)if(!(i in e))throw RangeError(`Unsupported attribute ${i} for ${n} of type ${r}`);for(let n in e)e[n].validate&&e[n].validate(t[n])}var be=class e{constructor(e){this.validEnd=e,this.next=[],this.wrapCache=[]}static parse(t,n){let r=new xe(t,n);if(r.next==null)return e.empty;let i=Se(r);r.next&&r.err(`Unexpected trailing text`);let a=Me(ke(i));return Ne(a,r),a}matchType(e){for(let t=0;te.createAndFill()));for(let e=0;e=this.next.length)throw RangeError(`There's no ${e}th edge in this content match`);return this.next[e]}toString(){let e=[];function t(n){e.push(n);for(let r=0;r{let r=n+(t.validEnd?`*`:` `)+` `;for(let n=0;n`+e.indexOf(t.next[n].next);return r}).join(` `)}};be.empty=new be(!0);var xe=class{constructor(e,t){this.string=e,this.nodeTypes=t,this.inline=null,this.pos=0,this.tokens=e.split(/\s*(?=\b|\W|$)/),this.tokens[this.tokens.length-1]==``&&this.tokens.pop(),this.tokens[0]==``&&this.tokens.shift()}get next(){return this.tokens[this.pos]}eat(e){return this.next==e&&(this.pos++||!0)}err(e){throw SyntaxError(e+` (in content expression '`+this.string+`')`)}};function Se(e){let t=[];do t.push(Ce(e));while(e.eat(`|`));return t.length==1?t[0]:{type:`choice`,exprs:t}}function Ce(e){let t=[];do t.push(we(e));while(e.next&&e.next!=`)`&&e.next!=`|`);return t.length==1?t[0]:{type:`seq`,exprs:t}}function we(e){let t=Oe(e);for(;;)if(e.eat(`+`))t={type:`plus`,expr:t};else if(e.eat(`*`))t={type:`star`,expr:t};else if(e.eat(`?`))t={type:`opt`,expr:t};else if(e.eat(`{`))t=Ee(e,t);else break;return t}function Te(e){/\D/.test(e.next)&&e.err(`Expected number, got '`+e.next+`'`);let t=Number(e.next);return e.pos++,t}function Ee(e,t){let n=Te(e),r=n;return e.eat(`,`)&&(r=e.next==`}`?-1:Te(e)),e.eat(`}`)||e.err(`Unclosed braced range`),{type:`range`,min:n,max:r,expr:t}}function De(e,t){let n=e.nodeTypes,r=n[t];if(r)return[r];let i=[];for(let e in n){let r=n[e];r.isInGroup(t)&&i.push(r)}return i.length==0&&e.err(`No node type or group '`+t+`' found`),i}function Oe(e){if(e.eat(`(`)){let t=Se(e);return e.eat(`)`)||e.err(`Missing closing paren`),t}if(/\W/.test(e.next))e.err(`Unexpected token '`+e.next+`'`);else{let t=De(e,e.next).map(t=>(e.inline==null?e.inline=t.isInline:e.inline!=t.isInline&&e.err(`Mixing inline and block content`),{type:`name`,value:t}));return e.pos++,t.length==1?t[0]:{type:`choice`,exprs:t}}}function ke(e){let t=[[]];return i(a(e,0),n()),t;function n(){return t.push([])-1}function r(e,n,r){let i={term:r,to:n};return t[e].push(i),i}function i(e,t){e.forEach(e=>e.to=t)}function a(e,t){if(e.type==`choice`)return e.exprs.reduce((e,n)=>e.concat(a(n,t)),[]);if(e.type==`seq`)for(let r=0;;r++){let o=a(e.exprs[r],t);if(r==e.exprs.length-1)return o;i(o,t=n())}else if(e.type==`star`){let o=n();return r(t,o),i(a(e.expr,o),o),[r(o)]}else if(e.type==`plus`){let o=n();return i(a(e.expr,t),o),i(a(e.expr,o),o),[r(o)]}else if(e.type==`opt`)return[r(t)].concat(a(e.expr,t));else if(e.type==`range`){let o=t;for(let t=0;t{e[t].forEach(({term:t,to:n})=>{if(!t)return;let r;for(let e=0;e{r||i.push([t,r=[]]),r.indexOf(e)==-1&&r.push(e)})})});let a=t[r.join(`,`)]=new be(r.indexOf(e.length-1)>-1);for(let e=0;e-1}get whitespace(){return this.spec.whitespace||(this.spec.code?`pre`:`normal`)}hasRequiredAttrs(){for(let e in this.attrs)if(this.attrs[e].isRequired)return!0;return!1}compatibleContent(e){return this==e||this.contentMatch.compatible(e.contentMatch)}computeAttrs(e){return!e&&this.defaultAttrs?this.defaultAttrs:Fe(this.attrs,e)}create(e=null,t,n){if(this.isText)throw Error(`NodeType.create can't construct text nodes`);return new ge(this,this.computeAttrs(e),f.from(t),g.setFrom(n))}createChecked(e=null,t,n){return t=f.from(t),this.checkContent(t),new ge(this,this.computeAttrs(e),t,g.setFrom(n))}createAndFill(e=null,t,n){if(e=this.computeAttrs(e),t=f.from(t),t.size){let e=this.contentMatch.fillBefore(t);if(!e)return null;t=e.append(t)}let r=this.contentMatch.matchFragment(t),i=r&&r.fillBefore(f.empty,!0);return i?new ge(this,e,t.append(i),g.setFrom(n)):null}validContent(e){let t=this.contentMatch.matchFragment(e);if(!t||!t.validEnd)return!1;for(let t=0;t-1}allowsMarks(e){if(this.markSet==null)return!0;for(let t=0;tr[t]=new e(t,n,i));let i=n.spec.topNode||`doc`;if(!r[i])throw RangeError(`Schema is missing its top node type ('`+i+`')`);if(!r.text)throw RangeError(`Every schema needs a 'text' type`);for(let e in r.text.attrs)throw RangeError(`The text node type should not have attributes`);return r}};function Re(e,t,n){let r=n.split(`|`);return n=>{let i=n===null?`null`:typeof n;if(r.indexOf(i)<0)throw RangeError(`Expected value of type ${r} for attribute ${t} on type ${e}, got ${i}`)}}var ze=class{constructor(e,t,n){this.hasDefault=Object.prototype.hasOwnProperty.call(n,`default`),this.default=n.default,this.validate=typeof n.validate==`string`?Re(e,t,n.validate):n.validate}get isRequired(){return!this.hasDefault}},Be=class e{constructor(e,t,n,r){this.name=e,this.rank=t,this.schema=n,this.spec=r,this.attrs=Ie(e,r.attrs),this.excluded=null;let i=Pe(this.attrs);this.instance=i?new g(this,i):null}create(e=null){return!e&&this.instance?this.instance:new g(this,Fe(this.attrs,e))}static compile(t,n){let r=Object.create(null),i=0;return t.forEach((t,a)=>r[t]=new e(t,i++,n,a)),r}removeFromSet(e){for(var t=0;t-1}},Ve=class{constructor(e){this.linebreakReplacement=null,this.cached=Object.create(null);let t=this.spec={};for(let n in e)t[n]=e[n];t.nodes=s.from(e.nodes),t.marks=s.from(e.marks||{}),this.nodes=Le.compile(this.spec.nodes,this),this.marks=Be.compile(this.spec.marks,this);let n=Object.create(null);for(let e in this.nodes){if(e in this.marks)throw RangeError(e+` can not be both a node and a mark`);let t=this.nodes[e],r=t.spec.content||``,i=t.spec.marks;if(t.contentMatch=n[r]||(n[r]=be.parse(r,this.nodes)),t.inlineContent=t.contentMatch.inlineContent,t.spec.linebreakReplacement){if(this.linebreakReplacement)throw RangeError(`Multiple linebreak nodes defined`);if(!t.isInline||!t.isLeaf)throw RangeError(`Linebreak replacement nodes must be inline leaf nodes`);this.linebreakReplacement=t}t.markSet=i==`_`?null:i?He(this,i.split(` `)):i==``||!t.inlineContent?[]:null}for(let e in this.marks){let t=this.marks[e],n=t.spec.excludes;t.excluded=n==null?[t]:n==``?[]:He(this,n.split(` `))}this.nodeFromJSON=e=>ge.fromJSON(this,e),this.markFromJSON=e=>g.fromJSON(this,e),this.topNodeType=this.nodes[this.spec.topNode||`doc`],this.cached.wrappings=Object.create(null)}node(e,t=null,n,r){if(typeof e==`string`)e=this.nodeType(e);else if(!(e instanceof Le))throw RangeError(`Invalid node type: `+e);else if(e.schema!=this)throw RangeError(`Node type from different schema used (`+e.name+`)`);return e.createChecked(t,n,r)}text(e,t){let n=this.nodes.text;return new _e(n,n.defaultAttrs,e,g.setFrom(t))}mark(e,t){return typeof e==`string`&&(e=this.marks[e]),e.create(t)}nodeType(e){let t=this.nodes[e];if(!t)throw RangeError(`Unknown node type: `+e);return t}};function He(e,t){let n=[];for(let r=0;r-1)&&n.push(o=r)}if(!o)throw SyntaxError(`Unknown mark type: '`+t[r]+`'`)}return n}function Ue(e){return e.tag!=null}function We(e){return e.style!=null}var Ge=class e{constructor(e,t){this.schema=e,this.rules=t,this.tags=[],this.styles=[];let n=this.matchedStyles=[];t.forEach(e=>{if(Ue(e))this.tags.push(e);else if(We(e)){let t=/[^=]*/.exec(e.style)[0];n.indexOf(t)<0&&n.push(t),this.styles.push(e)}}),this.normalizeLists=!this.tags.some(t=>{if(!/^(ul|ol)\b/.test(t.tag)||!t.node)return!1;let n=e.nodes[t.node];return n.contentMatch.matchType(n)})}parse(e,t={}){let n=new et(this,t,!1);return n.addAll(e,g.none,t.from,t.to),n.finish()}parseSlice(e,t={}){let n=new et(this,t,!0);return n.addAll(e,g.none,t.from,t.to),v.maxOpen(n.finish())}matchTag(e,t,n){for(let r=n?this.tags.indexOf(n)+1:0;re.length&&(a.charCodeAt(e.length)!=61||a.slice(e.length+1)!=t))){if(r.getAttrs){let e=r.getAttrs(t);if(e===!1)continue;r.attrs=e||void 0}return r}}}static schemaRules(e){let t=[];function n(e){let n=e.priority==null?50:e.priority,r=0;for(;r{n(e=rt(e)),e.mark||e.ignore||e.clearMark||(e.mark=t)})}for(let t in e.nodes){let r=e.nodes[t].spec.parseDOM;r&&r.forEach(e=>{n(e=rt(e)),e.node||e.ignore||e.mark||(e.node=t)})}return t}static fromSchema(t){return t.cached.domParser||(t.cached.domParser=new e(t,e.schemaRules(t)))}},Ke={address:!0,article:!0,aside:!0,blockquote:!0,body:!0,canvas:!0,dd:!0,div:!0,dl:!0,fieldset:!0,figcaption:!0,figure:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,li:!0,noscript:!0,ol:!0,output:!0,p:!0,pre:!0,section:!0,table:!0,tfoot:!0,ul:!0},qe={head:!0,noscript:!0,object:!0,script:!0,style:!0,title:!0},Je={ol:!0,ul:!0},Ye=1,Xe=2,Ze=4;function Qe(e,t,n){return t==null?e&&e.whitespace==`pre`?3:n&-5:(t?Ye:0)|(t===`full`?Xe:0)}var $e=class{constructor(e,t,n,r,i,a){this.type=e,this.attrs=t,this.marks=n,this.solid=r,this.options=a,this.content=[],this.activeMarks=g.none,this.match=i||(a&Ze?null:e.contentMatch)}findWrapping(e){if(!this.match){if(!this.type)return[];let t=this.type.contentMatch.fillBefore(f.from(e));if(t)this.match=this.type.contentMatch.matchFragment(t);else{let t=this.type.contentMatch,n;return(n=t.findWrapping(e.type))?(this.match=t,n):null}}return this.match.findWrapping(e.type)}finish(e){if(!(this.options&Ye)){let e=this.content[this.content.length-1],t;if(e&&e.isText&&(t=/[ \t\r\n\u000c]+$/.exec(e.text))){let n=e;e.text.length==t[0].length?this.content.pop():this.content[this.content.length-1]=n.withText(n.text.slice(0,n.text.length-t[0].length))}}let t=f.from(this.content);return!e&&this.match&&(t=t.append(this.match.fillBefore(f.empty,!0))),this.type?this.type.create(this.attrs,t,this.marks):t}inlineContext(e){return this.type?this.type.inlineContent:this.content.length?this.content[0].isInline:e.parentNode&&!Ke.hasOwnProperty(e.parentNode.nodeName.toLowerCase())}},et=class{constructor(e,t,n){this.parser=e,this.options=t,this.isOpen=n,this.open=0,this.localPreserveWS=!1;let r=t.topNode,i,a=Qe(null,t.preserveWhitespace,0)|(n?Ze:0);i=r?new $e(r.type,r.attrs,g.none,!0,t.topMatch||r.type.contentMatch,a):n?new $e(null,null,g.none,!0,null,a):new $e(e.schema.topNodeType,null,g.none,!0,null,a),this.nodes=[i],this.find=t.findPositions,this.needsBlock=!1}get top(){return this.nodes[this.open]}addDOM(e,t){e.nodeType==3?this.addTextNode(e,t):e.nodeType==1&&this.addElement(e,t)}addTextNode(e,t){let n=e.nodeValue,r=this.top,i=r.options&Xe?`full`:this.localPreserveWS||(r.options&Ye)>0,{schema:a}=this.parser;if(i===`full`||r.inlineContext(e)||/[^ \t\r\n\u000c]/.test(n)){if(!i){if(n=n.replace(/[ \t\r\n\u000c]+/g,` `),/^[ \t\r\n\u000c]/.test(n)&&this.open==this.nodes.length-1){let t=r.content[r.content.length-1],i=e.previousSibling;(!t||i&&i.nodeName==`BR`||t.isText&&/[ \t\r\n\u000c]$/.test(t.text))&&(n=n.slice(1))}}else if(i===`full`)n=n.replace(/\r\n?/g,` `);else if(a.linebreakReplacement&&/[\r\n]/.test(n)&&this.top.findWrapping(a.linebreakReplacement.create())){let e=n.split(/\r?\n|\r/);for(let n=0;n!n.clearMark(e)):t.concat(this.parser.schema.marks[n.mark].create(n.attrs)),n.consuming===!1)e=n;else break}}return t}addElementByRule(e,t,n,r){let i,a;if(t.node){if(a=this.parser.schema.nodes[t.node],a.isLeaf)this.insertNode(a.create(t.attrs),n,e.nodeName==`BR`)||this.leafFallback(e,n);else{let e=this.enter(a,t.attrs||null,n,t.preserveWhitespace);e&&(i=!0,n=e)}}else{let e=this.parser.schema.marks[t.mark];n=n.concat(e.create(t.attrs))}let o=this.top;if(a&&a.isLeaf)this.findInside(e);else if(r)this.addElement(e,n,r);else if(t.getContent)this.findInside(e),t.getContent(e,this.parser.schema).forEach(e=>this.insertNode(e,n,!1));else{let r=e;typeof t.contentElement==`string`?r=e.querySelector(t.contentElement):typeof t.contentElement==`function`?r=t.contentElement(e):t.contentElement&&(r=t.contentElement),this.findAround(e,r,!0),this.addAll(r,n),this.findAround(e,r,!1)}i&&this.sync(o)&&this.open--}addAll(e,t,n,r){let i=n||0;for(let a=n?e.childNodes[n]:e.firstChild,o=r==null?null:e.childNodes[r];a!=o;a=a.nextSibling,++i)this.findAtPoint(e,i),this.addDOM(a,t);this.findAtPoint(e,i)}findPlace(e,t,n){let r,i;for(let t=this.open,a=0;t>=0;t--){let o=this.nodes[t],s=o.findWrapping(e);if(s&&(!r||r.length>s.length+a)&&(r=s,i=o,!s.length))break;if(o.solid){if(n)break;a+=2}}if(!r)return null;this.sync(i);for(let e=0;e!(a.type?a.type.allowsMarkType(t.type):it(t.type,e))||(s=t.addToSet(s),!1)),this.nodes.push(new $e(e,t,s,r,null,o)),this.open++,n}closeExtra(e=!1){let t=this.nodes.length-1;if(t>this.open){for(;t>this.open;t--)this.nodes[t-1].content.push(this.nodes[t].finish(e));this.nodes.length=this.open+1}}finish(){return this.open=0,this.closeExtra(this.isOpen),this.nodes[0].finish(!!(this.isOpen||this.options.topOpen))}sync(e){for(let t=this.open;t>=0;t--)if(this.nodes[t]==e)return this.open=t,!0;else this.localPreserveWS&&(this.nodes[t].options|=Ye);return!1}get currentPos(){this.closeExtra();let e=0;for(let t=this.open;t>=0;t--){let n=this.nodes[t].content;for(let t=n.length-1;t>=0;t--)e+=n[t].nodeSize;t&&e++}return e}findAtPoint(e,t){if(this.find)for(let n=0;n-1)return e.split(/\s*\|\s*/).some(this.matchesContext,this);let t=e.split(`/`),n=this.options.context,r=!this.isOpen&&(!n||n.parent.type==this.nodes[0].type),i=-(n?n.depth+1:0)+ +!r,a=(e,o)=>{for(;e>=0;e--){let s=t[e];if(s==``){if(e==t.length-1||e==0)continue;for(;o>=i;o--)if(a(e-1,o))return!0;return!1}{let e=o>0||o==0&&r?this.nodes[o].type:n&&o>=i?n.node(o-i).type:null;if(!e||e.name!=s&&!e.isInGroup(s))return!1;o--}}return!0};return a(t.length-1,this.open)}textblockFromContext(){let e=this.options.context;if(e)for(let t=e.depth;t>=0;t--){let n=e.node(t).contentMatchAt(e.indexAfter(t)).defaultType;if(n&&n.isTextblock&&n.defaultAttrs)return n}for(let e in this.parser.schema.nodes){let t=this.parser.schema.nodes[e];if(t.isTextblock&&t.defaultAttrs)return t}}};function tt(e){for(let t=e.firstChild,n=null;t;t=t.nextSibling){let e=t.nodeType==1?t.nodeName.toLowerCase():null;e&&Je.hasOwnProperty(e)&&n?(n.appendChild(t),t=n):e==`li`?n=t:e&&(n=null)}}function nt(e,t){return(e.matches||e.msMatchesSelector||e.webkitMatchesSelector||e.mozMatchesSelector).call(e,t)}function rt(e){let t={};for(let n in e)t[n]=e[n];return t}function it(e,t){let n=t.schema.nodes;for(let r in n){let i=n[r];if(!i.allowsMarkType(e))continue;let a=[],o=e=>{a.push(e);for(let n=0;n{if(i.length||e.marks.length){let n=0,a=0;for(;n=0;r--){let i=this.serializeMark(e.marks[r],e.isInline,t);i&&((i.contentDOM||i.dom).appendChild(n),n=i.dom)}return n}serializeMark(e,t,n={}){let r=this.marks[e.type.name];return r&&dt(st(n),r(e,t),null,e.attrs)}static renderSpec(e,t,n=null,r){return typeof t==`string`?{dom:e.createTextNode(t)}:dt(e,t,n,r)}static fromSchema(t){return t.cached.domSerializer||(t.cached.domSerializer=new e(this.nodesFromSchema(t),this.marksFromSchema(t)))}static nodesFromSchema(e){let t=ot(e.nodes);return t.text||=e=>e.text,t}static marksFromSchema(e){return ot(e.marks)}};function ot(e){let t={};for(let n in e){let r=e[n].spec.toDOM;r&&(t[n]=r)}return t}function st(e){return e.document||window.document}var ct=new WeakMap;function lt(e){let t=ct.get(e);return t===void 0&&ct.set(e,t=ut(e)),t}function ut(e){let t=null;function n(e){if(e&&typeof e==`object`){if(Array.isArray(e)){if(typeof e[0]==`string`)t||=[],t.push(e);else for(let t=0;t-1)throw RangeError(`Using an array from an attribute object as a DOM spec. This may be an attempted cross site scripting attack.`);let o=i.indexOf(` `);o>0&&(n=i.slice(0,o),i=i.slice(o+1));let s,c=n?e.createElementNS(n,i):e.createElement(i),l=t[1],u=1;if(l&&typeof l==`object`&&l.nodeType==null&&!Array.isArray(l)){u=2;for(let e in l)if(l[e]!=null){let t=e.indexOf(` `);t>0?c.setAttributeNS(e.slice(0,t),e.slice(t+1),l[e]):e==`style`&&c.style?c.style.cssText=l[e]:c.setAttribute(e,l[e])}}for(let i=u;iu)throw RangeError(`Content hole must be the only child of its parent node`);return{dom:c,contentDOM:c}}if(typeof a==`string`)c.appendChild(e.createTextNode(a));else{let{dom:t,contentDOM:i}=dt(e,a,n,r);if(c.appendChild(t),i){if(s)throw RangeError(`Multiple content holes`);s=i}}}return{dom:c,contentDOM:s}}var ft=65535,pt=2**16;function mt(e,t){return e+t*pt}function ht(e){return e&ft}function gt(e){return(e-(e&ft))/pt}var _t=1,vt=2,yt=4,bt=8,xt=class{constructor(e,t,n){this.pos=e,this.delInfo=t,this.recover=n}get deleted(){return(this.delInfo&bt)>0}get deletedBefore(){return(this.delInfo&5)>0}get deletedAfter(){return(this.delInfo&6)>0}get deletedAcross(){return(this.delInfo&yt)>0}},St=class e{constructor(t,n=!1){if(this.ranges=t,this.inverted=n,!t.length&&e.empty)return e.empty}recover(e){let t=0,n=ht(e);if(!this.inverted)for(let e=0;ee)break;let c=this.ranges[o+i],l=this.ranges[o+a],u=s+c;if(e<=u){let i=c?e==s?-1:e==u?1:t:t,a=s+r+(i<0?0:l);if(n)return a;let d=e==(t<0?s:u)?null:mt(o/3,e-s),f=0;return c&&(f|=e==s?vt:e==u?_t:yt,(t<0?e!=s:e!=u)&&(f|=bt)),new xt(a,f,d)}r+=l-c}return n?e+r:new xt(e+r,0,null)}touches(e,t){let n=0,r=ht(t),i=this.inverted?2:1,a=this.inverted?1:2;for(let t=0;te)break;let s=this.ranges[t+i];if(e<=o+s&&t==r*3)return!0;n+=this.ranges[t+a]-s}return!1}forEach(e){let t=this.inverted?2:1,n=this.inverted?1:2;for(let r=0,i=0;r=0;t--){let r=e.getMirror(t);this.appendMap(e._maps[t].invert(),r!=null&&r>t?n-r-1:void 0)}}invert(){let t=new e;return t.appendMappingInverted(this),t}map(e,t=1){if(this.mirror)return this._map(e,t,!0);for(let n=this.from;nn&&t!e.isAtom||!t.type.allowsMarkType(this.mark.type)?e:e.mark(this.mark.addToSet(e.marks)),r),t.openStart,t.openEnd);return Tt.fromReplace(e,this.from,this.to,i)}invert(){return new Ot(this.from,this.to,this.mark)}map(t){let n=t.mapResult(this.from,1),r=t.mapResult(this.to,-1);return n.deleted&&r.deleted||n.pos>=r.pos?null:new e(n.pos,r.pos,this.mark)}merge(t){return t instanceof e&&t.mark.eq(this.mark)&&this.from<=t.to&&this.to>=t.from?new e(Math.min(this.from,t.from),Math.max(this.to,t.to),this.mark):null}toJSON(){return{stepType:`addMark`,mark:this.mark.toJSON(),from:this.from,to:this.to}}static fromJSON(t,n){if(typeof n.from!=`number`||typeof n.to!=`number`)throw RangeError(`Invalid input for AddMarkStep.fromJSON`);return new e(n.from,n.to,t.markFromJSON(n.mark))}};x.jsonID(`addMark`,Dt);var Ot=class e extends x{constructor(e,t,n){super(),this.from=e,this.to=t,this.mark=n}apply(e){let t=e.slice(this.from,this.to),n=new v(Et(t.content,e=>e.mark(this.mark.removeFromSet(e.marks)),e),t.openStart,t.openEnd);return Tt.fromReplace(e,this.from,this.to,n)}invert(){return new Dt(this.from,this.to,this.mark)}map(t){let n=t.mapResult(this.from,1),r=t.mapResult(this.to,-1);return n.deleted&&r.deleted||n.pos>=r.pos?null:new e(n.pos,r.pos,this.mark)}merge(t){return t instanceof e&&t.mark.eq(this.mark)&&this.from<=t.to&&this.to>=t.from?new e(Math.min(this.from,t.from),Math.max(this.to,t.to),this.mark):null}toJSON(){return{stepType:`removeMark`,mark:this.mark.toJSON(),from:this.from,to:this.to}}static fromJSON(t,n){if(typeof n.from!=`number`||typeof n.to!=`number`)throw RangeError(`Invalid input for RemoveMarkStep.fromJSON`);return new e(n.from,n.to,t.markFromJSON(n.mark))}};x.jsonID(`removeMark`,Ot);var kt=class e extends x{constructor(e,t){super(),this.pos=e,this.mark=t}apply(e){let t=e.nodeAt(this.pos);if(!t)return Tt.fail(`No node at mark step's position`);let n=t.type.create(t.attrs,null,this.mark.addToSet(t.marks));return Tt.fromReplace(e,this.pos,this.pos+1,new v(f.from(n),0,+!t.isLeaf))}invert(t){let n=t.nodeAt(this.pos);if(n){let t=this.mark.addToSet(n.marks);if(t.length==n.marks.length){for(let r=0;rr.pos?null:new e(n.pos,r.pos,i,a,this.slice,this.insert,this.structure)}toJSON(){let e={stepType:`replaceAround`,from:this.from,to:this.to,gapFrom:this.gapFrom,gapTo:this.gapTo,insert:this.insert};return this.slice.size&&(e.slice=this.slice.toJSON()),this.structure&&(e.structure=!0),e}static fromJSON(t,n){if(typeof n.from!=`number`||typeof n.to!=`number`||typeof n.gapFrom!=`number`||typeof n.gapTo!=`number`||typeof n.insert!=`number`)throw RangeError(`Invalid input for ReplaceAroundStep.fromJSON`);return new e(n.from,n.to,n.gapFrom,n.gapTo,v.fromJSON(t,n.slice),n.insert,!!n.structure)}};x.jsonID(`replaceAround`,Mt);function Nt(e,t,n){let r=e.resolve(t),i=n-t,a=r.depth;for(;i>0&&a>0&&r.indexAfter(a)==r.node(a).childCount;)a--,i--;if(i>0){let e=r.node(a).maybeChild(r.indexAfter(a));for(;i>0;){if(!e||e.isLeaf)return!0;e=e.firstChild,i--}}return!1}function Pt(e,t,n,r){let i=[],a=[],o,s;e.doc.nodesBetween(t,n,(e,c,l)=>{if(!e.isInline)return;let u=e.marks;if(!r.isInSet(u)&&l.type.allowsMarkType(r.type)){let l=Math.max(c,t),d=Math.min(c+e.nodeSize,n),f=r.addToSet(u);for(let e=0;ee.step(t)),a.forEach(t=>e.step(t))}function Ft(e,t,n,r){let i=[],a=0;e.doc.nodesBetween(t,n,(e,o)=>{if(!e.isInline)return;a++;let s=null;if(r instanceof Be){let t=e.marks,n;for(;n=r.isInSet(t);)(s||=[]).push(n),t=n.removeFromSet(t)}else r?r.isInSet(e.marks)&&(s=[r]):s=e.marks;if(s&&s.length){let r=Math.min(o+e.nodeSize,n);for(let e=0;ee.step(new Ot(t.from,t.to,t.style)))}function It(e,t,n,r=n.contentMatch,i=!0){let a=e.doc.nodeAt(t),o=[],s=t+1;for(let t=0;t=0;t--)e.step(o[t])}function Lt(e,t,n){return(t==0||e.canReplace(t,e.childCount))&&(n==e.childCount||e.canReplace(0,n))}function Rt(e){let t=e.parent.content.cutByIndex(e.startIndex,e.endIndex);for(let n=e.depth,r=0,i=0;;--n){let a=e.$from.node(n),o=e.$from.index(n)+r,s=e.$to.indexAfter(n)-i;if(nn;e--)t||r.index(e)>0?(t=!0,u=f.from(r.node(e).copy(u)),d++):c--;let p=f.empty,m=0;for(let e=a,t=!1;e>n;e--)t||i.after(e+1)=0;e--){if(r.size){let t=n[e].type.contentMatch.matchFragment(r);if(!t||!t.validEnd)throw RangeError(`Wrapper type given to Transform.wrap does not form valid content of its parent wrapper`)}r=f.from(n[e].type.create(n[e].attrs,r))}let i=t.start,a=t.end;e.step(new Mt(i,a,i,a,new v(r,0,0),n.length,!0))}function Gt(e,t,n,r,i){if(!r.isTextblock)throw RangeError(`Type given to setBlockType should be a textblock`);let a=e.steps.length;e.doc.nodesBetween(t,n,(t,n)=>{let o=typeof i==`function`?i(t):i;if(t.isTextblock&&!t.hasMarkup(r,o)&&Jt(e.doc,e.mapping.slice(a).map(n),r)){let i=null;if(r.schema.linebreakReplacement){let e=r.whitespace==`pre`,t=!!r.contentMatch.matchType(r.schema.linebreakReplacement);e&&!t?i=!1:!e&&t&&(i=!0)}i===!1&&qt(e,t,n,a),It(e,e.mapping.slice(a).map(n,1),r,void 0,i===null);let s=e.mapping.slice(a),c=s.map(n,1),l=s.map(n+t.nodeSize,1);return e.step(new Mt(c,l,c+1,l-1,new v(f.from(r.create(o,null,t.marks)),0,0),1,!0)),i===!0&&Kt(e,t,n,a),!1}})}function Kt(e,t,n,r){t.forEach((i,a)=>{if(i.isText){let o,s=/\r?\n|\r/g;for(;o=s.exec(i.text);){let i=e.mapping.slice(r).map(n+1+a+o.index);e.replaceWith(i,i+1,t.type.schema.linebreakReplacement.create())}}})}function qt(e,t,n,r){t.forEach((i,a)=>{if(i.type==i.type.schema.linebreakReplacement){let i=e.mapping.slice(r).map(n+1+a);e.replaceWith(i,i+1,t.type.schema.text(` diff --git a/web/static/react/assets/Workbench-LkIyaV8C.js b/web/static/react/assets/Workbench-Bp7HqSdK.js similarity index 98% rename from web/static/react/assets/Workbench-LkIyaV8C.js rename to web/static/react/assets/Workbench-Bp7HqSdK.js index 53129144..5d11217c 100644 --- a/web/static/react/assets/Workbench-LkIyaV8C.js +++ b/web/static/react/assets/Workbench-Bp7HqSdK.js @@ -1,12 +1,12 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/monaco-jbmWBVBM.js","assets/rolldown-runtime-hePW80VL.js","assets/preload-helper-CxWDS4yO.js","assets/editor.api-CdPm3cXy.js","assets/editor-DjpsE8to.css","assets/monaco-BYk8qkda.css","assets/viewers-f1y6zYtx.js","assets/jsx-runtime-CmcDAzcm.js","assets/markdown-model-hifq6-C0.js","assets/RichMarkdown-CTHXOnWq.js"])))=>i.map(i=>d[i]); -import{r as e}from"./rolldown-runtime-hePW80VL.js";import{$ as t,Q as n,et as r,it as i,lt as a,nt as o,p as s,rt as c,s as l,t as u,tt as d}from"./tokens-zhzSlX7k.js";import{o as f,t as p,x as m}from"./jsx-runtime-CmcDAzcm.js";import{t as h}from"./preload-helper-CxWDS4yO.js";var g=e(m(),1);function _(e){let t=/^#?L(\d+)(?:C(\d+))?(?:-L(\d+))?$/i.exec(e.trim());if(!t)return;let n=Number(t[1]);if(n)return{line:n,column:t[2]?Number(t[2]):void 0,endLine:t[3]?Number(t[3]):void 0}}function v(e){let t=`#L`+e.line;return e.column&&e.column>1&&(t+=`C`+e.column),e.endLine&&e.endLine>e.line&&(t+=`-L`+e.endLine),t}function y(e,t,n){return e.origin+e.pathname+`?open=`+encodeURIComponent(t)+(n?v(n):``)}function b(e,t){let n=new URLSearchParams(e).get(`open`);if(n)return{path:n,target:_(t)}}var x={png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,avif:`image/avif`,bmp:`image/bmp`,ico:`image/x-icon`};function S(e){let t=e.slice(e.lastIndexOf(`/`)+1).toLowerCase(),n=t.lastIndexOf(`.`);return n>0?t.slice(n+1):``}function C(e){let t=S(e);return x[t]||(t===`svg`?`image/svg+xml`:t===`pdf`?`application/pdf`:`application/octet-stream`)}function w(e,t){let n=S(e);return x[n]?`image`:n===`svg`?`svg`:n===`pdf`?`pdf`:t.includes(0)?`binary`:[`md`,`markdown`,`mdx`,`mdown`].includes(n)?`markdown`:[`html`,`htm`,`xhtml`].includes(n)?`html`:[`mmd`,`mermaid`].includes(n)?`mermaid`:[`csv`,`tsv`].includes(n)?`csv`:n===`ipynb`?`notebook`:`code`}function T(e){return[`markdown`,`html`,`mermaid`,`csv`,`notebook`,`svg`].includes(e)}var E={ts:`typescript`,tsx:`typescript`,mts:`typescript`,cts:`typescript`,js:`javascript`,jsx:`javascript`,mjs:`javascript`,cjs:`javascript`,json:`json`,jsonc:`json`,ipynb:`json`,webmanifest:`json`,css:`css`,scss:`scss`,less:`less`,html:`html`,htm:`html`,xhtml:`html`,vue:`html`,svelte:`html`,md:`markdown`,markdown:`markdown`,mdx:`markdown`,mdown:`markdown`,py:`python`,pyi:`python`,go:`go`,rs:`rust`,rb:`ruby`,php:`php`,java:`java`,kt:`kotlin`,kts:`kotlin`,scala:`scala`,swift:`swift`,c:`c`,h:`c`,cc:`cpp`,cpp:`cpp`,cxx:`cpp`,hpp:`cpp`,hh:`cpp`,cs:`csharp`,fs:`fsharp`,sh:`shell`,bash:`shell`,zsh:`shell`,fish:`shell`,ps1:`powershell`,psm1:`powershell`,bat:`bat`,cmd:`bat`,yml:`yaml`,yaml:`yaml`,toml:`ini`,ini:`ini`,cfg:`ini`,conf:`ini`,env:`ini`,xml:`xml`,svg:`xml`,plist:`xml`,sql:`sql`,graphql:`graphql`,gql:`graphql`,lua:`lua`,r:`r`,pl:`perl`,pm:`perl`,dart:`dart`,ex:`elixir`,exs:`elixir`,clj:`clojure`,hcl:`hcl`,tf:`hcl`,proto:`protobuf`,sol:`sol`,jl:`julia`,dockerfile:`dockerfile`,mmd:`markdown`,mermaid:`markdown`,csv:`plaintext`,tsv:`plaintext`};function D(e){let t=e.slice(e.lastIndexOf(`/`)+1).toLowerCase();return t===`dockerfile`||t.startsWith(`dockerfile.`)?`dockerfile`:t===`makefile`||t===`gnumakefile`?`plaintext`:t===`.bashrc`||t===`.zshrc`||t===`.profile`?`shell`:E[S(e)]||`plaintext`}var O=p(),k;function A(){return k??=h(()=>import(`./monaco-jbmWBVBM.js`).then(e=>e.t),__vite__mapDeps([0,1,2,3,4,5])).catch(e=>{throw k=void 0,e}),k}var j=(0,g.forwardRef)(function(e,t){return e.full?(0,O.jsx)(M,{...e,ref:t}):(0,O.jsx)(P,{...e,ref:t})}),M=(0,g.forwardRef)(function(e,t){let n=(0,g.useRef)(null),r=(0,g.useRef)(void 0),i=(0,g.useRef)(void 0),a=(0,g.useRef)(e);a.current=e;let o=(0,g.useRef)(void 0),[s,c]=(0,g.useState)(!1);return(0,g.useEffect)(()=>{let e=!1,t=[];return A().then(o=>{if(e||!n.current)return;let{editor:s,model:l}=o.createEditor(n.current,{value:a.current.value,language:D(a.current.path),path:a.current.path,readOnly:a.current.readOnly,fontSize:a.current.fontSize,minimap:a.current.minimap,wordWrap:a.current.wordWrap}),{monaco:u}=o;i.current=u,r.current=s,s.addCommand(u.KeyMod.CtrlCmd|u.KeyCode.KeyS,()=>a.current.onSave());let d=l.onDidChangeContent(()=>a.current.onChange(l.getValue())),f=s.onMouseDown(e=>{if(e.target.type===u.editor.MouseTargetType.GUTTER_LINE_NUMBERS&&e.target.position){let t=e.target.position.lineNumber,n=s.getSelection();e.event.shiftKey&&n&&n.startLineNumber!==t?a.current.onLine({line:Math.min(n.startLineNumber,t),endLine:Math.max(n.startLineNumber,t)}):a.current.onLine({line:t})}}),p=s.onDidScrollChange(()=>{let e=s.getVisibleRanges()[0];e&&a.current.onScrollLine?.(e.startLineNumber)});t.push(()=>{d.dispose(),f.dispose(),p.dispose(),s.dispose()}),c(!0)}).catch(t=>{e||a.current.onFallback?.(t instanceof Error?t.message:String(t))}),()=>{e=!0,r.current=void 0,t.forEach(e=>e())}},[e.path]),(0,g.useEffect)(()=>{let e=r.current,t=e?.getModel();if(!e||!t||t.getValue()===a.current.value)return;let n=e.getPosition();t.pushEditOperations([],[{range:t.getFullModelRange(),text:a.current.value}],()=>null),n&&e.setPosition(n)},[e.revision]),(0,g.useEffect)(()=>{r.current?.updateOptions({readOnly:e.readOnly,fontSize:e.fontSize,minimap:{enabled:e.minimap},wordWrap:e.wordWrap?`on`:`off`})},[e.readOnly,e.fontSize,e.minimap,e.wordWrap,s]),(0,g.useEffect)(()=>{let t=r.current,n=i.current,a=e.target;if(!t||!n||!a)return;let s=a.endLine||a.line;t.revealLinesInCenter(a.line,s),t.setPosition({lineNumber:a.line,column:a.column||1}),o.current?.clear(),o.current=t.createDecorationsCollection([{range:new n.Range(a.line,1,s,1),options:{isWholeLine:!0,className:`wb-target-line`,linesDecorationsClassName:`wb-target-gutter`}}])},[e.targetKey,s]),(0,g.useImperativeHandle)(t,()=>({wrap(e,t,n){let i=r.current,a=i?.getModel(),o=i?.getSelection();if(!i||!a||!o)return;let s=a.getValueInRange(o)||n;i.executeEdits(`format`,[{range:o,text:e+s+t,forceMoveMarkers:!0}]),i.focus()},linePrefix(e){let t=r.current,n=t?.getModel(),a=t?.getSelection(),o=i.current;if(!t||!n||!a||!o)return;let s=[];for(let t=a.startLineNumber;t<=a.endLineNumber;t++)s.push({range:new o.Range(t,1,t,1),text:e});t.executeEdits(`format`,s),t.focus()},insert(e){let t=r.current,n=t?.getSelection();t&&n&&(t.executeEdits(`format`,[{range:n,text:e,forceMoveMarkers:!0}]),t.focus())},reveal(e){r.current?.revealLineNearTop(e),r.current?.setPosition({lineNumber:e,column:1}),r.current?.focus()},focus(){r.current?.focus()},topLine(){return r.current?.getVisibleRanges()[0]?.startLineNumber||1}})),(0,O.jsxs)(`div`,{className:`wb-monaco`,"data-ready":s||void 0,children:[(0,O.jsx)(`div`,{ref:n,className:`wb-monaco-host`}),!s&&(0,O.jsx)(`pre`,{className:`wb-monaco-placeholder`,children:e.value.slice(0,2e5)})]})}),N=2e4,P=(0,g.forwardRef)(function(e,t){let n=(0,g.useRef)(null),r=(0,g.useRef)(null);(0,g.useLayoutEffect)(()=>{if(e.target){if(e.readOnly)r.current?.querySelector(`[data-line="${e.target.line}"]`)?.scrollIntoView({block:`center`});else if(n.current){let t=n.current,r=e.value.split(` +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/monaco-jbmWBVBM.js","assets/rolldown-runtime-hePW80VL.js","assets/preload-helper-CxWDS4yO.js","assets/editor.api-CdPm3cXy.js","assets/editor-DjpsE8to.css","assets/monaco-BYk8qkda.css","assets/viewers-Brg_4V67.js","assets/jsx-runtime-DpvgX3dj.js","assets/markdown-model-hifq6-C0.js","assets/RichMarkdown-Dk2rttMD.js"])))=>i.map(i=>d[i]); +import{r as e}from"./rolldown-runtime-hePW80VL.js";import{$ as t,Q as n,et as r,it as i,lt as a,nt as o,p as s,rt as c,s as l,t as u,tt as d}from"./tokens-Dwwo-z6R.js";import{o as f,t as p,x as m}from"./jsx-runtime-DpvgX3dj.js";import{t as h}from"./preload-helper-CxWDS4yO.js";var g=e(m(),1);function _(e){let t=/^#?L(\d+)(?:C(\d+))?(?:-L(\d+))?$/i.exec(e.trim());if(!t)return;let n=Number(t[1]);if(n)return{line:n,column:t[2]?Number(t[2]):void 0,endLine:t[3]?Number(t[3]):void 0}}function v(e){let t=`#L`+e.line;return e.column&&e.column>1&&(t+=`C`+e.column),e.endLine&&e.endLine>e.line&&(t+=`-L`+e.endLine),t}function y(e,t,n){return e.origin+e.pathname+`?open=`+encodeURIComponent(t)+(n?v(n):``)}function b(e,t){let n=new URLSearchParams(e).get(`open`);if(n)return{path:n,target:_(t)}}var x={png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,avif:`image/avif`,bmp:`image/bmp`,ico:`image/x-icon`};function S(e){let t=e.slice(e.lastIndexOf(`/`)+1).toLowerCase(),n=t.lastIndexOf(`.`);return n>0?t.slice(n+1):``}function C(e){let t=S(e);return x[t]||(t===`svg`?`image/svg+xml`:t===`pdf`?`application/pdf`:`application/octet-stream`)}function w(e,t){let n=S(e);return x[n]?`image`:n===`svg`?`svg`:n===`pdf`?`pdf`:t.includes(0)?`binary`:[`md`,`markdown`,`mdx`,`mdown`].includes(n)?`markdown`:[`html`,`htm`,`xhtml`].includes(n)?`html`:[`mmd`,`mermaid`].includes(n)?`mermaid`:[`csv`,`tsv`].includes(n)?`csv`:n===`ipynb`?`notebook`:`code`}function T(e){return[`markdown`,`html`,`mermaid`,`csv`,`notebook`,`svg`].includes(e)}var E={ts:`typescript`,tsx:`typescript`,mts:`typescript`,cts:`typescript`,js:`javascript`,jsx:`javascript`,mjs:`javascript`,cjs:`javascript`,json:`json`,jsonc:`json`,ipynb:`json`,webmanifest:`json`,css:`css`,scss:`scss`,less:`less`,html:`html`,htm:`html`,xhtml:`html`,vue:`html`,svelte:`html`,md:`markdown`,markdown:`markdown`,mdx:`markdown`,mdown:`markdown`,py:`python`,pyi:`python`,go:`go`,rs:`rust`,rb:`ruby`,php:`php`,java:`java`,kt:`kotlin`,kts:`kotlin`,scala:`scala`,swift:`swift`,c:`c`,h:`c`,cc:`cpp`,cpp:`cpp`,cxx:`cpp`,hpp:`cpp`,hh:`cpp`,cs:`csharp`,fs:`fsharp`,sh:`shell`,bash:`shell`,zsh:`shell`,fish:`shell`,ps1:`powershell`,psm1:`powershell`,bat:`bat`,cmd:`bat`,yml:`yaml`,yaml:`yaml`,toml:`ini`,ini:`ini`,cfg:`ini`,conf:`ini`,env:`ini`,xml:`xml`,svg:`xml`,plist:`xml`,sql:`sql`,graphql:`graphql`,gql:`graphql`,lua:`lua`,r:`r`,pl:`perl`,pm:`perl`,dart:`dart`,ex:`elixir`,exs:`elixir`,clj:`clojure`,hcl:`hcl`,tf:`hcl`,proto:`protobuf`,sol:`sol`,jl:`julia`,dockerfile:`dockerfile`,mmd:`markdown`,mermaid:`markdown`,csv:`plaintext`,tsv:`plaintext`};function D(e){let t=e.slice(e.lastIndexOf(`/`)+1).toLowerCase();return t===`dockerfile`||t.startsWith(`dockerfile.`)?`dockerfile`:t===`makefile`||t===`gnumakefile`?`plaintext`:t===`.bashrc`||t===`.zshrc`||t===`.profile`?`shell`:E[S(e)]||`plaintext`}var O=p(),k;function A(){return k??=h(()=>import(`./monaco-jbmWBVBM.js`).then(e=>e.t),__vite__mapDeps([0,1,2,3,4,5])).catch(e=>{throw k=void 0,e}),k}var j=(0,g.forwardRef)(function(e,t){return e.full?(0,O.jsx)(M,{...e,ref:t}):(0,O.jsx)(P,{...e,ref:t})}),M=(0,g.forwardRef)(function(e,t){let n=(0,g.useRef)(null),r=(0,g.useRef)(void 0),i=(0,g.useRef)(void 0),a=(0,g.useRef)(e);a.current=e;let o=(0,g.useRef)(void 0),[s,c]=(0,g.useState)(!1);return(0,g.useEffect)(()=>{let e=!1,t=[];return A().then(o=>{if(e||!n.current)return;let{editor:s,model:l}=o.createEditor(n.current,{value:a.current.value,language:D(a.current.path),path:a.current.path,readOnly:a.current.readOnly,fontSize:a.current.fontSize,minimap:a.current.minimap,wordWrap:a.current.wordWrap}),{monaco:u}=o;i.current=u,r.current=s,s.addCommand(u.KeyMod.CtrlCmd|u.KeyCode.KeyS,()=>a.current.onSave());let d=l.onDidChangeContent(()=>a.current.onChange(l.getValue())),f=s.onMouseDown(e=>{if(e.target.type===u.editor.MouseTargetType.GUTTER_LINE_NUMBERS&&e.target.position){let t=e.target.position.lineNumber,n=s.getSelection();e.event.shiftKey&&n&&n.startLineNumber!==t?a.current.onLine({line:Math.min(n.startLineNumber,t),endLine:Math.max(n.startLineNumber,t)}):a.current.onLine({line:t})}}),p=s.onDidScrollChange(()=>{let e=s.getVisibleRanges()[0];e&&a.current.onScrollLine?.(e.startLineNumber)});t.push(()=>{d.dispose(),f.dispose(),p.dispose(),s.dispose()}),c(!0)}).catch(t=>{e||a.current.onFallback?.(t instanceof Error?t.message:String(t))}),()=>{e=!0,r.current=void 0,t.forEach(e=>e())}},[e.path]),(0,g.useEffect)(()=>{let e=r.current,t=e?.getModel();if(!e||!t||t.getValue()===a.current.value)return;let n=e.getPosition();t.pushEditOperations([],[{range:t.getFullModelRange(),text:a.current.value}],()=>null),n&&e.setPosition(n)},[e.revision]),(0,g.useEffect)(()=>{r.current?.updateOptions({readOnly:e.readOnly,fontSize:e.fontSize,minimap:{enabled:e.minimap},wordWrap:e.wordWrap?`on`:`off`})},[e.readOnly,e.fontSize,e.minimap,e.wordWrap,s]),(0,g.useEffect)(()=>{let t=r.current,n=i.current,a=e.target;if(!t||!n||!a)return;let s=a.endLine||a.line;t.revealLinesInCenter(a.line,s),t.setPosition({lineNumber:a.line,column:a.column||1}),o.current?.clear(),o.current=t.createDecorationsCollection([{range:new n.Range(a.line,1,s,1),options:{isWholeLine:!0,className:`wb-target-line`,linesDecorationsClassName:`wb-target-gutter`}}])},[e.targetKey,s]),(0,g.useImperativeHandle)(t,()=>({wrap(e,t,n){let i=r.current,a=i?.getModel(),o=i?.getSelection();if(!i||!a||!o)return;let s=a.getValueInRange(o)||n;i.executeEdits(`format`,[{range:o,text:e+s+t,forceMoveMarkers:!0}]),i.focus()},linePrefix(e){let t=r.current,n=t?.getModel(),a=t?.getSelection(),o=i.current;if(!t||!n||!a||!o)return;let s=[];for(let t=a.startLineNumber;t<=a.endLineNumber;t++)s.push({range:new o.Range(t,1,t,1),text:e});t.executeEdits(`format`,s),t.focus()},insert(e){let t=r.current,n=t?.getSelection();t&&n&&(t.executeEdits(`format`,[{range:n,text:e,forceMoveMarkers:!0}]),t.focus())},reveal(e){r.current?.revealLineNearTop(e),r.current?.setPosition({lineNumber:e,column:1}),r.current?.focus()},focus(){r.current?.focus()},topLine(){return r.current?.getVisibleRanges()[0]?.startLineNumber||1}})),(0,O.jsxs)(`div`,{className:`wb-monaco`,"data-ready":s||void 0,children:[(0,O.jsx)(`div`,{ref:n,className:`wb-monaco-host`}),!s&&(0,O.jsx)(`pre`,{className:`wb-monaco-placeholder`,children:e.value.slice(0,2e5)})]})}),N=2e4,P=(0,g.forwardRef)(function(e,t){let n=(0,g.useRef)(null),r=(0,g.useRef)(null);(0,g.useLayoutEffect)(()=>{if(e.target){if(e.readOnly)r.current?.querySelector(`[data-line="${e.target.line}"]`)?.scrollIntoView({block:`center`});else if(n.current){let t=n.current,r=e.value.split(` `).slice(0,e.target.line-1).join(` `).length+ +(e.target.line>1);t.setSelectionRange(r,r),t.scrollTop=Math.max(0,(e.target.line-5)*(t.scrollHeight/Math.max(1,e.value.split(` `).length)))}}},[e.targetKey,e.readOnly]);function i(t,r,i,a){let o=n.current;o&&(o.focus(),o.setSelectionRange(t,r),document.execCommand(`insertText`,!1,i)||o.setRangeText(i,t,r,`end`),a&&o.setSelectionRange(a[0],a[1]),e.onChange(o.value))}if((0,g.useImperativeHandle)(t,()=>({wrap(e,t,r){let a=n.current;if(!a)return;let{selectionStart:o,selectionEnd:s}=a,c=a.value.slice(o,s)||r;i(o,s,e+c+t,[o+e.length,o+e.length+c.length])},linePrefix(e){let t=n.current;if(!t)return;let r=t.value.lastIndexOf(` `,t.selectionStart-1)+1,a=t.selectionEnd;i(r,a,t.value.slice(r,a).split(` `).map(t=>e+t).join(` `))},insert(e){let t=n.current;t&&i(t.selectionStart,t.selectionEnd,e)},reveal(e){r.current?.querySelector(`[data-line="${e}"]`)?.scrollIntoView({block:`start`})},focus(){n.current?.focus()},topLine(){return 1}})),!e.readOnly)return(0,O.jsx)(`textarea`,{ref:n,className:`wb-plain-edit`,"aria-label":f(`files.editLabel`,{path:e.path}),spellCheck:!1,autoCapitalize:`off`,autoCorrect:`off`,value:e.value,style:{fontSize:e.fontSize,whiteSpace:e.wordWrap?`pre-wrap`:`pre`},onChange:t=>e.onChange(t.target.value),onKeyDown:t=>{if((t.ctrlKey||t.metaKey)&&t.key.toLowerCase()===`s`&&(t.preventDefault(),e.onSave()),t.key===`Tab`&&!t.shiftKey&&!t.altKey&&!t.ctrlKey){t.preventDefault();let e=t.currentTarget;i(e.selectionStart,e.selectionEnd,` `)}}});let a=e.value.split(` -`),o=a.slice(0,N),s=e.target?.line||0,c=e.target?.endLine||s;return(0,O.jsxs)(`div`,{ref:r,className:`wb-plain`+(e.wordWrap?` wrap`:``),style:{fontSize:e.fontSize},role:`document`,"aria-label":e.path,children:[o.map((t,n)=>{let r=n+1;return(0,O.jsxs)(`div`,{className:`wb-plain-line`+(r>=s&&r<=c?` target`:``),"data-line":r,children:[(0,O.jsx)(`a`,{className:`wb-ln`,href:`#L`+r,"aria-label":f(`files.lineN`,{n:r}),onClick:t=>{t.preventDefault(),e.onLine({line:r})},children:r}),(0,O.jsx)(`span`,{children:t||`​`})]},n)}),a.length>N&&(0,O.jsx)(`p`,{className:`wb-note`,children:f(`files.plainLimit`,{count:N.toLocaleString()})})]})}),F={"file-plus":`M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8zM14 3v5h5M12 11v6M9 14h6`,"folder-plus":`M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2zM12 10v6M9 13h6`,refresh:`M20 11a8 8 0 1 0-2.3 5.7M20 5v6h-6`,collapse:`M4 6h16M4 12h10M4 18h6M17 15l3 3-3 3`,download:`M12 4v11M7 10l5 5 5-5M5 20h14`,search:`M11 18a7 7 0 1 0 0-14 7 7 0 0 0 0 14zM21 21l-5-5`,files:`M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8zM14 3v5h5`,goto:`M4 6h9M4 12h6M4 18h9M15 9l6 6M21 9v6h-6`,expand:`M4 9V4h5M20 15v5h-5M4 4l6 6M20 20l-6-6`,close:`M6 6l12 12M18 6L6 18`};function I({name:e,size:t=16}){return(0,O.jsx)(`svg`,{viewBox:`0 0 24 24`,width:t,height:t,fill:`none`,stroke:`currentColor`,strokeWidth:`1.9`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:(0,O.jsx)(`path`,{d:F[e]})})}function L({url:e,name:t}){let[n,r]=(0,g.useState)(`fit`),[i,a]=(0,g.useState)(),o=(0,g.useRef)(null),s=(0,g.useRef)(new Map),c=(0,g.useRef)(void 0),l=()=>{if(n!==`fit`)return n;let e=o.current,t=i;return!e||!t?1:Math.min(1,(e.clientWidth-24)/t.w,(e.clientHeight-24)/t.h)},u=e=>r(Math.max(.05,Math.min(16,e)));(0,g.useEffect)(()=>{let e=o.current;if(!e)return;let t=e=>{(e.ctrlKey||e.metaKey)&&(e.preventDefault(),u(l()*(e.deltaY<0?1.15:1/1.15)))};return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)});let d=l();return(0,O.jsxs)(`div`,{className:`wb-image`,children:[(0,O.jsxs)(`div`,{className:`wb-image-tools`,role:`toolbar`,"aria-label":f(`files.zoom`),children:[(0,O.jsx)(`button`,{"aria-label":f(`files.zoomOut`),onClick:()=>u(d/1.25),children:`−`}),(0,O.jsx)(`button`,{"aria-pressed":n===`fit`,onClick:()=>r(`fit`),children:f(`files.fit`)}),(0,O.jsx)(`button`,{"aria-pressed":n===1,onClick:()=>r(1),children:`100%`}),(0,O.jsx)(`button`,{"aria-label":f(`files.zoomIn`),onClick:()=>u(d*1.25),children:`+`}),(0,O.jsx)(`span`,{className:`wb-image-size`,children:i?`${i.w} × ${i.h} · ${Math.round(d*100)}%`:``})]}),(0,O.jsx)(`div`,{ref:o,className:`wb-image-stage`,onPointerDown:e=>{if(e.pointerType===`touch`&&(s.current.set(e.pointerId,{x:e.clientX,y:e.clientY}),s.current.size===2)){let[e,t]=[...s.current.values()];c.current={distance:Math.hypot(e.x-t.x,e.y-t.y),zoom:d}}},onPointerMove:e=>{if(s.current.has(e.pointerId)&&(s.current.set(e.pointerId,{x:e.clientX,y:e.clientY}),s.current.size===2&&c.current)){let[e,t]=[...s.current.values()];u(c.current.zoom*(Math.hypot(e.x-t.x,e.y-t.y)/c.current.distance))}},onPointerUp:e=>{s.current.delete(e.pointerId),s.current.size<2&&(c.current=void 0)},onPointerCancel:e=>s.current.delete(e.pointerId),onDoubleClick:()=>r(n===`fit`?1:`fit`),children:(0,O.jsx)(`img`,{src:e,alt:t,draggable:!1,onLoad:e=>a({w:e.currentTarget.naturalWidth,h:e.currentTarget.naturalHeight}),style:i?{width:i.w*d,height:i.h*d}:void 0})})]})}var R=`lec-pdf-positions`;function ee(e){try{return JSON.parse(localStorage.getItem(R)||`{}`)[e]}catch{return}}function z(e,t){try{let n=JSON.parse(localStorage.getItem(R)||`{}`);n[e]={...t,at:Date.now()};let r=Object.entries(n).sort((e,t)=>(t[1].at||0)-(e[1].at||0)).slice(0,100);localStorage.setItem(R,JSON.stringify(Object.fromEntries(r)))}catch{}}function B({blob:e,positionKey:t}){let n=(0,g.useRef)(null),r=(0,g.useRef)(null),a=(0,g.useRef)(ee(t)),[o,s]=(0,g.useState)(),[c,l]=(0,g.useState)(a.current?.page||1),[u,d]=(0,g.useState)(a.current?.zoom||1),[p,m]=(0,g.useState)(!0),[_,v]=(0,g.useState)(``),y=(0,g.useRef)(!1);(0,g.useEffect)(()=>{let t=!1,n;return(async()=>{let r=await h(()=>import(`/vendor/pdf.mjs`),[]);if(t)return;r.GlobalWorkerOptions.workerSrc=`/vendor/pdf.worker.mjs`,n=r.getDocument({data:new Uint8Array(await e.arrayBuffer()),standardFontDataUrl:`/vendor/standard_fonts/`,cMapUrl:`/vendor/cmaps/`,cMapPacked:!0,isEvalSupported:!1});let i=await n.promise;if(t){await i.destroy();return}l(e=>Math.min(Math.max(1,e),i.numPages)),s(i)})().catch(e=>{t||(v(i(e)),m(!1))}),()=>{t=!0,n?.destroy()}},[e]),(0,g.useEffect)(()=>{if(!o||!n.current)return;let e=!1,t;return m(!0),(async()=>{let i=await o.getPage(c),s=n.current;if(e||!s)return;let l=i.getViewport({scale:1}),d=Math.max(280,Math.min(1e3,(r.current?.clientWidth||800)-8))*u,f=i.getViewport({scale:d/l.width}),p=Math.min(devicePixelRatio||1,2);s.width=Math.floor(f.width*p),s.height=Math.floor(f.height*p),s.style.width=f.width+`px`;let m=s.getContext(`2d`);if(!m)throw Error(`Canvas unavailable`);t=i.render({canvasContext:m,viewport:f,transform:[p,0,0,p,0,0]}),await t.promise,!y.current&&r.current&&(y.current=!0,r.current.scrollTop=a.current?.scroll||0)})().catch(t=>{e||v(i(t))}).finally(()=>{e||m(!1)}),()=>{e=!0,t?.cancel()}},[o,c,u]),(0,g.useEffect)(()=>{o&&z(t,{page:c,zoom:u,scroll:r.current?.scrollTop||0})},[o,c,u,t]);let b=e=>{r.current&&(r.current.scrollTop=0),l(e)};return(0,O.jsxs)(`div`,{className:`wb-pdf`,children:[(0,O.jsxs)(`div`,{className:`pdf-controls`,children:[(0,O.jsx)(`button`,{disabled:p||c<=1,onClick:()=>b(c-1),children:f(`files.prevPage`)}),(0,O.jsx)(`span`,{id:`pdf-page`,children:_||(!p&&o?f(`files.pageOf`,{page:c,pages:o.numPages}):f(`files.loadingPdf`))}),(0,O.jsx)(`button`,{disabled:p||!o||c>=o.numPages,onClick:()=>b(c+1),children:f(`files.nextPage`)}),(0,O.jsx)(`button`,{"aria-label":f(`files.zoomOut`),disabled:u<=.5,onClick:()=>d(Math.max(.5,u/1.25)),children:`−`}),(0,O.jsx)(`button`,{"aria-label":f(`files.zoomIn`),disabled:u>=4,onClick:()=>d(Math.min(4,u*1.25)),children:`+`})]}),(0,O.jsx)(`div`,{ref:r,className:`wb-pdf-stage`,onScroll:e=>{o&&y.current&&z(t,{page:c,zoom:u,scroll:e.currentTarget.scrollTop})},children:(0,O.jsx)(`canvas`,{ref:n,"aria-label":f(`files.pdfPage`)})})]})}var te=(0,g.lazy)(()=>h(()=>import(`./viewers-f1y6zYtx.js`).then(e=>({default:e.MarkdownView})),__vite__mapDeps([6,1,7,2,8]))),ne=(0,g.lazy)(()=>h(()=>import(`./viewers-f1y6zYtx.js`).then(e=>({default:e.MarkdownFragment})),__vite__mapDeps([6,1,7,2,8]))),re=(0,g.lazy)(()=>h(()=>import(`./viewers-f1y6zYtx.js`).then(e=>({default:e.HtmlView})),__vite__mapDeps([6,1,7,2,8]))),V=(0,g.lazy)(()=>h(()=>import(`./viewers-f1y6zYtx.js`).then(e=>({default:e.MermaidView})),__vite__mapDeps([6,1,7,2,8]))),H=(0,g.lazy)(()=>h(()=>import(`./viewers-f1y6zYtx.js`).then(e=>({default:e.CsvTable})),__vite__mapDeps([6,1,7,2,8]))),U=(0,g.lazy)(()=>h(()=>import(`./viewers-f1y6zYtx.js`).then(e=>({default:e.NotebookView})),__vite__mapDeps([6,1,7,2,8]))),ie=(0,g.lazy)(()=>h(()=>import(`./RichMarkdown-CTHXOnWq.js`),__vite__mapDeps([9,1,7,2,8]))),ae=10485760,W=1048576,G=`lec-files-settings`;function K(){let e={autosave:!1,minimap:!0,wordWrap:!1,editor:`auto`,explorerWidth:280,editorShare:55};try{return{...e,...JSON.parse(localStorage.getItem(G)||`{}`)}}catch{return e}}function oe(){let[e,t]=(0,g.useState)(K);return(0,g.useEffect)(()=>{try{localStorage.setItem(G,JSON.stringify(e))}catch{}},[e]),[e,t]}function se(e){let[t,n]=(0,g.useState)(()=>matchMedia(e).matches);return(0,g.useEffect)(()=>{let t=matchMedia(e),r=()=>n(t.matches);return t.addEventListener(`change`,r),()=>t.removeEventListener(`change`,r)},[e]),t}var q=e=>e.slice(e.lastIndexOf(`/`)+1),ce=e=>e.includes(`/`)?e.slice(0,e.lastIndexOf(`/`)):``;function le({api:e,phone:t,notice:a,autosave:o,onSaved:s}){let[c,l]=(0,g.useState)([]),[u,d]=(0,g.useState)(),p=(0,g.useRef)(c);p.current=c;let m=(0,g.useRef)(new Map),h=(0,g.useCallback)((e,t)=>{l(n=>n.map(n=>n.path===e?{...n,...typeof t==`function`?t(n):t}:n))},[]),_=c.find(e=>e.path===u),v=(0,g.useCallback)(async(n,a,o=!1)=>{if(d(n),p.current.find(e=>e.path===n)){a&&h(n,e=>({target:a,targetKey:e.targetKey+1,mode:T(e.kind)&&(e.mode===`view`||e.mode===`rich`)?t||e.kind!==`markdown`?`source`:`split`:e.mode}));return}l(e=>[...e,{path:n,kind:`code`,loading:!0,url:``,text:``,buffer:``,sha:``,revision:0,readOnly:!0,outside:r(n),truncated:!1,mode:`source`,editing:!1,scripts:!1,target:a,targetKey:1,saving:!1}]);try{let i=await e.open(n),s=w(n,new Uint8Array(await i.blob.slice(0,8192).arrayBuffer())),c=![`image`,`pdf`,`binary`].includes(s),l=c&&i.blob.size>ae,u=c?await(l?i.blob.slice(0,W):i.blob).text():``,d=URL.createObjectURL(new Blob([i.blob],{type:C(n)})),f=!!a||o,m=T(s)?f?t||s!==`markdown`?`source`:`split`:`view`:`source`;if(!p.current.some(e=>e.path===n))return URL.revokeObjectURL(d);h(n,{kind:s,loading:!1,blob:i.blob,url:d,text:u,buffer:u,sha:i.sha256,readOnly:l||r(n),truncated:l,mode:m})}catch(e){h(n,{loading:!1,error:f(`files.link.failed`,{path:n,message:i(e)})})}},[e,t,h]),y=(0,g.useCallback)(e=>{let t=p.current.find(t=>t.path===e);if(t&&t.buffer!==t.text&&!window.confirm(f(`files.discard`,{name:q(e)})))return!1;t?.url&&URL.revokeObjectURL(t.url),m.current.delete(e),A().then(t=>t.releaseModel(e),()=>{});let n=p.current.filter(t=>t.path!==e);return l(n),d(t=>t===e?n.at(-1)?.path:t),!0},[]),b=(0,g.useCallback)(async(t,r)=>{let o=p.current.find(e=>e.path===t),c=m.current.get(t)??o?.buffer;if(!(!o||c===void 0||o.saving||o.readOnly||!r&&c===o.text)){h(t,{saving:!0,error:void 0});try{let n=await e.save(t,c,r||o.sha||`absent`);h(t,e=>{e.url&&URL.revokeObjectURL(e.url);let r=new Blob([c]);return{saving:!1,text:c,sha:n.sha256,conflict:void 0,disk:void 0,blob:r,url:URL.createObjectURL(new Blob([r],{type:C(t)}))}}),s?.(),a(f(`files.saved`,{name:q(t)}))}catch(e){e instanceof n?h(t,{saving:!1,conflict:{sha:e.sha256,message:e.message}}):h(t,{saving:!1,error:i(e)})}}},[e,a,s,h]),x=(0,g.useCallback)(async t=>{try{let n=await e.open(t),r=await n.blob.slice(0,ae).text();m.current.delete(t),h(t,e=>(e.url&&URL.revokeObjectURL(e.url),{blob:n.blob,url:URL.createObjectURL(new Blob([n.blob],{type:C(t)})),text:r,buffer:r,sha:n.sha256,revision:e.revision+1,conflict:void 0,disk:void 0,error:void 0}))}catch(e){h(t,{error:i(e)})}},[e,h]),S=(0,g.useCallback)(async()=>{for(let t of p.current.slice(0,20)){if(t.loading||t.saving||!t.sha||t.outside)continue;let n=t.path;try{let t=await e.stat(n),r=p.current.find(e=>e.path===n);if(!r||r.saving)continue;t.exists?t.sha256&&t.sha256!==r.sha?r.buffer===r.text&&!r.truncated?(await x(n),a(f(`files.reloaded`,{name:q(n)}))):h(n,{disk:`changed`}):r.disk&&h(n,{disk:void 0}):h(n,{disk:`deleted`})}catch{}}},[e,a,x,h]);return(0,g.useEffect)(()=>{let e=()=>void S();return window.addEventListener(`focus`,e),()=>window.removeEventListener(`focus`,e)},[S]),(0,g.useEffect)(()=>{if(!o||!_||_.readOnly||_.buffer===_.text||_.conflict||_.saving)return;let e=window.setTimeout(()=>void b(_.path),1e3);return()=>window.clearTimeout(e)},[o,_?.buffer,_?.conflict,_?.saving]),(0,g.useEffect)(()=>{let e=e=>{p.current.some(e=>e.buffer!==e.text)&&e.preventDefault()};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[]),{docs:c,active:u,setActive:d,doc:_,update:h,openFile:v,closeDoc:y,save:b,reload:x,checkDisk:S,remap:(0,g.useCallback)((e,t)=>{let n=n=>n===e||n.startsWith(e+`/`)?t+n.slice(e.length):n;l(e=>e.map(e=>({...e,path:n(e.path)}))),d(e=>e&&n(e))},[]),typed:m}}function ue(e){let{docs:t,api:n,phone:r,full:a,settings:s,setSettings:c,notice:l}=e,{doc:u,update:d}=t,p=(0,g.useRef)(null),[m,h]=(0,g.useState)(!1),[_,v]=(0,g.useState)();if((0,g.useEffect)(()=>{if(!m)return;let e=e=>{(e instanceof KeyboardEvent?e.key!==`Escape`:e.target instanceof Element&&e.target.closest(`.wb-doc-menu`))||h(!1)};return document.addEventListener(`pointerdown`,e,!0),document.addEventListener(`keydown`,e,!0),()=>{document.removeEventListener(`pointerdown`,e,!0),document.removeEventListener(`keydown`,e,!0)}},[m]),!u)return null;let b=e=>e.buffer!==e.text,x=n=>{t.closeDoc(n)&&e.onClosed?.(n)},S=e=>d(u.path,{mode:e,editing:e!==`view`||u.editing}),w=u.kind===`markdown`&&(u.mode===`split`||u.mode===`source`)&&!u.readOnly&&(a||u.editing),E=![`image`,`pdf`,`binary`].includes(u.kind);function D(i){if(i.loading)return(0,O.jsx)(`p`,{className:`wb-muted`,children:f(`files.opening`,{name:q(i.path)})});if(i.error&&!i.blob)return(0,O.jsx)(`p`,{className:`wb-error`,role:`alert`,children:i.error});if(i.kind===`image`||i.kind===`svg`&&i.mode===`view`)return(0,O.jsx)(L,{url:i.url,name:i.path});if(i.kind===`pdf`)return(0,O.jsx)(B,{blob:i.blob,positionKey:e.positionPrefix+`:`+i.path});if(i.kind===`binary`)return(0,O.jsx)(`p`,{className:`wb-muted`,children:f(`files.binary`,{size:(i.blob?.size||0).toLocaleString()})});let o=e=>{t.typed.current.set(i.path,e),d(i.path,{buffer:e})};if(i.mode===`rich`)return(0,O.jsx)(`div`,{className:`wb-md-scroll wb-rich-scroll`,children:(0,O.jsx)(ie,{value:i.buffer,revision:i.revision,readOnly:i.readOnly,onChange:o,onSave:()=>void t.save(i.path)},i.path)});let u=(0,O.jsx)(j,{ref:p,path:i.path,value:i.buffer,revision:i.revision,readOnly:i.readOnly||!a&&!i.editing,full:a,fontSize:r?12:13,minimap:s.minimap&&!r,wordWrap:s.wordWrap||i.kind===`markdown`||r&&!a,target:i.target,targetKey:i.targetKey,onChange:o,onSave:()=>void t.save(i.path),onLine:e=>d(i.path,{target:e}),onScrollLine:i.kind===`markdown`?e=>d(i.path,{syncLine:e}):void 0,onFallback:e=>{l(f(`files.editorFallback`,{reason:e}),!0),c(e=>({...e,editor:`simple`}))}});if(i.mode===`source`)return u;let m=(()=>{switch(i.kind){case`markdown`:return(0,O.jsx)(te,{text:i.buffer,dir:ce(i.path),toc:i.mode===`view`,syncLine:i.mode===`split`?i.syncLine:void 0,onOpenPath:t=>e.onOpenPath(t),onWiki:e.onWiki,onSourceLine:i.mode===`split`?e=>p.current?.reveal(e):e=>d(i.path,t=>({mode:r?`source`:`split`,target:{line:e},targetKey:t.targetKey+1})),loadImage:async e=>URL.createObjectURL(new Blob([(await n.open(e)).blob],{type:C(e)}))});case`html`:return(0,O.jsx)(re,{text:i.buffer,scripts:i.scripts});case`mermaid`:return(0,O.jsx)(V,{text:i.buffer});case`csv`:return(0,O.jsx)(H,{text:i.buffer,path:i.path});case`notebook`:return(0,O.jsx)(U,{text:i.buffer,markdown:e=>(0,O.jsx)(ne,{text:e})})}return null})();return i.mode===`split`?(0,O.jsxs)(`div`,{className:`wb-split`,children:[(0,O.jsx)(`div`,{className:`wb-split-source`,children:u}),(0,O.jsx)(`div`,{className:`wb-split-preview wb-md-scroll`,children:m})]}):(0,O.jsx)(`div`,{className:`wb-md-scroll`,children:m})}return(0,O.jsxs)(`section`,{id:e.sectionId,className:`wb-editor `+(e.className||``),style:e.style,"data-back-overlay":e.sectionId?`20`:void 0,"aria-label":f(`files.fileLabel`,{path:u.path}),children:[e.before,e.showTabs&&(0,O.jsx)(`div`,{className:`wb-tabs`,role:`tablist`,"aria-label":f(`files.openFiles`),children:t.docs.map(e=>(0,O.jsxs)(`div`,{className:`wb-tab`+(e.path===t.active?` active`:``),children:[(0,O.jsxs)(`span`,{role:`tab`,tabIndex:0,"aria-selected":e.path===t.active,title:e.path,onClick:()=>t.setActive(e.path),onKeyDown:n=>{(n.key===`Enter`||n.key===` `)&&t.setActive(e.path)},onAuxClick:t=>{t.button===1&&x(e.path)},children:[q(e.path),b(e)?` ●`:``]}),(0,O.jsx)(`button`,{className:`wb-tab-close`,"aria-label":f(`files.closeTab`,{name:q(e.path)}),onClick:()=>x(e.path),children:`×`})]},e.path))}),(0,O.jsxs)(`div`,{className:`wb-doc-head`,children:[e.onBack&&(0,O.jsx)(`button`,{className:`wb-back`,"aria-label":f(`files.back`),onClick:e.onBack,hidden:!r,children:`‹`}),(0,O.jsx)(`span`,{className:`wb-doc-path`,title:u.path,children:u.path}),(0,O.jsx)(`span`,{className:`wb-doc-state`,role:`status`,children:u.saving?f(`files.saving`):u.outside?f(`files.outsideReadOnly`):u.readOnly&&u.truncated?f(`files.readOnlyTruncated`):b(u)?f(`files.unsaved`):``}),T(u.kind)&&!u.loading&&(0,O.jsxs)(`div`,{className:`wb-modes`,role:`group`,"aria-label":f(`files.view`),children:[(0,O.jsx)(`button`,{"aria-pressed":u.mode===`view`,onClick:()=>S(`view`),children:f(`files.preview`)}),u.kind===`markdown`&&!u.readOnly&&(0,O.jsx)(`button`,{"aria-pressed":u.mode===`rich`,onClick:()=>S(`rich`),children:f(`files.rich`)}),u.kind===`markdown`&&!r&&(0,O.jsx)(`button`,{"aria-pressed":u.mode===`split`,onClick:()=>S(`split`),children:f(`files.split`)}),(0,O.jsx)(`button`,{"aria-pressed":u.mode===`source`,onClick:()=>S(`source`),children:u.kind===`markdown`&&!u.readOnly?f(`files.edit`):f(`files.source`)})]}),!a&&!u.readOnly&&u.mode===`source`&&E&&(0,O.jsx)(`button`,{id:`file-edit`,"aria-pressed":u.editing,onClick:()=>d(u.path,{editing:!u.editing}),children:u.editing?f(`files.done`):f(`files.edit`)}),!u.readOnly&&E&&(0,O.jsx)(`button`,{id:`file-save`,className:`primary`,disabled:!b(u)||u.saving,onClick:()=>void t.save(u.path),title:f(`files.saveHint`),children:f(`files.save`)}),(0,O.jsx)(`a`,{id:`preview-download`,className:`button wb-icon-button`,href:u.url||void 0,download:q(u.path),"aria-label":f(`files.download`),title:f(`files.download`),children:(0,O.jsx)(I,{name:`download`})}),(0,O.jsxs)(`details`,{className:`wb-doc-menu`,"data-back-close":!0,open:m,onToggle:e=>h(e.currentTarget.open),children:[(0,O.jsx)(`summary`,{"aria-label":f(`files.actions`),title:f(`files.actions`),children:`⋯`}),(0,O.jsxs)(`div`,{className:`wb-menu`,role:`menu`,onClick:e=>e.target.closest(`button,a`)&&h(!1),children:[e.onInsert&&(0,O.jsx)(`button`,{id:`preview-insert`,role:`menuitem`,onClick:()=>e.onInsert?.(u.path),children:f(`files.insertPath`)}),(0,O.jsx)(`button`,{role:`menuitem`,onClick:()=>void o(u.path).then(()=>l(f(`files.pathCopied`)),e=>l(i(e),!0)),children:f(`files.copyPath`)}),e.linkBase&&(0,O.jsx)(`button`,{role:`menuitem`,onClick:()=>void o(y(e.linkBase,u.path,u.target)).then(()=>l(u.target?f(`files.lineLinkCopied`,{line:u.target.line}):f(`files.linkCopied`)),e=>l(i(e),!0)),children:u.target?f(`files.copyLinkLine`,{line:u.target.line}):f(`files.copyLink`)}),e.onReveal&&!u.outside&&(0,O.jsx)(`button`,{role:`menuitem`,onClick:()=>e.onReveal?.(u.path),children:f(`files.showInExplorer`)}),(0,O.jsx)(`button`,{role:`menuitem`,onClick:()=>void t.reload(u.path),disabled:u.loading,children:f(`files.reload`)}),u.kind===`html`&&(0,O.jsx)(`button`,{role:`menuitem`,"aria-pressed":u.scripts,onClick:()=>d(u.path,{scripts:!u.scripts}),children:u.scripts?f(`files.blockScripts`):f(`files.allowScripts`)}),(0,O.jsxs)(`label`,{className:`wb-check`,role:`menuitemcheckbox`,"aria-checked":s.autosave,children:[(0,O.jsx)(`input`,{type:`checkbox`,checked:s.autosave,onChange:()=>c(e=>({...e,autosave:!e.autosave}))}),` `,f(`files.autosave`)]}),(0,O.jsxs)(`label`,{className:`wb-check`,role:`menuitemcheckbox`,"aria-checked":s.wordWrap,children:[(0,O.jsx)(`input`,{type:`checkbox`,checked:s.wordWrap,onChange:()=>c(e=>({...e,wordWrap:!e.wordWrap}))}),` `,f(`files.wordWrap`)]}),a&&(0,O.jsxs)(`label`,{className:`wb-check`,role:`menuitemcheckbox`,"aria-checked":s.minimap,children:[(0,O.jsx)(`input`,{type:`checkbox`,checked:s.minimap,onChange:()=>c(e=>({...e,minimap:!e.minimap}))}),` `,f(`files.minimap`)]}),(0,O.jsx)(`button`,{role:`menuitem`,onClick:()=>c(e=>({...e,editor:a?`simple`:`full`})),children:f(a?`files.useSimple`:`files.useFull`)}),e.extraMenu]})]}),(0,O.jsx)(`button`,{"data-close":!0,className:`wb-close`,"aria-label":f(`files.closeFile`),title:f(`files.closeFile`),onClick:()=>x(u.path),children:(0,O.jsx)(I,{name:`close`})})]}),w&&(0,O.jsx)(J,{editor:p}),u.mode===`rich`&&(0,O.jsx)(`p`,{className:`wb-rich-note`,children:f(`files.richNote`)}),(u.conflict||u.disk||u.error&&u.blob)&&(0,O.jsxs)(`div`,{className:`wb-banner`,role:`alert`,children:[u.conflict?(0,O.jsx)(`span`,{children:f(`files.notSaved`,{message:u.conflict.message})}):u.disk===`deleted`?(0,O.jsx)(`span`,{children:f(`files.deletedOnDisk`)}):u.disk===`changed`?(0,O.jsx)(`span`,{children:f(`files.changedOnDisk`)}):(0,O.jsx)(`span`,{children:u.error}),(u.conflict||u.disk===`changed`)&&(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(`button`,{onClick:()=>void n.open(u.path).then(async e=>v({path:u.path,disk:await e.blob.text(),mine:u.buffer}),e=>l(i(e),!0)),children:f(`files.compare`)}),(0,O.jsx)(`button`,{onClick:()=>void t.save(u.path,`any`),children:f(`files.keepMine`)}),(0,O.jsx)(`button`,{onClick:()=>void t.reload(u.path),children:f(`files.useDisk`)})]}),u.disk===`deleted`&&!u.conflict&&(0,O.jsx)(`button`,{onClick:()=>void t.save(u.path,`absent`),children:f(`files.saveAgain`)}),u.error&&!u.conflict&&!u.disk&&(0,O.jsx)(`button`,{onClick:()=>d(u.path,{error:void 0}),children:f(`files.dismiss`)})]}),(0,O.jsx)(`div`,{id:e.sectionId?`preview-body`:void 0,className:`wb-body kind-`+u.kind,children:(0,O.jsx)(g.Suspense,{fallback:(0,O.jsx)(`p`,{className:`wb-muted`,children:f(`files.loadingViewer`)}),children:D(u)})}),_&&(0,O.jsx)(Y,{diff:_,onClose:()=>v(void 0)})]})}function J({editor:e}){let t=[[`B`,f(`files.bold`),()=>e.current?.wrap(`**`,`**`,`bold text`)],[`I`,f(`files.italic`),()=>e.current?.wrap(`_`,`_`,`italic text`)],[`H`,f(`files.heading`),()=>e.current?.linePrefix(`## `)],["`",f(`files.inlineCode`),()=>e.current?.wrap("`","`",`code`)],[f(`files.linkButton`),f(`files.linkButton`),()=>e.current?.wrap(`[`,`](https://)`,`link text`)],[`•`,f(`files.bulleted`),()=>e.current?.linePrefix(`- `)],[`1.`,f(`files.numbered`),()=>e.current?.linePrefix(`1. `)],[`☐`,f(`files.task`),()=>e.current?.linePrefix(`- [ ] `)],[`❝`,f(`files.quote`),()=>e.current?.linePrefix(`> `)],[`▦`,f(`files.table`),()=>e.current?.insert(` +`),o=a.slice(0,N),s=e.target?.line||0,c=e.target?.endLine||s;return(0,O.jsxs)(`div`,{ref:r,className:`wb-plain`+(e.wordWrap?` wrap`:``),style:{fontSize:e.fontSize},role:`document`,"aria-label":e.path,children:[o.map((t,n)=>{let r=n+1;return(0,O.jsxs)(`div`,{className:`wb-plain-line`+(r>=s&&r<=c?` target`:``),"data-line":r,children:[(0,O.jsx)(`a`,{className:`wb-ln`,href:`#L`+r,"aria-label":f(`files.lineN`,{n:r}),onClick:t=>{t.preventDefault(),e.onLine({line:r})},children:r}),(0,O.jsx)(`span`,{children:t||`​`})]},n)}),a.length>N&&(0,O.jsx)(`p`,{className:`wb-note`,children:f(`files.plainLimit`,{count:N.toLocaleString()})})]})}),F={"file-plus":`M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8zM14 3v5h5M12 11v6M9 14h6`,"folder-plus":`M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2zM12 10v6M9 13h6`,refresh:`M20 11a8 8 0 1 0-2.3 5.7M20 5v6h-6`,collapse:`M4 6h16M4 12h10M4 18h6M17 15l3 3-3 3`,download:`M12 4v11M7 10l5 5 5-5M5 20h14`,search:`M11 18a7 7 0 1 0 0-14 7 7 0 0 0 0 14zM21 21l-5-5`,files:`M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8zM14 3v5h5`,goto:`M4 6h9M4 12h6M4 18h9M15 9l6 6M21 9v6h-6`,expand:`M4 9V4h5M20 15v5h-5M4 4l6 6M20 20l-6-6`,close:`M6 6l12 12M18 6L6 18`};function I({name:e,size:t=16}){return(0,O.jsx)(`svg`,{viewBox:`0 0 24 24`,width:t,height:t,fill:`none`,stroke:`currentColor`,strokeWidth:`1.9`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:(0,O.jsx)(`path`,{d:F[e]})})}function L({url:e,name:t}){let[n,r]=(0,g.useState)(`fit`),[i,a]=(0,g.useState)(),o=(0,g.useRef)(null),s=(0,g.useRef)(new Map),c=(0,g.useRef)(void 0),l=()=>{if(n!==`fit`)return n;let e=o.current,t=i;return!e||!t?1:Math.min(1,(e.clientWidth-24)/t.w,(e.clientHeight-24)/t.h)},u=e=>r(Math.max(.05,Math.min(16,e)));(0,g.useEffect)(()=>{let e=o.current;if(!e)return;let t=e=>{(e.ctrlKey||e.metaKey)&&(e.preventDefault(),u(l()*(e.deltaY<0?1.15:1/1.15)))};return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)});let d=l();return(0,O.jsxs)(`div`,{className:`wb-image`,children:[(0,O.jsxs)(`div`,{className:`wb-image-tools`,role:`toolbar`,"aria-label":f(`files.zoom`),children:[(0,O.jsx)(`button`,{"aria-label":f(`files.zoomOut`),onClick:()=>u(d/1.25),children:`−`}),(0,O.jsx)(`button`,{"aria-pressed":n===`fit`,onClick:()=>r(`fit`),children:f(`files.fit`)}),(0,O.jsx)(`button`,{"aria-pressed":n===1,onClick:()=>r(1),children:`100%`}),(0,O.jsx)(`button`,{"aria-label":f(`files.zoomIn`),onClick:()=>u(d*1.25),children:`+`}),(0,O.jsx)(`span`,{className:`wb-image-size`,children:i?`${i.w} × ${i.h} · ${Math.round(d*100)}%`:``})]}),(0,O.jsx)(`div`,{ref:o,className:`wb-image-stage`,onPointerDown:e=>{if(e.pointerType===`touch`&&(s.current.set(e.pointerId,{x:e.clientX,y:e.clientY}),s.current.size===2)){let[e,t]=[...s.current.values()];c.current={distance:Math.hypot(e.x-t.x,e.y-t.y),zoom:d}}},onPointerMove:e=>{if(s.current.has(e.pointerId)&&(s.current.set(e.pointerId,{x:e.clientX,y:e.clientY}),s.current.size===2&&c.current)){let[e,t]=[...s.current.values()];u(c.current.zoom*(Math.hypot(e.x-t.x,e.y-t.y)/c.current.distance))}},onPointerUp:e=>{s.current.delete(e.pointerId),s.current.size<2&&(c.current=void 0)},onPointerCancel:e=>s.current.delete(e.pointerId),onDoubleClick:()=>r(n===`fit`?1:`fit`),children:(0,O.jsx)(`img`,{src:e,alt:t,draggable:!1,onLoad:e=>a({w:e.currentTarget.naturalWidth,h:e.currentTarget.naturalHeight}),style:i?{width:i.w*d,height:i.h*d}:void 0})})]})}var R=`lec-pdf-positions`;function ee(e){try{return JSON.parse(localStorage.getItem(R)||`{}`)[e]}catch{return}}function z(e,t){try{let n=JSON.parse(localStorage.getItem(R)||`{}`);n[e]={...t,at:Date.now()};let r=Object.entries(n).sort((e,t)=>(t[1].at||0)-(e[1].at||0)).slice(0,100);localStorage.setItem(R,JSON.stringify(Object.fromEntries(r)))}catch{}}function B({blob:e,positionKey:t}){let n=(0,g.useRef)(null),r=(0,g.useRef)(null),a=(0,g.useRef)(ee(t)),[o,s]=(0,g.useState)(),[c,l]=(0,g.useState)(a.current?.page||1),[u,d]=(0,g.useState)(a.current?.zoom||1),[p,m]=(0,g.useState)(!0),[_,v]=(0,g.useState)(``),y=(0,g.useRef)(!1);(0,g.useEffect)(()=>{let t=!1,n;return(async()=>{let r=await h(()=>import(`/vendor/pdf.mjs`),[]);if(t)return;r.GlobalWorkerOptions.workerSrc=`/vendor/pdf.worker.mjs`,n=r.getDocument({data:new Uint8Array(await e.arrayBuffer()),standardFontDataUrl:`/vendor/standard_fonts/`,cMapUrl:`/vendor/cmaps/`,cMapPacked:!0,isEvalSupported:!1});let i=await n.promise;if(t){await i.destroy();return}l(e=>Math.min(Math.max(1,e),i.numPages)),s(i)})().catch(e=>{t||(v(i(e)),m(!1))}),()=>{t=!0,n?.destroy()}},[e]),(0,g.useEffect)(()=>{if(!o||!n.current)return;let e=!1,t;return m(!0),(async()=>{let i=await o.getPage(c),s=n.current;if(e||!s)return;let l=i.getViewport({scale:1}),d=Math.max(280,Math.min(1e3,(r.current?.clientWidth||800)-8))*u,f=i.getViewport({scale:d/l.width}),p=Math.min(devicePixelRatio||1,2);s.width=Math.floor(f.width*p),s.height=Math.floor(f.height*p),s.style.width=f.width+`px`;let m=s.getContext(`2d`);if(!m)throw Error(`Canvas unavailable`);t=i.render({canvasContext:m,viewport:f,transform:[p,0,0,p,0,0]}),await t.promise,!y.current&&r.current&&(y.current=!0,r.current.scrollTop=a.current?.scroll||0)})().catch(t=>{e||v(i(t))}).finally(()=>{e||m(!1)}),()=>{e=!0,t?.cancel()}},[o,c,u]),(0,g.useEffect)(()=>{o&&z(t,{page:c,zoom:u,scroll:r.current?.scrollTop||0})},[o,c,u,t]);let b=e=>{r.current&&(r.current.scrollTop=0),l(e)};return(0,O.jsxs)(`div`,{className:`wb-pdf`,children:[(0,O.jsxs)(`div`,{className:`pdf-controls`,children:[(0,O.jsx)(`button`,{disabled:p||c<=1,onClick:()=>b(c-1),children:f(`files.prevPage`)}),(0,O.jsx)(`span`,{id:`pdf-page`,children:_||(!p&&o?f(`files.pageOf`,{page:c,pages:o.numPages}):f(`files.loadingPdf`))}),(0,O.jsx)(`button`,{disabled:p||!o||c>=o.numPages,onClick:()=>b(c+1),children:f(`files.nextPage`)}),(0,O.jsx)(`button`,{"aria-label":f(`files.zoomOut`),disabled:u<=.5,onClick:()=>d(Math.max(.5,u/1.25)),children:`−`}),(0,O.jsx)(`button`,{"aria-label":f(`files.zoomIn`),disabled:u>=4,onClick:()=>d(Math.min(4,u*1.25)),children:`+`})]}),(0,O.jsx)(`div`,{ref:r,className:`wb-pdf-stage`,onScroll:e=>{o&&y.current&&z(t,{page:c,zoom:u,scroll:e.currentTarget.scrollTop})},children:(0,O.jsx)(`canvas`,{ref:n,"aria-label":f(`files.pdfPage`)})})]})}var te=(0,g.lazy)(()=>h(()=>import(`./viewers-Brg_4V67.js`).then(e=>({default:e.MarkdownView})),__vite__mapDeps([6,1,7,2,8]))),ne=(0,g.lazy)(()=>h(()=>import(`./viewers-Brg_4V67.js`).then(e=>({default:e.MarkdownFragment})),__vite__mapDeps([6,1,7,2,8]))),re=(0,g.lazy)(()=>h(()=>import(`./viewers-Brg_4V67.js`).then(e=>({default:e.HtmlView})),__vite__mapDeps([6,1,7,2,8]))),V=(0,g.lazy)(()=>h(()=>import(`./viewers-Brg_4V67.js`).then(e=>({default:e.MermaidView})),__vite__mapDeps([6,1,7,2,8]))),H=(0,g.lazy)(()=>h(()=>import(`./viewers-Brg_4V67.js`).then(e=>({default:e.CsvTable})),__vite__mapDeps([6,1,7,2,8]))),U=(0,g.lazy)(()=>h(()=>import(`./viewers-Brg_4V67.js`).then(e=>({default:e.NotebookView})),__vite__mapDeps([6,1,7,2,8]))),ie=(0,g.lazy)(()=>h(()=>import(`./RichMarkdown-Dk2rttMD.js`),__vite__mapDeps([9,1,7,2,8]))),ae=10485760,W=1048576,G=`lec-files-settings`;function K(){let e={autosave:!1,minimap:!0,wordWrap:!1,editor:`auto`,explorerWidth:280,editorShare:55};try{return{...e,...JSON.parse(localStorage.getItem(G)||`{}`)}}catch{return e}}function oe(){let[e,t]=(0,g.useState)(K);return(0,g.useEffect)(()=>{try{localStorage.setItem(G,JSON.stringify(e))}catch{}},[e]),[e,t]}function se(e){let[t,n]=(0,g.useState)(()=>matchMedia(e).matches);return(0,g.useEffect)(()=>{let t=matchMedia(e),r=()=>n(t.matches);return t.addEventListener(`change`,r),()=>t.removeEventListener(`change`,r)},[e]),t}var q=e=>e.slice(e.lastIndexOf(`/`)+1),ce=e=>e.includes(`/`)?e.slice(0,e.lastIndexOf(`/`)):``;function le({api:e,phone:t,notice:a,autosave:o,onSaved:s}){let[c,l]=(0,g.useState)([]),[u,d]=(0,g.useState)(),p=(0,g.useRef)(c);p.current=c;let m=(0,g.useRef)(new Map),h=(0,g.useCallback)((e,t)=>{l(n=>n.map(n=>n.path===e?{...n,...typeof t==`function`?t(n):t}:n))},[]),_=c.find(e=>e.path===u),v=(0,g.useCallback)(async(n,a,o=!1)=>{if(d(n),p.current.find(e=>e.path===n)){a&&h(n,e=>({target:a,targetKey:e.targetKey+1,mode:T(e.kind)&&(e.mode===`view`||e.mode===`rich`)?t||e.kind!==`markdown`?`source`:`split`:e.mode}));return}l(e=>[...e,{path:n,kind:`code`,loading:!0,url:``,text:``,buffer:``,sha:``,revision:0,readOnly:!0,outside:r(n),truncated:!1,mode:`source`,editing:!1,scripts:!1,target:a,targetKey:1,saving:!1}]);try{let i=await e.open(n),s=w(n,new Uint8Array(await i.blob.slice(0,8192).arrayBuffer())),c=![`image`,`pdf`,`binary`].includes(s),l=c&&i.blob.size>ae,u=c?await(l?i.blob.slice(0,W):i.blob).text():``,d=URL.createObjectURL(new Blob([i.blob],{type:C(n)})),f=!!a||o,m=T(s)?f?t||s!==`markdown`?`source`:`split`:`view`:`source`;if(!p.current.some(e=>e.path===n))return URL.revokeObjectURL(d);h(n,{kind:s,loading:!1,blob:i.blob,url:d,text:u,buffer:u,sha:i.sha256,readOnly:l||r(n),truncated:l,mode:m})}catch(e){h(n,{loading:!1,error:f(`files.link.failed`,{path:n,message:i(e)})})}},[e,t,h]),y=(0,g.useCallback)(e=>{let t=p.current.find(t=>t.path===e);if(t&&t.buffer!==t.text&&!window.confirm(f(`files.discard`,{name:q(e)})))return!1;t?.url&&URL.revokeObjectURL(t.url),m.current.delete(e),A().then(t=>t.releaseModel(e),()=>{});let n=p.current.filter(t=>t.path!==e);return l(n),d(t=>t===e?n.at(-1)?.path:t),!0},[]),b=(0,g.useCallback)(async(t,r)=>{let o=p.current.find(e=>e.path===t),c=m.current.get(t)??o?.buffer;if(!(!o||c===void 0||o.saving||o.readOnly||!r&&c===o.text)){h(t,{saving:!0,error:void 0});try{let n=await e.save(t,c,r||o.sha||`absent`);h(t,e=>{e.url&&URL.revokeObjectURL(e.url);let r=new Blob([c]);return{saving:!1,text:c,sha:n.sha256,conflict:void 0,disk:void 0,blob:r,url:URL.createObjectURL(new Blob([r],{type:C(t)}))}}),s?.(),a(f(`files.saved`,{name:q(t)}))}catch(e){e instanceof n?h(t,{saving:!1,conflict:{sha:e.sha256,message:e.message}}):h(t,{saving:!1,error:i(e)})}}},[e,a,s,h]),x=(0,g.useCallback)(async t=>{try{let n=await e.open(t),r=await n.blob.slice(0,ae).text();m.current.delete(t),h(t,e=>(e.url&&URL.revokeObjectURL(e.url),{blob:n.blob,url:URL.createObjectURL(new Blob([n.blob],{type:C(t)})),text:r,buffer:r,sha:n.sha256,revision:e.revision+1,conflict:void 0,disk:void 0,error:void 0}))}catch(e){h(t,{error:i(e)})}},[e,h]),S=(0,g.useCallback)(async()=>{for(let t of p.current.slice(0,20)){if(t.loading||t.saving||!t.sha||t.outside)continue;let n=t.path;try{let t=await e.stat(n),r=p.current.find(e=>e.path===n);if(!r||r.saving)continue;t.exists?t.sha256&&t.sha256!==r.sha?r.buffer===r.text&&!r.truncated?(await x(n),a(f(`files.reloaded`,{name:q(n)}))):h(n,{disk:`changed`}):r.disk&&h(n,{disk:void 0}):h(n,{disk:`deleted`})}catch{}}},[e,a,x,h]);return(0,g.useEffect)(()=>{let e=()=>void S();return window.addEventListener(`focus`,e),()=>window.removeEventListener(`focus`,e)},[S]),(0,g.useEffect)(()=>{if(!o||!_||_.readOnly||_.buffer===_.text||_.conflict||_.saving)return;let e=window.setTimeout(()=>void b(_.path),1e3);return()=>window.clearTimeout(e)},[o,_?.buffer,_?.conflict,_?.saving]),(0,g.useEffect)(()=>{let e=e=>{p.current.some(e=>e.buffer!==e.text)&&e.preventDefault()};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[]),{docs:c,active:u,setActive:d,doc:_,update:h,openFile:v,closeDoc:y,save:b,reload:x,checkDisk:S,remap:(0,g.useCallback)((e,t)=>{let n=n=>n===e||n.startsWith(e+`/`)?t+n.slice(e.length):n;l(e=>e.map(e=>({...e,path:n(e.path)}))),d(e=>e&&n(e))},[]),typed:m}}function ue(e){let{docs:t,api:n,phone:r,full:a,settings:s,setSettings:c,notice:l}=e,{doc:u,update:d}=t,p=(0,g.useRef)(null),[m,h]=(0,g.useState)(!1),[_,v]=(0,g.useState)();if((0,g.useEffect)(()=>{if(!m)return;let e=e=>{(e instanceof KeyboardEvent?e.key!==`Escape`:e.target instanceof Element&&e.target.closest(`.wb-doc-menu`))||h(!1)};return document.addEventListener(`pointerdown`,e,!0),document.addEventListener(`keydown`,e,!0),()=>{document.removeEventListener(`pointerdown`,e,!0),document.removeEventListener(`keydown`,e,!0)}},[m]),!u)return null;let b=e=>e.buffer!==e.text,x=n=>{t.closeDoc(n)&&e.onClosed?.(n)},S=e=>d(u.path,{mode:e,editing:e!==`view`||u.editing}),w=u.kind===`markdown`&&(u.mode===`split`||u.mode===`source`)&&!u.readOnly&&(a||u.editing),E=![`image`,`pdf`,`binary`].includes(u.kind);function D(i){if(i.loading)return(0,O.jsx)(`p`,{className:`wb-muted`,children:f(`files.opening`,{name:q(i.path)})});if(i.error&&!i.blob)return(0,O.jsx)(`p`,{className:`wb-error`,role:`alert`,children:i.error});if(i.kind===`image`||i.kind===`svg`&&i.mode===`view`)return(0,O.jsx)(L,{url:i.url,name:i.path});if(i.kind===`pdf`)return(0,O.jsx)(B,{blob:i.blob,positionKey:e.positionPrefix+`:`+i.path});if(i.kind===`binary`)return(0,O.jsx)(`p`,{className:`wb-muted`,children:f(`files.binary`,{size:(i.blob?.size||0).toLocaleString()})});let o=e=>{t.typed.current.set(i.path,e),d(i.path,{buffer:e})};if(i.mode===`rich`)return(0,O.jsx)(`div`,{className:`wb-md-scroll wb-rich-scroll`,children:(0,O.jsx)(ie,{value:i.buffer,revision:i.revision,readOnly:i.readOnly,onChange:o,onSave:()=>void t.save(i.path)},i.path)});let u=(0,O.jsx)(j,{ref:p,path:i.path,value:i.buffer,revision:i.revision,readOnly:i.readOnly||!a&&!i.editing,full:a,fontSize:r?12:13,minimap:s.minimap&&!r,wordWrap:s.wordWrap||i.kind===`markdown`||r&&!a,target:i.target,targetKey:i.targetKey,onChange:o,onSave:()=>void t.save(i.path),onLine:e=>d(i.path,{target:e}),onScrollLine:i.kind===`markdown`?e=>d(i.path,{syncLine:e}):void 0,onFallback:e=>{l(f(`files.editorFallback`,{reason:e}),!0),c(e=>({...e,editor:`simple`}))}});if(i.mode===`source`)return u;let m=(()=>{switch(i.kind){case`markdown`:return(0,O.jsx)(te,{text:i.buffer,dir:ce(i.path),toc:i.mode===`view`,syncLine:i.mode===`split`?i.syncLine:void 0,onOpenPath:t=>e.onOpenPath(t),onWiki:e.onWiki,onSourceLine:i.mode===`split`?e=>p.current?.reveal(e):e=>d(i.path,t=>({mode:r?`source`:`split`,target:{line:e},targetKey:t.targetKey+1})),loadImage:async e=>URL.createObjectURL(new Blob([(await n.open(e)).blob],{type:C(e)}))});case`html`:return(0,O.jsx)(re,{text:i.buffer,scripts:i.scripts});case`mermaid`:return(0,O.jsx)(V,{text:i.buffer});case`csv`:return(0,O.jsx)(H,{text:i.buffer,path:i.path});case`notebook`:return(0,O.jsx)(U,{text:i.buffer,markdown:e=>(0,O.jsx)(ne,{text:e})})}return null})();return i.mode===`split`?(0,O.jsxs)(`div`,{className:`wb-split`,children:[(0,O.jsx)(`div`,{className:`wb-split-source`,children:u}),(0,O.jsx)(`div`,{className:`wb-split-preview wb-md-scroll`,children:m})]}):(0,O.jsx)(`div`,{className:`wb-md-scroll`,children:m})}return(0,O.jsxs)(`section`,{id:e.sectionId,className:`wb-editor `+(e.className||``),style:e.style,"data-back-overlay":e.sectionId?`20`:void 0,"aria-label":f(`files.fileLabel`,{path:u.path}),children:[e.before,e.showTabs&&(0,O.jsx)(`div`,{className:`wb-tabs`,role:`tablist`,"aria-label":f(`files.openFiles`),children:t.docs.map(e=>(0,O.jsxs)(`div`,{className:`wb-tab`+(e.path===t.active?` active`:``),children:[(0,O.jsxs)(`span`,{role:`tab`,tabIndex:0,"aria-selected":e.path===t.active,title:e.path,onClick:()=>t.setActive(e.path),onKeyDown:n=>{(n.key===`Enter`||n.key===` `)&&t.setActive(e.path)},onAuxClick:t=>{t.button===1&&x(e.path)},children:[q(e.path),b(e)?` ●`:``]}),(0,O.jsx)(`button`,{className:`wb-tab-close`,"aria-label":f(`files.closeTab`,{name:q(e.path)}),onClick:()=>x(e.path),children:`×`})]},e.path))}),(0,O.jsxs)(`div`,{className:`wb-doc-head`,children:[e.onBack&&(0,O.jsx)(`button`,{className:`wb-back`,"aria-label":f(`files.back`),onClick:e.onBack,hidden:!r,children:`‹`}),(0,O.jsx)(`span`,{className:`wb-doc-path`,title:u.path,children:u.path}),(0,O.jsx)(`span`,{className:`wb-doc-state`,role:`status`,children:u.saving?f(`files.saving`):u.outside?f(`files.outsideReadOnly`):u.readOnly&&u.truncated?f(`files.readOnlyTruncated`):b(u)?f(`files.unsaved`):``}),T(u.kind)&&!u.loading&&(0,O.jsxs)(`div`,{className:`wb-modes`,role:`group`,"aria-label":f(`files.view`),children:[(0,O.jsx)(`button`,{"aria-pressed":u.mode===`view`,onClick:()=>S(`view`),children:f(`files.preview`)}),u.kind===`markdown`&&!u.readOnly&&(0,O.jsx)(`button`,{"aria-pressed":u.mode===`rich`,onClick:()=>S(`rich`),children:f(`files.rich`)}),u.kind===`markdown`&&!r&&(0,O.jsx)(`button`,{"aria-pressed":u.mode===`split`,onClick:()=>S(`split`),children:f(`files.split`)}),(0,O.jsx)(`button`,{"aria-pressed":u.mode===`source`,onClick:()=>S(`source`),children:u.kind===`markdown`&&!u.readOnly?f(`files.edit`):f(`files.source`)})]}),!a&&!u.readOnly&&u.mode===`source`&&E&&(0,O.jsx)(`button`,{id:`file-edit`,"aria-pressed":u.editing,onClick:()=>d(u.path,{editing:!u.editing}),children:u.editing?f(`files.done`):f(`files.edit`)}),!u.readOnly&&E&&(0,O.jsx)(`button`,{id:`file-save`,className:`primary`,disabled:!b(u)||u.saving,onClick:()=>void t.save(u.path),title:f(`files.saveHint`),children:f(`files.save`)}),(0,O.jsx)(`a`,{id:`preview-download`,className:`button wb-icon-button`,href:u.url||void 0,download:q(u.path),"aria-label":f(`files.download`),title:f(`files.download`),children:(0,O.jsx)(I,{name:`download`})}),(0,O.jsxs)(`details`,{className:`wb-doc-menu`,"data-back-close":!0,open:m,onToggle:e=>h(e.currentTarget.open),children:[(0,O.jsx)(`summary`,{"aria-label":f(`files.actions`),title:f(`files.actions`),children:`⋯`}),(0,O.jsxs)(`div`,{className:`wb-menu`,role:`menu`,onClick:e=>e.target.closest(`button,a`)&&h(!1),children:[e.onInsert&&(0,O.jsx)(`button`,{id:`preview-insert`,role:`menuitem`,onClick:()=>e.onInsert?.(u.path),children:f(`files.insertPath`)}),(0,O.jsx)(`button`,{role:`menuitem`,onClick:()=>void o(u.path).then(()=>l(f(`files.pathCopied`)),e=>l(i(e),!0)),children:f(`files.copyPath`)}),e.linkBase&&(0,O.jsx)(`button`,{role:`menuitem`,onClick:()=>void o(y(e.linkBase,u.path,u.target)).then(()=>l(u.target?f(`files.lineLinkCopied`,{line:u.target.line}):f(`files.linkCopied`)),e=>l(i(e),!0)),children:u.target?f(`files.copyLinkLine`,{line:u.target.line}):f(`files.copyLink`)}),e.onReveal&&!u.outside&&(0,O.jsx)(`button`,{role:`menuitem`,onClick:()=>e.onReveal?.(u.path),children:f(`files.showInExplorer`)}),(0,O.jsx)(`button`,{role:`menuitem`,onClick:()=>void t.reload(u.path),disabled:u.loading,children:f(`files.reload`)}),u.kind===`html`&&(0,O.jsx)(`button`,{role:`menuitem`,"aria-pressed":u.scripts,onClick:()=>d(u.path,{scripts:!u.scripts}),children:u.scripts?f(`files.blockScripts`):f(`files.allowScripts`)}),(0,O.jsxs)(`label`,{className:`wb-check`,role:`menuitemcheckbox`,"aria-checked":s.autosave,children:[(0,O.jsx)(`input`,{type:`checkbox`,checked:s.autosave,onChange:()=>c(e=>({...e,autosave:!e.autosave}))}),` `,f(`files.autosave`)]}),(0,O.jsxs)(`label`,{className:`wb-check`,role:`menuitemcheckbox`,"aria-checked":s.wordWrap,children:[(0,O.jsx)(`input`,{type:`checkbox`,checked:s.wordWrap,onChange:()=>c(e=>({...e,wordWrap:!e.wordWrap}))}),` `,f(`files.wordWrap`)]}),a&&(0,O.jsxs)(`label`,{className:`wb-check`,role:`menuitemcheckbox`,"aria-checked":s.minimap,children:[(0,O.jsx)(`input`,{type:`checkbox`,checked:s.minimap,onChange:()=>c(e=>({...e,minimap:!e.minimap}))}),` `,f(`files.minimap`)]}),(0,O.jsx)(`button`,{role:`menuitem`,onClick:()=>c(e=>({...e,editor:a?`simple`:`full`})),children:f(a?`files.useSimple`:`files.useFull`)}),e.extraMenu]})]}),(0,O.jsx)(`button`,{"data-close":!0,className:`wb-close`,"aria-label":f(`files.closeFile`),title:f(`files.closeFile`),onClick:()=>x(u.path),children:(0,O.jsx)(I,{name:`close`})})]}),w&&(0,O.jsx)(J,{editor:p}),u.mode===`rich`&&(0,O.jsx)(`p`,{className:`wb-rich-note`,children:f(`files.richNote`)}),(u.conflict||u.disk||u.error&&u.blob)&&(0,O.jsxs)(`div`,{className:`wb-banner`,role:`alert`,children:[u.conflict?(0,O.jsx)(`span`,{children:f(`files.notSaved`,{message:u.conflict.message})}):u.disk===`deleted`?(0,O.jsx)(`span`,{children:f(`files.deletedOnDisk`)}):u.disk===`changed`?(0,O.jsx)(`span`,{children:f(`files.changedOnDisk`)}):(0,O.jsx)(`span`,{children:u.error}),(u.conflict||u.disk===`changed`)&&(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(`button`,{onClick:()=>void n.open(u.path).then(async e=>v({path:u.path,disk:await e.blob.text(),mine:u.buffer}),e=>l(i(e),!0)),children:f(`files.compare`)}),(0,O.jsx)(`button`,{onClick:()=>void t.save(u.path,`any`),children:f(`files.keepMine`)}),(0,O.jsx)(`button`,{onClick:()=>void t.reload(u.path),children:f(`files.useDisk`)})]}),u.disk===`deleted`&&!u.conflict&&(0,O.jsx)(`button`,{onClick:()=>void t.save(u.path,`absent`),children:f(`files.saveAgain`)}),u.error&&!u.conflict&&!u.disk&&(0,O.jsx)(`button`,{onClick:()=>d(u.path,{error:void 0}),children:f(`files.dismiss`)})]}),(0,O.jsx)(`div`,{id:e.sectionId?`preview-body`:void 0,className:`wb-body kind-`+u.kind,children:(0,O.jsx)(g.Suspense,{fallback:(0,O.jsx)(`p`,{className:`wb-muted`,children:f(`files.loadingViewer`)}),children:D(u)})}),_&&(0,O.jsx)(Y,{diff:_,onClose:()=>v(void 0)})]})}function J({editor:e}){let t=[[`B`,f(`files.bold`),()=>e.current?.wrap(`**`,`**`,`bold text`)],[`I`,f(`files.italic`),()=>e.current?.wrap(`_`,`_`,`italic text`)],[`H`,f(`files.heading`),()=>e.current?.linePrefix(`## `)],["`",f(`files.inlineCode`),()=>e.current?.wrap("`","`",`code`)],[f(`files.linkButton`),f(`files.linkButton`),()=>e.current?.wrap(`[`,`](https://)`,`link text`)],[`•`,f(`files.bulleted`),()=>e.current?.linePrefix(`- `)],[`1.`,f(`files.numbered`),()=>e.current?.linePrefix(`1. `)],[`☐`,f(`files.task`),()=>e.current?.linePrefix(`- [ ] `)],[`❝`,f(`files.quote`),()=>e.current?.linePrefix(`> `)],[`▦`,f(`files.table`),()=>e.current?.insert(` | Column | Column | | --- | --- | | Cell | Cell | diff --git a/web/static/react/assets/abnfDiagram-VCTEODGH-Bh-iybGi.js b/web/static/react/assets/abnfDiagram-VCTEODGH-BZ1FZo0h.js similarity index 89% rename from web/static/react/assets/abnfDiagram-VCTEODGH-Bh-iybGi.js rename to web/static/react/assets/abnfDiagram-VCTEODGH-BZ1FZo0h.js index a55c8373..b261702e 100644 --- a/web/static/react/assets/abnfDiagram-VCTEODGH-Bh-iybGi.js +++ b/web/static/react/assets/abnfDiagram-VCTEODGH-BZ1FZo0h.js @@ -1 +1 @@ -import{m as e,t}from"./mermaid-parser.core-DyaQCW3q.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-B6xuSHsQ.js";import"./chunk-DU6HZSFF-B5JVZOtj.js";import{n as i,r as a,t as o}from"./chunk-SVP7TREG-x_JC8v8-.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid.core-CwDJVP0N.js";var c=e().RailroadAbnf.parser.LangiumParser,l=n(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=n(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=n(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=n(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=n(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=n(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=n(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:n(e=>{o.clear(),r.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new t(n);let i=n.value;r.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),r.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram}; \ No newline at end of file +import{m as e,t}from"./mermaid-parser.core-DyaQCW3q.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-B6xuSHsQ.js";import"./chunk-DU6HZSFF-C7nlYnVp.js";import{n as i,r as a,t as o}from"./chunk-SVP7TREG-Zl_40xT-.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid.core-B_Tsb3ik.js";var c=e().RailroadAbnf.parser.LangiumParser,l=n(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=n(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=n(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=n(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=n(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=n(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=n(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:n(e=>{o.clear(),r.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new t(n);let i=n.value;r.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),r.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram}; \ No newline at end of file diff --git a/web/static/react/assets/action-b1uLKwAx.js b/web/static/react/assets/action-Drt9J-sE.js similarity index 92% rename from web/static/react/assets/action-b1uLKwAx.js rename to web/static/react/assets/action-Drt9J-sE.js index dc0acc8e..421c79b2 100644 --- a/web/static/react/assets/action-b1uLKwAx.js +++ b/web/static/react/assets/action-Drt9J-sE.js @@ -1 +1 @@ -import{mn as e,pn as t}from"./tokens-zhzSlX7k.js";function n(t){let n=/[#&]a=([A-Za-z0-9_-]+)/.exec(t);if(n?.[1])try{let t=JSON.parse(new TextDecoder().decode(e(n[1])));return typeof t.id!=`string`||typeof t.path!=`string`||!/^\/api\/[A-Za-z0-9_/-]+$/.test(t.path)||![`GET`,`POST`,`PUT`,`DELETE`].includes(t.method)?void 0:t}catch{return}}async function r(){let e=t(),r=n(window.location.hash);if(!e||!r)return;let i=t=>e.actionResult(JSON.stringify({id:r.id,...t}));try{let e=await fetch(r.path,{method:r.method,headers:r.body===void 0?void 0:{"Content-Type":`application/json`},body:r.body===void 0?void 0:JSON.stringify(r.body)});i({ok:e.ok,status:e.status,body:(await e.text()).slice(0,2e3)})}catch(e){i({ok:!1,status:0,body:e instanceof Error?e.message:String(e)})}}export{r as runNativeAction}; \ No newline at end of file +import{mn as e,pn as t}from"./tokens-Dwwo-z6R.js";function n(t){let n=/[#&]a=([A-Za-z0-9_-]+)/.exec(t);if(n?.[1])try{let t=JSON.parse(new TextDecoder().decode(e(n[1])));return typeof t.id!=`string`||typeof t.path!=`string`||!/^\/api\/[A-Za-z0-9_/-]+$/.test(t.path)||![`GET`,`POST`,`PUT`,`DELETE`].includes(t.method)?void 0:t}catch{return}}async function r(){let e=t(),r=n(window.location.hash);if(!e||!r)return;let i=t=>e.actionResult(JSON.stringify({id:r.id,...t}));try{let e=await fetch(r.path,{method:r.method,headers:r.body===void 0?void 0:{"Content-Type":`application/json`},body:r.body===void 0?void 0:JSON.stringify(r.body)});i({ok:e.ok,status:e.status,body:(await e.text()).slice(0,2e3)})}catch(e){i({ok:!1,status:0,body:e instanceof Error?e.message:String(e)})}}export{r as runNativeAction}; \ No newline at end of file diff --git a/web/static/react/assets/app-CaTkRc0c.css b/web/static/react/assets/app-77dz3N0G.css similarity index 96% rename from web/static/react/assets/app-CaTkRc0c.css rename to web/static/react/assets/app-77dz3N0G.css index 13a4efcd..0cecde04 100644 --- a/web/static/react/assets/app-CaTkRc0c.css +++ b/web/static/react/assets/app-77dz3N0G.css @@ -1 +1 @@ -#media{padding-bottom:40px}.media-filter{color:var(--ink-dim);align-items:center;gap:8px;margin-left:auto;font-size:12px;display:flex}.media-filter select{width:auto;max-width:240px;margin:0}.media-empty{max-width:640px;color:var(--ink-dim)}.media-empty pre{border:1px solid var(--line);background:var(--panel);border-radius:8px;padding:12px;font-size:12.5px;overflow-x:auto}.media-feed{grid-template-columns:repeat(auto-fill,minmax(min(100%,460px),1fr));align-items:start;gap:16px;display:grid}.media-card{border:1px solid var(--line);background:var(--panel);border-radius:12px;flex-direction:column;gap:10px;min-width:0;padding:14px;display:flex}.media-card h3{overflow-wrap:anywhere;margin:0 0 6px;font-size:15px}.media-meta{color:var(--ink-dim);flex-wrap:wrap;align-items:center;gap:6px;font-size:12px;display:flex}.media-meta button.chip{cursor:pointer;font:inherit;font-size:12px}.media-when{margin-left:auto}.media-note{color:var(--ink-dim);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px}.media-video,.media-image{background:var(--scrim);border-radius:8px;width:100%;max-height:70vh;display:block}.media-image{object-fit:contain}.media-card audio{width:100%}.media-frame{border:1px solid var(--line);background:var(--on-accent);border-radius:8px;width:100%;height:420px}.media-link{flex-direction:column;align-items:flex-start;gap:8px;min-width:0;display:flex}.media-link>a{overflow-wrap:anywhere;max-width:100%;color:var(--accent-soft)}.media-link small,.media-file{color:var(--ink-dim);margin:0;font-size:12px}.media-peek summary{cursor:pointer;color:var(--ink-dim);font-size:13px}.media-text{border:1px solid var(--line);background:var(--bg);border-radius:8px;max-height:360px;margin:8px 0 0;padding:10px;font-size:12px;overflow:auto}.media-card footer{justify-content:flex-end;gap:8px;display:flex}.media-card footer .b{font-size:12.5px;text-decoration:none}.media-card footer a.b{border:1px solid var(--line-2);background:var(--panel);min-height:40px;color:var(--accent-soft);border-radius:8px;align-items:center;padding:9px 12px;display:inline-flex}.media-card footer a.b:hover{border-color:var(--accent-soft)}.scard .media-chip{cursor:pointer;font:inherit;font-size:inherit;color:var(--accent-soft)}#live{margin-bottom:22px}.live-bar{color:var(--ink-dim);flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:14px;font-size:12px;display:flex}.live-bar label{align-items:center;gap:8px;display:flex}.live-bar select{width:auto;max-width:220px;margin:0}.live-expose,.live-address{gap:6px;min-width:0;display:flex}.live-expose input{width:130px;margin:0}.live-address input{flex:1;min-width:0;margin:0}.live-feed{grid-template-columns:repeat(auto-fill,minmax(min(100%,620px),1fr))}.live-card{border-color:var(--accent-soft)}.live-card[data-kind=desktop]{grid-column:1/-1}.live-chip{color:var(--amber)}.live-desktop{aspect-ratio:16/10;background:var(--scrim);height:auto}.live-copy{color:var(--accent-soft);cursor:pointer;font:inherit;background:0 0;border:0;padding:0 2px}.media-expose{align-self:flex-start}.limit-banner{border:1px solid color-mix(in srgb, var(--blue) 45%, transparent);background:color-mix(in srgb, var(--blue) 8%, transparent);border-radius:9px;flex-direction:column;gap:6px;margin:6px 0;padding:8px 10px;display:flex}.limit-banner-what{overflow-wrap:anywhere;flex-direction:column;gap:2px;display:flex}.limit-banner-what span{color:var(--ink-dim);font-size:11.5px}.limit-banner-actions{flex-wrap:wrap;gap:6px;display:flex}.limit-chip{white-space:nowrap}.claims-panel .claims-toolbar{flex-wrap:wrap;align-items:center;gap:8px;margin:10px 0;display:flex}.claims-panel .claims-form{border:1px solid var(--border);background:var(--panel-2);border-radius:8px;grid-template-columns:1fr 1fr;gap:8px;margin:10px 0;padding:10px;display:grid}.claims-panel .claims-form input,.claims-panel .claims-form select{box-sizing:border-box;width:100%}.claims-list{gap:8px;margin:0;padding:0;list-style:none;display:grid}.claims-row{border:1px solid var(--border);border-radius:8px;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:10px;padding:8px 10px;display:flex}.claims-row-main{flex-direction:column;gap:2px;min-width:0;display:flex}.claims-holder{font-weight:600}.claims-agent{opacity:.75;font-weight:400}.claims-auto-badge{opacity:.7;border:1px solid var(--border);border-radius:999px;margin-left:6px;padding:0 6px;font-size:.72em}.claims-scope{word-break:break-word;font-size:.92em}.claims-intent{opacity:.85;font-size:.9em;font-style:italic}.claims-times{opacity:.65;font-size:.82em}.claims-row-actions{flex-shrink:0;gap:6px;display:flex}.session-claims{gap:6px;margin:8px 0;display:grid}.session-claims-row{flex-wrap:wrap;align-items:baseline;gap:8px;font-size:.88em;display:flex}.session-claims-row .claims-scope{font-size:inherit}.claims-overlap-warning{border:1px solid var(--warn-border);background:var(--warn-bg);border-radius:8px;margin:6px 0 10px;padding:8px 10px;font-size:.92em}.claims-overlap-warning ul{margin:4px 0;padding-left:18px}.session-claims-chip{display:inline-flex;position:relative}@media (width<=480px){.claims-panel .claims-form{grid-template-columns:1fr}.claims-row{flex-direction:column}}.sheet{box-sizing:border-box;width:min(760px,100vw - 24px);max-height:calc(100dvh - 24px);color:inherit;background:var(--panel);border:1px solid var(--border);border-radius:16px 16px 0 0;margin:auto 0 0 auto;padding:20px;overflow:auto}.sheet::backdrop{background:color-mix(in srgb, var(--scrim) 58%, transparent)}.sheet-head{z-index:2;background:inherit;justify-content:space-between;align-items:center;gap:12px;padding:12px 0;display:flex;position:sticky;top:-20px}.sheet-head h2{margin:0}.sheet label{gap:5px;margin:10px 0;display:grid}.sheet input,.sheet select,.sheet textarea{box-sizing:border-box;max-width:100%}.task-detail{width:min(900px,100vw - 24px)}.steer-row{gap:8px;margin:10px 0;display:flex}.steer-row .steer-input{flex:1;min-width:0}#f-variants{margin:12px 0}.variants-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.variant-row{border:1px solid var(--border);border-radius:8px;flex-wrap:wrap;align-items:center;gap:6px;margin:6px 0;padding:8px;display:flex}.variant-row select,.variant-row input{flex:100px;min-width:90px}.variant-n{opacity:.7;font-variant-numeric:tabular-nums;flex:none}.variant-remove{flex:none}.compare-view{margin:10px 0}.compare-head{justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;display:flex}.judge-verdict{background:var(--panel-2);border-radius:8px;margin-bottom:10px;padding:8px 10px;font-size:.92em}.compare-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;display:grid}.compare-card{border:1px solid var(--border);border-radius:10px;min-width:0;padding:10px}.compare-card header{justify-content:space-between;align-items:center;margin-bottom:6px;display:flex}.compare-card dl{grid-template-columns:auto 1fr;gap:2px 8px;margin:0 0 8px;font-size:.9em;display:grid}.compare-card dt{opacity:.65}.compare-card dd{overflow-wrap:anywhere;margin:0}.board-column{display:contents}#rt-list{min-height:1px}@media (width<=700px){#board .col.mobile-off{display:none}#board .col.mobile-on{width:100%;min-width:0;display:flex}.sheet{border-radius:16px 16px 0 0;width:100vw;max-height:92dvh}}.machine-sheet{border-radius:16px;width:min(520px,100vw - 24px);max-width:calc(100vw - 24px);margin:auto}.machine-sheet form{min-width:0}.machine-sheet input,.machine-sheet select{width:100%;min-width:0}@media (width<=600px){.machine-sheet{padding:14px;font-size:14px}.machine-sheet .sheet-head{top:-14px}.machine-sheet .sub{font-size:12px}}dialog.conversation{color:var(--ink);border:0;width:100%;max-width:100%;max-height:none;margin:0;padding:0}dialog.conversation::backdrop{background:color-mix(in srgb, var(--scrim) 85%, transparent)}@media (width>=900px){dialog.conversation{width:900px}}.conversation [hidden]{display:none!important}.reader-text a.md-file-link{color:var(--accent-soft);cursor:pointer;overflow-wrap:anywhere;text-decoration:none}.reader-text a.md-file-link:hover,.reader-text a.md-file-link:focus-visible{text-decoration:underline}.reader-text a.md-file-link.unverified{color:inherit}.reader-text a.md-file-link.unverified:hover{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.conversation-head .conversation-details-toggle{min-width:40px;margin-left:auto;font-size:18px;line-height:1}.conversation-details{border-bottom:1px solid var(--line);background:var(--bg-soft);flex-direction:column;flex-shrink:0;gap:8px;padding:10px 16px;display:flex}.conversation-details .conversation-usage,.conversation-details .conversation-checks{margin:0}.conversation-details-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.conversation-text-size{gap:4px;margin-left:auto;display:inline-flex}@media (width<=600px){.conversation-details{max-height:45vh;padding:8px 12px;overflow-y:auto}.conversation-text-size{margin-left:0}}.needs-you{border:1px solid var(--line);background:var(--panel);border-radius:12px;margin:4px 0 12px;padding:10px 12px}.ny-push-prompt{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding:8px 0;display:flex}.needs-you>.ny-push-prompt+header{border-top:1px solid var(--line);padding-top:10px}.ny-push-prompt-actions{flex-wrap:wrap;gap:6px;display:flex}.needs-you>header{align-items:baseline;gap:8px;display:flex}.needs-you h3{margin:0;font-size:14px}.ny-count{background:var(--accent);min-width:20px;color:var(--on-fill);text-align:center;border-radius:10px;padding:1px 6px;font-size:11px;font-weight:700}.ny-list{flex-direction:column;gap:8px;margin:8px 0 0;padding:0;list-style:none;display:flex}.ny-row{border-top:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding:8px 0;display:flex}.ny-row:first-child{border-top:0;padding-top:0}.ny-why{flex-wrap:wrap;flex:170px;align-items:baseline;gap:6px;min-width:0;display:flex}.ny-reason{border:1px solid color-mix(in srgb, var(--amber) 45%, transparent);color:var(--amber);text-transform:uppercase;letter-spacing:.04em;border-radius:9px;flex:none;padding:1px 7px;font-size:10.5px}.ny-what{overflow-wrap:anywhere;font-weight:650}.ny-where{color:var(--ink-dim);overflow-wrap:anywhere;flex-basis:100%;font-size:11.5px}.ny-actions{flex-wrap:wrap;gap:6px;display:flex}.ny-more{color:var(--ink-dim);margin:8px 0 0;font-size:11.5px}.ny-stale{border:1px solid color-mix(in srgb, var(--amber) 40%, transparent);color:var(--amber);border-radius:9px;margin-left:auto;padding:1px 7px;font-size:10.5px}.ny-toggle{margin-top:8px}.ny-review-link{border-top:1px solid var(--line);color:var(--ink-dim);margin-top:10px;padding-top:10px;font-size:13px;text-decoration:none;display:block}.ny-review-link:hover,.ny-review-link:focus-visible{color:var(--accent)}.ny-deny-reason{flex-wrap:wrap;flex:100%;gap:6px;display:flex}.ny-deny-reason input{border:1px solid var(--line);background:var(--panel-2);min-width:0;color:inherit;font:inherit;border-radius:7px;flex:160px;padding:0 9px}.scard-approval{border:1px solid color-mix(in srgb, var(--amber) 45%, transparent);background:color-mix(in srgb, var(--amber) 8%, transparent);border-radius:9px;flex-direction:column;gap:6px;margin:6px 0;padding:8px 10px;display:flex}.scard-approval-what{overflow-wrap:anywhere;flex-wrap:wrap;align-items:baseline;gap:6px;display:flex}.scard-approval-what code{color:var(--ink-dim);overflow-wrap:anywhere;font-size:11.5px}.scard-approval-actions,.scard-approval-reason{flex-wrap:wrap;gap:6px;display:flex}.scard-approval-reason input{border:1px solid var(--line);background:var(--panel-2);min-width:0;color:inherit;font:inherit;border-radius:7px;flex:160px;padding:0 9px}@media (width<=600px){.scard-approval-actions .b,.scard-approval-reason .b{flex:84px}}.link-button{border:1px solid var(--line);background:var(--panel-2);min-height:38px;color:inherit;font:inherit;border-radius:7px;justify-content:center;align-items:center;padding:0 11px;text-decoration:none;display:inline-flex}.link-button:hover{border-color:var(--accent);color:var(--accent-soft)}@media (width<=600px){.needs-you{padding:9px 10px}.ny-row{gap:6px;padding:7px 0}.ny-actions{flex:100%}.ny-actions .b{flex:84px}#sesslist .scard .btnrow button.chat-open{order:-1}}#conversation-draft{border-top:1px solid var(--line);color:var(--ink-dim);margin:0;padding:5px 10px;font-size:11.5px}#conversation-draft-row .reader-text{white-space:pre-wrap;overflow-wrap:anywhere}.conversation-session-actions{border-bottom:1px solid var(--line);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:8px;padding:6px 10px;display:flex}.conversation-session-actions .b{flex:none}#conversation-output-error{color:var(--ink-dim);flex-direction:column;align-items:flex-start;gap:8px;padding:12px 10px;font-size:12.5px;display:flex}#conversation-output-error p{margin:0}.conversation-notice{border-top:1px solid var(--line);color:var(--amber);margin:0;padding:7px 10px;font-size:12px}.conversation-changes{border-top:1px solid var(--line);font-size:12px}.conversation-changes>summary{cursor:pointer;color:var(--ink-dim);padding:8px 10px;font-weight:600}.conversation-changes .changes-body{flex-direction:column;gap:6px;padding:0 10px 9px;display:flex}.conversation-changes .sub{color:var(--ink-dim);margin:0;font-size:11.5px}.conversation-changes .b{align-self:flex-start}.changes-files{flex-direction:column;gap:3px;max-height:150px;margin:0;padding:0;list-style:none;display:flex;overflow:auto}.changes-files li{overflow-wrap:anywhere;justify-content:space-between;gap:8px;display:flex}.changes-files span{color:var(--ink-dim);flex:none}@media (width<=600px){.conversation-head>div{flex:auto;min-width:0}.conversation-head>.b{flex:none}#conversation-title{white-space:normal;text-overflow:clip;overflow-wrap:anywhere;overflow:visible}}button.mic-recording{background:color-mix(in srgb, var(--red) 60%, var(--bg));color:var(--on-accent);border-color:color-mix(in srgb, var(--red) 60%, var(--bg));animation:1.4s ease-in-out infinite mic-pulse}@keyframes mic-pulse{0%,to{opacity:1}50%{opacity:.72}}.sstate.sstate-needs{border:1px solid var(--amber);color:var(--amber);text-transform:uppercase;letter-spacing:.05em;white-space:nowrap;border-radius:999px;padding:1px 7px;font-size:10.5px;font-weight:600;line-height:16px;display:inline-block}.switch-steps{flex-direction:column;gap:6px;margin:8px 0;padding:0;list-style:none;display:flex}.switch-steps li{color:var(--muted);align-items:center;gap:8px;font-size:13px;display:flex}.switch-steps li[data-state=active]{color:var(--ink);font-weight:600}.switch-steps li[data-state=done]{color:var(--ink-dim)}.switch-step-dot{border:1px solid var(--line-2);border-radius:50%;flex:none;width:8px;height:8px}.switch-steps li[data-state=active] .switch-step-dot{background:var(--accent);border-color:var(--accent)}.switch-steps li[data-state=done] .switch-step-dot{background:var(--accent-soft);border-color:var(--accent-soft)}.switch-progress-panel{left:12px;right:12px;bottom:calc(var(--tabbar-h,56px) + 10px);z-index:40;pointer-events:none;flex-direction:column;gap:8px;display:flex;position:fixed}.switch-progress{pointer-events:auto;background:var(--panel);border:1px solid var(--line-2);width:100%;max-width:460px;box-shadow:0 10px 30px color-mix(in srgb, var(--scrim) 60%, transparent);border-radius:12px;margin:0 auto;padding:10px 12px}.switch-progress.failed{border-color:color-mix(in srgb, var(--red) 70%, var(--bg))}.switch-progress-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.switch-progress-x{color:var(--ink-dim);cursor:pointer;background:0 0;border:0;min-height:32px;font-size:16px}.switch-progress-actions{justify-content:space-between;align-items:center;gap:10px;display:flex}.switch-progress-actions p{color:color-mix(in srgb, var(--red) 50%, var(--ink));margin:0;font-size:13px}.switch-progress-actions .b{flex:none}.lineage{flex:none;align-items:center;gap:6px;min-width:0;display:flex}.lineage-entry{align-items:stretch;min-width:0;display:flex}.lineage-open{white-space:nowrap;align-items:center;gap:6px;max-width:200px;min-height:34px;padding:0 8px;display:flex;overflow:hidden}.lineage-open strong{text-overflow:ellipsis;overflow:hidden}.lineage-open small{color:var(--muted);text-overflow:ellipsis;font-weight:400;overflow:hidden}.lineage-chat{min-height:34px;padding:0 8px;font-size:12px}.lineage-pending{color:var(--muted);font-size:12px}@media (width<=1023px){.lineage-open{max-width:132px;min-height:34px;padding:0 6px;font-size:12px}.lineage-open small{display:none}.switch-progress-panel{bottom:calc(var(--tabbar-h,56px) + 6px);left:8px;right:8px}}.session-lineage,.conversation-lineage{flex-wrap:wrap;flex:none;max-width:100%}.conversation-lineage{border-bottom:1px solid var(--line);padding:6px 10px}@media (width<=1023px){.terminal-tabbar .lineage{flex-wrap:wrap;max-width:100%}.lineage-open strong{display:none}.lineage-open small{color:inherit;font-size:inherit;display:inline}}.voice-mode{flex-direction:column;gap:6px;display:flex}.voice-mode-panel{border:1px solid var(--border);background:var(--panel-bg);border-radius:10px;flex-direction:column;gap:8px;padding:10px;display:flex}.voice-mode-state{align-items:center;gap:8px;font-weight:600;display:flex}.voice-mode-dot{background:var(--border);border-radius:50%;flex:none;width:10px;height:10px}.voice-mode-dot.listening{background:color-mix(in srgb, var(--green) 45%, var(--bg));animation:1.4s ease-in-out infinite mic-pulse}.voice-mode-dot.speaking{background:color-mix(in srgb, var(--blue) 65%, var(--bg));animation:1.4s ease-in-out infinite mic-pulse}.voice-mode-transcript{opacity:.85;word-break:break-word;font-style:italic}.voice-mode-status{font-weight:500}.voice-mode-pending{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;display:flex}.voice-mode-hints{line-height:1.4}.voice-mode-settings-body{flex-direction:column;gap:8px;margin-top:8px;display:flex}.voice-mode-settings-body label{flex-direction:column;gap:4px;font-size:.9em;display:flex}.voice-mode-autoread{align-items:center;flex-direction:row!important;gap:6px!important}.voice-mode-hold{touch-action:none;-webkit-user-select:none;user-select:none;align-self:stretch;padding:14px;font-size:1.1em}@media (width<=600px){.voice-mode-panel{font-size:.95em}}.browser-pane{z-index:120;background:var(--bg);min-height:0;color:var(--ink);padding-top:env(safe-area-inset-top);flex-direction:column;font-size:13px;display:flex;position:fixed;inset:0}.browser-pane.agent-driving{box-shadow:inset 0 0 0 2px var(--amber)}@media (width>=1100px){.conversation.with-browser{width:100vw;padding-right:58vw;left:0;transform:none}.conversation.with-browser .browser-pane{border-left:1px solid var(--line-2);width:58vw;position:absolute;inset:0 0 0 auto}}.browser-pane .b{min-height:34px;padding:4px 10px}.browser-pane .b.on{border-color:var(--accent);background:var(--accent-wash)}.browser-pane .b.warn{color:var(--red)}.browser-bar{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:8px;padding:6px 8px;display:flex}.browser-tabs{gap:6px;display:flex}.browser-tabs [aria-selected=true]{border-color:var(--accent)}.browser-toolbar{flex-wrap:wrap;align-items:center;gap:6px;padding:6px 8px;display:flex}.browser-address{flex:220px;gap:6px;min-width:0;display:flex}.browser-address input{min-width:0;font:13px var(--mono,monospace);background:var(--panel);color:var(--ink);border:1px solid var(--line-2);border-radius:8px;flex:1;padding:6px 8px}.browser-toolbar select{background:var(--panel);min-height:34px;color:var(--ink);border:1px solid var(--line-2);border-radius:8px}.browser-modes{color:var(--ink-dim);flex-wrap:wrap;align-items:center;gap:14px;padding:0 10px 6px;display:flex}.browser-modes label{align-items:center;gap:5px;display:inline-flex}.browser-where{margin-left:auto;font-size:12px}.browser-ports{border-bottom:1px solid var(--line);flex-wrap:wrap;gap:6px;padding:4px 8px 8px;display:flex}.browser-ports .port{font-family:var(--mono,monospace);flex-direction:column;align-items:flex-start;display:inline-flex}.browser-ports .port small{font-family:var(--sans,sans-serif);color:var(--ink-dim);font-size:11px}.browser-ports .port.in-workspace{border-color:var(--green)}.browser-ports .dim{opacity:.7}.browser-error{color:var(--red)}.browser-control{border-top:1px solid var(--line);border-bottom:1px solid var(--line);color:var(--ink-dim);flex-wrap:wrap;align-items:center;gap:8px;margin:0;padding:6px 10px;display:flex}.agent-driving .browser-control,.desk.agent-driving .browser-control{color:var(--amber);font-weight:600}.browser-control.control-user span{color:var(--green)}.browser-control.control-stopped span{color:var(--red)}.browser-stage{background:var(--bg-soft);flex:1;justify-content:center;align-items:center;min-height:0;padding:8px;display:flex;overflow:auto}.browser-screen{outline:none;justify-content:center;align-items:center;width:100%;height:100%;display:flex}.browser-screen:focus-visible{box-shadow:0 0 0 2px var(--accent)}.browser-screen img{object-fit:contain;background:var(--on-accent);touch-action:none;-webkit-user-select:none;user-select:none;cursor:default;max-width:100%;max-height:100%}.browser-frame-wrap{background:var(--on-accent);width:100%;max-width:100%;max-height:100%;position:relative;overflow:hidden}.browser-frame-wrap iframe{transform-origin:0 0;transform:scale(var(--frame-scale,1));background:var(--on-accent);border:0;position:absolute;top:0;left:0}.browser-empty{color:var(--ink-dim);text-align:center;max-width:460px;padding:20px}.browser-empty .b{margin:4px}.browser-design{padding:8px 10px calc(8px + env(safe-area-inset-bottom));border-top:1px solid var(--line-2);background:var(--panel);gap:6px;display:grid}.browser-hover{font:12px var(--mono,monospace);color:var(--accent-soft);text-overflow:ellipsis;white-space:nowrap;margin:0;overflow:hidden}.browser-multi{color:var(--ink-dim);font-size:12px}.browser-picked{gap:4px;max-height:110px;margin:0;padding-left:18px;display:grid;overflow:auto}.browser-picked li{align-items:center;gap:8px;display:flex}.browser-picked code{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12px;overflow:hidden}.browser-picked small{color:var(--ink-dim);white-space:nowrap}.browser-picked .b{min-height:26px;padding:0 8px}.browser-design textarea{box-sizing:border-box;width:100%;font:13px var(--sans,sans-serif);background:var(--bg);color:var(--ink);border:1px solid var(--line-2);resize:vertical;border-radius:8px;padding:6px 8px}.browser-desktops{flex:1;align-content:start;gap:12px;padding:8px;display:grid;overflow:auto}.desk{border:1px solid var(--line-2);border-radius:10px;overflow:hidden}.desk header{padding:6px 10px}.desk.agent-driving{border-color:var(--amber)}.desk-shot{background:var(--scrim);width:100%;height:auto;display:block}@media (width<=700px){.browser-stage{align-items:flex-start;padding:0}.browser-screen{height:auto}.browser-screen img{width:100%;max-height:none}.browser-toolbar select{max-width:110px}.browser-toolbar .browser-address{flex-basis:100%;order:-1}}.browser-tabstrip{gap:4px;padding:0 8px 6px;display:flex;overflow-x:auto}.browser-tab{border:1px solid var(--line-2);background:var(--panel);border-radius:8px;align-items:center;max-width:200px;display:inline-flex}.browser-tab.on{border-color:var(--accent);background:var(--accent-wash)}.browser-tab button,.browser-tab-new{color:var(--ink);cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:0;min-height:30px;padding:5px 8px;font-size:12px;overflow:hidden}.browser-tab button:first-child{max-width:160px}.browser-tab-new{border:1px dashed var(--line-2);border-radius:8px}.browser-find,.browser-cookies{flex-wrap:wrap;align-items:center;gap:6px;padding:4px 8px 8px;display:flex}.browser-find input,.browser-cookies input:not([type=file]){background:var(--panel);min-width:0;color:var(--ink);border:1px solid var(--line-2);font:13px var(--sans,sans-serif);border-radius:8px;flex:180px;padding:6px 8px}.browser-cookies{border-bottom:1px solid var(--line)}.browser-cookies p{color:var(--ink-dim);flex-basis:100%;margin:0}.browser-cookies label:not(.b){flex:260px;align-items:center;gap:6px;display:flex}.browser-chrome-import{flex:300px;gap:6px;display:flex}.browser-profile select{background:var(--panel);min-height:30px;color:var(--ink);border:1px solid var(--line-2);border-radius:8px}.browser-downloads{border-top:1px solid var(--line);gap:4px;margin:0;padding:6px 10px;list-style:none;display:grid}.browser-downloads li{align-items:center;gap:8px;display:flex}.browser-downloads li span{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.browser-downloads small{color:var(--ink-dim)}.browser-compact{border-bottom:1px solid var(--line);flex-wrap:nowrap;gap:4px;padding:4px 6px}.browser-compact .b{flex:none;min-width:34px;min-height:34px;padding:2px 8px}.browser-compact .browser-address{flex:auto;gap:4px}.browser-compact .browser-address input{padding:5px 6px;font-size:13px}.browser-menu{left:6px;right:6px;top:calc(46px + env(safe-area-inset-top));z-index:5;border:1px solid var(--line-2);background:var(--panel);box-shadow:0 12px 32px color-mix(in srgb, var(--scrim) 50%, transparent);border-radius:12px;gap:8px;padding:10px;display:grid;position:absolute}.browser-menu-row{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.browser-menu-row.browser-modes{padding:0}@media (width<=700px){.browser-control{flex-wrap:nowrap;gap:6px;padding:3px 8px;font-size:12px}.browser-control span{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.browser-control .b{flex:none;min-height:28px;padding:2px 8px;font-size:12px}.browser-tabstrip{padding:4px 6px}}.browser-compact .browser-address{flex-basis:auto;order:0}.quick-switch section{margin:18px 0}.quick-switch h3{color:var(--muted);margin:0 0 8px;font-size:13px}.switch-options{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.switch-choice{white-space:normal;overflow-wrap:anywhere;text-align:left;flex-direction:column;justify-content:center;align-items:flex-start;min-height:48px;display:flex}.switch-choice small{color:var(--muted);font-weight:400}.switch-choice[aria-current=true]{border-color:var(--accent);opacity:.7}.switch-choice-wrap{align-items:stretch;gap:6px;min-width:0;display:flex}.switch-choice-wrap .switch-choice{flex:1;min-width:0}.switch-fav{border:1px solid var(--line-2);width:40px;color:var(--muted);cursor:pointer;background:0 0;border-radius:8px;flex:none}.switch-fav[aria-pressed=true]{color:var(--accent-soft);border-color:var(--accent-soft)}.switch-favorites{flex-direction:column;gap:6px;display:flex}.switch-favorites .switch-choice{min-height:44px;padding:6px 10px}.switch-custom{margin:18px 0}.switch-custom summary{cursor:pointer;padding:8px 0}.switch-providers{width:100%;margin-top:12px}.terminal-agent-switch{text-overflow:ellipsis;white-space:nowrap;flex:none;max-width:150px;min-height:40px;overflow:hidden}@media (width<=1023px){.terminal-agent-switch{max-width:72px;height:34px;min-height:34px;padding:0 8px;font-size:12px}.quick-switch input,.quick-switch select{font-size:16px}.switch-fav{width:44px;min-height:44px;font-size:16px}}.now-strip{margin:0 0 12px}.now-strip-row{-webkit-overflow-scrolling:touch;scrollbar-width:thin;gap:8px;padding-bottom:2px;display:flex;overflow-x:auto}.now-chip{border:1px solid var(--line);background:var(--panel);color:var(--ink);white-space:nowrap;border-radius:999px;flex:none;align-items:center;gap:6px;min-height:36px;padding:6px 12px;font-size:13px;display:flex}.now-dot{font-size:11px;line-height:1}.now-name{text-overflow:ellipsis;max-width:140px;font-weight:600;overflow:hidden}.now-state{color:var(--ink-dim)}.now-chip[data-state=needs_you]{border-color:color-mix(in srgb, var(--amber) 85%, var(--bg))}.now-chip[data-state=needs_you] .now-dot{color:color-mix(in srgb, var(--amber) 85%, var(--bg))}.now-chip[data-reason=setup_failed]{border-color:color-mix(in srgb, var(--red) 60%, var(--bg))}.now-chip[data-reason=setup_failed] .now-dot{color:color-mix(in srgb, var(--red) 60%, var(--bg))}.now-chip[data-state=working] .now-dot{color:color-mix(in srgb, var(--green) 70%, var(--bg))}.now-chip[data-state=ended] .now-dot{color:var(--ink-dim)}.now-chip.now-approvals{border-color:color-mix(in srgb, var(--red) 60%, var(--bg));background:color-mix(in srgb, var(--red) 13%, transparent);font-weight:600}.now-chip.now-approvals .now-dot{color:color-mix(in srgb, var(--red) 60%, var(--bg))}@media (width<=600px){.now-name{max-width:100px}}.archive-output{width:min(900px,100vw - 24px)}.archive-output pre{white-space:pre-wrap;max-height:65dvh;overflow:auto}.session-group{margin:0 0 14px}.session-group>summary{cursor:pointer;padding:10px 2px;font-weight:650}.session-group>summary small{color:var(--ink-dim);font-weight:400}.scard{box-sizing:border-box;background:var(--panel);border:1px solid var(--line);border-radius:11px;min-width:0;margin:8px 0;padding:14px;overflow:hidden}.scard>header{justify-content:space-between;align-items:baseline;gap:10px;display:flex}.scard>header b,.smeta{overflow-wrap:anywhere;min-width:0}.scard>header span{color:var(--ink-dim);text-transform:uppercase;flex:none;font-size:12px}.smeta{color:var(--ink-dim);margin:5px 0 9px;font-size:12px}.scard>pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:130px;color:var(--ink-dim);margin:8px 0;overflow:auto}.scard .btnrow{flex-wrap:wrap;align-items:center;gap:7px;min-width:0;display:flex}.scard button,.scard select,.sessions-toolbar button,.sessions-toolbar select,.sessions-toolbar input{box-sizing:border-box;min-width:0;min-height:38px;color:inherit;font:inherit;background:var(--panel-2);border:1px solid var(--line);border-radius:7px;padding:7px 10px}.sessions-toolbar{flex-wrap:wrap;align-items:center;gap:9px;min-width:0;display:flex}.recent-closed{border:1px solid var(--line);background:var(--panel);border-radius:12px;margin:0 0 18px;padding:14px}.recent-closed-head{justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:10px;display:flex}.recent-closed-head h3{margin:0;font-size:15px}.recent-closed-head p{color:var(--ink-dim);margin:3px 0 0;font-size:12px}.recent-list{gap:8px;display:grid}.recent-row{border:1px solid var(--line);background:var(--bg);border-radius:9px;justify-content:space-between;align-items:center;gap:12px;padding:10px 11px;display:flex}.recent-details{gap:3px;min-width:0;display:grid}.recent-details strong{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.recent-details span{color:var(--ink-dim);font-size:12px}#restore-search{width:100%;margin:0 0 10px}.restore-group+.restore-group{margin-top:12px}.restore-group h4{color:var(--ink-dim);text-transform:uppercase;letter-spacing:.04em;margin:0 0 6px;font-size:12px;font-weight:600}.restore-preview{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-style:italic;overflow:hidden}.restore-note{color:var(--ink-dim);font-size:11px}.restore-actions{flex-wrap:wrap;flex:none;justify-content:flex-end;gap:6px;display:flex}.restore-banner{border:1px solid var(--amber);background:var(--panel);border-radius:10px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin:0 0 14px;padding:10px 12px;display:flex}.restore-banner>span{flex:220px;min-width:0}@media (width<=600px){.recent-row{flex-wrap:wrap}.recent-details{flex:100%}.restore-actions{flex:100%;justify-content:stretch}.restore-actions>button{flex:1 1 0;min-height:40px}.scard{padding:12px}.scard .btnrow>button,.scard .btnrow>select{flex:135px;max-width:100%}.sessions-toolbar>input,.sessions-toolbar>select{flex:145px;max-width:100%}}.scard{overflow:visible}.scard:has(.action-menu[open]){z-index:35;position:relative}.scard .btnrow>.action-menu{flex:none}.scard .btnrow>.action-menu .action-menu-panel{overflow-y:auto}.session-worktree pre{white-space:pre-wrap;overflow-wrap:anywhere}.session-section{grid-column:1/-1}.session-section-title{margin:0 0 6px;font-size:15px}.session-section-sub{color:var(--ink-dim);margin:0 0 8px;font-size:12px}.session-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start;gap:16px;display:grid}.session-grid>.hint{grid-column:1/-1}.scratch-terminals{border-top:1px solid var(--line);padding-top:14px}.scratch-terminals .hint{margin-top:6px}.scard-path{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;margin:4px 0 2px;display:flex}.scard-path code{min-width:0;color:var(--ink-dim);font:500 11.5px var(--mono,ui-monospace, monospace);background:var(--panel-2);border:1px solid var(--line);overflow-wrap:anywhere;word-break:break-all;border-radius:6px;flex:160px;padding:4px 7px;display:block}.scard-path .copy-path{flex:none}@media (width<=600px){.session-section-title{font-size:14px}.scratch-terminals .make-project,.scard-path code{flex:100%}}.scratch-review{border-top:1px solid var(--line);margin:28px 0 8px;padding-top:12px}.scratch-review>summary{cursor:pointer;color:var(--ink-dim);padding:6px 0;font-size:13px;font-weight:600}.scratch-row{border-bottom:1px solid var(--line);align-items:center;gap:8px;padding:10px 0;display:flex}.scratch-what{overflow-wrap:anywhere;flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.scratch-what b{font-size:13px}.scratch-what small{color:var(--ink-dim);font-size:12px}.scratch-what .scratch-why{color:var(--accent-soft)}.scratch-actions{flex-wrap:wrap;gap:8px;margin-top:12px;display:flex}.session-memory{color:var(--ink-dim);margin:6px 0;font-size:12px}.session-memory>summary{cursor:pointer;padding:4px 0}.session-memory-list{flex-direction:column;gap:6px;margin:6px 0;padding:0;list-style:none;display:flex}.session-memory-list li{border-left:2px solid var(--line-2);color:var(--ink);overflow-wrap:anywhere;padding:6px 8px}.session-memory-list li[data-kind=changed]{border-color:var(--accent-soft)}.session-memory-list li[data-kind=retracted],.session-memory-list li[data-kind=expired]{border-color:var(--red)}.session-memory-list b{text-transform:uppercase;letter-spacing:.04em;color:var(--ink-dim);margin-right:4px;font-size:10.5px}.session-memory-list small{color:var(--ink-dim);margin-top:2px;display:block}.session-memory-link ul{margin:4px 0 8px;padding:0;font-size:11.5px;list-style:none}.session-memory-link li[data-exists=false]{color:var(--ink-dim)}.session-memory-link[data-status=unlinked] b{color:var(--amber)}.session-memory-heading{text-transform:uppercase;letter-spacing:.04em;margin:8px 0 2px;font-size:10.5px}#sesslist .scard .btnrow{flex-wrap:wrap}#sesslist .scard .btnrow>.b{flex:auto;min-width:max-content;max-width:100%}.conversation-memory{border-top:1px solid var(--line);font-size:12px}.conversation-memory>summary{cursor:pointer;color:var(--ink-dim);padding:8px 10px;font-weight:600}.conversation-memory .memory-body{flex-direction:column;gap:8px;padding:0 10px 9px;display:flex}.conversation-memory .sub{color:var(--ink-dim);overflow-wrap:anywhere;margin:0;font-size:11.5px}.conversation-memory>.memory-body>.b{align-self:flex-start}.memory-delivery{flex-direction:column;gap:5px;display:flex}.memory-delivery>header{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.memory-delivery>header b{font-size:12px}.memory-summary{color:var(--ink-dim);overflow-wrap:anywhere;font-size:11.5px}.memory-items{flex-direction:column;gap:7px;margin:0;padding:0;list-style:none;display:flex}.memory-items li{border-left:2px solid var(--line-2);overflow-wrap:anywhere;flex-direction:column;gap:4px;padding:4px 0 4px 8px;display:flex}.memory-items li[data-verdict=helpful]{border-color:var(--green)}.memory-items li[data-verdict=irrelevant]{border-color:var(--ink-faint)}.memory-items li[data-verdict=challenged]{border-color:var(--amber)}.memory-item-head{flex-direction:column;gap:2px;min-width:0;display:flex}.memory-item-head b{overflow-wrap:anywhere;font-size:12px}.memory-item-head code{color:var(--cyan);overflow-wrap:anywhere;font-size:11px}.memory-snippet>summary{cursor:pointer;color:var(--ink-dim);font-size:11px}.memory-snippet p{color:var(--ink-dim);white-space:pre-wrap;overflow-wrap:anywhere;margin:4px 0 0;font-size:11.5px}.memory-items small{color:var(--ink-dim);font-size:11px}.memory-verdict[data-verdict=challenged]{color:var(--amber)}.memory-actions{flex-wrap:wrap;gap:6px;display:flex}.memory-actions .b{min-height:30px;padding:0 9px;font-size:11.5px}.sheet .conversation-memory{margin:10px 0 2px}.ev.e-memory:before{background:var(--accent-soft)}.relaunch-notice{border-color:var(--line)}.relaunch-notice .linkish{color:var(--accent);font:inherit;cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}.restore-likely{border:1px solid var(--line);border-radius:6px;margin-left:6px;padding:1px 6px;font-size:11px;font-style:normal}.tasks-hub{flex-direction:column;min-width:0;display:flex}.th-heading{flex-wrap:wrap}.th-heading p a{color:var(--accent-soft);text-decoration:none}.th-head-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.th-head-actions select{max-width:200px}.th-muted{color:var(--ink-dim)}.th-error{color:var(--red)}.th-warn{color:var(--amber);margin:6px 0;font-size:13px}.th-tabs{border-bottom:1px solid var(--line);scrollbar-width:none;gap:4px;padding:0 16px;display:flex;overflow-x:auto}.th-tabs::-webkit-scrollbar{display:none}#view .th-tabs button{color:var(--ink-dim);white-space:nowrap;background:0 0;border:0;border-bottom:2px solid #0000;border-radius:0;min-height:42px;padding:10px 12px;font-size:13.5px;font-weight:600}#view .th-tabs button.on{color:var(--ink);border-bottom-color:var(--accent)}.th-count{color:var(--ink-faint);margin-left:6px;font-size:11px;font-weight:600}.th-toolbar{flex-wrap:wrap;align-items:center;gap:10px;padding:12px 16px;display:flex}.th-chips,.th-viewtoggle{scrollbar-width:none;flex-wrap:nowrap;gap:6px;max-width:100%;display:flex;overflow-x:auto}#view .th-chips button,#view .th-viewtoggle button{white-space:nowrap;border:1px solid var(--line-2);min-height:34px;color:var(--ink-dim);background:0 0;border-radius:999px;padding:5px 12px;font-size:12.5px}#view .th-chips button.on,#view .th-viewtoggle button.on{background:var(--accent-wash);border-color:color-mix(in srgb, var(--accent-soft) 50%, transparent);color:var(--ink)}#view .th-viewtoggle{gap:0}#view .th-viewtoggle button{border-radius:0}#view .th-viewtoggle button:first-child{border-radius:999px 0 0 999px}#view .th-viewtoggle button:last-child{border-radius:0 999px 999px 0}#view input.th-search{background:var(--panel);border:1px solid var(--line-2);border-radius:var(--r);min-width:180px;color:var(--ink);flex:1;padding:8px 12px}.th-banner{border:1px solid var(--line-2);border-radius:var(--r);background:var(--panel);flex-wrap:wrap;align-items:center;gap:10px;margin:0 16px 8px;padding:9px 12px;font-size:13px;display:flex}.th-banner-err{border-color:color-mix(in srgb, var(--red) 40%, transparent);color:color-mix(in srgb, var(--red) 60%, var(--ink))}.th-body{gap:0;min-height:0;padding:0 16px 24px;display:flex}.th-list{flex:1;min-width:0}.th-empty{color:var(--ink-dim);text-align:center;padding:28px 8px}.th-rows{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-soft);margin:0;padding:0;list-style:none;overflow:hidden}.th-rows li+li{border-top:1px solid var(--line)}#view button.th-row{text-align:left;width:100%;color:var(--ink);background:0 0;border:0;border-radius:0;align-items:flex-start;gap:12px;min-height:0;padding:12px 14px;display:flex}#view button.th-row:hover{background:var(--panel)}#view button.th-row.on{background:var(--accent-wash);box-shadow:inset 3px 0 0 var(--accent)}.th-kind{background:var(--panel-2);width:22px;height:22px;color:var(--green);border-radius:6px;flex:none;place-items:center;margin-top:1px;font-size:12px;display:grid}.th-kind-pr{color:var(--accent-soft)}.th-src-linear{color:var(--indigo)}.th-src-jira{color:var(--cyan)}.th-row-main{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.th-row-title{overflow-wrap:anywhere;font-weight:600;line-height:1.35}.th-row-meta,.th-row-badges{color:var(--ink-dim);flex-wrap:wrap;align-items:center;gap:8px;font-size:12px;display:flex}.th-row-badges:empty{display:none}.th-num{font-family:var(--mono);color:var(--ink-faint);font-size:12px}code.th-branch{font-family:var(--mono);background:color-mix(in srgb, var(--cyan) 8%, transparent);color:color-mix(in srgb, var(--cyan) 60%, var(--ink));text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom;border-radius:5px;max-width:220px;padding:1px 6px;font-size:11.5px;display:inline-block;overflow:hidden}.th-state{text-transform:capitalize;white-space:nowrap;border:1px solid;border-radius:999px;padding:1px 8px;font-size:11px;font-weight:700}.th-state-open{color:var(--green);border-color:color-mix(in srgb, var(--green) 40%, transparent)}.th-state-draft,.th-state-neutral{color:var(--ink-dim);border-color:var(--line-2)}.th-state-merged{color:var(--accent-soft);border-color:color-mix(in srgb, var(--accent-soft) 45%, transparent)}.th-state-closed{color:var(--red);border-color:color-mix(in srgb, var(--red) 40%, transparent)}.th-badge{border:1px solid var(--line-2);color:var(--ink-dim);white-space:nowrap;border-radius:999px;align-items:center;gap:4px;padding:1px 7px;font-size:11px;font-weight:600;display:inline-flex}.th-badge i{font-style:normal}.th-checks-pass{color:var(--green);border-color:color-mix(in srgb, var(--green) 35%, transparent)}.th-checks-fail,.th-checks-cancel{color:var(--red);border-color:color-mix(in srgb, var(--red) 40%, transparent)}.th-checks-pending{color:var(--amber);border-color:color-mix(in srgb, var(--amber) 35%, transparent)}.th-review-approved{color:var(--green);border-color:color-mix(in srgb, var(--green) 35%, transparent)}.th-review-changes_requested{color:var(--red);border-color:color-mix(in srgb, var(--red) 40%, transparent)}.th-review-review_required{color:var(--amber);border-color:color-mix(in srgb, var(--amber) 35%, transparent)}.th-conflicts{color:var(--red);border-color:color-mix(in srgb, var(--red) 40%, transparent)}.th-ci-failing,.th-ci-pending{color:var(--amber);border-color:color-mix(in srgb, var(--amber) 35%, transparent)}.th-ci-passed{color:var(--green)}.th-labels{flex-wrap:wrap;gap:5px;display:inline-flex}.th-label{border:1px solid var(--line-2);color:var(--ink-dim);border-radius:999px;align-items:center;gap:3px;padding:0 8px;font-size:11px;line-height:18px;display:inline-flex}#view .th-x{color:inherit;cursor:pointer;opacity:.75;background:0 0;border:0;min-height:0;padding:0 2px;font-size:14px;line-height:1}#view .th-x:hover{opacity:1;color:var(--red)}.th-avatar{width:24px;height:24px;color:var(--on-accent);border-radius:50%;flex:none;place-items:center;font-size:11px;font-weight:700;display:grid}.th-reactions{gap:6px;display:inline-flex}.th-reaction{background:var(--panel-2);border:1px solid var(--line);border-radius:999px;padding:0 7px;font-size:12px}.th-table-wrap{border:1px solid var(--line);border-radius:var(--r-lg);overflow-x:auto}.th-table{border-collapse:collapse;width:100%;font-size:13px}.th-table th{text-align:left;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);border-bottom:1px solid var(--line);padding:9px 12px;font-size:11px;font-weight:600}.th-table td.th-num{white-space:nowrap}.th-table td{border-bottom:1px solid var(--line);vertical-align:top;padding:9px 12px}.th-table tr{cursor:pointer}.th-table tr:hover td,.th-table tr.on td{background:var(--panel)}#view .th-cell-btn{min-height:0;color:var(--ink);text-align:left;background:0 0;border:0;padding:0;font-weight:600}.th-board{align-items:flex-start;gap:12px;padding-bottom:8px;display:flex;overflow-x:auto}.th-col{background:var(--bg-soft);border:1px solid var(--line);border-radius:var(--r-lg);flex-direction:column;flex:0 0 260px;gap:8px;padding:10px;display:flex}.th-col h4{text-transform:uppercase;letter-spacing:.07em;color:var(--ink-dim);justify-content:space-between;margin:2px 4px 4px;font-size:11.5px;display:flex}.th-col h4 b{color:var(--ink-faint)}#view button.th-card{text-align:left;background:var(--panel);border:1px solid var(--line-2);border-radius:var(--r);color:var(--ink);flex-direction:column;gap:5px;min-height:0;padding:10px;display:flex}#view button.th-card.on{border-color:var(--accent)}.th-detail{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-soft);flex:0 0 min(640px,56%);min-width:0;max-height:calc(100dvh - 190px);margin-left:16px;position:sticky;top:76px;overflow-y:auto}.th-view-board .th-detail{flex-basis:min(560px,48%)}.th-detail-inner{padding:0 18px 24px}.th-detail-bar{background:var(--bg-soft);z-index:1;border-bottom:1px solid var(--line);align-items:center;gap:10px;margin-bottom:12px;padding:12px 0;display:flex;position:sticky;top:0}.th-detail-kind{color:var(--ink-faint);text-transform:uppercase;letter-spacing:.07em;flex:1;font-size:12px;font-weight:600}#view .th-detail-bar a.b{color:var(--ink);border:1px solid var(--line-2);background:var(--panel-2);border-radius:8px;padding:7px 12px;font-size:13px;text-decoration:none}.th-pr-head h2{letter-spacing:-.02em;overflow-wrap:anywhere;margin:0 0 8px;font-size:20px;line-height:1.3}.th-pr-meta{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:6px;font-size:13px;display:flex}.th-diffstat .th-add-n{color:var(--green)}.th-diffstat .th-del-n{color:var(--red)}.th-section{border-top:1px solid var(--line);padding:14px 0 6px}.th-section h3{text-transform:uppercase;letter-spacing:.07em;color:var(--ink-dim);margin:0 0 10px;font-size:13px;font-weight:650}.th-section h4{margin:10px 0 6px;font-size:13px}.th-mergebox{background:var(--panel);border:1px solid var(--line-2);border-radius:var(--r-lg);margin:12px 0;padding:14px}.th-status-rows{flex-direction:column;gap:8px;margin-bottom:10px;display:flex}.th-status-row{flex-wrap:wrap;align-items:center;gap:8px;font-size:13px;display:flex}.th-conflicts-box{border:1px solid color-mix(in srgb, var(--red) 30%, transparent);background:color-mix(in srgb, var(--red) 5%, transparent);border-radius:var(--r);margin-bottom:12px;padding:10px 12px}.th-conflicts-box h4{margin-top:0}.th-files{margin:0 0 10px;padding-left:18px;font-size:13px}.th-merge-opts{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.th-check{align-items:center;gap:6px;font-size:13px;display:inline-flex}.th-auto-on{color:var(--green);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;font-size:13px;display:flex}.th-secondary{margin-top:12px}.th-merge-btn{font-weight:700}.th-stack ol{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.th-stack li{border-left:2px solid var(--line-2);flex-direction:column;gap:1px;margin-left:4px;display:flex}.th-stack li.current{border-left-color:var(--accent)}#view .th-stack button,#view .th-link-row{color:var(--ink);text-align:left;background:0 0;border:0;min-height:0;padding:3px 8px;font-size:13px}#view .th-stack button:disabled{opacity:1;cursor:default;font-weight:700}.th-stack small{padding-left:8px;font-size:11.5px}.th-checks,.th-reviewers,.th-children,.th-conns{margin:0;padding:0;list-style:none}.th-checks li+li{border-top:1px solid var(--line)}.th-check-row{align-items:center;gap:10px;padding:7px 0;font-size:13px;display:flex}.th-check-icon{text-align:center;width:18px;font-style:normal;font-weight:700;border:0!important}.th-check-name{overflow-wrap:anywhere;flex:1;min-width:0}#view .th-log-btn{min-height:30px;padding:3px 10px;font-size:12px;text-decoration:none}.th-log{max-height:360px;font:11.5px/1.5 var(--mono);background:var(--bg);border:1px solid var(--line);border-radius:var(--r);white-space:pre-wrap;overflow-wrap:anywhere;color:var(--ink);margin:0 0 10px;padding:10px;overflow:auto}.th-reviewers li{align-items:center;gap:10px;padding:5px 0;font-size:13px;display:flex}.th-rev-name{flex:1}.th-rev-state{text-transform:capitalize;color:var(--ink-dim);font-size:11.5px}.th-rev-approved{color:var(--green)}.th-rev-changes_requested{color:var(--red)}.th-rev-requested{color:var(--amber)}#view .th-add{border:1px dashed var(--line-2);color:var(--ink-dim);background:0 0;min-height:32px;margin-top:8px;padding:4px 12px;font-size:12.5px}.th-picker{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.th-picker input{flex:1;min-width:140px}.th-md{overflow-wrap:anywhere;font-size:14px}.th-md pre{overflow-x:auto}.th-timeline{flex-direction:column;gap:10px;display:flex}.th-comment{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);padding:10px 12px}.th-comment header{align-items:center;gap:8px;margin-bottom:4px;font-size:13px;display:flex}.th-comment time,.th-event time{color:var(--ink-faint);white-space:nowrap;margin-left:auto;font-size:12px}.th-event{color:var(--ink-dim);align-items:baseline;gap:8px;padding:0 4px;font-size:12.5px;display:flex}.th-event code{font-size:11.5px}.th-event-dot{background:var(--line-2);border-radius:50%;flex:none;width:8px;height:8px;transform:translateY(1px)}.th-event-review.th-event-approved .th-event-dot{background:var(--green)}.th-event-review.th-event-changes_requested .th-event-dot{background:var(--red)}.th-event-commit .th-event-dot{background:var(--accent-soft)}.th-composer{flex-direction:column;gap:8px;margin-top:6px;display:flex}.th-composer textarea{width:100%}.th-composer button{align-self:flex-end}.th-branch-hint{margin:8px 0 0;font-size:12.5px}.th-status-pick{color:var(--ink-dim);flex-direction:column;gap:4px;margin-top:10px;font-size:12.5px;display:flex}dialog.th-start,dialog.th-confirm{background:var(--panel);width:calc(100% - 2rem);max-width:30rem;color:var(--ink);border:1px solid var(--line-2);border-radius:var(--r-lg);padding:20px}dialog.th-start::backdrop,dialog.th-confirm::backdrop{background:color-mix(in srgb, var(--scrim) 55%, transparent)}.th-start form{flex-direction:column;gap:12px;display:flex}.th-start label{color:var(--ink-dim);flex-direction:column;gap:5px;font-size:13px;display:flex}.th-start label.th-check{flex-direction:row}.th-start input,.th-start select,.th-start textarea{background:var(--bg);color:var(--ink);border:1px solid var(--line-2);border-radius:var(--r);min-width:0;padding:9px}.th-start-title{margin:-4px 0 0}.th-seg{grid-template-columns:1fr 1fr;gap:8px;display:grid}.th-seg button{border-radius:var(--r);border:1px solid var(--line-2);background:var(--bg);color:var(--ink);cursor:pointer;text-align:left;flex-direction:column;align-items:flex-start;gap:2px;padding:10px 12px;font-weight:650;display:flex}.th-seg button small{color:var(--ink-dim);font-size:11.5px;font-weight:400}.th-seg button.on{border-color:var(--accent);background:var(--accent-wash)}.th-confirm h2{margin:0 0 10px;font-size:18px}.th-confirm p{font-size:14px}.project-trackers .th-conns li{border:1px solid var(--line);border-radius:var(--r);margin-bottom:8px;padding:10px 12px}.th-conn-head{flex-wrap:wrap;align-items:center;gap:8px;font-size:13px;display:flex}.th-conn-form{flex-direction:column;gap:10px;margin-top:10px;display:flex}.th-conn-form label{flex-direction:column;gap:4px;font-size:13px;display:flex}.th-conn-form small{font-size:11.5px}.th-forge-line{font-size:13px}@media (width<=1023px){.th-body{padding:0 12px 16px}.th-toolbar{gap:8px;padding:10px 12px}.th-tabs{padding:0 8px}.th-heading .th-head-actions{width:100%}.th-heading .th-head-actions select{flex:1;max-width:none}.th-detail{inset:0 0 var(--tabbar-h) 0;z-index:30;border:0;border-radius:0;max-height:none;margin:0;position:fixed;top:0}.th-detail-inner{padding:0 14px 28px}.th-detail-bar{padding-top:max(10px, env(safe-area-inset-top))}.tasks-hub.has-detail .th-list{visibility:hidden}.th-badge-text{display:none}.th-checks-pass .th-badge-text,.th-checks-fail .th-badge-text{display:inline}.th-row-meta code.th-branch{max-width:140px}#view input.th-search{flex-basis:100%;min-width:0}.th-col{flex-basis:78vw}.th-pr-head h2{font-size:18px}.th-mergebox .btnrow .b{min-height:44px}}@media (width>=1024px){.th-back span{display:none}}.th-editor{border:1px solid var(--line-2);border-radius:var(--r);background:var(--bg);overflow:hidden}.th-editor-bar{border-bottom:1px solid var(--line);background:var(--panel);flex-wrap:wrap;align-items:center;gap:8px;padding:4px 6px;display:flex}.th-editor-tabs,.th-editor-tools{flex-wrap:wrap;gap:2px;display:flex}.th-editor-tools{margin-left:auto}#view .th-editor-bar button,.th-editor-bar button{color:var(--ink-dim);cursor:pointer;background:0 0;border:0;border-radius:6px;min-width:30px;min-height:30px;padding:2px 8px;font-size:12.5px;font-weight:600}#view .th-editor-bar button.on,.th-editor-bar button.on{background:var(--panel-2);color:var(--ink)}#view .th-editor-bar button:hover{color:var(--ink)}#view .th-editor textarea,.th-editor textarea{width:100%;color:var(--ink);resize:vertical;font:13.5px/1.5 var(--mono);background:0 0;border:0;border-radius:0;padding:10px;display:block}.th-editor-preview{min-height:80px;padding:10px 12px}.th-desc-edit{flex-direction:column;gap:8px;display:flex}.th-section h3 .th-edit-btn{float:right;text-transform:none;letter-spacing:0;min-height:28px;padding:2px 10px;font-size:12px}.th-reactions{flex-wrap:wrap;align-items:center}#view button.th-reaction,button.th-reaction{cursor:pointer;color:var(--ink);min-height:26px;line-height:20px}#view button.th-reaction:hover{border-color:var(--accent-soft)}.th-react-add{display:inline-flex;position:relative}.th-react-menu{z-index:5;background:var(--panel-2);border:1px solid var(--line-2);box-shadow:var(--shadow);border-radius:999px;gap:2px;padding:4px;display:flex;position:absolute;bottom:calc(100% + 6px);left:0}#view .th-react-menu button,.th-react-menu button{cursor:pointer;background:0 0;border:0;border-radius:50%;min-width:34px;min-height:34px;padding:0;font-size:18px}#view .th-react-menu button:hover{background:var(--accent-wash)}.th-queue{flex-direction:column;gap:12px;padding-top:12px;display:flex}.th-queue-head{flex-wrap:wrap;align-items:flex-end;gap:8px;display:flex}.th-queue-head label{color:var(--ink-dim);flex-direction:column;gap:4px;font-size:12.5px;display:flex}.th-queue-list{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-soft);margin:0;padding:0;list-style:none;overflow:hidden}.th-queue-list li{align-items:center;gap:12px;padding:12px 14px;display:flex}.th-queue-list li+li{border-top:1px solid var(--line)}.th-queue-pos{background:var(--accent-wash);width:30px;height:30px;color:var(--accent-soft);border-radius:50%;flex:none;place-items:center;font-weight:700;display:grid}#view .th-queue-title{padding:0;font-size:14px;font-weight:600}.th-queue-awaiting_checks,.th-queue-fresh,.th-queue-merging{color:var(--amber);border-color:color-mix(in srgb, var(--amber) 35%, transparent)}.th-queue-mergeable,.th-queue-merged{color:var(--green);border-color:color-mix(in srgb, var(--green) 35%, transparent)}.th-queue-unmergeable,.th-queue-stale{color:var(--red);border-color:color-mix(in srgb, var(--red) 40%, transparent)}@media (width<=1023px){.th-queue-list li{flex-wrap:wrap}.th-queue-list .th-row-main{flex-basis:calc(100% - 50px)}.th-queue-remove{margin-left:42px}.th-editor-tools{margin-left:0}}#view a.th-log-btn{color:var(--ink);border:1px solid var(--line-2);background:var(--panel-2);border-radius:8px;align-items:center;display:inline-flex}@media (width<=1023px){.th-react-menu{left:16px;right:16px;bottom:calc(var(--tabbar-h) + 16px);border-radius:16px;justify-content:space-around;padding:8px;position:fixed}.th-queue-list .th-avatar{display:none}}.evals-sheet{width:min(920px,100vw - 24px)}.ev-suite-list,.ev-case-list,.ev-run-list{gap:6px;margin:8px 0;display:grid}.ev-suite-row{border:1px solid var(--border);cursor:pointer;border-radius:8px;flex-direction:column;gap:2px;padding:8px 10px;display:flex}.ev-case-row,.ev-run-row{border:1px solid var(--border);border-radius:8px;flex-wrap:wrap;align-items:center;gap:8px;padding:6px 10px;display:flex}.ev-case-row>div{flex-direction:column;flex:1;min-width:0;display:flex}.ev-new-suite,.ev-new-case{gap:6px;margin:10px 0;display:grid}.ev-new-case input,.ev-new-case textarea{box-sizing:border-box;width:100%}.ev-variants{gap:6px;margin:8px 0;display:grid}.ev-badge{border:1px solid var(--border);border-radius:999px;padding:2px 8px;font-size:.82em;display:inline-block}.ev-pass{background:color-mix(in srgb, var(--green) 18%, transparent);border-color:var(--green)}.ev-fail{background:color-mix(in srgb, var(--red) 18%, transparent);border-color:color-mix(in srgb, var(--red) 85%, var(--bg))}.ev-error{background:color-mix(in srgb, var(--amber) 18%, transparent);border-color:var(--amber)}.ev-running{background:color-mix(in srgb, var(--blue) 18%, transparent);border-color:color-mix(in srgb, var(--blue) 90%, var(--bg))}.ev-queued{background:color-mix(in srgb, var(--scrim) 18%, transparent);border-color:var(--ink-faint)}.ev-matrix-wrap{overflow-x:auto}.ev-matrix,.ev-leaderboard,.ev-compare table{border-collapse:collapse;width:100%;margin:8px 0;font-size:.92em}.ev-matrix th,.ev-matrix td,.ev-leaderboard th,.ev-leaderboard td,.ev-compare th,.ev-compare td{border:1px solid var(--border);text-align:left;white-space:nowrap;padding:6px 8px}.ev-cell{cursor:pointer;text-align:center}.ev-cell-detail{border:1px solid var(--border);border-radius:8px;margin:8px 0;padding:8px 10px}.ev-cell-detail header{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.ev-check-output{white-space:pre-wrap;max-height:220px;font-size:.85em;overflow:auto}.ev-cmp-regression td:last-child{color:color-mix(in srgb, var(--red) 85%, var(--bg))}.ev-cmp-improvement td:last-child{color:var(--green)}.ev-replay-import{border:1px solid var(--border);border-radius:8px;gap:8px;margin:8px 0;padding:8px 10px;display:grid}.ev-replay-form{flex-wrap:wrap;align-items:flex-end;gap:10px;display:flex}.ev-replay-form label{flex-direction:column;gap:2px;font-size:.85em;display:flex}.ev-replay-form input{width:90px}.ev-candidate-list{gap:6px;max-height:40vh;display:grid;overflow-y:auto}.ev-candidate-row{border:1px solid var(--border);border-radius:8px;align-items:flex-start;gap:8px;padding:6px 10px;display:flex}.ev-candidate-row>div{flex-direction:column;flex:1;min-width:0;display:flex}.ev-candidate-skip{opacity:.7}.ev-with-judge{align-items:center;gap:6px;font-size:.9em;display:flex}.ev-similarity-row{flex-wrap:wrap;gap:6px;margin:6px 0;display:flex}@media (width<=480px){.ev-case-row,.ev-run-row,.ev-candidate-row,.ev-replay-form{flex-direction:column;align-items:stretch}.ev-replay-form input{box-sizing:border-box;width:100%}}@media (width<=1023px){body.terminals-open #terminal-workspace .terminal-tabbar{flex-wrap:wrap;align-items:center;row-gap:2px}body.terminals-open #terminal-workspace .terminal-tabbar .terminal-tablist{flex:1 0 100%}body.terminals-open #terminal-workspace .terminal-tabbar .terminal-agent-switch{text-overflow:ellipsis;flex:1 1 0;min-width:0;max-width:none;height:36px;min-height:36px;padding:0 10px;overflow:hidden}}@media (width<=600px){body.terminals-open #terminal-workspace .terminal-tabbar{gap:3px;padding:3px 4px}body.terminals-open #terminal-workspace .terminal-tabbar .terminal-tab{max-width:min(230px,74vw)}body.terminals-open #terminal-workspace .terminal-tabbar .terminal-agent-switch{height:34px;min-height:34px;font-size:12.5px}body.terminals-open #terminal-workspace .terminal-tabbar .terminal-popout{display:none}}#terminal-workspace .terminal-actions>.terminal-actions-panel{box-sizing:border-box;overscroll-behavior:contain;z-index:80;position:fixed;bottom:auto;right:auto;overflow-y:auto}@media (width>=1024px){#terminal-workspace .terminal-tabbar .terminal-actions{display:block}}#terminal-workspace .ws-pane{box-sizing:border-box}#terminal-workspace .terminal-panels.split .ws-pane{border-left:1px solid var(--line);border-top:0}#terminal-workspace .terminal-panels.split .ws-pane[data-focused=true]{box-shadow:inset 0 2px 0 var(--accent-soft)}.ws-group-head{box-sizing:border-box;border-left:1px solid var(--line);border-bottom:1px solid var(--line);background:var(--panel);color:var(--ink-dim);z-index:2;align-items:center;gap:4px;padding:0 4px 0 6px;font-size:12px;display:flex;position:absolute}.ws-group-head.focused{color:var(--ink);background:var(--panel-2)}.ws-chips{scrollbar-width:none;flex:1;gap:2px;min-width:0;display:flex;overflow-x:auto}.ws-chip{text-overflow:ellipsis;white-space:nowrap;max-width:200px;color:inherit;font:12px var(--sans);cursor:pointer;background:0 0;border:0;border-radius:5px;flex:none;min-height:24px;padding:3px 8px;overflow:hidden}.ws-chip[aria-pressed=true]{color:var(--accent-soft);background:var(--accent-wash)}.ws-chip:hover{background:var(--bg-soft)}.ws-head-button{width:26px;height:24px;color:var(--ink-dim);cursor:pointer;background:0 0;border:0;border-radius:5px;flex:none;font-size:15px}.ws-head-button:hover{background:var(--bg-soft);color:var(--ink)}.ws-tab-icon{opacity:.8}.ws-handle{z-index:3;touch-action:none;position:absolute}.ws-handle-row{cursor:col-resize;width:11px;margin-left:-5px}.ws-handle-column{cursor:row-resize;height:11px;margin-top:-5px}.ws-handle:after{content:"";background:0 0;position:absolute}.ws-handle-row:after{inset:0 4px}.ws-handle-column:after{inset:4px 0}.ws-handle:hover:after,.ws-handle:focus-visible:after{background:var(--accent-soft)}#terminal-workspace.ws-dragging .ws-pane{pointer-events:none}.ws-drop{z-index:5;position:absolute}.ws-drop-preview{background:var(--accent-wash);border:2px solid var(--accent-soft);pointer-events:none;border-radius:6px;transition:all 80ms;position:absolute}.ws-drop-center{inset:8px}.ws-drop-left{inset:0 50% 0 0}.ws-drop-right{inset:0 0 0 50%}.ws-drop-top{inset:0 0 50%}.ws-drop-bottom{inset:50% 0 0}.terminal-tab-item.ws-insert-before{box-shadow:-3px 0 0 var(--accent-soft)}.ws-missing{color:var(--ink-dim);padding:20px}.ws-pane>dialog[open],.ws-pane dialog.conversation[open],.ws-pane dialog.code-review[open]{padding-top:0;z-index:auto!important;width:100%!important;max-width:none!important;height:100%!important;max-height:none!important;box-shadow:none!important;border:0!important;border-radius:0!important;margin:0!important;position:absolute!important;inset:0!important;transform:none!important}.ws-layouts{flex:none;position:relative}.ws-layouts>summary{border:1px solid var(--line-2);min-height:40px;color:var(--ink-dim);background:var(--panel);cursor:pointer;white-space:nowrap;border-radius:8px;align-items:center;gap:6px;padding:0 12px;font-size:12.5px;list-style:none;display:flex}.ws-layouts>summary::-webkit-details-marker{display:none}.ws-layouts>.terminal-actions-panel{z-index:80;box-sizing:border-box;flex-direction:column;gap:4px;width:300px;display:flex;position:fixed;bottom:auto;right:auto;overflow-y:auto}.ws-layouts-empty{color:var(--ink-dim);margin:6px 8px;font-size:12.5px}.ws-layout-row{align-items:stretch;gap:2px;display:flex}.ws-layout-restore{min-width:0;color:var(--ink);cursor:pointer;text-align:left;font:13px var(--sans);background:0 0;border:0;border-radius:6px;flex-direction:column;flex:1;align-items:flex-start;gap:2px;padding:8px 10px;display:flex}.ws-layout-restore small{color:var(--ink-dim);font-size:11.5px}.ws-layout-restore:hover{background:var(--panel)}.ws-layout-delete{width:34px;color:var(--ink-dim);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;font-size:17px}.ws-layout-delete:hover{color:var(--red);background:var(--panel)}.ws-layout-save{border-top:1px solid var(--line);flex-direction:column;gap:6px;margin-top:4px;padding:8px 4px 2px;display:flex}.ws-layout-save input:not([type]){border:1px solid var(--line);background:var(--panel);min-height:36px;color:var(--ink);font:13px var(--sans);border-radius:7px;padding:6px 10px}.ws-layout-scope{color:var(--ink-dim);align-items:center;gap:6px;font-size:12.5px;display:flex}@media (width<=1023px){.ws-layouts>summary{display:none}}.ws-mru{z-index:200;border:1px solid var(--line-2);background:var(--panel-2);width:min(460px,100vw - 24px);max-height:60vh;box-shadow:0 24px 70px color-mix(in srgb, var(--scrim) 45%, transparent);border-radius:12px;outline:none;padding:8px;position:fixed;top:18%;left:50%;overflow:auto;transform:translate(-50%)}.ws-mru p{color:var(--ink-dim);margin:4px 8px 8px;font-size:12px}.ws-mru ol{margin:0;padding:0;list-style:none}.ws-mru li{cursor:pointer;color:var(--ink);border-radius:7px;align-items:center;gap:10px;padding:9px 10px;font-size:13.5px;display:flex}.ws-mru li small{color:var(--ink-dim);margin-left:auto;font-size:11.5px}.ws-mru li[aria-selected=true]{background:var(--accent-wash);outline:1px solid var(--accent-soft);outline-offset:-1px}.ws-mru-icon{text-align:center;width:18px}.ws-pane>.browser-pane{z-index:auto;padding-top:0;position:absolute;inset:0}#floating-terminal{z-index:150;background:var(--bg);border:1px solid var(--line-2);box-shadow:0 24px 70px color-mix(in srgb, var(--scrim) 50%, transparent);flex-direction:column;display:flex;position:fixed;overflow:hidden}#floating-terminal[hidden]{visibility:hidden;pointer-events:none;display:flex!important}#floating-terminal.floating-window{border-radius:12px}#floating-terminal.floating-maximized{inset:calc(var(--terminal-top,57px) + 8px) 12px 12px;border-radius:12px}#floating-terminal.floating-sheet{height:min(72dvh,100dvh - 40px);padding-bottom:env(safe-area-inset-bottom);border-radius:14px 14px 0 0;bottom:0;left:0;right:0}#floating-terminal.floating-dragging iframe{pointer-events:none}.floating-head{background:var(--panel-2);border-bottom:1px solid var(--line);cursor:move;-webkit-user-select:none;user-select:none;touch-action:none;align-items:center;gap:4px;padding:4px 6px;display:flex}.floating-sheet .floating-head{cursor:default}.floating-title{color:var(--accent-soft);padding:0 4px}.floating-tabs{scrollbar-width:none;flex:1;gap:3px;min-width:0;display:flex;overflow-x:auto}.floating-tab-item{border:1px solid var(--line);background:var(--panel);border-radius:7px;flex:none;display:flex;overflow:hidden}.floating-tab,.floating-tab-close{color:var(--ink-dim);cursor:pointer;min-height:30px;font:12.5px var(--sans);background:0 0;border:0}.floating-tab{text-overflow:ellipsis;white-space:nowrap;max-width:180px;padding:4px 10px;overflow:hidden}.floating-tab[aria-selected=true]{color:var(--accent-soft);background:var(--accent-wash)}.floating-tab-close{width:26px;font-size:16px}.floating-button{border:1px solid var(--line);background:var(--panel);width:32px;height:30px;color:var(--ink);cursor:pointer;border-radius:7px;flex:none;font-size:15px}.floating-button:disabled{opacity:.45;cursor:default}.floating-button:hover:not(:disabled){border-color:var(--accent-soft)}.floating-body{flex:1;min-height:0;position:relative}.floating-frame{position:absolute;inset:0}.floating-frame[hidden]{visibility:hidden;pointer-events:none;display:block!important}.floating-frame iframe{background:var(--bg);border:0;width:100%;height:100%;display:block}.floating-empty{color:var(--ink-dim);padding:20px}.floating-resize{cursor:nwse-resize;touch-action:none;background:linear-gradient(135deg, transparent 50%, var(--line-2) 50%);width:16px;height:16px;position:absolute;bottom:0;right:0}@media (width<=1023px){.floating-button,.floating-tab,.floating-tab-close{height:36px;min-height:36px}.floating-button{width:38px}}.relay-banner{top:env(safe-area-inset-top,0);z-index:1000;text-align:center;background:var(--bg-alt);color:var(--ink);border-bottom:1px solid var(--border);padding:6px 12px;font-size:.85rem;position:fixed;left:0;right:0}.relay-banner[data-status=revoked]{background:var(--panel-2)}.relay-this-device{flex-direction:column;gap:8px;margin-bottom:12px;display:flex}.relay-fingerprint{letter-spacing:.04em;font-size:1rem}:root{--sans:"Inter", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--mono:ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Consolas, monospace;--r:10px;--r-lg:14px;--tabbar-h:calc(60px + env(safe-area-inset-bottom,0px))}*{box-sizing:border-box}html,body{height:100%}body{background:var(--bg);color:var(--ink);font:400 14.5px/1.55 var(--sans);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;overscroll-behavior-y:none;margin:0}#aurora{z-index:-1;pointer-events:none;background:radial-gradient(900px 420px at 78% -8%, color-mix(in srgb, var(--accent) 16%, transparent), transparent 62%), radial-gradient(700px 380px at 4% 104%, color-mix(in srgb, var(--indigo) 12%, transparent), transparent 60%);position:fixed;inset:0}::selection{background:color-mix(in srgb, var(--accent) 35%, transparent)}::-webkit-scrollbar{width:9px;height:9px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:5px}::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb, var(--indigo) 40%, var(--bg))}button,input,select,textarea{font-family:inherit}#topbar{z-index:20;padding:calc(11px + env(safe-area-inset-top,0px)) 16px 11px;background:linear-gradient(180deg, color-mix(in srgb, var(--bg) 94%, transparent), color-mix(in srgb, var(--bg) 82%, transparent));-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;display:flex;position:sticky;top:0}.brand{align-items:center;gap:9px;min-width:0;display:flex}.brand-mark{width:32px;height:32px;color:var(--accent-soft);background:var(--accent-wash);border:1px solid color-mix(in srgb, var(--accent) 28%, transparent);border-radius:9px;flex:none;place-items:center;display:grid}.brand h1{font:700 18px/1 var(--sans);letter-spacing:-.015em;color:var(--ink);margin:0}.brand h1 b{color:var(--accent-soft);font-weight:700}.brand-sub{color:var(--ink-faint);letter-spacing:.1em;text-transform:uppercase;padding-left:2px;font-size:11px}@media (width<=560px){.brand-sub{display:none}}.top-status{font:600 10px/1 var(--sans);letter-spacing:.13em;color:var(--ink-dim);background:var(--panel);border:1px solid var(--line);border-radius:999px;flex:none;align-items:center;gap:7px;padding:6px 11px 6px 9px;display:flex}.led{background:var(--ink-faint);border-radius:50%;flex:none;width:7px;height:7px;display:inline-block}.led-on{background:var(--green);box-shadow:0 0 0 3px color-mix(in srgb, var(--green) 16%, transparent);animation:2.6s infinite pulse}.led-warn{background:var(--amber);box-shadow:0 0 0 3px color-mix(in srgb, var(--amber) 16%, transparent)}.led-err{background:var(--red);box-shadow:0 0 0 3px color-mix(in srgb, var(--red) 16%, transparent)}@keyframes pulse{50%{opacity:.5}}main{padding:12px 0 calc(var(--tabbar-h) + 80px);min-height:60vh}#tabbar{z-index:30;height:var(--tabbar-h);padding-bottom:env(safe-area-inset-bottom,0px);background:color-mix(in srgb, var(--bg) 94%, transparent);border-top:1px solid var(--line);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);display:flex;position:fixed;bottom:0;left:0;right:0}.tab{color:var(--ink-faint);font:600 10.5px/1.1 var(--sans);letter-spacing:.04em;cursor:pointer;background:0 0;border:0;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:4px;transition:color .15s;display:flex;position:relative}.tab-ic{place-items:center;height:20px;display:grid}.tab.on{color:var(--accent-soft)}.tab.on:after{content:"";background:var(--accent);width:26px;height:2px;box-shadow:0 0 10px var(--accent);border-radius:0 0 2px 2px;position:absolute;top:0;left:50%;translate:-50%}.badge{background:var(--amber);min-width:17px;height:17px;color:var(--on-fill);font:700 10px/17px var(--sans);border-radius:9px;padding:0 5px;position:absolute;top:7px;right:calc(50% - 26px)}#fab{right:18px;bottom:calc(var(--tabbar-h) + 16px);z-index:30;cursor:pointer;background:linear-gradient(160deg, var(--accent-soft), var(--indigo));width:54px;height:54px;color:var(--on-accent);box-shadow:0 8px 26px -8px color-mix(in srgb, var(--accent) 85%, transparent), var(--shadow);border:0;border-radius:17px;place-items:center;transition:transform .15s,box-shadow .15s;display:grid;position:fixed}#fab:active{transform:scale(.93)}#quickbar{gap:8px;padding:0 16px 12px;display:flex}#qb-project{background:var(--panel);border:1px solid var(--line);color:var(--ink-dim);border-radius:var(--r);max-width:34vw;padding:0 8px;font-size:12.5px}#qb-input{background:var(--panel);border:1px solid var(--line);min-width:0;color:var(--ink);border-radius:var(--r);flex:1;padding:11px 13px;font-size:14px}#qb-input::placeholder,#qb-filter::placeholder{color:var(--ink-faint)}#qb-input:focus,#qb-filter:focus,input.f:focus,textarea.f:focus,select.f:focus{border-color:var(--accent);box-shadow:var(--glow);outline:none}#qb-mode{border-radius:var(--r);background:var(--panel);border:1px solid var(--line);flex:none;gap:2px;padding:3px;display:flex}#qb-mode button{color:var(--ink-dim);border-radius:calc(var(--r) - 3px);cursor:pointer;white-space:nowrap;background:0 0;border:0;padding:0 12px;font-size:13px;font-weight:700}#qb-mode button.on{background:var(--accent-fill);color:var(--on-accent);box-shadow:var(--glow)}#quickbar.orchestrate #qb-input{border-color:var(--accent);box-shadow:var(--glow)}#qb-orch-hint{border-radius:var(--r);border:1px solid color-mix(in srgb, var(--accent) 35%, transparent);background:var(--accent-wash);color:var(--ink);margin:-4px 16px 12px;padding:10px 14px;font-size:13px;line-height:1.5}#qb-orch-hint.off{border-color:color-mix(in srgb, var(--amber) 40%, transparent);background:color-mix(in srgb, var(--amber) 8%, transparent)}#qb-orch-hint a{color:var(--accent-soft);font-weight:700}#qb-orch-hint .linkish{color:var(--accent-soft);font:inherit;cursor:pointer;background:0 0;border:0;padding:0;font-weight:700;text-decoration:underline}.chip.orch{color:var(--accent-soft);border-color:color-mix(in srgb, var(--accent-soft) 45%, transparent);background:var(--accent-wash);font-weight:700}.orchestrate-row{border:2px solid var(--line);background:var(--bg-soft);cursor:pointer;border-radius:12px;align-items:flex-start;gap:12px;margin:8px 0 12px;padding:12px 14px;flex-direction:row!important;display:flex!important}.orchestrate-row.on{border-color:var(--accent);box-shadow:var(--glow);background:linear-gradient(135deg, var(--accent-wash), transparent 60%), var(--bg-soft)}.orchestrate-row.unavailable{opacity:.75;cursor:default}.orchestrate-row>button{cursor:pointer;background:color-mix(in srgb, var(--overlay) 14%, transparent);border:1px solid color-mix(in srgb, var(--overlay) 18%, transparent);border-radius:999px;flex:none;width:46px;height:26px;margin:2px 0 0;padding:0;transition:background .15s;position:relative}.orchestrate-row>button:after{content:"";background:var(--on-accent);border-radius:50%;width:20px;height:20px;transition:transform .15s;position:absolute;top:2px;left:2px}.orchestrate-row>button[aria-checked=true]{background:var(--accent);border-color:var(--accent)}.orchestrate-row>button[aria-checked=true]:after{transform:translate(20px)}.orchestrate-row>button:disabled{cursor:default;opacity:.5}.orchestrate-row>span{flex-direction:column;gap:3px;display:flex}.orchestrate-row>span>b{letter-spacing:-.01em;font-size:1.05rem}.orchestrate-row small{color:var(--ink-dim);font-size:12.5px;line-height:1.45}.orchestrate-row small a{color:var(--accent-soft);font-weight:700}#qb-mic{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);cursor:pointer;width:42px;color:var(--ink-dim);flex:none;font-size:15px}#qb-mic.rec{border-color:var(--red);color:var(--red);animation:1s infinite pulse}#qb-filter{background:var(--panel);border:1px solid var(--line);width:92px;color:var(--ink);border-radius:var(--r);padding:11px 10px;font-size:13px}.desktop-only{display:none}#board{scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;gap:12px;padding:0 16px 8px;display:flex;overflow-x:auto}.col{scroll-snap-align:center;background:var(--bg-soft);border:1px solid var(--line);border-radius:var(--r-lg);max-width:340px;max-height:calc(100dvh - var(--tabbar-h) - 130px);flex-direction:column;flex:0 0 86vw;transition:border-color .15s,box-shadow .15s;display:flex}.col-head{border-bottom:1px solid var(--line);font:600 11.5px/1 var(--sans);letter-spacing:.07em;text-transform:uppercase;color:var(--ink-dim);align-items:center;gap:8px;padding:11px 13px;display:flex}.col-head .dot{border-radius:50%;flex:none;width:7px;height:7px}.col-head .cnt{color:var(--ink-faint);font:600 11px var(--mono);background:var(--panel);border-radius:999px;margin-left:auto;padding:2px 8px}.col-body{flex-direction:column;gap:9px;padding:10px;display:flex;overflow-y:auto}.col-empty{color:var(--ink-faint);text-align:center;padding:20px 0 24px;font-size:12.5px}.col-more{border:1px dashed var(--line-2);color:var(--ink-dim);border-radius:var(--r);cursor:pointer;background:0 0;padding:10px;font-size:12.5px}.col-more:hover{border-color:var(--accent);color:var(--accent-soft)}.col.dropok{border-color:var(--accent);box-shadow:var(--glow)}#board.phone{scroll-snap-type:none;flex-direction:column;gap:11px;overflow-x:hidden}#board.phone .col.solo{width:100%;max-width:none;max-height:calc(100dvh - var(--tabbar-h) - 178px);flex:auto}.colstrip{scrollbar-width:none;-webkit-overflow-scrolling:touch;gap:7px;padding-bottom:2px;display:flex;overflow-x:auto}.colstrip::-webkit-scrollbar{display:none}.colchip{background:var(--panel);border:1px solid var(--line);color:var(--ink-dim);cursor:pointer;min-height:38px;font:600 12px var(--sans);letter-spacing:.01em;border-radius:999px;flex:none;align-items:center;gap:7px;padding:8px 14px;display:flex}.colchip .dot{border-radius:50%;width:7px;height:7px}.colchip b{font:600 11px var(--mono);color:var(--ink-faint)}.colchip.on{color:var(--ink);border-color:var(--accent);background:var(--accent-wash)}.colchip.on b{color:var(--accent-soft)}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);cursor:pointer;padding:11px 12px 10px;transition:border-color .15s,transform .1s,box-shadow .15s;animation:.22s ease-out land;position:relative}.card:before{content:"";background:var(--sc);border-radius:0 3px 3px 0;width:3px;position:absolute;top:9px;bottom:9px;left:0}.card:hover{border-color:var(--line-2);box-shadow:var(--shadow)}.card:active{transform:scale(.99)}@keyframes land{0%{opacity:0;transform:translateY(5px)}}.card .t{color:var(--ink);letter-spacing:-.005em;margin-bottom:7px;font-size:14px;font-weight:600;line-height:1.35}.card .meta{flex-wrap:wrap;align-items:center;gap:5px;display:flex}.chip{border:1px solid var(--line-2);font:500 10.5px/1.5 var(--sans);color:var(--ink-dim);white-space:nowrap;border-radius:6px;align-items:center;gap:4px;padding:2px 7px;display:inline-flex}.chip.tgt{color:var(--cyan);border-color:color-mix(in srgb, var(--cyan) 28%, transparent);background:color-mix(in srgb, var(--cyan) 7%, transparent)}.chip.cost{color:var(--amber);border-color:color-mix(in srgb, var(--amber) 28%, transparent);background:color-mix(in srgb, var(--amber) 7%, transparent)}.chip.ds{color:var(--green);border-color:color-mix(in srgb, var(--green) 28%, transparent);background:color-mix(in srgb, var(--green) 7%, transparent)}.chip.ds b{color:var(--red);font-weight:500}.chip.bad{color:var(--red);border-color:color-mix(in srgb, var(--red) 32%, transparent);background:color-mix(in srgb, var(--red) 7%, transparent)}.chip.warn{color:var(--amber);border-color:color-mix(in srgb, var(--amber) 30%, transparent)}.chip.info{color:var(--accent-soft);border-color:color-mix(in srgb, var(--accent-soft) 30%, transparent);background:var(--accent-wash)}.working{align-items:flex-end;gap:2.5px;height:11px;display:inline-flex}.working i{background:var(--accent-soft);border-radius:2px;width:3px;height:10px;animation:1s ease-in-out infinite eq}.working i:nth-child(2){animation-delay:.18s}.working i:nth-child(3){animation-delay:.36s}@keyframes eq{0%,to{transform:scaleY(.3)}45%{transform:scaleY(1)}}.s-backlog{--sc:var(--ink-faint)}.s-queued{--sc:var(--indigo)}.s-running{--sc:var(--accent-soft)}.s-review{--sc:var(--amber)}.s-done{--sc:var(--green)}.s-failed{--sc:var(--red)}.s-cancelled{--sc:var(--ink-faint)}.col-head .dot,.colchip .dot{background:var(--sc);box-shadow:0 0 8px var(--sc)}#deck{grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:12px;padding:0 24px;display:grid}.pane{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-soft);border-top:2px solid var(--sc);flex-direction:column;height:310px;display:flex;overflow:hidden}.pane-head{border-bottom:1px solid var(--line);cursor:pointer;align-items:center;gap:9px;padding:10px 12px;display:flex}.pane-title{font:600 13px var(--sans);color:var(--ink);white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.pane-sub{color:var(--cyan);flex:none;font-size:11px}.pane-log{background:var(--bg);flex:1;padding:10px 12px;overflow-y:auto}.pane-line{font:400 11.5px/1.5 var(--mono);color:var(--ink-dim);white-space:pre-wrap;word-break:break-word;border-left:2px solid var(--line-2);margin-bottom:5px;padding-left:9px}.list{flex-direction:column;gap:12px;padding:0 16px;display:flex}.rowcard{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);padding:14px}.rowcard h3{font:600 14.5px var(--sans);color:var(--ink);align-items:center;gap:8px;margin:0 0 5px;display:flex}.rowcard .sub{color:var(--ink-dim);word-break:break-word;font-size:12.5px}.rowcard pre{background:var(--bg);border:1px solid var(--line);border-radius:var(--r);font:400 11.5px/1.6 var(--mono);color:var(--amber);white-space:pre-wrap;word-break:break-word;margin:10px 0;padding:10px;overflow-x:auto}.btnrow{flex-wrap:wrap;gap:8px;margin-top:11px;display:flex}button.b{font:600 12.5px var(--sans);letter-spacing:.005em;white-space:nowrap;border-radius:var(--r);cursor:pointer;background:var(--panel-2);min-height:40px;color:var(--ink);border:1px solid var(--line-2);padding:10px 15px;transition:border-color .15s,background .15s,color .15s}button.b:hover{border-color:var(--accent);color:var(--accent-soft)}.b.ok{background:color-mix(in srgb, var(--green) 12%, transparent);border-color:color-mix(in srgb, var(--green) 45%, transparent);color:var(--green)}.b.ok:hover{background:color-mix(in srgb, var(--green) 20%, transparent);color:var(--green);border-color:var(--green)}.b.no{background:color-mix(in srgb, var(--red) 10%, transparent);border-color:color-mix(in srgb, var(--red) 42%, transparent);color:var(--red)}.b.no:hover{background:color-mix(in srgb, var(--red) 18%, transparent);color:var(--red);border-color:var(--red)}.b.warn{border-color:color-mix(in srgb, var(--amber) 45%, transparent);color:var(--amber)}.b.warn:hover{color:var(--amber);border-color:var(--amber)}.b.grow{flex:1}.hint{color:var(--ink-faint);text-align:center;max-width:34rem;margin:0 auto;padding:40px 24px;font-size:13px;line-height:1.7}.cap-note{color:var(--amber);margin-top:5px;font-size:12px;line-height:1.5}.budget-blocked-note{border-radius:var(--r);background:color-mix(in srgb, var(--red) 10%, transparent);border:1px solid color-mix(in srgb, var(--red) 35%, transparent);color:var(--red);margin:4px 0 0;padding:8px 10px;font-size:12.5px}#sheet-backdrop{z-index:40;background:color-mix(in srgb, var(--scrim) 72%, transparent);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);position:fixed;inset:0}#sheet{z-index:50;background:var(--bg-soft);border-top:1px solid var(--line-2);border-radius:var(--r-lg) var(--r-lg) 0 0;padding:0 18px calc(env(safe-area-inset-bottom,0px) + 28px);box-shadow:0 -20px 60px -20px color-mix(in srgb, var(--scrim) 80%, transparent);animation:.22s ease-out rise;position:fixed;inset:6dvh 0 0;overflow-y:auto}@keyframes rise{0%{opacity:.5;transform:translateY(28px)}}.sheet-grip{z-index:5;background:linear-gradient(180deg, var(--bg-soft) 72%, transparent);justify-content:center;margin:0 -18px;padding:11px 0 9px;display:flex;position:sticky;top:0}.sheet-grip i{background:var(--line-2);border-radius:2px;width:42px;height:4px}.sheet-head{align-items:flex-start;gap:12px;margin-bottom:8px;display:flex}.sheet-head h2{font:700 19px/1.3 var(--sans);letter-spacing:-.015em;flex:1;margin:0}.sheet-head .x{background:var(--panel);border:1px solid var(--line);color:var(--ink-dim);cursor:pointer;border-radius:9px;flex:none;width:32px;height:32px;font-size:14px}.sheet-head .x:hover{border-color:var(--red);color:var(--red)}.statline{color:var(--ink-dim);flex-wrap:wrap;align-items:center;gap:9px;margin-bottom:14px;font-size:12.5px;display:flex}.statpill{font:600 10.5px var(--sans);letter-spacing:.09em;text-transform:uppercase;color:var(--sc);border:1px solid var(--sc);border-radius:999px;padding:3px 9px}.statline code,.ev code{background:var(--panel);border:1px solid var(--line);color:var(--cyan);font:400 11.5px var(--mono);border-radius:5px;padding:1px 6px}.tl{border-left:1px solid var(--line-2);margin:16px 0 0 5px;padding-left:16px}.ev{margin-bottom:14px;animation:.2s ease-out land;position:relative}.ev:before{content:"";background:var(--line-2);width:7px;height:7px;box-shadow:0 0 0 3px var(--bg-soft);border-radius:50%;position:absolute;top:5px;left:-20px}.ev.e-init:before{background:var(--cyan)}.ev.e-tool_use:before{background:var(--accent-soft)}.ev.e-result:before{background:var(--green)}.ev.e-verify:before,.ev.e-approval:before{background:var(--amber)}.ev .k{font:600 10px var(--sans);letter-spacing:.12em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:3px}.ev .body{color:var(--ink);white-space:pre-wrap;word-break:break-word;font-size:13px}.ev .body.dim{color:var(--ink-dim);font-size:12.5px}.diffhead{color:var(--ink-dim);align-items:center;gap:10px;margin:8px 0 12px;font-size:12.5px;display:flex}.wrapbtn{background:var(--panel);border:1px solid var(--line);color:var(--ink-dim);cursor:pointer;font:500 11.5px var(--sans);border-radius:8px;min-height:34px;margin-left:auto;padding:7px 11px}.wrapbtn.on{border-color:var(--accent);color:var(--accent-soft);background:var(--accent-wash)}.wrapped .dcode>div{white-space:pre-wrap;overflow-wrap:anywhere}.dfile{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);margin-bottom:10px;overflow:hidden}.dfile summary{cursor:pointer;font:500 12.5px var(--mono);align-items:center;gap:9px;padding:10px 12px;list-style:none;display:flex}.dfile summary::-webkit-details-marker{display:none}.dfile .pm{white-space:nowrap;margin-left:auto;font-size:11.5px}.pm b.a{color:var(--green);font-weight:600}.pm b.d{color:var(--red);font-weight:600}.dcode{background:var(--bg);font:400 12px/1.6 var(--mono);overflow-x:auto}.dcode div{white-space:pre;padding:0 12px}.dl-add{background:color-mix(in srgb, var(--green) 9%, transparent);color:color-mix(in srgb, var(--green) 35%, var(--ink))}.dl-del{background:color-mix(in srgb, var(--red) 9%, transparent);color:color-mix(in srgb, var(--red) 30%, var(--ink))}.dl-hunk{color:var(--cyan);background:color-mix(in srgb, var(--cyan) 7%, transparent)}.dl-meta{color:var(--ink-faint)}.review-panel{width:min(920px,100vw - 24px)}.review-repo-label{font:600 11px var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-dim);margin:14px 0 6px}.review-truncated{color:var(--amber)}.dcode .dl-commentable{cursor:pointer}.dcode .dl-commentable:hover{outline:1px dashed var(--accent-soft);outline-offset:-1px}.dl-comment-badge{float:right;background:var(--accent-wash);color:var(--accent-soft);font:600 10.5px var(--sans);border-radius:999px;margin-left:8px;padding:0 7px}.dcode .dl-composer{white-space:normal;background:var(--panel-2);border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:10px 12px}.dl-composer textarea{box-sizing:border-box;background:var(--bg);width:100%;color:var(--ink);border:1px solid var(--line);border-radius:var(--r);font:400 13px var(--sans);resize:vertical;padding:8px 10px}.dl-composer-actions{justify-content:flex-end;gap:8px;margin-top:8px;display:flex}.review-tray{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);margin-top:16px;padding:12px}.review-tray-list summary{cursor:pointer;font:600 12.5px var(--sans);color:var(--ink-dim)}.review-tray-list ul{gap:8px;margin:10px 0 0;padding:0;list-style:none;display:grid}.review-tray-item{border:1px solid var(--line);border-radius:var(--r);background:var(--bg);padding:8px 10px}.review-tray-item-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.review-tray-item p{margin:6px 0 0;font-size:13px}.review-tray-code{background:var(--panel-2);font:400 11.5px var(--mono);color:var(--ink-dim);border-radius:6px;margin:6px 0 0;padding:6px 8px;overflow-x:auto}.review-tray-remove{min-height:28px;padding:2px 9px}.review-tray-summary{margin-top:12px}.review-tray-send{width:100%;margin-top:12px}.review-commit-form{border-top:1px solid var(--line);margin-top:20px;padding-top:14px}.review-commit-form h3{margin:0 0 4px;font-size:14px}.review-checkbox{color:var(--ink);text-transform:none;letter-spacing:normal;align-items:center;gap:8px;margin:12px 0;font-size:13px;display:flex}.review-checkbox input{width:auto}.review-commit-steps{margin:12px 0 0;padding:0;font-size:12.5px;list-style:none}.review-commit-steps li{border-top:1px solid var(--line);padding:4px 0}.review-commit-steps li[data-ok=false]{color:var(--red)}.review-commit-steps li[data-ok=true] b{color:var(--green)}.review-check-history{border-top:1px solid var(--line);margin-top:20px;padding-top:14px}.review-check-history h3{justify-content:space-between;align-items:center;gap:10px;margin:0 0 8px;font-size:14px;display:flex}.review-check-history h3 button{min-height:32px;padding:6px 10px;font-size:12px}.review-check-list{margin:0;padding:0;font-size:12.5px;list-style:none}.review-check-list li{border-top:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:8px;padding:8px 0;display:flex}.review-check-list li:first-child{border-top:0}.review-check-list code{color:var(--ink-dim);word-break:break-all}.review-check-output{background:var(--bg);border:1px solid var(--line);border-radius:var(--r);max-height:140px;font:400 11px/1.5 var(--mono);color:var(--ink-dim);white-space:pre-wrap;word-break:break-word;flex-basis:100%;margin:4px 0 0;padding:8px 10px;overflow:auto}@media (width<=480px){.review-tray{box-shadow:0 -6px 18px color-mix(in srgb, var(--scrim) 35%, transparent);z-index:3;border-radius:16px 16px 0 0;margin:16px -20px -20px;position:sticky;bottom:0}}label.f{font:600 11px var(--sans);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-dim);margin:15px 0 6px;display:block}input.f,textarea.f,select.f{background:var(--panel);border:1px solid var(--line);width:100%;color:var(--ink);border-radius:var(--r);padding:11px 12px;font-size:14px}select.f{min-height:44px}textarea.f{resize:vertical;min-height:118px;line-height:1.6}.seg{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);gap:3px;padding:3px;display:flex}.seg button{color:var(--ink-dim);font:500 13px var(--sans);cursor:pointer;background:0 0;border:0;border-radius:7px;flex:1;padding:10px 6px;transition:all .15s}.seg button.on{background:var(--accent-wash);color:var(--accent-soft);font-weight:600}.subhint{color:var(--amber);margin-top:7px;font-size:12px;line-height:1.5}#f-cap-hint{color:var(--ink-dim)}#f-cap-hint b{color:var(--accent-soft)}.push-status{margin:4px 0 16px}.push-devices{flex-direction:column;gap:6px;margin:10px 0 0;padding:0;list-style:none;display:flex}.push-devices li{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);justify-content:space-between;align-items:center;gap:10px;padding:7px 10px;font-size:12.5px;display:flex}.push-this-device{color:var(--accent-soft);font-style:normal;font-weight:600}.ny-push-prompt span{font-size:13px}#toasts{z-index:80;left:14px;right:14px;bottom:calc(var(--tabbar-h) + 12px);pointer-events:none;flex-direction:column;gap:8px;display:flex;position:fixed}.toast{background:var(--panel-2);border:1px solid var(--line-2);border-left:3px solid var(--accent);border-radius:var(--r);box-shadow:var(--shadow);padding:11px 13px;font-size:13px;animation:.2s ease-out land}.toast.err{border-left-color:var(--red)}@media (width>=1024px){.desktop-only{display:flex}#tabbar{-webkit-backdrop-filter:none;backdrop-filter:none;background:0 0;border:0;width:auto;height:56px;padding-bottom:0;inset:0 24px auto auto}.tab{border-radius:var(--r);flex-direction:row;gap:8px;padding:0 14px;font-size:12.5px}.tab.on:after{top:auto;bottom:8px}.badge{margin-left:2px;position:static}#topbar{justify-content:flex-start;gap:14px;padding:12px 24px}main{padding:20px 24px 24px}#quickbar{padding:0 0 16px}#qb-filter{width:180px}#board{flex-wrap:nowrap;padding:0;overflow-x:auto}.col{flex:1 1 0;min-width:190px;max-width:none;max-height:calc(100dvh - 150px)}#deck{padding:0}.list{max-width:900px;padding:0}.list.wide{max-width:1400px}.projgroup{grid-template-columns:repeat(auto-fill,minmax(430px,1fr));align-items:start;gap:10px;display:grid}.projgroup>h3{grid-column:1/-1}.scard{margin-bottom:0}#fab{bottom:30px;right:30px}#sheet{border-left:1px solid var(--line-2);border-radius:0;width:min(660px,48vw);animation:.2s ease-out slidein;top:0;bottom:0;left:auto}@keyframes slidein{0%{opacity:.5;transform:translate(36px)}}#toasts{width:360px;bottom:22px;left:auto}}@media (width<=600px){#qb-filter{display:none}#quickbar{flex-wrap:nowrap}}.sesshead{flex-wrap:wrap;align-items:center;gap:8px;padding:0 0 12px;display:flex}.sesshead h2{font:600 13px var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-dim);flex:1;margin:0}.projgroup{margin-bottom:22px}.projgroup>h3{font:600 12px var(--sans);letter-spacing:.09em;text-transform:uppercase;color:var(--ink-faint);align-items:center;gap:8px;margin:0 0 9px;display:flex}.projgroup>h3:after{content:"";background:var(--line);flex:1;height:1px}.scard{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);margin-bottom:10px;padding:13px 14px;position:relative;overflow:hidden}.scard:before{content:"";background:var(--sc);width:3px;position:absolute;top:0;bottom:0;left:0}.scard-top{flex-wrap:wrap;align-items:center;gap:9px;display:flex}.scard-top .nm{color:var(--ink);font-size:14.5px;font-weight:600}.scard-top .dot{background:var(--sc);width:8px;height:8px;box-shadow:0 0 8px var(--sc);border-radius:50%;flex:none}.scard-top .dot.live{animation:1.4s infinite pulse}.sstate{font:600 10.5px var(--sans);letter-spacing:.1em;text-transform:uppercase;color:var(--sc)}.sidle{color:var(--ink-faint);font:500 11.5px var(--mono);margin-left:auto}.smeta{flex-wrap:wrap;gap:5px;margin-top:8px;display:flex}.spane{background:var(--bg);border:1px solid var(--line);border-radius:var(--r);max-height:132px;font:400 11.5px/1.55 var(--mono);color:var(--ink-dim);white-space:pre-wrap;word-break:break-word;margin-top:10px;padding:9px 11px;overflow:auto}.spane:empty{display:none}.scard .btnrow{margin-top:11px}.scard .btnrow button.b{min-height:38px;padding:9px 13px;font-size:12px}.b.attach{background:linear-gradient(160deg, color-mix(in srgb, var(--accent-soft) 22%, transparent), color-mix(in srgb, var(--indigo) 18%, transparent));border-color:var(--accent);color:var(--accent-soft)}.b.attach:hover{background:var(--accent-wash);border-color:var(--accent-soft)}.ctxbar{color:var(--ink-dim);align-items:center;gap:6px;font-size:10.5px;display:inline-flex}.ctxbar i{background:var(--line-2);border-radius:3px;width:44px;height:5px;display:block;position:relative;overflow:hidden}.ctxbar i b{background:var(--green);position:absolute;inset:0 auto 0 0}.ctxbar.low i b{background:var(--amber)}.ctxbar.crit i b{background:var(--red)}.ctxbar.ctx-used i b{background:var(--green)}.ctxbar.ctx-used.ctx-amber i b{background:var(--amber)}.ctxbar.ctx-used.ctx-red i b{background:var(--red)}.compaction-warning{cursor:help}.conversation-usage,.ny-usage{flex-wrap:wrap;align-items:center;gap:6px;margin-top:4px;display:flex}.conversation-usage .chip,.ny-usage .chip{padding:1px 7px;font-size:10.5px}.quota-chip{color:var(--ink-dim);border:1px solid var(--line);background:var(--panel-2);border-radius:999px;flex:none;align-items:center;gap:8px;padding:4px 10px;font-size:11px;display:flex}.quota-chip.stale{opacity:.55}.quota-window{align-items:baseline;gap:4px;display:inline-flex}.quota-window small{color:var(--ink-faint);font-size:9.5px}.quota-window.quota-amber{color:var(--amber)}.quota-window.quota-red{color:var(--red)}.quota-stale-note{color:var(--ink-faint);font-size:9.5px}.usage-panel{flex-direction:column;gap:18px;margin:14px 0 22px;display:flex}.usage-panel h4{font:600 12px var(--sans);letter-spacing:.04em;color:var(--ink-dim);margin:0 0 8px}.usage-quota-rows{flex-direction:column;gap:8px;display:flex}.usage-quota-rows.stale{opacity:.6}.usage-quota-row{grid-template-columns:60px 1fr 140px;align-items:center;gap:10px;font-size:12.5px;display:grid}.usage-quota-row i{background:var(--line-2);border-radius:3px;height:6px;display:block;position:relative;overflow:hidden}.usage-quota-row i b{background:var(--green);position:absolute;inset:0 auto 0 0}.usage-quota-row.quota-amber i b{background:var(--amber)}.usage-quota-row.quota-red i b{background:var(--red)}.usage-totals{flex-wrap:wrap;align-items:center;gap:22px;display:flex}.usage-stat{flex-direction:column;display:flex}.usage-stat b{color:var(--ink);font-size:20px}.usage-stat span{color:var(--ink-faint);font-size:11px}.usage-days{color:var(--ink-dim);margin-left:auto;font-size:12px}.usage-bars{align-items:flex-end;gap:2px;height:90px;display:flex}.usage-bar{flex:1;align-items:flex-end;min-width:2px;height:100%;display:flex}.usage-bar i{background:var(--accent-soft);opacity:.85;border-radius:2px 2px 0 0;width:100%;display:block}.usage-split-grid{grid-template-columns:1fr 1fr;gap:18px;display:grid}@media (width<=720px){.usage-split-grid{grid-template-columns:1fr}}.usage-table{border-collapse:collapse;width:100%;font-size:12.5px}.usage-table td{border-bottom:1px solid var(--line);padding:4px 6px}.usage-top-list{margin:0;padding:0;font-size:12.5px;list-style:none}.usage-top-list li{border-bottom:1px dashed var(--line);justify-content:space-between;gap:10px;padding:4px 0;display:flex}.usage-budgets{flex-direction:column;gap:8px;display:flex}.usage-budget-row{grid-template-columns:1fr 1fr 100px;align-items:center;gap:10px;font-size:12.5px;display:grid}.usage-budget-row i{background:var(--line-2);border-radius:3px;height:6px;display:block;position:relative;overflow:hidden}.usage-budget-row i b{background:var(--green);position:absolute;inset:0 auto 0 0}.usage-budget-row.budget-amber i b{background:var(--amber)}.usage-budget-row.budget-red i b{background:var(--red)}.usage-budget-row.budget-blocked{color:var(--red)}.usage-budget-row .budget-label{color:var(--ink-dim)}.budget-chip{color:var(--ink-dim);border:1px solid var(--line);background:var(--panel-2);border-radius:999px;flex:none;align-items:center;gap:4px;padding:4px 10px;font-size:11px;display:inline-flex}.budget-chip.budget-blocked{color:var(--red);border-color:color-mix(in srgb, var(--red) 45%, transparent)}.budgets-editor{flex-direction:column;gap:14px;display:flex}.budgets-editor .limit-row{flex-wrap:wrap;align-items:flex-end;gap:10px;display:flex}.budgets-editor .limit-row label{flex:1;min-width:120px}.budgets-editor .per-agent-row{align-items:center;gap:8px;display:flex}.budgets-editor .per-agent-row .b{flex:none}.usage-error{color:var(--red)}.usage-line{flex-wrap:wrap;align-items:center;gap:8px;padding:4px 0 0;display:flex}.check-badge{display:contents}.check-chip.check-running{color:var(--accent-soft);border-color:color-mix(in srgb, var(--accent-soft) 30%, transparent);background:var(--accent-wash)}.check-chip.check-passed{color:var(--green);border-color:color-mix(in srgb, var(--green) 28%, transparent);background:color-mix(in srgb, var(--green) 7%, transparent)}.check-chip.check-failed,.check-chip.check-error{color:var(--red);border-color:color-mix(in srgb, var(--red) 32%, transparent);background:color-mix(in srgb, var(--red) 7%, transparent)}.check-chip.check-skipped{color:var(--ink-faint)}a.ci-chip{text-decoration:none}.check-run{color:var(--ink-dim);cursor:pointer}.check-detail{background:var(--bg);border:1px solid var(--line);border-radius:var(--r);box-sizing:border-box;flex-basis:100%;max-width:100%;margin-top:4px;padding:8px 10px}.check-detail code{font:500 11px var(--mono);color:var(--ink-dim);word-break:break-all;margin-bottom:4px;display:block}.check-detail pre{max-height:160px;font:400 11px/1.5 var(--mono);color:var(--ink-dim);white-space:pre-wrap;word-break:break-word;margin:0;overflow:auto}.conversation-checks{flex-wrap:wrap;gap:6px;max-width:100%;margin-top:6px;display:flex}.awareness-overlap{display:contents}.awareness-overlap-chip{cursor:pointer}.awareness-overlap-detail{background:var(--bg);border:1px solid var(--line);border-radius:var(--r);box-sizing:border-box;max-width:100%;color:var(--ink-dim);flex-basis:100%;margin-top:4px;padding:8px 10px;font-size:11.5px}.awareness-overlap-detail ul{margin:4px 0 0;padding-left:18px}.awareness-overlap-detail code{font:500 11px var(--mono);word-break:break-all}.cand{border-bottom:1px dashed var(--line);flex-wrap:wrap;align-items:center;gap:10px;padding:11px 0;display:flex}.cand:last-child{border-bottom:0}.cand .who{font:600 13px var(--mono);color:var(--ink)}.cand .where{color:var(--ink-faint);word-break:break-all;font-size:11.5px}.cand .grow{flex:1;min-width:0}.badge.dim{background:var(--accent);color:var(--on-fill)}.project-mcp{border-top:1px solid var(--line);margin-top:18px;padding-top:12px}.mcp-row{grid-template-columns:1fr 90px 1.4fr;align-items:start;gap:8px;margin:10px 0;display:grid}.mcp-row .mcp-extra{grid-column:1/4;min-height:52px;font-family:ui-monospace,monospace}.mcp-row .mcp-remove{grid-column:3;justify-self:end}@media (width<=600px){.mcp-row{grid-template-columns:1fr 90px}.mcp-row .mcp-command,.mcp-row .mcp-extra{grid-column:1/3}.mcp-row .mcp-remove{grid-column:2}}.project-skills{border-top:1px solid var(--line);margin-top:18px;padding-top:12px}.project-skills h4{margin-bottom:5px}.project-skills h5{color:var(--ink-dim);text-transform:uppercase;letter-spacing:.08em;margin:14px 0 7px;font-size:11px}.skills-controls{flex-wrap:wrap;align-items:end;gap:8px;display:flex}.skills-controls label{flex:190px;min-width:0}.skills-controls button{flex:none}.skill-row{border:1px solid var(--line);border-radius:8px;align-items:center;gap:10px;min-width:0;margin:6px 0;padding:9px 10px;display:flex}.skill-main{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.skill-main b,.skill-main small{overflow-wrap:anywhere}.skill-main b{font-size:13px}.skill-main small{color:var(--ink-dim);font-size:11px}.skill-row .b{flex:none}.skills-sources{border-top:1px solid var(--line);margin-top:14px;padding-top:10px}.skills-sources summary{cursor:pointer;color:var(--ink-dim);font-size:13px}.skills-sources textarea{font:12px/1.5 var(--mono);min-height:58px}.skills-empty{padding:7px 0}@media (width<=600px){.skills-controls{align-items:stretch}.skills-controls label{flex-basis:100%}.skills-controls button{flex:1;min-height:44px}.skill-row{align-items:flex-start}.skill-row .b{min-height:44px}}.project-triggers{border-top:1px solid var(--line);margin-top:18px;padding-top:12px}.project-triggers h4{margin-bottom:5px}.project-triggers>p{color:var(--ink-dim);font-size:12.5px}.trigger-add{flex-wrap:wrap;align-items:center;gap:8px;margin:10px 0;display:flex}.trigger-source-row{border:1px solid var(--line);border-radius:8px;min-width:0;margin:8px 0;padding:10px}.trigger-source-head{flex-wrap:wrap;align-items:center;gap:8px;min-width:0;display:flex}.trigger-source-head b{font-size:13px}.trigger-source-name{color:var(--ink-dim);overflow-wrap:anywhere;font-size:12.5px}.trigger-status{font:600 10.5px var(--mono);text-transform:uppercase;letter-spacing:.05em;border:1px solid var(--line);color:var(--ink-dim);border-radius:999px;padding:2px 6px}.trigger-status-ok{color:var(--accent);border-color:var(--accent)}.trigger-status-error{color:color-mix(in srgb, var(--red) 85%, var(--bg));border-color:color-mix(in srgb, var(--red) 85%, var(--bg))}.trigger-last-poll{color:var(--ink-faint);margin-left:auto;font-size:11px}.trigger-error{color:color-mix(in srgb, var(--red) 85%, var(--bg));overflow-wrap:anywhere;margin:6px 0 0;font-size:12px}.trigger-source-actions{flex-wrap:wrap;align-items:center;gap:8px;margin-top:8px;display:flex}.trigger-test-result{overflow-wrap:anywhere;margin:6px 0 0;font-size:12px}.trigger-source-edit{border-top:1px dashed var(--line);gap:8px;margin-top:10px;padding-top:10px;display:grid}.trigger-config,.trigger-secrets{font:12px/1.5 var(--mono);min-height:84px}.trigger-events{margin:8px 0;padding:0;list-style:none}.trigger-event-row{border-bottom:1px dashed var(--line);flex-wrap:wrap;align-items:baseline;gap:8px;min-width:0;padding:7px 0;font-size:12.5px;display:flex}.trigger-event-time{color:var(--ink-faint);flex:none;font-size:11px}.trigger-event-kind{color:var(--ink-dim);text-transform:uppercase;letter-spacing:.05em;flex:none;font-size:10.5px}.trigger-event-author{flex:none;font-weight:600}.trigger-event-action{overflow-wrap:anywhere}.trigger-event-skipped{color:var(--ink-dim)}@media (width<=600px){.trigger-add{align-items:stretch}.trigger-add button{flex:1;min-height:44px}.trigger-source-actions button{min-height:44px}.trigger-last-poll{flex-basis:100%;margin-left:0}}.pjlist{border:1px solid var(--line);border-radius:10px;max-height:55vh;overflow-y:auto}.pjrow{border-bottom:1px solid var(--line);cursor:pointer;align-items:center;gap:10px;padding:9px 11px;display:flex}.pjrow:last-child{border-bottom:0}.pjrow:hover{background:var(--panel-2)}.pjrow input[type=checkbox]{flex:none;width:auto;margin:0}.pjmain{flex:1;min-width:0}.pjname{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;overflow:hidden}.pjmeta{color:var(--ink-dim);margin-top:2px;font-size:11px}.pjpath{color:var(--ink-dim);opacity:.7;text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;overflow:hidden}label.f.check{text-transform:none;letter-spacing:normal;font:400 13px/1.45 var(--sans);color:var(--ink)}.card{position:relative}.card-x{background:var(--panel);border:1px solid var(--line);width:22px;height:22px;color:var(--ink-faint);cursor:pointer;opacity:0;border-radius:6px;justify-content:center;align-items:center;font-size:11px;line-height:1;transition:opacity .12s,color .12s,border-color .12s;display:flex;position:absolute;top:6px;right:6px}.card:hover .card-x{opacity:1}.card-x:hover{color:var(--red);border-color:var(--red);opacity:1}@media (hover:none){.card-x{opacity:.55}}.col-clear{cursor:pointer;color:var(--ink-faint);font:600 10px var(--sans);letter-spacing:.08em;text-transform:uppercase;background:0 0;border:0;border-radius:5px;margin-left:8px;padding:2px 4px}.col-clear:hover{color:var(--red);background:var(--panel)}#qb-routines{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);cursor:pointer;width:42px;color:var(--ink-dim);flex:none;font-size:15px}#qb-routines:hover{color:var(--accent-soft);border-color:var(--accent)}.col.solo .solo-head{border-bottom:1px solid var(--line)}.brand h1{white-space:nowrap}#topbar{gap:12px}.scard-top .nm,.rowcard h3,.projgroup>h3,.card h3{overflow-wrap:anywhere;min-width:0}.scard select{max-width:100%}:where(button,a,input,textarea,select):focus-visible{outline:2px solid var(--accent-soft);outline-offset:3px}@media (width<=1023px){input,textarea,select{font-size:16px!important}button.b,.scard .btnrow button.b{min-height:44px}.spane{font-size:13px;line-height:1.6}#sheet{max-height:calc(100dvh - env(safe-area-inset-top))}}@media (width<=600px){#quickbar{grid-template-columns:minmax(0,1fr) 44px 44px;display:grid}#qb-mode{grid-area:1/1/auto/-1}#qb-mode button{flex:1;min-height:38px}#qb-project{grid-area:2/1;min-width:0;max-width:100%;min-height:44px}#qb-mic{grid-area:2/2;width:44px}#qb-routines{grid-area:2/3;min-height:44px}#qb-input{grid-area:3/1/auto/-1;width:100%}#qb-orch-hint{margin:0 0 12px}.colchip{min-height:40px}.scard-top{row-gap:6px}.sidle{font-size:11px}}@media (width>=1024px) and (width<=1279px){#topbar{padding-bottom:62px}#tabbar{top:52px;left:24px;right:auto}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.card .task-chat{width:100%;min-height:40px;color:var(--accent-soft);margin:8px 0}#view[hidden],#fab[hidden],.terminal-panels[hidden],.terminal-empty[hidden],.terminal-popout[hidden]{display:none!important}body.terminals-open{overflow:hidden}#terminal-workspace{top:var(--terminal-top,57px);bottom:var(--tabbar-h);background:var(--bg);flex-direction:column;min-height:0;display:flex;position:fixed;left:0;right:0;overflow:hidden}.terminal-tabbar{border-bottom:1px solid var(--line);align-items:center;gap:8px;padding:8px;display:flex}.terminal-tablist{flex:1;gap:6px;min-width:0;padding:3px;display:flex;overflow-x:auto}.terminal-tab-item{border:1px solid var(--line);background:var(--panel);border-radius:8px;flex:none;display:flex;overflow:hidden}.terminal-tab,.terminal-tab-close{color:var(--ink-dim);cursor:pointer;background:0 0;border:0;min-height:40px}.terminal-tab{text-overflow:ellipsis;white-space:nowrap;max-width:230px;padding:8px 12px;font-size:13px;overflow:hidden}.terminal-tab[aria-selected=true]{color:var(--accent-soft);background:var(--accent-wash);box-shadow:inset 0 -2px 0 var(--accent-soft)}.terminal-tab-close{width:36px;font-size:20px}.terminal-tab-close:hover{color:var(--ink);background:var(--panel-2)}.terminal-popout{white-space:nowrap;color:var(--accent-soft);background:var(--panel);border:1px solid var(--line-2);border-radius:8px;flex:none;align-items:center;min-height:40px;padding:9px 12px;font-size:12.5px;text-decoration:none;display:flex}.terminal-panels{flex:1;min-height:0;position:relative}.terminal-tabpanel{position:absolute;inset:0}.terminal-tabpanel iframe{background:var(--bg);border:0;width:100%;height:100%;display:block}.terminal-panels.split .terminal-tabpanel[data-slot]{flex-direction:column;display:flex}.terminal-panels.split .terminal-tabpanel[data-slot]>iframe{flex:1;height:auto;min-height:0}.terminal-panels.split .terminal-tabpanel[data-slot=primary]{right:calc(100% - var(--split-ratio,50%))}.terminal-panels.split .terminal-tabpanel[data-slot=secondary]{left:var(--split-ratio,50%)}.terminal-pane-label{border-bottom:1px solid var(--line);background:var(--panel);color:var(--ink-dim);flex:none;align-items:center;gap:8px;padding:5px 6px 5px 10px;font-size:12px;display:flex}.terminal-tabpanel[data-focused=true]>.terminal-pane-label{color:var(--accent-soft);box-shadow:inset 3px 0 0 var(--accent-soft)}.terminal-pane-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.terminal-pane-close{width:28px;min-height:28px;color:var(--ink-dim);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;font-size:17px}.terminal-pane-close:hover{color:var(--ink);background:var(--panel-2)}.terminal-split-handle{top:0;bottom:0;left:var(--split-ratio,50%);z-index:3;cursor:col-resize;touch-action:none;width:11px;margin-left:-5px;position:absolute}.terminal-split-handle:after{content:"";background:var(--line);position:absolute;inset:0 4px}.terminal-split-handle:hover:after,.terminal-split-handle:focus-visible:after{background:var(--accent-soft)}.terminal-panels.resizing .terminal-tabpanel{pointer-events:none}.terminal-panels.resizing{-webkit-user-select:none;user-select:none}.terminal-new{border:1px solid var(--line-2);background:var(--panel);border-radius:8px;flex:none;display:flex;position:relative}.terminal-new-main,.terminal-new-machines>summary{color:var(--accent-soft);cursor:pointer;white-space:nowrap;background:0 0;border:0;min-height:40px;font-size:12.5px}.terminal-new-main{border-radius:8px 0 0 8px;padding:9px 12px}.terminal-new-main:only-child{border-radius:8px}.terminal-new-main:disabled{opacity:.6;cursor:default}.terminal-new-machines>summary{border-left:1px solid var(--line-2);border-radius:0 8px 8px 0;align-items:center;padding:0 10px;list-style:none;display:flex}.terminal-new-machines>summary::-webkit-details-marker{display:none}.terminal-new-main:hover:not(:disabled),.terminal-new-machines>summary:hover{background:var(--panel-2)}.terminal-new-machines>.terminal-actions-panel{max-height:60vh;overflow-y:auto}.terminal-new-machines>.terminal-new-picker{box-sizing:border-box;z-index:80;overscroll-behavior:contain;width:min(340px,100vw - 20px);max-height:min(70vh,440px);padding:8px;position:fixed;bottom:auto;right:auto;overflow-y:auto}.terminal-new-search{box-sizing:border-box;border:1px solid var(--line);background:var(--panel);width:100%;min-height:38px;color:var(--ink);font:13px var(--sans);border-radius:7px;margin-bottom:6px;padding:8px 10px}.terminal-new-search:focus{border-color:var(--accent-soft);outline:none}.terminal-new-group{color:var(--ink-dim);text-transform:uppercase;letter-spacing:.06em;padding:6px 8px 2px;font-size:11px}.terminal-new-picker .terminal-new-project{flex-direction:column;align-items:flex-start;gap:2px;display:flex}.terminal-new-project-name{overflow-wrap:anywhere}.terminal-new-project-path{color:var(--ink-dim);overflow-wrap:anywhere;font-size:11.5px}.terminal-new-empty{color:var(--ink-dim);padding:10px 8px;font-size:12px}.terminal-empty .terminal-new-machines>.terminal-actions-panel{left:0;right:auto}@media (width<=1023px){.terminal-new-machines>.terminal-new-picker{width:min(340px,100vw - 16px);left:0;right:auto}.terminal-tabbar .terminal-new-label{display:none}.terminal-tabbar .terminal-new-main{padding:9px 13px;font-size:16px}}.terminal-empty-actions{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.terminal-split{white-space:nowrap;color:var(--ink-dim);background:var(--panel);border:1px solid var(--line-2);cursor:pointer;border-radius:8px;flex:none;min-height:40px;padding:9px 12px;font-size:12.5px}.terminal-split[aria-pressed=true]{color:var(--accent-soft);border-color:var(--accent-soft);background:var(--accent-wash)}.terminal-split:disabled{opacity:.45;cursor:default}.terminal-empty{max-width:600px;color:var(--ink-dim);padding:28px 20px}.terminal-empty h2{color:var(--ink);font-size:18px}.terminal-actions{flex:none;display:none;position:relative}.terminal-actions>summary{border:1px solid var(--line);width:40px;min-height:40px;color:var(--ink);cursor:pointer;border-radius:7px;justify-content:center;align-items:center;font-size:20px;list-style:none;display:flex}.terminal-actions>summary::-webkit-details-marker{display:none}.terminal-actions-panel{z-index:60;border:1px solid var(--line-2);background:var(--panel-2);width:190px;box-shadow:0 12px 35px color-mix(in srgb, var(--scrim) 53%, transparent);border-radius:10px;padding:6px;position:absolute;top:calc(100% + 6px);right:0}.terminal-actions-panel>a,.terminal-actions-panel>button{box-sizing:border-box;width:100%;min-height:42px;color:var(--ink);text-align:left;font:13px var(--sans);cursor:pointer;background:0 0;border:0;border-radius:6px;padding:10px 12px;text-decoration:none;display:block}.terminal-actions-panel>a:hover,.terminal-actions-panel>button:hover{background:var(--panel)}@media (width>=1024px){#terminal-workspace{bottom:0}}@media (width<=600px){.terminal-tabbar{gap:3px;padding:3px 4px}.terminal-tablist{gap:3px;padding:1px}.terminal-tab-item{border-radius:7px}.terminal-tab{max-width:150px;min-height:34px;padding:5px 8px;font-size:12px}.terminal-tab-close{width:26px;min-height:34px;font-size:16px}.terminal-tabbar .terminal-new-main,.terminal-tabbar .terminal-new-machines>summary,.terminal-tabbar .terminal-search,.terminal-tabbar .terminal-actions>summary,.terminal-tabbar .terminal-focus{height:34px;min-height:34px}.terminal-tabbar .terminal-new-main{padding:0 10px;font-size:15px}.terminal-tabbar .terminal-new-machines>summary{padding:0 6px}.terminal-tabbar .terminal-search,.terminal-tabbar .terminal-actions>summary,.terminal-tabbar .terminal-focus{width:34px;font-size:16px}.terminal-popout{padding:8px;font-size:12px}#tabbar .tab{min-width:0;font-size:10px}}#terminal-workspace[hidden]{visibility:hidden;pointer-events:none;display:flex!important}.terminal-tabpanel[hidden]{visibility:hidden;pointer-events:none;display:block!important}.session-worktree{color:var(--ink-dim);overflow-wrap:anywhere;margin:8px 0 12px;font-size:12px}.session-worktree summary{cursor:pointer}.session-worktree code,.session-worktree small{margin-top:6px;display:block}.session-grouping{color:var(--ink-dim);align-items:center;gap:10px;margin:8px 0;font-size:12px;display:flex}.session-grouping select{width:auto;max-width:220px;margin:0}.session-scope select{max-width:min(280px,100vw - 90px)}.session-group{border-left:1px solid var(--line);min-width:0;margin:14px 0;padding-left:10px}.session-group>summary{cursor:pointer;overflow-wrap:anywhere;padding:8px 0;font-size:13px;font-weight:600}.session-group>summary small{color:var(--ink-dim);margin-left:10px;font-weight:400}.session-group-body{min-width:0}.session-group-body .scard{margin-top:10px}#ns-repositories details{margin:12px 0}#ns-repositories summary{cursor:pointer;min-height:28px;padding:8px 0}.workspace-repository{border:1px solid var(--line);overflow-wrap:anywhere;border-radius:8px;margin-top:12px;padding:12px}#ns-repositories select{max-width:100%}.delegation-banner{border:2px solid var(--line);background:var(--bg-soft);border-radius:14px;margin:0 0 18px;padding:16px 18px}.delegation-banner.on{border-color:var(--accent);box-shadow:var(--glow);background:linear-gradient(135deg, var(--accent-wash), transparent 60%), var(--bg-soft)}.delegation-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.delegation-head h3{letter-spacing:-.01em;align-items:center;gap:10px;margin:0 0 6px;font-size:1.45rem;display:flex}.delegation-head p{max-width:62ch;margin:0}.delegation-state{letter-spacing:.12em;color:var(--ink-dim);border:1px solid;border-radius:999px;padding:3px 9px;font-size:.8rem;font-weight:800}.delegation-banner.on .delegation-state{color:var(--on-accent);background:var(--accent-fill);border-color:var(--accent)}.delegation-switch{cursor:pointer;align-items:center;gap:10px;font-size:1.05rem;font-weight:700;display:flex}.delegation-switch input{appearance:none;cursor:pointer;background:color-mix(in srgb, var(--overlay) 14%, transparent);border:1px solid color-mix(in srgb, var(--overlay) 18%, transparent);border-radius:999px;width:54px;height:30px;margin:0;transition:background .15s;position:relative}.delegation-switch input:after{content:"";background:var(--on-accent);border-radius:50%;width:22px;height:22px;transition:transform .15s;position:absolute;top:3px;left:3px}.delegation-switch input:checked{background:var(--accent);border-color:var(--accent)}.delegation-switch input:checked:after{transform:translate(24px)}.delegation-banner>.b{margin-top:12px}.delegation-setup{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin-top:14px;display:grid}.delegation-setup>label{gap:4px;font-size:.9rem;display:grid}.delegation-preset,.delegation-check,.delegation-install,.delegation-note{grid-column:1/-1}.delegation-preset{grid-template-columns:1fr auto;align-items:center;gap:8px;display:grid}.delegation-preset p{grid-column:1/-1;margin:0}.delegation-check,.delegation-install{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.delegation-install p{flex-basis:100%;margin:0}.delegation-note{opacity:.8;margin:0;font-size:.85rem}@media (width<=640px){.delegation-head h3{font-size:1.2rem}.delegation-preset{grid-template-columns:1fr}}.conversation{z-index:100;background:var(--bg);max-width:100%;height:100dvh;padding-top:env(safe-area-inset-top);flex-direction:column;display:flex;position:fixed;inset:0 0 auto}.conversation-head{border-bottom:1px solid var(--line);flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;display:flex}.conversation-head>div{min-width:0}.conversation-head h2{text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:18px;overflow:hidden}.conversation-head p{color:var(--ink-dim);margin:4px 0 0;font-size:12px}.reader-controls{border-bottom:1px solid var(--line);flex-shrink:0;align-items:center;gap:8px;padding:7px 12px;display:flex}.reader-controls>span{color:var(--ink-dim);flex:1;font-size:11px}.conversation .b{min-height:42px}#conversation-log{overscroll-behavior:contain;scrollbar-gutter:stable;overflow-wrap:anywhere;flex:1;min-height:0;padding:16px;overflow:auto}.session-reader,.reader-text{white-space:pre-wrap;font-family:inherit;font-size:var(--reader-font,17px);overflow-wrap:anywhere;margin:0;line-height:1.65}.session-reader{tab-size:2}.reader-message{background:var(--panel);border-radius:12px;margin:0 0 14px;padding:12px 14px}.reader-message.operator{background:color-mix(in srgb, var(--accent-fill) 35%, var(--bg));border:1px solid color-mix(in srgb, var(--accent-fill) 33%, transparent)}.reader-speaker{color:var(--ink-dim);margin-bottom:7px;font-size:11px}.reader-message.detail{background:var(--bg-soft);color:var(--ink-dim);font-size:13px}.reader-message.detail summary{cursor:pointer;padding:4px}.reader-message pre{white-space:pre-wrap;overflow-wrap:anywhere;font-size:14px}#conversation-compose{padding:10px 14px calc(10px + env(safe-area-inset-bottom));border-top:1px solid var(--line);background:var(--bg-soft);flex-shrink:0}#conversation-compose>label{color:var(--ink);margin-bottom:5px;font-size:12px;display:block}#conversation-input{box-sizing:border-box;resize:vertical;border:1px solid color-mix(in srgb, var(--indigo) 45%, var(--bg));background:var(--bg);width:100%;min-height:62px;max-height:26dvh;color:var(--ink);border-radius:10px;padding:10px 12px;font-family:inherit;font-size:16px;line-height:1.45;display:block}#conversation-input:focus{outline:2px solid var(--accent-soft);outline-offset:1px}#conversation-hint,#conversation-receipt{color:var(--ink-dim);margin:5px 0;font-size:11px}#conversation-receipt:empty{display:none}.compose-actions{align-items:center;gap:8px;display:flex}.interrupt-option{align-items:center;gap:6px;max-width:50%;font-size:12px;display:flex}.interrupt-option input{width:18px;height:18px}#conversation-error{color:var(--amber);background:color-mix(in srgb, var(--amber) 25%, var(--bg));padding:8px 14px;font-size:12px}#conversation-approvals{max-height:40dvh;overflow:auto}#conversation-cards{flex-direction:column;display:flex}.reader-message.thinking{background:var(--bg-soft);color:var(--ink-faint);font-size:13px;font-style:italic}.reader-message.thinking summary{cursor:pointer;padding:4px;font-style:normal}.md-code{background:var(--bg);border:1px solid var(--line);font:400 13px/1.5 var(--mono,monospace);border-radius:8px;margin:8px 0;padding:10px 12px;overflow-x:auto}.reader-text p{margin:0 0 8px}.reader-text p:last-child{margin-bottom:0}.reader-text code{background:var(--panel-2);font:400 13px var(--mono,monospace);border-radius:4px;padding:1px 5px}.reader-text ul,.reader-text ol{margin:6px 0;padding-left:22px}.tool-card{background:var(--panel);border:1px solid var(--line);border-radius:12px;margin:0 0 14px;overflow:hidden}.tool-card summary{cursor:pointer;align-items:center;gap:8px;min-height:44px;padding:12px 14px;font-size:14px;list-style:none;display:flex}.tool-card summary::-webkit-details-marker{display:none}.tool-card summary:before{content:"▸";color:var(--ink-dim);flex-shrink:0;transition:transform .15s}.tool-card[open] summary:before{transform:rotate(90deg)}.tool-icon{flex-shrink:0}.tool-title{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.tool-sep{color:var(--ink-faint)}.tool-subtitle{color:var(--ink-dim);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12.5px;font-family:var(--mono,monospace);overflow:hidden}.tool-spinner{color:var(--accent-soft);flex-shrink:0;margin-left:auto}.tool-fail{color:var(--red);flex-shrink:0;margin-left:auto}.tool-body{padding:0 14px 14px}.tool-command{background:var(--bg);font:400 13px/1.5 var(--mono,monospace);white-space:pre-wrap;word-break:break-word;border-radius:8px;margin:0 0 8px;padding:10px 12px;overflow-x:auto}.tool-output{margin-top:8px}.tool-output-label{text-transform:uppercase;letter-spacing:.04em;color:var(--ink-dim);margin-bottom:4px;font-size:11px}.tool-output[data-error] .tool-output-label{color:var(--red)}.tool-output pre{background:var(--bg);font:400 12.5px/1.5 var(--mono,monospace);white-space:pre-wrap;word-break:break-word;border-radius:8px;max-height:40dvh;margin:0;padding:10px 12px;overflow:auto}.tool-running{margin:0;font-style:italic}.tool-args{margin-top:4px}.tool-args summary{cursor:pointer;color:var(--ink-dim);min-height:auto;padding:4px 0;font-size:12px}.tool-args pre{background:var(--bg);font:400 12px/1.5 var(--mono,monospace);border-radius:8px;margin:4px 0 0;padding:10px 12px;overflow-x:auto}.tool-todos{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.tool-todos li{align-items:flex-start;gap:8px;font-size:13.5px;display:flex}.tool-todos li[data-status=completed]{color:var(--ink-dim);text-decoration:line-through}.tool-todos li[data-status=in_progress]{color:var(--accent-soft);font-weight:600}.tool-todo-mark{flex-shrink:0}.approval-card{background:var(--panel-2);border:1px solid color-mix(in srgb, var(--amber) 30%, var(--bg));border-radius:12px;margin:0 0 14px;padding:12px 14px}.approval-card[data-decided=approved]{background:var(--panel-2);border-color:color-mix(in srgb, var(--green) 35%, var(--bg))}.approval-card[data-decided=denied]{background:var(--bg-soft);border-color:color-mix(in srgb, var(--red) 30%, var(--bg))}.approval-head{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:8px;display:flex}.approval-head strong{font-size:13px}.approval-card .tool-body{padding:0}.approval-actions{flex-wrap:wrap;gap:8px;margin-top:10px;display:flex}.approval-actions>button{min-height:44px}.approval-deny{flex-direction:column;flex:1 0 100%;gap:6px;display:flex}.approval-deny textarea{box-sizing:border-box;resize:vertical;border:1px solid color-mix(in srgb, var(--indigo) 45%, var(--bg));background:var(--bg);width:100%;min-height:56px;color:var(--ink);border-radius:10px;padding:8px 10px;font-family:inherit;font-size:14px}.approval-deny label{color:var(--ink);font-size:11px}.approval-deny-actions{gap:8px;display:flex}.approval-deny-actions button{min-height:44px}.approval-card .link-button{margin-top:8px;display:inline-block}@media (width>=900px){.conversation{border-inline:1px solid color-mix(in srgb, var(--indigo) 25%, var(--bg));width:900px;box-shadow:0 0 0 100vmax color-mix(in srgb, var(--scrim) 85%, transparent);left:50%;transform:translate(-50%)}}@media (height<=550px){.reader-controls{padding:2px 10px}#conversation-input{height:62px;min-height:45px}#conversation-hint{display:none}.conversation-head{padding:6px 12px}}#conversation-attachments{flex-wrap:wrap;gap:6px;max-height:100px;margin-top:6px;display:flex;overflow:auto}.context-attachment{background:var(--panel-2);border:1px solid color-mix(in srgb, var(--accent-fill) 60%, var(--bg));border-radius:8px;align-items:center;gap:6px;min-width:0;max-width:100%;padding-left:9px;font-size:12px;display:flex}.context-attachment span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.context-attachment .b{flex-shrink:0;min-width:36px;padding:0 6px}#conversation-upload-status{color:var(--ink-dim);margin:5px 0;font-size:12px}#conversation-upload-status:empty{display:none}#conversation-compose.file-drag{outline:2px dashed var(--accent-soft);outline-offset:-3px}.compose-actions{flex-wrap:wrap}.recall-context{color:var(--ink-dim);margin:0 0 8px;font-size:12px}.recall-context summary{cursor:pointer}.recall-context pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:240px;font-size:11px;overflow:auto}:root{--sidebar:184px}#aurora{display:none}#topbar{background:var(--bg);-webkit-backdrop-filter:none;backdrop-filter:none}.brand-sub{display:none}.brand-mark{background:0 0;border:0}.led-on{box-shadow:none;animation:none}.top-status{letter-spacing:.06em;background:0 0;border:0}.page-heading,.sesshead{justify-content:space-between;align-items:center;gap:16px;padding:10px 16px 18px;display:flex}.page-heading h2,.sesshead h2{letter-spacing:-.035em;text-transform:none;color:var(--ink);margin:0;font-size:23px;font-weight:650;line-height:1.3}.page-heading p,.sesshead p{color:var(--ink-dim);margin:5px 0 0;font-size:13px}.page-heading .b{flex:none}#qb-routines{width:auto;padding:8px 14px;font-size:13px}#quickbar{gap:8px}#qb-input{background:var(--bg-soft)}#fab{background:var(--accent-fill);width:auto;height:44px;box-shadow:0 3px 12px color-mix(in srgb, var(--scrim) 20%, transparent);border-radius:9px;gap:7px;padding:0 15px;font-weight:600;display:flex}#fab svg{width:18px;height:18px}.b.ok,.b.attach{background:var(--accent-fill);border-color:var(--accent);color:var(--on-accent);box-shadow:none}.b.grow:not(.ok){background:0 0}.b{box-shadow:none;border-radius:8px}.chip{background:0 0;border:0;padding:1px 0}.meta,.smeta{align-items:center;gap:7px 12px}.card{background:var(--panel);box-shadow:none}.card .task-chat{width:auto;min-height:32px;margin:7px 0;padding:3px 10px}.card .meta{font-size:11px}.list.wide{max-width:1400px}.sesshead{padding:10px 0 14px}.sesshead>div{flex:1;min-width:180px}#sess-search{background:var(--bg-soft);max-width:480px;min-height:42px;margin:0 0 6px}#sesslist{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start;gap:16px;display:grid}#sesslist>.hint{grid-column:1/-1}.scard{box-shadow:none;border-radius:12px;margin:0;padding:17px;overflow:visible}.scard:has(.action-menu[open]){z-index:25}.scard:before{display:none}.scard-project{color:var(--ink-dim);white-space:nowrap;text-overflow:ellipsis;margin-bottom:8px;font-size:12px;overflow:hidden}.scard-top .nm{font-size:16px}.scard-top .dot{box-shadow:none;width:6px;height:6px}.sstate{letter-spacing:.02em;text-transform:none;font-size:11px}.sidle{font:11px var(--sans)}.spane{border:0;border-top:1px solid var(--line);background:0 0;border-radius:0;height:96px;min-height:96px;max-height:96px;padding:10px 0;font-size:12px;line-height:1.5;overflow:hidden}.scard .btnrow{flex-wrap:nowrap;align-items:center;gap:7px}.scard .btnrow>.b{flex:1}.action-menu{flex:none;position:relative}.action-menu>summary{cursor:pointer;border:1px solid var(--line);min-height:40px;color:var(--ink-dim);white-space:nowrap;border-radius:8px;justify-content:center;align-items:center;padding:8px 12px;font-size:12px;list-style:none;display:flex}.action-menu>summary::-webkit-details-marker{display:none}.action-menu[open]>summary,.action-menu>summary:hover{background:var(--panel-2);color:var(--ink)}.action-menu-panel{z-index:60;border:1px solid var(--line-2);background:var(--panel-2);width:235px;max-width:calc(100vw - 32px);box-shadow:0 12px 35px color-mix(in srgb, var(--scrim) 53%, transparent);border-radius:11px;flex-direction:column;gap:3px;padding:7px;display:flex;position:absolute;top:calc(100% + 6px);right:0}.action-menu:not([open])>.action-menu-panel{display:none}.action-menu-panel>.b,.action-menu-panel>button{text-align:left;width:100%;color:var(--ink);font:13px var(--sans);cursor:pointer;background:0 0;border:0;border-radius:6px;padding:10px 12px;text-decoration:none;display:block}.action-menu-panel>.b:hover,.action-menu-panel>button:hover{background:var(--panel-2)}.action-menu-panel>.no{color:var(--red)}.menu-field{color:var(--ink-dim);border-top:1px solid var(--line);flex-direction:column;gap:6px;padding:8px 10px;font-size:11px;display:flex}.menu-field .sess-proj{width:100%!important}.settings-page{max-width:1220px;padding:0 16px}.settings-page>.page-heading{padding-left:0;padding-right:0}.settings-nav{border-bottom:1px solid var(--line);gap:6px;margin-bottom:22px;padding-bottom:8px;display:flex;overflow-x:auto}.settings-nav button{min-height:42px;color:var(--ink-dim);cursor:pointer;background:0 0;border:0;border-radius:7px;flex:none;padding:8px 14px;font-size:13px}.settings-nav button[aria-selected=true]{background:var(--panel-2);color:var(--ink)}.settings-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,280px),1fr));gap:14px;display:grid}[data-settings-panel][hidden]{display:none!important}[data-settings-panel]:not(.settings-grid){max-width:850px}.settings-grid>.rowcard{margin:0}.rowcard{box-shadow:none;border-radius:12px;padding:19px}.rowcard .led{margin-right:5px}#nav-overflow{display:none}#terminal-workspace{background:var(--bg)}.terminal-tabbar{background:var(--bg-soft);gap:12px;padding:6px 12px}.terminal-tab-item{background:0 0;border:0;border-radius:6px}.terminal-tab-item:has([aria-selected=true]){background:var(--panel-2)}.terminal-tab[aria-selected=true]{color:var(--ink);background:0 0}.terminal-popout{color:var(--ink-dim);background:0 0;border-color:#0000}#sheet{background:var(--panel)}.sheet-head{border-bottom:1px solid var(--line);margin-bottom:16px;padding-bottom:14px}.conversation{background:var(--bg)}@media (width>=1024px){#topbar{justify-content:space-between;height:64px;padding:12px 24px}#topbar .top-status{margin-right:145px}#tabbar{width:var(--sidebar);border-right:1px solid var(--line);background:var(--bg);flex-direction:column;align-items:stretch;gap:5px;height:auto;padding:24px 12px;display:flex;inset:64px auto 0 0}#tabbar .tab{min-height:44px;color:var(--ink-dim);letter-spacing:0;flex:none;justify-content:flex-start;padding:0 12px;font-size:13px}#tabbar .tab.on{color:var(--ink);background:var(--panel-2)}#tabbar .tab.on:after{display:none}#tabbar .badge{margin-left:auto}#view{margin-left:var(--sidebar);padding:22px 28px 32px}.page-heading{padding:2px 0 22px}.settings-page{padding:0}#fab{height:40px;top:12px;bottom:auto;right:24px}.col{min-width:160px;max-height:calc(100dvh - 230px)}#terminal-workspace{left:var(--sidebar)}#sheet{width:min(700px,58vw)}#qb-filter{width:150px}}@media (width<=1023px){#nav-overflow{flex:1;min-width:0;display:block}#nav-overflow>summary{border:0;border-radius:0;flex-direction:column;gap:2px;height:100%;padding:4px;font-size:10.5px}#nav-overflow>summary>span{font-size:24px;line-height:20px}#nav-overflow.on>summary{color:var(--accent-soft)}#nav-overflow>.action-menu-panel{top:auto;bottom:calc(100% + 8px);right:8px}#tabbar .tab{font-size:11px}.sesshead>div{flex-basis:100%}.sesshead button{flex:1}.action-menu>summary,.settings-nav button{min-height:44px}.settings-page{padding:0 16px}.page-heading h2,.sesshead h2{font-size:22px}}@media (width<=600px){#quickbar{grid-template-columns:minmax(0,1fr) 44px}#qb-project{grid-column:1}#qb-mic{grid-column:2}#qb-input{grid-column:1/-1}#quickbar #qb-filter{display:none}.spane{font-size:12px}}.action-menu-panel{max-height:min(420px,100dvh - 32px);overflow-y:auto}.action-menu.menu-above>.action-menu-panel{top:auto;bottom:calc(100% + 6px)}.terminal-focus,.terminal-search{border:1px solid var(--line);background:var(--panel);width:44px;height:44px;color:var(--ink);cursor:pointer;border-radius:7px;flex:none;font-size:22px;display:none}@media (width<=1023px){.terminal-focus{display:block}body.terminals-open.terminal-compact #topbar,body.terminals-open.terminal-compact #tabbar{display:none}body.terminals-open.terminal-compact #terminal-workspace{top:0;bottom:0}body.terminals-open.terminal-compact .terminal-tabbar{padding-top:calc(3px + env(safe-area-inset-top));gap:4px;padding-bottom:3px}body.terminals-open.terminal-compact .terminal-popout{display:none}body.terminals-open.terminal-compact .terminal-search,body.terminals-open.terminal-compact .terminal-actions{display:block}body.terminals-open.terminal-compact .terminal-tab-close{display:none}body.terminals-open.terminal-compact .terminal-tab{max-width:150px;padding-inline:10px;font-size:12px}}.terminal-focus[hidden]{display:none!important}#sheet:has(.session-launch-actions){scroll-padding-bottom:96px}#sheet:has(.session-launch-actions){flex-direction:column;min-height:0;display:flex}#sheet:has(.session-launch-actions)>*{flex:none}#sheet:has(.session-launch-actions)>.session-launch-actions{margin-top:auto}.session-launch-actions{bottom:calc(-28px - env(safe-area-inset-bottom,0px));z-index:6;margin:20px -18px calc(-28px - env(safe-area-inset-bottom,0px));padding:12px 18px calc(12px + env(safe-area-inset-bottom,0px));background:inherit;border-top:1px solid var(--line);box-shadow:0 -10px 18px -12px color-mix(in srgb, var(--scrim) 60%, transparent);position:sticky}.session-advanced{border-top:1px solid var(--line);margin:14px 0 0;padding-top:12px}.session-advanced>summary{box-sizing:border-box;border:1px solid var(--line-2);background:var(--panel);min-height:44px;color:var(--accent-soft);cursor:pointer;border-radius:8px;justify-content:space-between;align-items:center;gap:8px;padding:9px 12px;font-size:13px;list-style:none;display:flex}.session-advanced>summary::-webkit-details-marker{display:none}.session-advanced>summary:after{content:"▾";font-size:12px}.session-advanced[open]>summary{border-radius:8px 8px 0 0}.session-advanced[open]>summary:after{content:"▴"}.session-advanced>summary:hover{background:var(--panel-2)}.session-advanced>summary:focus-visible{outline:2px solid var(--accent-soft);outline-offset:2px}#ns-proj-hint{color:var(--ink-dim);overflow-wrap:anywhere;margin-top:6px;font-size:12px;line-height:1.45}#ns-proj-hint:empty{display:none}.ns-proj-setup{margin-top:4px;display:block}.ns-launch-summary{color:var(--ink-dim);overflow-wrap:anywhere;margin:0 0 8px;font-size:12px;line-height:1.4}.agent-commands{box-sizing:border-box;border:1px solid var(--border);background:var(--panel);width:min(620px,100vw - 28px);max-height:calc(100dvh - 32px);color:var(--text);border-radius:14px;padding:20px;overflow:auto}.agent-commands::backdrop{background:color-mix(in srgb, var(--scrim) 60%, transparent)}.agent-commands header{justify-content:space-between;align-items:center;gap:12px;display:flex}.agent-commands h2{margin:0;font-size:18px}.agent-commands p{line-height:1.5}.ac-results{padding:0;list-style:none}.ac-results li{border-bottom:1px solid var(--border);gap:6px;padding:12px 0;display:grid}.agent-commands p,.ac-results span,.ac-status{overflow-wrap:anywhere}.launch-profiles{box-sizing:border-box;background:var(--bg);width:min(640px,100vw - 24px);max-height:calc(100dvh - 24px);color:var(--ink);border:1px solid var(--line);border-radius:16px;padding:20px;overflow:auto}.launch-profiles::backdrop{background:color-mix(in srgb, var(--scrim) 60%, transparent)}.launch-profiles header,.lp-picker,.lp-buttons{align-items:center;gap:12px;display:flex}.launch-profiles header{justify-content:space-between}.launch-profiles h2{margin:0;font-size:20px}.launch-profiles p{color:var(--ink-dim);font-size:13px;line-height:1.5}.launch-profiles label{flex-direction:column;gap:6px;min-width:0;font-size:13px;display:flex}.lp-picker label{flex:1}.launch-profiles form{gap:14px;margin-top:16px;display:grid}.launch-profiles input,.launch-profiles select,.launch-profiles textarea,.launch-profiles button{box-sizing:border-box;border:1px solid var(--line);background:var(--panel);max-width:100%;min-height:44px;color:inherit;font:inherit;border-radius:8px;padding:9px 11px}.launch-profiles textarea{resize:vertical;width:100%;font-family:monospace}.launch-profiles button{cursor:pointer}.launch-profiles button:disabled{opacity:.5;cursor:wait}.lp-save{background:color-mix(in srgb, var(--accent-fill) 75%, var(--bg))!important}.lp-delete{color:color-mix(in srgb, var(--red) 55%, var(--ink))!important}.lp-buttons{flex-wrap:wrap}.lp-status{overflow-wrap:anywhere;font-size:13px}.lp-hint{margin:0}.launch-profiles [hidden]{display:none!important}@media (width<=480px){.launch-profiles{padding:14px}.lp-picker{align-items:end}.lp-picker button{flex-shrink:0}}.launch-profiles header{background:var(--bg);z-index:1;margin:-20px -20px 0;padding:14px 20px;position:sticky;top:-20px}@media (width<=480px){.launch-profiles header{margin:-14px -14px 0;padding:10px 14px;top:-14px}}.lp-starters{gap:8px;margin-top:16px;display:grid}.lp-starters h3,.lp-advanced{color:var(--ink);margin:0;font-size:13px}.lp-starter-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:10px;display:grid}.lp-starter{border:1px solid var(--line);background:var(--panel);border-radius:12px;flex-direction:column;gap:8px;min-width:0;padding:12px;display:flex}.lp-starter-head{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.lp-starter-name{overflow-wrap:anywhere;font-size:14px}.lp-starter-agent{color:var(--ink-dim);white-space:nowrap;font-size:12px}.lp-starter-purpose{overflow-wrap:anywhere;margin:0;font-size:12px}.lp-starter-use{align-self:flex-start}.lp-draft-note{color:var(--amber);margin:0;font-size:12px}.lp-advanced{border-top:1px solid var(--line);margin-top:2px;padding-top:10px}.ns-profile-description{margin-top:4px;display:block}@media (width<=480px){.lp-starter-grid{grid-template-columns:1fr}}.launch-profiles form{scroll-margin-top:68px}.launch-profiles .lp-instructions{min-height:190px;font-family:inherit;line-height:1.5}.launch-profiles .lp-description{min-height:75px;font-family:inherit}.agent-settings-head{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:10px;display:flex}.agent-settings-head h3{margin:0}.agent-settings-head p{max-width:760px;margin:5px 0 0}.agent-settings-list{gap:10px;display:grid}.agent-card{justify-content:space-between;align-items:center;gap:16px;display:flex}.agent-card h3{margin:0 0 4px}.agent-card-actions{flex-shrink:0;gap:8px;display:flex}.agent-settings-dialog{box-sizing:border-box;background:var(--bg);width:min(720px,100vw - 24px);max-height:calc(100dvh - 24px);color:var(--ink);border:1px solid var(--line);border-radius:16px;padding:20px;overflow:auto}.agent-settings-dialog::backdrop{background:color-mix(in srgb, var(--scrim) 60%, transparent)}.agent-settings-dialog form{gap:13px;display:grid}.agent-settings-dialog header{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.agent-settings-dialog h2{margin:0;font-size:20px}.agent-settings-dialog label{flex-direction:column;gap:6px;font-size:13px;display:flex}.agent-settings-dialog input,.agent-settings-dialog select,.agent-settings-dialog textarea,.agent-settings-dialog button{box-sizing:border-box;border:1px solid var(--line);background:var(--panel);max-width:100%;min-height:44px;color:inherit;font:inherit;border-radius:8px;padding:9px 11px}.agent-settings-dialog textarea{resize:vertical;font-family:monospace}.agent-settings-dialog button{cursor:pointer}.agent-settings-dialog .check{flex-direction:row;align-items:center;gap:9px;display:flex}.agent-settings-dialog .check input{width:auto;min-height:0}.agent-two{grid-template-columns:1fr 1fr;gap:12px;display:grid}.agent-dialog-buttons{flex-wrap:wrap;gap:8px;display:flex}.agent-dialog-status{overflow-wrap:anywhere}.agent-settings-dialog .sub{color:var(--ink-dim);margin:0;font-size:12.5px;line-height:1.45}.agent-prompt-help,.agent-env-help{margin-top:-8px!important}@media (width<=560px){.agent-settings-head{flex-direction:column;align-items:stretch}.agent-card{flex-direction:column;align-items:flex-start}.agent-card-actions{width:100%}.agent-card-actions button{flex:1}.agent-two{grid-template-columns:1fr}.agent-settings-dialog{padding:14px}.agent-settings-dialog header{background:var(--bg);z-index:1;margin:-14px -14px 0;padding:10px 14px;position:sticky;top:-14px}}.project-workflows{border-top:1px solid var(--line);margin-top:18px;padding-top:14px}.project-workflows h4{margin:0 0 6px}.project-workflows>p{max-width:760px}.workflows-status{overflow-wrap:anywhere}.project-workflows label{flex-direction:column;gap:6px;font-size:13px;display:flex}.project-workflows select,.project-workflows button{box-sizing:border-box;border:1px solid var(--line);background:var(--panel);max-width:100%;min-height:40px;color:inherit;font:inherit;border-radius:8px;padding:8px 10px}.project-workflows button{cursor:pointer;margin:8px 0}.workflow-card{border:1px solid var(--line);border-radius:10px;grid-template-columns:1fr auto;gap:4px 14px;margin-top:12px;padding:13px;display:grid}.workflow-card h5{margin:0 0 4px;font-size:15px}.workflow-card p{margin:4px 0;line-height:1.45}.workflow-version{color:var(--ink-dim);font-size:12px}.workflow-card-copy{min-width:0}.workflow-version code{overflow-wrap:anywhere}.workflow-version a{color:inherit}.workflow-toggle{align-self:start;min-width:92px}.workflow-commands{border-top:1px solid var(--line);grid-column:1/-1;margin-top:6px;padding-top:8px}.workflow-commands ul{margin:6px 0;padding-left:22px}.workflow-commands code{overflow-wrap:anywhere}.workflow-reload-note{color:var(--ink-dim);font-size:12px}@media (width<=560px){.workflow-card{grid-template-columns:1fr}.workflow-toggle{width:100%}.workflow-commands{grid-column:auto}}#command-open{border:1px solid var(--line);background:var(--panel);color:var(--ink-dim);cursor:pointer;min-height:40px;font:inherit;border-radius:8px;justify-content:space-between;align-items:center;gap:24px;padding:9px 13px;display:flex}#command-open kbd{font:11px var(--mono);color:var(--ink-faint)}.command-palette{width:min(620px,100vw - 32px);max-height:calc(var(--command-height,100dvh) - 32px);border:1px solid var(--line-2);background:var(--panel);color:var(--ink);box-shadow:0 24px 80px color-mix(in srgb, var(--scrim) 53%, transparent);border-radius:14px;margin:clamp(16px,10dvh,100px) auto auto;padding:0;overflow:hidden}.command-palette::backdrop{background:color-mix(in srgb, var(--scrim) 70%, transparent)}.command-search{border-bottom:1px solid var(--line);align-items:center;gap:12px;padding:14px 16px;display:flex}.command-search input{min-width:0;color:var(--ink);font:16px var(--sans);outline-offset:3px;background:0 0;border:0;flex:1;padding:8px 0}.command-search button{border:1px solid var(--line);background:var(--panel-2);min-width:40px;min-height:40px;color:var(--ink-dim);cursor:pointer;border-radius:6px;flex:none}.command-status,.command-help{color:var(--ink-dim);margin:0;padding:10px 16px;font-size:12px}#command-results{max-height:min(52dvh,460px,calc(var(--command-height,100dvh) - 175px));overscroll-behavior:contain;padding:0 8px;overflow-y:auto}.command-result{cursor:pointer;overflow-wrap:anywhere;border-radius:7px;flex-direction:column;gap:5px;min-height:52px;padding:11px 12px;display:flex}.command-result strong{font-size:14px;font-weight:550}.command-result span{color:var(--ink-dim);font-size:12px}.command-result[aria-selected=true]{background:var(--accent-wash);outline:1px solid var(--accent-soft);outline-offset:-1px}.command-help{border-top:1px solid var(--line);margin-top:8px}@media (width<=600px){#command-open{gap:0;min-width:44px;min-height:44px;margin-left:auto;padding:8px}#command-open .command-label,#command-open kbd{display:none}.command-palette{width:calc(100vw - 16px);margin-top:calc(8px + env(safe-area-inset-top))}.command-search{gap:8px;padding:10px}.command-help{display:none}#command-results{max-height:calc(var(--command-height,100dvh) - 175px);padding-bottom:8px}}.command-palette .sr-only{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.command-close-icon{display:none}@media (width<=600px){.command-close-text{display:none}.command-close-icon{font-size:24px;display:inline}}.command-result strong{align-items:center;gap:10px;display:flex}.command-shortcut{font:11px var(--mono);color:var(--ink-dim);border:1px solid var(--line-2);background:var(--panel-2);border-radius:5px;flex:none;margin-left:auto;padding:1px 6px;font-weight:400}#root{min-height:100dvh}#toasts{pointer-events:none}.toast.has-action{pointer-events:auto;align-items:center;gap:12px;display:flex}.toast.has-action>span{flex:1;min-width:0}.toast-action{border:1px solid var(--accent);min-height:36px;color:var(--accent-soft);cursor:pointer;background:0 0;border-radius:8px;flex:none;padding:6px 14px;font-weight:600}.token-dialog{background:var(--panel);width:calc(100% - 2rem);max-width:30rem;color:var(--ink);border:1px solid var(--line);border-radius:14px;padding:24px}.token-dialog form{gap:12px;display:grid}.token-dialog input{background:var(--bg);min-width:0;color:inherit;padding:12px}.pane-head{text-align:left;width:100%;color:inherit;background:0 0;border:0}.brand-mark{font-size:24px}#view{min-width:0}#view button:not([class]),#view .filters button{background:var(--panel-2);color:var(--ink);border:1px solid var(--line-2);border-radius:var(--r);cursor:pointer;min-height:40px;padding:8px 12px}#view input:not([type=checkbox]):not([type=radio]):not([class]),#view select:not([class]),#view textarea:not([class]){background:var(--panel);color:var(--ink);border:1px solid var(--line-2);border-radius:var(--r);min-width:0;max-width:100%;padding:10px}#view .scard .btnrow{flex-wrap:wrap}#view .scard,#view .filters,#view .page-heading{min-width:0}#view .scard>header{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}#view .scard pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:12rem;overflow:auto}#view .filters{flex-wrap:wrap;align-items:center;gap:8px;padding:0 16px 12px;display:flex}#view .page-heading>div{flex-wrap:wrap;gap:8px;display:flex}@media (width<=1023px){#view button:not([class]){min-height:44px}}.first-run{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg,14px);max-width:34rem;color:var(--ink);margin:24px auto;padding:20px}.first-run h2{margin:0 0 4px;font-size:1.15rem}.first-run-sub{color:var(--ink-dim);margin:0 0 16px;font-size:.92rem}.first-run-error{color:var(--amber);margin:0 0 12px;font-size:.88rem}.first-run-checklist{gap:8px;margin:0 0 18px;padding:0;list-style:none;display:grid}.first-run-checklist li{background:var(--panel-2);border:1px solid var(--line-2);border-radius:10px;flex-wrap:wrap;align-items:baseline;gap:8px;min-width:0;padding:8px 10px;display:flex}.first-run-checklist li.ok{border-color:var(--green)}.first-run-mark{text-align:center;flex:none;width:1.2em;font-weight:700}.first-run-checklist li.ok .first-run-mark{color:var(--green)}.first-run-checklist li.pending .first-run-mark{color:var(--ink-dim)}.first-run-label{font-weight:600}.first-run-detail{color:var(--ink-dim);overflow-wrap:anywhere;flex-basis:100%;font-size:.85rem}.first-run-cta{border-radius:var(--r-lg,14px);background:var(--accent);width:100%;min-height:48px;color:var(--on-accent);cursor:pointer;border:0;font-size:1rem;font-weight:600}.first-run-hint{color:var(--ink-dim);margin:12px 0 0;font-size:.82rem}.first-run-connect-link{border:1px dashed var(--line-2);border-radius:var(--r,10px);width:100%;color:var(--ink-dim);text-align:center;cursor:pointer;background:0 0;margin:14px 0 0;padding:10px;font-size:.85rem;display:block}.first-run-connect-link:hover{color:var(--ink);border-color:var(--accent)}@media (width<=420px){.first-run{max-width:none;margin:12px;padding:16px}}.connect-tools{margin:0 0 20px}.connect-remote-toggle{color:var(--ink-dim);align-items:center;gap:8px;margin:8px 0 14px;font-size:12.5px;display:flex}.connect-tools-grid{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;min-width:0;display:grid}.connect-client{min-width:0}.connect-status{overflow-wrap:anywhere}.connect-result{overflow-wrap:anywhere;margin:8px 0 0;font-size:12.5px}.connect-result.ok{color:var(--green)}.connect-result.err{color:var(--amber)}.connect-snippet{min-width:0;margin-top:10px}.connect-snippet pre{white-space:pre-wrap;overflow-wrap:anywhere;max-width:100%;margin:0 0 6px;overflow-x:auto}.connect-deeplink{align-items:center;text-decoration:none;display:inline-flex}@media (width<=480px){.connect-tools-grid{grid-template-columns:1fr}}.agent-catalog{gap:8px;display:grid}.agent-catalog-list{border:1px solid var(--line);border-radius:10px;flex-direction:column;gap:4px;max-height:min(360px,48dvh);padding:2px;display:flex;overflow:auto}.agent-catalog-group{flex-direction:column;flex:none;gap:4px;display:flex}.agent-catalog-group h3{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-dim);margin:8px 6px 2px;font-size:11px;font-weight:600}.agent-settings-dialog .agent-catalog-item{text-align:left;background:0 0;border:1px solid #0000;flex:none;align-items:flex-start;gap:10px;width:100%;min-height:0;padding:8px 9px;display:flex}.agent-settings-dialog .agent-catalog-item:hover:not(:disabled){background:var(--panel);border-color:var(--line)}.agent-settings-dialog .agent-catalog-item[aria-pressed=true]{border-color:var(--accent);background:var(--accent-wash)}.agent-settings-dialog .agent-catalog-item:disabled{opacity:.55;cursor:not-allowed}.agent-catalog-icon{background:var(--line-2);width:30px;height:30px;color:var(--ink);letter-spacing:-.02em;border-radius:8px;flex:none;place-items:center;font-size:12.5px;font-weight:700;display:grid}.agent-catalog-custom .agent-catalog-icon{border:1px dashed var(--line);color:inherit;background:0 0}.agent-catalog-text{gap:3px;min-width:0;display:grid}.agent-catalog-meta{color:var(--ink-dim);overflow-wrap:anywhere;font-size:12px}.agent-catalog-chips{flex-wrap:wrap;gap:4px;display:flex}.agent-cap{border:1px solid var(--line);border-radius:999px;padding:3px 6px;font-size:10.5px;line-height:1}.agent-cap.on{color:var(--green);border-color:color-mix(in srgb,var(--green) 45%,transparent)}.agent-cap.off{color:var(--ink-faint)}.devices-panel h4{margin:18px 0 8px}.pairing-hint{border:1px solid var(--amber);color:var(--amber);border-radius:8px;padding:10px 12px}.devices-toggle{align-items:center;gap:8px;margin:10px 0;display:flex}.devices-idle{margin:10px 0}.devices-idle input{width:6em;margin-left:8px}.pairing-mint{border:1px solid var(--border);border-radius:10px;flex-wrap:wrap;align-items:flex-start;gap:16px;margin:14px 0;padding:14px;display:flex}.pairing-qr{border-radius:6px;flex:none}.pairing-mint-code{flex:220px;min-width:0}.pairing-code-text{letter-spacing:.03em;word-break:break-all;margin:6px 0;font-size:1.1rem;display:block}.device-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.device-row{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:10px;padding:8px 0;display:flex}.device-info{overflow-wrap:anywhere;flex-direction:column;gap:2px;min-width:0;display:flex}@media (width<=480px){.pairing-mint{text-align:center;flex-direction:column;align-items:center}}.mp-grid{gap:6px;margin:8px 0;display:grid}.mp-row{grid-template-columns:minmax(8rem,1.6fr) repeat(3,minmax(4.5rem,1fr)) auto;align-items:center;gap:6px;display:grid}.mp-row input{box-sizing:border-box;width:100%;min-width:0}.mp-head{opacity:.75;font-size:.8em}.model-price-missing{border:1px dashed var(--amber);border-radius:6px;grid-template-columns:1fr auto;padding:6px 8px}@media (width<=560px){.mp-head{display:none}.mp-row:not(.model-price-missing){grid-template-columns:repeat(3,minmax(0,1fr)) auto}.mp-row:not(.model-price-missing)>:first-child{grid-column:1/-1}}.accounts-list{flex-direction:column;gap:6px;margin:8px 0;padding:0;list-style:none;display:flex}.accounts-row{border:1px solid var(--line);border-radius:9px;flex-wrap:wrap;align-items:center;gap:6px 14px;padding:8px 10px;display:flex}.accounts-who{overflow-wrap:anywhere;flex:200px;min-width:0}.accounts-state{color:var(--ink-dim);flex-wrap:wrap;flex:2 240px;gap:4px 12px;font-size:12px;display:flex}.accounts-actions{gap:6px;display:flex}.limit-policy-swap{align-items:flex-start;gap:8px;margin:6px 0;display:flex}.limit-policy-swap input{flex:none;margin-top:3px}.plugins-page{gap:14px;display:grid}.plugins-page h3{margin:0}.plugins-page h4{margin:10px 0 6px;font-size:13px}.plugins-intro,.plugin-desc{color:var(--ink-dim);overflow-wrap:anywhere;margin:0;font-size:13px;line-height:1.5}.plugin-add{gap:10px;display:grid}.plugin-add h4{margin:0}.plugin-add .segmented{flex-wrap:wrap}.plugin-add-form,.plugin-search{gap:8px;display:grid}.plugin-add-form label{color:var(--ink-dim);gap:4px;font-size:12.5px;display:grid}.plugin-add-form input,.plugin-search input,.plugin-secrets input{border:1px solid var(--line-2);background:var(--bg-soft);min-height:38px;color:var(--ink);font:13.5px var(--sans);box-sizing:border-box;border-radius:8px;width:100%;padding:7px 10px}.plugin-add-form .b,.plugin-search .b{justify-self:start}.plugin-list{gap:10px;display:grid}.plugin-card-head{flex-wrap:wrap;align-items:center;gap:6px 8px;display:flex}.plugin-card-head h4{overflow-wrap:anywhere;margin:0;font-size:14.5px}.plugin-version{font:12px var(--mono);color:var(--ink-faint)}.plugin-badge,.plugin-status,.plugin-chip,.plugin-new{border:1px solid var(--line);color:var(--ink-dim);white-space:nowrap;border-radius:999px;padding:4px 7px;font-size:11px;line-height:1}.plugin-status.active{color:var(--green);border-color:color-mix(in srgb, var(--green) 45%, transparent)}.plugin-status.modified,.plugin-status.needs_consent,.plugin-status.missing{color:var(--red);border-color:color-mix(in srgb, var(--red) 45%, transparent)}.plugin-status.disabled{color:var(--ink-faint)}.plugin-new{color:var(--amber);border-color:color-mix(in srgb, var(--amber) 45%, transparent);margin-left:6px}.plugin-chips{flex-wrap:wrap;gap:5px;margin:8px 0 0;display:flex}.plugin-chip.scope{color:var(--cyan)}.plugin-card.status-disabled .plugin-card-head h4{color:var(--ink-dim)}.plugin-warning{color:var(--amber);overflow-wrap:anywhere;margin:6px 0 0;font-size:12.5px}.plugin-note{color:var(--ink-dim);margin:6px 0 0;font-size:12.5px}.plugin-loading{color:var(--ink-faint);font-size:13px}.plugin-caps{gap:6px;margin:0;padding:0;list-style:none;display:grid}.plugin-caps>li{border:1px solid var(--line);background:var(--bg-soft);border-radius:8px;padding:8px 10px}.plugin-caps>li.risky{border-color:color-mix(in srgb, var(--amber) 50%, var(--line))}.plugin-caps ul{gap:3px;margin:6px 0 0;padding-left:18px;display:grid}.plugin-caps code,.plugin-facts code,.plugin-listing code,.plugin-sources code{font:11.5px var(--mono);overflow-wrap:anywhere;word-break:break-word}.plugin-caps-none{color:var(--ink-dim);margin:0;font-size:13px}.plugin-facts{grid-template-columns:auto 1fr;gap:4px 10px;margin:8px 0;font-size:12.5px;display:grid}.plugin-facts dt{color:var(--ink-faint)}.plugin-facts dd{overflow-wrap:anywhere;min-width:0;margin:0}.plugin-detail{border-top:1px solid var(--line);gap:6px;margin-top:10px;padding-top:8px;display:grid}.plugin-detail-row{gap:2px;margin:4px 0;font-size:12.5px;display:grid}.plugin-detail-row span{color:var(--ink-dim);overflow-wrap:anywhere}.plugin-scope,.plugin-secrets{border:1px solid var(--line);border-radius:8px;gap:6px;margin:6px 0 0;padding:8px 10px;display:grid}.plugin-scope legend,.plugin-secrets legend{padding:0 4px;font-size:12.5px;font-weight:600}.plugin-scope label,.plugin-secrets label{flex-wrap:wrap;align-items:center;gap:8px;font-size:13px;display:flex}.plugin-scope-projects{gap:4px;padding-left:22px;display:grid}.plugin-scope .b{justify-self:start}.plugin-secret-row{gap:6px;width:100%;display:flex}.plugin-secret-row input{flex:1;min-width:0}.plugin-runs{gap:4px;margin:0;padding:0;font-size:12.5px;list-style:none;display:grid}.plugin-runs li.failed b{color:var(--red)}.plugin-runs li.ok b{color:var(--green)}.plugin-run-msg{color:var(--ink-dim);font:11.5px var(--mono);overflow-wrap:anywhere}.plugin-listing{border:1px solid var(--line);border-radius:8px;justify-content:space-between;align-items:flex-start;gap:10px;padding:8px 10px;display:flex}.plugin-listing>div{overflow-wrap:anywhere;min-width:0}.plugin-sources{gap:6px;margin:0;padding:0;list-style:none;display:grid}.plugin-sources li{flex-wrap:wrap;align-items:center;gap:8px;font-size:13px;display:flex}.plugin-sources li .b{margin-left:auto}.plugin-local .plugin-detail-row{margin:6px 0 0}dialog.plugin-consent{border:1px solid var(--line-2);background:var(--panel);width:min(620px,100vw - 24px);max-height:calc(100dvh - 24px);color:var(--ink);box-sizing:border-box;border-radius:14px;padding:0;display:none}dialog.plugin-consent[open]{flex-direction:column;display:flex}dialog.plugin-consent::backdrop{background:color-mix(in srgb, var(--scrim) 55%, transparent)}.plugin-consent-head{justify-content:space-between;align-items:center;gap:10px;padding:14px 16px 6px;display:flex}.plugin-consent-head h3{overflow-wrap:anywhere;margin:0;font-size:16px}.plugin-consent-head .x{color:var(--ink-dim);cursor:pointer;background:0 0;border:0;min-width:40px;min-height:40px;font-size:22px}.plugin-consent-body{gap:6px;padding:0 16px 8px;font-size:13px;display:grid;overflow:auto}.plugin-consent-body p{overflow-wrap:anywhere;margin:0}.plugin-consent-id code{font:12px var(--mono)}.plugin-allow{background:var(--accent-wash);border-radius:8px;align-items:flex-start;gap:8px;margin-top:8px;padding:10px;font-weight:600;display:flex}.plugin-allow input{margin-top:2px}.plugin-consent-actions{border-top:1px solid var(--line);justify-content:flex-end;margin:0;padding:10px 16px 14px}.plugin-consent-actions .primary{background:var(--accent-fill);color:var(--on-fill);border-color:var(--accent-fill)}.plugin-consent-actions .primary:disabled{opacity:.5;cursor:not-allowed}@media (width<=600px){.plugin-listing{flex-direction:column}.plugin-consent-actions .b{flex:1}}.machine-remote{flex-direction:column;gap:8px;min-width:0;margin-top:8px;display:flex}.remote-tabs{flex-wrap:wrap;gap:6px;display:flex}.remote-tabs button{border-radius:999px;min-height:32px;padding:0 10px;font-size:12.5px}.remote-tabs button[aria-selected=true]{background:var(--accent-wash);color:var(--accent-soft);border-color:var(--accent)}.remote-form{gap:8px;max-width:640px;display:grid}.remote-form label{color:var(--ink-dim);gap:4px;font-size:12.5px;display:grid}.remote-form label.check,.check{align-items:center;gap:8px;display:flex}.remote-form label.check input,.check input{width:auto;min-height:0}.remote-row{flex-wrap:wrap;align-items:center;gap:8px;min-width:0;display:flex}.remote-row input{flex:180px;min-width:0}.remote-row code,.remote-table code{overflow-wrap:anywhere}.remote-table{border-collapse:collapse;width:100%;font-size:12.5px}.remote-table td{border-bottom:1px solid var(--line);vertical-align:middle;padding:5px 6px}.remote-listening{gap:4px;margin:0;padding:0;font-size:12.5px;list-style:none;display:grid}.remote-listening li{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.remote-files{gap:8px;display:grid}.b.disabled{opacity:.5;pointer-events:none}.editor-choice{color:var(--ink-dim);align-items:center;gap:8px;font-size:12.5px;display:flex}.editor-choice select{width:auto}.conn{color:var(--ink-dim);flex-wrap:wrap;align-items:center;gap:6px;font-size:12px;display:inline-flex}.conn-dot{background:var(--ink-faint);border-radius:50%;flex:none;width:8px;height:8px}.conn-connected .conn-dot{background:var(--green)}.conn-reconnecting .conn-dot{background:var(--amber);animation:1.2s ease-in-out infinite conn-pulse}.conn-down .conn-dot{background:var(--red)}.conn-down{color:var(--red)}.conn-error{color:var(--ink-faint);overflow-wrap:anywhere;flex-basis:100%}@keyframes conn-pulse{50%{opacity:.35}}@media (prefers-reduced-motion:reduce){.conn-reconnecting .conn-dot{animation:none}}.ssh-hosts{gap:6px;max-height:55vh;margin:8px 0;padding:0;list-style:none;display:grid;overflow:auto}.ssh-hosts li{border:1px solid var(--line);border-radius:var(--r);flex-wrap:wrap;justify-content:space-between;gap:6px;padding:8px 10px;display:flex}.ssh-hosts label{flex-wrap:wrap;align-items:center;gap:8px;min-width:0;display:flex}.ssh-hosts label input{width:auto;min-height:0}.ssh-tags{flex-wrap:wrap;gap:4px;display:flex}.sandbox-fields{gap:8px;display:grid}.sandbox-fields label{color:var(--ink-dim);gap:4px;font-size:12.5px;display:grid}.sandbox-yaml{max-height:260px;font:12px/1.5 var(--mono);background:var(--bg-soft);border:1px solid var(--line);border-radius:var(--r);white-space:pre-wrap;overflow-wrap:anywhere;padding:8px 10px;overflow:auto}.sandbox-hooks{gap:6px;display:grid}.sandbox-list,.grid-span{grid-column:1/-1}.sandbox-list{margin-top:14px}.sandbox-list h3{flex:1;margin:0}.sandbox-cards{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:8px;margin-top:8px;display:grid}.sandbox-card{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);min-width:0;padding:10px 12px}.sandbox-card header{justify-content:space-between;align-items:center;gap:8px;display:flex}.sandbox-card header b{overflow-wrap:anywhere;font:12.5px var(--mono)}.sandbox-card p{margin:6px 0;font-size:12px}.sandbox-card.s-destroyed{opacity:.6}.provider-usage{gap:10px;margin-bottom:18px;display:grid}.pu-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.pu-head h4{margin:0}.pu-head label{color:var(--ink-dim);align-items:center;gap:6px;font-size:12.5px;display:flex}.pu-head input{width:64px}.pu-alert{border-radius:var(--r);border:1px solid var(--warn-border);background:var(--warn-bg);color:var(--amber);margin:0;padding:8px 12px;font-size:13px}.pu-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px;display:grid}.pu-card{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--panel);align-content:start;gap:8px;min-width:0;padding:12px 14px;display:grid}.pu-card.warn{border-color:color-mix(in srgb, var(--amber) 55%, transparent);box-shadow:0 0 0 1px color-mix(in srgb, var(--amber) 20%, transparent)}.pu-card.idle{opacity:.7}.pu-card header{justify-content:space-between;align-items:center;gap:8px;display:flex}.pu-card h4{margin:0;font-size:14px}.pu-figures{flex-direction:column;display:flex}.pu-figures b{color:var(--ink);font-variant-numeric:tabular-nums;font-size:20px}.pu-figures span{font-size:11.5px}.pu-bars{align-items:flex-end;gap:2px;height:44px;display:flex}.pu-bars span{flex:1;align-items:flex-end;min-width:2px;height:100%;display:flex}.pu-bars i{background:var(--accent-soft);opacity:.85;border-radius:2px 2px 0 0;width:100%;display:block}.pu-windows{gap:6px;display:grid}.pu-meter{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:2px 8px;font-size:12px;display:grid}.pu-meter-label{color:var(--ink-dim);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.pu-meter-value{text-align:right;font-variant-numeric:tabular-nums}.pu-meter i{background:var(--line);border-radius:3px;grid-column:1/-1;height:6px;display:block;position:relative;overflow:visible}.pu-meter i b{background:var(--green);border-radius:3px;position:absolute;inset:0 auto 0 0}.pu-meter.warn i b{background:var(--amber)}.pu-meter i em{background:var(--ink-faint);opacity:.7;width:2px;position:absolute;top:-2px;bottom:-2px}.pu-nowindow{margin:0;font-size:12px}.pu-accounts tr.warn td{color:var(--amber)}.pu-costs summary{cursor:pointer;font-size:13px;font-weight:600}.pu-costs table{margin-top:6px}.pu-costs th{text-align:left;color:var(--ink-faint);padding:4px 6px;font-size:11.5px;font-weight:500}.pu-costs{overflow-x:auto}.race-row{border:1px dashed var(--line);border-radius:var(--r);flex-wrap:wrap;align-items:center;gap:6px;margin:6px 0;padding:8px 10px;display:flex}.race-row b{margin-right:4px}.race-row button{min-height:32px;padding:0 10px}.race-row button.on{background:var(--accent-wash);border-color:var(--accent);color:var(--accent-soft)}@media (width<=700px){.remote-table td:nth-child(3){display:none}.pu-grid,.sandbox-cards{grid-template-columns:1fr}.pu-costs table{font-size:12px}}.settings-grid>.rowcard:has(.remote-form,.remote-ports,.remote-files,.sandbox-hooks){grid-column:1/-1}.pair-page{background:var(--bg);min-height:100dvh;color:var(--ink);justify-content:center;align-items:center;padding:24px 16px;display:flex}.pair-card{flex-direction:column;gap:14px;width:100%;max-width:380px;display:flex}.pair-card h1{margin:0;font-size:1.4rem}.pair-card p{color:var(--ink-dim);margin:0;font-size:.92rem}.pair-card form{flex-direction:column;gap:12px;display:flex}.pair-card label{color:var(--ink-dim);flex-direction:column;gap:6px;font-size:.85rem;display:flex}.pair-card input{border:1px solid var(--border);background:var(--bg-alt);color:var(--ink);border-radius:8px;padding:10px 12px;font-size:1rem}.pair-card button{background:var(--accent);color:var(--on-accent);cursor:pointer;border:none;border-radius:8px;padding:11px 14px;font-size:1rem}.pair-card button:disabled{opacity:.6;cursor:default}.pair-error{color:var(--amber);margin:0;font-size:.85rem}.sheet.review-workspace{width:min(1400px,100vw - 24px)}.sheet.review-workspace label.dfile-viewed-toggle{gap:5px;margin:0;display:inline-flex}.sheet.review-workspace label.review-checkbox{display:flex}.sheet.review-workspace .sheet-head{top:-20px}.dcode .dl-row,.dcode .dl-split{white-space:pre;min-width:max-content;padding:0;display:flex}.dcode .dl-row>.dl-text,.dcode .dl-half>.dl-text{flex:1;padding:0 12px 0 8px}.dcode .dl-num{text-align:right;width:3.4em;color:var(--ink-faint);-webkit-user-select:none;user-select:none;opacity:.8;flex:none;padding-right:6px}.dcode .dl-auth{flex:none;align-self:stretch;width:4px;margin-right:2px}.dcode .dl-auth-agent{background:var(--accent)}.dcode .dl-auth-human{background:var(--green)}.dcode .dl-hunk{align-items:center;gap:8px;position:sticky;left:0}.dcode .dl-hunk>.dl-text{padding-left:12px}.dcode .dl-hunk-current{outline:2px solid var(--accent);outline-offset:-2px}.dl-hunk-actions{white-space:normal;gap:6px;padding:2px 8px;display:inline-flex}.dl-hunk-actions .b{min-height:26px;padding:2px 9px;font-size:11.5px}.dcode .dl-meta{color:var(--ink-faint)}.wrapped .dcode .dl-row,.wrapped .dcode .dl-split{min-width:0}.wrapped .dcode .dl-text{white-space:pre-wrap;overflow-wrap:anywhere;min-width:0}.dcode .dl-split{min-width:0}.dcode .dl-half{flex:50%;min-width:0;display:flex;overflow:hidden}.dcode .dl-half+.dl-half{border-left:1px solid var(--line)}.dcode .dl-half>.dl-text{overflow-x:auto}.diff-split .dcode{overflow-x:hidden}.dcode .dl-empty{background:repeating-linear-gradient(135deg, transparent 0 6px, color-mix(in srgb, var(--scrim) 6%, transparent) 6px 12px)}.dcode .dl-half.dl-commentable:hover{outline:1px dashed var(--accent-soft);outline-offset:-1px;cursor:pointer}.dcode .dl-comment-badge{float:none;align-self:center;margin:0 6px}.dcode .dl-notes{white-space:normal;background:var(--bg-soft);gap:6px;padding:6px 12px 8px 4.5em;display:grid}.dl-note{border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:var(--r);background:var(--panel);font:400 13px/1.5 var(--sans);max-width:70ch;padding:6px 10px}.dl-note[data-state=addressed]{border-left-color:var(--green)}.dl-note[data-state=open]{border-left-color:var(--amber)}.dl-note p{white-space:pre-wrap;margin:4px 0 0}.dl-note-head{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.dl-note-state{font:600 10.5px var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-dim);margin-right:auto}.dl-note-state.s-addressed{color:var(--green)}.dl-note-state.s-open{color:var(--amber)}.dl-note-state.s-resolved{color:var(--ink-faint)}.dl-note-btn{min-height:26px;padding:2px 9px;font-size:11.5px}.dfile summary{flex-wrap:wrap;row-gap:4px}.dfile-path{overflow-wrap:anywhere;min-width:0}.dfile-viewed>summary .dfile-path{color:var(--ink-dim)}.dfile-authors{font:600 11px var(--sans);gap:8px;display:inline-flex}.a-agent{color:var(--accent-soft)}.a-human{color:var(--green)}.dfile-actions{gap:6px;display:inline-flex}.dfile-viewed-toggle{font:500 11.5px var(--sans);color:var(--ink-dim);border:1px solid var(--line);cursor:pointer;border-radius:7px;align-items:center;gap:5px;padding:3px 8px;display:inline-flex}.dfile-viewed-toggle input{width:auto;margin:0}.img-diff{white-space:normal;font-family:var(--sans);padding:10px 12px}.img-diff-modes{flex-wrap:wrap;gap:6px;margin-bottom:8px;display:flex}.img-diff-modes .b{min-height:30px;padding:3px 10px;font-size:12px}.img-diff-modes .b[aria-pressed=true]{border-color:var(--accent);color:var(--accent-soft);background:var(--accent-wash)}.img-diff-side{grid-template-columns:1fr 1fr;gap:10px;display:grid}.img-diff figure{margin:0}.img-diff figcaption{font:600 11px var(--sans);color:var(--ink-dim);margin-bottom:4px}.img-diff img{min-width:96px;image-rendering:pixelated;background:repeating-conic-gradient(color-mix(in srgb, var(--scrim) 18%, transparent) 0 25%, transparent 0 50%) 0 0 / 16px 16px;max-width:100%;max-height:420px;display:block}.img-diff-stack{max-width:100%;display:inline-block;position:relative}.img-diff-stack .img-diff-top{object-fit:contain;width:100%;height:100%;position:absolute;inset:0}.img-diff-divider{background:var(--accent);pointer-events:none;width:2px;position:absolute;top:0;bottom:0}.img-diff input[type=range]{width:min(420px,100%);margin-top:8px;display:block}.img-diff-text{margin:0 12px 10px}.img-diff-note{padding:10px 12px}.review-tabs{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:6px;margin:4px 0 10px;display:flex}.review-tab{color:var(--ink-dim);font:600 13px var(--sans);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;min-height:38px;padding:8px 10px}.review-tab[aria-selected=true]{color:var(--ink);border-bottom-color:var(--accent)}.review-tab.warn{color:var(--amber)}.review-tabs select{max-width:50vw;margin-left:auto}.review-toolbar-sticky{z-index:4;background:var(--bg-soft);flex-wrap:wrap;margin:0 0 8px;padding:6px 0;position:sticky;top:44px}.review-toolbar-sticky .wrapbtn{margin-left:0}.review-toolbar-sticky .focus-start{margin-left:auto}.hunk-nav{gap:4px;display:inline-flex}.seg{border:1px solid var(--line);border-radius:8px;display:inline-flex;overflow:hidden}.seg button{white-space:nowrap;background:var(--panel);color:var(--ink-dim);min-height:32px;font:500 11.5px var(--sans);cursor:pointer;border:0;padding:6px 10px}.seg button+button{border-left:1px solid var(--line)}.seg button[aria-pressed=true]{background:var(--accent-wash);color:var(--accent-soft)}.authors-legend,.review-round-summary{margin:0 0 8px}.review-body{display:block}.review-body.with-tree{grid-template-columns:minmax(200px,260px) minmax(0,1fr);align-items:start;gap:12px;display:grid}.review-pane{min-width:0}.ftree{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);max-height:calc(100dvh - 150px);font-size:12.5px;position:sticky;top:104px;overflow:auto}.ftree-head{border-bottom:1px solid var(--line);flex-direction:column;gap:4px;padding:8px;display:flex}.ftree-head input{box-sizing:border-box;background:var(--bg);width:100%;color:var(--ink);border:1px solid var(--line);border-radius:7px;padding:6px 8px}.ftree ul{margin:0;padding:0;list-style:none}.ftree-dir,.ftree-file{text-align:left;width:100%;color:var(--ink);cursor:pointer;font:400 12.5px var(--mono);background:0 0;border:0;align-items:center;gap:6px;min-height:30px;padding:5px 8px;display:flex}.ftree-dir{color:var(--ink-dim)}.ftree-file:hover,.ftree-dir:hover{background:var(--bg-soft)}.ftree-file[aria-current=true]{background:var(--accent-wash)}.ftree-file.viewed .ftree-name{color:var(--ink-faint)}.ftree-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.ftree-pm{white-space:nowrap;font-size:11px}.ftree-pm .a{color:var(--green)}.ftree-pm .d{color:var(--red)}.ftree-comments{color:var(--accent-soft);font-size:11px}.ftree-check{color:var(--green)}.review-rounds{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);margin-top:14px;padding:10px 12px}.review-rounds summary{cursor:pointer;font:600 12.5px var(--sans);color:var(--ink-dim)}.review-round h4{color:var(--ink-dim);margin:12px 0 6px;font-size:12.5px}.review-round ul{gap:8px;margin:0;padding:0;list-style:none;display:grid}.review-round-item{border:1px solid var(--line);border-radius:var(--r);background:var(--bg);padding:8px 10px}.review-round-item p{margin:6px 0;font-size:13px}.review-rounds-bulk{margin-top:8px}.git-branch{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:10px;display:flex}.git-branch .b{margin-left:auto}.git-operation{border:1px solid color-mix(in srgb, var(--amber) 45%, transparent);background:color-mix(in srgb, var(--amber) 8%, transparent);border-radius:var(--r);flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px;padding:10px 12px;font-size:13px;display:flex}.git-operation-actions{flex-wrap:wrap;gap:8px;margin-left:auto;display:inline-flex}.git-section h3{justify-content:space-between;align-items:center;gap:8px;margin:14px 0 6px;font-size:13.5px;display:flex}.git-section h3 .b{min-height:30px;padding:3px 10px;font-size:12px}.git-files{gap:6px;margin:0;padding:0;list-style:none;display:grid}.git-file{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);overflow:hidden}.git-file .diff{padding:0 8px 8px}.git-file .dfile{margin:0}.git-file-row{flex-wrap:wrap;align-items:center;gap:6px;padding:4px 6px;display:flex}.git-file-row .b{min-height:30px;padding:3px 10px;font-size:12px}.git-file-name{min-width:0;color:var(--ink);text-align:left;cursor:pointer;font:400 12.5px var(--mono);background:0 0;border:0;flex:1;align-items:center;gap:8px;padding:6px 4px;display:flex}.git-path{overflow-wrap:anywhere;min-width:0}.git-status{color:var(--amber);flex:none;width:1.2em;font-weight:700}.confirm-inline{flex-wrap:wrap;align-items:center;gap:6px;display:inline-flex}.confirm-prompt{color:var(--ink-dim);max-width:46ch;font-size:12.5px}.review-commit-form textarea.commit-message{min-height:76px;font-family:var(--mono);font-size:13px}.review-commit-form .btnrow{margin-top:8px}.commit-scope{margin:10px 0 6px}.git-guard,.git-hook-failure,.git-force{border:1px solid color-mix(in srgb, var(--red) 40%, transparent);background:color-mix(in srgb, var(--red) 7%, transparent);border-radius:var(--r);margin-top:12px;padding:10px 12px;font-size:13px}.git-force{border-color:color-mix(in srgb, var(--amber) 45%, transparent);background:color-mix(in srgb, var(--amber) 7%, transparent)}.git-guard p,.git-hook-failure p{margin:0 0 8px}.conflict-files{flex-wrap:wrap;gap:6px;margin:8px 0 12px;display:flex}.conflict-file{font-family:var(--mono);font-size:12px}.conflict-file[aria-selected=true]{border-color:var(--accent);color:var(--accent-soft);background:var(--accent-wash)}.conflict-regions{gap:12px;margin:12px 0;padding:0;list-style:none;display:grid}.conflict-region{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);padding:10px}.conflict-region[data-choice=unresolved]{border-color:color-mix(in srgb, var(--amber) 50%, transparent)}.conflict-region-head{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:8px;display:flex}.conflict-region-head .btnrow{flex-wrap:wrap;gap:6px;margin-left:auto;display:inline-flex}.conflict-region-head .b[aria-pressed=true]{border-color:var(--accent);color:var(--accent-soft);background:var(--accent-wash)}.conflict-sides{grid-template-columns:1fr 1fr;gap:8px;display:grid}.conflict-sides.three{grid-template-columns:1fr 1fr 1fr}.conflict-sides figure{min-width:0;margin:0}.conflict-sides figcaption{font:600 11px var(--sans);color:var(--ink-dim);overflow-wrap:anywhere;margin-bottom:4px}.conflict-sides pre{background:var(--bg);font:400 12px/1.5 var(--mono);white-space:pre;border-radius:6px;min-height:1.5em;margin:0;padding:6px 8px;overflow-x:auto}.conflict-ours pre{box-shadow:inset 3px 0 var(--cyan)}.conflict-theirs pre{box-shadow:inset 3px 0 var(--accent)}.conflict-base pre{box-shadow:inset 3px 0 var(--ink-faint)}textarea.conflict-result{font-family:var(--mono);white-space:pre;font-size:12.5px}.linkish{color:var(--accent-soft);cursor:pointer;font:inherit;background:0 0;border:0;padding:0;text-decoration:underline}.focus-review{z-index:60;background:var(--bg);padding:env(safe-area-inset-top,0) env(safe-area-inset-right,0) 0 env(safe-area-inset-left,0);flex-direction:column;display:flex;position:fixed;inset:0}.focus-bar,.focus-nav{background:var(--bg-soft);flex:none;align-items:center;gap:8px;padding:8px 10px;display:flex}.focus-bar{border-bottom:1px solid var(--line)}.focus-nav{border-top:1px solid var(--line);padding-bottom:calc(8px + env(safe-area-inset-bottom,0px));flex-wrap:wrap;justify-content:center}.focus-nav .b,.focus-bar .b{min-height:40px}.focus-title{flex-direction:column;flex:1;min-width:0;display:flex}.focus-count{font:600 11px var(--sans);color:var(--ink-dim)}.focus-path{font:500 13px var(--mono);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.focus-body{overscroll-behavior:contain;flex:1;padding:8px;overflow:auto}.focus-body .dfile summary{z-index:2;background:var(--panel);position:sticky;top:-8px}@media (width<=760px){.sheet.review-workspace{border-radius:14px 14px 0 0;width:100vw;max-width:100vw;max-height:100dvh;margin:auto 0 0;padding:12px}.sheet.review-workspace .sheet-head{top:-12px}.review-toolbar-sticky{position:static}.review-body.with-tree{display:block}.ftree{max-height:40dvh;margin-bottom:10px;position:static}.conflict-sides,.conflict-sides.three,.img-diff-side{grid-template-columns:1fr}.dcode .dl-num{width:2.6em;padding-right:4px}.dcode .dl-notes{padding-left:12px}.diff-split .dcode .dl-text{white-space:pre-wrap;overflow-wrap:anywhere}.review-toolbar-sticky{gap:6px}.review-toolbar-sticky .focus-start{flex-basis:100%;min-height:42px}.focus-nav .b{flex:22%;padding-left:6px;padding-right:6px;font-size:12.5px}}.review-tray.review-tray-empty{box-shadow:none;border-radius:var(--r);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin:14px 0 0;display:flex;position:static}@media (width<=480px){.sheet.review-workspace .review-tray:not(.review-tray-empty){margin:16px -12px -12px}}.review-tray-item{min-width:0;overflow:hidden}.review-tray-code{white-space:pre;max-width:100%}@media (width<=480px){.sheet.review-workspace .review-tray-list ul{max-height:28dvh;overflow:auto}.sheet.review-workspace .review-tray-summary textarea{min-height:48px}}.dcode .dl-check{flex:none;justify-content:center;align-items:center;width:26px;display:inline-flex}.dcode .dl-check input{cursor:pointer;width:15px;height:15px;margin:0}.dcode .dl-checked{box-shadow:inset 3px 0 var(--accent)}@media (pointer:coarse){.dcode .dl-check{width:34px}.dcode .dl-check input{width:20px;height:20px}}.sheet.review-workspace:has(.dl-composer textarea:focus) .review-tray{box-shadow:none;position:static}.status-badge{border:1px solid var(--line-2);color:var(--ink-dim);letter-spacing:.04em;text-transform:none;white-space:nowrap;border-radius:999px;padding:1px 7px;font-size:10.5px;font-weight:600;line-height:16px;display:inline-block}.status-badge[data-state=working]{color:var(--accent-soft);border-color:color-mix(in srgb, var(--accent-soft) 45%, var(--bg))}.status-badge[data-state=needs_you]{color:var(--amber);border-color:var(--amber)}.status-badge[data-state=idle]{color:var(--ink-dim)}.status-badge[data-state=ended]{color:var(--ink-faint);border-style:dashed}.status-badge[data-reason=setup_failed]{color:var(--red);border-color:color-mix(in srgb, var(--red) 55%, var(--bg))}.scard[data-state=needs_you]{border-color:color-mix(in srgb, var(--amber) 55%, var(--line))}.approval-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.approval-card.compact{margin:8px 0 0;padding:10px 12px}.approval-card .approval-summary{background:var(--bg);color:var(--ink);font:400 12px/1.45 var(--mono);white-space:pre-wrap;word-break:break-word;border-radius:8px;margin:2px 0 4px;padding:6px 8px;display:block}.approval-context{color:var(--ink-dim);font-size:12px}.approval-actions>button{align-items:center;gap:8px;display:inline-flex}.approval-kbd{font:600 10px/1 var(--mono);opacity:.75;border:1px solid;border-radius:4px;padding:2px 5px}.approval-scope{color:var(--ink-dim);margin:6px 0 0;font-size:12px}.approval-links{flex-wrap:wrap;gap:8px;display:flex}.approvals-page .approval-card{margin-bottom:14px}@media (hover:none) and (pointer:coarse){.approval-kbd{display:none}}#nav-overflow .action-menu-panel>button{text-align:left;flex-direction:column;align-items:flex-start;gap:2px;display:flex}#nav-overflow .more-title{color:var(--ink);font-weight:600}#nav-overflow .more-detail{color:var(--ink-dim);font-size:11.5px;font-weight:400}#nav-overflow>summary{position:relative}@media (width>=1024px){#tabbar{overflow:hidden auto}#tabbar .tab{flex-shrink:0}#tabbar [data-tab=settings]{margin-top:auto}}@media (width<=1023px){#nav-overflow>.action-menu-panel{min-width:260px}}.empty-state{max-width:640px}.getting-started{border:1px solid var(--line);background:var(--panel);border-radius:14px;max-width:720px;margin:4px 0 18px;padding:22px}.getting-started h2{margin:0 0 6px;font-size:20px}.getting-started p{color:var(--ink-dim);margin:0 0 14px}.getting-started .gs-actions{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.getting-started .gs-actions .b{min-height:44px}.getting-started .gs-problems{gap:8px;margin:16px 0 0;padding:0;list-style:none;display:grid}.getting-started .gs-problems li{background:var(--warn-bg);border:1px solid var(--warn-border);border-radius:8px;padding:8px 10px;font-size:13px}.getting-started .gs-problems code{font-size:12px}.ns-folder-row{align-items:stretch;gap:8px;display:flex}.ns-folder-row select{flex:auto;min-width:0}.ns-folder-row .b{flex:none;min-height:40px}.ns-ask{color:var(--ink);align-items:center;gap:8px;margin:14px 0 2px;font-weight:600;display:flex}.ns-ask input{width:18px;height:18px}.folder-bar{align-items:center;gap:8px;margin:8px 0;display:flex}.folder-path{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--ink);flex:auto;font-size:12.5px;overflow:hidden}.folder-list{border:1px solid var(--line);border-radius:10px;max-height:min(52vh,420px);margin:0;padding:0;list-style:none;overflow-y:auto}.folder-list>li+li{border-top:1px solid var(--line)}.folder-list>li.subhint{padding:12px}.folder-row{width:100%;min-height:44px;color:var(--ink);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:10px;padding:8px 12px;display:flex}.folder-row:hover,.folder-row:focus-visible{background:var(--panel-2)}.folder-name{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.folder-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;margin-top:12px;display:flex}.folder-actions .b{min-height:44px}.settings-tabs{flex-wrap:wrap;align-items:center;gap:4px;margin:0 0 18px;display:flex}.settings-tabs>button{min-height:40px}.settings-group-label{border-left:1px solid var(--line-2);color:var(--ink-faint);letter-spacing:.08em;text-transform:uppercase;margin:0 4px 0 10px;padding-left:10px;font-size:11px;font-weight:700}@media (width<=1023px){.settings-tabs{scrollbar-width:thin;flex-wrap:nowrap;padding-bottom:4px;overflow-x:auto}.settings-tabs>button,.settings-group-label{flex:none}}.basics{max-width:760px}.basics-row{border-bottom:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;padding:14px 0;display:flex}.basics-label{color:var(--ink);flex-direction:column;flex:260px;gap:3px;font-weight:600;display:flex}.basics-hint{color:var(--ink-dim);font-size:12.5px;font-weight:400}.basics-value{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.basics-row select{min-width:200px;max-width:100%}.basics-row input[type=checkbox]{width:22px;height:22px}.basics .chip.ok{border-color:color-mix(in srgb, var(--green) 50%, var(--bg));color:var(--ink)}.basics-more{margin-top:14px}.phone-choices{gap:8px;margin:12px 0;display:grid}.phone-choice{border:1px solid var(--line);cursor:pointer;border-radius:10px;align-items:flex-start;gap:10px;padding:10px 12px;display:flex}.phone-choice[data-available=false]{cursor:default;background:var(--bg-soft)}.phone-choice input{margin-top:3px}.phone-choice-body{flex-direction:column;gap:3px;min-width:0;display:flex}.phone-choice-title{color:var(--ink);flex-wrap:wrap;align-items:baseline;gap:8px;font-weight:600;display:flex}.phone-choice-title code{overflow-wrap:anywhere;font-size:12px;font-weight:400}.phone-choice-note{color:var(--ink-dim);font-size:12.5px}.phone-choice-why{color:var(--ink);font-size:12.5px}.phone-actions{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.phone-actions .b{min-height:44px}.phone-connect{margin-bottom:18px}.commit-on-main{border:1px solid var(--warn-border);background:var(--warn-bg);border-radius:10px;margin:8px 0 12px;padding:10px 12px}.commit-on-main legend{color:var(--ink);padding:0 4px;font-weight:600}.commit-on-main .commit-new-branch{max-width:calc(100% - 24px);margin:4px 0 8px 24px}.disabled-why{color:var(--ink-dim);margin:6px 0 0;font-size:12.5px}.settings-tabs>button{border:1px solid var(--line);color:var(--ink-dim);font:500 13px var(--sans);cursor:pointer;background:0 0;border-radius:8px;padding:6px 12px}.settings-page .settings-tabs>button[aria-selected=true]{background:var(--accent-wash);border-color:var(--accent-soft);color:var(--ink)}.settings-tabs>button[data-settings=basics]{font-weight:700}#view .settings-tabs>button:not([data-settings=basics]):not([aria-selected=true]){background:0 0;border-color:#0000;padding:6px 8px;font-size:12.5px}#view .settings-tabs>button:not([data-settings=basics]):not([aria-selected=true]):hover{color:var(--ink);text-decoration:underline}.phone-wizard .phone-choice{display:flex}.phone-wizard .phone-choice input[type=radio]{flex:none;width:auto;margin:4px 0 0}.list.first-run .session-section-title,.list.first-run #scratch-terminals{display:none}.scard-top button.nm{font:inherit;color:var(--ink);cursor:text;text-align:left;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:0;min-width:0;margin:0;padding:0;font-size:14.5px;font-weight:600;overflow:hidden}.scard-top button.nm:hover{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.scard-top .nm-edit{flex:auto;min-width:0;margin:0;padding:4px 8px;font-size:14px}.sess-more>summary{place-items:center;min-width:44px;min-height:40px;font-size:18px;display:grid}.sess-more>.action-menu-panel{flex-direction:column;align-items:stretch;gap:8px;min-width:min(320px,90vw);padding:10px;display:flex}.sess-more .session-filters{flex-direction:column;gap:8px;display:flex}.sess-more #sess-search{margin:0}#nav-overflow .more-title .badge{margin-left:6px;position:static}.commit-own-folder{color:var(--ink);margin:4px 0 8px 24px;font-weight:600}.commit-no-identity{background:var(--warn-bg);border:1px solid var(--warn-border);color:var(--ink);border-radius:8px;margin:8px 0;padding:8px 12px}.commit-no-identity p{margin:0 0 6px}.commit-no-identity pre{white-space:pre-wrap;overflow-wrap:anywhere;-webkit-user-select:all;user-select:all;margin:0}.commit-no-identity .identity-fields{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:8px 12px;margin:6px 0;display:grid}.commit-no-identity .identity-fields label.f{flex-direction:column;gap:4px;font-weight:600;display:flex}.commit-no-identity .identity-scope{border:0;flex-wrap:wrap;gap:4px 18px;margin:4px 0 8px;padding:0;display:flex}.commit-done{border:1px solid color-mix(in srgb, var(--green) 45%, var(--line));background:color-mix(in srgb, var(--green) 8%, var(--panel));color:var(--ink);border-radius:8px;margin:10px 0;padding:10px 12px}.commit-done p{margin:0 0 4px}.commit-done-line b{color:var(--ink)}.commit-switch-back{margin-top:8px}.commit-switch-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.commit-switch-row code{background:var(--bg);min-width:0;color:var(--ink);font:400 12px/1.4 var(--mono);overflow-wrap:anywhere;-webkit-user-select:all;user-select:all;border-radius:6px;flex:260px;padding:6px 8px}.commit-options{margin:8px 0}.commit-options>summary{cursor:pointer;color:var(--ink);padding:4px 0;font-weight:600}.commit-options>summary .sub{color:var(--ink-dim);font-weight:400}.commit-options[open]>summary{margin-bottom:4px}.commit-nothing .linkish{color:var(--accent-soft);font:inherit;cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}.commit-no-identity .identity-error{color:var(--red);margin:2px 0 6px;font-weight:600}.mod-slot,.mod-box{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;display:inline-flex}.mod-col{flex-direction:column;align-items:flex-start}.mod-text{color:var(--ink);overflow-wrap:anywhere;font-size:12.5px}.mod-bold{font-weight:600}.mod-mono{font-family:var(--mono)}.mod-badge{border:1px solid var(--line-2);color:var(--ink-dim);white-space:nowrap;border-radius:999px;padding:1px 7px;font-size:10.5px;font-weight:600;line-height:16px;display:inline-block}.mod-dim{color:var(--ink-faint)}.mod-accent{color:var(--accent-soft);border-color:color-mix(in srgb, var(--accent-soft) 45%, var(--bg))}.mod-warn{color:var(--amber);border-color:var(--amber)}.mod-danger{color:var(--red);border-color:color-mix(in srgb, var(--red) 55%, var(--bg))}.mod-ok{color:var(--green);border-color:color-mix(in srgb, var(--green) 55%, var(--bg))}.mod-button{min-height:28px;padding:2px 10px;font-size:12px}.mod-link{color:var(--accent-soft);font-size:12.5px}.mod-status{align-items:center;gap:10px;min-width:0;max-width:40vw;margin-right:10px;display:inline-flex;overflow:hidden}.mod-panes{right:12px;bottom:calc(var(--tabbar-h,0px) + 12px);z-index:40;flex-direction:column;gap:10px;width:min(380px,100vw - 24px);max-height:70dvh;display:flex;position:fixed}.mod-pane{border:1px solid var(--line-2);background:var(--panel);min-height:0;box-shadow:var(--shadow);border-radius:12px;flex-direction:column;display:flex}.mod-pane>header{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:8px;padding:10px 12px;display:flex}.mod-close{min-height:28px;padding:0 9px}.mod-pane-body{padding:12px;overflow:auto}.mod-pane-body>.mod-slot{align-items:stretch}@media (width>=1024px){.mod-panes{bottom:16px;right:20px}}.session-filters{display:contents}@media (width<=600px){.wide-only,.wide-only-control{display:none}:root{--tabbar-h:calc(50px + env(safe-area-inset-bottom,0px))}#topbar{gap:8px;min-height:0;padding:6px 12px}#topbar h1{font-size:16px}#topbar .brand-mark,#topbar svg{transform:scale(.85)}#topbar button{min-height:36px}main{padding-top:6px}#tabbar .tab{gap:1px;padding:4px 2px;font-size:10px}#tabbar .tab-ic svg{width:19px;height:19px}#tabbar .badge{transform:scale(.85)}.list{gap:8px;padding:0 10px}.sesshead{gap:6px;padding:2px 0 6px}.page-heading,.pane-head{gap:6px;padding:2px 12px 6px}#media{padding:0 10px}#media .pane-head{padding-left:2px;padding-right:2px}.page-heading h2,.sesshead h2,.pane-head h2,#media h2{font-size:17px}.page-heading p,.sesshead p,.pane-head .sub{margin-top:1px;font-size:11.5px}button.b,a.b,.scard .btnrow button.b,#view button:not([class]){min-height:36px;padding:0 11px;font-size:12.5px}button.b.ok,.scard .btnrow button.b.ok,#sheet button.b.ok,.conversation button.b.ok{min-height:40px}.f,select.f,input.f{min-height:38px}select,#view select,#sheet select{min-height:38px;padding-top:0;padding-bottom:0;line-height:normal}.sesshead{flex-wrap:wrap;align-items:center}.sesshead>div{flex:calc(100% - 150px);min-width:0}.sesshead>div p{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.sesshead #sess-new{flex:none;order:1}.sesshead>button:not(#sess-new){white-space:nowrap;text-overflow:ellipsis;flex:28%;order:2;min-width:0;padding:6px 4px;font-size:11.5px;overflow:hidden}#sess-search{height:38px;min-height:38px;margin:0;padding-top:0;padding-bottom:0}.session-filters{gap:8px;display:flex}.session-filters .session-grouping{white-space:nowrap;flex:1 1 0;gap:5px;min-width:0;margin:0;font-size:11px}.session-filters .session-grouping select.f{flex:1;min-width:0;max-width:none;height:36px;min-height:36px;padding:0 6px}.scard{padding:10px 12px}.scard .proj,.scard>.proj{font-size:11px}.scard-top{gap:6px}.scard-top b,.scard h3{font-size:14.5px}.smeta{gap:4px;margin-top:4px;font-size:11px}.spane{height:auto;min-height:0;max-height:58px;padding:6px 0;font-size:10.5px;line-height:1.35;overflow:hidden}.scard .btnrow{flex-wrap:wrap;gap:6px;margin-top:8px}.scard .btnrow>.b{flex:auto;min-width:max-content}#sesslist .scard .btnrow button,#sesslist .scard .btnrow summary{height:40px;min-height:40px;padding:0 10px;font-size:12.5px}.session-worktree{margin:4px 0 6px;font-size:11px}#view .page-heading button,#qb-routines{min-height:36px;padding:0 11px;font-size:12.5px}#quickbar{gap:6px;padding:0 10px}#quickbar #qb-project,#quickbar #qb-input,#quickbar #qb-filter{height:44px;min-height:44px;padding:0 10px}.card{padding:9px 10px}.card-x{width:32px;height:32px;font-size:14px}.card h3,.card .title{font-size:13.5px}.card .task-chat{width:auto;min-height:32px;margin:6px 0;padding:0 10px;font-size:12px}#sheet pre,.ev pre,#sheet .body{white-space:pre-wrap;overflow-wrap:anywhere;font-size:12px}.media-feed{gap:10px}.media-card{border-radius:10px;gap:8px;padding:10px}.media-card h3{margin-bottom:4px;font-size:14px}.media-frame{height:300px}.media-filter{gap:5px;font-size:11px}.media-filter select{max-width:170px;height:36px;min-height:36px;padding:0 6px}.live-bar{flex-wrap:nowrap;gap:5px;margin-bottom:10px}.live-bar label{flex:1 1 0;gap:0;min-width:0;font-size:0}.live-bar select{width:100%;min-width:0;height:36px;min-height:36px;padding:0 6px}.live-bar button.b{flex:none;height:36px;padding:0 9px}.live-expose{flex:none;gap:5px}.live-expose input{width:64px;height:36px;min-height:36px;padding:0 6px}.media-link button.b,.media-card footer button.b,.media-card footer a.b{min-height:36px;padding:0 10px}.scratch-review{margin-top:16px}.conversation-head{gap:8px;padding:6px 10px}.conversation-head h2{font-size:15px}.conversation-head p{margin-top:1px;font-size:11px}.conversation button.b{min-height:36px;padding:0 10px;font-size:12.5px}.reader-controls{padding:3px 10px;font-size:11px}#conversation-input{height:58px;min-height:44px;padding:8px 10px}#conversation-hint{display:none}.conversation label[for=conversation-input]{margin-bottom:3px;font-size:11px}}@media (width<=1023px){#sheet{width:100%;max-width:100%;height:auto;max-height:none;margin:0}}@media (width<=600px){#sheet{padding-left:12px;padding-right:12px;top:3dvh}.sheet-head{margin-bottom:8px;padding-bottom:8px}.sheet-head h2{font-size:17px}#sheet p,#sheet .subhint,#sheet small{margin:3px 0 6px;font-size:11.5px;line-height:1.4}#ns-proj-hint,.ns-launch-summary{font-size:11.5px;line-height:1.4}#sheet label{margin-top:8px;font-size:12px}#sheet{font-size:12.5px}#sheet input:not([type=checkbox]):not([type=radio]),#sheet select,#sheet textarea{box-sizing:border-box;width:100%;max-width:100%;min-height:38px;margin-top:3px;padding:6px 10px}#sheet select{height:38px;padding-top:0;padding-bottom:0;line-height:normal}.session-launch-actions{margin-left:-12px;margin-right:-12px;padding-left:12px;padding-right:12px}#sheet label:has(>input[type=checkbox]){align-items:center;gap:8px;display:flex}#sheet input[type=checkbox]{flex:none;width:18px;height:18px;min-height:0;margin:0}.sesshead>div p{display:none}.sesshead{flex-wrap:nowrap}.sesshead>div{flex:auto}.sesshead>.sess-more{order:2}.now-strip .now-chip:not(.now-approvals):not([data-state=needs_you]){display:none}.now-strip:not(:has(.now-approvals,.now-chip[data-state=needs_you])){display:none}#regular-sessions>.session-section-title,.scard-project-none{display:none}}body{zoom:var(--ui-zoom,1)}.settings-search{max-width:560px;margin:0 0 14px;position:relative}.settings-search input{box-sizing:border-box;border:1px solid var(--line-2);background:var(--panel);width:100%;min-height:42px;color:var(--ink);font:14px var(--sans);border-radius:9px;padding:9px 12px}.settings-search input:focus{outline:2px solid var(--accent-soft);outline-offset:1px}#settings-search-results{z-index:40;border:1px solid var(--line-2);background:var(--panel-2);max-height:min(60vh,420px);box-shadow:0 16px 40px color-mix(in srgb, var(--scrim) 35%, transparent);border-radius:10px;padding:6px;position:absolute;top:calc(100% + 4px);left:0;right:0;overflow:auto}.settings-hit{cursor:pointer;border-radius:7px;flex-direction:column;gap:2px;padding:8px 10px;display:flex}.settings-hit strong{color:var(--ink);font-size:13.5px;font-weight:550}.settings-hit span{color:var(--ink-dim);font-size:12px}.settings-hit[aria-selected=true]{background:var(--accent-wash);outline:1px solid var(--accent-soft);outline-offset:-1px}.settings-hit-empty{color:var(--ink-dim);margin:6px 8px;font-size:13px}.setting-hit{outline-offset:4px;border-radius:6px;transition:outline-color .3s;outline:2px solid var(--accent-soft)!important}.personal{flex-direction:column;gap:14px;max-width:900px;display:flex}.personal h3{margin:4px 0 0}.personal h4{color:var(--ink);margin:0 0 4px;font-size:14px}.personal fieldset{border:0;min-width:0;margin:0;padding:0}.personal legend,.personal-label{color:var(--ink);margin-bottom:6px;font-size:13.5px;font-weight:600;display:block}.personal-row{border:1px solid var(--line);background:var(--panel);border-radius:10px;flex-direction:column;gap:6px;padding:12px 14px;display:flex}.personal-block{border:1px solid var(--line);background:var(--bg-soft);border-radius:12px;flex-direction:column;gap:8px;padding:14px;display:flex}.personal-block .personal-row{background:var(--panel)}.personal-hint,.personal-note{color:var(--ink-dim);margin:0;font-size:12.5px}.personal-empty{color:var(--ink-dim);margin:0;font-size:13px}.personal-error{color:var(--red);margin:0;font-size:12.5px}.personal-check{flex-direction:row;align-items:flex-start;gap:10px;display:flex}.personal-check .personal-hint{display:block}.personal-inline{color:var(--ink-dim);flex-wrap:wrap;align-items:center;gap:8px;font-size:13px;display:flex}.personal select,.personal input:not([type]),.personal input[type=search],.personal textarea{border:1px solid var(--line-2);background:var(--bg-soft);min-height:38px;color:var(--ink);font:13.5px var(--sans);box-sizing:border-box;border-radius:8px;max-width:100%;padding:7px 10px}.personal textarea{font-family:var(--mono);font-size:12px}.segmented{border:1px solid var(--line-2);border-radius:9px;align-self:flex-start;display:inline-flex;overflow:hidden}.segmented label{cursor:pointer;min-height:38px;color:var(--ink-dim);align-items:center;padding:0 16px;font-size:13px;display:flex}.segmented label+label{border-left:1px solid var(--line-2)}.segmented label.on{background:var(--accent-wash);color:var(--accent-soft);font-weight:600}.segmented input{opacity:0;pointer-events:none;position:absolute}.segmented label:focus-within{outline:2px solid var(--accent-soft);outline-offset:-2px}.swatches{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.swatch{border:2px solid var(--panel);width:32px;height:32px;box-shadow:0 0 0 1px var(--line-2);cursor:pointer;border-radius:50%}.swatch[aria-pressed=true]{box-shadow:0 0 0 2px var(--ink)}.swatch-custom{color:var(--ink-dim);align-items:center;gap:6px;font-size:12.5px;display:inline-flex}.swatch-custom input{background:0 0;border:0;width:38px;height:32px;padding:0}.zoom-row{align-items:center;gap:6px;display:flex}.zoom-row .b{min-width:40px}.term-themes{grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:6px;display:grid}.term-theme{border:1px solid var(--line);cursor:pointer;color:var(--ink);background:var(--bg-soft);border-radius:8px;align-items:center;gap:8px;padding:6px 8px;font-size:12.5px;display:flex;position:relative}.term-theme.on{border-color:var(--accent-soft);background:var(--accent-wash)}.term-theme input{opacity:0;pointer-events:none;position:absolute}.term-theme:focus-within{outline:2px solid var(--accent-soft)}.term-theme .icon-button{margin-left:auto}.term-swatch{border:1px solid var(--line);font:11px var(--mono);border-radius:5px;flex:none;align-items:center;gap:2px;padding:3px 5px;display:inline-flex}.term-swatch b{margin-right:3px}.term-swatch i{border-radius:2px;width:6px;height:12px;display:inline-block}.icon-button{border:1px solid var(--line);width:32px;height:32px;color:var(--ink-dim);cursor:pointer;background:0 0;border-radius:7px;flex:none}.icon-button:disabled{opacity:.4;cursor:default}.icon-button.danger:hover:not(:disabled){color:var(--red);border-color:var(--red)}.quick-list{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.quick-list li{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.quick-number{text-align:right;width:16px;color:var(--ink-faint);font:11px var(--mono)}.quick-label{width:140px}.quick-text{flex:1;min-width:160px;font-family:var(--mono)!important}.quick-enter{color:var(--ink-dim);align-items:center;gap:3px;display:inline-flex}.quick-empty{color:var(--ink-dim);font-size:13px}.quick-add{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.quick-add input:not([type=checkbox]){flex:1;min-width:140px}.layout-list{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.layout-list li{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.layout-list input{flex:1;min-width:160px}.shortcut-tools{flex-wrap:wrap;gap:8px;display:flex}.shortcut-tools input{flex:1;min-width:200px}.shortcut-conflicts{border:1px solid var(--red);color:var(--ink);background:var(--bg-soft);border-radius:10px;padding:10px 14px;font-size:13px}.shortcut-conflicts ul{margin:6px 0 0;padding-left:18px}.shortcut-group h4{margin:10px 0 6px}.shortcut-table{border-collapse:collapse;width:100%}.shortcut-table th,.shortcut-table td{border-top:1px solid var(--line);text-align:left;vertical-align:middle;padding:7px 8px;font-size:13px}.shortcut-table th{color:var(--ink);width:40%;font-weight:500}.shortcut-table tr.clash th{color:var(--red)}.shortcut-context{border:1px solid var(--line-2);color:var(--ink-dim);border-radius:5px;margin-left:8px;padding:1px 6px;font-size:11px;font-weight:400}.shortcut-chords{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.shortcut-chord{border:1px solid var(--line-2);background:var(--panel-2);border-radius:6px;align-items:center;display:inline-flex}.shortcut-chord kbd{font:12px var(--mono);color:var(--ink);padding:3px 7px}.shortcut-chord.reserved kbd{-webkit-text-decoration:underline dotted var(--amber);text-decoration:underline dotted var(--amber)}.shortcut-chord button{border:0;border-left:1px solid var(--line-2);color:var(--ink-dim);cursor:pointer;background:0 0;min-height:26px;padding:0 6px}.shortcut-none{color:var(--ink-faint);font-size:12px}.shortcut-actions{white-space:nowrap;text-align:right}.shortcut-actions .b{min-height:32px;padding:0 10px;font-size:12px}.shortcut-recorder{border:2px dashed var(--accent-soft);border-radius:8px;outline:none;flex-direction:column;flex-basis:100%;gap:6px;padding:10px;display:flex}.shortcut-recorder:focus{background:var(--accent-wash)}.shortcut-live kbd{font:14px var(--mono)}.shortcut-conflict{color:var(--red);margin:0;font-size:12.5px}.shortcut-recorder-actions{gap:6px;display:flex}@media (width<=600px){.shortcut-table,.shortcut-table tbody,.shortcut-table tr,.shortcut-table th,.shortcut-table td{width:auto;display:block}.shortcut-table tr{border-top:1px solid var(--line);padding:6px 0}.shortcut-table th,.shortcut-table td{border:0;padding:3px 0}.shortcut-actions{text-align:left}.quick-label{width:100%}.term-themes{grid-template-columns:1fr 1fr}}#offline-banner{z-index:40;background:color-mix(in srgb, var(--amber) 14%, var(--panel));border:1px solid color-mix(in srgb, var(--amber) 45%, var(--line));border-radius:var(--r);color:var(--ink);align-items:center;gap:10px;margin:0 0 10px;padding:8px 12px;font-size:13px;display:flex;position:sticky;top:0}#offline-banner span:nth-child(2){flex:1;min-width:0}#offline-banner .offline-dot{background:var(--amber);border-radius:50%;flex:none;width:8px;height:8px}#offline-banner button{min-height:32px}body:has(#offline-banner) #view .scard{opacity:.92}#update-banner{background:color-mix(in srgb, var(--accent) 12%, var(--panel));border:1px solid color-mix(in srgb, var(--accent) 40%, var(--line));border-radius:var(--r);color:var(--ink);flex-wrap:wrap;align-items:center;gap:8px;margin:0 10px 10px;padding:8px 12px;font-size:13px;display:flex}#update-banner>span{flex:160px;min-width:0}#update-banner button{min-height:32px}#pull-refresh{top:calc(env(safe-area-inset-top,0px) + 8px);z-index:90;background:var(--panel-2);border:1px solid var(--line-2);width:36px;height:36px;color:var(--ink-dim);box-shadow:var(--shadow);opacity:0;pointer-events:none;border-radius:50%;place-items:center;font-size:19px;display:grid;position:fixed;left:50%;transform:translate(-50%,-44px)}#pull-refresh:before{content:"↻"}#pull-refresh.armed{color:var(--accent-soft);border-color:var(--accent)}#pull-refresh.busy{opacity:1;animation:.8s linear infinite pull-spin;transform:translate(-50%,20px)}@keyframes pull-spin{0%{rotate:0deg}to{rotate:360deg}}.swipe-row{touch-action:pan-y;border-radius:var(--r);position:relative}.swipe-row>.swipe-card{position:relative}.swipe-under{border-radius:var(--r);color:var(--bg);align-items:center;padding:0 22px;font-size:14px;font-weight:600;display:none;position:absolute;inset:0}.swipe-under.ok{background:var(--green)}.swipe-under.warn{background:var(--red)}.swipe-right{justify-content:flex-start}.swipe-left{justify-content:flex-end}.swipe-row.swiping-right>.swipe-right,.swipe-row.swiping-left>.swipe-left{display:flex}@media (width<=600px) and (pointer:coarse),(width<=600px) and (hover:none){.scard:has(.action-menu.as-sheet[open]){z-index:75}.action-menu.as-sheet[open]:before{content:"";z-index:70;background:color-mix(in srgb, var(--bg) 80%, transparent);animation:.18s ease-out sheet-fade;position:fixed;inset:0}.action-menu.as-sheet[open]>.action-menu-panel{z-index:71;width:auto;max-width:none;max-height:72dvh;padding:18px 10px calc(12px + env(safe-area-inset-bottom,0px));overscroll-behavior:contain;border-radius:16px 16px 0 0;animation:.22s cubic-bezier(.2,.8,.2,1) sheet-up;position:fixed;inset:auto 0 0;overflow-y:auto}.action-menu.as-sheet[open]>.action-menu-panel:before{content:"";background:var(--line-2);border-radius:2px;align-self:center;width:38px;height:4px;margin:-8px auto 8px;display:block;position:sticky;top:-10px}.action-menu.as-sheet[open]>.action-menu-panel>button,.action-menu.as-sheet[open]>.action-menu-panel>.b{min-height:46px;font-size:15px}}@keyframes sheet-up{0%{opacity:.4;transform:translateY(40%)}to{opacity:1;transform:none}}@keyframes sheet-fade{0%{opacity:0}to{opacity:1}}.voice-settings .voice-choice{align-items:flex-start;gap:10px;margin:8px 0;font-size:13.5px;display:flex}.voice-settings .voice-choice input{flex:none;margin-top:4px}.voice-settings .voice-choice input:disabled+span{opacity:.6}.pair-link-actions{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.pair-link-actions a.b{border:1px solid var(--line-2);background:var(--panel-2);min-height:36px;color:var(--ink);font:600 12.5px var(--sans);border-radius:8px;align-items:center;padding:0 12px;text-decoration:none;display:inline-flex}.pair-open-app{margin:4px 0 12px;font-size:14px}.app-hosts .device-row{align-items:center} +#media{padding-bottom:40px}.media-filter{color:var(--ink-dim);align-items:center;gap:8px;margin-left:auto;font-size:12px;display:flex}.media-filter select{width:auto;max-width:240px;margin:0}.media-empty{max-width:640px;color:var(--ink-dim)}.media-empty pre{border:1px solid var(--line);background:var(--panel);border-radius:8px;padding:12px;font-size:12.5px;overflow-x:auto}.media-feed{grid-template-columns:repeat(auto-fill,minmax(min(100%,460px),1fr));align-items:start;gap:16px;display:grid}.media-card{border:1px solid var(--line);background:var(--panel);border-radius:12px;flex-direction:column;gap:10px;min-width:0;padding:14px;display:flex}.media-card h3{overflow-wrap:anywhere;margin:0 0 6px;font-size:15px}.media-meta{color:var(--ink-dim);flex-wrap:wrap;align-items:center;gap:6px;font-size:12px;display:flex}.media-meta button.chip{cursor:pointer;font:inherit;font-size:12px}.media-when{margin-left:auto}.media-note{color:var(--ink-dim);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px}.media-video,.media-image{background:var(--scrim);border-radius:8px;width:100%;max-height:70vh;display:block}.media-image{object-fit:contain}.media-card audio{width:100%}.media-frame{border:1px solid var(--line);background:var(--on-accent);border-radius:8px;width:100%;height:420px}.media-link{flex-direction:column;align-items:flex-start;gap:8px;min-width:0;display:flex}.media-link>a{overflow-wrap:anywhere;max-width:100%;color:var(--accent-soft)}.media-link small,.media-file{color:var(--ink-dim);margin:0;font-size:12px}.media-peek summary{cursor:pointer;color:var(--ink-dim);font-size:13px}.media-text{border:1px solid var(--line);background:var(--bg);border-radius:8px;max-height:360px;margin:8px 0 0;padding:10px;font-size:12px;overflow:auto}.media-card footer{justify-content:flex-end;gap:8px;display:flex}.media-card footer .b{font-size:12.5px;text-decoration:none}.media-card footer a.b{border:1px solid var(--line-2);background:var(--panel);min-height:40px;color:var(--accent-soft);border-radius:8px;align-items:center;padding:9px 12px;display:inline-flex}.media-card footer a.b:hover{border-color:var(--accent-soft)}.scard .media-chip{cursor:pointer;font:inherit;font-size:inherit;color:var(--accent-soft)}#live{margin-bottom:22px}.live-bar{color:var(--ink-dim);flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:14px;font-size:12px;display:flex}.live-bar label{align-items:center;gap:8px;display:flex}.live-bar select{width:auto;max-width:220px;margin:0}.live-expose,.live-address{gap:6px;min-width:0;display:flex}.live-expose input{width:130px;margin:0}.live-address input{flex:1;min-width:0;margin:0}.live-feed{grid-template-columns:repeat(auto-fill,minmax(min(100%,620px),1fr))}.live-card{border-color:var(--accent-soft)}.live-card[data-kind=desktop]{grid-column:1/-1}.live-chip{color:var(--amber)}.live-desktop{aspect-ratio:16/10;background:var(--scrim);height:auto}.live-copy{color:var(--accent-soft);cursor:pointer;font:inherit;background:0 0;border:0;padding:0 2px}.media-expose{align-self:flex-start}.limit-banner{border:1px solid color-mix(in srgb, var(--blue) 45%, transparent);background:color-mix(in srgb, var(--blue) 8%, transparent);border-radius:9px;flex-direction:column;gap:6px;margin:6px 0;padding:8px 10px;display:flex}.limit-banner-what{overflow-wrap:anywhere;flex-direction:column;gap:2px;display:flex}.limit-banner-what span{color:var(--ink-dim);font-size:11.5px}.limit-banner-actions{flex-wrap:wrap;gap:6px;display:flex}.limit-chip{white-space:nowrap}.claims-panel .claims-toolbar{flex-wrap:wrap;align-items:center;gap:8px;margin:10px 0;display:flex}.claims-panel .claims-form{border:1px solid var(--border);background:var(--panel-2);border-radius:8px;grid-template-columns:1fr 1fr;gap:8px;margin:10px 0;padding:10px;display:grid}.claims-panel .claims-form input,.claims-panel .claims-form select{box-sizing:border-box;width:100%}.claims-list{gap:8px;margin:0;padding:0;list-style:none;display:grid}.claims-row{border:1px solid var(--border);border-radius:8px;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:10px;padding:8px 10px;display:flex}.claims-row-main{flex-direction:column;gap:2px;min-width:0;display:flex}.claims-holder{font-weight:600}.claims-agent{opacity:.75;font-weight:400}.claims-auto-badge{opacity:.7;border:1px solid var(--border);border-radius:999px;margin-left:6px;padding:0 6px;font-size:.72em}.claims-scope{word-break:break-word;font-size:.92em}.claims-intent{opacity:.85;font-size:.9em;font-style:italic}.claims-times{opacity:.65;font-size:.82em}.claims-row-actions{flex-shrink:0;gap:6px;display:flex}.session-claims{gap:6px;margin:8px 0;display:grid}.session-claims-row{flex-wrap:wrap;align-items:baseline;gap:8px;font-size:.88em;display:flex}.session-claims-row .claims-scope{font-size:inherit}.claims-overlap-warning{border:1px solid var(--warn-border);background:var(--warn-bg);border-radius:8px;margin:6px 0 10px;padding:8px 10px;font-size:.92em}.claims-overlap-warning ul{margin:4px 0;padding-left:18px}.session-claims-chip{display:inline-flex;position:relative}@media (width<=480px){.claims-panel .claims-form{grid-template-columns:1fr}.claims-row{flex-direction:column}}.sheet{box-sizing:border-box;width:min(760px,100vw - 24px);max-height:calc(100dvh - 24px);color:inherit;background:var(--panel);border:1px solid var(--border);border-radius:16px 16px 0 0;margin:auto 0 0 auto;padding:20px;overflow:auto}.sheet::backdrop{background:color-mix(in srgb, var(--scrim) 58%, transparent)}.sheet-head{z-index:2;background:inherit;justify-content:space-between;align-items:center;gap:12px;padding:12px 0;display:flex;position:sticky;top:-20px}.sheet-head h2{margin:0}.sheet label{gap:5px;margin:10px 0;display:grid}.sheet input,.sheet select,.sheet textarea{box-sizing:border-box;max-width:100%}.task-detail{width:min(900px,100vw - 24px)}.steer-row{gap:8px;margin:10px 0;display:flex}.steer-row .steer-input{flex:1;min-width:0}#f-variants{margin:12px 0}.variants-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.variant-row{border:1px solid var(--border);border-radius:8px;flex-wrap:wrap;align-items:center;gap:6px;margin:6px 0;padding:8px;display:flex}.variant-row select,.variant-row input{flex:100px;min-width:90px}.variant-n{opacity:.7;font-variant-numeric:tabular-nums;flex:none}.variant-remove{flex:none}.compare-view{margin:10px 0}.compare-head{justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;display:flex}.judge-verdict{background:var(--panel-2);border-radius:8px;margin-bottom:10px;padding:8px 10px;font-size:.92em}.compare-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;display:grid}.compare-card{border:1px solid var(--border);border-radius:10px;min-width:0;padding:10px}.compare-card header{justify-content:space-between;align-items:center;margin-bottom:6px;display:flex}.compare-card dl{grid-template-columns:auto 1fr;gap:2px 8px;margin:0 0 8px;font-size:.9em;display:grid}.compare-card dt{opacity:.65}.compare-card dd{overflow-wrap:anywhere;margin:0}.board-column{display:contents}#rt-list{min-height:1px}@media (width<=700px){#board .col.mobile-off{display:none}#board .col.mobile-on{width:100%;min-width:0;display:flex}.sheet{border-radius:16px 16px 0 0;width:100vw;max-height:92dvh}}.machine-sheet{border-radius:16px;width:min(520px,100vw - 24px);max-width:calc(100vw - 24px);margin:auto}.machine-sheet form{min-width:0}.machine-sheet input,.machine-sheet select{width:100%;min-width:0}@media (width<=600px){.machine-sheet{padding:14px;font-size:14px}.machine-sheet .sheet-head{top:-14px}.machine-sheet .sub{font-size:12px}}dialog.conversation{color:var(--ink);border:0;width:100%;max-width:100%;max-height:none;margin:0;padding:0}dialog.conversation::backdrop{background:color-mix(in srgb, var(--scrim) 85%, transparent)}@media (width>=900px){dialog.conversation{width:900px}}.conversation [hidden]{display:none!important}.reader-text a.md-file-link{color:var(--accent-soft);cursor:pointer;overflow-wrap:anywhere;text-decoration:none}.reader-text a.md-file-link:hover,.reader-text a.md-file-link:focus-visible{text-decoration:underline}.reader-text a.md-file-link.unverified{color:inherit}.reader-text a.md-file-link.unverified:hover{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.conversation-head .conversation-details-toggle{min-width:40px;margin-left:auto;font-size:18px;line-height:1}.conversation-details{border-bottom:1px solid var(--line);background:var(--bg-soft);flex-direction:column;flex-shrink:0;gap:8px;padding:10px 16px;display:flex}.conversation-details .conversation-usage,.conversation-details .conversation-checks{margin:0}.conversation-details-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.conversation-text-size{gap:4px;margin-left:auto;display:inline-flex}@media (width<=600px){.conversation-details{max-height:45vh;padding:8px 12px;overflow-y:auto}.conversation-text-size{margin-left:0}}.needs-you{border:1px solid var(--line);background:var(--panel);border-radius:12px;margin:4px 0 12px;padding:10px 12px}.ny-push-prompt{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding:8px 0;display:flex}.needs-you>.ny-push-prompt+header{border-top:1px solid var(--line);padding-top:10px}.ny-push-prompt-actions{flex-wrap:wrap;gap:6px;display:flex}.needs-you>header{align-items:baseline;gap:8px;display:flex}.needs-you h3{margin:0;font-size:14px}.ny-count{background:var(--accent);min-width:20px;color:var(--on-fill);text-align:center;border-radius:10px;padding:1px 6px;font-size:11px;font-weight:700}.ny-list{flex-direction:column;gap:8px;margin:8px 0 0;padding:0;list-style:none;display:flex}.ny-row{border-top:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding:8px 0;display:flex}.ny-row:first-child{border-top:0;padding-top:0}.ny-why{flex-wrap:wrap;flex:170px;align-items:baseline;gap:6px;min-width:0;display:flex}.ny-reason{border:1px solid color-mix(in srgb, var(--amber) 45%, transparent);color:var(--amber);text-transform:uppercase;letter-spacing:.04em;border-radius:9px;flex:none;padding:1px 7px;font-size:10.5px}.ny-what{overflow-wrap:anywhere;font-weight:650}.ny-where{color:var(--ink-dim);overflow-wrap:anywhere;flex-basis:100%;font-size:11.5px}.ny-actions{flex-wrap:wrap;gap:6px;display:flex}.ny-more{color:var(--ink-dim);margin:8px 0 0;font-size:11.5px}.ny-stale{border:1px solid color-mix(in srgb, var(--amber) 40%, transparent);color:var(--amber);border-radius:9px;margin-left:auto;padding:1px 7px;font-size:10.5px}.ny-toggle{margin-top:8px}.ny-review-link{border-top:1px solid var(--line);color:var(--ink-dim);margin-top:10px;padding-top:10px;font-size:13px;text-decoration:none;display:block}.ny-review-link:hover,.ny-review-link:focus-visible{color:var(--accent)}.ny-deny-reason{flex-wrap:wrap;flex:100%;gap:6px;display:flex}.ny-deny-reason input{border:1px solid var(--line);background:var(--panel-2);min-width:0;color:inherit;font:inherit;border-radius:7px;flex:160px;padding:0 9px}.scard-approval{border:1px solid color-mix(in srgb, var(--amber) 45%, transparent);background:color-mix(in srgb, var(--amber) 8%, transparent);border-radius:9px;flex-direction:column;gap:6px;margin:6px 0;padding:8px 10px;display:flex}.scard-approval-what{overflow-wrap:anywhere;flex-wrap:wrap;align-items:baseline;gap:6px;display:flex}.scard-approval-what code{color:var(--ink-dim);overflow-wrap:anywhere;font-size:11.5px}.scard-approval-actions,.scard-approval-reason{flex-wrap:wrap;gap:6px;display:flex}.scard-approval-reason input{border:1px solid var(--line);background:var(--panel-2);min-width:0;color:inherit;font:inherit;border-radius:7px;flex:160px;padding:0 9px}@media (width<=600px){.scard-approval-actions .b,.scard-approval-reason .b{flex:84px}}.link-button{border:1px solid var(--line);background:var(--panel-2);min-height:38px;color:inherit;font:inherit;border-radius:7px;justify-content:center;align-items:center;padding:0 11px;text-decoration:none;display:inline-flex}.link-button:hover{border-color:var(--accent);color:var(--accent-soft)}@media (width<=600px){.needs-you{padding:9px 10px}.ny-row{gap:6px;padding:7px 0}.ny-actions{flex:100%}.ny-actions .b{flex:84px}#sesslist .scard .btnrow button.chat-open{order:-1}}#conversation-draft{border-top:1px solid var(--line);color:var(--ink-dim);margin:0;padding:5px 10px;font-size:11.5px}#conversation-draft-row .reader-text{white-space:pre-wrap;overflow-wrap:anywhere}.conversation-session-actions{border-bottom:1px solid var(--line);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:8px;padding:6px 10px;display:flex}.conversation-session-actions .b{flex:none}#conversation-output-error{color:var(--ink-dim);flex-direction:column;align-items:flex-start;gap:8px;padding:12px 10px;font-size:12.5px;display:flex}#conversation-output-error p{margin:0}.conversation-notice{border-top:1px solid var(--line);color:var(--amber);margin:0;padding:7px 10px;font-size:12px}.conversation-changes{border-top:1px solid var(--line);font-size:12px}.conversation-changes>summary{cursor:pointer;color:var(--ink-dim);padding:8px 10px;font-weight:600}.conversation-changes .changes-body{flex-direction:column;gap:6px;padding:0 10px 9px;display:flex}.conversation-changes .sub{color:var(--ink-dim);margin:0;font-size:11.5px}.conversation-changes .b{align-self:flex-start}.changes-files{flex-direction:column;gap:3px;max-height:150px;margin:0;padding:0;list-style:none;display:flex;overflow:auto}.changes-files li{overflow-wrap:anywhere;justify-content:space-between;gap:8px;display:flex}.changes-files span{color:var(--ink-dim);flex:none}@media (width<=600px){.conversation-head>div{flex:auto;min-width:0}.conversation-head>.b{flex:none}#conversation-title{white-space:normal;text-overflow:clip;overflow-wrap:anywhere;overflow:visible}}button.mic-recording{background:color-mix(in srgb, var(--red) 60%, var(--bg));color:var(--on-accent);border-color:color-mix(in srgb, var(--red) 60%, var(--bg));animation:1.4s ease-in-out infinite mic-pulse}@keyframes mic-pulse{0%,to{opacity:1}50%{opacity:.72}}.sstate.sstate-needs{border:1px solid var(--amber);color:var(--amber);text-transform:uppercase;letter-spacing:.05em;white-space:nowrap;border-radius:999px;padding:1px 7px;font-size:10.5px;font-weight:600;line-height:16px;display:inline-block}.switch-steps{flex-direction:column;gap:6px;margin:8px 0;padding:0;list-style:none;display:flex}.switch-steps li{color:var(--muted);align-items:center;gap:8px;font-size:13px;display:flex}.switch-steps li[data-state=active]{color:var(--ink);font-weight:600}.switch-steps li[data-state=done]{color:var(--ink-dim)}.switch-step-dot{border:1px solid var(--line-2);border-radius:50%;flex:none;width:8px;height:8px}.switch-steps li[data-state=active] .switch-step-dot{background:var(--accent);border-color:var(--accent)}.switch-steps li[data-state=done] .switch-step-dot{background:var(--accent-soft);border-color:var(--accent-soft)}.switch-progress-panel{left:12px;right:12px;bottom:calc(var(--tabbar-h,56px) + 10px);z-index:40;pointer-events:none;flex-direction:column;gap:8px;display:flex;position:fixed}.switch-progress{pointer-events:auto;background:var(--panel);border:1px solid var(--line-2);width:100%;max-width:460px;box-shadow:0 10px 30px color-mix(in srgb, var(--scrim) 60%, transparent);border-radius:12px;margin:0 auto;padding:10px 12px}.switch-progress.failed{border-color:color-mix(in srgb, var(--red) 70%, var(--bg))}.switch-progress-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.switch-progress-x{color:var(--ink-dim);cursor:pointer;background:0 0;border:0;min-height:32px;font-size:16px}.switch-progress-actions{justify-content:space-between;align-items:center;gap:10px;display:flex}.switch-progress-actions p{color:color-mix(in srgb, var(--red) 50%, var(--ink));margin:0;font-size:13px}.switch-progress-actions .b{flex:none}.lineage{flex:none;align-items:center;gap:6px;min-width:0;display:flex}.lineage-entry{align-items:stretch;min-width:0;display:flex}.lineage-open{white-space:nowrap;align-items:center;gap:6px;max-width:200px;min-height:34px;padding:0 8px;display:flex;overflow:hidden}.lineage-open strong{text-overflow:ellipsis;overflow:hidden}.lineage-open small{color:var(--muted);text-overflow:ellipsis;font-weight:400;overflow:hidden}.lineage-chat{min-height:34px;padding:0 8px;font-size:12px}.lineage-pending{color:var(--muted);font-size:12px}@media (width<=1023px){.lineage-open{max-width:132px;min-height:34px;padding:0 6px;font-size:12px}.lineage-open small{display:none}.switch-progress-panel{bottom:calc(var(--tabbar-h,56px) + 6px);left:8px;right:8px}}.session-lineage,.conversation-lineage{flex-wrap:wrap;flex:none;max-width:100%}.conversation-lineage{border-bottom:1px solid var(--line);padding:6px 10px}@media (width<=1023px){.terminal-tabbar .lineage{flex-wrap:wrap;max-width:100%}.lineage-open strong{display:none}.lineage-open small{color:inherit;font-size:inherit;display:inline}}.voice-mode{flex-direction:column;gap:6px;display:flex}.voice-mode-panel{border:1px solid var(--border);background:var(--panel-bg);border-radius:10px;flex-direction:column;gap:8px;padding:10px;display:flex}.voice-mode-state{align-items:center;gap:8px;font-weight:600;display:flex}.voice-mode-dot{background:var(--border);border-radius:50%;flex:none;width:10px;height:10px}.voice-mode-dot.listening{background:color-mix(in srgb, var(--green) 45%, var(--bg));animation:1.4s ease-in-out infinite mic-pulse}.voice-mode-dot.speaking{background:color-mix(in srgb, var(--blue) 65%, var(--bg));animation:1.4s ease-in-out infinite mic-pulse}.voice-mode-transcript{opacity:.85;word-break:break-word;font-style:italic}.voice-mode-status{font-weight:500}.voice-mode-pending{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;display:flex}.voice-mode-hints{line-height:1.4}.voice-mode-settings-body{flex-direction:column;gap:8px;margin-top:8px;display:flex}.voice-mode-settings-body label{flex-direction:column;gap:4px;font-size:.9em;display:flex}.voice-mode-autoread{align-items:center;flex-direction:row!important;gap:6px!important}.voice-mode-hold{touch-action:none;-webkit-user-select:none;user-select:none;align-self:stretch;padding:14px;font-size:1.1em}@media (width<=600px){.voice-mode-panel{font-size:.95em}}.browser-pane{z-index:120;background:var(--bg);min-height:0;color:var(--ink);padding-top:env(safe-area-inset-top);flex-direction:column;font-size:13px;display:flex;position:fixed;inset:0}.browser-pane.agent-driving{box-shadow:inset 0 0 0 2px var(--amber)}@media (width>=1100px){.conversation.with-browser{width:100vw;padding-right:58vw;left:0;transform:none}.conversation.with-browser .browser-pane{border-left:1px solid var(--line-2);width:58vw;position:absolute;inset:0 0 0 auto}}.browser-pane .b{min-height:34px;padding:4px 10px}.browser-pane .b.on{border-color:var(--accent);background:var(--accent-wash)}.browser-pane .b.warn{color:var(--red)}.browser-bar{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:8px;padding:6px 8px;display:flex}.browser-tabs{gap:6px;display:flex}.browser-tabs [aria-selected=true]{border-color:var(--accent)}.browser-toolbar{flex-wrap:wrap;align-items:center;gap:6px;padding:6px 8px;display:flex}.browser-address{flex:220px;gap:6px;min-width:0;display:flex}.browser-address input{min-width:0;font:13px var(--mono,monospace);background:var(--panel);color:var(--ink);border:1px solid var(--line-2);border-radius:8px;flex:1;padding:6px 8px}.browser-toolbar select{background:var(--panel);min-height:34px;color:var(--ink);border:1px solid var(--line-2);border-radius:8px}.browser-modes{color:var(--ink-dim);flex-wrap:wrap;align-items:center;gap:14px;padding:0 10px 6px;display:flex}.browser-modes label{align-items:center;gap:5px;display:inline-flex}.browser-where{margin-left:auto;font-size:12px}.browser-ports{border-bottom:1px solid var(--line);flex-wrap:wrap;gap:6px;padding:4px 8px 8px;display:flex}.browser-ports .port{font-family:var(--mono,monospace);flex-direction:column;align-items:flex-start;display:inline-flex}.browser-ports .port small{font-family:var(--sans,sans-serif);color:var(--ink-dim);font-size:11px}.browser-ports .port.in-workspace{border-color:var(--green)}.browser-ports .dim{opacity:.7}.browser-error{color:var(--red)}.browser-control{border-top:1px solid var(--line);border-bottom:1px solid var(--line);color:var(--ink-dim);flex-wrap:wrap;align-items:center;gap:8px;margin:0;padding:6px 10px;display:flex}.agent-driving .browser-control,.desk.agent-driving .browser-control{color:var(--amber);font-weight:600}.browser-control.control-user span{color:var(--green)}.browser-control.control-stopped span{color:var(--red)}.browser-stage{background:var(--bg-soft);flex:1;justify-content:center;align-items:center;min-height:0;padding:8px;display:flex;overflow:auto}.browser-screen{outline:none;justify-content:center;align-items:center;width:100%;height:100%;display:flex}.browser-screen:focus-visible{box-shadow:0 0 0 2px var(--accent)}.browser-screen img{object-fit:contain;background:var(--on-accent);touch-action:none;-webkit-user-select:none;user-select:none;cursor:default;max-width:100%;max-height:100%}.browser-frame-wrap{background:var(--on-accent);width:100%;max-width:100%;max-height:100%;position:relative;overflow:hidden}.browser-frame-wrap iframe{transform-origin:0 0;transform:scale(var(--frame-scale,1));background:var(--on-accent);border:0;position:absolute;top:0;left:0}.browser-empty{color:var(--ink-dim);text-align:center;max-width:460px;padding:20px}.browser-empty .b{margin:4px}.browser-design{padding:8px 10px calc(8px + env(safe-area-inset-bottom));border-top:1px solid var(--line-2);background:var(--panel);gap:6px;display:grid}.browser-hover{font:12px var(--mono,monospace);color:var(--accent-soft);text-overflow:ellipsis;white-space:nowrap;margin:0;overflow:hidden}.browser-multi{color:var(--ink-dim);font-size:12px}.browser-picked{gap:4px;max-height:110px;margin:0;padding-left:18px;display:grid;overflow:auto}.browser-picked li{align-items:center;gap:8px;display:flex}.browser-picked code{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12px;overflow:hidden}.browser-picked small{color:var(--ink-dim);white-space:nowrap}.browser-picked .b{min-height:26px;padding:0 8px}.browser-design textarea{box-sizing:border-box;width:100%;font:13px var(--sans,sans-serif);background:var(--bg);color:var(--ink);border:1px solid var(--line-2);resize:vertical;border-radius:8px;padding:6px 8px}.browser-desktops{flex:1;align-content:start;gap:12px;padding:8px;display:grid;overflow:auto}.desk{border:1px solid var(--line-2);border-radius:10px;overflow:hidden}.desk header{padding:6px 10px}.desk.agent-driving{border-color:var(--amber)}.desk-shot{background:var(--scrim);width:100%;height:auto;display:block}@media (width<=700px){.browser-stage{align-items:flex-start;padding:0}.browser-screen{height:auto}.browser-screen img{width:100%;max-height:none}.browser-toolbar select{max-width:110px}.browser-toolbar .browser-address{flex-basis:100%;order:-1}}.browser-tabstrip{gap:4px;padding:0 8px 6px;display:flex;overflow-x:auto}.browser-tab{border:1px solid var(--line-2);background:var(--panel);border-radius:8px;align-items:center;max-width:200px;display:inline-flex}.browser-tab.on{border-color:var(--accent);background:var(--accent-wash)}.browser-tab button,.browser-tab-new{color:var(--ink);cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:0;min-height:30px;padding:5px 8px;font-size:12px;overflow:hidden}.browser-tab button:first-child{max-width:160px}.browser-tab-new{border:1px dashed var(--line-2);border-radius:8px}.browser-find,.browser-cookies{flex-wrap:wrap;align-items:center;gap:6px;padding:4px 8px 8px;display:flex}.browser-find input,.browser-cookies input:not([type=file]){background:var(--panel);min-width:0;color:var(--ink);border:1px solid var(--line-2);font:13px var(--sans,sans-serif);border-radius:8px;flex:180px;padding:6px 8px}.browser-cookies{border-bottom:1px solid var(--line)}.browser-cookies p{color:var(--ink-dim);flex-basis:100%;margin:0}.browser-cookies label:not(.b){flex:260px;align-items:center;gap:6px;display:flex}.browser-chrome-import{flex:300px;gap:6px;display:flex}.browser-profile select{background:var(--panel);min-height:30px;color:var(--ink);border:1px solid var(--line-2);border-radius:8px}.browser-downloads{border-top:1px solid var(--line);gap:4px;margin:0;padding:6px 10px;list-style:none;display:grid}.browser-downloads li{align-items:center;gap:8px;display:flex}.browser-downloads li span{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.browser-downloads small{color:var(--ink-dim)}.browser-compact{border-bottom:1px solid var(--line);flex-wrap:nowrap;gap:4px;padding:4px 6px}.browser-compact .b{flex:none;min-width:34px;min-height:34px;padding:2px 8px}.browser-compact .browser-address{flex:auto;gap:4px}.browser-compact .browser-address input{padding:5px 6px;font-size:13px}.browser-menu{left:6px;right:6px;top:calc(46px + env(safe-area-inset-top));z-index:5;border:1px solid var(--line-2);background:var(--panel);box-shadow:0 12px 32px color-mix(in srgb, var(--scrim) 50%, transparent);border-radius:12px;gap:8px;padding:10px;display:grid;position:absolute}.browser-menu-row{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.browser-menu-row.browser-modes{padding:0}@media (width<=700px){.browser-control{flex-wrap:nowrap;gap:6px;padding:3px 8px;font-size:12px}.browser-control span{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.browser-control .b{flex:none;min-height:28px;padding:2px 8px;font-size:12px}.browser-tabstrip{padding:4px 6px}}.browser-compact .browser-address{flex-basis:auto;order:0}.quick-switch section{margin:18px 0}.quick-switch h3{color:var(--muted);margin:0 0 8px;font-size:13px}.switch-options{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.switch-choice{white-space:normal;overflow-wrap:anywhere;text-align:left;flex-direction:column;justify-content:center;align-items:flex-start;min-height:48px;display:flex}.switch-choice small{color:var(--muted);font-weight:400}.switch-choice[aria-current=true]{border-color:var(--accent);opacity:.7}.switch-choice-wrap{align-items:stretch;gap:6px;min-width:0;display:flex}.switch-choice-wrap .switch-choice{flex:1;min-width:0}.switch-fav{border:1px solid var(--line-2);width:40px;color:var(--muted);cursor:pointer;background:0 0;border-radius:8px;flex:none}.switch-fav[aria-pressed=true]{color:var(--accent-soft);border-color:var(--accent-soft)}.switch-favorites{flex-direction:column;gap:6px;display:flex}.switch-favorites .switch-choice{min-height:44px;padding:6px 10px}.switch-custom{margin:18px 0}.switch-custom summary{cursor:pointer;padding:8px 0}.switch-providers{width:100%;margin-top:12px}.terminal-agent-switch{text-overflow:ellipsis;white-space:nowrap;flex:none;max-width:150px;min-height:40px;overflow:hidden}@media (width<=1023px){.terminal-agent-switch{max-width:72px;height:34px;min-height:34px;padding:0 8px;font-size:12px}.quick-switch input,.quick-switch select{font-size:16px}.switch-fav{width:44px;min-height:44px;font-size:16px}}.now-strip{margin:0 0 12px}.now-strip-row{-webkit-overflow-scrolling:touch;scrollbar-width:thin;gap:8px;padding-bottom:2px;display:flex;overflow-x:auto}.now-chip{border:1px solid var(--line);background:var(--panel);color:var(--ink);white-space:nowrap;border-radius:999px;flex:none;align-items:center;gap:6px;min-height:36px;padding:6px 12px;font-size:13px;display:flex}.now-dot{font-size:11px;line-height:1}.now-name{text-overflow:ellipsis;max-width:140px;font-weight:600;overflow:hidden}.now-state{color:var(--ink-dim)}.now-chip[data-state=needs_you]{border-color:color-mix(in srgb, var(--amber) 85%, var(--bg))}.now-chip[data-state=needs_you] .now-dot{color:color-mix(in srgb, var(--amber) 85%, var(--bg))}.now-chip[data-reason=setup_failed]{border-color:color-mix(in srgb, var(--red) 60%, var(--bg))}.now-chip[data-reason=setup_failed] .now-dot{color:color-mix(in srgb, var(--red) 60%, var(--bg))}.now-chip[data-state=working] .now-dot{color:color-mix(in srgb, var(--green) 70%, var(--bg))}.now-chip[data-state=ended] .now-dot{color:var(--ink-dim)}.now-chip.now-approvals{border-color:color-mix(in srgb, var(--red) 60%, var(--bg));background:color-mix(in srgb, var(--red) 13%, transparent);font-weight:600}.now-chip.now-approvals .now-dot{color:color-mix(in srgb, var(--red) 60%, var(--bg))}@media (width<=600px){.now-name{max-width:100px}}.archive-output{width:min(900px,100vw - 24px)}.archive-output pre{white-space:pre-wrap;max-height:65dvh;overflow:auto}.session-group{margin:0 0 14px}.session-group>summary{cursor:pointer;padding:10px 2px;font-weight:650}.session-group>summary small{color:var(--ink-dim);font-weight:400}.scard{box-sizing:border-box;background:var(--panel);border:1px solid var(--line);border-radius:11px;min-width:0;margin:8px 0;padding:14px;overflow:hidden}.scard>header{justify-content:space-between;align-items:baseline;gap:10px;display:flex}.scard>header b,.smeta{overflow-wrap:anywhere;min-width:0}.scard>header span{color:var(--ink-dim);text-transform:uppercase;flex:none;font-size:12px}.smeta{color:var(--ink-dim);margin:5px 0 9px;font-size:12px}.scard>pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:130px;color:var(--ink-dim);margin:8px 0;overflow:auto}.scard .btnrow{flex-wrap:wrap;align-items:center;gap:7px;min-width:0;display:flex}.scard button,.scard select,.sessions-toolbar button,.sessions-toolbar select,.sessions-toolbar input{box-sizing:border-box;min-width:0;min-height:38px;color:inherit;font:inherit;background:var(--panel-2);border:1px solid var(--line);border-radius:7px;padding:7px 10px}.sessions-toolbar{flex-wrap:wrap;align-items:center;gap:9px;min-width:0;display:flex}.recent-closed{border:1px solid var(--line);background:var(--panel);border-radius:12px;margin:0 0 18px;padding:14px}.recent-closed-head{justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:10px;display:flex}.recent-closed-head h3{margin:0;font-size:15px}.recent-closed-head p{color:var(--ink-dim);margin:3px 0 0;font-size:12px}.recent-list{gap:8px;display:grid}.recent-row{border:1px solid var(--line);background:var(--bg);border-radius:9px;justify-content:space-between;align-items:center;gap:12px;padding:10px 11px;display:flex}.recent-details{gap:3px;min-width:0;display:grid}.recent-details strong{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.recent-details span{color:var(--ink-dim);font-size:12px}#restore-search{width:100%;margin:0 0 10px}.restore-group+.restore-group{margin-top:12px}.restore-group h4{color:var(--ink-dim);text-transform:uppercase;letter-spacing:.04em;margin:0 0 6px;font-size:12px;font-weight:600}.restore-preview{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-style:italic;overflow:hidden}.restore-note{color:var(--ink-dim);font-size:11px}.restore-actions{flex-wrap:wrap;flex:none;justify-content:flex-end;gap:6px;display:flex}.restore-banner{border:1px solid var(--amber);background:var(--panel);border-radius:10px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin:0 0 14px;padding:10px 12px;display:flex}.restore-banner>span{flex:220px;min-width:0}@media (width<=600px){.recent-row{flex-wrap:wrap}.recent-details{flex:100%}.restore-actions{flex:100%;justify-content:stretch}.restore-actions>button{flex:1 1 0;min-height:40px}.scard{padding:12px}.scard .btnrow>button,.scard .btnrow>select{flex:135px;max-width:100%}.sessions-toolbar>input,.sessions-toolbar>select{flex:145px;max-width:100%}}.scard{overflow:visible}.scard:has(.action-menu[open]){z-index:35;position:relative}.scard .btnrow>.action-menu{flex:none}.scard .btnrow>.action-menu .action-menu-panel{overflow-y:auto}.session-worktree pre{white-space:pre-wrap;overflow-wrap:anywhere}.session-section{grid-column:1/-1}.session-section-title{margin:0 0 6px;font-size:15px}.session-section-sub{color:var(--ink-dim);margin:0 0 8px;font-size:12px}.session-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start;gap:16px;display:grid}.session-grid>.hint{grid-column:1/-1}.scratch-terminals{border-top:1px solid var(--line);padding-top:14px}.scratch-terminals .hint{margin-top:6px}.scard-path{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;margin:4px 0 2px;display:flex}.scard-path code{min-width:0;color:var(--ink-dim);font:500 11.5px var(--mono,ui-monospace, monospace);background:var(--panel-2);border:1px solid var(--line);overflow-wrap:anywhere;word-break:break-all;border-radius:6px;flex:160px;padding:4px 7px;display:block}.scard-path .copy-path{flex:none}@media (width<=600px){.session-section-title{font-size:14px}.scratch-terminals .make-project,.scard-path code{flex:100%}}.scratch-review{border-top:1px solid var(--line);margin:28px 0 8px;padding-top:12px}.scratch-review>summary{cursor:pointer;color:var(--ink-dim);padding:6px 0;font-size:13px;font-weight:600}.scratch-row{border-bottom:1px solid var(--line);align-items:center;gap:8px;padding:10px 0;display:flex}.scratch-what{overflow-wrap:anywhere;flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.scratch-what b{font-size:13px}.scratch-what small{color:var(--ink-dim);font-size:12px}.scratch-what .scratch-why{color:var(--accent-soft)}.scratch-actions{flex-wrap:wrap;gap:8px;margin-top:12px;display:flex}.session-memory{color:var(--ink-dim);margin:6px 0;font-size:12px}.session-memory>summary{cursor:pointer;padding:4px 0}.session-memory-list{flex-direction:column;gap:6px;margin:6px 0;padding:0;list-style:none;display:flex}.session-memory-list li{border-left:2px solid var(--line-2);color:var(--ink);overflow-wrap:anywhere;padding:6px 8px}.session-memory-list li[data-kind=changed]{border-color:var(--accent-soft)}.session-memory-list li[data-kind=retracted],.session-memory-list li[data-kind=expired]{border-color:var(--red)}.session-memory-list b{text-transform:uppercase;letter-spacing:.04em;color:var(--ink-dim);margin-right:4px;font-size:10.5px}.session-memory-list small{color:var(--ink-dim);margin-top:2px;display:block}.session-memory-link ul{margin:4px 0 8px;padding:0;font-size:11.5px;list-style:none}.session-memory-link li[data-exists=false]{color:var(--ink-dim)}.session-memory-link[data-status=unlinked] b{color:var(--amber)}.session-memory-heading{text-transform:uppercase;letter-spacing:.04em;margin:8px 0 2px;font-size:10.5px}#sesslist .scard .btnrow{flex-wrap:wrap}#sesslist .scard .btnrow>.b{flex:auto;min-width:max-content;max-width:100%}.conversation-memory{border-top:1px solid var(--line);font-size:12px}.conversation-memory>summary{cursor:pointer;color:var(--ink-dim);padding:8px 10px;font-weight:600}.conversation-memory .memory-body{flex-direction:column;gap:8px;padding:0 10px 9px;display:flex}.conversation-memory .sub{color:var(--ink-dim);overflow-wrap:anywhere;margin:0;font-size:11.5px}.conversation-memory>.memory-body>.b{align-self:flex-start}.memory-delivery{flex-direction:column;gap:5px;display:flex}.memory-delivery>header{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.memory-delivery>header b{font-size:12px}.memory-summary{color:var(--ink-dim);overflow-wrap:anywhere;font-size:11.5px}.memory-items{flex-direction:column;gap:7px;margin:0;padding:0;list-style:none;display:flex}.memory-items li{border-left:2px solid var(--line-2);overflow-wrap:anywhere;flex-direction:column;gap:4px;padding:4px 0 4px 8px;display:flex}.memory-items li[data-verdict=helpful]{border-color:var(--green)}.memory-items li[data-verdict=irrelevant]{border-color:var(--ink-faint)}.memory-items li[data-verdict=challenged]{border-color:var(--amber)}.memory-item-head{flex-direction:column;gap:2px;min-width:0;display:flex}.memory-item-head b{overflow-wrap:anywhere;font-size:12px}.memory-item-head code{color:var(--cyan);overflow-wrap:anywhere;font-size:11px}.memory-snippet>summary{cursor:pointer;color:var(--ink-dim);font-size:11px}.memory-snippet p{color:var(--ink-dim);white-space:pre-wrap;overflow-wrap:anywhere;margin:4px 0 0;font-size:11.5px}.memory-items small{color:var(--ink-dim);font-size:11px}.memory-verdict[data-verdict=challenged]{color:var(--amber)}.memory-actions{flex-wrap:wrap;gap:6px;display:flex}.memory-actions .b{min-height:30px;padding:0 9px;font-size:11.5px}.sheet .conversation-memory{margin:10px 0 2px}.ev.e-memory:before{background:var(--accent-soft)}.relaunch-notice{border-color:var(--line)}.relaunch-notice .linkish{color:var(--accent);font:inherit;cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}.restore-likely{border:1px solid var(--line);border-radius:6px;margin-left:6px;padding:1px 6px;font-size:11px;font-style:normal}.tasks-hub{flex-direction:column;min-width:0;display:flex}.th-heading{flex-wrap:wrap}.th-heading p a{color:var(--accent-soft);text-decoration:none}.th-head-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.th-head-actions select{max-width:200px}.th-muted{color:var(--ink-dim)}.th-error{color:var(--red)}.th-warn{color:var(--amber);margin:6px 0;font-size:13px}.th-tabs{border-bottom:1px solid var(--line);scrollbar-width:none;gap:4px;padding:0 16px;display:flex;overflow-x:auto}.th-tabs::-webkit-scrollbar{display:none}#view .th-tabs button{color:var(--ink-dim);white-space:nowrap;background:0 0;border:0;border-bottom:2px solid #0000;border-radius:0;min-height:42px;padding:10px 12px;font-size:13.5px;font-weight:600}#view .th-tabs button.on{color:var(--ink);border-bottom-color:var(--accent)}.th-count{color:var(--ink-faint);margin-left:6px;font-size:11px;font-weight:600}.th-toolbar{flex-wrap:wrap;align-items:center;gap:10px;padding:12px 16px;display:flex}.th-chips,.th-viewtoggle{scrollbar-width:none;flex-wrap:nowrap;gap:6px;max-width:100%;display:flex;overflow-x:auto}#view .th-chips button,#view .th-viewtoggle button{white-space:nowrap;border:1px solid var(--line-2);min-height:34px;color:var(--ink-dim);background:0 0;border-radius:999px;padding:5px 12px;font-size:12.5px}#view .th-chips button.on,#view .th-viewtoggle button.on{background:var(--accent-wash);border-color:color-mix(in srgb, var(--accent-soft) 50%, transparent);color:var(--ink)}#view .th-viewtoggle{gap:0}#view .th-viewtoggle button{border-radius:0}#view .th-viewtoggle button:first-child{border-radius:999px 0 0 999px}#view .th-viewtoggle button:last-child{border-radius:0 999px 999px 0}#view input.th-search{background:var(--panel);border:1px solid var(--line-2);border-radius:var(--r);min-width:180px;color:var(--ink);flex:1;padding:8px 12px}.th-banner{border:1px solid var(--line-2);border-radius:var(--r);background:var(--panel);flex-wrap:wrap;align-items:center;gap:10px;margin:0 16px 8px;padding:9px 12px;font-size:13px;display:flex}.th-banner-err{border-color:color-mix(in srgb, var(--red) 40%, transparent);color:color-mix(in srgb, var(--red) 60%, var(--ink))}.th-body{gap:0;min-height:0;padding:0 16px 24px;display:flex}.th-list{flex:1;min-width:0}.th-empty{color:var(--ink-dim);text-align:center;padding:28px 8px}.th-rows{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-soft);margin:0;padding:0;list-style:none;overflow:hidden}.th-rows li+li{border-top:1px solid var(--line)}#view button.th-row{text-align:left;width:100%;color:var(--ink);background:0 0;border:0;border-radius:0;align-items:flex-start;gap:12px;min-height:0;padding:12px 14px;display:flex}#view button.th-row:hover{background:var(--panel)}#view button.th-row.on{background:var(--accent-wash);box-shadow:inset 3px 0 0 var(--accent)}.th-kind{background:var(--panel-2);width:22px;height:22px;color:var(--green);border-radius:6px;flex:none;place-items:center;margin-top:1px;font-size:12px;display:grid}.th-kind-pr{color:var(--accent-soft)}.th-src-linear{color:var(--indigo)}.th-src-jira{color:var(--cyan)}.th-row-main{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.th-row-title{overflow-wrap:anywhere;font-weight:600;line-height:1.35}.th-row-meta,.th-row-badges{color:var(--ink-dim);flex-wrap:wrap;align-items:center;gap:8px;font-size:12px;display:flex}.th-row-badges:empty{display:none}.th-num{font-family:var(--mono);color:var(--ink-faint);font-size:12px}code.th-branch{font-family:var(--mono);background:color-mix(in srgb, var(--cyan) 8%, transparent);color:color-mix(in srgb, var(--cyan) 60%, var(--ink));text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom;border-radius:5px;max-width:220px;padding:1px 6px;font-size:11.5px;display:inline-block;overflow:hidden}.th-state{text-transform:capitalize;white-space:nowrap;border:1px solid;border-radius:999px;padding:1px 8px;font-size:11px;font-weight:700}.th-state-open{color:var(--green);border-color:color-mix(in srgb, var(--green) 40%, transparent)}.th-state-draft,.th-state-neutral{color:var(--ink-dim);border-color:var(--line-2)}.th-state-merged{color:var(--accent-soft);border-color:color-mix(in srgb, var(--accent-soft) 45%, transparent)}.th-state-closed{color:var(--red);border-color:color-mix(in srgb, var(--red) 40%, transparent)}.th-badge{border:1px solid var(--line-2);color:var(--ink-dim);white-space:nowrap;border-radius:999px;align-items:center;gap:4px;padding:1px 7px;font-size:11px;font-weight:600;display:inline-flex}.th-badge i{font-style:normal}.th-checks-pass{color:var(--green);border-color:color-mix(in srgb, var(--green) 35%, transparent)}.th-checks-fail,.th-checks-cancel{color:var(--red);border-color:color-mix(in srgb, var(--red) 40%, transparent)}.th-checks-pending{color:var(--amber);border-color:color-mix(in srgb, var(--amber) 35%, transparent)}.th-review-approved{color:var(--green);border-color:color-mix(in srgb, var(--green) 35%, transparent)}.th-review-changes_requested{color:var(--red);border-color:color-mix(in srgb, var(--red) 40%, transparent)}.th-review-review_required{color:var(--amber);border-color:color-mix(in srgb, var(--amber) 35%, transparent)}.th-conflicts{color:var(--red);border-color:color-mix(in srgb, var(--red) 40%, transparent)}.th-ci-failing,.th-ci-pending{color:var(--amber);border-color:color-mix(in srgb, var(--amber) 35%, transparent)}.th-ci-passed{color:var(--green)}.th-labels{flex-wrap:wrap;gap:5px;display:inline-flex}.th-label{border:1px solid var(--line-2);color:var(--ink-dim);border-radius:999px;align-items:center;gap:3px;padding:0 8px;font-size:11px;line-height:18px;display:inline-flex}#view .th-x{color:inherit;cursor:pointer;opacity:.75;background:0 0;border:0;min-height:0;padding:0 2px;font-size:14px;line-height:1}#view .th-x:hover{opacity:1;color:var(--red)}.th-avatar{width:24px;height:24px;color:var(--on-accent);border-radius:50%;flex:none;place-items:center;font-size:11px;font-weight:700;display:grid}.th-reactions{gap:6px;display:inline-flex}.th-reaction{background:var(--panel-2);border:1px solid var(--line);border-radius:999px;padding:0 7px;font-size:12px}.th-table-wrap{border:1px solid var(--line);border-radius:var(--r-lg);overflow-x:auto}.th-table{border-collapse:collapse;width:100%;font-size:13px}.th-table th{text-align:left;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);border-bottom:1px solid var(--line);padding:9px 12px;font-size:11px;font-weight:600}.th-table td.th-num{white-space:nowrap}.th-table td{border-bottom:1px solid var(--line);vertical-align:top;padding:9px 12px}.th-table tr{cursor:pointer}.th-table tr:hover td,.th-table tr.on td{background:var(--panel)}#view .th-cell-btn{min-height:0;color:var(--ink);text-align:left;background:0 0;border:0;padding:0;font-weight:600}.th-board{align-items:flex-start;gap:12px;padding-bottom:8px;display:flex;overflow-x:auto}.th-col{background:var(--bg-soft);border:1px solid var(--line);border-radius:var(--r-lg);flex-direction:column;flex:0 0 260px;gap:8px;padding:10px;display:flex}.th-col h4{text-transform:uppercase;letter-spacing:.07em;color:var(--ink-dim);justify-content:space-between;margin:2px 4px 4px;font-size:11.5px;display:flex}.th-col h4 b{color:var(--ink-faint)}#view button.th-card{text-align:left;background:var(--panel);border:1px solid var(--line-2);border-radius:var(--r);color:var(--ink);flex-direction:column;gap:5px;min-height:0;padding:10px;display:flex}#view button.th-card.on{border-color:var(--accent)}.th-detail{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-soft);flex:0 0 min(640px,56%);min-width:0;max-height:calc(100dvh - 190px);margin-left:16px;position:sticky;top:76px;overflow-y:auto}.th-view-board .th-detail{flex-basis:min(560px,48%)}.th-detail-inner{padding:0 18px 24px}.th-detail-bar{background:var(--bg-soft);z-index:1;border-bottom:1px solid var(--line);align-items:center;gap:10px;margin-bottom:12px;padding:12px 0;display:flex;position:sticky;top:0}.th-detail-kind{color:var(--ink-faint);text-transform:uppercase;letter-spacing:.07em;flex:1;font-size:12px;font-weight:600}#view .th-detail-bar a.b{color:var(--ink);border:1px solid var(--line-2);background:var(--panel-2);border-radius:8px;padding:7px 12px;font-size:13px;text-decoration:none}.th-pr-head h2{letter-spacing:-.02em;overflow-wrap:anywhere;margin:0 0 8px;font-size:20px;line-height:1.3}.th-pr-meta{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:6px;font-size:13px;display:flex}.th-diffstat .th-add-n{color:var(--green)}.th-diffstat .th-del-n{color:var(--red)}.th-section{border-top:1px solid var(--line);padding:14px 0 6px}.th-section h3{text-transform:uppercase;letter-spacing:.07em;color:var(--ink-dim);margin:0 0 10px;font-size:13px;font-weight:650}.th-section h4{margin:10px 0 6px;font-size:13px}.th-mergebox{background:var(--panel);border:1px solid var(--line-2);border-radius:var(--r-lg);margin:12px 0;padding:14px}.th-status-rows{flex-direction:column;gap:8px;margin-bottom:10px;display:flex}.th-status-row{flex-wrap:wrap;align-items:center;gap:8px;font-size:13px;display:flex}.th-conflicts-box{border:1px solid color-mix(in srgb, var(--red) 30%, transparent);background:color-mix(in srgb, var(--red) 5%, transparent);border-radius:var(--r);margin-bottom:12px;padding:10px 12px}.th-conflicts-box h4{margin-top:0}.th-files{margin:0 0 10px;padding-left:18px;font-size:13px}.th-merge-opts{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.th-check{align-items:center;gap:6px;font-size:13px;display:inline-flex}.th-auto-on{color:var(--green);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;font-size:13px;display:flex}.th-secondary{margin-top:12px}.th-merge-btn{font-weight:700}.th-stack ol{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.th-stack li{border-left:2px solid var(--line-2);flex-direction:column;gap:1px;margin-left:4px;display:flex}.th-stack li.current{border-left-color:var(--accent)}#view .th-stack button,#view .th-link-row{color:var(--ink);text-align:left;background:0 0;border:0;min-height:0;padding:3px 8px;font-size:13px}#view .th-stack button:disabled{opacity:1;cursor:default;font-weight:700}.th-stack small{padding-left:8px;font-size:11.5px}.th-checks,.th-reviewers,.th-children,.th-conns{margin:0;padding:0;list-style:none}.th-checks li+li{border-top:1px solid var(--line)}.th-check-row{align-items:center;gap:10px;padding:7px 0;font-size:13px;display:flex}.th-check-icon{text-align:center;width:18px;font-style:normal;font-weight:700;border:0!important}.th-check-name{overflow-wrap:anywhere;flex:1;min-width:0}#view .th-log-btn{min-height:30px;padding:3px 10px;font-size:12px;text-decoration:none}.th-log{max-height:360px;font:11.5px/1.5 var(--mono);background:var(--bg);border:1px solid var(--line);border-radius:var(--r);white-space:pre-wrap;overflow-wrap:anywhere;color:var(--ink);margin:0 0 10px;padding:10px;overflow:auto}.th-reviewers li{align-items:center;gap:10px;padding:5px 0;font-size:13px;display:flex}.th-rev-name{flex:1}.th-rev-state{text-transform:capitalize;color:var(--ink-dim);font-size:11.5px}.th-rev-approved{color:var(--green)}.th-rev-changes_requested{color:var(--red)}.th-rev-requested{color:var(--amber)}#view .th-add{border:1px dashed var(--line-2);color:var(--ink-dim);background:0 0;min-height:32px;margin-top:8px;padding:4px 12px;font-size:12.5px}.th-picker{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.th-picker input{flex:1;min-width:140px}.th-md{overflow-wrap:anywhere;font-size:14px}.th-md pre{overflow-x:auto}.th-timeline{flex-direction:column;gap:10px;display:flex}.th-comment{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);padding:10px 12px}.th-comment header{align-items:center;gap:8px;margin-bottom:4px;font-size:13px;display:flex}.th-comment time,.th-event time{color:var(--ink-faint);white-space:nowrap;margin-left:auto;font-size:12px}.th-event{color:var(--ink-dim);align-items:baseline;gap:8px;padding:0 4px;font-size:12.5px;display:flex}.th-event code{font-size:11.5px}.th-event-dot{background:var(--line-2);border-radius:50%;flex:none;width:8px;height:8px;transform:translateY(1px)}.th-event-review.th-event-approved .th-event-dot{background:var(--green)}.th-event-review.th-event-changes_requested .th-event-dot{background:var(--red)}.th-event-commit .th-event-dot{background:var(--accent-soft)}.th-composer{flex-direction:column;gap:8px;margin-top:6px;display:flex}.th-composer textarea{width:100%}.th-composer button{align-self:flex-end}.th-branch-hint{margin:8px 0 0;font-size:12.5px}.th-status-pick{color:var(--ink-dim);flex-direction:column;gap:4px;margin-top:10px;font-size:12.5px;display:flex}dialog.th-start,dialog.th-confirm{background:var(--panel);width:calc(100% - 2rem);max-width:30rem;color:var(--ink);border:1px solid var(--line-2);border-radius:var(--r-lg);padding:20px}dialog.th-start::backdrop,dialog.th-confirm::backdrop{background:color-mix(in srgb, var(--scrim) 55%, transparent)}.th-start form{flex-direction:column;gap:12px;display:flex}.th-start label{color:var(--ink-dim);flex-direction:column;gap:5px;font-size:13px;display:flex}.th-start label.th-check{flex-direction:row}.th-start input,.th-start select,.th-start textarea{background:var(--bg);color:var(--ink);border:1px solid var(--line-2);border-radius:var(--r);min-width:0;padding:9px}.th-start-title{margin:-4px 0 0}.th-seg{grid-template-columns:1fr 1fr;gap:8px;display:grid}.th-seg button{border-radius:var(--r);border:1px solid var(--line-2);background:var(--bg);color:var(--ink);cursor:pointer;text-align:left;flex-direction:column;align-items:flex-start;gap:2px;padding:10px 12px;font-weight:650;display:flex}.th-seg button small{color:var(--ink-dim);font-size:11.5px;font-weight:400}.th-seg button.on{border-color:var(--accent);background:var(--accent-wash)}.th-confirm h2{margin:0 0 10px;font-size:18px}.th-confirm p{font-size:14px}.project-trackers .th-conns li{border:1px solid var(--line);border-radius:var(--r);margin-bottom:8px;padding:10px 12px}.th-conn-head{flex-wrap:wrap;align-items:center;gap:8px;font-size:13px;display:flex}.th-conn-form{flex-direction:column;gap:10px;margin-top:10px;display:flex}.th-conn-form label{flex-direction:column;gap:4px;font-size:13px;display:flex}.th-conn-form small{font-size:11.5px}.th-forge-line{font-size:13px}@media (width<=1023px){.th-body{padding:0 12px 16px}.th-toolbar{gap:8px;padding:10px 12px}.th-tabs{padding:0 8px}.th-heading .th-head-actions{width:100%}.th-heading .th-head-actions select{flex:1;max-width:none}.th-detail{inset:0 0 var(--tabbar-h) 0;z-index:30;border:0;border-radius:0;max-height:none;margin:0;position:fixed;top:0}.th-detail-inner{padding:0 14px 28px}.th-detail-bar{padding-top:max(10px, env(safe-area-inset-top))}.tasks-hub.has-detail .th-list{visibility:hidden}.th-badge-text{display:none}.th-checks-pass .th-badge-text,.th-checks-fail .th-badge-text{display:inline}.th-row-meta code.th-branch{max-width:140px}#view input.th-search{flex-basis:100%;min-width:0}.th-col{flex-basis:78vw}.th-pr-head h2{font-size:18px}.th-mergebox .btnrow .b{min-height:44px}}@media (width>=1024px){.th-back span{display:none}}.th-editor{border:1px solid var(--line-2);border-radius:var(--r);background:var(--bg);overflow:hidden}.th-editor-bar{border-bottom:1px solid var(--line);background:var(--panel);flex-wrap:wrap;align-items:center;gap:8px;padding:4px 6px;display:flex}.th-editor-tabs,.th-editor-tools{flex-wrap:wrap;gap:2px;display:flex}.th-editor-tools{margin-left:auto}#view .th-editor-bar button,.th-editor-bar button{color:var(--ink-dim);cursor:pointer;background:0 0;border:0;border-radius:6px;min-width:30px;min-height:30px;padding:2px 8px;font-size:12.5px;font-weight:600}#view .th-editor-bar button.on,.th-editor-bar button.on{background:var(--panel-2);color:var(--ink)}#view .th-editor-bar button:hover{color:var(--ink)}#view .th-editor textarea,.th-editor textarea{width:100%;color:var(--ink);resize:vertical;font:13.5px/1.5 var(--mono);background:0 0;border:0;border-radius:0;padding:10px;display:block}.th-editor-preview{min-height:80px;padding:10px 12px}.th-desc-edit{flex-direction:column;gap:8px;display:flex}.th-section h3 .th-edit-btn{float:right;text-transform:none;letter-spacing:0;min-height:28px;padding:2px 10px;font-size:12px}.th-reactions{flex-wrap:wrap;align-items:center}#view button.th-reaction,button.th-reaction{cursor:pointer;color:var(--ink);min-height:26px;line-height:20px}#view button.th-reaction:hover{border-color:var(--accent-soft)}.th-react-add{display:inline-flex;position:relative}.th-react-menu{z-index:5;background:var(--panel-2);border:1px solid var(--line-2);box-shadow:var(--shadow);border-radius:999px;gap:2px;padding:4px;display:flex;position:absolute;bottom:calc(100% + 6px);left:0}#view .th-react-menu button,.th-react-menu button{cursor:pointer;background:0 0;border:0;border-radius:50%;min-width:34px;min-height:34px;padding:0;font-size:18px}#view .th-react-menu button:hover{background:var(--accent-wash)}.th-queue{flex-direction:column;gap:12px;padding-top:12px;display:flex}.th-queue-head{flex-wrap:wrap;align-items:flex-end;gap:8px;display:flex}.th-queue-head label{color:var(--ink-dim);flex-direction:column;gap:4px;font-size:12.5px;display:flex}.th-queue-list{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-soft);margin:0;padding:0;list-style:none;overflow:hidden}.th-queue-list li{align-items:center;gap:12px;padding:12px 14px;display:flex}.th-queue-list li+li{border-top:1px solid var(--line)}.th-queue-pos{background:var(--accent-wash);width:30px;height:30px;color:var(--accent-soft);border-radius:50%;flex:none;place-items:center;font-weight:700;display:grid}#view .th-queue-title{padding:0;font-size:14px;font-weight:600}.th-queue-awaiting_checks,.th-queue-fresh,.th-queue-merging{color:var(--amber);border-color:color-mix(in srgb, var(--amber) 35%, transparent)}.th-queue-mergeable,.th-queue-merged{color:var(--green);border-color:color-mix(in srgb, var(--green) 35%, transparent)}.th-queue-unmergeable,.th-queue-stale{color:var(--red);border-color:color-mix(in srgb, var(--red) 40%, transparent)}@media (width<=1023px){.th-queue-list li{flex-wrap:wrap}.th-queue-list .th-row-main{flex-basis:calc(100% - 50px)}.th-queue-remove{margin-left:42px}.th-editor-tools{margin-left:0}}#view a.th-log-btn{color:var(--ink);border:1px solid var(--line-2);background:var(--panel-2);border-radius:8px;align-items:center;display:inline-flex}@media (width<=1023px){.th-react-menu{left:16px;right:16px;bottom:calc(var(--tabbar-h) + 16px);border-radius:16px;justify-content:space-around;padding:8px;position:fixed}.th-queue-list .th-avatar{display:none}}.evals-sheet{width:min(920px,100vw - 24px)}.ev-suite-list,.ev-case-list,.ev-run-list{gap:6px;margin:8px 0;display:grid}.ev-suite-row{border:1px solid var(--border);cursor:pointer;border-radius:8px;flex-direction:column;gap:2px;padding:8px 10px;display:flex}.ev-case-row,.ev-run-row{border:1px solid var(--border);border-radius:8px;flex-wrap:wrap;align-items:center;gap:8px;padding:6px 10px;display:flex}.ev-case-row>div{flex-direction:column;flex:1;min-width:0;display:flex}.ev-new-suite,.ev-new-case{gap:6px;margin:10px 0;display:grid}.ev-new-case input,.ev-new-case textarea{box-sizing:border-box;width:100%}.ev-variants{gap:6px;margin:8px 0;display:grid}.ev-badge{border:1px solid var(--border);border-radius:999px;padding:2px 8px;font-size:.82em;display:inline-block}.ev-pass{background:color-mix(in srgb, var(--green) 18%, transparent);border-color:var(--green)}.ev-fail{background:color-mix(in srgb, var(--red) 18%, transparent);border-color:color-mix(in srgb, var(--red) 85%, var(--bg))}.ev-error{background:color-mix(in srgb, var(--amber) 18%, transparent);border-color:var(--amber)}.ev-running{background:color-mix(in srgb, var(--blue) 18%, transparent);border-color:color-mix(in srgb, var(--blue) 90%, var(--bg))}.ev-queued{background:color-mix(in srgb, var(--scrim) 18%, transparent);border-color:var(--ink-faint)}.ev-matrix-wrap{overflow-x:auto}.ev-matrix,.ev-leaderboard,.ev-compare table{border-collapse:collapse;width:100%;margin:8px 0;font-size:.92em}.ev-matrix th,.ev-matrix td,.ev-leaderboard th,.ev-leaderboard td,.ev-compare th,.ev-compare td{border:1px solid var(--border);text-align:left;white-space:nowrap;padding:6px 8px}.ev-cell{cursor:pointer;text-align:center}.ev-cell-detail{border:1px solid var(--border);border-radius:8px;margin:8px 0;padding:8px 10px}.ev-cell-detail header{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.ev-check-output{white-space:pre-wrap;max-height:220px;font-size:.85em;overflow:auto}.ev-cmp-regression td:last-child{color:color-mix(in srgb, var(--red) 85%, var(--bg))}.ev-cmp-improvement td:last-child{color:var(--green)}.ev-replay-import{border:1px solid var(--border);border-radius:8px;gap:8px;margin:8px 0;padding:8px 10px;display:grid}.ev-replay-form{flex-wrap:wrap;align-items:flex-end;gap:10px;display:flex}.ev-replay-form label{flex-direction:column;gap:2px;font-size:.85em;display:flex}.ev-replay-form input{width:90px}.ev-candidate-list{gap:6px;max-height:40vh;display:grid;overflow-y:auto}.ev-candidate-row{border:1px solid var(--border);border-radius:8px;align-items:flex-start;gap:8px;padding:6px 10px;display:flex}.ev-candidate-row>div{flex-direction:column;flex:1;min-width:0;display:flex}.ev-candidate-skip{opacity:.7}.ev-with-judge{align-items:center;gap:6px;font-size:.9em;display:flex}.ev-similarity-row{flex-wrap:wrap;gap:6px;margin:6px 0;display:flex}@media (width<=480px){.ev-case-row,.ev-run-row,.ev-candidate-row,.ev-replay-form{flex-direction:column;align-items:stretch}.ev-replay-form input{box-sizing:border-box;width:100%}}@media (width<=1023px){body.terminals-open #terminal-workspace .terminal-tabbar{flex-wrap:wrap;align-items:center;row-gap:2px}body.terminals-open #terminal-workspace .terminal-tabbar .terminal-tablist{flex:1 0 100%}body.terminals-open #terminal-workspace .terminal-tabbar .terminal-agent-switch{text-overflow:ellipsis;flex:1 1 0;min-width:0;max-width:none;height:36px;min-height:36px;padding:0 10px;overflow:hidden}}@media (width<=600px){body.terminals-open #terminal-workspace .terminal-tabbar{gap:3px;padding:3px 4px}body.terminals-open #terminal-workspace .terminal-tabbar .terminal-tab{max-width:min(230px,74vw)}body.terminals-open #terminal-workspace .terminal-tabbar .terminal-agent-switch{height:34px;min-height:34px;font-size:12.5px}body.terminals-open #terminal-workspace .terminal-tabbar .terminal-popout{display:none}}#terminal-workspace .terminal-actions>.terminal-actions-panel{box-sizing:border-box;overscroll-behavior:contain;z-index:80;position:fixed;bottom:auto;right:auto;overflow-y:auto}@media (width>=1024px){#terminal-workspace .terminal-tabbar .terminal-actions{display:block}}#terminal-workspace .ws-pane{box-sizing:border-box}#terminal-workspace .terminal-panels.split .ws-pane{border-left:1px solid var(--line);border-top:0}#terminal-workspace .terminal-panels.split .ws-pane[data-focused=true]{box-shadow:inset 0 2px 0 var(--accent-soft)}.ws-group-head{box-sizing:border-box;border-left:1px solid var(--line);border-bottom:1px solid var(--line);background:var(--panel);color:var(--ink-dim);z-index:2;align-items:center;gap:4px;padding:0 4px 0 6px;font-size:12px;display:flex;position:absolute}.ws-group-head.focused{color:var(--ink);background:var(--panel-2)}.ws-chips{scrollbar-width:none;flex:1;gap:2px;min-width:0;display:flex;overflow-x:auto}.ws-chip{text-overflow:ellipsis;white-space:nowrap;max-width:200px;color:inherit;font:12px var(--sans);cursor:pointer;background:0 0;border:0;border-radius:5px;flex:none;min-height:24px;padding:3px 8px;overflow:hidden}.ws-chip[aria-pressed=true]{color:var(--accent-soft);background:var(--accent-wash)}.ws-chip:hover{background:var(--bg-soft)}.ws-head-button{width:26px;height:24px;color:var(--ink-dim);cursor:pointer;background:0 0;border:0;border-radius:5px;flex:none;font-size:15px}.ws-head-button:hover{background:var(--bg-soft);color:var(--ink)}.ws-tab-icon{opacity:.8}.ws-handle{z-index:3;touch-action:none;position:absolute}.ws-handle-row{cursor:col-resize;width:11px;margin-left:-5px}.ws-handle-column{cursor:row-resize;height:11px;margin-top:-5px}.ws-handle:after{content:"";background:0 0;position:absolute}.ws-handle-row:after{inset:0 4px}.ws-handle-column:after{inset:4px 0}.ws-handle:hover:after,.ws-handle:focus-visible:after{background:var(--accent-soft)}#terminal-workspace.ws-dragging .ws-pane{pointer-events:none}.ws-drop{z-index:5;position:absolute}.ws-drop-preview{background:var(--accent-wash);border:2px solid var(--accent-soft);pointer-events:none;border-radius:6px;transition:all 80ms;position:absolute}.ws-drop-center{inset:8px}.ws-drop-left{inset:0 50% 0 0}.ws-drop-right{inset:0 0 0 50%}.ws-drop-top{inset:0 0 50%}.ws-drop-bottom{inset:50% 0 0}.terminal-tab-item.ws-insert-before{box-shadow:-3px 0 0 var(--accent-soft)}.ws-missing{color:var(--ink-dim);padding:20px}.ws-pane>dialog[open],.ws-pane dialog.conversation[open],.ws-pane dialog.code-review[open]{padding-top:0;z-index:auto!important;width:100%!important;max-width:none!important;height:100%!important;max-height:none!important;box-shadow:none!important;border:0!important;border-radius:0!important;margin:0!important;position:absolute!important;inset:0!important;transform:none!important}.ws-layouts{flex:none;position:relative}.ws-layouts>summary{border:1px solid var(--line-2);min-height:40px;color:var(--ink-dim);background:var(--panel);cursor:pointer;white-space:nowrap;border-radius:8px;align-items:center;gap:6px;padding:0 12px;font-size:12.5px;list-style:none;display:flex}.ws-layouts>summary::-webkit-details-marker{display:none}.ws-layouts>.terminal-actions-panel{z-index:80;box-sizing:border-box;flex-direction:column;gap:4px;width:300px;display:flex;position:fixed;bottom:auto;right:auto;overflow-y:auto}.ws-layouts-empty{color:var(--ink-dim);margin:6px 8px;font-size:12.5px}.ws-layout-row{align-items:stretch;gap:2px;display:flex}.ws-layout-restore{min-width:0;color:var(--ink);cursor:pointer;text-align:left;font:13px var(--sans);background:0 0;border:0;border-radius:6px;flex-direction:column;flex:1;align-items:flex-start;gap:2px;padding:8px 10px;display:flex}.ws-layout-restore small{color:var(--ink-dim);font-size:11.5px}.ws-layout-restore:hover{background:var(--panel)}.ws-layout-delete{width:34px;color:var(--ink-dim);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;font-size:17px}.ws-layout-delete:hover{color:var(--red);background:var(--panel)}.ws-layout-save{border-top:1px solid var(--line);flex-direction:column;gap:6px;margin-top:4px;padding:8px 4px 2px;display:flex}.ws-layout-save input:not([type]){border:1px solid var(--line);background:var(--panel);min-height:36px;color:var(--ink);font:13px var(--sans);border-radius:7px;padding:6px 10px}.ws-layout-scope{color:var(--ink-dim);align-items:center;gap:6px;font-size:12.5px;display:flex}@media (width<=1023px){.ws-layouts>summary{display:none}}.ws-mru{z-index:200;border:1px solid var(--line-2);background:var(--panel-2);width:min(460px,100vw - 24px);max-height:60vh;box-shadow:0 24px 70px color-mix(in srgb, var(--scrim) 45%, transparent);border-radius:12px;outline:none;padding:8px;position:fixed;top:18%;left:50%;overflow:auto;transform:translate(-50%)}.ws-mru p{color:var(--ink-dim);margin:4px 8px 8px;font-size:12px}.ws-mru ol{margin:0;padding:0;list-style:none}.ws-mru li{cursor:pointer;color:var(--ink);border-radius:7px;align-items:center;gap:10px;padding:9px 10px;font-size:13.5px;display:flex}.ws-mru li small{color:var(--ink-dim);margin-left:auto;font-size:11.5px}.ws-mru li[aria-selected=true]{background:var(--accent-wash);outline:1px solid var(--accent-soft);outline-offset:-1px}.ws-mru-icon{text-align:center;width:18px}.ws-pane>.browser-pane{z-index:auto;padding-top:0;position:absolute;inset:0}#floating-terminal{z-index:150;background:var(--bg);border:1px solid var(--line-2);box-shadow:0 24px 70px color-mix(in srgb, var(--scrim) 50%, transparent);flex-direction:column;display:flex;position:fixed;overflow:hidden}#floating-terminal[hidden]{visibility:hidden;pointer-events:none;display:flex!important}#floating-terminal.floating-window{border-radius:12px}#floating-terminal.floating-maximized{inset:calc(var(--terminal-top,57px) + 8px) 12px 12px;border-radius:12px}#floating-terminal.floating-sheet{height:min(72dvh,100dvh - 40px);padding-bottom:env(safe-area-inset-bottom);border-radius:14px 14px 0 0;bottom:0;left:0;right:0}#floating-terminal.floating-dragging iframe{pointer-events:none}.floating-head{background:var(--panel-2);border-bottom:1px solid var(--line);cursor:move;-webkit-user-select:none;user-select:none;touch-action:none;align-items:center;gap:4px;padding:4px 6px;display:flex}.floating-sheet .floating-head{cursor:default}.floating-title{color:var(--accent-soft);padding:0 4px}.floating-tabs{scrollbar-width:none;flex:1;gap:3px;min-width:0;display:flex;overflow-x:auto}.floating-tab-item{border:1px solid var(--line);background:var(--panel);border-radius:7px;flex:none;display:flex;overflow:hidden}.floating-tab,.floating-tab-close{color:var(--ink-dim);cursor:pointer;min-height:30px;font:12.5px var(--sans);background:0 0;border:0}.floating-tab{text-overflow:ellipsis;white-space:nowrap;max-width:180px;padding:4px 10px;overflow:hidden}.floating-tab[aria-selected=true]{color:var(--accent-soft);background:var(--accent-wash)}.floating-tab-close{width:26px;font-size:16px}.floating-button{border:1px solid var(--line);background:var(--panel);width:32px;height:30px;color:var(--ink);cursor:pointer;border-radius:7px;flex:none;font-size:15px}.floating-button:disabled{opacity:.45;cursor:default}.floating-button:hover:not(:disabled){border-color:var(--accent-soft)}.floating-body{flex:1;min-height:0;position:relative}.floating-frame{position:absolute;inset:0}.floating-frame[hidden]{visibility:hidden;pointer-events:none;display:block!important}.floating-frame iframe{background:var(--bg);border:0;width:100%;height:100%;display:block}.floating-empty{color:var(--ink-dim);padding:20px}.floating-resize{cursor:nwse-resize;touch-action:none;background:linear-gradient(135deg, transparent 50%, var(--line-2) 50%);width:16px;height:16px;position:absolute;bottom:0;right:0}@media (width<=1023px){.floating-button,.floating-tab,.floating-tab-close{height:36px;min-height:36px}.floating-button{width:38px}}.relay-banner{top:env(safe-area-inset-top,0);z-index:1000;text-align:center;background:var(--bg-alt);color:var(--ink);border-bottom:1px solid var(--border);padding:6px 12px;font-size:.85rem;position:fixed;left:0;right:0}.relay-banner[data-status=revoked]{background:var(--panel-2)}.relay-this-device{flex-direction:column;gap:8px;margin-bottom:12px;display:flex}.relay-fingerprint{letter-spacing:.04em;font-size:1rem}:root{--sans:"Inter", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--mono:ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Consolas, monospace;--r:10px;--r-lg:14px;--tabbar-h:calc(60px + env(safe-area-inset-bottom,0px))}*{box-sizing:border-box}html,body{height:100%}body{background:var(--bg);color:var(--ink);font:400 14.5px/1.55 var(--sans);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;overscroll-behavior-y:none;margin:0}#aurora{z-index:-1;pointer-events:none;background:radial-gradient(900px 420px at 78% -8%, color-mix(in srgb, var(--accent) 16%, transparent), transparent 62%), radial-gradient(700px 380px at 4% 104%, color-mix(in srgb, var(--indigo) 12%, transparent), transparent 60%);position:fixed;inset:0}::selection{background:color-mix(in srgb, var(--accent) 35%, transparent)}::-webkit-scrollbar{width:9px;height:9px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:5px}::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb, var(--indigo) 40%, var(--bg))}button,input,select,textarea{font-family:inherit}#topbar{z-index:20;padding:calc(11px + env(safe-area-inset-top,0px)) 16px 11px;background:linear-gradient(180deg, color-mix(in srgb, var(--bg) 94%, transparent), color-mix(in srgb, var(--bg) 82%, transparent));-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;display:flex;position:sticky;top:0}.brand{align-items:center;gap:9px;min-width:0;display:flex}.brand-mark{width:32px;height:32px;color:var(--accent-soft);background:var(--accent-wash);border:1px solid color-mix(in srgb, var(--accent) 28%, transparent);border-radius:9px;flex:none;place-items:center;display:grid}.brand h1{font:700 18px/1 var(--sans);letter-spacing:-.015em;color:var(--ink);margin:0}.brand h1 b{color:var(--accent-soft);font-weight:700}.brand-sub{color:var(--ink-faint);letter-spacing:.1em;text-transform:uppercase;padding-left:2px;font-size:11px}@media (width<=560px){.brand-sub{display:none}}.top-status{font:600 10px/1 var(--sans);letter-spacing:.13em;color:var(--ink-dim);background:var(--panel);border:1px solid var(--line);border-radius:999px;flex:none;align-items:center;gap:7px;padding:6px 11px 6px 9px;display:flex}.led{background:var(--ink-faint);border-radius:50%;flex:none;width:7px;height:7px;display:inline-block}.led-on{background:var(--green);box-shadow:0 0 0 3px color-mix(in srgb, var(--green) 16%, transparent);animation:2.6s infinite pulse}.led-warn{background:var(--amber);box-shadow:0 0 0 3px color-mix(in srgb, var(--amber) 16%, transparent)}.led-err{background:var(--red);box-shadow:0 0 0 3px color-mix(in srgb, var(--red) 16%, transparent)}@keyframes pulse{50%{opacity:.5}}main{padding:12px 0 calc(var(--tabbar-h) + 80px);min-height:60vh}#tabbar{z-index:30;height:var(--tabbar-h);padding-bottom:env(safe-area-inset-bottom,0px);background:color-mix(in srgb, var(--bg) 94%, transparent);border-top:1px solid var(--line);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);display:flex;position:fixed;bottom:0;left:0;right:0}.tab{color:var(--ink-faint);font:600 10.5px/1.1 var(--sans);letter-spacing:.04em;cursor:pointer;background:0 0;border:0;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:4px;transition:color .15s;display:flex;position:relative}.tab-ic{place-items:center;height:20px;display:grid}.tab.on{color:var(--accent-soft)}.tab.on:after{content:"";background:var(--accent);width:26px;height:2px;box-shadow:0 0 10px var(--accent);border-radius:0 0 2px 2px;position:absolute;top:0;left:50%;translate:-50%}.badge{background:var(--amber);min-width:17px;height:17px;color:var(--on-fill);font:700 10px/17px var(--sans);border-radius:9px;padding:0 5px;position:absolute;top:7px;right:calc(50% - 26px)}#fab{right:18px;bottom:calc(var(--tabbar-h) + 16px);z-index:30;cursor:pointer;background:linear-gradient(160deg, var(--accent-soft), var(--indigo));width:54px;height:54px;color:var(--on-accent);box-shadow:0 8px 26px -8px color-mix(in srgb, var(--accent) 85%, transparent), var(--shadow);border:0;border-radius:17px;place-items:center;transition:transform .15s,box-shadow .15s;display:grid;position:fixed}#fab:active{transform:scale(.93)}#quickbar{gap:8px;padding:0 16px 12px;display:flex}#qb-project{background:var(--panel);border:1px solid var(--line);color:var(--ink-dim);border-radius:var(--r);max-width:34vw;padding:0 8px;font-size:12.5px}#qb-input{background:var(--panel);border:1px solid var(--line);min-width:0;color:var(--ink);border-radius:var(--r);flex:1;padding:11px 13px;font-size:14px}#qb-input::placeholder,#qb-filter::placeholder{color:var(--ink-faint)}#qb-input:focus,#qb-filter:focus,input.f:focus,textarea.f:focus,select.f:focus{border-color:var(--accent);box-shadow:var(--glow);outline:none}#qb-mode{border-radius:var(--r);background:var(--panel);border:1px solid var(--line);flex:none;gap:2px;padding:3px;display:flex}#qb-mode button{color:var(--ink-dim);border-radius:calc(var(--r) - 3px);cursor:pointer;white-space:nowrap;background:0 0;border:0;padding:0 12px;font-size:13px;font-weight:700}#qb-mode button.on{background:var(--accent-fill);color:var(--on-accent);box-shadow:var(--glow)}#quickbar.orchestrate #qb-input{border-color:var(--accent);box-shadow:var(--glow)}#qb-orch-hint{border-radius:var(--r);border:1px solid color-mix(in srgb, var(--accent) 35%, transparent);background:var(--accent-wash);color:var(--ink);margin:-4px 16px 12px;padding:10px 14px;font-size:13px;line-height:1.5}#qb-orch-hint.off{border-color:color-mix(in srgb, var(--amber) 40%, transparent);background:color-mix(in srgb, var(--amber) 8%, transparent)}#qb-orch-hint a{color:var(--accent-soft);font-weight:700}#qb-orch-hint .linkish{color:var(--accent-soft);font:inherit;cursor:pointer;background:0 0;border:0;padding:0;font-weight:700;text-decoration:underline}.chip.orch{color:var(--accent-soft);border-color:color-mix(in srgb, var(--accent-soft) 45%, transparent);background:var(--accent-wash);font-weight:700}.orchestrate-row{border:2px solid var(--line);background:var(--bg-soft);cursor:pointer;border-radius:12px;align-items:flex-start;gap:12px;margin:8px 0 12px;padding:12px 14px;flex-direction:row!important;display:flex!important}.orchestrate-row.on{border-color:var(--accent);box-shadow:var(--glow);background:linear-gradient(135deg, var(--accent-wash), transparent 60%), var(--bg-soft)}.orchestrate-row.unavailable{opacity:.75;cursor:default}.orchestrate-row>button{cursor:pointer;background:color-mix(in srgb, var(--overlay) 14%, transparent);border:1px solid color-mix(in srgb, var(--overlay) 18%, transparent);border-radius:999px;flex:none;width:46px;height:26px;margin:2px 0 0;padding:0;transition:background .15s;position:relative}.orchestrate-row>button:after{content:"";background:var(--on-accent);border-radius:50%;width:20px;height:20px;transition:transform .15s;position:absolute;top:2px;left:2px}.orchestrate-row>button[aria-checked=true]{background:var(--accent);border-color:var(--accent)}.orchestrate-row>button[aria-checked=true]:after{transform:translate(20px)}.orchestrate-row>button:disabled{cursor:default;opacity:.5}.orchestrate-row>span{flex-direction:column;gap:3px;display:flex}.orchestrate-row>span>b{letter-spacing:-.01em;font-size:1.05rem}.orchestrate-row small{color:var(--ink-dim);font-size:12.5px;line-height:1.45}.orchestrate-row small a{color:var(--accent-soft);font-weight:700}#qb-mic{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);cursor:pointer;width:42px;color:var(--ink-dim);flex:none;font-size:15px}#qb-mic.rec{border-color:var(--red);color:var(--red);animation:1s infinite pulse}#qb-filter{background:var(--panel);border:1px solid var(--line);width:92px;color:var(--ink);border-radius:var(--r);padding:11px 10px;font-size:13px}.desktop-only{display:none}#board{scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;gap:12px;padding:0 16px 8px;display:flex;overflow-x:auto}.col{scroll-snap-align:center;background:var(--bg-soft);border:1px solid var(--line);border-radius:var(--r-lg);max-width:340px;max-height:calc(100dvh - var(--tabbar-h) - 130px);flex-direction:column;flex:0 0 86vw;transition:border-color .15s,box-shadow .15s;display:flex}.col-head{border-bottom:1px solid var(--line);font:600 11.5px/1 var(--sans);letter-spacing:.07em;text-transform:uppercase;color:var(--ink-dim);align-items:center;gap:8px;padding:11px 13px;display:flex}.col-head .dot{border-radius:50%;flex:none;width:7px;height:7px}.col-head .cnt{color:var(--ink-faint);font:600 11px var(--mono);background:var(--panel);border-radius:999px;margin-left:auto;padding:2px 8px}.col-body{flex-direction:column;gap:9px;padding:10px;display:flex;overflow-y:auto}.col-empty{color:var(--ink-faint);text-align:center;padding:20px 0 24px;font-size:12.5px}.col-more{border:1px dashed var(--line-2);color:var(--ink-dim);border-radius:var(--r);cursor:pointer;background:0 0;padding:10px;font-size:12.5px}.col-more:hover{border-color:var(--accent);color:var(--accent-soft)}.col.dropok{border-color:var(--accent);box-shadow:var(--glow)}#board.phone{scroll-snap-type:none;flex-direction:column;gap:11px;overflow-x:hidden}#board.phone .col.solo{width:100%;max-width:none;max-height:calc(100dvh - var(--tabbar-h) - 178px);flex:auto}.colstrip{scrollbar-width:none;-webkit-overflow-scrolling:touch;gap:7px;padding-bottom:2px;display:flex;overflow-x:auto}.colstrip::-webkit-scrollbar{display:none}.colchip{background:var(--panel);border:1px solid var(--line);color:var(--ink-dim);cursor:pointer;min-height:38px;font:600 12px var(--sans);letter-spacing:.01em;border-radius:999px;flex:none;align-items:center;gap:7px;padding:8px 14px;display:flex}.colchip .dot{border-radius:50%;width:7px;height:7px}.colchip b{font:600 11px var(--mono);color:var(--ink-faint)}.colchip.on{color:var(--ink);border-color:var(--accent);background:var(--accent-wash)}.colchip.on b{color:var(--accent-soft)}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);cursor:pointer;padding:11px 12px 10px;transition:border-color .15s,transform .1s,box-shadow .15s;animation:.22s ease-out land;position:relative}.card:before{content:"";background:var(--sc);border-radius:0 3px 3px 0;width:3px;position:absolute;top:9px;bottom:9px;left:0}.card:hover{border-color:var(--line-2);box-shadow:var(--shadow)}.card:active{transform:scale(.99)}@keyframes land{0%{opacity:0;transform:translateY(5px)}}.card .t{color:var(--ink);letter-spacing:-.005em;margin-bottom:7px;font-size:14px;font-weight:600;line-height:1.35}.card .meta{flex-wrap:wrap;align-items:center;gap:5px;display:flex}.chip{border:1px solid var(--line-2);font:500 10.5px/1.5 var(--sans);color:var(--ink-dim);white-space:nowrap;border-radius:6px;align-items:center;gap:4px;padding:2px 7px;display:inline-flex}.chip.tgt{color:var(--cyan);border-color:color-mix(in srgb, var(--cyan) 28%, transparent);background:color-mix(in srgb, var(--cyan) 7%, transparent)}.chip.cost{color:var(--amber);border-color:color-mix(in srgb, var(--amber) 28%, transparent);background:color-mix(in srgb, var(--amber) 7%, transparent)}.chip.ds{color:var(--green);border-color:color-mix(in srgb, var(--green) 28%, transparent);background:color-mix(in srgb, var(--green) 7%, transparent)}.chip.ds b{color:var(--red);font-weight:500}.chip.bad{color:var(--red);border-color:color-mix(in srgb, var(--red) 32%, transparent);background:color-mix(in srgb, var(--red) 7%, transparent)}.chip.warn{color:var(--amber);border-color:color-mix(in srgb, var(--amber) 30%, transparent)}.chip.info{color:var(--accent-soft);border-color:color-mix(in srgb, var(--accent-soft) 30%, transparent);background:var(--accent-wash)}.working{align-items:flex-end;gap:2.5px;height:11px;display:inline-flex}.working i{background:var(--accent-soft);border-radius:2px;width:3px;height:10px;animation:1s ease-in-out infinite eq}.working i:nth-child(2){animation-delay:.18s}.working i:nth-child(3){animation-delay:.36s}@keyframes eq{0%,to{transform:scaleY(.3)}45%{transform:scaleY(1)}}.s-backlog{--sc:var(--ink-faint)}.s-queued{--sc:var(--indigo)}.s-running{--sc:var(--accent-soft)}.s-review{--sc:var(--amber)}.s-done{--sc:var(--green)}.s-failed{--sc:var(--red)}.s-cancelled{--sc:var(--ink-faint)}.col-head .dot,.colchip .dot{background:var(--sc);box-shadow:0 0 8px var(--sc)}#deck{grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:12px;padding:0 24px;display:grid}.pane{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--bg-soft);border-top:2px solid var(--sc);flex-direction:column;height:310px;display:flex;overflow:hidden}.pane-head{border-bottom:1px solid var(--line);cursor:pointer;align-items:center;gap:9px;padding:10px 12px;display:flex}.pane-title{font:600 13px var(--sans);color:var(--ink);white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.pane-sub{color:var(--cyan);flex:none;font-size:11px}.pane-log{background:var(--bg);flex:1;padding:10px 12px;overflow-y:auto}.pane-line{font:400 11.5px/1.5 var(--mono);color:var(--ink-dim);white-space:pre-wrap;word-break:break-word;border-left:2px solid var(--line-2);margin-bottom:5px;padding-left:9px}.list{flex-direction:column;gap:12px;padding:0 16px;display:flex}.rowcard{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);padding:14px}.rowcard h3{font:600 14.5px var(--sans);color:var(--ink);align-items:center;gap:8px;margin:0 0 5px;display:flex}.rowcard .sub{color:var(--ink-dim);word-break:break-word;font-size:12.5px}.rowcard pre{background:var(--bg);border:1px solid var(--line);border-radius:var(--r);font:400 11.5px/1.6 var(--mono);color:var(--amber);white-space:pre-wrap;word-break:break-word;margin:10px 0;padding:10px;overflow-x:auto}.btnrow{flex-wrap:wrap;gap:8px;margin-top:11px;display:flex}button.b{font:600 12.5px var(--sans);letter-spacing:.005em;white-space:nowrap;border-radius:var(--r);cursor:pointer;background:var(--panel-2);min-height:40px;color:var(--ink);border:1px solid var(--line-2);padding:10px 15px;transition:border-color .15s,background .15s,color .15s}button.b:hover{border-color:var(--accent);color:var(--accent-soft)}.b.ok{background:color-mix(in srgb, var(--green) 12%, transparent);border-color:color-mix(in srgb, var(--green) 45%, transparent);color:var(--green)}.b.ok:hover{background:color-mix(in srgb, var(--green) 20%, transparent);color:var(--green);border-color:var(--green)}.b.no{background:color-mix(in srgb, var(--red) 10%, transparent);border-color:color-mix(in srgb, var(--red) 42%, transparent);color:var(--red)}.b.no:hover{background:color-mix(in srgb, var(--red) 18%, transparent);color:var(--red);border-color:var(--red)}.b.warn{border-color:color-mix(in srgb, var(--amber) 45%, transparent);color:var(--amber)}.b.warn:hover{color:var(--amber);border-color:var(--amber)}.b.grow{flex:1}.hint{color:var(--ink-faint);text-align:center;max-width:34rem;margin:0 auto;padding:40px 24px;font-size:13px;line-height:1.7}.cap-note{color:var(--amber);margin-top:5px;font-size:12px;line-height:1.5}.budget-blocked-note{border-radius:var(--r);background:color-mix(in srgb, var(--red) 10%, transparent);border:1px solid color-mix(in srgb, var(--red) 35%, transparent);color:var(--red);margin:4px 0 0;padding:8px 10px;font-size:12.5px}#sheet-backdrop{z-index:40;background:color-mix(in srgb, var(--scrim) 72%, transparent);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);position:fixed;inset:0}#sheet{z-index:50;background:var(--bg-soft);border-top:1px solid var(--line-2);border-radius:var(--r-lg) var(--r-lg) 0 0;padding:0 18px calc(env(safe-area-inset-bottom,0px) + 28px);box-shadow:0 -20px 60px -20px color-mix(in srgb, var(--scrim) 80%, transparent);animation:.22s ease-out rise;position:fixed;inset:6dvh 0 0;overflow-y:auto}@keyframes rise{0%{opacity:.5;transform:translateY(28px)}}.sheet-grip{z-index:5;background:linear-gradient(180deg, var(--bg-soft) 72%, transparent);justify-content:center;margin:0 -18px;padding:11px 0 9px;display:flex;position:sticky;top:0}.sheet-grip i{background:var(--line-2);border-radius:2px;width:42px;height:4px}.sheet-head{align-items:flex-start;gap:12px;margin-bottom:8px;display:flex}.sheet-head h2{font:700 19px/1.3 var(--sans);letter-spacing:-.015em;flex:1;margin:0}.sheet-head .x{background:var(--panel);border:1px solid var(--line);color:var(--ink-dim);cursor:pointer;border-radius:9px;flex:none;width:32px;height:32px;font-size:14px}.sheet-head .x:hover{border-color:var(--red);color:var(--red)}.statline{color:var(--ink-dim);flex-wrap:wrap;align-items:center;gap:9px;margin-bottom:14px;font-size:12.5px;display:flex}.statpill{font:600 10.5px var(--sans);letter-spacing:.09em;text-transform:uppercase;color:var(--sc);border:1px solid var(--sc);border-radius:999px;padding:3px 9px}.statline code,.ev code{background:var(--panel);border:1px solid var(--line);color:var(--cyan);font:400 11.5px var(--mono);border-radius:5px;padding:1px 6px}.tl{border-left:1px solid var(--line-2);margin:16px 0 0 5px;padding-left:16px}.ev{margin-bottom:14px;animation:.2s ease-out land;position:relative}.ev:before{content:"";background:var(--line-2);width:7px;height:7px;box-shadow:0 0 0 3px var(--bg-soft);border-radius:50%;position:absolute;top:5px;left:-20px}.ev.e-init:before{background:var(--cyan)}.ev.e-tool_use:before{background:var(--accent-soft)}.ev.e-result:before{background:var(--green)}.ev.e-verify:before,.ev.e-approval:before{background:var(--amber)}.ev .k{font:600 10px var(--sans);letter-spacing:.12em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:3px}.ev .body{color:var(--ink);white-space:pre-wrap;word-break:break-word;font-size:13px}.ev .body.dim{color:var(--ink-dim);font-size:12.5px}.diffhead{color:var(--ink-dim);align-items:center;gap:10px;margin:8px 0 12px;font-size:12.5px;display:flex}.wrapbtn{background:var(--panel);border:1px solid var(--line);color:var(--ink-dim);cursor:pointer;font:500 11.5px var(--sans);border-radius:8px;min-height:34px;margin-left:auto;padding:7px 11px}.wrapbtn.on{border-color:var(--accent);color:var(--accent-soft);background:var(--accent-wash)}.wrapped .dcode>div{white-space:pre-wrap;overflow-wrap:anywhere}.dfile{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);margin-bottom:10px;overflow:hidden}.dfile summary{cursor:pointer;font:500 12.5px var(--mono);align-items:center;gap:9px;padding:10px 12px;list-style:none;display:flex}.dfile summary::-webkit-details-marker{display:none}.dfile .pm{white-space:nowrap;margin-left:auto;font-size:11.5px}.pm b.a{color:var(--green);font-weight:600}.pm b.d{color:var(--red);font-weight:600}.dcode{background:var(--bg);font:400 12px/1.6 var(--mono);overflow-x:auto}.dcode div{white-space:pre;padding:0 12px}.dl-add{background:color-mix(in srgb, var(--green) 9%, transparent);color:color-mix(in srgb, var(--green) 35%, var(--ink))}.dl-del{background:color-mix(in srgb, var(--red) 9%, transparent);color:color-mix(in srgb, var(--red) 30%, var(--ink))}.dl-hunk{color:var(--cyan);background:color-mix(in srgb, var(--cyan) 7%, transparent)}.dl-meta{color:var(--ink-faint)}.review-panel{width:min(920px,100vw - 24px)}.review-repo-label{font:600 11px var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-dim);margin:14px 0 6px}.review-truncated{color:var(--amber)}.dcode .dl-commentable{cursor:pointer}.dcode .dl-commentable:hover{outline:1px dashed var(--accent-soft);outline-offset:-1px}.dl-comment-badge{float:right;background:var(--accent-wash);color:var(--accent-soft);font:600 10.5px var(--sans);border-radius:999px;margin-left:8px;padding:0 7px}.dcode .dl-composer{white-space:normal;background:var(--panel-2);border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:10px 12px}.dl-composer textarea{box-sizing:border-box;background:var(--bg);width:100%;color:var(--ink);border:1px solid var(--line);border-radius:var(--r);font:400 13px var(--sans);resize:vertical;padding:8px 10px}.dl-composer-actions{justify-content:flex-end;gap:8px;margin-top:8px;display:flex}.review-tray{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);margin-top:16px;padding:12px}.review-tray-list summary{cursor:pointer;font:600 12.5px var(--sans);color:var(--ink-dim)}.review-tray-list ul{gap:8px;margin:10px 0 0;padding:0;list-style:none;display:grid}.review-tray-item{border:1px solid var(--line);border-radius:var(--r);background:var(--bg);padding:8px 10px}.review-tray-item-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.review-tray-item p{margin:6px 0 0;font-size:13px}.review-tray-code{background:var(--panel-2);font:400 11.5px var(--mono);color:var(--ink-dim);border-radius:6px;margin:6px 0 0;padding:6px 8px;overflow-x:auto}.review-tray-remove{min-height:28px;padding:2px 9px}.review-tray-summary{margin-top:12px}.review-tray-send{width:100%;margin-top:12px}.review-commit-form{border-top:1px solid var(--line);margin-top:20px;padding-top:14px}.review-commit-form h3{margin:0 0 4px;font-size:14px}.review-checkbox{color:var(--ink);text-transform:none;letter-spacing:normal;align-items:center;gap:8px;margin:12px 0;font-size:13px;display:flex}.review-checkbox input{width:auto}.review-commit-steps{margin:12px 0 0;padding:0;font-size:12.5px;list-style:none}.review-commit-steps li{border-top:1px solid var(--line);padding:4px 0}.review-commit-steps li[data-ok=false]{color:var(--red)}.review-commit-steps li[data-ok=true] b{color:var(--green)}.review-check-history{border-top:1px solid var(--line);margin-top:20px;padding-top:14px}.review-check-history h3{justify-content:space-between;align-items:center;gap:10px;margin:0 0 8px;font-size:14px;display:flex}.review-check-history h3 button{min-height:32px;padding:6px 10px;font-size:12px}.review-check-list{margin:0;padding:0;font-size:12.5px;list-style:none}.review-check-list li{border-top:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:8px;padding:8px 0;display:flex}.review-check-list li:first-child{border-top:0}.review-check-list code{color:var(--ink-dim);word-break:break-all}.review-check-output{background:var(--bg);border:1px solid var(--line);border-radius:var(--r);max-height:140px;font:400 11px/1.5 var(--mono);color:var(--ink-dim);white-space:pre-wrap;word-break:break-word;flex-basis:100%;margin:4px 0 0;padding:8px 10px;overflow:auto}@media (width<=480px){.review-tray{box-shadow:0 -6px 18px color-mix(in srgb, var(--scrim) 35%, transparent);z-index:3;border-radius:16px 16px 0 0;margin:16px -20px -20px;position:sticky;bottom:0}}label.f{font:600 11px var(--sans);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-dim);margin:15px 0 6px;display:block}input.f,textarea.f,select.f{background:var(--panel);border:1px solid var(--line);width:100%;color:var(--ink);border-radius:var(--r);padding:11px 12px;font-size:14px}select.f{min-height:44px}textarea.f{resize:vertical;min-height:118px;line-height:1.6}.seg{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);gap:3px;padding:3px;display:flex}.seg button{color:var(--ink-dim);font:500 13px var(--sans);cursor:pointer;background:0 0;border:0;border-radius:7px;flex:1;padding:10px 6px;transition:all .15s}.seg button.on{background:var(--accent-wash);color:var(--accent-soft);font-weight:600}.subhint{color:var(--amber);margin-top:7px;font-size:12px;line-height:1.5}#f-cap-hint{color:var(--ink-dim)}#f-cap-hint b{color:var(--accent-soft)}.push-status{margin:4px 0 16px}.push-devices{flex-direction:column;gap:6px;margin:10px 0 0;padding:0;list-style:none;display:flex}.push-devices li{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);justify-content:space-between;align-items:center;gap:10px;padding:7px 10px;font-size:12.5px;display:flex}.push-this-device{color:var(--accent-soft);font-style:normal;font-weight:600}.ny-push-prompt span{font-size:13px}#toasts{z-index:80;left:14px;right:14px;bottom:calc(var(--tabbar-h) + 12px);pointer-events:none;flex-direction:column;gap:8px;display:flex;position:fixed}.toast{background:var(--panel-2);border:1px solid var(--line-2);border-left:3px solid var(--accent);border-radius:var(--r);box-shadow:var(--shadow);padding:11px 13px;font-size:13px;animation:.2s ease-out land}.toast.err{border-left-color:var(--red)}@media (width>=1024px){.desktop-only{display:flex}#tabbar{-webkit-backdrop-filter:none;backdrop-filter:none;background:0 0;border:0;width:auto;height:56px;padding-bottom:0;inset:0 24px auto auto}.tab{border-radius:var(--r);flex-direction:row;gap:8px;padding:0 14px;font-size:12.5px}.tab.on:after{top:auto;bottom:8px}.badge{margin-left:2px;position:static}#topbar{justify-content:flex-start;gap:14px;padding:12px 24px}main{padding:20px 24px 24px}#quickbar{padding:0 0 16px}#qb-filter{width:180px}#board{flex-wrap:nowrap;padding:0;overflow-x:auto}.col{flex:1 1 0;min-width:190px;max-width:none;max-height:calc(100dvh - 150px)}#deck{padding:0}.list{max-width:900px;padding:0}.list.wide{max-width:1400px}.projgroup{grid-template-columns:repeat(auto-fill,minmax(430px,1fr));align-items:start;gap:10px;display:grid}.projgroup>h3{grid-column:1/-1}.scard{margin-bottom:0}#fab{bottom:30px;right:30px}#sheet{border-left:1px solid var(--line-2);border-radius:0;width:min(660px,48vw);animation:.2s ease-out slidein;top:0;bottom:0;left:auto}@keyframes slidein{0%{opacity:.5;transform:translate(36px)}}#toasts{width:360px;bottom:22px;left:auto}}@media (width<=600px){#qb-filter{display:none}#quickbar{flex-wrap:nowrap}}.sesshead{flex-wrap:wrap;align-items:center;gap:8px;padding:0 0 12px;display:flex}.sesshead h2{font:600 13px var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-dim);flex:1;margin:0}.projgroup{margin-bottom:22px}.projgroup>h3{font:600 12px var(--sans);letter-spacing:.09em;text-transform:uppercase;color:var(--ink-faint);align-items:center;gap:8px;margin:0 0 9px;display:flex}.projgroup>h3:after{content:"";background:var(--line);flex:1;height:1px}.scard{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);margin-bottom:10px;padding:13px 14px;position:relative;overflow:hidden}.scard:before{content:"";background:var(--sc);width:3px;position:absolute;top:0;bottom:0;left:0}.scard-top{flex-wrap:wrap;align-items:center;gap:9px;display:flex}.scard-top .nm{color:var(--ink);font-size:14.5px;font-weight:600}.scard-top .dot{background:var(--sc);width:8px;height:8px;box-shadow:0 0 8px var(--sc);border-radius:50%;flex:none}.scard-top .dot.live{animation:1.4s infinite pulse}.sstate{font:600 10.5px var(--sans);letter-spacing:.1em;text-transform:uppercase;color:var(--sc)}.sidle{color:var(--ink-faint);font:500 11.5px var(--mono);margin-left:auto}.smeta{flex-wrap:wrap;gap:5px;margin-top:8px;display:flex}.spane{background:var(--bg);border:1px solid var(--line);border-radius:var(--r);max-height:132px;font:400 11.5px/1.55 var(--mono);color:var(--ink-dim);white-space:pre-wrap;word-break:break-word;margin-top:10px;padding:9px 11px;overflow:auto}.spane:empty{display:none}.scard .btnrow{margin-top:11px}.scard .btnrow button.b{min-height:38px;padding:9px 13px;font-size:12px}.b.attach{background:linear-gradient(160deg, color-mix(in srgb, var(--accent-soft) 22%, transparent), color-mix(in srgb, var(--indigo) 18%, transparent));border-color:var(--accent);color:var(--accent-soft)}.b.attach:hover{background:var(--accent-wash);border-color:var(--accent-soft)}.ctxbar{color:var(--ink-dim);align-items:center;gap:6px;font-size:10.5px;display:inline-flex}.ctxbar i{background:var(--line-2);border-radius:3px;width:44px;height:5px;display:block;position:relative;overflow:hidden}.ctxbar i b{background:var(--green);position:absolute;inset:0 auto 0 0}.ctxbar.low i b{background:var(--amber)}.ctxbar.crit i b{background:var(--red)}.ctxbar.ctx-used i b{background:var(--green)}.ctxbar.ctx-used.ctx-amber i b{background:var(--amber)}.ctxbar.ctx-used.ctx-red i b{background:var(--red)}.compaction-warning{cursor:help}.conversation-usage,.ny-usage{flex-wrap:wrap;align-items:center;gap:6px;margin-top:4px;display:flex}.conversation-usage .chip,.ny-usage .chip{padding:1px 7px;font-size:10.5px}.quota-chip{color:var(--ink-dim);border:1px solid var(--line);background:var(--panel-2);border-radius:999px;flex:none;align-items:center;gap:8px;padding:4px 10px;font-size:11px;display:flex}.quota-chip.stale{opacity:.55}.quota-window{align-items:baseline;gap:4px;display:inline-flex}.quota-window small{color:var(--ink-faint);font-size:9.5px}.quota-window.quota-amber{color:var(--amber)}.quota-window.quota-red{color:var(--red)}.quota-stale-note{color:var(--ink-faint);font-size:9.5px}.usage-panel{flex-direction:column;gap:18px;margin:14px 0 22px;display:flex}.usage-panel h4{font:600 12px var(--sans);letter-spacing:.04em;color:var(--ink-dim);margin:0 0 8px}.usage-quota-rows{flex-direction:column;gap:8px;display:flex}.usage-quota-rows.stale{opacity:.6}.usage-quota-row{grid-template-columns:60px 1fr 140px;align-items:center;gap:10px;font-size:12.5px;display:grid}.usage-quota-row i{background:var(--line-2);border-radius:3px;height:6px;display:block;position:relative;overflow:hidden}.usage-quota-row i b{background:var(--green);position:absolute;inset:0 auto 0 0}.usage-quota-row.quota-amber i b{background:var(--amber)}.usage-quota-row.quota-red i b{background:var(--red)}.usage-totals{flex-wrap:wrap;align-items:center;gap:22px;display:flex}.usage-stat{flex-direction:column;display:flex}.usage-stat b{color:var(--ink);font-size:20px}.usage-stat span{color:var(--ink-faint);font-size:11px}.usage-days{color:var(--ink-dim);margin-left:auto;font-size:12px}.usage-bars{align-items:flex-end;gap:2px;height:90px;display:flex}.usage-bar{flex:1;align-items:flex-end;min-width:2px;height:100%;display:flex}.usage-bar i{background:var(--accent-soft);opacity:.85;border-radius:2px 2px 0 0;width:100%;display:block}.usage-split-grid{grid-template-columns:1fr 1fr;gap:18px;display:grid}@media (width<=720px){.usage-split-grid{grid-template-columns:1fr}}.usage-table{border-collapse:collapse;width:100%;font-size:12.5px}.usage-table td{border-bottom:1px solid var(--line);padding:4px 6px}.usage-top-list{margin:0;padding:0;font-size:12.5px;list-style:none}.usage-top-list li{border-bottom:1px dashed var(--line);justify-content:space-between;gap:10px;padding:4px 0;display:flex}.usage-budgets{flex-direction:column;gap:8px;display:flex}.usage-budget-row{grid-template-columns:1fr 1fr 100px;align-items:center;gap:10px;font-size:12.5px;display:grid}.usage-budget-row i{background:var(--line-2);border-radius:3px;height:6px;display:block;position:relative;overflow:hidden}.usage-budget-row i b{background:var(--green);position:absolute;inset:0 auto 0 0}.usage-budget-row.budget-amber i b{background:var(--amber)}.usage-budget-row.budget-red i b{background:var(--red)}.usage-budget-row.budget-blocked{color:var(--red)}.usage-budget-row .budget-label{color:var(--ink-dim)}.budget-chip{color:var(--ink-dim);border:1px solid var(--line);background:var(--panel-2);border-radius:999px;flex:none;align-items:center;gap:4px;padding:4px 10px;font-size:11px;display:inline-flex}.budget-chip.budget-blocked{color:var(--red);border-color:color-mix(in srgb, var(--red) 45%, transparent)}.budgets-editor{flex-direction:column;gap:14px;display:flex}.budgets-editor .limit-row{flex-wrap:wrap;align-items:flex-end;gap:10px;display:flex}.budgets-editor .limit-row label{flex:1;min-width:120px}.budgets-editor .per-agent-row{align-items:center;gap:8px;display:flex}.budgets-editor .per-agent-row .b{flex:none}.usage-error{color:var(--red)}.usage-line{flex-wrap:wrap;align-items:center;gap:8px;padding:4px 0 0;display:flex}.check-badge{display:contents}.check-chip.check-running{color:var(--accent-soft);border-color:color-mix(in srgb, var(--accent-soft) 30%, transparent);background:var(--accent-wash)}.check-chip.check-passed{color:var(--green);border-color:color-mix(in srgb, var(--green) 28%, transparent);background:color-mix(in srgb, var(--green) 7%, transparent)}.check-chip.check-failed,.check-chip.check-error{color:var(--red);border-color:color-mix(in srgb, var(--red) 32%, transparent);background:color-mix(in srgb, var(--red) 7%, transparent)}.check-chip.check-skipped{color:var(--ink-faint)}a.ci-chip{text-decoration:none}.check-run{color:var(--ink-dim);cursor:pointer}.check-detail{background:var(--bg);border:1px solid var(--line);border-radius:var(--r);box-sizing:border-box;flex-basis:100%;max-width:100%;margin-top:4px;padding:8px 10px}.check-detail code{font:500 11px var(--mono);color:var(--ink-dim);word-break:break-all;margin-bottom:4px;display:block}.check-detail pre{max-height:160px;font:400 11px/1.5 var(--mono);color:var(--ink-dim);white-space:pre-wrap;word-break:break-word;margin:0;overflow:auto}.conversation-checks{flex-wrap:wrap;gap:6px;max-width:100%;margin-top:6px;display:flex}.awareness-overlap{display:contents}.awareness-overlap-chip{cursor:pointer}.awareness-overlap-detail{background:var(--bg);border:1px solid var(--line);border-radius:var(--r);box-sizing:border-box;max-width:100%;color:var(--ink-dim);flex-basis:100%;margin-top:4px;padding:8px 10px;font-size:11.5px}.awareness-overlap-detail ul{margin:4px 0 0;padding-left:18px}.awareness-overlap-detail code{font:500 11px var(--mono);word-break:break-all}.cand{border-bottom:1px dashed var(--line);flex-wrap:wrap;align-items:center;gap:10px;padding:11px 0;display:flex}.cand:last-child{border-bottom:0}.cand .who{font:600 13px var(--mono);color:var(--ink)}.cand .where{color:var(--ink-faint);word-break:break-all;font-size:11.5px}.cand .grow{flex:1;min-width:0}.badge.dim{background:var(--accent);color:var(--on-fill)}.project-mcp{border-top:1px solid var(--line);margin-top:18px;padding-top:12px}.mcp-row{grid-template-columns:1fr 90px 1.4fr;align-items:start;gap:8px;margin:10px 0;display:grid}.mcp-row .mcp-extra{grid-column:1/4;min-height:52px;font-family:ui-monospace,monospace}.mcp-row .mcp-remove{grid-column:3;justify-self:end}@media (width<=600px){.mcp-row{grid-template-columns:1fr 90px}.mcp-row .mcp-command,.mcp-row .mcp-extra{grid-column:1/3}.mcp-row .mcp-remove{grid-column:2}}.project-skills{border-top:1px solid var(--line);margin-top:18px;padding-top:12px}.project-skills h4{margin-bottom:5px}.project-skills h5{color:var(--ink-dim);text-transform:uppercase;letter-spacing:.08em;margin:14px 0 7px;font-size:11px}.skills-controls{flex-wrap:wrap;align-items:end;gap:8px;display:flex}.skills-controls label{flex:190px;min-width:0}.skills-controls button{flex:none}.skill-row{border:1px solid var(--line);border-radius:8px;align-items:center;gap:10px;min-width:0;margin:6px 0;padding:9px 10px;display:flex}.skill-main{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.skill-main b,.skill-main small{overflow-wrap:anywhere}.skill-main b{font-size:13px}.skill-main small{color:var(--ink-dim);font-size:11px}.skill-row .b{flex:none}.skills-sources{border-top:1px solid var(--line);margin-top:14px;padding-top:10px}.skills-sources summary{cursor:pointer;color:var(--ink-dim);font-size:13px}.skills-sources textarea{font:12px/1.5 var(--mono);min-height:58px}.skills-empty{padding:7px 0}@media (width<=600px){.skills-controls{align-items:stretch}.skills-controls label{flex-basis:100%}.skills-controls button{flex:1;min-height:44px}.skill-row{align-items:flex-start}.skill-row .b{min-height:44px}}.project-triggers{border-top:1px solid var(--line);margin-top:18px;padding-top:12px}.project-triggers h4{margin-bottom:5px}.project-triggers>p{color:var(--ink-dim);font-size:12.5px}.trigger-add{flex-wrap:wrap;align-items:center;gap:8px;margin:10px 0;display:flex}.trigger-source-row{border:1px solid var(--line);border-radius:8px;min-width:0;margin:8px 0;padding:10px}.trigger-source-head{flex-wrap:wrap;align-items:center;gap:8px;min-width:0;display:flex}.trigger-source-head b{font-size:13px}.trigger-source-name{color:var(--ink-dim);overflow-wrap:anywhere;font-size:12.5px}.trigger-status{font:600 10.5px var(--mono);text-transform:uppercase;letter-spacing:.05em;border:1px solid var(--line);color:var(--ink-dim);border-radius:999px;padding:2px 6px}.trigger-status-ok{color:var(--accent);border-color:var(--accent)}.trigger-status-error{color:color-mix(in srgb, var(--red) 85%, var(--bg));border-color:color-mix(in srgb, var(--red) 85%, var(--bg))}.trigger-last-poll{color:var(--ink-faint);margin-left:auto;font-size:11px}.trigger-error{color:color-mix(in srgb, var(--red) 85%, var(--bg));overflow-wrap:anywhere;margin:6px 0 0;font-size:12px}.trigger-source-actions{flex-wrap:wrap;align-items:center;gap:8px;margin-top:8px;display:flex}.trigger-test-result{overflow-wrap:anywhere;margin:6px 0 0;font-size:12px}.trigger-source-edit{border-top:1px dashed var(--line);gap:8px;margin-top:10px;padding-top:10px;display:grid}.trigger-config,.trigger-secrets{font:12px/1.5 var(--mono);min-height:84px}.trigger-events{margin:8px 0;padding:0;list-style:none}.trigger-event-row{border-bottom:1px dashed var(--line);flex-wrap:wrap;align-items:baseline;gap:8px;min-width:0;padding:7px 0;font-size:12.5px;display:flex}.trigger-event-time{color:var(--ink-faint);flex:none;font-size:11px}.trigger-event-kind{color:var(--ink-dim);text-transform:uppercase;letter-spacing:.05em;flex:none;font-size:10.5px}.trigger-event-author{flex:none;font-weight:600}.trigger-event-action{overflow-wrap:anywhere}.trigger-event-skipped{color:var(--ink-dim)}@media (width<=600px){.trigger-add{align-items:stretch}.trigger-add button{flex:1;min-height:44px}.trigger-source-actions button{min-height:44px}.trigger-last-poll{flex-basis:100%;margin-left:0}}.pjlist{border:1px solid var(--line);border-radius:10px;max-height:55vh;overflow-y:auto}.pjrow{border-bottom:1px solid var(--line);cursor:pointer;align-items:center;gap:10px;padding:9px 11px;display:flex}.pjrow:last-child{border-bottom:0}.pjrow:hover{background:var(--panel-2)}.pjrow input[type=checkbox]{flex:none;width:auto;margin:0}.pjmain{flex:1;min-width:0}.pjname{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;overflow:hidden}.pjmeta{color:var(--ink-dim);margin-top:2px;font-size:11px}.pjpath{color:var(--ink-dim);opacity:.7;text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;overflow:hidden}label.f.check{text-transform:none;letter-spacing:normal;font:400 13px/1.45 var(--sans);color:var(--ink)}.card{position:relative}.card-x{background:var(--panel);border:1px solid var(--line);width:22px;height:22px;color:var(--ink-faint);cursor:pointer;opacity:0;border-radius:6px;justify-content:center;align-items:center;font-size:11px;line-height:1;transition:opacity .12s,color .12s,border-color .12s;display:flex;position:absolute;top:6px;right:6px}.card:hover .card-x{opacity:1}.card-x:hover{color:var(--red);border-color:var(--red);opacity:1}@media (hover:none){.card-x{opacity:.55}}.col-clear{cursor:pointer;color:var(--ink-faint);font:600 10px var(--sans);letter-spacing:.08em;text-transform:uppercase;background:0 0;border:0;border-radius:5px;margin-left:8px;padding:2px 4px}.col-clear:hover{color:var(--red);background:var(--panel)}#qb-routines{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);cursor:pointer;width:42px;color:var(--ink-dim);flex:none;font-size:15px}#qb-routines:hover{color:var(--accent-soft);border-color:var(--accent)}.col.solo .solo-head{border-bottom:1px solid var(--line)}.brand h1{white-space:nowrap}#topbar{gap:12px}.scard-top .nm,.rowcard h3,.projgroup>h3,.card h3{overflow-wrap:anywhere;min-width:0}.scard select{max-width:100%}:where(button,a,input,textarea,select):focus-visible{outline:2px solid var(--accent-soft);outline-offset:3px}@media (width<=1023px){input,textarea,select{font-size:16px!important}button.b,.scard .btnrow button.b{min-height:44px}.spane{font-size:13px;line-height:1.6}#sheet{max-height:calc(100dvh - env(safe-area-inset-top))}}@media (width<=600px){#quickbar{grid-template-columns:minmax(0,1fr) 44px 44px;display:grid}#qb-mode{grid-area:1/1/auto/-1}#qb-mode button{flex:1;min-height:38px}#qb-project{grid-area:2/1;min-width:0;max-width:100%;min-height:44px}#qb-mic{grid-area:2/2;width:44px}#qb-routines{grid-area:2/3;min-height:44px}#qb-input{grid-area:3/1/auto/-1;width:100%}#qb-orch-hint{margin:0 0 12px}.colchip{min-height:40px}.scard-top{row-gap:6px}.sidle{font-size:11px}}@media (width>=1024px) and (width<=1279px){#topbar{padding-bottom:62px}#tabbar{top:52px;left:24px;right:auto}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.card .task-chat{width:100%;min-height:40px;color:var(--accent-soft);margin:8px 0}#view[hidden],#fab[hidden],.terminal-panels[hidden],.terminal-empty[hidden],.terminal-popout[hidden]{display:none!important}body.terminals-open{overflow:hidden}#terminal-workspace{top:var(--terminal-top,57px);bottom:var(--tabbar-h);background:var(--bg);flex-direction:column;min-height:0;display:flex;position:fixed;left:0;right:0;overflow:hidden}.terminal-tabbar{border-bottom:1px solid var(--line);align-items:center;gap:8px;padding:8px;display:flex}.terminal-tablist{flex:1;gap:6px;min-width:0;padding:3px;display:flex;overflow-x:auto}.terminal-tab-item{border:1px solid var(--line);background:var(--panel);border-radius:8px;flex:none;display:flex;overflow:hidden}.terminal-tab,.terminal-tab-close{color:var(--ink-dim);cursor:pointer;background:0 0;border:0;min-height:40px}.terminal-tab{text-overflow:ellipsis;white-space:nowrap;max-width:230px;padding:8px 12px;font-size:13px;overflow:hidden}.terminal-tab[aria-selected=true]{color:var(--accent-soft);background:var(--accent-wash);box-shadow:inset 0 -2px 0 var(--accent-soft)}.terminal-tab-close{width:36px;font-size:20px}.terminal-tab-close:hover{color:var(--ink);background:var(--panel-2)}.terminal-popout{white-space:nowrap;color:var(--accent-soft);background:var(--panel);border:1px solid var(--line-2);border-radius:8px;flex:none;align-items:center;min-height:40px;padding:9px 12px;font-size:12.5px;text-decoration:none;display:flex}.terminal-panels{flex:1;min-height:0;position:relative}.terminal-tabpanel{position:absolute;inset:0}.terminal-tabpanel iframe{background:var(--bg);border:0;width:100%;height:100%;display:block}.terminal-panels.split .terminal-tabpanel[data-slot]{flex-direction:column;display:flex}.terminal-panels.split .terminal-tabpanel[data-slot]>iframe{flex:1;height:auto;min-height:0}.terminal-panels.split .terminal-tabpanel[data-slot=primary]{right:calc(100% - var(--split-ratio,50%))}.terminal-panels.split .terminal-tabpanel[data-slot=secondary]{left:var(--split-ratio,50%)}.terminal-pane-label{border-bottom:1px solid var(--line);background:var(--panel);color:var(--ink-dim);flex:none;align-items:center;gap:8px;padding:5px 6px 5px 10px;font-size:12px;display:flex}.terminal-tabpanel[data-focused=true]>.terminal-pane-label{color:var(--accent-soft);box-shadow:inset 3px 0 0 var(--accent-soft)}.terminal-pane-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.terminal-pane-close{width:28px;min-height:28px;color:var(--ink-dim);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;font-size:17px}.terminal-pane-close:hover{color:var(--ink);background:var(--panel-2)}.terminal-split-handle{top:0;bottom:0;left:var(--split-ratio,50%);z-index:3;cursor:col-resize;touch-action:none;width:11px;margin-left:-5px;position:absolute}.terminal-split-handle:after{content:"";background:var(--line);position:absolute;inset:0 4px}.terminal-split-handle:hover:after,.terminal-split-handle:focus-visible:after{background:var(--accent-soft)}.terminal-panels.resizing .terminal-tabpanel{pointer-events:none}.terminal-panels.resizing{-webkit-user-select:none;user-select:none}.terminal-new{border:1px solid var(--line-2);background:var(--panel);border-radius:8px;flex:none;display:flex;position:relative}.terminal-new-main,.terminal-new-machines>summary{color:var(--accent-soft);cursor:pointer;white-space:nowrap;background:0 0;border:0;min-height:40px;font-size:12.5px}.terminal-new-main{border-radius:8px 0 0 8px;padding:9px 12px}.terminal-new-main:only-child{border-radius:8px}.terminal-new-main:disabled{opacity:.6;cursor:default}.terminal-new-machines>summary{border-left:1px solid var(--line-2);border-radius:0 8px 8px 0;align-items:center;padding:0 10px;list-style:none;display:flex}.terminal-new-machines>summary::-webkit-details-marker{display:none}.terminal-new-main:hover:not(:disabled),.terminal-new-machines>summary:hover{background:var(--panel-2)}.terminal-new-machines>.terminal-actions-panel{max-height:60vh;overflow-y:auto}.terminal-new-machines>.terminal-new-picker{box-sizing:border-box;z-index:80;overscroll-behavior:contain;width:min(340px,100vw - 20px);max-height:min(70vh,440px);padding:8px;position:fixed;bottom:auto;right:auto;overflow-y:auto}.terminal-new-search{box-sizing:border-box;border:1px solid var(--line);background:var(--panel);width:100%;min-height:38px;color:var(--ink);font:13px var(--sans);border-radius:7px;margin-bottom:6px;padding:8px 10px}.terminal-new-search:focus{border-color:var(--accent-soft);outline:none}.terminal-new-group{color:var(--ink-dim);text-transform:uppercase;letter-spacing:.06em;padding:6px 8px 2px;font-size:11px}.terminal-new-picker .terminal-new-project{flex-direction:column;align-items:flex-start;gap:2px;display:flex}.terminal-new-project-name{overflow-wrap:anywhere}.terminal-new-project-path{color:var(--ink-dim);overflow-wrap:anywhere;font-size:11.5px}.terminal-new-empty{color:var(--ink-dim);padding:10px 8px;font-size:12px}.terminal-empty .terminal-new-machines>.terminal-actions-panel{left:0;right:auto}@media (width<=1023px){.terminal-new-machines>.terminal-new-picker{width:min(340px,100vw - 16px);left:0;right:auto}.terminal-tabbar .terminal-new-label{display:none}.terminal-tabbar .terminal-new-main{padding:9px 13px;font-size:16px}}.terminal-empty-actions{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.terminal-split{white-space:nowrap;color:var(--ink-dim);background:var(--panel);border:1px solid var(--line-2);cursor:pointer;border-radius:8px;flex:none;min-height:40px;padding:9px 12px;font-size:12.5px}.terminal-split[aria-pressed=true]{color:var(--accent-soft);border-color:var(--accent-soft);background:var(--accent-wash)}.terminal-split:disabled{opacity:.45;cursor:default}.terminal-empty{max-width:600px;color:var(--ink-dim);padding:28px 20px}.terminal-empty h2{color:var(--ink);font-size:18px}.terminal-actions{flex:none;display:none;position:relative}.terminal-actions>summary{border:1px solid var(--line);width:40px;min-height:40px;color:var(--ink);cursor:pointer;border-radius:7px;justify-content:center;align-items:center;font-size:20px;list-style:none;display:flex}.terminal-actions>summary::-webkit-details-marker{display:none}.terminal-actions-panel{z-index:60;border:1px solid var(--line-2);background:var(--panel-2);width:190px;box-shadow:0 12px 35px color-mix(in srgb, var(--scrim) 53%, transparent);border-radius:10px;padding:6px;position:absolute;top:calc(100% + 6px);right:0}.terminal-actions-panel>a,.terminal-actions-panel>button{box-sizing:border-box;width:100%;min-height:42px;color:var(--ink);text-align:left;font:13px var(--sans);cursor:pointer;background:0 0;border:0;border-radius:6px;padding:10px 12px;text-decoration:none;display:block}.terminal-actions-panel>a:hover,.terminal-actions-panel>button:hover{background:var(--panel)}@media (width>=1024px){#terminal-workspace{bottom:0}}@media (width<=600px){.terminal-tabbar{gap:3px;padding:3px 4px}.terminal-tablist{gap:3px;padding:1px}.terminal-tab-item{border-radius:7px}.terminal-tab{max-width:150px;min-height:34px;padding:5px 8px;font-size:12px}.terminal-tab-close{width:26px;min-height:34px;font-size:16px}.terminal-tabbar .terminal-new-main,.terminal-tabbar .terminal-new-machines>summary,.terminal-tabbar .terminal-search,.terminal-tabbar .terminal-actions>summary,.terminal-tabbar .terminal-focus{height:34px;min-height:34px}.terminal-tabbar .terminal-new-main{padding:0 10px;font-size:15px}.terminal-tabbar .terminal-new-machines>summary{padding:0 6px}.terminal-tabbar .terminal-search,.terminal-tabbar .terminal-actions>summary,.terminal-tabbar .terminal-focus{width:34px;font-size:16px}.terminal-popout{padding:8px;font-size:12px}#tabbar .tab{min-width:0;font-size:10px}}#terminal-workspace[hidden]{visibility:hidden;pointer-events:none;display:flex!important}.terminal-tabpanel[hidden]{visibility:hidden;pointer-events:none;display:block!important}.session-worktree{color:var(--ink-dim);overflow-wrap:anywhere;margin:8px 0 12px;font-size:12px}.session-worktree summary{cursor:pointer}.session-worktree code,.session-worktree small{margin-top:6px;display:block}.session-grouping{color:var(--ink-dim);align-items:center;gap:10px;margin:8px 0;font-size:12px;display:flex}.session-grouping select{width:auto;max-width:220px;margin:0}.session-scope select{max-width:min(280px,100vw - 90px)}.session-group{border-left:1px solid var(--line);min-width:0;margin:14px 0;padding-left:10px}.session-group>summary{cursor:pointer;overflow-wrap:anywhere;padding:8px 0;font-size:13px;font-weight:600}.session-group>summary small{color:var(--ink-dim);margin-left:10px;font-weight:400}.session-group-body{min-width:0}.session-group-body .scard{margin-top:10px}#ns-repositories details{margin:12px 0}#ns-repositories summary{cursor:pointer;min-height:28px;padding:8px 0}.workspace-repository{border:1px solid var(--line);overflow-wrap:anywhere;border-radius:8px;margin-top:12px;padding:12px}#ns-repositories select{max-width:100%}.delegation-banner{border:2px solid var(--line);background:var(--bg-soft);border-radius:14px;margin:0 0 18px;padding:16px 18px}.delegation-banner.on{border-color:var(--accent);box-shadow:var(--glow);background:linear-gradient(135deg, var(--accent-wash), transparent 60%), var(--bg-soft)}.delegation-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.delegation-head h3{letter-spacing:-.01em;align-items:center;gap:10px;margin:0 0 6px;font-size:1.45rem;display:flex}.delegation-head p{max-width:62ch;margin:0}.delegation-state{letter-spacing:.12em;color:var(--ink-dim);border:1px solid;border-radius:999px;padding:3px 9px;font-size:.8rem;font-weight:800}.delegation-banner.on .delegation-state{color:var(--on-accent);background:var(--accent-fill);border-color:var(--accent)}.delegation-switch{cursor:pointer;align-items:center;gap:10px;font-size:1.05rem;font-weight:700;display:flex}.delegation-switch input{appearance:none;cursor:pointer;background:color-mix(in srgb, var(--overlay) 14%, transparent);border:1px solid color-mix(in srgb, var(--overlay) 18%, transparent);border-radius:999px;width:54px;height:30px;margin:0;transition:background .15s;position:relative}.delegation-switch input:after{content:"";background:var(--on-accent);border-radius:50%;width:22px;height:22px;transition:transform .15s;position:absolute;top:3px;left:3px}.delegation-switch input:checked{background:var(--accent);border-color:var(--accent)}.delegation-switch input:checked:after{transform:translate(24px)}.delegation-banner>.b{margin-top:12px}.delegation-setup{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin-top:14px;display:grid}.delegation-setup>label{gap:4px;font-size:.9rem;display:grid}.delegation-preset,.delegation-check,.delegation-install,.delegation-note{grid-column:1/-1}.delegation-preset{grid-template-columns:1fr auto;align-items:center;gap:8px;display:grid}.delegation-preset p{grid-column:1/-1;margin:0}.delegation-check,.delegation-install{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.delegation-install p{flex-basis:100%;margin:0}.delegation-note{opacity:.8;margin:0;font-size:.85rem}@media (width<=640px){.delegation-head h3{font-size:1.2rem}.delegation-preset{grid-template-columns:1fr}}.conversation{z-index:100;background:var(--bg);max-width:100%;height:100dvh;padding-top:env(safe-area-inset-top);flex-direction:column;display:flex;position:fixed;inset:0 0 auto}.conversation-head{border-bottom:1px solid var(--line);flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;display:flex}.conversation-head>div{min-width:0}.conversation-head h2{text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:18px;overflow:hidden}.conversation-head p{color:var(--ink-dim);margin:4px 0 0;font-size:12px}.reader-controls{border-bottom:1px solid var(--line);flex-shrink:0;align-items:center;gap:8px;padding:7px 12px;display:flex}.reader-controls>span{color:var(--ink-dim);flex:1;font-size:11px}.conversation .b{min-height:42px}#conversation-log{overscroll-behavior:contain;scrollbar-gutter:stable;overflow-wrap:anywhere;flex:1;min-height:0;padding:16px;overflow:auto}.session-reader,.reader-text{white-space:pre-wrap;font-family:inherit;font-size:var(--reader-font,17px);overflow-wrap:anywhere;margin:0;line-height:1.65}.session-reader{tab-size:2}.reader-message{background:var(--panel);border-radius:12px;margin:0 0 14px;padding:12px 14px}.reader-message.operator{background:color-mix(in srgb, var(--accent-fill) 35%, var(--bg));border:1px solid color-mix(in srgb, var(--accent-fill) 33%, transparent)}.reader-speaker{color:var(--ink-dim);margin-bottom:7px;font-size:11px}.reader-message.detail{background:var(--bg-soft);color:var(--ink-dim);font-size:13px}.reader-message.detail summary{cursor:pointer;padding:4px}.reader-message pre{white-space:pre-wrap;overflow-wrap:anywhere;font-size:14px}#conversation-compose{padding:10px 14px calc(10px + env(safe-area-inset-bottom));border-top:1px solid var(--line);background:var(--bg-soft);flex-shrink:0}#conversation-compose>label{color:var(--ink);margin-bottom:5px;font-size:12px;display:block}#conversation-input{box-sizing:border-box;resize:vertical;border:1px solid color-mix(in srgb, var(--indigo) 45%, var(--bg));background:var(--bg);width:100%;min-height:62px;max-height:26dvh;color:var(--ink);border-radius:10px;padding:10px 12px;font-family:inherit;font-size:16px;line-height:1.45;display:block}#conversation-input:focus{outline:2px solid var(--accent-soft);outline-offset:1px}#conversation-hint,#conversation-receipt{color:var(--ink-dim);margin:5px 0;font-size:11px}#conversation-receipt:empty{display:none}.compose-actions{align-items:center;gap:8px;display:flex}.interrupt-option{align-items:center;gap:6px;max-width:50%;font-size:12px;display:flex}.interrupt-option input{width:18px;height:18px}#conversation-error{color:var(--amber);background:color-mix(in srgb, var(--amber) 25%, var(--bg));padding:8px 14px;font-size:12px}#conversation-approvals{max-height:40dvh;overflow:auto}#conversation-cards{flex-direction:column;display:flex}.reader-message.thinking{background:var(--bg-soft);color:var(--ink-faint);font-size:13px;font-style:italic}.reader-message.thinking summary{cursor:pointer;padding:4px;font-style:normal}.md-code{background:var(--bg);border:1px solid var(--line);font:400 13px/1.5 var(--mono,monospace);border-radius:8px;margin:8px 0;padding:10px 12px;overflow-x:auto}.reader-text p{margin:0 0 8px}.reader-text p:last-child{margin-bottom:0}.reader-text code{background:var(--panel-2);font:400 13px var(--mono,monospace);border-radius:4px;padding:1px 5px}.reader-text ul,.reader-text ol{margin:6px 0;padding-left:22px}.tool-card{background:var(--panel);border:1px solid var(--line);border-radius:12px;margin:0 0 14px;overflow:hidden}.tool-card summary{cursor:pointer;align-items:center;gap:8px;min-height:44px;padding:12px 14px;font-size:14px;list-style:none;display:flex}.tool-card summary::-webkit-details-marker{display:none}.tool-card summary:before{content:"▸";color:var(--ink-dim);flex-shrink:0;transition:transform .15s}.tool-card[open] summary:before{transform:rotate(90deg)}.tool-icon{flex-shrink:0}.tool-title{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.tool-sep{color:var(--ink-faint)}.tool-subtitle{color:var(--ink-dim);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12.5px;font-family:var(--mono,monospace);overflow:hidden}.tool-spinner{color:var(--accent-soft);flex-shrink:0;margin-left:auto}.tool-fail{color:var(--red);flex-shrink:0;margin-left:auto}.tool-body{padding:0 14px 14px}.tool-command{background:var(--bg);font:400 13px/1.5 var(--mono,monospace);white-space:pre-wrap;word-break:break-word;border-radius:8px;margin:0 0 8px;padding:10px 12px;overflow-x:auto}.tool-output{margin-top:8px}.tool-output-label{text-transform:uppercase;letter-spacing:.04em;color:var(--ink-dim);margin-bottom:4px;font-size:11px}.tool-output[data-error] .tool-output-label{color:var(--red)}.tool-output pre{background:var(--bg);font:400 12.5px/1.5 var(--mono,monospace);white-space:pre-wrap;word-break:break-word;border-radius:8px;max-height:40dvh;margin:0;padding:10px 12px;overflow:auto}.tool-running{margin:0;font-style:italic}.tool-args{margin-top:4px}.tool-args summary{cursor:pointer;color:var(--ink-dim);min-height:auto;padding:4px 0;font-size:12px}.tool-args pre{background:var(--bg);font:400 12px/1.5 var(--mono,monospace);border-radius:8px;margin:4px 0 0;padding:10px 12px;overflow-x:auto}.tool-todos{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.tool-todos li{align-items:flex-start;gap:8px;font-size:13.5px;display:flex}.tool-todos li[data-status=completed]{color:var(--ink-dim);text-decoration:line-through}.tool-todos li[data-status=in_progress]{color:var(--accent-soft);font-weight:600}.tool-todo-mark{flex-shrink:0}.approval-card{background:var(--panel-2);border:1px solid color-mix(in srgb, var(--amber) 30%, var(--bg));border-radius:12px;margin:0 0 14px;padding:12px 14px}.approval-card[data-decided=approved]{background:var(--panel-2);border-color:color-mix(in srgb, var(--green) 35%, var(--bg))}.approval-card[data-decided=denied]{background:var(--bg-soft);border-color:color-mix(in srgb, var(--red) 30%, var(--bg))}.approval-head{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:8px;display:flex}.approval-head strong{font-size:13px}.approval-card .tool-body{padding:0}.approval-actions{flex-wrap:wrap;gap:8px;margin-top:10px;display:flex}.approval-actions>button{min-height:44px}.approval-deny{flex-direction:column;flex:1 0 100%;gap:6px;display:flex}.approval-deny textarea{box-sizing:border-box;resize:vertical;border:1px solid color-mix(in srgb, var(--indigo) 45%, var(--bg));background:var(--bg);width:100%;min-height:56px;color:var(--ink);border-radius:10px;padding:8px 10px;font-family:inherit;font-size:14px}.approval-deny label{color:var(--ink);font-size:11px}.approval-deny-actions{gap:8px;display:flex}.approval-deny-actions button{min-height:44px}.approval-card .link-button{margin-top:8px;display:inline-block}@media (width>=900px){.conversation{border-inline:1px solid color-mix(in srgb, var(--indigo) 25%, var(--bg));width:900px;box-shadow:0 0 0 100vmax color-mix(in srgb, var(--scrim) 85%, transparent);left:50%;transform:translate(-50%)}}@media (height<=550px){.reader-controls{padding:2px 10px}#conversation-input{height:62px;min-height:45px}#conversation-hint{display:none}.conversation-head{padding:6px 12px}}#conversation-attachments{flex-wrap:wrap;gap:6px;max-height:100px;margin-top:6px;display:flex;overflow:auto}.context-attachment{background:var(--panel-2);border:1px solid color-mix(in srgb, var(--accent-fill) 60%, var(--bg));border-radius:8px;align-items:center;gap:6px;min-width:0;max-width:100%;padding-left:9px;font-size:12px;display:flex}.context-attachment span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.context-attachment .b{flex-shrink:0;min-width:36px;padding:0 6px}#conversation-upload-status{color:var(--ink-dim);margin:5px 0;font-size:12px}#conversation-upload-status:empty{display:none}#conversation-compose.file-drag{outline:2px dashed var(--accent-soft);outline-offset:-3px}.compose-actions{flex-wrap:wrap}.recall-context{color:var(--ink-dim);margin:0 0 8px;font-size:12px}.recall-context summary{cursor:pointer}.recall-context pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:240px;font-size:11px;overflow:auto}:root{--sidebar:184px}#aurora{display:none}#topbar{background:var(--bg);-webkit-backdrop-filter:none;backdrop-filter:none}.brand-sub{display:none}.brand-mark{background:0 0;border:0}.led-on{box-shadow:none;animation:none}.top-status{letter-spacing:.06em;background:0 0;border:0}.page-heading,.sesshead{justify-content:space-between;align-items:center;gap:16px;padding:10px 16px 18px;display:flex}.page-heading h2,.sesshead h2{letter-spacing:-.035em;text-transform:none;color:var(--ink);margin:0;font-size:23px;font-weight:650;line-height:1.3}.page-heading p,.sesshead p{color:var(--ink-dim);margin:5px 0 0;font-size:13px}.page-heading .b{flex:none}#qb-routines{width:auto;padding:8px 14px;font-size:13px}#quickbar{gap:8px}#qb-input{background:var(--bg-soft)}#fab{background:var(--accent-fill);width:auto;height:44px;box-shadow:0 3px 12px color-mix(in srgb, var(--scrim) 20%, transparent);border-radius:9px;gap:7px;padding:0 15px;font-weight:600;display:flex}#fab svg{width:18px;height:18px}.b.ok,.b.attach{background:var(--accent-fill);border-color:var(--accent);color:var(--on-accent);box-shadow:none}.b.grow:not(.ok){background:0 0}.b{box-shadow:none;border-radius:8px}.chip{background:0 0;border:0;padding:1px 0}.meta,.smeta{align-items:center;gap:7px 12px}.card{background:var(--panel);box-shadow:none}.card .task-chat{width:auto;min-height:32px;margin:7px 0;padding:3px 10px}.card .meta{font-size:11px}.list.wide{max-width:1400px}.sesshead{padding:10px 0 14px}.sesshead>div{flex:1;min-width:180px}#sess-search{background:var(--bg-soft);max-width:480px;min-height:42px;margin:0 0 6px}#sesslist{grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));align-items:start;gap:16px;display:grid}#sesslist>.hint{grid-column:1/-1}.scard{box-shadow:none;border-radius:12px;margin:0;padding:17px;overflow:visible}.scard:has(.action-menu[open]){z-index:25}.scard:before{display:none}.scard-project{color:var(--ink-dim);white-space:nowrap;text-overflow:ellipsis;margin-bottom:8px;font-size:12px;overflow:hidden}.scard-top .nm{font-size:16px}.scard-top .dot{box-shadow:none;width:6px;height:6px}.sstate{letter-spacing:.02em;text-transform:none;font-size:11px}.sidle{font:11px var(--sans)}.spane{border:0;border-top:1px solid var(--line);background:0 0;border-radius:0;height:96px;min-height:96px;max-height:96px;padding:10px 0;font-size:12px;line-height:1.5;overflow:hidden}.scard .btnrow{flex-wrap:nowrap;align-items:center;gap:7px}.scard .btnrow>.b{flex:1}.action-menu{flex:none;position:relative}.action-menu>summary{cursor:pointer;border:1px solid var(--line);min-height:40px;color:var(--ink-dim);white-space:nowrap;border-radius:8px;justify-content:center;align-items:center;padding:8px 12px;font-size:12px;list-style:none;display:flex}.action-menu>summary::-webkit-details-marker{display:none}.action-menu[open]>summary,.action-menu>summary:hover{background:var(--panel-2);color:var(--ink)}.action-menu-panel{z-index:60;border:1px solid var(--line-2);background:var(--panel-2);width:235px;max-width:calc(100vw - 32px);box-shadow:0 12px 35px color-mix(in srgb, var(--scrim) 53%, transparent);border-radius:11px;flex-direction:column;gap:3px;padding:7px;display:flex;position:absolute;top:calc(100% + 6px);right:0}.action-menu:not([open])>.action-menu-panel{display:none}.action-menu-panel>.b,.action-menu-panel>button{text-align:left;width:100%;color:var(--ink);font:13px var(--sans);cursor:pointer;background:0 0;border:0;border-radius:6px;padding:10px 12px;text-decoration:none;display:block}.action-menu-panel>.b:hover,.action-menu-panel>button:hover{background:var(--panel-2)}.action-menu-panel>.no{color:var(--red)}.menu-field{color:var(--ink-dim);border-top:1px solid var(--line);flex-direction:column;gap:6px;padding:8px 10px;font-size:11px;display:flex}.menu-field .sess-proj{width:100%!important}.settings-page{max-width:1220px;padding:0 16px}.settings-page>.page-heading{padding-left:0;padding-right:0}.settings-nav{border-bottom:1px solid var(--line);gap:6px;margin-bottom:22px;padding-bottom:8px;display:flex;overflow-x:auto}.settings-nav button{min-height:42px;color:var(--ink-dim);cursor:pointer;background:0 0;border:0;border-radius:7px;flex:none;padding:8px 14px;font-size:13px}.settings-nav button[aria-selected=true]{background:var(--panel-2);color:var(--ink)}.settings-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,280px),1fr));gap:14px;display:grid}[data-settings-panel][hidden]{display:none!important}[data-settings-panel]:not(.settings-grid){max-width:850px}.settings-grid>.rowcard{margin:0}.rowcard{box-shadow:none;border-radius:12px;padding:19px}.rowcard .led{margin-right:5px}#nav-overflow{display:none}#terminal-workspace{background:var(--bg)}.terminal-tabbar{background:var(--bg-soft);gap:12px;padding:6px 12px}.terminal-tab-item{background:0 0;border:0;border-radius:6px}.terminal-tab-item:has([aria-selected=true]){background:var(--panel-2)}.terminal-tab[aria-selected=true]{color:var(--ink);background:0 0}.terminal-popout{color:var(--ink-dim);background:0 0;border-color:#0000}#sheet{background:var(--panel)}.sheet-head{border-bottom:1px solid var(--line);margin-bottom:16px;padding-bottom:14px}.conversation{background:var(--bg)}@media (width>=1024px){#topbar{justify-content:space-between;height:64px;padding:12px 24px}#topbar .top-status{margin-right:145px}#tabbar{width:var(--sidebar);border-right:1px solid var(--line);background:var(--bg);flex-direction:column;align-items:stretch;gap:5px;height:auto;padding:24px 12px;display:flex;inset:64px auto 0 0}#tabbar .tab{min-height:44px;color:var(--ink-dim);letter-spacing:0;flex:none;justify-content:flex-start;padding:0 12px;font-size:13px}#tabbar .tab.on{color:var(--ink);background:var(--panel-2)}#tabbar .tab.on:after{display:none}#tabbar .badge{margin-left:auto}#view{margin-left:var(--sidebar);padding:22px 28px 32px}.page-heading{padding:2px 0 22px}.settings-page{padding:0}#fab{height:40px;top:12px;bottom:auto;right:24px}.col{min-width:160px;max-height:calc(100dvh - 230px)}#terminal-workspace{left:var(--sidebar)}#sheet{width:min(700px,58vw)}#qb-filter{width:150px}}@media (width<=1023px){#nav-overflow{flex:1;min-width:0;display:block}#nav-overflow>summary{border:0;border-radius:0;flex-direction:column;gap:2px;height:100%;padding:4px;font-size:10.5px}#nav-overflow>summary>span{font-size:24px;line-height:20px}#nav-overflow.on>summary{color:var(--accent-soft)}#nav-overflow>.action-menu-panel{top:auto;bottom:calc(100% + 8px);right:8px}#tabbar .tab{font-size:11px}.sesshead>div{flex-basis:100%}.sesshead button{flex:1}.action-menu>summary,.settings-nav button{min-height:44px}.settings-page{padding:0 16px}.page-heading h2,.sesshead h2{font-size:22px}}@media (width<=600px){#quickbar{grid-template-columns:minmax(0,1fr) 44px}#qb-project{grid-column:1}#qb-mic{grid-column:2}#qb-input{grid-column:1/-1}#quickbar #qb-filter{display:none}.spane{font-size:12px}}.action-menu-panel{max-height:min(420px,100dvh - 32px);overflow-y:auto}.action-menu.menu-above>.action-menu-panel{top:auto;bottom:calc(100% + 6px)}.terminal-focus,.terminal-search{border:1px solid var(--line);background:var(--panel);width:44px;height:44px;color:var(--ink);cursor:pointer;border-radius:7px;flex:none;font-size:22px;display:none}@media (width<=1023px){.terminal-focus{display:block}body.terminals-open.terminal-compact #topbar,body.terminals-open.terminal-compact #tabbar{display:none}body.terminals-open.terminal-compact #terminal-workspace{top:0;bottom:0}body.terminals-open.terminal-compact .terminal-tabbar{padding-top:calc(3px + env(safe-area-inset-top));gap:4px;padding-bottom:3px}body.terminals-open.terminal-compact .terminal-popout{display:none}body.terminals-open.terminal-compact .terminal-search,body.terminals-open.terminal-compact .terminal-actions{display:block}body.terminals-open.terminal-compact .terminal-tab-close{display:none}body.terminals-open.terminal-compact .terminal-tab{max-width:150px;padding-inline:10px;font-size:12px}}.terminal-focus[hidden]{display:none!important}#sheet:has(.session-launch-actions){scroll-padding-bottom:96px}#sheet:has(.session-launch-actions){flex-direction:column;min-height:0;display:flex}#sheet:has(.session-launch-actions)>*{flex:none}#sheet:has(.session-launch-actions)>.session-launch-actions{margin-top:auto}.session-launch-actions{bottom:calc(-28px - env(safe-area-inset-bottom,0px));z-index:6;margin:20px -18px calc(-28px - env(safe-area-inset-bottom,0px));padding:12px 18px calc(12px + env(safe-area-inset-bottom,0px));background:inherit;border-top:1px solid var(--line);box-shadow:0 -10px 18px -12px color-mix(in srgb, var(--scrim) 60%, transparent);position:sticky}.session-advanced{border-top:1px solid var(--line);margin:14px 0 0;padding-top:12px}.session-advanced>summary{box-sizing:border-box;border:1px solid var(--line-2);background:var(--panel);min-height:44px;color:var(--accent-soft);cursor:pointer;border-radius:8px;justify-content:space-between;align-items:center;gap:8px;padding:9px 12px;font-size:13px;list-style:none;display:flex}.session-advanced>summary::-webkit-details-marker{display:none}.session-advanced>summary:after{content:"▾";font-size:12px}.session-advanced[open]>summary{border-radius:8px 8px 0 0}.session-advanced[open]>summary:after{content:"▴"}.session-advanced>summary:hover{background:var(--panel-2)}.session-advanced>summary:focus-visible{outline:2px solid var(--accent-soft);outline-offset:2px}#ns-proj-hint{color:var(--ink-dim);overflow-wrap:anywhere;margin-top:6px;font-size:12px;line-height:1.45}#ns-proj-hint:empty{display:none}.ns-proj-setup{margin-top:4px;display:block}.ns-launch-summary{color:var(--ink-dim);overflow-wrap:anywhere;margin:0 0 8px;font-size:12px;line-height:1.4}.agent-commands{box-sizing:border-box;border:1px solid var(--border);background:var(--panel);width:min(620px,100vw - 28px);max-height:calc(100dvh - 32px);color:var(--text);border-radius:14px;padding:20px;overflow:auto}.agent-commands::backdrop{background:color-mix(in srgb, var(--scrim) 60%, transparent)}.agent-commands header{justify-content:space-between;align-items:center;gap:12px;display:flex}.agent-commands h2{margin:0;font-size:18px}.agent-commands p{line-height:1.5}.ac-results{padding:0;list-style:none}.ac-results li{border-bottom:1px solid var(--border);gap:6px;padding:12px 0;display:grid}.agent-commands p,.ac-results span,.ac-status{overflow-wrap:anywhere}.launch-profiles{box-sizing:border-box;background:var(--bg);width:min(640px,100vw - 24px);max-height:calc(100dvh - 24px);color:var(--ink);border:1px solid var(--line);border-radius:16px;padding:20px;overflow:auto}.launch-profiles::backdrop{background:color-mix(in srgb, var(--scrim) 60%, transparent)}.launch-profiles header,.lp-picker,.lp-buttons{align-items:center;gap:12px;display:flex}.launch-profiles header{justify-content:space-between}.launch-profiles h2{margin:0;font-size:20px}.launch-profiles p{color:var(--ink-dim);font-size:13px;line-height:1.5}.launch-profiles label{flex-direction:column;gap:6px;min-width:0;font-size:13px;display:flex}.lp-picker label{flex:1}.launch-profiles form{gap:14px;margin-top:16px;display:grid}.launch-profiles input,.launch-profiles select,.launch-profiles textarea,.launch-profiles button{box-sizing:border-box;border:1px solid var(--line);background:var(--panel);max-width:100%;min-height:44px;color:inherit;font:inherit;border-radius:8px;padding:9px 11px}.launch-profiles textarea{resize:vertical;width:100%;font-family:monospace}.launch-profiles button{cursor:pointer}.launch-profiles button:disabled{opacity:.5;cursor:wait}.lp-save{background:color-mix(in srgb, var(--accent-fill) 75%, var(--bg))!important}.lp-delete{color:color-mix(in srgb, var(--red) 55%, var(--ink))!important}.lp-buttons{flex-wrap:wrap}.lp-status{overflow-wrap:anywhere;font-size:13px}.lp-hint{margin:0}.launch-profiles [hidden]{display:none!important}@media (width<=480px){.launch-profiles{padding:14px}.lp-picker{align-items:end}.lp-picker button{flex-shrink:0}}.launch-profiles header{background:var(--bg);z-index:1;margin:-20px -20px 0;padding:14px 20px;position:sticky;top:-20px}@media (width<=480px){.launch-profiles header{margin:-14px -14px 0;padding:10px 14px;top:-14px}}.lp-starters{gap:8px;margin-top:16px;display:grid}.lp-starters h3,.lp-advanced{color:var(--ink);margin:0;font-size:13px}.lp-starter-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:10px;display:grid}.lp-starter{border:1px solid var(--line);background:var(--panel);border-radius:12px;flex-direction:column;gap:8px;min-width:0;padding:12px;display:flex}.lp-starter-head{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.lp-starter-name{overflow-wrap:anywhere;font-size:14px}.lp-starter-agent{color:var(--ink-dim);white-space:nowrap;font-size:12px}.lp-starter-purpose{overflow-wrap:anywhere;margin:0;font-size:12px}.lp-starter-use{align-self:flex-start}.lp-draft-note{color:var(--amber);margin:0;font-size:12px}.lp-advanced{border-top:1px solid var(--line);margin-top:2px;padding-top:10px}.ns-profile-description{margin-top:4px;display:block}@media (width<=480px){.lp-starter-grid{grid-template-columns:1fr}}.launch-profiles form{scroll-margin-top:68px}.launch-profiles .lp-instructions{min-height:190px;font-family:inherit;line-height:1.5}.launch-profiles .lp-description{min-height:75px;font-family:inherit}.agent-settings-head{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:10px;display:flex}.agent-settings-head h3{margin:0}.agent-settings-head p{max-width:760px;margin:5px 0 0}.agent-settings-list{gap:10px;display:grid}.agent-card{justify-content:space-between;align-items:center;gap:16px;display:flex}.agent-card h3{margin:0 0 4px}.agent-card-actions{flex-shrink:0;gap:8px;display:flex}.agent-settings-dialog{box-sizing:border-box;background:var(--bg);width:min(720px,100vw - 24px);max-height:calc(100dvh - 24px);color:var(--ink);border:1px solid var(--line);border-radius:16px;padding:20px;overflow:auto}.agent-settings-dialog::backdrop{background:color-mix(in srgb, var(--scrim) 60%, transparent)}.agent-settings-dialog form{gap:13px;display:grid}.agent-settings-dialog header{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.agent-settings-dialog h2{margin:0;font-size:20px}.agent-settings-dialog label{flex-direction:column;gap:6px;font-size:13px;display:flex}.agent-settings-dialog input,.agent-settings-dialog select,.agent-settings-dialog textarea,.agent-settings-dialog button{box-sizing:border-box;border:1px solid var(--line);background:var(--panel);max-width:100%;min-height:44px;color:inherit;font:inherit;border-radius:8px;padding:9px 11px}.agent-settings-dialog textarea{resize:vertical;font-family:monospace}.agent-settings-dialog button{cursor:pointer}.agent-settings-dialog .check{flex-direction:row;align-items:center;gap:9px;display:flex}.agent-settings-dialog .check input{width:auto;min-height:0}.agent-two{grid-template-columns:1fr 1fr;gap:12px;display:grid}.agent-dialog-buttons{flex-wrap:wrap;gap:8px;display:flex}.agent-dialog-status{overflow-wrap:anywhere}.agent-settings-dialog .sub{color:var(--ink-dim);margin:0;font-size:12.5px;line-height:1.45}.agent-prompt-help,.agent-env-help{margin-top:-8px!important}@media (width<=560px){.agent-settings-head{flex-direction:column;align-items:stretch}.agent-card{flex-direction:column;align-items:flex-start}.agent-card-actions{width:100%}.agent-card-actions button{flex:1}.agent-two{grid-template-columns:1fr}.agent-settings-dialog{padding:14px}.agent-settings-dialog header{background:var(--bg);z-index:1;margin:-14px -14px 0;padding:10px 14px;position:sticky;top:-14px}}.project-workflows{border-top:1px solid var(--line);margin-top:18px;padding-top:14px}.project-workflows h4{margin:0 0 6px}.project-workflows>p{max-width:760px}.workflows-status{overflow-wrap:anywhere}.project-workflows label{flex-direction:column;gap:6px;font-size:13px;display:flex}.project-workflows select,.project-workflows button{box-sizing:border-box;border:1px solid var(--line);background:var(--panel);max-width:100%;min-height:40px;color:inherit;font:inherit;border-radius:8px;padding:8px 10px}.project-workflows button{cursor:pointer;margin:8px 0}.workflow-card{border:1px solid var(--line);border-radius:10px;grid-template-columns:1fr auto;gap:4px 14px;margin-top:12px;padding:13px;display:grid}.workflow-card h5{margin:0 0 4px;font-size:15px}.workflow-card p{margin:4px 0;line-height:1.45}.workflow-version{color:var(--ink-dim);font-size:12px}.workflow-card-copy{min-width:0}.workflow-version code{overflow-wrap:anywhere}.workflow-version a{color:inherit}.workflow-toggle{align-self:start;min-width:92px}.workflow-commands{border-top:1px solid var(--line);grid-column:1/-1;margin-top:6px;padding-top:8px}.workflow-commands ul{margin:6px 0;padding-left:22px}.workflow-commands code{overflow-wrap:anywhere}.workflow-reload-note{color:var(--ink-dim);font-size:12px}@media (width<=560px){.workflow-card{grid-template-columns:1fr}.workflow-toggle{width:100%}.workflow-commands{grid-column:auto}}#command-open{border:1px solid var(--line);background:var(--panel);color:var(--ink-dim);cursor:pointer;min-height:40px;font:inherit;border-radius:8px;justify-content:space-between;align-items:center;gap:24px;padding:9px 13px;display:flex}#command-open kbd{font:11px var(--mono);color:var(--ink-faint)}.command-palette{width:min(620px,100vw - 32px);max-height:calc(var(--command-height,100dvh) - 32px);border:1px solid var(--line-2);background:var(--panel);color:var(--ink);box-shadow:0 24px 80px color-mix(in srgb, var(--scrim) 53%, transparent);border-radius:14px;margin:clamp(16px,10dvh,100px) auto auto;padding:0;overflow:hidden}.command-palette::backdrop{background:color-mix(in srgb, var(--scrim) 70%, transparent)}.command-search{border-bottom:1px solid var(--line);align-items:center;gap:12px;padding:14px 16px;display:flex}.command-search input{min-width:0;color:var(--ink);font:16px var(--sans);outline-offset:3px;background:0 0;border:0;flex:1;padding:8px 0}.command-search button{border:1px solid var(--line);background:var(--panel-2);min-width:40px;min-height:40px;color:var(--ink-dim);cursor:pointer;border-radius:6px;flex:none}.command-status,.command-help{color:var(--ink-dim);margin:0;padding:10px 16px;font-size:12px}#command-results{max-height:min(52dvh,460px,calc(var(--command-height,100dvh) - 175px));overscroll-behavior:contain;padding:0 8px;overflow-y:auto}.command-result{cursor:pointer;overflow-wrap:anywhere;border-radius:7px;flex-direction:column;gap:5px;min-height:52px;padding:11px 12px;display:flex}.command-result strong{font-size:14px;font-weight:550}.command-result span{color:var(--ink-dim);font-size:12px}.command-result[aria-selected=true]{background:var(--accent-wash);outline:1px solid var(--accent-soft);outline-offset:-1px}.command-help{border-top:1px solid var(--line);margin-top:8px}@media (width<=600px){#command-open{gap:0;min-width:44px;min-height:44px;margin-left:auto;padding:8px}#command-open .command-label,#command-open kbd{display:none}.command-palette{width:calc(100vw - 16px);margin-top:calc(8px + env(safe-area-inset-top))}.command-search{gap:8px;padding:10px}.command-help{display:none}#command-results{max-height:calc(var(--command-height,100dvh) - 175px);padding-bottom:8px}}.command-palette .sr-only{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.command-close-icon{display:none}@media (width<=600px){.command-close-text{display:none}.command-close-icon{font-size:24px;display:inline}}.command-result strong{align-items:center;gap:10px;display:flex}.command-shortcut{font:11px var(--mono);color:var(--ink-dim);border:1px solid var(--line-2);background:var(--panel-2);border-radius:5px;flex:none;margin-left:auto;padding:1px 6px;font-weight:400}#root{min-height:100dvh}#toasts{pointer-events:none}.toast.has-action{pointer-events:auto;align-items:center;gap:12px;display:flex}.toast.has-action>span{flex:1;min-width:0}.toast-action{border:1px solid var(--accent);min-height:36px;color:var(--accent-soft);cursor:pointer;background:0 0;border-radius:8px;flex:none;padding:6px 14px;font-weight:600}.token-dialog{background:var(--panel);width:calc(100% - 2rem);max-width:30rem;color:var(--ink);border:1px solid var(--line);border-radius:14px;padding:24px}.token-dialog form{gap:12px;display:grid}.token-dialog input{background:var(--bg);min-width:0;color:inherit;padding:12px}.pane-head{text-align:left;width:100%;color:inherit;background:0 0;border:0}.brand-mark{font-size:24px}#view{min-width:0}#view button:not([class]),#view .filters button{background:var(--panel-2);color:var(--ink);border:1px solid var(--line-2);border-radius:var(--r);cursor:pointer;min-height:40px;padding:8px 12px}#view input:not([type=checkbox]):not([type=radio]):not([class]),#view select:not([class]),#view textarea:not([class]){background:var(--panel);color:var(--ink);border:1px solid var(--line-2);border-radius:var(--r);min-width:0;max-width:100%;padding:10px}#view .scard .btnrow{flex-wrap:wrap}#view .scard,#view .filters,#view .page-heading{min-width:0}#view .scard>header{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}#view .scard pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:12rem;overflow:auto}#view .filters{flex-wrap:wrap;align-items:center;gap:8px;padding:0 16px 12px;display:flex}#view .page-heading>div{flex-wrap:wrap;gap:8px;display:flex}@media (width<=1023px){#view button:not([class]){min-height:44px}}.first-run{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg,14px);max-width:34rem;color:var(--ink);margin:24px auto;padding:20px}.first-run h2{margin:0 0 4px;font-size:1.15rem}.first-run-sub{color:var(--ink-dim);margin:0 0 16px;font-size:.92rem}.first-run-error{color:var(--amber);margin:0 0 12px;font-size:.88rem}.first-run-checklist{gap:8px;margin:0 0 18px;padding:0;list-style:none;display:grid}.first-run-checklist li{background:var(--panel-2);border:1px solid var(--line-2);border-radius:10px;flex-wrap:wrap;align-items:baseline;gap:8px;min-width:0;padding:8px 10px;display:flex}.first-run-checklist li.ok{border-color:var(--green)}.first-run-mark{text-align:center;flex:none;width:1.2em;font-weight:700}.first-run-checklist li.ok .first-run-mark{color:var(--green)}.first-run-checklist li.pending .first-run-mark{color:var(--ink-dim)}.first-run-label{font-weight:600}.first-run-detail{color:var(--ink-dim);overflow-wrap:anywhere;flex-basis:100%;font-size:.85rem}.first-run-cta{border-radius:var(--r-lg,14px);background:var(--accent);width:100%;min-height:48px;color:var(--on-accent);cursor:pointer;border:0;font-size:1rem;font-weight:600}.first-run-hint{color:var(--ink-dim);margin:12px 0 0;font-size:.82rem}.first-run-connect-link{border:1px dashed var(--line-2);border-radius:var(--r,10px);width:100%;color:var(--ink-dim);text-align:center;cursor:pointer;background:0 0;margin:14px 0 0;padding:10px;font-size:.85rem;display:block}.first-run-connect-link:hover{color:var(--ink);border-color:var(--accent)}@media (width<=420px){.first-run{max-width:none;margin:12px;padding:16px}}.connect-tools{margin:0 0 20px}.connect-remote-toggle{color:var(--ink-dim);align-items:center;gap:8px;margin:8px 0 14px;font-size:12.5px;display:flex}.connect-tools-grid{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;min-width:0;display:grid}.connect-client{min-width:0}.connect-status{overflow-wrap:anywhere}.connect-result{overflow-wrap:anywhere;margin:8px 0 0;font-size:12.5px}.connect-result.ok{color:var(--green)}.connect-result.err{color:var(--amber)}.connect-snippet{min-width:0;margin-top:10px}.connect-snippet pre{white-space:pre-wrap;overflow-wrap:anywhere;max-width:100%;margin:0 0 6px;overflow-x:auto}.connect-deeplink{align-items:center;text-decoration:none;display:inline-flex}@media (width<=480px){.connect-tools-grid{grid-template-columns:1fr}}.agent-catalog{gap:8px;display:grid}.agent-catalog-list{border:1px solid var(--line);border-radius:10px;flex-direction:column;gap:4px;max-height:min(360px,48dvh);padding:2px;display:flex;overflow:auto}.agent-catalog-group{flex-direction:column;flex:none;gap:4px;display:flex}.agent-catalog-group h3{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-dim);margin:8px 6px 2px;font-size:11px;font-weight:600}.agent-settings-dialog .agent-catalog-item{text-align:left;background:0 0;border:1px solid #0000;flex:none;align-items:flex-start;gap:10px;width:100%;min-height:0;padding:8px 9px;display:flex}.agent-settings-dialog .agent-catalog-item:hover:not(:disabled){background:var(--panel);border-color:var(--line)}.agent-settings-dialog .agent-catalog-item[aria-pressed=true]{border-color:var(--accent);background:var(--accent-wash)}.agent-settings-dialog .agent-catalog-item:disabled{opacity:.55;cursor:not-allowed}.agent-catalog-icon{background:var(--line-2);width:30px;height:30px;color:var(--ink);letter-spacing:-.02em;border-radius:8px;flex:none;place-items:center;font-size:12.5px;font-weight:700;display:grid}.agent-catalog-custom .agent-catalog-icon{border:1px dashed var(--line);color:inherit;background:0 0}.agent-catalog-text{gap:3px;min-width:0;display:grid}.agent-catalog-meta{color:var(--ink-dim);overflow-wrap:anywhere;font-size:12px}.agent-catalog-chips{flex-wrap:wrap;gap:4px;display:flex}.agent-cap{border:1px solid var(--line);border-radius:999px;padding:3px 6px;font-size:10.5px;line-height:1}.agent-cap.on{color:var(--green);border-color:color-mix(in srgb,var(--green) 45%,transparent)}.agent-cap.off{color:var(--ink-faint)}.devices-panel h4{margin:18px 0 8px}.pairing-hint{border:1px solid var(--amber);color:var(--amber);border-radius:8px;padding:10px 12px}.devices-toggle{align-items:center;gap:8px;margin:10px 0;display:flex}.devices-idle{margin:10px 0}.devices-idle input{width:6em;margin-left:8px}.pairing-mint{border:1px solid var(--border);border-radius:10px;flex-wrap:wrap;align-items:flex-start;gap:16px;margin:14px 0;padding:14px;display:flex}.pairing-qr{border-radius:6px;flex:none}.pairing-mint-code{flex:220px;min-width:0}.pairing-code-text{letter-spacing:.03em;word-break:break-all;margin:6px 0;font-size:1.1rem;display:block}.device-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.device-row{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:10px;padding:8px 0;display:flex}.device-info{overflow-wrap:anywhere;flex-direction:column;gap:2px;min-width:0;display:flex}@media (width<=480px){.pairing-mint{text-align:center;flex-direction:column;align-items:center}}.mp-grid{gap:6px;margin:8px 0;display:grid}.mp-row{grid-template-columns:minmax(8rem,1.6fr) repeat(3,minmax(4.5rem,1fr)) auto;align-items:center;gap:6px;display:grid}.mp-row input{box-sizing:border-box;width:100%;min-width:0}.mp-head{opacity:.75;font-size:.8em}.model-price-missing{border:1px dashed var(--amber);border-radius:6px;grid-template-columns:1fr auto;padding:6px 8px}@media (width<=560px){.mp-head{display:none}.mp-row:not(.model-price-missing){grid-template-columns:repeat(3,minmax(0,1fr)) auto}.mp-row:not(.model-price-missing)>:first-child{grid-column:1/-1}}.accounts-list{flex-direction:column;gap:6px;margin:8px 0;padding:0;list-style:none;display:flex}.accounts-row{border:1px solid var(--line);border-radius:9px;flex-wrap:wrap;align-items:center;gap:6px 14px;padding:8px 10px;display:flex}.accounts-who{overflow-wrap:anywhere;flex:200px;min-width:0}.accounts-state{color:var(--ink-dim);flex-wrap:wrap;flex:2 240px;gap:4px 12px;font-size:12px;display:flex}.accounts-actions{gap:6px;display:flex}.limit-policy-swap{align-items:flex-start;gap:8px;margin:6px 0;display:flex}.limit-policy-swap input{flex:none;margin-top:3px}.plugins-page{gap:14px;display:grid}.plugins-page h3{margin:0}.plugins-page h4{margin:10px 0 6px;font-size:13px}.plugins-intro,.plugin-desc{color:var(--ink-dim);overflow-wrap:anywhere;margin:0;font-size:13px;line-height:1.5}.plugin-add{gap:10px;display:grid}.plugin-add h4{margin:0}.plugin-add .segmented{flex-wrap:wrap}.plugin-add-form,.plugin-search{gap:8px;display:grid}.plugin-add-form label{color:var(--ink-dim);gap:4px;font-size:12.5px;display:grid}.plugin-add-form input,.plugin-search input,.plugin-secrets input{border:1px solid var(--line-2);background:var(--bg-soft);min-height:38px;color:var(--ink);font:13.5px var(--sans);box-sizing:border-box;border-radius:8px;width:100%;padding:7px 10px}.plugin-add-form .b,.plugin-search .b{justify-self:start}.plugin-list{gap:10px;display:grid}.plugin-card-head{flex-wrap:wrap;align-items:center;gap:6px 8px;display:flex}.plugin-card-head h4{overflow-wrap:anywhere;margin:0;font-size:14.5px}.plugin-version{font:12px var(--mono);color:var(--ink-faint)}.plugin-badge,.plugin-status,.plugin-chip,.plugin-new{border:1px solid var(--line);color:var(--ink-dim);white-space:nowrap;border-radius:999px;padding:4px 7px;font-size:11px;line-height:1}.plugin-status.active{color:var(--green);border-color:color-mix(in srgb, var(--green) 45%, transparent)}.plugin-status.modified,.plugin-status.needs_consent,.plugin-status.missing{color:var(--red);border-color:color-mix(in srgb, var(--red) 45%, transparent)}.plugin-status.disabled{color:var(--ink-faint)}.plugin-new{color:var(--amber);border-color:color-mix(in srgb, var(--amber) 45%, transparent);margin-left:6px}.plugin-chips{flex-wrap:wrap;gap:5px;margin:8px 0 0;display:flex}.plugin-chip.scope{color:var(--cyan)}.plugin-card.status-disabled .plugin-card-head h4{color:var(--ink-dim)}.plugin-warning{color:var(--amber);overflow-wrap:anywhere;margin:6px 0 0;font-size:12.5px}.plugin-note{color:var(--ink-dim);margin:6px 0 0;font-size:12.5px}.plugin-loading{color:var(--ink-faint);font-size:13px}.plugin-caps{gap:6px;margin:0;padding:0;list-style:none;display:grid}.plugin-caps>li{border:1px solid var(--line);background:var(--bg-soft);border-radius:8px;padding:8px 10px}.plugin-caps>li.risky{border-color:color-mix(in srgb, var(--amber) 50%, var(--line))}.plugin-caps ul{gap:3px;margin:6px 0 0;padding-left:18px;display:grid}.plugin-caps code,.plugin-facts code,.plugin-listing code,.plugin-sources code{font:11.5px var(--mono);overflow-wrap:anywhere;word-break:break-word}.plugin-caps-none{color:var(--ink-dim);margin:0;font-size:13px}.plugin-facts{grid-template-columns:auto 1fr;gap:4px 10px;margin:8px 0;font-size:12.5px;display:grid}.plugin-facts dt{color:var(--ink-faint)}.plugin-facts dd{overflow-wrap:anywhere;min-width:0;margin:0}.plugin-detail{border-top:1px solid var(--line);gap:6px;margin-top:10px;padding-top:8px;display:grid}.plugin-detail-row{gap:2px;margin:4px 0;font-size:12.5px;display:grid}.plugin-detail-row span{color:var(--ink-dim);overflow-wrap:anywhere}.plugin-scope,.plugin-secrets{border:1px solid var(--line);border-radius:8px;gap:6px;margin:6px 0 0;padding:8px 10px;display:grid}.plugin-scope legend,.plugin-secrets legend{padding:0 4px;font-size:12.5px;font-weight:600}.plugin-scope label,.plugin-secrets label{flex-wrap:wrap;align-items:center;gap:8px;font-size:13px;display:flex}.plugin-scope-projects{gap:4px;padding-left:22px;display:grid}.plugin-scope .b{justify-self:start}.plugin-secret-row{gap:6px;width:100%;display:flex}.plugin-secret-row input{flex:1;min-width:0}.plugin-runs{gap:4px;margin:0;padding:0;font-size:12.5px;list-style:none;display:grid}.plugin-runs li.failed b{color:var(--red)}.plugin-runs li.ok b{color:var(--green)}.plugin-run-msg{color:var(--ink-dim);font:11.5px var(--mono);overflow-wrap:anywhere}.plugin-listing{border:1px solid var(--line);border-radius:8px;justify-content:space-between;align-items:flex-start;gap:10px;padding:8px 10px;display:flex}.plugin-listing>div{overflow-wrap:anywhere;min-width:0}.plugin-sources{gap:6px;margin:0;padding:0;list-style:none;display:grid}.plugin-sources li{flex-wrap:wrap;align-items:center;gap:8px;font-size:13px;display:flex}.plugin-sources li .b{margin-left:auto}.plugin-local .plugin-detail-row{margin:6px 0 0}dialog.plugin-consent{border:1px solid var(--line-2);background:var(--panel);width:min(620px,100vw - 24px);max-height:calc(100dvh - 24px);color:var(--ink);box-sizing:border-box;border-radius:14px;padding:0;display:none}dialog.plugin-consent[open]{flex-direction:column;display:flex}dialog.plugin-consent::backdrop{background:color-mix(in srgb, var(--scrim) 55%, transparent)}.plugin-consent-head{justify-content:space-between;align-items:center;gap:10px;padding:14px 16px 6px;display:flex}.plugin-consent-head h3{overflow-wrap:anywhere;margin:0;font-size:16px}.plugin-consent-head .x{color:var(--ink-dim);cursor:pointer;background:0 0;border:0;min-width:40px;min-height:40px;font-size:22px}.plugin-consent-body{gap:6px;padding:0 16px 8px;font-size:13px;display:grid;overflow:auto}.plugin-consent-body p{overflow-wrap:anywhere;margin:0}.plugin-consent-id code{font:12px var(--mono)}.plugin-allow{background:var(--accent-wash);border-radius:8px;align-items:flex-start;gap:8px;margin-top:8px;padding:10px;font-weight:600;display:flex}.plugin-allow input{margin-top:2px}.plugin-consent-actions{border-top:1px solid var(--line);justify-content:flex-end;margin:0;padding:10px 16px 14px}.plugin-consent-actions .primary{background:var(--accent-fill);color:var(--on-fill);border-color:var(--accent-fill)}.plugin-consent-actions .primary:disabled{opacity:.5;cursor:not-allowed}@media (width<=600px){.plugin-listing{flex-direction:column}.plugin-consent-actions .b{flex:1}}.machine-remote{flex-direction:column;gap:8px;min-width:0;margin-top:8px;display:flex}.remote-tabs{flex-wrap:wrap;gap:6px;display:flex}.remote-tabs button{border-radius:999px;min-height:32px;padding:0 10px;font-size:12.5px}.remote-tabs button[aria-selected=true]{background:var(--accent-wash);color:var(--accent-soft);border-color:var(--accent)}.remote-form{gap:8px;max-width:640px;display:grid}.remote-form label{color:var(--ink-dim);gap:4px;font-size:12.5px;display:grid}.remote-form label.check,.check{align-items:center;gap:8px;display:flex}.remote-form label.check input,.check input{width:auto;min-height:0}.remote-row{flex-wrap:wrap;align-items:center;gap:8px;min-width:0;display:flex}.remote-row input{flex:180px;min-width:0}.remote-row code,.remote-table code{overflow-wrap:anywhere}.remote-table{border-collapse:collapse;width:100%;font-size:12.5px}.remote-table td{border-bottom:1px solid var(--line);vertical-align:middle;padding:5px 6px}.remote-listening{gap:4px;margin:0;padding:0;font-size:12.5px;list-style:none;display:grid}.remote-listening li{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.remote-files{gap:8px;display:grid}.b.disabled{opacity:.5;pointer-events:none}.editor-choice{color:var(--ink-dim);align-items:center;gap:8px;font-size:12.5px;display:flex}.editor-choice select{width:auto}.conn{color:var(--ink-dim);flex-wrap:wrap;align-items:center;gap:6px;font-size:12px;display:inline-flex}.conn-dot{background:var(--ink-faint);border-radius:50%;flex:none;width:8px;height:8px}.conn-connected .conn-dot{background:var(--green)}.conn-reconnecting .conn-dot{background:var(--amber);animation:1.2s ease-in-out infinite conn-pulse}.conn-down .conn-dot{background:var(--red)}.conn-down{color:var(--red)}.conn-error{color:var(--ink-faint);overflow-wrap:anywhere;flex-basis:100%}@keyframes conn-pulse{50%{opacity:.35}}@media (prefers-reduced-motion:reduce){.conn-reconnecting .conn-dot{animation:none}}.ssh-hosts{gap:6px;max-height:55vh;margin:8px 0;padding:0;list-style:none;display:grid;overflow:auto}.ssh-hosts li{border:1px solid var(--line);border-radius:var(--r);flex-wrap:wrap;justify-content:space-between;gap:6px;padding:8px 10px;display:flex}.ssh-hosts label{flex-wrap:wrap;align-items:center;gap:8px;min-width:0;display:flex}.ssh-hosts label input{width:auto;min-height:0}.ssh-tags{flex-wrap:wrap;gap:4px;display:flex}.sandbox-fields{gap:8px;display:grid}.sandbox-fields label{color:var(--ink-dim);gap:4px;font-size:12.5px;display:grid}.sandbox-yaml{max-height:260px;font:12px/1.5 var(--mono);background:var(--bg-soft);border:1px solid var(--line);border-radius:var(--r);white-space:pre-wrap;overflow-wrap:anywhere;padding:8px 10px;overflow:auto}.sandbox-hooks{gap:6px;display:grid}.sandbox-list,.grid-span{grid-column:1/-1}.sandbox-list{margin-top:14px}.sandbox-list h3{flex:1;margin:0}.sandbox-cards{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:8px;margin-top:8px;display:grid}.sandbox-card{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);min-width:0;padding:10px 12px}.sandbox-card header{justify-content:space-between;align-items:center;gap:8px;display:flex}.sandbox-card header b{overflow-wrap:anywhere;font:12.5px var(--mono)}.sandbox-card p{margin:6px 0;font-size:12px}.sandbox-card.s-destroyed{opacity:.6}.provider-usage{gap:10px;margin-bottom:18px;display:grid}.pu-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.pu-head h4{margin:0}.pu-head label{color:var(--ink-dim);align-items:center;gap:6px;font-size:12.5px;display:flex}.pu-head input{width:64px}.pu-alert{border-radius:var(--r);border:1px solid var(--warn-border);background:var(--warn-bg);color:var(--amber);margin:0;padding:8px 12px;font-size:13px}.pu-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px;display:grid}.pu-card{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--panel);align-content:start;gap:8px;min-width:0;padding:12px 14px;display:grid}.pu-card.warn{border-color:color-mix(in srgb, var(--amber) 55%, transparent);box-shadow:0 0 0 1px color-mix(in srgb, var(--amber) 20%, transparent)}.pu-card.idle{opacity:.7}.pu-card header{justify-content:space-between;align-items:center;gap:8px;display:flex}.pu-card h4{margin:0;font-size:14px}.pu-figures{flex-direction:column;display:flex}.pu-figures b{color:var(--ink);font-variant-numeric:tabular-nums;font-size:20px}.pu-figures span{font-size:11.5px}.pu-bars{align-items:flex-end;gap:2px;height:44px;display:flex}.pu-bars span{flex:1;align-items:flex-end;min-width:2px;height:100%;display:flex}.pu-bars i{background:var(--accent-soft);opacity:.85;border-radius:2px 2px 0 0;width:100%;display:block}.pu-windows{gap:6px;display:grid}.pu-meter{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:2px 8px;font-size:12px;display:grid}.pu-meter-label{color:var(--ink-dim);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.pu-meter-value{text-align:right;font-variant-numeric:tabular-nums}.pu-meter i{background:var(--line);border-radius:3px;grid-column:1/-1;height:6px;display:block;position:relative;overflow:visible}.pu-meter i b{background:var(--green);border-radius:3px;position:absolute;inset:0 auto 0 0}.pu-meter.warn i b{background:var(--amber)}.pu-meter i em{background:var(--ink-faint);opacity:.7;width:2px;position:absolute;top:-2px;bottom:-2px}.pu-nowindow{margin:0;font-size:12px}.pu-accounts tr.warn td{color:var(--amber)}.pu-costs summary{cursor:pointer;font-size:13px;font-weight:600}.pu-costs table{margin-top:6px}.pu-costs th{text-align:left;color:var(--ink-faint);padding:4px 6px;font-size:11.5px;font-weight:500}.pu-costs{overflow-x:auto}.race-row{border:1px dashed var(--line);border-radius:var(--r);flex-wrap:wrap;align-items:center;gap:6px;margin:6px 0;padding:8px 10px;display:flex}.race-row b{margin-right:4px}.race-row button{min-height:32px;padding:0 10px}.race-row button.on{background:var(--accent-wash);border-color:var(--accent);color:var(--accent-soft)}@media (width<=700px){.remote-table td:nth-child(3){display:none}.pu-grid,.sandbox-cards{grid-template-columns:1fr}.pu-costs table{font-size:12px}}.settings-grid>.rowcard:has(.remote-form,.remote-ports,.remote-files,.sandbox-hooks){grid-column:1/-1}.pair-page{background:var(--bg);min-height:100dvh;color:var(--ink);justify-content:center;align-items:center;padding:24px 16px;display:flex}.pair-card{flex-direction:column;gap:14px;width:100%;max-width:380px;display:flex}.pair-card h1{margin:0;font-size:1.4rem}.pair-card p{color:var(--ink-dim);margin:0;font-size:.92rem}.pair-card form{flex-direction:column;gap:12px;display:flex}.pair-card label{color:var(--ink-dim);flex-direction:column;gap:6px;font-size:.85rem;display:flex}.pair-card input{border:1px solid var(--border);background:var(--bg-alt);color:var(--ink);border-radius:8px;padding:10px 12px;font-size:1rem}.pair-card button{background:var(--accent);color:var(--on-accent);cursor:pointer;border:none;border-radius:8px;padding:11px 14px;font-size:1rem}.pair-card button:disabled{opacity:.6;cursor:default}.pair-error{color:var(--amber);margin:0;font-size:.85rem}.sheet.review-workspace{width:min(1400px,100vw - 24px)}.sheet.review-workspace label.dfile-viewed-toggle{gap:5px;margin:0;display:inline-flex}.sheet.review-workspace label.review-checkbox{display:flex}.sheet.review-workspace .sheet-head{top:-20px}.dcode .dl-row,.dcode .dl-split{white-space:pre;min-width:max-content;padding:0;display:flex}.dcode .dl-row>.dl-text,.dcode .dl-half>.dl-text{flex:1;padding:0 12px 0 8px}.dcode .dl-num{text-align:right;width:3.4em;color:var(--ink-faint);-webkit-user-select:none;user-select:none;opacity:.8;flex:none;padding-right:6px}.dcode .dl-auth{flex:none;align-self:stretch;width:4px;margin-right:2px}.dcode .dl-auth-agent{background:var(--accent)}.dcode .dl-auth-human{background:var(--green)}.dcode .dl-hunk{align-items:center;gap:8px;position:sticky;left:0}.dcode .dl-hunk>.dl-text{padding-left:12px}.dcode .dl-hunk-current{outline:2px solid var(--accent);outline-offset:-2px}.dl-hunk-actions{white-space:normal;gap:6px;padding:2px 8px;display:inline-flex}.dl-hunk-actions .b{min-height:26px;padding:2px 9px;font-size:11.5px}.dcode .dl-meta{color:var(--ink-faint)}.wrapped .dcode .dl-row,.wrapped .dcode .dl-split{min-width:0}.wrapped .dcode .dl-text{white-space:pre-wrap;overflow-wrap:anywhere;min-width:0}.dcode .dl-split{min-width:0}.dcode .dl-half{flex:50%;min-width:0;display:flex;overflow:hidden}.dcode .dl-half+.dl-half{border-left:1px solid var(--line)}.dcode .dl-half>.dl-text{overflow-x:auto}.diff-split .dcode{overflow-x:hidden}.dcode .dl-empty{background:repeating-linear-gradient(135deg, transparent 0 6px, color-mix(in srgb, var(--scrim) 6%, transparent) 6px 12px)}.dcode .dl-half.dl-commentable:hover{outline:1px dashed var(--accent-soft);outline-offset:-1px;cursor:pointer}.dcode .dl-comment-badge{float:none;align-self:center;margin:0 6px}.dcode .dl-notes{white-space:normal;background:var(--bg-soft);gap:6px;padding:6px 12px 8px 4.5em;display:grid}.dl-note{border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:var(--r);background:var(--panel);font:400 13px/1.5 var(--sans);max-width:70ch;padding:6px 10px}.dl-note[data-state=addressed]{border-left-color:var(--green)}.dl-note[data-state=open]{border-left-color:var(--amber)}.dl-note p{white-space:pre-wrap;margin:4px 0 0}.dl-note-head{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.dl-note-state{font:600 10.5px var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-dim);margin-right:auto}.dl-note-state.s-addressed{color:var(--green)}.dl-note-state.s-open{color:var(--amber)}.dl-note-state.s-resolved{color:var(--ink-faint)}.dl-note-btn{min-height:26px;padding:2px 9px;font-size:11.5px}.dfile summary{flex-wrap:wrap;row-gap:4px}.dfile-path{overflow-wrap:anywhere;min-width:0}.dfile-viewed>summary .dfile-path{color:var(--ink-dim)}.dfile-authors{font:600 11px var(--sans);gap:8px;display:inline-flex}.a-agent{color:var(--accent-soft)}.a-human{color:var(--green)}.dfile-actions{gap:6px;display:inline-flex}.dfile-viewed-toggle{font:500 11.5px var(--sans);color:var(--ink-dim);border:1px solid var(--line);cursor:pointer;border-radius:7px;align-items:center;gap:5px;padding:3px 8px;display:inline-flex}.dfile-viewed-toggle input{width:auto;margin:0}.img-diff{white-space:normal;font-family:var(--sans);padding:10px 12px}.img-diff-modes{flex-wrap:wrap;gap:6px;margin-bottom:8px;display:flex}.img-diff-modes .b{min-height:30px;padding:3px 10px;font-size:12px}.img-diff-modes .b[aria-pressed=true]{border-color:var(--accent);color:var(--accent-soft);background:var(--accent-wash)}.img-diff-side{grid-template-columns:1fr 1fr;gap:10px;display:grid}.img-diff figure{margin:0}.img-diff figcaption{font:600 11px var(--sans);color:var(--ink-dim);margin-bottom:4px}.img-diff img{min-width:96px;image-rendering:pixelated;background:repeating-conic-gradient(color-mix(in srgb, var(--scrim) 18%, transparent) 0 25%, transparent 0 50%) 0 0 / 16px 16px;max-width:100%;max-height:420px;display:block}.img-diff-stack{max-width:100%;display:inline-block;position:relative}.img-diff-stack .img-diff-top{object-fit:contain;width:100%;height:100%;position:absolute;inset:0}.img-diff-divider{background:var(--accent);pointer-events:none;width:2px;position:absolute;top:0;bottom:0}.img-diff input[type=range]{width:min(420px,100%);margin-top:8px;display:block}.img-diff-text{margin:0 12px 10px}.img-diff-note{padding:10px 12px}.review-tabs{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:6px;margin:4px 0 10px;display:flex}.review-tab{color:var(--ink-dim);font:600 13px var(--sans);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;min-height:38px;padding:8px 10px}.review-tab[aria-selected=true]{color:var(--ink);border-bottom-color:var(--accent)}.review-tab.warn{color:var(--amber)}.review-tabs select{max-width:50vw;margin-left:auto}.review-toolbar-sticky{z-index:4;background:var(--bg-soft);flex-wrap:wrap;margin:0 0 8px;padding:6px 0;position:sticky;top:44px}.review-toolbar-sticky .wrapbtn{margin-left:0}.review-toolbar-sticky .focus-start{margin-left:auto}.hunk-nav{gap:4px;display:inline-flex}.seg{border:1px solid var(--line);border-radius:8px;display:inline-flex;overflow:hidden}.seg button{white-space:nowrap;background:var(--panel);color:var(--ink-dim);min-height:32px;font:500 11.5px var(--sans);cursor:pointer;border:0;padding:6px 10px}.seg button+button{border-left:1px solid var(--line)}.seg button[aria-pressed=true]{background:var(--accent-wash);color:var(--accent-soft)}.authors-legend,.review-round-summary{margin:0 0 8px}.review-body{display:block}.review-body.with-tree{grid-template-columns:minmax(200px,260px) minmax(0,1fr);align-items:start;gap:12px;display:grid}.review-pane{min-width:0}.ftree{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);max-height:calc(100dvh - 150px);font-size:12.5px;position:sticky;top:104px;overflow:auto}.ftree-head{border-bottom:1px solid var(--line);flex-direction:column;gap:4px;padding:8px;display:flex}.ftree-head input{box-sizing:border-box;background:var(--bg);width:100%;color:var(--ink);border:1px solid var(--line);border-radius:7px;padding:6px 8px}.ftree ul{margin:0;padding:0;list-style:none}.ftree-dir,.ftree-file{text-align:left;width:100%;color:var(--ink);cursor:pointer;font:400 12.5px var(--mono);background:0 0;border:0;align-items:center;gap:6px;min-height:30px;padding:5px 8px;display:flex}.ftree-dir{color:var(--ink-dim)}.ftree-file:hover,.ftree-dir:hover{background:var(--bg-soft)}.ftree-file[aria-current=true]{background:var(--accent-wash)}.ftree-file.viewed .ftree-name{color:var(--ink-faint)}.ftree-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.ftree-pm{white-space:nowrap;font-size:11px}.ftree-pm .a{color:var(--green)}.ftree-pm .d{color:var(--red)}.ftree-comments{color:var(--accent-soft);font-size:11px}.ftree-check{color:var(--green)}.review-rounds{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);margin-top:14px;padding:10px 12px}.review-rounds summary{cursor:pointer;font:600 12.5px var(--sans);color:var(--ink-dim)}.review-round h4{color:var(--ink-dim);margin:12px 0 6px;font-size:12.5px}.review-round ul{gap:8px;margin:0;padding:0;list-style:none;display:grid}.review-round-item{border:1px solid var(--line);border-radius:var(--r);background:var(--bg);padding:8px 10px}.review-round-item p{margin:6px 0;font-size:13px}.review-rounds-bulk{margin-top:8px}.git-branch{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:10px;display:flex}.git-branch .b{margin-left:auto}.git-operation{border:1px solid color-mix(in srgb, var(--amber) 45%, transparent);background:color-mix(in srgb, var(--amber) 8%, transparent);border-radius:var(--r);flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px;padding:10px 12px;font-size:13px;display:flex}.git-operation-actions{flex-wrap:wrap;gap:8px;margin-left:auto;display:inline-flex}.git-section h3{justify-content:space-between;align-items:center;gap:8px;margin:14px 0 6px;font-size:13.5px;display:flex}.git-section h3 .b{min-height:30px;padding:3px 10px;font-size:12px}.git-files{gap:6px;margin:0;padding:0;list-style:none;display:grid}.git-file{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);overflow:hidden}.git-file .diff{padding:0 8px 8px}.git-file .dfile{margin:0}.git-file-row{flex-wrap:wrap;align-items:center;gap:6px;padding:4px 6px;display:flex}.git-file-row .b{min-height:30px;padding:3px 10px;font-size:12px}.git-file-name{min-width:0;color:var(--ink);text-align:left;cursor:pointer;font:400 12.5px var(--mono);background:0 0;border:0;flex:1;align-items:center;gap:8px;padding:6px 4px;display:flex}.git-path{overflow-wrap:anywhere;min-width:0}.git-status{color:var(--amber);flex:none;width:1.2em;font-weight:700}.confirm-inline{flex-wrap:wrap;align-items:center;gap:6px;display:inline-flex}.confirm-prompt{color:var(--ink-dim);max-width:46ch;font-size:12.5px}.review-commit-form textarea.commit-message{min-height:76px;font-family:var(--mono);font-size:13px}.review-commit-form .btnrow{margin-top:8px}.commit-scope{margin:10px 0 6px}.git-guard,.git-hook-failure,.git-force{border:1px solid color-mix(in srgb, var(--red) 40%, transparent);background:color-mix(in srgb, var(--red) 7%, transparent);border-radius:var(--r);margin-top:12px;padding:10px 12px;font-size:13px}.git-force{border-color:color-mix(in srgb, var(--amber) 45%, transparent);background:color-mix(in srgb, var(--amber) 7%, transparent)}.git-guard p,.git-hook-failure p{margin:0 0 8px}.conflict-files{flex-wrap:wrap;gap:6px;margin:8px 0 12px;display:flex}.conflict-file{font-family:var(--mono);font-size:12px}.conflict-file[aria-selected=true]{border-color:var(--accent);color:var(--accent-soft);background:var(--accent-wash)}.conflict-regions{gap:12px;margin:12px 0;padding:0;list-style:none;display:grid}.conflict-region{border:1px solid var(--line);border-radius:var(--r);background:var(--panel);padding:10px}.conflict-region[data-choice=unresolved]{border-color:color-mix(in srgb, var(--amber) 50%, transparent)}.conflict-region-head{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:8px;display:flex}.conflict-region-head .btnrow{flex-wrap:wrap;gap:6px;margin-left:auto;display:inline-flex}.conflict-region-head .b[aria-pressed=true]{border-color:var(--accent);color:var(--accent-soft);background:var(--accent-wash)}.conflict-sides{grid-template-columns:1fr 1fr;gap:8px;display:grid}.conflict-sides.three{grid-template-columns:1fr 1fr 1fr}.conflict-sides figure{min-width:0;margin:0}.conflict-sides figcaption{font:600 11px var(--sans);color:var(--ink-dim);overflow-wrap:anywhere;margin-bottom:4px}.conflict-sides pre{background:var(--bg);font:400 12px/1.5 var(--mono);white-space:pre;border-radius:6px;min-height:1.5em;margin:0;padding:6px 8px;overflow-x:auto}.conflict-ours pre{box-shadow:inset 3px 0 var(--cyan)}.conflict-theirs pre{box-shadow:inset 3px 0 var(--accent)}.conflict-base pre{box-shadow:inset 3px 0 var(--ink-faint)}textarea.conflict-result{font-family:var(--mono);white-space:pre;font-size:12.5px}.linkish{color:var(--accent-soft);cursor:pointer;font:inherit;background:0 0;border:0;padding:0;text-decoration:underline}.focus-review{z-index:60;background:var(--bg);padding:env(safe-area-inset-top,0) env(safe-area-inset-right,0) 0 env(safe-area-inset-left,0);flex-direction:column;display:flex;position:fixed;inset:0}.focus-bar,.focus-nav{background:var(--bg-soft);flex:none;align-items:center;gap:8px;padding:8px 10px;display:flex}.focus-bar{border-bottom:1px solid var(--line)}.focus-nav{border-top:1px solid var(--line);padding-bottom:calc(8px + env(safe-area-inset-bottom,0px));flex-wrap:wrap;justify-content:center}.focus-nav .b,.focus-bar .b{min-height:40px}.focus-title{flex-direction:column;flex:1;min-width:0;display:flex}.focus-count{font:600 11px var(--sans);color:var(--ink-dim)}.focus-path{font:500 13px var(--mono);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.focus-body{overscroll-behavior:contain;flex:1;padding:8px;overflow:auto}.focus-body .dfile summary{z-index:2;background:var(--panel);position:sticky;top:-8px}@media (width<=760px){.sheet.review-workspace{border-radius:14px 14px 0 0;width:100vw;max-width:100vw;max-height:100dvh;margin:auto 0 0;padding:12px}.sheet.review-workspace .sheet-head{top:-12px}.review-toolbar-sticky{position:static}.review-body.with-tree{display:block}.ftree{max-height:40dvh;margin-bottom:10px;position:static}.conflict-sides,.conflict-sides.three,.img-diff-side{grid-template-columns:1fr}.dcode .dl-num{width:2.6em;padding-right:4px}.dcode .dl-notes{padding-left:12px}.diff-split .dcode .dl-text{white-space:pre-wrap;overflow-wrap:anywhere}.review-toolbar-sticky{gap:6px}.review-toolbar-sticky .focus-start{flex-basis:100%;min-height:42px}.focus-nav .b{flex:22%;padding-left:6px;padding-right:6px;font-size:12.5px}}.review-tray.review-tray-empty{box-shadow:none;border-radius:var(--r);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin:14px 0 0;display:flex;position:static}@media (width<=480px){.sheet.review-workspace .review-tray:not(.review-tray-empty){margin:16px -12px -12px}}.review-tray-item{min-width:0;overflow:hidden}.review-tray-code{white-space:pre;max-width:100%}@media (width<=480px){.sheet.review-workspace .review-tray-list ul{max-height:28dvh;overflow:auto}.sheet.review-workspace .review-tray-summary textarea{min-height:48px}}.dcode .dl-check{flex:none;justify-content:center;align-items:center;width:26px;display:inline-flex}.dcode .dl-check input{cursor:pointer;width:15px;height:15px;margin:0}.dcode .dl-checked{box-shadow:inset 3px 0 var(--accent)}@media (pointer:coarse){.dcode .dl-check{width:34px}.dcode .dl-check input{width:20px;height:20px}}.sheet.review-workspace:has(.dl-composer textarea:focus) .review-tray{box-shadow:none;position:static}.status-badge{border:1px solid var(--line-2);color:var(--ink-dim);letter-spacing:.04em;text-transform:none;white-space:nowrap;border-radius:999px;padding:1px 7px;font-size:10.5px;font-weight:600;line-height:16px;display:inline-block}.status-badge[data-state=working]{color:var(--accent-soft);border-color:color-mix(in srgb, var(--accent-soft) 45%, var(--bg))}.status-badge[data-state=needs_you]{color:var(--amber);border-color:var(--amber)}.status-badge[data-state=idle]{color:var(--ink-dim)}.status-badge[data-state=ended]{color:var(--ink-faint);border-style:dashed}.status-badge[data-reason=setup_failed]{color:var(--red);border-color:color-mix(in srgb, var(--red) 55%, var(--bg))}.scard[data-state=needs_you]{border-color:color-mix(in srgb, var(--amber) 55%, var(--line))}.approval-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.approval-card.compact{margin:8px 0 0;padding:10px 12px}.approval-card .approval-summary{background:var(--bg);color:var(--ink);font:400 12px/1.45 var(--mono);white-space:pre-wrap;word-break:break-word;border-radius:8px;margin:2px 0 4px;padding:6px 8px;display:block}.approval-context{color:var(--ink-dim);font-size:12px}.approval-actions>button{align-items:center;gap:8px;display:inline-flex}.approval-kbd{font:600 10px/1 var(--mono);opacity:.75;border:1px solid;border-radius:4px;padding:2px 5px}.approval-scope{color:var(--ink-dim);margin:6px 0 0;font-size:12px}.approval-links{flex-wrap:wrap;gap:8px;display:flex}.approvals-page .approval-card{margin-bottom:14px}@media (hover:none) and (pointer:coarse){.approval-kbd{display:none}}#nav-overflow .action-menu-panel>button{text-align:left;flex-direction:column;align-items:flex-start;gap:2px;display:flex}#nav-overflow .more-title{color:var(--ink);font-weight:600}#nav-overflow .more-detail{color:var(--ink-dim);font-size:11.5px;font-weight:400}#nav-overflow>summary{position:relative}@media (width>=1024px){#tabbar{overflow:hidden auto}#tabbar .tab{flex-shrink:0}#tabbar [data-tab=settings]{margin-top:auto}}@media (width<=1023px){#nav-overflow>.action-menu-panel{min-width:260px}}.empty-state{max-width:640px}.getting-started{border:1px solid var(--line);background:var(--panel);border-radius:14px;max-width:720px;margin:4px 0 18px;padding:22px}.getting-started h2{margin:0 0 6px;font-size:20px}.getting-started p{color:var(--ink-dim);margin:0 0 14px}.getting-started .gs-actions{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.getting-started .gs-actions .b{min-height:44px}.getting-started .gs-problems{gap:8px;margin:16px 0 0;padding:0;list-style:none;display:grid}.getting-started .gs-problems li{background:var(--warn-bg);border:1px solid var(--warn-border);border-radius:8px;padding:8px 10px;font-size:13px}.getting-started .gs-problems code{font-size:12px}.ns-folder-row{align-items:stretch;gap:8px;display:flex}.ns-folder-row select{flex:auto;min-width:0}.ns-folder-row .b{flex:none;min-height:40px}.ns-ask{color:var(--ink);align-items:center;gap:8px;margin:14px 0 2px;font-weight:600;display:flex}.ns-ask input{width:18px;height:18px}.folder-bar{align-items:center;gap:8px;margin:8px 0;display:flex}.folder-path{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--ink);flex:auto;font-size:12.5px;overflow:hidden}.folder-list{border:1px solid var(--line);border-radius:10px;max-height:min(52vh,420px);margin:0;padding:0;list-style:none;overflow-y:auto}.folder-list>li+li{border-top:1px solid var(--line)}.folder-list>li.subhint{padding:12px}.folder-row{width:100%;min-height:44px;color:var(--ink);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:10px;padding:8px 12px;display:flex}.folder-row:hover,.folder-row:focus-visible{background:var(--panel-2)}.folder-name{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.folder-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;margin-top:12px;display:flex}.folder-actions .b{min-height:44px}.settings-tabs{flex-wrap:wrap;align-items:center;gap:4px;margin:0 0 18px;display:flex}.settings-tabs>button{min-height:40px}.settings-group-label{border-left:1px solid var(--line-2);color:var(--ink-faint);letter-spacing:.08em;text-transform:uppercase;margin:0 4px 0 10px;padding-left:10px;font-size:11px;font-weight:700}@media (width<=1023px){.settings-tabs{scrollbar-width:thin;flex-wrap:nowrap;padding-bottom:4px;overflow-x:auto}.settings-tabs>button,.settings-group-label{flex:none}}.basics{max-width:760px}.basics-row{border-bottom:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;padding:14px 0;display:flex}.basics-label{color:var(--ink);flex-direction:column;flex:260px;gap:3px;font-weight:600;display:flex}.basics-hint{color:var(--ink-dim);font-size:12.5px;font-weight:400}.basics-value{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.basics-row select{min-width:200px;max-width:100%}.basics-row input[type=checkbox]{width:22px;height:22px}.basics .chip.ok{border-color:color-mix(in srgb, var(--green) 50%, var(--bg));color:var(--ink)}.basics-more{margin-top:14px}.phone-choices{gap:8px;margin:12px 0;display:grid}.phone-choice{border:1px solid var(--line);cursor:pointer;border-radius:10px;align-items:flex-start;gap:10px;padding:10px 12px;display:flex}.phone-choice[data-available=false]{cursor:default;background:var(--bg-soft)}.phone-choice input{margin-top:3px}.phone-choice-body{flex-direction:column;gap:3px;min-width:0;display:flex}.phone-choice-title{color:var(--ink);flex-wrap:wrap;align-items:baseline;gap:8px;font-weight:600;display:flex}.phone-choice-title code{overflow-wrap:anywhere;font-size:12px;font-weight:400}.phone-choice-note{color:var(--ink-dim);font-size:12.5px}.phone-choice-why{color:var(--ink);font-size:12.5px}.phone-actions{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.phone-actions .b{min-height:44px}.phone-connect{margin-bottom:18px}.commit-on-main{border:1px solid var(--warn-border);background:var(--warn-bg);border-radius:10px;margin:8px 0 12px;padding:10px 12px}.commit-on-main legend{color:var(--ink);padding:0 4px;font-weight:600}.commit-on-main .commit-new-branch{max-width:calc(100% - 24px);margin:4px 0 8px 24px}.disabled-why{color:var(--ink-dim);margin:6px 0 0;font-size:12.5px}.settings-tabs>button{border:1px solid var(--line);color:var(--ink-dim);font:500 13px var(--sans);cursor:pointer;background:0 0;border-radius:8px;padding:6px 12px}.settings-page .settings-tabs>button[aria-selected=true]{background:var(--accent-wash);border-color:var(--accent-soft);color:var(--ink)}.settings-tabs>button[data-settings=basics]{font-weight:700}#view .settings-tabs>button:not([data-settings=basics]):not([aria-selected=true]){background:0 0;border-color:#0000;padding:6px 8px;font-size:12.5px}#view .settings-tabs>button:not([data-settings=basics]):not([aria-selected=true]):hover{color:var(--ink);text-decoration:underline}.phone-wizard .phone-choice{display:flex}.phone-wizard .phone-choice input[type=radio]{flex:none;width:auto;margin:4px 0 0}.list.first-run .session-section-title,.list.first-run #scratch-terminals{display:none}.scard-top button.nm{font:inherit;color:var(--ink);cursor:text;text-align:left;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:0;min-width:0;margin:0;padding:0;font-size:14.5px;font-weight:600;overflow:hidden}.scard-top button.nm:hover{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.scard-top .nm-edit{flex:auto;min-width:0;margin:0;padding:4px 8px;font-size:14px}.sess-more>summary{place-items:center;min-width:44px;min-height:40px;font-size:18px;display:grid}.sess-more>.action-menu-panel{flex-direction:column;align-items:stretch;gap:8px;min-width:min(320px,90vw);padding:10px;display:flex}.sess-more .session-filters{flex-direction:column;gap:8px;display:flex}.sess-more #sess-search{margin:0}#nav-overflow .more-title .badge{margin-left:6px;position:static}.commit-own-folder{color:var(--ink);margin:4px 0 8px 24px;font-weight:600}.commit-no-identity{background:var(--warn-bg);border:1px solid var(--warn-border);color:var(--ink);border-radius:8px;margin:8px 0;padding:8px 12px}.commit-no-identity p{margin:0 0 6px}.commit-no-identity pre{white-space:pre-wrap;overflow-wrap:anywhere;-webkit-user-select:all;user-select:all;margin:0}.commit-no-identity .identity-fields{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:8px 12px;margin:6px 0;display:grid}.commit-no-identity .identity-fields label.f{flex-direction:column;gap:4px;font-weight:600;display:flex}.commit-no-identity .identity-scope{border:0;flex-wrap:wrap;gap:4px 18px;margin:4px 0 8px;padding:0;display:flex}.commit-done{border:1px solid color-mix(in srgb, var(--green) 45%, var(--line));background:color-mix(in srgb, var(--green) 8%, var(--panel));color:var(--ink);border-radius:8px;margin:10px 0;padding:10px 12px}.commit-done p{margin:0 0 4px}.commit-done-line b{color:var(--ink)}.commit-switch-back{margin-top:8px}.commit-switch-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.commit-switch-row code{background:var(--bg);min-width:0;color:var(--ink);font:400 12px/1.4 var(--mono);overflow-wrap:anywhere;-webkit-user-select:all;user-select:all;border-radius:6px;flex:260px;padding:6px 8px}.commit-options{margin:8px 0}.commit-options>summary{cursor:pointer;color:var(--ink);padding:4px 0;font-weight:600}.commit-options>summary .sub{color:var(--ink-dim);font-weight:400}.commit-options[open]>summary{margin-bottom:4px}.commit-nothing .linkish{color:var(--accent-soft);font:inherit;cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}.commit-no-identity .identity-error{color:var(--red);margin:2px 0 6px;font-weight:600}.mod-slot,.mod-box{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;display:inline-flex}.mod-col{flex-direction:column;align-items:flex-start}.mod-text{color:var(--ink);overflow-wrap:anywhere;font-size:12.5px}.mod-bold{font-weight:600}.mod-mono{font-family:var(--mono)}.mod-badge{border:1px solid var(--line-2);color:var(--ink-dim);white-space:nowrap;border-radius:999px;padding:1px 7px;font-size:10.5px;font-weight:600;line-height:16px;display:inline-block}.mod-dim{color:var(--ink-faint)}.mod-accent{color:var(--accent-soft);border-color:color-mix(in srgb, var(--accent-soft) 45%, var(--bg))}.mod-warn{color:var(--amber);border-color:var(--amber)}.mod-danger{color:var(--red);border-color:color-mix(in srgb, var(--red) 55%, var(--bg))}.mod-ok{color:var(--green);border-color:color-mix(in srgb, var(--green) 55%, var(--bg))}.mod-button{min-height:28px;padding:2px 10px;font-size:12px}.mod-link{color:var(--accent-soft);font-size:12.5px}.mod-status{align-items:center;gap:10px;min-width:0;max-width:40vw;margin-right:10px;display:inline-flex;overflow:hidden}.mod-panes{right:12px;bottom:calc(var(--tabbar-h,0px) + 12px);z-index:40;flex-direction:column;gap:10px;width:min(380px,100vw - 24px);max-height:70dvh;display:flex;position:fixed}.mod-pane{border:1px solid var(--line-2);background:var(--panel);min-height:0;box-shadow:var(--shadow);border-radius:12px;flex-direction:column;display:flex}.mod-pane>header{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:8px;padding:10px 12px;display:flex}.mod-close{min-height:28px;padding:0 9px}.mod-pane-body{padding:12px;overflow:auto}.mod-pane-body>.mod-slot{align-items:stretch}@media (width>=1024px){.mod-panes{bottom:16px;right:20px}}.session-filters{display:contents}@media (width<=600px){.wide-only,.wide-only-control{display:none}:root{--tabbar-h:calc(50px + env(safe-area-inset-bottom,0px))}#topbar{gap:8px;min-height:0;padding:6px 12px}#topbar h1{font-size:16px}#topbar .brand-mark,#topbar svg{transform:scale(.85)}#topbar button{min-height:36px}main{padding-top:6px}#tabbar .tab{gap:1px;padding:4px 2px;font-size:10px}#tabbar .tab-ic svg{width:19px;height:19px}#tabbar .badge{transform:scale(.85)}.list{gap:8px;padding:0 10px}.sesshead{gap:6px;padding:2px 0 6px}.page-heading,.pane-head{gap:6px;padding:2px 12px 6px}#media{padding:0 10px}#media .pane-head{padding-left:2px;padding-right:2px}.page-heading h2,.sesshead h2,.pane-head h2,#media h2{font-size:17px}.page-heading p,.sesshead p,.pane-head .sub{margin-top:1px;font-size:11.5px}button.b,a.b,.scard .btnrow button.b,#view button:not([class]){min-height:36px;padding:0 11px;font-size:12.5px}button.b.ok,.scard .btnrow button.b.ok,#sheet button.b.ok,.conversation button.b.ok{min-height:40px}.f,select.f,input.f{min-height:38px}select,#view select,#sheet select{min-height:38px;padding-top:0;padding-bottom:0;line-height:normal}.sesshead{flex-wrap:wrap;align-items:center}.sesshead>div{flex:calc(100% - 150px);min-width:0}.sesshead>div p{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.sesshead #sess-new{flex:none;order:1}.sesshead>button:not(#sess-new){white-space:nowrap;text-overflow:ellipsis;flex:28%;order:2;min-width:0;padding:6px 4px;font-size:11.5px;overflow:hidden}#sess-search{height:38px;min-height:38px;margin:0;padding-top:0;padding-bottom:0}.session-filters{gap:8px;display:flex}.session-filters .session-grouping{white-space:nowrap;flex:1 1 0;gap:5px;min-width:0;margin:0;font-size:11px}.session-filters .session-grouping select.f{flex:1;min-width:0;max-width:none;height:36px;min-height:36px;padding:0 6px}.scard{padding:10px 12px}.scard .proj,.scard>.proj{font-size:11px}.scard-top{gap:6px}.scard-top b,.scard h3{font-size:14.5px}.smeta{gap:4px;margin-top:4px;font-size:11px}.spane{height:auto;min-height:0;max-height:58px;padding:6px 0;font-size:10.5px;line-height:1.35;overflow:hidden}.scard .btnrow{flex-wrap:wrap;gap:6px;margin-top:8px}.scard .btnrow>.b{flex:auto;min-width:max-content}#sesslist .scard .btnrow button,#sesslist .scard .btnrow summary{height:40px;min-height:40px;padding:0 10px;font-size:12.5px}.session-worktree{margin:4px 0 6px;font-size:11px}#view .page-heading button,#qb-routines{min-height:36px;padding:0 11px;font-size:12.5px}#quickbar{gap:6px;padding:0 10px}#quickbar #qb-project,#quickbar #qb-input,#quickbar #qb-filter{height:44px;min-height:44px;padding:0 10px}.card{padding:9px 10px}.card-x{width:32px;height:32px;font-size:14px}.card h3,.card .title{font-size:13.5px}.card .task-chat{width:auto;min-height:32px;margin:6px 0;padding:0 10px;font-size:12px}#sheet pre,.ev pre,#sheet .body{white-space:pre-wrap;overflow-wrap:anywhere;font-size:12px}.media-feed{gap:10px}.media-card{border-radius:10px;gap:8px;padding:10px}.media-card h3{margin-bottom:4px;font-size:14px}.media-frame{height:300px}.media-filter{gap:5px;font-size:11px}.media-filter select{max-width:170px;height:36px;min-height:36px;padding:0 6px}.live-bar{flex-wrap:nowrap;gap:5px;margin-bottom:10px}.live-bar label{flex:1 1 0;gap:0;min-width:0;font-size:0}.live-bar select{width:100%;min-width:0;height:36px;min-height:36px;padding:0 6px}.live-bar button.b{flex:none;height:36px;padding:0 9px}.live-expose{flex:none;gap:5px}.live-expose input{width:64px;height:36px;min-height:36px;padding:0 6px}.media-link button.b,.media-card footer button.b,.media-card footer a.b{min-height:36px;padding:0 10px}.scratch-review{margin-top:16px}.conversation-head{gap:8px;padding:6px 10px}.conversation-head h2{font-size:15px}.conversation-head p{margin-top:1px;font-size:11px}.conversation button.b{min-height:36px;padding:0 10px;font-size:12.5px}.reader-controls{padding:3px 10px;font-size:11px}#conversation-input{height:58px;min-height:44px;padding:8px 10px}#conversation-hint{display:none}.conversation label[for=conversation-input]{margin-bottom:3px;font-size:11px}}@media (width<=1023px){#sheet{width:100%;max-width:100%;height:auto;max-height:none;margin:0}}@media (width<=600px){#sheet{padding-left:12px;padding-right:12px;top:3dvh}.sheet-head{margin-bottom:8px;padding-bottom:8px}.sheet-head h2{font-size:17px}#sheet p,#sheet .subhint,#sheet small{margin:3px 0 6px;font-size:11.5px;line-height:1.4}#ns-proj-hint,.ns-launch-summary{font-size:11.5px;line-height:1.4}#sheet label{margin-top:8px;font-size:12px}#sheet{font-size:12.5px}#sheet input:not([type=checkbox]):not([type=radio]),#sheet select,#sheet textarea{box-sizing:border-box;width:100%;max-width:100%;min-height:38px;margin-top:3px;padding:6px 10px}#sheet select{height:38px;padding-top:0;padding-bottom:0;line-height:normal}.session-launch-actions{margin-left:-12px;margin-right:-12px;padding-left:12px;padding-right:12px}#sheet label:has(>input[type=checkbox]){align-items:center;gap:8px;display:flex}#sheet input[type=checkbox]{flex:none;width:18px;height:18px;min-height:0;margin:0}.sesshead>div p{display:none}.sesshead{flex-wrap:nowrap}.sesshead>div{flex:auto}.sesshead>.sess-more{order:2}.now-strip .now-chip:not(.now-approvals):not([data-state=needs_you]){display:none}.now-strip:not(:has(.now-approvals,.now-chip[data-state=needs_you])){display:none}#regular-sessions>.session-section-title,.scard-project-none{display:none}}body{zoom:var(--ui-zoom,1)}.settings-search{max-width:560px;margin:0 0 14px;position:relative}.settings-search input{box-sizing:border-box;border:1px solid var(--line-2);background:var(--panel);width:100%;min-height:42px;color:var(--ink);font:14px var(--sans);border-radius:9px;padding:9px 12px}.settings-search input:focus{outline:2px solid var(--accent-soft);outline-offset:1px}#settings-search-results{z-index:40;border:1px solid var(--line-2);background:var(--panel-2);max-height:min(60vh,420px);box-shadow:0 16px 40px color-mix(in srgb, var(--scrim) 35%, transparent);border-radius:10px;padding:6px;position:absolute;top:calc(100% + 4px);left:0;right:0;overflow:auto}.settings-hit{cursor:pointer;border-radius:7px;flex-direction:column;gap:2px;padding:8px 10px;display:flex}.settings-hit strong{color:var(--ink);font-size:13.5px;font-weight:550}.settings-hit span{color:var(--ink-dim);font-size:12px}.settings-hit[aria-selected=true]{background:var(--accent-wash);outline:1px solid var(--accent-soft);outline-offset:-1px}.settings-hit-empty{color:var(--ink-dim);margin:6px 8px;font-size:13px}.setting-hit{outline-offset:4px;border-radius:6px;transition:outline-color .3s;outline:2px solid var(--accent-soft)!important}.personal{flex-direction:column;gap:14px;max-width:900px;display:flex}.personal h3{margin:4px 0 0}.personal h4{color:var(--ink);margin:0 0 4px;font-size:14px}.personal fieldset{border:0;min-width:0;margin:0;padding:0}.personal legend,.personal-label{color:var(--ink);margin-bottom:6px;font-size:13.5px;font-weight:600;display:block}.personal-row{border:1px solid var(--line);background:var(--panel);border-radius:10px;flex-direction:column;gap:6px;padding:12px 14px;display:flex}.personal-block{border:1px solid var(--line);background:var(--bg-soft);border-radius:12px;flex-direction:column;gap:8px;padding:14px;display:flex}.personal-block .personal-row{background:var(--panel)}.personal-hint,.personal-note{color:var(--ink-dim);margin:0;font-size:12.5px}.personal-empty{color:var(--ink-dim);margin:0;font-size:13px}.personal-error{color:var(--red);margin:0;font-size:12.5px}.personal-check{flex-direction:row;align-items:flex-start;gap:10px;display:flex}.personal-check .personal-hint{display:block}.personal-inline{color:var(--ink-dim);flex-wrap:wrap;align-items:center;gap:8px;font-size:13px;display:flex}.personal select,.personal input:not([type]),.personal input[type=search],.personal textarea{border:1px solid var(--line-2);background:var(--bg-soft);min-height:38px;color:var(--ink);font:13.5px var(--sans);box-sizing:border-box;border-radius:8px;max-width:100%;padding:7px 10px}.personal textarea{font-family:var(--mono);font-size:12px}.segmented{border:1px solid var(--line-2);border-radius:9px;align-self:flex-start;display:inline-flex;overflow:hidden}.segmented label{cursor:pointer;min-height:38px;color:var(--ink-dim);align-items:center;padding:0 16px;font-size:13px;display:flex}.segmented label+label{border-left:1px solid var(--line-2)}.segmented label.on{background:var(--accent-wash);color:var(--accent-soft);font-weight:600}.segmented input{opacity:0;pointer-events:none;position:absolute}.segmented label:focus-within{outline:2px solid var(--accent-soft);outline-offset:-2px}.swatches{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.swatch{border:2px solid var(--panel);width:32px;height:32px;box-shadow:0 0 0 1px var(--line-2);cursor:pointer;border-radius:50%}.swatch[aria-pressed=true]{box-shadow:0 0 0 2px var(--ink)}.swatch-custom{color:var(--ink-dim);align-items:center;gap:6px;font-size:12.5px;display:inline-flex}.swatch-custom input{background:0 0;border:0;width:38px;height:32px;padding:0}.zoom-row{align-items:center;gap:6px;display:flex}.zoom-row .b{min-width:40px}.term-themes{grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:6px;display:grid}.term-theme{border:1px solid var(--line);cursor:pointer;color:var(--ink);background:var(--bg-soft);border-radius:8px;align-items:center;gap:8px;padding:6px 8px;font-size:12.5px;display:flex;position:relative}.term-theme.on{border-color:var(--accent-soft);background:var(--accent-wash)}.term-theme input{opacity:0;pointer-events:none;position:absolute}.term-theme:focus-within{outline:2px solid var(--accent-soft)}.term-theme .icon-button{margin-left:auto}.term-swatch{border:1px solid var(--line);font:11px var(--mono);border-radius:5px;flex:none;align-items:center;gap:2px;padding:3px 5px;display:inline-flex}.term-swatch b{margin-right:3px}.term-swatch i{border-radius:2px;width:6px;height:12px;display:inline-block}.icon-button{border:1px solid var(--line);width:32px;height:32px;color:var(--ink-dim);cursor:pointer;background:0 0;border-radius:7px;flex:none}.icon-button:disabled{opacity:.4;cursor:default}.icon-button.danger:hover:not(:disabled){color:var(--red);border-color:var(--red)}.quick-list{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.quick-list li{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.quick-number{text-align:right;width:16px;color:var(--ink-faint);font:11px var(--mono)}.quick-label{width:140px}.quick-text{flex:1;min-width:160px;font-family:var(--mono)!important}.quick-enter{color:var(--ink-dim);align-items:center;gap:3px;display:inline-flex}.quick-empty{color:var(--ink-dim);font-size:13px}.quick-add{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.quick-add input:not([type=checkbox]){flex:1;min-width:140px}.layout-list{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.layout-list li{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.layout-list input{flex:1;min-width:160px}.shortcut-tools{flex-wrap:wrap;gap:8px;display:flex}.shortcut-tools input{flex:1;min-width:200px}.shortcut-conflicts{border:1px solid var(--red);color:var(--ink);background:var(--bg-soft);border-radius:10px;padding:10px 14px;font-size:13px}.shortcut-conflicts ul{margin:6px 0 0;padding-left:18px}.shortcut-group h4{margin:10px 0 6px}.shortcut-table{border-collapse:collapse;width:100%}.shortcut-table th,.shortcut-table td{border-top:1px solid var(--line);text-align:left;vertical-align:middle;padding:7px 8px;font-size:13px}.shortcut-table th{color:var(--ink);width:40%;font-weight:500}.shortcut-table tr.clash th{color:var(--red)}.shortcut-context{border:1px solid var(--line-2);color:var(--ink-dim);border-radius:5px;margin-left:8px;padding:1px 6px;font-size:11px;font-weight:400}.shortcut-chords{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.shortcut-chord{border:1px solid var(--line-2);background:var(--panel-2);border-radius:6px;align-items:center;display:inline-flex}.shortcut-chord kbd{font:12px var(--mono);color:var(--ink);padding:3px 7px}.shortcut-chord.reserved kbd{-webkit-text-decoration:underline dotted var(--amber);text-decoration:underline dotted var(--amber)}.shortcut-chord button{border:0;border-left:1px solid var(--line-2);color:var(--ink-dim);cursor:pointer;background:0 0;min-height:26px;padding:0 6px}.shortcut-none{color:var(--ink-faint);font-size:12px}.shortcut-actions{white-space:nowrap;text-align:right}.shortcut-actions .b{min-height:32px;padding:0 10px;font-size:12px}.shortcut-recorder{border:2px dashed var(--accent-soft);border-radius:8px;outline:none;flex-direction:column;flex-basis:100%;gap:6px;padding:10px;display:flex}.shortcut-recorder:focus{background:var(--accent-wash)}.shortcut-live kbd{font:14px var(--mono)}.shortcut-conflict{color:var(--red);margin:0;font-size:12.5px}.shortcut-recorder-actions{gap:6px;display:flex}@media (width<=600px){.shortcut-table,.shortcut-table tbody,.shortcut-table tr,.shortcut-table th,.shortcut-table td{width:auto;display:block}.shortcut-table tr{border-top:1px solid var(--line);padding:6px 0}.shortcut-table th,.shortcut-table td{border:0;padding:3px 0}.shortcut-actions{text-align:left}.quick-label{width:100%}.term-themes{grid-template-columns:1fr 1fr}}#offline-banner{z-index:40;background:color-mix(in srgb, var(--amber) 14%, var(--panel));border:1px solid color-mix(in srgb, var(--amber) 45%, var(--line));border-radius:var(--r);color:var(--ink);align-items:center;gap:10px;margin:0 0 10px;padding:8px 12px;font-size:13px;display:flex;position:sticky;top:0}#offline-banner span:nth-child(2){flex:1;min-width:0}#offline-banner .offline-dot{background:var(--amber);border-radius:50%;flex:none;width:8px;height:8px}#offline-banner button{min-height:32px}body:has(#offline-banner) #view .scard{opacity:.92}#update-banner{background:color-mix(in srgb, var(--accent) 12%, var(--panel));border:1px solid color-mix(in srgb, var(--accent) 40%, var(--line));border-radius:var(--r);color:var(--ink);flex-wrap:wrap;align-items:center;gap:8px;margin:0 10px 10px;padding:8px 12px;font-size:13px;display:flex}#update-banner>span{flex:160px;min-width:0}#update-banner button{min-height:32px}#pull-refresh{top:calc(env(safe-area-inset-top,0px) + 8px);z-index:90;background:var(--panel-2);border:1px solid var(--line-2);width:36px;height:36px;color:var(--ink-dim);box-shadow:var(--shadow);opacity:0;pointer-events:none;border-radius:50%;place-items:center;font-size:19px;display:grid;position:fixed;left:50%;transform:translate(-50%,-44px)}#pull-refresh:before{content:"↻"}#pull-refresh.armed{color:var(--accent-soft);border-color:var(--accent)}#pull-refresh.busy{opacity:1;animation:.8s linear infinite pull-spin;transform:translate(-50%,20px)}@keyframes pull-spin{0%{rotate:0deg}to{rotate:360deg}}.swipe-row{touch-action:pan-y;border-radius:var(--r);position:relative}.swipe-row>.swipe-card{position:relative}.swipe-under{border-radius:var(--r);color:var(--bg);align-items:center;padding:0 22px;font-size:14px;font-weight:600;display:none;position:absolute;inset:0}.swipe-under.ok{background:var(--green)}.swipe-under.warn{background:var(--red)}.swipe-right{justify-content:flex-start}.swipe-left{justify-content:flex-end}.swipe-row.swiping-right>.swipe-right,.swipe-row.swiping-left>.swipe-left{display:flex}@media (width<=600px) and (pointer:coarse),(width<=600px) and (hover:none){.scard:has(.action-menu.as-sheet[open]){z-index:75}.action-menu.as-sheet[open]:before{content:"";z-index:70;background:color-mix(in srgb, var(--bg) 80%, transparent);animation:.18s ease-out sheet-fade;position:fixed;inset:0}.action-menu.as-sheet[open]>.action-menu-panel{z-index:71;width:auto;max-width:none;max-height:72dvh;padding:18px 10px calc(12px + env(safe-area-inset-bottom,0px));overscroll-behavior:contain;border-radius:16px 16px 0 0;animation:.22s cubic-bezier(.2,.8,.2,1) sheet-up;position:fixed;inset:auto 0 0;overflow-y:auto}.action-menu.as-sheet[open]>.action-menu-panel:before{content:"";background:var(--line-2);border-radius:2px;align-self:center;width:38px;height:4px;margin:-8px auto 8px;display:block;position:sticky;top:-10px}.action-menu.as-sheet[open]>.action-menu-panel>button,.action-menu.as-sheet[open]>.action-menu-panel>.b{min-height:46px;font-size:15px}}@keyframes sheet-up{0%{opacity:.4;transform:translateY(40%)}to{opacity:1;transform:none}}@keyframes sheet-fade{0%{opacity:0}to{opacity:1}}.voice-settings .voice-choice{align-items:flex-start;gap:10px;margin:8px 0;font-size:13.5px;display:flex}.voice-settings .voice-choice input{flex:none;margin-top:4px}.voice-settings .voice-choice input:disabled+span{opacity:.6}.pair-link-actions{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.pair-link-actions a.b{border:1px solid var(--line-2);background:var(--panel-2);min-height:36px;color:var(--ink);font:600 12.5px var(--sans);border-radius:8px;align-items:center;padding:0 12px;text-decoration:none;display:inline-flex}.pair-open-app{margin:4px 0 12px;font-size:14px}.app-hosts .device-row{align-items:center}@media (width<=600px){.sesshead,.page-heading{flex-wrap:wrap;row-gap:6px}.sesshead>div{flex:1 1 0;min-width:0}.sesshead h2,.page-heading h2{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.page-heading>h2{flex:1 1 0}.page-heading>.btnrow{flex:none;gap:6px;margin:0;display:flex}.page-heading>.btnrow button{width:auto}.sesshead>.quota-chip,.page-heading>.quota-chip,.sesshead>.budget-chip,.page-heading>.budget-chip{white-space:nowrap;border-radius:8px;flex:100%;order:10;justify-content:flex-start;gap:14px;min-width:0;padding:4px 10px;font-size:11px;display:flex;overflow:hidden}.quota-window{white-space:nowrap}.quota-window small{font-size:10px}#sesslist .scard,.scard{border-radius:12px;margin-bottom:8px;padding:10px 12px 10px 14px}.scard-project{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);white-space:nowrap;text-overflow:ellipsis;margin:0 0 3px;font-size:10.5px;overflow:hidden}.scard-top{flex-wrap:nowrap;gap:7px;min-width:0}.scard-top .nm{text-align:left;white-space:nowrap;text-overflow:ellipsis;flex:0 auto;min-width:0;padding:0;overflow:hidden}.scard-top .nm-edit{flex:auto;min-width:0}.scard[data-scratch-terminal] .scard-top{flex-wrap:wrap}.scard[data-scratch-terminal] .scard-top .nm{white-space:normal;overflow-wrap:anywhere;overflow:visible}.scard-top .sstate,.scard-top .status-badge{flex:none;padding:1px 7px;font-size:10px}.scard-top .sidle{flex:none;font-size:10.5px}.smeta{align-items:center;gap:4px 6px;margin-top:6px}.smeta .chip{padding:1px 7px;font-size:10.5px}.smeta .chip.tgt,.smeta .chip-uptime,.smeta .chip-wraps{display:none}.smeta .ctxbar{gap:4px;font-size:10.5px}.smeta .ctxbar i{width:32px}.smeta .check-badge{display:inline-flex}.smeta .check-chip,.smeta .ci-chip{border-radius:999px;height:auto;min-height:0;padding:1px 7px;font-size:10.5px}.scard .spane{--spane-lh:14px;height:auto;max-height:calc(3 * var(--spane-lh) + 12px);min-height:0;font-size:10.5px;line-height:var(--spane-lh);white-space:pre;word-break:normal;text-overflow:clip;-webkit-mask-image:linear-gradient(to bottom, transparent 0, var(--ink) 10px);-webkit-mask-image:linear-gradient(to bottom, transparent 0, var(--ink) 10px);mask-image:linear-gradient(to bottom, transparent 0, var(--ink) 10px);flex-direction:column;justify-content:flex-end;margin-top:8px;padding:6px 9px;display:flex;overflow:hidden}.scard .spane:empty{display:none}.scard .session-lineage{margin-top:6px}.scard .lineage-open{border-radius:999px;max-width:100%;min-height:28px;padding:0 8px;font-size:11.5px}.scard .btnrow{flex-wrap:nowrap;gap:6px;margin-top:8px}.scard .btnrow>.b,.scard .btnrow>.action-menu{flex:1 1 0;min-width:0}.scard .btnrow>.action-menu{flex:none}.scard .btnrow>.action-menu>summary{padding:0 12px}.scard .btnrow>.b{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.scard .scard-path{gap:6px;margin-top:6px;font-size:11px}.scard .scard-path code{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}#sess-more[open]>summary{z-index:72;position:relative}#sess-more[open]:before{content:"";z-index:70;background:color-mix(in srgb, var(--bg) 80%, transparent);animation:.18s ease-out sheet-fade;position:fixed;inset:0}#sess-more[open]>.action-menu-panel{z-index:71;width:auto;max-width:none;max-height:78dvh;padding:14px 12px calc(12px + env(safe-area-inset-bottom,0px));overscroll-behavior:contain;border-radius:16px 16px 0 0;flex-direction:column;gap:4px;animation:.22s cubic-bezier(.2,.8,.2,1) sheet-up;display:flex;position:fixed;inset:auto 0 0;overflow-y:auto;transform:none}.sesshead:has(#sess-more[open]){z-index:75;position:relative}#sess-more[open]>.action-menu-panel>button,#sess-more[open]>.action-menu-panel>.b{text-align:left;justify-content:flex-start;min-height:46px;font-size:15px}#sess-more[open]>.action-menu-panel label,#sess-more[open]>.action-menu-panel .session-grouping{min-height:46px;color:var(--ink-dim);justify-content:space-between;align-items:center;gap:10px;font-size:14px;display:flex}#sess-more[open]>.action-menu-panel select{flex:0 60%;min-width:0;height:40px}#sess-more[open]>.action-menu-panel .session-filters{flex-direction:column;gap:4px;display:flex}#sess-more[open]>.action-menu-panel .session-filters .session-grouping{flex:none;font-size:14px}#view select:not([multiple]):not([size]),#view input:not([type=checkbox]):not([type=radio]):not([type=range]){min-height:36px;padding-top:0;padding-bottom:0;line-height:normal}#view input::placeholder{text-overflow:ellipsis}#quickbar{flex-wrap:wrap}#qb-mode{width:100%;min-width:0;display:flex}#qb-mode>button{white-space:nowrap;text-overflow:ellipsis;flex:auto;min-width:0;padding:0 6px;font-size:12.5px;overflow:hidden}#quickbar #qb-project,#quickbar #qb-input{box-sizing:border-box;grid-column:1/-1;width:100%;max-width:100%}.colstrip{scrollbar-width:none;padding:0 10px}.colstrip::-webkit-scrollbar{display:none}#board{padding:0 10px}#board .col.mobile-on{box-sizing:border-box;flex:100%;width:100%;max-width:100%}.card{position:relative}.card .t,.card h3,.card .title{padding-right:34px}.card-x{position:absolute;top:4px;right:4px}.card .task-chat{margin:6px 0 4px}#media .pane-head{flex-wrap:wrap;row-gap:6px}#media .pane-head>div:first-child{flex:100%}.media-filter{flex:100%;align-items:center;display:flex}.media-filter select{flex:1;max-width:none}#deck{gap:8px;padding:0 10px}#deck .pane{height:auto;min-height:0}#deck .pane-head{text-align:left;flex-wrap:nowrap;align-items:center;gap:8px;width:100%;min-width:0;padding:8px 10px;display:flex}#deck .pane-head .statpill{flex:none}#deck .pane-title{white-space:nowrap;text-overflow:ellipsis;flex:1 1 0;min-width:0;overflow:hidden}#deck .pane-sub{flex:none;font-size:11px}#deck .pane-log{flex-direction:column;justify-content:flex-end;height:auto;max-height:72px;padding:6px 10px;display:flex;overflow:hidden}#deck .pane-line{white-space:nowrap;text-overflow:ellipsis;flex:none;font-size:11px;line-height:15px;overflow:hidden}.conversation .reader-controls{scrollbar-width:none;flex-wrap:nowrap;align-items:center;gap:6px;padding:6px 10px;display:flex;overflow-x:auto}.conversation .reader-controls::-webkit-scrollbar{display:none}.conversation .reader-controls>.conversation-session-actions{border:0;flex:none;gap:6px;margin:0;padding:0;display:flex}.conversation .reader-controls .b{white-space:nowrap;flex:none;height:34px;min-height:34px;padding:0 10px}.conversation .reader-controls #reader-latest{min-width:34px;margin-left:auto;padding:0}#conversation-compose>label[for=conversation-input]{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}#conversation-input{height:48px;min-height:44px}.voice-mode>button,#voice-mode>.b{min-height:36px;font-size:13px}.tool-card>summary{align-items:center;gap:6px;min-width:0;display:flex}.tool-card>summary .tool-title{white-space:nowrap;flex:none;max-width:none;overflow:visible}.tool-card>summary .tool-subtitle{white-space:nowrap;text-overflow:ellipsis;flex:1 1 0;min-width:0;overflow:hidden}.tool-card>summary .tool-sep{flex:none}.session-launch-actions #ns-go{flex:auto}.settings-page>header{padding:2px 0 6px}.settings-page>header h2,#media h2,.th-heading h2{margin:0;font-size:17px}.settings-page>header p,.th-heading p,#media .pane-head .sub,#media .pane-head p{display:none}} diff --git a/web/static/react/assets/app-DdKdlzbj.js b/web/static/react/assets/app-DdKdlzbj.js new file mode 100644 index 00000000..c7a8e43e --- /dev/null +++ b/web/static/react/assets/app-DdKdlzbj.js @@ -0,0 +1,58 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/PaneViews-CCamo9GT.js","assets/rolldown-runtime-hePW80VL.js","assets/tokens-Dwwo-z6R.js","assets/jsx-runtime-DpvgX3dj.js","assets/preload-helper-CxWDS4yO.js","assets/tokens-BxhfCosx.css","assets/Workbench-Bp7HqSdK.js","assets/action-Drt9J-sE.js"])))=>i.map(i=>d[i]); +import{r as e}from"./rolldown-runtime-hePW80VL.js";import{$ as t,$t as n,A as r,At as i,B as a,Bt as o,C as s,Ct as c,D as l,E as u,Et as d,F as f,Ft as p,G as m,Gt as h,H as g,Ht as _,I as v,It as y,J as b,Jt as x,K as S,Kt as C,L as w,Lt as T,M as E,Mt as D,N as O,Nt as k,Ot as A,P as j,Pt as M,Qt as N,R as P,Rt as F,St as I,T as L,Tt as R,U as z,Ut as B,V,Vt as H,W as ee,Wt as te,X as U,Xt as W,Y as ne,Yt as G,Z as K,Zt as q,_t as re,a as ie,an as ae,bt as oe,c as se,cn as ce,d as le,dn as ue,dt as de,en as fe,f as pe,fn as me,ft as he,g as ge,gt as _e,hn as ve,ht as ye,i as be,in as xe,j as Se,jt as Ce,kt as we,l as Te,ln as Ee,m as De,mn as Oe,mt as ke,nn as Ae,nt as je,o as Me,on as Ne,p as Pe,pn as Fe,pt as Ie,q as Le,qt as Re,rn as ze,s as Be,sn as Ve,t as He,tn as Ue,u as We,un as Ge,ut as Ke,vt as qe,w as Je,wt as Ye,x as Xe,xt as Ze,yt as Qe,z as $e,zt as et}from"./tokens-Dwwo-z6R.js";import{_ as tt,c as nt,d as rt,f as it,g as at,h as ot,i as st,l as ct,m as J,n as Y,o as X,p as lt,r as ut,s as Z,t as dt,u as ft,v as pt,x as mt,y as ht}from"./jsx-runtime-DpvgX3dj.js";import{t as gt}from"./preload-helper-CxWDS4yO.js";var Q=e(mt(),1),_t=Ue(),vt=fe();function yt(e={}){let t=q(e);return{request:t,tasks:e=>t(`/tasks`,{signal:e}),task:(e,n)=>t(`/tasks/${e}`,{signal:n}),projects:e=>t(`/projects`,{signal:e}),targets:e=>t(`/targets`,{signal:e}),approvals:e=>t(`/approvals`,{signal:e}),sessions:(e={})=>{let n=new URLSearchParams;return e.archived&&n.set(`archived`,`true`),e.all&&n.set(`all`,`true`),!e.archived&&!e.all&&n.set(`include_setup_failures`,`true`),t(`/sessions${n.size?`?${n}`:``}`,{signal:e.signal})},createTask:e=>t(`/tasks`,{method:`POST`,body:e}),patchTask:(e,n)=>t(`/tasks/${e}`,{method:`PATCH`,body:n}),deleteTask:e=>t(`/tasks/${e}`,{method:`DELETE`}),taskAction:(e,n,r={})=>t(`/tasks/${e}/${n}`,{method:`POST`,body:r}),taskEvents:(e,n)=>t(`/tasks/${e}/events`,{signal:n}),taskDiff:(e,n)=>t(`/tasks/${e}/diff`,{signal:n}),taskPRDescription:e=>t(`/tasks/${e}/pr-description`,{method:`POST`}),sessionDiff:(e,n)=>t(`/sessions/${e}/diff`,{signal:n}),sessionReview:(e,n)=>t(`/sessions/${e}/review`,{method:`POST`,body:n}),sessionCommit:(e,n,r)=>t(`/sessions/${e}/commit${r?`?repo=${encodeURIComponent(r)}`:``}`,{method:`POST`,body:n}),sessionPRDescription:e=>t(`/sessions/${e}/pr-description`,{method:`POST`}),decideApproval:(e,n,r=``,i=!1)=>t(`/approvals/${e}/decision`,{method:`POST`,body:{decision:n,note:r,always_allow:i}}),patchSession:(e,n)=>t(`/sessions/${e}`,{method:`PATCH`,body:n}),sessionAction:(e,n,r={})=>t(`/sessions/${e}/${n}`,{method:`POST`,body:r}),deleteSession:(e,n=!1)=>t(`/sessions/${e}${n?`?kill=true`:``}`,{method:`DELETE`}),archiveHistory:e=>t(`/sessions/${e}/archive/history`),checkTarget:e=>t(`/targets/${e}/check`,{method:`POST`}),createProject:e=>t(`/projects`,{method:`POST`,body:e}),patchProject:(e,n)=>t(`/projects/${e}`,{method:`PATCH`,body:n}),settings:()=>t(`/settings`),saveSettings:e=>t(`/settings`,{method:`PUT`,body:e}),claims:(e={},n)=>{let r=new URLSearchParams;for(let[t,n]of Object.entries(e))n!==void 0&&n!==``&&r.set(t,String(n));return t(`/claims${r.size?`?${r}`:``}`,{signal:n})},createClaim:e=>t(`/claims`,{method:`POST`,body:e}),releaseClaim:e=>t(`/claims/${e}`,{method:`DELETE`}),extendClaim:(e,n)=>t(`/claims/${e}/extend`,{method:`POST`,body:{ttl_minutes:n??0}}),claimsTopicOverlap:(e,n)=>{let r=new URLSearchParams;for(let[t,n]of Object.entries(e))n!==void 0&&n!==``&&r.set(t,String(n));return t(`/claims/topic-overlap?${r}`,{signal:n})}}}var $=dt();function bt(e,t=location){return{base:`http://${t.hostname.includes(`:`)?`[${t.hostname}]`:t.hostname}:${e.listen_port}`,embeddable:t.protocol!==`https:`}}function xt(e){let t=Math.max(0,Math.round((e.expires_at-Date.now()/1e3)/60));return t>=90?X(`board.media.hoursLeft`,{n:Math.round(t/60)}):X(`board.media.minutesLeft`,{n:t})}function St({view:e,api:t,onChanged:n,onNotice:r}){Z();let[i,a]=(0,Q.useState)(!1),[o,s]=(0,Q.useState)(e.kind===`desktop`),[c,l]=(0,Q.useState)(``),[u,d]=(0,Q.useState)(!1),{base:f,embeddable:p}=bt(e),m=e.detail?.display||``,h=`${f}/vnc.html?autoconnect=1&reconnect=1&resize=scale&path=websockify&view_only=${+!i}`,g=e.kind===`desktop`?h:f+`/`;return(0,$.jsxs)(`article`,{className:`media-card live-card`,"data-live-id":e.id,"data-kind":e.kind,children:[(0,$.jsxs)(`header`,{children:[(0,$.jsx)(`h3`,{children:e.title}),(0,$.jsxs)(`div`,{className:`media-meta`,children:[(0,$.jsx)(`span`,{className:`chip live-chip`,title:X(`board.media.exposedTitle`),children:X(`board.media.exposed`)}),(0,$.jsx)(`span`,{className:`chip`,children:e.target_name}),(0,$.jsx)(`span`,{className:`chip`,children:e.kind===`desktop`?X(`board.media.desktopDisplay`,{display:m}):`localhost:`+e.port}),(0,$.jsx)(`span`,{className:`media-when`,children:xt(e)})]})]}),e.kind===`desktop`&&(0,$.jsxs)(`p`,{className:`media-note`,children:[X(`board.media.displayBefore`),(0,$.jsxs)(`code`,{children:[`DISPLAY=`,m]}),X(`board.media.displayAfter`),` `,(0,$.jsx)(`button`,{className:`live-copy`,onClick:()=>void navigator.clipboard?.writeText(`DISPLAY=${m}`).then(()=>r(X(`board.media.copied`,{text:`DISPLAY=${m}`}))),children:X(`board.media.copy`)}),e.detail?.browser_error?` · `+e.detail.browser_error:``]}),p?o&&(0,$.jsx)(`iframe`,{className:e.kind===`desktop`?`media-frame live-desktop`:`media-frame`,title:e.title,src:g,allow:`clipboard-read; clipboard-write`},g):(0,$.jsx)(`small`,{className:`media-file`,children:X(`board.media.insecurePort`)}),e.kind===`desktop`&&(0,$.jsxs)(`form`,{className:`live-address`,onSubmit:n=>{n.preventDefault(),c.trim()&&(d(!0),t.request(`/live/${e.id}/browser`,{method:`POST`,body:{url:c.trim()}}).then(()=>l(``)).catch(e=>r(String(e),!0)).finally(()=>d(!1)))},children:[(0,$.jsx)(`input`,{"aria-label":X(`board.media.openAddressLabel`),placeholder:X(`board.media.openAddressPlaceholder`),value:c,onChange:e=>l(e.target.value)}),(0,$.jsx)(`button`,{className:`b`,disabled:u||!c.trim(),children:X(`board.media.open`)})]}),(0,$.jsxs)(`footer`,{children:[e.kind===`desktop`&&p&&(0,$.jsx)(`button`,{className:`b`,"aria-pressed":i,onClick:()=>a(!i),children:X(i?`board.media.watchOnly`:`board.media.takeControl`)}),e.kind===`port`&&p&&(0,$.jsx)(`button`,{className:`b`,"aria-expanded":o,onClick:()=>s(!o),children:X(o?`board.media.hidePreview`:`board.media.showPreview`)}),(0,$.jsx)(`a`,{className:`b`,href:e.kind===`desktop`?h.replace(`view_only=1`,`view_only=0`):g,target:`_blank`,rel:`noopener noreferrer`,children:X(`board.media.openNewTab`)}),(0,$.jsx)(`button`,{className:`b danger`,"aria-label":X(`board.media.stopLabel`,{title:e.title}),onClick:()=>void t.request(`/live/${e.id}`,{method:`DELETE`}).then(n).catch(e=>r(String(e),!0)),children:X(`board.media.stop`)})]})]})}function Ct({api:e,views:t,targets:n,onChanged:r,onNotice:i}){Z();let[a,o]=(0,Q.useState)(``),[s,c]=(0,Q.useState)(``),[l,u]=(0,Q.useState)(``),d=(t,n)=>{u(t),e.request(`/live/`+t,{method:`POST`,body:{...n,...a?{target_id:Number(a)}:{}}}).then(()=>{c(``),r()}).catch(e=>i(String(e),!0)).finally(()=>u(``))};return(0,$.jsxs)(`section`,{id:`live`,"aria-label":X(`board.media.liveViews`),children:[(0,$.jsxs)(`div`,{className:`live-bar`,children:[(0,$.jsxs)(`label`,{children:[X(`board.media.on`),(0,$.jsxs)(`select`,{"aria-label":X(`board.media.machine`),value:a,onChange:e=>o(e.target.value),children:[(0,$.jsx)(`option`,{value:``,children:X(`board.media.defaultMachine`)}),n.map(e=>(0,$.jsx)(`option`,{value:e.id,children:e.name},e.id))]})]}),(0,$.jsx)(`button`,{className:`b`,id:`live-desktop`,"aria-label":X(`board.media.liveDesktop`),disabled:!!l,title:X(`board.media.liveDesktopTitle`),onClick:()=>d(`desktops`,{title:`Live desktop`}),children:l===`desktops`?X(`board.media.starting`):(0,$.jsxs)($.Fragment,{children:[`+`,(0,$.jsx)(`span`,{className:`wide-only`,children:X(`board.media.addLiveWide`)}),X(`board.media.addDesktop`)]})}),(0,$.jsxs)(`form`,{className:`live-expose`,onSubmit:e=>{e.preventDefault(),Number(s)>0&&d(`ports`,{port:Number(s)})},children:[(0,$.jsx)(`input`,{"aria-label":X(`board.media.portLabel`),inputMode:`numeric`,placeholder:X(`board.media.portPlaceholder`),title:X(`board.media.portTitle`),value:s,onChange:e=>c(e.target.value.replace(/\D/g,``).slice(0,5))}),(0,$.jsx)(`button`,{className:`b`,id:`live-expose`,disabled:!!l||!(Number(s)>0),children:X(l===`ports`?`board.media.exposing`:`board.media.expose`)})]})]}),t.length>0&&(0,$.jsx)(`div`,{className:`media-feed live-feed`,children:t.map(t=>(0,$.jsx)(St,{view:t,api:e,onChanged:r,onNotice:i},t.id))})]})}var wt=new Set([`localhost`,`127.0.0.1`,`0.0.0.0`,`[::1]`]),Tt=(e,t=!1)=>n(`/api/media/${e.id}/content${t?`?download=1`:``}`);function Et(e){let t=Math.max(0,Date.now()/1e3-e);return t<60?X(`board.claims.justNow`):t<3600?X(`board.claims.minutesAgo`,{n:Math.floor(t/60)}):t<86400?X(`board.claims.hoursAgo`,{n:Math.floor(t/3600)}):X(`board.media.daysAgo`,{n:Math.floor(t/86400)})}function Dt(e){return e<1024?e+` B`:e<1<<20?(e/1024).toFixed(1)+` KiB`:e<1<<30?(e/(1<<20)).toFixed(1)+` MiB`:(e/(1<<30)).toFixed(2)+` GiB`}function Ot(e,t=location){try{let n=new URL(e),r=wt.has(n.hostname)&&!wt.has(t.hostname);return r&&(n.hostname=t.hostname),{href:n.toString(),rewritten:r,embeddable:t.protocol!==`https:`||n.protocol!==`http:`}}catch{return{href:e,rewritten:!1,embeddable:!1}}}function kt({row:e}){Z();let[t,n]=(0,Q.useState)(),[r,i]=(0,Q.useState)(!1);return(0,Q.useEffect)(()=>{let t=new AbortController;return fetch(Tt(e),{signal:t.signal,headers:{Range:`bytes=0-65535`}}).then(e=>e.text()).then(n).catch(()=>{t.signal.aborted||i(!0)}),()=>t.abort()},[e.id]),(0,$.jsxs)(`pre`,{className:`media-text`,children:[t??X(r?`board.media.loadFailed`:`board.media.loading`),e.size>65536&&(t!==void 0||r)?X(`board.media.truncated`):``]})}function At(e){try{let t=new URL(e);return wt.has(t.hostname)?Number(t.port)||(t.protocol===`https:`?443:80):0}catch{return 0}}function jt({row:e,exposed:t,onExpose:n}){Z();let[r,i]=(0,Q.useState)(!1);if(e.kind===`link`){let a=At(e.url);if(t){let n=new URL(e.url),r=bt(t).base+n.pathname+n.search+n.hash;return(0,$.jsxs)(`div`,{className:`media-link`,children:[(0,$.jsx)(`a`,{href:r,target:`_blank`,rel:`noopener noreferrer`,children:r}),(0,$.jsx)(`small`,{children:X(`board.media.postedExposed`,{url:e.url})})]})}let o=Ot(e.url);return(0,$.jsxs)(`div`,{className:`media-link`,children:[a>0&&n&&(0,$.jsx)(`button`,{className:`b ok media-expose`,onClick:()=>n(a),children:X(`board.media.exposePort`,{port:a})}),(0,$.jsx)(`a`,{href:o.href,target:`_blank`,rel:`noopener noreferrer`,children:o.href}),o.rewritten&&(0,$.jsx)(`small`,{children:X(`board.media.postedRewritten`,{url:e.url})}),o.embeddable?(0,$.jsx)(`button`,{className:`b`,"aria-expanded":r,onClick:()=>i(!r),children:X(r?`board.media.hideLivePreview`:`board.media.showLivePreview`)}):(0,$.jsx)(`small`,{children:X(`board.media.insecureSite`)}),r&&o.embeddable&&(0,$.jsx)(`iframe`,{className:`media-frame`,title:e.title,src:o.href})]})}let a=Tt(e);return e.mime.startsWith(`video/`)?(0,$.jsx)(`video`,{className:`media-video`,controls:!0,preload:`metadata`,src:a+`#t=0.1`}):e.mime.startsWith(`image/`)?(0,$.jsx)(`a`,{href:a,target:`_blank`,rel:`noopener`,children:(0,$.jsx)(`img`,{className:`media-image`,loading:`lazy`,src:a,alt:e.title})}):e.mime.startsWith(`audio/`)?(0,$.jsx)(`audio`,{controls:!0,preload:`metadata`,src:a}):e.mime.startsWith(`text/html`)||e.mime===`application/pdf`?(0,$.jsx)(`iframe`,{className:`media-frame`,title:e.title,src:a,sandbox:e.mime===`application/pdf`?void 0:`allow-scripts`}):e.mime.startsWith(`text/`)||/json|xml|yaml|javascript/.test(e.mime)?(0,$.jsx)(Mt,{row:e}):(0,$.jsx)(`p`,{className:`media-file`,children:X(`board.media.noPreview`,{name:e.name})})}function Mt({row:e}){Z();let[t,n]=(0,Q.useState)(!1);return(0,$.jsxs)(`details`,{className:`media-peek`,onToggle:e=>n(e.currentTarget.open),children:[(0,$.jsx)(`summary`,{children:X(`board.media.previewFile`,{name:e.name})}),t&&(0,$.jsx)(kt,{row:e})]})}function Nt({api:e,rows:t,live:n,liveEnabled:r,targets:i,sessionFilter:a,onFilter:o,onChanged:s,onNotice:c}){let l=Z(),u=(0,Q.useMemo)(()=>{let e=new Map;for(let n of t)n.session_id!=null&&!e.has(n.session_id)&&e.set(n.session_id,n.session_name||X(`board.media.session`,{id:n.session_id}));return[...e]},[t,l]),d=a==null?t:t.filter(e=>e.session_id===a);return(0,$.jsxs)(`section`,{id:`media`,children:[(0,$.jsxs)(`div`,{className:`pane-head`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h2`,{children:X(`board.media.title`)}),(0,$.jsx)(`p`,{className:`sub`,children:t.length?X(`board.media.summary`,{n:t.length}):X(`board.media.nothingPosted`)})]}),(0,$.jsxs)(`label`,{className:`media-filter`,hidden:!u.length,children:[X(`board.media.from`),(0,$.jsxs)(`select`,{"aria-label":X(`board.media.showFrom`),value:a??``,onChange:e=>o(e.target.value?Number(e.target.value):null),children:[(0,$.jsx)(`option`,{value:``,children:X(`board.media.everySession`)}),u.map(([e,t])=>(0,$.jsx)(`option`,{value:e,children:t},e))]})]})]}),r&&(0,$.jsx)(Ct,{api:e,views:n,targets:i,onChanged:s,onNotice:c}),!t.length&&(0,$.jsxs)(`div`,{className:`media-empty`,children:[(0,$.jsxs)(`p`,{children:[X(`board.media.emptyBefore`),(0,$.jsx)(`code`,{children:`post_media`}),X(`board.media.emptyAfter`)]}),(0,$.jsxs)(`pre`,{children:[`lectern post ./demo.mp4 --title "Checkout flow passing"`,` +`,`lectern post http://127.0.0.1:5173 --title "Dev server"`]})]}),(0,$.jsx)(`div`,{className:`media-feed`,children:d.map(t=>(0,$.jsxs)(`article`,{className:`media-card`,"data-media-id":t.id,"data-kind":t.kind,children:[(0,$.jsxs)(`header`,{children:[(0,$.jsx)(`h3`,{children:t.title||t.name||t.url}),(0,$.jsxs)(`div`,{className:`media-meta`,children:[t.session_id==null?(0,$.jsx)(`span`,{className:`chip`,children:X(`board.media.noSession`)}):(0,$.jsx)(`button`,{className:`chip`,onClick:()=>o(t.session_id),children:t.session_name||X(`board.media.session`,{id:t.session_id})}),(0,$.jsx)(`span`,{className:`chip`,children:t.kind===`link`?X(`board.media.link`):Dt(t.size)}),(0,$.jsx)(`span`,{className:`media-when`,children:Et(t.created_at)})]})]}),t.note&&(0,$.jsx)(`p`,{className:`media-note`,children:t.note}),(0,$.jsx)(jt,{row:t,exposed:n.find(e=>e.kind===`port`&&e.port===At(t.url)&&e.session_id===t.session_id),onExpose:r?n=>void e.request(`/live/ports`,{method:`POST`,body:{port:n,title:t.title||`localhost:${n}`,...t.session_id==null?{}:{session_id:t.session_id}}}).then(s).catch(e=>c(String(e),!0)):void 0}),(0,$.jsxs)(`footer`,{children:[t.kind===`file`&&(0,$.jsx)(`a`,{className:`b`,href:Tt(t,!0),children:X(`board.media.download`)}),(0,$.jsx)(`button`,{className:`b danger`,"aria-label":X(`board.media.deleteLabel`,{title:t.title||t.name}),onClick:()=>{confirm(X(`board.media.deleteConfirm`))&&e.request(`/media/${t.id}`,{method:`DELETE`}).then(s).catch(e=>c(String(e),!0))},children:X(`board.media.delete`)})]})]},t.id))})]})}function Pt(e,t=Date.now()/1e3,n){let r=new Date(e*1e3),i=r.toLocaleTimeString(n,{hour:`numeric`,minute:`2-digit`}).replace(/\s?([AP]M)$/i,(e,t)=>t.toLowerCase()),a=new Date(t*1e3);return r.toDateString()===a.toDateString()?i:Math.abs(e-t)<518400?`${r.toLocaleDateString(n,{weekday:`short`})} ${i}`:`${r.toLocaleDateString(n,{month:`short`,day:`numeric`})} ${i}`}function Ft(e,t=Date.now()/1e3,n){let r=e.reset_at?Pt(e.reset_at,t,n):``;switch(e.state){case`resuming`:return e.to_account?X(`app.limit.swappedResuming`,{account:e.to_account}):X(`app.limit.resetResuming`);case`swapping`:return X(`app.limit.swapping`,{account:e.to_account||X(`app.limit.anotherAccount`)});case`swapped`:return X(`app.limit.continuesOn`,{account:e.to_account||X(`app.limit.anotherAccount`)});case`handing_off`:return e.fallback?X(`app.limit.handingOffTo`,{agent:e.fallback}):X(`app.limit.handingOff`);case`requeued`:{let i=e.due_at?Pt(e.due_at,t,n):r;return i?X(`app.limit.resumes`,{time:i}):X(`app.limit.resumesAfterReset`)}}if(e.policy===`wait`){let i=e.due_at?Pt(e.due_at,t,n):r;return i?X(`app.limit.resumes`,{time:i}):X(`app.limit.resumesAfterReset`)}return e.reset_at&&e.reset_at<=t?X(`app.limit.readyToResume`):r?X(`app.limit.resets`,{time:r}):X(`app.limit.resetUnknown`)}function It(e,t=Date.now()/1e3){if(e.state!==`waiting`)return[];let n=[],r=e.reset_at&&e.reset_at<=t;return e.swap_to&&n.push(`swap`),r?n.push(`resume_now`):e.policy!==`wait`&&n.push(`wait`),n.push(`handoff`,`dismiss`),n}function Lt(e,t){switch(e){case`wait`:return X(`app.limit.resumeAtReset`);case`resume_now`:return X(`app.limit.resumeNow`);case`handoff`:return t.fallback?X(`app.limit.handOffTo`,{agent:t.fallback}):X(`app.limit.handOff`);case`swap`:return X(`app.limit.swapTo`,{account:t.swap_to?.label||X(`app.limit.anotherAccount`)});case`dismiss`:return X(`app.limit.dismiss`)}}function Rt({hold:e,api:t,onRefresh:n,onNotice:r,onPickAgent:i}){Z();let[a,o]=(0,Q.useState)(!1);async function s(a){if(a===`handoff`&&!e.fallback){i?i():r(X(`app.limit.noFallback`),!0);return}o(!0);try{let i={action:a};a===`swap`&&e.swap_to&&(i.account_id=e.swap_to.id),await t.request(`/limits/${e.id}/choose`,{method:`POST`,body:i}),r(a===`dismiss`?X(`app.limit.dismissed`):a===`handoff`?X(`app.limit.handingOffNotice`,{agent:String(e.fallback)}):a===`swap`?X(`app.limit.swappingNotice`,{account:e.swap_to?.label||X(`app.limit.anotherAccount`)}):X(a===`resume_now`?`app.limit.resumingNow`:`app.limit.willResume`)),await n()}catch(e){r(String(e),!0)}finally{o(!1)}}let c=It(e);return(0,$.jsxs)(`div`,{className:`limit-banner`,"data-limit-id":e.id,"data-limit-state":e.state,children:[(0,$.jsxs)(`div`,{className:`limit-banner-what`,children:[(0,$.jsx)(`strong`,{children:Ft(e)}),(0,$.jsx)(`span`,{title:e.note||void 0,children:e.message})]}),c.length>0&&(0,$.jsx)(`div`,{className:`limit-banner-actions`,children:c.map(t=>(0,$.jsx)(`button`,{className:`b${t===`dismiss`?``:` ok`}`,disabled:a,onClick:()=>void s(t),children:Lt(t,e)},t))})]})}function zt({hold:e}){return Z(),(0,$.jsxs)(`span`,{className:`chip warn limit-chip`,title:e.message,children:[`⏸ `,Ft(e)]})}function Bt(e){if(e.scope_kind!==`paths`)return[];try{let t=JSON.parse(e.scope);if(Array.isArray(t))return t.filter(e=>typeof e==`string`)}catch{}return e.scope.split(`,`).map(e=>e.trim()).filter(Boolean)}function Vt(e){return e.scope_kind===`paths`?Bt(e).join(`, `):e.scope_kind===`task`?X(`board.claims.taskScope`,{id:e.scope}):e.scope}function Ht(e){let t=Date.now()/1e3-e;if(t<60)return X(`board.claims.justNow`);let n=Math.round(t/60);if(n<60)return X(`board.claims.minutesAgo`,{n});let r=Math.round(n/60);return X(`board.claims.hoursAgo`,{n:r})}function Ut(e){let t=e-Date.now()/1e3;if(t<=0)return X(`board.claims.expiring`);let n=Math.round(t/60);if(n<60)return X(`board.claims.inMinutes`,{n});let r=Math.round(n/60);return X(`board.claims.inHours`,{n:r})}function Wt({api:e,projects:t,onClose:n,onNotice:r,initialProjectId:i}){Z();let[a,o]=(0,Q.useState)([]),[s,c]=(0,Q.useState)(i??``),[l,u]=(0,Q.useState)(!1),[d,f]=(0,Q.useState)(null),[p,m]=(0,Q.useState)(!1),[h,g]=(0,Q.useState)(i??t[0]?.id??0),[_,v]=(0,Q.useState)(`topic`),[y,b]=(0,Q.useState)(``),[x,S]=(0,Q.useState)(``),[C,w]=(0,Q.useState)(120);async function T(){u(!0);try{let t=await e.claims(s===``?{}:{project_id:s});o(t)}catch(e){r(String(e),!0)}finally{u(!1)}}(0,Q.useEffect)(()=>{T();let e=window.setInterval(()=>void T(),15e3);return()=>clearInterval(e)},[s]);async function E(t){f(t);try{await e.releaseClaim(t),o(e=>e.filter(e=>e.id!==t))}catch(e){r(String(e),!0)}finally{f(null)}}async function D(t){f(t);try{let n=await e.extendClaim(t);o(e=>e.map(e=>e.id===t?n:e))}catch(e){r(String(e),!0)}finally{f(null)}}async function O(t){if(t.preventDefault(),!h||!y.trim()){r(X(`board.claims.needProjectScope`),!0);return}try{let t={project_id:h,scope_kind:_,intent:x.trim(),ttl_minutes:C};_===`paths`?t.paths=y.split(`,`).map(e=>e.trim()).filter(Boolean):t.scope=y.trim(),await e.createClaim(t),b(``),S(``),m(!1),T()}catch(e){r(String(e),!0)}}return(0,$.jsxs)(B,{id:`claims-panel`,open:!0,className:`sheet claims-panel`,"aria-label":X(`board.claims.title`),onCancel:n,children:[(0,$.jsxs)(`header`,{className:`sheet-head`,children:[(0,$.jsx)(`h2`,{children:X(`board.claims.title`)}),(0,$.jsx)(`button`,{onClick:n,children:`✕`})]}),(0,$.jsxs)(`p`,{children:[X(`board.claims.introBefore`),` `,(0,$.jsx)(`code`,{children:`claim_work`}),X(`board.claims.introAfter`)]}),(0,$.jsxs)(`div`,{className:`claims-toolbar`,children:[(0,$.jsxs)(`select`,{"aria-label":X(`board.claims.filterByProject`),value:s,onChange:e=>c(e.target.value?Number(e.target.value):``),children:[(0,$.jsx)(`option`,{value:``,children:X(`board.claims.allRepositories`)}),t.map(e=>(0,$.jsx)(`option`,{value:e.id,children:e.name},e.id))]}),(0,$.jsx)(`button`,{type:`button`,className:`b`,onClick:()=>m(e=>!e),children:X(p?`board.claims.cancel`:`board.claims.claimForMe`)})]}),p&&(0,$.jsxs)(`form`,{className:`claims-form`,onSubmit:O,children:[(0,$.jsx)(`select`,{"aria-label":X(`board.claims.projectToClaim`),value:h,onChange:e=>g(Number(e.target.value)),children:t.map(e=>(0,$.jsx)(`option`,{value:e.id,children:e.name},e.id))}),(0,$.jsxs)(`select`,{"aria-label":X(`board.claims.scopeKind`),value:_,onChange:e=>v(e.target.value),children:[(0,$.jsx)(`option`,{value:`topic`,children:X(`board.claims.kindTopicOption`)}),(0,$.jsx)(`option`,{value:`paths`,children:X(`board.claims.kindPathsOption`)}),(0,$.jsx)(`option`,{value:`task`,children:X(`board.claims.kindTaskOption`)})]}),(0,$.jsx)(`input`,{"aria-label":X(`board.claims.scope`),value:y,onChange:e=>b(e.target.value),placeholder:_===`paths`?`frontend/src/sessions/**, frontend/src/board/**`:_===`task`?`42`:X(`board.claims.topicPlaceholder`)}),(0,$.jsx)(`input`,{"aria-label":X(`board.claims.intent`),value:x,onChange:e=>S(e.target.value),placeholder:X(`board.claims.intentPlaceholder`)}),(0,$.jsx)(`input`,{"aria-label":X(`board.claims.ttlMinutes`),type:`number`,min:5,max:1440,value:C,onChange:e=>w(Number(e.target.value))}),(0,$.jsx)(`button`,{className:`b ok`,type:`submit`,children:X(`board.claims.claim`)})]}),l&&a.length===0&&(0,$.jsx)(`p`,{children:X(`board.claims.loading`)}),!l&&a.length===0&&(0,$.jsx)(`p`,{children:X(`board.claims.empty`)}),(0,$.jsx)(`ul`,{className:`claims-list`,children:a.map(e=>(0,$.jsxs)(`li`,{className:`claims-row`,"data-id":e.id,"data-scope-kind":e.scope_kind,children:[(0,$.jsxs)(`div`,{className:`claims-row-main`,children:[(0,$.jsxs)(`span`,{className:`claims-holder`,children:[e.holder_kind===`session`&&`#${e.session_id} `,e.holder_kind===`attempt`&&`#${e.attempt_id} `,e.holder,e.agent&&(0,$.jsxs)(`span`,{className:`claims-agent`,children:[` (`,e.agent,`)`]}),e.auto&&(0,$.jsx)(`span`,{className:`claims-auto-badge`,title:X(`board.claims.autoTitle`),children:X(`board.claims.auto`)})]}),(0,$.jsxs)(`span`,{className:`claims-scope`,children:[(0,$.jsx)(`b`,{children:X(`board.claims.kind.${e.scope_kind}`,void 0,e.scope_kind)}),` `,Vt(e)]}),e.intent&&(0,$.jsxs)(`span`,{className:`claims-intent`,children:[`“`,e.intent,`”`]}),(0,$.jsx)(`span`,{className:`claims-times`,children:X(`board.claims.times`,{claimed:Ht(e.created_at),expires:Ut(e.expires_at)})})]}),(0,$.jsxs)(`div`,{className:`claims-row-actions`,children:[(0,$.jsx)(`button`,{className:`b`,disabled:d===e.id,onClick:()=>void D(e.id),children:X(`board.claims.extend`)}),(0,$.jsx)(`button`,{className:`b`,disabled:d===e.id,onClick:()=>void E(e.id),children:X(`board.claims.release`)})]})]},e.id))})]})}async function Gt(e){try{let t=await e.request(`/agents/menu`);return Array.isArray(t.agents)?t.agents:[]}catch{return[]}}async function Kt(e,t){let n=await e.request(`/agents/menu`,{method:`PUT`,body:{agents:t}});return Array.isArray(n.agents)?n.agents:t}function qt(e,t){if(t.length===0)return{shown:e,more:[]};let n=new Map(e.map(e=>[e.name,e])),r=new Set,i=[];for(let e of t){let t=n.get(e);t&&!r.has(e)&&(i.push(t),r.add(e))}return i.length===0?{shown:e,more:[]}:{shown:i,more:e.filter(e=>!r.has(e.name))}}function Jt({agents:e,onPick:t,onClose:n,title:r}){return Z(),r??=X(`app.allAgents.title`),(0,$.jsxs)(B,{className:`all-agents-picker`,"aria-label":r,onCancel:e=>{e.preventDefault(),n()},children:[(0,$.jsx)(`h2`,{children:r}),(0,$.jsx)(`button`,{onClick:n,children:X(`app.allAgents.close`)}),(0,$.jsx)(`ul`,{className:`all-agents-list`,children:e.map(e=>(0,$.jsx)(`li`,{children:(0,$.jsxs)(`button`,{type:`button`,onClick:()=>{t(e.name),n()},children:[e.name,e.builtin?X(`app.allAgents.builtIn`):``]})},e.name))}),e.length===0&&(0,$.jsx)(`p`,{children:X(`app.allAgents.none`)})]})}function Yt(e,t,n,r){let i=Math.max(2,Math.min(8,Math.floor(e)));if(r===`same`)return Array.from({length:i},()=>t);let a=[t,...n.filter(e=>e!==t)],o=a.filter((e,t)=>a.indexOf(e)===t);return Array.from({length:i},(e,t)=>o[t%o.length])}function Xt(e){let t={};try{t=JSON.parse(e||`{}`)}catch{}return[`claude`,`codex`,`gemini`].filter(e=>typeof t[e]==`string`&&t[e])}var Zt=8,Qt=0;function $t({api:e,projects:t,onClose:n,onCreated:r,onChat:i,onNotice:a,onCompare:o,initialRace:s=0}){Z();let[c,l]=(0,Q.useState)(t[0]?.id??0),[u,d]=(0,Q.useState)(``),[f,p]=(0,Q.useState)(``),[m,h]=(0,Q.useState)(`acceptEdits`),[g,_]=(0,Q.useState)(`claude`),[v,y]=(0,Q.useState)(``),[b,x]=(0,Q.useState)([]),[S,C]=(0,Q.useState)(2),[w,T]=(0,Q.useState)([]),[E,D]=(0,Q.useState)([]),[O,k]=(0,Q.useState)([]),[A,j]=(0,Q.useState)(``),[M,N]=(0,Q.useState)(),[P,F]=(0,Q.useState)(null),[I,L]=(0,Q.useState)(!1),[R,z]=(0,Q.useState)(),[V,H]=(0,Q.useState)([]),[ee,te]=(0,Q.useState)([]),[U,W]=(0,Q.useState)(!1),[ne,G]=(0,Q.useState)(null),[K,q]=(0,Q.useState)(0),[re,ie]=(0,Q.useState)(`mixed`),[ae,oe]=(0,Q.useState)({}),se=t.find(e=>e.id===c),ce=(0,Q.useMemo)(()=>w.filter(e=>e.builtin||e.task),[w]),{shown:le,more:ue}=(0,Q.useMemo)(()=>qt(ce.length?ce:[{name:`claude`},{name:`codex`},{name:`gemini`}],ee),[ce,ee]);(0,Q.useEffect)(()=>{Promise.all([e.request(`/agents`),e.request(`/templates`),e.request(`/launch-profiles`)]).then(([e,t,n])=>{T(e),D(t),k(n)}).catch(()=>{}),Gt(e).then(te),e.request(`/targets`).then(e=>oe(Object.fromEntries(e.map(e=>[e.id,Xt(e.info_json)])))).catch(()=>{}),e.request(`/delegation`).then(e=>z(e&&typeof e.orchestrate_ready==`boolean`?e:{orchestrate_ready:!1})).catch(()=>z({orchestrate_ready:!1})),e.request(`/budgets`).then(N).catch(()=>{})},[]),(0,Q.useEffect)(()=>{se&&(_(se.default_agent||`claude`),h(se.default_permission_mode||`acceptEdits`),F(`checking`),e.request(`/projects/${se.id}/capability`).then(e=>F(e)).catch(()=>F(null)))},[c]),(0,Q.useEffect)(()=>{let t=`${u} ${f}`.trim();if(!c||t.length<8){H([]);return}let n=new AbortController,r=window.setTimeout(()=>{e.request(`/claims/topic-overlap?project_id=${c}&text=${encodeURIComponent(t)}`,{signal:n.signal}).then(H).catch(()=>{})},500);return()=>{clearTimeout(r),n.abort()}},[c,u,f]);function de(e,t=re){q(e),ie(t);let n=Yt(e,g,se&&ae[se.target_id]||[],t);x(n.slice(1).map(e=>({key:++Qt,agent:e===g?``:e,model:``,permissionMode:``,launchProfile:``})))}(0,Q.useEffect)(()=>{s&&se&&de(s)},[s,se?.id,ae]);async function fe(t,s=!1,l=!1){let d=u.trim()||(l?f.trim().split(` +`)[0].slice(0,70):``);if(!d)return a(X(l?`remote.race.describeFirst`:`board.create.titleRequired`),!0);let p=v===`fable`||b.some(e=>e.model===`fable`);if(t&&p&&!confirm(X(`board.create.fableConfirm`)))return;let h=A.trim()===``?void 0:Number(A);if(h!==void 0&&(!Number.isFinite(h)||h<0))return a(X(`board.create.budgetInvalid`),!0);try{let u=await e.createTask({project_id:c,title:d,prompt:f.trim(),priority:S,agent:g,model:v,permission_mode:m,...I?{orchestrate:!0}:{},...h===void 0?{}:{budget_usd:h}});t&&await e.request(`/tasks/${u.id}/dispatch`,{method:`POST`,body:{...b.length>0?{variants:[{agent:g,model:v,permission_mode:m},...b.map(e=>({agent:e.agent,model:e.model,permission_mode:e.permissionMode,launch_profile:e.launchProfile}))]}:{},...h===void 0?{}:{budget_usd:h}}}),r(),n(),a(l?X(`remote.race.racing`,{count:b.length+1}):X(t?I?`board.create.orchestrating`:`board.create.dispatched`:`board.create.savedToBacklog`)),s&&i(u),l&&o?.(u)}catch(e){a(String(e),!0)}}let pe=P===`checking`?X(`board.create.checkingCapability`):P?X(`board.create.capability`,{profile:P.profile,mcp:P.mcp_servers.length?X(`board.create.mcpServers`,{servers:P.mcp_servers.join(`, `)}):X(`board.create.noMcp`),memory:P.memory_dir?X(`board.create.sharedMemory`):X(`board.create.noMemory`)}):``;return(0,$.jsxs)(B,{id:`sheet`,open:!0,className:`sheet`,"aria-label":X(`board.newTask`),onCancel:n,children:[(0,$.jsxs)(`header`,{className:`sheet-head`,children:[(0,$.jsx)(`h2`,{children:X(`board.newTask`)}),(0,$.jsx)(`button`,{onClick:n,children:`✕`})]}),(0,$.jsxs)(`label`,{children:[X(`board.create.template`),(0,$.jsxs)(`select`,{onChange:e=>{let t=E[Number(e.target.value)];t&&(d(t.title??u),p(t.prompt??f),h(t.permission_mode??m),y(t.model??v))},children:[(0,$.jsx)(`option`,{value:``,children:X(`board.create.noTemplate`)}),E.map((e,t)=>(0,$.jsx)(`option`,{value:t,children:e.name},e.name))]})]}),(0,$.jsxs)(`label`,{children:[X(`board.create.project`),(0,$.jsx)(`select`,{id:`f-project`,value:c,onChange:e=>l(Number(e.target.value)),children:t.map(e=>(0,$.jsxs)(`option`,{value:e.id,children:[e.name,` — `,e.target_name]},e.id))})]}),(0,$.jsxs)(`div`,{id:`f-cap-hint`,className:`subhint`,children:[pe,(0,$.jsx)(`span`,{className:`cap-note`,children:pe.includes(`restricted`)?X(`board.create.deniedNoPrompt`):``})]}),(0,$.jsxs)(`div`,{id:`f-orchestrate`,className:`orchestrate-row`+(I?` on`:``)+(R?.orchestrate_ready?``:` unavailable`),children:[(0,$.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":I,"aria-label":X(`board.create.orchestrateLabel`),disabled:!R?.orchestrate_ready,onClick:()=>L(!I)}),(0,$.jsxs)(`span`,{onClick:()=>R?.orchestrate_ready&&L(!I),children:[(0,$.jsx)(`b`,{children:X(`board.quick.orchestrate`)}),R?.orchestrate_ready?(0,$.jsxs)(`small`,{children:[X(`board.create.orchLeadPlans`),(0,$.jsx)(`b`,{children:R.settings?.worker_agent}),X(`board.create.orchWorkerBuilds`),(0,$.jsx)(`b`,{children:X(`board.create.orchLead`)}),X(`board.create.orchLeadAgents`)]}):(0,$.jsxs)(`small`,{children:[X(`board.create.orchNeeds`),(0,$.jsx)(`a`,{href:`#settings/connections`,children:X(`board.quick.openSettings`)}),`.`]})]})]}),(0,$.jsxs)(`label`,{children:[X(`board.create.title`),(0,$.jsx)(`input`,{id:`f-title`,value:u,onChange:e=>d(e.target.value),placeholder:X(`board.create.titlePlaceholder`)})]}),(0,$.jsxs)(`label`,{children:[X(I?`board.create.promptOrchestrate`:`board.create.prompt`),(0,$.jsx)(`textarea`,{id:`f-prompt`,value:f,onChange:e=>p(e.target.value),placeholder:X(`board.create.promptPlaceholder`)})]}),V.length>0&&(0,$.jsxs)(`div`,{className:`claims-overlap-warning`,id:`new-task-claim-overlap`,role:`status`,children:[X(`board.create.overlapWarning`),(0,$.jsx)(`ul`,{children:V.map(e=>(0,$.jsxs)(`li`,{children:[(0,$.jsx)(`b`,{children:e.holder}),e.agent?` (${e.agent})`:``,` — `,Vt(e),e.intent&&(0,$.jsxs)($.Fragment,{children:[` — “`,e.intent,`”`]})]},e.id))}),X(`board.create.overlapAdvice`)]}),(0,$.jsxs)(`label`,{children:[X(`board.create.permissions`),(0,$.jsxs)(`select`,{id:`f-perm`,value:m,onChange:e=>h(e.target.value),children:[(0,$.jsx)(`option`,{value:`default`,disabled:g!==`claude`,children:X(`board.create.permGated`)}),(0,$.jsx)(`option`,{value:`acceptEdits`,children:X(`board.create.permAcceptEdits`)}),(0,$.jsx)(`option`,{value:`plan`,children:X(`board.create.permPlan`)}),(0,$.jsx)(`option`,{value:`bypassPermissions`,children:X(`board.create.permBypass`)})]})]}),(0,$.jsxs)(`fieldset`,{id:`f-agent`,"data-value":g,children:[(0,$.jsx)(`legend`,{children:X(`board.create.agent`)}),(le.some(e=>e.name===g)?le:[...le,...ue.filter(e=>e.name===g)]).map(e=>(0,$.jsx)(`button`,{type:`button`,className:g===e.name?`on`:``,"data-agent":e.name,disabled:I&&e.name!==`claude`&&e.name!==`codex`,title:I&&e.name!==`claude`&&e.name!==`codex`?X(`board.create.leadAgentsOnly`):void 0,onClick:()=>{_(e.name),e.name!==`claude`&&m==="default"&&h(`acceptEdits`)},children:e.name===`claude`?`Claude Code`:e.name===`codex`?`Codex`:e.name},e.name)),ue.length>0&&(0,$.jsx)(`button`,{type:`button`,id:`f-agent-more`,onClick:()=>W(!0),children:X(`board.create.moreAgents`)})]}),U&&(0,$.jsx)(Jt,{agents:ue,onPick:e=>{_(e),e!==`claude`&&m==="default"&&h(`acceptEdits`)},onClose:()=>W(!1)}),(0,$.jsxs)(`label`,{children:[X(`board.create.model`),(0,$.jsx)(`input`,{id:`f-model`,value:v,onChange:e=>y(e.target.value),placeholder:X(`board.create.modelDefault`)})]}),(0,$.jsxs)(`div`,{className:`race-row`,id:`f-race`,role:`group`,"aria-label":X(`remote.race.group`),children:[(0,$.jsx)(`b`,{children:X(`remote.race.label`)}),[2,3,4].map(e=>(0,$.jsxs)(`button`,{type:`button`,"data-race":e,className:K===e?`on`:``,"aria-pressed":K===e,disabled:I,onClick:()=>K===e?(q(0),x([])):de(e),children:[`×`,e]},e)),(0,$.jsxs)(`select`,{"aria-label":X(`remote.race.with`),value:re,disabled:!K,onChange:e=>de(K,e.target.value),children:[(0,$.jsx)(`option`,{value:`mixed`,children:X(`remote.race.mixed`)}),(0,$.jsx)(`option`,{value:`same`,children:X(`remote.race.same`)})]}),(0,$.jsx)(`span`,{className:`subhint`,children:X(`remote.race.hint`)})]}),(0,$.jsxs)(`div`,{id:`f-variants`,children:[(0,$.jsxs)(`div`,{className:`variants-head`,children:[(0,$.jsxs)(`span`,{children:[X(`board.create.attempts`),b.length>0&&` (${b.length+1})`]}),(0,$.jsx)(`button`,{type:`button`,id:`f-add-variant`,disabled:b.length+1>=Zt,onClick:()=>x(e=>[...e,{key:++Qt,agent:``,model:``,permissionMode:``,launchProfile:``}]),children:X(`board.create.addAttempt`)})]}),b.length>0&&(0,$.jsx)(`p`,{className:`subhint`,children:X(`board.create.attemptsHint`)}),b.map((e,t)=>(0,$.jsxs)(`div`,{className:`variant-row`,children:[(0,$.jsxs)(`span`,{className:`variant-n`,children:[`#`,t+2]}),(0,$.jsxs)(`select`,{value:e.launchProfile,onChange:t=>{let n=t.target.value;x(t=>t.map(t=>t.key===e.key?{...t,launchProfile:n}:t))},children:[(0,$.jsx)(`option`,{value:``,children:X(`board.create.customAgentModel`)}),O.map(e=>(0,$.jsx)(`option`,{value:e.name,children:X(`board.create.profileOption`,{name:e.name})},e.id))]}),!e.launchProfile&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`select`,{value:e.agent,onChange:t=>{let n=t.target.value;if(n===`__more__`){G(e.key);return}x(t=>t.map(t=>t.key===e.key?{...t,agent:n}:t))},children:[(0,$.jsx)(`option`,{value:``,children:X(`board.create.sameAgent`,{agent:g})}),(e.agent&&!le.some(t=>t.name===e.agent)?[...le,...ue.filter(t=>t.name===e.agent)]:le).map(e=>(0,$.jsx)(`option`,{value:e.name,children:e.name},e.name)),ue.length>0&&(0,$.jsx)(`option`,{value:`__more__`,children:X(`board.create.moreAgents`)})]}),ne===e.key&&(0,$.jsx)(Jt,{agents:ue,onPick:t=>x(n=>n.map(n=>n.key===e.key?{...n,agent:t}:n)),onClose:()=>G(null)}),(0,$.jsx)(`input`,{placeholder:X(`board.create.modelPlaceholder`),value:e.model,onChange:t=>{let n=t.target.value;x(t=>t.map(t=>t.key===e.key?{...t,model:n}:t))}})]}),(0,$.jsxs)(`select`,{value:e.permissionMode,onChange:t=>{let n=t.target.value;x(t=>t.map(t=>t.key===e.key?{...t,permissionMode:n}:t))},children:[(0,$.jsx)(`option`,{value:``,children:X(`board.create.samePermission`)}),(0,$.jsx)(`option`,{value:`acceptEdits`,children:X(`board.create.variantAcceptEdits`)}),(0,$.jsx)(`option`,{value:`plan`,children:X(`board.create.variantPlan`)}),(0,$.jsx)(`option`,{value:`bypassPermissions`,children:X(`board.create.variantBypass`)})]}),(0,$.jsx)(`button`,{type:`button`,className:`variant-remove`,"aria-label":X(`board.create.removeAttempt`,{n:t+2}),onClick:()=>x(t=>t.filter(t=>t.key!==e.key)),children:`✕`})]},e.key))]}),(0,$.jsxs)(`label`,{children:[X(`board.create.priority`),(0,$.jsxs)(`select`,{value:S,onChange:e=>C(Number(e.target.value)),children:[(0,$.jsx)(`option`,{value:1,children:X(`board.create.priorityLow`)}),(0,$.jsx)(`option`,{value:2,children:X(`board.create.priorityNormal`)}),(0,$.jsx)(`option`,{value:3,children:X(`board.create.priorityHigh`)})]})]}),(0,$.jsxs)(`label`,{children:[X(`board.create.budget`),(0,$.jsx)(`input`,{id:`f-budget`,type:`number`,min:`0`,step:`0.01`,value:A,onChange:e=>j(e.target.value),placeholder:X(`board.create.noCap`)}),(0,$.jsx)(`span`,{className:`subhint`,children:X(`board.create.budgetHint`)})]}),M?.any_blocked&&(0,$.jsx)(`p`,{id:`f-budget-blocked`,className:`budget-blocked-note`,children:X(`board.create.budgetBlocked`)}),(0,$.jsxs)(`div`,{className:`btnrow`,children:[(0,$.jsx)(`button`,{id:`f-save`,onClick:()=>void fe(!1),children:X(`board.create.saveToBacklog`)}),(0,$.jsx)(`button`,{id:`f-go`,onClick:()=>void fe(!0),children:X(`board.create.dispatchToBoard`)}),b.length>0&&!I?(0,$.jsx)(`button`,{id:`f-race-go`,className:`ok`,onClick:()=>void fe(!0,!1,!0),children:X(`remote.race.go`,{count:b.length+1})}):(0,$.jsx)(`button`,{id:`f-chat`,className:`ok`,onClick:()=>void fe(!0,!0),children:X(`board.create.dispatchAndChat`)})]})]})}function en({api:e,projects:t,onClose:n,onTask:r,onChanged:i,onNotice:a}){Z();let[o,s]=(0,Q.useState)([]),[c,l]=(0,Q.useState)([]),[u,d]=(0,Q.useState)(),[f,p]=(0,Q.useState)(``),[m,h]=(0,Q.useState)(``),[g,_]=(0,Q.useState)([]),[v,y]=(0,Q.useState)(``),[b,x]=(0,Q.useState)(`acceptEdits`),[S,C]=(0,Q.useState)(``),[w,T]=(0,Q.useState)(``);async function E(){let[t,n]=await Promise.all([e.request(`/routines`),e.tasks()]);s(t),l(n.filter(e=>e.created_by?.startsWith(`routine:`)&&([`queued`,`running`,`review`].includes(e.status)||!!e.takeover)))}(0,Q.useEffect)(()=>{E().catch(e=>a(String(e),!0))},[]);function D(){d(void 0),p(``),h(``),_([]),y(``),x(`acceptEdits`),C(``),T(``)}function O(e){d(e.id),p(e.name),h(e.prompt),_(e.project_ids),y(e.schedule),x(e.permission_mode||`acceptEdits`),C(e.agent||``),T(e.model||``)}async function k(){if(!g.length){a(X(`board.routines.pickProject`),!0);return}let t={name:f.trim(),prompt:m.trim(),project_ids:g,schedule:v.trim(),permission_mode:b,agent:S,model:w.trim()};await e.request(u?`/routines/${u}`:`/routines`,{method:u?`PATCH`:`POST`,body:t}),a(X(u?`board.routines.updated`:`board.routines.saved`)),D(),await E()}async function A(t){let n=await e.request(`/routines/${t.id}/run`,{method:`POST`});a(X(`board.routines.started`,{count:n.tasks.length})+(n.failed.length?X(`board.routines.couldNotRun`,{n:n.failed.length}):``)),i(),await E()}return(0,$.jsxs)(B,{id:`sheet`,open:!0,className:`sheet routines`,"aria-label":X(`board.routines`),onCancel:n,children:[(0,$.jsxs)(`header`,{className:`sheet-head`,children:[(0,$.jsx)(`h2`,{children:X(`board.routines`)}),(0,$.jsx)(`button`,{onClick:n,children:`✕`})]}),(0,$.jsx)(`p`,{children:X(`board.routines.intro`)}),c.length>0&&(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h3`,{children:X(`board.routines.startedRuns`)}),c.map(e=>(0,$.jsxs)(`button`,{onClick:()=>r(e),children:[e.title,` · `,e.project_name,` ·`,` `,e.takeover?.status===`ready`?X(`board.routines.interactive`):X(`board.status.${e.status}`,void 0,e.status)]},e.id))]}),o.length===0&&(0,$.jsx)(`p`,{children:X(`board.routines.empty`)}),(0,$.jsx)(`div`,{id:`rt-list`,children:o.map(n=>(0,$.jsxs)(`article`,{className:`rowcard`,children:[(0,$.jsxs)(`h3`,{children:[n.name,!n.enabled&&X(`board.routines.off`)]}),(0,$.jsx)(`p`,{children:n.project_ids.map(e=>t.find(t=>t.id===e)?.name).filter(Boolean).join(`, `)||X(`board.routines.noProjects`)}),(0,$.jsxs)(`p`,{children:[n.agent||X(`board.routines.projectDefault`),n.model&&` · ${n.model}`,` · `,n.schedule||X(`board.routines.manualOnly`),n.schedule&&X(`board.routines.next`,{when:n.next_run_at?new Date(n.next_run_at*1e3).toLocaleString():X(`board.routines.pending`)})]}),(0,$.jsxs)(`div`,{className:`btnrow`,children:[(0,$.jsx)(`button`,{onClick:()=>void A(n).catch(e=>a(String(e),!0)),children:X(`board.routines.runNow`)}),n.schedule&&(0,$.jsx)(`button`,{onClick:()=>void e.request(`/routines/${n.id}`,{method:`PATCH`,body:{enabled:!n.enabled}}).then(E),children:n.enabled?X(`board.routines.pause`):X(`board.routines.resume`)}),(0,$.jsx)(`button`,{onClick:()=>O(n),children:X(`board.routines.edit`)}),(0,$.jsx)(`button`,{onClick:()=>{confirm(X(`board.routines.deleteConfirm`,{name:n.name}))&&e.request(`/routines/${n.id}`,{method:`DELETE`}).then(E)},children:X(`board.routines.delete`)})]})]},n.id))}),(0,$.jsxs)(`details`,{open:u!=null,children:[(0,$.jsx)(`summary`,{id:`rt-legend`,children:u?X(`board.routines.editing`,{name:f}):X(`board.routines.new`)}),(0,$.jsxs)(`label`,{children:[X(`board.routines.name`),(0,$.jsx)(`input`,{id:`rt-name`,value:f,onChange:e=>p(e.target.value)})]}),(0,$.jsxs)(`label`,{children:[X(`board.routines.projects`),(0,$.jsx)(`select`,{id:`rt-projects`,multiple:!0,value:g.map(String),onChange:e=>_([...e.target.selectedOptions].map(e=>Number(e.value))),children:t.map(e=>(0,$.jsx)(`option`,{value:e.id,children:e.name},e.id))})]}),(0,$.jsxs)(`label`,{children:[X(`board.routines.prompt`),(0,$.jsx)(`textarea`,{id:`rt-prompt`,value:m,onChange:e=>h(e.target.value)})]}),(0,$.jsxs)(`label`,{children:[X(`board.routines.schedule`),(0,$.jsx)(`input`,{id:`rt-schedule`,value:v,onChange:e=>y(e.target.value),placeholder:`daily at 09:00`})]}),(0,$.jsxs)(`label`,{children:[X(`board.routines.agent`),(0,$.jsx)(`input`,{value:S,onChange:e=>C(e.target.value),placeholder:X(`board.routines.projectDefault`)})]}),(0,$.jsxs)(`label`,{children:[X(`board.routines.model`),(0,$.jsx)(`input`,{value:w,onChange:e=>T(e.target.value)})]}),(0,$.jsxs)(`label`,{children:[X(`board.routines.permissionMode`),(0,$.jsxs)(`select`,{value:b,onChange:e=>x(e.target.value),children:[(0,$.jsx)(`option`,{children:`acceptEdits`}),(0,$.jsx)(`option`,{children:`bypassPermissions`}),(0,$.jsx)(`option`,{children:`plan`}),(0,$.jsx)(`option`,{children:`default`})]})]}),(0,$.jsx)(`button`,{id:`rt-save`,onClick:()=>void k().catch(e=>a(String(e),!0)),children:X(u?`board.routines.saveChanges`:`board.routines.save`)}),u&&(0,$.jsx)(`button`,{onClick:D,children:X(`board.routines.cancel`)})]})]})}var tn=[{id:`vscode`,label:`VS Code`},{id:`cursor`,label:`Cursor`},{id:`windsurf`,label:`Windsurf`},{id:`zed`,label:`Zed`},{id:`none`,label:`Don't show`}],nn=`editor.app`;function rn(e){try{let t=JSON.parse(e.ssh_json||`{}`);return t&&typeof t==`object`?t:{}}catch{return{}}}function an(e){let t=rn(e);return t.editor_host?t.editor_host:e.kind===`local`?``:e.kind!==`ssh`||!e.host?null:t.alias?t.alias:`${e.user?`${e.user}@`:``}${e.host}${e.port&&e.port!==22?`:${e.port}`:``}`}function on(e,t,n){if(!n.startsWith(`/`))return null;let r=an(t);if(r===null)return null;let i=n.split(`/`).map(encodeURIComponent).join(`/`);if(r===``)return e===`zed`?`zed://file${i}`:`${e}://file${i}`;if(e===`zed`)return`zed://ssh/${r}${i}`;let a=r.replace(/:\d+$/,``);return`${e}://vscode-remote/ssh-remote+${encodeURIComponent(a)}${i}`}function sn(e){if(!e)return``;let t=Math.max(0,Math.round(Date.now()/1e3-e));return t<60?st(-t,`second`):t<3600?st(-Math.round(t/60),`minute`):st(-Math.round(t/3600),`hour`)}var cn=e=>X(`remote.conn.${e}`);function ln({api:e,target:t}){let[n,r]=(0,Q.useState)(),[i,a]=(0,Q.useState)(!1);return Z(),(0,Q.useEffect)(()=>{let n=!0,i=i=>void e.request(`/targets/${t.id}/connection${i?`?probe=1`:``}`).then(e=>n&&r(e&&e.state?e:void 0)).catch(()=>{});i(!1);let a=setInterval(()=>i(!0),2e4);return()=>{n=!1,clearInterval(a)}},[e,t.id]),!n||t.kind===`mock`?null:(0,$.jsxs)(`span`,{className:`conn conn-${n.state}`,"data-conn":n.state,children:[(0,$.jsx)(`span`,{className:`conn-dot`,"aria-hidden":!0}),(0,$.jsxs)(`span`,{title:n.last_error||void 0,children:[cn(n.state),n.state===`connected`&&n.last_ok?` · ${sn(n.last_ok)}`:``,n.reconnects>0?` · ${X(`remote.conn.reconnected`,{n:n.reconnects})}`:``,n.via?` · ${X(`remote.conn.via`,{host:n.via})}`:``,n.transport===`openssh`?` · OpenSSH`:``]}),n.state!==`idle`&&(0,$.jsx)(`button`,{type:`button`,className:`linkish`,disabled:i,onClick:()=>{a(!0),e.request(`/targets/${t.id}/reconnect`,{method:`POST`}).then(r).finally(()=>a(!1))},children:X(i?`remote.conn.reconnectingBusy`:`remote.conn.reconnect`)}),n.state===`down`&&n.last_error&&(0,$.jsx)(`small`,{className:`conn-error`,children:n.last_error})]})}function un({api:e,target:t,onSaved:n,onNotice:r}){let i=rn(t),[a,o]=(0,Q.useState)(i),[s,c]=(0,Q.useState)((i.options||[]).join(` +`)),[l,u]=(0,Q.useState)(!1),d=/GSSAPIAuthentication\s*[= ]\s*yes/i.test(s),f=e=>o(t=>({...t,...e}));return(0,$.jsxs)(`form`,{className:`remote-form`,onSubmit:i=>{i.preventDefault(),u(!0);let o=s.split(` +`).map(e=>e.trim()).filter(Boolean);e.request(`/targets/${t.id}/ssh`,{method:`PUT`,body:{...a,options:o}}).then(()=>{r(X(`remote.ssh.saved`,{name:t.name})),n()}).catch(e=>r(String(e),!0)).finally(()=>u(!1))},children:[t.kind===`ssh`&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`label`,{children:[X(`remote.ssh.transport`),(0,$.jsxs)(`select`,{value:a.transport||``,onChange:e=>f({transport:e.target.value}),children:[(0,$.jsx)(`option`,{value:``,children:X(`remote.ssh.transportBuiltin`)}),(0,$.jsx)(`option`,{value:`openssh`,children:X(`remote.ssh.transportOpenssh`)})]})]}),(0,$.jsxs)(`label`,{"data-setting":`machines.alias`,children:[X(`remote.ssh.alias`),(0,$.jsx)(`input`,{value:a.alias||``,placeholder:`build-box`,onChange:e=>f({alias:e.target.value})})]}),(0,$.jsxs)(`label`,{"data-setting":`machines.proxyJump`,children:[X(`remote.ssh.proxyJump`),(0,$.jsx)(`input`,{value:a.proxy_jump||``,placeholder:`user@bastion:22, second-hop`,onChange:e=>f({proxy_jump:e.target.value})})]}),(0,$.jsxs)(`label`,{className:`check`,"data-setting":`machines.forwardAgent`,children:[(0,$.jsx)(`input`,{type:`checkbox`,checked:!!a.forward_agent,onChange:e=>f({forward_agent:e.target.checked})}),X(`remote.ssh.forwardAgent`)]}),(0,$.jsxs)(`label`,{className:`check`,children:[(0,$.jsx)(`input`,{type:`checkbox`,checked:!a.no_agent,onChange:e=>f({no_agent:!e.target.checked})}),X(`remote.ssh.useAgent`)]}),(0,$.jsxs)(`label`,{className:`check`,"data-setting":`machines.kerberos`,children:[(0,$.jsx)(`input`,{type:`checkbox`,checked:d,onChange:e=>c(t=>e.target.checked?[...t.split(` +`).filter(e=>e.trim()),`GSSAPIAuthentication=yes`,`GSSAPIDelegateCredentials=yes`].join(` +`):t.split(` +`).filter(e=>!/^GSSAPI/i.test(e.trim())).join(` +`))}),X(`remote.ssh.kerberos`)]}),(0,$.jsxs)(`label`,{children:[X(`remote.ssh.extraOptions`),(0,$.jsx)(`textarea`,{rows:3,value:s,placeholder:`ServerAliveInterval=30`,onChange:e=>c(e.target.value)})]})]}),(0,$.jsxs)(`label`,{"data-setting":`machines.editorHost`,children:[X(`remote.ssh.editorHost`),(0,$.jsx)(`input`,{value:a.editor_host||``,placeholder:t.kind===`local`?X(`remote.ssh.editorHostLocal`):X(`remote.ssh.editorHostRemote`),onChange:e=>f({editor_host:e.target.value})})]}),(0,$.jsx)(`button`,{type:`submit`,disabled:l,children:X(l?`remote.saving`:`remote.ssh.save`)})]})}function dn({api:e,target:t,onNotice:n}){let[r,i]=(0,Q.useState)(),[a,o]=(0,Q.useState)([]),[s,c]=(0,Q.useState)(!0),[l,u]=(0,Q.useState)(``),[d,f]=(0,Q.useState)(!1);Z();let p=()=>void e.request(`/live`).then(e=>{c(e.enabled!==!1),o((Array.isArray(e.views)?e.views:[]).filter(e=>e.kind===`port`&&e.target_id===t.id))}).catch(()=>{});(0,Q.useEffect)(p,[t.id]);let m=()=>void e.request(`/targets/${t.id}/ports`).then(e=>i(Array.isArray(e.ports)?e.ports:[])).catch(e=>n(String(e),!0)),h=r=>{f(!0),e.request(`/live/ports`,{method:`POST`,body:{port:r,target_id:t.id,title:`${t.name}:${r}`}}).then(()=>{u(``),p()}).catch(e=>n(String(e),!0)).finally(()=>f(!1))};return(0,$.jsxs)(`div`,{className:`remote-ports`,"data-ports":t.id,children:[!s&&(0,$.jsx)(`p`,{className:`subhint`,children:X(`remote.ports.off`)}),(0,$.jsx)(`table`,{className:`remote-table`,children:(0,$.jsxs)(`tbody`,{children:[a.map(t=>{let{base:n}=bt(t);return(0,$.jsxs)(`tr`,{"data-forward":t.port,children:[(0,$.jsx)(`td`,{children:(0,$.jsxs)(`code`,{children:[`localhost:`,t.port]})}),(0,$.jsxs)(`td`,{children:[`→ `,(0,$.jsx)(`a`,{href:n+`/`,target:`_blank`,rel:`noopener noreferrer`,children:n.replace(/^https?:\/\//,``)})]}),(0,$.jsx)(`td`,{className:`sub`,children:X(`remote.ports.open`,{n:t.connections})}),(0,$.jsx)(`td`,{children:(0,$.jsx)(`button`,{type:`button`,className:`b danger`,onClick:()=>void e.request(`/live/${t.id}`,{method:`DELETE`}).then(p),children:X(`remote.ports.stop`)})})]},t.id)}),a.length===0&&(0,$.jsx)(`tr`,{children:(0,$.jsx)(`td`,{colSpan:4,className:`sub`,children:X(`remote.ports.none`,{name:t.name})})})]})}),(0,$.jsxs)(`div`,{className:`remote-row`,children:[(0,$.jsx)(`input`,{"aria-label":X(`remote.ports.portOn`,{name:t.name}),inputMode:`numeric`,placeholder:X(`remote.ports.port`),value:l,onChange:e=>u(e.target.value.replace(/\D/g,``).slice(0,5))}),(0,$.jsx)(`button`,{type:`button`,className:`b`,disabled:!s||d||!(Number(l)>0),onClick:()=>h(Number(l)),children:X(`remote.ports.forward`)}),(0,$.jsx)(`button`,{type:`button`,className:`b`,onClick:m,children:X(`remote.ports.detect`)})]}),r&&(0,$.jsxs)(`ul`,{className:`remote-listening`,children:[r.length===0&&(0,$.jsx)(`li`,{className:`sub`,children:X(`remote.ports.nothing`)}),r.map(e=>(0,$.jsxs)(`li`,{children:[(0,$.jsxs)(`code`,{children:[e.address,`:`,e.port]}),` `,e.process&&(0,$.jsx)(`span`,{className:`sub`,children:e.process}),a.some(t=>t.port===e.port)?(0,$.jsx)(`span`,{className:`chip ds`,children:X(`remote.ports.forwarded`)}):(0,$.jsx)(`button`,{type:`button`,className:`linkish`,disabled:!s||d,onClick:()=>h(e.port),children:X(`remote.ports.forward`)})]},e.port))]})]})}function fn({target:e}){let[t,r]=(0,Q.useState)(e.workroot||``),i=t.startsWith(`/`)||t===`~`||t.startsWith(`~/`);return Z(),(0,$.jsxs)(`div`,{className:`remote-row`,children:[(0,$.jsx)(`input`,{"aria-label":X(`remote.files.pathOn`,{name:e.name}),placeholder:X(`remote.files.pathPlaceholder`),value:t,onChange:e=>r(e.target.value)}),(0,$.jsx)(`a`,{className:`b`+(i?``:` disabled`),"aria-disabled":!i,href:i?n(`/api/targets/${e.id}/download?path=${encodeURIComponent(t)}`):void 0,download:!0,"data-setting":`machines.download`,children:X(`remote.files.download`)}),(0,$.jsx)(`span`,{className:`subhint`,children:X(`remote.files.folderHint`)})]})}function pn({target:e,path:t,compact:n}){let[r]=H(nn,`vscode`);if(Z(),r===`none`)return null;let i=on(r,e,t),a=hn(r);return i?(0,$.jsx)(`a`,{className:`b editor-link`,href:i,"data-editor":r,children:X(`remote.editor.openIn`,{editor:a})}):n?null:(0,$.jsx)(`span`,{className:`subhint`,children:X(`remote.editor.unreachable`,{name:e.name})})}function mn(){let[e,t]=H(nn,`vscode`);return Z(),(0,$.jsxs)(`label`,{className:`editor-choice`,"data-setting":`machines.editor`,children:[X(`remote.editor.choice`),(0,$.jsx)(`select`,{value:e,onChange:e=>t(e.target.value),children:tn.map(e=>(0,$.jsx)(`option`,{value:e.id,children:hn(e.id)},e.id))})]})}function hn(e){return e===`none`?X(`remote.editor.none`):tn.find(t=>t.id===e)?.label||e}function gn({api:e,target:t,onChanged:n,onNotice:r}){let[i,a]=(0,Q.useState)(``);return Z(),t.kind===`sandbox`||t.kind===`mock`?null:(0,$.jsxs)(`div`,{className:`machine-remote`,children:[(0,$.jsx)(ln,{api:e,target:t}),(0,$.jsx)(`div`,{className:`remote-tabs`,role:`tablist`,children:[`connection`,`ports`,`files`].map(e=>(0,$.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":i===e,"data-remote-tab":e,"data-setting":`machines.${e}`,onClick:()=>a(i===e?``:e),children:X(`remote.tab.${e}`)},e))}),i===`connection`&&(0,$.jsx)(un,{api:e,target:t,onSaved:n,onNotice:r}),i===`ports`&&(0,$.jsx)(dn,{api:e,target:t,onNotice:r}),i===`files`&&(0,$.jsxs)(`div`,{className:`remote-files`,children:[(0,$.jsx)(fn,{target:t}),t.workroot&&(0,$.jsxs)(`div`,{className:`remote-row`,children:[(0,$.jsx)(`code`,{children:t.workroot}),(0,$.jsx)(pn,{target:t,path:t.workroot})]}),(0,$.jsx)(mn,{})]})]})}var _n;function vn(){return _n??=q()(`/targets`).catch(()=>(_n=void 0,[])),_n}function yn({targetId:e,path:t}){let[n,r]=(0,Q.useState)();return(0,Q.useEffect)(()=>{if(!e||!t)return;let n=!0;return vn().then(t=>n&&r(t.find(t=>t.id===e))),()=>{n=!1}},[e,t]),!n||!t?null:(0,$.jsx)(pn,{target:n,path:t,compact:!0})}function bn(e){if(!e.started_at||!e.finished_at)return`—`;let t=e.finished_at-e.started_at;return t<90?`${t.toFixed(0)}s`:`${(t/60).toFixed(1)}m`}function xn(e){if(e.verify&&Object.keys(e.verify).length>0){let t=e.verify.rc;return t===0?X(`board.compare.checkPass`):X(`board.compare.checkFail`,{rc:String(t)})}return X(`board.compare.noCheck`)}function Sn(e){return!(e.verify&&Object.keys(e.verify).length>0&&e.verify.rc===0)||e.cost_usd==null?`—`:`$${Number(e.cost_usd).toFixed(3)}`}function Cn(e){if(!e.diff_stat.length)return X(`board.compare.noDiff`);let t=0,n=0;for(let r of e.diff_stat)t+=r.additions??0,n+=r.deletions??0;return X(`board.compare.diffSummary`,{files:e.diff_stat.length,add:t,del:n})}function wn({attempts:e,judgment:t,busy:n,judging:r,onViewDiff:i,onPick:a,onJudge:o}){Z();let s=e.every(e=>[`done`,`failed`,`cancelled`].includes(e.status));return(0,$.jsxs)(`div`,{className:`compare-view`,children:[(0,$.jsxs)(`div`,{className:`compare-head`,children:[(0,$.jsx)(`span`,{className:`subhint`,children:X(`board.compare.intro`,{n:e.length})}),(0,$.jsx)(`button`,{className:`b`,disabled:!s||r,title:s?void 0:X(`board.compare.waitAll`),onClick:o,children:X(r?`board.compare.judging`:`board.compare.judge`)})]}),t&&(0,$.jsxs)(`div`,{className:`judge-verdict`,children:[X(`board.compare.judgePicked`),(0,$.jsx)(`b`,{children:X(`board.compare.attemptN`,{n:t.winner_attempt})}),X(`board.compare.judgeDash`),` `,t.reason]}),(0,$.jsx)(`div`,{className:`compare-grid`,children:e.map(e=>(0,$.jsxs)(`article`,{className:`compare-card`,children:[(0,$.jsxs)(`header`,{children:[(0,$.jsxs)(`b`,{children:[`⑂ #`,e.n]}),` `,(0,$.jsx)(`span`,{className:`statpill s-${e.status}`,children:X(`board.status.${e.status}`,void 0,e.status)})]}),(0,$.jsxs)(`dl`,{children:[(0,$.jsx)(`dt`,{children:X(`board.compare.agent`)}),(0,$.jsxs)(`dd`,{children:[e.agent,e.model&&` · ${e.model}`]}),(0,$.jsx)(`dt`,{children:X(`board.compare.permission`)}),(0,$.jsx)(`dd`,{children:e.permission_mode||`—`}),(0,$.jsx)(`dt`,{children:X(`board.compare.check`)}),(0,$.jsx)(`dd`,{children:xn(e)}),(0,$.jsx)(`dt`,{children:X(`board.compare.duration`)}),(0,$.jsx)(`dd`,{children:bn(e)}),(0,$.jsx)(`dt`,{children:X(`board.compare.costTokens`)}),(0,$.jsxs)(`dd`,{children:[e.cost_usd==null?`—`:`$${Number(e.cost_usd).toFixed(3)}`,(e.input_tokens!=null||e.output_tokens!=null)&&X(`board.compare.tokensInOut`,{input:String(e.input_tokens??0),output:String(e.output_tokens??0)})]}),(0,$.jsx)(`dt`,{children:X(`board.compare.costPerPass`)}),(0,$.jsx)(`dd`,{children:Sn(e)}),(0,$.jsx)(`dt`,{children:X(`board.compare.diff`)}),(0,$.jsx)(`dd`,{children:Cn(e)})]}),(0,$.jsxs)(`div`,{className:`btnrow`,children:[(0,$.jsx)(`button`,{className:`b`,onClick:()=>i(e.n),children:X(`board.compare.viewDiff`)}),(0,$.jsx)(`button`,{className:`b ok`,disabled:n||e.status!==`done`,onClick:()=>a(e.n),children:X(`board.compare.pick`)})]})]},e.n))})]})}var Tn=0;function En(){return Tn+=1,`c${Tn}`}function Dn(e){return e.map(({file:e,line:t,side:n,text:r,code:i})=>({file:e,line:t,side:n,text:r,...i?{code:i}:{}}))}function On(e){return e>=85?`ctx-red`:e>=70?`ctx-amber`:``}function kn(e){return Math.max(0,Math.min(100,e))}function An(e){if(e==null||!Number.isFinite(e))return``;if(Math.abs(e)<1e3)return String(Math.round(e));let t=e/1e3,n=Math.round(t*10)/10;return(Number.isInteger(n)?String(n):n.toFixed(1))+`k`}function jn(e){return e==null||!Number.isFinite(e)?``:`$`+e.toFixed(e<.01&&e>0?3:2)}function Mn(e,t){let n=e||0,r=t||0;if(!n&&!r)return``;let i=[];return n&&i.push(`+${n}`),r&&i.push(`−${r}`),i.join(` `)}function Nn(e,t=Date.now()/1e3){if(!e)return``;let n=Math.round(e-t);if(n<=0)return X(`sessions.usage.resetsNow`);let r=Math.floor(n/3600),i=Math.floor(n%3600/60);return r>0?X(`sessions.usage.resetsInHours`,{hours:r,minutes:i}):X(`sessions.usage.resetsInMinutes`,{minutes:i})}function Pn(e){return e>=85?`quota-red`:e>=70?`quota-amber`:``}function Fn(e){if(!e)return{};let t=e=>typeof e==`number`&&Number.isFinite(e)?e:void 0,n=e.usage&&typeof e.usage==`object`?e.usage:{},r=t(e.cost_usd),i=t(e.output_tokens)??t(n.output_tokens)??t(e.tokens),a=t(e.input_tokens)??t(n.input_tokens),o=t(e.context_tokens),s=t(e.context_size),c=o!=null&&s?Math.min(100,Math.round(o/s*100)):void 0;return{costUSD:r,costEstimated:r!=null&&e.cost_source===`estimated`,inputTokens:a,outputTokens:i,contextTokens:o,contextSize:s,contextPct:c}}function In(e){return e.costUSD==null?``:e.costEstimated?X(`sessions.usage.estimatedCost`,{cost:jn(e.costUSD)}):jn(e.costUSD)}function Ln(e,t=Date.now()/1e3){if(!e)return``;let n=Math.max(0,Math.round(t-e));return n<60?X(`sessions.usage.ageSeconds`,{seconds:n}):n<3600?X(`sessions.usage.ageMinutes`,{minutes:Math.floor(n/60)}):n<86400?X(`sessions.usage.ageHours`,{hours:Math.floor(n/3600)}):X(`sessions.usage.ageDays`,{days:Math.floor(n/86400)})}var Rn=()=>({scoped:X(`sessions.memoryDelivery.mode.scoped`),managed:X(`sessions.memoryDelivery.mode.managed`),all:X(`sessions.memoryDelivery.mode.all`),manual:X(`sessions.memoryDelivery.mode.manual`),off:X(`sessions.memoryDelivery.mode.off`)});function zn(e){let t=(e||``).trim();return t?Rn()[t]||t:``}function Bn(e){return(e.title||``).trim()||(e.source||``).trim()||(e.id||``).trim()||X(`sessions.memoryDelivery.untitled`)}function Vn(e){if(e==null||!Number.isFinite(e)||e<=0)return X(`sessions.memoryDelivery.bytes`,{size:0});if(e<1024)return X(`sessions.memoryDelivery.bytes`,{size:Math.round(e)});let t=e/1024;return t<1024?X(`sessions.memoryDelivery.kilobytes`,{size:t<10?t.toFixed(1):Math.round(t)}):X(`sessions.memoryDelivery.megabytes`,{size:(t/1024).toFixed(1)})}function Hn(e){return e<=0?X(`sessions.memoryDelivery.noItems`):X(`sessions.memoryDelivery.items`,{count:e})}function Un(e){let t=[Hn(e.items.length),Vn(e.bytes)],n=zn(e.mode);return n&&t.push(n),t.join(` · `)}function Wn(e,t){return`/memory/items/${encodeURIComponent(e)}/${t}`}function Gn(e,t,n,r,i=!1){let[a,o]=(0,Q.useState)(),[s,c]=(0,Q.useState)(!1),[l,u]=(0,Q.useState)(``),[d,f]=(0,Q.useState)({}),p=(0,Q.useRef)(``),m=`${t}:${n}`,h=(0,Q.useRef)(m);function g(){let r=m;c(!0);let i=t===`session`?`/sessions/${n}/memory`:`/tasks/${n}/memory`;e.request(i).then(e=>{h.current===r&&(o(Array.isArray(e.deliveries)?e.deliveries:[]),u(``))}).catch(e=>{h.current===r&&(o(void 0),u(String(e)))}).finally(()=>{h.current===r&&c(!1)})}(0,Q.useEffect)(()=>{h.current=m,p.current=``,o(void 0),u(``),f({})},[m]),(0,Q.useEffect)(()=>{i&&p.current!==m&&(p.current=m,g())},[i,m]);function _(e,t){e.id&&f(n=>({...n,[e.id]:t}))}async function v(t,n){if(t.id)try{await e.request(Wn(t.id,`feedback`),{method:`POST`,body:{helpful:n}}),_(t,n?`helpful`:`irrelevant`),r(X(n?`sessions.memoryDeliveries.thanksHelpful`:`sessions.memoryDeliveries.notedIrrelevant`))}catch(e){r(String(e),!0)}}async function y(t){if(!t.id)return;let n=prompt(X(`sessions.memoryDeliveries.challengePrompt`));if(n!=null){if(!n.trim()){r(X(`sessions.memoryDeliveries.challengeNeedsReason`),!0);return}try{await e.request(Wn(t.id,`challenge`),{method:`POST`,body:{reason:n.trim()}}),_(t,`challenged`),r(X(`sessions.memoryDeliveries.challengeSent`))}catch(e){r(String(e),!0)}}}return{deliveries:a,busy:s,error:l,verdicts:d,load:g,review:v,challenge:y}}function Kn(e){Z();let t=Gn(e.api,e.kind,e.id,e.onNotice);return(0,$.jsx)(qn,{state:t})}function qn({state:e}){return Z(),(0,$.jsxs)(`details`,{className:`conversation-memory`,onToggle:t=>{t.currentTarget.open&&!e.deliveries&&!e.busy&&e.load()},children:[(0,$.jsxs)(`summary`,{children:[X(`sessions.memoryDeliveries.summary`),e.deliveries?.length?` · ${e.deliveries.length}`:``]}),(0,$.jsxs)(`div`,{className:`memory-body`,children:[e.busy&&!e.deliveries&&(0,$.jsx)(`p`,{className:`sub`,children:X(`sessions.memoryDeliveries.reading`)}),e.error&&(0,$.jsxs)(`p`,{className:`sub`,children:[X(`sessions.memoryDeliveries.unavailable`),` `,e.error]}),e.deliveries&&e.deliveries.length===0&&(0,$.jsx)(`p`,{className:`sub`,children:X(`sessions.memoryDeliveries.empty`)}),e.deliveries?.map(t=>(0,$.jsxs)(`section`,{className:`memory-delivery`,children:[(0,$.jsxs)(`header`,{children:[(0,$.jsx)(`b`,{children:Ln(t.at)||X(`sessions.memoryDeliveries.justNow`)}),(0,$.jsx)(`span`,{className:`memory-summary`,children:Un(t)})]}),t.items.length===0?(0,$.jsx)(`p`,{className:`sub`,children:X(`sessions.memoryDeliveries.unnamedRecords`)}):(0,$.jsx)(`ul`,{className:`memory-items`,children:t.items.map((n,r)=>(0,$.jsx)(Jn,{item:n,verdict:n.id?e.verdicts[n.id]:void 0,onReview:e.review,onChallenge:e.challenge},n.id||`${t.id}-${r}`))})]},t.id)),(e.deliveries||e.error)&&(0,$.jsx)(`button`,{className:`b`,disabled:e.busy,onClick:e.load,children:X(`sessions.memory.refresh`)})]})]})}function Jn({item:e,verdict:t,onReview:n,onChallenge:r}){return Z(),(0,$.jsxs)(`li`,{"data-verdict":t,children:[(0,$.jsxs)(`div`,{className:`memory-item-head`,children:[(0,$.jsx)(`b`,{children:Bn(e)}),e.source&&e.source!==Bn(e)&&(0,$.jsx)(`code`,{children:e.source})]}),e.snippet&&(0,$.jsxs)(`details`,{className:`memory-snippet`,children:[(0,$.jsx)(`summary`,{children:X(`sessions.memoryDeliveries.whatItSaid`)}),(0,$.jsx)(`p`,{children:e.snippet})]}),e.id?t?(0,$.jsx)(`small`,{className:`memory-verdict`,"data-verdict":t,children:X(t===`helpful`?`sessions.memoryDeliveries.markedHelpful`:t===`irrelevant`?`sessions.memoryDeliveries.markedIrrelevant`:`sessions.memoryDeliveries.markedWrong`)}):(0,$.jsxs)(`div`,{className:`memory-actions`,children:[(0,$.jsx)(`button`,{className:`b`,onClick:()=>n(e,!0),children:X(`sessions.memoryDeliveries.helpful`)}),(0,$.jsx)(`button`,{className:`b`,onClick:()=>n(e,!1),children:X(`sessions.memoryDeliveries.notRelevant`)}),(0,$.jsx)(`button`,{className:`b warn`,onClick:()=>r(e),children:X(`sessions.memoryDeliveries.thisIsWrong`)})]}):(0,$.jsx)(`small`,{children:X(`sessions.memoryDeliveries.cannotReview`)})]})}function Yn({delivery:e,attempt:t}){Z();let n=e.items.map(Bn).join(` · `);return(0,$.jsxs)(`article`,{className:`ev e-memory`,children:[(0,$.jsxs)(`div`,{className:`k`,children:[X(`sessions.memoryDeliveries.timelineKind`),t==null?``:` · `+X(`sessions.memoryDeliveries.attempt`,{n:t}),` · `,Ln(e.at)||X(`sessions.memoryDeliveries.justNow`)]}),(0,$.jsxs)(`pre`,{className:`body dim`,children:[Un(e),n?`\n${n}`:``]})]})}function Xn({taskId:e,api:t,onClose:r,onChat:a,onOpenSession:o,onTerminal:s,onChanged:c,onNotice:l,refreshVersion:u=0,initialCompare:d=!1}){Z();let[f,p]=(0,Q.useState)(),[m,h]=(0,Q.useState)([]),[g,_]=(0,Q.useState)(),[v,y]=(0,Q.useState)(),[b,x]=(0,Q.useState)(!1),[S,C]=(0,Q.useState)(d),[w,T]=(0,Q.useState)(!1),[E,O]=k(D.wrap,!1),[A,j]=M(D.mode,`unified`,[`unified`,`split`]),[N,P]=(0,Q.useState)(!1),[F,I]=(0,Q.useState)([]),[L,R]=(0,Q.useState)(``),[z,V]=(0,Q.useState)(!1);function H(e){I(t=>[...t,{...e,key:En()}])}function ee(e){I(t=>t.filter(t=>t.key!==e))}async function te(){if(f){V(!0);try{let e=await t.request(`/tasks/${f.id}/review`,{method:`POST`,body:{comments:Dn(F),summary:L}});l(X(`board.detail.reviewSent`,{n:String(e.comments??F.length)})),I([]),R(``),c()}catch(e){l(String(e),!0)}finally{V(!1)}}}let[U,W]=(0,Q.useState)(``),ne=Gn(t,`task`,e,l,!0);async function G(n,r=g){let i=r?`?attempt_n=${r}`:``,[a,o]=await Promise.all([t.task(e,n),t.request(`/tasks/${e}/events${i}`)]);p(a),h(o),_(e=>e??a.attempt?.n)}(0,Q.useEffect)(()=>{let e=new AbortController;return G(e.signal).catch(t=>!e.signal.aborted&&l(String(t),!0)),()=>e.abort()},[e,u]),(0,Q.useEffect)(()=>{y(void 0),x(!1),_(void 0),I([]),R(``)},[e]),(0,Q.useEffect)(()=>{let r=new EventSource(n(`/api/tasks/${e}/stream`));return r.addEventListener(`agent_event`,n=>{try{let r=JSON.parse(n.data);h(e=>g!=null&&r.attempt_n!==g||e.some(e=>e.id===r.id)?e:[...e,r].sort((e,t)=>e.seq-t.seq)),t.task(e).then(p).catch(()=>void 0)}catch{l(X(`board.detail.badLiveEvent`),!0)}}),()=>r.close()},[e,g]);async function K(n,r={}){P(!0);try{await t.request(`/tasks/${e}/${n}`,{method:`POST`,body:r}),await G(),c()}catch(e){l(String(e),!0)}finally{P(!1)}}async function q(){let e=U.trim();e&&(W(``),await K(`steer`,{text:e}))}async function re(n){_(n),h(await t.request(`/tasks/${e}/events?attempt_n=${n}`)),y(void 0),x(!1),I([]),R(``)}async function ie(n){if(confirm(X(`board.detail.pickConfirm`,{n}))){P(!0);try{await t.request(`/tasks/${e}/pick_attempt`,{method:`POST`,body:{n}}),C(!1),await G(),c(),l(X(`board.detail.picked`,{n}))}catch(e){l(String(e),!0)}finally{P(!1)}}}async function ae(){T(!0);try{await t.request(`/tasks/${e}/judge`,{method:`POST`}),l(X(`board.detail.judgeDispatched`))}catch(e){l(String(e),!0)}finally{T(!1)}}async function oe(n){await re(n),C(!1);try{y(await t.request(`/tasks/${e}/diff?attempt_n=${n}`)),x(!0)}catch(e){l(String(e),!0)}}async function se(){if(b){x(!1);return}try{y(await t.request(`/tasks/${e}/diff${g?`?attempt_n=${g}`:``}`)),x(!0)}catch(e){l(String(e),!0)}}if(!f)return(0,$.jsx)(B,{id:`sheet`,open:!0,className:`sheet`,"aria-label":X(`board.detail.loadingLabel`),onCancel:r,children:(0,$.jsx)(`p`,{"aria-busy":`true`,children:X(`board.detail.loading`)})});let ce=f.takeover;return(0,$.jsxs)(B,{id:`sheet`,open:!0,className:`sheet task-detail`,"aria-label":X(`board.detail.label`),onCancel:r,children:[(0,$.jsxs)(`header`,{className:`sheet-head`,children:[(0,$.jsx)(`h2`,{children:f.title}),(0,$.jsx)(`button`,{className:`x`,onClick:r,children:`✕`})]}),(0,$.jsxs)(`div`,{className:`statline s-${f.status}`,children:[(0,$.jsx)(`span`,{className:`statpill s-${f.status}`,children:X(`board.status.${f.status}`,void 0,f.status)}),` · `,f.project_name,` → `,f.target_name,f.attempt&&(0,$.jsxs)($.Fragment,{children:[` `,`· `,X(`board.compare.attemptN`,{n:f.attempt.n}),f.attempt.branch&&(0,$.jsxs)($.Fragment,{children:[` `,`· `,(0,$.jsx)(`code`,{children:f.attempt.branch})]})]})]}),f.limit&&(0,$.jsx)(Rt,{hold:f.limit,api:t,onNotice:l,onRefresh:async()=>{p(await t.task(e))}}),f.attempt?.result&&(()=>{let e=Fn(f.attempt.result);return e.costUSD==null&&e.outputTokens==null&&e.contextPct==null?null:(0,$.jsxs)(`div`,{className:`usage-line`,children:[e.costUSD!=null&&(0,$.jsx)(`span`,{className:`chip cost`,title:e.costEstimated?X(`board.usage.costEstimated`):void 0,children:In(e)}),e.costUSD==null&&e.outputTokens!=null&&(0,$.jsx)(`span`,{className:`chip`,children:X(`board.usage.tokens`,{tokens:An(e.outputTokens)})}),e.contextPct!=null&&(0,$.jsxs)(`span`,{className:`ctxbar ctx-used ${On(e.contextPct)}`,title:X(`board.usage.contextUsed`,{used:An(e.contextTokens),size:An(e.contextSize)}),children:[X(`board.usage.ctx`),` `,(0,$.jsx)(`i`,{children:(0,$.jsx)(`b`,{style:{width:`${e.contextPct}%`}})}),` `,e.contextPct,`%`]})]})})(),f.attempt?.worktree_path&&f.status!==`done`&&(0,$.jsx)(`div`,{className:`btnrow`,children:(0,$.jsx)(yn,{targetId:f.target_id,path:f.attempt.worktree_path})}),f.attempts.length>1&&(0,$.jsxs)(`div`,{className:`btnrow attempt-chips`,children:[f.attempts.map(e=>(0,$.jsxs)(`button`,{className:g===e.n&&!S?`b ok`:`b`,onClick:()=>{C(!1),re(e.n)},children:[X(`board.detail.attemptShort`,{n:e.n}),e.model&&` · ${e.model}`,` · `,X(`board.status.${e.status}`,void 0,e.status),e.cost_usd!=null&&` · $${Number(e.cost_usd).toFixed(2)}`]},e.n)),(0,$.jsx)(`button`,{className:S?`b ok`:`b`,onClick:()=>C(e=>!e),children:X(`board.detail.compare`)})]}),S&&f.attempts.length>1&&(0,$.jsx)(wn,{attempts:f.attempts,judgment:f.attempt?.result?.judge,busy:N,judging:w,onViewDiff:e=>void oe(e),onPick:e=>void ie(e),onJudge:()=>void ae()}),(0,$.jsxs)(`div`,{id:`actions`,className:`btnrow actions`,children:[(0,$.jsx)(`button`,{className:`b ok grow`,onClick:()=>ce?.status===`ready`&&ce.session_id?o(ce.session_id):a(f),children:ce?.status===`ready`?X(`board.detail.openSession`):X(`board.card.chat`)}),ce?.status===`failed`&&(0,$.jsx)(`button`,{className:`b warn`,onClick:()=>void K(`takeover`),children:X(`board.detail.retryTakeover`)}),!ce&&f.attempt?.worktree_path&&[`running`,`review`,`failed`,`cancelled`,`done`].includes(f.status)&&f.target_kind!==`sandbox`&&(0,$.jsx)(`button`,{className:`b ok`,onClick:()=>void K(`takeover`),children:X(`board.detail.takeOver`)}),!ce&&[`backlog`,`failed`,`cancelled`].includes(f.status)&&(0,$.jsx)(`button`,{className:`b ok`,disabled:N,onClick:()=>void K(`dispatch`),children:f.status===`backlog`?X(`board.detail.dispatch`):X(`board.detail.retry`)}),!ce&&[`queued`,`running`].includes(f.status)&&(0,$.jsx)(`button`,{className:`b no`,disabled:N,onClick:()=>void K(`cancel`),children:X(`board.detail.cancel`)}),!ce&&f.status===`review`&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`button`,{className:`b ok`,onClick:()=>void K(`complete`),children:X(`board.detail.markDone`)}),(0,$.jsx)(`button`,{className:`b warn`,onClick:()=>{let e=prompt(X(`board.detail.whatShouldChange`));e&&K(`followup`,{feedback:e})},children:X(`board.detail.requestChanges`)})]}),[`review`,`done`].includes(f.status)&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`button`,{className:`b`,onClick:()=>void se(),children:X(b?`board.detail.timeline`:`board.detail.diff`)}),(0,$.jsx)(`button`,{className:`b`,onClick:()=>{let e=prompt(X(`board.detail.commitMessage`),f.title);if(e==null)return;let t=confirm(X(`board.detail.pushConfirm`));K(`commit`,{message:e,push:t,pr:t&&confirm(X(`board.detail.prConfirm`))})},children:X(`board.detail.commit`)})]}),!ce&&[`done`,`failed`,`cancelled`].includes(f.status)&&f.attempt?.worktree_path&&(0,$.jsx)(`button`,{className:`b`,onClick:()=>confirm(X(`board.detail.cleanConfirm`))&&void K(`cleanup`),children:X(`board.detail.clean`)}),f.status===`running`&&f.attempt?.tmux_session&&(0,$.jsx)(`button`,{className:`b`,onClick:()=>void t.request(`/tasks/${f.id}/terminal`,{method:`POST`}).then(e=>{s(e.url,f.title),e.notice&&l(e.notice)}).catch(e=>l(String(e),!0)),children:X(`board.detail.terminal`)}),(0,$.jsx)(`button`,{className:`b no`,onClick:()=>confirm(X(`board.detail.deleteConfirm`,{title:f.title}))&&void t.request(`/tasks/${f.id}`,{method:`DELETE`}).then(()=>{c(),r()}),children:X(`board.detail.delete`)})]}),(0,$.jsx)(qn,{state:ne}),f.status===`running`&&f.attempt?.driver===`claude-steer`&&(0,$.jsxs)(`form`,{className:`steer-row`,onSubmit:e=>{e.preventDefault(),q()},children:[(0,$.jsx)(`input`,{type:`text`,className:`steer-input`,placeholder:X(`board.detail.steerPlaceholder`),value:U,onChange:e=>W(e.target.value)}),(0,$.jsx)(`button`,{className:`b ok`,type:`submit`,disabled:N||!U.trim(),children:X(`board.detail.send`)})]}),ce&&(0,$.jsx)(`p`,{className:`subhint`,children:ce.status===`ready`?X(`board.detail.takeoverReady`):ce.status===`failed`?ce.error:X(`board.detail.takingOver`)}),b?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`header`,{className:`diffhead`,children:[X(`board.detail.diffHead`,{n:v?.attempt_n??``,files:v?.stats.length??0}),` `,(0,$.jsx)(we,{mode:A,onChange:j}),(0,$.jsx)(`button`,{className:`wrapbtn`+(E?` on`:``),"aria-pressed":E,onClick:()=>O(!E),children:X(`board.detail.wrap`,{state:X(E?`board.detail.wrapOn`:`board.detail.wrapOff`)})})]}),(0,$.jsx)(Ce,{files:v?.files??[],stats:v?.stats??[],wrap:E,mode:A,commentable:f.status===`review`,comments:F,onAddComment:H}),f.status===`review`&&(0,$.jsx)(i,{comments:F,summary:L,onSummaryChange:R,onRemove:ee,onSend:()=>void te(),busy:z,sendLabel:X(`board.detail.sendReview`)})]}):(0,$.jsxs)(`div`,{className:`tl`,children:[ne.deliveries?.map(e=>(0,$.jsx)(Yn,{delivery:e,attempt:f.attempts.length>1?f.attempts.find(t=>t.id===e.attempt_id)?.n:void 0},e.id)),m.length===0&&f.prompt&&(0,$.jsxs)(`article`,{className:`ev`,children:[(0,$.jsx)(`div`,{className:`k`,children:X(`board.detail.promptLabel`)}),(0,$.jsx)(`pre`,{children:f.prompt})]}),m.map(e=>(0,$.jsx)(Zn,{event:e},e.id||`${e.attempt_n}-${e.seq}`))]})]})}function Zn({event:e}){Z();let t=e.payload,n=e.type===`init`?X(`board.event.sessionStart`):e.type===`text`?X(`board.event.agent`):e.type===`tool_use`?X(`board.event.tool`):e.type===`tool_result`?X(`board.event.result`)+(t.is_error?X(`board.event.error`):``):e.type===`verify`?X(`board.event.autoVerify`,{outcome:t.rc===0?X(`board.event.pass`):X(`board.event.fail`)}):e.type===`review_verdict`?X(`board.event.reviewerVerdict`,{verdict:String(t.verdict??``)}):e.type===`result`?X(`board.event.finished`,{subtype:String(t.subtype??``)}):e.type===`rate_limit`?X(`board.event.usageLimit`):e.type,r=e.type===`text`?t.text:e.type===`tool_use`?`${String(t.name??``)} ${JSON.stringify(t.input??{}).slice(0,120)}`:e.type===`tool_result`?String(t.content??``).slice(0,400):e.type===`verify`?`${String(t.cmd??``)}\n${String(t.output??``).slice(-500)}`:e.type===`review_verdict`?String(t.notes??``).slice(-400):e.type===`result`?String(t.result??``):e.type===`error`?String(t.message??``):e.type===`rate_limit`?X(`board.event.stoppedByLimit`)+(t.resets_at?X(`board.event.resets`,{when:new Date(Number(t.resets_at)*1e3).toLocaleString()}):``):JSON.stringify(t).slice(0,300);return(0,$.jsxs)(`article`,{className:`ev e-${e.type}`,children:[(0,$.jsx)(`div`,{className:`k`,children:n}),(0,$.jsx)(`pre`,{className:`body`,children:String(r??``)})]})}function Qn({api:e}){Z();let[t,r]=(0,Q.useState)(),[i,a]=(0,Q.useState)();(0,Q.useEffect)(()=>{let t=!1,i=()=>e.request(`/usage?days=1`).then(e=>{t||(r(e.quota),a(e.budgets))}).catch(()=>{});i();let o=new EventSource(n(`/api/stream`));o.addEventListener(`session`,i);let s=window.setInterval(i,6e4);return()=>{t=!0,o.close(),clearInterval(s)}},[e]);let o=[i?.overall.daily,i?.overall.weekly].filter(e=>!!e).sort((e,t)=>t.percent-e.percent)[0],s=o&&(0,$.jsxs)(`span`,{className:`budget-chip${i?.any_blocked?` budget-blocked`:``}`,title:X(`sessions.quota.budgetTitle`,{spent:o.spent_usd.toFixed(2),cap:o.cap_usd.toFixed(2)}),children:[X(`sessions.quota.budget`,{spent:o.spent_usd.toFixed(0),cap:o.cap_usd.toFixed(0)}),i?.any_blocked?X(`sessions.quota.blocked`):``]});if(!t||t.empty)return s??null;let c=t.stale;return(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`div`,{className:`quota-chip${c?` stale`:``}`,title:c?X(`sessions.quota.lastUpdated`,{age:Ln(t.at)}):void 0,children:[(0,$.jsxs)(`span`,{className:`quota-window ${Pn(t.five_hour.used_percentage)}`,children:[X(`sessions.quota.fiveHour`,{percent:t.five_hour.used_percentage}),t.five_hour.resets_at?(0,$.jsxs)(`small`,{children:[` `,Nn(t.five_hour.resets_at)]}):null]}),(0,$.jsxs)(`span`,{className:`quota-window ${Pn(t.seven_day.used_percentage)}`,children:[X(`sessions.quota.sevenDay`,{percent:t.seven_day.used_percentage}),t.seven_day.resets_at?(0,$.jsxs)(`small`,{children:[` `,Nn(t.seven_day.resets_at)]}):null]}),c&&(0,$.jsx)(`span`,{className:`quota-stale-note`,children:Ln(t.at)})]}),s]})}var $n={pending:`info`,failing:`warn`,passed:`ds`,capped:`bad`,error:`bad`,stalled:`bad`};function er({ci:e}){if(Z(),!e)return null;let t=[e.pr_url,e.failing.length?X(`review.ci.failing`,{checks:e.failing.join(`, `)}):``,e.detail||``].filter(Boolean).join(` +`);return(0,$.jsx)(`a`,{className:`chip ci-chip ci-${e.state} ${$n[e.state]||``}`,href:e.pr_url,target:`_blank`,rel:`noreferrer`,title:t,onClick:e=>e.stopPropagation(),children:e.label})}function tr(){try{let e=localStorage.getItem(`adk-quick-mode`);return e===`orchestrate`||e===`race`?e:`dispatch`}catch{return`dispatch`}}var nr=[`backlog`,`queued`,`running`,`review`,`done`,`failed`];function rr(e){return{backlog:X(`board.status.backlog`),queued:X(`board.status.queued`),running:X(`board.status.running`),review:X(`board.status.review`),done:X(`board.status.done`),failed:X(`board.status.failed`),cancelled:X(`board.status.cancelled`)}[e]??e}function ir({api:e,onOpenTask:t,onChat:n,onNotice:r,onOpenSession:i=()=>{},onOpenTerminal:a=()=>{},refreshVersion:o=0,openTaskId:s,openTaskVersion:c=0,newTaskVersion:l=0,routinesVersion:u=0,onExternalActionConsumed:d=()=>{}}){Z();let f=(0,Q.useRef)(0),[p,m]=(0,Q.useState)([]),[h,g]=(0,Q.useState)([]),[_,v]=(0,Q.useState)(``),[y,b]=(0,Q.useState)(0),[x,S]=(0,Q.useState)(``),[C,w]=(0,Q.useState)(`review`),[T,E]=(0,Q.useState)(!1),[D,O]=(0,Q.useState)(()=>window.matchMedia(`(max-width: 700px)`).matches),[k,A]=(0,Q.useState)(!1),[j,M]=(0,Q.useState)(),[N,P]=(0,Q.useState)(()=>tr()),[F,I]=(0,Q.useState)(),[L,R]=(0,Q.useState)();async function z(t){let n=++f.current,[r,i]=await Promise.all([e.tasks(t),e.projects(t)]);t?.aborted||n!==f.current||(m(r),M(e=>typeof e==`number`&&!r.some(t=>t.id===e)?void 0:e),g(i),b(e=>e||i[0]?.id||0))}(0,Q.useEffect)(()=>{try{localStorage.setItem(`adk-quick-mode`,N)}catch{}},[N]),(0,Q.useEffect)(()=>{e.request(`/delegation`).then(e=>I(e&&typeof e.orchestrate_ready==`boolean`?e:{orchestrate_ready:!1})).catch(()=>I({orchestrate_ready:!1}))},[o]),(0,Q.useEffect)(()=>{let e=window.matchMedia(`(max-width: 700px)`),t=()=>O(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]),(0,Q.useEffect)(()=>{let e=new AbortController;return z(e.signal).catch(t=>{e.signal.aborted||r(String(t),!0)}),()=>e.abort()},[o]),(0,Q.useEffect)(()=>{s&&(M(s),d(`task`))},[s,c]),(0,Q.useEffect)(()=>{l&&(M(`new`),d(`new`))},[l]),(0,Q.useEffect)(()=>{u&&(M(`routines`),d(`routines`))},[u]);let B=(0,Q.useMemo)(()=>{let e=_.trim().toLowerCase();return e?p.filter(t=>`${t.title} ${t.project_name} ${t.target_name}`.toLowerCase().includes(e)):p},[p,_]);(0,Q.useEffect)(()=>{if(T)return;let e=[`review`,`running`,`queued`,`backlog`,`failed`,`done`].find(e=>B.some(t=>t.status===e));e&&w(e)},[B,T]);async function V(){let t=x.trim();if(!t||!y)return;let n=N===`orchestrate`;if(n&&F&&!F.orchestrate_ready){r(X(`board.orchestrateNeedsDelegation`),!0);return}try{let i=await e.createTask({project_id:y,title:t.slice(0,70),prompt:t,...n?{orchestrate:!0}:{}});if(N===`race`){let n=h.find(e=>e.id===y),a=[];try{a=Xt((await e.request(`/targets`)).find(e=>e.id===n?.target_id)?.info_json)}catch{}let o=Yt(3,i.agent||`claude`,a,`mixed`);await e.request(`/tasks/${i.id}/dispatch`,{method:`POST`,body:{variants:o.map(e=>({agent:e}))}}),S(e=>e===t?``:e),r(X(`remote.race.racingAgents`,{agents:o.join(`, `),text:t.slice(0,40)})),await z(),R(i.id),M(i.id);return}await e.taskAction(i.id,`dispatch`,{}),S(e=>e===t?``:e),r(X(n?`board.orchestrating`:`board.dispatched`,{text:t.slice(0,40)})),await z()}catch(e){r(String(e),!0)}}async function H(t,n){t.preventDefault();let i=t.dataTransfer.getData(`text/lec-task`);if(!i)return;let a=JSON.parse(i);try{if(n===`queued`&&[`backlog`,`failed`,`cancelled`].includes(a.status))await e.taskAction(a.id,`dispatch`,{});else if(n===`done`&&a.status===`review`)await e.taskAction(a.id,`complete`,{});else return r(X(`board.badDrop`,{from:rr(a.status),to:rr(n)}),!0);await z()}catch(e){r(String(e),!0)}}async function ee(t){confirm(X(`board.clearConfirm`,{status:rr(t)}))&&(await e.request(`/tasks/clear`,{method:`POST`,body:{statuses:[t]}}),await z())}let te=r=>{let i=B.filter(e=>e.status===r),a=r===`done`&&!k?i.slice(0,15):i;return(0,$.jsxs)(`section`,{className:`col s-${r} ${C===r?`mobile-on`:`mobile-off`}`,onDragOver:e=>e.preventDefault(),onDrop:e=>void H(e,r),children:[(0,$.jsxs)(`header`,{className:`col-head`,children:[rr(r),(0,$.jsx)(`span`,{className:`cnt`,children:i.length}),(r===`done`||r===`failed`)&&i.length>0&&(0,$.jsx)(`button`,{className:`col-clear`,onClick:()=>void ee(r),children:X(`board.clear`)})]}),(0,$.jsxs)(`div`,{className:`col-body`,children:[a.map(r=>(0,$.jsxs)(`article`,{className:`card s-${r.status}`,draggable:!0,onDragStart:e=>e.dataTransfer.setData(`text/lec-task`,JSON.stringify({id:r.id,status:r.status})),onClick:()=>{t(r),M(r.id)},children:[(0,$.jsx)(`button`,{className:`card-x`,"aria-label":X(`board.card.deleteLabel`,{title:r.title}),onClick:t=>{t.stopPropagation(),(r.status===`done`||confirm(X(`board.card.deleteConfirm`,{title:r.title})))&&e.request(`/tasks/${r.id}`,{method:`DELETE`}).then(()=>z())},children:`✕`}),(0,$.jsx)(`div`,{className:`t`,children:r.title}),(0,$.jsx)(`button`,{className:`b task-chat`,"aria-label":X(`board.card.chatLabel`),onClick:e=>{e.stopPropagation(),n(r)},children:X(`board.card.chat`)}),(0,$.jsxs)(`div`,{className:`meta`,children:[(0,$.jsx)(`span`,{className:`chip`,children:r.project_name}),(0,$.jsx)(`span`,{className:`chip tgt`,children:r.target_name}),Array.isArray(r.attempt?.diff_stat)&&r.attempt.diff_stat.length>0&&(()=>{let e=r.attempt.diff_stat;return(0,$.jsxs)(`span`,{className:`chip ds`,children:[`+`,e.reduce((e,t)=>e+(t.additions||0),0),` `,(0,$.jsxs)(`b`,{children:[`−`,e.reduce((e,t)=>e+(t.deletions||0),0)]})]})})(),(()=>{let e=Fn(r.attempt?.result);return(0,$.jsxs)($.Fragment,{children:[e.costUSD!=null&&(0,$.jsx)(`span`,{className:`chip cost`,title:e.costEstimated?X(`board.usage.costEstimated`):void 0,children:In(e)}),e.costUSD==null&&e.outputTokens!=null&&(0,$.jsx)(`span`,{className:`chip`,children:X(`board.usage.tokens`,{tokens:An(e.outputTokens)})}),e.contextPct!=null&&(0,$.jsxs)(`span`,{className:`ctxbar ctx-used ${On(e.contextPct)}`,title:X(`board.usage.contextUsed`,{used:An(e.contextTokens),size:An(e.contextSize)}),children:[X(`board.usage.ctx`),` `,(0,$.jsx)(`i`,{children:(0,$.jsx)(`b`,{style:{width:`${e.contextPct}%`}})}),` `,e.contextPct,`%`]})]})})(),(0,$.jsx)(er,{ci:r.ci}),typeof r.attempt?.verify?.cmd==`string`&&(0,$.jsx)(`span`,{className:`chip ${r.attempt.verify.rc===0?`ds`:`bad`}`,children:r.attempt.verify.rc===0?X(`board.card.verified`):X(`board.card.verifyFailed`)}),r.priority>=3&&(0,$.jsx)(`span`,{className:`chip warn`,children:X(`board.card.highPriority`)}),r.agent&&r.agent!==`claude`&&(0,$.jsx)(`span`,{className:`chip tgt`,children:r.agent}),r.limit&&(0,$.jsx)(zt,{hold:r.limit}),r.labels?.includes(`orchestrated`)&&(0,$.jsx)(`span`,{className:`chip orch`,children:X(`board.card.orchestrated`)}),r.attempts.length>1&&(0,$.jsxs)(`span`,{className:`chip info`,children:[`⑂ ×`,r.attempts.length]})]})]},r.id)),i.length===0&&(0,$.jsx)(`div`,{className:`col-empty`,children:X(`board.empty`)}),i.length>a.length&&(0,$.jsx)(`button`,{className:`col-more`,onClick:()=>A(!0),children:X(`board.showMore`,{n:i.length-a.length})})]})]})};return(0,$.jsxs)(`section`,{children:[(0,$.jsxs)(`div`,{className:`page-heading`,children:[(0,$.jsx)(`h2`,{children:X(`board.title`)}),(0,$.jsx)(Qn,{api:e}),(0,$.jsxs)(`div`,{className:`btnrow`,children:[(0,$.jsx)(`button`,{id:`qb-routines`,onClick:()=>M(`routines`),children:X(`board.routines`)}),(0,$.jsx)(`button`,{id:`qb-claims`,onClick:()=>M(`claims`),children:X(`board.claims`)}),(0,$.jsxs)(`button`,{className:`wide-only-control`,onClick:()=>M(`new`),children:[`+ `,X(`board.newTask`)]})]})]}),(0,$.jsxs)(`div`,{id:`quickbar`,className:N===`orchestrate`?`orchestrate`:``,children:[(0,$.jsxs)(`div`,{id:`qb-mode`,role:`radiogroup`,"aria-label":X(`board.quick.modeLabel`),children:[(0,$.jsx)(`button`,{type:`button`,role:`radio`,"aria-checked":N===`dispatch`,className:N===`dispatch`?`on`:``,onClick:()=>P(`dispatch`),title:X(`board.quick.dispatchTitle`),children:X(`board.quick.dispatch`)}),(0,$.jsx)(`button`,{type:`button`,role:`radio`,"aria-checked":N===`orchestrate`,className:N===`orchestrate`?`on`:``,onClick:()=>P(`orchestrate`),title:X(`board.quick.orchestrateTitle`),children:X(`board.quick.orchestrate`)}),(0,$.jsx)(`button`,{type:`button`,role:`radio`,id:`qb-race`,"aria-checked":N===`race`,className:N===`race`?`on`:``,onClick:()=>P(`race`),title:X(`remote.race.quickTitle`),children:X(`remote.race.quick`)})]}),(0,$.jsx)(`select`,{id:`qb-project`,value:y,onChange:e=>b(Number(e.target.value)),children:h.map(e=>(0,$.jsx)(`option`,{value:e.id,children:e.name},e.id))}),(0,$.jsx)(`input`,{id:`qb-input`,value:x,onChange:e=>S(e.target.value),onKeyDown:e=>{e.key===`Enter`&&V()},placeholder:X(N===`orchestrate`?`board.quick.orchestratePlaceholder`:N===`race`?`remote.race.quickPlaceholder`:`board.quick.dispatchPlaceholder`)}),(0,$.jsx)(`input`,{id:`qb-filter`,value:_,onChange:e=>v(e.target.value),placeholder:X(`board.quick.filter`)})]}),N===`orchestrate`&&F&&(0,$.jsx)(`div`,{id:`qb-orch-hint`,className:F.orchestrate_ready?``:`off`,children:F.orchestrate_ready?(0,$.jsxs)($.Fragment,{children:[X(`board.quick.hintLead`,{lead:F.settings?.lead_agent||X(`board.quick.hintProjectAgent`)}),(0,$.jsx)(`b`,{children:F.settings?.worker_agent}),X(`board.quick.hintWorker`),` `,(0,$.jsx)(`button`,{type:`button`,className:`linkish`,onClick:()=>M(`new`),children:X(`board.quick.openFullForm`)}),`.`]}):(0,$.jsxs)($.Fragment,{children:[X(`board.quick.needsBefore`),(0,$.jsx)(`b`,{children:X(`board.quick.needsDelegated`)}),X(`board.quick.needsMiddle`),(0,$.jsx)(`a`,{href:`#settings/connections`,children:X(`board.quick.openSettings`)}),X(`board.quick.needsAfter`)]})}),(0,$.jsx)(`div`,{className:`colstrip`,children:nr.map(e=>(0,$.jsxs)(`button`,{className:`colchip s-${e} ${C===e?`on`:``}`,onClick:()=>{w(e),E(!0)},children:[rr(e),(0,$.jsx)(`b`,{children:B.filter(t=>t.status===e).length})]},e))}),(0,$.jsx)(`div`,{id:`board`,children:nr.filter(e=>!D||e===C).map(e=>(0,$.jsx)(`div`,{className:`board-column`,children:te(e)},e))}),j===`new`&&(0,$.jsx)($t,{api:e,projects:h,onClose:()=>M(void 0),onCreated:()=>void z(),onChat:e=>{M(e.id),n(e)},onCompare:e=>{R(e.id),M(e.id)},onNotice:r}),j===`routines`&&(0,$.jsx)(en,{api:e,projects:h,onClose:()=>M(void 0),onTask:e=>M(e.id),onChanged:()=>void z(),onNotice:r}),j===`claims`&&(0,$.jsx)(Wt,{api:e,projects:h,onClose:()=>M(void 0),onNotice:r}),typeof j==`number`&&(0,$.jsx)(Xn,{taskId:j,initialCompare:L===j,api:e,onClose:()=>{M(void 0),R(void 0)},onChat:n,onOpenSession:i,onTerminal:a,onChanged:()=>void z(),onNotice:r,refreshVersion:o},j)]})}function ar(e,t=64){if(e<=0)return 0;let n=e/2;return n<=t?n:t+Math.sqrt(n-t)*4}function or(e,t){let n=Math.abs(e),r=Math.abs(t);if(!(n<10&&r<10))return n>r*1.3?`x`:`y`}function sr(e,t,n){let r=Math.max(72,t*.3);if(Math.abs(e)>=r||Math.abs(e)>36&&Math.abs(n)>.7)return e>0?`right`:`left`}function cr(e,t,n,r){if(e>0&&!n||e<0&&!t)return e/6;let i=r*.45,a=Math.abs(e);return Math.sign(e)*(a<=i?a:i+(a-i)/4)}function lr({left:e,right:t,children:n,id:r}){let i=(0,Q.useRef)(null),a=(0,Q.useRef)(null),[o,s]=(0,Q.useState)(),c=(0,Q.useRef)(void 0);if(!e&&!t)return(0,$.jsx)($.Fragment,{children:n});let l=(e,t)=>{let n=a.current;n&&(n.style.transition=t?`transform .22s cubic-bezier(.2,.8,.2,1)`:`none`,n.style.transform=e?`translateX(${e}px)`:``)};return(0,$.jsxs)(`div`,{ref:i,className:`swipe-row ${o?`swiping-`+o:``}`,"data-swipe-row":r,onPointerDown:e=>{e.pointerType===`touch`&&e.isPrimary&&(e.target instanceof Element&&e.target.closest(`input,textarea,select,.action-menu[open]`)||(c.current={id:e.pointerId,x:e.clientX,y:e.clientY,t:performance.now(),dx:0,v:0}))},onPointerMove:n=>{let r=c.current;if(!r||r.id!==n.pointerId)return;let a=n.clientX-r.x,o=n.clientY-r.y;if(r.axis??=or(a,o),r.axis!==`x`){r.axis===`y`&&(c.current=void 0);return}try{i.current?.setPointerCapture(n.pointerId)}catch{}let u=performance.now();r.v=(a-r.dx)/Math.max(1,u-r.t),r.dx=a,r.t=u;let d=i.current?.clientWidth||360,f=a>0?t?`right`:void 0:e?`left`:void 0;s(f);let p=sr(a,d,0);p&&p===f&&r.ready!==p&&A(`tick`),r.ready=p===f?p:void 0,l(cr(a,!!e,!!t,d),!1)},onPointerUp:n=>{let r=c.current;if(c.current=void 0,!r||r.id!==n.pointerId||r.axis!==`x`)return;let a=i.current?.clientWidth||360,o=sr(r.dx,a,r.v),u=o===`right`?t:o===`left`?e:void 0;if(!u){l(0,!0),s(void 0);return}A(`confirm`),l(Math.sign(r.dx)*a,!0),Promise.resolve(u.run()).finally(()=>{l(0,!0),s(void 0)})},onPointerCancel:()=>{c.current=void 0,l(0,!0),s(void 0)},onClickCapture:e=>{o&&(e.preventDefault(),e.stopPropagation())},children:[t&&(0,$.jsx)(`div`,{className:`swipe-under swipe-right ${t.tone}`,"aria-hidden":`true`,children:t.label}),e&&(0,$.jsx)(`div`,{className:`swipe-under swipe-left ${e.tone}`,"aria-hidden":`true`,children:e.label}),(0,$.jsx)(`div`,{ref:a,className:`swipe-card`,children:n})]})}var ur=`(max-width: 600px)`;function dr(){let[e,t]=(0,Q.useState)(()=>typeof matchMedia==`function`&&matchMedia(ur).matches);return(0,Q.useEffect)(()=>{if(typeof matchMedia!=`function`)return;let e=matchMedia(ur),n=()=>t(e.matches);return e.addEventListener(`change`,n),()=>e.removeEventListener(`change`,n)},[]),e}function fr(e,t,n){let r=e.name||X(`sessions.card.sessionFallback`),i=async(t,r,i=!0)=>{try{await t(),i?n.closed(e,r):n.notice(r),await n.refresh()}catch(e){n.notice(String(e),!0)}},a=t&&t.status===`pending`?{label:X(`swipe.approve`),tone:`ok`,run:()=>i(()=>n.decide(t.id),X(`swipe.approved`,{tool:t.tool_name,name:r}),!1)}:void 0,o;return o=e.archived_at!=null||e.setup_state===`creating`?void 0:e.ended_at==null?e.status===`dead`?{label:X(`swipe.dismiss`),tone:`warn`,run:()=>i(()=>n.request(`/sessions/${e.id}`,{method:`DELETE`}),X(`swipe.dismissed`,{name:r}),!1)}:{label:X(`swipe.archive`),tone:`warn`,run:()=>n.confirm(X(`swipe.confirmStop`,{name:r}))?i(()=>n.request(`/sessions/${e.id}/archive`,{method:`POST`,body:{stop:!0}}),X(`swipe.stopped`,{name:r})):void 0}:{label:X(`swipe.archive`),tone:`warn`,run:()=>i(()=>n.request(`/sessions/${e.id}/archive`,{method:`POST`,body:{stop:!1}}),X(`swipe.archived`,{name:r}))},{left:o,right:a}}var pr=e=>e<1024?X(`sessions.scratchReview.kib`,{size:e}):X(`sessions.scratchReview.mib`,{size:(e/1024).toFixed(+(e<10240))}),mr=e=>e<1?X(`sessions.scratchReview.today`):X(`sessions.scratchReview.idleDays`,{days:Math.floor(e)});function hr({api:e,onNotice:t,startOpen:n}){Z();let r=(0,Q.useRef)(null);(0,Q.useEffect)(()=>{n&&r.current&&(r.current.open=!0,r.current.scrollIntoView({block:`nearest`}))},[n]);let[i,a]=(0,Q.useState)(),[o,s]=(0,Q.useState)(!1),[c,l]=(0,Q.useState)(``),u=(0,Q.useCallback)(()=>{s(!0),e.request(`/scratch`).then(a).catch(e=>t(String(e),!0)).finally(()=>s(!1))},[e,t]),d=(i?.targets||[]).flatMap(e=>e.entries),f=d.filter(e=>e.verdict===`work`),p=d.filter(e=>e.verdict===`empty`),m=(i?.targets||[]).filter(e=>e.error),h=(n,r)=>{(r!==`discard`||confirm(X(`sessions.scratchReview.confirmDiscard`,{name:n.name,reasons:n.reasons.join(` +`)})))&&(l(n.path),e.request(`/scratch/`+r,{method:`POST`,body:{target_id:n.target_id,name:n.name}}).then(u).catch(e=>t(String(e),!0)).finally(()=>l(``)))};return(0,$.jsxs)(`details`,{ref:r,className:`scratch-review`,id:`scratch-review`,onToggle:e=>{e.currentTarget.open&&!i&&!o&&u()},children:[(0,$.jsx)(`summary`,{children:X(`sessions.scratchReview.summary`)}),(0,$.jsxs)(`div`,{className:`scratch-body`,children:[o&&(0,$.jsx)(`p`,{className:`sub`,children:X(`sessions.scratchReview.inspecting`)}),i&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`p`,{className:`sub`,id:`scratch-summary`,children:[f.length?X(`sessions.scratchReview.holdWork`,{n:f.length}):X(`sessions.scratchReview.nothingUnclaimed`),` `,p.length?X(`sessions.scratchReview.emptyIdle`,{n:p.length,days:i.days}):X(`sessions.scratchReview.noneDue`)]}),m.map(e=>(0,$.jsx)(`p`,{className:`sub`,children:X(`sessions.scratchReview.uninspectable`,{target:e.target_name,error:e.error??``})},e.target_name)),f.map(e=>(0,$.jsxs)(`div`,{className:`scratch-row`,"data-scratch":e.name,children:[(0,$.jsxs)(`div`,{className:`scratch-what`,children:[(0,$.jsx)(`b`,{children:e.name}),(0,$.jsxs)(`small`,{children:[e.target_name,` · `,mr(e.age_days),` · `,pr(e.size_kb),e.sessions.length?` · `+e.sessions.map(e=>e.name).join(`, `):``]}),(0,$.jsx)(`small`,{className:`scratch-why`,children:e.reasons.join(` · `)})]}),(0,$.jsx)(`button`,{className:`b`,disabled:c===e.path,title:X(`sessions.scratchReview.keepTitle`),onClick:()=>h(e,`keep`),children:X(`sessions.scratchReview.keep`)}),(0,$.jsx)(`button`,{className:`b danger`,disabled:c===e.path,title:X(`sessions.scratchReview.discardTitle`),onClick:()=>h(e,`discard`),children:X(`sessions.scratchReview.discard`)})]},e.target_id+e.path)),(0,$.jsxs)(`div`,{className:`scratch-actions`,children:[(0,$.jsx)(`button`,{className:`b`,disabled:o,onClick:u,children:X(`sessions.memory.refresh`)}),p.length>0&&(0,$.jsx)(`button`,{className:`b`,id:`scratch-sweep`,disabled:o,onClick:()=>{s(!0),e.request(`/scratch/sweep`,{method:`POST`,body:{}}).then(e=>{t(X(`sessions.scratchReview.removed`,{n:e.trashed.length})),u()}).catch(e=>{s(!1),t(String(e),!0)})},children:X(`sessions.scratchReview.removeEmpty`,{n:p.length})})]})]})]})]})}function gr({projects:e,primaryID:t,value:n,onChange:r}){Z();let i=e.find(e=>e.id===t),a=e.filter(e=>i&&e.target_id===i.target_id&&e.id!==i.id&&!n.some(t=>t.project_id===e.id)),[o,s]=(0,Q.useState)(``),c=(0,Q.useRef)(null),l=(0,Q.useRef)(null);return(0,Q.useEffect)(()=>{let t=n.filter(t=>{let n=e.find(e=>e.id===t.project_id);return i&&n&&n.id!==i.id&&n.target_id===i.target_id});t.length!==n.length&&r(t)},[t,e]),(0,$.jsxs)(`details`,{children:[(0,$.jsx)(`summary`,{children:n.length?X(`sessions.repoPicker.summaryCount`,{n:n.length}):X(`sessions.repoPicker.summary`)}),(0,$.jsx)(`p`,{className:`subhint`,children:X(`sessions.repoPicker.help`)}),(0,$.jsx)(`select`,{className:`f`,ref:c,"aria-label":X(`sessions.repoPicker.pickerLabel`),value:a.some(e=>String(e.id)===o)?o:String(a[0]?.id||``),disabled:!a.length||n.length>=7,onChange:e=>s(e.target.value),children:a.length?a.map(e=>(0,$.jsx)(`option`,{value:e.id,children:e.name},e.id)):(0,$.jsx)(`option`,{value:``,children:X(`sessions.repoPicker.noOthers`)})}),(0,$.jsx)(`button`,{className:`b`,type:`button`,disabled:!a.length||n.length>=7,onClick:()=>{let e=Number(c.current?.value);a.some(t=>t.id===e)&&(r([...n,{project_id:e,base:``}]),requestAnimationFrame(()=>l.current?.lastElementChild?.querySelector(`input`)?.focus()))},children:X(`sessions.repoPicker.add`)}),(0,$.jsx)(`div`,{ref:l,"aria-label":X(`sessions.repoPicker.selected`),children:n.map(t=>{let i=e.find(e=>e.id===t.project_id);return i?(0,$.jsxs)(`div`,{className:`workspace-repository`,children:[(0,$.jsx)(`strong`,{children:i.name}),(0,$.jsxs)(`label`,{className:`f`,children:[X(`sessions.repoPicker.baseFor`,{name:i.name}),(0,$.jsx)(`input`,{className:`f`,"aria-label":X(`sessions.repoPicker.baseFor`,{name:i.name}),placeholder:X(`sessions.repoPicker.basePlaceholder`),value:t.base,onChange:e=>r(n.map(n=>n.project_id===t.project_id?{...n,base:e.target.value}:n))})]}),(0,$.jsx)(`button`,{className:`b`,type:`button`,"aria-label":X(`sessions.repoPicker.removeNamed`,{name:i.name}),onClick:()=>{r(n.filter(e=>e.project_id!==t.project_id)),c.current?.focus()},children:X(`sessions.repoPicker.remove`)})]},t.project_id):null})})]})}function _r(){return X(`agentSettings.profiles.instructionsHelp`)}_r();function vr(e){try{return JSON.stringify(JSON.parse(e||`{}`),null,2)}catch{return`{}`}}function yr(e,t){return{id:e?.id??0,name:e?.name??``,agent:e?.agent||t,command:e?.command??``,model:e?.model??``,env_json:vr(e?.env_json),description:e?.description??``,instructions:e?.instructions??``}}function br(e,t){return{id:0,name:e.name,agent:e.agent||t,command:``,model:``,env_json:`{}`,description:e.description??``,instructions:e.instructions??``}}function xr(e){let t;try{t=JSON.parse(e)}catch{return{error:X(`agentSettings.profiles.envInvalidJson`)}}return!t||Array.isArray(t)||typeof t!=`object`||Object.values(t).some(e=>typeof e!=`string`)?{error:X(`agentSettings.profiles.envNotObject`)}:{env:t}}function Sr(e,t){return{name:e.name.trim(),agent:e.agent,command:e.command.trim(),model:e.model.trim(),env_json:JSON.stringify(t),description:e.description.trim(),instructions:e.instructions.trim()}}function Cr({api:e,onClose:t,onChange:n=()=>{}}){Z();let r=(0,Q.useRef)(null),[i,a]=(0,Q.useState)([]),[o,s]=(0,Q.useState)([]),[c,l]=(0,Q.useState)([]),[u,d]=(0,Q.useState)(0),[f,p]=(0,Q.useState)(``),[m,h]=(0,Q.useState)(`claude`),[g,_]=(0,Q.useState)(``),[v,y]=(0,Q.useState)(``),[b,x]=(0,Q.useState)(`{}`),[S,C]=(0,Q.useState)(``),[w,T]=(0,Q.useState)(``),[E,D]=(0,Q.useState)(!0),[O,k]=(0,Q.useState)(!1),[A,j]=(0,Q.useState)(``);function M(e){d(e.id),p(e.name),h(e.agent),_(e.command),y(e.model),x(e.env_json),C(e.description),T(e.instructions)}function N(e){M(yr(e,o[0]?.name||`claude`)),D(!e),j(``)}function P(e){M(br(e,o[0]?.name||`claude`)),D(!0),j(X(`agentSettings.profiles.starterLoaded`,{name:e.name})),requestAnimationFrame(()=>r.current?.scrollIntoView({block:`start`,behavior:`smooth`}))}async function F(t=u){let[n,r,i]=await Promise.all([e.request(`/launch-profiles`),e.request(`/agents`),e.request(`/launch-profile-presets`).catch(()=>[])]);a(n),s(r),l(Array.isArray(i)?i:[]);let o=n.find(e=>e.id===t);return o?N(o):t||N(void 0),n}(0,Q.useEffect)(()=>{F().catch(e=>j(String(e)))},[]);async function I(){if(O)return;let t=xr(b);if(t.error)return j(t.error);if(!f.trim())return j(X(`agentSettings.profiles.nameRequired`));let r=Sr({id:u,name:f,agent:m,command:g,model:v,env_json:b,description:S,instructions:w},t.env);k(!0),j(X(`agentSettings.profiles.saving`));try{let t=await e.request(u?`/launch-profiles/${u}`:`/launch-profiles`,{method:u?`PUT`:`POST`,body:r});await F(t.id),d(t.id),D(!1),j(X(`agentSettings.profiles.saved`)),n(t)}catch(e){j(String(e))}finally{k(!1)}}async function L(){if(u&&confirm(X(`agentSettings.profiles.confirmDelete`,{name:f}))){k(!0);try{await e.request(`/launch-profiles/${u}`,{method:`DELETE`}),await F(0),j(X(`agentSettings.profiles.deleted`)),n(void 0)}catch(e){j(String(e))}finally{k(!1)}}}return(0,$.jsxs)(B,{open:!0,className:`launch-profiles`,"aria-label":X(`agentSettings.profiles.title`),onCancel:e=>{O?e.preventDefault():t()},children:[(0,$.jsxs)(`header`,{children:[(0,$.jsx)(`h2`,{children:X(`agentSettings.profiles.title`)}),(0,$.jsx)(`button`,{disabled:O,onClick:t,children:X(`agentSettings.editor.close`)})]}),c.length>0&&(0,$.jsxs)(`section`,{className:`lp-starters`,"data-setting":`agents.starters`,"aria-label":X(`agentSettings.profiles.starters`),children:[(0,$.jsx)(`h3`,{children:X(`agentSettings.profiles.starters`)}),(0,$.jsx)(`p`,{className:`lp-hint`,children:X(`agentSettings.profiles.startersHint`)}),(0,$.jsx)(`div`,{className:`lp-starter-grid`,children:c.map(e=>(0,$.jsxs)(`article`,{className:`lp-starter`,"data-preset":e.key,children:[(0,$.jsxs)(`div`,{className:`lp-starter-head`,children:[(0,$.jsx)(`b`,{className:`lp-starter-name`,children:e.name}),(0,$.jsx)(`span`,{className:`lp-starter-agent`,children:e.agent})]}),(0,$.jsx)(`p`,{className:`lp-starter-purpose`,children:e.description}),(0,$.jsx)(`button`,{type:`button`,className:`lp-starter-use`,disabled:O,onClick:()=>P(e),children:X(`agentSettings.profiles.useStarter`)})]},e.key))})]}),(0,$.jsxs)(`div`,{className:`lp-picker`,children:[(0,$.jsxs)(`label`,{children:[X(`agentSettings.profiles.savedProfile`),(0,$.jsxs)(`select`,{"aria-label":X(`agentSettings.profiles.savedProfile`),className:`lp-select`,disabled:O,value:u,onChange:e=>N(i.find(t=>t.id===Number(e.target.value))),children:[(0,$.jsx)(`option`,{value:0,children:X(`agentSettings.profiles.newProfile`)}),i.map(e=>(0,$.jsx)(`option`,{value:e.id,children:e.name},e.id))]})]}),(0,$.jsx)(`button`,{type:`button`,disabled:O,onClick:()=>N(void 0),children:X(`agentSettings.profiles.new`)})]}),E&&(0,$.jsx)(`p`,{className:`lp-draft-note`,children:X(`agentSettings.profiles.draftNote`)}),(0,$.jsxs)(`form`,{ref:r,onSubmit:e=>{e.preventDefault(),I()},children:[(0,$.jsxs)(`label`,{children:[X(`agentSettings.editor.name`),(0,$.jsx)(`input`,{value:f,onChange:e=>p(e.target.value)})]}),(0,$.jsxs)(`label`,{children:[X(`agentSettings.profiles.description`),(0,$.jsx)(`textarea`,{"aria-label":X(`agentSettings.profiles.description`),className:`lp-description`,value:S,onChange:e=>C(e.target.value)})]}),(0,$.jsxs)(`label`,{children:[X(`agentSettings.profiles.instructions`),(0,$.jsx)(`textarea`,{"aria-label":X(`agentSettings.profiles.instructions`),className:`lp-instructions`,value:w,onChange:e=>T(e.target.value)})]}),(0,$.jsx)(`p`,{className:`lp-hint lp-instructions-help`,children:_r()}),(0,$.jsxs)(`label`,{children:[X(`agentSettings.profiles.agent`),(0,$.jsx)(`select`,{"aria-label":X(`agentSettings.profiles.agent`),className:`lp-agent`,value:m,onChange:e=>h(e.target.value),children:o.map(e=>(0,$.jsx)(`option`,{value:e.name,children:e.name},e.name))})]}),(0,$.jsx)(`h3`,{className:`lp-advanced`,children:X(`agentSettings.profiles.advanced`)}),(0,$.jsxs)(`label`,{children:[X(`agentSettings.profiles.commandOverride`),(0,$.jsx)(`input`,{value:g,onChange:e=>_(e.target.value)})]}),(0,$.jsxs)(`label`,{children:[X(`agentSettings.profiles.defaultModel`),(0,$.jsx)(`input`,{value:v,onChange:e=>y(e.target.value)})]}),(0,$.jsxs)(`label`,{children:[X(`agentSettings.profiles.environment`),(0,$.jsx)(`textarea`,{value:b,onChange:e=>x(e.target.value)})]}),(0,$.jsxs)(`div`,{className:`lp-buttons`,children:[(0,$.jsx)(`button`,{className:`lp-save`,disabled:O,children:X(`agentSettings.profiles.save`)}),(0,$.jsx)(`button`,{className:`lp-delete`,type:`button`,disabled:O||!u,onClick:()=>void L(),children:X(`agentSettings.profiles.delete`)})]}),(0,$.jsx)(`p`,{className:`lp-status`,role:`status`,children:A})]})]})}function wr(e,t){return!t||t===`/`?e:e===t?`~`:e.startsWith(t+`/`)?`~`+e.slice(t.length):e}function Tr(e,t){return t&&e.some(e=>e.id===t)?t:(e.find(e=>e.kind===`local`)||e.find(e=>e.kind===`mock`)||e[0])?.id}function Er({request:e,targets:t,initialTarget:n,onPick:r,onEmpty:i,onClose:a}){Z();let[o,s]=(0,Q.useState)(()=>Tr(t,n)),[c,l]=(0,Q.useState)(``),[u,d]=(0,Q.useState)(),[f,p]=(0,Q.useState)(``),[m,h]=(0,Q.useState)(!1);(0,Q.useEffect)(()=>{if(!o)return;let t=!0;return h(!0),p(``),e(`/targets/${o}/folders?path=${encodeURIComponent(c)}`).then(e=>t&&d(e)).catch(e=>t&&p(String(e instanceof Error?e.message:e))).finally(()=>t&&h(!1)),()=>{t=!1}},[e,o,c]);let g=u?.home||``;return(0,$.jsxs)(B,{className:`sheet folder-picker`,id:`folder-picker`,"aria-label":X(`folder.title`),onCancel:a,children:[(0,$.jsxs)(`div`,{className:`sheet-head`,children:[(0,$.jsx)(`h2`,{children:X(`folder.title`)}),(0,$.jsx)(`button`,{className:`x`,"aria-label":X(`folder.close`),"data-close":!0,onClick:a,children:`✕`})]}),t.length>1&&(0,$.jsxs)(`label`,{className:`session-field`,children:[X(`folder.machine`),(0,$.jsx)(`select`,{id:`folder-machine`,value:o??``,onChange:e=>{s(Number(e.target.value)),l(``)},children:t.map(e=>(0,$.jsx)(`option`,{value:e.id,children:e.name},e.id))})]}),(0,$.jsxs)(`div`,{className:`folder-bar`,children:[(0,$.jsx)(`button`,{type:`button`,className:`b`,id:`folder-up`,disabled:!u?.parent||m,title:u?.parent?void 0:X(`folder.topReason`),onClick:()=>u?.parent&&l(u.parent),children:X(`folder.up`)}),(0,$.jsx)(`code`,{className:`folder-path`,id:`folder-path`,title:u?.path,children:u?wr(u.path,g):`…`}),u&&u.path!==g&&(0,$.jsx)(`button`,{type:`button`,className:`linkish`,onClick:()=>l(``),children:X(`folder.home`)})]}),f&&(0,$.jsx)(`p`,{className:`subhint error`,role:`alert`,children:f}),(0,$.jsxs)(`ul`,{className:`folder-list`,"aria-busy":m,"aria-label":X(`folder.list`),children:[u?.folders.map(e=>(0,$.jsx)(`li`,{children:(0,$.jsxs)(`button`,{type:`button`,className:`folder-row`,"data-folder":e.name,onClick:()=>l(e.path),children:[(0,$.jsx)(`span`,{"aria-hidden":`true`,children:`📁`}),(0,$.jsx)(`span`,{className:`folder-name`,children:e.name}),e.project_id?(0,$.jsx)(`span`,{className:`chip`,children:X(`folder.project`)}):e.git?(0,$.jsx)(`span`,{className:`chip`,children:`git`}):null]})},e.path)),u&&!u.folders.length&&(0,$.jsx)(`li`,{className:`subhint`,children:X(`folder.noSubfolders`)})]}),(0,$.jsxs)(`div`,{className:`folder-actions`,children:[(0,$.jsx)(`button`,{type:`button`,className:`b`,id:`folder-empty`,onClick:i,children:X(`folder.useEmpty`)}),(0,$.jsx)(`button`,{type:`button`,className:`b ok`,id:`folder-use`,disabled:!u||!o||m,onClick:()=>u&&o&&r({targetId:o,path:u.path,projectId:u.project_id}),children:X(`folder.useThis`)})]}),u&&(0,$.jsx)(`p`,{className:`subhint`,id:`folder-hint`,children:u.project_id?X(`folder.isProject`):X(`folder.becomesProject`)})]})}var Dr=`lec-project-preference-v1`,Or={last:void 0,recent:[]};function kr(){try{return typeof localStorage>`u`?null:localStorage}catch{return null}}function Ar(e){return typeof e==`number`&&Number.isSafeInteger(e)&&e>0?e:null}function jr(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){let e=Ar(n);if(!(e===null||t.includes(e))&&(t.push(e),t.length>=8))break}return t}function Mr(e=kr()){if(!e)return{...Or};let t;try{t=e.getItem(Dr)}catch{return{...Or}}if(!t)return{...Or};let n;try{n=JSON.parse(t)}catch{return{...Or}}if(!n||typeof n!=`object`||Array.isArray(n))return{...Or};let r=n,i;return`last_project_id`in r&&(i=r.last_project_id===null?null:Ar(r.last_project_id)??void 0),{last:i,recent:jr(r.recent_project_ids)}}function Nr(e,t){if(!e)return;let n={recent_project_ids:t.recent};t.last!==void 0&&(n.last_project_id=t.last);try{e.setItem(Dr,JSON.stringify(n))}catch{}}function Pr(e,t=kr()){let n={...Mr(t),last:e};return Nr(t,n),n}function Fr(e,t=kr()){let n=Mr(t),r=Ar(e);if(r===null)return n;let i={last:r,recent:[r,...n.recent.filter(e=>e!==r)].slice(0,8)};return Nr(t,i),i}function Ir(e,t){let n=new Map(e.map(e=>[e.id,e])),r=new Set,i=[];for(let e of t){let t=n.get(e);t&&!r.has(e)&&(r.add(e),i.push(t))}return{recent:i,rest:e.filter(e=>!r.has(e.id))}}function Lr(e,t,n){return n&&e.some(e=>e.id===n)?n:t===null?null:t!==void 0&&e.some(e=>e.id===t)?t:e[0]?.id??null}function Rr({api:e,projects:t,targets:n=[],initialProject:r,onClose:i,onCreated:a,onNotice:o}){Z();let[s,c]=(0,Q.useState)([]),[l,u]=(0,Q.useState)([]),[d,f]=(0,Q.useState)(!1),[p,m]=(0,Q.useState)(0),[h,g]=(0,Q.useState)({}),[_,v]=(0,Q.useState)(``),[y,b]=(0,Q.useState)(``),[x]=(0,Q.useState)(()=>Mr()),[S,C]=(0,Q.useState)(()=>Lr(t,x.last,r)),[w,T]=(0,Q.useState)(!1),[E,D]=(0,Q.useState)(``),[O,k]=(0,Q.useState)(``),[A,j]=(0,Q.useState)(`claude`),[M,N]=(0,Q.useState)(),[P,F]=(0,Q.useState)(!1),[I,L]=(0,Q.useState)(n),[R,z]=(0,Q.useState)(!1),[V,H]=(0,Q.useState)(),[ee,te]=(0,Q.useState)(``),[U,W]=(0,Q.useState)(`fresh`),[ne,G]=(0,Q.useState)(!1),[K,q]=(0,Q.useState)(``),[re,ie]=(0,Q.useState)(!1),[ae,oe]=(0,Q.useState)(``),[se,ce]=(0,Q.useState)(`allow`),[le,ue]=(0,Q.useState)(``),[de,fe]=(0,Q.useState)(``),[pe,me]=(0,Q.useState)([]),[he,ge]=(0,Q.useState)(!1),[_e,ve]=(0,Q.useState)([]),[ye,be]=(0,Q.useState)(!1),[xe,Se]=(0,Q.useState)([]);(0,Q.useEffect)(()=>{Promise.all([e.request(`/agents`),e.request(`/launch-profiles`),e.request(`/models`).catch(()=>({}))]).then(([e,t,n])=>{c(e),u(t),g(n)}).catch(e=>o(X(`sessions.dialogs.newSession.loadFailed`,{error:String(e)}),!0)),e.request(`/settings`).then(e=>G(e.session_permission_mode!==`ask`)).catch(()=>{}),Gt(e).then(ve)},[]),(0,Q.useEffect)(()=>{let e=l.find(e=>e.id===p);e&&j(e.agent)},[p,l]),(0,Q.useEffect)(()=>{let t=!0;return v(U===`brief`&&S?X(`sessions.dialogs.newSession.checkingMemory`):``),b(``),U===`brief`&&S&&e.request(`/projects/${S}/brief`).then(e=>{t&&(v(e.memory?.message||X(`sessions.dialogs.newSession.memoryUnavailable`)),b(e.memory?.status||`unavailable`))}).catch(()=>t&&v(X(`sessions.dialogs.newSession.memoryPreviewFailed`))),()=>{t=!1}},[U,S]);let Ce=s.find(e=>e.name===A),we=l.find(e=>e.id===p),Te=!Ce||!!Ce.yolo_args?.length;(0,Q.useEffect)(()=>{S||(ie(!1),U===`brief`&&W(`fresh`)),re&&U===`resume`&&W(`fresh`)},[S,re,U]),(0,Q.useEffect)(()=>{Te||G(!1)},[Te]),(0,Q.useEffect)(()=>{let t=`${E} ${K}`.trim();if(!S||t.length<8){Se([]);return}let n=new AbortController,r=window.setTimeout(()=>{e.request(`/claims/topic-overlap?project_id=${S}&text=${encodeURIComponent(t)}`,{signal:n.signal}).then(Se).catch(()=>{})},500);return()=>{clearTimeout(r),n.abort()}},[S,E,K]),(0,Q.useEffect)(()=>{!w&&!M&&C(Lr(t,x.last,r))},[t,r]);let Ee=t.find(e=>e.id===S)??null;(0,Q.useEffect)(()=>{n.length&&L(n)},[n]);let De=Ee?.target_id??M?.targetId??Tr(I);async function Oe(){if(I.length)return;let t=await e.request(`/targets`,{method:`POST`,body:{name:`local`,kind:`local`}});L([t]),a()}async function ke(){try{await Oe(),F(!0)}catch(e){o(String(e),!0)}}(0,Q.useEffect)(()=>{if(!De)return;let t=!0;return e.request(`/targets/${De}/agents`).then(e=>t&&H(Object.fromEntries(e.map(e=>[e.name,e.state])))).catch(()=>t&&H(void 0)),()=>{t=!1}},[De]);let Ae=e=>e===`demo`||!V||V[e]!==`missing`,je=!!V&&s.length>0&&!s.some(e=>Ae(e.name));(0,Q.useEffect)(()=>{if(!V||p>0||Ae(A))return;let e=[..._e,...s.map(e=>e.name)].find(e=>s.some(t=>t.name===e)&&Ae(e));j(e||`demo`)},[V,s,_e,R,p,A]);let Me=p<=0&&!Ae(A)?X(`start.sheet.notInstalledWhy`,{name:A}):``,{recent:Ne,rest:Pe}=Ir(t,x.recent),Fe=[Te?X(ne?`sessions.dialogs.newSession.yolo`:`sessions.dialogs.newSession.noteAsks`):X(`sessions.dialogs.newSession.noteNoYolo`,{agent:A}),we?X(`sessions.dialogs.newSession.noteProfile`,{name:we.name,agent:we.agent}):``,re?X(`sessions.dialogs.newSession.noteWorktree`):``,U===`brief`?X(`sessions.dialogs.newSession.noteBrief`):``,U===`resume`?X(`sessions.dialogs.newSession.noteResume`):``].filter(Boolean).join(` · `);async function Ie(){if(!M)return S;if(M.projectId)return M.projectId;let t=await e.request(`/projects/import`,{method:`POST`,body:{target_id:M.targetId,paths:[M.path]}}),n=t.imported[0]?.id??t.skipped[0]?.project_id;if(!n)throw Error(X(`start.sheet.registerFailed`,{path:M.path}));return n}async function Le(){if(!he){ge(!0);try{await Oe();let t=await Ie(),n=await e.request(`/sessions`,{method:`POST`,body:{background:re,profile_id:p,project_id:t,scratch:t===null,worktree:re?{base:le.trim(),branch:de.trim(),extra_repositories:pe.map(e=>({project_id:e.project_id,base:e.base.trim()}))}:null,name:E.trim(),group_path:O.trim(),agent:A,model:ee.trim(),resume:U===`resume`,brief:U===`brief`,yolo:ne,prime:K.trim(),isolation:ae===``?null:{mode:ae===`none`?``:ae,network:se}}});t!==null&&(Fr(t),Pr(t)),a(n),o(n.setup_state===`creating`?X(`sessions.dialogs.newSession.setupStarted`):X(`sessions.dialogs.newSession.started`)),i()}catch(e){o(String(e),!0)}finally{ge(!1)}}}return(0,$.jsxs)($.Fragment,{children:[` `,(0,$.jsxs)(B,{id:`sheet`,open:!0,className:`sheet`,"aria-label":X(`sessions.dialogs.newSession.title`),onCancel:i,children:[(0,$.jsxs)(`div`,{className:`sheet-head`,children:[(0,$.jsx)(`h2`,{children:X(`sessions.dialogs.newSession.title`)}),(0,$.jsx)(`button`,{className:`x`,"aria-label":X(`sessions.dialogs.newSession.close`),"data-close":!0,onClick:i,children:`✕`})]}),(0,$.jsx)(`p`,{children:X(`sessions.dialogs.newSession.intro`)}),(0,$.jsxs)(`div`,{className:`session-field`,children:[(0,$.jsx)(`label`,{htmlFor:`ns-project`,children:X(`start.sheet.folder`)}),(0,$.jsxs)(`div`,{className:`ns-folder-row`,children:[(0,$.jsxs)(`select`,{id:`ns-project`,"aria-label":X(`start.sheet.folder`),value:M?`__folder__`:S??``,onChange:e=>{if(e.target.value===`__browse__`){ke();return}if(e.target.value===`__folder__`)return;let t=e.target.value?Number(e.target.value):null;T(!0),N(void 0),C(t),Pr(t)},children:[(0,$.jsx)(`option`,{value:``,children:X(`sessions.dialogs.newSession.blankRoom`)}),M&&(0,$.jsx)(`option`,{value:`__folder__`,children:X(`start.sheet.pickedFolder`,{path:M.path})}),Ne.length>0?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`optgroup`,{label:X(`sessions.dialogs.newSession.recentProjects`),children:Ne.map(e=>(0,$.jsxs)(`option`,{value:e.id,children:[e.name,` — `,e.target_name]},e.id))}),(0,$.jsx)(`optgroup`,{label:X(`sessions.dialogs.newSession.otherProjects`),children:Pe.map(e=>(0,$.jsxs)(`option`,{value:e.id,children:[e.name,` — `,e.target_name]},e.id))})]}):Pe.map(e=>(0,$.jsxs)(`option`,{value:e.id,children:[e.name,` — `,e.target_name]},e.id)),(0,$.jsx)(`option`,{value:`__browse__`,children:X(`start.sheet.chooseOption`)})]}),(0,$.jsx)(`button`,{type:`button`,className:`b`,id:`ns-browse`,onClick:()=>void ke(),children:X(`start.sheet.choose`)})]})]}),(0,$.jsx)(`div`,{id:`ns-proj-hint`,children:M?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{className:`ns-proj-path`,children:M.path}),M.projectId?``:` · ${X(`start.sheet.becomesProject`)}`]}):Ee===null?X(`sessions.dialogs.newSession.blankRoomHint`):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{className:`ns-proj-path`,children:Ee.repo_path}),Ee.target_name?` · ${Ee.target_name}`:``,re&&Ee.setup_cmd?(0,$.jsx)(`span`,{className:`ns-proj-setup`,children:X(`sessions.dialogs.newSession.setupCommandHint`)}):null]})}),(0,$.jsxs)(`div`,{className:`session-field`,children:[(0,$.jsx)(`label`,{htmlFor:`ns-agent`,children:X(`sessions.dialogs.newSession.agent`)}),(0,$.jsx)(`select`,{id:`ns-agent`,value:A,disabled:p>0,onChange:e=>{if(e.target.value===`__more__`){be(!0);return}z(!0),j(e.target.value)},children:(()=>{let e=s.length?s:[{name:`claude`}],{shown:t,more:n}=qt(e,_e),r=t.filter(e=>Ae(e.name)),i=r.some(e=>e.name===A)||A===`demo`?r:[...r,...e.filter(e=>e.name===A)],a=n.filter(e=>Ae(e.name)).length;return(0,$.jsxs)($.Fragment,{children:[i.map(e=>(0,$.jsx)(`option`,{value:e.name,disabled:!Ae(e.name),children:Ae(e.name)?e.name:X(`start.sheet.notInstalled`,{name:e.name})},e.name)),(je||A===`demo`)&&(0,$.jsx)(`option`,{value:`demo`,children:X(`start.sheet.demoAgent`)}),a>0&&(0,$.jsx)(`option`,{value:`__more__`,children:X(`sessions.dialogs.moreAgents`)})]})})()})]}),je&&(0,$.jsx)(`p`,{className:`subhint`,id:`ns-no-agent`,role:`status`,children:X(`start.sheet.installHint`)}),ye&&(0,$.jsx)(Jt,{agents:s.filter(e=>Ae(e.name)),onPick:e=>{z(!0),j(e)},onClose:()=>be(!1)}),we&&(0,$.jsx)(`div`,{className:`subhint`,id:`ns-agent-profile`,children:X(`sessions.dialogs.newSession.lockedByProfile`,{agent:we.agent,name:we.name})}),(0,$.jsx)(`div`,{id:`ns-agent-hint`,className:`subhint`,children:Ce?[Ce.model_flag?``:X(`sessions.dialogs.newSession.hintNoModel`),Ce.resume_args?``:X(`sessions.dialogs.newSession.hintNoResume`)].filter(Boolean).join(` · `):``}),(0,$.jsxs)(`label`,{className:`f check ns-ask`,children:[(0,$.jsx)(`input`,{id:`ns-ask`,type:`checkbox`,disabled:!Te,checked:!ne,onChange:e=>G(!e.target.checked)}),` `,X(`start.sheet.ask`)]}),(0,$.jsx)(`div`,{className:`subhint`,id:`ns-yolo-hint`,children:Te?X(ne?`sessions.dialogs.newSession.yoloHint`:A===`claude`||A===`codex`?`sessions.dialogs.newSession.askHintPhone`:`sessions.dialogs.newSession.askHint`):X(`sessions.dialogs.newSession.yoloUnsupported`,{agent:A})}),(0,$.jsxs)(`details`,{id:`ns-advanced`,className:`session-advanced`,children:[(0,$.jsx)(`summary`,{children:X(`sessions.dialogs.newSession.advanced`)}),(0,$.jsxs)(`div`,{className:`session-field`,children:[(0,$.jsx)(`label`,{htmlFor:`ns-name`,children:X(`sessions.dialogs.newSession.name`)}),(0,$.jsx)(`input`,{id:`ns-name`,value:E,onChange:e=>D(e.target.value)})]}),(0,$.jsxs)(`div`,{className:`session-field`,children:[(0,$.jsx)(`label`,{htmlFor:`ns-group`,children:X(`sessions.dialogs.newSession.group`)}),(0,$.jsx)(`input`,{id:`ns-group`,value:O,onChange:e=>k(e.target.value)})]}),(0,$.jsxs)(`div`,{className:`session-field`,children:[(0,$.jsx)(`label`,{htmlFor:`ns-profile`,children:X(`sessions.dialogs.newSession.launchProfile`)}),(0,$.jsxs)(`select`,{id:`ns-profile`,value:p,onChange:e=>m(Number(e.target.value)),children:[(0,$.jsx)(`option`,{value:0,children:X(`sessions.dialogs.newSession.noProfile`)}),l.map(e=>(0,$.jsxs)(`option`,{value:e.id,children:[e.name,` · `,e.agent]},e.id))]})]}),(0,$.jsx)(`button`,{className:`b`,id:`ns-manage-profiles`,type:`button`,onClick:()=>f(!0),children:X(`sessions.dialogs.newSession.manageProfiles`)}),(0,$.jsx)(`div`,{className:`subhint`,id:`ns-profile-hint`,role:`status`,children:we&&(0,$.jsxs)($.Fragment,{children:[we.model?X(`sessions.dialogs.newSession.profileSummaryModel`,{name:we.name,agent:we.agent,model:we.model}):X(`sessions.dialogs.newSession.profileSummary`,{name:we.name,agent:we.agent}),we.description&&(0,$.jsx)(`span`,{className:`ns-profile-description`,children:we.description})]})}),(0,$.jsxs)(`div`,{className:`session-field`,children:[(0,$.jsx)(`label`,{htmlFor:`ns-model`,children:X(`sessions.dialogs.model`)}),(0,$.jsx)(`input`,{placeholder:we?.model?X(`sessions.dialogs.newSession.modelOverride`,{model:we.model}):h[A]===void 0?X(`sessions.dialogs.newSession.modelNone`):h[A]?.length?X(`sessions.dialogs.newSession.modelDefault`):X(`sessions.dialogs.newSession.modelType`),id:`ns-model`,list:`lec-models`,disabled:h[A]===void 0&&!s.find(e=>e.name===A)?.model_flag,value:ee,onChange:e=>te(e.target.value)}),(0,$.jsx)(`datalist`,{id:`lec-models`,children:(h[A]||[]).map(e=>(0,$.jsx)(`option`,{value:e},e))})]}),(0,$.jsxs)(`label`,{children:[(0,$.jsx)(`input`,{type:`checkbox`,id:`ns-worktree`,checked:re,disabled:!S,onChange:e=>ie(e.target.checked)}),` `,X(`sessions.dialogs.newSession.worktree`),!S&&(0,$.jsxs)(`span`,{className:`subhint disabled-why`,children:[` — `,X(`start.sheet.worktreeNeedsProject`)]})]}),re&&(0,$.jsxs)(`div`,{id:`ns-worktree-options`,children:[(0,$.jsx)(`p`,{className:`subhint`,children:X(`sessions.dialogs.newSession.worktreeHint`)}),(0,$.jsx)(`input`,{id:`ns-worktree-base`,"aria-label":X(`sessions.dialogs.newSession.worktreeBase`),value:le,onChange:e=>ue(e.target.value)}),(0,$.jsx)(`input`,{id:`ns-worktree-branch`,"aria-label":X(`sessions.dialogs.newSession.worktreeBranch`),value:de,onChange:e=>fe(e.target.value)}),(0,$.jsx)(`div`,{id:`ns-repositories`,children:(0,$.jsx)(gr,{projects:t,primaryID:S,value:pe,onChange:me})})]}),(0,$.jsx)(`label`,{htmlFor:`ns-start`,children:X(`sessions.dialogs.newSession.startFrom`)}),(0,$.jsxs)(`select`,{id:`ns-start`,value:U,onChange:e=>W(e.target.value),children:[(0,$.jsx)(`option`,{value:`fresh`,children:X(`sessions.dialogs.newSession.startFresh`)}),(0,$.jsx)(`option`,{value:`brief`,disabled:!S,children:X(`sessions.dialogs.newSession.startBrief`)}),(0,$.jsx)(`option`,{value:`resume`,disabled:re,children:X(`sessions.dialogs.newSession.startResume`)})]}),(0,$.jsx)(`div`,{className:`subhint`,id:`ns-hint`,children:U===`brief`?X(`sessions.dialogs.newSession.briefHint`):U===`resume`?X(`sessions.dialogs.newSession.resumeHint`):``}),(0,$.jsx)(`div`,{className:`subhint`,id:`ns-memory-status`,"data-status":y,role:`status`,children:_}),(0,$.jsx)(`label`,{htmlFor:`ns-isolation`,children:X(`sessions.dialogs.newSession.isolation`)}),(0,$.jsxs)(`select`,{id:`ns-isolation`,value:ae,onChange:e=>oe(e.target.value),children:[(0,$.jsx)(`option`,{value:``,children:X(`sessions.dialogs.newSession.isolationDefault`)}),(0,$.jsx)(`option`,{value:`none`,children:X(`sessions.dialogs.newSession.isolationNone`)}),(0,$.jsx)(`option`,{value:`bwrap`,children:X(`sessions.dialogs.newSession.isolationBwrap`)}),(0,$.jsx)(`option`,{value:`docker`,children:X(`sessions.dialogs.newSession.isolationDocker`)})]}),(ae===`bwrap`||ae===`docker`)&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`label`,{htmlFor:`ns-isolation-network`,children:X(`sessions.dialogs.newSession.network`)}),(0,$.jsxs)(`select`,{id:`ns-isolation-network`,value:se,onChange:e=>ce(e.target.value),children:[(0,$.jsx)(`option`,{value:`allow`,children:X(`sessions.dialogs.newSession.networkAllow`)}),(0,$.jsx)(`option`,{value:`deny`,children:X(`sessions.dialogs.newSession.networkDeny`)})]})]}),(0,$.jsx)(`div`,{className:`subhint`,id:`ns-isolation-hint`,children:ae===`bwrap`?X(`sessions.dialogs.newSession.bwrapHint`):ae===`docker`?X(`sessions.dialogs.newSession.dockerHint`):``}),(0,$.jsxs)(`div`,{className:`session-field`,children:[(0,$.jsx)(`label`,{htmlFor:`ns-prime`,children:X(`sessions.dialogs.newSession.firstMessage`)}),(0,$.jsx)(`textarea`,{id:`ns-prime`,value:K,onChange:e=>q(e.target.value)})]})]}),xe.length>0&&(0,$.jsxs)(`div`,{className:`claims-overlap-warning`,id:`new-session-claim-overlap`,role:`status`,children:[X(`sessions.dialogs.newSession.overlapWarning`),(0,$.jsx)(`ul`,{children:xe.map(e=>(0,$.jsxs)(`li`,{children:[(0,$.jsx)(`b`,{children:e.holder}),e.agent?` (${e.agent})`:``,` — `,Vt(e),e.intent&&(0,$.jsxs)($.Fragment,{children:[` — “`,e.intent,`”`]})]},e.id))}),X(`sessions.dialogs.newSession.overlapAdvice`)]}),(0,$.jsxs)(`div`,{className:`session-launch-actions`,children:[(0,$.jsx)(`div`,{className:`ns-launch-summary`,id:`ns-launch-summary`,role:`status`,children:Fe}),(0,$.jsx)(`button`,{className:`b ok grow`,id:`ns-go`,disabled:he||!!Me,"aria-describedby":Me?`ns-go-why`:void 0,onClick:()=>void Le(),children:X(`sessions.dialogs.newSession.start`)}),Me&&(0,$.jsx)(`p`,{className:`subhint disabled-why`,id:`ns-go-why`,children:Me})]})]}),P&&(0,$.jsx)(Er,{request:e.request,targets:I,initialTarget:De,onClose:()=>F(!1),onEmpty:()=>{T(!0),F(!1),N(void 0),C(null),Pr(null)},onPick:e=>{T(!0),F(!1);let n=e.projectId??t.find(t=>t.target_id===e.targetId&&t.repo_path.replace(/\/+$/,``)===e.path)?.id;n?(N(void 0),C(n),Pr(n)):(C(null),N({...e,path:e.path}))}}),d&&(0,$.jsx)(Cr,{api:e,onClose:()=>f(!1),onChange:t=>{e.request(`/launch-profiles`).then(e=>{u(e),t?m(t.id):e.some(e=>e.id===p)||m(0)}).catch(e=>o(String(e),!0))}})]})}function zr({api:e,projects:t,onClose:n,onCreated:r,onNotice:i}){Z();let[a,o]=(0,Q.useState)([]);return(0,Q.useEffect)(()=>{e.request(`/sessions/discover`).then(o).catch(e=>i(String(e),!0))},[]),(0,$.jsxs)(B,{id:`sheet`,open:!0,className:`sheet`,"aria-label":X(`sessions.dialogs.discover.title`),onCancel:n,children:[(0,$.jsx)(`h2`,{children:X(`sessions.dialogs.discover.title`)}),(0,$.jsx)(`button`,{onClick:n,children:`✕`}),(0,$.jsx)(`p`,{children:X(`sessions.dialogs.discover.intro`)}),!a.length&&(0,$.jsx)(`p`,{children:X(`sessions.dialogs.discover.empty`)}),a.map(a=>(0,$.jsxs)(`article`,{className:`cand`,children:[(0,$.jsx)(`b`,{children:a.tmux_session}),(0,$.jsxs)(`p`,{children:[a.agent,` · `,a.workdir]}),(0,$.jsxs)(`select`,{"aria-label":X(`sessions.dialogs.discover.projectFor`,{name:a.tmux_session}),defaultValue:``,children:[(0,$.jsx)(`option`,{value:``,children:X(`sessions.dialogs.discover.unassigned`)}),t.map(e=>(0,$.jsx)(`option`,{value:e.id,children:e.name},e.id))]}),(0,$.jsx)(`button`,{onClick:t=>{let o=t.currentTarget.previousElementSibling;e.request(`/sessions/adopt`,{method:`POST`,body:{target_id:a.target_id,tmux_session:a.tmux_session,project_id:o.value?Number(o.value):null,agent:a.agent,model:a.model,workdir:a.workdir,name:a.tmux_session}}).then(()=>{r(),n()}).catch(e=>i(String(e),!0))},children:X(`sessions.dialogs.discover.adopt`)})]},`${a.target_id}-${a.tmux_session}`))]})}function Br({api:e,session:t,onClose:n,onCreated:r,onNotice:i}){Z();let[a,o]=(0,Q.useState)(!0),[s,c]=(0,Q.useState)(t.agent),[l,u]=(0,Q.useState)(``),[d,f]=(0,Q.useState)(!0),[p,m]=(0,Q.useState)([]),[h,g]=(0,Q.useState)(!1),[_,v]=(0,Q.useState)([]),[y,b]=(0,Q.useState)(!1);(0,Q.useEffect)(()=>{e.request(`/agents`).then(m).catch(()=>m([{name:t.agent}])),Gt(e).then(v)},[]);let x=p.find(e=>e.name===s),S=!x||!!x.model_flag;async function C(){if(!h){g(!0);try{await e.request(`/sessions/${t.id}/handoff`,{method:`POST`,body:{successor:a,kill_old:a&&d,agent:a?s:``,model:a&&S?l.trim():``}}),i(X(`sessions.dialogs.handoff.requested`)),r(),n()}catch(e){i(String(e),!0)}finally{g(!1)}}}return(0,$.jsxs)(B,{id:`sheet`,className:`sheet`,"aria-label":X(`sessions.dialogs.handoff.title`),onCancel:n,children:[(0,$.jsxs)(`div`,{className:`sheet-head`,children:[(0,$.jsx)(`h2`,{children:X(`sessions.dialogs.handoff.title`)}),(0,$.jsx)(`button`,{className:`x`,onClick:n,children:`✕`})]}),(0,$.jsxs)(`div`,{className:`sub`,children:[(0,$.jsx)(`b`,{className:`hs-name`,children:t.name}),` `,X(`sessions.dialogs.handoff.intro`)]}),(0,$.jsx)(`label`,{className:`f`,htmlFor:`ho-mode`,children:X(`sessions.dialogs.handoff.then`)}),(0,$.jsxs)(`select`,{className:`f`,id:`ho-mode`,value:a?`successor`:`note`,onChange:e=>o(e.target.value===`successor`),children:[(0,$.jsx)(`option`,{value:`successor`,children:X(`sessions.dialogs.handoff.modeSuccessor`)}),(0,$.jsx)(`option`,{value:`note`,children:X(`sessions.dialogs.handoff.modeNote`)})]}),(0,$.jsxs)(`div`,{id:`ho-successor`,hidden:!a,children:[(0,$.jsx)(`label`,{className:`f`,htmlFor:`ho-agent`,children:X(`sessions.dialogs.handoff.handTo`)}),(0,$.jsx)(`select`,{className:`f`,id:`ho-agent`,value:s,onChange:e=>{if(e.target.value===`__more__`){b(!0);return}c(e.target.value)},children:(()=>{let{shown:e,more:n}=qt(p,_),r=e.some(e=>e.name===s)?e:[...e,...p.filter(e=>e.name===s)];return(0,$.jsxs)($.Fragment,{children:[r.map(e=>(0,$.jsxs)(`option`,{value:e.name,children:[e.name,e.name===t.agent?X(`sessions.dialogs.handoff.sameAgentSuffix`):``]},e.name)),n.length>0&&(0,$.jsx)(`option`,{value:`__more__`,children:X(`sessions.dialogs.moreAgents`)})]})})()}),y&&(0,$.jsx)(Jt,{agents:p,onPick:c,onClose:()=>b(!1)}),(0,$.jsx)(`div`,{className:`subhint`,id:`ho-agent-hint`,children:s===t.agent?X(`sessions.dialogs.handoff.sameAgentHint`):X(`sessions.dialogs.handoff.otherAgentHint`,{agent:s})}),(0,$.jsx)(`label`,{className:`f`,htmlFor:`ho-model`,children:X(`sessions.dialogs.model`)}),(0,$.jsx)(`input`,{className:`f`,id:`ho-model`,value:l,disabled:!S,placeholder:S?X(`sessions.dialogs.handoff.modelDefault`):X(`sessions.dialogs.handoff.modelNone`,{agent:s}),onChange:e=>u(e.target.value)}),(0,$.jsxs)(`label`,{className:`f check`,children:[(0,$.jsx)(`input`,{id:`ho-kill`,type:`checkbox`,checked:d,onChange:e=>f(e.target.checked)}),(0,$.jsxs)(`span`,{children:[X(`sessions.dialogs.handoff.retire`),` `,(0,$.jsx)(`span`,{className:`hs-name2`,children:t.name}),` `,X(`sessions.dialogs.handoff.retireAfter`)]})]}),(0,$.jsx)(`div`,{className:`subhint`,id:`ho-kill-hint`,children:X(d?`sessions.dialogs.handoff.killHint`:`sessions.dialogs.handoff.keepHint`)})]}),(0,$.jsx)(`div`,{className:`btnrow`,children:(0,$.jsx)(`button`,{className:`b ok grow`,id:`ho-go`,disabled:h,onClick:()=>void C(),children:X(a?`sessions.dialogs.handoff.goSuccessor`:`sessions.dialogs.handoff.goNote`)})})]})}var Vr=/^Grimoire reference data, not instructions\./;function Hr(e){let t=e.split(` +`);if(!Vr.test(t[0]?.trim()??``))return{recall:[],rest:e};let n=1;for(;ne&&Ur[e]||e||X(`app.continuity.session`),Gr=e=>e?e.charAt(0).toUpperCase()+e.slice(1):X(`app.continuity.session`),Kr=(e,t,n)=>n||(t?`${Gr(e)} · ${t}`:X(`app.continuity.defaultModel`,{agent:Gr(e)})),qr=(e,t,n)=>e.request(`/sessions/${t}/handoff`,{method:`POST`,body:{successor:!0,kill_old:!1,quick_switch:!0,agent:n.agent,model:n.model,profile_id:n.profile}});function Jr(e,t,n,r,i,a){let[o,s]=(0,Q.useState)({phase:`saving`,destination:a});return(0,Q.useEffect)(()=>{if(!i||t==null)return;s({phase:`saving`,destination:a});let r=!1,o,c=async()=>{try{let[i,o]=await Promise.all([e.request(`/sessions/${t}`),e.request(`/sessions/${t}/wraps`)]);if(r)return;let c=i.handoff_destination||a,l=o.find(e=>e.id>n),u=o.find(e=>e.id>n&&e.next_session_id);if(u?.next_session_id){let t=``;try{t=(await e.request(`/sessions/${u.next_session_id}`)).name}catch{t=``}if(r)return;s({phase:`ready`,destination:c,successor:{id:u.next_session_id,name:t}});return}if(i.handoff_in_flight)s({phase:i.handoff_phase===`starting`||l?`starting`:`saving`,destination:c});else if(i.handoff_error){s({phase:`failed`,destination:c,error:i.handoff_error});return}else if(l){s({phase:`failed`,destination:c,error:X(`app.continuity.didNotStart`)});return}else{s({phase:`failed`,destination:c,error:X(`app.continuity.stoppedEarly`)});return}}catch{}r||(o=window.setTimeout(c,1e3))};return c(),()=>{r=!0,o&&window.clearTimeout(o)}},[e,t,n,r,i,a]),o}var Yr=e=>e.launch_profile||e.model||Gr(e.agent);function Xr({api:e,session:t,onOpen:n,onOpenChat:r,pending:i,className:a}){Z();let o=t.predecessor_id||void 0,s=t.successor_id||void 0,[c,l]=(0,Q.useState)({});(0,Q.useEffect)(()=>{let t=!1,n=[o,s].filter(e=>!!e);if(!n.length){l({});return}return Promise.all(n.map(t=>e.request(`/sessions/${t}`).catch(()=>void 0))).then(e=>{if(t)return;let n=new Map(e.filter(e=>!!e).map(e=>[e.id,e]));l({predecessor:o?n.get(o):void 0,successor:s?n.get(s):void 0})}),()=>{t=!0}},[e,o,s]);let u=c.predecessor,d=c.successor;if(!u&&!d&&!i)return null;let f=(e,t)=>(0,$.jsxs)(`span`,{className:`lineage-entry`,children:[(0,$.jsxs)(`button`,{className:`b lineage-open`,"aria-label":X(t?`app.lineage.goBack`:`app.lineage.open`,{name:e.name}),onClick:()=>n?.(e),children:[t&&(0,$.jsx)(`span`,{"aria-hidden":`true`,children:`←`}),(0,$.jsx)(`strong`,{children:e.name||X(`app.lineage.session`,{id:e.id})}),(0,$.jsxs)(`small`,{children:[Yr(e),e.ended_at?X(`app.lineage.ended`):``]}),!t&&(0,$.jsx)(`span`,{"aria-hidden":`true`,children:`→`})]}),r&&(0,$.jsx)(`button`,{className:`b lineage-chat`,"aria-label":X(`app.lineage.openChat`,{name:e.name||X(`app.lineage.sessionLower`,{id:e.id})}),onClick:()=>r(e),children:X(`app.lineage.chat`)})]});return(0,$.jsxs)(`nav`,{className:`lineage ${a||``}`.trim(),"aria-label":X(`app.lineage.label`),children:[u&&f(u,!0),i&&!d&&(0,$.jsx)(`span`,{className:`lineage-pending`,role:`status`,children:X(`app.lineage.saving`)}),d&&f(d,!1)]})}var Zr={running:`⏳`,passed:`✓`,failed:`✗`,error:`⚠`,skipped:`–`};function Qr({session:e,api:t,onNotice:n,hideRun:r=!1}){Z();let[i,a]=(0,Q.useState)(!1),[o,s]=(0,Q.useState)(null),[c,l]=(0,Q.useState)(!1),u=e.last_check;async function d(){l(!0);try{await t.request(`/sessions/${e.id}/checks`,{method:`POST`}),n(X(`sessions.check.started`))}catch(e){n(String(e),!0)}finally{l(!1)}}async function f(){if(i){a(!1);return}a(!0);try{let n=await t.request(`/sessions/${e.id}/checks?limit=1`);s(n[0]||null)}catch{}}return(0,$.jsxs)(`span`,{className:`check-badge`,children:[u&&(0,$.jsxs)(`button`,{type:`button`,className:`chip check-chip check-${u.status}`,title:u.command,"aria-expanded":i,onClick:()=>void f(),children:[Zr[u.status]||`?`,` `,u.status===`running`?X(`sessions.check.running`):u.status===`passed`?X(`sessions.check.passed`):u.status===`failed`?X(`sessions.check.failed`):u.status===`error`?X(`sessions.check.error`):X(`sessions.check.skipped`)]}),!r&&(0,$.jsx)(`button`,{type:`button`,className:`chip check-run`,disabled:c,onClick:()=>void d(),children:X(c?`sessions.check.starting`:`sessions.check.run`)}),i&&(0,$.jsxs)(`div`,{className:`check-detail`,children:[(0,$.jsx)(`code`,{children:o?.command||u?.command}),(0,$.jsx)(`pre`,{children:o?.output_tail||X(`sessions.check.noOutput`)})]})]})}function $r({session:e,tag:t=`ctx`}){if(Z(),e.context_used_pct!=null){let n=kn(e.context_used_pct),r=On(n),i=e.context_tokens!=null&&e.context_size!=null?X(`sessions.usage.contextTitle`,{used:An(e.context_tokens),size:An(e.context_size)}):void 0;return(0,$.jsxs)(`span`,{className:`ctxbar ctx-used ${r}`,title:i,children:[t,` `,(0,$.jsx)(`i`,{children:(0,$.jsx)(`b`,{style:{width:`${n}%`}})}),` `,n,`%`]})}if(e.context_pct!=null){let n=e.context_pct;return(0,$.jsxs)(`span`,{className:`ctxbar ${n<=10?`crit`:n<=25?`low`:``}`,title:X(`sessions.usage.contextLeftTitle`),children:[t,` `,(0,$.jsx)(`i`,{children:(0,$.jsx)(`b`,{style:{width:`${kn(n)}%`}})}),` `,n,`%`]})}return null}function ei({session:e}){return Z(),e.cost_usd==null?null:(0,$.jsx)(`span`,{className:`chip cost`,children:jn(e.cost_usd)})}function ti({session:e}){Z();let t=Mn(e.lines_added,e.lines_removed);return t?(0,$.jsx)(`span`,{className:`chip ds`,children:t}):null}var ni=120;function ri({session:e,now:t=Date.now()/1e3}){Z();let n=e.context_used_pct!=null&&e.context_used_pct>=85,r=e.precompact_at!=null&&t-e.precompact_atn(e=>!e),children:X(`sessions.overlap.chip`,{id:r.session_id})}),t&&(0,$.jsxs)(`div`,{className:`awareness-overlap-detail`,children:[(0,$.jsxs)(`div`,{children:[X(`sessions.overlap.detailBefore`),(0,$.jsx)(`strong`,{children:r.name}),X(`sessions.overlap.detailAfter`,{id:r.session_id})]}),(0,$.jsx)(`ul`,{children:r.files.map(e=>(0,$.jsx)(`li`,{children:(0,$.jsx)(`code`,{children:e})},e))})]})]}):null}function ai({session:e,request:t,onNotice:n}){Z();let[r,i]=(0,Q.useState)([]),[a,o]=(0,Q.useState)(!1),[s,c]=(0,Q.useState)(null),l=e.repo_key;(0,Q.useEffect)(()=>{if(!l){i([]);return}let e=!1,n=()=>t(`/claims?repo_key=${encodeURIComponent(l)}`).then(t=>{e||i(t)}).catch(()=>{});n();let r=window.setInterval(n,2e4);return()=>{e=!0,clearInterval(r)}},[l,t]);async function u(e){c(e);try{await t(`/claims/${e}`,{method:`DELETE`}),i(t=>t.filter(t=>t.id!==e))}catch(e){n(String(e),!0)}finally{c(null)}}return!l||r.length===0?null:(0,$.jsxs)(`span`,{className:`session-claims-chip`,children:[(0,$.jsx)(`button`,{type:`button`,className:`chip`,"aria-expanded":a,onClick:()=>o(e=>!e),title:X(`board.claims.sessionChipTitle`),children:X(`board.claims.sessionChip`,{count:r.length})}),a&&(0,$.jsx)(`div`,{className:`session-claims`,children:r.map(t=>(0,$.jsxs)(`div`,{className:`session-claims-row`,children:[(0,$.jsxs)(`span`,{children:[t.holder_kind===`session`&&`#${t.session_id} `,t.holder]}),(0,$.jsxs)(`span`,{className:`claims-scope`,children:[X(`board.claims.kind.${t.scope_kind}`,void 0,t.scope_kind),` `,Vt(t)]}),t.intent&&(0,$.jsxs)(`em`,{children:[`“`,t.intent,`”`]}),t.session_id===e.id&&(0,$.jsx)(`button`,{type:`button`,className:`b`,disabled:s===t.id,onClick:()=>void u(t.id),children:X(`board.claims.release`)})]},t.id))})]})}function oi(e){return e.replace(/\r/g,``).replace(/(?:[ \t ]*\n)+[ \t ]*$/,``).replace(/[ \t ]+$/,``)}var si=[`working`,`needs_you`,`idle`,`ended`];function ci(e,t=!1){return e.archived_at==null?e.setup_state===`failed`?{state:`ended`,reason:`setup_failed`}:e.ended_at!=null&&e.status!==`dead`?{state:`ended`,reason:`untracked`}:e.ended_at!=null||e.status===`dead`?{state:`ended`,reason:``}:e.status===`interrupted`?{state:`ended`,reason:`interrupted`}:e.agent_exited_at?{state:`ended`,reason:`agent_exited`}:e.setup_state===`creating`?{state:`working`,reason:`setting_up`}:t?{state:`needs_you`,reason:`approval`}:e.agent_state===`waiting_permission`?{state:`needs_you`,reason:`permission_prompt`}:e.status===`starting`?{state:`working`,reason:`starting`}:e.status===`running`?{state:`working`,reason:``}:{state:`idle`,reason:``}:{state:`ended`,reason:`archived`}}function li(e,t){if(!e.state||!si.includes(e.state))return ci(e,!!t);let n={state:e.state,reason:e.state_reason||``};return t===void 0||n.state===`ended`?n:t&&n.state!==`needs_you`?{state:`needs_you`,reason:`approval`}:!t&&n.state===`needs_you`&&n.reason===`approval`?ci({...e,state:void 0},!1):n}function ui(e){return X(`status.${e}`)}function di(e){return e?X(`status.reason.${e}`,void 0,e.replace(/_/g,` `)):``}function fi(e){if(e.state===`ended`&&e.reason===`agent_exited`)return X(`status.stopped`);let t=e.reason&&e.reason!==`approval`?di(e.reason):``;return t?`${ui(e.state)} · ${t}`:ui(e.state)}var pi={needs_you:0,working:1,idle:2,ended:3},mi=`chat.enter`;function hi(){try{return matchMedia(`(hover: none) and (pointer: coarse)`).matches}catch{return!1}}function gi(e,t){return e===`send`||e===`auto`&&!t}function _i(e,t,n){return e.key!==`Enter`||e.isComposing||e.altKey?!1:e.ctrlKey||e.metaKey?!0:!e.shiftKey&&gi(t,n)}var vi=(0,Q.createContext)(null);function yi({link:e,children:t}){let n=(0,Q.useContext)(vi),r=e.kind===`file`&&e.verify?n?.exists(e.path):!0,[i,a]=(0,Q.useState)(typeof r==`boolean`?r:void 0);if(!n)return(0,$.jsx)($.Fragment,{children:t});let o=()=>{i===void 0&&e.kind===`file`&&e.verify&&Promise.resolve(n.exists(e.path)).then(a,()=>a(!1))};if(i===!1)return(0,$.jsx)($.Fragment,{children:t});let s=e.kind===`url`?e.url:e.path;return(0,$.jsx)(`a`,{className:`md-file-link`+(i===void 0?` unverified`:``),href:e.kind===`url`?e.url:`#`,target:e.kind===`url`?`_blank`:void 0,rel:`noreferrer noopener`,title:s,"data-path":e.kind===`file`?e.path:void 0,onMouseEnter:o,onFocus:o,onClick:t=>{t.preventDefault(),n.open(e)},children:t})}function bi(e,t,n){let r=[];return e.split(` +`).forEach((e,i)=>{i>0&&r.push(` +`);let a=0,o=ke([{text:e}],0,n).sort((e,t)=>e.spans[0].start-t.spans[0].start);for(let[n,s]of o.entries()){let{start:o,end:c}=s.spans[0];oa&&r.push(e.slice(a,o)),r.push((0,$.jsx)(yi,{link:s,children:e.slice(o,c)},`${t}-l${i}-${n}`)),a=c)}a{let i=`${t}-${r}`;if(!e)return null;if(e.startsWith(`**`)&&e.endsWith(`**`)&&e.length>3)return(0,$.jsx)(`strong`,{children:e.slice(2,-2)},i);if(e.startsWith("`")&&e.endsWith("`")&&e.length>1){let t=e.slice(1,-1),r=n===null?void 0:ke([{text:t}],0,n).find(e=>e.spans[0].start===0&&e.spans[0].end===t.length);return r?(0,$.jsx)(yi,{link:r,children:(0,$.jsx)(`code`,{children:t})},i):(0,$.jsx)(`code`,{children:t},i)}let a=/^\[([^\]]+)\]\(([^)\s]+)\)$/.exec(e);if(a){let t=a[1]??``,r=a[2]??``,o=n!==null&&!/^https?:\/\//i.test(r)?Ie(r,n)??ke([{text:r}],0,n).find(e=>e.kind===`file`&&e.spans[0].start===0):void 0;return o&&o.kind===`file`?(0,$.jsx)(yi,{link:{...o,verify:!1},children:t},i):/^https?:\/\//i.test(r)?(0,$.jsx)(`a`,{href:r,target:`_blank`,rel:`noreferrer noopener`,children:t},i):(0,$.jsx)(Q.Fragment,{children:e},i)}return e.startsWith(`*`)&&e.endsWith(`*`)&&e.length>1?(0,$.jsx)(`em`,{children:e.slice(1,-1)},i):(0,$.jsx)(Q.Fragment,{children:n===null?e:bi(e,i,n)},i)})}function Ci(e){let t=e.replace(/\r\n/g,` +`).split(` +`),n=e=>t[e]??``,r=[],i=0;for(;i{let r=`b${t}`;switch(e.type){case`code`:return(0,$.jsx)(`pre`,{className:`md-code`,children:(0,$.jsx)(`code`,{children:e.text})},r);case`heading`:{let t=`h${Math.min(6,(e.level??1)+2)}`;return(0,$.jsx)(t,{children:Si(e.text??``,r,n)},r)}case`hr`:return(0,$.jsx)(`hr`,{},r);case`ul`:return(0,$.jsx)(`ul`,{children:(e.items??[]).map((e,t)=>(0,$.jsx)(`li`,{children:Si(e,`${r}-${t}`,n)},t))},r);case`ol`:return(0,$.jsx)(`ol`,{children:(e.items??[]).map((e,t)=>(0,$.jsx)(`li`,{children:Si(e,`${r}-${t}`,n)},t))},r);default:return(0,$.jsx)(`p`,{children:Si(e.text??``,r,n)},r)}})})}var Ti=e=>e.slice(e.lastIndexOf(`/`)+1),Ei=(e,t,n,r)=>({id:`file:session:${e}:${t}`,kind:`file`,title:Ti(t),params:{session:String(e),path:t,...n?{line:String(n),column:String(r||1),at:String(Date.now())}:{}}}),Di=(e,t)=>({id:`files:session:${e}`,kind:`files`,title:X(`files.paneFilesTitle`,{name:t}),params:{session:String(e)}}),Oi=(e,t)=>({id:`search:session:${e}`,kind:`search`,title:X(`files.paneSearchTitle`,{name:t}),params:{session:String(e)}}),ki=new Map;function Ai(e){return ki.set(e.id,e),()=>{ki.get(e.id)===e&&ki.delete(e.id)}}async function ji(e,t){return e.trim().length<2?[]:(await Promise.allSettled([...ki.values()].map(n=>n.search(e,t)))).flatMap(e=>e.status===`fulfilled`?e.value:[])}var Mi=null,Ni=new Map,Pi=q();function Fi(e){Mi=e}function Ii(){return Mi}async function Li(e,t,n=!1){let r=Ni.get(e);if(n||!r||Date.now()-r.at>6e4){let n=await Pi(`/term/session/${e}/index`,{signal:t});r={at:Date.now(),files:Array.isArray(n.files)?n.files:[],ignored:Array.isArray(n.ignored)?n.ignored:[]},Ni.set(e,r)}return r}function Ri(e,t,n,r){e.open(Ei(e.session,t,n,r),e.focused?{beside:e.focused,edge:e.mobile?`center`:`right`}:void 0)}Ai({id:`workspace-files`,async search(e,t){let n=Mi;if(!n?.session||!C(`file`))return[];let r=b(e);if(!r.text)return[];let i=await Li(n.session,t);return ne(r.text,i.files,i.ignored,20).slice(0,20).map(({path:e,ignored:t})=>({id:`file-${n.session}-${e}`,title:e.slice(e.lastIndexOf(`/`)+1)+(r.line?`:`+r.line:``),category:t?`Ignored files`:`Files`,detail:e,run:()=>Ri(n,e,r.line,r.column)}))}});function zi(e){let t=[],n=new Map;for(let r of e)switch(r.kind){case`text`:r.text&&t.push({kind:`text`,id:r.id,role:r.role,text:r.text});break;case`thinking`:r.text&&t.push({kind:`thinking`,id:r.id,text:r.text});break;case`tool_use`:{let e={kind:`tool`,id:r.id,name:r.tool_name||X(`conversation.chatCards.tool`),input:r.input||{},status:`running`};t.push(e),r.tool_use_id&&n.set(r.tool_use_id,e);break}case`tool_result`:{let e=r.tool_use_id?n.get(r.tool_use_id):void 0;e?(e.output=r.output,e.isError=r.is_error,e.outputTruncated=r.truncated,e.status=`done`):t.push({kind:`tool`,id:r.id,name:X(`conversation.chatCards.toolResult`),input:{},output:r.output,isError:r.is_error,outputTruncated:r.truncated,status:`done`});break}}return t}var Bi=/\x1b\[[0-9;?]*[ -/]*[@-~]/g,Vi=/[─-▟]/g,Hi=/```[\s\S]*?```/g;function Ui(e){return e.replace(Hi,` `+X(`sessions.voice.codeOmitted`)+` `).replace(Bi,``).replace(Vi,` `).replace(/[ \t]+/g,` `).replace(/ *\n */g,` +`).replace(/\n{2,}/g,` +`).trim()}function Wi(e){return e.split(/(?<=[.!?])\s+|\n+/).map(e=>e.trim()).filter(Boolean)}function Gi(e){return e.toLowerCase().replace(/[^a-z\s]/g,``).split(/\s+/).filter(Boolean)}function Ki(e,t){let n=Gi(e).filter(e=>e!==`please`);return n.length===1&&t.includes(n[0])}var qi=[`approve`,`allow`,`yes`],Ji=[`deny`,`no`,`stop`];function Yi(e){return Ki(e,qi)}function Xi(e){return Ki(e,Ji)}var Zi=[`send it`,`over`];function Qi(e){let t=e.trim(),n=t.toLowerCase();for(let e of Zi){if(n===e)return{text:``,triggered:!0};if(n.endsWith(` ${e}`))return{text:t.slice(0,t.length-e.length).trim(),triggered:!0}}return{text:t,triggered:!1}}function $i(e,t){let{text:n}=Qi(e);if(!n.trim())return{type:`ignore`};let r=Gi(n).join(` `);if(r===`exit voice mode`)return{type:`exit`};if(r===`interrupt`||r===`stop that`)return{type:`interrupt`};if(r===`read that again`||r===`say that again`)return{type:`read-again`};if(t){if(Yi(n))return{type:`approve`};if(Xi(n))return{type:`deny`}}return{type:`send`,text:n.trim()}}var ea=`lec-voice-settings`,ta={voiceURI:``,rate:1,autoRead:!0,lang:``};function na(){try{let e=JSON.parse(localStorage.getItem(ea)||`null`);if(!e||typeof e!=`object`)return{...ta};let t=e;return{voiceURI:typeof t.voiceURI==`string`?t.voiceURI:ta.voiceURI,rate:typeof t.rate==`number`&&t.rate>0?t.rate:ta.rate,autoRead:typeof t.autoRead==`boolean`?t.autoRead:ta.autoRead,lang:typeof t.lang==`string`?t.lang:ta.lang}}catch{return{...ta}}}function ra(e){try{localStorage.setItem(ea,JSON.stringify(e))}catch{}}function ia(e){if(!Ze(e))return`unsupported`;let t=e.navigator?.userAgent||``;return/iPad|iPhone|iPod/.test(t)?`push-to-talk`:`continuous`}function aa(e){return`speechSynthesis`in e&&typeof e.speechSynthesis?.speak==`function`}var oa=1500,sa=2e3;function ca(e){let[t,n]=(0,Q.useState)(!1),[r,i]=(0,Q.useState)(!1),[a,o]=(0,Q.useState)(!1),[s,c]=(0,Q.useState)(``),[l,u]=(0,Q.useState)(),[d,f]=(0,Q.useState)(``),[p,m]=(0,Q.useState)(()=>na()),h=(0,Q.useRef)({...e,settings:p,pendingApproval:e.pendingApproval});h.current={...e,settings:p,pendingApproval:e.pendingApproval};let g=(0,Q.useRef)(!1);g.current=t;let _=typeof window<`u`?Ze(window):void 0,v=typeof window<`u`?ia(window):`unsupported`,y=typeof window<`u`&&aa(window),b=v!==`unsupported`&&y,x=(0,Q.useRef)(void 0),S=(0,Q.useRef)(``),C=(0,Q.useRef)(0),w=(0,Q.useRef)(void 0),T=(0,Q.useRef)(void 0),E=(0,Q.useRef)([]),D=(0,Q.useRef)(null),O=(0,Q.useRef)(null),k=(0,Q.useRef)(null),A=(0,Q.useCallback)(e=>{let t=typeof window<`u`?window.speechSynthesis:void 0;if(!t)return;let n=e.map(e=>e.trim()).filter(Boolean);if(!n.length)return;E.current=n;let{rate:r,voiceURI:i,lang:a}=h.current.settings,s=t.getVoices?.()||[],c=i?s.find(e=>e.voiceURI===i):void 0;for(let e of n){let n=new SpeechSynthesisUtterance(e);n.rate=r||1,a&&(n.lang=a),c&&(n.voice=c),n.onstart=()=>o(!0),n.onend=()=>o(!1),n.onerror=()=>o(!1),t.speak(n)}},[]),j=(0,Q.useCallback)(e=>A([e]),[A]),M=(0,Q.useCallback)(()=>{T.current!==void 0&&(window.clearTimeout(T.current),T.current=void 0),u(void 0),f(X(`sessions.voice.cancelled`))},[]),N=(0,Q.useCallback)(e=>{e.trim()&&(u(e),f(X(`sessions.voice.sending`)),T.current=window.setTimeout(()=>{T.current=void 0,u(void 0);let{api:t,sessionId:n,onNotice:r}=h.current;t.request(`/sessions/${n}/send`,{method:`POST`,body:{text:e}}).then(()=>f(X(`sessions.voice.sent`))).catch(e=>{r(String(e),!0),f(X(`sessions.voice.sendFailed`,{error:String(e)}))})},sa))},[]),P=(0,Q.useCallback)(e=>{let{api:t,sessionId:r,onNotice:i,pendingApproval:a}=h.current;switch(e.type){case`ignore`:return;case`exit`:f(X(`sessions.voice.exiting`)),j(X(`sessions.voice.exiting`)),n(!1);return;case`read-again`:E.current.length?A(E.current):f(X(`sessions.voice.nothingToRead`));return;case`interrupt`:t.request(`/sessions/${r}/send`,{method:`POST`,body:{key:`escape`}}).then(()=>f(X(`sessions.voice.interruptSent`))).catch(e=>i(String(e),!0));return;case`approve`:case`deny`:{if(!a)return;let n=e.type===`approve`?`approved`:`denied`;t.request(`/approvals/${a.id}/decision`,{method:`POST`,body:{decision:n}}).then(()=>{let e=X(n===`approved`?`sessions.voice.approved`:`sessions.voice.denied`);f(e),j(e)}).catch(e=>i(String(e),!0));return}case`send`:N(e.text)}},[N,j,A]),F=(0,Q.useCallback)(()=>{w.current!==void 0&&(window.clearTimeout(w.current),w.current=void 0);let e=S.current.trim();S.current=``,c(``),e&&P($i(e,!!h.current.pendingApproval))},[P]),I=(0,Q.useCallback)(()=>{w.current!==void 0&&window.clearTimeout(w.current),w.current=window.setTimeout(F,oa)},[F]),L=(0,Q.useCallback)(e=>{if(!e)return;let t=oe(e.results,C.current);C.current=t.committed;for(let e of t.finalized)S.current=Qe(S.current,e);if(c(Qe(S.current,t.interim)),typeof window<`u`&&window.speechSynthesis?.speaking&&window.speechSynthesis.cancel(),t.finalized.length&&Qi(S.current).triggered){F();return}I()},[F,I]),R=(0,Q.useCallback)(()=>{if(!_)return;let e=new _;x.current=e,e.lang=h.current.settings.lang||navigator.language,e.interimResults=!0,e.continuous=!0;let t=!1;e.onresult=L,e.onerror=e=>{i(!1);let r=e?.error;r===`not-allowed`||r===`service-not-allowed`?(t=!0,n(!1),h.current.onNotice(X(`sessions.voice.micDenied`),!0)):r&&r!==`no-speech`&&r!==`aborted`&&h.current.onNotice(X(`sessions.voice.recognitionError`,{code:r}),!0)},e.onend=()=>{if(i(!1),g.current&&!t)try{e.start(),i(!0)}catch{}};try{e.start(),i(!0)}catch(e){h.current.onNotice(String(e),!0)}},[_,L]),z=(0,Q.useCallback)(()=>{if(!_||v!==`push-to-talk`)return;let e=new _;x.current=e,e.lang=h.current.settings.lang||navigator.language,e.interimResults=!0,e.continuous=!1;let t=``;e.onresult=e=>{let n=oe(e.results,0);n.finalized.length&&(t=n.finalized.join(` `)),c(Qe(t,n.interim)),typeof window<`u`&&window.speechSynthesis?.speaking&&window.speechSynthesis.cancel()},e.onend=()=>{i(!1),c(``),t.trim()&&P($i(t,!!h.current.pendingApproval))},e.onerror=e=>{i(!1),(e?.error===`not-allowed`||e?.error===`service-not-allowed`)&&h.current.onNotice(X(`sessions.voice.micDenied`),!0)};try{e.start(),i(!0)}catch(e){h.current.onNotice(String(e),!0)}},[_,v,P]),B=(0,Q.useCallback)(()=>{x.current?.stop()},[]);return(0,Q.useEffect)(()=>{if(!t){x.current?.stop(),typeof window<`u`&&window.speechSynthesis?.cancel(),i(!1),o(!1),c(``),u(void 0),f(``),T.current!==void 0&&(window.clearTimeout(T.current),T.current=void 0),w.current!==void 0&&(window.clearTimeout(w.current),w.current=void 0),D.current=null,O.current=null,k.current?.release().catch(()=>{}),k.current=null;return}return v===`continuous`&&R(),navigator.wakeLock?.request(`screen`).then(e=>{k.current=e}).catch(()=>{}),()=>{x.current?.stop()}},[t,v]),(0,Q.useEffect)(()=>()=>{x.current?.stop(),typeof window<`u`&&window.speechSynthesis?.cancel(),T.current!==void 0&&window.clearTimeout(T.current),w.current!==void 0&&window.clearTimeout(w.current),k.current?.release().catch(()=>{})},[]),(0,Q.useEffect)(()=>{e.disabled&&t&&n(!1)},[e.disabled]),(0,Q.useEffect)(()=>{if(!t){D.current=null;return}if(D.current===null){D.current=e.sessionText.length;return}if(!p.autoRead){D.current=e.sessionText.length;return}if(e.sessionText.length{let n=e.pendingApproval;if(!t||!n){n||(O.current=null);return}if(O.current===n.id)return;O.current=n.id;let r=X(`sessions.voice.approvalPrompt`,{action:n.summary||n.toolName});f(r),j(r)},[t,e.pendingApproval,j]),{supported:b,listenMode:v,active:t,listening:r,speaking:a,transcript:s,pendingSend:l,statusMessage:d,settings:p,toggleActive:(0,Q.useCallback)(()=>{n(e=>!e&&b)},[b]),cancelPendingSend:M,updateSettings:(0,Q.useCallback)(e=>{m(t=>{let n={...t,...e};return ra(n),n})},[]),pressStart:z,pressEnd:B}}function la({api:e,sessionId:t,sessionText:n,approvals:r,disabled:i,onNotice:a}){Z();let o=r[0],s=ca({api:e,sessionId:t,sessionText:n,pendingApproval:o?{id:o.id,toolName:o.tool_name,summary:re(o)||o.tool_name}:void 0,disabled:i,onNotice:a}),[c,l]=(0,Q.useState)(!1),[u,d]=(0,Q.useState)([]);if((0,Q.useEffect)(()=>{if(!s.supported||typeof window>`u`)return;let e=()=>d(window.speechSynthesis.getVoices());return e(),window.speechSynthesis.addEventListener?.(`voiceschanged`,e),()=>window.speechSynthesis.removeEventListener?.(`voiceschanged`,e)},[s.supported]),!s.supported)return(0,$.jsx)(`p`,{className:`voice-mode-unsupported sub`,id:`voice-mode-unsupported`,children:X(`sessions.voice.unsupported`)});let f=s.listenMode===`push-to-talk`;return(0,$.jsxs)(`div`,{className:`voice-mode`,id:`voice-mode`,children:[(0,$.jsx)(`button`,{type:`button`,className:s.active?`b ok`:`b`,id:`voice-mode-toggle`,"aria-pressed":s.active,disabled:i,onClick:s.toggleActive,children:s.active?X(`sessions.voice.toggleOn`):X(`sessions.voice.toggle`)}),s.active&&(0,$.jsxs)(`div`,{className:`voice-mode-panel`,id:`voice-mode-panel`,children:[(0,$.jsxs)(`div`,{className:`voice-mode-state`,role:`status`,children:[(0,$.jsx)(`span`,{className:`voice-mode-dot${s.speaking?` speaking`:s.listening?` listening`:``}`,"aria-hidden":`true`}),s.speaking?X(`sessions.voice.speaking`):s.listening?X(`sessions.voice.listening`):X(f?`sessions.voice.holdMic`:`sessions.voice.idle`)]}),f?(0,$.jsx)(`p`,{className:`sub`,children:X(`sessions.voice.pushToTalkHelp`)}):null,!!s.transcript&&(0,$.jsx)(`p`,{id:`voice-mode-transcript`,className:`voice-mode-transcript`,children:s.transcript}),f&&(0,$.jsx)(`button`,{type:`button`,className:`b voice-mode-hold`,id:`voice-mode-hold-to-talk`,onPointerDown:e=>{e.preventDefault(),s.pressStart()},onPointerUp:s.pressEnd,onPointerLeave:s.pressEnd,onPointerCancel:s.pressEnd,children:X(`sessions.voice.holdToTalk`)}),!!s.statusMessage&&(0,$.jsx)(`p`,{id:`voice-mode-status`,role:`status`,className:`voice-mode-status`,children:s.statusMessage}),s.pendingSend!==void 0&&(0,$.jsxs)(`div`,{className:`voice-mode-pending`,id:`voice-mode-pending`,children:[(0,$.jsx)(`span`,{children:X(`sessions.voice.pendingSend`,{text:s.pendingSend})}),(0,$.jsx)(`button`,{type:`button`,className:`b warn`,id:`voice-mode-cancel-send`,onClick:s.cancelPendingSend,children:X(`sessions.voice.cancel`)})]}),(0,$.jsx)(`div`,{className:`voice-mode-hints sub`,children:X(`sessions.voice.hints`)}),(0,$.jsxs)(`details`,{id:`voice-mode-settings`,onToggle:e=>l(e.currentTarget.open),children:[(0,$.jsx)(`summary`,{children:X(`sessions.voice.settings`)}),c&&(0,$.jsxs)(`div`,{className:`voice-mode-settings-body`,children:[(0,$.jsxs)(`label`,{children:[X(`sessions.voice.voice`),(0,$.jsxs)(`select`,{id:`voice-mode-voice`,value:s.settings.voiceURI,onChange:e=>s.updateSettings({voiceURI:e.target.value}),children:[(0,$.jsx)(`option`,{value:``,children:X(`sessions.voice.browserDefault`)}),u.map(e=>(0,$.jsxs)(`option`,{value:e.voiceURI,children:[e.name,` (`,e.lang,`)`]},e.voiceURI))]})]}),(0,$.jsxs)(`label`,{children:[X(`sessions.voice.rate`),(0,$.jsx)(`input`,{id:`voice-mode-rate`,type:`range`,min:.5,max:2,step:.1,value:s.settings.rate,onChange:e=>s.updateSettings({rate:Number(e.target.value)})}),(0,$.jsxs)(`span`,{children:[s.settings.rate.toFixed(1),`×`]})]}),(0,$.jsxs)(`label`,{children:[X(`sessions.voice.language`),(0,$.jsx)(`input`,{id:`voice-mode-lang`,type:`text`,placeholder:navigator.language,value:s.settings.lang,onChange:e=>s.updateSettings({lang:e.target.value})})]}),(0,$.jsxs)(`label`,{className:`voice-mode-autoread`,children:[(0,$.jsx)(`input`,{id:`voice-mode-autoread`,type:`checkbox`,checked:s.settings.autoRead,onChange:e=>s.updateSettings({autoRead:e.target.checked})}),X(`sessions.voice.autoRead`)]})]})]})]})]})}var ua=[{id:`phone`,get label(){return X(`browser.device.phone`)},viewport:{width:390,height:844,mobile:!0,scale:2}},{id:`tablet`,get label(){return X(`browser.device.tablet`)},viewport:{width:820,height:1180,mobile:!0,scale:2}},{id:`desktop`,get label(){return X(`browser.device.desktop`)},viewport:{width:1280,height:800,mobile:!1,scale:1}}];function da(e){return ua.find(t=>t.id===e)??ua[2]}function fa(e,t,n){if(!t||!n||!e.width||!e.height)return e;let r=Math.min(e.width/t,e.height/n),i=t*r,a=n*r;return{left:e.left+(e.width-i)/2,top:e.top+(e.height-a)/2,width:i,height:a}}function pa(e,t,n,r){let i=fa(n,r.width,r.height),a=(e-i.left)/i.width*r.width,o=(t-i.top)/i.height*r.height;return a>=0&&o>=0&&a<=r.width&&o<=r.height?{x:Math.round(a*10)/10,y:Math.round(o*10)/10}:null}function ma(e){return+!!e.altKey|(e.ctrlKey?2:0)|(e.metaKey?4:0)|(e.shiftKey?8:0)}function ha(e,t,n){if(!n)return[t];let r=e.findIndex(e=>e.selector===t.selector);return r>=0?e.filter((e,t)=>t!==r):[...e,t].slice(-8)}function ga(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.selector==`string`&&t.selector.length>0&&t.selector.length<2e3&&typeof t.html==`string`&&typeof t.url==`string`&&!!t.rect&&typeof t.rect==`object`&&!!t.viewport&&typeof t.viewport==`object`}function _a(e){if(!e||typeof e!=`object`)return null;let t=e;switch(t.type){case`hover`:return typeof t.breadcrumb==`string`?{type:`hover`,breadcrumb:t.breadcrumb.slice(0,400)}:null;case`select`:return ga(t.element)?{type:`select`,additive:t.additive===!0,element:t.element}:null;case`cancel`:return{type:`cancel`};case`capture`:return typeof t.id==`string`?{type:`capture`,id:t.id,png:typeof t.png==`string`&&t.png.startsWith(`data:image/png;base64,`)?t.png:void 0,error:typeof t.error==`string`?t.error:void 0}:null}return null}function va(e,t,n){if(!t||e.source!==t||e.origin!==n)return null;let r=e.data;return r&&typeof r==`object`?_a(r.lecternDesign):null}function ya(e,t){let n=e.hostname.includes(`:`)?`[${e.hostname}]`:e.hostname;return`${e.protocol===`https:`&&t.tls?`https:`:`http:`}//${n}:${t.listen_port}`}function ba(e,t){return e.protocol!==`https:`||t.tls}function xa(e,t,n=`/`){let r=new URL(n.startsWith(`/`)?n:`/`+n,ya(e,t));return t.ticket&&r.searchParams.set(t.ticket_param||`__lectern_ticket`,t.ticket),r.toString()}function Sa(e){try{let t=new URL(e);return t.pathname+t.search+t.hash}catch{return`/`}}function Ca(e){try{let t=new URL(e);return[`localhost`,`127.0.0.1`,`[::1]`].includes(t.hostname)?Number(t.port)||(t.protocol===`https:`?443:80):null}catch{return null}}function wa(e){let t=e.trim();return t&&(/^\d{2,5}$/.test(t)?`http://localhost:${t}/`:/^:\d{2,5}(\/.*)?$/.test(t)?`http://localhost${t}`:/^[a-z][a-z0-9+.-]*:\/\//i.test(t)?t:`http://${t}`)}function Ta(e){return e>=1<<20?X(`browser.size.mb`,{size:(e/(1<<20)).toFixed(1)}):e>=1024?X(`browser.size.kb`,{size:Math.round(e/1024)}):X(`browser.size.bytes`,{size:e})}var Ea=typeof matchMedia==`function`&&matchMedia(`(max-width: 700px)`).matches;function Da(e){return e instanceof Error?e.message:String(e)}function Oa({api:e,sessionId:t,name:r,onClose:i,onNotice:a}){Z();let o=(0,Q.useRef)(a);o.current=a;let s=(0,Q.useRef)(e);s.current=e;let c=(0,Q.useCallback)((e,t)=>o.current(e,t),[]),l=(0,Q.useRef)({request:(e,t)=>s.current.request(e,t)}).current,[u,d]=(0,Q.useState)(),[f,p]=(0,Q.useState)(!0),[m,h]=(0,Q.useState)(),[g,_]=(0,Q.useState)(``),[v,y]=(0,Q.useState)(!1),[b,x]=(0,Q.useState)(!1),[S,C]=(0,Q.useState)(``),[w,T]=(0,Q.useState)(Ea?`phone`:`desktop`),[E,D]=(0,Q.useState)(),[O,k]=(0,Q.useState)(),[A,j]=(0,Q.useState)(``),[M,N]=(0,Q.useState)(``),[P,F]=(0,Q.useState)(!1),[I,L]=(0,Q.useState)(``),[R,z]=(0,Q.useState)([]),[B,V]=(0,Q.useState)(!1),[H,ee]=(0,Q.useState)(``),[te,U]=(0,Q.useState)(``),[ne,G]=(0,Q.useState)(`page`),[K,q]=(0,Q.useState)(!1),[re,ie]=(0,Q.useState)(!1),[ae,oe]=(0,Q.useState)(Ea),[se,ce]=(0,Q.useState)(``),[le,ue]=(0,Q.useState)(),[de,fe]=(0,Q.useState)(),[pe,me]=(0,Q.useState)(!1),[he,ge]=(0,Q.useState)(``),[_e,ve]=(0,Q.useState)(``),[ye,be]=(0,Q.useState)(``),[xe,Se]=(0,Q.useState)([]),Ce=(0,Q.useRef)(null),we=(0,Q.useRef)(null),Te=(0,Q.useRef)(null),Ee=(0,Q.useRef)(new Map),De=(0,Q.useRef)({back:0,forward:0,moving:!1}),Oe=(0,Q.useRef)(1),ke=(0,Q.useRef)(null),[,je]=(0,Q.useState)(0),Me=da(w),Ne=!!Ae,Pe=!!u?.views_enabled&&!Ne,Fe=(0,Q.useCallback)(async()=>{try{let e=await l.request(`/sessions/${t}/browser`);return d(e),e}catch(e){c(Da(e),!0);return}},[l,t,c]),Ie=(0,Q.useCallback)(()=>{_(``),l.request(`/sessions/${t}/ports`).then(e=>h(e.ports)).catch(e=>_(Da(e)))},[l,t]);(0,Q.useEffect)(()=>{Fe().then(e=>{e&&(e.running&&e.state?.url&&e.state.url!==`about:blank`&&C(e.state.url),D(e.running||!e.views_enabled||Ne?`shared`:`direct`))}),Ie(),l.request(`/sessions/${t}/browser/profiles`).then(fe).catch(()=>void 0),l.request(`/live`).then(e=>Se(e.views.filter(e=>e.kind===`desktop`&&e.session_id===t))).catch(()=>void 0)},[l,t,Fe,Ie,Ne]),(0,Q.useEffect)(()=>{if(typeof matchMedia!=`function`)return;let e=matchMedia(`(max-width: 700px)`),t=()=>oe(e.matches);return e.addEventListener?.(`change`,t),()=>e.removeEventListener?.(`change`,t)},[]);let Le=(0,Q.useCallback)((e,t=!1)=>{e&&(e.type===`hover`?L(e.breadcrumb):e.type===`select`?z(n=>ha(n,e.element,e.additive||t)):e.type===`cancel`?z([]):e.type===`capture`&&(Ee.current.get(e.id)?.(e.png),Ee.current.delete(e.id)))},[]),Re=(0,Q.useRef)(B);Re.current=B,(0,Q.useEffect)(()=>{if(E!==`shared`||!u?.running)return;let e=!1,r,i=``,a=()=>{let o=location.protocol===`https:`?`wss:`:`ws:`,s=new WebSocket(n(`${o}//${location.host}/api/sessions/${t}/browser/stream`));s.binaryType=`blob`,Te.current=s,s.onmessage=e=>{if(typeof e.data!=`string`){let t=URL.createObjectURL(e.data);i&&URL.revokeObjectURL(i),i=t,U(t);return}try{let t=JSON.parse(e.data);if(t.type===`frame`&&typeof t.page_scale==`number`&&t.page_scale>0)Oe.current=t.page_scale;else if(t.type===`state`&&t.status){d(t.status),typeof t.can_drive==`boolean`&&p(t.can_drive);let e=t.status.state?.url;e&&e!==`about:blank`&&C(t=>document.activeElement?.id===`browser-address`?t:e)}else t.type===`design`&&Le(_a(t.design),Re.current)}catch{}},s.onclose=()=>{Te.current===s&&(Te.current=null),e||(r=window.setTimeout(()=>void Fe().then(t=>t?.running&&!e&&a()),1500))}};return a(),()=>{e=!0,window.clearTimeout(r),Te.current?.close(),Te.current=null,i&&URL.revokeObjectURL(i)}},[E,u?.running,t,Fe,Le]);let ze=(0,Q.useCallback)(async e=>{let n=Te.current;if(e.action===`control`&&n&&n.readyState===1){n.send(JSON.stringify({type:`control`,mode:e.mode}));return}N(String(e.action));try{let n=await l.request(`/sessions/${t}/browser`,{method:`POST`,body:e});return n.status&&d(n.status),n}catch(e){c(Da(e),!0);return}finally{N(``)}},[l,t,c]),Be=(e=Me)=>({...e.viewport}),Ve=(0,Q.useCallback)(async(e,n,r)=>{N(`view`);try{let i=await l.request(`/sessions/${t}/browser/views`,{method:`POST`,body:{port:e,design:r,parent_origin:location.origin}});if(!ba(location,i)){c(X(`browser.notice.viewNotSecure`)),window.open(xa(location,i,n),`_blank`,`noopener`);return}return De.current={back:0,forward:0,moving:!1},k(i),j(xa(location,i,n)),i}catch(e){c(Da(e),!0);return}finally{N(``)}},[l,t,c]);(0,Q.useEffect)(()=>{if(E!==`direct`||!O)return;let e=ya(location,O),t=t=>Le(va(t,Ce.current?.contentWindow,e),Re.current);return window.addEventListener(`message`,t),()=>window.removeEventListener(`message`,t)},[E,O,Le]),(0,Q.useEffect)(()=>{let e=ke.current;if(!e||typeof ResizeObserver!=`function`)return;let t=()=>e.style.setProperty(`--frame-scale`,String(Math.min(1,e.clientWidth/Me.viewport.width)));t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[A,Me.viewport.width,E]);let He=async(e=S)=>{let t=wa(e);if(t){if(C(t),y(!1),E===`direct`){let e=Ca(t);if(e===null){c(X(`browser.notice.liveOnlyLocal`)),D(`shared`),await ze({action:`navigate`,url:t,...Be()});return}await Ve(e,Sa(t),P);return}await ze({action:u?.running?`navigate`:`open`,url:t,...Be()}),u?.running||Fe()}},Ue=e=>{if(E===`shared`)return void ze({action:e});if(e===`reload`)return void(O&&Ve(O.port,Sa(S),P));let t=De.current;e===`back`&&t.back>0?(t.back--,t.forward++,t.moving=!0,window.history.back()):e===`forward`&&t.forward>0&&(t.forward--,t.back++,t.moving=!0,window.history.forward()),je(e=>e+1)},We=e=>{T(e),E===`shared`&&u?.running&&ze({action:`resize`,...Be(da(e))})},Ge=async()=>{let e=!P;if(F(e),L(``),e||z([]),E===`shared`){if(!u?.running){c(X(`browser.notice.openPageFirst`),!0),F(!1);return}await ze({action:`design`,on:e})}else O&&await Ve(O.port,Sa(S),e)},Ke=async e=>{if(D(e),F(!1),z([]),e===`direct`){let e=Ca(wa(S));e!==null&&await Ve(e,Sa(wa(S)),!1)}else!u?.running&&S&&(await ze({action:`open`,url:wa(S),...Be()}),Fe())},qe=async()=>{let e=wa(S||u?.state?.url||``),n=Ca(e);if(n!==null&&u?.views_enabled&&!Ne)try{let r=await l.request(`/sessions/${t}/browser/views`,{method:`POST`,body:{port:n,design:!1,parent_origin:location.origin}});window.open(xa(location,r,Sa(e)),`_blank`,`noopener`)}catch(e){c(Da(e),!0)}else/^https?:/.test(e)&&n===null?window.open(e,`_blank`,`noopener`):c(u?.views_disabled_reason||X(`browser.notice.onlyOnAgentMachine`),!0)},Je=e=>{let t=Te.current;t&&t.readyState===1&&t.send(JSON.stringify({type:`input`,event:e}))},Ye=e=>{let t=we.current,n=u?.state?.viewport;if(!t||!n)return null;let r=t.getBoundingClientRect(),i=pa(e.clientX,e.clientY,{left:r.left,top:r.top,width:r.width,height:r.height},n);return i&&{x:i.x/Oe.current,y:i.y/Oe.current}},Xe=(0,Q.useRef)(0),Ze=(0,Q.useRef)(void 0),Qe=(e,t)=>{if(!f)return;let n=Ye(t);if(!n)return;if(e===`mousemove`){let e=performance.now(),r=ma(t);if(window.clearTimeout(Ze.current),e-Xe.current<40){Ze.current=window.setTimeout(()=>{Xe.current=performance.now(),Je({type:`mousemove`,x:n.x,y:n.y,modifiers:r})},40);return}Xe.current=e}else window.clearTimeout(Ze.current),t.preventDefault(),t.currentTarget.parentElement?.focus();let r=t.button===2?`right`:t.button===1?`middle`:`left`;Je({type:e,x:n.x,y:n.y,button:r,clicks:t.detail>1?Math.min(t.detail,3):1,modifiers:ma(t)})},$e=(e,t)=>{f&&E===`shared`&&(t.key===`Tab`&&t.shiftKey&&e===`keydown`&&t.ctrlKey||(t.preventDefault(),Je({type:e,key:t.key,code:t.code,key_code:t.keyCode,modifiers:ma(t)})))},et=e=>new Promise(t=>{let n=Ce.current?.contentWindow;if(!n||!O)return t(void 0);let r=Math.random().toString(36).slice(2),i=window.setTimeout(()=>{Ee.current.delete(r),t(void 0)},4e3);Ee.current.set(r,e=>{window.clearTimeout(i),t(e)}),n.postMessage({lecternDesign:{type:`capture`,id:r,selector:e}},ya(location,O))}),tt=async()=>{if(R.length){N(`design`);try{let e=R;E===`direct`&&(e=await Promise.all(R.map(async e=>({...e,client_png:await et(e.selector)}))));let n=await l.request(`/sessions/${t}/design`,{method:`POST`,body:{note:H,source:E===`direct`?`frame`:`browser`,view_id:O?.id??``,elements:e}}),i=n.screenshots.find(e=>e.source)?.source;c(i?X(`browser.notice.designSentShot`,{name:r,files:n.files.length,source:i}):X(`browser.notice.designSentNoShot`,{name:r,files:n.files.length})),z([]),ee(``)}catch(e){c(Da(e),!0)}finally{N(``)}}},[nt,rt]=(0,Q.useState)({}),[it,at]=(0,Q.useState)({});(0,Q.useEffect)(()=>{if(ne!==`desktop`||!xe.length)return;let e=!1,t=[],n=async()=>{for(let n of xe)try{let r=await l.request(`/live/${n.id}/computer`);if(e)return;rt(e=>({...e,[n.id]:r}));let i=W(),a=await fetch(`/api/live/${n.id}/screenshot`,i?{headers:{Authorization:`Bearer ${i}`}}:{});if(!a.ok||e)continue;let o=URL.createObjectURL(await a.blob());for(t.push(o),at(e=>({...e,[n.id]:o}));t.length>2;)URL.revokeObjectURL(t.shift())}catch{}e||window.setTimeout(()=>void n(),1500)};return n(),()=>{e=!0,t.forEach(e=>URL.revokeObjectURL(e))}},[ne,xe,l]);let ot=async(e,t)=>{try{let n=await l.request(`/live/${e}/computer`,{method:`POST`,body:t});rt(t=>({...t,[e]:n}))}catch(e){c(Da(e),!0)}},st=async(e=!1)=>{if(!se)return;let t=(await ze({action:`find`,text:se,backwards:e}))?.find;t&&ue(t)},ct=async e=>{let n=e;if(e===`__new`&&(n=(window.prompt(X(`browser.profile.prompt`))||``).trim().toLowerCase(),!n))return;let r=wa(S||u?.state?.url||``)||`about:blank`;await ze({action:`open`,profile:n,url:r===`about:blank`?``:r,...Be()}),await Fe();let i=await l.request(`/sessions/${t}/browser/profiles`).catch(()=>void 0);i&&fe(i)},J=async(e,n)=>{be(X(`browser.cookies.importing`));try{let r;if(e===`file`&&n){let e=new FormData;e.append(`file`,n),e.append(`domains`,he),r=e}else r={profile_dir:_e.trim()||`auto`,domains:he};let i=await l.request(`/sessions/${t}/browser/cookies`,{method:`POST`,body:r}),a=Object.entries(i.skipped||{}).map(([e,t])=>`${t} ${e}`).join(`, `);be(a?X(`browser.cookies.importedSkipped`,{imported:i.imported,sites:i.sites,skipped:a}):X(`browser.cookies.imported`,{imported:i.imported,sites:i.sites})),Fe()}catch(e){be(Da(e))}},Y=async e=>{let n=e.path.indexOf(`/.lectern/downloads/`),r=n>=0?e.path.slice(n+1):e.path;try{let n=W(),i=await fetch(`/api/term/session/${t}/file?path=${encodeURIComponent(r)}`,n?{headers:{Authorization:`Bearer ${n}`}}:{});if(!i.ok)throw Error(X(`browser.notice.fetchFailed`,{name:e.name,status:i.status}));let a=URL.createObjectURL(await i.blob()),o=document.createElement(`a`);o.href=a,o.download=e.name,o.click(),window.setTimeout(()=>URL.revokeObjectURL(a),1e4)}catch(e){c(Da(e),!0)}},lt=E===`shared`,ut=!!u?.running,dt=u?.control??`agent`,ft=lt&&ut&&dt===`agent`&&u?.agent_active,pt=u?.state?.title,mt=m?.filter(e=>e.in_workspace)??[],ht=m?.filter(e=>!e.in_workspace)??[],gt=(0,$.jsx)(`button`,{className:`b`,"aria-label":X(`browser.toolbar.back`),disabled:!lt&&De.current.back===0,onClick:()=>Ue(`back`),children:`◀`}),_t=(0,$.jsx)(`button`,{className:`b`,"aria-label":X(`browser.toolbar.forward`),disabled:!lt&&De.current.forward===0,onClick:()=>Ue(`forward`),children:`▶`}),vt=(0,$.jsx)(`button`,{className:`b`,"aria-label":X(`browser.toolbar.reload`),onClick:()=>Ue(`reload`),children:`⟳`}),yt=(0,$.jsxs)(`form`,{className:`browser-address`,onSubmit:e=>{e.preventDefault(),He()},children:[(0,$.jsx)(`input`,{id:`browser-address`,"aria-label":X(`browser.toolbar.address`),placeholder:X(`browser.toolbar.addressPlaceholder`),value:S,onChange:e=>C(e.target.value),autoCapitalize:`off`,autoCorrect:`off`,spellCheck:!1}),(0,$.jsx)(`button`,{className:`b`,disabled:!!M||!S.trim(),children:X(`browser.toolbar.go`)})]}),bt=(0,$.jsx)(`button`,{className:`b`,"aria-expanded":v,onClick:()=>{y(!v),v||Ie()},children:X(`browser.toolbar.ports`)}),xt=(0,$.jsx)(`select`,{"aria-label":X(`browser.toolbar.deviceSize`),value:w,onChange:e=>We(e.target.value),children:ua.map(e=>(0,$.jsxs)(`option`,{value:e.id,children:[e.label,` `,e.viewport.width,`×`,e.viewport.height]},e.id))}),St=(0,$.jsx)(`button`,{className:P?`b on`:`b`,"aria-pressed":P,onClick:()=>void Ge(),children:X(`browser.toolbar.design`)}),Ct=(0,$.jsx)(`button`,{className:`b`,"aria-label":X(`browser.toolbar.openInTab`),onClick:()=>void qe(),children:`⤢`}),wt=(0,$.jsx)(`button`,{className:K?`b on`:`b`,"aria-pressed":K,onClick:()=>lt?q(!K):c(X(`browser.notice.liveFind`)),children:X(`browser.toolbar.find`)}),Tt=(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`label`,{children:[(0,$.jsx)(`input`,{type:`radio`,name:`browser-mode-${t}`,checked:lt,onChange:()=>void Ke(`shared`)}),` `,X(`browser.mode.shared`)]}),(0,$.jsxs)(`label`,{title:Ne?X(`browser.mode.relayOnlyShared`):u?.views_disabled_reason||X(`browser.mode.liveTitle`),children:[(0,$.jsx)(`input`,{type:`radio`,name:`browser-mode-${t}`,checked:E===`direct`,disabled:!Pe,onChange:()=>void Ke(`direct`)}),` `,X(`browser.mode.live`)]})]}),Et=(0,$.jsx)($.Fragment,{children:de&&(0,$.jsxs)(`label`,{className:`browser-profile`,title:X(`browser.profile.where`,{where:de.where}),children:[X(`browser.profile.label`),` `,(0,$.jsxs)(`select`,{"aria-label":X(`browser.profile.select`),value:u?.running?u.profile:de.default,onChange:e=>void ct(e.target.value),children:[de.profiles.map(e=>(0,$.jsx)(`option`,{value:e,children:e===`temporary`?X(`browser.profile.temporary`):e},e)),(0,$.jsx)(`option`,{value:`__new`,children:X(`browser.profile.new`)})]})]})}),Dt=(0,$.jsx)(`button`,{className:`b`,"aria-expanded":pe,onClick:()=>me(!pe),children:X(`browser.cookies.button`)}),Ot=(0,$.jsx)($.Fragment,{children:lt&&ut&&(0,$.jsx)(`span`,{className:`browser-where`,children:u?.where===`host`?X(`browser.where.host`):X(`browser.where.session`)})}),kt=(0,$.jsxs)(`div`,{className:`browser-tabs`,role:`tablist`,children:[(0,$.jsx)(`button`,{role:`tab`,"aria-selected":ne===`page`,className:`b`,onClick:()=>G(`page`),children:X(`browser.pane.tabBrowser`)}),xe.length>0&&(0,$.jsx)(`button`,{role:`tab`,"aria-selected":ne===`desktop`,className:`b`,onClick:()=>G(`desktop`),children:X(`browser.pane.tabDesktop`)})]}),At=(0,$.jsx)(`button`,{className:`b browser-close`,"aria-label":X(`browser.pane.close`),"data-close":!0,onClick:i,children:`✕`});return(0,$.jsxs)(`section`,{className:`browser-pane${ft?` agent-driving`:``}`,"aria-label":X(`browser.pane.label`,{name:r}),"data-mode":E,children:[ae?(0,$.jsxs)(`div`,{className:`browser-toolbar browser-compact`,children:[gt,yt,(0,$.jsx)(`button`,{className:re?`b on`:`b`,"aria-label":X(`browser.menu.more`),"aria-expanded":re,onClick:()=>ie(!re),children:`⋯`}),At]}):(0,$.jsxs)(`header`,{className:`browser-bar`,children:[kt,At]}),ae&&re&&(0,$.jsxs)(`div`,{className:`browser-menu`,"aria-label":X(`browser.menu.label`),onClick:e=>{e.target.closest(`button`)&&ie(!1)},onChange:()=>ie(!1),children:[(0,$.jsxs)(`div`,{className:`browser-menu-row`,children:[_t,vt,St,wt,Ct,bt,Dt]}),(0,$.jsxs)(`div`,{className:`browser-menu-row`,children:[xt,Et]}),(0,$.jsxs)(`div`,{className:`browser-menu-row browser-modes`,children:[Tt,Ot]}),xe.length>0&&(0,$.jsx)(`div`,{className:`browser-menu-row`,children:kt})]}),ne===`page`&&(0,$.jsxs)($.Fragment,{children:[!ae&&(0,$.jsxs)(`div`,{className:`browser-toolbar`,children:[gt,_t,vt,yt,bt,xt,St,Ct,wt]}),lt&&ut&&u&&u.tabs.length>+!!ae&&(0,$.jsxs)(`div`,{className:`browser-tabstrip`,role:`tablist`,"aria-label":X(`browser.tabs.label`),children:[u.tabs.map(e=>(0,$.jsxs)(`span`,{className:e.active?`browser-tab on`:`browser-tab`,children:[(0,$.jsx)(`button`,{role:`tab`,"aria-selected":e.active,title:e.url,onClick:()=>void ze({action:`tab_select`,tab:e.id}),children:e.title||(e.url===`about:blank`?X(`browser.tabs.untitled`):e.url)}),(0,$.jsx)(`button`,{"aria-label":X(`browser.tabs.close`,{title:e.title||e.url}),onClick:()=>void ze({action:`tab_close`,tab:e.id}),children:`×`})]},e.id)),(0,$.jsx)(`button`,{className:`browser-tab-new`,"aria-label":X(`browser.tabs.new`),onClick:()=>void ze({action:`tab_new`}),children:`+`})]}),K&<&&(0,$.jsxs)(`form`,{className:`browser-find`,onSubmit:e=>{e.preventDefault(),st(!1)},children:[(0,$.jsx)(`input`,{"aria-label":X(`browser.find.label`),placeholder:X(`browser.find.label`),value:se,autoFocus:!0,onChange:e=>{ce(e.target.value),ue(void 0)},onKeyDown:e=>{e.key===`Enter`&&e.shiftKey?(e.preventDefault(),st(!0)):e.key===`Escape`&&q(!1)}}),(0,$.jsx)(`button`,{type:`button`,className:`b`,"aria-label":X(`browser.find.previous`),onClick:()=>void st(!0),children:`▲`}),(0,$.jsx)(`button`,{className:`b`,"aria-label":X(`browser.find.next`),children:`▼`}),(0,$.jsx)(`span`,{role:`status`,children:le?le.matches?X(`browser.find.position`,{index:le.index,matches:le.matches}):X(`browser.find.none`):``})]}),!ae&&(0,$.jsxs)(`div`,{className:`browser-modes`,children:[Tt,Et,Dt,Ot]}),pe&&(0,$.jsxs)(`div`,{className:`browser-cookies`,"aria-label":X(`browser.cookies.label`),children:[(0,$.jsx)(`p`,{children:X(`browser.cookies.intro`)}),(0,$.jsxs)(`label`,{children:[X(`browser.cookies.onlySitesOptional`),` `,(0,$.jsx)(`input`,{"aria-label":X(`browser.cookies.onlySites`),placeholder:`example.com, github.com`,value:he,onChange:e=>ge(e.target.value)})]}),(0,$.jsxs)(`label`,{className:`b`,children:[X(`browser.cookies.fromFile`),(0,$.jsx)(`input`,{type:`file`,"aria-label":X(`browser.cookies.file`),accept:`.txt,.json,text/plain,application/json`,hidden:!0,onChange:e=>{let t=e.target.files?.[0];e.target.value=``,t&&J(`file`,t)}})]}),(0,$.jsxs)(`span`,{className:`browser-chrome-import`,children:[(0,$.jsx)(`input`,{"aria-label":X(`browser.cookies.chromeDir`),placeholder:X(`browser.cookies.chromeDirPlaceholder`),value:_e,onChange:e=>ve(e.target.value)}),(0,$.jsx)(`button`,{className:`b`,onClick:()=>void J(`chrome`),children:X(`browser.cookies.fromChrome`)})]}),ye&&(0,$.jsx)(`p`,{role:`status`,children:ye})]}),v&&(0,$.jsxs)(`div`,{className:`browser-ports`,role:`list`,"aria-label":X(`browser.ports.label`),children:[!m&&!g&&(0,$.jsx)(`span`,{children:X(`browser.ports.looking`)}),g&&(0,$.jsx)(`span`,{className:`browser-error`,children:g}),m&&m.length===0&&(0,$.jsx)(`span`,{children:X(`browser.ports.none`)}),[...mt,...b?ht:ht.filter(e=>e.http).slice(0,8)].map(e=>(0,$.jsxs)(`button`,{role:`listitem`,className:e.in_workspace?`b port in-workspace`:`b port`,title:e.command,onClick:()=>{y(!1),He(`http://localhost:${e.port}/`)},children:[`:`,e.port,(0,$.jsx)(`small`,{children:e.in_workspace?X(`browser.ports.thisWorkspace`):(e.command.split(` `)[0]??``).split(`/`).pop()}),!e.http&&(0,$.jsx)(`small`,{className:`dim`,children:X(`browser.ports.notHttp`)})]},e.port)),!b&&ht.length>ht.filter(e=>e.http).slice(0,8).length&&(0,$.jsx)(`button`,{className:`b`,onClick:()=>x(!0),children:X(`browser.ports.all`,{total:m?.length??``})}),(0,$.jsx)(`button`,{className:`b`,onClick:Ie,"aria-label":X(`browser.ports.lookAgain`),children:`⟳`})]}),lt&&ut&&(0,$.jsxs)(`div`,{className:`browser-control control-${dt}`,role:`status`,children:[dt===`agent`&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{children:u?.agent_active?u.last_action?X(`browser.control.agentDrivingAction`,{action:u.last_action}):X(`browser.control.agentDriving`):X(`browser.control.agentMay`)}),f&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`button`,{className:`b`,onClick:()=>void ze({action:`control`,mode:`user`}),children:X(`browser.control.takeOver`)}),(0,$.jsx)(`button`,{className:`b warn`,onClick:()=>void ze({action:`control`,mode:`stopped`}),children:X(`browser.control.stopAgent`)})]})]}),dt===`user`&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{children:X(`browser.control.userHas`)}),f&&(0,$.jsx)(`button`,{className:`b`,onClick:()=>void ze({action:`control`,mode:`agent`}),children:X(`browser.control.handBack`)})]}),dt===`stopped`&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{children:X(`browser.control.stopped`)}),f&&(0,$.jsx)(`button`,{className:`b`,onClick:()=>void ze({action:`control`,mode:`agent`}),children:X(`browser.control.allow`)})]})]}),(0,$.jsxs)(`div`,{className:`browser-stage`,"data-device":w,children:[lt&&ut&&(0,$.jsx)(`div`,{className:`browser-screen`,tabIndex:0,"aria-label":X(`browser.stage.page`,{title:pt||u?.state?.url||``}),onKeyDown:e=>$e(`keydown`,e),onKeyUp:e=>$e(`keyup`,e),onPaste:e=>{let t=e.clipboardData.getData(`text`);t&&f&&(e.preventDefault(),Je({type:`text`,text:t}))},onWheel:e=>{let t=Ye(e);t&&f&&Je({type:`wheel`,x:t.x,y:t.y,dx:e.deltaX,dy:e.deltaY,modifiers:ma(e)})},children:te?(0,$.jsx)(`img`,{ref:we,src:te,alt:pt||X(`browser.stage.sessionBrowser`),draggable:!1,onPointerDown:e=>Qe(`mousedown`,e),onPointerUp:e=>Qe(`mouseup`,e),onPointerMove:e=>Qe(`mousemove`,e),onContextMenu:e=>e.preventDefault()}):(0,$.jsx)(`p`,{className:`browser-empty`,children:X(`browser.stage.connecting`)})}),lt&&!ut&&(0,$.jsxs)(`div`,{className:`browser-empty`,children:[(0,$.jsx)(`p`,{children:X(`browser.stage.sharedEmpty`,{name:r})}),mt.length>0&&(0,$.jsx)(`p`,{children:mt.map(e=>(0,$.jsx)(`button`,{className:`b`,onClick:()=>void He(`http://localhost:${e.port}/`),children:X(`browser.ports.open`,{port:e.port})},e.port))})]}),!lt&&A&&(0,$.jsx)(`div`,{ref:ke,className:`browser-frame-wrap`,style:{aspectRatio:`${Me.viewport.width} / ${Me.viewport.height}`},children:(0,$.jsx)(`iframe`,{ref:Ce,title:X(`browser.stage.frameTitle`,{name:r}),src:A,style:{width:Me.viewport.width,height:Me.viewport.height},onLoad:e=>{let t=De.current,n=Number(e.currentTarget.dataset.loads||0)+1;e.currentTarget.dataset.loads=String(n),t.moving?t.moving=!1:n>1&&(t.back++,t.forward=0),je(e=>e+1)},allow:`clipboard-read; clipboard-write`},A)}),!lt&&!A&&(0,$.jsx)(`div`,{className:`browser-empty`,children:(0,$.jsx)(`p`,{children:X(`browser.stage.liveEmpty`)})})]}),lt&&ut&&u&&u.downloads.length>0&&(0,$.jsx)(`ul`,{className:`browser-downloads`,"aria-label":X(`browser.downloads.label`),children:u.downloads.slice(-5).map(e=>(0,$.jsxs)(`li`,{children:[(0,$.jsx)(`span`,{title:e.path,children:e.name}),(0,$.jsx)(`small`,{children:e.state===`completed`?Ta(e.received):e.state===`canceled`?X(`browser.downloads.canceled`):e.total?X(`browser.downloads.progressOf`,{received:Ta(e.received),total:Ta(e.total)}):X(`browser.downloads.progress`,{received:Ta(e.received)})}),e.state===`completed`&&(0,$.jsx)(`button`,{className:`b`,onClick:()=>void Y(e),children:X(`browser.downloads.save`)})]},e.path+e.state))}),P&&(0,$.jsxs)(`div`,{className:`browser-design`,"aria-label":X(`browser.design.label`),children:[(0,$.jsx)(`p`,{className:`browser-hover`,children:I||X(`browser.design.hint`)}),(0,$.jsxs)(`label`,{className:`browser-multi`,children:[(0,$.jsx)(`input`,{type:`checkbox`,checked:B,onChange:e=>V(e.target.checked)}),` `,X(`browser.design.pickSeveral`)]}),R.length>0&&(0,$.jsx)(`ol`,{className:`browser-picked`,children:R.map(e=>(0,$.jsxs)(`li`,{children:[(0,$.jsx)(`code`,{children:e.breadcrumb}),(0,$.jsxs)(`small`,{children:[X(`browser.design.elementInfo`,{width:Math.round(e.rect.width),height:Math.round(e.rect.height),styles:Object.keys(e.css).length}),e.source?` · ${e.source.file.split(`/`).pop()}${e.source.line?`:`+e.source.line:``}`:``]}),(0,$.jsx)(`button`,{className:`b`,"aria-label":X(`browser.design.remove`,{selector:e.selector}),onClick:()=>z(t=>t.filter(t=>t!==e)),children:`×`})]},e.selector))}),(0,$.jsx)(`textarea`,{"aria-label":X(`browser.design.note`),placeholder:X(`browser.design.notePlaceholder`),value:H,onChange:e=>ee(e.target.value),rows:2}),(0,$.jsx)(`button`,{className:`b ok`,disabled:!R.length||M===`design`,onClick:()=>void tt(),children:M===`design`?X(`browser.design.sending`):X(`browser.design.send`,{picked:R.length||``})})]})]}),ne===`desktop`&&(0,$.jsx)(`div`,{className:`browser-desktops`,children:xe.map(e=>{let t=nt[e.id];return(0,$.jsxs)(`article`,{className:t?.agent_active?`desk agent-driving`:`desk`,children:[(0,$.jsxs)(`header`,{children:[(0,$.jsx)(`strong`,{children:e.title}),` `,(0,$.jsx)(`span`,{className:`chip`,children:e.detail?.display})]}),(0,$.jsxs)(`p`,{role:`status`,className:`browser-control`,children:[t?t.stopped?X(`browser.desk.stopped`):t.allowed?t.agent_active?X(`browser.desk.agentActive`,{action:t.last_action}):X(`browser.desk.agentMay`):X(`browser.desk.off`):`…`,t&&!t.allowed&&(0,$.jsx)(`button`,{className:`b`,onClick:()=>void ot(e.id,{allow:!0}),children:X(`browser.desk.allow`)}),t?.allowed&&(0,$.jsx)(`button`,{className:`b warn`,onClick:()=>void ot(e.id,{stop:!0}),children:X(`browser.control.stopAgent`)})]}),it[e.id]?(0,$.jsx)(`img`,{className:`desk-shot`,src:it[e.id],alt:X(`browser.desk.alt`,{display:String(e.detail?.display)})}):(0,$.jsx)(`p`,{className:`browser-empty`,children:X(`browser.desk.capturing`)})]},e.id)})})]})}var ka=()=>globalThis.crypto?.randomUUID?.()||`${Date.now()}-${Math.random().toString(36).slice(2)}`,Aa=()=>({text:``,interrupt:!1,attachments:[],request_id:ka()});function ja(e){try{let t=JSON.parse(localStorage.getItem(e)||`null`);if(!t||typeof t!=`object`)return Aa();let n=t;return{text:typeof n.text==`string`?n.text:``,interrupt:n.interrupt===!0,request_id:typeof n.request_id==`string`?n.request_id:ka(),attachments:Array.isArray(n.attachments)?n.attachments.filter(e=>!!e&&typeof e.name==`string`&&typeof e.path==`string`&&typeof e.size==`number`):[]}}catch{return Aa()}}function Ma(e){return typeof e==`string`?e:JSON.stringify(e??{})}function Na({kind:e,id:n,name:r,api:i,onClose:a,onNotice:o,onAttach:s,onSwitch:c,session:l,onOpenSession:u,quickReply:f}){Z();let p=dr(),[m]=H(mi,`auto`),h=hi(),g=`lec-draft-${e}-${n}`,[_,v]=(0,Q.useState)(()=>ja(g)),[y,b]=(0,Q.useState)([]),[x,S]=(0,Q.useState)(``),[w,T]=(0,Q.useState)(``),[E,D]=(0,Q.useState)(()=>X(`conversation.chat.connecting`)),[O,k]=(0,Q.useState)(``),[A,j]=(0,Q.useState)(),[M,N]=(0,Q.useState)(()=>navigator.onLine),[P,F]=(0,Q.useState)(),[L,R]=(0,Q.useState)(!1),[z,V]=(0,Q.useState)(!1),[ee,te]=(0,Q.useState)(``),[W,ne]=(0,Q.useState)(``),[G,q]=(0,Q.useState)(!1),[re,ie]=(0,Q.useState)(),[ae,oe]=(0,Q.useState)([]),[se,ce]=(0,Q.useState)(!1),[le,ue]=(0,Q.useState)(!1),[de,fe]=(0,Q.useState)(!1),[pe,me]=(0,Q.useState)(!1),[he,ge]=(0,Q.useState)(!1),[ve,be]=(0,Q.useState)(!1),[xe,Se]=(0,Q.useState)(!1),[Ce,we]=(0,Q.useState)(()=>Math.max(16,Math.min(24,Number(localStorage.getItem(`lec-reader-font`))||17))),[Te,Ee]=(0,Q.useState)({height:visualViewport?.height||innerHeight,top:visualViewport?.offsetTop||0}),[De,Oe]=(0,Q.useState)(!1),[ke,Ae]=(0,Q.useState)(r),[je,Me]=(0,Q.useState)(r),[Ne,Pe]=(0,Q.useState)([]),[Fe,Ie]=(0,Q.useState)(!1),[Le,Re]=(0,Q.useState)(`cards`),ze=(0,Q.useRef)(_),Be=(0,Q.useRef)(!1),Ve=(0,Q.useRef)(!1),He=(0,Q.useRef)(!1),Ue=(0,Q.useRef)(!1),We=(0,Q.useRef)(!0),Ge=(0,Q.useRef)(null),Ke=(0,Q.useRef)(null),Je=(0,Q.useRef)(null),Ye=(0,Q.useRef)(new AbortController),Xe=(0,Q.useRef)([]),Ze=(0,Q.useRef)(!1),Qe=(0,Q.useRef)(void 0),$e=(0,Q.useRef)(void 0),et=(0,Q.useRef)([]);ze.current=_,(0,Q.useEffect)(()=>{f&&requestAnimationFrame(()=>Ke.current?.focus())},[]);let tt=A===!0?`live`:A===!1?M?`stale`:`offline`:`connecting`,nt=Array.isArray(P?.files)?P.files:[];function rt(e){let t=e(ze.current);ze.current=t,v(t);try{localStorage.setItem(g,JSON.stringify(t))}catch{}}(0,Q.useEffect)(()=>{localStorage.setItem(`lec-reader-font`,String(Ce))},[Ce]),(0,Q.useEffect)(()=>{let e=()=>{N(!0),at()},t=()=>{N(!1),j(!1)};return window.addEventListener(`online`,e),window.addEventListener(`offline`,t),()=>{window.removeEventListener(`online`,e),window.removeEventListener(`offline`,t)}},[]),(0,Q.useEffect)(()=>{if(e!==`session`)return;let t=new AbortController;return i.request(`/tasks`,{signal:t.signal}).then(e=>{!t.signal.aborted&&Array.isArray(e)&&(Xe.current=e.filter(e=>e.takeover?.session_id===n).map(e=>e.id))}).catch(()=>{}),()=>t.abort()},[i,e,n]),(0,Q.useEffect)(()=>{let e=()=>Ee({height:visualViewport?.height||innerHeight,top:visualViewport?.offsetTop||0});visualViewport?.addEventListener(`resize`,e),visualViewport?.addEventListener(`scroll`,e),window.addEventListener(`resize`,e);let t=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{Be.current=!0,Ye.current.abort(),pt(),document.body.style.overflow=t,visualViewport?.removeEventListener(`resize`,e),visualViewport?.removeEventListener(`scroll`,e),window.removeEventListener(`resize`,e)}},[]);async function it(){if(!Be.current)try{let e=new URLSearchParams;$e.current&&e.set(`since`,$e.current),Qe.current&&e.set(`last_cid`,Qe.current);let t=e.toString(),r=await i.request(`/sessions/${n}/conversation/live${t?`?${t}`:``}`,{signal:Ye.current.signal});if(Be.current)return;if(typeof r.conversation_id!=`string`||!Array.isArray(r.items))throw Error(`malformed conversation/live response`);r.conversation_id!==Qe.current&&(et.current=[]),Qe.current=r.conversation_id,$e.current=String(r.cursor),et.current=et.current.concat(r.items),Pe(et.current),Ie(!1)}catch{Be.current||Ie(!0)}}async function at(){if(!(Be.current||Ve.current||document.hidden)){Ve.current=!0;try{if(e===`session`){let e=await i.request(`/sessions/${n}/reader`,{signal:Ye.current.signal});if(Be.current)return;D(X(`conversation.chat.sessionStatus`,{agent:e.session.agent,state:e.ended?X(`status.ended`):fi(li(e.session))})),T(e.session.agent),q(e.ended||e.session.status===`dead`),S(oi(e.text||``)||X(`conversation.chat.waitingForOutput`)),it();let t=await i.request(`/approvals?status=pending`,{signal:Ye.current.signal}).catch(()=>[]);if(Be.current)return;oe((Array.isArray(t)?t:[]).filter(e=>e.session_id===n||!!e.task_id&&Xe.current.includes(e.task_id)))}else{let[e,t,r,a]=await Promise.all([i.request(`/tasks/${n}`,{signal:Ye.current.signal}),i.request(`/tasks/${n}/events`,{signal:Ye.current.signal}),i.request(`/tasks/${n}/messages`,{signal:Ye.current.signal}),i.request(`/approvals?status=pending`,{signal:Ye.current.signal})]);if(Be.current)return;ie(e),q(e.target_kind===`sandbox`||!!e.takeover),D(e.attempt?X(`conversation.chat.taskStatusTurn`,{agent:e.agent,status:e.status,n:e.attempt.n}):X(`conversation.chat.taskStatus`,{agent:e.agent,status:e.status})),(e.status!==`running`||e.target_kind===`sandbox`)&&ze.current.interrupt&&rt(e=>({...e,interrupt:!1,request_id:ka()}));let o=r.at(-1);o&&!He.current&&!ze.current.text&&o.status!==`pending`&&te(o.status===`failed`?X(`conversation.chat.receiptNotDelivered`,{error:String(o.error)}):o.attempt_id?X(`conversation.chat.receiptDelivered`):X(`conversation.chat.receiptAdded`));let s=[{id:`prompt`,time:e.created_at||0,role:`operator`,text:e.prompt||e.title,label:X(`conversation.chat.rowTask`)},...r.map(e=>({id:`message-${e.id}`,time:e.created_at,role:`operator`,text:e.text,label:e.status===`pending`?X(`conversation.chat.rowQueued`):e.status===`failed`?X(`conversation.chat.rowNotDelivered`,{error:String(e.error)}):e.attempt_id?X(`conversation.chat.rowDelivered`):X(`conversation.chat.rowAdded`)}))];for(let e of t){let t=e.payload;e.type===`text`||e.type===`result`?s.push({id:`event-${e.id}`,time:e.ts,role:`agent`,text:Ma(e.type===`text`?t.text:t.result||t.text||t),label:X(e.type===`text`?`conversation.chat.rowAgent`:`conversation.chat.rowResult`,{n:e.attempt_n})}):[`tool_use`,`tool_result`,`verify`].includes(e.type)&&s.push({id:`event-${e.id}`,time:e.ts,role:`detail`,text:typeof t.content==`string`?t.content:JSON.stringify(t,null,2),label:e.type===`tool_use`?Ma(t.name||X(`conversation.chat.rowTool`)):e.type===`tool_result`?X(`conversation.chat.rowToolResult`):e.type===`verify`?X(`conversation.chat.rowVerify`):e.type.replace(`_`,` `)})}s.sort((e,t)=>e.time-t.time),b(e=>JSON.stringify(e)===JSON.stringify(s)?e:s),oe(a.filter(e=>e.task_id===n))}j(!0),k(``)}catch(e){Be.current||(j(!1),k(X(`conversation.chat.refreshFailed`,{error:String(e)})))}finally{Ve.current=!1}}}(0,Q.useEffect)(()=>{Me(r)},[r]),(0,Q.useEffect)(()=>{at();let e=window.setInterval(()=>void at(),2e3),t=()=>{document.hidden||at()};return document.addEventListener(`visibilitychange`,t),()=>{clearInterval(e),document.removeEventListener(`visibilitychange`,t)}},[e,n]),(0,Q.useLayoutEffect)(()=>{We.current&&Ge.current&&(Ge.current.scrollTop=Ge.current.scrollHeight)},[y,x,Ne,ae.length]),(0,Q.useEffect)(()=>{let e=Ge.current;if(!e)return;let t=()=>{We.current&&(e.scrollTop=e.scrollHeight)},n=typeof ResizeObserver>`u`?void 0:new ResizeObserver(t);n?.observe(e);let r=new MutationObserver(t);return r.observe(e,{childList:!0,subtree:!0,characterData:!0}),()=>{n?.disconnect(),r.disconnect()}},[]);async function ot(t){if(!(Ue.current||He.current||G||!t.length)){Ue.current=!0,ue(!0);try{for(let r of t){if(Be.current)return;if(ze.current.attachments.length>=10)throw Error(X(`conversation.chat.tooManyFiles`));if(r.size>26214400)throw Error(X(`conversation.chat.fileTooLarge`,{name:r.name}));ne(X(`conversation.chat.uploading`,{name:r.name}));let t=new FormData;t.append(`file`,r);let a=await i.request(`/${e===`session`?`sessions`:`tasks`}/${n}/attachments`,{method:`POST`,body:t,signal:Ye.current.signal});if(Be.current)return;rt(e=>({...e,attachments:[...e.attachments,a],request_id:ka()}))}ne(X(`conversation.chat.filesReady`))}catch(e){Be.current||ne(X(`conversation.chat.uploadFailed`,{error:String(e)}))}finally{Ue.current=!1,Be.current||(ue(!1),Je.current&&(Je.current.value=``))}}}async function st(){if(!(e!==`session`||Ze.current)){Ze.current=!0,R(!0);try{let e=await i.request(`/term/session/${n}/changes?scope=working`,{signal:Ye.current.signal});if(Be.current)return;F(e),V(!1)}catch{Be.current||(F(void 0),V(!0))}finally{Ze.current=!1,Be.current||R(!1)}}}async function ct(){if(He.current||Ue.current||!ze.current.text.trim()&&!ze.current.attachments.length||e===`session`&&G)return;if(tt===`offline`){te(X(`conversation.chat.offlineReceipt`));return}let t=ze.current,r=t.text+(t.attachments.length?` + +Use these attached files as context (paths on this agent’s machine): +`+JSON.stringify(t.attachments.map(e=>({name:e.name,path:e.path})),null,2):``);if(new TextEncoder().encode(r).length>32e3){k(X(`conversation.chat.tooLong`));return}He.current=!0,ce(!0),te(X(`conversation.chat.sending`));try{let a=await i.request(e===`session`?`/sessions/${n}/send`:`/tasks/${n}/messages`,{method:`POST`,body:e===`session`?{text:r}:{text:r,interrupt:t.interrupt,request_id:t.request_id},signal:Ye.current.signal});if(Be.current)return;rt(e=>({...e,text:e.text===t.text?``:e.text,attachments:e.attachments.filter(e=>!t.attachments.some(t=>t.path===e.path)),request_id:ka()})),ne(``),te(e===`session`?X(`conversation.chat.sentToSession`):a.status===`delivered`?X(`conversation.chat.alreadyDelivered`):t.interrupt?X(`conversation.chat.savedInterrupting`):X(`conversation.chat.savedWaiting`)),at()}catch(e){Be.current||te(X(`conversation.chat.deliveryUnconfirmed`,{error:String(e)}))}finally{He.current=!1,Be.current||ce(!1)}}async function J(e,t,n){try{await i.request(`/approvals/${e.id}/decision`,{method:`POST`,body:_e(t,n)}),at()}catch(e){k(String(e))}}let{supported:Y,dictating:lt,transcribing:ut,engine:dt,toggle:ft,stop:pt}=I({onChange:e=>rt(t=>({...t,text:e,request_id:ka()})),onNotice:o});function mt(){ft(_.text),Ke.current?.focus()}let ht=e===`session`?gi(m,h)?X(`conversation.chat.hintSessionEnter`):X(`conversation.chat.hintSession`):re?.takeover?X(`conversation.chat.hintTakeover`):re?.target_kind===`sandbox`&&re.status!==`backlog`?X(`conversation.chat.hintSandbox`):re?.status===`backlog`?X(`conversation.chat.hintBacklog`):re?.status===`running`?X(`conversation.chat.hintRunning`):re?.status===`queued`?X(`conversation.chat.hintQueued`):X(`conversation.chat.hintDefault`);function gt(){a(),s?.()}async function _t(){let e=ke.trim();if(!e){Oe(!1);return}try{await i.request(`/sessions/${n}`,{method:`PATCH`,body:{name:e}}),Me(e),Oe(!1)}catch(e){o(String(e),!0)}}function vt(){Ae(je),Oe(!1)}let yt=e===`session`&&l?.workdir||``,bt=(0,Q.useMemo)(()=>{if(!yt.startsWith(`/`))return null;let e=new t(`/api/term/session/${n}`),r=K(e);return{workdir:yt,exists:r,open:t=>{if(t.kind===`url`)return U(t.url);(async()=>{try{if(t.external){let n=await e.outsideStat(t.path);if(!n.exists)return o(X(`files.link.missing`,{path:t.path}),!0);if(!n.regular)return o(X(`files.link.notFile`,{path:n.path}),!0)}else if(!await r(t.path))return o(X(`files.link.missing`,{path:t.path}),!0)}catch(e){return o(X(`files.link.failed`,{path:t.path,message:e instanceof Error?e.message:String(e)}),!0)}let i=Ii();i&&C(`file`)?Ri({...i,session:n},t.path,t.line,t.column):window.open(`/terminal/session/${n}?open=${encodeURIComponent(t.path)}${t.line?`#L`+t.line:``}`,`_blank`,`noopener`)})()}}},[yt,n,o]),xt=e===`session`?zi(Ne):[],St=e===`session`&&s&&!G&&(0,$.jsxs)(`div`,{className:`conversation-session-actions`,id:`conversation-session-actions`,children:[(0,$.jsx)(`button`,{type:`button`,className:`b`,id:`conversation-terminal`,"aria-label":p?X(`conversation.chat.openTerminal`):void 0,onClick:gt,children:X(p?`conversation.chat.openTerminalShort`:`conversation.chat.openTerminal`)}),(0,$.jsx)(`button`,{type:`button`,className:`b`,id:`conversation-merge-review`,"aria-label":p?X(`conversation.chat.reviewMerge`):void 0,onClick:()=>me(!0),children:X(p?`conversation.chat.reviewMergeShort`:`conversation.chat.reviewMerge`)})]});return(0,$.jsx)(vi.Provider,{value:bt,children:(0,$.jsxs)(B,{id:`conversation`,className:he?`conversation with-browser`:`conversation`,"aria-label":X(`conversation.chat.dialogLabel`,{name:r}),style:{height:Te.height,top:Te.top,"--reader-font":`${Ce}px`},onCancel:e=>{e.preventDefault(),a()},children:[(0,$.jsxs)(`header`,{className:`conversation-head`,children:[(0,$.jsxs)(`div`,{children:[De?(0,$.jsx)(`div`,{className:`conversation-title-edit`,children:(0,$.jsx)(`input`,{type:`text`,value:ke,onChange:e=>Ae(e.target.value),onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),e.stopPropagation(),_t()):e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),vt())},onBlur:_t,autoFocus:!0})}):(0,$.jsx)($.Fragment,{children:(0,$.jsxs)(`h2`,{id:`conversation-title`,children:[je,(0,$.jsx)(`button`,{className:`b rename-btn`,"aria-label":X(`conversation.chat.renameSession`),onClick:()=>{Ae(je),Oe(!0)},title:X(`conversation.chat.rename`),children:`✎`})]})}),(0,$.jsx)(`p`,{id:`conversation-status`,role:`status`,"data-connection":tt,children:tt===`offline`?X(`conversation.chat.offlineStatus`):tt===`stale`?X(`conversation.chat.reconnectingStatus`,{status:E}):E}),l&&(0,$.jsx)(ri,{session:l})]}),(0,$.jsx)(`button`,{type:`button`,className:`b conversation-details-toggle`,id:`conversation-details-toggle`,"aria-expanded":ve,"aria-controls":`conversation-details`,"aria-label":X(`conversation.chat.detailsLabel`),title:X(`conversation.chat.detailsLabel`),onClick:()=>be(e=>!e),children:`⋯`}),(0,$.jsx)(`button`,{className:`b`,id:`conversation-close`,"aria-label":X(`conversation.chat.close`),"data-close":!0,onClick:a,children:`✕`})]}),ve&&(0,$.jsxs)(`div`,{className:`conversation-details`,id:`conversation-details`,children:[l&&(0,$.jsxs)(`div`,{className:`conversation-usage`,children:[l.model&&(0,$.jsx)(`span`,{className:`chip`,children:l.model}),(0,$.jsx)($r,{session:l}),(0,$.jsx)(ei,{session:l}),(0,$.jsx)(ti,{session:l}),(0,$.jsx)(ii,{session:l}),(0,$.jsx)(ai,{session:l,request:i.request,onNotice:o})]}),e===`session`&&l&&(0,$.jsx)(`div`,{className:`conversation-checks`,children:(0,$.jsx)(Qr,{session:l,api:i,onNotice:o})}),(0,$.jsxs)(`div`,{className:`conversation-details-actions`,children:[c&&(0,$.jsx)(`button`,{type:`button`,className:`b`,id:`conversation-switch`,onClick:c,children:X(`conversation.chat.switch`)}),e===`session`&&s&&!G&&(0,$.jsx)(`button`,{type:`button`,className:`b`,id:`conversation-browser`,"aria-pressed":he,onClick:()=>ge(!he),children:X(`conversation.chat.browser`)}),e===`session`&&(0,$.jsx)(`button`,{type:`button`,className:`b`,id:`conversation-memory-toggle`,"aria-pressed":xe,onClick:()=>Se(e=>!e),children:X(`sessions.memoryDeliveries.summary`)}),(0,$.jsxs)(`span`,{className:`conversation-text-size`,role:`group`,"aria-label":X(`conversation.chat.textSize`),children:[(0,$.jsx)(`button`,{className:`b`,id:`reader-smaller`,"aria-label":X(`conversation.chat.smallerText`),onClick:()=>we(e=>Math.max(16,e-1)),children:`A−`}),(0,$.jsx)(`button`,{className:`b`,id:`reader-larger`,"aria-label":X(`conversation.chat.largerText`),onClick:()=>we(e=>Math.min(24,e+1)),children:`A+`})]})]})]}),l&&u&&(0,$.jsx)(Xr,{api:i,session:l,onOpen:u,className:`conversation-lineage`}),(0,$.jsxs)(`div`,{className:`reader-controls`,children:[!p&&(0,$.jsx)(`span`,{children:X(e===`session`?Le===`cards`&&!Fe?`conversation.chat.viewChat`:`conversation.chat.viewLiveOutput`:`conversation.chat.viewTask`)}),p&&St,e===`session`&&!Fe&&(0,$.jsx)(`button`,{type:`button`,className:`b`,id:`conversation-view-toggle`,"aria-label":p?X(Le===`cards`?`conversation.chat.showTerminalText`:`conversation.chat.showChatCards`):void 0,onClick:()=>Re(e=>e===`cards`?`terminal`:`cards`),children:X(Le===`cards`?p?`conversation.chat.showTerminalTextShort`:`conversation.chat.showTerminalText`:p?`conversation.chat.showChatCardsShort`:`conversation.chat.showChatCards`)}),(0,$.jsx)(`button`,{className:`b`,id:`reader-latest`,"aria-label":p?X(`conversation.chat.latest`):void 0,onClick:()=>{We.current=!0,Ge.current&&(Ge.current.scrollTop=Ge.current.scrollHeight)},children:p?`↓`:X(`conversation.chat.latest`)})]}),(0,$.jsx)(`div`,{id:`conversation-error`,role:`status`,hidden:!O,children:O}),!p&&St,e===`session`&&he&&(0,$.jsx)(Oa,{api:i,sessionId:n,name:je,onClose:()=>ge(!1),onNotice:o}),pe&&(0,$.jsx)(d,{api:i,sessionId:n,name:r,onClose:()=>me(!1),onNotice:o}),e===`session`&&(0,$.jsxs)(`details`,{id:`conversation-changes`,className:`conversation-changes`,onToggle:e=>{e.currentTarget.open&&st()},children:[(0,$.jsx)(`summary`,{children:nt.length?X(`conversation.chat.changedFilesCount`,{count:nt.length}):X(`conversation.chat.changedFiles`)}),(0,$.jsxs)(`div`,{className:`changes-body`,children:[L&&(0,$.jsx)(`p`,{className:`sub`,children:X(`conversation.chat.readingChanges`)}),!L&&z&&(0,$.jsx)(`p`,{className:`sub`,children:X(`conversation.chat.changesUnavailable`)}),!L&&P&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`p`,{className:`sub`,children:[X(`conversation.chat.branchWorking`,{branch:P.branch||X(`conversation.chat.workspace`)}),P.truncated?X(`conversation.chat.truncated`):``]}),nt.length?(0,$.jsx)(`ul`,{className:`changes-files`,children:nt.map(e=>(0,$.jsxs)(`li`,{"data-status":e.status,children:[(0,$.jsx)(`code`,{children:e.path}),(0,$.jsx)(`span`,{children:e.status})]},e.path))}):(0,$.jsx)(`p`,{className:`sub`,children:X(`conversation.chat.noChanges`)})]}),(0,$.jsx)(`button`,{type:`button`,className:`b`,disabled:L,onClick:()=>void st(),children:X(`conversation.chat.refresh`)})]})]}),e===`session`&&xe&&(0,$.jsx)(Kn,{api:i,kind:`session`,id:n,onNotice:o}),(0,$.jsx)(`div`,{id:`conversation-log`,ref:Ge,tabIndex:0,"aria-label":X(`conversation.chat.agentOutput`),onScroll:()=>{Ge.current&&(We.current=Ge.current.scrollHeight-Ge.current.clientHeight-Ge.current.scrollTop<70)},children:e===`session`&&w===`shell`?(0,$.jsx)(`div`,{id:`conversation-output-error`,children:(0,$.jsx)(`p`,{children:X(`conversation.chat.shellSession`)})}):e===`session`&&O&&!x?(0,$.jsxs)(`div`,{id:`conversation-output-error`,children:[(0,$.jsx)(`p`,{children:X(G?`conversation.chat.outputUnreadableEnded`:`conversation.chat.outputUnreadable`)}),(0,$.jsx)(`p`,{children:X(G?`conversation.chat.restoreTracking`:`conversation.chat.messagesStillGo`)})]}):e===`session`?(0,$.jsxs)($.Fragment,{children:[!!_.text.trim()&&(0,$.jsxs)(`article`,{className:`reader-message operator queued`,id:`conversation-draft-row`,"data-status":`draft`,children:[(0,$.jsx)(`div`,{className:`reader-speaker`,children:X(`conversation.chat.draftRow`)}),(0,$.jsx)(`div`,{className:`reader-text`,children:_.text})]}),Le===`cards`&&!Fe?(0,$.jsxs)(`div`,{id:`conversation-cards`,children:[xt.length===0&&(0,$.jsx)(`p`,{className:`sub`,id:`conversation-cards-empty`,children:X(`conversation.chat.waitingToStart`)}),xt.map(e=>e.kind===`tool`?(0,$.jsx)(qe,{card:e},e.id):e.kind===`thinking`?(0,$.jsxs)(`details`,{className:`reader-message thinking`,"data-event":e.id,children:[(0,$.jsx)(`summary`,{children:X(`conversation.chat.thinking`)}),(0,$.jsx)(`div`,{className:`reader-text`,children:e.text})]},e.id):(0,$.jsxs)(`article`,{className:`reader-message ${e.role}`,children:[(0,$.jsx)(`div`,{className:`reader-speaker`,children:e.role===`user`?X(`conversation.chat.you`):X(`conversation.chat.agent`)}),(0,$.jsx)(Pa,{role:e.role,text:e.text})]},e.id))]}):(0,$.jsx)(`pre`,{className:`session-reader`,children:x||X(`conversation.chat.loading`)})]}):y.map(e=>e.role===`detail`?(0,$.jsxs)(`details`,{className:`reader-message detail`,"data-event":e.id,children:[(0,$.jsx)(`summary`,{children:e.label}),(0,$.jsx)(`pre`,{children:e.text})]},e.id):(0,$.jsxs)(`article`,{className:`reader-message ${e.role}`,children:[(0,$.jsx)(`div`,{className:`reader-speaker`,children:e.label}),(0,$.jsx)(`div`,{className:`reader-text`,children:e.text})]},e.id))}),(0,$.jsx)(`div`,{id:`conversation-approvals`,children:ae.map(e=>(0,$.jsx)(ye,{approval:e,onDecide:(t,n)=>J(e,t,n),onOpenTask:e=>{a(),location.hash=`#task/${e}`}},e.id))}),e===`session`&&!G&&(0,$.jsx)(la,{api:i,sessionId:n,sessionText:x,approvals:ae,onNotice:o}),(0,$.jsxs)(`form`,{id:`conversation-compose`,className:de?`file-drag`:``,onSubmit:e=>{e.preventDefault(),ct()},onDragOver:e=>{[...e.dataTransfer.types].includes(`Files`)&&(e.preventDefault(),fe(!0))},onDragLeave:()=>fe(!1),onDrop:e=>{e.dataTransfer.files.length&&(e.preventDefault(),fe(!1),ot([...e.dataTransfer.files]))},children:[(0,$.jsx)(`label`,{htmlFor:`conversation-input`,children:X(e===`session`?`conversation.chat.messageAgent`:`conversation.chat.messageTask`)}),(0,$.jsx)(`textarea`,{id:`conversation-input`,ref:Ke,rows:3,maxLength:32e3,placeholder:X(p?`conversation.chat.placeholderShort`:`conversation.chat.placeholder`),value:_.text,onChange:e=>{let t=e.target.value;rt(e=>({...e,text:t,request_id:ka()}))},onKeyDown:e=>{_i({...e,key:e.key,isComposing:e.nativeEvent.isComposing},m,h)&&(e.preventDefault(),ct())},onPaste:e=>{e.clipboardData.files.length&&(e.preventDefault(),ot([...e.clipboardData.files]))}}),(0,$.jsx)(`input`,{ref:Je,type:`file`,id:`conversation-files`,multiple:!0,hidden:!0,disabled:se||le||G,onChange:e=>void ot([...e.target.files||[]])}),(0,$.jsx)(`div`,{id:`conversation-attachments`,"aria-label":X(`conversation.chat.attachedFiles`),children:_.attachments.map(e=>(0,$.jsxs)(`div`,{className:`context-attachment`,children:[(0,$.jsx)(`span`,{title:e.path,children:X(`conversation.chat.attachmentSize`,{name:e.name,size:Math.max(1,Math.ceil(e.size/1024))})}),(0,$.jsx)(`button`,{type:`button`,className:`b`,"aria-label":X(`conversation.chat.removeFile`,{name:e.name}),disabled:se,onClick:()=>rt(t=>({...t,attachments:t.attachments.filter(t=>t.path!==e.path),request_id:ka()})),children:`×`})]},e.path))}),(0,$.jsx)(`p`,{id:`conversation-upload-status`,role:`status`,children:W}),!!_.text.trim()&&!se&&(0,$.jsx)(`p`,{id:`conversation-draft`,role:`status`,children:X(`conversation.chat.draftSaved`)}),(0,$.jsx)(`p`,{id:`conversation-hint`,children:ht}),(0,$.jsxs)(`div`,{className:`compose-actions`,children:[(0,$.jsx)(`button`,{type:`button`,className:`b`,id:`conversation-attach`,title:X(G?`conversation.chat.attachUnavailable`:`conversation.chat.attachHint`),disabled:se||le||G,onClick:()=>Je.current?.click(),children:X(`conversation.chat.attach`)}),e===`task`?(0,$.jsxs)(`label`,{className:`interrupt-option`,children:[(0,$.jsx)(`input`,{id:`conversation-interrupt`,type:`checkbox`,checked:_.interrupt,disabled:re?.status!==`running`||re.target_kind===`sandbox`,onChange:e=>{let t=e.target.checked;rt(e=>({...e,interrupt:t,request_id:ka()}))}}),` `,X(`conversation.chat.interruptAndSend`)]}):(0,$.jsx)(`button`,{type:`button`,className:`b warn`,id:`conversation-interrupt-session`,disabled:G,onClick:()=>{i.request(`/sessions/${n}/send`,{method:`POST`,body:{key:`escape`}}).then(()=>{te(X(`conversation.chat.interruptSent`)),at()}).catch(e=>k(String(e)))},children:X(`conversation.chat.interrupt`)}),(0,$.jsx)(`button`,{type:`button`,className:lt?`b mic-recording`:`b`,id:`conversation-mic`,"aria-label":X(ut?`conversation.chat.transcribingLabel`:lt?`conversation.chat.stopDictating`:`conversation.chat.dictate`),title:dt===`host`?X(`conversation.chat.onLectern`):void 0,hidden:!Y,"aria-pressed":lt,"aria-busy":ut,onClick:mt,children:ut?X(`conversation.chat.transcribing`):lt?X(dt===`host`?`conversation.chat.recording`:`conversation.chat.listening`):`🎙`}),(0,$.jsx)(`button`,{type:`submit`,className:`b ok grow`,id:`conversation-send`,"data-sending":se?`true`:void 0,disabled:se||le||tt===`offline`||e===`session`&&G,children:X(`conversation.chat.send`)})]}),tt===`offline`&&(0,$.jsx)(`p`,{id:`conversation-offline`,className:`conversation-notice`,role:`status`,children:X(`conversation.chat.offlineNotice`)}),(0,$.jsx)(`p`,{id:`conversation-receipt`,role:`status`,children:ee})]})]})})}function Pa({role:e,text:t}){let{recall:n,rest:r}=e===`user`?Hr(t):{recall:[],rest:t};return(0,$.jsxs)(`div`,{className:`reader-text`,children:[n.length>0&&(0,$.jsxs)(`details`,{className:`recall-context`,children:[(0,$.jsx)(`summary`,{children:X(`conversation.chat.recall`,{count:n.length})}),(0,$.jsx)(`pre`,{children:n.join(` +`)})]}),r&&(0,$.jsx)(wi,{text:r})]})}var Fa=e=>!!e&&[`running`,`recovering`].includes(e.state);function Ia({api:e,session:t,onClose:n,onChanged:r,onNotice:i}){Z();let[a,o]=(0,Q.useState)([]),[s,c]=(0,Q.useState)(),[l,u]=(0,Q.useState)(),[d,f]=(0,Q.useState)(``),[p,m]=(0,Q.useState)(``),[h,g]=(0,Q.useState)(!1),[_,v]=(0,Q.useState)(``),y=(0,Q.useRef)(0),b=(0,Q.useRef)(null),x=(0,Q.useRef)(!0),S=(0,Q.useRef)(void 0),C=`/sessions/${t.id}/worktree`,w=(0,Q.useCallback)(async()=>{let t=++y.current;b.current?.abort();let n=new AbortController;b.current=n;try{let[r,i,a]=await Promise.all([e.request(`/projects`,{signal:n.signal}),e.request(C,{signal:n.signal}),e.request(C+`/operations`,{signal:n.signal})]);if(!x.current||t!==y.current)return;o(r),c(i),u(a[0]),S.current=a[0],v(``)}catch(e){!n.signal.aborted&&x.current&&v(e instanceof Error?e.message:String(e))}},[e,C]);(0,Q.useEffect)(()=>{x.current=!0,w();let e=window.setInterval(()=>{Fa(S.current)&&document.visibilityState!==`hidden`&&w()},1500);return()=>{x.current=!1,clearInterval(e),b.current?.abort()}},[w]);let T=s?.repositories||[],E=a.filter(e=>e.target_id===t.target_id&&!T.some(t=>t.project_id===e.id||t.worktree.repo===e.repo_path));(0,Q.useEffect)(()=>{E.some(e=>String(e.id)===d)||f(E[0]?String(E[0].id):``)},[a,s,d]);let D=s?.state===`ready`&&T.every(e=>e.worktree.state===`ready`);async function O(t){if(!(h||(t===`add`?!d:!l))){g(!0),v(``);try{let n=await e.request(t===`add`?C+`/repositories`:`${C}/operations/${l.id}/${t}`,{method:`POST`,body:t===`add`?{project_id:Number(d),base:p.trim()}:{}});x.current&&(u(n),S.current=n,await w()),r()}catch(e){x.current?v(e instanceof Error?e.message:String(e)):i(String(e),!0)}finally{x.current&&g(!1)}}}let k=_||(s?l?`${X(`sessions.workspaceExtension.operation`,{id:l.id,state:l.state})}${l.cancel_requested?` · `+X(`sessions.workspaceExtension.cancelRequested`):``}${l.error?` · `+l.error:``}`:D?E.length?X(`sessions.workspaceExtension.ready`):X(`sessions.workspaceExtension.noOthers`):X(`sessions.workspaceExtension.needsRecovery`):X(`sessions.workspaceExtension.loading`));return(0,$.jsxs)(B,{className:`launch-profiles`,"aria-label":X(`sessions.workspaceExtension.title`),onCancel:e=>{e.preventDefault(),n()},children:[(0,$.jsxs)(`header`,{children:[(0,$.jsx)(`h2`,{children:X(`sessions.workspaceExtension.title`)}),(0,$.jsx)(`button`,{type:`button`,onClick:n,children:X(`sessions.workspaceExtension.close`)})]}),(0,$.jsx)(`p`,{children:X(`sessions.workspaceExtension.intro`)}),(0,$.jsx)(`pre`,{className:`we-progress`,style:{whiteSpace:`pre-wrap`,overflowWrap:`anywhere`},children:T.map(e=>`${e.name}: ${e.worktree.state}\n${e.worktree.setup_output||e.worktree.error||``}`).join(` +`)}),D&&!Fa(l)&&E.length>0&&(0,$.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),O(`add`)},children:[(0,$.jsxs)(`label`,{children:[X(`sessions.workspaceExtension.project`),(0,$.jsx)(`select`,{"aria-label":X(`sessions.workspaceExtension.project`),required:!0,value:d,onChange:e=>f(e.target.value),children:E.map(e=>(0,$.jsx)(`option`,{value:e.id,children:e.name},e.id))})]}),(0,$.jsxs)(`label`,{children:[X(`sessions.workspaceExtension.base`),(0,$.jsx)(`input`,{maxLength:512,value:p,onChange:e=>m(e.target.value),placeholder:X(`sessions.workspaceExtension.basePlaceholder`)})]}),(0,$.jsx)(`p`,{className:`we-hook`,children:E.find(e=>String(e.id)===d)?.setup_cmd||X(`sessions.workspaceExtension.noSetup`)}),(0,$.jsx)(`button`,{type:`submit`,disabled:h||!d,children:X(`sessions.workspaceExtension.add`)})]}),(0,$.jsx)(`p`,{className:`we-status`,role:`status`,children:k}),(0,$.jsxs)(`div`,{className:`lp-buttons`,children:[(0,$.jsx)(`button`,{type:`button`,disabled:h,onClick:()=>void w(),children:X(`sessions.workspaceExtension.refresh`)}),Fa(l)&&(0,$.jsx)(`button`,{type:`button`,disabled:h,onClick:()=>void O(`cancel`),children:X(`sessions.workspaceExtension.cancel`)}),l?.state===`recovering`&&(0,$.jsx)(`button`,{type:`button`,disabled:h,onClick:()=>void O(`recover`),children:X(`sessions.workspaceExtension.recover`)})]})]})}function La(){let e,t=[],n=new Map,r=new Map,i=new Map,a=0,o=0,s={},c={plugin:``,id:``},l=t=>e?.postMessage(t),u=(e,t)=>new Promise((n,r)=>{let a=++o;i.set(a,{res:n,rej:r}),l({t:`$`,rid:a,op:e,args:t})}),d=(e,t)=>l({t:`$`,op:e,args:t}),f=e=>e===void 0?void 0:JSON.parse(JSON.stringify(e)),p=(e,t=0)=>{if(t>40)return null;if(typeof e==`function`){let t=++a;return r.set(t,e),r.size>2e3&&r.delete(r.keys().next().value),{__fn:t}}if(Array.isArray(e))return e.map(e=>p(e,t+1));if(e&&typeof e==`object`){if(e instanceof RegExp)return String(e);let n={};for(let r of Object.keys(e))n[r]=p(e[r],t+1);return n}return e},m=e=>(t={})=>({type:e,props:t}),h={Box:m(`Box`),Text:m(`Text`),Badge:m(`Badge`),Button:m(`Button`),Link:m(`Link`)},g={surface:`web`,get mod(){return{...c}},ui:{resolve:()=>h,toast:e=>d(`toast`,[String(e)]),status:e=>d(`status`,[e==null?null:String(e)]),open:e=>d(`open`,[{id:String(e?.id),title:String(e?.title??e?.id)}]),close:e=>d(`close`,[String(e)]),render:()=>d(`render`,[])},state:{get:e=>f(s[e]),set:(e,t)=>{s[e]=f(t),d(`state`,[e,s[e]??null])}},command:{register:e=>{n.set(String(e.id),e.run),d(`command`,[{id:String(e.id),title:String(e.title??e.id)}])}},navigate:e=>d(`navigate`,[String(e)]),api:{get:e=>u(`api`,[`GET`,e]),post:(e,t)=>u(`api`,[`POST`,e,f(t)]),put:(e,t)=>u(`api`,[`PUT`,e,f(t)]),delete:e=>u(`api`,[`DELETE`,e])},sleep:e=>new Promise(t=>setTimeout(t,Math.max(0,Number(e)||0))),log:(...e)=>d(`log`,[e.map(e=>typeof e==`string`?e:JSON.stringify(e)).join(` `)])},_=(e,n,r)=>{let i=typeof r==`function`?r:n,a=typeof r==`function`?n:void 0;if(typeof i!=`function`)throw TypeError(`on(event, [matcher], handler): handler must be a function`);let o=t.push(i)-1,s=a instanceof RegExp?{re:a.source,flags:a.flags}:a==null?null:{eq:String(a)};l({t:`on`,hid:o,event:String(e),matcher:s})},v=e=>e&&e.stack?String(e.stack).split(` +`).slice(0,3).join(` +`):String(e);async function y(e){switch(e.t){case`load`:c=e.mod,s=e.state||{};try{let t=Function(e.script+` +;return typeof register === 'function' ? register : null;`)();if(!t)throw Error(`the mod does not define register`);await t(_,{}),l({t:`ready`})}catch(e){l({t:`failed`,error:v(e)})}return;case`invoke`:{let n=t=>u(`next`,[e.rid,t===void 0?e.e:f(t)]);try{let r=await t[e.hid](g,e.e,n);l({t:`result`,rid:e.rid,value:p(r)})}catch(t){l({t:`result`,rid:e.rid,error:v(t)})}return}case`reply`:{let t=i.get(e.rid);i.delete(e.rid),e.error===void 0?t?.res(e.value):t?.rej(Error(e.error));return}case`fn`:try{await r.get(e.id)?.(...e.args||[])}catch(e){d(`log`,[`error: `+v(e)])}return;case`command`:try{let t=await n.get(e.id)?.(g,e.args||{});l({t:`result`,rid:e.rid,value:p(t)})}catch(t){l({t:`result`,rid:e.rid,error:v(t)})}return}}window.addEventListener(`message`,t=>{!e&&t.data?.t===`init`&&t.ports[0]&&(e=t.ports[0],e.onmessage=e=>void y(e.data))})}var Ra=()=>` +Terminal · Lectern - - - + + +