spexcode 0.2.3 → 0.2.5

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.
Files changed (58) hide show
  1. package/README.md +2 -2
  2. package/package.json +1 -1
  3. package/spec-cli/bin/spex.mjs +13 -10
  4. package/spec-cli/hooks/harness.sh +32 -6
  5. package/spec-cli/src/board.ts +2 -1
  6. package/spec-cli/src/boardCache.ts +27 -1
  7. package/spec-cli/src/boardStream.ts +5 -4
  8. package/spec-cli/src/cli.ts +82 -19
  9. package/spec-cli/src/contract-filter.ts +154 -0
  10. package/spec-cli/src/git.ts +18 -4
  11. package/spec-cli/src/guide.ts +91 -38
  12. package/spec-cli/src/harness.ts +18 -4
  13. package/spec-cli/src/help.ts +16 -7
  14. package/spec-cli/src/index.ts +9 -6
  15. package/spec-cli/src/init.ts +52 -10
  16. package/spec-cli/src/issues.ts +7 -5
  17. package/spec-cli/src/layout.ts +20 -8
  18. package/spec-cli/src/lint.ts +19 -0
  19. package/spec-cli/src/localIssues.ts +16 -4
  20. package/spec-cli/src/materialize.ts +218 -124
  21. package/spec-cli/src/ranker.ts +25 -8
  22. package/spec-cli/src/runtime-guard.ts +44 -0
  23. package/spec-cli/src/search.bench.mjs +15 -5
  24. package/spec-cli/src/sessions.ts +81 -12
  25. package/spec-cli/src/specs.ts +29 -14
  26. package/spec-cli/src/supervise.ts +2 -2
  27. package/spec-cli/src/tsx-bin.ts +6 -8
  28. package/spec-cli/src/uninstall.ts +15 -17
  29. package/spec-cli/src/worktree-sources.ts +56 -0
  30. package/spec-cli/templates/spec/project/.config/core/stop-gate/spec.md +1 -1
  31. package/spec-cli/templates/spec/project/.config/core/stop-gate/stop-gate.sh +26 -8
  32. package/spec-dashboard/dist/assets/Dashboard-CMRJGfYI.js +27 -0
  33. package/spec-dashboard/dist/assets/EvalsPage-Dj2mxcfW.js +2 -0
  34. package/spec-dashboard/dist/assets/{FoldToggle-B5leylLf.js → FoldToggle-BfNpeyRQ.js} +1 -1
  35. package/spec-dashboard/dist/assets/IssuesPage-DfY315kt.js +1 -0
  36. package/spec-dashboard/dist/assets/{MobileApp-RHNECU6x.js → MobileApp-BGdC0A0P.js} +1 -1
  37. package/spec-dashboard/dist/assets/{SessionInterface-YLD6IOmC.js → SessionInterface-BOBCAR0t.js} +5 -5
  38. package/spec-dashboard/dist/assets/SessionWindow-D7YmjV0i.js +9 -0
  39. package/spec-dashboard/dist/assets/{Settings-ZnOwskMZ.js → Settings-BlSNmpH_.js} +1 -1
  40. package/spec-dashboard/dist/assets/{index-BdRQfrkR.js → index-BFdzpd_O.js} +2 -2
  41. package/spec-dashboard/dist/assets/index-uGs9v_9o.css +1 -0
  42. package/spec-dashboard/dist/index.html +2 -2
  43. package/spec-forge/src/cli.ts +2 -2
  44. package/spec-forge/src/drivers/gitlab.ts +168 -0
  45. package/spec-forge/src/drivers.ts +80 -2
  46. package/spec-forge/src/resident.ts +10 -5
  47. package/spec-yatsu/src/cli.ts +37 -16
  48. package/spec-yatsu/src/evaltab.ts +6 -3
  49. package/spec-yatsu/src/filing.ts +13 -8
  50. package/spec-yatsu/src/freshness.ts +97 -22
  51. package/spec-yatsu/src/proof.ts +14 -3
  52. package/spec-yatsu/src/scenariofresh.ts +38 -11
  53. package/spec-yatsu/src/yatsu.ts +52 -28
  54. package/spec-dashboard/dist/assets/Dashboard-Dlg78cbC.js +0 -27
  55. package/spec-dashboard/dist/assets/EvalsPage-CDxc1-in.js +0 -3
  56. package/spec-dashboard/dist/assets/IssuesPage-C2yFXiO-.js +0 -1
  57. package/spec-dashboard/dist/assets/SessionWindow-CmKtpNUX.js +0 -9
  58. package/spec-dashboard/dist/assets/index-DEc5Ru3l.css +0 -1
