pi-straw-boss 0.59.6 → 0.60.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/README.zh-TW.md +1 -0
- package/dist/gui/assets/allyasks-CeP7sii5.js +2 -0
- package/dist/gui/assets/{answer-D403RHyM.js → answer-BIq4DNK1.js} +1 -1
- package/dist/gui/assets/{ask-tXVEUKiF.js → ask-0yCsmPhh.js} +1 -1
- package/dist/gui/assets/asks-BzCqYCHX.js +1 -0
- package/dist/gui/assets/chat-5b_cO9xj.js +2 -0
- package/dist/gui/assets/drawer-DKuvci4d.js +1 -0
- package/dist/gui/assets/index-C2r9LRXv.css +1 -0
- package/dist/gui/assets/index-FlE0Rl1G.js +2 -0
- package/dist/gui/assets/layer-DXYJ-vLK.js +1 -0
- package/dist/gui/assets/{lightbox-B8HApcBz.js → lightbox-CPTPuNTA.js} +1 -1
- package/dist/gui/assets/link-CLeLnm_q.js +1 -0
- package/dist/gui/assets/{linkdialogs-Deiaw55t.js → linkdialogs-DuKmT879.js} +1 -1
- package/dist/gui/assets/{pair-CfFNN-re.js → pair-2o2Q7qKa.js} +3 -3
- package/dist/gui/assets/{picker-DXgdpMA0.js → picker-B7WbhAd7.js} +1 -1
- package/dist/gui/assets/{server-kDaAFu34.js → server-CVAJOllJ.js} +2 -2
- package/dist/gui/assets/sessionfacts-zbY4yt6W.js +1 -0
- package/dist/gui/assets/{settings-Bc7Yefkm.js → settings-CtMk8Q7n.js} +2 -2
- package/dist/gui/assets/spawn-3s_KERYf.js +1 -0
- package/dist/gui/assets/{termcard-0sRxxgI7.js → termcard-BSksd07j.js} +4 -4
- package/dist/gui/assets/towermodel-BPfyRLG9.js +1 -0
- package/dist/gui/assets/{towerturns-sm4atUwy.js → towerturns-CJSot0mK.js} +2 -2
- package/dist/gui/assets/{trust-C-LiJfO0.js → trust-ec5OQfiH.js} +1 -1
- package/dist/gui/assets/unit_count-ChCYY7Ph.js +1 -0
- package/dist/gui/assets/views-CRd8tLrn.js +2 -0
- package/dist/gui/assets/waitpanel-DS0X2rza.js +1 -0
- package/dist/gui/assets/zenchunk-En6Qrc-U.js +2 -0
- package/dist/gui/index.html +2 -2
- package/dist/server/main.mjs +45 -15
- package/package.json +1 -1
- package/prompts/apps-config.md +1 -18
- package/prompts/integrator.md +9 -42
- package/prompts/main.md +11 -1
- package/prompts/planning.md +1 -1
- package/prompts/tower-run.md +1 -1
- package/prompts/tower.md +1 -1
- package/src/nethead.ts +5 -2
- package/src/server/headasks.ts +22 -2
- package/src/server/headbrief.ts +5 -2
- package/src/server/headnet.ts +14 -5
- package/src/server/headside.ts +2 -2
- package/src/server/towermemory.ts +12 -4
- package/src/server/towers.ts +1 -1
- package/src/waitlapse.ts +7 -0
- package/dist/gui/assets/allyasks-CTUiK5Ht.js +0 -2
- package/dist/gui/assets/asks-DU25Zsis.js +0 -1
- package/dist/gui/assets/chat-I4VvpYyG.js +0 -2
- package/dist/gui/assets/drawer-wBIYsu9b.js +0 -1
- package/dist/gui/assets/index-CkdCrste.js +0 -2
- package/dist/gui/assets/index-Cr2P3LZC.css +0 -1
- package/dist/gui/assets/layer-IY4EhFST.js +0 -1
- package/dist/gui/assets/link-CZN40s8s.js +0 -1
- package/dist/gui/assets/sessionfacts-Bf2gYU0C.js +0 -1
- package/dist/gui/assets/spawn-1_5KXhD5.js +0 -1
- package/dist/gui/assets/towermodel-YlF7HR2k.js +0 -1
- package/dist/gui/assets/unit_count-5h7nN0qd.js +0 -1
- package/dist/gui/assets/views-CeY-q5tM.js +0 -2
- package/dist/gui/assets/waitpanel-SWbCnm0P.js +0 -1
- package/dist/gui/assets/zenchunk-MeFqgUsg.js +0 -2
package/README.md
CHANGED
|
@@ -84,6 +84,7 @@ pi install npm:pi-straw-boss
|
|
|
84
84
|
- pi running inside [Herdr](https://herdr.dev) 0.9.4 or newer.
|
|
85
85
|
- Herdr's pi integration (`herdr integration install pi`): without it Herdr does not name a pane's pi session, and the session cannot join the net; each session warns once, 20 s after its start, when it is missing.
|
|
86
86
|
- [pi-intercom](https://www.npmjs.com/package/pi-intercom) 0.18.1 or newer: the net's channels, messages, and the GUI's dialog relay run over it, and so does the sb server's connection (it checks the version at start and says so in `start-error.json` and `boss_server status` when pi-intercom is older or missing).
|
|
87
|
+
- [pi-anchorloop](https://www.npmjs.com/package/pi-anchorloop) 2.10.1 or newer: the merge train's procedure is its `integrating` (merge) and `deploying` (deploy, UAT) skills, and Straw Boss's prompts bind the places those skills leave open ([how it works](docs/how-it-works.md#merge-train)). Without it a main or integrator that meets a car slip reports `blocked` naming pi-anchorloop and merges nothing; with the merge train off it is not used.
|
|
87
88
|
- Windows support is experimental: the extension reaches Herdr over its named pipe there, the sidebar plugin runs with the `node` on `PATH`, the worktree reaper is macOS and Linux only, and the project-trust relay works only while pi's agent folder lies inside your user profile (elsewhere pi asks in its terminal as before) ([what differs](docs/how-it-works.md#windows)).
|
|
88
89
|
|
|
89
90
|
### Works with
|
package/README.zh-TW.md
CHANGED
|
@@ -84,6 +84,7 @@ pi install npm:pi-straw-boss
|
|
|
84
84
|
- pi 要跑在 [Herdr](https://herdr.dev) 0.9.4 以上。
|
|
85
85
|
- Herdr 的 pi 整合(`herdr integration install pi`):沒有它,Herdr 不會替窗格標出 pi session,該 session 就無法加入網;每個 session 啟動 20 秒後若發現缺少,會警告一次。
|
|
86
86
|
- [pi-intercom](https://www.npmjs.com/package/pi-intercom) 0.18.1 以上:網的頻道、訊息,以及 GUI 轉送對話框,都是透過它,sb server 的連線也是;版本較舊或沒裝時,sb server 起不來(`start-error.json` 與 `boss_server status` 會說明)。
|
|
87
|
+
- [pi-anchorloop](https://www.npmjs.com/package/pi-anchorloop) 2.10.1 以上:合併列車(merge train)的流程就是它的 `integrating`(合併)與 `deploying`(部署、UAT)兩個 skill,Straw Boss 的提示詞只綁定這兩個 skill 留給宿主決定的地方([運作方式](docs/how-it-works.md#merge-train),英文)。沒裝時,遇到車單(car slip)的主智慧體或整合員會回報 `blocked` 並點名 pi-anchorloop,什麼都不合併;關閉合併列車時不會用到它。
|
|
87
88
|
- Windows 支援是實驗性的:擴充套件在 Windows 上透過 Herdr 的 named pipe 連線,側邊欄 plugin 用 `PATH` 上的 `node` 執行,worktree reaper 只支援 macOS 和 Linux,專案信任(project trust)的轉送則要求 pi 的 agent 資料夾位在你的使用者設定檔(user profile)之內,否則 pi 照舊在終端機裡詢問([差異在哪](docs/how-it-works.md#windows),英文)。
|
|
88
89
|
|
|
89
90
|
### 支援的套件
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{S as e}from"./towermodel-BPfyRLG9.js";import{t}from"./runtime-ZX6HkxDa.js";import{Y as n,Z as r}from"./index-FlE0Rl1G.js";import{mountDialogCards as i}from"./linkdialogs-DuKmT879.js";var a=t=>{let n=e(`en`,t?.count,{},!0);return n===`one`?`${t?.count} question waits for you: answer it here`:n===`other`?`${t?.count} questions wait for you: answer them here`:`ally_asks_button`},o=e=>`${e?.count} 個問題等你回答,在這裡回答`,s=((e,n={})=>(n.locale??t())===`zh-TW`?o(e):a(e)),c=e=>e.tower===`blocked`||e.tabs.some(e=>e.state===`blocked`);function l(e){let t=new Map;for(let r of e?.alerts??[]){let i=r.kind===`dialog`?n(r):void 0;if(i!==`open`&&i!==`sent`)continue;let a=(e?.allies??[]).filter(e=>e.device===r.data.device),o=a.filter(e=>e.team===r.team),s=(o.length?o:a).find(c)??(o.length?o:a)[0];s&&t.set(s.id,[...t.get(s.id)??[],r])}return t}var u=`.ally-unit[data-state="blocked"], .ally-tab[data-state="blocked"]`;function d(){let e=new WeakMap,t=t=>{let a=e.get(t);if(a)return a;let o=r(`button`,{type:`button`,class:`ally-asks-btn`,"aria-expanded":`false`}),s=r(`ul`,{class:`ally-asks-list`}),c=r(`div`,{class:`ally-asks`},o,s);return a={box:c,btn:o,list:s,cards:i(),ids:``},e.set(t,a),o.onclick=()=>n(t),t.addEventListener(`click`,e=>{let r=e.target?.closest?.(u);r&&t.contains(r)&&t.dataset.asks&&n(t)}),t.append(c),a};function n(t){let n=e.get(t);if(!n||!t.dataset.asks)return;let r=t.dataset.asking===void 0;r?t.dataset.asking=``:delete t.dataset.asking,n.list.hidden=!r,n.btn.setAttribute(`aria-expanded`,String(r))}function a(n,r){if(!r.length&&!e.has(n))return;let i=t(n);if(i.box.hidden=!r.length,!r.length){delete n.dataset.asks,delete n.dataset.asking,i.btn.setAttribute(`aria-expanded`,`false`),i.cards.keep(new Set),i.list.replaceChildren(),i.ids=``;return}n.dataset.asks=String(r.length),i.btn.textContent=s({count:r.length}),i.list.hidden=n.dataset.asking===void 0,i.cards.keep(new Set(r.map(e=>e.id)));let a=r.map(e=>i.cards.row(e)),o=r.map(e=>e.id).join(`
|
|
2
|
+
`);o!==i.ids&&(i.list.replaceChildren(...a),i.ids=o)}return{toggle:n,fill:a,show:(e,t,n)=>a(e,l(n).get(t.id)??[])}}export{d as mountAllyAsks};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./rolldown-runtime-DK3Fl9T5.js";import{t}from"./ask-
|
|
1
|
+
import{t as e}from"./rolldown-runtime-DK3Fl9T5.js";import{t}from"./ask-0yCsmPhh.js";import{n}from"./post-DDdE-PdN.js";var r=e({answerPost:()=>i,canAnswer:()=>o,mountAnswer:()=>s,trustPost:()=>a}),i=(e,t)=>t?.(e)??((t,r)=>n(e.startsWith(`grant:`)?`panes/${encodeURIComponent(e.slice(6))}/${t}`:`sessions/${encodeURIComponent(e)}/${t}`,r)),a=e=>e??(e=>n(`trust/answer`,e)),o=(e,...t)=>e===`waiting`&&t.every(Boolean),s=(e,{key:n,show:r,post:i,remote:a,accepted:o,label:s})=>t(e,i,a,{key:n,show:r},o,s);export{a,s as i,r as n,o as r,i as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./runtime-ZX6HkxDa.js";import{a as t,i as n,n as r,r as i,t as a}from"./sending-aEpvzoz2.js";import{Ut as o,X as s,t as c,vt as l}from"./index-CkdCrste.js";var u=((t={},n={})=>(n.locale??e())===`zh-TW`?`請在終端機中回答。`:`Answer it in the terminal.`),d=((t={},n={})=>(n.locale??e())===`zh-TW`?`請在終端機中回答。`:`Answer them in the terminal.`),f=((t={},n={})=>(n.locale??e())===`zh-TW`?`下方還有 ▾`:`More below ▾`),p=((t={},n={})=>(n.locale??e())===`zh-TW`?`也可以自己輸入答案。`:`It also takes your own words.`),m=((t={},n={})=>(n.locale??e())===`zh-TW`?`可以複選。`:`It takes several choices.`),h=((t={},n={})=>(n.locale??e())===`zh-TW`?`已取消。`:`Cancelled.`),g=((t={},n={})=>(n.locale??e())===`zh-TW`?`選擇`:`Choices`),_=((t={},n={})=>(n.locale??e())===`zh-TW`?`瀏覽器拒絕存取剪貼簿。`:`The browser refused the clipboard.`),v=((t={},n={})=>(n.locale??e())===`zh-TW`?`已複製到這台裝置的剪貼簿。`:`Copied to this device's clipboard.`),y=((t={},n={})=>(n.locale??e())===`zh-TW`?`複製指令`:`Copy command`),ee=((t={},n={})=>(n.locale??e())===`zh-TW`?`這個選項有預覽;請在終端機中查看。`:`It has a preview; see it in the terminal.`),b=((t={},n={})=>(n.locale??e())===`zh-TW`?`備註`:`Note`),x=((t={},n={})=>(n.locale??e())===`zh-TW`?`備註(選填)`:`Note (optional)`),S=e=>`Opened while ${e?.tool} was running; it may not be about that call.`,C=e=>`在 ${e?.tool} 執行時開啟,不一定與該呼叫有關。`,te=((t,n={})=>(n.locale??e())===`zh-TW`?C(t):S(t)),w=((t={},n={})=>(n.locale??e())===`zh-TW`?`選項`:`Options`),T=((t={},n={})=>(n.locale??e())===`zh-TW`?`另一個答案沒有被採用;這個可以送出。`:`The other answer was not taken; this one can go.`),E=((t={},n={})=>(n.locale??e())===`zh-TW`?`你的答案`:`Your own answer`),D=((t={},n={})=>(n.locale??e())===`zh-TW`?`或自己輸入答案`:`Or type your own answer`),O=((t={},n={})=>(n.locale??e())===`zh-TW`?`問題已變更,請重新閱讀。`:`The question changed; read it again.`),k=((t={},n={})=>(n.locale??e())===`zh-TW`?`session 讀不懂這個答案。`:`The session could not read that answer.`),A=((t={},n={})=>(n.locale??e())===`zh-TW`?`這個答案不符合問題。`:`That answer does not fit the question.`),j=((t={},n={})=>(n.locale??e())===`zh-TW`?`session 拒絕了這個答案。`:`The session refused that answer.`),M=((t={},n={})=>(n.locale??e())===`zh-TW`?`安全考量,遠端不支援輸入機密。請到執行 GUI 的那台電腦的終端機中回答。`:`For security, entering a secret is not supported remotely. Answer it in the terminal on the computer the GUI runs on.`),N=((t={},n={})=>(n.locale??e())===`zh-TW`?`機密內容只能在終端機輸入,這裡不接受。請到執行 GUI 的那台電腦的終端機中回答。`:`A secret is entered in the terminal only, not here. Answer it in the terminal on the computer the GUI runs on.`),P=((t={},n={})=>(n.locale??e())===`zh-TW`?`送出答案`:`Send answer`),F=((t={},n={})=>(n.locale??e())===`zh-TW`?`顯示終端機`:`Show terminal`),I=((t={},n={})=>(n.locale??e())===`zh-TW`?`已在終端機中關閉。`:`It was dismissed in the terminal.`),L=((t={},n={})=>(n.locale??e())===`zh-TW`?`它已不再開啟。`:`It is no longer open.`),R=((t={},n={})=>(n.locale??e())===`zh-TW`?`已在終端機中回答。`:`It was already answered in the terminal.`),z=((t={},n={})=>(n.locale??e())===`zh-TW`?`它在等待對話框。`:`It waits on a dialog.`),B={ArrowDown:1,ArrowRight:1,ArrowUp:-1,ArrowLeft:-1};function V(e,t,n,r,i){let{q:a}=n,o=r[a],s=B[e]??0,c=e===`ArrowUp`,l=c||e===`ArrowDown`,u=()=>({to:r.map((e,t)=>({q:(a+1+t)%r.length,part:`opt`})).find(e=>e.q!==a&&!i[e.q])??`send`});if(e===`Tab`){let e=r[a-1],i=n.part===`opt`?o.own||o.note:n.part===`own`&&o.note;return t?n.part===`opt`&&e?{to:{q:a-1,part:e.note?`note`:e.own?`own`:`opt`}}:void 0:i||a===r.length-1?void 0:{to:{q:a+1,part:`opt`}}}if(!t){if(n.part===`opt`){let t=n.o+s;if(s)return t>=0&&t<o.options?{to:{q:a,part:`opt`,o:t},...o.multiple?{}:{pick:t}}:{to:s>0&&o.own?{q:a,part:`own`}:n};if(e===`Enter`||e===` `&&!o.multiple)return{...u(),...o.multiple?{}:{pick:n.o}}}else if(n.part===`own`){if(e===`Enter`)return u();if(l)return{to:c?{q:a,part:`opt`,o:o.options-1}:{q:a,part:`note`}}}else if(c)return{to:{q:a,part:`own`}}}}function H(e,t,n){let r=e=>Math.max(0,e.opts.findIndex(e=>e.getAttribute(`aria-checked`)===`true`)),i=(e,t)=>e.opts.forEach((e,n)=>e.setAttribute(`tabindex`,n===t?`0`:`-1`)),a=e=>{for(let[n,r]of t.entries()){let t=r.opts.indexOf(e);if(t>=0)return{q:n,part:`opt`,o:t};if(e===r.own||e===r.note)return{q:n,part:e===r.own?`own`:`note`}}};t.forEach(e=>i(e,r(e)));let o=e=>{let n=a(e.target);n?.part===`opt`&&i(t[n.q],n.o)};e.addEventListener(`focusin`,o),e.addEventListener(`click`,o);let s=!1,c=!1;return e.addEventListener(`keydown`,i=>{i.key===` `&&(c=!0);let o=a(i.target);if(!o||i.ctrlKey||i.altKey||i.metaKey||i.isComposing)return;let l=i.target;if(o.part!==`opt`&&(i.key===`ArrowUp`?l.selectionStart!==0:i.key===`ArrowDown`&&l.selectionEnd!==l.value.length))return;let u=V(i.key,i.shiftKey,o,t.map(e=>({options:e.opts.length,multiple:e.multiple,own:!!e.own,note:!!e.note})),t.map(e=>e.answered()));if(!u||(i.preventDefault(),i.repeat&&[`Enter`,` `].includes(i.key)))return;if(s=i.key===` `,u.pick!==void 0){let e=t[o.q].opts[u.pick];e.getAttribute(`aria-checked`)!==`true`&&e.click()}let d=u.to===`send`?void 0:t[u.to.q],f=u.to===`send`?n():u.to.part===`opt`?d.opts[u.to.o??r(d)]:u.to.part===`own`?d.own:d.note;f&&!f.disabled&&(e.dispatchEvent(new CustomEvent(`ask-reveal`,{detail:f})),f.focus())}),e.addEventListener(`keyup`,e=>{e.key===` `&&((s||!c)&&e.preventDefault(),s=c=!1)}),()=>t[0]?.opts[r(t[0])]}var U=e=>e.multiple?m():e.freeform&&e.options.length?p():``,W=90,G=(e,t)=>s(`div`,{class:`ask-one`},e.header&&s(`b`,{class:`ask-head`},e.header),s(`p`,{class:`ask-q`,...e.question.length>W?{"data-long":``}:{}},e.question),e.context&&s(`div`,{class:`ask-ctx`},e.context),e.options.length>0&&s(`ol`,{class:`ask-opts`,"aria-label":w()},...e.options.map(e=>s(`li`,{class:`ask-opt`},s(`b`,null,e.title),e.description&&s(`small`,null,e.description)))),t&&U(e)&&s(`small`,{class:`ask-how`},U(e))),K=e=>e.replace(/[\u0000-\u0008\u000b-\u001f\u007f-\u009f\p{Cf}]/gu,`�`),q=e=>(e.select?.choices??[]).map((e,t)=>({...e,i:t})),J=(e,t,n)=>({...e.size?{choices:[...e].sort((e,t)=>e-t)}:{},...t.trim()?{text:t}:{},...n.trim()?{note:n}:{}}),Y=(e,t,n)=>({dialog:e.dialog,digest:e.digest,answerId:n,...t}),X=(e,t)=>({dialog:e.dialog,digest:e.digest,answerId:t,cancel:!0}),Z=(e,t)=>e.cancel===!0&&!(t&&e.select?.choices.every(e=>e.hereOnly)),Q={digest:O,"not-allowed":A,malformed:k};function ne(e,i=!1){let{outcome:a,reason:o,by:s}=e.body;return a===`accepted`?[`ok`,i?h():n()]:a===`stale`?[`error`,s===`local`?R():s===`cancel`?I():L()]:a===`rejected`?[`error`,(Object.hasOwn(Q,String(o))?Q[String(o)]:j)()]:a===`busy`?[`error`,t()]:a===`unknown`||e.status===504?[`error`,r(),!0]:[`error`,o??l({status:e.status})]}var re=e=>[`accepted`,`stale`,`busy`,`unknown`].includes(String(e.body.outcome))||e.status===504,$=e=>e.answer?`d\n${e.answer.dialog}\n${e.answer.digest}`:`c\n${e.callId}\n${e.why??``}`;function ie(e){if(e.dataset.cued)return;e.dataset.cued=`1`;let t=()=>{e.toggleAttribute(`data-more`,e.scrollHeight-e.scrollTop-e.clientHeight>4);for(let t of e.querySelectorAll(`.ask-acts`))t.dataset.cue=f()};for(let n of[`scroll`,`input`])e.addEventListener(n,t,{passive:!0});typeof ResizeObserver<`u`&&new ResizeObserver(t).observe(e),typeof MutationObserver<`u`&&new MutationObserver(t).observe(e,{childList:!0,subtree:!0,characterData:!0}),typeof requestAnimationFrame<`u`&&requestAnimationFrame(t)}function ae(e,t,n=location.hostname!==`127.0.0.1`,l,f,p=F){let m,h,S,C=!1,O=!1,k;for(let e of[`focusin`,`pointerdown`])document.addEventListener(e,e=>h&&!h.el.contains(e.target)&&(h.lost=void 0));let A=(e,t,n,...r)=>(e.dataset.tone=t,e.replaceChildren(n,...r)),j=()=>{if(!h)return;let e=document.activeElement;e&&e!==document.body&&e!==h.lost&&(h.lost=void 0),h.controls.forEach(e=>e.disabled=!C||O||h.done),h.send&&(h.send.disabled=!C||O||h.done||!h.pick()),e&&h.el.contains(e)&&e.disabled&&(h.lost=e);let t=h.lost;t&&!t.disabled&&h.el.contains(t)&&(!document.activeElement||document.activeElement===document.body)&&(t.focus(),h.lost=void 0)};async function I(e,n){[e.sending,O,e.spell]=[!0,!0,!1],j(),A(e.note,``,a());let o=await t(`answer`,n).catch(()=>void 0),u=s(`button`,{type:`button`,class:`cmp-link`},i());u.onclick=()=>void I(e,n);let[d,p,m]=o?ne(o,n.cancel===!0):[`error`,r(),!0];[e.done,e.sending,O,e.busy]=[!o||re(o),!1,!1,o?.body.outcome===`busy`],A(e.note,d,p,...m?[u]:[]);let h=o?.body.outcome===`accepted`?o.body.then:void 0,g=h&&c(h,{key:l?.key??``,command:e.copy,answerId:String(n.answerId??``)});g&&A(e.note,d,`${p} ${g}`),j(),e.note.scrollIntoView?.({block:`nearest`}),f&&o?.body.outcome===`accepted`&&setTimeout(()=>f(!!h&&!g),h&&!g?0:1200)}let L=(e,t,n,r,i)=>{let a=s(`button`,{type:`button`,class:`ask-opt`,role:e,"aria-checked":`false`},s(`b`,i?{"data-n":String(i)}:null,t),...n.filter(Boolean).map(e=>s(`small`,null,e)));return a.onclick=r,a};function R(e,t){let r,i=q(t).map(e=>L(`radio`,K(e.label),[e.note&&K(e.note)],()=>(r=e.i,i.forEach((n,r)=>n.setAttribute(`aria-checked`,String(q(t)[r].i===e.i))),j()),e.i+1)),a=t.select?.copy!==void 0&&s(`button`,{type:`button`,class:`cmp-link`},y());a&&(a.disabled=!navigator.clipboard,a.onclick=()=>void navigator.clipboard.writeText(t.select.copy).then(()=>A(e.note,`ok`,v()),()=>A(e.note,`error`,_())));let o=i.filter((e,r)=>!(n&&q(t)[r].hereOnly));return i.forEach(e=>!o.includes(e)&&(e.disabled=!0)),e.pick=()=>r===void 0?void 0:{choice:r},e.first=H(e.el,[{opts:i,multiple:!1,answered:()=>r!==void 0}],()=>e.send),e.controls=o,[s(`pre`,{class:`ask-title`},K(t.select.title)),s(`div`,{class:`ask-opts`,role:`radiogroup`,"aria-label":g()},...i),s(`div`,{class:`ask-acts`},e.send,e.cancel,a)]}function B(e,t){let n=t.questions.map(()=>({picks:new Set,text:s(`textarea`,{rows:`1`,maxlength:`8192`,class:`ask-own`,placeholder:D(),"aria-label":E()}),note:s(`input`,{type:`text`,maxlength:`2048`,class:`ask-own ask-memo`,placeholder:x(),"aria-label":b()})})),r=[],i=t.questions.map((t,i)=>{let a=n[i],o=t.multiple?`checkbox`:`radio`,c=t.options.map((e,n)=>L(o,e.title,[e.description,e.preview&&ee()],()=>{t.multiple||(a.picks.clear(),a.text.value=``),a.picks.has(n)?a.picks.delete(n):a.picks.add(n),c.forEach((e,t)=>e.setAttribute(`aria-checked`,String(a.picks.has(t)))),j()}));return a.text.oninput=()=>(t.multiple||(a.picks.clear(),c.forEach(e=>e.setAttribute(`aria-checked`,`false`))),j()),e.controls.push(...c,a.text,a.note),r.push({opts:c,multiple:!!t.multiple,own:a.text,note:a.note,answered:()=>a.picks.size>0||a.text.value.trim()!==``}),s(`div`,{class:`ask-one`},t.header&&s(`b`,{class:`ask-head`},t.header),s(`p`,{class:`ask-q`,...t.question.length>W?{"data-long":``}:{}},t.question),s(`div`,{class:`ask-opts`,role:t.multiple?`group`:`radiogroup`,"aria-label":w()},...c),a.text,a.note)});return e.pick=()=>n.every(e=>e.picks.size||e.text.value.trim())?{answers:n.map(e=>J(e.picks,e.text.value,e.note.value))}:void 0,e.first=H(e.el,r,()=>e.send),[...i,s(`div`,{class:`ask-acts`},e.send,e.cancel)]}function V(e){let t=e.asks??(e.ask?[e.ask]:[]),r=t.length>1,i=e.answer,a={copy:i?.select?.copy,key:$(e),el:s(`section`,{class:`ask`}),note:s(`p`,{class:`ask-note`,role:`status`,"aria-live":`polite`}),controls:[],pick:()=>void 0,done:!1,sending:!1};i&&((a.send=s(`button`,{type:`button`,class:`ask-send`},P())).onclick=()=>void(a.pick()&&I(a,Y(i,a.pick(),crypto.randomUUID()))));let c=e.tool===`secret_drop`;i&&!c&&Z(i,n)&&((a.cancel=s(`button`,{type:`button`,class:`ask-cancel`},o())).onclick=()=>void I(a,X(i,crypto.randomUUID())));let f=s(`p`,{class:`ask-term`},e.why&&t.length?e.why:`${r?d():u()} ${r||!t[0]?``:U(t[0])}`.trim()),m=l&&e.tool!==`secret_drop`&&s(`button`,{type:`button`,class:`cmp-link`},p());m&&(m.onclick=l.show);let h=e.answer?.twin&&e.tool&&e.tool!==`dialog`?[s(`p`,{class:`ask-why`},te({tool:e.tool}))]:[];return a.el.append(...h,...i&&!c?i.select?R(a,i):B(a,i):[...t.length?t.map(e=>G(e,r)):[s(`p`,{class:`ask-why`},c?n?M():N():e.why??z())],s(`div`,{class:`ask-acts`},c?s(`p`,{class:`ask-term`},u()):f,m)],a.note),a.cancel&&a.controls.push(a.cancel),a}let Q=(t,n)=>{let r=document.activeElement;h&&h!==n&&(h.focus=h.el.contains(r)?r:void 0),[m,h,S]=[t,n,n?.send?n:S],e.replaceChildren(...n?[n.el]:[]),n&&ie(n.el),j(),n?.focus&&(!document.activeElement||document.activeElement===document.body)&&n.focus.focus()};return{enter(){let e=h&&!h.done?h.first?.():void 0;return!!(e&&!e.disabled&&(e.focus(),1))},cancel(){let e=h&&!h.done?h.cancel:void 0;return!!(e&&!e.disabled&&(e.click(),1))},sending:()=>O,update(e,t){C=t,e&&(k=void clearTimeout(k)),!e&&(h?.done||h?.sending)?k??=setTimeout(()=>(k=void 0,Q()),6e3):e?h&&($(e)===h.key||!e.answer&&(h.done||h.sending)&&e.callId===m?.callId)?((h.busy||h.sending)&&!e.answer?h.spell=!0:h.busy&&h.spell&&e.answer&&([h.done,h.busy]=[!1,!1],A(h.note,``,T())),m=e):Q(e,S?.key===$(e)&&!S.done?S:V(e)):Q(),j()}}}export{ae as t};
|
|
1
|
+
import{t as e}from"./runtime-ZX6HkxDa.js";import{a as t,i as n,n as r,r as i,t as a}from"./sending-aEpvzoz2.js";import{Wt as o,Z as s,t as c,yt as l}from"./index-FlE0Rl1G.js";var u=((t={},n={})=>(n.locale??e())===`zh-TW`?`請在終端機中回答。`:`Answer it in the terminal.`),d=((t={},n={})=>(n.locale??e())===`zh-TW`?`請在終端機中回答。`:`Answer them in the terminal.`),f=((t={},n={})=>(n.locale??e())===`zh-TW`?`下方還有 ▾`:`More below ▾`),p=((t={},n={})=>(n.locale??e())===`zh-TW`?`也可以自己輸入答案。`:`It also takes your own words.`),m=((t={},n={})=>(n.locale??e())===`zh-TW`?`可以複選。`:`It takes several choices.`),h=((t={},n={})=>(n.locale??e())===`zh-TW`?`已取消。`:`Cancelled.`),g=((t={},n={})=>(n.locale??e())===`zh-TW`?`選擇`:`Choices`),_=((t={},n={})=>(n.locale??e())===`zh-TW`?`瀏覽器拒絕存取剪貼簿。`:`The browser refused the clipboard.`),v=((t={},n={})=>(n.locale??e())===`zh-TW`?`已複製到這台裝置的剪貼簿。`:`Copied to this device's clipboard.`),y=((t={},n={})=>(n.locale??e())===`zh-TW`?`複製指令`:`Copy command`),ee=((t={},n={})=>(n.locale??e())===`zh-TW`?`這個選項有預覽;請在終端機中查看。`:`It has a preview; see it in the terminal.`),b=((t={},n={})=>(n.locale??e())===`zh-TW`?`備註`:`Note`),x=((t={},n={})=>(n.locale??e())===`zh-TW`?`備註(選填)`:`Note (optional)`),S=e=>`Opened while ${e?.tool} was running; it may not be about that call.`,C=e=>`在 ${e?.tool} 執行時開啟,不一定與該呼叫有關。`,te=((t,n={})=>(n.locale??e())===`zh-TW`?C(t):S(t)),w=((t={},n={})=>(n.locale??e())===`zh-TW`?`選項`:`Options`),T=((t={},n={})=>(n.locale??e())===`zh-TW`?`另一個答案沒有被採用;這個可以送出。`:`The other answer was not taken; this one can go.`),E=((t={},n={})=>(n.locale??e())===`zh-TW`?`你的答案`:`Your own answer`),D=((t={},n={})=>(n.locale??e())===`zh-TW`?`或自己輸入答案`:`Or type your own answer`),O=((t={},n={})=>(n.locale??e())===`zh-TW`?`問題已變更,請重新閱讀。`:`The question changed; read it again.`),k=((t={},n={})=>(n.locale??e())===`zh-TW`?`session 讀不懂這個答案。`:`The session could not read that answer.`),A=((t={},n={})=>(n.locale??e())===`zh-TW`?`這個答案不符合問題。`:`That answer does not fit the question.`),j=((t={},n={})=>(n.locale??e())===`zh-TW`?`session 拒絕了這個答案。`:`The session refused that answer.`),M=((t={},n={})=>(n.locale??e())===`zh-TW`?`安全考量,遠端不支援輸入機密。請到執行 GUI 的那台電腦的終端機中回答。`:`For security, entering a secret is not supported remotely. Answer it in the terminal on the computer the GUI runs on.`),N=((t={},n={})=>(n.locale??e())===`zh-TW`?`機密內容只能在終端機輸入,這裡不接受。請到執行 GUI 的那台電腦的終端機中回答。`:`A secret is entered in the terminal only, not here. Answer it in the terminal on the computer the GUI runs on.`),P=((t={},n={})=>(n.locale??e())===`zh-TW`?`送出答案`:`Send answer`),F=((t={},n={})=>(n.locale??e())===`zh-TW`?`顯示終端機`:`Show terminal`),I=((t={},n={})=>(n.locale??e())===`zh-TW`?`已在終端機中關閉。`:`It was dismissed in the terminal.`),L=((t={},n={})=>(n.locale??e())===`zh-TW`?`它已不再開啟。`:`It is no longer open.`),R=((t={},n={})=>(n.locale??e())===`zh-TW`?`已在終端機中回答。`:`It was already answered in the terminal.`),z=((t={},n={})=>(n.locale??e())===`zh-TW`?`它在等待對話框。`:`It waits on a dialog.`),B={ArrowDown:1,ArrowRight:1,ArrowUp:-1,ArrowLeft:-1};function V(e,t,n,r,i){let{q:a}=n,o=r[a],s=B[e]??0,c=e===`ArrowUp`,l=c||e===`ArrowDown`,u=()=>({to:r.map((e,t)=>({q:(a+1+t)%r.length,part:`opt`})).find(e=>e.q!==a&&!i[e.q])??`send`});if(e===`Tab`){let e=r[a-1],i=n.part===`opt`?o.own||o.note:n.part===`own`&&o.note;return t?n.part===`opt`&&e?{to:{q:a-1,part:e.note?`note`:e.own?`own`:`opt`}}:void 0:i||a===r.length-1?void 0:{to:{q:a+1,part:`opt`}}}if(!t){if(n.part===`opt`){let t=n.o+s;if(s)return t>=0&&t<o.options?{to:{q:a,part:`opt`,o:t},...o.multiple?{}:{pick:t}}:{to:s>0&&o.own?{q:a,part:`own`}:n};if(e===`Enter`||e===` `&&!o.multiple)return{...u(),...o.multiple?{}:{pick:n.o}}}else if(n.part===`own`){if(e===`Enter`)return u();if(l)return{to:c?{q:a,part:`opt`,o:o.options-1}:{q:a,part:`note`}}}else if(c)return{to:{q:a,part:`own`}}}}function H(e,t,n){let r=e=>Math.max(0,e.opts.findIndex(e=>e.getAttribute(`aria-checked`)===`true`)),i=(e,t)=>e.opts.forEach((e,n)=>e.setAttribute(`tabindex`,n===t?`0`:`-1`)),a=e=>{for(let[n,r]of t.entries()){let t=r.opts.indexOf(e);if(t>=0)return{q:n,part:`opt`,o:t};if(e===r.own||e===r.note)return{q:n,part:e===r.own?`own`:`note`}}};t.forEach(e=>i(e,r(e)));let o=e=>{let n=a(e.target);n?.part===`opt`&&i(t[n.q],n.o)};e.addEventListener(`focusin`,o),e.addEventListener(`click`,o);let s=!1,c=!1;return e.addEventListener(`keydown`,i=>{i.key===` `&&(c=!0);let o=a(i.target);if(!o||i.ctrlKey||i.altKey||i.metaKey||i.isComposing)return;let l=i.target;if(o.part!==`opt`&&(i.key===`ArrowUp`?l.selectionStart!==0:i.key===`ArrowDown`&&l.selectionEnd!==l.value.length))return;let u=V(i.key,i.shiftKey,o,t.map(e=>({options:e.opts.length,multiple:e.multiple,own:!!e.own,note:!!e.note})),t.map(e=>e.answered()));if(!u||(i.preventDefault(),i.repeat&&[`Enter`,` `].includes(i.key)))return;if(s=i.key===` `,u.pick!==void 0){let e=t[o.q].opts[u.pick];e.getAttribute(`aria-checked`)!==`true`&&e.click()}let d=u.to===`send`?void 0:t[u.to.q],f=u.to===`send`?n():u.to.part===`opt`?d.opts[u.to.o??r(d)]:u.to.part===`own`?d.own:d.note;f&&!f.disabled&&(e.dispatchEvent(new CustomEvent(`ask-reveal`,{detail:f})),f.focus())}),e.addEventListener(`keyup`,e=>{e.key===` `&&((s||!c)&&e.preventDefault(),s=c=!1)}),()=>t[0]?.opts[r(t[0])]}var U=e=>e.multiple?m():e.freeform&&e.options.length?p():``,W=90,G=(e,t)=>s(`div`,{class:`ask-one`},e.header&&s(`b`,{class:`ask-head`},e.header),s(`p`,{class:`ask-q`,...e.question.length>W?{"data-long":``}:{}},e.question),e.context&&s(`div`,{class:`ask-ctx`},e.context),e.options.length>0&&s(`ol`,{class:`ask-opts`,"aria-label":w()},...e.options.map(e=>s(`li`,{class:`ask-opt`},s(`b`,null,e.title),e.description&&s(`small`,null,e.description)))),t&&U(e)&&s(`small`,{class:`ask-how`},U(e))),K=e=>e.replace(/[\u0000-\u0008\u000b-\u001f\u007f-\u009f\p{Cf}]/gu,`�`),q=e=>(e.select?.choices??[]).map((e,t)=>({...e,i:t})),J=(e,t,n)=>({...e.size?{choices:[...e].sort((e,t)=>e-t)}:{},...t.trim()?{text:t}:{},...n.trim()?{note:n}:{}}),Y=(e,t,n)=>({dialog:e.dialog,digest:e.digest,answerId:n,...t}),X=(e,t)=>({dialog:e.dialog,digest:e.digest,answerId:t,cancel:!0}),Z=(e,t)=>e.cancel===!0&&!(t&&e.select?.choices.every(e=>e.hereOnly)),Q={digest:O,"not-allowed":A,malformed:k};function ne(e,i=!1){let{outcome:a,reason:o,by:s}=e.body;return a===`accepted`?[`ok`,i?h():n()]:a===`stale`?[`error`,s===`local`?R():s===`cancel`?I():L()]:a===`rejected`?[`error`,(Object.hasOwn(Q,String(o))?Q[String(o)]:j)()]:a===`busy`?[`error`,t()]:a===`unknown`||e.status===504?[`error`,r(),!0]:[`error`,o??l({status:e.status})]}var re=e=>[`accepted`,`stale`,`busy`,`unknown`].includes(String(e.body.outcome))||e.status===504,$=e=>e.answer?`d\n${e.answer.dialog}\n${e.answer.digest}`:`c\n${e.callId}\n${e.why??``}`;function ie(e){if(e.dataset.cued)return;e.dataset.cued=`1`;let t=()=>{e.toggleAttribute(`data-more`,e.scrollHeight-e.scrollTop-e.clientHeight>4);for(let t of e.querySelectorAll(`.ask-acts`))t.dataset.cue=f()};for(let n of[`scroll`,`input`])e.addEventListener(n,t,{passive:!0});typeof ResizeObserver<`u`&&new ResizeObserver(t).observe(e),typeof MutationObserver<`u`&&new MutationObserver(t).observe(e,{childList:!0,subtree:!0,characterData:!0}),typeof requestAnimationFrame<`u`&&requestAnimationFrame(t)}function ae(e,t,n=location.hostname!==`127.0.0.1`,l,f,p=F){let m,h,S,C=!1,O=!1,k;for(let e of[`focusin`,`pointerdown`])document.addEventListener(e,e=>h&&!h.el.contains(e.target)&&(h.lost=void 0));let A=(e,t,n,...r)=>(e.dataset.tone=t,e.replaceChildren(n,...r)),j=()=>{if(!h)return;let e=document.activeElement;e&&e!==document.body&&e!==h.lost&&(h.lost=void 0),h.controls.forEach(e=>e.disabled=!C||O||h.done),h.send&&(h.send.disabled=!C||O||h.done||!h.pick()),e&&h.el.contains(e)&&e.disabled&&(h.lost=e);let t=h.lost;t&&!t.disabled&&h.el.contains(t)&&(!document.activeElement||document.activeElement===document.body)&&(t.focus(),h.lost=void 0)};async function I(e,n){[e.sending,O,e.spell]=[!0,!0,!1],j(),A(e.note,``,a());let o=await t(`answer`,n).catch(()=>void 0),u=s(`button`,{type:`button`,class:`cmp-link`},i());u.onclick=()=>void I(e,n);let[d,p,m]=o?ne(o,n.cancel===!0):[`error`,r(),!0];[e.done,e.sending,O,e.busy]=[!o||re(o),!1,!1,o?.body.outcome===`busy`],A(e.note,d,p,...m?[u]:[]);let h=o?.body.outcome===`accepted`?o.body.then:void 0,g=h&&c(h,{key:l?.key??``,command:e.copy,answerId:String(n.answerId??``)});g&&A(e.note,d,`${p} ${g}`),j(),e.note.scrollIntoView?.({block:`nearest`}),f&&o?.body.outcome===`accepted`&&setTimeout(()=>f(!!h&&!g),h&&!g?0:1200)}let L=(e,t,n,r,i)=>{let a=s(`button`,{type:`button`,class:`ask-opt`,role:e,"aria-checked":`false`},s(`b`,i?{"data-n":String(i)}:null,t),...n.filter(Boolean).map(e=>s(`small`,null,e)));return a.onclick=r,a};function R(e,t){let r,i=q(t).map(e=>L(`radio`,K(e.label),[e.note&&K(e.note)],()=>(r=e.i,i.forEach((n,r)=>n.setAttribute(`aria-checked`,String(q(t)[r].i===e.i))),j()),e.i+1)),a=t.select?.copy!==void 0&&s(`button`,{type:`button`,class:`cmp-link`},y());a&&(a.disabled=!navigator.clipboard,a.onclick=()=>void navigator.clipboard.writeText(t.select.copy).then(()=>A(e.note,`ok`,v()),()=>A(e.note,`error`,_())));let o=i.filter((e,r)=>!(n&&q(t)[r].hereOnly));return i.forEach(e=>!o.includes(e)&&(e.disabled=!0)),e.pick=()=>r===void 0?void 0:{choice:r},e.first=H(e.el,[{opts:i,multiple:!1,answered:()=>r!==void 0}],()=>e.send),e.controls=o,[s(`pre`,{class:`ask-title`},K(t.select.title)),s(`div`,{class:`ask-opts`,role:`radiogroup`,"aria-label":g()},...i),s(`div`,{class:`ask-acts`},e.send,e.cancel,a)]}function B(e,t){let n=t.questions.map(()=>({picks:new Set,text:s(`textarea`,{rows:`1`,maxlength:`8192`,class:`ask-own`,placeholder:D(),"aria-label":E()}),note:s(`input`,{type:`text`,maxlength:`2048`,class:`ask-own ask-memo`,placeholder:x(),"aria-label":b()})})),r=[],i=t.questions.map((t,i)=>{let a=n[i],o=t.multiple?`checkbox`:`radio`,c=t.options.map((e,n)=>L(o,e.title,[e.description,e.preview&&ee()],()=>{t.multiple||(a.picks.clear(),a.text.value=``),a.picks.has(n)?a.picks.delete(n):a.picks.add(n),c.forEach((e,t)=>e.setAttribute(`aria-checked`,String(a.picks.has(t)))),j()}));return a.text.oninput=()=>(t.multiple||(a.picks.clear(),c.forEach(e=>e.setAttribute(`aria-checked`,`false`))),j()),e.controls.push(...c,a.text,a.note),r.push({opts:c,multiple:!!t.multiple,own:a.text,note:a.note,answered:()=>a.picks.size>0||a.text.value.trim()!==``}),s(`div`,{class:`ask-one`},t.header&&s(`b`,{class:`ask-head`},t.header),s(`p`,{class:`ask-q`,...t.question.length>W?{"data-long":``}:{}},t.question),s(`div`,{class:`ask-opts`,role:t.multiple?`group`:`radiogroup`,"aria-label":w()},...c),a.text,a.note)});return e.pick=()=>n.every(e=>e.picks.size||e.text.value.trim())?{answers:n.map(e=>J(e.picks,e.text.value,e.note.value))}:void 0,e.first=H(e.el,r,()=>e.send),[...i,s(`div`,{class:`ask-acts`},e.send,e.cancel)]}function V(e){let t=e.asks??(e.ask?[e.ask]:[]),r=t.length>1,i=e.answer,a={copy:i?.select?.copy,key:$(e),el:s(`section`,{class:`ask`}),note:s(`p`,{class:`ask-note`,role:`status`,"aria-live":`polite`}),controls:[],pick:()=>void 0,done:!1,sending:!1};i&&((a.send=s(`button`,{type:`button`,class:`ask-send`},P())).onclick=()=>void(a.pick()&&I(a,Y(i,a.pick(),crypto.randomUUID()))));let c=e.tool===`secret_drop`;i&&!c&&Z(i,n)&&((a.cancel=s(`button`,{type:`button`,class:`ask-cancel`},o())).onclick=()=>void I(a,X(i,crypto.randomUUID())));let f=s(`p`,{class:`ask-term`},e.why&&t.length?e.why:`${r?d():u()} ${r||!t[0]?``:U(t[0])}`.trim()),m=l&&e.tool!==`secret_drop`&&s(`button`,{type:`button`,class:`cmp-link`},p());m&&(m.onclick=l.show);let h=e.answer?.twin&&e.tool&&e.tool!==`dialog`?[s(`p`,{class:`ask-why`},te({tool:e.tool}))]:[];return a.el.append(...h,...i&&!c?i.select?R(a,i):B(a,i):[...t.length?t.map(e=>G(e,r)):[s(`p`,{class:`ask-why`},c?n?M():N():e.why??z())],s(`div`,{class:`ask-acts`},c?s(`p`,{class:`ask-term`},u()):f,m)],a.note),a.cancel&&a.controls.push(a.cancel),a}let Q=(t,n)=>{let r=document.activeElement;h&&h!==n&&(h.focus=h.el.contains(r)?r:void 0),[m,h,S]=[t,n,n?.send?n:S],e.replaceChildren(...n?[n.el]:[]),n&&ie(n.el),j(),n?.focus&&(!document.activeElement||document.activeElement===document.body)&&n.focus.focus()};return{enter(){let e=h&&!h.done?h.first?.():void 0;return!!(e&&!e.disabled&&(e.focus(),1))},cancel(){let e=h&&!h.done?h.cancel:void 0;return!!(e&&!e.disabled&&(e.click(),1))},sending:()=>O,update(e,t){C=t,e&&(k=void clearTimeout(k)),!e&&(h?.done||h?.sending)?k??=setTimeout(()=>(k=void 0,Q()),6e3):e?h&&($(e)===h.key||!e.answer&&(h.done||h.sending)&&e.callId===m?.callId)?((h.busy||h.sending)&&!e.answer?h.spell=!0:h.busy&&h.spell&&e.answer&&([h.done,h.busy]=[!1,!1],A(h.note,``,T())),m=e):Q(e,S?.key===$(e)&&!S.done?S:V(e)):Q(),j()}}}export{ae as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./rolldown-runtime-DK3Fl9T5.js";import{m as t}from"./towermodel-BPfyRLG9.js";import{t as n}from"./runtime-ZX6HkxDa.js";import{n as r}from"./post-DDdE-PdN.js";import{yt as i}from"./index-FlE0Rl1G.js";var a=((e={},t={})=>(t.locale??n())===`zh-TW`?`沒有符合這個號碼的請求。`:`No request has that number.`),o=((e={},t={})=>(t.locale??n())===`zh-TW`?`這個請求已經不在了。`:`That request is gone.`),s=((e={},t={})=>(t.locale??n())===`zh-TW`?`連續輸入三次錯誤號碼,所以所有等待中的請求都已拒絕。請按「新的配對碼」重新配對。`:`Three wrong numbers in a row, so every waiting request was denied. Press New code and pair again.`),c=((e={},t={})=>(t.locale??n())===`zh-TW`?`這個請求已經變了,請重新看過。`:`That request changed. Look at it again.`),l=((e={},t={})=>(t.locale??n())===`zh-TW`?`這個請求已經不在了,或已逾時。`:`That request is gone or has timed out.`),u=((e={},t={})=>(t.locale??n())===`zh-TW`?`這個團隊沒有在這台裝置上執行。`:`That team is not running on this device.`),d=((e={},t={})=>(t.locale??n())===`zh-TW`?`已在該裝置上取消。`:`It was cancelled at the device.`),f=((e={},t={})=>(t.locale??n())===`zh-TW`?`你已從這裡回答。`:`You answered it from here.`),p=((e={},t={})=>(t.locale??n())===`zh-TW`?`已在該裝置上回答。`:`Answered at the device itself.`),m=((e={},t={})=>(t.locale??n())===`zh-TW`?`已由團隊的另一個控制端回答。`:`Answered by another controller of this team.`),h=e=>`The answer was not sent: ${e?.reason}`,g=e=>`答案沒有送出:${e?.reason}`,_=((e,t={})=>(t.locale??n())===`zh-TW`?g(e):h(e)),v=((e={},t={})=>(t.locale??n())===`zh-TW`?`問題在有人回答前就結束了。`:`It ended before anyone answered it.`),y=((e={},t={})=>(t.locale??n())===`zh-TW`?`已送出你的答案;對方裝置還沒關閉這個問題。`:`Your answer was sent; the device has not closed the question yet.`),b=((e={},t={})=>(t.locale??n())===`zh-TW`?`你已不再負責回答這台裝置的問題;問題在那邊仍未結束。`:`You no longer answer this device's questions; it is still open there.`);function x(e){switch(e){case`sent`:return y();case`done-here`:return f();case`done-other`:return m();case`done-local`:return p();case`cancelled`:return d();case`expired`:return v();case`withdrawn`:return b()}}var S=e=>typeof e==`object`&&!!e&&!Array.isArray(e),C=e=>typeof e==`string`,w=e=>Array.isArray(e)&&e.every(e=>S(e)&&C(e.title));function T(e){let{dialog:t,dialogId:n,digest:r}=e.data;if(!C(t)||!C(n)||!C(r))return;let i;try{i=JSON.parse(t)}catch{return}if(!S(i))return;let{select:a,questions:o,cancel:s}=i,c={dialog:n,digest:r,...s===!0?{cancel:!0}:{}};if(S(a)&&C(a.title)&&Array.isArray(a.choices)&&a.choices.every(e=>S(e)&&C(e.label)))return{callId:n,tool:`dialog`,answer:{...c,select:a}};if(Array.isArray(o)&&o.length>0&&o.every(e=>S(e)&&C(e.question)&&w(e.options)))return{callId:n,tool:`dialog`,answer:{...c,questions:o}}}var E=e=>e.cancel===!0?{cancel:!0}:e.choice===void 0?{answers:e.answers}:{choice:e.choice},D=e({confirmActions:()=>M,confirmWhy:()=>N,forwardedAnswer:()=>P,joined:()=>k,lanActions:()=>I,lanReading:()=>L,outcome:()=>O,proposalActions:()=>F,taken:()=>j,waitActions:()=>A}),O=e=>{let t=e.body.outcome;return t===void 0?e.status===504?`unknown`:e.ok&&(e.body.accepted===!0||Array.isArray(e.body.entries))?`accepted`:`refused`:t===`accepted`?`accepted`:t===`unknown`?`unknown`:`refused`},k=e=>e.replace(/^([A-Z])(?=[a-z])/,e=>e.toLowerCase()),A=(e,n)=>({tell:t=>n(`input`,{text:t,as:`send`,answers:e.id}),dismiss:()=>r(`${t(e.ws)}/memory`,{op:`drop`,id:e.id}),goto:{view:`session`,ws:e.ws,key:e.tower}}),j=e=>e.ok&&e.body.outcome===void 0?{...e,body:{...e.body,outcome:`accepted`}}:e,M=e=>{let t=t=>r(`link/confirm-answer`,{dialogId:e.dialogId,digest:e.digest,allow:t}).then(j);return{allow:()=>t(!0),deny:()=>t(!1)}},N=e=>{let t=String(e.body.reason??e.body.error??``);return[[/^That request is gone/,l],[/^That team is not running/,u],[/^That request changed/,c]].find(([e])=>e.test(t))?.[1]()??(t||i({status:e.status}))},P=e=>async(t,n)=>{let a=await r(`link/dialog-answer`,{device:e.device,dialogId:e.dialogId,digest:e.digest,answer:E(n)});return a.ok?j(a):{ok:!1,status:a.status,body:{reason:_({reason:a.body.reason??i({status:a.status})})}}},F=e=>({confirm:()=>r(`${t(e.ws)}/memory`,{op:`confirm`,proposal:e.id,rev:e.rev()}),reject:()=>r(`${t(e.ws)}/memory`,{op:`reject`,proposal:e.id})}),I=e=>({approve:t=>e(`lan/approve`,{number:t}).then(j),deny:t=>e(`lan/approve`,{deny:t}).then(e=>e.ok&&e.body.denied===0?{...e,ok:!1,body:{error:`gone`,reason:o()}}:j(e)),denyAll:()=>e(`lan/approve`,{deny:`all`}).then(j)});function L(e){let t=!e.ok&&e.body.error===`no_match`&&Number(e.body.denied)>0;return{answer:e.ok||t?``:e.body.error===`no_match`?a():String(e.body.reason??i({status:e.status})),verdict:t?s():``}}export{k as a,O as c,x as d,T as f,P as i,F as l,M as n,I as o,N as r,L as s,D as t,A as u};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./index-C2r9LRXv.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as e}from"./towermodel-BPfyRLG9.js";import{t}from"./runtime-ZX6HkxDa.js";import{i as n,n as r,r as i,t as a}from"./towerturns-CJSot0mK.js";import{n as o,t as s}from"./markdown-DvbY97ID.js";import{$ as c,I as l,Rt as u,T as d,Z as f,f as p,x as ee}from"./index-FlE0Rl1G.js";var te=((e={},n={})=>(n.locale??t())===`zh-TW`?`可能已被當機的 run 處理過:動手前先確認。`:`A run that crashed may already have handled this: check before acting.`),ne=((e={},n={})=>(n.locale??t())===`zh-TW`?`分支摘要`:`branch summary`),re=((e={},n={})=>(n.locale??t())===`zh-TW`?`通訊紀錄`:`Comms log`),m=e=>`context compacted · ${e?.tokens} tokens summarized`,ie=e=>`上下文已壓縮 · 摘要了 ${e?.tokens} tokens`,ae=((e,n={})=>(n.locale??t())===`zh-TW`?ie(e):m(e)),oe=((e={},n={})=>(n.locale??t())===`zh-TW`?`…(於 1 MB 截斷)`:`… (cut at 1 MB)`),h=e=>`exit ${e?.code}`,g=e=>`結束碼 ${e?.code}`,se=((e,n={})=>(n.locale??t())===`zh-TW`?g(e):h(e)),_=e=>`New chapter · ${e?.date} · ${e?.why}`,v=e=>`新的一章・${e?.date}・${e?.why}`,ce=((e,n={})=>(n.locale??t())===`zh-TW`?v(e):_(e)),y=((e={},n={})=>(n.locale??t())===`zh-TW`?`第一次對話`:`the first conversation`),b=((e={},n={})=>(n.locale??t())===`zh-TW`?`你要求開新對話`:`you asked for a new conversation`),x=((e={},n={})=>(n.locale??t())===`zh-TW`?`上一章太長了`:`the last one grew too large`),S=((e={},n={})=>(n.locale??t())===`zh-TW`?`上一章無法接續`:`the last one could not be resumed`),C=e=>`Image ${e?.n}`,w=e=>`圖片 ${e?.n}`,le=((e,n={})=>(n.locale??t())===`zh-TW`?w(e):C(e)),ue=((e={},n={})=>(n.locale??t())===`zh-TW`?`圖片無法讀取`:`Image unavailable`),T=e=>`${e?.count} image(s)`,E=e=>`${e?.count} 張圖片`,de=((e,n={})=>(n.locale??t())===`zh-TW`?E(e):T(e)),fe=((e={},n={})=>(n.locale??t())===`zh-TW`?`收到`:`incoming`),D=((e={},n={})=>(n.locale??t())===`zh-TW`?`跳到最新`:`jump to latest`),O=e=>`${e?.count} new`,k=e=>`${e?.count} 則新訊息`,A=((e,n={})=>(n.locale??t())===`zh-TW`?k(e):O(e)),pe=((e={},n={})=>(n.locale??t())===`zh-TW`?`還沒有通訊。`:`No transmissions yet.`),me=((e={},n={})=>(n.locale??t())===`zh-TW`?`通知`:`notice`),he=((e={},n={})=>(n.locale??t())===`zh-TW`?`細節`:`details`),j=((e={},n={})=>(n.locale??t())===`zh-TW`?`表單回覆`:`form answers`),ge=((e={},n={})=>(n.locale??t())===`zh-TW`?`訊息,來自`:`message from`),M=e=>`answer from ${e?.from}`,N=e=>`${e?.from} 的回答`,_e=((e,n={})=>(n.locale??t())===`zh-TW`?N(e):M(e)),P=e=>`request from ${e?.from}`,F=e=>`${e?.from} 的請求`,ve=((e,n={})=>(n.locale??t())===`zh-TW`?F(e):P(e)),I=e=>`message from ${e?.from}`,L=e=>`${e?.from} 的訊息`,ye=((e,n={})=>(n.locale??t())===`zh-TW`?L(e):I(e)),be=e=>`reply to your ask from ${e?.from}`,R=e=>`${e?.from} 回覆了你的詢問`,xe=((e,n={})=>(n.locale??t())===`zh-TW`?R(e):be(e)),z=((e={},n={})=>(n.locale??t())===`zh-TW`?`記憶`:`memory`),B=((e={},n={})=>(n.locale??t())===`zh-TW`?`監看`:`monitor`),Se=((e={},n={})=>(n.locale??t())===`zh-TW`?`本機`:`this computer`),Ce=((e={},n={})=>(n.locale??t())===`zh-TW`?`隊友`:`teammate`),we=((e={},n={})=>(n.locale??t())===`zh-TW`?`提問,來自`:`question from`),V=((e={},n={})=>(n.locale??t())===`zh-TW`?`回報,來自`:`report from`),Te=((e={},n={})=>(n.locale??t())===`zh-TW`?`sb server 的通知`:`notice from the sb server`),H=((e={},n={})=>(n.locale??t())===`zh-TW`?`狀態:`:`status of`),U=((e={},n={})=>(n.locale??t())===`zh-TW`?`Straw Link 訊息`:`Straw Link message`),Ee=((e={},n={})=>(n.locale??t())===`zh-TW`?`喚醒鬧鐘`:`wake-up call`),W=((e={},n={})=>(n.locale??t())===`zh-TW`?`塔台事件`:`tower event`),De=((e={},n={})=>(n.locale??t())===`zh-TW`?`在旁開啟`:`open beside`),Oe=e=>`Open image ${e?.n}`,G=e=>`打開圖片 ${e?.n}`,ke=((e,n={})=>(n.locale??t())===`zh-TW`?G(e):Oe(e)),K=e=>`show all (${e?.size})`,q=e=>`顯示全部(${e?.size})`,Ae=((e,n={})=>(n.locale??t())===`zh-TW`?q(e):K(e)),je=((e={},n={})=>(n.locale??t())===`zh-TW`?`顯示全部參數`:`show all arguments`),J=e=>`◇ thought · ${e?.count} chars`,Y=e=>`◇ 思考 · ${e?.count} 字元`,Me=((e,n={})=>(n.locale??t())===`zh-TW`?Y(e):J(e)),Ne=((e={},n={})=>(n.locale??t())===`zh-TW`?`◇ 思考 · 已遮蔽`:`◇ thought · redacted`),Pe=((e={},n={})=>(n.locale??t())===`zh-TW`?`這座塔台正在待命。有訊息進來時,sb server 會喚醒它跑一個 run;你在這裡送出的第一則訊息就會啟動它。`:`This tower stands by. The sb server wakes it for a run when a message arrives; your first message here starts that run.`),Fe=((e={},n={})=>(n.locale??t())===`zh-TW`?`無法取得`:`unavailable`),Ie=((e={},n={})=>(n.locale??t())===`zh-TW`?`你`:`you`);function Le(){let e=!0,t=0;return{get pinned(){return e},scrolled(n){e=n,n&&(t=0)},hold:()=>void(e=!1),arrived(n){return e||(t+=n),e},jump:()=>void(e=!0,t=0),button:n=>e&&!n?void 0:t&&!n?A({count:t}):D()}}async function Re(e,t,n,r){let i=()=>e.items.some(e=>e.id===n);for(;!i()&&e.before;)r(e.prepend(await t.older(e.before)));return i()?!0:(r(e.reset(await t.latest())),!1)}function ze(e=600){let t=[],n,r=!1,i=new Set,a=new Map,o=new Map,s=e=>e.forEach(e=>(i.delete(e.id),e.tools?.forEach(e=>(o.delete(e.id),a.delete(e.id)))));function c(e,t){let n=[];for(let r of e)i.has(r.id)||(i.add(r.id),r.kind===`result`&&r.callId?(a.set(r.callId,r),o.has(r.callId)&&t.add(o.get(r.callId))):(r.tools?.forEach(e=>o.set(e.id,r.id)),n.push(r)));return n}let l=e=>({rebuild:!1,added:[],touched:[],dropped:[],front:!1,...e});return{get items(){return t},get before(){return n},get detached(){return r},result:e=>a.get(e),reset(e){return[t,n,r]=[[],e.before,!1],i.clear(),a.clear(),o.clear(),t=c(e.items,new Set),l({rebuild:!0,added:t})},append(i){if(r)return l({});let a=new Set,o=c(i,a);t.push(...o);let u=t.length>e?t.splice(0,t.length-e):[];return s(u),u.length&&(n=t[0].id),l({added:o,touched:[...a],dropped:u.map(e=>e.id)})},prepend(i){let a=new Set,o=c(i.items,a);t.unshift(...o),n=i.before;let u=t.length>e?t.splice(e):[];return s(u),u.length&&(r=!0),l({added:o,touched:[...a],dropped:u.map(e=>e.id),front:!0})}}}var Be=(e,t)=>({first:y,new:b,size:x,unreadable:S})[e??``]?.()??t??``,Ve=e=>e.head?u():d(e.role),He=e=>e?new Date(e).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`,hour12:!1}):``,Ue=e=>e>=1024?`${(e/1024).toFixed(e>=10240?0:1)} KB`:`${e} B`,We={intercom_message:ge,subagent_result:V,subagent_ping:we,subagent_status:H,"pi-loop-monitor":B,"memory-context":z,"doc-review":j,"straw-tower":W,"straw-link":U},X=e=>{let t=ee(`<span class="ava"><svg><use/></svg></span>`);return t.querySelector(`use`).setAttribute(`href`,`#i-${p[e]??e}`),t};function Ge(e){let t=[],n=0;for(let r of e.matchAll(/https?:\/\/[^\s<>)\]]+/g))t.push(e.slice(n,r.index),f(`a`,{href:r[0],rel:`noopener noreferrer`,target:`_blank`},r[0])),n=r.index+r[0].length;return[...t,e.slice(n)]}function Z(u,d,{who:p,link:ee,docFor:m,page:ie}){let h=ze(),g=new Map,_=new Set,v=()=>_.forEach(e=>e.button.isConnected?(e.shown=!0,e.button.hidden=!e.paths.some(e=>m?.(e))):e.shown&&_.delete(e)),y=f(`div`,{class:`chat-list`}),b=f(`div`,{class:`chat-top`}),x=f(`div`,{class:`chat-live`}),S=f(`div`,{class:`chat-end`}),C=f(`button`,{class:`chat-pill`,type:`button`,hidden:``}),w=f(`p`,{class:`chat-empty`},pe()),T=f(`div`,{class:`chat-scroll`,tabindex:`-1`,"aria-label":re()},b,y,x,S);u.replaceChildren(T,C);let E=Le(),D=!1,O=!1,k,A,j=0,M=!1,N,P=()=>M||N!==void 0,F=()=>(clearTimeout(N),N=setTimeout(()=>(N=void 0,E.pinned&&!h.detached&&L()),250)),I=(e=E.button(h.detached))=>(C.hidden=!e,C.textContent=e??``),L=()=>(E.jump(),A=void 0,T.scrollTop=T.scrollHeight,I());async function be(e){D=!0;let t=await Re(h,d,e,e=>(J(e),qe(e))).finally(()=>D=!1),n=g.get(e);if(k===e){if(!t||!n)return L();E.hold(),A=n,n.scrollIntoView({block:`center`}),c(n,`lit`),clearTimeout(j),j=window.setTimeout(()=>(A=void 0,n.classList.remove(`lit`)),2e3),I()}}let R=()=>k?void be(k):L(),z=(e,t,n,r)=>{e.disabled=!0,d.entry(n).then(n=>{let i=n&&r(n);if(i===void 0)return void(e.textContent=Fe());t.textContent=i,e.remove()},()=>e.textContent=Fe())};function B(e,t=0){if(!t||!d.pic)return null;let n=Array.from({length:t},(t,n)=>d.pic(e,n));return f(`div`,{class:`pics`},...n.map((e,t)=>{let r=f(`img`,{src:e,alt:le({n:t+1}),loading:`lazy`,decoding:`async`}),i=f(`button`,{type:`button`,class:`pic`,"aria-label":ke({n:t+1})},r);return r.addEventListener(`error`,()=>i.replaceWith(f(`em`,{class:`pic-gone`},ue()))),i.addEventListener(`click`,()=>void l(async()=>{let{lightbox:e}=await import(`./lightbox-CPTPuNTA.js`);return{lightbox:e}},__vite__mapDeps([0]),import.meta.url).then(({lightbox:e})=>e(n,t))),i}))}function we(e,t){let n=h.result(e.id),r=f(`pre`,{class:`out`},n?.text??``),i=f(`pre`,{class:`args`},e.args??``),a=e.cut?f(`button`,{class:`more`,type:`button`},je()):null;a?.addEventListener(`click`,()=>z(a,i,t,t=>(e=>e&&`${e.args??``}${e.cut?`\n${oe()}`:``}`)(t.tools?.find(t=>t.id===e.id))));let o=n?.more?f(`button`,{class:`more`,type:`button`},Ae({size:Ue(n.bytes??0)})):null;o?.addEventListener(`click`,()=>z(o,r,n.id,e=>e.text));let s=e.name===`show_doc`&&m?f(`button`,{class:`more open`,type:`button`,hidden:``},De()):null;s?.addEventListener(`click`,t=>(t.preventDefault(),e.summary.split(`, `).forEach(e=>m?.(e)?.()))),s&&_.add({paths:e.summary.split(`, `),button:s}),s&&queueMicrotask(v);let c=f(`details`,{class:`act`},f(`summary`,{"data-mark":n?n.isError?`error`:`done`:`working`},f(`b`,{class:`badge`}),f(`code`,null,e.name),f(`span`,{class:`sum`},e.summary),s),i,a,n&&f(`div`,{class:`result`},n.images?f(`em`,null,de({count:n.images})):null,r,o)),l=n&&B(n.id,n.images);return l?[c,l]:[c]}let V=e=>f(`time`,null,He(e.at)),H=(e,t,n,r)=>f(`article`,{class:`tx you`},f(`header`,null,V(e),f(`b`,null,Ie()),X(`user`)),f(`div`,{class:`bubble`,title:r},n?f(`small`,{class:`boss-flag`},te()):null,...Ge(t),B(e.id,e.images))),U=(e,t,n,r={})=>f(`article`,{class:`tx sys`},f(`details`,{class:`notice`},f(`summary`,null,X(`comms`),f(`em`,null,fe()),...t,V(e)),r.crashed?f(`small`,{class:`boss-flag`},te()):null,f(`pre`,null,n),r.raw?f(`details`,{class:`notice-raw`},f(`summary`,null,he()),f(`pre`,{class:`raw`},r.raw)):null)),W=e=>{let t=n(e);return[ge(),` `,t.name&&ee(t.name)||t.name,t.id?` (${t.id})`:``,` · `,Se()]},Oe=e=>e.kind===`link`?[{ask:ve,reply:xe,answer:_e,message:ye}[e.what]({from:e.from}),` · `,Ce()]:e.kind===`intercom`?W(e.from):[e.kind===`server`?Te():Ee()],G=()=>ie===!0&&p().head===!0,K=()=>f(`article`,{class:`tx skip`,hidden:``});function q(e){switch(e.kind){case`user`:{let t=p().service?i(e.text):void 0;if(t)return U(e,t.kind===`intercom`?W(t.from):[t.kind===`server`?Te():Ee()],e.text??``);let n=p().service?a(e.text):void 0;return H(e,n?n.body:e.text??``,n?.crashed,n?e.text??``:``)}case`assistant`:{let t=p();if(G()&&!e.text&&!e.thought&&!e.error&&!e.stop)return K();let n=f(`pre`,{class:`thought-text`}),r=e.thought?f(`button`,{class:`thought`,type:`button`},e.thought<0?Ne():Me({count:e.thought.toLocaleString()})):null;return e.thought&&e.thought>0&&r?.addEventListener(`click`,()=>z(r,n,e.id,e=>e.thoughtText)),f(`article`,{class:t.head?`tx in head`:`tx in`},X(t.head?`crown`:t.role),f(`div`,{class:`tx-body`},f(`header`,null,f(`b`,null,Ve(t)),e.model?f(`span`,null,e.model):null,V(e),e.stop?f(`span`,{class:`stop`,"data-mark":`error`},e.stop):null),r,n,e.text?f(`div`,{class:`md`},s(o(e.text))):null,e.error?f(`p`,{class:`fault`},e.error):null,...(G()?[]:e.tools??[]).flatMap(t=>we(t,e.id))))}case`bash`:return G()?K():f(`article`,{class:`tx sys`},f(`details`,{class:`act`},f(`summary`,{"data-mark":e.exit?`error`:`done`},f(`b`,{class:`badge`}),f(`code`,null,`shell`),f(`span`,{class:`sum`},`! ${e.command}`),e.exit?f(`span`,{class:`stop`,"data-mark":`error`},se({code:e.exit})):null),e.text?f(`pre`,{class:`out`},e.text):null));case`notice`:{let t=r(e);return t?.kind===`boss`&&p().service?H(e,t.body,t.crashed,e.text??``):G()&&(t?.kind===`server`||t?.kind===`timer`)?K():t&&t.kind!==`boss`?U(e,Oe(t),t.body,t.kind===`link`?{raw:t.raw}:{crashed:t.crashed}):U(e,[We[e.type??``]?.()??e.type??me(),` `,e.from&&ee(e.from)||(e.from??``)],e.text??``)}case`divider`:return e.type===`chapter`?f(`article`,{class:`tx rule chapter`},f(`p`,null,ce({date:e.at?new Date(e.at).toLocaleDateString(t(),{year:`numeric`,month:`short`,day:`numeric`}):``,why:Be(e.code,e.text)}))):f(`article`,{class:`tx rule`},f(`details`,null,f(`summary`,null,e.type===`compaction`?ae({tokens:(e.tokens??0).toLocaleString()}):ne()),f(`pre`,null,e.text??``)));default:return f(`article`,{class:`tx note`},e.text??``,` `,V(e))}}function J(e){e.rebuild&&(g.clear(),y.replaceChildren());for(let t of e.dropped)g.get(t)?.remove(),g.delete(t);let t=e.added.map(e=>(g.set(e.id,q(e)),g.get(e.id)));e.front?y.prepend(...t):y.append(...t),O&&!e.front&&!e.rebuild&&t.forEach(e=>(e.classList.add(`fresh`),e.dataset.born=String(Date.now()))),w.remove();let n=p().service;w.textContent=n?.state===`standing`&&!n.run?Pe():pe(),h.items.length||y.append(w),b.hidden=!h.before,Ke()}let Y=[],Z=new Map;function Ke(){let t=new Set;for(let n of Y){let r=Date.parse(n.startedAt),i=h.items.findIndex(e=>e.at!==void 0&&Date.parse(e.at)>=r);if(i===0&&h.before)continue;let a=i<0?``:h.items[i].id,o=JSON.stringify([a,e(n)]),s=Z.get(n.id);if(t.add(n.id),s&&s.sig===o&&s.el.isConnected)continue;s?.el.remove();let c=e(n),l=f(`article`,{class:`tx rule conv-rule`},f(`div`,null,f(`b`,null,c.title),c.ended?f(`small`,null,c.ended):null));Z.set(n.id,{el:l,sig:o});let u=a?g.get(a):void 0;u?u.before(l):y.append(l)}for(let[e,n]of Z)t.has(e)||(n.el.remove(),Z.delete(e))}let qe=e=>e.touched.forEach(e=>{let t=g.get(e),n=h.items.find(t=>t.id===e);if(t&&n){let r=q(n);t.classList.contains(`fresh`)&&Date.now()-Number(t.dataset.born??0)<400&&r.classList.add(`fresh`),t.replaceWith(r),g.set(e,r)}}),Je=async()=>{if(!D&&h.before&&O){D=!0;try{let e=T.scrollHeight,t=h.prepend(await d.older(h.before));J(t),qe(t),T.scrollTop+=T.scrollHeight-e}finally{D=!1}h.before&&T.clientHeight&&b.getBoundingClientRect().bottom>=T.getBoundingClientRect().top&&Je()}};C.addEventListener(`click`,()=>{k=void 0,h.detached?d.latest().then(e=>(J(h.reset(e)),L())):L()});let Q=[new IntersectionObserver(e=>e.some(e=>e.isIntersecting)&&void Je(),{root:T}),new IntersectionObserver(e=>T.clientHeight&&(E.scrolled(e.at(-1).isIntersecting),I()),{root:T,rootMargin:`0px 0px 67px`})],$,Ye=()=>($??(Q[0].observe(b),Q[1].observe(S)),clearTimeout($),$=setTimeout(()=>($=void 0,Q.forEach(e=>e.disconnect())),600));T.addEventListener(`scroll`,()=>(Ye(),!M&&N!==void 0&&F()),{passive:!0}),T.addEventListener(`touchstart`,()=>(M=!0,clearTimeout(N),N=void 0),{passive:!0});for(let e of[`touchend`,`touchcancel`])T.addEventListener(e,()=>(M=!1,F()),{passive:!0});for(let e of[`wheel`,`touchstart`,`pointerdown`,`keydown`])T.addEventListener(e,()=>A=k=void 0,{passive:!0});let Xe=new ResizeObserver(()=>P()?void 0:E.pinned&&!h.detached?T.scrollTop=T.scrollHeight:A?.scrollIntoView({block:`center`}));return Xe.observe(y),Xe.observe(T),{log:T,docs:v,runs(e){JSON.stringify(e)!==JSON.stringify(Y)&&(Y=e,Ke())},apply(e){if(e.reset)J(h.reset({items:e.items??[],before:e.before})),O=!0,R();else if(e.items?.length){let t=h.append(e.items);J(t),qe(t),E.arrived(t.added.length)&&!h.detached&&!P()?L():I()}},reveal(e){k=e,O&&R()},setLive(e,t){x.dataset.mark=t,x.lastChild?.textContent!==e&&x.replaceChildren(...e?[f(`b`,{class:`badge`}),f(`span`,null,e)]:[])}}}export{Z as mountChat,le as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./towermodel-BPfyRLG9.js";import{t as e}from"./runtime-ZX6HkxDa.js";import{t}from"./open_main_title-Ccbha5pD.js";import{n,t as r}from"./unit_count-ChCYY7Ph.js";import{D as i,E as a,M as o,N as s,O as c,P as l,Rt as u,T as d,Z as f,g as p,h as m,i as h,lt as g,m as _,s as ee,w as v,x as y,y as b,zt as x}from"./index-FlE0Rl1G.js";var te=((t={},n={})=>(n.locale??e())===`zh-TW`?`關閉清單`:`Close the list`),S=((t={},n={})=>(n.locale??e())===`zh-TW`?`切換到其他單位`:`Switch to a unit`),ne=((t={},n={})=>(n.locale??e())===`zh-TW`?`回到主地圖`:`Back to the map`),C=((t={},n={})=>(n.locale??e())===`zh-TW`?`所有單位`:`All units`),w=((t={},n={})=>(n.locale??e())===`zh-TW`?`指揮中`:`commanding`),T=((t={},n={})=>(n.locale??e())===`zh-TW`?`已結束`:`ended`),E=((t={},n={})=>(n.locale??e())===`zh-TW`?`錯誤`:`error`),D=((t={},n={})=>(n.locale??e())===`zh-TW`?`閒置`:`idle`),O=((t={},n={})=>(n.locale??e())===`zh-TW`?`無狀態`:`unknown`),k=((t={},n={})=>(n.locale??e())===`zh-TW`?`等待`:`waiting`),A=((t={},n={})=>(n.locale??e())===`zh-TW`?`工作中`:`working`),j=.4;function M(e,t,n){let[r,i]=[Math.abs(e),Math.abs(t)];return Math.max(r,i)<10?`wait`:r>=1.7*i&&(n?e<0:e>0)?`drag`:`pass`}var N=(e,t,n)=>Math.abs(n)>=.45?n>0:e>=t*j,P=(e,t)=>t||e.some(e=>e.editable||e.sink||e.scrollsX||[`input`,`textarea`,`select`].includes(e.tag));function F(e){let t=e,n=getComputedStyle(e).overflowX;return{tag:e.tagName.toLowerCase(),editable:t.isContentEditable,sink:e.matches(`.composer, .term-sink`),scrollsX:(n===`auto`||n===`scroll`)&&e.scrollWidth>e.clientWidth+1}}var I=e=>{let t=[];for(let n=e;n;n=n.parentElement)t.push(F(n));return t},L={working:A,waiting:k,idle:D,done:T,error:E,unknown:O,commanding:w},R=(e,t,n)=>(t?T:L[e])({},n&&{locale:n}),z=(e,t)=>t.flatMap(t=>[t,...t.subs.map(e=>({...e,sub:!0}))].map(t=>({id:t.key,key:t.key,ws:e,name:t.name,role:t.role,mark:t.mark,note:t.note,ended:!!t.ended,sub:`sub`in t,control:!!t.control})));function B(e){return e.bases.flatMap(e=>{let t=[{id:`tower`,rows:e.tower?z(e.id,[{...e.tower,role:`tower`}]):[]},...e.tabs.map(t=>({id:t.id,label:g({label:t.label}),rows:z(e.id,t.units)})),{id:`outside`,label:n(),rows:z(e.id,e.outside)}].filter(e=>e.rows.length);return t.length?[{id:e.id,label:e.label,mark:e.mark,groups:t}]:[]})}var V=(e,t)=>e?.head?{mark:e.head.mark,word:e.head.state===`absent`?x({},t&&{locale:t}):R(e.head.mark,!1,t)}:void 0,H=e=>e.role===`main`&&e.mark===`idle`,U=e=>e.reduce((e,t)=>(t.sub?e.at(-1)?.subs.push(t):e.push({...t,subs:[]}),e),[]),W=()=>y(`<div class="unit"><div class="card"><a class="hit"></a>${_}<div class="meta"><span class="name"></span><span class="line"><em class="role"></em><b class="dstate"></b><span class="note"></span></span></div><button type="button" class="quit-btn" data-close="unit" hidden></button></div><div class="subs"></div></div>`),G=()=>y(`<div class="unit tower-row"><div class="trow"><a class="tower-go">${_}<span class="meta"><span class="name"></span><span class="line"><em class="role"></em><b class="dstate"></b></span></span></a><button type="button" class="pair-btn tower-add"></button></div><div class="subs"></div></div>`),K=()=>y(`<section class="dbase"><h3><a></a><small></small></h3><div class="dgroups"></div></section>`),q=()=>y(`<div class="dgroup"><h4></h4><div class="drows"></div></div>`),J=()=>matchMedia(`(max-width: 640px)`).matches;function Y(e=()=>!1){let n=f(`div`,{class:`drawer-body`}),g=f(`button`,{type:`button`,class:`x`,"aria-label":te()},`×`),_=f(`a`,{class:`drawer-map`},ne()),x=f(`button`,{type:`button`,class:`pair-btn`,"data-close":`dismiss-all`,hidden:``}),w=f(`div`,{class:`drawer-sweep`,hidden:``},x);m(_,{view:`map`});let T=y(`<a class="drawer-head"><svg viewBox="0 0 512 512" aria-hidden="true"><use href="#i-crown"/></svg><span class="name"></span><b class="dstate"></b></a>`);T.hidden=!0,m(T,{view:`head`});let E=f(`aside`,{class:`drawer`,"aria-label":S()},f(`header`,null,f(`b`,null,C()),g),T,n,f(`footer`,{class:`drawer-foot`},w,_)),D=f(`div`,{class:`drawer-veil`});document.body.append(D,E);let O,k,A=!1,j=!1,F=0,L=0,z,Y=()=>{let e=V(O);T.hidden=!e,e&&(v(T,e.mark),c(T,`.name`,u()),c(T,`.dstate`,e.word),T.classList.toggle(`current`,A),T.toggleAttribute(`data-news`,h(O?.head,ee())&&!A)),l(x,O??{bases:[]}),w.hidden=x.hidden;let s=(e,t)=>{m(e.querySelector(`.hit`),{view:`session`,ws:t.ws,key:t.key}),e.querySelector(`.hit`).setAttribute(`aria-label`,`${t.name}: ${R(t.mark,t.ended)}`),e.classList.toggle(`current`,t.key===k),e.toggleAttribute(`data-dismiss`,t.role===`subagent`&&t.ended),e.dataset.key=t.key,v(e,t.mark),b(e.querySelector(`.plate`),t.role,t.mark),c(e,`.name`,t.name),c(e,`.role`,d(t.role)),c(e,`.dstate`,R(t.mark,t.ended)),a(e,`.note`,t.note,t.mark,t.note?void 0:``);let n=e.querySelector(`:scope > .card > .quit-btn`);H(t)?o(n,t):n.hidden=!0,i(e.querySelector(`.subs`),t.subs??[],W,s)},f=(e,n)=>{let r=e.querySelector(`.tower-go`),a=e.querySelector(`.tower-add`),o=O?.bases.find(e=>e.id===n.ws);m(r,{view:`session`,ws:n.ws,key:n.key}),r.setAttribute(`aria-label`,`${n.name}: ${R(n.mark,n.ended)}`),e.classList.toggle(`current`,n.key===k),e.dataset.key=n.key,v(e,n.mark),b(r.querySelector(`.plate`),`tower`,n.mark),c(r,`.name`,n.name),c(r,`.role`,d(`tower`)),c(r,`.dstate`,R(n.mark,n.ended)),a.hidden=!o,o&&(p(a,o),a.setAttribute(`aria-label`,t({base:o.label}))),i(e.querySelector(`.subs`),n.subs,W,s)};i(n,B(O??{bases:[]}),K,(e,t)=>{v(e,t.mark),c(e,`h3 a`,t.label),m(e.querySelector(`h3 a`),{view:`workspace`,ws:t.id}),c(e,`small`,r({count:t.groups.reduce((e,t)=>e+t.rows.length,0)})),i(e.querySelector(`.dgroups`),t.groups,q,(e,t)=>{c(e,`h4`,t.label??``),e.querySelector(`h4`).toggleAttribute(`hidden`,!t.label),t.id===`tower`?i(e.querySelector(`.drows`),U(t.rows),G,f):i(e.querySelector(`.drows`),U(t.rows),W,s)})})},X=e=>{F=Math.max(0,Math.min(L,e)),E.style.setProperty(`--dx`,`${F}px`),D.style.opacity=String(L?F/L:0),D.style.pointerEvents=F>0?`auto`:`none`},Z=e=>{j=e,E.classList.toggle(`on`,e),E.inert=!e,document.documentElement.classList.remove(`drawer-drag`),X(e?L:0)},Q=()=>{L=E.offsetWidth,Y(),E.classList.add(`on`),document.documentElement.classList.add(`drawer-drag`)};E.inert=!0,document.addEventListener(`touchstart`,t=>{let n=t.target,r=E.contains(n)||n===D;if(z=void 0,!J()||e()||t.touches.length!==1||document.querySelector(`dialog.sheet[open], dialog.lightbox[open], [popover]:popover-open`)||(j?!r:P(I(n),!!getSelection()?.toString())))return;let i=t.touches[0],a=j?n.closest(`.unit[data-dismiss] > .card`)??void 0:void 0;z={x0:i.clientX,y0:i.clientY,mode:`wait`,was:j,base:F,last:i.clientX,at:performance.now(),v:0,card:a}},{passive:!0}),document.addEventListener(`touchmove`,e=>{if(!z||z.mode===`pass`)return;let t=e.touches[0],n=t.clientX-z.x0,r=t.clientY-z.y0;if(z.mode===`wait`){let e=M(n,r,z.was);if(e===`wait`)return;if(e===`pass`&&z.card&&M(n,r,!1)===`drag`)z.mode=`card`,z.card.classList.add(`swiping`);else if(e===`pass`)return void(z.mode=`pass`);else z.mode=`drag`,Q()}e.preventDefault();let i=performance.now();if(z.v=(t.clientX-z.last)/Math.max(1,i-z.at),[z.last,z.at]=[t.clientX,i],z.mode!==`card`)return X(z.base+n);let a=Math.max(0,n);z.card.style.setProperty(`--sx`,`${a}px`),z.card.style.setProperty(`--so`,String(1-a/z.card.offsetWidth))},{passive:!1});let re=(e,t)=>{e.classList.remove(`swiping`),e.style.removeProperty(`--sx`),e.style.removeProperty(`--so`),t&&(e.classList.add(`gone`),s({key:e.parentElement.dataset.key}).then(t=>t||e.classList.remove(`gone`)))},$=e=>{let t=z;z=void 0,t?.mode===`drag`&&Z(N(F,L,t.v)),t?.mode===`card`&&re(t.card,e.type===`touchend`&&N(Math.max(0,t.last-t.x0),t.card.offsetWidth,t.v))};return document.addEventListener(`touchend`,$),document.addEventListener(`touchcancel`,$),D.addEventListener(`click`,()=>Z(!1)),E.addEventListener(`click`,e=>e.target.closest(`a[data-route], button[data-open], .x`)&&Z(!1)),document.addEventListener(`keydown`,e=>j&&e.key===`Escape`&&(e.preventDefault(),Z(!1)),!0),document.addEventListener(`sb-drawer`,()=>(j||Q(),Z(!j))),{net(e){O=e,j&&Y()},route(e){k=e.view===`session`?e.key:void 0,A=e.view===`head`||e.view===`session`&&e.ws===`@head`,_.toggleAttribute(`aria-current`,e.view===`map`),j&&Y()}}}export{Y as mountDrawer};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--bg:#16161e;--bg-2:#1a1b26;--surface-0:#1f2335;--surface-1:#24283b;--raised:#1f2335;--sunken:#16161e;--well:#16161e8c;--panel:#1f2335eb;--plate:#1a1b26;--plate-hi:#292e42;--term-bg:#16161e;--term-fg:#c0caf5;--line-c:#737aa2;--line:#737aa242;--hi:#fff;--shadow:#08080d;--text:#c0caf5;--dim:#868dba;--ink:#16161e;--accent:#7dcfff;--accent-hi:#b4e4ff;--working:#7dcfff;--gold:#e0af68;--amber:#ff9e64;--ok:#9ece6a;--err:#f7768e;--err-soft:#ff9fb0;--violet:#bb9af7;--idle:#737aa2;--unknown:#545c7e;--paper-hi:#f6e6b8;--paper:#d8bd78;--paper-ink:#3b2a06;--paper-edge:#8a6f33;--aura-1:color-mix(in srgb, var(--accent) 7%, transparent);--aura-2:color-mix(in srgb, var(--violet) 8%, transparent);--grid:linear-gradient(color-mix(in srgb, var(--line-c) 5%, transparent) 1px, transparent 1px) 0 0 / 44px 44px, linear-gradient(90deg, color-mix(in srgb, var(--line-c) 5%, transparent) 1px, transparent 1px) 0 0 / 44px 44px;--mono:ui-monospace, "SF Mono", Menlo, Consolas, monospace;--sans:ui-rounded, "Avenir Next", "Trebuchet MS", system-ui, -apple-system, "Segoe UI", sans-serif}*{box-sizing:border-box;margin:0}html{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;-webkit-font-smoothing:antialiased;scrollbar-color:color-mix(in srgb, var(--line-c) 45%, transparent) transparent}::selection{background:color-mix(in srgb, var(--accent) 28%, transparent)}body{min-height:100vh;color:var(--text);font:14px/1.4 var(--sans);background:radial-gradient(1100px 640px at 12% -10%, var(--aura-1), transparent 62%), radial-gradient(900px 600px at 98% 8%, var(--aura-2), transparent 60%), linear-gradient(var(--bg), var(--bg-2));background-attachment:fixed}svg{display:block}[data-mark=working]{--c:var(--working)}[data-mark=waiting]{--c:var(--amber)}[data-mark=idle]{--c:var(--idle)}[data-mark=done]{--c:var(--ok)}[data-mark=error]{--c:var(--err)}[data-mark=unknown]{--c:var(--unknown)}[data-mark=commanding]{--c:var(--violet)}[data-mark]{--c1:color-mix(in srgb, var(--c) 13%, transparent);--c4:color-mix(in srgb, var(--c) 45%, transparent)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.shell{max-width:2200px;margin:0 auto;padding:14px 20px 32px}.hud{border:1px solid var(--line);background:var(--panel);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:5;border-radius:16px;flex-wrap:wrap;align-items:center;gap:8px 12px;padding:8px 12px;display:flex;position:sticky;top:8px}.brand{align-items:center;gap:12px;margin-right:8px;display:flex}.logo{width:36px;height:36px;color:var(--accent);background:radial-gradient(circle at 30% 25%, color-mix(in srgb, var(--accent) 30%, transparent), color-mix(in srgb, var(--bg-2) 90%, transparent));border:1px solid var(--line);border-radius:11px;place-items:center;display:grid}.logo svg{width:24px;height:24px;filter:drop-shadow(0 0 5px color-mix(in srgb, var(--accent) 70%, transparent))}.brand h1{letter-spacing:.14em;text-transform:uppercase;white-space:nowrap;font-size:17px}.brand p{color:var(--dim);font-size:12px}.stats{background:color-mix(in srgb, var(--hi) 4%, transparent);border:1px solid color-mix(in srgb, var(--hi) 6%, transparent);border-radius:13px;gap:2px;padding:2px;display:flex}.stats div,.tally div,.alerts{background:color-mix(in srgb, var(--hi) 4%, transparent);border:1px solid color-mix(in srgb, var(--hi) 6%, transparent);border-radius:12px;min-width:0;padding:4px 10px}.stats dt,.tally dt{color:var(--dim);letter-spacing:.08em;text-transform:uppercase;font-size:10px}.stats dd,.tally dd{font:600 17px/1.15 var(--mono);font-variant-numeric:tabular-nums}.stats div{background:0 0;border-color:#0000;border-radius:10px;min-width:4.5em;padding:3px 10px}.tally dd{font-size:20px}.stats [data-mark] dd,.tally [data-mark] dd,.count b{color:var(--c)}.pair-btn{white-space:nowrap;border:1px solid var(--line);color:var(--dim);font:600 12px var(--sans);letter-spacing:.08em;text-transform:uppercase;cursor:pointer;background:0 0;border-radius:12px;padding:6px 10px}a.pair-btn{justify-content:center;align-items:center;text-decoration:none;display:inline-flex}.tog{align-items:center;gap:6px;display:inline-flex}.tog:before{content:"";background:var(--line);border-radius:50%;flex:none;width:7px;height:7px}.tog[data-state=on]{color:var(--text);border-color:color-mix(in srgb, var(--accent) 35%, var(--bg))}.tog[data-state=on]:before{background:var(--accent);box-shadow:0 0 6px var(--accent)}.tog[data-state=ask]:before{background:var(--gold)}.tog[data-state=blocked]:before{background:var(--err)}.tog[data-state=done]{color:var(--text)}.tog[data-state=done]:before{background:var(--ok);box-shadow:0 0 6px var(--ok)}.tog[data-state=error]{color:color-mix(in srgb, var(--err-soft) 45%, var(--hi))}.tog[data-state=error]:before{background:var(--err);box-shadow:0 0 6px var(--err)}.alert-row{align-items:center;gap:10px;min-width:0;display:flex}.done-btn{white-space:nowrap;flex:none}.prefs-btn{place-items:center;width:34px;height:34px;margin-left:auto;padding:0;text-decoration:none;display:grid}.prefs-btn svg{fill:currentColor;width:18px;height:18px}.zen-back{display:none}html[data-zen-away][data-view=standard] .zen-back:not([hidden]){display:inline-block}body[data-route=settings] .zen-back{display:none!important}html[data-view=zen],html[data-view=zen] body{color:#ebe3d3;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;overscroll-behavior:none;background:#14110e}html[data-view=zen] :is(.shell,.dock),#zen[hidden]{display:none}html[data-view=zen] #zen:empty:not([hidden]){place-items:center;display:grid;position:fixed;inset:0}html[data-view=zen] #zen:empty:not([hidden]):after{content:"";aspect-ratio:1;box-sizing:border-box;opacity:.55;background:radial-gradient(circle,#96887424,#0000 70%);border:1px solid #857a6b;border-radius:50%;width:min(48vmin,320px);animation:10s infinite zen-breath;transform:scale(.72)}[data-view=zen][data-calm] #zen:empty:not([hidden]):after{animation:none}@keyframes zen-breath{0%{opacity:.55;animation-timing-function:ease-in-out;transform:scale(.72)}40%{opacity:1;animation-timing-function:ease-in-out;transform:scale(1)}to{opacity:.55;transform:scale(.72)}}.prefs-btn:hover,.prefs-btn[aria-current]{color:var(--text)}body:has(#remind[data-state=blocked]) .prefs-btn{color:var(--err-soft)}.menu,.menu-pop{display:contents}.menu-btn{display:none}.hud-pop{border:1px solid var(--line);background:var(--raised);color:var(--text);font:13px/1.4 var(--sans);box-shadow:0 12px 32px color-mix(in srgb, var(--shadow) 60%, transparent);border-radius:14px;margin:0;padding:12px;position:fixed;inset:auto}.done-pop{width:min(340px,100vw - 16px)}.done-pop ul{gap:2px;max-height:50vh;margin:0 0 10px;padding:0;list-style:none;display:grid;overflow:auto}.done-go{color:inherit;border-radius:10px;align-items:center;gap:10px;padding:6px 8px;text-decoration:none;display:flex}.done-go:hover,.done-go:focus-visible{background:color-mix(in srgb, var(--hi) 6%, transparent)}.done-go .plate{--s:30px;flex:none}.done-go .badge{display:none}.done-go span{min-width:0;display:grid}.done-go .name{font-weight:600}.done-go .name,.done-go small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.done-go small{color:var(--dim)}#done-clear{width:100%}.view-pick{gap:6px;display:grid}.view-pick>span{color:var(--text);font-size:14px}.view-pick>div{gap:4px;display:flex}.view-pick button{text-align:center;text-transform:none;letter-spacing:0;flex:1 1 0;justify-content:center;padding-inline:4px}.view-pick>div{flex-wrap:wrap}.view-pick[data-following] button[data-choice=auto]{flex-basis:100%}.view-pick button[aria-pressed=true]{color:var(--text);border-color:var(--accent);background:color-mix(in srgb, var(--accent) 22%, transparent);font-weight:700}.lang{text-transform:none}.lang option{background:var(--bg);color:var(--text)}.pair{text-align:center;color:var(--dim);justify-items:center;gap:12px;font-size:13px;display:grid}.pair-code{color:var(--text);font:600 22px var(--mono);letter-spacing:.12em;-webkit-user-select:all;user-select:all}.qr{shape-rendering:crispedges;border-radius:12px;width:min(100%,300px)}.devices{text-align:left;border-top:1px solid var(--line);gap:8px;width:100%;padding-top:12px;display:grid}.devices h4{font:600 12px var(--sans);letter-spacing:.08em;text-transform:uppercase;margin:0}.devices ul{gap:6px;margin:0;padding:0;list-style:none;display:grid}.devices li{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:2px 10px;display:grid}.devices li small{overflow-wrap:anywhere;grid-column:1/-1}.devices li b{color:var(--text);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.devices-head{justify-content:space-between;align-items:center;gap:10px;display:flex}.server-facts{grid-template-columns:max-content minmax(0,1fr);gap:6px 16px;margin:0 0 12px;display:grid}.server-facts dt{color:var(--dim);letter-spacing:.08em;text-transform:uppercase;font-size:11px}.server-facts dd{overflow-wrap:anywhere;min-width:0;margin:0}:where(input:not([type=checkbox],[type=radio],[type=range],[type=file],[type=hidden],[type=color]),select){box-sizing:border-box;border:1px solid var(--line);background:var(--surface-0);color:var(--text);font:14px var(--sans);border-radius:8px;padding:6px 10px}:where(input,select):focus-visible{outline:2px solid var(--accent);outline-offset:1px}:where(input,select):disabled{opacity:.5}.devices-acts{flex-wrap:wrap;gap:8px;display:flex}.devices small,.devices .chat-empty{color:var(--dim)}.pair-tabs{flex-wrap:wrap;justify-content:center;gap:6px;display:flex}.pair-tabs .later.on,.pair-tabs .later[aria-selected=true]{color:var(--text);border-color:var(--accent);background:color-mix(in srgb, var(--accent) 22%, transparent);font-weight:700}.pair .lan{text-align:left;justify-items:start;gap:10px;width:100%;display:grid}.lan p,.lan h4,.lan ul{margin:0}.lan h4{color:var(--text);font:600 13px var(--sans)}.lan>*,.lan-main,.lan-board,.lan-pair{min-width:0;max-width:100%}.lan-main,.lan-board,.lan-pair{justify-items:start;gap:10px;width:100%;display:grid}.lan button,.lan a.go{text-transform:none}#lan-wait{text-transform:none;letter-spacing:normal;white-space:normal;text-align:left;flex:100%}.alert-row:has(#lan-wait:not([hidden])){flex-wrap:wrap}.lan .go{--c:var(--accent);text-align:left;white-space:normal;border:0}.lan .pair-btn{white-space:normal;text-align:left;max-width:100%}.lan .qr{justify-self:center}.lan-pair{text-align:center;justify-items:center}.lan-pair .devices-acts{justify-content:center}.lan code{overflow-wrap:anywhere}.lan-risk{color:var(--gold)}.lan details{max-width:100%}.lan summary{cursor:pointer;color:var(--text)}.lan details p{margin-top:6px}.lan-board{border:1px solid var(--gold);background:color-mix(in srgb, var(--gold) 6%, transparent);border-radius:12px;padding:10px}.lan-board:not([hidden]){display:grid}.lan-rows{gap:8px;width:100%;padding:0;list-style:none;display:grid}.lan-rows li{color:var(--text);justify-content:space-between;align-items:center;gap:10px;display:flex}.lan-rows li>button{white-space:nowrap;flex:none}.lan-rows li span{overflow-wrap:anywhere;min-width:0}.lan-ask{gap:6px;width:100%;display:grid}.lan-ask label{color:var(--text)}.lan-ask-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.lan-number{border:1px solid var(--line);background:var(--sunken);width:7ch;color:var(--text);font:600 20px var(--mono);letter-spacing:.2em;text-align:center;border-radius:10px;padding:7px 10px}.lan-no{color:var(--err-soft)}.lan-no:empty{display:none}.lan-note{gap:4px;display:grid}.lan-note:empty{display:none}.lan-info{color:var(--gold)}.lan-news li{color:var(--dim)}.lan-news{gap:4px;padding:0;list-style:none;display:grid}.lan-news:empty{display:none}.lan-fp{letter-spacing:.04em;-webkit-user-select:all;user-select:all;font-size:15px}.lan-fps{gap:6px;padding-left:18px;display:grid}.lan-hint{color:var(--dim);font-size:12px}.lan hr{border:0;border-top:1px solid var(--line);width:100%;margin:2px 0}.lan{overflow-wrap:anywhere}.lan-fps,.lan,.lan-main,.lan-board,.lan-pair,.pair,.devices{grid-template-columns:minmax(0,1fr)}.spawn-btns{flex-wrap:wrap;gap:8px;margin:12px 0 4px;display:flex}.base>.spawn-btns{margin:-4px 0 12px}.tab h3>span:not(.menu),.squad h3>b{white-space:nowrap;text-overflow:ellipsis;flex:0 auto;min-width:0;overflow:hidden}.tab h3>button{flex:none}.tab h3>span:not(.menu){flex-grow:1}.tab-add{white-space:nowrap;border:1px solid var(--line);color:var(--dim);font:600 11px var(--sans);letter-spacing:.08em;cursor:pointer;background:0 0;border-radius:10px;flex:none;margin-left:auto;padding:2px 8px}.squad .tab-add{margin-left:0}.tab-add:hover,.new-base:hover{color:var(--accent);border-color:var(--accent)}.quit-btn{border:1px solid var(--line);color:var(--dim);font:600 12px var(--sans);cursor:pointer;background:0 0;border-radius:8px;flex:none;margin-left:6px;padding:2px 9px}.quit-btn:hover{color:var(--err-soft);border-color:color-mix(in srgb, var(--err-soft) 40%, transparent)}.base>header .menu-pop>.quit-btn{align-self:flex-start;margin-left:auto}@media (hover:hover) and (pointer:fine){:is(.card>.quit-btn,.tab h3 .menu-pop>.quit-btn,.base>header .menu-pop>.quit-btn,.tower-quit){opacity:0;transition:opacity .15s}:is(.card:hover,.card:focus-within)>.quit-btn,:is(.tab h3:hover,.tab h3:focus-within) .menu-pop>.quit-btn,:is(.base>header:hover,.base>header:focus-within) :is(.quit-btn,.tower-quit){opacity:1}}#stashed-list li{align-items:center;gap:8px;display:flex}#stashed-list span{overflow-wrap:anywhere;flex:1}.card>.quit-btn{margin-left:auto}.card>.quit-btn,.base>header .menu-pop>.quit-btn,.base>header .menu-btn,.tower-quit{z-index:2;position:relative}.tower-quit{margin:6px 0 0}.sheet{border:1px solid var(--line);background:var(--raised);max-width:min(420px,100vw - 32px);color:var(--text);font:14px/1.5 var(--sans);border-radius:16px;margin:auto;padding:18px 20px}.sheet::backdrop{background:color-mix(in srgb, var(--shadow) 60%, transparent)}.sheet p{margin:0 0 14px}.sheet-row{justify-content:flex-end;gap:10px;display:flex}.sheet .later{cursor:pointer;border-radius:10px;padding:6px 14px}.sheet-yes{background:var(--err-soft);color:var(--ink);font:600 13px var(--sans);cursor:pointer;border:0;border-radius:10px;padding:6px 14px}.modes{flex:none;gap:4px;display:flex}.modes button{white-space:nowrap;border:1px solid var(--line);color:var(--dim);font:600 12px var(--sans);cursor:pointer;background:0 0;border-radius:999px;padding:4px 14px}.modes button[aria-pressed=true]{border-color:var(--accent);color:var(--accent);background:color-mix(in srgb, var(--accent) 8%, transparent)}.term-root{min-height:0;padding:10px 16px 14px}.term-root .term-tile{height:100%}.pics{flex-wrap:wrap;align-items:flex-start;gap:6px;margin-top:8px;display:flex}.pic{border:1px solid var(--line);background:var(--plate);cursor:zoom-in;border-radius:8px;max-width:100%;padding:0;line-height:0;overflow:hidden}.pic img{max-width:240px;max-height:180px;display:block}.pic-gone{color:var(--dim);font-size:12px}.lightbox{background:color-mix(in srgb, var(--bg) 94%, transparent);border:0;width:100vw;max-width:none;height:100dvh;max-height:none;margin:0;padding:0;overflow:auto}.lightbox[open]{place-items:center;display:grid}.lightbox::backdrop{background:0 0}.lightbox img{object-fit:contain;cursor:zoom-in;max-width:94vw;max-height:88dvh}.lightbox.zoom[open]{place-items:start}.lightbox.zoom img{cursor:zoom-out;max-width:none;max-height:none}.lightbox button{border:1px solid var(--line);background:var(--panel);width:44px;height:44px;color:var(--text);border-radius:50%;place-items:center;font-size:26px;line-height:1;display:grid;position:fixed}.lb-close{top:14px;right:14px}.lb-prev,.lb-next{top:calc(50% - 22px)}.lb-prev{left:14px}.lb-next{right:14px}.lb-count{color:var(--dim);font:13px var(--mono);position:fixed;bottom:14px;left:50%;transform:translate(-50%)}.queue-list{justify-items:end;gap:4px;margin:0 16px 6px;display:grid}.queue-list p{border:1px dashed color-mix(in srgb, var(--accent) 45%, transparent);max-width:min(80%,640px);color:var(--dim);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:12px;margin:0;padding:6px 12px;font-size:14px;line-height:1.45}.queue-list p>span{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.queue-list p[role=button]{cursor:pointer}.queue-list p[role=button]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.queue-list p[data-open]>span{display:block;overflow:visible}.queue-list b{color:var(--accent);letter-spacing:.06em;white-space:nowrap;margin-right:8px;font-size:11px;font-weight:600}.queue-act{color:var(--dim);flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:4px 10px;margin:0 16px 6px;font-size:12px;line-height:1.4;display:flex}.queue-act[hidden],.queue-bar,.in-term .queue-list,.in-term .queue-act,.in-term .queue-bar{display:none}.todos{border:1px solid var(--line);background:var(--panel);border-radius:12px;margin:0 16px;padding:6px 12px;font-size:13px}.todos summary{cursor:pointer;align-items:baseline;gap:10px;min-width:0;list-style:none;display:flex}.todos summary::-webkit-details-marker{display:none}.todos summary b{color:var(--violet);flex:none;font-weight:600}.todos summary span{min-width:0;color:var(--dim);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.todos summary:after{content:"▸";color:var(--dim);margin-left:auto}.todos[open] summary:after{content:"▾"}.todos ol{gap:3px;max-height:30vh;margin:6px 0 2px;padding:0;list-style:none;display:grid;overflow-y:auto}.todos li{font:13px/1.5 var(--sans);margin:0}.todos li:before{content:"○";width:1.4em;color:var(--dim);display:inline-block}.todos li.in_progress{color:var(--accent)}.todos li.in_progress:before{content:"◐"}.todos li.completed{color:var(--dim);text-decoration:line-through}.todos li.completed:before{content:"✓";color:var(--ok)}.in-term .todos,.in-term .monitors{display:none}.monitors{border:1px solid var(--line);background:var(--panel);border-radius:12px;margin:6px 16px 0;padding:6px 12px;font-size:13px}.monitors summary{cursor:pointer;align-items:baseline;gap:10px;min-width:0;list-style:none;display:flex}.monitors summary::-webkit-details-marker{display:none}.monitors summary b{color:var(--accent);flex:none;font-weight:600}.monitors[data-failed=true] summary b{color:var(--err)}.monitors summary span{min-width:0;color:var(--dim);font:12px var(--mono);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.monitors summary:after{content:"▸";color:var(--dim);margin-left:auto}.monitors[open] summary:after{content:"▾"}.monitors ul{gap:6px;max-height:30vh;margin:6px 0 2px;padding:0;list-style:none;display:grid;overflow-y:auto}.monitors li{text-indent:-1.4em;gap:1px;padding-left:1.4em;display:grid}.monitors li b{overflow-wrap:anywhere;font-weight:500}.monitors li b:before{content:"◐";text-indent:0;width:1.4em;color:var(--accent);display:inline-block}.monitors li.done b:before{content:"✓";color:var(--ok)}.monitors li.stopped b:before{content:"■";color:var(--dim)}.monitors li.error b:before,.monitors li.stale b:before{content:"!";color:var(--err)}.monitors li.error small,.monitors li.stale small{color:var(--err)}.monitors li small{color:var(--dim);text-indent:0}.monitors li code{color:var(--dim);font:12px var(--mono);text-indent:0;overflow-wrap:anywhere}.new-base{border:1px dashed var(--line);min-height:96px;color:var(--dim);font:600 14px var(--sans);letter-spacing:.08em;cursor:pointer;background:0 0;border-radius:18px}.spawn .go{--c:var(--accent);border:0}.spawn{color:var(--dim);gap:10px;font-size:13px;display:grid}.spawn-at{flex-wrap:wrap;align-items:center;gap:8px;margin:0;display:flex}.spawn-path{color:var(--text);overflow-wrap:anywhere}.spawn textarea,.spawn input{box-sizing:border-box;border:1px solid var(--line);width:100%;color:var(--text);font:14px var(--sans);background:0 0;border-radius:8px;padding:8px 10px}.picker{gap:8px;min-width:0;display:grid}.picker-bar{align-items:center;gap:6px;min-width:0;display:flex}.picker-bar .later{font:13px var(--sans);cursor:pointer;border-radius:8px;flex:none;padding:4px 10px}.picker-bar .later:disabled{opacity:.4;cursor:default}.picker-crumbs{scrollbar-width:none;white-space:nowrap;flex:1;align-items:center;min-width:0;display:flex;overflow-x:auto}.picker-crumbs::-webkit-scrollbar{display:none}.picker-crumbs button{text-overflow:ellipsis;max-width:14em;color:var(--dim);font:13px var(--sans);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;padding:3px 6px;overflow:hidden}.picker-crumbs button:hover{color:var(--text);background:color-mix(in srgb, var(--accent) 8%, transparent)}.picker-crumbs button+button:before{content:"›";color:var(--dim);margin-right:6px}.picker-crumbs button[aria-current=true]{color:var(--text);font-weight:600}.picker input{box-sizing:border-box}.picker-body{border:1px solid var(--line);border-radius:10px;grid-template-columns:minmax(90px,130px) minmax(0,1fr);min-width:0;height:min(40vh,280px);min-height:170px;display:grid;overflow:hidden}.picker-places{background:color-mix(in srgb, var(--bg) 40%, transparent);border-right:1px solid var(--line);flex-direction:column;gap:2px;padding:6px;display:flex;overflow-y:auto}.picker-places button{color:var(--text);font:13px var(--sans);text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:6px;padding:5px 8px;overflow:hidden}.picker-places button:hover{background:color-mix(in srgb, var(--accent) 10%, transparent)}.picker-places b{color:var(--dim);font:600 11px var(--sans);letter-spacing:.08em;text-transform:uppercase;margin:8px 8px 2px}.picker-cols{outline-offset:-2px;min-width:0;display:flex;overflow:auto hidden}@media (prefers-reduced-motion:no-preference){.picker-cols,.pcol{scroll-behavior:smooth}}.pcol{width:var(--pw,176px);border-right:1px solid var(--line);flex-direction:column;flex:none;gap:1px;padding:4px;display:flex;overflow-y:auto}.pcol:last-child{border-right:0}.pitem{width:100%;color:var(--text);font:13px var(--sans);text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;padding:5px 8px;display:block;overflow:hidden}.pitem:hover{background:color-mix(in srgb, var(--accent) 8%, transparent)}.pitem[aria-selected=true]{background:color-mix(in srgb, var(--accent) 14%, transparent);color:var(--accent-hi)}.pcol[data-focus=true] .pitem[aria-selected=true]{background:color-mix(in srgb, var(--accent) 32%, transparent)}.pitem[aria-selected=true]:after{content:"›";float:right;opacity:.7}.pempty{color:var(--dim);margin:6px 8px;font-size:12px}.spawn-name{color:var(--dim);gap:4px;font-size:12px;display:grid}@media (width<=640px){.picker-body{grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr);height:min(52vh,360px)}.picker-places{border-right:0;border-bottom:1px solid var(--line);flex-direction:row;align-items:center;overflow:auto hidden}.picker-places b{display:none}.picker-places button{flex:none;max-width:10em}.pcol:not(:last-child){display:none}.pcol{border-right:0;flex:1;width:auto}.pitem{padding:10px 12px}}.deploy{border:1px solid var(--line);background:color-mix(in srgb, var(--accent) 5%, transparent);color:var(--text);border-radius:14px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px 12px;padding:14px 16px;display:grid}.deploy>*{grid-column:1/-1;margin:0}.deploy>.deploy-bar{grid-column:1}.deploy>.deploy-count{grid-column:2}.deploy-title{font:600 15px var(--sans);letter-spacing:.04em;overflow-wrap:anywhere;align-items:center;gap:8px;display:flex}.deploy-title svg{width:24px;height:24px;color:var(--gold);filter:drop-shadow(0 0 5px color-mix(in srgb, var(--gold) 60%, transparent));flex:none}.deploy-bar{border:1px solid var(--line);background:color-mix(in srgb, var(--bg) 70%, transparent);border-radius:4px;height:14px;position:relative;overflow:hidden}.deploy-bar:after{content:"";background:repeating-linear-gradient(90deg, transparent 0 calc(5% - 2px), var(--bg-2,var(--bg)) calc(5% - 2px) 5%);position:absolute;inset:0}.deploy-fill{height:100%;width:calc(var(--done,0) / var(--of,1) * 100%);background:linear-gradient(90deg, var(--accent), var(--accent-hi), var(--accent)) 0 0 / 200% 100%;transition:width .7s cubic-bezier(.2,.8,.2,1),background-color .4s;display:block}.deploy[data-state=running] .deploy-fill{animation:1.8s linear infinite deploy-sheen}.deploy-count{font:600 13px var(--mono);color:var(--accent)}.deploy-steps{gap:6px;padding:0;list-style:none;display:grid}.deploy-steps li{color:var(--dim);grid-template-columns:1.6em minmax(0,1fr) auto;align-items:baseline;display:grid}.deploy-steps .deploy-mark:before{content:"·"}.deploy-steps [data-state=done]{color:var(--text)}.deploy-steps [data-state=done] .deploy-mark{color:var(--ok)}.deploy-steps [data-state=done] .deploy-mark:before{content:"✔"}.deploy-steps [data-state=active]{color:var(--text);font-weight:600}.deploy-steps [data-state=active] .deploy-mark{color:var(--accent);animation:1s ease-in-out infinite deploy-pulse}.deploy-steps [data-state=active] .deploy-mark:before{content:"▶"}.deploy-steps [data-state=failed]{color:var(--err-soft);font-weight:600}.deploy-steps [data-state=failed] .deploy-mark{color:var(--err)}.deploy-steps [data-state=failed] .deploy-mark:before{content:"✖"}.deploy-time{font:12px var(--mono);color:var(--dim)}.deploy-steps [data-state=active] .deploy-time{color:var(--accent)}.deploy-note{overflow-wrap:anywhere;font-size:13px;line-height:1.5}.deploy-note:empty{display:none}.deploy[data-state=failed]{border-color:color-mix(in srgb, var(--err) 55%, var(--line));background:color-mix(in srgb, var(--err) 8%, transparent)}.deploy[data-state=failed] .deploy-note{color:var(--err-soft)}.deploy[data-state=failed] .deploy-fill{background:var(--err)}.deploy[data-state=ready]{border-color:color-mix(in srgb, var(--ok) 60%, var(--line));animation:1.1s ease-out deploy-ready}.deploy[data-state=ready] .deploy-fill{background:var(--ok)}.deploy[data-state=ready] .deploy-note{color:var(--ok);letter-spacing:.08em;font-weight:600;animation:.6s ease-out deploy-rise}.deploy[data-state=ready] .deploy-title svg{animation:.7s ease-out deploy-hop}.deploy .later{justify-self:start;display:none}.deploy[data-state=failed] .later{display:inline-block}@keyframes deploy-sheen{to{background-position:-200% 0}}@keyframes deploy-pulse{50%{opacity:.3;transform:translate(2px)}}@keyframes deploy-ready{0%{box-shadow:0 0 0 0 color-mix(in srgb, var(--ok) 55%, transparent)}to{box-shadow:0 0 0 18px #0000}}@keyframes deploy-rise{0%{opacity:0;transform:translateY(6px)}}@keyframes deploy-hop{40%{transform:translateY(-5px)scale(1.2)}}.link{color:var(--dim);text-transform:uppercase;letter-spacing:.08em;align-items:center;gap:8px;padding:0 4px;font-size:12px;display:flex}.link span{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.link i{background:var(--unknown);border-radius:50%;width:9px;height:9px}.link[data-state=live] i{background:var(--ok);animation:2.4s ease-in-out infinite blink}.link[data-state=live]{color:var(--ok)}.link[data-state=reconnecting] i,.link[data-state=connecting] i{background:var(--amber);animation:1s ease-in-out infinite blink}.link[data-state=offline] i,.link[data-state=replaced] i{background:var(--err)}.banner{background:color-mix(in srgb, var(--idle) 16%, transparent);color:var(--text);border-radius:14px;margin:14px 0 0;padding:10px 16px;font-size:13px}.banner b{font-family:var(--mono);font-weight:600}.connect{z-index:100;box-sizing:border-box;background:color-mix(in srgb, var(--bg) 92%, transparent);width:100%;max-width:none;height:100%;max-height:none;color:var(--text);touch-action:none;overscroll-behavior:contain;border:0;margin:0;padding:24px;position:fixed;inset:0}.connect[open]{place-items:center;display:grid}.connect::backdrop{background:0 0}.connect-card{border:1px solid var(--line);background:var(--panel);text-align:center;border-radius:16px;justify-items:center;gap:16px;max-width:min(420px,100%);padding:24px 28px;display:grid}.connect-card p{margin:0;font-size:15px;line-height:1.5}.connect-ring{box-sizing:border-box;border:3px solid var(--line);border-top-color:var(--accent);border-radius:50%;width:34px;height:34px;animation:1.1s linear infinite spin}.connect:is([data-state=offline],[data-state=replaced]) .connect-ring{border-color:var(--err);animation:none}.connect-retry{min-height:44px;padding-inline:18px}.connect-reload{visibility:hidden;box-sizing:border-box;text-transform:none;letter-spacing:0;white-space:normal;justify-content:center;align-items:center;min-width:44px;min-height:44px;padding-inline:18px;text-decoration:none;animation:0s linear 10s forwards connect-reveal;display:inline-flex}@keyframes connect-reveal{to{visibility:visible}}[data-view=geek] .connect-ring{border-style:dashed}[data-view=geek] .connect:is([data-state=offline],[data-state=replaced]) .connect-ring{border-style:solid}.stage{grid-template-columns:minmax(0,1fr);align-items:start;gap:20px;margin-top:12px;transition:opacity .4s;display:grid}.stage[data-view=session]{grid-template-columns:minmax(0,1fr) 300px}.stage:not([data-view=session])>.side{display:none}.stage[data-stale=true] .map,body[data-stale=true] .stats{opacity:.4}.stage[data-stale=true] *{animation-play-state:paused!important}.map{border:1px solid var(--line);background:var(--grid), var(--well);border-radius:18px;min-height:420px;padding:20px;transition:opacity .4s;position:relative}.links{pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.wire{fill:none;stroke:color-mix(in srgb, var(--accent) 30%, transparent);stroke-width:1.5px;stroke-dasharray:3 7;stroke-linecap:round}.packets{pointer-events:none;position:absolute;inset:0;overflow:hidden}.packet{background:var(--accent);opacity:0;will-change:transform;border-radius:50%;width:6px;height:6px;transition:opacity .4s;animation:none;position:absolute;top:-3px;left:-3px}.packet[data-live]{opacity:.9;animation-play-state:running}.bases{grid-template-columns:repeat(auto-fill,minmax(min(100%,330px),1fr));grid-auto-rows:2px;align-items:start;gap:0 20px;display:grid;position:relative}.base{border:1px solid var(--line);background:linear-gradient(180deg, var(--surface-1), var(--surface-0));box-shadow:0 18px 40px color-mix(in srgb, var(--shadow) 35%, transparent);border-radius:16px;padding:14px;position:relative}.base[data-mark=waiting]{box-shadow:0 18px 40px color-mix(in srgb, var(--shadow) 35%, transparent), inset 0 0 0 999px color-mix(in srgb, var(--amber) 4%, transparent)}.base>header{align-items:center;gap:12px;margin-bottom:10px;display:flex;position:relative}.title{justify-items:start;min-width:0;margin-right:auto;display:grid}.title h2{white-space:nowrap;text-overflow:ellipsis;max-width:100%;font-size:17px;overflow:hidden}.title p{max-width:100%;color:var(--dim);white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.crown{letter-spacing:.12em;text-transform:uppercase;color:var(--gold);background:color-mix(in srgb, var(--gold) 12%, transparent);border-radius:999px;align-items:center;gap:5px;margin-bottom:3px;padding:2px 9px 2px 6px;font-size:10px;display:inline-flex}.crown svg{width:14px;height:14px}.tower{width:64px;height:64px;color:var(--c);flex:none;place-items:center;display:grid;position:relative}.tower:before{content:"";background:radial-gradient(circle at 35% 30%, color-mix(in srgb, var(--c) 24%, var(--plate-hi)), var(--plate) 70%);border:1px solid color-mix(in srgb, var(--c) 45%, transparent);border-radius:50%;position:absolute;inset:0}.tower svg{width:38px;height:38px;filter:drop-shadow(0 0 5px color-mix(in srgb, var(--c) 55%, transparent));position:relative}.tower.ghost{opacity:.45}.tower.ghost:before{border-style:dashed}.sweep,.pulse{opacity:0;pointer-events:none;border-radius:50%;position:absolute;inset:0}.sweep{background:conic-gradient(from 0deg, transparent 0 70%, color-mix(in srgb, var(--c) 55%, transparent) 100%)}.pulse{border:2px solid var(--c)}.tower[data-mark=working] .sweep{opacity:1;animation:3.2s linear infinite spin}.tower[data-mark=waiting] .pulse{animation:1.5s ease-out infinite ping}.tower>.badge{--s:36px;position:absolute;bottom:-3px;right:-3px}.tabs{gap:10px;display:grid}.tab{background:color-mix(in srgb, var(--hi) 2%, transparent);border:1px solid color-mix(in srgb, var(--hi) 5%, transparent);border-radius:14px;padding:8px}.tab h3{color:var(--dim);letter-spacing:.12em;text-transform:uppercase;align-items:center;gap:8px;margin-bottom:8px;font-size:11px;font-weight:600;display:flex}.units,.subs{gap:8px;display:grid}.outposts{gap:8px;margin-top:12px;display:grid}.outposts:empty{display:none}.outposts:before{content:attr(data-label);color:var(--dim);letter-spacing:.12em;text-transform:uppercase;font-size:11px}.card{background:color-mix(in srgb, var(--hi) 4%, transparent);border:1px solid color-mix(in srgb, var(--hi) 6%, transparent);border-radius:12px;align-items:center;gap:10px;padding:8px 10px;transition:background-color .4s;display:flex;position:relative}@media (hover:hover) and (pointer:fine){.card{transition:background-color .4s,border-color .2s,transform .18s cubic-bezier(.2,.8,.2,1),box-shadow .18s}.card:hover{border-color:color-mix(in srgb, var(--c,var(--line-c)) 40%, transparent);box-shadow:0 6px 18px color-mix(in srgb, var(--shadow) 55%, transparent);transform:translateY(-1px)}.base{transition:border-color .25s}.base:hover{border-color:color-mix(in srgb, var(--line-c) 36%, transparent)}.pair-btn,.tab-add,.quit-btn,.modes button,.later,.cmp-alt{transition:color .15s,border-color .15s,background-color .15s,transform .12s}.pair-btn:hover:not(:disabled){color:var(--text);border-color:color-mix(in srgb, var(--line-c) 50%, transparent);background:color-mix(in srgb, var(--hi) 4%, transparent)}}:is(.pair-btn,.tab-add,.quit-btn,.go,.later,.cmp-send,.cmp-alt,.ask-send,.ask-cancel,.sheet-yes,.new-base,.modes button,.pitem,.d-doc,.thought,.more,.tab-btn):active:not(:disabled){transform:scale(.97)}.unit[data-mark=waiting]>.card{background:color-mix(in srgb, var(--amber) 11%, transparent)}.unit[data-mark=error]>.card{background:color-mix(in srgb, var(--err) 11%, transparent)}.unit[data-mark=working]>.card{background:color-mix(in srgb, var(--c) 7%, transparent)}.unit[data-mark=commanding]>.card,.token[data-mark=commanding]{background:color-mix(in srgb, var(--violet) 9%, transparent)}.plate{width:var(--s,40px);height:var(--s,40px);color:var(--c);background:radial-gradient(circle at 35% 30%, color-mix(in srgb, var(--c) 26%, var(--plate-hi)), var(--plate) 72%);border-radius:50%;flex:none;place-items:center;transition:color .4s;display:grid;position:relative}.plate svg{width:calc(var(--s,40px) * .55);height:calc(var(--s,40px) * .55)}.ring,.plate:after{pointer-events:none;border-radius:50%;position:absolute;inset:-3px}.ring{opacity:0;background:conic-gradient(from 0deg, transparent 0 55%, var(--c));-webkit-mask:radial-gradient(farthest-side, transparent calc(100% - 3px), var(--shadow) calc(100% - 2px));mask:radial-gradient(farthest-side, transparent calc(100% - 3px), var(--shadow) calc(100% - 2px))}.plate[data-mark=working]>.ring{opacity:1;animation:1.1s linear infinite spin}.plate:after{content:"";border:2px solid var(--c);opacity:0}.plate[data-mark=waiting]:after{animation:1.5s ease-out infinite ping}.badge{width:clamp(16px, calc(var(--s,40px) * .3), 24px);height:clamp(16px, calc(var(--s,40px) * .3), 24px);font:700 10px/1 var(--mono);color:var(--ink);background:var(--c);border-radius:50%;flex:none;place-items:center;transition:background-color .4s;display:grid}.plate>.badge{position:absolute;bottom:-4px;right:-4px}[data-mark=waiting]>.badge:after{content:"?"}[data-mark=idle]>.badge:after{content:"z"}[data-mark=done]>.badge:after{content:"✓"}[data-mark=error]>.badge:after{content:"!"}[data-mark=unknown]>.badge:after{content:"·"}[data-mark=commanding]>.badge:after{content:"◈"}[data-mark=working]>.badge:after{content:"";border:2px solid var(--ink);border-right-color:#0000;border-radius:50%;width:8px;height:8px;animation:.8s linear infinite spin}[data-mark=waiting]>.badge{animation:1.2s ease-in-out infinite hop}.meta{min-width:0;display:grid}.name{white-space:nowrap;text-overflow:ellipsis;font-weight:600;overflow:hidden}.line{color:var(--dim);align-items:baseline;gap:8px;min-width:0;font-size:12px;display:flex}.role{white-space:nowrap;letter-spacing:.1em;text-transform:uppercase;color:color-mix(in srgb, var(--c) 70%, var(--dim));flex:none;font-size:10px;font-style:normal}.note{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}[data-monitoring]{color:var(--err);font-weight:600}.unit[data-mark=idle]>.card{opacity:.85}.subs{margin:6px 0 0 22px;padding-left:18px;position:relative}.subs:empty{display:none}.base>.tower-subs{margin:-8px 0 12px 22px}.base>.tower-notices:empty{display:none}.base>.tower-notices{gap:6px;min-width:0;margin:0 0 12px 22px;display:grid}.tower-notices .tnote{flex-wrap:wrap;align-items:center;gap:8px;min-width:0;margin:0;font-size:.85em;display:flex}.tower-notices .tnote span{overflow-wrap:anywhere;flex:14em;min-width:0}.tower-notices .tnote.error span{color:var(--err-soft)}.tower-notices .tnote.warning span{color:var(--gold)}.tower-notices .tnote .tnote-fail{color:var(--err-soft);flex:100%;font-size:.95em}.tower-notices .tnote .tnote-fail:empty{display:none}.tower-notices .tnote button:disabled{opacity:.6;cursor:progress}.wait-panel{flex-wrap:wrap;align-items:center;gap:8px;min-width:0;margin-top:8px;display:flex}.wait-text{overflow-wrap:anywhere;flex:100%;margin:0}.wait-panel .tnote-fail{color:var(--err-soft);flex:100%;font-size:.95em}.wait-panel .tnote-fail:empty{display:none}.tnote:has(.wait-panel[data-gone])>span{display:none}.tower-notices .tnote-flash{color:var(--ok);margin:0;font-size:.85em}.wait-panel .pair-btn[hidden]{display:none}.dialog[data-wait] .go{border:1px solid var(--line);color:var(--text);background:0 0}.dialog[data-wait] .wait-go{background:var(--accent);color:var(--ink);border:0}.tower-notices .tnote .wait-panel{flex:100%;margin-top:0}.wait-form{flex:100%;gap:4px;min-width:0;margin:0;display:grid}.wait-form[hidden]{display:none}html:not([data-view=zen]) .wait-box{box-sizing:border-box;resize:none;border:1px solid var(--line);background:var(--sunken);width:100%;min-height:44px;color:var(--text);font:14px/1.4 var(--sans);border-radius:12px;padding:9px 12px}@supports (field-sizing:content){html:not([data-view=zen]) .wait-box{field-sizing:content;max-height:220px}}html:not([data-view=zen]) .wait-box:focus{border-color:color-mix(in srgb, var(--accent) 50%, transparent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 12%, transparent);outline:none}.wait-note{color:var(--err-soft);margin:0;font-size:.95em}.wait-note:empty{display:none}.tower-notes{margin:0 16px 8px}.tower-notes:has(>.tower-notices:empty):not(:has(>.tower-memory:not([hidden]))):not(:has(>.tower-conv:not([hidden]))):not(:has(>.head-asks:not([hidden]))):not(:has(>.head-absent:not([hidden]))){display:none}.tower-notes .tower-notices{gap:6px;min-width:0;display:grid}.base:not(.ally)>header .title p{white-space:normal;flex-wrap:wrap;align-items:center;gap:2px 0;display:flex;overflow:visible}.title .tqueue{border:1px solid color-mix(in srgb, var(--accent) 45%, transparent);color:var(--accent);white-space:nowrap;border-radius:999px;margin-left:8px;padding:0 7px;font-size:11px}.title .tqueue:empty{display:none}.allies{flex-wrap:wrap;align-items:center;gap:4px 8px;margin-top:6px;font-size:.85em;display:flex}.allies[hidden]{display:none}.allies b{color:var(--dim);font-weight:600}.ally-chip{border:1px solid color-mix(in srgb, var(--accent) 45%, transparent);color:var(--accent);white-space:nowrap;border-radius:999px;padding:0 8px;font-size:11px;text-decoration:none}a.ally-chip:hover{background:color-mix(in srgb, var(--accent) 14%, transparent)}.zoom-in>.tower-notices:empty{display:none}.zoom-in>.tower-notices{gap:6px;min-width:0;margin:12px 0;display:grid}.term-hold{border:1px dashed var(--line);color:var(--dim);border-radius:12px;margin:16px;padding:14px 16px;line-height:1.5}.subs:before{content:"";background:repeating-linear-gradient(color-mix(in srgb, var(--line-c) 50%, transparent) 0 4px, transparent 4px 8px);width:1px;position:absolute;top:-4px;bottom:22px;left:3px}.subs>.unit>.card:before{content:"";background:repeating-linear-gradient(90deg, color-mix(in srgb, var(--line-c) 50%, transparent) 0 4px, transparent 4px 8px);width:15px;height:1px;position:absolute;top:50%;left:-15px}.subs>.unit{position:relative}.subs>.unit>.card:after{content:"";border:3px solid #0000;border-left:4px solid color-mix(in srgb, var(--line-c) 60%, transparent);pointer-events:none;position:absolute;top:calc(50% - 3px);left:-5px}.subs>.unit:is([data-mark=working],[data-mark=commanding])>.card:before{animation:.8s linear infinite flow-x}.subs:has(>.unit:is([data-mark=working],[data-mark=commanding])):before{animation:.8s linear infinite flow-y}@keyframes flow-x{to{background-position:8px 0}}@keyframes flow-y{to{background-position:0 8px}}.subs .plate{--s:30px}.subs .name{font-size:13px}.side{top:calc(var(--hud,64px) + 20px);gap:16px;display:grid;position:sticky}.panel{border:1px solid var(--line);background:var(--panel);border-radius:18px;padding:14px 16px}.panel h2{color:var(--dim);letter-spacing:.14em;text-transform:uppercase;margin-bottom:10px;font-size:11px}.timeline summary{cursor:pointer;align-items:baseline;gap:10px;min-width:0;list-style:none;display:flex}.timeline summary::-webkit-details-marker{display:none}.timeline summary:after{content:"▾";color:var(--dim);margin-left:8px;transition:transform .2s}.timeline:not([open]) summary:after{transform:rotate(-90deg)}.timeline h2{flex:none;margin:0}.tl-at{color:var(--dim);font:11px var(--mono);flex:none}.tl-last{white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:12.5px;overflow:hidden}.tl-span{color:var(--dim);flex:none;margin-left:auto;font-size:11px}.tl-lanes{border-top:1px dashed var(--line);height:46px;margin-top:8px;position:relative}.tl-lanes:after{content:"";background:var(--accent);width:2px;box-shadow:0 0 8px color-mix(in srgb, var(--accent) 60%, transparent);border-radius:1px;position:absolute;top:0;bottom:0;right:0}.tl-mark{width:10px;height:10px;margin-left:-5px;position:absolute}.tl-mark:before{content:"";background:var(--c);border-radius:2px;position:absolute;inset:1px}.tl-mark:is([data-mark=waiting],[data-mark=error],[data-mark=commanding]):before{transform:rotate(45deg)}.tl-mark:is([data-mark=done],.joined,.left):before{border-radius:50%}.tl-mark.left:before{box-shadow:inset 0 0 0 1.5px var(--c);background:0 0}.tl-mark:hover:before,.tl-mark:focus-visible:before{box-shadow:0 0 0 3px color-mix(in srgb, var(--c) 35%, transparent)}.tl-mark:focus-visible{outline:none}.tl-mark:hover:after,.tl-mark:focus-visible:after{content:attr(aria-label);z-index:1;border:1px solid var(--line);background:var(--raised);color:var(--text);font:12px var(--sans);white-space:nowrap;box-shadow:0 6px 16px color-mix(in srgb, var(--shadow) 60%, transparent);border-radius:8px;padding:4px 8px;position:absolute;bottom:calc(100% + 8px);left:-6px}.tl-mark.end:hover:after,.tl-mark.end:focus-visible:after{left:auto;right:-6px}.tl-axis{color:var(--dim);font:10px var(--mono);justify-content:space-between;margin-top:4px;display:flex}.line .age{color:var(--dim);font:10.5px var(--mono);opacity:.85;flex:none}.line .age:empty{display:none}.line .age:before{content:"· "}.unit[data-mark=waiting]>.card .age,.title .age{color:var(--amber);opacity:1}.title .age{color:var(--dim)}.title .age:not(:empty):before{content:" · "}.todo{align-items:baseline;gap:6px;min-width:0;font-size:11.5px;display:flex}.todo b{color:var(--violet);font:600 10.5px var(--mono);flex:none}.todo span{white-space:nowrap;text-overflow:ellipsis;opacity:.85;min-width:0;overflow:hidden}.todo span:empty{display:none}.ticks{pointer-events:none;gap:3px;height:3px;display:flex;position:absolute;bottom:3px;left:52px;right:12px}.ticks:empty{display:none}.ticks i{background:var(--c);opacity:calc(.25 + .65 * var(--o,1));border-radius:1px;flex:0 0 6px}.card.ticked{padding-bottom:11px}.subs .ticks{left:44px}.minimap{z-index:4;box-sizing:content-box;border:1px solid var(--line);background:var(--panel);opacity:.65;cursor:pointer;border-radius:10px;padding:6px;transition:opacity .2s;position:fixed;bottom:20px;right:20px}.minimap:hover{opacity:1}body:has(.tile) .minimap{opacity:0;pointer-events:none}body:has(.tile-layer:not([hidden])) .minimap{opacity:0;pointer-events:none}body:has(.ally-asks:not([hidden]) .ally-asks-list:not([hidden])) .minimap{opacity:0;pointer-events:none}.minimap.away{opacity:0;pointer-events:none}.mm-in{position:absolute;inset:6px}.mm-in i{background:color-mix(in srgb, var(--c) 35%, var(--surface-1));border-radius:2px;position:absolute}.mm-view{border:1px solid var(--accent);background:color-mix(in srgb, var(--accent) 8%, transparent);pointer-events:none;border-radius:3px;position:absolute;top:6px;left:4px;right:4px}.credit{color:var(--dim);padding:0 6px;font-size:11px}.bar{flex-wrap:wrap;align-items:center;gap:6px 16px;margin:12px 6px 0;display:flex}.bar-acts{align-items:center;gap:8px;display:flex}.bar-acts .pair-btn{border-radius:10px;padding:3px 9px;font-size:11px}.legend{color:var(--dim);flex-wrap:wrap;gap:4px 14px;margin:0 0 0 auto;padding:0;font-size:11px;list-style:none;display:flex}.legend li{align-items:center;gap:6px;display:flex}.legend .badge{width:13px;height:13px;font-size:8px}.foot{grid-template-columns:minmax(0,1fr);gap:10px;margin-top:14px;display:grid}.foot .credit{opacity:.75}.enter{animation:.5s cubic-bezier(.2,.9,.3,1.15) both pop}.leaving{pointer-events:none;animation:.35s ease-in both out}.flash>.card>.plate,.flash.tower{animation:.6s ease-out flash}.flash>.card{animation:.9s ease-out card-glow}.flash.flip>.card{animation-name:card-glow-b}.flash.flip>.card>.plate,.flash.flip.tower,.flash.flip.token>.plate{animation-name:flash-b}@keyframes spin{to{transform:rotate(360deg)}}@keyframes glow{0%,to{box-shadow:0 0 5px 0 var(--c4)}50%{box-shadow:0 0 16px 4px var(--c)}}.plate[data-mark=commanding]:before,.tower[data-mark=commanding]:after{content:"";pointer-events:none;border-radius:50%;animation:2.4s ease-in-out infinite glow;position:absolute;inset:-2px}.stats [data-mark=commanding][data-on],.comms-head[data-mark=commanding] .logo{border-color:var(--c4);animation:2.4s ease-in-out infinite glow}.comms-head[data-mark=commanding] .logo{color:var(--c)}.comms-head[data-mark=commanding] h2 span{color:var(--c);text-shadow:0 0 10px var(--c4)}@keyframes ping{0%{opacity:.6;transform:scale(1)}to{opacity:0;transform:scale(1.7)}}@keyframes hop{50%{transform:translateY(-3px)}}@keyframes blink{50%{opacity:.35}}@keyframes pop{0%{opacity:0;transform:scale(.92)translateY(8px)}}@keyframes pop-b{0%{opacity:0;transform:scale(.92)translateY(8px)}}@keyframes out{to{opacity:0;transform:scale(.94)}}@keyframes out-b{to{opacity:0;transform:scale(.94)}}@keyframes flash{40%{transform:scale(1.12)}}@keyframes card-glow{30%{box-shadow:0 0 0 1px var(--c4), 0 0 18px 1px var(--c4)}}@keyframes card-glow-b{30%{box-shadow:0 0 0 1px var(--c4), 0 0 18px 1px var(--c4)}}@keyframes flash-b{40%{transform:scale(1.12)}}@keyframes slide{0%{opacity:0;transform:translate(10px)}}@keyframes slide-b{0%{opacity:0;transform:translate(10px)}}@keyframes zoom{0%{opacity:0;transform:scale(.45)}}@keyframes zoom-b{0%{opacity:0;transform:scale(.45)}}@keyframes come-in{0%{opacity:0;transform:translate(-14px)scale(.98)}}@keyframes go-out{0%{opacity:0;transform:translate(14px)scale(.98)}}.tx.fresh{animation:.32s cubic-bezier(.2,.8,.2,1) both come-in}.tx.you.fresh{animation-name:go-out}:is([data-calm],[data-view=geek]) :is(.link i,.sweep,.pulse,.ring,.badge,.term-typing,.connect-ring),:is([data-calm],[data-view=geek]) :is(.plate,.badge):after{animation:none!important}:is([data-calm],[data-view=geek]) .tower[data-mark=waiting] .pulse{opacity:.55}:is([data-calm],[data-view=geek]) .plate[data-mark=waiting]:after{opacity:.55;transform:scale(1.25)}:is([data-calm],[data-view=geek]) .packet{opacity:0;animation-play-state:paused!important}:is([data-calm],[data-view=geek]) .subs:before,:is([data-calm],[data-view=geek]) .subs>.unit>.card:before{animation:none!important}@media (prefers-reduced-motion:reduce),(hover:none) and (prefers-reduced-motion:reduce){.plate[data-mark=commanding]:before,.tower[data-mark=commanding]:after{box-shadow:0 0 12px 3px var(--c4)}.stats [data-mark=commanding][data-on],.comms-head[data-mark=commanding] .logo{box-shadow:0 0 12px 2px var(--c4)}}:is([data-calm],[data-view=geek]) :is(.plate,.tower)[data-mark=commanding]:before,:is([data-calm],[data-view=geek]) .tower[data-mark=commanding]:after{box-shadow:0 0 12px 3px var(--c4);animation:none!important}[hidden]{display:none!important}a{color:inherit}.crumbs,.tally dt,.comms-head small,.tx.you>header,.notice em,.rule summary,.dossier-in>.tag,.d-drones h4,.d-docs h4,.specs dt,.stop,.dialog .tag,.intel h4,.pending b{color:var(--dim);letter-spacing:.14em;text-transform:uppercase;font-size:11px;font-style:normal}.token .name,.drone .note,.count small,.sum,.where,.tile b{white-space:nowrap;text-overflow:ellipsis;max-width:100%;overflow:hidden}.md a,.bubble a,.notice a,.d-note a,.specs a,.crumbs a{color:var(--accent)}.crumbs{gap:10px;min-width:0;display:flex}.crumbs>*+:before{content:"›";opacity:.5;margin-right:10px}.crumbs>*{white-space:nowrap;text-overflow:ellipsis;letter-spacing:.06em;flex:0 auto;min-width:0;max-width:28ch;overflow:hidden}.crumbs>:last-child{flex:auto;max-width:none}.crumb-more{cursor:pointer;color:var(--accent);display:none}.crumbs a,.brand{text-decoration:none}.work{align-items:flex-start;gap:20px;min-width:0;display:flex;position:relative}.gauge{visibility:hidden;height:0;position:absolute;left:0;right:0}.view{flex:1 1 0;min-width:0}body[data-stale=true] .work{opacity:.45}.enter-zoom{transform-origin:var(--ox,50%) var(--oy,0);animation:.5s ease-out both zoom}.enter-slide,.dossier{animation:.4s ease-out both slide}.enter-back{animation:.4s ease-out both pop}.enter-zoom.flip{animation-name:zoom-b}.enter-slide.flip{animation-name:slide-b}.enter-back.flip{animation-name:pop-b}.hit,.enter-base:after{z-index:1;border-radius:inherit;position:absolute;inset:0}.enter-base:after{content:"";z-index:0}.hit:hover{box-shadow:inset 0 0 0 1px var(--c)}.enter-base{text-decoration:none}.base>header:hover h2{color:var(--accent)}.alerts{width:210px;color:inherit;font:inherit;text-align:left;cursor:pointer;align-items:center;gap:10px;display:flex;position:relative}.alerts:disabled{cursor:default;opacity:.6}.alerts:not(:disabled){border-color:var(--c4);background:var(--c1)}.faces{flex:none;padding-left:10px;display:flex}.faces .plate{--s:28px;box-shadow:0 0 0 2px var(--raised);margin-left:-10px}.faces .badge{display:none}.count{min-width:0;display:grid}.count b{font:600 18px/1.1 var(--mono)}.count small,.comms-head p,.cmp-note,.where,.queued,.d-line,.who p{color:var(--dim);font-size:12px}.token{border:1px solid #0000;border-radius:16px;justify-items:center;gap:3px;width:100%;padding:10px 8px 9px;text-decoration:none;display:grid;position:relative}a.token:hover{border-color:var(--c4)}.token[data-mark=waiting]{background:color-mix(in srgb, var(--amber) 11%, transparent)}.token[data-mark=error]{background:color-mix(in srgb, var(--err) 11%, transparent)}.token .plate{--s:64px;margin-bottom:4px}.token .name{font-weight:600}.token .line{justify-items:center;max-width:100%;display:grid}.drone{width:94px;padding:6px;font-size:12px}.drone .plate{--s:44px}.drone .role{display:none}.agent{letter-spacing:.08em;text-transform:uppercase;border:1px solid var(--c4);color:var(--dim);border-radius:8px;margin-left:4px;padding:0 5px;font-size:9px;font-style:normal}.agent:empty,.drone .agent{display:none}.flash.token>.plate{animation:.6s ease-out flash}.zoom-in,.comms-in{border:1px solid var(--line);background:var(--grid), var(--well);border-radius:22px;position:relative}.zoom-in{min-height:420px;padding:24px}.zoom-in.void>:not(.lost){display:none}.lost,.chat-empty{color:var(--dim);text-align:center;padding:60px 0}.keep{align-items:center;gap:20px;padding:18px 22px;display:flex}.keep h2{font-size:24px}.tower.big{width:120px;height:120px}.tower.big svg{width:72px;height:72px}.tower.big>.badge{--s:96px;bottom:4px;right:4px}a.tower:hover:before{border-color:var(--c)}.tally{gap:10px;display:flex}.squads,.camps{grid-template-columns:repeat(auto-fit,minmax(min(100%,430px),1fr));align-items:start;gap:18px;margin-top:20px;display:grid}.squad{background:color-mix(in srgb, var(--surface-0) 78%, transparent);padding:14px 16px 18px}.squad[data-mark=waiting]{background:color-mix(in srgb, var(--amber) 7%, var(--surface-0))}.squad h3{align-items:center;gap:10px;margin-bottom:14px;display:flex}.squad h3 b,.crumbs b{color:var(--text)}.squad h3 small{margin-left:auto}.squad h3 svg{width:18px;height:18px}.flag{background:var(--c);width:10px;height:10px;box-shadow:0 0 8px var(--c);border-radius:2px;transform:rotate(45deg)}.formation{flex-wrap:wrap;align-items:flex-start;gap:16px 20px;display:flex}.col{justify-items:center;gap:8px;width:196px;display:grid}.say{background:var(--raised);width:100%;color:var(--dim);border-radius:12px;margin-top:4px;padding:7px 10px;font-size:12px;line-height:1.35}.say p{overflow-wrap:anywhere;max-height:4.05em;overflow:hidden}.drones{flex-wrap:wrap;justify-content:center;gap:8px;width:100%;padding-top:16px;display:flex;position:relative}.drones:empty{display:none}.tower-drones{justify-content:flex-start;margin-top:-8px;padding-left:35px}.drones.tower-drones:before{left:82px}.drones:before{content:"";background:repeating-linear-gradient(color-mix(in srgb, var(--line-c) 60%, transparent) 0 4px, transparent 4px 8px);width:1px;height:14px;position:absolute;top:0;left:50%}.camp .token{width:156px}[data-group=outside] .plate{filter:saturate(.3);outline:1px dashed color-mix(in srgb, var(--dim) 55%, transparent);outline-offset:4px}.comms-in{grid-template-columns:minmax(0,1fr)}.comms-in,.tile{height:calc(var(--vvh,100vh) - var(--hud,64px) - 64px);grid-template-rows:auto minmax(0,1fr) auto;min-height:380px;display:grid;overflow:hidden}.comms-head,.tile>header{background:var(--panel);align-items:center;gap:12px;padding:12px 18px;display:flex}.ava{width:30px;height:30px;color:var(--accent);background:radial-gradient(circle at 35% 30%, color-mix(in srgb, var(--accent) 28%, transparent), var(--plate) 72%);border-radius:50%;flex:none;place-items:center;display:grid}.ava svg{width:58%;height:58%}.comms-head h2{font-size:16px}.chan{white-space:nowrap;flex:none;margin-left:auto}.head-id{flex:auto;min-width:0}.head-id h2,.head-id p{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.head-back{display:none}.modes+.chan{margin-left:12px}.head-main,.head-quit{margin-left:4px}.head-quit{letter-spacing:.08em;text-transform:uppercase;border-radius:12px;padding:6px 10px}.chat-root{min-height:0;display:grid;position:relative}.comms-in .ask{max-height:calc((var(--vvh,100vh) - var(--hud,64px) - 64px) * .55);overscroll-behavior:contain;overflow-y:auto}.chat-scroll{overflow-anchor:none;padding:12px 16px;font-size:15px;overflow-y:auto}.chat-list{gap:8px;max-width:1040px;margin-inline:auto;display:grid}.tx.in+.tx.in,.tx.you+.tx.you{margin-top:-4px}.tx.in+.tx.in>.ava,.tx.you+.tx.you .ava{visibility:hidden}.tx.in+.tx.in .tx-body>header b,.tx.you+.tx.you>header b{display:none}.chat-top{height:1px}.chat-end{height:1px;margin-top:-1px}.chat-live{max-width:1040px;color:var(--c);align-items:center;gap:10px;margin:14px auto 0;padding-left:44px;font-size:12px;display:flex}.chat-pill{--c:var(--accent);border:0;position:absolute;bottom:14px;left:50%;transform:translate(-50%)}.lit:after{content:"";background:color-mix(in srgb, var(--accent) 18%, transparent);border-radius:14px;animation:1s 1s forwards out;position:absolute;inset:0}.lit.flip:after{animation-name:out-b}.composer{border-top:1px solid var(--line);background:var(--panel);gap:8px;padding:12px 18px 14px;display:grid;position:relative}.comms-in>.chat-root{border-bottom:1px solid var(--line)}.comms-in .composer{border-top:0}.comms-in:has(>:is(.queue-bar,.queue-list,.queue-act,.todos,.monitors):not([hidden])){--dock-gap:6px}.comms-in>.chat-root{margin-bottom:var(--dock-gap,0px)}.comms-in .composer{margin-top:var(--dock-gap,0px)}.comms-in>.tower-notes{margin-top:6px}.comms-in:has(>:is(.queue-bar,.queue-list,.queue-act,.todos,.monitors):not([hidden]))>.tower-notes{margin-top:0}.cmp-row,.cmp-acts,.cmp-foot,.cmp-note{align-items:center;gap:8px;display:flex}.cmp-row{align-items:flex-end;gap:10px}.composer textarea{resize:none;border:1px solid var(--line);background:var(--sunken);min-width:0;color:var(--text);font:14px/1.4 var(--sans);border-radius:12px;flex:1;padding:9px 12px}@supports (field-sizing:content){.composer textarea{field-sizing:content;max-height:220px}.composer{grid-template-columns:minmax(0,1fr)}}.composer textarea:focus{border-color:color-mix(in srgb, var(--accent) 50%, transparent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 12%, transparent);outline:none}.composer.ended{padding:12px 18px calc(12px + env(safe-area-inset-bottom))}.cmp-bar{text-align:center;color:var(--dim);margin:0;font-size:13px}.composer button:disabled{opacity:.45;cursor:default}.cmp-note{flex-wrap:wrap;flex:1;min-height:18px}.cmp-note[data-tone=error],.cmp-alt.cmp-stop{color:var(--err-soft)}.cmp-note[data-tone=ok]{color:var(--ok)}.cmp-note[data-tone=ask]{color:var(--gold)}.cmp-link{color:var(--accent);font:12px var(--sans);cursor:pointer;background:0 0;border:0;padding:0}.slash{z-index:5;border:1px solid var(--line);background:var(--surface-0);max-height:260px;box-shadow:0 8px 24px color-mix(in srgb, var(--shadow) 53%, transparent);border-radius:12px;margin:0;padding:4px;list-style:none;position:absolute;bottom:calc(100% - 6px);left:18px;right:18px;overflow-y:auto}.slash[hidden]{display:none}.slash li{cursor:pointer;border-radius:8px;align-items:baseline;gap:10px;padding:6px 10px;display:flex}.slash li[aria-selected=true]{background:color-mix(in srgb, var(--accent) 12%, transparent)}.slash b{color:var(--accent);font:600 13px var(--mono);white-space:nowrap}.slash span{min-width:0;color:var(--dim);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.cmp-yes{background:var(--gold);color:var(--ink);font:600 12px var(--sans);cursor:pointer;border:0;border-radius:8px;padding:3px 10px}.tx{content-visibility:auto;contain-intrinsic-size:auto 220px;min-width:0}.tx.you{contain-intrinsic-size:auto 76px}.tx.sys,.tx.rule{contain-intrinsic-size:auto 40px}.tx.note{contain-intrinsic-size:auto 24px}.tx time,.tx.note{color:var(--dim);font:11px var(--mono)}.tx.you{justify-items:end;gap:5px;display:grid}.tx.you>header{color:var(--gold);align-items:center;gap:8px;display:flex}.tx.you .ava{color:var(--gold)}.bubble{border:1px solid color-mix(in srgb, var(--gold) 22%, transparent);background:color-mix(in srgb, var(--gold) 8%, transparent);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:14px;max-width:80%;padding:7px 12px;line-height:1.5}.bubble .boss-flag{opacity:.7;display:block}.tx.in{grid-template-columns:30px minmax(0,1fr);align-items:start;gap:8px;display:grid}.tx-body{border:1px solid var(--line);background:var(--panel);border-radius:14px;gap:6px;padding:8px 12px;display:grid}.tx-body,.tx-body>*{min-width:0}.tx-body>header{color:var(--dim);font:11px var(--mono);align-items:baseline;gap:10px;display:flex}.tx-body>header b{color:var(--accent);font:600 13px var(--sans)}.stop,.dialog .tag{background:var(--c1);color:var(--c);border-radius:999px;padding:1px 8px;font-size:10px}.fault{color:var(--err-soft);font-size:13px}.thought,.more,.tab-btn{border:1px solid var(--line);color:var(--dim);font:11px var(--sans);cursor:pointer;background:0 0;border-radius:999px;justify-self:start;padding:2px 10px}.thought-text:empty{display:none}.thought-text,.out,.args,.notice pre,.rule pre{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--dim);font:13px/1.45 var(--mono)}.act,.notice{border:1px solid color-mix(in srgb, var(--hi) 7%, transparent);background:color-mix(in srgb, var(--hi) 3%, transparent);border-radius:10px}.act>summary,.notice>summary,.rule summary{cursor:pointer;align-items:center;gap:8px;min-width:0;padding:5px 10px;font-size:13.5px;list-style:none;display:flex}summary::-webkit-details-marker{display:none}.act code{color:var(--c);font:600 11px var(--mono);letter-spacing:.06em;text-transform:uppercase}.sum{min-width:0;color:var(--dim)}.act[open] .sum{white-space:normal}.open{flex:none;margin-left:auto}.act>pre,.result{margin:0 10px 8px}.result{gap:6px;display:grid}.tx.sys{padding-left:38px}.notice{border-color:color-mix(in srgb, var(--violet) 20%, transparent);background:color-mix(in srgb, var(--violet) 7%, transparent)}.notice .ava{width:22px;height:22px}.notice pre,.rule pre{padding:0 10px 8px}.notice>.boss-flag{opacity:.7;padding:0 10px 4px;display:block}.notice-raw{margin:0 10px 8px}.notice-raw>summary{color:var(--dim);cursor:pointer;font-size:12px}.notice-raw pre{padding:4px 0 0}.rule summary{justify-content:center}.rule summary:before,.rule summary:after{content:"";background:var(--line);flex:1;height:1px}.tx.note{text-align:center}.dossier-in{text-align:center;justify-items:center;gap:6px;display:grid;position:relative}.dossier-in>.tag{text-align:left;justify-self:stretch}.portrait{background:radial-gradient(var(--c1), transparent 70%);border-radius:50%;padding:8px}.portrait .plate{--s:96px}.dossier-in h3{overflow-wrap:anywhere;margin-top:4px;font-size:18px}.d-line,.who p{align-items:baseline;gap:8px;display:flex}.d-note{background:color-mix(in srgb, var(--amber) 12%, transparent);border-radius:10px;padding:8px 10px;font-size:12px}.specs{text-align:left;justify-self:stretch;gap:2px;margin-top:10px;display:grid}.specs div{background:color-mix(in srgb, var(--hi) 4%, transparent);grid-template-columns:76px minmax(0,1fr);gap:8px;padding:7px 10px;display:grid}.specs dt{font-size:10px}.specs dd{overflow-wrap:anywhere;font-size:12.5px}.d-drones,.d-squads{margin-top:8px}.d-squads{justify-self:stretch;gap:10px;display:grid}.d-squad{gap:6px;display:grid}.d-squad small{color:var(--dim)}.d-squad .formation{gap:6px}.d-x,.head-info{display:none}.d-drones .formation{justify-content:center;gap:6px}.md{overflow-wrap:anywhere;line-height:1.55}.md p,.md ul,.md ol,.md pre,.md table,.md blockquote{margin:0 0 8px}.md>:last-child{margin-bottom:0}.md :is(h1,h2,h3,h4,h5,h6){margin:12px 0 6px;font-size:16px}.md>:first-child{margin-top:0}.md h1{font-size:19px}.md ul,.md ol{padding-left:22px}.md li>p{margin:0}.md li.task{margin-left:-18px;list-style:none}.check{vertical-align:-2px;text-align:center;width:14px;height:14px;font:700 10px/12px var(--mono);border:1px solid;border-radius:4px;margin-right:7px;display:inline-block}.check[data-done=true]{background:var(--ok);color:var(--ink)}.md code{background:color-mix(in srgb, var(--hi) 8%, transparent);font:13.5px var(--mono);border-radius:5px;padding:1px 5px}.md pre{border:1px solid var(--line);background:var(--sunken);border-radius:10px;padding:10px 12px;overflow-x:auto}.md pre code{background:0 0;padding:0}.md blockquote{background:color-mix(in srgb, var(--hi) 4%, transparent);color:var(--dim);padding:6px 12px}.md table{border-collapse:collapse;display:block;overflow-x:auto}.md th,.md td{border:1px solid var(--line);padding:4px 10px}.tiles{flex:1 1 0;gap:20px;min-width:0;display:flex}.tile-tabs{display:none}.tile{min-width:0;top:calc(var(--hud,64px) + 20px);border:1px solid var(--line);background:var(--panel);border-radius:22px;flex:1 1 0;position:sticky}.tile>header svg{width:22px;height:22px;color:var(--gold)}.tile{grid-template-columns:minmax(0,1fr)}.tile>header b{flex:1;min-width:0}.tile-body{padding:16px 20px;overflow:auto}.tiles.tabbed{flex-direction:column;gap:8px}.tile:has(.spawn,.pair){height:auto;min-height:0;max-height:calc(var(--vvh,100vh) - var(--hud,64px) - 64px);align-self:flex-start}.spawn .chat-empty{text-align:left;padding:0}.spawn .chat-empty:empty{display:none}.tiles.tabbed .tile-tabs{gap:6px;display:flex}.tiles.tabbed .tile:not(.active){display:none}.tiles.tabbed .tile{flex:none}.tab-btn.active,.open{border-color:color-mix(in srgb, var(--gold) 40%, transparent);color:var(--gold)}.dock{z-index:20;top:calc(var(--hud,64px) + 24px);pointer-events:none;width:min(300px,100vw - 44px);display:grid;position:fixed;right:max(20px,50vw - 1080px)}.dialog,.tcard{pointer-events:auto;border:1px solid var(--c4);background:linear-gradient(var(--c1), var(--surface-0) 70%), var(--raised);box-shadow:0 24px 60px color-mix(in srgb, var(--shadow) 80%, transparent);transform-origin:top;border-radius:18px;grid-area:1/1;padding:14px 16px 16px;transition:transform .3s,opacity .3s;position:relative}.dialog:focus,.tcard:focus,.tcard h2:focus{outline:none}.dialog,.tcard{max-height:calc(100dvh - var(--hud,64px) - 44px);overscroll-behavior:contain;overflow-y:auto}.dialog>header,.tcard>header{align-items:center;gap:8px;min-width:0;margin-bottom:12px;display:flex}.where{min-width:0}.x{color:var(--dim);cursor:pointer;background:0 0;border:0;margin-left:auto;font-size:20px}.zoom{color:var(--dim);cursor:pointer;background:0 0;border:0;margin-left:auto;padding:0 6px;font-size:17px}.zoom+.x{margin-left:0}.zoom:hover,.x:hover{color:var(--text)}.dock.wide{width:min(880px,100vw - 44px);top:72px;right:50%;transform:translate(50%)}.dock.wide .dialog{max-height:calc(100dvh - 96px)}.who{align-items:center;gap:14px;display:flex}.who .plate{--s:56px}.who h3{font-size:17px}.intel{background:color-mix(in srgb, var(--bg) 55%, transparent);border-radius:12px;margin-top:12px;padding:10px 12px}.intel h4{margin-bottom:4px}.said{overflow-wrap:anywhere;font-size:13px;line-height:1.45}.pending{color:var(--c);font:12px var(--mono);overflow-wrap:anywhere;margin-top:8px}.dialog footer{flex-wrap:wrap;align-items:center;gap:10px;margin-top:14px;display:flex}.ask{border:1px solid color-mix(in srgb, var(--amber) 35%, transparent);background:color-mix(in srgb, var(--amber) 6%, transparent);border-radius:14px;gap:8px;margin:10px 18px 0;padding:12px 14px;display:grid}.dialog .ask{margin:10px 0 0}.ask-one{gap:8px;display:grid}.ask-one+.ask-one{margin-top:8px}.ask-head{background:color-mix(in srgb, var(--amber) 14%, transparent);color:var(--gold);letter-spacing:.06em;text-transform:uppercase;border-radius:999px;justify-self:start;padding:1px 9px;font-size:11px}.ask-how{color:var(--dim);font-size:12px}.ask-q{white-space:pre-wrap;overflow-wrap:anywhere;font-weight:600}.ask-ctx,.ask-why{color:var(--dim);white-space:pre-wrap;overflow-wrap:anywhere;max-height:9em;font-size:13px;overflow:auto}.ask-opts{counter-reset:opt;gap:6px;max-height:16em;margin:0;padding:0;list-style:none;display:grid;overflow:auto}.ask-opt{border:1px solid var(--line);background:var(--sunken);overflow-wrap:anywhere;counter-increment:opt;border-radius:10px;gap:2px;padding:7px 12px;font-size:13px;display:grid}.ask-opt b:before{content:counter(opt) ". ";color:var(--dim)}.ask-opt b[data-n]:before{content:attr(data-n) ". "}.ask-opt small{color:var(--dim);font-size:12px}.ask-acts{flex-wrap:wrap;align-items:center;gap:6px 14px;display:flex}.ask-acts>:last-child{margin-left:auto}.ask-term{color:var(--gold);font-size:12px}.ask button:disabled{opacity:.45;cursor:default}.ask-note:empty{display:none}.ask-note{color:var(--dim);flex-wrap:wrap;align-items:center;gap:4px 10px;font-size:12px;display:flex}.ask-note[data-tone=error]{color:var(--err-soft)}.ask-note[data-tone=ok]{color:var(--ok)}.ask-title{font:12.5px/1.45 var(--mono);white-space:pre-wrap;overflow-wrap:anywhere;max-height:12em;margin:0;overflow:auto}div.ask-opts{max-height:none;overflow:visible}button.ask-opt{text-align:left;color:var(--text);font:13px var(--sans);cursor:pointer}.ask-opt[aria-checked=true]{border-color:var(--amber);background:color-mix(in srgb, var(--amber) 12%, transparent)}.ask-own{resize:vertical;field-sizing:content;border:1px solid var(--line);background:var(--sunken);min-width:0;max-height:10em;color:var(--text);font:13px var(--sans);border-radius:10px;padding:7px 12px}.ask-memo{font-size:12px}.ask input:disabled,.ask textarea:disabled{opacity:.45}.ask-send{background:var(--amber);color:var(--ink);font:600 13px var(--sans);cursor:pointer;border:0;border-radius:10px;padding:7px 13px}.ask-cancel{border:1px solid var(--line);color:var(--text);font:600 13px var(--sans);cursor:pointer;background:0 0;border-radius:10px;padding:7px 13px}.trust h4{color:var(--dim);letter-spacing:.14em;text-transform:uppercase;margin:4px 0 0;font-size:11px;font-weight:400}.trust-found{gap:8px;max-height:14em;display:grid;overflow:auto}.trust-group b{font:12.5px var(--mono);overflow-wrap:anywhere}.trust-group small{color:var(--err-soft);display:block}.trust-group ul{font:12px/1.5 var(--mono);color:var(--dim);overflow-wrap:anywhere;margin:2px 0 0;padding:0 0 0 1.2em}.trust-more{font-family:var(--sans);margin-left:-1.2em;font-style:italic;list-style:none}.trust-folder{font:600 13px/1.4 var(--mono);overflow-wrap:anywhere;margin:0}.trust .ask-why{max-height:none;overflow:visible}.trust .ask-acts>:last-child{margin-left:0}@media (width<=600px){.deploy-trust .trust-found{max-height:7em}.deploy-trust .ask-why{font-size:12px}}.deploy-trust:empty{display:none}.deploy-trust .ask{margin:0}.go,.later,.chat-pill,.cmp-send,.cmp-alt{font:600 13px var(--sans);cursor:pointer;border-radius:10px;padding:7px 13px;text-decoration:none}.go,.chat-pill{background:var(--c);color:var(--ink)}a.go{justify-content:center;align-items:center;display:inline-flex}.cmp-send{background:var(--accent);color:var(--ink);border:0}.later,.cmp-alt{border:1px solid var(--line);color:var(--text);background:0 0}.queued{color:var(--dim);flex:1 0 100%;font-size:12px}.queued:empty{display:none}html.paused *,html.paused :before,html.paused :after{animation-play-state:paused!important}@media (width<=1100px){.stage[data-view]{grid-template-columns:1fr}.side{position:static}}@media (width<=1040px){.stats{display:none}}.term-tile{grid-template-rows:auto minmax(0,1fr) auto;gap:10px;height:100%;display:grid}.tile-body:has(.term-tile){padding:12px 14px;overflow:hidden}.term-bar{justify-content:space-between;align-items:center;gap:12px;font-size:12px;display:flex}.term-scroll{transition:border-color .2s,box-shadow .2s}.term-scroll.typing{border-color:var(--accent);box-shadow:0 0 0 1px color-mix(in srgb, var(--accent) 40%, transparent), 0 0 22px color-mix(in srgb, var(--accent) 18%, transparent)}.term-scroll.engage{animation:.6s ease-out term-engage}.term-scroll.blip{animation:.22s ease-out term-blip}.term-scroll.blip.flip{animation-name:term-blip-b}@keyframes term-engage{0%{box-shadow:0 0 0 0 color-mix(in srgb, var(--accent) 80%, transparent), 0 0 0 color-mix(in srgb, var(--accent) 0%, transparent)}60%{box-shadow:0 0 0 7px color-mix(in srgb, var(--accent) 0%, transparent), 0 0 34px color-mix(in srgb, var(--accent) 40%, transparent)}to{box-shadow:0 0 0 1px color-mix(in srgb, var(--accent) 40%, transparent), 0 0 22px color-mix(in srgb, var(--accent) 18%, transparent)}}@keyframes term-blip{0%{box-shadow:0 0 0 2px color-mix(in srgb, var(--accent-hi) 80%, transparent), 0 0 32px color-mix(in srgb, var(--accent) 53%, transparent)}to{box-shadow:0 0 0 1px color-mix(in srgb, var(--accent) 40%, transparent), 0 0 22px color-mix(in srgb, var(--accent) 18%, transparent)}}@keyframes term-blip-b{0%{box-shadow:0 0 0 2px color-mix(in srgb, var(--accent-hi) 80%, transparent), 0 0 32px color-mix(in srgb, var(--accent) 53%, transparent)}to{box-shadow:0 0 0 1px color-mix(in srgb, var(--accent) 40%, transparent), 0 0 22px color-mix(in srgb, var(--accent) 18%, transparent)}}.term-sink{opacity:0;resize:none;pointer-events:none;border:0;width:1px;height:18px;padding:0;font-size:16px;position:fixed;overflow:hidden}.term-typing{color:var(--accent);margin-left:auto;font-weight:600;animation:1.6s ease-in-out infinite term-note}@keyframes term-note{50%{opacity:.55;text-shadow:0 0 10px color-mix(in srgb, var(--accent) 60%, transparent)}}.term-state{color:var(--dim)}.term-state[data-tone=ok]{color:var(--ok)}.term-state[data-tone=error]{color:var(--err-soft)}.term-scroll{overscroll-behavior:contain;border:1px solid var(--line);background:var(--term-bg);border-radius:14px;padding:8px 10px;overflow:auto}@font-face{font-family:SB Nerd Symbols;src:local(SymbolsNFM),local(Symbols Nerd Font Mono),local(HackNFM-Regular),url(./SymbolsNerdFontMono-DkrHkSnn.woff2)format("woff2");unicode-range:U+E000-F8FF,U+F0000-FFFFD;font-display:swap}.term{width:max-content;min-width:100%;color:var(--term-fg);font:12px/1.3 var(--mono);white-space:pre;font-family:ui-monospace,SF Mono,Menlo,Consolas,SB Nerd Symbols,monospace;transition:opacity .2s}.term .tr{min-height:1.3em}.term.stale{opacity:.5}.term.hidden{display:none}.plate[data-docs]:before{content:attr(data-docs);z-index:1;background:linear-gradient(var(--paper-hi), var(--paper));min-width:10px;height:16px;color:var(--paper-ink);font:700 9px/16px var(--mono);text-align:center;box-shadow:0 0 0 2px var(--plate), 2px 2px 0 1px var(--paper-edge);border-radius:3px 6px;padding:0 3px;position:absolute;top:-5px;left:-5px}.d-docs{text-align:left;margin-top:12px}.d-docs h4{text-align:center;margin:0 0 6px}.d-doc-list{gap:6px;display:grid}.d-doc{border:1px solid color-mix(in srgb, var(--paper) 25%, transparent);background:color-mix(in srgb, var(--paper) 7%, transparent) no-repeat 9px 50% / 13px 16px linear-gradient(var(--paper-hi), var(--paper));width:100%;color:var(--text);font:13px var(--sans);text-align:left;cursor:pointer;border-radius:10px;gap:1px;padding:7px 10px 7px 30px;display:grid}.d-doc:hover{border-color:color-mix(in srgb, var(--paper) 67%, transparent)}.d-doc b{overflow-wrap:anywhere;font-weight:600}.d-doc small{color:var(--dim);font-size:11px}.d-docs-cut{color:var(--dim);margin:6px 0 0;font-size:12px}.doc-tile{grid-template-rows:auto minmax(0,1fr);gap:10px;height:100%;display:grid}.tile-body:has(.doc-tile){padding:12px 14px;overflow:hidden}.doc-bar{flex-wrap:wrap;justify-content:flex-start}.doc-why{min-width:0;color:var(--text);flex:160px}.doc-off{color:var(--gold);font-style:normal}.doc-acts{align-items:center;gap:14px;display:flex}.doc-acts>.cmp-link{align-items:center;display:inline-flex}.doc-frame{border:1px solid color-mix(in srgb, var(--paper) 33%, transparent);background:#fff;border-radius:12px;width:100%;height:100%;min-height:240px}.doc-text{border:1px solid color-mix(in srgb, var(--paper) 25%, transparent);background:var(--plate);border-radius:12px;padding:14px 18px;overflow:auto}.doc-pre{white-space:pre-wrap;font:12.5px/1.45 var(--mono);margin:0}.pad{gap:6px;display:grid}.pad-row{grid-template-columns:repeat(auto-fit,minmax(48px,1fr));gap:6px;display:grid}.pad-key{border:1px solid var(--line);background:var(--surface-0);min-height:34px;color:var(--text);font:600 12px var(--mono);cursor:pointer;border-bottom-width:3px;border-radius:9px;padding:4px 6px}.pad-key:active:not(:disabled){background:var(--raised);border-bottom-width:1px;transform:translateY(2px)}.pad-key:disabled{opacity:.35;cursor:default}.pad-key[data-key=enter]{color:var(--accent)}.pad-key[data-key=esc]{color:var(--gold)}.pad-key:is([data-key=up],[data-key=down],[data-key=left],[data-key=right],[data-key=backspace]){font-size:16px}.pad-digits summary{color:var(--dim);cursor:pointer;padding:2px 0;font-size:12px}.pad-note:empty{display:none}.pad-note{color:var(--dim);flex-wrap:wrap;align-items:center;gap:6px 12px;margin:0;font-size:12px;display:flex}.pad-note[data-tone=error]{color:var(--err-soft)}.pad-note[data-tone=ask]{border:1px solid color-mix(in srgb, var(--amber) 40%, transparent);background:color-mix(in srgb, var(--amber) 8%, transparent);color:var(--text);border-radius:10px;padding:8px 10px}.pad-ask-why{flex:14rem;min-width:0}.pad-ask-acts{flex:none;gap:8px;display:flex}.pad-yes,.pad-no,.tcard-mask,.tcard-go{box-sizing:border-box;border:1px solid var(--line);min-height:34px;font:600 12px var(--sans);cursor:pointer;border-radius:9px;padding:0 14px}.pad-yes{border-color:var(--amber);background:var(--amber);color:var(--ink)}.pad-no{color:var(--text);background:0 0}.dock>.dialog{z-index:1}.tcard{z-index:0;--c1:transparent;--c4:var(--line);gap:10px;animation:.25s both tcard-in;display:grid}@keyframes tcard-in{0%{opacity:0;transform:translateY(8px)}}.tcard-cmd,.tcard-tail{font:12px/1.45 var(--mono);white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.tcard-cmd{background:var(--sunken);-webkit-user-select:text;user-select:text;border-radius:8px;max-height:6em;padding:6px 8px;overflow:auto}.tcard-cmd:before{content:"$ ";color:var(--dim)}.tcard-tail{color:var(--dim)}.tcard-tail:empty{display:none}.tcard.stale .tcard-tail{opacity:.5}.tcard-wait{margin:0;font-size:13px}.tcard-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.tcard-label{clip-path:inset(50%);width:1px;height:1px;position:absolute;overflow:hidden}.tcard-input{background:var(--sunken);min-width:0;min-height:34px;font:13px var(--mono);flex:8rem}.tcard-mask{color:var(--text);background:0 0}.tcard-go{border-color:var(--amber);background:var(--amber);color:var(--ink)}.tcard-mask[aria-pressed=true]{border-color:var(--amber)}:is(.tcard-go,.tcard-mask):disabled{opacity:.45;cursor:default}.tcard-full{justify-self:end}.c0{color:#414868}.cz{color:var(--term-bg)}.c1{color:#f7768e}.c2{color:#9ece6a}.c3{color:#e0af68}.c4{color:#7aa2f7}.c5{color:#bb9af7}.c6{color:#7dcfff}.c7{color:#a9b1d6}.c8{color:#545c7e}.c9{color:#ff899d}.c10{color:#9fe044}.c11{color:#faba4a}.c12{color:#8db0ff}.c13{color:#c7a9ff}.c14{color:#a4daff}.c15{color:#c0caf5}.k0{background:var(--term-bg)}.k1{background:#f7768e}.k2{background:#9ece6a}.k3{background:#e0af68}.k4{background:#7aa2f7}.k5{background:#bb9af7}.k6{background:#7dcfff}.k7,.kz{background:#a9b1d6}.k8{background:#545c7e}.k9{background:#ff899d}.k10{background:#9fe044}.k11{background:#faba4a}.k12{background:#8db0ff}.k13{background:#c7a9ff}.k14{background:#a4daff}.k15{background:#c0caf5}.tb{font-weight:700}.td{opacity:.6}.ti{font-style:italic}.tu{text-decoration:underline}.ts{text-decoration:line-through}.tu.ts{text-decoration:underline line-through}.drawer,.drawer-veil{display:none}.drawer{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;z-index:30;background:var(--surface-0);border-right:1px solid var(--line);width:min(86vw,360px);box-shadow:8px 0 30px color-mix(in srgb, var(--shadow) 50%, transparent);transform:translateX(calc(var(--dx,0px) - 100%));visibility:hidden;flex-direction:column;transition:transform .22s ease-out,visibility 0s .22s;display:flex;position:fixed;inset:0 auto 0 0}.drawer.on{visibility:visible;transition:transform .22s ease-out}.drawer-veil{z-index:29;background:color-mix(in srgb, var(--shadow) 60%, transparent);opacity:0;pointer-events:none;transition:opacity .22s;position:fixed;inset:0}.drawer-drag .drawer,.drawer-drag .drawer-veil{transition:none}.drawer>header{padding:max(12px, env(safe-area-inset-top)) 12px 8px max(14px, env(safe-area-inset-left));color:var(--dim);letter-spacing:.1em;text-transform:uppercase;justify-content:space-between;align-items:center;font-size:12px;display:flex}.drawer-body{overscroll-behavior:contain;min-height:0;padding:4px 10px 16px max(10px, env(safe-area-inset-left));flex:1;align-content:start;gap:12px;display:grid;overflow-y:auto}.drawer-foot{padding:8px 10px max(10px, env(safe-area-inset-bottom)) max(10px, env(safe-area-inset-left));border-top:1px solid var(--line);background:var(--surface-0);flex:none}.drawer-sweep{justify-content:flex-end;margin-bottom:8px;display:flex}.drawer-sweep[hidden]{display:none}.drawer-sweep .pair-btn{flex:1;min-height:36px}.drawer-sweep .pair-btn[hidden]{display:none}.drawer-map{border:1px solid var(--line);background:color-mix(in srgb, var(--hi) 4%, transparent);min-height:48px;color:var(--text);border-radius:12px;justify-content:center;align-items:center;padding:0 12px;font-size:14px;font-weight:600;text-decoration:none;display:flex}.drawer-map[aria-current]{color:var(--dim)}.dbase h3{justify-content:space-between;align-items:baseline;gap:8px;margin:0 0 6px;font-size:14px;display:flex}.dbase h3 a{color:var(--text);text-overflow:ellipsis;white-space:nowrap;text-decoration:none;overflow:hidden}.dbase h3 small,.dgroup h4{color:var(--dim);letter-spacing:.1em;text-transform:uppercase;font-size:11px}.dbase[data-mark=waiting] h3 a{color:var(--c)}.dgroups,.drows{gap:6px;display:grid}.dgroup h4{margin:4px 0 0;font-weight:600}.drawer .card{gap:8px;min-height:44px;padding:6px 8px}.drawer .plate{--s:28px}.drawer .subs{margin-left:16px;padding-left:12px}.drawer .trow{justify-content:space-between;align-items:center;gap:8px;display:flex}.drawer .tower-go{border:1px solid var(--line);min-width:0;min-height:44px;color:var(--c);border-radius:12px;flex:1;align-items:center;gap:8px;padding:0 8px;text-decoration:none;display:flex}.drawer .tower-go .meta{min-width:0;color:var(--text);display:grid}.drawer .tower-go .line{gap:6px;min-width:0;display:flex}.drawer .tower-row.current>.trow>.tower-go{border-color:var(--c4);background:var(--c1)}.drawer .tower-go .plate{--s:28px;flex:none}.drawer .tower-add{white-space:nowrap;flex:none;place-items:center;min-width:56px;min-height:44px;padding:0 12px;display:grid}.drawer .tower-add[hidden]{display:none}.drawer .quit-btn{min-height:44px}.drawer .quit-btn[hidden]{display:none}.drawer .line{gap:6px}.drawer .dstate{color:var(--c);flex:none;font-size:11px;font-weight:600}.drawer .unit.current>.card{background:var(--c1);border-color:var(--c4)}.drawer .unit.current>.card>.hit:after{content:"›";color:var(--c);font:700 20px/1 var(--sans);position:absolute;top:50%;right:12px;transform:translateY(-50%)}.drawer .unit[data-dismiss]>.card{transform:translateX(var(--sx,0px));opacity:var(--so,1);transition:transform .2s ease-out,opacity .2s}.drawer .unit>.card.swiping{transition:none}.drawer .unit>.card.gone{--sx:110%;--so:0}@media (width<=640px){.drawer{display:flex}.drawer-veil{display:block}}@media (width<=900px){.work{flex-direction:column;align-items:stretch}.view,.tiles{flex:none}.tile{position:static}.keep{flex-wrap:wrap}}@media (width<=640px){.shell{padding:max(8px, env(safe-area-inset-top)) max(8px, env(safe-area-inset-right)) calc(24px + env(safe-area-inset-bottom)) max(8px, env(safe-area-inset-left))}.hud{flex-wrap:wrap;gap:10px;padding:10px 12px;position:static}.brand p,.link span{display:none}.alert-row{flex:100%;order:3;min-width:0}.alert-row .alerts{flex:auto;width:auto;min-width:0}.done-btn{min-height:40px}.brand{flex:auto;min-width:0}.prefs-btn{width:40px;height:40px}.tl-span{display:none}.crumbs{gap:6px}.crumbs>*+:before{margin-right:6px}.crumbs>*{max-width:16ch}.crumbs:not(.open)>.mid{display:none}.crumbs:not(.open)>.crumb-more{flex:none;display:block}.crumbs.open{flex-wrap:wrap;row-gap:4px}.map,.zoom-in{padding:14px}.bases{column-gap:18px}.legend{display:none}.keep{gap:12px;padding:6px}.tower.big{width:84px;height:84px}.tower-drones{padding-left:1px}.drones.tower-drones:before{left:48px}.tally{flex-wrap:wrap}.col{width:100%}.dossier:not(.full){content-visibility:hidden}.comms-in,.dossier.full{left:0;right:0;top:var(--vvt,0px);height:var(--vvh,100dvh);background:var(--bg);position:fixed}.tiles:has(.tile){left:0;right:0;top:var(--vvt,0px);height:var(--vvh,100dvh);background:var(--bg);position:fixed}.comms-in{z-index:15;border:0;border-radius:0;grid-template-columns:minmax(0,1fr);min-height:0}#session-view.enter-slide,#session-view.enter-back{animation:none}#session-view.enter-slide>.comms-in{animation:.4s ease-out both slide}#session-view>.lost{inset:var(--vvt,0px) 0 auto;height:var(--vvh,100dvh);z-index:15;background:var(--bg);margin:0;position:fixed}.tiles:has(.tile){z-index:16;padding:8px;overflow-y:auto}.tile{height:calc(var(--vvh,100dvh) - 16px);border-radius:16px;min-height:300px}.dossier.full{z-index:17;overscroll-behavior:contain;padding:max(16px, env(safe-area-inset-top)) 16px calc(16px + env(safe-area-inset-bottom));border:0;border-radius:0;overflow-y:auto}.dossier.full .d-x{place-items:center;display:grid;position:absolute;top:0;right:0}.comms-head{padding:max(10px, env(safe-area-inset-top)) 12px 10px;grid-template-columns:auto minmax(0,1fr) auto auto auto;gap:8px 10px;display:grid}.comms-head .logo{display:none}.head-back{border:1px solid var(--line);width:40px;height:40px;color:var(--text);border-radius:12px;place-items:center;font-size:24px;text-decoration:none;display:grid}.head-info,.head-main:not([hidden]),.head-quit:not([hidden]){margin:0;padding:0 12px;display:block}.comms-head h2 small,.chan b{display:none}.modes+.chan{margin-left:0}.modes{border:1px solid var(--line);border-radius:12px;grid-area:2/1/auto/-1;padding:3px}.modes button{border:0;border-radius:9px;flex:1;min-height:40px;padding:0;font-size:14px}.modes button[aria-pressed=true]{background:color-mix(in srgb, var(--accent) 12%, transparent)}.chat-scroll{overscroll-behavior:contain;padding:12px}.chat-scroll:focus-visible{outline:none}.bubble{max-width:92%}.composer{padding:10px 12px calc(10px + env(safe-area-inset-bottom))}.cmp-foot:has(>.cmp-note:empty){display:none}.cmp-row{flex-wrap:wrap}.composer textarea{flex:100%;order:-1;min-height:64px}.cmp-acts{margin-left:auto}.dock,.dock.wide{width:calc(100vw - 20px);top:auto;right:10px}.dock{bottom:calc(10px + env(safe-area-inset-bottom))}.dock.wide{transform:none}.dialog .zoom{display:none}}@media (pointer:coarse){.composer textarea,.ask input,.ask textarea,.wait-box{font-size:16px}.composer button,.go,.later,.x,.chat-pill,.pair-btn,.alerts,.ask button,.term-bar button,.doc-acts>.cmp-link,.quit-btn,.d-doc{min-height:40px}}@media (width<=640px),(pointer:coarse){.pad-key,.pad-yes,.pad-no,.tcard-mask,.tcard-go,.tcard-input,.tcard .x,.tcard-full{min-height:44px}.pad-digits summary{padding:14px 0}.tcard-input{font-size:16px}}@media (width<=640px){.tcard{margin:0 -10px calc(-10px - env(safe-area-inset-bottom));padding-bottom:calc(14px + env(safe-area-inset-bottom));border-radius:18px 18px 0 0}.tcard h2{margin:0;font-size:13px}.brand{min-height:44px}.prefs-btn{width:44px;height:44px}.crumbs{align-items:center}.crumbs>*{padding-block:14px;line-height:16px}:is(.pair-btn,.alerts,.done-btn,.quit-btn,.later,.go,.x,.d-doc,.ask-send,.ask-cancel,.ask-opt,.sheet-yes,.cmp-yes,.chat-pill){min-height:44px}:is(.pair-btn,.quit-btn,.later,.go,.x,.tab-add,.ask-send,.ask-cancel,.sheet-yes,.cmp-yes){min-width:44px}.set-head .head-back{width:44px;min-height:44px}.lan summary{min-width:44px;padding-block:13px}.set-ctl input[type=range]{min-height:44px}.set-group{padding:12px}.set-row .lang{max-width:55%}.set-ctl{flex-wrap:wrap}.head-node:before{content:"";position:absolute;inset:-5px 0}.tab h3{min-height:44px}:is(.tab-add,.thought,.more,.tab-btn){isolation:isolate;background:0 0;border:0;min-height:44px;position:relative}:is(.tab-add,.thought,.more,.tab-btn):before{content:"";z-index:-1;border:1px solid var(--line);pointer-events:none;border-radius:999px;position:absolute;inset:11px 0}.tab-add:before{border-radius:10px}.tab-btn.active:before,.more.open:before{border-color:color-mix(in srgb, var(--gold) 40%, transparent)}:is(.act>summary,.notice>summary,.rule summary,.todos summary,.monitors summary,.timeline summary){box-sizing:border-box;align-items:center;min-height:44px;padding-block:0}.todos,.monitors{padding-block:0}:is(.todos ol,.monitors ul){margin:0 0 10px}.link-form summary{padding-block:13px}.queue-act{flex-wrap:nowrap;justify-content:flex-end;gap:10px}.queue-act button{flex:none;min-width:56px;min-height:44px}.trust .ask-acts{grid-template-columns:1fr 1fr;gap:8px;display:grid}.trust .ask-send{grid-column:1/-1}.tl-mark{pointer-events:none}.picker-body{height:clamp(180px,100dvh - 412px,360px)}.tile:has(.spawn,.pair){max-height:calc(var(--vvh,100dvh) - 16px)}.teams-tile{grid-template-columns:minmax(0,1fr)}.teams-tile b{white-space:normal;overflow-wrap:anywhere}.specs a,.d-squad a{padding-block:12px;line-height:20px;display:inline-block}.specs a{margin-block:-7px}.dbase h3{align-items:center}.dbase h3 a{padding-block:12px;line-height:20px}.cmp-link{align-items:center;padding-inline:8px;display:inline-flex}:is(.ask,.term-bar,.doc-acts,.composer) :is(button,.cmp-link){min-height:44px}.slash li{align-items:center;min-height:44px}:where(input:not([type=checkbox],[type=radio],[type=file],[type=hidden]),select,textarea){box-sizing:border-box;min-height:44px}.picker-crumbs button,.picker-places button,.pitem,.drawer-sweep .pair-btn{min-height:44px}.head-back{width:44px;min-width:44px;height:44px}.modes button{min-height:44px}:is(.head-info,.head-main:not([hidden]),.head-quit:not([hidden]),.ally-asks-btn){min-width:44px;min-height:44px}.composer textarea{min-height:56px}.cmp-row{gap:8px 10px}.comms-in .ask-acts{background:color-mix(in srgb, var(--amber) 6%, var(--bg));margin:0 -14px -12px;padding:8px 14px 12px;position:sticky;bottom:-12px}.composer :is(.cmp-alt,.cmp-send){min-height:48px}.composer .cmp-alt{min-width:48px}.composer .cmp-send{min-width:64px}}@media (prefers-reduced-motion:reduce){:not(.zen-hl),:before,:after{transition:none!important;animation:none!important}.connect-reload{animation:0s linear 10s forwards connect-reveal!important}}.base.ally{background:linear-gradient(180deg, color-mix(in srgb, var(--accent) 7%, transparent), transparent 42%), linear-gradient(180deg, var(--surface-1), var(--surface-0))}.base.ally .crown{color:var(--accent);background:color-mix(in srgb, var(--accent) 12%, transparent);text-transform:none;letter-spacing:.04em;display:inline-flex}.base.ally.offline{opacity:.55}.ally-tabs{gap:4px;margin:0;padding:0;list-style:none;display:grid}.ally-tab{border:1px solid var(--line);border-radius:10px;justify-content:space-between;gap:10px;padding:6px 10px;font-size:12px;display:flex}.ally-tab b{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ally-tab span{color:var(--dim);flex:none}.ally-units{gap:4px;margin:6px 0 0;padding:0;list-style:none;display:grid}.ally-units:empty{display:none}.ally-unit{border-left:2px solid var(--accent);grid-template-columns:1fr auto;gap:2px 10px;padding:6px 10px;font-size:12px;display:grid}.ally-unit b{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ally-unit span{color:var(--dim)}.ally-unit pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:6.5em;color:var(--dim);font:inherit;grid-column:1/-1;margin:0;overflow:auto}.ally-tab[data-state=working] span{color:var(--accent)}.ally-tab[data-state=blocked] span{color:var(--amber)}.ally-asks{gap:6px;margin-top:6px;display:grid}.ally-asks[hidden],.ally-asks-list[hidden]{display:none}.ally-asks-btn{border:1px solid color-mix(in srgb, var(--amber) 55%, transparent);background:color-mix(in srgb, var(--amber) 12%, transparent);color:var(--text);font:600 12px var(--sans);text-align:left;cursor:pointer;border-radius:12px;justify-self:start;padding:6px 10px}.ally-asks-btn:after{content:"▾";margin-left:8px}.ally-asks-btn[aria-expanded=true]:after{content:"▴"}.ally-asks-list{gap:8px;margin:0;padding:0;list-style:none;display:grid}.base.ally[data-asks] :is(.ally-unit,.ally-tab)[data-state=blocked]{cursor:pointer}.link-pop{width:min(460px,100vw - 16px)}.link-pop ul{gap:8px;max-height:60vh;margin:0;padding:0;list-style:none;display:grid;overflow:auto}.link-alert{border:1px solid var(--line);border-radius:10px;gap:6px;padding:8px 10px;font-size:13px;display:grid}.link-alert[data-level=error]{background:#f7768e1a}.link-alert[data-level=warning]{background:color-mix(in srgb, var(--amber) 9%, transparent)}.link-args{border:1px solid var(--line);white-space:pre-wrap;word-break:break-word;border-radius:8px;max-height:180px;margin:0;padding:8px;font-size:11px;overflow:auto}.link-alert[data-kind=notice]{grid-template-columns:1fr auto;align-items:start}.link-alert[data-kind=notice] span{overflow-wrap:anywhere;max-height:7em;overflow:auto}.link-note{color:var(--dim)}.link-note:empty,.link-dialog:empty{display:none}.link-alert .ask{background:0 0;border:0;margin:0;padding:0}.link-alert .ask-acts{background:var(--card);padding:6px 0 8px;position:sticky;bottom:-8px}.link-alert[data-kind=dialog]{--card:color-mix(in srgb, var(--amber) 9%, var(--raised));background:var(--card)}.link-alert[data-kind=dialog][data-level=info]{--card:var(--raised)}.link-alert[data-kind=dialog]:not([data-state=open]) .link-note{color:var(--text);font-size:13px}.link-alert[data-kind=dialog][data-state=done-here] .link-note{color:var(--ok)}.link-alert[data-kind=dialog][data-state=expired] .link-note{color:var(--gold)}.teams-tile{gap:14px;padding:4px 2px 12px;font-size:13px;display:grid}.teams-tile .go{--c:var(--accent);border:0}.teams-tile h3{font-size:15px}.teams-tile h4{margin:0 0 4px;font-size:13px}.link-status{min-height:1.2em;color:var(--amber);margin:0}.link-short{color:var(--dim);font-family:ui-monospace,monospace}.link-meta{color:var(--dim);overflow-wrap:anywhere;margin:2px 0 8px;font-size:12px}.link-team,.link-request,.link-invite,.link-form{border:1px solid var(--line);background:color-mix(in srgb, var(--surface-1) 70%, transparent);border-radius:12px;padding:10px 12px}.link-request{background:color-mix(in srgb, var(--amber) 9%, transparent)}.link-team[data-status=stopped]{background:#f7768e1a}.link-warn{border:1px solid var(--line);background:color-mix(in srgb, var(--amber) 10%, transparent);border-radius:8px;margin:6px 0;padding:6px 10px}.link-roster{border-collapse:collapse;width:100%;margin:6px 0 10px}.link-roster th{text-align:left;color:var(--dim);padding:2px 6px;font-size:11px;font-weight:500}.link-roster .nw{white-space:nowrap}.link-roster select{max-width:100%}.link-roster td{vertical-align:middle;overflow-wrap:anywhere;padding:5px 6px}.link-roster tr[data-online=false] td{color:var(--dim)}.link-roster em{color:var(--dim);margin-left:6px;font-size:11px;font-style:normal}.link-roster .link-dup{color:var(--amber)}.link-acts{flex-wrap:wrap;gap:6px;display:flex}.link-acts button{white-space:nowrap}.link-inline{gap:8px;margin-top:8px;display:flex}.link-inline input{flex:1;min-width:0}.link-words{gap:8px;margin:8px 0;display:grid}.link-set{letter-spacing:.02em;text-align:left;padding:10px 12px;font-size:15px}.link-bigwords{letter-spacing:.04em;overflow-wrap:anywhere;margin:8px 0;font-size:20px;font-weight:700}.link-invite{justify-items:start;gap:8px;display:grid}.link-invite .qr{border-radius:8px;width:min(240px,100%);height:auto}.link-invite textarea,.link-form textarea{width:100%;font-family:ui-monospace,monospace;font-size:11px}.link-invite[data-lapsed=true] .qr{opacity:.25}.link-count{font-variant-numeric:tabular-nums}.link-form{gap:8px;display:grid}.link-form summary{cursor:pointer;font-weight:600}.link-form label{color:var(--dim);gap:3px;display:grid}.link-scan video{border-radius:10px;width:min(320px,100%)}.link-open-invite{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.teams-tile [data-armed=true]{color:var(--amber)}@media (width<=640px){.link-roster thead{display:none}.link-roster tr{border-bottom:1px solid var(--line);grid-template-columns:1fr 1fr;gap:2px 8px;padding:6px 0;display:grid}}.tower-memory .tmem>summary{cursor:pointer;align-items:baseline;gap:8px;font-size:.85em;display:flex}.tower-memory .tmem-counts{opacity:.7}.tmem-body{gap:10px;min-width:0;margin-top:6px;font-size:.85em;display:grid}.tmem-body h4{margin:0 0 4px;font-size:1em}.tmem-body h4 small{opacity:.6;margin-left:6px}.tmem-body ul{gap:4px;margin:0;padding:0;list-style:none;display:grid}.tmem-body li{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;display:flex}.tmem-body .tmem-text{overflow-wrap:anywhere;flex:14em;min-width:0}.tmem-body li small{opacity:.65}.tmem-ended .tmem-text{opacity:.6;text-decoration:line-through}.tmem-body input{flex:12em;min-width:0}.tmem-add{gap:6px;margin-top:4px;display:flex}.tmem-empty,.tmem-note{opacity:.7;margin:0}.tmem-body .tnote-fail{color:var(--err-soft)}.tmem-body .tnote-fail:empty{display:none}.tower-conv{border:1px solid var(--line);border-radius:10px;gap:4px;min-width:0;margin-bottom:6px;padding:8px 10px;font-size:.85em;display:grid}.tower-conv[hidden]{display:none}.tower-conv p{overflow-wrap:anywhere;min-width:0;margin:0}.tower-conv .conv-line>span{max-width:100%;display:inline-block}.tower-conv .conv-line b{color:var(--accent)}.tower-conv .conv-now,.tower-conv .conv-cap{opacity:.85}.tower-conv .conv-acts{flex-wrap:wrap;align-items:center;gap:6px 8px;display:flex}.tower-conv .conv-acts button:disabled{opacity:.6;cursor:progress}.tower-conv .conv-done{color:var(--dim)}.tower-conv .conv-done:empty,.tower-conv .tnote-fail:empty{display:none}.tower-conv .tnote-fail{color:var(--err-soft)}.tower-conv .conv-runs{flex-wrap:wrap;gap:4px 6px;display:flex}.tower-conv :is(.conv-facts,.conv-runs-bar){display:none}.tx.conv-rule{justify-content:center;padding:6px 0;display:flex}.tx.conv-rule>div{border-top:1px solid color-mix(in srgb, var(--accent) 40%, transparent);color:var(--accent);text-align:center;flex-wrap:wrap;justify-content:center;gap:2px 10px;padding:2px 12px;font-size:.8em;display:flex}.tx.conv-rule small{color:var(--dim)}.term-bar .term-kb{border:1px solid var(--line);background:var(--surface-0);border-radius:9px;padding:4px 12px;font-weight:600}.term-bar .term-kb[aria-pressed=true]{border-color:var(--accent);background:color-mix(in srgb, var(--accent) 14%, var(--surface-0))}@media (width<=640px){.term-typing{display:none}.menu-btn{letter-spacing:0;place-items:center;width:44px;min-width:44px;height:44px;padding:0;font-size:22px;line-height:1;display:grid}.menu-pop:not(:popover-open){display:none}.menu-pop:popover-open{gap:6px;min-width:200px;max-width:calc(100vw - 16px);display:grid}.menu-pop :is(.pair-btn,.quit-btn){text-align:left;justify-content:flex-start;width:100%;margin:0;padding-inline:14px}.menu-pop .quit-btn{opacity:1;font-size:14px}.menu-pop:popover-open .quit-btn{color:var(--err-soft)}.hud{gap:6px 8px;padding:6px 8px 6px 10px}.bar-acts{gap:6px;display:grid}.bar-acts .pair-btn{justify-content:flex-start;width:100%}body[data-route=map] .crumbs{display:none}body[data-route=map] .bar{margin:0}.map{min-height:0;padding:8px}.base :is(.card>.quit-btn[data-close=unit],.tower-quit){display:none}.comms-head{padding-block:max(6px, env(safe-area-inset-top)) 6px;gap:6px 8px}.comms-head:not([data-tower]) .menu-btn{display:none}.comms-head:not([data-tower]) .menu-pop{display:contents}.modes{padding:1px}.tx.in{grid-template-columns:minmax(0,1fr)}.tx.in>.ava{display:none}.tx.sys,.chat-live{padding-left:0}.tower-notes,.queue-bar,.queue-list,.queue-act,.todos,.monitors{margin-inline:10px}.todos,.monitors{margin-top:2px}.composer{padding:6px 10px calc(6px + env(safe-area-inset-bottom))}.composer textarea{min-height:44px}.cmp-row{gap:6px 10px}.queue-bar:not([hidden]){margin-bottom:0;display:block}.queue-fold{border:1px dashed color-mix(in srgb, var(--accent) 45%, transparent);width:100%;min-height:44px;color:var(--accent);font:600 13px var(--sans);text-align:left;cursor:pointer;background:0 0;border-radius:12px;justify-content:space-between;align-items:center;padding:0 14px;display:flex}.queue-fold:after{content:"▸";color:var(--dim)}.queue-bar[data-open] .queue-fold:after{content:"▾"}.queue-bar:not([hidden]):not([data-open])~:is(.queue-list,.queue-act){display:none}.tower-conv{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:0 4px;margin-bottom:0;padding:0 0 0 12px}.tower-conv .conv-line{white-space:nowrap;text-overflow:ellipsis;grid-column:1;overflow:hidden}.tower-conv .conv-line>span{max-width:none;display:inline}.tower-conv .conv-line>:is(.conv-began,.conv-cap,.conv-sep){display:none}.tower-conv .conv-line:has(.conv-now) b:after{content:" ·";color:var(--dim)}.tower-conv .conv-runs-bar{display:block}.tower-conv .conv-facts{color:var(--dim);font-size:12px;display:block}.menu-pop .conv-acts{gap:6px;display:grid}.menu-pop .conv-runs{gap:6px;padding-top:2px}.menu-pop .ally-chip{box-sizing:border-box;align-items:center;min-height:44px;padding-inline:12px;display:inline-flex}.tower-conv .menu-btn{background:0 0;border:0;grid-area:1/2}.zoom-in{min-height:0;padding:8px}.tally{grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;width:100%;display:grid}.tally div{padding:4px 6px}.squads,.camps{gap:10px;margin-top:10px}.squad{padding:10px}.squad h3{margin-bottom:8px}.formation{gap:8px;display:grid}.col{justify-items:stretch;gap:4px;width:100%}.col>.token{text-align:left;grid-template-columns:auto minmax(0,1fr);place-items:center start;column-gap:12px;padding:6px 10px}.col>.token .plate{--s:44px;grid-row:span 2;margin:0}.col>.token :is(.name,.line){grid-column:2}.col>.token .line{flex-wrap:wrap;align-items:baseline;gap:0 8px;display:flex}.col .say{margin-top:0}.col .drones{justify-content:flex-start;padding-top:8px}.base .card:has(>.quit-btn:not([hidden])){flex-wrap:wrap;row-gap:2px}.base .card>.meta{flex:1 1 0;min-width:0}.base .card>.quit-btn:not([hidden]){flex:100%;margin:0}.base .card>.quit-btn:not([hidden])~.ticks{bottom:3px}.comms-in .ask-opts{max-height:none;overflow:visible}.comms-in .ask-ctx,.comms-in .ask-why{max-height:5em}.comms-in .ask-acts{z-index:1}.comms-in .ask[data-more] .ask-acts:before{content:attr(data-cue);text-align:center;color:var(--gold);white-space:nowrap;pointer-events:none;flex:100%;order:-1;padding:0;font-size:12px;line-height:18px}.comms-in .ask[data-more] .ask-acts:after{content:"";background:linear-gradient(transparent, color-mix(in srgb, var(--amber) 6%, var(--bg)));pointer-events:none;z-index:-1;height:24px;position:absolute;bottom:100%;left:0;right:0}.composer textarea::placeholder{font-size:13px}}@media (width<=380px){.composer textarea::placeholder{font-size:12px}.tower-conv .conv-line{-webkit-line-clamp:2;white-space:normal;-webkit-box-orient:vertical;padding-block:6px;display:-webkit-box}.composer:has(textarea:placeholder-shown:not(:focus)) .cmp-row{flex-wrap:nowrap;align-items:center}.composer:has(textarea:placeholder-shown:not(:focus)) textarea{flex:1 1 0;order:0;min-width:0}.composer:has(textarea:placeholder-shown:not(:focus)) .cmp-row>.cmp-alt{order:-1}.composer:has(textarea:placeholder-shown:not(:focus)) .cmp-acts{order:1;margin-left:0}.brand{flex:1 1 0}[data-view=geek] .brand h1{letter-spacing:.06em;font-size:15px}[data-view=geek] .brand{gap:8px}}.settings.view{grid-template-columns:minmax(0,1fr);align-content:start;gap:14px;width:100%;max-width:760px;margin-inline:auto;display:grid}.set-head{align-items:center;gap:12px;display:flex}.set-head h2{font:600 20px var(--sans);margin:0}.set-head .head-back{border:1px solid var(--line);width:40px;height:40px;color:var(--text);border-radius:12px;place-items:center;font-size:24px;text-decoration:none;display:grid}.set-group{border:1px solid var(--line);background:var(--panel);border-radius:18px;grid-template-columns:minmax(0,1fr);gap:4px;padding:14px 18px;font-size:13px;display:grid}.set-group h3{font:600 15px var(--sans);margin:0}details.set-group>summary{cursor:pointer;align-items:center;gap:10px;min-height:44px;list-style:none;display:flex}details.set-group>summary::-webkit-details-marker{display:none}details.set-group>summary:after{content:"▸";color:var(--dim);margin-left:auto}details.set-group[open]>summary:after{content:"▾"}details.set-group:not([open]){padding-block:6px}details.set-group[open]>summary{margin-bottom:8px}details.set-group[hidden]{display:none}.set-note{color:var(--dim);margin:0;font-size:12px}.set-note:empty{display:none}.set-row{justify-content:space-between;align-items:center;gap:12px;min-height:44px;display:flex}.set-row>:first-child{color:var(--text);font-size:14px}.set-row .tog{text-transform:none;letter-spacing:0;justify-content:flex-start;min-width:7em;font-size:13px}.set-sub{padding-left:14px}.set-sub>:first-child{color:var(--dim);font-size:13px}.set-ctl{flex:auto;justify-content:flex-end;align-items:center;gap:10px;min-width:0;display:flex}.set-ctl input[type=range]{min-width:0;max-width:220px;accent-color:var(--accent);flex:1}.set-ctl output{text-align:right;width:3ch;font:12px var(--mono);color:var(--dim)}.set-ctl .pair-btn{text-transform:none;letter-spacing:0}.set-row .lang{max-width:60%}.set-body .pair-btn{text-transform:none;letter-spacing:0}.set-body{min-width:0}.set-body .pair,.set-body .teams-tile{padding:0}.set-body .chat-empty{padding:6px 0}.set-body .chat-empty:empty{display:none}.set-row+.set-note{margin-top:-2px}body[data-route=settings] :is(.bar-acts,.crumbs){display:none}[data-view=geek]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#000;--bg-2:#000;--surface-0:#0d0d0d;--surface-1:#161616;--raised:#0d0d0d;--sunken:#000;--well:#000;--panel:#0d0d0d;--plate:#000;--plate-hi:#1f1f1f;--term-bg:#000;--term-fg:#f2f2f2;--line-c:#8a8a8a;--line:#8a8a8a;--hi:#fff;--shadow:#000;--text:#f2f2f2;--dim:#bdbdbd;--ink:#000;--accent:#5fd7ff;--accent-hi:#a8e8ff;--working:#5fd7ff;--gold:#ffd75f;--amber:#ffd75f;--ok:#87e087;--err:#ffa0a0;--err-soft:#ffb4b4;--violet:#d7afff;--idle:silver;--unknown:#bababa;--paper-hi:#f6e6b8;--paper:#d8bd78;--paper-ink:#3b2a06;--paper-edge:#8a6f33;--aura-1:transparent;--aura-2:transparent;--grid:none;--sans:var(--mono)}[data-view=geek] body{font-size:13px}[data-view=geek] [data-mark]{--c1:color-mix(in srgb, var(--c) 12%, transparent);--c4:var(--line)}[data-view=geek] *,[data-view=geek] :before,[data-view=geek] :after{scroll-behavior:auto!important;box-shadow:none!important;text-shadow:none!important;transition:none!important;animation:none!important}[data-view=geek] :is(.logo svg,.deploy-title svg,.tower svg){filter:none}[data-view=geek] .hud{-webkit-backdrop-filter:none;backdrop-filter:none}[data-view=geek] .card:hover,[data-view=geek] :is(.pair-btn,.tab-add,.quit-btn,.go,.later,.cmp-send,.cmp-alt,.ask-send,.ask-cancel,.sheet-yes,.new-base,.modes button,.pitem,.d-doc,.thought,.more,.tab-btn,.pad-key):active:not(:disabled){transform:none!important}[data-view=geek] .pad-key{border-bottom-width:1px}[data-view=geek] :where(:not(.token,.stats>div,.pulse)),[data-view=geek] :not(.plate,.tower):before,[data-view=geek] :not(.plate,.tower):after{border-color:var(--line)!important}[data-view=geek] .drawer .unit.current>.card{border-color:var(--text)!important}[data-view=geek] :is(.base,.base.ally,.dialog,.tcard,.squad,.squad[data-mark=waiting]){background:var(--surface-0)}[data-view=geek] :is(.plate,.logo,.ava){background:var(--plate)}[data-view=geek] :is(.plate,.ava){border:1px solid var(--line)}[data-view=geek] .comms-head[data-head]:not([data-mark=commanding]) .logo{border-color:var(--line)}[data-view=geek] .comms-head[data-head] .logo{background:var(--plate)}[data-view=geek] .comms-head[data-head] .logo svg{filter:none}[data-view=geek] .portrait{background:0 0}[data-view=geek] .deploy-fill{background:var(--accent)}[data-view=geek] .tower:before{border-color:var(--line)}[data-view=geek] :is(.unit[data-mark=idle]>.card,.tower.ghost,.base.ally.offline,.stage[data-stale=true] .map,body[data-stale=true] .stats,body[data-stale=true] .work),[data-view=geek] :is(.line .age,.todo span,.tower-conv .conv-now,.tower-conv .conv-cap,.bubble .boss-flag,.notice>.boss-flag,.tmem-empty,.tmem-note,.tmem-counts,.tmem-body li small,.tmem-body h4 small,.foot .credit,.tmem-ended .tmem-text){opacity:1}[data-view=geek] .link span{clip-path:none;width:auto;height:auto;display:inline;position:static;overflow:visible}[data-view=geek] [data-mark=working]{--tag:"[WORK]"}[data-view=geek] [data-mark=waiting]{--tag:"[WAIT?]"}[data-view=geek] [data-mark=commanding]{--tag:"[CMD◈]"}[data-view=geek] [data-mark=idle]{--tag:"[IDLE]"}[data-view=geek] [data-mark=done]{--tag:"[DONE✓]"}[data-view=geek] [data-mark=error]{--tag:"[ERR!]"}[data-view=geek] [data-mark=unknown]{--tag:"[UNKN]"}[data-view=geek] :is(.card,.token) .name:before{content:var(--tag);color:var(--c);margin-right:1ch;font-weight:400}[data-view=geek] .token .name:before{margin-right:0;display:block}[data-view=geek] .tog:before{display:none}[data-view=geek] .set-row .tog:before{content:"[";width:auto;height:auto;color:inherit;font:inherit;background:0 0;border-radius:0;display:inline}[data-view=geek] .set-row .tog:after{content:"]"}[data-view=geek] :is(.modes button[aria-pressed=true],.term-bar .term-kb[aria-pressed=true],.pair-tabs .later.on,.pair-tabs .later[aria-selected=true],.tab-btn.active,.view-pick button[aria-pressed=true],.pcol[data-focus=true] .pitem[aria-selected=true]){background:var(--text);color:var(--ink);font-weight:700}[data-view=geek] .pitem[aria-selected=true]{background:var(--surface-1);color:var(--text);font-weight:700}[data-view=geek] .ask-opt[aria-checked=true]{background:var(--text);color:var(--ink);font-weight:700}[data-view=geek] :is(.ask-opt[aria-checked=true] small){color:var(--ink)}[data-view=geek] .ask-head{background:0 0}[data-view=geek] ::selection{background:var(--text);color:var(--ink)}[data-view=geek] a.ally-chip:hover,[data-view=geek] .banner{background:var(--surface-1)}[data-view=geek] :is(.composer,.ask) button:disabled{opacity:1;color:var(--dim);border:1px dashed var(--line);cursor:not-allowed;background:0 0}[data-view=geek] .tl-mark:focus-visible{outline:2px solid var(--text);outline-offset:3px}@media (forced-colors:active){.connect-reload{color:linktext;border:1px solid linktext}.badge,.link i,.tog:before,.flag,.tl-mark:before{border:1px solid canvastext}.qr,.term-scroll{forced-color-adjust:none}.tcard{border:1px solid canvastext}.tcard-go{border:1px solid buttontext}.tcard-go:disabled,.tcard-mask:disabled{color:graytext;opacity:1;border-color:graytext}:is(.composer,.ask) button:disabled{opacity:1;color:graytext;border-color:graytext}:is(textarea,input)::placeholder{color:graytext;opacity:1}.subs:before,.subs>.unit>.card:before,.subs>.unit>.card:after,.drones:before,.links,.packets{display:none}}.head-btn{color:var(--gold);align-items:center;gap:6px;text-decoration:none;display:inline-flex;position:relative}.head-btn[hidden],.head-node[hidden],.drawer-head[hidden],.head-asks[hidden],.head-absent[hidden]{display:none}.head-btn svg{fill:currentColor;flex:none;width:14px;height:14px}.head-btn .dot{background:var(--gold);width:9px;height:9px;box-shadow:0 0 0 2px var(--surface-0);border-radius:50%;position:absolute;top:-3px;right:-3px}.head-btn .dot[hidden]{display:none}.head-btn[data-state=absent]{opacity:.7}.head-btn[aria-current=page]{background:color-mix(in srgb, var(--gold) 14%, transparent);border-color:color-mix(in srgb, var(--gold) 45%, var(--line))}.head-node{z-index:2;box-sizing:border-box;border:1px solid color-mix(in srgb, var(--gold) 40%, var(--line));background:linear-gradient(180deg, color-mix(in srgb, var(--gold) 12%, transparent), transparent 80%), linear-gradient(180deg, var(--surface-1), var(--surface-0));max-width:calc(100% - 16px);height:36px;color:var(--text);white-space:nowrap;box-shadow:0 6px 16px color-mix(in srgb, var(--shadow) 30%, transparent);border-radius:999px;align-items:center;gap:8px;padding:0 14px 0 3px;text-decoration:none;display:flex;position:absolute;top:0;left:50%;translate:-50% -25%}.map:has(>.head-node:not([hidden])){padding-top:36px}.head-node .tower{width:30px;height:30px}.head-node .tower svg{width:20px;height:20px}.head-node .tower>.badge{bottom:-4px;right:-4px}.head-node .crown{white-space:nowrap;letter-spacing:.14em;background:0 0;flex:none;margin:0;padding:0;font-size:11px}.head-node .crown svg{display:none}.head-node .tstate{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.head-node.absent{opacity:.55;box-shadow:none;border-style:dashed}.head-node:hover,.head-node:focus-visible{border-color:color-mix(in srgb, var(--gold) 70%, var(--line))}.head-asks{gap:6px;min-width:0;margin:0 0 8px;display:grid}.ask-group,.ask-older{border:1px solid var(--line);border-radius:12px;min-width:0}.ask-older>.ask-group{margin:0 8px 8px}.ask-group>summary,.ask-older>summary{box-sizing:border-box;cursor:pointer;flex-wrap:wrap;align-items:center;gap:0 8px;min-height:44px;padding:4px 12px;font-size:13px;list-style:none;display:flex}.ask-group>summary::-webkit-details-marker{display:none}.ask-older>summary::-webkit-details-marker{display:none}.ask-older>summary{color:var(--dim)}.ask-first{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text);flex:6em;overflow:hidden}.ask-meta{color:var(--dim);flex:0 auto;font-size:12px}.ask-towers{gap:2px;margin:0;padding:0 12px 8px;list-style:none;display:grid}.ask-line{flex-wrap:wrap;align-items:center;gap:0 10px;min-height:44px;display:flex}.ask-name{color:var(--text);font-size:13px;font-weight:600}a.ask-name{min-height:44px;color:var(--accent);align-items:center;text-decoration:none;display:inline-flex}a.ask-name:hover,a.ask-name:focus-visible{text-decoration:underline}.ask-state,.ask-none{color:var(--dim);font-size:12px}.ask-none{opacity:.75}.ask-tower[data-state=waiting] .ask-state{color:var(--gold)}.ask-tower[data-state=answered] .ask-state{color:var(--ok)}.ask-said{overflow-wrap:anywhere;margin:-6px 0 4px;font-size:13px;line-height:1.4}.head-acts{background:var(--panel);flex-wrap:wrap;align-items:center;gap:6px 8px;padding:8px 18px 0;display:flex}.head-acts[hidden]{display:none}.head-acts .head-close{margin-left:auto}.head-acts :is(.tnote-fail,.conv-done){flex:100%;font-size:12px}.head-acts .conv-done{color:var(--dim)}.head-acts .tnote-fail{color:var(--err-soft)}.head-acts :is(.tnote-fail,.conv-done):empty{display:none}.head-acts button:disabled{opacity:.6;cursor:progress}.head-acts :is(.pair-btn,.quit-btn){letter-spacing:0;text-transform:none;padding:0 12px;font-size:12px}.head-acts:not([hidden])+.composer-root .composer{padding-top:8px}@media (width<=640px){.head-acts{padding:6px 10px 0}}.tx.skip[hidden]{display:none}.head-absent{color:var(--dim);margin:0 0 8px;font-size:13px}.comms-head[data-head] .head-info{display:none!important}.comms-head[data-head] .head-menu{display:none}.head-node .tower svg,.tx.in.head .ava{color:var(--gold);fill:currentColor}.comms-head[data-head] .logo{color:var(--gold);background:radial-gradient(circle at 30% 25%, color-mix(in srgb, var(--gold) 30%, transparent), color-mix(in srgb, var(--bg-2) 90%, transparent))}.comms-head[data-head]:not([data-mark=commanding]) .logo{border-color:color-mix(in srgb, var(--gold) 45%, var(--line))}.comms-head[data-head] .logo svg{fill:currentColor;filter:drop-shadow(0 0 5px color-mix(in srgb, var(--gold) 70%, transparent))}.tx.rule.chapter p{color:var(--dim);letter-spacing:.08em;justify-content:center;align-items:center;gap:8px;margin:0;padding:5px 10px;font-size:11px;display:flex}.tx.rule.chapter p:before,.tx.rule.chapter p:after{content:"";background:var(--line);flex:1;height:1px}.drawer-head{min-height:48px;margin:4px 10px 8px max(10px, env(safe-area-inset-left));border:1px solid color-mix(in srgb, var(--gold) 35%, var(--line));color:var(--text);background:linear-gradient(180deg, color-mix(in srgb, var(--gold) 9%, transparent), transparent);border-radius:12px;flex:none;align-items:center;gap:10px;padding:0 12px;text-decoration:none;display:flex}.drawer-head[data-news] .name:after,.bar-more[data-news]:after{content:"";background:var(--gold);vertical-align:middle;border-radius:50%;width:9px;height:9px;margin-left:6px;display:inline-block}.bar-more[data-news]{position:relative}.bar-more[data-news]:after{margin:0;position:absolute;top:4px;right:4px}.drawer-head svg{width:18px;height:18px;fill:var(--gold);flex:none}.drawer-head .name{flex:1;min-width:0;font-size:14px}.drawer-head .dstate{color:var(--c);flex:none;font-size:11px;font-weight:600}.drawer-head.current{background:var(--c1);border-color:var(--c4)}[data-view=geek] :is(.head-node,.drawer-head){background:var(--surface-0);box-shadow:none}[data-view=geek] .head-btn[aria-current=page]{background:0 0}@media (width<=640px){.head-btn{min-height:44px}}@media (forced-colors:active){.head-btn .dot{background:highlight}.head-node.absent,.ask-group,.ask-older{border-color:canvastext}}
|