@@ -1,3 +0,0 @@
1
- import{u as pe,r as a,s as Ze,j as n,e as Je,f as Qe}from"./index-BdRQfrkR.js";import{V as et,W as tt,X as nt,Y as Ie,Z as st,g as de,n as at,_ as J,$ as lt,a0 as Pe,a1 as ot,a2 as it,u as rt,z as fe,a3 as ct,o as ut,a4 as dt}from"./SessionWindow-CmKtpNUX.js";import{F as he}from"./FoldToggle-B5leylLf.js";const me=(l,u)=>{let f=null;for(const v of l)if(v.at<=u)f=v;else break;return f},ft=l=>{if(!l||!Array.isArray(l.events))return null;const u=l.v===1?"time":typeof l.axis=="string"?l.axis:"time",f=l.v===1?v=>v.tMs:v=>v.at;return{axis:u,events:l.events.map(v=>({at:f(v),step:v.step,...v.node?{node:v.node}:{}}))}},ht=(l,u,f)=>l==="time"?J(u):l==="frame"?`#${u}`:l==="line"?`L${u}`:l==="index"?f?`${u}/${f}`:`${u}`:String(u);function Fe({events:l,axis:u,extent:f,activeStepIdx:v,onSeek:E}){return n.jsx("div",{className:"an-ruler",children:l.map((r,h)=>n.jsxs("button",{className:`an-step ${v===h?"on":""}`,onClick:()=>E(r.at),"data-tip":r.node?`→ ${r.node}`:void 0,children:[ht(u,r.at,f)," ",r.step]},h))})}const ve=l=>{var u,f;return((u=l.verdict)==null?void 0:u.status)==="pass"?"✓":((f=l.verdict)==null?void 0:f.status)==="fail"?"✗":"·"},Ke=l=>{var u,f;return((u=l.verdict)==null?void 0:u.status)==="pass"?"pass":((f=l.verdict)==null?void 0:f.status)==="fail"?"fail":"legacy"};function mt({entry:l,specs:u=[],sessions:f=[],onWrite:v,onOpenSession:E}){var Le,Te,De,Ce,Ae;const r=pe(),h=a.useRef(null),x=a.useRef(null),w=a.useRef(null),k=a.useRef(null),g=a.useRef(0),[d,M]=a.useState([]),[j,y]=a.useState("time"),[i,b]=a.useState(null),[$,L]=a.useState(""),[T,O]=a.useState(!1),[Q,B]=a.useState(null),D=a.useRef(null),m=a.useRef(null),A=a.useRef(null),ee=a.useRef(0),[Ve,xe]=a.useState(0),[te,ge]=a.useState(-1),[ye,be]=a.useState(null),[_,ne]=a.useState(!1),[je,se]=a.useState(!1),[ae,le]=a.useState(null),[q,oe]=a.useState(null),[N,we]=a.useState(null),[C,W]=a.useState(0),p=N&&N[C]||l;a.useEffect(()=>{b(null),L(""),M([]),B(null),W(0),we(null);let e=!0;return fetch(Ze(l.node,"evals")).then(t=>t.ok?t.json():null).then(t=>{e&&Array.isArray(t==null?void 0:t.readings)&&we(t.readings.filter(s=>s.scenario===l.scenario))}).catch(()=>{}),()=>{e=!1}},[l.node,l.scenario,l.ts,l.blob]),a.useEffect(()=>{b(null),B(null)},[C]);const U=et(p),I=U.find(e=>e.kind==="video"&&e.state==="present"),ie=U.filter(e=>e.kind==="image"),Xe=U.filter(e=>e.kind!=="video"&&e.kind!=="image"),V=!!I,X=l.thread??null,re=a.useMemo(()=>X?[{by:X.by,at:X.created,body:X.body},...X.replies||[]]:[],[X]),ze=N&&((Le=N[0])==null?void 0:Le.by)||l.by||null,S=a.useMemo(()=>re.map((e,t)=>{const s=tt(nt(e.body),d);return s&&s.seekable?{i:t,tMs:s.tMs,step:s.step,label:s.label}:null}).filter(Boolean).sort((e,t)=>e.tMs-t.tMs),[re,d]),ke=a.useRef(d);ke.current=d;const Me=a.useRef(S);Me.current=S;const Y=a.useCallback(()=>{const e=ee.current,t=ke.current;let s=-1;for(let c=0;c<t.length&&t[c].at<=e;c++)s=c;ge(c=>c===s?c:s);let o=null;for(const c of Me.current)if(c.tMs<=e)o=c.i;else break;be(c=>c===o?c:o)},[]);a.useEffect(()=>{Y()},[S,d,Y]),a.useEffect(()=>{ee.current=0,D.current&&(D.current.style.width="0%"),m.current&&(m.current.style.left="0%"),A.current&&(A.current.textContent=""),ge(-1),be(null),xe(0),ne(!1),se(!1),le(null),oe(null)},[l.blob,l.scenario,l.node]),a.useEffect(()=>{if(M([]),y("time"),!p.timelineBlob)return;let e=!0;return fetch(`/api/yatsu/blob/${p.timelineBlob}`).then(t=>t.ok?t.json():null).then(t=>{const s=e&&ft(t);s&&(M(s.events),y(s.axis))}).catch(()=>{}),()=>{e=!1}},[p.timelineBlob]),a.useEffect(()=>{const e=h.current;if(!e)return;const t=()=>{const R=Math.round((e.currentTime||0)*1e3),F=Math.round((e.duration||0)*1e3);ee.current=R;const K=F?R/F*100:0;D.current&&(D.current.style.width=`${K}%`),m.current&&(m.current.style.left=`${K}%`),A.current&&(A.current.textContent=`${J(R)} / ${J(F)}`),Y()},s=()=>{xe(e.duration||0),t()},o=()=>ne(!0),c=()=>ne(!1);return e.addEventListener("timeupdate",t),e.addEventListener("seeked",t),e.addEventListener("loadedmetadata",s),e.addEventListener("durationchange",s),e.addEventListener("play",o),e.addEventListener("pause",c),s(),()=>{e.removeEventListener("timeupdate",t),e.removeEventListener("seeked",t),e.removeEventListener("loadedmetadata",s),e.removeEventListener("durationchange",s),e.removeEventListener("play",o),e.removeEventListener("pause",c)}},[I==null?void 0:I.hash,l.node,l.scenario,C,Y]);const P=Math.round(Ve*1e3),G=d[te]||null,Ne=j==="time"?P:j==="frame"?ie.length:j==="index"?d.length:0,z=a.useCallback(e=>{const t=h.current;t&&(t.currentTime=e/1e3)},[]),Z=a.useCallback(()=>{const e=h.current;e&&(e.paused?e.play():e.pause())},[]),Ee=(e,t)=>{oe(e),t!=null&&z(t)},Oe=a.useCallback(()=>{var t,s;const e=Math.round((((t=h.current)==null?void 0:t.currentTime)??0)*1e3);return{tMs:e,step:((s=me(d,e))==null?void 0:s.step)??null}},[d]),$e=a.useCallback(()=>{const e=h.current;if(!e)return;e.pause();const t=Math.round((e.currentTime||0)*1e3),s=me(d,t),o=[Ie(t,s==null?void 0:s.step)];s!=null&&s.node&&s.node!==l.node&&o.push(`re: [[${s.node}]]`),o.push(""),B({seq:++g.current,body:o.join(`
2
- `)})},[d,l.node]),ce=a.useCallback(e=>{var o;if(!S.length)return;let t=S.findIndex(c=>c.i===q);if(t<0){const c=Math.round((((o=h.current)==null?void 0:o.currentTime)||0)*1e3);t=S.reduce((R,F,K)=>F.tMs<=c?K:R,-1)}t=Math.min(S.length-1,Math.max(0,t+e));const s=S[t];oe(s.i),z(s.tMs)},[S,q,z]);a.useEffect(()=>{if(!V)return;const e=t=>{const s=document.activeElement;if(s&&(s.tagName==="INPUT"||s.tagName==="TEXTAREA"||s.tagName==="SELECT"||s.isContentEditable))return;const o=h.current;o&&(t.key===" "?(t.preventDefault(),Z()):t.key==="ArrowRight"?(t.preventDefault(),o.currentTime=Math.min(o.duration||o.currentTime,o.currentTime+(t.shiftKey?1:5))):t.key==="ArrowLeft"?(t.preventDefault(),o.currentTime=Math.max(0,o.currentTime-(t.shiftKey?1:5))):t.key===","?(t.preventDefault(),o.currentTime=Math.max(0,o.currentTime-1/30)):t.key==="."?(t.preventDefault(),o.duration&&(o.currentTime=Math.min(o.duration,o.currentTime+1/30))):t.key==="ArrowDown"?(t.preventDefault(),ce(1)):t.key==="ArrowUp"?(t.preventDefault(),ce(-1)):(t.key==="a"||t.key==="A")&&(t.preventDefault(),$e()))};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[V,Z,ce,$e]);const Se=e=>{var o;const t=(o=w.current)==null?void 0:o.getBoundingClientRect(),s=h.current;!t||!t.width||!s||!s.duration||(s.currentTime=Math.min(1,Math.max(0,(e-t.left)/t.width))*s.duration)},Ue=e=>{e.preventDefault(),se(!0),Se(e.clientX)},He=e=>{var s;const t=(s=w.current)==null?void 0:s.getBoundingClientRect();t!=null&&t.width&&le(Math.min(100,Math.max(0,(e.clientX-t.left)/t.width*100)))};a.useEffect(()=>{if(!je)return;const e=s=>Se(s.clientX),t=()=>se(!1);return window.addEventListener("mousemove",e),window.addEventListener("mouseup",t),()=>{window.removeEventListener("mousemove",e),window.removeEventListener("mouseup",t)}},[je]);const Re=e=>{const t=x.current.getBoundingClientRect();return{x:(e.clientX-t.left)/t.width*100,y:(e.clientY-t.top)/t.height*100}},_e=e=>{if(e.button!==0||T)return;const t=Re(e);b({x0:t.x,y0:t.y,x:t.x,y:t.y})},qe=e=>{var s,o;if(!i)return;const t=Re(e);!((s=h.current)!=null&&s.paused)&&(Math.abs(t.x-i.x0)>1||Math.abs(t.y-i.y0)>1)&&((o=h.current)==null||o.pause()),b({...i,x:t.x,y:t.y})},We=async e=>{const t=h.current;if(!(t!=null&&t.videoWidth))return;const s=Math.round((t.currentTime??0)*1e3),o=me(d,s);O(!0),L(r("annotator.capturing"));try{const c=document.createElement("canvas");c.width=t.videoWidth,c.height=t.videoHeight;const R=c.getContext("2d");R.drawImage(t,0,0,c.width,c.height),R.strokeStyle="#ff9a3c",R.lineWidth=Math.max(2,c.width/300),R.strokeRect(e.x/100*c.width,e.y/100*c.height,e.w/100*c.width,e.h/100*c.height);const F=await new Promise(Ge=>c.toBlob(Ge,"image/png")),{hash:K}=await Je(F);if(!K)throw new Error("no hash");const ue=[Ie(s,o==null?void 0:o.step),`![frame](/api/yatsu/blob/${K})`];o!=null&&o.node&&o.node!==l.node&&ue.push(`re: [[${o.node}]]`),ue.push(""),B({seq:++g.current,body:ue.join(`
3
- `)}),L("")}catch{L(r("annotator.failed"))}finally{O(!1)}},Ye=()=>{if(!i)return;const e={x:Math.min(i.x0,i.x),y:Math.min(i.y0,i.y),w:Math.abs(i.x-i.x0),h:Math.abs(i.y-i.y0)};if(b(null),e.w<1&&e.h<1){Z();return}We(e)},H=i&&{x:Math.min(i.x0,i.x),y:Math.min(i.y0,i.y),w:Math.abs(i.x-i.x0),h:Math.abs(i.y-i.y0)};return n.jsxs("div",{className:"an-detail",children:[n.jsxs("header",{className:"an-head",children:[n.jsx("span",{className:"an-title",children:l.scenario}),n.jsx("span",{className:"an-node",children:l.node}),n.jsx("span",{className:`an-verdict-badge ${Ke(p)}`,children:ve(p)}),p.evaluator&&n.jsx("span",{className:"an-meta",children:p.evaluator}),n.jsx("span",{className:"an-meta",children:new Date(p.ts).toLocaleString()}),n.jsx(st,{originator:ze,sessions:f,kind:"eval",onOpenSession:E}),N&&N.length>1&&n.jsxs("div",{className:"an-ab",children:[n.jsx(de,{icon:"chevron-left",size:13,className:"an-ab-nav",disabled:C>=N.length-1,onClick:()=>W(e=>Math.min(N.length-1,e+1)),label:r("annotator.abOlder")}),n.jsx("div",{className:"an-ab-track",children:N.slice().reverse().map((e,t)=>{const s=N.length-1-t;return n.jsx("button",{type:"button",className:`an-ab-pip ${Ke(e)} ${s===C?"on":""}`,onClick:()=>W(s),"data-tip":`${ve(e)} ${new Date(e.ts).toLocaleString()}`,children:ve(e)},`${e.ts}-${s}`)})}),n.jsx(de,{icon:"chevron-right",size:13,className:"an-ab-nav",disabled:C<=0,onClick:()=>W(e=>Math.max(0,e-1)),label:r("annotator.abNewer")}),n.jsx("span",{className:"an-ab-pos",children:C===0?r("annotator.abLatest"):r("annotator.abPos",{i:N.length-C,n:N.length})})]})]}),n.jsxs("div",{className:"an-work",children:[n.jsxs("div",{className:"an-stage-col",children:[p.expected&&n.jsxs("div",{className:"an-expected",children:[n.jsx("b",{children:r("nodeView.eval.expected")})," ",p.expected]}),U.length>0&&((Te=p.verdict)==null?void 0:Te.note)&&n.jsxs("div",{className:"an-expected an-prior-note",children:[n.jsx("b",{children:r("nodeView.eval.noteLabel")})," ",p.verdict.note]}),!p.fresh&&(((De=p.staleAxes)==null?void 0:De.length)??0)>0&&n.jsxs("div",{className:"an-expected an-stale","data-tip":r("nodeView.eval.staleReadoutTitle"),children:[n.jsx("b",{children:r("nodeView.eval.staleLabel")})," ",p.staleAxes.join(" · "),(((Ce=p.codeDrift)==null?void 0:Ce.length)??0)>0&&n.jsxs("span",{className:"an-stale-files",children:[" — ",p.codeDrift.map(e=>`${e.file.split("/").pop()} +${e.behind}`).join(", ")]})]}),I&&n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"an-player",ref:k,children:[n.jsxs("div",{className:`an-stage ${_?"playing":"paused"}`,ref:x,onMouseDown:_e,onMouseMove:qe,onMouseUp:Ye,children:[n.jsx("video",{className:"an-video",ref:h,src:`/api/yatsu/blob/${I.hash}`,preload:"metadata",playsInline:!0}),H&&n.jsx("div",{className:"an-rect live",style:{left:`${H.x}%`,top:`${H.y}%`,width:`${H.w}%`,height:`${H.h}%`}}),!_&&!i&&n.jsx("div",{className:"an-bigplay","aria-hidden":!0,children:n.jsx(at,{name:"play",size:22})})]}),n.jsxs("div",{className:"an-bar",children:[n.jsx(de,{icon:_?"pause":"play",size:14,className:"an-play",label:r(_?"annotator.pause":"annotator.play"),onClick:Z}),n.jsxs("div",{className:"an-seek",ref:w,onMouseDown:Ue,onMouseMove:He,onMouseLeave:()=>le(null),children:[n.jsx("div",{className:"an-seek-trk"}),P>0&&j==="time"&&d.map((e,t)=>n.jsx("div",{className:"an-band",style:{left:`${e.at/P*100}%`},"data-tip":e.step},`band-${t}`)),n.jsx("div",{className:"an-seek-play",ref:D}),P>0&&S.map(e=>n.jsx("button",{type:"button",className:`an-mk ${q===e.i?"on":""} ${ye===e.i?"active":""}`,style:{left:`${e.tMs/P*100}%`},"data-tip":e.label,onMouseDown:t=>t.stopPropagation(),onClick:t=>{t.stopPropagation(),Ee(e.i,e.tMs)}},`mk-${e.i}`)),n.jsx("div",{className:"an-knob",ref:m}),ae!=null&&P>0&&n.jsx("div",{className:"an-seek-hov",style:{left:`${ae}%`},children:J(ae/100*P)})]}),n.jsx("span",{className:"an-time",ref:A}),G&&n.jsx("span",{className:"an-curstep","data-tip":G.node?`→ ${G.node}`:void 0,children:G.step}),n.jsx(lt,{target:k})]})]}),d.length>0&&n.jsx(Fe,{events:d,axis:j,extent:Ne,activeStepIdx:te,onSeek:z}),n.jsx("div",{className:"an-hint",children:r("annotator.hint")}),n.jsx("div",{className:"an-keys",children:r("annotator.keys")}),$&&n.jsx("div",{className:"an-flash",children:$})]}),!I&&d.length>0&&n.jsx(Fe,{events:d,axis:j,extent:Ne,activeStepIdx:te,onSeek:z}),ie.length>0&&n.jsx("div",{className:"an-gallery",children:ie.map((e,t)=>n.jsx(Pe,{e,alt:l.scenario},`${e.hash}-${t}`))}),Xe.map((e,t)=>n.jsx(Pe,{e,alt:l.scenario},`${e.hash}-${t}`)),U.length===0&&((Ae=p.verdict)!=null&&Ae.note?n.jsx("pre",{className:"eval-transcript",children:p.verdict.note}):n.jsx("div",{className:"an-hint",children:r("nodeView.eval.noImage")}))]}),n.jsx(vt,{entry:l,comments:re,specs:u,sessions:f,onWrite:v,codeSha:p.codeSha,seekMs:V?z:null,anchorNow:V?Oe:null,draft:Q,selIdx:q,activeIdx:ye,onSelect:V?Ee:null,events:V?d:null})]})]})}function vt({entry:l,comments:u,codeSha:f,specs:v,sessions:E,onWrite:r,seekMs:h,anchorNow:x,draft:w,selIdx:k,activeIdx:g,onSelect:d,events:M}){var i;const j=pe(),y=(b,$)=>Qe({node:l.node,scenario:l.scenario,body:b,codeSha:f,evidence:$});return n.jsxs("aside",{className:"an-rail",children:[n.jsx("div",{className:"an-comments-head",children:j("annotator.comments",{n:u.length})}),n.jsx("div",{className:"an-rail-list",children:n.jsx(ot,{replies:u,onSeek:h,selIdx:k,activeIdx:g,onSelect:d,events:M,threadId:((i=l.thread)==null?void 0:i.id)??null,onRemarkChange:()=>r==null?void 0:r("")})}),n.jsx("div",{className:"an-rail-compose",children:n.jsx(it,{onSend:y,specs:v,sessions:E,focusId:l.node,onDone:r,anchorNow:x,draft:w},`${l.node}·${l.scenario}`)})]})}function Be({rowKeys:l,sel:u,onSel:f,detail:v,children:E}){const[r,h]=a.useState(!1),x=a.useRef({});x.current={rowKeys:l,sel:u},a.useEffect(()=>{const k=g=>{var b;const d=(b=g.target)==null?void 0:b.tagName;if(d==="INPUT"||d==="TEXTAREA"||g.metaKey||g.ctrlKey||g.altKey||g.key!=="j"&&g.key!=="k")return;g.preventDefault(),g.stopPropagation();const{rowKeys:M,sel:j}=x.current;if(!M.length)return;const y=M.indexOf(j),i=y<0?g.key==="j"?0:M.length-1:Math.max(0,Math.min(M.length-1,y+(g.key==="j"?1:-1)));f(M[i])};return window.addEventListener("keydown",k,!0),()=>window.removeEventListener("keydown",k,!0)},[f]),a.useEffect(()=>{var k;(k=document.querySelector(".fv-list-col .sel"))==null||k.scrollIntoView({block:"nearest"})},[u]);const w=n.jsx(he,{className:"fv-fold-inline",onToggle:()=>h(!0)});return n.jsxs("div",{className:`fv-master ${r?"folded":""}`,children:[r&&n.jsx(he,{className:"fv-unfold",folded:!0,onToggle:()=>h(!1)}),n.jsx("div",{className:"fv-list-col",style:r?{display:"none"}:void 0,children:typeof E=="function"?E(w):n.jsxs(n.Fragment,{children:[n.jsx(he,{className:"fv-fold",onToggle:()=>h(!0)}),E]})}),n.jsx("div",{className:"fv-detail",children:v})]})}function pt({specs:l=[],sessions:u=[],reloadBoard:f,onOpenSession:v}){const E=pe(),{page:r,param:h}=rt(),[x,w]=a.useState(null),[k,g]=a.useState(""),[d,M]=a.useState([]),j=a.useRef([]),y=a.useMemo(()=>new Map(d.map(m=>[fe(m),m])),[d]);j.current=d.map(fe);const i=x&&y.has(x)?x:j.current[0]??null,b=a.useMemo(()=>{if(!h)return null;const m=h.indexOf("/");return m>0?`eval:${h.slice(0,m)}·${h.slice(m+1)}`:null},[h]),[$,L]=a.useState(null);a.useEffect(()=>{r==="evals"&&b&&(w(b),L(b))},[r,b]),a.useEffect(()=>{$&&y.has($)&&L(null)},[$,y]);const T=x&&!y.has(x),O=a.useMemo(()=>!T||ct(l).some(m=>fe(m)===x),[T,l,x]);a.useEffect(()=>{T&&!O&&(w(null),L(null))},[T,O]),a.useEffect(()=>{x&&!$&&d.length&&!y.has(x)&&w(null)},[x,$,d,y]),a.useEffect(()=>{if(r!=="evals"||!i||T)return;const m=/^eval:([^·]+)·(.+)$/.exec(i);m&&ut("evals",`${m[1]}/${m[2]}`,{replace:!0})},[r,i,T]);const Q=a.useCallback(m=>M(m),[]),B=m=>{m&&(g(m),setTimeout(()=>g(""),6e3))},D=i?y.get(i):null;return n.jsx(Be,{rowKeys:j.current,sel:i,onSel:w,detail:D?n.jsx(mt,{entry:D,specs:l,sessions:u,onOpenSession:v,onWrite:async m=>{B(m),await(f==null?void 0:f())}}):n.jsx("div",{className:"fv-note",children:E("evalsFeed.empty")}),children:m=>n.jsxs(n.Fragment,{children:[k&&n.jsx("div",{className:"fv-notice",children:k}),n.jsx(dt,{nodes:l,sessions:u,sel:i,onSel:A=>w(A),onRows:Q,mustShow:$,lead:m})]})})}const bt=Object.freeze(Object.defineProperty({__proto__:null,EvalMasterDetail:Be,default:pt},Symbol.toStringTag,{value:"Module"}));export{mt as E,Be as a,bt as b};
@@ -1 +0,0 @@
1
- import{u as D,r as a,j as s,h as Y,i as W,k as ss,m as es}from"./index-BdRQfrkR.js";import{a5 as Z,a6 as ts,g as ns,Z as ls,a7 as as,a1 as os,a2 as is,a8 as cs}from"./SessionWindow-CmKtpNUX.js";import{F as _}from"./FoldToggle-B5leylLf.js";import{u as rs,M as ds}from"./Dashboard-Dlg78cbC.js";function js({onFocusNode:t,onOpenSession:k,specs:v=[],sessions:x=[],issuesData:N=null,reloadIssues:o,issueId:d=null}){const i=D(),c=N,[h,p]=a.useState(!1),[j,m]=a.useState(!1),[g,w]=a.useState(!1),[S,b]=a.useState(!1),[l,y]=a.useState("all"),[f,n]=a.useState(""),[u,L]=a.useState(null),T=a.useRef([]),G=a.useCallback(()=>o==null?void 0:o(!0),[o]),V=e=>{e&&(n(e),setTimeout(()=>n(""),6e3))},C=Array.isArray(c==null?void 0:c.issues)?c.issues:[],P=e=>e.status!=="open",B=[...new Set(C.map(e=>e.store).filter(Boolean))],J=Array.isArray(c==null?void 0:c.stores)&&c.stores.length?c.stores:[{id:"local",label:"local",kind:"local"}];a.useEffect(()=>{if(!d||!C.length)return;const e=C.find(r=>r.id===d);e&&(l!=="all"&&e.store!==l&&y("all"),P(e)&&w(!0),M(e)||b(!1),L(`issue:${e.id}`))},[d,C,l]);const K=l==="all"?C:C.filter(e=>e.store===l),M=e=>!!Z(x,e.by)||Array.isArray(e.replies)&&e.replies.some(r=>Z(x,r.by)),I=g?K:K.filter(e=>!P(e)),E=S?I.filter(M):I,F=I.filter(M).length,O=K.filter(P).length,H=a.useMemo(()=>new Map(E.map(e=>[`issue:${e.id}`,e])),[E]);T.current=E.map(e=>`issue:${e.id}`);const A=u&&H.has(u)?u:T.current[0]??null,U=a.useRef({});if(U.current={effSel:A},rs(h,()=>p(!1)),a.useEffect(()=>{const e=r=>{var X;const R=(X=r.target)==null?void 0:X.tagName;if(R==="INPUT"||R==="TEXTAREA"||r.metaKey||r.ctrlKey||r.altKey||r.key!=="j"&&r.key!=="k")return;r.preventDefault(),r.stopPropagation();const $=T.current;if(!$.length)return;const z=$.indexOf(U.current.effSel),Q=z<0?r.key==="j"?0:$.length-1:Math.max(0,Math.min($.length-1,z+(r.key==="j"?1:-1)));L($[Q])};return window.addEventListener("keydown",e,!0),()=>window.removeEventListener("keydown",e,!0)},[]),a.useEffect(()=>{var e;(e=document.querySelector(".fv-list-col .sel"))==null||e.scrollIntoView({block:"nearest"})},[A]),c==null)return s.jsx("div",{className:"fv-note",children:i("session.issuesLoading")});if(!c.enabled)return s.jsx("div",{className:"fv-note",children:i("session.issuesOff")});const q=A?H.get(A):null;return s.jsxs("div",{className:`fv-master ${j?"folded":""}`,children:[j&&s.jsx(_,{className:"fv-unfold",folded:!0,onToggle:()=>m(!1)}),s.jsxs("div",{className:"fv-list-col",style:j?{display:"none"}:void 0,children:[f&&s.jsx("div",{className:"fv-notice",children:f}),s.jsxs("section",{className:"fv-group",children:[s.jsxs("header",{className:"fv-group-head",children:[s.jsxs("span",{className:"fv-head-row",children:[s.jsx(_,{className:"fv-fold-inline",onToggle:()=>m(!0)}),B.length>1&&s.jsx(ts,{value:l,onChange:y,options:[{value:"all",label:i("session.issuesStoreAll")},...B.map(e=>({value:e,label:e}))]}),s.jsx(ns,{icon:"plus",size:12,className:"fv-new-btn",label:i("session.issuesNew"),onClick:()=>p(!0)})]}),(F>0||O>0)&&s.jsxs("span",{className:"ef-chipbar",children:[F>0&&s.jsx("button",{type:"button",className:`ef-chip fv-live ${S?"on":""}`,onClick:()=>b(e=>!e),"data-tip":i("masterList.liveChipTitle"),children:i("masterList.liveChip",{n:F})}),O>0&&s.jsx("button",{type:"button",className:`ef-chip fv-concluded ${g?"on":""}`,onClick:()=>w(e=>!e),children:i("nodeView.closedIssues",{n:O})})]})]}),!E.length&&s.jsx("div",{className:"fv-note",children:i("session.issuesEmpty")}),E.map(e=>{var R;const r=`issue:${e.id}`;return s.jsxs("button",{className:`fv-row ${A===r?"sel":""}`,onClick:()=>L(r),children:[s.jsx("span",{className:`fv-dot st-${e.status||"open"}`,"data-tip":e.status}),s.jsx("span",{className:"fv-concern","data-tip":e.concern,children:e.concern}),(((R=e.replies)==null?void 0:R.length)??0)>0&&s.jsx("span",{className:"fv-replies","data-tip":i("session.issuesReplies",{n:e.replies.length}),children:e.replies.length}),B.length>1&&s.jsx("span",{className:`fv-store fv-store-${e.store==="local"?"local":"forge"}`,children:e.store})]},e.id)})]})]}),s.jsx("div",{className:"fv-detail",children:q?s.jsx(us,{issue:q,specs:v,sessions:x,onFocusNode:t,onOpenSession:k,onWrite:async e=>{V(e),await G()}}):s.jsx("div",{className:"fv-note",children:i("session.issuesEmpty")})}),h&&s.jsx(ds,{title:i("session.issuesNew"),closeLabel:i("common.close"),onClose:()=>p(!1),className:"fv-new-modal",children:s.jsx(ms,{specs:v,sessions:x,stores:J,onCancel:()=>p(!1),onDone:async e=>{p(!1),V(e),await G()}})})]})}function us({issue:t,specs:k,sessions:v,onFocusNode:x,onOpenSession:N,onWrite:o}){const d=D(),i=t.store==="local",c=t.status!=="open",[h,p]=a.useState(""),[j,m]=a.useState(""),g=Array.isArray(t.nodes)?t.nodes:[],w=Array.isArray(t.replies)?t.replies:[],S=(l,y)=>async()=>{if(!h){p(l);try{const f=await y();f!=null&&f.ok?(m(""),await(o==null?void 0:o(""))):m((f==null?void 0:f.error)||`${l} failed`)}finally{p("")}}},b=(l,y,f,n)=>s.jsx("button",{type:"button",className:`fv-close-issue fv-life-${l}`,disabled:!!h,"data-tip":n,onMouseDown:u=>u.preventDefault(),onClick:S(l,f),children:h===l?d("session.issuesActing"):y});return s.jsxs("div",{className:"fvd",children:[s.jsxs("div",{className:"fvd-scroll",children:[s.jsx("header",{className:"fvd-head",children:s.jsx("span",{className:"fvd-concern",children:t.concern})}),s.jsxs("div",{className:"fvd-meta",children:[t.status&&s.jsx("span",{className:`fv-status fv-st-${t.status}`,children:t.status}),s.jsx("span",{className:`fv-store fv-store-${i?"local":"forge"}`,children:t.store}),i?s.jsx(ls,{originator:t.by,sessions:v,kind:"issue",onOpenSession:N}):t.by&&s.jsx("span",{className:"fv-by",children:t.by}),g.map(l=>s.jsx("button",{type:"button",className:"fv-chip",onClick:()=>x==null?void 0:x(l),"data-tip":d("session.issuesFocusNode"),children:l},l)),t.url&&s.jsx("a",{className:"fv-link",href:t.url,target:"_blank",rel:"noreferrer",children:d("session.issuesOpenOnForge")})]}),t.body&&s.jsx("div",{className:"fvd-body",children:s.jsx(as,{body:t.body})}),s.jsx(os,{replies:w,threadId:i?t.id:null,onRemarkChange:()=>o==null?void 0:o("")})]}),s.jsx("div",{className:"fvd-compose",children:s.jsx(is,{onSend:(l,y)=>ss(t.id,l,y),specs:k,sessions:v,focusId:g[0]||null,onDone:o,actionsEnd:!c&&s.jsxs(s.Fragment,{children:[j&&s.jsx("span",{className:"fv-error",children:j}),i&&b("promote",d("session.issuesPromote"),()=>Y(t.id),d("session.issuesPromoteTitle")),b("close",d("session.issuesCloseIssue"),()=>W(t.id),d("session.issuesCloseIssueTitle"))]})},t.id)})]})}const fs=t=>t.id==="local"?"L":t.id==="github"?"GH":t.id==="gitlab"?"GL":(t.id||"?").slice(0,2).toUpperCase();function ms({specs:t,sessions:k,stores:v,onCancel:x,onDone:N}){var f;const o=D(),[d,i]=a.useState(((f=v[0])==null?void 0:f.id)||"local"),[c,h]=a.useState(""),[p,j]=a.useState(""),[m,g]=a.useState(!1),[w,S]=a.useState(""),b=a.useRef(null),l=cs({inputRef:b,value:p,setValue:j,specs:t,sessions:k,up:!0,fixedAbove:".fv-new-modal"});a.useEffect(()=>{var n;v.some(u=>u.id===d)||i(((n=v[0])==null?void 0:n.id)||"local")},[v,d]);const y=async()=>{const n=c.trim();if(!(!n||m)){g(!0),S("");try{const u=await es({concern:n,body:p.trim()||void 0,store:d});u!=null&&u.ok?(h(""),j(""),await(N==null?void 0:N(u.outcomes||""))):S((u==null?void 0:u.error)||o("session.issuesPostFailed"))}finally{g(!1)}}};return s.jsxs("div",{className:"fv-new-form",children:[s.jsxs("label",{className:"fv-store-pick",children:[s.jsx("span",{children:o("session.issuesStoreLabel")}),s.jsx("select",{value:d,disabled:m,onChange:n=>i(n.target.value),children:v.map(n=>s.jsxs("option",{value:n.id,children:[fs(n)," · ",n.label||n.id]},n.id))})]}),s.jsx("input",{className:"fv-input",value:c,placeholder:o("session.issuesConcernPlaceholder"),disabled:m,onChange:n=>h(n.target.value)}),s.jsxs("div",{className:"fv-tawrap",children:[s.jsx("textarea",{ref:b,className:"fv-textarea",rows:3,value:p,placeholder:o("session.issuesBodyPlaceholder"),disabled:m,onChange:n=>{j(n.target.value),l.sync(n.target)},onSelect:n=>l.sync(n.target),onBlur:l.close,onKeyDown:n=>{l.onKeyDown(n)||n.key==="Enter"&&(n.metaKey||n.ctrlKey)&&(n.preventDefault(),y())}}),l.menuEl]}),s.jsxs("div",{className:"fv-actions",children:[s.jsx("span",{className:w?"fv-error":"fv-hint",children:w||o("session.issuesMentionHint")}),s.jsx("button",{type:"button",className:"fv-cancel",disabled:m,onClick:x,children:o("common.cancel")}),s.jsx("button",{type:"button",className:"fv-send",disabled:m||!c.trim(),onClick:y,children:o(m?"session.issuesSending":"session.issuesPost")})]})]})}export{js as default};
@@ -1,9 +0,0 @@
1
- import{j as s,u as b,r as f,p as Se,s as z}from"./index-BdRQfrkR.js";function de(e){let n=2166136261;for(let a=0;a<(e||"").length;a++)n^=e.charCodeAt(a),n=Math.imul(n,16777619);return n>>>0}function ue(e){return de(e)%360}function Me(e){const n=ue(e);return{bg:`hsl(${n} 55% 42%)`,fg:`hsl(${n} 70% 92%)`}}function Ee(e){return`hsl(${ue(e)} 65% 50%)`}const J=["◆","▲","●","■","★","✦","⬟","⬢","❖","◈","✸","⟡","✚","❂","◐","◑","⬣","▰","✶","⬤","✹","◇","⊛","✺"],Q=["circle","rounded","square","hex"];function Ce(e){const n=de(e);return{seed:e,glyph:J[(n>>>9)%J.length],shape:Q[(n>>>17)%Q.length],...Me(e)}}function Ve({seed:e,status:n,title:a,size:t=16}){const l=Ce(e),i={width:t,height:t};return s.jsx("span",{className:`avatar av-st-${n||"none"}`,"data-tip":a,"aria-label":a,style:i,children:s.jsx("span",{className:`av-face av-gen av-${l.shape}`,style:{...i,background:l.bg,color:l.fg,fontSize:t*.62},children:l.glyph})})}function Le(e){var n,a;return((n=e==null?void 0:e.verdict)==null?void 0:n.status)==="pass"?"check":((a=e==null?void 0:e.verdict)==null?void 0:a.status)==="fail"?"cross":null}const Fe={pass:"✓",fail:"✗",stalePass:"✓",staleFail:"✗",empty:""};function he(e){const n=Le(e);return n?e.fresh?n==="cross"?"fail":"pass":n==="cross"?"staleFail":"stalePass":"empty"}function Z(e,n){if(!e)return[];const a=new Map;for(const t of n||[])a.has(t.scenario)||a.set(t.scenario,t);return e.map(t=>{const l=a.get(t.name)||null;return{...t,reading:l,state:l?he(l):"missing"}})}function Ae(e){return e.length?e.some(n=>n.state==="fail")?"fail":e.some(n=>n.state==="staleFail")?"staleFail":e.some(n=>n.state==="stalePass")?"stalePass":e.some(n=>n.state==="empty"||n.state==="missing")?"empty":"pass":null}function Ie({scenarios:e,evals:n}){const a=b(),t=Z(e,n);if(!t.length)return null;const l=Ae(t),i=t.filter(r=>r.state==="pass").length,c=t.length,o=a("score.count",{satisfied:i,total:c,outstanding:c-i});return s.jsxs("span",{className:`scenario-count ${l}`,"data-tip":o,"aria-label":o,children:["✓",i,"/",c]})}function De({tags:e}){return e!=null&&e.length?s.jsx("span",{className:"tag-chips",children:e.map(n=>s.jsx("span",{className:"tag-chip",children:n},n))}):null}function Y({state:e,title:n}){const a=b();if(!e)return null;const t=n??a(`score.${e}`);return s.jsx("span",{className:`score-badge ${e}`,"data-tip":t,"aria-label":t,children:Fe[e]})}const Bs={merged:{color:"#859900"},active:{color:"#cb4b16"},drift:{color:"#b58900"},pending:{color:"#93a1a1"}},Pe={added:"+",edited:"~",deleted:"✕",moved:"→"},E={working:"var(--green)",parked:"var(--green)",asking:"var(--yellow)",review:"var(--yellow)",done:"var(--yellow)",error:"var(--red)",idle:"var(--muted)",starting:"var(--muted)",queued:"var(--muted)","close-pending":"var(--muted)",offline:"var(--muted)",unknown:"var(--yellow)"},He={working:"●",parked:"‖",asking:"?",review:"◑",done:"✓",error:"✕",idle:"·",starting:"◌",queued:"⋯","close-pending":"⊘",offline:"○",unknown:"⁇"},pe=new Set(["asking","review","done","close-pending","error"]),B=e=>(e==null?void 0:e.liveness)==="offline"||(e==null?void 0:e.status)==="offline"?"offline":pe.has(e==null?void 0:e.status)?"need":"run",fe=(e,n)=>{const a=n?(e||[]).find(t=>t.id===n):null;return a&&B(a)!=="offline"?a:null},X=e=>(e==null?void 0:e.sortKey)!=null?e.sortKey:(e==null?void 0:e.created)??0,ee=e=>{const n={need:0,run:1,offline:2};return[...e].sort((a,t)=>n[B(a)]-n[B(t)]||X(t)-X(a))},Te=e=>(e==null?void 0:e.label)||(e==null?void 0:e.name)||(e==null?void 0:e.node)||(e==null?void 0:e.title)||(e==null?void 0:e.branch)||(e==null?void 0:e.id),me=e=>(e==null?void 0:e.headline)||(e==null?void 0:e.name)||(e==null?void 0:e.activity)||(e==null?void 0:e.promptPreview)||(e==null?void 0:e.node)||(e==null?void 0:e.title)||(e==null?void 0:e.branch)||(e==null?void 0:e.id);function Be(e){const n=new Set(e.map(l=>l==null?void 0:l.id)),a=new Map,t=[];for(const l of e){const i=l!=null&&l.parent&&l.parent!==l.id&&n.has(l.parent)?l.parent:null;if(i){const c=a.get(i)||[];c.push(l),a.set(i,c)}else t.push(l)}return{roots:t,childrenOf:a}}function Re(e,n){let a=!1,t=!1,l=0;const i=(c,o)=>{for(const r of n.get(c)||[])o.has(r.id)||(o.add(r.id),l++,pe.has(r.status)?a=!0:E[r.status]===E.working&&(t=!0),i(r.id,o))};return i(e,new Set([e])),{color:a?E.asking:t?E.working:E.idle,count:l}}function ze(e,n){const{roots:a,childrenOf:t}=Be(e),l=[],i=(r,u,p,N)=>{const x=t.get(r.id)||[],k=x.length>0,y=k&&!!n(r.id),m=k?Re(r.id,t):null;if(l.push({type:"row",s:r,depth:u,expandable:k,expanded:y,rollup:(m==null?void 0:m.color)??null,kin:(m==null?void 0:m.count)??0,guides:N}),y){const v=ee(x).filter(d=>!p.has(d.id));v.forEach((d,h)=>{p.add(d.id),i(d,u+1,p,[...N,h<v.length-1])})}},c=new Set;let o=null;for(const r of ee(a)){if(c.has(r.id))continue;c.add(r.id);const u=B(r);u!==o&&(l.push({type:"zone",zone:u}),o=u),i(r,0,c,[])}return l}function Oe({value:e,onChange:n,options:a}){return s.jsx("select",{className:"fv-filter",value:e,onChange:t=>n(t.target.value),children:a.map(t=>s.jsx("option",{value:t.value,children:t.label},t.value))})}const Ke={video:"vid",image:"img",transcript:"txt",data:"data"},xe=e=>{var n;return(n=e.evidence)!=null&&n.length?e.evidence:e.blob!=null?[{hash:e.blob,kind:e.blobKind||"image",state:e.blobState||"present"}]:[]},T=e=>{const n=xe(e);return n.length?["video","image","transcript","data"].filter(a=>n.some(t=>t.kind===a)):["note"]};function We(e){var a;const n=[];for(const t of e)if((a=t.evals)!=null&&a.length)for(const l of Z(t.scenarios,t.evals))l.reading&&n.push({...l.reading,expected:l.expected??l.reading.expected,state:l.state,node:t.id,hue:t.hue});return n.sort((t,l)=>t.ts<l.ts?1:-1),n}const A=e=>`eval:${e.node}·${e.scenario}`;function qe({e,selected:n,onClick:a}){return s.jsxs("button",{className:`ef-row ${n?"sel":""}`,onClick:a,children:[s.jsx(Y,{state:e.state}),e.inSession&&s.jsx("span",{className:"ef-insession","data-tip":"measured by this session",children:"✦"}),s.jsx("span",{className:"ef-scenario","data-tip":e.scenario,children:e.scenario}),s.jsx("span",{className:"ef-node",style:{color:`hsl(${e.hue??210} 60% 70%)`},children:e.node}),s.jsx("span",{className:"ef-kind",children:T(e).map(t=>Ke[t]).filter(Boolean).join("·")}),s.jsx("span",{className:"ef-time",children:_e(e.ts)})]})}const _e=e=>{const n=Math.max(0,(Date.now()-new Date(e).getTime())/1e3);return n<3600?`${Math.max(1,Math.floor(n/60))}m`:n<86400?`${Math.floor(n/3600)}h`:`${Math.floor(n/86400)}d`};function Rs({nodes:e=[],sessions:n=[],sel:a,onSel:t,onRows:l,mustShow:i=null,lead:c=null}){const o=b(),[r,u]=f.useState(null),[p,N]=f.useState(!1),x=f.useMemo(()=>We(e),[e]),k=x.some(w=>T(w).includes("video")),y=x.some(w=>T(w).includes("image")),m=r??(k?"video":y?"image":"all"),v=f.useMemo(()=>x.filter(w=>m==="all"||T(w).includes(m)),[x,m]),d=w=>!!fe(n,w.by),h=f.useMemo(()=>v.filter(d).length,[v,n]),g=f.useMemo(()=>p?v.filter(d):v,[v,p,n]);return f.useEffect(()=>{l==null||l(g)},[g,l]),f.useEffect(()=>{i&&(g.some(w=>A(w)===i)||x.some(w=>A(w)===i)&&(u("all"),N(!1)))},[i,g,x]),s.jsxs("section",{className:"fv-group",children:[s.jsxs("header",{className:"fv-group-head",children:[s.jsxs("span",{className:"fv-head-row",children:[c,s.jsx(Oe,{value:m,onChange:u,options:["video","image","all"].map(w=>({value:w,label:o(`evalsFeed.kind.${w}`)}))})]}),h>0&&s.jsx("span",{className:"ef-chipbar",children:s.jsx("button",{type:"button",className:`ef-chip fv-live ${p?"on":""}`,onClick:()=>N(w=>!w),"data-tip":o("masterList.liveChipTitle"),children:o("masterList.liveChip",{n:h})})})]}),g.length===0&&s.jsx("div",{className:"ef-empty",children:o("evalsFeed.empty")}),g.map(w=>s.jsx(qe,{e:w,selected:a===A(w),onClick:()=>t(A(w),w)},A(w)))]})}const Ue={plus:{node:s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M5 12h14"}),s.jsx("path",{d:"M12 5v14"})]})},x:{node:s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M18 6 6 18"}),s.jsx("path",{d:"m6 6 12 12"})]})},"chevron-left":{node:s.jsx("path",{d:"m15 18-6-6 6-6"}),sw:2},"chevron-right":{node:s.jsx("path",{d:"m9 18 6-6-6-6"}),sw:2},download:{node:s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M12 15V3"}),s.jsx("path",{d:"m7 10 5 5 5-5"}),s.jsx("path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"})]})},clock:{node:s.jsxs(s.Fragment,{children:[s.jsx("circle",{cx:"12",cy:"12",r:"10"}),s.jsx("path",{d:"M12 6v6l4 2"})]})},search:{node:s.jsxs(s.Fragment,{children:[s.jsx("circle",{cx:"11",cy:"11",r:"8"}),s.jsx("path",{d:"m21 21-4.3-4.3"})]})},play:{node:s.jsx("path",{d:"M6 3.5 19.5 12 6 20.5Z"})},pause:{node:s.jsxs(s.Fragment,{children:[s.jsx("rect",{x:"6",y:"4",width:"4",height:"16",rx:"1"}),s.jsx("rect",{x:"14",y:"4",width:"4",height:"16",rx:"1"})]})},"panel-left":{sw:2,node:s.jsxs(s.Fragment,{children:[s.jsx("rect",{x:"1",y:"2",width:"22",height:"20",rx:"4"}),s.jsx("rect",{x:"4",y:"5",width:"2",height:"14",rx:"2",fill:"currentColor",stroke:"none"})]})},settings:{node:s.jsxs(s.Fragment,{children:[s.jsx("circle",{cx:"12",cy:"12",r:"3"}),s.jsx("path",{d:"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"})]})},graph:{vb:18,sw:1.4,node:s.jsxs(s.Fragment,{children:[s.jsx("rect",{x:"1.5",y:"6.5",width:"5",height:"4.4",rx:"1"}),s.jsx("rect",{x:"11.5",y:"1.8",width:"5",height:"4.4",rx:"1"}),s.jsx("rect",{x:"11.5",y:"11.8",width:"5",height:"4.4",rx:"1"}),s.jsx("path",{d:"M6.5 8.7 h2.2 M11.5 4 h-1.3 q-1.5 0-1.5 1.5 v7 q0 1.5 1.5 1.5 h1.3"})]})},sessions:{vb:18,sw:1.4,node:s.jsxs(s.Fragment,{children:[s.jsx("rect",{x:"1.5",y:"2.5",width:"15",height:"13",rx:"1.6"}),s.jsx("path",{d:"M4.6 6.5 l2.6 2.3 -2.6 2.3 M9 12.4 h4"})]})},evals:{vb:18,sw:1.4,node:s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M2.5 15.5 v-11"}),s.jsx("path",{d:"M2.5 15.5 h13"}),s.jsx("rect",{x:"4.6",y:"10",width:"2.6",height:"3.5",rx:"0.5"}),s.jsx("rect",{x:"8.7",y:"7",width:"2.6",height:"6.5",rx:"0.5"}),s.jsx("path",{d:"M13 6 l1.4 1.4 L16.5 3.6"})]})},issues:{vb:18,sw:1.4,node:s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M2.5 3.5 h13 v8.4 h-7 l-3.6 3 v-3 h-2.4 z"}),s.jsx("path",{d:"M5.4 6.7 h7.2 M5.4 9.2 h4.8"})]})},lock:{vb:16,sw:1.3,node:s.jsxs(s.Fragment,{children:[s.jsx("rect",{x:"3.5",y:"7",width:"9",height:"6.5",rx:"1.2"}),s.jsx("path",{d:"M5.5 7 V5 a2.5 2.5 0 0 1 5 0 V7"})]})},paperclip:{vb:16,sw:1.3,node:s.jsx("path",{d:"M12.5 7.2 L7 12.6 a2.6 2.6 0 0 1-3.7-3.7 L9 3.2 a1.7 1.7 0 0 1 2.4 2.4 L5.8 11.2 a0.8 0.8 0 0 1-1.2-1.2 L9.7 5"})},loader:{vb:16,sw:1.5,node:s.jsxs(s.Fragment,{children:[s.jsx("circle",{cx:"8",cy:"8",r:"5.5",opacity:"0.3"}),s.jsx("path",{d:"M8 2.5 a5.5 5.5 0 0 1 5.5 5.5"})]})},maximize:{vb:16,sw:1.4,node:s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M2 6V2h4"}),s.jsx("path",{d:"M14 6V2h-4"}),s.jsx("path",{d:"M2 10v4h4"}),s.jsx("path",{d:"M14 10v4h-4"})]})},minimize:{vb:16,sw:1.4,node:s.jsxs(s.Fragment,{children:[s.jsx("path",{d:"M6 2v4H2"}),s.jsx("path",{d:"M10 2v4h4"}),s.jsx("path",{d:"M6 14v-4H2"}),s.jsx("path",{d:"M10 14v-4h4"})]})}};function O({name:e,size:n=16,strokeWidth:a,className:t,style:l}){const i=Ue[e];if(!i)throw new Error(`unknown icon: ${e}`);const c=i.vb||24;return s.jsx("svg",{width:n,height:n,viewBox:`0 0 ${c} ${c}`,fill:"none",stroke:"currentColor",strokeWidth:a??i.sw??1.8,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",className:t,style:l,children:i.node})}function zs({icon:e,label:n,onClick:a,className:t,size:l,iconClassName:i,...c}){return s.jsx("button",{type:"button",className:t,"data-tip":n,"aria-label":n,onClick:a,...c,children:s.jsx(O,{name:e,size:l,className:i})})}const Os=()=>s.jsx("svg",{className:"si-agent-glyph",viewBox:"0 0 24 24","aria-hidden":"true",children:s.jsx("path",{d:"M17.3041 3.541h-3.6718l6.696 16.918H24Zm-10.6082 0L0 20.459h3.7442l1.3693-3.5527h7.0052l1.3693 3.5528h3.7442L10.5363 3.5409Zm-.3712 10.2232 2.2914-5.9456 2.2914 5.9456Z"})}),Ks=()=>s.jsx("svg",{className:"si-agent-glyph",viewBox:"0 0 24 24","aria-hidden":"true",children:s.jsx("path",{d:"M22.282 9.821a6 6 0 0 0-.516-4.91a6.05 6.05 0 0 0-6.51-2.9A6.065 6.065 0 0 0 4.981 4.18a6 6 0 0 0-3.998 2.9a6.05 6.05 0 0 0 .743 7.097a5.98 5.98 0 0 0 .51 4.911a6.05 6.05 0 0 0 6.515 2.9A6 6 0 0 0 13.26 24a6.06 6.06 0 0 0 5.772-4.206a6 6 0 0 0 3.997-2.9a6.06 6.06 0 0 0-.747-7.073M13.26 22.43a4.48 4.48 0 0 1-2.876-1.04l.141-.081l4.779-2.758a.8.8 0 0 0 .392-.681v-6.737l2.02 1.168a.07.07 0 0 1 .038.052v5.583a4.504 4.504 0 0 1-4.494 4.494M3.6 18.304a4.47 4.47 0 0 1-.535-3.014l.142.085l4.783 2.759a.77.77 0 0 0 .78 0l5.843-3.369v2.332a.08.08 0 0 1-.033.062L9.74 19.95a4.5 4.5 0 0 1-6.14-1.646M2.34 7.896a4.5 4.5 0 0 1 2.366-1.973V11.6a.77.77 0 0 0 .388.677l5.815 3.354l-2.02 1.168a.08.08 0 0 1-.071 0l-4.83-2.786A4.504 4.504 0 0 1 2.34 7.872zm16.597 3.855l-5.833-3.387L15.119 7.2a.08.08 0 0 1 .071 0l4.83 2.791a4.494 4.494 0 0 1-.676 8.105v-5.678a.79.79 0 0 0-.407-.667m2.01-3.023l-.141-.085l-4.774-2.782a.78.78 0 0 0-.785 0L9.409 9.23V6.897a.07.07 0 0 1 .028-.061l4.83-2.787a4.5 4.5 0 0 1 6.68 4.66zm-12.64 4.135l-2.02-1.164a.08.08 0 0 1-.038-.057V6.075a4.5 4.5 0 0 1 7.375-3.453l-.142.08L8.704 5.46a.8.8 0 0 0-.393.681zm1.097-2.365l2.602-1.5l2.607 1.5v2.999l-2.597 1.5l-2.607-1.5Z"})}),F=e=>`/api/yatsu/blob/${e}`;function Ge({src:e,alt:n,onClose:a}){return f.useEffect(()=>{const t=l=>{l.key==="Escape"&&(l.preventDefault(),l.stopPropagation(),a())};return window.addEventListener("keydown",t,!0),()=>window.removeEventListener("keydown",t,!0)},[a]),s.jsx("div",{className:"lightbox",onClick:a,children:s.jsx("img",{src:e,alt:n})})}function Ze({hash:e}){const n=b(),[a,t]=f.useState(null);return f.useEffect(()=>{let l=!0;return fetch(F(e)).then(i=>i.ok?i.text():Promise.reject(new Error("miss"))).then(i=>{l&&t(i)}).catch(()=>{l&&t("")}),()=>{l=!1}},[e]),a===null?s.jsx("pre",{className:"eval-transcript loading",children:n("nodeView.eval.loadingTranscript")}):s.jsx("pre",{className:"eval-transcript",children:a})}function Ye({hash:e}){const n=b(),[a,t]=f.useState(null);return f.useEffect(()=>{let l=!0;return fetch(F(e)).then(i=>i.ok?i.text():Promise.reject(new Error("miss"))).then(i=>{let c=i,o=!0;try{c=JSON.stringify(JSON.parse(i),null,2)}catch{o=!1}l&&t({text:c,valid:o})}).catch(()=>{l&&t({text:"",valid:!1})}),()=>{l=!1}},[e]),a===null?s.jsx("pre",{className:"eval-data loading",children:n("nodeView.eval.loadingData")}):s.jsxs("div",{className:"eval-datawrap",children:[s.jsx("div",{className:"eval-datahead",children:a.valid?n("nodeView.eval.data"):n("nodeView.eval.dataInvalid")}),s.jsx("pre",{className:"eval-data",children:a.text})]})}function Je({hash:e,alt:n}){const[a,t]=f.useState(!1);return s.jsxs(s.Fragment,{children:[s.jsx("img",{className:"an-image",src:F(e),alt:n,loading:"lazy",onClick:()=>t(!0)}),a&&s.jsx(Ge,{src:F(e),alt:n,onClose:()=>t(!1)})]})}function Qe({exit:e}){return s.jsx(O,{name:e?"minimize":"maximize",size:15})}function Ws({target:e,className:n=""}){const a=b(),[t,l]=f.useState(!1);f.useEffect(()=>{const c=()=>{const o=document.fullscreenElement,r=e==null?void 0:e.current;l(!!o&&!!r&&(o===r||r.contains(o)))};return document.addEventListener("fullscreenchange",c),()=>document.removeEventListener("fullscreenchange",c)},[e]);const i=()=>{var o,r;const c=e==null?void 0:e.current;c&&(document.fullscreenElement?(o=document.exitFullscreen||document.webkitExitFullscreen)==null||o.call(document):(r=c.requestFullscreen||c.webkitRequestFullscreen)==null||r.call(c))};return s.jsx("button",{type:"button",className:`an-fs ${n}`,onClick:i,"data-tip":a(t?"annotator.exitFullscreen":"annotator.fullscreen"),"aria-label":a(t?"annotator.exitFullscreen":"annotator.fullscreen"),children:s.jsx(Qe,{exit:t})})}function ve({e,alt:n=""}){const a=b();return e.state==="miss"?s.jsx("div",{className:"eval-noimg",children:a("nodeView.eval.miss")}):e.kind==="transcript"?s.jsx(Ze,{hash:e.hash}):e.kind==="data"?s.jsx(Ye,{hash:e.hash}):e.kind==="video"?s.jsx("video",{className:"eval-video",src:F(e.hash),controls:!0,preload:"metadata",playsInline:!0}):s.jsx(Je,{hash:e.hash,alt:n})}const P=new Map;function Xe(e){const[n,a]=f.useState(()=>P.get(e)??null);return f.useEffect(()=>{if(P.has(e)){a(P.get(e));return}let t=!0;return fetch(F(e),{headers:{Range:"bytes=0-0"}}).then(l=>{const i=l.headers.get("content-type")||"",c=l.ok?{kind:i.startsWith("video/")?"video":i.startsWith("image/")?"image":i.startsWith("application/json")?"data":"transcript",state:"present"}:{kind:"image",state:"miss"};P.set(e,c),t&&a(c)}).catch(()=>{t&&a({kind:"image",state:"miss"})}),()=>{t=!1}},[e]),n}function ge({hash:e,alt:n=""}){const a=Xe(e);return a?s.jsx(ve,{e:{hash:e,...a},alt:n}):null}const qs=/\[\[(\.?[A-Za-z0-9_-]+)\]\]/g,je=e=>(e||"").replace(/^\.spec\//,"").replace(/\/spec\.md$/,"");function es(e,n,a){const t=n.toLowerCase(),l=[];for(const i of e){const c=i.id.toLowerCase(),o=je(i.path).toLowerCase();let r;if(!t)r=3;else if(c.startsWith(t))r=0;else if(c.includes(t))r=1;else if(o.includes(t))r=2;else continue;i.id===a&&(r=-1),l.push({s:i,score:r})}return l.sort((i,c)=>i.score-c.score||i.s.id.length-c.s.id.length||i.s.id.localeCompare(c.s.id)),l.slice(0,8).map(i=>i.s)}function ss(e,n){const a=n.toLowerCase(),t=o=>me(o)||(o.id||"").slice(0,8),l=[];for(const o of e||[]){if(o.liveness!=="online")continue;const r=(o.id||"").toLowerCase(),u=t(o).toLowerCase();let p;if(!a)p=3;else if(r===a||u===a)p=0;else if(r.startsWith(a)||u.startsWith(a))p=1;else if(r.includes(a)||u.includes(a))p=2;else continue;l.push({s:o,score:p})}l.sort((o,r)=>o.score-r.score||(r.s.created||0)-(o.s.created||0));const i=l.map(o=>({id:o.s.id,label:t(o.s),sub:o.s.node||o.s.status})),c=l.filter(o=>o.score===0).length;return i.splice(c,0,{id:"new",label:"new",sub:"spawn a fresh worker"}),i.slice(0,8)}function se(e,n){if(!n)return e;const a=e.toLowerCase().indexOf(n.toLowerCase());return a<0?e:s.jsxs(s.Fragment,{children:[e.slice(0,a),s.jsx("b",{className:"mention-hit",children:e.slice(a,a+n.length)}),e.slice(a+n.length)]})}function ns(e,n,a,t){let l=n-1;for(;l>=0&&/[A-Za-z0-9_.\-]/.test(e[l]);)l--;if(l>=1&&e[l-1]==="["&&e[l]==="["){const i=e.slice(l+1,n),c=es(a,i,t);return c.length?{kind:"mention",items:c,index:0,start:l-1,end:n,query:i}:null}return null}function ts(e,n,a){let t=n-1;for(;t>=0&&/[A-Za-z0-9_.\-]/.test(e[t]);)t--;if(t>=0&&e[t]==="@"&&(t===0||/\s/.test(e[t-1]))){const l=e.slice(t+1,n),i=ss(a,l);return i.length?{kind:"actor",items:i,index:0,start:t,end:n,query:l}:null}return null}function as({menu:e,up:n,fixedStyle:a,onPick:t,onHover:l}){const i=b(),c=e.kind==="actor",o=e.query?c?`@${e.query}`:`[[${e.query}]]`:i(c?"session.menuSessions":"session.menuSpecNodes");return s.jsxs("ul",{className:`${n?"mention-menu up":"mention-menu"}${a?" fixed":""}`,style:a||void 0,role:"listbox",children:[s.jsxs("li",{className:"mention-head",children:["// ",o," — ",i("session.menuHint")]}),e.items.map((r,u)=>s.jsxs("li",{role:"option","aria-selected":u===e.index,className:`${u===e.index?"mention-item on":"mention-item"}${c&&r.id==="new"?" new":""}`,onMouseDown:p=>{p.preventDefault(),t(r)},onMouseEnter:()=>l(u),children:[!c&&s.jsx("span",{className:"mention-dot",style:{background:E[r.status]||E.offline}}),s.jsx("span",{className:"mention-id",children:c?s.jsxs(s.Fragment,{children:["@",se(r.label,e.query)]}):se(r.id,e.query)}),s.jsx("span",{className:"mention-path",children:c?r.sub:je(r.path)})]},r.id))]})}function ls({inputRef:e,value:n,setValue:a,specs:t=[],sessions:l=[],focusId:i=null,up:c=!1,fixedAbove:o=null}){const[r,u]=f.useState(null),[p,N]=f.useState(null),x=h=>{var $;if(!h){u(null),N(null);return}const g=h.selectionStart,w=ns(h.value,g,t,i)||ts(h.value,g,l);if(u(w),!w||!o){N(null);return}const S=h.getBoundingClientRect(),M=($=h.closest(o))==null?void 0:$.getBoundingClientRect(),j=(M==null?void 0:M.top)??S.top;N({left:`${S.left}px`,width:`${S.width}px`,right:"auto",bottom:`${Math.max(8,window.innerHeight-j+8)}px`})},k=h=>u(g=>g&&{...g,index:(g.index+h+g.items.length)%g.items.length}),y=h=>{if(!h||!r)return;const g=r.kind==="actor"?`@${h.id} `:`[[${h.id}]] `,w=n.slice(0,r.start);a(w+g+n.slice(r.end)),u(null),N(null);const S=w.length+g.length;requestAnimationFrame(()=>{const M=e.current;M&&(M.focus(),M.setSelectionRange(S,S))})};return{menu:r,sync:x,onKeyDown:h=>r?h.key==="ArrowDown"?(h.preventDefault(),h.stopPropagation(),k(1),!0):h.key==="ArrowUp"?(h.preventDefault(),h.stopPropagation(),k(-1),!0):h.key==="Enter"||h.key==="Tab"?(h.preventDefault(),h.stopPropagation(),y(r.items[r.index]),!0):h.key==="Escape"?(h.preventDefault(),h.stopPropagation(),u(null),N(null),!0):!1:!1,close:()=>{u(null),N(null)},menuEl:r?s.jsx(as,{menu:r,up:c,fixedStyle:p,onPick:y,onHover:h=>u(g=>g&&{...g,index:h})}):null}}function is(e,n,a=0){e&&(e.style.height="auto",e.style.overflowY=e.scrollHeight>n?"auto":"hidden",e.style.height=`${Math.min(Math.max(e.scrollHeight,a),n)}px`)}const rs=/^▶\s*(\d+):([0-5]?\d)(?:\s*·\s*([^\n]*))?/,cs=/\/api\/yatsu\/blob\/([0-9a-f]{64})/g,ne=/!\[[^\]]*\]\(\/api\/yatsu\/blob\/([0-9a-f]{64})\)/g,os=e=>{const n=Math.floor(e/1e3);return`${Math.floor(n/60)}:${String(n%60).padStart(2,"0")}`};function we(e){var i;const n=e||"",a=n.split(`
2
- `,1)[0],t=rs.exec(a);return t?{tMs:(parseInt(t[1],10)*60+parseInt(t[2],10))*1e3,step:((i=t[3])==null?void 0:i.trim())||null,label:a.trim(),rest:n.slice(a.length).replace(/^\n/,"")}:null}const ye=(e,n)=>`▶${os(e)}${n?` · ${n}`:""}`,te=e=>[...(e||"").matchAll(cs)].map(n=>n[1]);function ds(e,n){if(!e)return null;if(e.step&&(n!=null&&n.length)){const a=n.find(t=>t.step===e.step);return a?{tMs:a.at,step:e.step,label:ye(a.at,e.step),seekable:!0,degraded:!1}:{tMs:e.tMs,step:e.step,label:e.label,seekable:!1,degraded:!0}}return{tMs:e.tMs,step:e.step,label:e.label,seekable:!0,degraded:!1}}function _s({originator:e,sessions:n=[],kind:a="issue",onOpenSession:t=null}){const l=b();if(!e)return null;const i=fe(n,e),c=!!i,o=c?E[i.status]||E.working:E.offline,r=l(a==="eval"?"thread.originatorEval":"thread.originatorIssue",{by:e}),u=s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"fv-originator-dot",style:{background:o},"aria-hidden":"true"}),s.jsx("span",{className:"fv-originator-who",children:e})]});return c&&t?s.jsx("button",{type:"button",className:"fv-originator alive openable","data-tip":r,"aria-label":r,onClick:()=>t(e),children:u}):s.jsx("span",{className:`fv-originator ${c?"alive":"offline"}`,"data-tip":r,children:u})}function us({replies:e,onSeek:n,selIdx:a=null,activeIdx:t=null,onSelect:l=null,events:i=null,threadId:c=null,onRemarkChange:o=null}){const r=b(),[u,p]=f.useState(null),[N,x]=f.useState(null),k=async(y,m)=>{if(!u){p(m),x(null);try{const v=await Se(y,m);v!=null&&v.ok?await(o==null?void 0:o()):x({ref:m,msg:(v==null?void 0:v.error)||`${y} failed`})}finally{p(null)}}};return e.map((y,m)=>{const v=we(y.body),d=ds(v,i),h=v?v.rest:y.body,g=[...h.matchAll(ne)].map(C=>C[1]),w=(g.length?h.replace(ne,""):h).trim(),S=y.rid!==void 0,M=S?y.resolved?" remark resolved":" remark open":"",j=`fv-reply${a===m?" sel":""}${t===m?" active":""}${M}`,$=d&&d.seekable&&n?()=>l?l(m,d.tMs):n(d.tMs):null,V=S&&c?`${c}#${y.rid}`:null;return s.jsxs("div",{className:j,children:[s.jsxs("div",{className:"fv-reply-meta",children:[s.jsx("span",{className:"fv-reply-by",children:y.by}),y.at&&s.jsx("span",{className:"fv-reply-at",children:y.at}),d&&($?s.jsx("button",{type:"button",className:"fv-anchor",onClick:$,"data-tip":"seek the clip to this moment",children:d.label}):s.jsxs("span",{className:`fv-anchor static${d.degraded?" degraded":""}`,"data-tip":d.degraded?r("thread.anchorDegraded"):void 0,children:[d.label,d.degraded?" ⚠":""]})),S&&(y.resolved?s.jsxs("span",{className:"fv-remark-state resolved","data-tip":y.resolvedBy?r("thread.resolvedBy",{by:y.resolvedBy}):r("thread.resolved"),children:["✓ ",r("thread.resolved")]}):s.jsxs("span",{className:"fv-remark-state open","data-tip":r("thread.openRemark"),children:["● ",r("thread.openRemark")]})),V&&o&&!y.resolved&&(y.by==="human"?s.jsx("button",{type:"button",className:"fv-remark-act retract",disabled:!!u,"data-tip":r("thread.retractTitle"),onClick:()=>k("retract",V),children:r("thread.retract")}):s.jsx("button",{type:"button",className:"fv-remark-act resolve",disabled:!!u,"data-tip":r("thread.resolveTitle"),onClick:()=>k("resolve",V),children:r("thread.resolve")}))]}),N&&N.ref===V&&s.jsx("div",{className:"fv-error",children:N.msg}),w&&s.jsx("div",{className:"fvd-body",children:s.jsx(R,{body:w})}),g.length>0&&s.jsx("div",{className:"fv-reply-media",children:g.map((C,D)=>s.jsx(ge,{hash:C,alt:"evidence"},`${C}-${D}`))})]},m)})}function Us({onSend:e,specs:n=[],sessions:a=[],focusId:t=null,onDone:l,anchorNow:i=null,draft:c=null,actionsEnd:o=null}){const r=b(),[u,p]=f.useState(""),[N,x]=f.useState(!1),[k,y]=f.useState(""),[m,v]=f.useState(!1),d=f.useRef(null),h=ls({inputRef:d,value:u,setValue:p,specs:n,sessions:a,focusId:t,up:!0}),g=te(u),w=m||!!u||g.length>0||!!k;f.useEffect(()=>{const j=d.current;if(!j)return;const $=getComputedStyle(j);is(j,parseFloat($.maxHeight)||1/0,parseFloat($.minHeight)||0)},[u]),f.useEffect(()=>{var j;if(!c){p("");return}p(c.body||""),(j=d.current)==null||j.focus()},[c==null?void 0:c.seq]);const S=()=>{var V;const j=i==null?void 0:i();if(!j)return;const $=ye(j.tMs,j.step);p(C=>{const D=we(C);return D?`${$}
3
- ${D.rest}`:C?`${$}
4
- ${C}`:`${$}
5
- `}),(V=d.current)==null||V.focus()},M=async()=>{const j=u.trim();if(!(!j||N)){x(!0);try{const $=await e(j,te(j));$!=null&&$.ok?(p(""),y(""),await(l==null?void 0:l($.outcomes||""))):y(($==null?void 0:$.error)||"reply failed")}finally{x(!1)}}};return s.jsxs("div",{className:`fv-compose${w?" engaged":""}`,children:[g.length>0&&s.jsx("div",{className:"fv-frames",children:g.map(j=>s.jsx(ge,{hash:j,alt:"frame"},j))}),s.jsxs("div",{className:"fv-tawrap",children:[s.jsx("textarea",{ref:d,className:"fv-textarea",rows:1,value:u,placeholder:r("session.issuesReplyPlaceholder"),disabled:N,onChange:j=>{p(j.target.value),h.sync(j.target)},onSelect:j=>h.sync(j.target),onFocus:()=>v(!0),onBlur:()=>{v(!1),h.close()},onKeyDown:j=>{h.onKeyDown(j)||j.key==="Enter"&&(j.metaKey||j.ctrlKey)&&(j.preventDefault(),M())}}),h.menuEl]}),s.jsxs("div",{className:"fv-actions",children:[i&&s.jsxs("button",{type:"button",className:"fv-anchor-btn","data-tip":r("thread.anchorTitle"),onMouseDown:j=>j.preventDefault(),onClick:S,children:[s.jsx(O,{name:"clock",size:11})," ",r("thread.anchorNow")]}),s.jsx("span",{className:"fv-hint",children:k||r("session.issuesMentionHint")}),s.jsx("button",{type:"button",className:"fv-send",disabled:N||!u.trim(),onMouseDown:j=>j.preventDefault(),onClick:M,children:r(N?"session.issuesSending":"session.issuesSend")}),o]})]})}const hs=["graph","sessions","evals","issues","settings"];function G(e){const n=(e||"").replace(/^#\/?/,"").split("/").filter(Boolean),a=hs.includes(n[0])?n[0]:"graph",t=a==="sessions"?n[1]||null:a==="evals"?n.length>1?n.slice(1).map(decodeURIComponent).join("/"):null:a==="issues"&&n.length>1?n.slice(1).map(decodeURIComponent).join("/"):null;return{page:a,param:t}}const L=(e,n)=>`#/${e}${n?`/${String(n).split("/").map(encodeURIComponent).join("/")}`:""}`;function K(e,n=null,{replace:a=!1}={}){const t=L(e,n);window.location.hash!==t&&(a?window.history.replaceState(null,"",t):window.location.hash=t)}function Gs(){const[e,n]=f.useState(()=>G(window.location.hash));return f.useEffect(()=>{const a=()=>n(G(window.location.hash));return window.addEventListener("hashchange",a),()=>window.removeEventListener("hashchange",a)},[]),e}const Zs=e=>({kind:"graph-node",nodeId:e}),Ys=e=>({kind:"session",sessionId:e}),ps=e=>({kind:"issue",issueId:e}),Js=(e,n)=>({kind:"eval",nodeId:e,scenario:n});function Ne(e){return!e||e.kind==="graph-node"?L("graph"):e.kind==="session"?L("sessions",e.sessionId):e.kind==="issue"?L("issues",e.issueId):e.kind==="eval"?L("evals",`${e.nodeId}/${e.scenario}`):L("graph")}function Qs(e,{onFocusNode:n,onOpenSession:a}={}){if(e)if(e.kind==="graph-node")n==null||n(e.nodeId),K("graph");else if(e.kind==="session")a?a(e.sessionId):K("sessions",e.sessionId);else{const{page:t,param:l}=G(Ne(e));K(t,l)}}function ae({issue:e,onNavigateAddress:n}){const a=(e==null?void 0:e.store)||"local",t=(e==null?void 0:e.status)||"open",l=ps(e.id);return s.jsxs("a",{className:"issue-card",href:Ne(l),"data-tip":e.concern||e.id,onClick:n?i=>{i.defaultPrevented||i.button!==0||i.metaKey||i.ctrlKey||i.shiftKey||i.altKey||(i.preventDefault(),n(l))}:void 0,children:[s.jsxs("span",{className:"issue-card-top",children:[s.jsx("span",{className:"issue-num",children:e.id}),s.jsx("span",{className:`fv-store fv-store-${a==="local"?"local":"forge"}`,children:a}),s.jsx("span",{className:`issue-state st-${t}`,children:t})]}),s.jsx("span",{className:"issue-card-title",children:e.concern})]})}const le=[{key:"spec",label:"spec"},{key:"history",label:"history"},{key:"issues",label:"issues"},{key:"eval",label:"eval"}];function fs(e){var n;return(n=e==null?void 0:e.overlays)!=null&&n.length?[{key:"edit",label:"edit"},...le]:le}const ms={added:"+",edited:"~",deleted:"✕",moved:"→"};function I(e){const n=[],a=/`([^`]+)`|\*\*([^*]+)\*\*|\[\[([^\]]+)\]\]/g;let t=0,l,i=0;for(;l=a.exec(e);)l.index>t&&n.push(e.slice(t,l.index)),l[1]!=null?n.push(s.jsx("code",{children:l[1]},i++)):l[2]!=null?n.push(s.jsx("strong",{children:l[2]},i++)):n.push(s.jsx("span",{className:"doc-link",children:l[3]},i++)),t=a.lastIndex;return t<e.length&&n.push(e.slice(t)),n}function ie(e){const n=e.trim();return n.includes("|")&&/^\|?(\s*:?-+:?\s*\|)+(\s*:?-+:?\s*)?$/.test(n)}function W(e){let n=e.trim();return n.startsWith("|")&&(n=n.slice(1)),n.endsWith("|")&&(n=n.slice(0,-1)),n.split("|").map(a=>a.trim())}function xs(e){const n=e.startsWith(":"),a=e.endsWith(":");return n&&a?"center":a?"right":null}function R({body:e}){if(!e)return null;const n=e.replace(/^#\s+[^\n]*\n+/,"").split(`
6
- `),a=[];let t=0,l=0;for(;t<n.length;){const i=n[t].trim();if(/^```/.test(i)){const c=[];for(t++;t<n.length&&!/^```/.test(n[t].trim());)c.push(n[t++]);t++,a.push(s.jsx("pre",{className:"doc-pre",children:s.jsx("code",{children:c.join(`
7
- `)})},l++))}else if(/^#{1,6}\s+/.test(n[t]))a.push(s.jsx("h4",{className:"doc-h",children:I(n[t].replace(/^#+\s+/,""))},l++)),t++;else if(i.includes("|")&&t+1<n.length&&ie(n[t+1])){const c=W(n[t]),o=W(n[t+1]).map(xs);t+=2;const r=[];for(;t<n.length&&n[t].includes("|")&&n[t].trim()!==""&&!/^```/.test(n[t].trim());)r.push(W(n[t])),t++;a.push(s.jsxs("table",{className:"doc-table",children:[s.jsx("thead",{children:s.jsx("tr",{children:c.map((u,p)=>s.jsx("th",{style:o[p]?{textAlign:o[p]}:void 0,children:I(u)},p))})}),s.jsx("tbody",{children:r.map((u,p)=>s.jsx("tr",{children:c.map((N,x)=>s.jsx("td",{style:o[x]?{textAlign:o[x]}:void 0,children:I(u[x]??"")},x))},p))})]},l++))}else if(/^-\s+/.test(i)){const c=[];for(;t<n.length&&/^-\s+/.test(n[t].trim());)c.push(n[t++].trim().replace(/^-\s+/,""));a.push(s.jsx("ul",{children:c.map((o,r)=>s.jsx("li",{children:I(o)},r))},l++))}else if(i==="")t++;else{const c=[];for(;t<n.length;){const o=n[t];if(o.trim()===""||/^```/.test(o.trim())||/^#{1,6}\s+/.test(o)||/^-\s+/.test(o.trim())||o.includes("|")&&t+1<n.length&&ie(n[t+1]))break;c.push(o),t++}a.push(s.jsx("p",{children:I(c.join(" "))},l++))}}return s.jsx("div",{className:"doc-body",children:a})}function re({kind:e,title:n,owner:a,ownerLabel:t,note:l,children:i}){return s.jsxs("section",{className:`spec-part part-${e}`,children:[s.jsxs("header",{className:"part-head",children:[s.jsx("span",{className:"part-title",children:n}),s.jsx("span",{className:`part-owner owner-${a}`,children:t}),l&&s.jsx("span",{className:"part-note",children:l})]}),s.jsx("div",{className:"part-body",children:i})]})}function vs({parts:e}){const n=b();return s.jsxs("div",{className:"spec-parts",children:[s.jsx(re,{kind:"raw",title:n("nodeView.rawTitle"),owner:"human",ownerLabel:n("nodeView.rawOwner"),note:n("nodeView.rawNote"),children:s.jsx(R,{body:e.rawSource})}),s.jsx(re,{kind:"expanded",title:n("nodeView.expandedTitle"),owner:"agent",ownerLabel:n("nodeView.expandedOwner"),note:n("nodeView.expandedNote"),children:s.jsx(R,{body:e.expandedSpec})})]})}const q=new Map;function gs(e,n){const a=`${e}@${n??""}`,[t,l]=f.useState(()=>q.get(a)??null);return f.useEffect(()=>{const i=q.get(a);if(i){l(i);return}l(null);let c=!0;return fetch(z(e,"content")).then(o=>o.ok?o.json():Promise.reject(o.status)).then(o=>{q.set(a,o),c&&l(o)}).catch(()=>{c&&l({body:"",parts:null})}),()=>{c=!1}},[e,n,a]),t}function js({node:e}){var l;const n=b(),a=gs(e.id,e.version),t=(e.driftFiles||[]).map(i=>`${i.file}: ${n("specNode.driftAhead",{n:i.behind})}`).join(`
8
- `);return s.jsxs("div",{className:"pane-doc",children:[s.jsxs("h1",{children:["# ",e.title]}),s.jsx("blockquote",{children:e.desc}),s.jsxs("div",{className:"doc-stat",children:[s.jsxs("span",{className:`stat-status st-${e.status}`,"data-tip":n("nodeView.statusLabel"),children:[s.jsx("i",{className:"stat-dot"}),n(`status.${e.status}`)]}),s.jsxs("span",{className:"stat-chip","data-tip":n("nodeView.versionLabel"),children:["v",e.version||0]}),s.jsx(Ie,{scenarios:e.scenarios,evals:e.evals}),e.drift>0&&s.jsxs("span",{className:"stat-chip stat-drift","data-tip":t,children:["⚠",e.drift]}),s.jsxs("span",{className:"stat-sess","data-tip":n("nodeView.lastEditedBy"),children:["✎ ",s.jsx("b",{children:e.session||n("common.none")})]})]}),((l=e.code)==null?void 0:l.length)>0?s.jsxs("div",{className:"doc-gov",children:[s.jsxs("span",{className:"doc-gov-h",children:[n("nodeView.governs")," ",s.jsx("b",{children:e.code.length})]}),s.jsx("div",{className:"doc-gov-files",children:e.code.map(i=>s.jsx("code",{className:"gov-f",children:i},i))})]}):s.jsx("div",{className:"doc-gov prose",children:s.jsx("span",{className:"doc-gov-h",children:n("nodeView.proseNode")})}),(()=>{if(a===null&&e.body==null)return s.jsx("div",{className:"pane-loading",children:s.jsx("span",{className:"spinner","aria-label":n("common.loading")})});const i=e.body??(a==null?void 0:a.body)??"",c=e.parts??(a==null?void 0:a.parts)??null;return c?s.jsx(vs,{parts:c}):s.jsx(R,{body:i})})()]})}function ws(e,n=!0){const[a,t]=f.useState(null);return f.useEffect(()=>{if(!n)return;let l=!0;return fetch(z(e,"history")).then(i=>i.json()).then(i=>{l&&t(i)}).catch(()=>l&&t([])),()=>{l=!1}},[e,n]),a}const _=new Map;function ys(e,n,a){const t=`${e}/${n}`,[l,i]=f.useState(()=>_.get(t)??null);return f.useEffect(()=>{const c=_.get(t);if(c){i(c);return}let o=!0;return fetch(z(e,"diff",n)).then(r=>r.json()).then(r=>{_.set(t,r),o&&i(r)}).catch(()=>o&&i({patch:""})),()=>{o=!1}},[e,n,a,t]),l}function Ns(e){const n=[];let a=!1;for(const t of e.split(`
9
- `)){if(t.startsWith("@@")){a=!0,n.push({t:"hunk",s:t});continue}!a||t.startsWith("\\")||(t.startsWith("+")?n.push({t:"add",s:t.slice(1)}):t.startsWith("-")?n.push({t:"del",s:t.slice(1)}):n.push({t:"ctx",s:t.slice(1)}))}for(;n.length&&n[n.length-1].t==="ctx"&&n[n.length-1].s==="";)n.pop();return n}function be({diff:e}){const n=b();if(e==null)return s.jsx("figcaption",{className:"ev-note",children:n("nodeView.loadingChange")});const a=e.patch?Ns(e.patch):[];return a.length?s.jsxs(s.Fragment,{children:[s.jsx("figcaption",{className:"ev-difflabel",children:n("nodeView.diffLabel")}),s.jsx("pre",{className:"ev-diff",children:a.map((t,l)=>s.jsx("div",{className:`dl dl-${t.t}`,children:t.s||" "},l))})]}):s.jsx("figcaption",{className:"ev-note",children:n("nodeView.noChange")})}function ke({items:e,itemKey:n,classes:a,rowClass:t,renderHeader:l,renderEvidence:i,leading:c,trailing:o,resetKey:r}){const u=b(),p=f.useRef(null),[N,x]=f.useState(()=>new Set([0]));f.useEffect(()=>{r!==void 0&&x(new Set([0]))},[r]);const k=f.useCallback(m=>x(v=>{const d=new Set(v);return d.has(m)?d.delete(m):d.add(m),d}),[]),y=f.useCallback(()=>x(m=>{const v=p.current;if(!v)return m;let d=-1;for(;m.has(d+1);)d++;if(d<0||d>=e.length-1)return m;const h=v.querySelector(`[data-i="${d}"]`);return!h||h.getBoundingClientRect().bottom-v.getBoundingClientRect().top>v.clientHeight+40?m:new Set(m).add(d+1)}),[e]);return f.useEffect(()=>{const m=p.current;if(!m)return;let v=m.scrollTop;const d=()=>{const g=m.scrollTop,w=g>v;v=g,w&&y()},h=g=>{g.key!=="j"&&g.key!=="ArrowDown"||m.scrollHeight-m.clientHeight-m.scrollTop>1||y()};return m.addEventListener("scroll",d,{passive:!0}),window.addEventListener("keydown",h,!0),()=>{m.removeEventListener("scroll",d),window.removeEventListener("keydown",h,!0)}},[y]),s.jsxs("div",{className:a.pane,ref:p,children:[e.length>1&&N.size<e.length&&s.jsx("div",{className:"chrono-tools",children:s.jsx("button",{className:"chrono-all",onClick:()=>x(new Set(e.keys())),children:u("nodeView.expandAll",{n:e.length})})}),c,e.map((m,v)=>{const d=N.has(v),h=t?t(m,v):"";return s.jsxs("div",{"data-i":v,className:`${a.row}${h?` ${h}`:""}${d?" open":""}`,children:[s.jsx("button",{className:a.head,onClick:()=>k(v),"aria-expanded":d,children:l(m,v,d)}),d&&s.jsx("figure",{className:a.evidence,children:i(m,v)})]},n(m,v))}),o]})}function bs({node:e,r:n,latest:a}){const t=ys(e.id,n.hash,!0);return s.jsx(be,{diff:t})}function ks({node:e,rows:n}){const a=b();return n?n.length?s.jsx(ke,{items:n,itemKey:t=>t.hash,classes:{pane:"pane-hist",row:"ver-row",head:"rec-toggle",evidence:"rec-evidence"},rowClass:(t,l)=>l===0?"latest":"",renderHeader:(t,l,i)=>s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"rec-head",children:[s.jsx("span",{className:"rec-caret",children:i?"▾":"▸"}),s.jsxs("span",{className:"rec-v",children:["v",n.length-l]}),s.jsx("code",{className:"rec-hash",children:t.hash.slice(0,7)}),s.jsx("span",{className:"rec-date",children:(t.date||"").slice(0,10)}),s.jsxs("span",{className:"rec-diff",children:[s.jsxs("b",{className:"rec-add",children:["+",t.additions??0]}),s.jsxs("b",{className:"rec-del",children:["−",t.deletions??0]})]})]}),s.jsx("div",{className:"rec-msg",children:t.reason}),s.jsxs("div",{className:"rec-sub",children:[a("nodeView.filesChanged",{n:t.files??0})," · ",t.session||a("common.idle")]})]}),renderEvidence:(t,l)=>s.jsx(bs,{node:e,r:t,latest:l===0})}):s.jsx("div",{className:"pane-hist empty",children:a("common.noVersions")}):s.jsx("div",{className:"pane-hist empty",children:a("nodeView.loadingHistory")})}function $e({q:e,setQ:n,placeholder:a}){return s.jsx("div",{className:"pane-filter",children:s.jsx("input",{className:"pane-filter-input",value:e,placeholder:a,onChange:t=>n(t.target.value)})})}function $s({node:e}){const n=b(),[a,t]=f.useState(""),l=e.issues||[];if(!l.length)return s.jsx("div",{className:"pane-issues empty",children:n("nodeView.noIssues")});const i=a.trim().toLowerCase(),c=i?l.filter(u=>`${u.id} ${u.concern||""}`.toLowerCase().includes(i)):l,o=c.filter(u=>u.status==="open"),r=c.filter(u=>u.status!=="open");return s.jsxs("div",{className:"pane-issues",children:[l.length>5&&s.jsx($e,{q:a,setQ:t,placeholder:n("nodeView.filterIssues")}),i&&!c.length&&s.jsx("div",{className:"pane-filter-none",children:n("nodeView.filterNone")}),o.length>0&&s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"issue-group-head",children:n("nodeView.openIssues",{n:o.length})}),o.map(u=>s.jsx(ae,{issue:u},u.id))]}),r.length>0&&s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"issue-group-head closed",children:n("nodeView.closedIssues",{n:r.length})}),r.map(u=>s.jsx(ae,{issue:u},u.id))]})]})}const U=new Map;function Ss(e,n,a){const t=`${e} ${n}`,[l,i]=f.useState(()=>U.get(t)??null);return f.useEffect(()=>{if(!e||!n)return;const c=U.get(t);c&&i(c);let o=!0;return fetch(`/api/edit?source=${encodeURIComponent(e)}&path=${encodeURIComponent(n)}`).then(r=>r.json()).then(r=>{U.set(t,r),o&&i(r)}).catch(()=>o&&i(r=>r??{patch:""})),()=>{o=!1}},[e,n,a,t]),l}function Ms({node:e,ov:n}){const a=b(),t=Ss(n.source,e.path,!0);return s.jsxs("figure",{className:"edit-rev",children:[s.jsxs("figcaption",{className:"edit-by",children:[s.jsx("span",{className:`ov-mark ov-${n.op}`,children:ms[n.op]||"•"}),s.jsx("span",{className:"edit-by-label",children:n.label}),s.jsx("span",{className:"edit-state",children:n.committed?a("nodeView.editCommitted"):a("nodeView.editDirty")})]}),s.jsx(be,{diff:t})]})}function Es({node:e}){const n=b(),a=e.overlays||[];return a.length?s.jsx("div",{className:"pane-edit",children:a.map((t,l)=>s.jsx(Ms,{node:e,ov:t},l))}):s.jsx("div",{className:"pane-edit empty",children:n("nodeView.noEdit")})}function Cs({verdict:e}){const n=b();return e?e.status==="pass"?s.jsx("span",{className:"eval-verdict pass",children:n("nodeView.eval.pass")}):e.status==="fail"?s.jsx("span",{className:"eval-verdict fail",children:n("nodeView.eval.fail")}):s.jsx("span",{className:"eval-verdict note","data-tip":e.note,children:n("nodeView.eval.note")}):s.jsx("span",{className:"eval-verdict legacy",children:n("nodeView.eval.legacy")})}function Vs({r:e}){var t;const n=b(),a=xe(e);return s.jsxs(s.Fragment,{children:[e.expected&&s.jsxs("div",{className:"eval-expected",children:[s.jsx("span",{className:"eval-expected-label",children:n("nodeView.eval.expected")})," ",e.expected]}),((t=e.verdict)==null?void 0:t.note)&&s.jsxs("div",{className:"eval-note",children:[s.jsx("span",{className:"eval-expected-label",children:n("nodeView.eval.noteLabel")})," ",e.verdict.note]}),a.length>0?s.jsx("div",{className:"eval-gallery",style:{display:"flex",flexDirection:"column",gap:8},children:a.map((l,i)=>s.jsx(ve,{e:l,alt:n("nodeView.eval.shotAlt",{scenario:e.scenario})},`${l.hash}-${i}`))}):s.jsx("figcaption",{className:"eval-noimg",children:e.blobState==="miss"?n("nodeView.eval.miss"):n("nodeView.eval.noImage")})]})}function ce({s:e}){var a;const n=b();return s.jsxs("div",{className:"eval-row eval-declared-row",children:[s.jsxs("span",{className:"eval-top",children:[s.jsx(Y,{state:"empty",title:n("score.missing")}),s.jsx("span",{className:"eval-scenario",children:e.name}),s.jsx(De,{tags:e.tags}),((a=e.code)==null?void 0:a.length)>0&&s.jsx("code",{className:"eval-tracks",children:e.code.join(", ")})]}),e.expected&&s.jsxs("div",{className:"eval-expected",children:[s.jsx("span",{className:"eval-expected-label",children:n("nodeView.eval.expected")})," ",e.expected]})]})}function oe({track:e}){const n=b();return s.jsxs("div",{className:"eval-row eval-dangling-row",children:[s.jsxs("span",{className:"eval-top",children:[s.jsx("span",{className:"eval-dangling-badge","data-tip":n("nodeView.eval.danglingTitle"),children:"⚠"}),s.jsx("span",{className:"eval-scenario eval-dangling-name",children:e.scenario}),s.jsx("span",{className:"eval-dangling-tag",children:n("nodeView.eval.danglingGone")})]}),s.jsx("div",{className:"eval-dangling-remarks",children:s.jsx(us,{replies:e.remarks})})]})}const H=new Map;function Ls({node:e}){var y,m,v;const n=b(),[a,t]=f.useState(""),l=`${e.id}@${((m=(y=e.evals)==null?void 0:y[0])==null?void 0:m.ts)||""}:${((v=e.evals)==null?void 0:v.length)||0}`,[i,c]=f.useState(()=>H.get(l)??null);if(f.useEffect(()=>{if(H.has(l)){c(H.get(l));return}let d=!0;return c(null),fetch(z(e.id,"evals")).then(h=>h.ok?h.json():Promise.reject(h.status)).then(h=>{const g={scenarios:h.scenarios||e.scenarios||[],readings:h.readings||[],dangling:h.dangling||[]};H.set(l,g),d&&c(g)}).catch(()=>{d&&c({scenarios:e.scenarios||[],readings:e.evals||[],dangling:[]})}),()=>{d=!1}},[l,e.id]),!e.evals)return s.jsx("div",{className:"pane-eval empty",children:n("nodeView.eval.noScenarios")});if(i===null)return s.jsx("div",{className:"pane-eval pane-loading",children:s.jsx("span",{className:"spinner","aria-label":n("common.loading")})});const o=i.readings,r=a.trim().toLowerCase(),u=d=>!r||(d||"").toLowerCase().includes(r),p=r?o.filter(d=>u(d.scenario)):o,N=(i.dangling||[]).filter(d=>u(d.scenario)),x=Z(i.scenarios,o).filter(d=>!d.reading&&u(d.name)),k=i.readings.length+i.scenarios.length>5?s.jsx($e,{q:a,setQ:t,placeholder:n("nodeView.filterScenarios")},"filter"):null;return o.length?s.jsx(ke,{items:p,resetKey:r,leading:[k,r&&!p.length&&!x.length&&!N.length?s.jsx("div",{className:"pane-filter-none",children:n("nodeView.filterNone")},"none"):null,...x.map(d=>s.jsx(ce,{s:d},d.name))],trailing:N.map(d=>s.jsx(oe,{track:d},d.threadId)),itemKey:(d,h)=>`${d.scenario}-${d.ts}-${h}`,classes:{pane:"pane-eval",row:"eval-row",head:"eval-head",evidence:"eval-shot"},renderHeader:(d,h,g)=>s.jsxs(s.Fragment,{children:[s.jsxs("span",{className:"eval-top",children:[s.jsx("span",{className:"eval-caret",children:g?"▾":"▸"}),s.jsx("span",{className:"eval-scenario",children:d.scenario}),s.jsx(Cs,{verdict:d.verdict}),s.jsx(Y,{state:he(d),title:d.fresh?void 0:n("nodeView.eval.staleAxes",{axes:d.staleAxes.join(", ")})})]}),s.jsxs("span",{className:"eval-meta",children:[s.jsx("span",{className:"eval-evaluator",children:d.evaluator}),s.jsx("code",{className:"eval-sha",children:d.codeSha.slice(0,7)}),s.jsx("span",{className:"eval-ts",children:d.ts.replace("T"," ").slice(0,16)})]})]}),renderEvidence:d=>s.jsx(Vs,{r:d})}):s.jsxs("div",{className:"pane-eval pane-eval-declared",children:[k,s.jsx("div",{className:"eval-todo-note",children:r&&!x.length?n("nodeView.filterNone"):n("nodeView.eval.noReadings")}),x.map(d=>s.jsx(ce,{s:d},d.name)),N.map(d=>s.jsx(oe,{track:d},d.threadId))]})}const Fs={spec:"nodeView.paneSpec",history:"nodeView.paneHistory",issues:"nodeView.paneIssues",eval:"nodeView.paneEval",edit:"nodeView.paneEdit"};function Xs({node:e,pane:n,setPane:a,onClose:t}){const l=b(),i=e.issues||[],c=i.filter(x=>x.status==="open").length,o=i.length-c,r=(e.overlays||[]).length,u=fs(e),p=u.some(x=>x.key===n)?n:u[0].key,N=ws(e.id,p==="history");return s.jsx("div",{className:"ov-backdrop","data-focus-overlay":!0,onMouseDown:t,children:s.jsxs("div",{className:"ov-panel",onMouseDown:x=>x.stopPropagation(),children:[s.jsxs("div",{className:"ov-head",children:[s.jsx("span",{className:"ov-title",children:e.title}),s.jsx("div",{className:"ov-tabs",children:u.map((x,k)=>s.jsxs("button",{className:x.key===p?"ov-tab on":"ov-tab",onClick:()=>a(x.key),children:[s.jsx("kbd",{children:k+1})," ",l(Fs[x.key]),x.key==="issues"&&(c>0||o>0)&&s.jsxs("span",{className:"ov-tab-counts",children:[c>0&&s.jsx("span",{className:"ovc st-open","data-tip":l("nodeView.openIssues",{n:c}),children:c}),o>0&&s.jsx("span",{className:"ovc st-closed","data-tip":l("nodeView.closedIssues",{n:o}),children:o})]}),x.key==="edit"&&r>0&&s.jsx("span",{className:"ov-tab-counts",children:s.jsx("span",{className:"ovc st-edit","data-tip":l("nodeView.pendingEdits",{n:r}),children:r})})]},x.key))}),s.jsx("span",{className:"ov-hint",children:l("nodeView.hint")})]}),s.jsxs("div",{className:"ov-body",children:[p==="spec"&&s.jsx("div",{className:"pane-solo",children:s.jsx(js,{node:e})}),p==="history"&&s.jsx(ks,{node:e,rows:N}),p==="issues"&&s.jsx($s,{node:e}),p==="eval"&&s.jsx(Ls,{node:e}),p==="edit"&&s.jsx(Es,{node:e})]})]})})}const As=({size:e=12})=>s.jsx(O,{name:"lock",size:e});function Is(e){if(!e.length)return null;const n={};return e.forEach(a=>{n[a.op]=(n[a.op]||0)+1}),Object.entries(n).map(([a,t])=>`${Pe[a]}${t}`).join(" ")}function Ds({guides:e=[],expandable:n,expanded:a,rollup:t,kin:l=0,onToggle:i}){return s.jsxs("span",{className:"sess-lead",children:[e.map((c,o)=>{const r=o===e.length-1?c?"tee":"elbow":c?"rail":"gap";return s.jsx("span",{className:`sess-rail ${r}`,"aria-hidden":"true"},o)}),n&&s.jsx("span",{className:`sess-fold pod${a?" open":""}`,role:"button",tabIndex:-1,style:a?{color:t,borderColor:t}:{background:t,borderColor:t},"data-tip":`${l} nested session${l===1?"":"s"} — click to ${a?"collapse":"expand"}`,onClick:c=>{c.stopPropagation(),i==null||i()},onMouseDown:c=>c.stopPropagation(),children:l})]})}function Ps(){const[e,n]=f.useState(()=>new Set);return{expanded:e,toggle:t=>n(l=>{const i=new Set(l);return i.has(t)?i.delete(t):i.add(t),i})}}function Hs({s:e,locked:n,showAvatar:a=!0,compact:t=!1,lead:l=null}){const i=b(),c=Is(e.ops),o=me(e),r=i(`status.${e.status}`);return s.jsxs(s.Fragment,{children:[l,a&&s.jsx(Ve,{seed:e.id,status:e.status,title:`${Te(e)} · ${r} — ${e.id.slice(0,8)}`}),s.jsxs("span",{className:"sess-meta",children:[t?s.jsx("span",{className:"sess-glyph",style:{color:E[e.status]},"data-tip":r,"aria-label":r,children:He[e.status]}):s.jsx("span",{className:"sess-status",style:{color:E[e.status]},children:r}),c&&s.jsx("span",{className:"sess-ops",children:c})]}),s.jsx("span",{className:"sess-id","data-tip":o,children:o}),n&&s.jsx("span",{className:"sess-lock","data-tip":i("sessionWindow.lockedTitle"),children:s.jsx(As,{})})]})}function en({sessions:e,activeId:n,onPick:a,onOpenSession:t}){const l=b(),{expanded:i,toggle:c}=Ps(),o=f.useMemo(()=>ze(e,r=>i.has(r)),[e,i]);return s.jsx("div",{className:"sesswin",children:e.length===0?s.jsxs("div",{className:"sesswin-empty",children:[l("sessionWindow.emptyBefore"),s.jsx("kbd",{children:"⏎"}),l("sessionWindow.emptyAfter")]}):o.map(r=>{if(r.type==="zone")return s.jsx("div",{className:`sesswin-zone sesswin-zone-${r.zone}`,children:l(`sessionZone.${r.zone}`)},`zone-${r.zone}`);const u=r.s,p=u.source===n,N=r.expandable||r.depth?s.jsx(Ds,{guides:r.guides,expandable:r.expandable,expanded:r.expanded,rollup:r.rollup,kin:r.kin,onToggle:()=>c(u.id)}):null;return s.jsx("button",{className:p?"sess-row locked":"sess-row",style:{"--ov":Ee(u.id)},onClick:()=>a(u),onDoubleClick:()=>t(u.id),"data-tip":l("sessionWindow.rowTitle"),children:s.jsx(Hs,{s:u,locked:p,compact:!0,lead:N})},u.id)})})}export{Ws as $,Ve as A,qe as B,Ps as C,ze as D,Es as E,is as F,Pe as G,ks as H,ae as I,se as J,qs as K,As as L,as as M,Xs as N,Ks as O,je as P,ns as Q,Ds as R,Bs as S,De as T,ts as U,xe as V,ds as W,we as X,ye as Y,_s as Z,os as _,Ie as a,ve as a0,us as a1,Us as a2,We as a3,Rs as a4,fe as a5,Oe as a6,R as a7,ls as a8,He as b,E as c,Z as d,Ae as e,Js as f,zs as g,Zs as h,ps as i,Te as j,Ys as k,Ee as l,Y as m,O as n,K as o,Qs as p,fs as q,en as r,me as s,ws as t,Gs as u,js as v,$s as w,Hs as x,Os as y,A as z};
@@ -1 +0,0 @@
1
- :root{--paper: #fdf6e3;--panel: #f4eeda;--panel2:#eee8d5;--line: #ded7bf;--ink: #586e75;--ink2: #073642;--muted: #93a1a1;--blue: #268bd2;--green: #859900;--orange:#cb4b16;--red: #dc322f;--yellow:#b58900;--magenta:#d33682;--cyan: #2aa198;--term-bg: #0d1117;--mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace}:root[data-theme=dark]{--paper: #0d1117;--panel: #161b22;--panel2:#21262d;--line: #30363d;--ink: #c9d1d9;--ink2: #f0f6fc;--muted: #8b949e;--blue: #58a6ff;--green: #3fb950;--orange:#f0883e;--red: #f85149;--yellow:#d29922;--magenta:#bc8cff;--cyan: #39c5cf;--term-bg: #0d1117}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--paper);color:var(--ink);font-family:var(--mono);font-size:13px;-webkit-font-smoothing:antialiased}*{scrollbar-color:var(--line) transparent;scrollbar-width:thin}::-webkit-scrollbar{width:9px;height:9px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--line);border-radius:6px;border:2px solid var(--panel)}::-webkit-scrollbar-thumb:hover{background:var(--muted)}::-webkit-scrollbar-corner{background:transparent}.app{display:flex;height:100vh}.app-main{flex:1;min-width:0;display:flex;position:relative}.page-graph{flex:1;min-width:0;display:grid;grid-template-columns:1fr var(--fp-w, 250px);position:relative}.side-rail{flex:0 0 52px;display:flex;flex-direction:column;align-items:center;gap:6px;padding:10px 0;background:var(--panel);border-right:1px solid var(--line)}.rail-spacer{flex:1}.rail-btn{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:none;border:none;border-radius:9px;cursor:pointer;color:var(--muted)}.rail-btn:hover{background:var(--panel2);color:var(--ink2)}.rail-btn.on{background:color-mix(in srgb,var(--blue) 14%,transparent);color:var(--blue)}.page-pane{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column;background:var(--paper)}.page-evals,.page-issues{overflow:hidden;padding:10px 14px}.page-settings{overflow:auto;flex-direction:row;justify-content:center}.settings-body{width:min(720px,94%);padding:26px 0 60px}.page-title{font-size:17px;font-weight:700;color:var(--ink2);margin:6px 2px 14px}.pane-resizer{cursor:col-resize;z-index:6;position:relative}.pane-resizer:after{content:"";position:absolute;top:0;bottom:0;left:50%;width:3px;margin-left:-1.5px;background:transparent;border-radius:2px}.pane-resizer:hover:after,body.is-resizing .pane-resizer:after{background:color-mix(in srgb,var(--blue) 55%,transparent)}.page-graph>.pane-resizer{position:absolute;top:0;bottom:0;width:9px;right:calc(var(--fp-w, 250px) - 4px)}.si-resizer{flex:0 0 7px;margin:0 -3.5px}body.is-resizing,body.is-resizing *{cursor:col-resize!important;-webkit-user-select:none!important;user-select:none!important}.app.kbd-mode,.app.kbd-mode *{cursor:none!important}.app.kbd-mode .react-flow,.app.kbd-mode .react-flow *{pointer-events:none!important}.graph{position:relative;background:var(--paper);border-right:1px solid var(--line)}.react-flow__attribution{display:none}.react-flow__edge-path{stroke-dasharray:0}.move-edge .react-flow__edge-path{stroke-linecap:round}.hud{position:absolute;top:16px;left:18px;z-index:5;display:flex;flex-direction:row;align-items:center;gap:8px;pointer-events:none}.brand{color:var(--ink2);font-weight:700;letter-spacing:.5px}.hud .hud-help{align-self:center}.hud-help{pointer-events:auto;align-self:flex-start;cursor:pointer;width:22px;height:22px;display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:13px;line-height:1;color:var(--blue);background:var(--paper);border:1px solid var(--line);border-radius:4px}.hud-help:hover{border-color:var(--blue);color:var(--orange)}.lock-hint{position:absolute;top:16px;left:50%;transform:translate(-50%);z-index:6;display:flex;align-items:center;gap:10px;max-width:min(48vw,520px);padding:5px 8px 5px 11px;background:var(--paper);border:1px solid var(--line);border-left:4px solid var(--ov, var(--blue));border-radius:6px;box-shadow:0 6px 22px #657b8329;font-family:var(--mono);font-size:12px;color:var(--ink)}.lock-hint-lead{font-weight:700;flex:none;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lock-hint-body{color:var(--ink2);flex:1;min-width:0}.lock-hint kbd{border:1px solid var(--line);border-radius:3px;padding:0 5px;margin:0 1px;color:var(--blue);font-family:var(--mono);font-size:11px}.lock-hint-release{flex:none;cursor:pointer;padding:1px 8px;background:var(--paper);border:1px solid var(--line);border-radius:4px;color:var(--muted);font-family:var(--mono);font-size:11px}.lock-hint-release:hover{border-color:var(--blue);color:var(--orange)}.board-stats{position:absolute;bottom:14px;left:18px;z-index:5;display:flex;align-items:center;gap:5px;flex-wrap:wrap;max-width:calc(100% - 36px);padding:4px 9px;background:var(--paper);border:1px solid var(--line);border-radius:6px;box-shadow:0 4px 18px #657b831f;font-family:var(--mono);font-size:12px;color:var(--ink2)}.bstat-total{font-weight:700;color:var(--ink);padding-right:1px}.bstat{display:inline-flex;align-items:center;gap:3px;padding:1px 4px;border:0;border-radius:4px;background:none;font-family:var(--mono);font-size:12px;line-height:1.4;color:inherit;cursor:pointer}.bstat:hover:not(:disabled){background:var(--panel2);color:var(--ink)}.bstat:disabled{opacity:.38;cursor:default}.bstat-dot{width:7px;height:7px;border-radius:2px;flex:none}.bstat-drift{color:var(--yellow)}.bstat-issue{color:var(--magenta)}.bstat-sep{width:1px;align-self:stretch;margin:2px 3px;background:var(--line)}.board-stats .score-badge{width:13px;height:13px;font-size:8px}.board-stats .score-badge.empty{opacity:.6}.react-flow__node{transition:opacity .18s ease,transform .2s ease}.react-flow__node.is-far{opacity:.35}.react-flow__controls{box-shadow:none;border:1px solid var(--line);border-radius:4px;overflow:hidden}.react-flow__controls-button{background:var(--panel2);border-bottom:1px solid var(--line);color:var(--ink2)}.react-flow__controls-button:hover{background:var(--panel)}.react-flow__controls-button svg{fill:var(--ink)}.spec-node{position:relative;display:flex;flex-direction:column;justify-content:center;gap:3px;width:176px;min-height:46px;padding:5px 9px;background:var(--panel);border:1px solid var(--line);border-radius:4px;transition:border-color .12s}.spec-node.focused{border-color:var(--blue);outline:2px solid var(--blue);outline-offset:-1px}.spec-node.active.focused{border-color:var(--orange);outline-color:var(--orange)}.spec-node.drift.focused{border-color:var(--yellow);outline-color:var(--yellow)}.node-row1{display:flex;align-items:center;gap:7px}.node-row2{display:flex;align-items:center;gap:7px;min-height:18px}.node-dot{position:relative;width:7px;height:7px;border-radius:2px;flex:none}.pulse{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:2px;animation:pulse 1.6s ease-out infinite}@keyframes pulse{0%{transform:scale(1);opacity:.6}to{transform:scale(2.6);opacity:0}}.node-title{font-size:12px;font-weight:600;color:var(--ink2);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.node-ago{font-size:10px;color:var(--muted);flex:none;white-space:nowrap}.node-ver{font-size:10px;color:var(--muted);flex:none}.node-expand{position:absolute;right:-7px;top:50%;transform:translateY(-50%);display:flex;align-items:center;gap:1px;font-size:9px;font-weight:700;line-height:1;color:var(--muted);background:var(--paper);border:1px solid var(--line);border-radius:7px;padding:2px 4px;pointer-events:none}.spec-node.focused .node-expand{color:var(--blue);border-color:var(--blue)}.node-editors{display:flex;align-items:center;gap:3px}.av-more{font-size:9px;font-weight:700;color:var(--muted);margin-left:1px}.avatar{display:inline-flex;border-radius:50%;box-shadow:0 0 0 1.5px var(--panel)}.av-face{display:inline-flex;align-items:center;justify-content:center;line-height:1;font-weight:700;overflow:hidden}.av-circle{border-radius:50%}.av-rounded{border-radius:5px}.av-square{border-radius:1px}.av-hex{border-radius:50%/18%;clip-path:polygon(25% 5%,75% 5%,100% 50%,75% 95%,25% 95%,0 50%)}.av-st-working{box-shadow:0 0 0 1.5px var(--panel),0 0 0 3px var(--green)}.av-st-idle{box-shadow:0 0 0 1.5px var(--panel),0 0 0 3px var(--muted)}.av-st-offline{box-shadow:0 0 0 1.5px var(--panel),0 0 0 3px var(--line);opacity:.55}.react-flow .react-flow__handle{opacity:0;pointer-events:none;background:transparent;border:none;width:5px;height:5px;min-width:0;min-height:0;border-radius:1px}.side{padding:18px 18px 24px;overflow-y:auto;background:var(--panel);border-left:1px solid var(--line)}.trail{display:flex;flex-wrap:wrap;align-items:center;gap:2px;margin-bottom:16px;font-size:11px}.trail .sep{color:var(--muted);margin:0 3px}.crumb{background:none;border:none;padding:1px 3px;cursor:pointer;color:var(--muted);font-family:var(--mono);font-size:11px}.crumb:hover{color:var(--blue)}.crumb.here{color:var(--ink2);font-weight:700}.side h1{font-size:17px;color:var(--ink2);margin:0 0 8px}.side h2{font-size:11px;color:var(--muted);margin:24px 0 10px;font-weight:500}.side h2:first-child{margin-top:0}.stats{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:4px;overflow:hidden}.stats div{display:flex;justify-content:space-between;font-size:12px;padding:7px 10px}.stats div:nth-child(odd){background:var(--panel2)}.stats span{color:var(--muted)}.stats b{color:var(--ink2);font-weight:600}.c-merged{color:var(--green)}.c-active{color:var(--orange)}.c-drift{color:var(--yellow)}.c-pending{color:var(--muted)}.badge{display:inline-block;font-size:11px;padding:2px 0;border:none;background:none}.badge.merged{color:var(--green)}.badge.active{color:var(--orange)}.badge.drift{color:var(--yellow)}.badge.pending{color:var(--muted)}.desc{color:var(--ink);line-height:1.55;font-size:12.5px;margin:12px 0 4px}.meta{margin-top:14px;display:flex;flex-direction:column;gap:0;border:1px solid var(--line);border-radius:4px;overflow:hidden}.meta div{display:flex;justify-content:space-between;font-size:12px;padding:7px 10px}.meta div:nth-child(odd){background:var(--panel2)}.meta span{color:var(--muted)}.meta b{color:var(--ink2);font-weight:600}.peek-btn{margin-top:22px;width:100%;padding:9px;background:var(--paper);color:var(--blue);border:1px solid var(--blue);border-radius:4px;font-family:var(--mono);font-size:13px;font-weight:600;cursor:pointer}.peek-btn:hover:not(:disabled){background:var(--blue);color:var(--paper)}.peek-btn:disabled{color:var(--muted);border-color:var(--line);cursor:default}.ov-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:20;background:#657b8340;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;align-items:center;justify-content:center}.ov-panel{width:min(900px,90vw);height:min(600px,84vh);background:var(--paper);border:1px solid var(--blue);border-radius:6px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 12px 40px #657b8340}.ov-head{display:flex;align-items:center;gap:14px;padding:7px 12px;background:var(--panel2);border-bottom:1px solid var(--line)}.ov-title{font-size:13px;font-weight:700;color:var(--ink2)}.ov-tabs{display:flex;gap:4px}.ov-tab{background:none;border:1px solid transparent;border-radius:4px;padding:3px 8px;cursor:pointer;color:var(--muted);font-family:var(--mono);font-size:12px}.ov-tab:hover{color:var(--ink2)}.ov-tab.on{color:var(--ink2);border-color:var(--blue);background:var(--paper)}.ov-tab kbd{font-family:var(--mono);font-size:10px;color:var(--blue);border:1px solid var(--line);border-radius:2px;padding:0 3px;margin-right:3px;background:var(--paper)}.ov-tab-counts{display:inline-flex;gap:3px;margin-left:5px;vertical-align:baseline}.ovc{font-family:var(--mono);font-size:9px;font-weight:700;line-height:1.5;padding:0 4px;border-radius:3px;border:1px solid var(--line)}.ovc.st-open{color:var(--green);border-color:color-mix(in srgb,var(--green) 45%,transparent)}.ovc.st-closed{color:var(--magenta);border-color:color-mix(in srgb,var(--magenta) 45%,transparent)}.ovc.st-edit{color:var(--blue);border-color:color-mix(in srgb,var(--blue) 45%,transparent)}.ov-hint{margin-left:auto;font-size:11px;color:var(--muted)}.ov-body{flex:1;min-width:0;overflow:hidden;display:flex}.pane-doc{flex:1;padding:22px 26px;overflow:auto}.pane-doc h1{font-size:18px;color:var(--ink2);margin:0 0 14px}.pane-doc blockquote{margin:0 0 16px;padding:8px 14px;border-left:3px solid var(--blue);background:var(--panel2);color:var(--ink);line-height:1.6;font-size:13px}.pane-doc .doc-stat{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:0 0 16px;padding:6px 10px;background:var(--panel2);border:1px solid var(--line);border-radius:5px}.stat-status{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.05em}.stat-dot{width:7px;height:7px;border-radius:2px;flex:none;background:var(--muted)}.stat-status.st-merged{color:var(--green)}.stat-status.st-merged .stat-dot{background:var(--green)}.stat-status.st-active{color:var(--orange)}.stat-status.st-active .stat-dot{background:var(--orange)}.stat-status.st-drift{color:var(--yellow)}.stat-status.st-drift .stat-dot{background:var(--yellow)}.stat-status.st-pending{color:var(--muted)}.stat-status.st-pending .stat-dot{background:var(--muted)}.stat-chip{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;color:var(--ink2);background:var(--paper);border:1px solid var(--line);border-radius:3px;padding:1px 6px}.stat-chip.stat-drift{color:var(--yellow);font-weight:700;border-color:color-mix(in srgb,var(--yellow) 45%,transparent)}.stat-sess{margin-left:auto;display:inline-flex;align-items:center;gap:5px;font-size:10.5px;color:var(--muted);min-width:0}.stat-sess b{color:var(--ink2);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pane-doc .doc-gov{margin:0 0 16px}.doc-gov-h{display:block;font-size:10.5px;color:var(--muted);margin-bottom:6px}.doc-gov-h b{color:var(--ink2);font-weight:700}.doc-gov-files{display:flex;flex-wrap:wrap;gap:5px}.gov-f{font-size:11px;color:var(--blue);background:var(--panel2);border:1px solid color-mix(in srgb,var(--blue) 22%,var(--line));padding:1px 7px;border-radius:3px}.doc-gov.prose .doc-gov-h{font-style:italic}.doc-body{border-top:1px solid var(--line);padding-top:14px;font-size:13px;line-height:1.65;color:var(--ink)}.doc-body p{margin:0 0 10px}.pane-loading{display:flex;align-items:center;justify-content:center;padding:48px 0}.spinner{width:22px;height:22px;border-radius:50%;border:2px solid var(--line);border-top-color:var(--ink2);animation:si-attach-spin .7s linear infinite}.doc-body ul{margin:0 0 10px;padding-left:18px}.doc-body li{margin:2px 0}.doc-body code{font-size:12px;background:var(--panel2);color:var(--ink2);padding:0 4px;border-radius:3px}.doc-body strong{color:var(--ink2)}.doc-h{font-size:12px;color:var(--ink2);font-weight:700;margin:14px 0 6px}.doc-pre{margin:0 0 10px;padding:10px 12px;background:var(--panel2);border-radius:4px;overflow-x:auto;font-size:12px;line-height:1.5}.doc-pre code{background:none;padding:0;color:var(--ink)}.doc-link{color:var(--blue)}.doc-table{width:100%;margin:0 0 12px;border-collapse:collapse;font-size:12px;display:block;overflow-x:auto}.doc-table th,.doc-table td{border:1px solid var(--line);padding:5px 9px;text-align:left;vertical-align:top}.doc-table th{background:var(--panel2);color:var(--ink2);font-weight:700}.doc-table code{white-space:nowrap}.spec-parts{display:flex;flex-direction:column;gap:14px;margin-top:14px}.spec-part{border:1px solid var(--line);border-radius:6px;border-left-width:3px;overflow:hidden}.spec-part.part-raw{border-left-color:var(--green)}.spec-part.part-expanded{border-left-color:var(--blue)}.spec-part.part-state{border-left-color:var(--orange)}.part-head{display:flex;align-items:baseline;gap:10px;padding:8px 12px;background:var(--panel2);flex-wrap:wrap}.part-title{font-size:12px;font-weight:700;color:var(--ink2);text-transform:uppercase;letter-spacing:.04em}.part-owner{font-size:10px;font-weight:700;padding:1px 7px;border-radius:9px;text-transform:uppercase;letter-spacing:.03em}.part-owner.owner-human{background:#8599002e;color:var(--green)}.part-owner.owner-agent{background:#268bd22e;color:var(--blue)}.part-note{font-size:11px;color:var(--muted);margin-left:auto}.part-body{padding:4px 14px 12px}.part-body .doc-body{border-top:none;padding-top:8px}.cs-sub+.cs-sub{margin-top:6px}.cs-label{font-size:11px;font-weight:700;color:var(--orange);text-transform:uppercase;letter-spacing:.04em;margin:12px 0 0}.ver-row{padding:10px 0;border-bottom:1px solid var(--line)}.ver-row.latest{border-left:2px solid var(--blue);padding-left:12px;margin-left:-14px}.rec-toggle{display:block;width:100%;text-align:left;background:none;border:0;padding:0;margin:0;cursor:pointer;font:inherit;color:inherit}.rec-caret{color:var(--muted);font-size:9px;width:9px;flex:none}.rec-head{display:flex;align-items:baseline;gap:10px;font-size:12px}.rec-v{color:var(--ink2);font-weight:700}.rec-hash{color:var(--muted);font-size:11px}.rec-date{color:var(--muted)}.rec-diff{margin-left:auto;display:flex;gap:8px;font-size:12px}.rec-add{color:var(--green)}.rec-del{color:var(--orange)}.rec-msg{color:var(--ink2);font-size:13px;margin-top:5px;word-break:break-word}.rec-sub{color:var(--muted);font-size:11px;margin-top:3px}.rec-msg.muted{color:var(--muted)}.rec-evidence{margin:12px 0 2px;padding:14px 0 0;border-top:1px solid var(--line)}.ev-note{font-size:11px;color:var(--muted);text-align:center;margin-top:12px}.ev-difflabel{font-size:11px;color:var(--muted);margin-bottom:8px}.ev-diff{margin:0;font-family:var(--mono);font-size:11px;line-height:1.55;background:var(--panel2);border:1px solid var(--line);border-radius:5px;padding:8px 0;overflow-x:auto}.ev-diff .dl{padding:0 12px;white-space:pre}.dl-hunk{color:var(--blue);opacity:.75}.dl-add{color:var(--green);background:#8599001a}.dl-del{color:var(--orange);background:#cb4b161a}.dl-ctx{color:var(--muted)}.pane-hist{flex:1;min-width:0;padding:16px 20px;overflow:auto}.pane-hist.empty{color:var(--muted);font-size:13px}.pane-solo{flex:1;min-width:0;display:flex}.spec-node.has-overlay{border-color:var(--ov);box-shadow:0 0 0 2px color-mix(in srgb,var(--ov) 22%,transparent)}.spec-node.has-overlay.ov-dirty{border-style:dashed}.spec-node.has-overlay.focused{outline-color:var(--ov)}.spec-node.ghost{background:transparent;border-style:dashed;opacity:.72}.spec-node.deleted .node-title{text-decoration:line-through;color:var(--muted)}.drift-badge{flex:none;font-size:10px;font-weight:700;color:var(--yellow);border:1px solid var(--yellow);border-radius:3px;padding:0 3px;line-height:1.4}.issue-badge{flex:none;font-size:10px;font-weight:700;color:var(--magenta);border:1px solid var(--magenta);border-radius:3px;padding:0 3px;line-height:1.4;cursor:default}.score-badge{flex:none;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:50%;border:1.5px solid currentColor;font-size:9px;font-weight:900;line-height:1;cursor:default}.score-badge.pass{color:var(--green)}.score-badge.fail{color:var(--red)}.score-badge.stalePass,.score-badge.staleFail{color:var(--muted)}.score-badge.empty{color:var(--muted);opacity:.45}.scenario-count{flex:none;font-family:var(--mono);font-size:10px;font-weight:700;line-height:1.4;border:1px solid currentColor;border-radius:3px;padding:0 3px;cursor:default}.scenario-count.pass{color:var(--green)}.scenario-count.fail{color:var(--red)}.scenario-count.stalePass,.scenario-count.staleFail{color:var(--muted)}.scenario-count.empty{color:var(--muted);opacity:.7}.focus-panel{overflow:auto;background:var(--paper);display:flex;flex-direction:column;gap:18px;padding:16px 14px}.fp-head{display:flex;flex-direction:column;gap:3px}.fp-title{font-size:15px;font-weight:700;color:var(--ink2);word-break:break-word;line-height:1.25}.fp-desc{color:var(--ink);font-size:11px;line-height:1.4;margin-top:3px;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}.fp-sec{display:flex;flex-direction:column;gap:5px}.fp-sec-head{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);border-bottom:1px solid var(--line);padding-bottom:5px}.fp-count{font-family:var(--mono);font-size:10px}.fp-count.pass{color:var(--green)}.fp-count.fail{color:var(--red)}.fp-count.stalePass,.fp-count.staleFail,.fp-count.empty{color:var(--muted)}.fp-empty{color:var(--muted);font-size:11px;font-style:italic;padding:3px 2px}.fp-scenario{position:relative;display:block;width:100%;padding:6px;text-align:left;background:none;border:none;border-radius:5px;font:inherit;color:inherit;cursor:pointer}.fp-scenario:hover{background:var(--panel2)}.fp-sc-mark{position:absolute;left:6px;top:6px;width:12px;text-align:center;font-weight:900;font-size:11px;line-height:1.5}.fp-scenario.pass .fp-sc-mark{color:var(--green)}.fp-scenario.fail .fp-sc-mark{color:var(--red)}.fp-scenario.stalePass .fp-sc-mark,.fp-scenario.staleFail .fp-sc-mark{color:var(--muted)}.fp-scenario.empty .fp-sc-mark,.fp-scenario.missing .fp-sc-mark{color:var(--muted);opacity:.55}.fp-sc-body{display:flex;flex-direction:column;gap:3px;min-width:0}.fp-sc-name{padding-left:20px;font-family:var(--mono);font-size:11px;font-weight:700;color:var(--ink2)}.fp-sc-expected{color:var(--ink);font-size:11px;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.fp-sc-code{color:var(--muted);font-family:var(--mono);font-size:9px;opacity:.85}.tag-chips{display:inline-flex;flex-wrap:wrap;gap:3px;min-width:0}.tag-chip{font-family:var(--mono);font-size:9px;line-height:1.5;color:var(--ink2);background:var(--paper);border:1px solid var(--line);border-radius:3px;padding:0 4px;white-space:nowrap}.search-item .tag-chips{flex:none}.fp-issue-counts{display:flex;gap:6px;font-size:9px}.focus-panel .issue-group-head{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:8px 2px 3px}.focus-panel .issue-card{padding:6px;border-radius:5px}.issue-card{display:block;max-width:100%;min-width:0;box-sizing:border-box;overflow:hidden;padding:5px 6px;border-radius:5px;text-decoration:none}.issue-card+.issue-card{margin-top:2px}.issue-card:hover{background:var(--panel2)}.issue-card-top{display:flex;align-items:center;gap:6px;min-width:0;margin-bottom:2px}.issue-num{font-size:10px;font-weight:700;color:var(--magenta);flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--mono)}.issue-state{font-size:8px;color:var(--muted);flex:none;text-transform:uppercase;letter-spacing:.04em;border:1px solid var(--line);border-radius:3px;padding:0 3px;line-height:1.5}.issue-state.st-open{color:var(--green);border-color:color-mix(in srgb,var(--green) 45%,transparent)}.issue-state.st-closed{color:var(--magenta);border-color:color-mix(in srgb,var(--magenta) 45%,transparent)}.issue-card-title{display:block;font-size:11px;line-height:1.35;color:var(--ink2);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.pane-issues{flex:1;min-width:0;padding:16px 20px;overflow:auto}.pane-issues.empty{color:var(--muted);font-size:13px}.pane-issues .issue-group-head{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:0 2px 6px}.pane-issues .issue-group-head.closed{margin-top:16px;border-top:1px solid var(--line);padding-top:14px}.pane-issues .issue-card{padding:7px 8px}.pane-issues .issue-card+.issue-card{margin-top:1px}.pane-issues .issue-card-title{font-size:12px}.pane-edit{flex:1;min-width:0;padding:16px 20px;overflow:auto}.pane-edit.empty{color:var(--muted);font-size:13px}.edit-rev{margin:0 0 18px}.edit-by{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--muted);margin-bottom:8px}.edit-by-label{font-weight:600}.edit-state{margin-left:auto;font-family:var(--mono);font-size:10px}.ov-marks{display:flex;gap:3px;flex:none;margin-left:2px}.ov-mark{font-size:11px;font-weight:700;line-height:1;color:var(--ov, var(--blue))}.ov-mark.ov-deleted{color:var(--orange)}.react-flow__node.ov-hot{opacity:1}.react-flow__node.ov-dim{opacity:.22}.sesswin{position:absolute;top:48px;left:16px;z-index:6;width:232px;max-height:min(80vh,calc(100vh - 112px));background:var(--paper);border:1px solid var(--line);border-radius:6px;box-shadow:0 6px 22px #657b8329;overflow-y:auto;overflow-x:hidden;font-size:12px}.sesswin-empty{padding:12px 10px;color:var(--muted);font-size:11px;line-height:1.5}.sesswin-empty kbd{border:1px solid var(--line);border-radius:3px;padding:0 4px;color:var(--blue)}.sess-row{display:flex;flex-wrap:wrap;align-items:center;column-gap:7px;row-gap:2px;width:100%;padding:7px 9px;background:none;border:none;border-bottom:1px solid var(--line);border-left:2px solid var(--ov, transparent);cursor:pointer;text-align:left;font-family:var(--mono);font-size:12px;color:var(--ink2);-webkit-user-select:none;user-select:none;transition:background .12s,border-left-width .12s}.sess-row:last-child{border-bottom:none}.sess-row:hover{background:var(--panel)}.sess-row.locked{background:color-mix(in srgb,var(--ov) 12%,var(--panel2));border-left-width:4px;color:var(--ink);font-weight:600}.sess-id{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sess-lock{font-size:10px;flex:none;line-height:1;filter:saturate(0)}.sess-meta{order:1;flex:0 0 100%;width:100%;min-width:0;margin-top:1px;display:flex;align-items:center;column-gap:7px;font-size:10px;line-height:1.3;opacity:.9;overflow:hidden}.sess-status{color:var(--muted);flex:none}.sess-ops{color:var(--ov, var(--blue));font-weight:700;flex:none}.sess-glyph{flex:none;width:12px;text-align:center;font-size:11px;line-height:1}.sess-lead{flex:none;align-self:stretch;display:inline-flex;align-items:stretch;--rail: color-mix(in srgb, var(--muted) 42%, transparent)}.sess-rail{flex:none;width:14px;position:relative;min-height:1.7em}.sess-rail.rail:before,.sess-rail.tee:before,.sess-rail.elbow:before{content:"";position:absolute;left:50%;top:0;bottom:0;border-left:1px solid var(--rail)}.sess-rail.elbow:before{bottom:50%}.sess-rail.tee:after,.sess-rail.elbow:after{content:"";position:absolute;left:50%;right:1px;top:50%;border-top:1px solid var(--rail)}.sess-fold{flex:none;display:inline-flex;align-items:center;justify-content:center;align-self:center;cursor:pointer;-webkit-user-select:none;user-select:none}.sess-fold.pod{min-width:16px;width:auto;height:14px;padding:0 4px;border-radius:999px;border:1px solid;font-size:9.5px;font-weight:700;line-height:1;color:var(--paper)}.sess-fold.pod.open{background:transparent}.sess-fold.pod:hover{filter:brightness(1.25)}.sesswin .sess-row{flex-wrap:nowrap}.sesswin .sess-meta{flex:none;width:auto;min-width:0;margin-top:0;margin-left:auto}.sesswin-zone{--zh: var(--muted);display:flex;align-items:center;gap:7px;padding:8px 9px 2px;font-size:9.5px;font-weight:700;letter-spacing:.9px;text-transform:uppercase;-webkit-user-select:none;user-select:none;color:var(--zh)}.sesswin-zone:after{content:"";flex:1;height:1px;background:var(--zh);opacity:.25}.sesswin-zone-need{--zh: var(--yellow)}.sesswin-zone-run{--zh: var(--green)}.sesswin-zone-offline{--zh: var(--muted)}.sess-menu{position:fixed;z-index:60;min-width:116px;background:var(--paper);border:1px solid var(--line);border-radius:5px;box-shadow:0 6px 22px #657b8338;overflow:hidden;padding:3px}.sess-menu-item{display:block;width:100%;text-align:left;background:none;border:none;border-radius:3px;padding:5px 9px;cursor:pointer;font-family:var(--mono);font-size:12px;color:var(--ink2)}.sess-menu-item:hover{background:var(--blue);color:var(--paper)}.sess-menu-item.danger{color:var(--orange)}.sess-menu-item.danger:hover{background:var(--orange);color:var(--paper)}.sess-menu-sep{height:1px;margin:3px 4px;background:var(--line)}.sess-menu-item.sess-menu-sess{display:flex;align-items:center;gap:6px}.sess-menu-item.sess-menu-sess .sess-glyph{width:11px}.sess-rename-modal{width:min(360px,92vw)}.sess-rename{display:flex;flex-direction:column;gap:10px;padding:4px 2px 2px}.sess-rename-input{font-family:var(--mono);font-size:13px;color:var(--ink2);background:var(--paper);border:1px solid var(--line);border-radius:4px;padding:7px 9px}.sess-rename-input:focus{outline:none;border-color:var(--blue)}.sess-rename-actions{display:flex;justify-content:flex-end;gap:8px}.sess-rename-btn{background:var(--paper);border:1px solid var(--line);color:var(--ink);border-radius:4px;padding:4px 12px;cursor:pointer;font-family:var(--mono);font-size:12px}.sess-rename-btn:hover{background:var(--panel)}.sess-rename-save{border-color:var(--blue);color:var(--blue)}.sess-rename-save:hover{background:var(--blue);color:var(--paper)}.sess-rename-save:disabled{opacity:.5;cursor:default}.sess-confirm{display:flex;flex-direction:column;gap:12px;padding:4px 2px 2px}.sess-confirm-msg{margin:0;color:var(--ink);font-size:12px;line-height:1.4}.sess-rename-btn.danger{border-color:var(--orange);color:var(--orange)}.sess-rename-btn.danger:hover{background:var(--orange);color:var(--paper)}.sess-rename-btn.danger:disabled{opacity:.5;cursor:default}.legend-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;background:#657b8340;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;align-items:center;justify-content:center}.legend{position:relative;width:min(660px,92vw);max-height:86vh;overflow-y:auto;background:var(--paper);border:1px solid var(--blue);border-radius:6px;box-shadow:0 12px 40px #657b8340;font-size:12px}.legend-head{position:sticky;top:0;display:flex;align-items:center;justify-content:space-between;padding:6px 9px;background:var(--panel2);border-bottom:1px solid var(--line)}.legend-title{color:var(--muted);font-size:11px;letter-spacing:.5px}.legend-close{background:none;border:none;color:var(--muted);cursor:pointer;display:inline-flex;align-items:center;line-height:1;padding:2px}.legend-close:hover{color:var(--orange)}.legend-body{padding:4px 10px 10px}.legend-sec{padding:8px 0;border-bottom:1px solid var(--line)}.legend-sec:last-child{border-bottom:none}.legend-h{font-size:11px;color:var(--ink2);font-weight:700;margin-bottom:6px}.legend-sub{color:var(--muted);font-weight:400}.keymap-keys{flex:none;width:132px;display:flex;flex-wrap:wrap;gap:4px}.legend kbd,.settings-body kbd{font-family:var(--mono);font-size:11px;color:var(--blue);line-height:1.4;border:1px solid var(--line);border-radius:3px;padding:0 4px;background:var(--paper)}.legend-row{display:flex;align-items:baseline;gap:8px;padding:3px 0}.legend-row .node-dot{position:relative;top:1px}.legend-name{color:var(--ink2);font-weight:600;flex:none;width:52px}.legend-desc{color:var(--ink);flex:1;line-height:1.4}.legend-glyph{color:var(--blue);font-weight:700;flex:none;width:18px;text-align:center}.legend-glyph.legend-ver{font-size:11px;color:var(--muted)}.legend .ov-mark{flex:none;width:18px;text-align:center}.legend .drift-badge{flex:none}.legend-ring{flex:none;width:22px;height:14px;border-radius:3px;background:var(--panel)}.legend-ring.ring-dashed{border:1px dashed var(--blue)}.legend-ring.ring-solid{border:1px solid var(--blue)}.legend-ring.ring-ghost{border:1px dashed var(--line);background:transparent;opacity:.72}.set-langs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px}.set-lang{font-family:var(--mono);font-size:12px;color:var(--ink);cursor:pointer;border:1px solid var(--line);border-radius:4px;padding:4px 12px;background:var(--paper)}.set-lang:hover{border-color:var(--blue);color:var(--blue)}.set-lang.on{border-color:var(--blue);color:var(--blue);background:var(--panel2);font-weight:600}.set-hint{display:block;color:var(--muted);font-size:11px;line-height:1.4}.set-keys{display:flex;flex-direction:column;gap:2px;margin:2px 0 8px}.set-key-row{display:flex;align-items:center;gap:8px;padding:2px 0}.set-key-row .legend-desc{flex:1;font-size:12px}.bind-cell{flex:none;min-width:92px;min-height:24px;display:flex;flex-wrap:wrap;align-items:center;gap:4px;justify-content:center;cursor:pointer;background:var(--paper);border:1px solid var(--line);border-radius:4px;padding:2px 6px}.bind-cell:hover:not(.fixed){border-color:var(--blue)}.bind-cell.capturing{border-color:var(--blue);border-style:dashed;background:var(--panel2)}.bind-cell.custom{border-color:var(--blue)}.bind-cell.fixed{cursor:default;opacity:.6}.bind-cell kbd{border:none;padding:0 2px;background:transparent}.bind-hint{font-size:11px;color:var(--blue)}.set-foot{display:flex;align-items:center;justify-content:space-between;gap:12px}.set-reset{flex:none;font-family:var(--mono);font-size:11px;color:var(--muted);cursor:pointer;border:1px solid var(--line);border-radius:4px;padding:3px 10px;background:var(--paper)}.set-reset:hover{border-color:var(--red);color:var(--red)}.search-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;background:#657b8340;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;align-items:flex-start;justify-content:center;padding-top:12vh}.search-panel{width:min(92vw,clamp(640px,50vw,1100px));max-height:72vh;display:flex;flex-direction:column;overflow:hidden;background:var(--paper);border:1px solid var(--blue);border-radius:6px;box-shadow:0 14px 44px #657b8347;font-size:12px}.search-bar{display:flex;align-items:center;gap:8px;padding:9px 12px;border-bottom:1px solid var(--line);background:var(--panel2)}.search-icon{color:var(--muted);font-size:14px;flex:none}.search-input{flex:1;min-width:0;background:transparent;border:none;outline:none;color:var(--ink2);font-family:var(--mono);font-size:14px;line-height:1.4}.search-input::placeholder{color:var(--muted)}.search-results{margin:0;padding:4px;list-style:none;overflow-y:auto;overflow-x:hidden}.search-empty{padding:8px 10px;color:var(--muted)}.search-item{display:flex;align-items:baseline;gap:8px;padding:5px 8px;border-radius:3px;cursor:pointer;white-space:nowrap}.search-item.on{background:var(--panel2)}.search-item .node-dot{position:relative;top:1px}.search-kind{flex:none;font-size:9px;line-height:1;letter-spacing:.4px;text-transform:uppercase;padding:2px 4px;border-radius:3px;border:1px solid var(--line);color:var(--muted);position:relative;top:-1px}.search-kind.k-spec{color:var(--blue);border-color:color-mix(in srgb,var(--blue) 40%,var(--line))}.search-kind.k-session{color:var(--orange);border-color:color-mix(in srgb,var(--orange) 40%,var(--line))}.search-kind.k-issue{color:var(--green);border-color:color-mix(in srgb,var(--green) 40%,var(--line))}.search-kind.k-scenario{color:var(--cyan);border-color:color-mix(in srgb,var(--cyan) 40%,var(--line))}.search-title{color:var(--ink2);font-weight:600;flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis}.search-path{color:var(--muted);font-size:11px;flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis}.search-foot{padding:6px 12px;border-top:1px solid var(--line);background:var(--panel);color:var(--muted);font-size:11px}.si-page{flex:1;min-width:0;display:flex}.si-panel{flex:1;min-width:0;background:var(--paper);border:none;border-radius:0;overflow:hidden;display:flex}.si-list{flex:0 0 240px;border-right:1px solid var(--line);background:var(--panel);display:flex;flex-direction:column;overflow-y:auto}.si-list-unfold{flex:0 0 22px;display:flex;align-items:flex-start;justify-content:center;padding:9px 0 0;color:var(--muted);background:var(--panel);border:none;border-right:1px solid var(--line);cursor:pointer;min-height:0}.si-list-unfold:hover{color:var(--blue);background:var(--panel2)}.si-item{display:flex;flex-wrap:wrap;align-items:center;column-gap:7px;row-gap:2px;width:100%;padding:9px 12px;background:none;border:none;border-bottom:1px solid var(--line);border-left:2px solid var(--ov, transparent);cursor:pointer;text-align:left;font-family:var(--mono);font-size:12px;color:var(--ink2)}.si-item:hover{background:var(--panel2)}.si-item.on{background:color-mix(in srgb,var(--blue) 15%,var(--panel2));color:var(--ink2);font-weight:600;border-left-width:3px}.si-item.on:hover{background:color-mix(in srgb,var(--blue) 24%,var(--panel2))}.si-item.on:before{content:"❯";flex:none;color:var(--green);font-weight:700}.si-item{flex-wrap:nowrap;padding:5px 12px;font-size:11px}.si-item.on:before{content:none}.si-item .sess-meta{flex:none;width:auto;min-width:0;margin-top:0;margin-left:auto;opacity:1;overflow:visible}.si-item .sess-lock{color:var(--muted)}.si-item.on{display:block}.si-item.on .sess-meta{float:right;margin:0 0 0 8px}.si-item.on .sess-id{white-space:normal;overflow:visible}.si-zone{--zh: var(--muted);display:flex;align-items:center;gap:8px;padding:10px 12px 4px;font-size:10px;font-weight:700;letter-spacing:1px;text-transform:uppercase;-webkit-user-select:none;user-select:none;color:var(--zh)}.si-zone:after{content:"";flex:1;height:1px;background:var(--zh);opacity:.25}.si-zone-need{--zh: var(--yellow)}.si-zone-run{--zh: var(--green)}.si-zone-offline{--zh: var(--muted)}.si-toprow{display:flex;gap:6px;padding:8px 10px;border-bottom:1px solid var(--line)}.si-selbar{display:flex;align-items:center;gap:6px;padding:8px 10px;border-bottom:1px solid var(--line)}.si-selcount{flex:1;font-family:var(--mono);font-size:11px;color:var(--ink2)}.si-selbar .sess-rename-btn{padding:4px 10px;font-size:11px}.si-check{flex:none;width:13px;height:13px;border:1.5px solid var(--muted);border-radius:3px;box-sizing:border-box}.si-check.on{border-color:var(--blue);background:var(--blue);position:relative}.si-check.on:after{content:"";position:absolute;left:3.5px;top:1px;width:3px;height:6px;border:solid var(--paper);border-width:0 1.5px 1.5px 0;transform:rotate(45deg)}.si-item.picked{background:color-mix(in srgb,var(--blue) 12%,var(--panel2))}.si-item.picked:hover{background:color-mix(in srgb,var(--blue) 20%,var(--panel2))}.si-pill{flex:1;display:flex;align-items:center;justify-content:center;padding:7px 0;background:none;border:1px solid var(--line);border-radius:5px;cursor:pointer;font-family:var(--mono);line-height:1}.si-pill-glyph{font-size:15px;display:flex}.si-pill.new{color:var(--blue)}.si-pill:hover{background:var(--panel2);border-color:currentColor}.si-pill.new.on{background:color-mix(in srgb,var(--blue) 16%,var(--panel2));border-color:var(--blue)}.si-pill.search{color:var(--ink2)}.si-pill.search:hover{color:var(--blue)}.si-pill.forum{color:var(--ink2)}.si-pill.forum:hover{color:var(--blue)}.si-pill.forum.on{color:var(--blue);background:color-mix(in srgb,var(--blue) 16%,var(--panel2));border-color:var(--blue)}.fv-master{flex:1;min-height:0;display:grid;grid-template-columns:minmax(232px,280px) 1fr}.fv-master.folded{grid-template-columns:22px 1fr}.fv-list-col{position:relative;min-height:0;display:flex;flex-direction:column;overflow:hidden;border-right:1px solid var(--line);background:var(--paper)}.fv-list-col>.fv-notice{flex:none}.fv-list-col>.fv-group{flex:1 1 auto;min-height:0;overflow-y:auto;border-top:0}.fv-list-col>.fv-scroll{flex:1 1 auto;min-height:0;overflow-y:auto}.fv-list-col>.fv-scroll .fv-group{border-top:0}.fv-list-col>.fv-scroll .fv-group-head{padding-right:34px}.fv-fold{position:absolute;top:8px;right:6px;z-index:3;display:grid;place-items:center;padding:0;color:var(--muted);background:var(--panel);border:1px solid var(--line);border-radius:6px;width:22px;height:22px;cursor:pointer}.fv-fold:hover{color:var(--blue);border-color:var(--blue)}.fv-fold-inline{display:inline-flex;align-items:center;justify-content:center;flex:none;padding:0;color:var(--muted);background:var(--panel);border:1px solid var(--line);border-radius:6px;width:22px;height:22px;cursor:pointer}.fv-fold-inline:hover{color:var(--blue);border-color:var(--blue)}.fv-unfold{display:flex;align-items:flex-start;justify-content:center;padding:9px 0 0;color:var(--muted);background:var(--panel);border:none;border-right:1px solid var(--line);cursor:pointer;min-height:0}.fv-unfold:hover{color:var(--blue);background:var(--panel2)}.fold-toggle-icon{width:15px;height:15px;display:block;flex:none}.fv-detail{min-height:0;min-width:0;overflow-y:auto;background:var(--paper)}.fv-group{display:flex;flex-direction:column}.fv-group+.fv-group{border-top:1px solid var(--line)}.fv-group-head{position:sticky;top:0;z-index:2;display:flex;align-items:center;gap:6px;flex-wrap:wrap;row-gap:5px;padding:9px 12px;background:var(--panel2);border-bottom:1px solid var(--line)}.fv-group-title{font-size:9px;font-weight:700;letter-spacing:1.2px;text-transform:uppercase;color:var(--ink2)}.fv-head-row{flex-basis:100%;display:flex;align-items:center;gap:6px}.fv-row,.ef-row{display:flex;align-items:center;gap:8px;width:100%;min-width:0;text-align:left;font:inherit;font-size:12px;color:var(--ink2);background:none;border:0;border-bottom:1px solid color-mix(in srgb,var(--line) 55%,transparent);padding:7px 12px;cursor:pointer}.fv-row:hover,.ef-row:hover{background:var(--panel2)}.fv-row.sel,.ef-row.sel{background:color-mix(in srgb,var(--blue) 12%,var(--paper));box-shadow:inset 2px 0 0 var(--blue)}.fv-row .fv-concern{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fv-note{margin:auto;padding:24px;color:var(--muted);font-family:var(--mono);font-size:12.5px;text-align:center}.fv-dot{flex:none;width:8px;height:8px;border-radius:50%;background:var(--muted)}.fv-dot.st-open{background:var(--blue)}.fv-dot.st-landed{background:var(--green)}.fv-dot.st-closed{background:color-mix(in srgb,var(--muted) 55%,transparent)}.fv-replies{flex:none;font-family:var(--mono);font-size:10px;color:var(--muted);background:var(--panel2);border:1px solid var(--line);border-radius:9px;padding:0 6px;line-height:1.4}.fv-store{flex:none;font-family:var(--mono);font-size:9px;letter-spacing:.8px;text-transform:uppercase;color:var(--muted)}.fv-store-local{color:color-mix(in srgb,var(--blue) 65%,var(--muted))}.fv-concern{flex:1 1 auto;min-width:80px;color:var(--ink);font-weight:600;font-size:12px}.fv-status{flex:none;font-family:var(--mono);font-size:9px;border:1px solid var(--line);border-radius:3px;padding:1px 6px;color:var(--muted)}.fv-st-open{color:var(--blue);border-color:color-mix(in srgb,var(--blue) 40%,var(--line))}.fv-st-landed{color:var(--green);border-color:color-mix(in srgb,var(--green) 40%,var(--line))}.fv-by{flex:none;color:var(--muted);font-size:11px}.fv-originator{flex:none;display:inline-flex;align-items:center;gap:5px;font:inherit;font-size:11px;color:var(--muted);background:transparent;border:0;border-radius:4px;padding:1px 3px}.fv-originator-dot{width:7px;height:7px;border-radius:50%;flex:none}.fv-originator-who{color:var(--ink2);font-family:var(--mono);font-size:10.5px}.fv-originator.openable{cursor:pointer;background:color-mix(in srgb,var(--green) 8%,transparent)}.fv-originator.openable:hover{background:color-mix(in srgb,var(--green) 16%,transparent)}.fv-originator.openable:focus-visible{outline:2px solid var(--green);outline-offset:2px}.fv-originator.offline{opacity:.7}.fv-chips{flex:none;display:flex;flex-wrap:wrap;gap:5px}.fvd{height:100%;min-height:0;display:flex;flex-direction:column}.fvd-scroll{flex:1 1 auto;min-height:0;overflow-y:auto;padding:16px 22px 24px}.fvd-scroll>*{max-width:860px}.fvd-compose{flex:none;border-top:1px solid var(--line);padding:8px 16px 12px;background:var(--panel)}.fvd-compose .fv-compose{margin-top:0;padding-top:0;border-top:none;max-width:860px}.fvd-head{margin-bottom:4px}.fvd-concern{font-size:16px;font-weight:700;color:var(--ink);line-height:1.35}.fv-close-issue{flex:none;font-family:var(--mono);font-size:11px;color:var(--orange);background:var(--paper);border:1px solid color-mix(in srgb,var(--orange) 35%,var(--line));padding:4px 12px;border-radius:4px;cursor:pointer}.fv-close-issue:hover{background:var(--orange);color:var(--paper);border-color:var(--orange)}.fv-close-issue:disabled{opacity:.5;cursor:default}.fv-close-issue.fv-life-promote{color:var(--blue);border-color:color-mix(in srgb,var(--blue) 35%,var(--line))}.fv-close-issue.fv-life-promote:hover{background:var(--blue);color:var(--paper);border-color:var(--blue)}.fvd-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px}.fvd-body{font-size:13px}.fv-chip{font-family:var(--mono);font-size:10.5px;color:var(--blue);background:var(--panel2);border:1px solid color-mix(in srgb,var(--blue) 22%,var(--line));padding:1px 7px;border-radius:3px;cursor:pointer;line-height:1.5}.fv-chip:hover{background:var(--blue);color:var(--paper);border-color:var(--blue)}.fv-count{color:var(--muted);font-size:10.5px}.fv-link{color:var(--blue);font-size:10.5px;text-decoration:none}.fv-link:hover{text-decoration:underline}.fv-text{font-family:var(--mono);font-size:12px;line-height:1.6;color:var(--ink2);white-space:pre-wrap}.fv-reply{margin-top:10px;padding-left:12px;border-left:2px solid var(--line);border-radius:0 4px 4px 0;transition:background .15s,border-color .15s}.fv-reply.active{border-left-color:var(--green);background:color-mix(in srgb,var(--green) 7%,transparent)}.fv-reply.sel{border-left-color:var(--orange);background:color-mix(in srgb,var(--orange) 9%,transparent)}.fv-reply.remark.open{border-left-color:var(--orange);border-left-width:3px}.fv-reply.remark.resolved{opacity:.62;border-left-color:color-mix(in srgb,var(--green) 45%,var(--line))}.fv-remark-state{font-family:var(--mono);font-size:10px;padding:0 5px;border-radius:3px;margin-left:auto}.fv-remark-state.open{color:var(--orange);background:color-mix(in srgb,var(--orange) 12%,transparent);font-weight:600}.fv-remark-state.resolved{color:var(--green);background:color-mix(in srgb,var(--green) 12%,transparent)}.fv-remark-act{font-family:var(--mono);font-size:10px;padding:0 6px;border-radius:3px;cursor:pointer;line-height:1.6;background:var(--paper)}.fv-remark-act.resolve{color:var(--green);border:1px solid color-mix(in srgb,var(--green) 40%,var(--line))}.fv-remark-act.resolve:hover{background:var(--green);color:var(--paper);border-color:var(--green)}.fv-remark-act.retract{color:var(--muted);border:1px solid var(--line)}.fv-remark-act.retract:hover{background:var(--orange);color:var(--paper);border-color:var(--orange)}.fv-remark-act:disabled{opacity:.5;cursor:default}.fv-reply-meta{display:flex;align-items:center;gap:8px;margin-bottom:3px;font-family:var(--mono);font-size:10.5px}.fv-reply-by{color:var(--blue);font-weight:600}.fv-reply-at{color:var(--muted)}.fv-anchor{font-family:var(--mono);font-size:10.5px;color:var(--orange);background:color-mix(in srgb,var(--orange) 12%,transparent);border:1px solid color-mix(in srgb,var(--orange) 35%,var(--line));border-radius:3px;padding:1px 6px;cursor:pointer}.fv-anchor:hover{background:var(--orange);color:var(--paper)}.fv-anchor.static{cursor:default}.fv-anchor.static:hover{background:color-mix(in srgb,var(--orange) 12%,transparent);color:var(--orange)}.fv-anchor.static.degraded{color:var(--muted);background:transparent;border-style:dashed;border-color:color-mix(in srgb,var(--muted) 45%,var(--line))}.fv-anchor.static.degraded:hover{color:var(--muted);background:transparent}.fv-reply-media{display:flex;flex-direction:column;gap:6px;margin-top:6px}.fv-frames{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:6px}.fv-frames .an-image,.fv-frames .eval-video{height:48px;width:auto;max-width:none}.fv-anchor-btn{display:inline-flex;align-items:center;gap:4px;font-family:var(--mono);font-size:10.5px;color:var(--orange);background:var(--panel2);border:1px solid color-mix(in srgb,var(--orange) 35%,var(--line));border-radius:4px;padding:3px 10px;cursor:pointer}.fv-anchor-btn:hover{background:var(--orange);color:var(--paper)}.fv-new-btn{display:inline-flex;align-items:center;justify-content:center;color:var(--blue);background:color-mix(in srgb,var(--blue) 10%,var(--panel2));border:1px solid color-mix(in srgb,var(--blue) 32%,var(--line));padding:3px 12px;border-radius:6px;cursor:pointer;transition:color .12s,background .12s,border-color .12s}.fv-new-btn:hover{background:var(--blue);color:var(--paper);border-color:var(--blue)}.fv-new-modal{width:min(520px,92vw);overflow:visible}.fv-new-modal .legend-body{padding:0}.fv-hint{font-family:var(--mono);font-size:10.5px;color:var(--muted)}.fv-notice{padding:6px 16px;font-family:var(--mono);font-size:11px;color:var(--green);background:color-mix(in srgb,var(--green) 8%,var(--paper));border-bottom:1px solid var(--line)}.fv-error{margin:4px 0 8px;font-family:var(--mono);font-size:11px;color:var(--red)}.fv-actions .fv-error{margin:0}.fv-compose{margin-top:12px;padding-top:10px;border-top:1px dashed var(--line)}.fv-compose .fv-textarea{resize:none;min-height:56px;max-height:38vh}.fv-new-form{display:flex;flex-direction:column;gap:8px;padding:12px 16px;border-bottom:1px solid var(--line);background:var(--panel2)}.fv-store-pick{display:flex;align-items:center;gap:8px;align-self:flex-start;font-family:var(--mono);font-size:10.5px;color:var(--muted)}.fv-store-pick select{font-family:var(--mono);font-size:11px;color:var(--ink2);background:var(--paper);border:1px solid var(--line);border-radius:4px;padding:3px 7px}.fv-input,.fv-textarea{width:100%;box-sizing:border-box;font-family:var(--mono);font-size:12px;color:var(--ink);background:var(--paper);border:1px solid var(--line);border-radius:4px;padding:6px 8px;resize:vertical}.fv-input:focus,.fv-textarea:focus{outline:none;border-color:var(--blue)}.fv-tawrap{position:relative}.fv-tawrap .fv-textarea{display:block}.fv-actions{display:flex;align-items:center;gap:10px;margin-top:6px}.fv-cancel{margin-left:auto;font-family:var(--mono);font-size:11px;color:var(--muted);background:var(--paper);border:1px solid var(--line);padding:4px 12px;border-radius:4px;cursor:pointer}.fv-cancel:hover{color:var(--orange);border-color:var(--orange)}.fv-cancel:disabled{opacity:.5;cursor:default}.fv-send{margin-left:auto;font-family:var(--mono);font-size:11px;color:var(--paper);background:var(--blue);border:1px solid var(--blue);padding:4px 14px;border-radius:4px;cursor:pointer}.fv-cancel+.fv-send{margin-left:0}.fv-send:disabled{opacity:.5;cursor:default}.si-content{flex:1;min-width:0;display:flex;flex-direction:column;background:var(--paper)}.si-content.is-new{align-items:center;justify-content:center}.si-new-center{width:min(560px,86%);display:flex;flex-direction:column;align-items:center;gap:12px;margin-bottom:12vh;animation:si-rise .18s ease}.si-avatar{font-size:30px;color:var(--blue);letter-spacing:2px}.si-ask{font-size:15px;color:var(--ink2)}.si-inputwrap{position:relative;width:100%;display:flex;border:1px solid var(--blue);border-radius:6px;background:var(--panel);padding:10px 12px;transition:height .12s ease}.mention-menu{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:5;margin:0;padding:4px;list-style:none;max-height:248px;overflow-y:auto;background:var(--paper);border:1px solid var(--blue);border-radius:4px;box-shadow:0 6px 18px #07364229;animation:si-rise .12s ease}.mention-menu.up{top:auto;bottom:calc(100% + 4px)}.mention-menu.fixed{position:fixed;top:auto;z-index:70}.mention-head{padding:3px 8px 5px;font-size:10.5px;color:var(--muted);letter-spacing:.02em;border-bottom:1px solid var(--line);margin-bottom:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mention-item{display:flex;align-items:baseline;gap:8px;padding:4px 8px;border-radius:3px;cursor:pointer;font-size:12px;white-space:nowrap}.mention-item.on{background:var(--panel2)}.mention-item.new .mention-id{color:var(--green);font-style:italic}.mention-dot{width:6px;height:6px;border-radius:50%;flex:none;align-self:center}.mention-id{color:var(--blue);flex:none}.mention-id .mention-hit{color:var(--ink2);font-weight:700}.mention-path{color:var(--muted);font-size:11px;min-width:0;overflow:hidden;text-overflow:ellipsis}.slash-name{color:var(--blue);flex:none}.slash-name .mention-hit{color:var(--ink2);font-weight:700}.slash-desc{color:var(--muted);font-size:11px;min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis}.slash-src{color:var(--muted);font-size:10.5px;flex:none;opacity:.7}.slash-src.src-user{color:var(--green);opacity:.85}.slash-src.src-project{color:var(--cyan);opacity:.85}.slash-src.src-skill{color:var(--magenta);opacity:.85}.slash-name.board{color:var(--sc);font-weight:700}.slash-src.src-board{color:var(--sc);opacity:.9}.slash-src.src-mutating{color:var(--yellow);opacity:.85}.slash-src.src-report{color:var(--cyan);opacity:.85}.si-input{flex:1;min-width:0;resize:none;background:transparent;border:none;outline:none;color:var(--ink2);font-family:var(--mono);font-size:13px;line-height:1.5;max-height:180px;overflow-y:hidden;transition:height .12s ease}.si-input::placeholder{color:var(--muted)}.si-hint{font-size:11px;color:var(--muted)}.si-hint code{color:var(--blue);background:var(--panel2);padding:0 4px;border-radius:3px}.si-agent-glyph{width:16px;height:16px;display:block;fill:currentColor}.si-launcher-picker{display:inline-flex;align-items:center;gap:6px}.si-launcher-label{font-size:11px;color:var(--ink2);text-transform:lowercase}.si-launcher-harness{display:inline-flex;align-items:center;color:var(--ink2)}.si-launcher-select{height:28px;padding:0 8px;cursor:pointer;color:var(--ink);background:var(--panel);border:1px solid var(--line);border-radius:999px;font-size:12px;transition:border-color .12s ease}.si-launcher-select:hover{border-color:var(--blue)}.si-content.is-session .si-term-body{animation:si-expand .22s ease}.si-content.is-session{--si-dock-h: 54px}.si-tabbar{flex:none;display:flex;align-items:stretch;gap:8px;padding:0 10px;background:var(--panel);border-bottom:1px solid var(--line)}.si-tabs{flex:none;display:flex;gap:2px}.si-tab{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:none;cursor:pointer;padding:8px 14px;font-family:var(--mono);font-size:12px;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px}.si-tab:hover{color:var(--ink2)}.si-tab.on{color:var(--ink2);border-bottom-color:var(--blue)}.si-th-name{flex:1;min-width:0;align-self:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--mono);font-size:12px;color:var(--ink2)}.si-term-body{flex:1;min-height:0;overflow:hidden;padding:6px 10px 0;margin-bottom:var(--si-dock-h);background:var(--term-bg)}.si-line{font-size:12px;line-height:1.6;color:var(--ink2);white-space:pre-wrap;word-break:break-word}.si-line.muted{color:var(--muted)}.si-op{color:var(--blue);font-weight:700}.si-bottom{position:absolute;left:12px;right:12px;bottom:12px;z-index:2;display:flex;align-items:flex-end;gap:8px;padding:8px 10px;border:1px solid var(--line);border-radius:6px;background:var(--panel)}.si-prompt{color:var(--blue);flex:none}.si-bottom .si-input:disabled{color:var(--muted)}.si-bottom.err{border-color:var(--orange)}.si-send-err{flex:none;color:var(--orange);font-size:11px;white-space:nowrap}.si-attach{flex:none;align-self:flex-end;display:inline-flex;align-items:center;background:transparent;border:none;cursor:pointer;color:var(--muted);line-height:1.5;padding:0 2px}.si-attach:hover:not(:disabled){color:var(--blue)}.si-attach:disabled{opacity:.5;cursor:default}.si-attach-busy{animation:si-attach-spin .8s linear infinite}@keyframes si-attach-spin{to{transform:rotate(360deg)}}.si-inputwrap.dragover,.si-bottom.dragover{border-color:var(--green)}.si-attach-err{flex:none;align-self:center;color:var(--orange);font-size:11px;white-space:nowrap}@keyframes si-rise{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@keyframes si-expand{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.st-wrap{position:relative;width:100%;height:100%}.st-host{width:100%;height:100%;overflow:hidden}.st-copyhint{position:absolute;right:8px;bottom:7px;pointer-events:none;z-index:2;font-family:var(--mono);font-size:11px;line-height:1.25;letter-spacing:.2px;color:#cfe8e8;opacity:.85;background:#073642eb;border:1px solid rgba(131,148,150,.35);padding:3px 8px;border-radius:5px;transition:opacity .15s ease,color .15s ease,background .15s ease,border-color .15s ease}.st-wrap:hover .st-copyhint{opacity:1}.st-copyhint.copied{opacity:1;color:#fdf6e3;background:#859900f2;border-color:#859900f2}.st-copyhint.reconnecting{opacity:1;color:#fdf6e3;background:#cb4b16f2;border-color:#cb4b16f2;animation:st-recon-pulse 1.1s ease-in-out infinite}@keyframes st-recon-pulse{0%,to{opacity:1}50%{opacity:.55}}.st-host .xterm{width:100%!important;height:100%!important;background:var(--term-bg)!important}.st-host .xterm-screen{background:var(--term-bg)!important}.st-host .xterm-viewport{overflow-y:auto!important;overflow-x:hidden!important;background:var(--term-bg)!important}.si-bottom .si-input{color:var(--ink2)}.si-actions{margin-left:auto;display:flex;align-items:center;gap:6px}.si-act{background:var(--paper);border:1px solid var(--line);color:var(--ink2);border-radius:4px;padding:1px 9px;cursor:pointer;font-family:var(--mono);font-size:11px}.si-act:hover,.si-act.go{border-color:var(--blue);color:var(--blue)}.si-act.go:hover{background:var(--blue);color:var(--paper)}.si-act.big{padding:8px 18px;font-size:13px;margin-top:8px}.sc-red{--sc: var(--red)}.sc-green{--sc: var(--green)}.sc-yellow{--sc: var(--yellow)}.sc-cyan{--sc: var(--cyan)}.sc-muted{--sc: var(--muted)}.si-act.board{border-color:var(--sc);color:var(--sc)}.si-act.board:hover{background:var(--sc);color:var(--paper);border-color:var(--sc)}.si-act.board.type.on{background:var(--sc);color:var(--paper)}.si-act.board.type.suggest{animation:si-type-pulse 1.1s ease-in-out infinite}@keyframes si-type-pulse{0%,to{box-shadow:0 0 #b5890080}50%{box-shadow:0 0 0 3px #b5890000}}.si-bottom.type{border-color:var(--yellow);background:var(--panel2);cursor:pointer;gap:10px}.si-type-ind{color:var(--yellow);font-weight:700;flex:none}.si-type-help{color:var(--muted);font-size:11px}.si-offline{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;text-align:center;padding:24px}.si-offline-msg{font-size:15px;color:var(--ink2)}.si-offline-sub{font-size:12px;color:var(--muted);max-width:460px;line-height:1.6}.si-offline-sub code{color:var(--blue);background:var(--panel2);padding:0 4px;border-radius:3px}.si-offline-err{margin-top:10px;font-size:12px;color:var(--yellow);max-width:460px;line-height:1.55;border:1px solid var(--yellow);border-radius:4px;padding:8px 10px;background:var(--panel2)}.m-app{position:fixed;top:0;right:0;bottom:0;left:0;z-index:10;display:flex;flex-direction:column;background:var(--paper);color:var(--ink);font-family:var(--mono);-webkit-tap-highlight-color:transparent}.m-topbar{flex:none;display:flex;align-items:center;gap:8px;height:48px;padding:0 10px;padding-top:env(safe-area-inset-top,0);box-sizing:content-box;border-bottom:1px solid var(--line);background:var(--panel)}.m-back{flex:none;width:36px;height:36px;display:flex;align-items:center;justify-content:center;font-size:26px;line-height:1;color:var(--blue);background:none;border:none;cursor:pointer}.m-back.ghost{visibility:hidden}.m-brand{font-weight:700;letter-spacing:.4px;color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m-main{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;overscroll-behavior:contain}.m-specs{flex:1;min-height:0;display:flex;flex-direction:column}.m-crumbs{flex:none;display:flex;align-items:center;gap:2px;padding:7px 10px;overflow-x:auto;white-space:nowrap;border-bottom:1px solid var(--line);background:var(--paper)}.m-crumbs::-webkit-scrollbar{display:none}.m-crumb{display:inline-flex;align-items:center;gap:2px}.m-crumb-sep{color:var(--muted)}.m-crumb-btn{background:none;border:none;padding:2px 3px;font-family:var(--mono);font-size:12px;color:var(--muted);cursor:pointer}.m-crumb-btn.cur{color:var(--ink2);font-weight:700}.m-node{flex:1;min-height:0;display:flex;flex-direction:column}.m-node-head{flex:none;display:flex;align-items:center;flex-wrap:wrap;gap:6px 8px;padding:12px 14px 8px}.m-dot{flex:none;width:9px;height:9px;border-radius:50%}.m-node-title{font-size:16px;font-weight:700;color:var(--ink2)}.m-node-ver{font-size:12px;color:var(--muted)}.m-node-status{font-size:11px;color:var(--ink);padding:1px 6px;border:1px solid var(--line);border-radius:999px}.m-node-faces{display:inline-flex;gap:2px}.m-node-desc{flex:none;padding:0 14px 10px;color:var(--ink);font-size:13px;line-height:1.5}.m-tabs{flex:none;display:flex;gap:6px;padding:0 10px 8px;overflow-x:auto;white-space:nowrap;border-bottom:1px solid var(--line)}.m-tabs::-webkit-scrollbar{display:none}.m-tab{flex:none;padding:6px 12px;min-height:32px;cursor:pointer;font-family:var(--mono);font-size:12px;color:var(--ink);background:var(--panel);border:1px solid var(--line);border-radius:999px}.m-tab.on{color:var(--paper);background:var(--blue);border-color:var(--blue)}.m-pane-host{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.m-pane-host>*{flex:1;min-height:0}.m-pane-host.fixed .pane-hist{height:100%}.m-pane-host .pane-doc{overflow:auto;-webkit-overflow-scrolling:touch;padding:14px}.m-pane-host .pane-doc>h1,.m-pane-host .pane-doc>blockquote{display:none}.m-pane-host .pane-issues,.m-pane-host .pane-edit{-webkit-overflow-scrolling:touch}.m-children{overflow:auto;-webkit-overflow-scrolling:touch}.m-row{display:flex;align-items:center;gap:9px;width:100%;min-height:52px;padding:10px 14px;text-align:left;cursor:pointer;background:var(--paper);border:none;border-bottom:1px solid var(--line);font-family:var(--mono);color:var(--ink)}.m-row:active{background:var(--panel)}.m-row[disabled]{opacity:.5}.m-row-title{flex:1;min-width:0;font-size:14px;color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m-row-faces{flex:none;display:inline-flex;gap:2px}.m-row-ver{flex:none;font-size:11px;color:var(--muted)}.m-row-kids{flex:none;font-size:11px;color:var(--blue)}.m-row-chev{flex:none;color:var(--muted);font-size:18px}.m-tabbar{flex:none;display:flex;border-top:1px solid var(--line);background:var(--panel);padding-bottom:env(safe-area-inset-bottom,0)}.m-tabbar-btn{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;height:52px;cursor:pointer;background:none;border:none;font-family:var(--mono);font-size:13px;color:var(--muted)}.m-tabbar-btn.on{color:var(--blue);font-weight:700;box-shadow:inset 0 2px 0 var(--blue)}.m-tabbar-ico{font-size:13px}.m-tabbar-badge{min-width:16px;padding:0 4px;border-radius:999px;background:var(--orange);color:var(--paper);font-size:10px;line-height:16px;text-align:center}.m-sesslist{flex:1;min-height:0;overflow:auto;-webkit-overflow-scrolling:touch}.m-sess-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;width:100%;padding:12px 14px;text-align:left;cursor:pointer;background:var(--paper);border:none;border-bottom:1px solid var(--line);font-family:var(--mono)}.m-sess-row:active{background:var(--panel)}.m-sess-row .sess-id{flex:1;min-width:0;font-weight:700;color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m-sess-row .sess-meta{font-size:11px;line-height:1.4}.m-sess-row .sess-ops{color:var(--muted)}.m-sessdetail{flex:1;min-height:0;overflow:auto;-webkit-overflow-scrolling:touch}.m-sess-card{display:flex;align-items:center;gap:10px;padding:14px;border-bottom:1px solid var(--line)}.m-sess-meta{display:flex;flex-direction:column;gap:2px;min-width:0}.m-sess-name{font-size:16px;font-weight:700;color:var(--ink2)}.m-sess-status{font-size:12px;color:var(--muted)}.m-sess-activity{padding:10px 14px;color:var(--ink);font-size:13px;line-height:1.5;background:var(--panel);border-bottom:1px solid var(--line)}.m-sess-section{padding:12px 14px 6px;font-size:11px;font-weight:700;letter-spacing:.4px;color:var(--muted);text-transform:uppercase}.m-sessdetail .ov-mark{flex:none}.m-empty{padding:18px 14px;color:var(--muted);font-size:13px}.m-empty.big{flex:1;display:flex;align-items:center;justify-content:center;text-align:center}.pane-eval{flex:1;min-width:0;padding:16px 20px;overflow:auto}.pane-eval.empty{color:var(--muted);font-size:13px}.eval-todo-note{color:var(--muted);font-size:13px;margin:0 0 14px}.eval-declared-row .eval-expected{padding-left:23px;margin:4px 0 0}.eval-tracks{color:var(--muted);font-family:var(--mono);font-size:10px;opacity:.85}.eval-dangling-badge{color:var(--orange);margin-right:6px}.eval-dangling-name{text-decoration:line-through;color:var(--muted)}.eval-dangling-tag{font-family:var(--mono);font-size:10px;color:var(--orange);margin-left:8px;border:1px dashed color-mix(in srgb,var(--orange) 45%,var(--line));border-radius:3px;padding:0 5px}.eval-dangling-remarks{padding-left:23px;margin:6px 0 0}.eval-row{border-bottom:1px solid var(--line);padding:10px 0}.eval-row:last-child{border-bottom:0}.eval-head{display:flex;flex-direction:column;gap:4px;width:100%;text-align:left;background:none;border:0;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer}.eval-top{display:flex;align-items:center;gap:8px}.eval-caret{flex:none;color:var(--muted);font-size:11px}.eval-scenario{font-size:13px;font-weight:600;color:var(--ink2)}.eval-meta{display:flex;align-items:center;gap:10px;font-size:11px;color:var(--muted)}.eval-sha{color:var(--blue);background:var(--panel2);padding:0 4px;border-radius:3px}.eval-verdict{flex:none;font-size:10px;font-weight:700;border-radius:3px;padding:0 4px;line-height:1.5}.eval-verdict.pass{color:var(--green);border:1px solid var(--green)}.eval-verdict.fail{color:var(--orange);border:1px solid var(--orange)}.eval-verdict.note{color:var(--blue);border:1px solid var(--blue);cursor:help}.eval-verdict.legacy{color:var(--muted);border:1px solid var(--line)}.eval-shot{margin:8px 0 2px;padding-left:19px}.eval-shot img,.eval-video{display:block;max-width:100%;background:var(--panel2);border:1px solid var(--line);border-radius:4px}.eval-noimg{font-size:11px;color:var(--muted)}.eval-expected,.eval-note{font-size:12px;color:var(--ink2);margin:0 0 6px}.eval-expected-label{color:var(--muted);font-weight:600}.eval-transcript{font-family:var(--mono);font-size:11px;color:var(--ink2);background:var(--panel2);border:1px solid var(--line);border-radius:4px;padding:8px 10px;margin:0;max-height:360px;overflow:auto;white-space:pre-wrap;word-break:break-word}.eval-transcript.loading{color:var(--muted)}.eval-datawrap{border:1px solid var(--line);border-left:3px solid var(--acc, #6b46c1);border-radius:4px;overflow:hidden}.eval-datahead{font-family:var(--mono);font-size:10px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);background:var(--panel);padding:4px 10px;border-bottom:1px solid var(--line)}.eval-data{font-family:var(--mono);font-size:11px;color:var(--ink2);background:var(--panel2);padding:8px 10px;margin:0;max-height:360px;overflow:auto;white-space:pre-wrap;word-break:break-word}.eval-data.loading{color:var(--muted)}.proof-newtab{margin-left:auto;color:var(--blue);text-decoration:none;font-size:11px}.proof-newtab:hover{text-decoration:underline}.proof-iframe{flex:1;width:100%;border:0;background:#0b0e14}.ef-chipbar{display:flex;gap:6px;flex-wrap:wrap}.ef-chip{font:inherit;font-size:11px;color:var(--muted);background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:3px 10px;cursor:pointer;line-height:1.35;transition:color .12s,border-color .12s,background .12s}.ef-chip:hover{color:var(--ink2);border-color:color-mix(in srgb,var(--blue) 45%,var(--line))}.ef-chip.on{color:var(--paper);background:var(--blue);border-color:var(--blue)}.ef-close{font:inherit;color:var(--muted);background:none;border:0;cursor:pointer;padding:2px 6px}.ef-empty,.ef-miss{color:var(--muted);font-size:12px;padding:18px 8px}.ef-scenario{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600;font-size:12px}.ef-node{flex:0 1 auto;max-width:58px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;opacity:.9}.ef-kind{flex:none;margin-left:auto;font-size:11px;color:var(--muted)}.ef-time{flex:none;color:var(--muted);font-size:10.5px;min-width:26px;text-align:right}.an-detail{height:100%;min-height:0;display:flex;flex-direction:column;padding:0}.an-head{flex:none;display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 16px;border-bottom:1px solid var(--line);background:var(--panel2)}.an-work{flex:1 1 auto;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,340px)}.an-stage-col{min-width:0;min-height:0;overflow-y:auto;padding:12px 16px 20px}.an-rail{min-width:0;min-height:0;display:flex;flex-direction:column;border-left:1px solid var(--line);background:var(--panel)}.an-rail .an-comments-head{flex:none;padding:10px 12px 8px;border-bottom:1px solid var(--line)}.an-rail-list{flex:1 1 auto;min-height:0;overflow-y:auto;padding:4px 12px 8px}.an-rail-list .fv-reply{margin-top:8px}.an-rail-compose{flex:none;border-top:1px solid var(--line);padding:0 12px 10px;background:var(--panel)}.an-rail-compose .fv-compose{margin-top:8px;padding-top:0;border-top:none}@media (max-width: 900px){.an-detail{height:auto}.an-work{display:block}.an-stage-col{overflow:visible}.an-rail{border-left:none;border-top:1px solid var(--line)}.an-rail-list{overflow:visible}.an-rail-compose{position:sticky;bottom:0;z-index:2}}.an-meta{font-size:10.5px;color:var(--muted)}.an-image{display:block;max-width:100%;border:1px solid var(--line);border-radius:6px;background:var(--panel2);cursor:zoom-in}.lightbox{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;display:flex;align-items:center;justify-content:center;background:#000000d1;cursor:zoom-out}.lightbox img{max-width:96vw;max-height:96vh;object-fit:contain;border-radius:4px;box-shadow:0 8px 48px #0009}.an-prior-note{color:var(--muted)}.an-stale{color:var(--muted);font-family:var(--mono);font-size:11px}.an-stale b{color:var(--ink2);font-weight:700}.an-stale-files{opacity:.85}.an-title{font-weight:700;font-size:14px;color:var(--ink)}.an-node{font-size:11px;color:var(--muted)}.an-expected{font-size:12px;color:var(--ink2);padding:8px 0 0}.an-comments-head{font-size:10px;font-weight:700;letter-spacing:1.2px;text-transform:uppercase;color:var(--ink2)}.an-stage-col>*{max-width:1100px}.an-gallery{display:flex;flex-direction:column;gap:10px;margin:12px 0 0}.an-detail>.an-expected,.an-detail>.an-hint{padding:8px 16px 0}.an-stage{position:relative;margin:12px 0 0;cursor:crosshair}.an-video{display:block;width:100%;background:#000;border:1px solid var(--line);border-radius:6px 6px 0 0}.an-rect{position:absolute;border:2px solid var(--orange);border-radius:3px;background:#ff963c1f;pointer-events:none}.an-rect.live{border-style:dashed}.an-bigplay{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:54px;height:54px;border-radius:50%;background:#080c1280;border:1px solid rgba(255,255,255,.22);display:flex;align-items:center;justify-content:center;font-size:22px;color:#fff;pointer-events:none;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.an-bar{display:flex;align-items:center;gap:10px;padding:6px 8px;background:var(--panel2);border:1px solid var(--line);border-top:none;border-radius:0 0 6px 6px}.an-play{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:30px;height:26px;color:var(--ink);background:var(--panel);border:1px solid var(--line);border-radius:5px;cursor:pointer}.an-play:hover{border-color:var(--blue)}.an-fs{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:30px;height:26px;color:var(--ink);background:var(--panel);border:1px solid var(--line);border-radius:5px;cursor:pointer}.an-fs:hover{border-color:var(--blue)}.an-player:fullscreen{display:flex;flex-direction:column;align-items:center;justify-content:center;background:#000}.an-player:fullscreen .an-stage{margin:0;max-width:100vw;max-height:calc(100vh - 38px)}.an-player:fullscreen .an-video{width:auto;max-width:100vw;max-height:calc(100vh - 38px);border:none;border-radius:0}.an-player:fullscreen .an-bar{width:min(100vw,1100px);border-radius:0}.an-player:-webkit-full-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;background:#000}.an-player:-webkit-full-screen .an-stage{margin:0;max-width:100vw;max-height:calc(100vh - 38px)}.an-player:-webkit-full-screen .an-video{width:auto;max-width:100vw;max-height:calc(100vh - 38px);border:none;border-radius:0}.an-player:-webkit-full-screen .an-bar{width:min(100vw,1100px);border-radius:0}.an-time{flex:0 0 auto;font-family:var(--mono);font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}.an-curstep{flex:0 0 auto;font-size:10.5px;color:var(--green);background:color-mix(in srgb,var(--green) 12%,transparent);border:1px solid color-mix(in srgb,var(--green) 35%,var(--line));border-radius:3px;padding:1px 7px;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.an-seek{flex:1 1 auto;position:relative;height:18px;display:flex;align-items:center;cursor:pointer}.an-seek-trk{position:absolute;left:0;right:0;height:5px;background:var(--line);border-radius:5px}.an-seek-play{position:absolute;left:0;height:5px;background:var(--blue);border-radius:5px;transition:width .12s linear}.an-knob{position:absolute;width:12px;height:12px;background:var(--ink);border:2px solid var(--paper);border-radius:50%;transform:translate(-50%);box-shadow:0 1px 4px #0006;transition:left .12s linear}.an-band{position:absolute;top:2px;width:2px;height:14px;background:color-mix(in srgb,var(--green) 45%,transparent);transform:translate(-50%);pointer-events:none}.an-mk{position:absolute;top:-1px;width:10px;height:20px;padding:0;transform:translate(-50%);background:none;border:none;cursor:pointer}.an-mk:after{content:"";display:block;margin:0 auto;width:3px;height:20px;border-radius:2px;background:var(--orange);box-shadow:0 0 0 1px var(--paper);transition:transform .12s,background .12s}.an-mk:hover:after{transform:scaleX(1.8)}.an-mk.active:after{background:var(--green)}.an-mk.on:after{transform:scaleX(2);background:var(--orange);box-shadow:0 0 0 1px var(--paper),0 0 8px color-mix(in srgb,var(--orange) 60%,transparent)}.an-seek-hov{position:absolute;bottom:22px;transform:translate(-50%);background:var(--panel);border:1px solid var(--line);color:var(--ink);font-family:var(--mono);font-size:10.5px;padding:1px 6px;border-radius:4px;pointer-events:none;white-space:nowrap}.an-keys{font-family:var(--mono);font-size:10px;color:var(--muted);padding:4px 0 0;letter-spacing:.2px}.an-ruler{display:flex;flex-wrap:wrap;gap:4px;padding:8px 0 0}.an-step{font:inherit;font-size:11px;color:var(--ink2);background:var(--panel2);border:1px solid var(--line);border-radius:4px;padding:2px 8px;cursor:pointer}.an-step.on{border-color:var(--green);color:var(--ink)}.an-hint{color:var(--muted);font-size:11px;padding:8px 0 0}.an-flash{font-size:12px;color:var(--green);padding:4px 0 0}.an-verdict-badge{font-size:12px;font-weight:700;line-height:1}.an-verdict-badge.pass{color:var(--green)}.an-verdict-badge.fail{color:var(--orange)}.an-verdict-badge.legacy{color:var(--muted)}.an-ab{display:flex;align-items:center;gap:8px;margin-left:auto}.an-ab-nav{display:inline-flex;align-items:center;justify-content:center;line-height:1;color:var(--ink2);background:var(--panel2);border:1px solid var(--line);border-radius:4px;padding:2px 6px;cursor:pointer}.an-ab-nav:disabled{opacity:.35;cursor:default}.an-ab-track{display:flex;flex-wrap:wrap;gap:3px;align-items:center}.an-ab-pip{font:inherit;font-size:11px;font-weight:700;width:20px;height:20px;display:flex;align-items:center;justify-content:center;background:var(--panel2);border:1px solid var(--line);border-radius:4px;cursor:pointer;color:var(--muted)}.an-ab-pip.pass{color:var(--green)}.an-ab-pip.fail{color:var(--orange)}.an-ab-pip.on{outline:2px solid var(--blue);outline-offset:0;border-color:var(--blue)}.an-ab-pos{font-size:10.5px;color:var(--muted);margin-left:2px}.se-pane{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--paper)}.se-gates{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 14px;border-bottom:1px solid var(--line);background:var(--panel2)}.se-gate{font-family:var(--mono);font-size:10.5px;border:1px solid var(--line);border-radius:3px;padding:1px 7px;color:var(--muted)}.se-gate.ok{color:var(--green);border-color:color-mix(in srgb,var(--green) 40%,var(--line))}.se-gate.bad{color:var(--red);border-color:color-mix(in srgb,var(--red) 40%,var(--line))}.se-export{margin-left:auto;display:inline-flex;align-items:center;color:var(--blue);text-decoration:none}.se-export:hover{color:color-mix(in srgb,var(--blue) 72%,var(--ink))}.se-blind .ef-scenario{color:var(--muted)}.se-warn{font-family:var(--mono);font-size:10px;color:var(--orange)}.ef-insession{color:var(--blue);font-size:10px;flex:none}.se-divider{display:flex;align-items:center;gap:8px;padding:5px 10px 3px;font-family:var(--mono);font-size:9px;letter-spacing:.8px;text-transform:uppercase;color:var(--muted)}.se-divider:before,.se-divider:after{content:"";flex:1;border-top:1px dashed var(--line)}.fv-filter{font-family:var(--mono);font-size:11px;line-height:1.35;color:var(--ink2);background:var(--panel2);border:1px solid var(--line);border-radius:6px;padding:3px 8px;cursor:pointer;transition:border-color .12s}.fv-filter:hover{border-color:color-mix(in srgb,var(--blue) 45%,var(--line))}.loading{display:flex;align-items:center;justify-content:center;gap:10px;height:100%;flex:1;color:var(--muted);font-family:var(--mono);font-size:13px}.loading.load-error{color:var(--red)}.load-retry{font-family:var(--mono);font-size:12px;color:var(--ink2);background:var(--panel2);border:1px solid var(--line);border-radius:4px;padding:3px 10px;cursor:pointer}.load-retry:hover{border-color:var(--muted)}.chrono-tools{display:flex;justify-content:flex-end;margin:0 0 6px}.chrono-all{font-family:var(--mono);font-size:10px;color:var(--muted);background:none;border:1px solid var(--line);border-radius:4px;padding:2px 8px;cursor:pointer}.chrono-all:hover{color:var(--ink2);border-color:var(--muted)}.pane-filter{position:sticky;top:-16px;z-index:2;margin:-8px 0 8px;padding:6px 0;background:var(--panel)}.pane-filter-input{width:100%;box-sizing:border-box;background:var(--panel2);border:1px solid var(--line);border-radius:4px;outline:none;color:var(--ink2);font-family:var(--mono);font-size:11px;padding:4px 8px}.pane-filter-input:focus{border-color:var(--muted)}.pane-filter-input::placeholder{color:var(--muted)}.pane-filter-none{color:var(--muted);font-family:var(--mono);font-size:11px;padding:6px 2px}.ui-tip{position:fixed;z-index:100;pointer-events:none;background:var(--panel2);color:var(--ink2);border:1px solid var(--line);border-radius:6px;padding:4px 9px;font-family:var(--mono);font-size:11px;line-height:1.5;max-width:320px;white-space:pre-line;overflow-wrap:break-word;box-shadow:0 4px 16px #00000038;opacity:0;transition:opacity .14s ease,transform .14s ease}.ui-tip[data-place=top]{transform:translateY(3px)}.ui-tip[data-place=bottom]{transform:translateY(-3px)}.ui-tip.show{opacity:1;transform:translateY(0)}.ui-tip-arrow{position:absolute;width:8px;height:8px;background:var(--panel2);border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.ui-tip[data-place=top] .ui-tip-arrow{bottom:-4.5px;transform:rotate(45deg)}.ui-tip[data-place=bottom] .ui-tip-arrow{top:-4.5px;transform:rotate(225deg)}