linear-grab 0.26.0 → 0.27.0

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.
@@ -276,13 +276,13 @@ of the other sections.`,gD="- FIRST, self-orient in the repo checkout (skip any
276
276
 
277
277
  ---
278
278
 
279
- `);await navigator.clipboard.writeText(t),Ae(!0),setTimeout(()=>Ae(!1),1600)}catch{l(`Clipboard was blocked — click Copy again.`)}},Me=()=>{B3.clear(),we([]),r(null)};return(()=>{var t=l3(),a=t.firstChild;a.firstChild;var o=a.nextSibling,s=o.firstChild.firstChild.nextSibling,d=o.nextSibling,p=d.firstChild.firstChild,h=p.firstChild;h.firstChild;var _=p.nextSibling;return P(a,j(q,{variant:`primary`,class:`h-7 shrink-0 px-2.5 text-[11.5px]`,get loading(){return i()===`extract`},onClick:()=>void Te(),get children(){return X4()}}),null),P(t,j(M,{get when(){return c()},get children(){return j(Hj,{get message(){return c()}})}}),o),P(t,j(M,{get when(){return e().length>0},get fallback(){return j(Vj,{title:`No genomes yet`,children:`Click Extract and pick any component on the page — a dropdown, a card, a sidebar row. Then "Capture states" while you hover/open it to record the styles that only exist during interaction.`})},get children(){return[(()=>{var t=Z4();return t.firstChild,P(t,j(We,{get each(){return e()},children:e=>{let t=()=>n()===e.id;return(()=>{var n=m3(),a=n.firstChild,o=a.nextSibling,s=o.firstChild,c=s.firstChild,l=c.nextSibling,d=l.firstChild,p=d.nextSibling;p.nextSibling;var m=l.nextSibling;return s.$$click=()=>r(t()?null:e.id),P(c,()=>e.genome.title),P(l,()=>e.genome.nodes.length,d),P(l,(()=>{var t=$e(()=>!!e.genome.states.length);return()=>t()?` · ${e.genome.states.length} states`:``})(),p),P(l,()=>Wj(e.genome.extractedAt),null),P(o,j(M,{get when(){return t()},get children(){var t=p3(),n=t.firstChild,r=n.nextSibling,a=r.nextSibling;return P(n,()=>e.genome.pageUrl),P(r,j(We,{get each(){return e.genome.nodes},children:e=>(()=>{var t=g3(),n=t.firstChild;return P(n,()=>e.label,null),P(n,j(M,{get when(){return e.count>1},get children(){var t=h3();return t.firstChild,P(t,()=>e.count,null),t}}),null),P(t,j(We,{get each(){return Object.entries(e.styles)},children:([t,n])=>(()=>{var r=v3(),i=r.firstChild;return P(r,t,i),P(r,n,null),P(r,j(M,{get when(){return e.tokens[t]},get children(){var n=_3(),r=n.firstChild.nextSibling;return r.nextSibling,P(n,()=>e.tokens[t],r),n}}),null),r})()}),null),t})()}),null),P(r,j(M,{get when(){return e.genome.states.length>0},get children(){return[u3(),j(We,{get each(){return e.genome.states},children:e=>(()=>{var t=y3(),n=t.firstChild,r=n.firstChild;return P(n,()=>e.label,r),P(n,()=>e.trigger,null),P(t,j(We,{get each(){return Object.entries(e.changed)},children:([e,t])=>(()=>{var n=b3(),r=n.firstChild,i=r.nextSibling;return i.nextSibling,P(n,e,r),P(n,()=>t.from,i),P(n,()=>t.to,null),n})()}),null),t})()})]}}),null),P(a,j(M,{get when(){return $e(()=>i()===e.id)()&&f().active},get fallback(){return j(q,{class:`size-7 px-0`,variant:`ghost`,get loading(){return i()===e.id},title:`Capture states — records hover/focus/open styles for 8s while you interact; the pill shows the timer and Stop`,"aria-label":`Capture interaction states`,onClick:()=>void Ee(e),get children(){return x3()}})},get children(){return[j(q,{class:`text-danger size-7 px-0`,variant:`ghost`,get title(){return`Stop recording — ${Math.ceil(f().msLeft/1e3)}s left · ${f().total} captured`},"aria-label":`Stop recording states`,onClick:()=>o2(),get children(){return d3()}}),(()=>{var e=f3(),t=e.firstChild,n=t.nextSibling;return n.nextSibling,P(e,()=>Math.ceil(f().msLeft/1e3),t),P(e,()=>f().total,n),e})()]}}),null),P(a,j(q,{class:`size-7 px-0`,variant:`ghost`,get title(){return u()===e.id?`Copied!`:`Copy spec — markdown for an agent or issue`},"aria-label":`Copy genome spec`,onClick:()=>void De(e),get children(){return j(M,{get when(){return u()===e.id},get fallback(){return S3()},get children(){return Q4()}})}}),null),P(a,j(q,{class:`text-danger ml-auto size-7 px-0`,variant:`ghost`,title:`Delete this genome`,"aria-label":`Delete genome`,onClick:()=>Oe(e.id),get children(){return $4()}}),null),t}}),null),D(e=>{var n={"bg-accent border-accent":t()},r=!!t();return e.e=lt(a,n,e.e),r!==e.t&&m.classList.toggle(`rotate-180`,e.t=r),e},{e:void 0,t:void 0}),n})()}}),null),t})(),(()=>{var e=e3();return P(e,j(q,{class:`size-7 px-0`,variant:`ghost`,get title(){return ke()?`Copied!`:`Copy all genomes as one markdown document`},"aria-label":`Copy all genomes`,onClick:()=>void je(),get children(){return j(M,{get when(){return ke()},get fallback(){return S3()},get children(){return Q4()}})}}),null),P(e,j(q,{class:`text-danger size-7 px-0`,variant:`ghost`,title:`Delete all saved genomes`,"aria-label":`Delete all genomes`,onClick:Me,get children(){return $4()}}),null),e})()]}}),o),P(s,j(q,{class:`size-7 px-0`,variant:`ghost`,get title(){return g()?`Live capture ON — recording transitions fired by your input. Click to pause.`:`Live capture PAUSED — click to resume recording input-triggered transitions.`},get"aria-label"(){return g()?`Pause live capture`:`Start live capture`},onClick:()=>I2(!g()),get children(){return j(M,{get when(){return g()},get fallback(){return C3()},get children(){return t3()}})}}),null),P(s,j(q,{variant:`ghost`,class:`h-7 px-2.5 text-[11.5px]`,get loading(){return v()},onClick:()=>void S(),get children(){return n3()}}),null),P(o,j(M,{get when(){return m().length>0},get fallback(){return w3()},get children(){return[(()=>{var e=r3();return P(e,j(We,{get each(){return m()},children:e=>(()=>{var t=O3(),n=t.firstChild,r=n.firstChild,i=r.nextSibling,a=i.nextSibling,o=a.firstChild,s=n.nextSibling,c=s.nextSibling;return P(r,()=>e.mode===`live`?`live`:`audit`),P(i,()=>e.component??e.element,null),P(i,j(M,{get when(){return e.count>1},get children(){return[` ×`,$e(()=>e.count)]}}),null),P(a,()=>e.durationMs,o),P(a,(()=>{var t=$e(()=>!!e.delayMs);return()=>t()?` +${e.delayMs}`:``})(),null),P(t,j(M,{get when(){return e.source},get children(){var t=T3();return P(t,()=>e.source),t}}),s),P(s,()=>e.properties.join(`, `),null),P(s,j(M,{get when(){return e.sinceInputMs!=null},get children(){return[` — fired `,$e(()=>e.sinceInputMs),`ms after input`]}}),null),P(t,j(M,{get when(){return e.jankProps?.length},get children(){var t=E3();return t.firstChild,P(t,()=>e.jankProps.join(`, `),null),t}}),c),P(t,j(M,{get when(){return e.easing},get children(){var t=D3();return t.firstChild,P(t,()=>e.easing,null),t}}),c),P(c,()=>e.suggestion),t})()})),e})(),(()=>{var e=a3();return P(e,j(q,{class:`size-7 px-0`,variant:`primary`,get title(){return w()?`Copied!`:`Copy AI prompt — report + fix rules, ready to paste into a Claude Code session`},"aria-label":`Copy AI fix prompt`,onClick:()=>void O(),get children(){return j(M,{get when(){return w()},get fallback(){return k3()},get children(){return i3()}})}}),null),P(e,j(q,{class:`size-7 px-0`,variant:`ghost`,get title(){return b()?`Copied!`:`Copy report — plain markdown findings`},"aria-label":`Copy report`,onClick:()=>void C(),get children(){return j(M,{get when(){return b()},get fallback(){return S3()},get children(){return Q4()}})}}),null),P(e,j(q,{class:`text-danger ml-auto size-7 px-0`,variant:`ghost`,title:`Clear all findings (live + audit)`,"aria-label":`Clear all findings`,onClick:M2,get children(){return $4()}}),null),e})()]}}),null),P(h,j(M,{get when(){return _e()>1},get children(){var e=o3(),t=e.firstChild.nextSibling;return t.nextSibling,P(e,_e,t),e}}),null),P(_,j(q,{class:`size-7 px-0`,variant:`ghost`,get title(){return te()?`Live scan ON — re-scans automatically ~1s after each route change. Click to pause.`:`Live scan PAUSED — click to auto-scan every page you navigate to.`},get"aria-label"(){return te()?`Pause live scan`:`Start live scan`},onClick:()=>W4(!te()),get children(){return j(M,{get when(){return te()},get fallback(){return C3()},get children(){return t3()}})}}),null),P(_,j(q,{variant:`ghost`,class:`h-7 px-2.5 text-[11.5px]`,get loading(){return ne()},title:`Scan this page — cumulative: keeps other pages' findings, replaces this page's`,onClick:he,get children(){return s3()}}),null),P(d,j(M,{get when(){return k().length>0},get fallback(){return A3()},get children(){return[(()=>{var e=c3(),t=e.firstChild,n=t.firstChild,r=t.nextSibling,i=r.firstChild;return t.$$click=()=>ce(!se()),P(t,be,n),r.$$click=()=>ue(!le()),P(r,xe,i),D(e=>{var n={"text-danger bg-danger/10 border-danger/40":se(),"text-text-faint":!se()},i=se(),a={"text-warn bg-warn/10 border-warn/40":le(),"text-text-faint":!le()},o=le();return e.e=lt(t,n,e.e),i!==e.t&&it(t,`aria-pressed`,e.t=i),e.a=lt(r,a,e.a),o!==e.o&&it(r,`aria-pressed`,e.o=o),e},{e:void 0,t:void 0,a:void 0,o:void 0}),e})(),(()=>{var e=r3();return P(e,j(We,{get each(){return ye()},children:e=>{let t=e[0],n=()=>ie()===t.ruleId;return(()=>{var r=M3(),i=r.firstChild,a=i.firstChild,o=a.nextSibling,s=o.nextSibling;s.firstChild;var c=s.nextSibling;return i.$$click=()=>oe(n()?null:t.ruleId),P(o,()=>t.ruleId),P(s,()=>e.reduce((e,t)=>e+(t.count??1),0),null),P(r,j(M,{get when(){return n()},get children(){var n=j3(),r=n.firstChild;return P(r,()=>t.description),P(n,j(We,{each:e,children:e=>(()=>{var t=F3(),n=t.firstChild,r=n.nextSibling;return t.$$click=()=>{V3(e)||l(e.page===location.pathname?`Element is gone — run Scan again.`:`This finding is on ${e.page} — navigate there to reveal it.`)},P(n,j(M,{get when(){return _e()>1},get children(){var t=N3(),n=t.firstChild;return P(t,()=>e.page,n),t}}),null),P(n,j(M,{get when(){return e.component},get children(){var t=N3(),n=t.firstChild;return P(t,()=>e.component,n),t}}),null),P(n,()=>e.selector,null),P(n,j(M,{get when(){return(e.count??1)>1},get children(){var t=P3();return t.firstChild,P(t,()=>e.count,null),t}}),null),P(t,j(M,{get when(){return e.source},get children(){var t=T3();return P(t,()=>e.source),t}}),r),P(r,()=>e.evidence),t})()}),null),n}}),null),D(e=>{var r=t.severity===`error`,i=t.severity===`warn`,o=!!n();return r!==e.e&&a.classList.toggle(`bg-danger`,e.e=r),i!==e.t&&a.classList.toggle(`bg-warn`,e.t=i),o!==e.a&&c.classList.toggle(`rotate-180`,e.a=o),e},{e:void 0,t:void 0,a:void 0}),r})()}})),e})(),(()=>{var e=a3();return P(e,j(q,{class:`size-7 px-0`,variant:`primary`,get title(){return pe()?`Copied!`:`Copy AI prompt — findings + contract fix rules, ready for a Claude Code session`},"aria-label":`Copy AI fix prompt`,onClick:()=>void Ce(),get children(){return j(M,{get when(){return pe()},get fallback(){return k3()},get children(){return i3()}})}}),null),P(e,j(q,{class:`size-7 px-0`,variant:`ghost`,get title(){return de()?`Copied!`:`Copy report — findings grouped by rule, markdown`},"aria-label":`Copy slop report`,onClick:()=>void Se(),get children(){return j(M,{get when(){return de()},get fallback(){return S3()},get children(){return Q4()}})}}),null),P(e,j(q,{class:`text-danger ml-auto size-7 px-0`,variant:`ghost`,title:`Clear scan results`,"aria-label":`Clear scan results`,onClick:ge,get children(){return $4()}}),null),e})()]}}),null),t})()}rt([`click`]);function U3(e){return Math.round(e*10)/10}function W3(e,t,n){return e.rules[t]?.severity??n}function G3(e){let t=new Map;for(let n of e)for(let e of n.entries){let n=t.get(e.name);n||(n={name:e.name,updates:[],selfTime:0,el:e.el??void 0},t.set(e.name,n)),n.selfTime+=e.selfTime,e.el&&!n.el&&(n.el=e.el),e.phase===`update`&&n.updates.push(e.changes)}return t}function K3(e,t){let n=[],r=G3(e),i=t.budgets;return t6(n,()=>{let e=[];for(let n of r.values()){if(n.updates.length<5||!n.updates.every(e=>e.length===0))continue;let r=n.updates.length;e.push({ruleId:`R9`,shape:`B`,severity:W3(t,`R9`,`error`),suspected:!0,description:`suspected R9 — ${n.name} re-rendered ${r}× with zero prop changes (dead memo or subscription-in-body)`,component:n.name,source:null,renders:r,selfTime:U3(n.selfTime),changes:[],evidence:`${r} renders · ${U3(n.selfTime)}ms self · all props identity-equal`,el:n.el})}return e}),t6(n,()=>{let e=[];for(let n of r.values()){if(n.updates.length<5||!n.updates.every(e=>e.length>0&&e.every(e=>/\((?:fn|ref)\)$/.test(e))))continue;let r=Array.from(new Set(n.updates.flat())),i=n.updates.length,a=r.join(`, `);e.push({ruleId:`R5`,shape:`B`,severity:W3(t,`R5`,`error`),suspected:!0,description:`suspected R5 — ${i} renders of ${n.name} with fresh ${a} identity per parent render (memo defeated)`,component:n.name,source:null,renders:i,selfTime:U3(n.selfTime),changes:r,evidence:`${i} renders · ${U3(n.selfTime)}ms self · churning ${a}`,el:n.el})}return e}),t6(n,()=>{let n=[],r=/Tooltip|Menu|Popover|Context|Dialog|Dropdown/i;for(let i of e)for(let e of Object.keys(i.mounts)){let a=i.mounts[e];if(a<(r.test(e)?10:15))continue;let o=i.entries.find(t=>t.name===e&&t.el);n.push({ruleId:`R4`,shape:`A`,severity:W3(t,`R4`,`error`),suspected:!0,description:`suspected R4 — ${a} ${e} instances mounted in one commit (per-row overlays should mount on intent)`,component:e,source:null,renders:a,selfTime:0,changes:[],evidence:`${e} ×${a} mounted in one commit`,el:o?.el??void 0})}return n}),t6(n,()=>{let t=[];for(let n of e){if(n.duration<=i.commitMs)continue;let e=[...n.entries].sort((e,t)=>t.selfTime-e.selfTime).slice(0,3).map(e=>`${e.name} ${U3(e.selfTime)}ms`).join(`, `),r=U3(n.duration),a=n.duration>16?` · ~${Math.round(1e3/n.duration)} FPS`:``;t.push({ruleId:null,shape:null,severity:`error`,suspected:!1,description:`commit exceeded budget: ${r}ms of React work (> ${i.commitMs}ms) — top: ${e}`,component:null,source:null,renders:n.entries.length,selfTime:r,changes:[],evidence:`${r}ms commit · ${n.entries.length} components${a}`})}return t}),t6(n,()=>{let t=[],n=new Map;for(let t of e){let e=new Map,r=new Map;for(let n of t.entries)e.set(n.name,(e.get(n.name)??0)+n.selfTime),n.el&&!r.has(n.name)&&r.set(n.name,n.el);for(let[t,a]of e){if(a<=i.selfMs)continue;let e=n.get(t)??{hits:0,worst:0,total:0,el:r.get(t)};e.hits+=1,e.worst=Math.max(e.worst,a),e.total+=a,e.el||=r.get(t),n.set(t,e)}}for(let[e,r]of n)r.hits<3||t.push({ruleId:null,shape:null,severity:`warn`,suspected:!1,description:`${e} is a hot component: ${r.hits} commits over the ${i.selfMs}ms self budget`,component:e,source:null,renders:r.hits,selfTime:U3(r.total),changes:[],evidence:`${r.hits} commits over ${i.selfMs}ms self (worst ${U3(r.worst)}ms)`,el:r.el});return t}),t6(n,()=>{let n=[],r=$3(e.filter(e=>e.nearInput).map(e=>e.at).sort((e,t)=>e-t),1e3);return r>=5&&n.push({ruleId:`R10`,shape:`B`,severity:W3(t,`R10`,`error`),suspected:!0,description:`suspected R10 — ${r} React commits during scroll/pointer movement (frame-rate state updates)`,component:null,source:null,renders:r,selfTime:0,changes:[],evidence:`${r} commits within a 1s scroll/pointer window`}),n}),t6(n,()=>{let n=[],{count:r,span:i}=e6(e.filter(e=>!e.nearInput).map(e=>e.at).sort((e,t)=>e-t),300);return r>=8&&n.push({ruleId:`R24`,shape:`B`,severity:W3(t,`R24`,`warn`),suspected:!0,description:`suspected R24 — ${r} commits in ${Math.round(i)}ms burst (multi-row writes / un-coalesced pokes?)`,component:null,source:null,renders:r,selfTime:0,changes:[],evidence:`${r} commits in a ${Math.round(i)}ms burst (no input)`}),n}),t6(n,()=>{let e=[];if(!Z3())return e;for(let n of r.values()){if(n.updates.length<3)continue;let r=n.el?.deref();if(!r)continue;let i=!1;try{let e=r.getBoundingClientRect();i=!r.isConnected||e.width===0&&e.height===0}catch{continue}if(!i)continue;let a=n.updates.length;e.push({ruleId:`R3`,shape:`C`,severity:W3(t,`R3`,`error`),suspected:!0,description:`suspected R3 — ${n.name} re-rendered ${a}× while its DOM is hidden/detached (closed host without everOpened gate?) [R3/R7/R23 family]`,component:n.name,source:null,renders:a,selfTime:U3(n.selfTime),changes:[],evidence:`${a} renders while hidden/detached · ${U3(n.selfTime)}ms self`,el:n.el})}return e}),n6(n)}var q3=`#linear-grab-root, #claude-agent-glow-border, [id^="react-scan"]`;function J3(e=typeof document<`u`?document:{}){let t=[];return t6(t,()=>{let t=[],n=Array.from(e.querySelectorAll(`[role="slider"], [role="progressbar"], [role="switch"]`)),r=Q3(e);for(let e of n){if(e.closest(q3))continue;if(r)try{let t=e.getBoundingClientRect();if(t.width<2||t.height<2)continue}catch{}if(!Y3(e))continue;let n=e.getAttribute(`role`)??`widget`;t.push({ruleId:`R8`,shape:`D`,severity:`warn`,suspected:!0,description:`suspected R8 — interactive ${n} widget used as a static picture (mount a CSS mock instead)`,component:null,source:null,renders:0,selfTime:0,changes:[],evidence:X3(e),el:typeof WeakRef<`u`?new WeakRef(e):void 0})}return t}),n6(t)}function Y3(e){if(e.hasAttribute(`disabled`)||e.getAttribute(`aria-disabled`)===`true`)return!0;let t=e;for(let e=0;t&&e<=3;e++){try{if(getComputedStyle(t).pointerEvents===`none`)return!0}catch{}t=t.parentElement}return!1}function X3(e){let t=typeof e.className==`string`&&e.className?`.`+e.className.split(/\s+/).filter(Boolean).slice(0,2).join(`.`):``;return`${e.tagName.toLowerCase()}${t}`}function Z3(){return typeof document>`u`?!1:(document.documentElement?.getBoundingClientRect().width??0)>0}function Q3(e){return((e.documentElement??(typeof document<`u`?document.documentElement:null))?.getBoundingClientRect().width??0)>0}function $3(e,t){let n=0,r=0;for(let i=0;i<e.length;i++){for(;e[i]-e[r]>t;)r++;n=Math.max(n,i-r+1)}return n}function e6(e,t){let n=0,r=0,i=0;for(let a=0;a<e.length;a++){for(;e[a]-e[i]>t;)i++;let o=a-i+1;o>n&&(n=o,r=e[a]-e[i])}return{count:n,span:r}}function t6(e,t){try{e.push(...t())}catch{}}function n6(e){let t=new Map;for(let n of e){let e=`${n.ruleId}|${n.component}|${n.changes.join()}|${n.description}`,r=t.get(e);r?r.count=(r.count??1)+1:t.set(e,n)}return[...t.values()]}function r6(e){let t=new Map;for(let n of e){let e=n.ruleId??`budget`,r=t.get(e);r?r.push(n):t.set(e,[n])}let n=Array.from(t.entries()).sort((e,t)=>{let n=e[1][0].severity===`error`?0:1,r=t[1][0].severity===`error`?0:1;return n===r?t[1].length===e[1].length?e[0].localeCompare(t[0]):t[1].length-e[1].length:n-r}),r=e.reduce((e,t)=>e+(t.count??1),0),i=e.filter(e=>e.severity===`error`).reduce((e,t)=>e+(t.count??1),0),a=[`# Render scan — ${i} error${i===1?``:`s`}, ${r-i} warn (${r} total)`,``,`Diagnoses are SUSPECTED (heuristic). The numbers (renders, self ms) are measured.`,``];for(let[e,t]of n){let n=t[0],r=t.reduce((e,t)=>e+(t.count??1),0);a.push(`## ${e} — ${n.severity} ×${r}`);for(let e of t){let t=e.component||e.source?` — ${[e.component,e.source].filter(Boolean).join(` @ `)}`:``,n=(e.count??1)>1?` ×${e.count}`:``;a.push(`- ${e.description}${n}${t}`),a.push(` ${e.evidence}`)}a.push(``)}return a.join(`
280
- `)}function i6(e,t){let n=Array.from(new Set(e.map(e=>e.ruleId).filter(e=>!!e))).sort(),r=[];for(let e of n){let n=t.rules[e];n&&n.fixText?r.push(`- ${e} (${n.slug}): ${n.fixText}`):r.push(`- ${e}: see React-rerender-primitives.md ${e}`)}return[`Below is a RENDER-SCAN report from my running app — each finding is a measured`,`React re-render pattern graded against the re-render contract`,"(`React-rerender-primitives.md`). Rules are R-numbered.",``,`READ THIS FIRST: the DIAGNOSES are SUSPECTED — they are heuristic guesses at the`,`cause. The NUMBERS (render counts, self ms, FPS) are EXACT measurements. Trust the`,`numbers; verify each diagnosis against the code before you "fix" it.`,``,`How to fix:`,`1. Fix at the source of the identity churn / wasted render, not the symptom —`,` stabilize props (useCallback/useMemo, hoist constants), gate work behind an`,` everOpened/visible check, mount per-row overlays on intent.`,`2. Each distinct rule and its canonical fix:`,...r.map(e=>` ${e}`),`3. PROOF REQUIRED: after the change I will re-record and re-scan — the flagged`,` components must show the render counts drop. State what you changed per`,` component; do not claim done blind.`,``,`---`,``,r6(e)].join(`
281
- `)}var a6=`bippy-0.5.43`,o6=Object.defineProperty,s6=Object.prototype.hasOwnProperty,c6=()=>{},l6=e=>{try{Function.prototype.toString.call(e).indexOf(`^_^`)>-1&&setTimeout(()=>{throw Error(`React is running in production mode, but dead code elimination has not been applied. Read how to correctly configure React for production: https://reactjs.org/link/perf-use-production-build`)})}catch{}},u6=(e=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__)=>!!(e&&`getFiberRoots`in e),d6=!1,f6,p6=(e=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__)=>d6?!0:(e&&typeof e.inject==`function`&&(f6=e.inject.toString()),!!f6?.includes(`(injected)`)),m6=new Set,h6=new Set,g6=e=>{let t=new Map,n=0,r={_instrumentationIsActive:!1,_instrumentationSource:a6,checkDCE:l6,hasUnsupportedRendererAttached:!1,inject(e){let i=++n;return t.set(i,e),h6.add(e),r._instrumentationIsActive||(r._instrumentationIsActive=!0,m6.forEach(e=>e())),i},on:c6,onCommitFiberRoot:c6,onCommitFiberUnmount:c6,onPostCommitFiberRoot:c6,renderers:t,supportsFiber:!0,supportsFlight:!0};try{o6(globalThis,`__REACT_DEVTOOLS_GLOBAL_HOOK__`,{configurable:!0,enumerable:!0,get(){return r},set(t){if(t&&typeof t==`object`){let n=r.renderers;r=t,n.size>0&&(n.forEach((e,n)=>{h6.add(e),t.renderers.set(n,e)}),_6(e))}}});let t=window.hasOwnProperty,n=!1;o6(window,`hasOwnProperty`,{configurable:!0,value:function(...e){try{if(!n&&e[0]===`__REACT_DEVTOOLS_GLOBAL_HOOK__`)return globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__=void 0,n=!0,-0}catch{}return t.apply(this,e)},writable:!0})}catch{_6(e)}return r},_6=e=>{e&&m6.add(e);try{let t=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!t)return;if(!t._instrumentationSource){t.checkDCE=l6,t.supportsFiber=!0,t.supportsFlight=!0,t.hasUnsupportedRendererAttached=!1,t._instrumentationSource=a6,t._instrumentationIsActive=!1;let e=u6(t);if(e||(t.on=c6),t.renderers.size){t._instrumentationIsActive=!0,m6.forEach(e=>e());return}let n=t.inject,r=p6(t);r&&!e&&(d6=!0,t.inject({scheduleRefresh(){}})&&(t._instrumentationIsActive=!0)),t.inject=e=>{let i=n(e);return h6.add(e),r&&t.renderers.set(i,e),t._instrumentationIsActive=!0,m6.forEach(e=>e()),i}}(t.renderers.size||t._instrumentationIsActive||p6())&&e?.()}catch{}},v6=()=>s6.call(globalThis,`__REACT_DEVTOOLS_GLOBAL_HOOK__`),y6=e=>v6()?(_6(e),globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__):g6(e),b6=()=>!!(typeof window<`u`&&(window.document?.createElement||window.navigator?.product===`ReactNative`));(()=>{try{b6()&&y6()}catch{}})();var x6=60111,S6=`Symbol(react.concurrent_mode)`,C6=`Symbol(react.async_mode)`,w6=e=>{switch(e.tag){case 5:case 26:case 27:return!0;default:return typeof e.type==`string`}},T6=e=>{switch(e.tag){case 1:case 11:case 0:case 14:case 15:return!0;default:return!1}},E6=e=>{let t=e.memoizedProps,n=e.alternate?.memoizedProps||{},r=e.flags??e.effectTag??0;switch(e.tag){case 1:case 9:case 11:case 0:case 14:case 15:return(r&1)==1;default:return!e.alternate||n!==t||e.alternate.memoizedState!==e.memoizedState||e.alternate.ref!==e.ref}},D6=e=>{switch(e.tag){case 18:return!0;case 7:case 6:case 23:case 22:return!0;case 3:return!1;default:{let t=typeof e.type==`object`&&e.type!==null?e.type.$$typeof:e.type;switch(typeof t==`symbol`?t.toString():t){case x6:case S6:case C6:return!0;default:return!1}}}},O6=(e,t=!1)=>{let n=k6(e,w6,t);return n||=k6(e,w6,!t),n};function k6(e,t,n=!1){if(!e)return null;let r=t(e);if(r instanceof Promise)return(async()=>{if(await r===!0)return e;let i=n?e.return:e.child;for(;i;){let e=await j6(i,t,n);if(e)return e;i=n?null:i.sibling}return null})();if(r===!0)return e;let i=n?e.return:e.child;for(;i;){let e=A6(i,t,n);if(e)return e;i=n?null:i.sibling}return null}var A6=(e,t,n=!1)=>{if(!e)return null;if(t(e)===!0)return e;let r=n?e.return:e.child;for(;r;){let e=A6(r,t,n);if(e)return e;r=n?null:r.sibling}return null},j6=async(e,t,n=!1)=>{if(!e)return null;if(await t(e)===!0)return e;let r=n?e.return:e.child;for(;r;){let e=await j6(r,t,n);if(e)return e;r=n?null:r.sibling}return null},M6=e=>{let t=e?.actualDuration??0,n=t,r=e?.child??null;for(;t>0&&r!=null;)n-=r.actualDuration??0,r=r.sibling;return{selfTime:n,totalTime:t}},N6=e=>{let t=e;return typeof t==`function`?t:typeof t==`object`&&t?N6(t.type||t.render):null},P6=e=>{let t=e;if(typeof t==`string`)return t;if(typeof t!=`function`&&!(typeof t==`object`&&t))return null;let n=t.displayName||t.name||null;if(n)return n;let r=N6(t);return r&&(r.displayName||r.name)||null},F6=0,I6=new WeakMap,L6=(e,t=F6++)=>{I6.set(e,t)},R6=e=>{let t=I6.get(e);return!t&&e.alternate&&(t=I6.get(e.alternate)),t||(t=F6++,L6(e,t)),t},z6=(e,t,n)=>{let r=t;for(;r!=null;){if(I6.has(r)||R6(r),!D6(r)&&E6(r)&&e(r,`mount`),r.tag===13)if(r.memoizedState!==null){let t=r.child,n=t?t.sibling:null;if(n){let t=n.child;t!==null&&z6(e,t,!1)}}else{let t=null;r.child!==null&&(t=r.child.child),t!==null&&z6(e,t,!1)}else r.child!=null&&z6(e,r.child,!0);r=n?r.sibling:null}},B6=(e,t,n,r)=>{if(I6.has(t)||R6(t),!n)return;I6.has(n)||R6(n);let i=t.tag===13,a=!D6(t);a&&E6(t)&&e(t,`update`);let o=i&&n.memoizedState!==null,s=i&&t.memoizedState!==null;if(o&&s){let r=t.child?.sibling??null,i=n.child?.sibling??null;r!==null&&i!==null&&B6(e,r,i,t)}else if(o&&!s){let n=t.child;n!==null&&z6(e,n,!0)}else if(!o&&s){H6(e,n);let r=t.child?.sibling??null;r!==null&&z6(e,r,!0)}else if(t.child!==n.child){let n=t.child;for(;n;){if(n.alternate){let i=n.alternate;B6(e,n,i,a?t:r)}else z6(e,n,!1);n=n.sibling}}},V6=(e,t)=>{(t.tag===3||!D6(t))&&e(t,`unmount`)},H6=(e,t)=>{let n=t.tag===13&&t.memoizedState!==null,r=t.child;for(n&&(r=(t.child?.sibling??null)?.child??null);r!==null;)r.return!==null&&(V6(e,r),H6(e,r)),r=r.sibling},U6=0,W6=new WeakMap,G6=(e,t)=>{let n=`current`in e?e.current:e,r=W6.get(e);r||(r={id:U6++,prevFiber:null},W6.set(e,r));let{prevFiber:i}=r;if(!n)V6(t,n);else if(i!==null){let e=i&&i.memoizedState!=null&&i.memoizedState.element!=null&&i.memoizedState.isDehydrated!==!0,r=n.memoizedState!=null&&n.memoizedState.element!=null&&n.memoizedState.isDehydrated!==!0;!e&&r?z6(t,n,!1):e&&r?B6(t,n,n.alternate,null):e&&!r&&V6(t,n)}else z6(t,n,!0);r.prevFiber=n},K6=e=>{let t=y6(e.onActive);t._instrumentationSource=e.name??a6;let n=t.onCommitFiberRoot;if(e.onCommitFiberRoot){let r=(t,i,a)=>{n!==r&&(n?.(t,i,a),e.onCommitFiberRoot?.(t,i,a))};t.onCommitFiberRoot=r}let r=t.onCommitFiberUnmount;if(e.onCommitFiberUnmount){let n=(i,a)=>{t.onCommitFiberUnmount===n&&(r?.(i,a),e.onCommitFiberUnmount?.(i,a))};t.onCommitFiberUnmount=n}let i=t.onPostCommitFiberRoot;if(e.onPostCommitFiberRoot){let n=(r,a)=>{t.onPostCommitFiberRoot===n&&(i?.(r,a),e.onPostCommitFiberRoot?.(r,a))};t.onPostCommitFiberRoot=n}return t},q6=!1,J6=!1,Y6=[],X6=-1/0,Z6=200,Q6=4e3,$6=100;function e8(){X6=n8()}var t8=[`scroll`,`wheel`,`pointermove`];function n8(){return typeof performance<`u`?performance.now():Date.now()}function r8(e,t){let n=e&&typeof e==`object`?e:{},r=t&&typeof t==`object`?t:{},i=new Set([...Object.keys(n),...Object.keys(r)]),a=[];for(let e of i){if(e===`children`)continue;let t=n[e],i=r[e];Object.is(t,i)||(typeof t==`function`&&typeof i==`function`?a.push(`prop:${e}(fn)`):t&&i&&typeof t==`object`&&typeof i==`object`&&i8(t,i)?a.push(`prop:${e}(ref)`):a.push(`prop:${e}`))}return a}function i8(e,t){let n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let r of n)if(!Object.is(e[r],t[r]))return!1;return!0}function a8(e){let t=[],n={};G6(e,(e,r)=>{if(r===`unmount`||!T6(e))return;let i=P6(e.type)??`Anonymous`;r===`mount`&&(n[i]=(n[i]??0)+1);let a=0;try{a=M6(e).selfTime||0}catch{}let o=[];if(r===`update`&&e.alternate)try{o=r8(e.alternate.memoizedProps,e.memoizedProps)}catch{o=[`prop:(unknown)`]}let s=null;try{let t=O6(e)?.stateNode;t&&typeof WeakRef<`u`&&t instanceof Element&&(s=new WeakRef(t))}catch{}t.push({name:i,selfTime:a,phase:r===`mount`?`mount`:`update`,changes:o,el:s})}),t.sort((e,t)=>t.selfTime-e.selfTime);let r=t.slice(0,Z6),i=Math.max(0,t.length-Z6),a=0;for(let e of t)a+=e.selfTime;let o=n8(),s=o-X6<=$6;Y6.push({at:o,duration:a,entries:r,droppedEntries:i,mounts:n,nearInput:s})}function o8(){if(!q6&&!(typeof window>`u`)){q6=!0;try{K6({onCommitFiberRoot:(e,t)=>{if(J6&&!(Y6.length>=Q6))try{a8(t)}catch{}}})}catch{}}}function s8(){if(!(typeof window>`u`)&&!J6){Y6=[],X6=-1/0,o8();try{for(let e of t8)window.addEventListener(e,e8,{capture:!0,passive:!0})}catch{}J6=!0}}function c8(){J6=!1;try{for(let e of t8)window.removeEventListener(e,e8,{capture:!0})}catch{}let e=Y6;return Y6=[],X6=-1/0,e}function l8(){let e=Y6;return Y6=[],e}var u8={budgets:{selfMs:2,commitMs:8},rules:{}},d8=/^###\s+(R\d+)\s*[·.\-–—:]?\s*`([^`]+)`.*?\((error|warn)\)\s*$/;function f8(e){return d8.test(e.trim())}function p8(e,t){let n=e.split(`
282
- `),r=RegExp(`^\\s*\\*\\*${t.source}[^*]*:\\*\\*\\s*(.*)$`,`i`),i=/^\s*\*\*[^*]+:\*\*/,a=0;for(;a<n.length&&!r.test(n[a]);a++);if(a>=n.length)return``;let o=n[a].replace(r,`$1`),s=[];for(o.trim()&&s.push(o.trim()),a+=1;a<n.length;a++){let e=n[a];if(i.test(e)||/^###\s/.test(e)||/^##\s/.test(e)||/^---\s*$/.test(e))break;if(e.trim())s.push(e.trim());else if(s.length){let e=a+1;for(;e<n.length&&!n[e].trim();)e++;if(e>=n.length||i.test(n[e])||/^###\s|^##\s|^---\s*$/.test(n[e]))break}}return m8(s.join(` `)).trim()}function m8(e){return e.replace(/\*\*([^*]+)\*\*/g,`$1`).replace(/__([^_]+)__/g,`$1`).replace(/(^|[\s(])[*_]([^*_\s][^*_]*?)[*_]([\s.,;:)]|$)/g,`$1$2$3`).replace(/\s{2,}/g,` `)}function h8(e){let t=e.match(/≤(\d+(?:\.\d+)?)ms self/),n=e.match(/commit >(\d+(?:\.\d+)?)ms/)??e.match(/>(\d+(?:\.\d+)?)ms of React work/);return{selfMs:t?parseFloat(t[1]):u8.budgets.selfMs,commitMs:n?parseFloat(n[1]):u8.budgets.commitMs}}function g8(e){let t=h8(e),n={},r=e.split(`
283
- `),i=0;for(;i<r.length;){let e=r[i];if(!f8(e)){i++;continue}let t=e.trim(),a=[],o=i+1;for(;o<r.length;o++){let e=r[o];if(f8(e)||/^##\s/.test(e.trim())||/^---\s*$/.test(e.trim()))break;a.push(e)}try{let e=t.match(d8);if(e){let[,t,r,i]=e,o=a.join(`
284
- `);n[t]={id:t,slug:r,severity:i===`warn`?`warn`:`error`,ruleText:p8(o,/Rule/),fixText:p8(o,/Fix/),detectText:p8(o,/Detect/)}}}catch{}i=o}return{budgets:t,rules:n}}Br();var _8=[],v8=new Set;function y8(e){return v8.add(e),e(_8),()=>void v8.delete(e)}function b8(){_8=[];for(let e of v8)e(_8)}function x8(e,t){_8=[...e,..._8.filter(e=>e.page!==t)];for(let e of v8)e(_8);return K8(e).then(()=>{_8=[..._8];for(let e of v8)e(_8);q8(e)}),e}var S8=new Set,C8=!1,w8=null;function T8(e){return S8.add(e),e(C8,w8),()=>void S8.delete(e)}function E8(){if(!(O8||C8)){s8(),C8=!0,w8=Date.now();for(let e of S8)e(!0,w8)}}async function D8(){if(!C8)return[];let e=c8();C8=!1,w8=null;for(let e of S8)e(!1,null);let t=await U8(),n=location.pathname;return x8(K3(e,t).map(e=>({...e,page:n})),n)}var O8=!1;try{O8=localStorage.getItem(`linear-grab:render-live`)===`1`}catch{}var k8=new Set;function A8(e){return k8.add(e),e(O8),()=>void k8.delete(e)}var j8=3e3,M8=4e3,N8=null,P8=[],F8=``;function I8(e){if(e!==O8&&!(e&&C8)){O8=e;try{localStorage.setItem(`linear-grab:render-live`,e?`1`:`0`)}catch{}for(let t of k8)t(e);e?(s8(),P8=[],F8=location.pathname,N8=setInterval(()=>void L8(!1),j8)):(N8&&clearInterval(N8),N8=null,L8(!0).finally(()=>{c8(),P8=[]}))}}async function L8(e){try{let t=location.pathname;if(t!==F8){let e=_8.filter(e=>e.page===F8);K8(e).then(()=>{_8=[..._8];for(let e of v8)e(_8);q8(e)}),P8=[],F8=t}P8.push(...l8()),P8.length>M8&&P8.splice(0,P8.length-M8);let n=await U8(),r=K3(P8,n).map(e=>({...e,page:t}));_8=[...r,..._8.filter(e=>e.page!==t)];for(let e of v8)e(_8);if(e){await K8(r),_8=[..._8];for(let e of v8)e(_8);q8(r)}}catch{}}function R8(){typeof window>`u`||!O8||N8||(s8(),P8=[],F8=location.pathname,N8=setInterval(()=>void L8(!1),j8))}function z8(){let e=location.pathname;return x8(J3(document).map(t=>({...t,page:e})),e)}var B8=5*6e4,V8=null,H8=0;async function U8(){if(V8&&Date.now()-H8<B8)return V8;let e=u8;try{let t=await YO(),n=await(await fetch(`${t}/scan/rulebook`)).json();n.ok&&n.text&&(e=g8(n.text))}catch{}return e=await G8(e),V8=e,H8=Date.now(),e}function W8(){return V8}async function G8(e){try{let t=(await Tr()).renderBudgets;if(t&&(t.selfMs!=null||t.commitMs!=null))return{...e,budgets:{selfMs:t.selfMs??e.budgets.selfMs,commitMs:t.commitMs??e.budgets.commitMs}}}catch{}return e}async function K8(e){let t=null;try{t=(await Promise.resolve().then(()=>(RZ(),AZ))).getGlobalApi()??null}catch{return}if(!t)return;let n=new Map;for(let t of e){let e=t.el?.deref();if(!e)continue;let r=n.get(e);r?r.push(t):n.set(e,[t])}let r=300;for(let[e,i]of n){if(r--<=0)break;let n=null,a=null;try{n=t.getDisplayName?.(e)??null}catch{}try{let n=await t.getSource?.(e);n?.filePath&&(a=`${n.filePath}${n.lineNumber==null?``:`:${n.lineNumber}`}`)}catch{}if(!(!n&&!a))for(let e of i)!e.component&&n&&(e.component=n),a&&(e.source=a)}}function q8(e){if(e.length===0)return;let t=Date.now(),n=e.slice(0,200).map(({el:e,...n})=>({kind:`render-scan`,at:t,...n}));YO().then(e=>fetch(`${e}/scan/events`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({events:n}),keepalive:!0})).catch(()=>{})}var J8=N(`<span class="text-text-faint font-normal tabular-nums"> · <!> pages`),Y8=N(`<span class="bg-danger size-1.5 shrink-0 animate-pulse rounded-full"aria-hidden>`),X8=N(`<span class="text-danger inline-block min-w-[4ch] text-right text-[10.5px] font-medium tabular-nums">`),Z8=N(`<svg width=13 height=13 viewBox="0 0 16 16"aria-hidden><rect x=3.5 y=3.5 width=9 height=9 rx=1.5 fill=currentColor>`),Q8=N(`<svg width=13 height=13 viewBox="0 0 16 16"aria-hidden><rect x=4 y=3.5 width=3 height=9 rx=1 fill=currentColor></rect><rect x=9 y=3.5 width=3 height=9 rx=1 fill=currentColor>`),$8=N(`<span class="bg-success absolute -top-0.5 -right-0.5 size-1.5 animate-pulse rounded-full"aria-hidden>`),e5=N(`<svg width=13 height=13 viewBox="0 0 16 16"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round aria-hidden><path d="M5.5 3 6.5 1.5h3L10.5 3h2A1.5 1.5 0 0 1 14 4.5v7A1.5 1.5 0 0 1 12.5 13h-9A1.5 1.5 0 0 1 2 11.5v-7A1.5 1.5 0 0 1 3.5 3h2Z"></path><circle cx=8 cy=7.75 r=2.25>`),t5=N(`<span class="text-success text-[12px] leading-none">✓`),n5=N(`<svg width=12 height=12 viewBox="0 0 16 16"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round aria-hidden><path d="M4 4l8 8M12 4l-8 8">`),r5=N(`<p class="text-text-faint px-1 text-[10.5px] leading-snug">Recording commits… interact with the page.`),i5=N(`<p class="text-text-faint px-1 text-[10.5px] leading-snug">Live render scan — findings update as you interact and navigate.`),a5=N(`<div class="flex items-center gap-1 px-1"><button class="border-border cursor-pointer rounded-full border px-2 py-0.5 text-[10px] font-medium tabular-nums"> errors</button><button class="border-border cursor-pointer rounded-full border px-2 py-0.5 text-[10px] font-medium tabular-nums"> warns`),o5=N(`<div class="flex max-h-[28rem] flex-col gap-1.5 overflow-y-auto pr-3 pl-2">`),s5=N(`<div class="flex h-full flex-col gap-3 overflow-y-auto pt-3 pb-4 pr-3 pl-2"><div class="flex flex-col gap-1 px-1"><div class="flex items-center justify-between gap-2"><p class="text-text min-w-0 truncate text-[12.5px] font-semibold">Renders</p><div class="flex shrink-0 items-center gap-1"></div></div><p class="text-text-faint text-[10.5px] leading-snug">Commits graded against React-rerender-primitives.md — record then interact, go live, or snapshot the DOM. Accumulates per page.`),c5=N(`<svg width=13 height=13 viewBox="0 0 16 16"fill=none stroke=currentColor stroke-width=1.5 aria-hidden><circle cx=8 cy=8 r=6></circle><circle cx=8 cy=8 r=2.25 fill=currentColor stroke=none>`),l5=N(`<svg width=13 height=13 viewBox="0 0 16 16"aria-hidden><path d="M5 3.3v9.4a.5.5 0 0 0 .77.42l7.1-4.7a.5.5 0 0 0 0-.84l-7.1-4.7A.5.5 0 0 0 5 3.3Z"fill=currentColor>`),u5=N(`<svg width=13 height=13 viewBox="0 0 16 16"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round aria-hidden><path d="M8 1.5 9.6 6l4.4 1.6L9.6 9.2 8 13.7 6.4 9.2 2 7.6 6.4 6Z"></path><path d="M13 11.5l.6 1.7 1.7.6-1.7.6-.6 1.7-.6-1.7-1.7-.6 1.7-.6Z">`),d5=N(`<svg width=13 height=13 viewBox="0 0 16 16"fill=none stroke=currentColor stroke-width=1.5 stroke-linejoin=round aria-hidden><rect x=5.5 y=5.5 width=9 height=9 rx=1.5></rect><path d="M10.5 5.5v-2a2 2 0 0 0-2-2h-5a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h2">`),f5=N(`<div class="border-border flex flex-col gap-1 border-t px-2 py-1.5">`),p5=N(`<div class="bg-surface border-border flex flex-col rounded-lg border"><button class="flex w-full cursor-pointer items-center gap-2 px-2 py-1.5 text-left"><span class="size-1.5 shrink-0 rounded-full"aria-hidden></span><span class="text-accent min-w-0 truncate font-mono text-[11.5px]"></span><span class="text-text-faint ml-auto shrink-0 text-[10.5px] tabular-nums">×</span><svg width=10 height=10 viewBox="0 0 16 16"fill=none stroke=currentColor stroke-width=1.5 class="text-text-faint shrink-0 transition-transform"aria-hidden><path d="m4 6 4 4 4-4">`),m5=N(`<span class="text-accent font-mono"> `),h5=N(`<span class="text-text-faint tabular-nums"> ×`),g5=N(`<span class="flex flex-wrap gap-1">`),_5=N(`<span class="text-text-dim font-mono"> · `),v5=N(`<div class="flex flex-col gap-0.5 rounded px-1 py-0.5 text-left"><span class="text-text-dim text-[10.5px] leading-snug"></span><span class="text-text-faint text-[10px] leading-snug tabular-nums">`),y5=N(`<span class="bg-surface-2 text-text-dim rounded px-1 font-mono text-[9.5px] leading-relaxed">`);function b5(e){let t=e.el?.deref();if(!(t instanceof HTMLElement)||!t.isConnected)return!1;t.scrollIntoView({block:`center`,behavior:`smooth`});let n=t.style.outline,r=t.style.outlineOffset;return t.style.outline=`2px solid #e5a13a`,t.style.outlineOffset=`2px`,setTimeout(()=>{t.style.outline=n,t.style.outlineOffset=r},1400),!0}function x5(e){let t=Math.max(0,Math.floor(e/1e3));return`${Math.floor(t/60)}:${String(t%60).padStart(2,`0`)}`}function S5(e){return e.replace(/^prop:/,``)}function C5(){let[e,t]=T([]);ae(y8(t));let[n,r]=T(!1),[i,a]=T(null),[o,s]=T(Date.now()),c=null,l=()=>{c&&clearInterval(c),c=null};ae(l),ae(T8((e,t)=>{r(e),a(t),e?(s(Date.now()),c||=setInterval(()=>s(Date.now()),500)):l()}));let[u,d]=T(!1);ae(A8(d));let[f,p]=T(W8());U8().then(p);let[m,h]=T(null),[g,_]=T(null),[v,y]=T(!0),[b,x]=T(!0),[S,C]=T(!1),[w,E]=T(!1),[O,k]=T(!1),ee=async()=>{if(h(null),n())try{let e=await D8();p(W8()),_(null),e.length===0&&h(`No re-render anti-patterns caught — interact more (scroll, open menus, type) between record and stop.`)}catch(e){h(e instanceof Error?e.message:String(e))}else E8()},te=()=>{h(null),C(!0);try{z8(),_(null)}catch(e){h(e instanceof Error?e.message:String(e))}finally{C(!1)}},A=()=>{b8(),_(null)},ne=()=>new Set(e().map(e=>e.page)).size,re=()=>e().filter(e=>e.severity===`error`?v():b()),ie=()=>e().filter(e=>e.severity===`error`).reduce((e,t)=>e+(t.count??1),0),oe=()=>e().reduce((e,t)=>e+(t.count??1),0)-ie(),se=()=>{let e=new Map;for(let t of re()){let n=t.ruleId??`budget`,r=e.get(n);r?r.push(t):e.set(n,[t])}return[...e.entries()].sort((e,t)=>Number(t[1][0].severity===`error`)-Number(e[1][0].severity===`error`)||t[1].length-e[1].length)},ce=e=>{let t=e===`budget`?null:f()?.rules[e]?.slug??null;return t?`${e} · ${t}`:e},le=async()=>{try{await navigator.clipboard.writeText(r6(re())),E(!0),setTimeout(()=>E(!1),1600)}catch{h(`Clipboard was blocked — click Copy again.`)}},ue=async()=>{try{await navigator.clipboard.writeText(i6(re(),await U8())),k(!0),setTimeout(()=>k(!1),1600)}catch{h(`Clipboard was blocked — click Copy again.`)}};return(()=>{var t=s5(),r=t.firstChild.firstChild.firstChild;r.firstChild;var a=r.nextSibling;return P(r,j(M,{get when(){return ne()>1},get children(){var e=J8(),t=e.firstChild.nextSibling;return t.nextSibling,P(e,ne,t),e}}),null),P(a,j(M,{get when(){return n()},get children(){return[Y8(),(()=>{var e=X8();return P(e,()=>x5(o()-(i()??o()))),e})()]}}),null),P(a,j(q,{class:`size-7 px-0`,get variant(){return n()?`danger`:`ghost`},get disabled(){return u()},get title(){return $e(()=>!!u())()?`Live scan owns the recorder — pause it first`:n()?`Stop & analyze`:`Record renders`},get"aria-label"(){return n()?`Stop and analyze`:`Record renders`},onClick:()=>void ee(),get children(){return j(M,{get when(){return n()},get fallback(){return c5()},get children(){return Z8()}})}}),null),P(a,j(q,{class:`relative size-7 px-0`,variant:`ghost`,get disabled(){return n()},get title(){return u()?`Pause live render scan`:`Live render scan — findings update as you browse`},"aria-label":`Toggle live render scan`,onClick:()=>I8(!u()),get children(){return[j(M,{get when(){return u()},get fallback(){return l5()},get children(){return Q8()}}),j(M,{get when(){return u()},get children(){return $8()}})]}}),null),P(a,j(q,{class:`size-7 px-0`,variant:`ghost`,get loading(){return S()},title:`Snapshot scan (passive DOM pass)`,"aria-label":`Snapshot scan`,onClick:te,get children(){return e5()}}),null),P(a,j(q,{class:`size-7 px-0`,variant:`ghost`,get title(){return O()?`Copied!`:`Copy AI fix prompt`},"aria-label":`Copy AI fix prompt`,onClick:()=>void ue(),get children(){return j(M,{get when(){return O()},get fallback(){return u5()},get children(){return t5()}})}}),null),P(a,j(q,{class:`size-7 px-0`,variant:`ghost`,get title(){return w()?`Copied!`:`Copy report`},"aria-label":`Copy report`,onClick:()=>void le(),get children(){return j(M,{get when(){return w()},get fallback(){return d5()},get children(){return t5()}})}}),null),P(a,j(q,{class:`text-danger size-7 px-0`,variant:`ghost`,title:`Clear findings`,"aria-label":`Clear findings`,onClick:A,get children(){return n5()}}),null),P(t,j(M,{get when(){return m()},get children(){return j(Hj,{get message(){return m()}})}}),null),P(t,j(M,{get when(){return n()},get children(){return r5()}}),null),P(t,j(M,{get when(){return $e(()=>!!u())()&&!n()},get children(){return i5()}}),null),P(t,j(M,{get when(){return e().length>0},get fallback(){return j(M,{get when(){return $e(()=>!n())()&&!u()},get children(){return j(Vj,{title:`No renders scanned yet`,children:`Press record, then interact — scroll, open menus, navigate, type — and stop to analyze. Or go live and watch findings stream in as you browse. Snapshot grades the current DOM without recording.`})}})},get children(){return[(()=>{var e=a5(),t=e.firstChild,n=t.firstChild,r=t.nextSibling,i=r.firstChild;return t.$$click=()=>y(!v()),P(t,ie,n),r.$$click=()=>x(!b()),P(r,oe,i),D(e=>{var n={"text-danger bg-danger/10 border-danger/40":v(),"text-text-faint":!v()},i=v(),a={"text-warn bg-warn/10 border-warn/40":b(),"text-text-faint":!b()},o=b();return e.e=lt(t,n,e.e),i!==e.t&&it(t,`aria-pressed`,e.t=i),e.a=lt(r,a,e.a),o!==e.o&&it(r,`aria-pressed`,e.o=o),e},{e:void 0,t:void 0,a:void 0,o:void 0}),e})(),(()=>{var e=o5();return P(e,j(We,{get each(){return se()},children:([e,t])=>{let n=t[0],r=()=>g()===e;return(()=>{var i=p5(),a=i.firstChild,o=a.firstChild,s=o.nextSibling,c=s.nextSibling;c.firstChild;var l=c.nextSibling;return a.$$click=()=>_(r()?null:e),P(s,()=>ce(e)),P(c,()=>t.reduce((e,t)=>e+(t.count??1),0),null),P(i,j(M,{get when(){return r()},get children(){var e=f5();return P(e,j(We,{each:t,children:e=>{let t=()=>e.el?.deref()!=null;return(()=>{var n=v5(),r=n.firstChild,i=r.nextSibling;return n.$$click=()=>{t()&&(b5(e)||h(e.page===location.pathname?`Element is gone — record or snapshot again.`:`This finding is on ${e.page} — navigate there to reveal it.`))},P(r,j(M,{get when(){return ne()>1},get children(){var t=m5(),n=t.firstChild;return P(t,()=>e.page,n),t}}),null),P(r,()=>e.description,null),P(r,j(M,{get when(){return(e.count??1)>1},get children(){var t=h5();return t.firstChild,P(t,()=>e.count,null),t}}),null),P(n,j(M,{get when(){return e.changes.length>0},get children(){var t=g5();return P(t,j(We,{get each(){return e.changes},children:e=>(()=>{var t=y5();return P(t,()=>S5(e)),t})()})),t}}),i),P(i,()=>e.evidence,null),P(i,j(M,{get when(){return e.component||e.source},get children(){var t=_5();return t.firstChild,P(t,()=>[e.component,e.source].filter(Boolean).join(` @ `),null),t}}),null),D(e=>{var r={"hover:bg-surface-2 cursor-pointer":t()},i=t()?`Reveal on the page`:void 0;return e.e=lt(n,r,e.e),i!==e.t&&it(n,`title`,e.t=i),e},{e:void 0,t:void 0}),n})()}})),e}}),null),D(e=>{var t=n.severity===`error`,i=n.severity===`warn`,a=!!r();return t!==e.e&&o.classList.toggle(`bg-danger`,e.e=t),i!==e.t&&o.classList.toggle(`bg-warn`,e.t=i),a!==e.a&&l.classList.toggle(`rotate-180`,e.a=a),e},{e:void 0,t:void 0,a:void 0}),i})()}})),e})()]}}),null),t})()}rt([`click`]);var w5=[`defaultTeamId`,`defaultProjectId`,`defaultLabelIds`,`defaultRepo`,`workflowMode`,`cursorModel`,`stagingBranch`,`githubAssetsRepo`,`skillPaths`,`logUrl`,`logLines`,`issueTemplate`,`testUsername`,`renderBudgets`];function T5(e){let t={};for(let n of w5){let r=e[n];r!==void 0&&r!==``&&!(Array.isArray(r)&&r.length===0)&&(t[n]=r)}return t}function E5(e,t){let n={};for(let r of w5)e[r]===void 0&&t[r]!==void 0&&(n[r]=t[r]);return Object.keys(n).length?n:null}Br();function D5(e){let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}async function O5(e){let t=D5(crypto.getRandomValues(new Uint8Array(32))),n=await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(t)),r=D5(new Uint8Array(n)),i=D5(crypto.getRandomValues(new Uint8Array(16))),a=chrome.identity.getRedirectURL(),o=new URL(`https://linear.app/oauth/authorize`);o.searchParams.set(`client_id`,e),o.searchParams.set(`redirect_uri`,a),o.searchParams.set(`response_type`,`code`),o.searchParams.set(`scope`,`read,write`),o.searchParams.set(`state`,i),o.searchParams.set(`code_challenge`,r),o.searchParams.set(`code_challenge_method`,`S256`);let s=await chrome.identity.launchWebAuthFlow({url:o.toString(),interactive:!0});if(!s)throw Error(`OAuth flow was cancelled`);let c=new URL(s).searchParams;if(c.get(`state`)!==i)throw Error(`OAuth state mismatch`);let l=c.get(`code`);if(!l)throw Error(c.get(`error_description`)??`No authorization code returned`);let u=await fetch(`https://api.linear.app/oauth/token`,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:new URLSearchParams({grant_type:`authorization_code`,code:l,redirect_uri:a,client_id:e,code_verifier:t})}),d=await u.json().catch(()=>null);if(!u.ok||!d?.access_token)throw Error(`Token exchange failed — check the OAuth app callback URL and client id`);await Er({linearAccessToken:d.access_token,linearOauthClientId:e})}async function k5(){await Er({linearAccessToken:void 0,linearApiKey:void 0})}Br(),Sr(),Ix(),_D();var A5=N(`<div class="bg-surface-2 border-border flex rounded-md border p-0.5">`),j5=N(`<span class="text-text-faint text-[10.5px] leading-snug">Cloud: picking an element opens the panel to draft &amp; delegate to the Cursor agent. Local (react-grab style): picking auto-copies the element's context — source, stack, and your skills/memory paths — straight to the clipboard for a local Claude Code or Cursor session; the panel stays out of the way. Both share the same picker; switch anytime.`),M5=N(`<label class="flex cursor-pointer items-center gap-2 select-none"><input type=checkbox class="accent-accent rounded"><span class="text-text text-[12px]">Element screenshots`),N5=N(`<span class="text-text-faint text-[10.5px] leading-snug">Captures a highlighted screenshot of each picked element and attaches it to the issue. Costs a beat on huge pages — with this off, picking is instant (pure react-grab speed).`),P5=N(`<span class=text-text>Connected as <span class=font-medium></span> · <span class=text-text-dim>`),F5=N(`<div class="bg-surface border-border flex items-center justify-between rounded-lg border p-2.5"><span class="text-text text-[12px]">`),I5=N(`<option value>Select a team…`),L5=N(`<option value>No project`),R5=N(`<div class="flex flex-wrap gap-1">`),z5=N(`<label class="flex items-start gap-2"><input type=checkbox class="accent-accent mt-0.5"><span class="flex flex-col gap-0.5"><span class=text-[12px]>Let agents close out Linear themselves</span><span class="text-text-faint text-[10.5px] leading-snug">Embeds your Linear API key + raw GraphQL closeout recipes in every issue's Agent instructions — cloud agent VMs have no authenticated Linear MCP, so without this they can't comment, attach media, or move the issue. The key is visible to anyone who can read the issue.`),B5=N(`<p class="text-text-dim text-[11px]">No agents found — install the Cursor integration in Linear first.`),V5=N(`<span class="text-text-faint text-[10.5px] leading-snug">Empty = the default above (computer-use testing, video demo, PR + review babysitting).`),H5=N(`<div class="flex flex-col gap-1.5">`),U5=N(`<div class="flex flex-col gap-1"><span class="text-text-dim text-[11px] font-medium">Mode</span><div class="bg-surface-2 border-border flex rounded-md border p-0.5"></div><span class="text-text-faint text-[10.5px] leading-snug">Beside page squeezes the app next to the panel, DevTools-style — nothing gets covered. Also toggleable from the dock icon in the panel header.`),W5=N(`<div class="flex flex-col gap-1"><span class="text-text-dim text-[11px] font-medium">Dock side</span><div class="bg-surface-2 border-border flex rounded-md border p-0.5"></div><span class="text-text-faint text-[10.5px] leading-snug">The launcher pill is draggable — park it anywhere it doesn't cover your app.`),G5=N(`<p class="text-text-faint text-[10.5px] leading-snug">A committed <code>.lineargrab.json</code> at the repo root (where the bridge runs) shares team/project/labels, skills, staging branch, and workflow defaults with every machine and teammate — it seeds any setting you haven't set locally. Secrets never belong in it.`),K5=N(`<span class="inline-block min-w-[10ch] text-center">`),q5=N(`<div class="flex items-center gap-2">`),J5=N(`<option value>Select a channel…`),Y5=N(`<label class="flex cursor-pointer items-center gap-2 select-none"><input type=checkbox class="accent-accent rounded"><span class="text-text text-[12px]">Announce new issues on create`),X5=N(`<span class="text-text-faint text-[10.5px] leading-snug">⚠️ Tokens are embedded in issue Agent-instructions so agents can post the finished demo — everyone who can read the issue can read them. Use single-channel-scoped bots.`),Z5=N(`<div class="flex flex-col gap-1"><span class="text-text-dim text-[11px] font-medium">Provider preference</span><div class="bg-surface-2 border-border flex rounded-md border p-0.5"><button>Auto</button><button>OpenAI</button><button>Anthropic`),Q5=N(`<p class="text-text-dim text-[11px]">`),$5=N(`<div class=min-h-[2lh]>`),e7=N(`<ol class="text-text-faint flex list-decimal flex-col gap-1 pl-4 text-[11px] leading-relaxed"><li>Pick an element on your running dev app.</li><li>Draft the issue (AI optional).</li><li>Create + delegate — Cursor's cloud agent fixes it and opens a PR.</li><li>Track and steer it from Activity.`),t7=N(`<div class="flex h-full flex-col gap-5 overflow-y-auto pt-3 pb-6 pl-3 pr-4">`),n7=N(`<button>`),r7=N(`<div class="flex gap-1.5">`),i7=N(`<p class="text-text-faint text-center text-[10.5px]">or`),a7=N(`<span class="text-text-faint text-[10.5px] leading-snug">Register this callback URL in your Linear OAuth app config:<br><span class="font-mono text-[10.5px] break-all">`),o7=N(`<div class="flex flex-col gap-3">`),s7=N(`<span class=text-text-dim>Connected — verifying…`),c7=N(`<option> (<!>)`),l7=N(`<option>`),u7=N(`<button type=button><span class="mr-1 inline-block size-2 rounded-full align-middle">`),d7=N(`<option value>Select the agent…`),f7=N(`<option>#`),p7=N(`<p class="text-text-dim text-[11px]">No key set — AI drafting disabled, manual drafting still works.`);function m7(){let e=sr(),t=_r(()=>({queryKey:[`settings`],queryFn:Tr,staleTime:0})),n=k(()=>t.data??{});async function r(t,n=!1){await Er(t),await e.invalidateQueries({queryKey:[`settings`]}),n&&(await e.invalidateQueries({queryKey:[`viewer`]}),await e.invalidateQueries({queryKey:[`teams`]}),await e.invalidateQueries({queryKey:[`agents`]}),await e.invalidateQueries({queryKey:[`my-issues`]}))}let i=k(()=>!!(n().linearApiKey||n().linearAccessToken)),a=_r(()=>({queryKey:[`viewer`],queryFn:uO,enabled:i(),retry:0})),o=_r(()=>({queryKey:[`teams`],queryFn:dO,enabled:i()})),s=_r(()=>({queryKey:[`linear-projects`],queryFn:xO,enabled:i()})),c=_r(()=>({queryKey:[`bridge-health`],queryFn:NO,retry:0})),[l,u]=T(!1),d=async()=>{try{await navigator.clipboard.writeText(JSON.stringify(T5(n()),null,2)+`
285
- `),u(!0),setTimeout(()=>u(!1),1800)}catch{}},f=()=>{let e=c.data?.projectConfig;if(!e)return;let t={};for(let n of w5)e[n]!==void 0&&(t[n]=e[n]);r(t)},p=_r(()=>({queryKey:[`linear-labels`],queryFn:SO,enabled:i()})),m=_r(()=>({queryKey:[`agents`],queryFn:fO,enabled:i()})),[h,g]=T(``),[_,v]=T(!1),[y,b]=T(``);async function x(){let e=h().trim();if(e){v(!0),b(``);try{await r({linearApiKey:e},!0),await uO(),g(``)}catch{b(`Key rejected — could not verify. Check the key and try again.`),await r({linearApiKey:void 0},!0)}finally{v(!1)}}}let[S,C]=T(``),[w,E]=T(!1),[O,ee]=T(``);async function te(){let t=(S()||n().linearOauthClientId||``).trim();if(!t){ee(`Enter an OAuth client ID first.`);return}E(!0),ee(``);try{await O5(t),await e.invalidateQueries({queryKey:[`settings`]}),await e.invalidateQueries({queryKey:[`viewer`]}),await e.invalidateQueries({queryKey:[`teams`]}),await e.invalidateQueries({queryKey:[`agents`]}),await e.invalidateQueries({queryKey:[`my-issues`]})}catch(e){ee(e instanceof Error?e.message:`OAuth flow failed.`)}finally{E(!1)}}let[A,ne]=T(!1);async function re(){ne(!0);try{await k5(),await e.invalidateQueries({queryKey:[`settings`]}),await e.invalidateQueries({queryKey:[`viewer`]}),await e.invalidateQueries({queryKey:[`teams`]}),await e.invalidateQueries({queryKey:[`agents`]}),await e.invalidateQueries({queryKey:[`my-issues`]})}finally{ne(!1)}}let ie=xr?chrome.identity.getRedirectURL():null,ae=_r(()=>({queryKey:[`slack-channels`,n().slackToken],queryFn:()=>tk(n().slackToken),enabled:!!n().slackToken,retry:0,staleTime:6e4})),oe=k(()=>jx(n())),se=k(()=>{let e=oe();return e?`Drafting with ${e} — ${Px[e].fast} (fast) / ${Px[e].best} (best)`:null});return(()=>{var e=t7();return P(e,j(Rj,{title:`Workflow`,get children(){return[(()=>{var e=A5();return P(e,j(We,{each:[{id:`cloud`,label:`Cloud · Linear + Cursor`},{id:`local`,label:`Local · clipboard`}],children:e=>(()=>{var t=n7();return t.$$click=()=>void r({workflowMode:e.id}),P(t,()=>e.label),D(()=>st(t,`flex-1 rounded-[5px] px-2 py-1 text-[11.5px] font-medium transition-colors ${(n().workflowMode??`cloud`)===e.id?`bg-surface-3 text-text`:`text-text-dim hover:text-text cursor-pointer`}`)),t})()})),e})(),j5()]}}),null),P(e,j(Rj,{title:`Capture`,get children(){return[(()=>{var e=M5(),t=e.firstChild;return t.addEventListener(`change`,e=>void r({captureShots:e.currentTarget.checked||void 0})),D(()=>t.checked=!!n().captureShots),e})(),N5()]}}),null),P(e,j(Rj,{title:`Linear`,get children(){return j(M,{get when(){return i()},get fallback(){return(()=>{var e=o7();return P(e,j(Lj,{label:`Personal API key`,hint:`Create one at linear.app → Settings → API — fastest path.`,get children(){return[(()=>{var e=r7();return P(e,j(jj,{type:`password`,placeholder:`lin_api_…`,get value(){return h()},onInput:e=>g(e.currentTarget.value),"on:keydown":e=>{e.key===`Enter`&&x()}}),null),P(e,j(q,{variant:`primary`,get loading(){return _()},get disabled(){return!h().trim()},onClick:()=>void x(),class:`shrink-0`,children:`Connect`}),null),e})(),j(M,{get when(){return y()},get children(){return j(Hj,{get message(){return y()}})}})]}}),null),P(e,j(M,{when:xr,get children(){return[i7(),j(Lj,{label:`OAuth client ID`,get children(){return[(()=>{var e=r7();return P(e,j(jj,{placeholder:`your-client-id`,get value(){return S()||n().linearOauthClientId||``},onInput:e=>C(e.currentTarget.value)}),null),P(e,j(q,{variant:`ghost`,get loading(){return w()},onClick:()=>void te(),class:`shrink-0 whitespace-nowrap`,children:`Connect with OAuth`}),null),e})(),j(M,{get when(){return O()},get children(){return j(Hj,{get message(){return O()}})}}),(()=>{var e=a7(),t=e.firstChild.nextSibling.nextSibling;return P(t,ie),e})()]}})]}}),null),e})()},get children(){var e=F5(),t=e.firstChild;return P(t,j(M,{get when(){return!a.isLoading},get fallback(){return s7()},get children(){return j(M,{get when(){return a.data},get fallback(){return j(M,{get when(){return a.isError},get fallback(){return s7()},get children(){return j(Hj,{message:`Key rejected — reconnect`})}})},get children(){var e=P5(),t=e.firstChild.nextSibling,n=t.nextSibling.nextSibling;return P(t,()=>a.data.name),P(n,()=>a.data.email),e}})}})),P(e,j(q,{variant:`ghost`,get loading(){return A()},onClick:()=>void re(),class:`ml-2 shrink-0`,children:`Disconnect`}),null),e}})}}),null),P(e,j(M,{get when(){return i()},get children(){return j(Rj,{title:`Workspace`,get children(){return[j(Lj,{label:`Default team`,get children(){return j(Nj,{get value(){return n().defaultTeamId??``},onChange:e=>{let t=e.currentTarget.value;r({defaultTeamId:t||void 0})},get disabled(){return o.isLoading},get children(){return[I5(),j(M,{get when(){return o.data},get children(){return j(We,{get each(){return o.data},children:e=>(()=>{var t=c7(),r=t.firstChild,i=r.nextSibling;return i.nextSibling,P(t,()=>e.name,r),P(t,()=>e.key,i),D(()=>t.selected=e.id===n().defaultTeamId),D(()=>t.value=e.id),t})()})}})]}})}}),j(Lj,{label:`Default project`,hint:`Every issue created from the panel is filed into this project.`,get children(){return j(Nj,{get value(){return n().defaultProjectId??``},onChange:e=>void r({defaultProjectId:e.currentTarget.value||void 0}),get disabled(){return s.isLoading},get children(){return[(()=>{var e=L5();return D(()=>e.selected=!n().defaultProjectId),e})(),j(We,{get each(){return s.data??[]},children:e=>(()=>{var t=l7();return P(t,()=>e.name),D(()=>t.selected=e.id===n().defaultProjectId),D(()=>t.value=e.id),t})()})]}})}}),j(Lj,{label:`Default labels`,hint:`Applied to every issue created from the panel.`,get children(){var e=R5();return P(e,j(We,{get each(){return p.data??[]},children:e=>{let t=()=>(n().defaultLabelIds??[]).includes(e.id);return(()=>{var i=u7(),a=i.firstChild;return i.$$click=()=>{let i=n().defaultLabelIds??[];r({defaultLabelIds:t()?i.filter(t=>t!==e.id):[...i,e.id]})},P(i,()=>e.name,null),D(n=>{var r=`h-6 cursor-pointer rounded-full border px-2.5 text-[11px] font-medium transition-colors ${t()?`bg-accent-soft text-accent border-accent/40`:`bg-surface-2 text-text-dim border-border hover:bg-surface-3`}`,o=e.color;return r!==n.e&&st(i,n.e=r),o!==n.t&&dt(a,`background`,n.t=o),n},{e:void 0,t:void 0}),i})()}})),e}}),(()=>{var e=z5(),t=e.firstChild;return t.addEventListener(`change`,e=>void r({shareLinearKey:e.currentTarget.checked})),D(()=>t.checked=!!n().shareLinearKey),e})(),j(Lj,{label:`Staging branch`,hint:`Stage buttons on PRs merge the PR branch here — point your staging domain (e.g. preview.ahmedbanihani.com) at this branch in Vercel.`,get children(){return j(jj,{get value(){return n().stagingBranch??``},placeholder:`staging`,onChange:e=>void r({stagingBranch:e.currentTarget.value.trim()||void 0})})}}),j(Lj,{label:`Cursor agent`,hint:`App users in your workspace. Pick Cursor — requires the Cursor integration installed in Linear (workspace admin) with usage-based pricing enabled in Cursor.`,get children(){return j(M,{get when(){return $e(()=>!!m.data)()&&m.data.length===0},get fallback(){return j(Nj,{get value(){return n().cursorAgentId??``},onChange:e=>{let t=e.currentTarget.value;if(!t){r({cursorAgentId:void 0,cursorAgentName:void 0,cursorAgentUrl:void 0});return}let n=m.data?.find(e=>e.id===t);n&&r({cursorAgentId:n.id,cursorAgentName:n.displayName,cursorAgentUrl:n.url??void 0})},get disabled(){return m.isLoading},get children(){return[d7(),j(M,{get when(){return m.data},get children(){return j(We,{get each(){return m.data},children:e=>(()=>{var t=l7();return P(t,()=>e.displayName),D(()=>t.selected=e.id===n().cursorAgentId),D(()=>t.value=e.id),t})()})}})]}})},get children(){return B5()}})}}),j(Lj,{label:`Default repository`,hint:`Appended to delegated issues as [repo=…] so Cursor picks the right repo.`,get children(){return j(jj,{placeholder:`owner/repository`,get value(){return n().defaultRepo??``},onBlur:e=>{r({defaultRepo:e.currentTarget.value.trim()||void 0})}})}}),j(Lj,{label:`Cursor cloud model`,hint:`Appended as [model=…] — e.g. claude-opus-4-8, gpt-5.2, composer. Empty = Cursor's default.`,get children(){return j(jj,{placeholder:`Cursor's default`,get value(){return n().cursorModel??``},onBlur:e=>{r({cursorModel:e.currentTarget.value.trim()||void 0})}})}}),j(Lj,{label:`Agent instructions`,hint:`Appended to every issue as '### Agent instructions' and given to the AI draft. Add demo credentials (username/password) so the agent can log in, test, and record its video. Careful: credentials become visible to everyone who can read the issue.`,get children(){return[j(Mj,{rows:5,placeholder:gD,get value(){return n().issueTemplate??``},onBlur:e=>{r({issueTemplate:e.currentTarget.value.trim()||void 0})}}),V5()]}}),j(Lj,{label:`Dev server log URL`,hint:`Tail of your dev-server log attached to issues (and fed to AI drafts). Serve the log over HTTP: "dev:http": "next dev 2>&1 | tee public/dev-server.log" (gitignore it), then use /dev-server.log here. Empty = disabled.`,get children(){return j(jj,{placeholder:`/dev-server.log`,get value(){return n().logUrl??``},onBlur:e=>{r({logUrl:e.currentTarget.value.trim()||void 0})}})}}),j(Lj,{label:`Log lines to attach`,hint:`Trailing lines included in the issue (10–500).`,get children(){return j(jj,{type:`number`,min:`10`,max:`500`,placeholder:`100`,get value(){return n().logLines??``},onBlur:e=>{let t=Number(e.currentTarget.value);r({logLines:Number.isFinite(t)&&t>0?Math.min(500,Math.max(10,Math.round(t))):void 0})}})}}),j(Lj,{label:`Skills & memory paths`,hint:`One path per line. The cloud agent works in a full repo checkout, so committed paths (e.g. .claude/skills/apple-hig-design-principles) are readable directly — every issue gets a MANDATORY-reading section pointing at them. Repo-relative for cloud agents; absolute paths also work when you paste the issue into a local Claude Code session. Per project: these settings live per dev origin.`,get children(){return j(Mj,{rows:4,placeholder:`.claude/skills/apple-hig-design-principles
279
+ `);await navigator.clipboard.writeText(t),Ae(!0),setTimeout(()=>Ae(!1),1600)}catch{l(`Clipboard was blocked — click Copy again.`)}},Me=()=>{B3.clear(),we([]),r(null)};return(()=>{var t=l3(),a=t.firstChild;a.firstChild;var o=a.nextSibling,s=o.firstChild.firstChild.nextSibling,d=o.nextSibling,p=d.firstChild.firstChild,h=p.firstChild;h.firstChild;var _=p.nextSibling;return P(a,j(q,{variant:`primary`,class:`h-7 shrink-0 px-2.5 text-[11.5px]`,get loading(){return i()===`extract`},onClick:()=>void Te(),get children(){return X4()}}),null),P(t,j(M,{get when(){return c()},get children(){return j(Hj,{get message(){return c()}})}}),o),P(t,j(M,{get when(){return e().length>0},get fallback(){return j(Vj,{title:`No genomes yet`,children:`Click Extract and pick any component on the page — a dropdown, a card, a sidebar row. Then "Capture states" while you hover/open it to record the styles that only exist during interaction.`})},get children(){return[(()=>{var t=Z4();return t.firstChild,P(t,j(We,{get each(){return e()},children:e=>{let t=()=>n()===e.id;return(()=>{var n=m3(),a=n.firstChild,o=a.nextSibling,s=o.firstChild,c=s.firstChild,l=c.nextSibling,d=l.firstChild,p=d.nextSibling;p.nextSibling;var m=l.nextSibling;return s.$$click=()=>r(t()?null:e.id),P(c,()=>e.genome.title),P(l,()=>e.genome.nodes.length,d),P(l,(()=>{var t=$e(()=>!!e.genome.states.length);return()=>t()?` · ${e.genome.states.length} states`:``})(),p),P(l,()=>Wj(e.genome.extractedAt),null),P(o,j(M,{get when(){return t()},get children(){var t=p3(),n=t.firstChild,r=n.nextSibling,a=r.nextSibling;return P(n,()=>e.genome.pageUrl),P(r,j(We,{get each(){return e.genome.nodes},children:e=>(()=>{var t=g3(),n=t.firstChild;return P(n,()=>e.label,null),P(n,j(M,{get when(){return e.count>1},get children(){var t=h3();return t.firstChild,P(t,()=>e.count,null),t}}),null),P(t,j(We,{get each(){return Object.entries(e.styles)},children:([t,n])=>(()=>{var r=v3(),i=r.firstChild;return P(r,t,i),P(r,n,null),P(r,j(M,{get when(){return e.tokens[t]},get children(){var n=_3(),r=n.firstChild.nextSibling;return r.nextSibling,P(n,()=>e.tokens[t],r),n}}),null),r})()}),null),t})()}),null),P(r,j(M,{get when(){return e.genome.states.length>0},get children(){return[u3(),j(We,{get each(){return e.genome.states},children:e=>(()=>{var t=y3(),n=t.firstChild,r=n.firstChild;return P(n,()=>e.label,r),P(n,()=>e.trigger,null),P(t,j(We,{get each(){return Object.entries(e.changed)},children:([e,t])=>(()=>{var n=b3(),r=n.firstChild,i=r.nextSibling;return i.nextSibling,P(n,e,r),P(n,()=>t.from,i),P(n,()=>t.to,null),n})()}),null),t})()})]}}),null),P(a,j(M,{get when(){return $e(()=>i()===e.id)()&&f().active},get fallback(){return j(q,{class:`size-7 px-0`,variant:`ghost`,get loading(){return i()===e.id},title:`Capture states — records hover/focus/open styles for 8s while you interact; the pill shows the timer and Stop`,"aria-label":`Capture interaction states`,onClick:()=>void Ee(e),get children(){return x3()}})},get children(){return[j(q,{class:`text-danger size-7 px-0`,variant:`ghost`,get title(){return`Stop recording — ${Math.ceil(f().msLeft/1e3)}s left · ${f().total} captured`},"aria-label":`Stop recording states`,onClick:()=>o2(),get children(){return d3()}}),(()=>{var e=f3(),t=e.firstChild,n=t.nextSibling;return n.nextSibling,P(e,()=>Math.ceil(f().msLeft/1e3),t),P(e,()=>f().total,n),e})()]}}),null),P(a,j(q,{class:`size-7 px-0`,variant:`ghost`,get title(){return u()===e.id?`Copied!`:`Copy spec — markdown for an agent or issue`},"aria-label":`Copy genome spec`,onClick:()=>void De(e),get children(){return j(M,{get when(){return u()===e.id},get fallback(){return S3()},get children(){return Q4()}})}}),null),P(a,j(q,{class:`text-danger ml-auto size-7 px-0`,variant:`ghost`,title:`Delete this genome`,"aria-label":`Delete genome`,onClick:()=>Oe(e.id),get children(){return $4()}}),null),t}}),null),D(e=>{var n={"bg-accent border-accent":t()},r=!!t();return e.e=lt(a,n,e.e),r!==e.t&&m.classList.toggle(`rotate-180`,e.t=r),e},{e:void 0,t:void 0}),n})()}}),null),t})(),(()=>{var e=e3();return P(e,j(q,{class:`size-7 px-0`,variant:`ghost`,get title(){return ke()?`Copied!`:`Copy all genomes as one markdown document`},"aria-label":`Copy all genomes`,onClick:()=>void je(),get children(){return j(M,{get when(){return ke()},get fallback(){return S3()},get children(){return Q4()}})}}),null),P(e,j(q,{class:`text-danger size-7 px-0`,variant:`ghost`,title:`Delete all saved genomes`,"aria-label":`Delete all genomes`,onClick:Me,get children(){return $4()}}),null),e})()]}}),o),P(s,j(q,{class:`size-7 px-0`,variant:`ghost`,get title(){return g()?`Live capture ON — recording transitions fired by your input. Click to pause.`:`Live capture PAUSED — click to resume recording input-triggered transitions.`},get"aria-label"(){return g()?`Pause live capture`:`Start live capture`},onClick:()=>I2(!g()),get children(){return j(M,{get when(){return g()},get fallback(){return C3()},get children(){return t3()}})}}),null),P(s,j(q,{variant:`ghost`,class:`h-7 px-2.5 text-[11.5px]`,get loading(){return v()},onClick:()=>void S(),get children(){return n3()}}),null),P(o,j(M,{get when(){return m().length>0},get fallback(){return w3()},get children(){return[(()=>{var e=r3();return P(e,j(We,{get each(){return m()},children:e=>(()=>{var t=O3(),n=t.firstChild,r=n.firstChild,i=r.nextSibling,a=i.nextSibling,o=a.firstChild,s=n.nextSibling,c=s.nextSibling;return P(r,()=>e.mode===`live`?`live`:`audit`),P(i,()=>e.component??e.element,null),P(i,j(M,{get when(){return e.count>1},get children(){return[` ×`,$e(()=>e.count)]}}),null),P(a,()=>e.durationMs,o),P(a,(()=>{var t=$e(()=>!!e.delayMs);return()=>t()?` +${e.delayMs}`:``})(),null),P(t,j(M,{get when(){return e.source},get children(){var t=T3();return P(t,()=>e.source),t}}),s),P(s,()=>e.properties.join(`, `),null),P(s,j(M,{get when(){return e.sinceInputMs!=null},get children(){return[` — fired `,$e(()=>e.sinceInputMs),`ms after input`]}}),null),P(t,j(M,{get when(){return e.jankProps?.length},get children(){var t=E3();return t.firstChild,P(t,()=>e.jankProps.join(`, `),null),t}}),c),P(t,j(M,{get when(){return e.easing},get children(){var t=D3();return t.firstChild,P(t,()=>e.easing,null),t}}),c),P(c,()=>e.suggestion),t})()})),e})(),(()=>{var e=a3();return P(e,j(q,{class:`size-7 px-0`,variant:`primary`,get title(){return w()?`Copied!`:`Copy AI prompt — report + fix rules, ready to paste into a Claude Code session`},"aria-label":`Copy AI fix prompt`,onClick:()=>void O(),get children(){return j(M,{get when(){return w()},get fallback(){return k3()},get children(){return i3()}})}}),null),P(e,j(q,{class:`size-7 px-0`,variant:`ghost`,get title(){return b()?`Copied!`:`Copy report — plain markdown findings`},"aria-label":`Copy report`,onClick:()=>void C(),get children(){return j(M,{get when(){return b()},get fallback(){return S3()},get children(){return Q4()}})}}),null),P(e,j(q,{class:`text-danger ml-auto size-7 px-0`,variant:`ghost`,title:`Clear all findings (live + audit)`,"aria-label":`Clear all findings`,onClick:M2,get children(){return $4()}}),null),e})()]}}),null),P(h,j(M,{get when(){return _e()>1},get children(){var e=o3(),t=e.firstChild.nextSibling;return t.nextSibling,P(e,_e,t),e}}),null),P(_,j(q,{class:`size-7 px-0`,variant:`ghost`,get title(){return te()?`Live scan ON — re-scans automatically ~1s after each route change. Click to pause.`:`Live scan PAUSED — click to auto-scan every page you navigate to.`},get"aria-label"(){return te()?`Pause live scan`:`Start live scan`},onClick:()=>W4(!te()),get children(){return j(M,{get when(){return te()},get fallback(){return C3()},get children(){return t3()}})}}),null),P(_,j(q,{variant:`ghost`,class:`h-7 px-2.5 text-[11.5px]`,get loading(){return ne()},title:`Scan this page — cumulative: keeps other pages' findings, replaces this page's`,onClick:he,get children(){return s3()}}),null),P(d,j(M,{get when(){return k().length>0},get fallback(){return A3()},get children(){return[(()=>{var e=c3(),t=e.firstChild,n=t.firstChild,r=t.nextSibling,i=r.firstChild;return t.$$click=()=>ce(!se()),P(t,be,n),r.$$click=()=>ue(!le()),P(r,xe,i),D(e=>{var n={"text-danger bg-danger/10 border-danger/40":se(),"text-text-faint":!se()},i=se(),a={"text-warn bg-warn/10 border-warn/40":le(),"text-text-faint":!le()},o=le();return e.e=lt(t,n,e.e),i!==e.t&&it(t,`aria-pressed`,e.t=i),e.a=lt(r,a,e.a),o!==e.o&&it(r,`aria-pressed`,e.o=o),e},{e:void 0,t:void 0,a:void 0,o:void 0}),e})(),(()=>{var e=r3();return P(e,j(We,{get each(){return ye()},children:e=>{let t=e[0],n=()=>ie()===t.ruleId;return(()=>{var r=M3(),i=r.firstChild,a=i.firstChild,o=a.nextSibling,s=o.nextSibling;s.firstChild;var c=s.nextSibling;return i.$$click=()=>oe(n()?null:t.ruleId),P(o,()=>t.ruleId),P(s,()=>e.reduce((e,t)=>e+(t.count??1),0),null),P(r,j(M,{get when(){return n()},get children(){var n=j3(),r=n.firstChild;return P(r,()=>t.description),P(n,j(We,{each:e,children:e=>(()=>{var t=F3(),n=t.firstChild,r=n.nextSibling;return t.$$click=()=>{V3(e)||l(e.page===location.pathname?`Element is gone — run Scan again.`:`This finding is on ${e.page} — navigate there to reveal it.`)},P(n,j(M,{get when(){return _e()>1},get children(){var t=N3(),n=t.firstChild;return P(t,()=>e.page,n),t}}),null),P(n,j(M,{get when(){return e.component},get children(){var t=N3(),n=t.firstChild;return P(t,()=>e.component,n),t}}),null),P(n,()=>e.selector,null),P(n,j(M,{get when(){return(e.count??1)>1},get children(){var t=P3();return t.firstChild,P(t,()=>e.count,null),t}}),null),P(t,j(M,{get when(){return e.source},get children(){var t=T3();return P(t,()=>e.source),t}}),r),P(r,()=>e.evidence),t})()}),null),n}}),null),D(e=>{var r=t.severity===`error`,i=t.severity===`warn`,o=!!n();return r!==e.e&&a.classList.toggle(`bg-danger`,e.e=r),i!==e.t&&a.classList.toggle(`bg-warn`,e.t=i),o!==e.a&&c.classList.toggle(`rotate-180`,e.a=o),e},{e:void 0,t:void 0,a:void 0}),r})()}})),e})(),(()=>{var e=a3();return P(e,j(q,{class:`size-7 px-0`,variant:`primary`,get title(){return pe()?`Copied!`:`Copy AI prompt — findings + contract fix rules, ready for a Claude Code session`},"aria-label":`Copy AI fix prompt`,onClick:()=>void Ce(),get children(){return j(M,{get when(){return pe()},get fallback(){return k3()},get children(){return i3()}})}}),null),P(e,j(q,{class:`size-7 px-0`,variant:`ghost`,get title(){return de()?`Copied!`:`Copy report — findings grouped by rule, markdown`},"aria-label":`Copy slop report`,onClick:()=>void Se(),get children(){return j(M,{get when(){return de()},get fallback(){return S3()},get children(){return Q4()}})}}),null),P(e,j(q,{class:`text-danger ml-auto size-7 px-0`,variant:`ghost`,title:`Clear scan results`,"aria-label":`Clear scan results`,onClick:ge,get children(){return $4()}}),null),e})()]}}),null),t})()}rt([`click`]);function U3(e){return Math.round(e*10)/10}function W3(e,t,n){return e.rules[t]?.severity??n}var G3=/^(HotReload|Head|AppRouterAnnouncer|HistoryUpdater|AppRouter|Router|ServerRoot|SegmentViewNode|SegmentViewStateNode|SegmentStateProvider|InnerLayoutRouter|OuterLayoutRouter|TemplateContext|RenderFromTemplateContext|ScrollAndFocusHandler|RedirectBoundary|RedirectErrorBoundary|LoadingBoundary|ErrorBoundary|ErrorBoundaryHandler|HTTPAccessFallbackBoundary|HTTPAccessFallbackErrorBoundary|DevRootHTTPAccessFallbackBoundary|__next_root_layout_boundary__|Preloads|NonIndex|ReplaySsrOnlyErrors|AppDevOverlay\w*|DevOverlay\w*|PseudoHtml\w*)$/;function K3(e){return e?.length?e.map(e=>{try{let t=new RegExp(e);return e=>t.test(e)}catch{return t=>t===e}}):[]}function q3(e,t){if(e.length<=2||G3.test(e))return!0;for(let n of t)if(n(e))return!0;return!1}function J3(e){let t=new Map;for(let n of e)for(let e of n.entries){let n=t.get(e.name);n||(n={name:e.name,updates:[],selfTime:0,el:e.el??void 0},t.set(e.name,n)),n.selfTime+=e.selfTime,e.el&&!n.el&&(n.el=e.el),e.phase===`update`&&n.updates.push(e.changes)}return t}function Y3(e,t,n){let r=[],i=K3(n?.ignore),a=e.map(e=>({...e,entries:e.entries.filter(e=>!q3(e.name,i)),mounts:Object.fromEntries(Object.entries(e.mounts).filter(([e])=>!q3(e,i)))})),o=J3(a),s=t.budgets;return i6(r,()=>{let e=[];for(let n of o.values()){if(n.updates.length<5||!n.updates.every(e=>e.length===0))continue;let r=n.updates.length;e.push({ruleId:`R9`,shape:`B`,severity:W3(t,`R9`,`error`),suspected:!0,description:`suspected R9 — ${n.name} re-rendered ${r}× with zero prop changes (dead memo or subscription-in-body)`,component:n.name,source:null,renders:r,selfTime:U3(n.selfTime),changes:[],evidence:`${r} renders · ${U3(n.selfTime)}ms self · all props identity-equal`,el:n.el})}return e}),i6(r,()=>{let e=[];for(let n of o.values()){if(n.updates.length<5||!n.updates.every(e=>e.length>0&&e.every(e=>/\((?:fn|ref)\)$/.test(e))))continue;let r=Array.from(new Set(n.updates.flat())),i=n.updates.length,a=r.join(`, `);e.push({ruleId:`R5`,shape:`B`,severity:W3(t,`R5`,`error`),suspected:!0,description:`suspected R5 — ${i} renders of ${n.name} with fresh ${a} identity per parent render (memo defeated)`,component:n.name,source:null,renders:i,selfTime:U3(n.selfTime),changes:r,evidence:`${i} renders · ${U3(n.selfTime)}ms self · churning ${a}`,el:n.el})}return e}),i6(r,()=>{let e=[],n=/Tooltip|Menu|Popover|Context|Dialog|Dropdown/i;for(let r of a)for(let i of Object.keys(r.mounts)){let a=r.mounts[i];if(a<(n.test(i)?10:15))continue;let o=r.entries.find(e=>e.name===i&&e.el);e.push({ruleId:`R4`,shape:`A`,severity:W3(t,`R4`,`error`),suspected:!0,description:`suspected R4 — ${a} ${i} instances mounted in one commit (per-row overlays should mount on intent)`,component:i,source:null,renders:a,selfTime:0,changes:[],evidence:`${i} ×${a} mounted in one commit`,el:o?.el??void 0})}return e}),i6(r,()=>{let e=[];for(let t of a){if(t.duration<=s.commitMs)continue;let n=[...t.entries].sort((e,t)=>t.selfTime-e.selfTime).slice(0,3).map(e=>`${e.name} ${U3(e.selfTime)}ms`).join(`, `),r=U3(t.duration),i=t.duration>16?` · ~${Math.round(1e3/t.duration)} FPS`:``;e.push({ruleId:null,shape:null,severity:`error`,suspected:!1,description:`commit exceeded budget: ${r}ms of React work (> ${s.commitMs}ms) — top: ${n}`,component:null,source:null,renders:t.entries.length,selfTime:r,changes:[],evidence:`${r}ms commit · ${t.entries.length} components${i}`})}return e}),i6(r,()=>{let e=[],t=new Map;for(let e of a){let n=new Map,r=new Map;for(let t of e.entries)n.set(t.name,(n.get(t.name)??0)+t.selfTime),t.el&&!r.has(t.name)&&r.set(t.name,t.el);for(let[e,i]of n){if(i<=s.selfMs)continue;let n=t.get(e)??{hits:0,worst:0,total:0,el:r.get(e)};n.hits+=1,n.worst=Math.max(n.worst,i),n.total+=i,n.el||=r.get(e),t.set(e,n)}}for(let[n,r]of t)r.hits<3||e.push({ruleId:null,shape:null,severity:`warn`,suspected:!1,description:`${n} is a hot component: ${r.hits} commits over the ${s.selfMs}ms self budget`,component:n,source:null,renders:r.hits,selfTime:U3(r.total),changes:[],evidence:`${r.hits} commits over ${s.selfMs}ms self (worst ${U3(r.worst)}ms)`,el:r.el});return e}),i6(r,()=>{let n=[],r=n6(e.filter(e=>e.nearInput).map(e=>e.at).sort((e,t)=>e-t),1e3);return r>=5&&n.push({ruleId:`R10`,shape:`B`,severity:W3(t,`R10`,`error`),suspected:!0,description:`suspected R10 — ${r} React commits during scroll/pointer movement (frame-rate state updates)`,component:null,source:null,renders:r,selfTime:0,changes:[],evidence:`${r} commits within a 1s scroll/pointer window`}),n}),i6(r,()=>{let n=[],{count:r,span:i}=r6(e.filter(e=>!e.nearInput).map(e=>e.at).sort((e,t)=>e-t),300);return r>=8&&n.push({ruleId:`R24`,shape:`B`,severity:W3(t,`R24`,`warn`),suspected:!0,description:`suspected R24 — ${r} commits in ${Math.round(i)}ms burst (multi-row writes / un-coalesced pokes?)`,component:null,source:null,renders:r,selfTime:0,changes:[],evidence:`${r} commits in a ${Math.round(i)}ms burst (no input)`}),n}),i6(r,()=>{let e=[];if(!e6())return e;for(let n of o.values()){if(n.updates.length<3)continue;let r=n.el?.deref();if(!r)continue;let i=!1;try{let e=r.getBoundingClientRect();i=!r.isConnected||e.width===0&&e.height===0}catch{continue}if(!i)continue;let a=n.updates.length;e.push({ruleId:`R3`,shape:`C`,severity:W3(t,`R3`,`error`),suspected:!0,description:`suspected R3 — ${n.name} re-rendered ${a}× while its DOM is hidden/detached (closed host without everOpened gate?) [R3/R7/R23 family]`,component:n.name,source:null,renders:a,selfTime:U3(n.selfTime),changes:[],evidence:`${a} renders while hidden/detached · ${U3(n.selfTime)}ms self`,el:n.el})}return e}),a6(r)}var X3=`#linear-grab-root, #claude-agent-glow-border, [id^="react-scan"]`;function Z3(e=typeof document<`u`?document:{}){let t=[];return i6(t,()=>{let t=[],n=Array.from(e.querySelectorAll(`[role="slider"], [role="progressbar"], [role="switch"]`)),r=t6(e);for(let e of n){if(e.closest(X3))continue;if(r)try{let t=e.getBoundingClientRect();if(t.width<2||t.height<2)continue}catch{}if(!Q3(e))continue;let n=e.getAttribute(`role`)??`widget`;t.push({ruleId:`R8`,shape:`D`,severity:`warn`,suspected:!0,description:`suspected R8 — interactive ${n} widget used as a static picture (mount a CSS mock instead)`,component:null,source:null,renders:0,selfTime:0,changes:[],evidence:$3(e),el:typeof WeakRef<`u`?new WeakRef(e):void 0})}return t}),a6(t)}function Q3(e){if(e.hasAttribute(`disabled`)||e.getAttribute(`aria-disabled`)===`true`)return!0;let t=e;for(let e=0;t&&e<=3;e++){try{if(getComputedStyle(t).pointerEvents===`none`)return!0}catch{}t=t.parentElement}return!1}function $3(e){let t=typeof e.className==`string`&&e.className?`.`+e.className.split(/\s+/).filter(Boolean).slice(0,2).join(`.`):``;return`${e.tagName.toLowerCase()}${t}`}function e6(){return typeof document>`u`?!1:(document.documentElement?.getBoundingClientRect().width??0)>0}function t6(e){return((e.documentElement??(typeof document<`u`?document.documentElement:null))?.getBoundingClientRect().width??0)>0}function n6(e,t){let n=0,r=0;for(let i=0;i<e.length;i++){for(;e[i]-e[r]>t;)r++;n=Math.max(n,i-r+1)}return n}function r6(e,t){let n=0,r=0,i=0;for(let a=0;a<e.length;a++){for(;e[a]-e[i]>t;)i++;let o=a-i+1;o>n&&(n=o,r=e[a]-e[i])}return{count:n,span:r}}function i6(e,t){try{e.push(...t())}catch{}}function a6(e){let t=new Map;for(let n of e){let e=`${n.ruleId}|${n.component}|${n.changes.join()}|${n.description}`,r=t.get(e);r?r.count=(r.count??1)+1:t.set(e,n)}return[...t.values()]}function o6(e){let t=new Map;for(let n of e){let e=n.ruleId??`budget`,r=t.get(e);r?r.push(n):t.set(e,[n])}let n=Array.from(t.entries()).sort((e,t)=>{let n=e[1][0].severity===`error`?0:1,r=t[1][0].severity===`error`?0:1;return n===r?t[1].length===e[1].length?e[0].localeCompare(t[0]):t[1].length-e[1].length:n-r}),r=e.reduce((e,t)=>e+(t.count??1),0),i=e.filter(e=>e.severity===`error`).reduce((e,t)=>e+(t.count??1),0),a=[`# Render scan — ${i} error${i===1?``:`s`}, ${r-i} warn (${r} total)`,``,`Diagnoses are SUSPECTED (heuristic). The numbers (renders, self ms) are measured.`,``];for(let[e,t]of n){let n=t[0],r=t.reduce((e,t)=>e+(t.count??1),0);a.push(`## ${e} — ${n.severity} ×${r}`);for(let e of t){let t=e.component||e.source?` — ${[e.component,e.source].filter(Boolean).join(` @ `)}`:``,n=(e.count??1)>1?` ×${e.count}`:``;a.push(`- ${e.description}${n}${t}`),a.push(` ${e.evidence}`)}a.push(``)}return a.join(`
280
+ `)}function s6(e,t){let n=Array.from(new Set(e.map(e=>e.ruleId).filter(e=>!!e))).sort(),r=[];for(let e of n){let n=t.rules[e];n&&n.fixText?r.push(`- ${e} (${n.slug}): ${n.fixText}`):r.push(`- ${e}: see React-rerender-primitives.md ${e}`)}return[`Below is a RENDER-SCAN report from my running app — each finding is a measured`,`React re-render pattern graded against the re-render contract`,"(`React-rerender-primitives.md`). Rules are R-numbered.",``,`READ THIS FIRST: the DIAGNOSES are SUSPECTED — they are heuristic guesses at the`,`cause. The NUMBERS (render counts, self ms, FPS) are EXACT measurements. Trust the`,`numbers; verify each diagnosis against the code before you "fix" it.`,``,`How to fix:`,`1. Fix at the source of the identity churn / wasted render, not the symptom —`,` stabilize props (useCallback/useMemo, hoist constants), gate work behind an`,` everOpened/visible check, mount per-row overlays on intent.`,`2. Each distinct rule and its canonical fix:`,...r.map(e=>` ${e}`),`3. PROOF REQUIRED: after the change I will re-record and re-scan — the flagged`,` components must show the render counts drop. State what you changed per`,` component; do not claim done blind.`,``,`---`,``,o6(e)].join(`
281
+ `)}var c6=`bippy-0.5.43`,l6=Object.defineProperty,u6=Object.prototype.hasOwnProperty,d6=()=>{},f6=e=>{try{Function.prototype.toString.call(e).indexOf(`^_^`)>-1&&setTimeout(()=>{throw Error(`React is running in production mode, but dead code elimination has not been applied. Read how to correctly configure React for production: https://reactjs.org/link/perf-use-production-build`)})}catch{}},p6=(e=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__)=>!!(e&&`getFiberRoots`in e),m6=!1,h6,g6=(e=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__)=>m6?!0:(e&&typeof e.inject==`function`&&(h6=e.inject.toString()),!!h6?.includes(`(injected)`)),_6=new Set,v6=new Set,y6=e=>{let t=new Map,n=0,r={_instrumentationIsActive:!1,_instrumentationSource:c6,checkDCE:f6,hasUnsupportedRendererAttached:!1,inject(e){let i=++n;return t.set(i,e),v6.add(e),r._instrumentationIsActive||(r._instrumentationIsActive=!0,_6.forEach(e=>e())),i},on:d6,onCommitFiberRoot:d6,onCommitFiberUnmount:d6,onPostCommitFiberRoot:d6,renderers:t,supportsFiber:!0,supportsFlight:!0};try{l6(globalThis,`__REACT_DEVTOOLS_GLOBAL_HOOK__`,{configurable:!0,enumerable:!0,get(){return r},set(t){if(t&&typeof t==`object`){let n=r.renderers;r=t,n.size>0&&(n.forEach((e,n)=>{v6.add(e),t.renderers.set(n,e)}),b6(e))}}});let t=window.hasOwnProperty,n=!1;l6(window,`hasOwnProperty`,{configurable:!0,value:function(...e){try{if(!n&&e[0]===`__REACT_DEVTOOLS_GLOBAL_HOOK__`)return globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__=void 0,n=!0,-0}catch{}return t.apply(this,e)},writable:!0})}catch{b6(e)}return r},b6=e=>{e&&_6.add(e);try{let t=globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!t)return;if(!t._instrumentationSource){t.checkDCE=f6,t.supportsFiber=!0,t.supportsFlight=!0,t.hasUnsupportedRendererAttached=!1,t._instrumentationSource=c6,t._instrumentationIsActive=!1;let e=p6(t);if(e||(t.on=d6),t.renderers.size){t._instrumentationIsActive=!0,_6.forEach(e=>e());return}let n=t.inject,r=g6(t);r&&!e&&(m6=!0,t.inject({scheduleRefresh(){}})&&(t._instrumentationIsActive=!0)),t.inject=e=>{let i=n(e);return v6.add(e),r&&t.renderers.set(i,e),t._instrumentationIsActive=!0,_6.forEach(e=>e()),i}}(t.renderers.size||t._instrumentationIsActive||g6())&&e?.()}catch{}},x6=()=>u6.call(globalThis,`__REACT_DEVTOOLS_GLOBAL_HOOK__`),S6=e=>x6()?(b6(e),globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__):y6(e),C6=()=>!!(typeof window<`u`&&(window.document?.createElement||window.navigator?.product===`ReactNative`));(()=>{try{C6()&&S6()}catch{}})();var w6=60111,T6=`Symbol(react.concurrent_mode)`,E6=`Symbol(react.async_mode)`,D6=e=>{switch(e.tag){case 5:case 26:case 27:return!0;default:return typeof e.type==`string`}},O6=e=>{switch(e.tag){case 1:case 11:case 0:case 14:case 15:return!0;default:return!1}},k6=e=>{let t=e.memoizedProps,n=e.alternate?.memoizedProps||{},r=e.flags??e.effectTag??0;switch(e.tag){case 1:case 9:case 11:case 0:case 14:case 15:return(r&1)==1;default:return!e.alternate||n!==t||e.alternate.memoizedState!==e.memoizedState||e.alternate.ref!==e.ref}},A6=e=>{switch(e.tag){case 18:return!0;case 7:case 6:case 23:case 22:return!0;case 3:return!1;default:{let t=typeof e.type==`object`&&e.type!==null?e.type.$$typeof:e.type;switch(typeof t==`symbol`?t.toString():t){case w6:case T6:case E6:return!0;default:return!1}}}},j6=(e,t=!1)=>{let n=M6(e,D6,t);return n||=M6(e,D6,!t),n};function M6(e,t,n=!1){if(!e)return null;let r=t(e);if(r instanceof Promise)return(async()=>{if(await r===!0)return e;let i=n?e.return:e.child;for(;i;){let e=await P6(i,t,n);if(e)return e;i=n?null:i.sibling}return null})();if(r===!0)return e;let i=n?e.return:e.child;for(;i;){let e=N6(i,t,n);if(e)return e;i=n?null:i.sibling}return null}var N6=(e,t,n=!1)=>{if(!e)return null;if(t(e)===!0)return e;let r=n?e.return:e.child;for(;r;){let e=N6(r,t,n);if(e)return e;r=n?null:r.sibling}return null},P6=async(e,t,n=!1)=>{if(!e)return null;if(await t(e)===!0)return e;let r=n?e.return:e.child;for(;r;){let e=await P6(r,t,n);if(e)return e;r=n?null:r.sibling}return null},F6=e=>{let t=e?.actualDuration??0,n=t,r=e?.child??null;for(;t>0&&r!=null;)n-=r.actualDuration??0,r=r.sibling;return{selfTime:n,totalTime:t}},I6=e=>{let t=e;return typeof t==`function`?t:typeof t==`object`&&t?I6(t.type||t.render):null},L6=e=>{let t=e;if(typeof t==`string`)return t;if(typeof t!=`function`&&!(typeof t==`object`&&t))return null;let n=t.displayName||t.name||null;if(n)return n;let r=I6(t);return r&&(r.displayName||r.name)||null},R6=0,z6=new WeakMap,B6=(e,t=R6++)=>{z6.set(e,t)},V6=e=>{let t=z6.get(e);return!t&&e.alternate&&(t=z6.get(e.alternate)),t||(t=R6++,B6(e,t)),t},H6=(e,t,n)=>{let r=t;for(;r!=null;){if(z6.has(r)||V6(r),!A6(r)&&k6(r)&&e(r,`mount`),r.tag===13)if(r.memoizedState!==null){let t=r.child,n=t?t.sibling:null;if(n){let t=n.child;t!==null&&H6(e,t,!1)}}else{let t=null;r.child!==null&&(t=r.child.child),t!==null&&H6(e,t,!1)}else r.child!=null&&H6(e,r.child,!0);r=n?r.sibling:null}},U6=(e,t,n,r)=>{if(z6.has(t)||V6(t),!n)return;z6.has(n)||V6(n);let i=t.tag===13,a=!A6(t);a&&k6(t)&&e(t,`update`);let o=i&&n.memoizedState!==null,s=i&&t.memoizedState!==null;if(o&&s){let r=t.child?.sibling??null,i=n.child?.sibling??null;r!==null&&i!==null&&U6(e,r,i,t)}else if(o&&!s){let n=t.child;n!==null&&H6(e,n,!0)}else if(!o&&s){G6(e,n);let r=t.child?.sibling??null;r!==null&&H6(e,r,!0)}else if(t.child!==n.child){let n=t.child;for(;n;){if(n.alternate){let i=n.alternate;U6(e,n,i,a?t:r)}else H6(e,n,!1);n=n.sibling}}},W6=(e,t)=>{(t.tag===3||!A6(t))&&e(t,`unmount`)},G6=(e,t)=>{let n=t.tag===13&&t.memoizedState!==null,r=t.child;for(n&&(r=(t.child?.sibling??null)?.child??null);r!==null;)r.return!==null&&(W6(e,r),G6(e,r)),r=r.sibling},K6=0,q6=new WeakMap,J6=(e,t)=>{let n=`current`in e?e.current:e,r=q6.get(e);r||(r={id:K6++,prevFiber:null},q6.set(e,r));let{prevFiber:i}=r;if(!n)W6(t,n);else if(i!==null){let e=i&&i.memoizedState!=null&&i.memoizedState.element!=null&&i.memoizedState.isDehydrated!==!0,r=n.memoizedState!=null&&n.memoizedState.element!=null&&n.memoizedState.isDehydrated!==!0;!e&&r?H6(t,n,!1):e&&r?U6(t,n,n.alternate,null):e&&!r&&W6(t,n)}else H6(t,n,!0);r.prevFiber=n},Y6=e=>{let t=S6(e.onActive);t._instrumentationSource=e.name??c6;let n=t.onCommitFiberRoot;if(e.onCommitFiberRoot){let r=(t,i,a)=>{n!==r&&(n?.(t,i,a),e.onCommitFiberRoot?.(t,i,a))};t.onCommitFiberRoot=r}let r=t.onCommitFiberUnmount;if(e.onCommitFiberUnmount){let n=(i,a)=>{t.onCommitFiberUnmount===n&&(r?.(i,a),e.onCommitFiberUnmount?.(i,a))};t.onCommitFiberUnmount=n}let i=t.onPostCommitFiberRoot;if(e.onPostCommitFiberRoot){let n=(r,a)=>{t.onPostCommitFiberRoot===n&&(i?.(r,a),e.onPostCommitFiberRoot?.(r,a))};t.onPostCommitFiberRoot=n}return t},X6=!1,Z6=!1,Q6=[],$6=-1/0,e8=200,t8=4e3,n8=100;function r8(){$6=a8()}var i8=[`scroll`,`wheel`,`pointermove`];function a8(){return typeof performance<`u`?performance.now():Date.now()}function o8(e,t){let n=e&&typeof e==`object`?e:{},r=t&&typeof t==`object`?t:{},i=new Set([...Object.keys(n),...Object.keys(r)]),a=[];for(let e of i){if(e===`children`)continue;let t=n[e],i=r[e];Object.is(t,i)||(typeof t==`function`&&typeof i==`function`?a.push(`prop:${e}(fn)`):t&&i&&typeof t==`object`&&typeof i==`object`&&s8(t,i)?a.push(`prop:${e}(ref)`):a.push(`prop:${e}`))}return a}function s8(e,t){let n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let r of n)if(!Object.is(e[r],t[r]))return!1;return!0}function c8(e){let t=[],n={};J6(e,(e,r)=>{if(r===`unmount`||!O6(e))return;let i=L6(e.type)??`Anonymous`;r===`mount`&&(n[i]=(n[i]??0)+1);let a=0;try{a=F6(e).selfTime||0}catch{}let o=[];if(r===`update`&&e.alternate)try{o=o8(e.alternate.memoizedProps,e.memoizedProps)}catch{o=[`prop:(unknown)`]}let s=null;try{let t=j6(e)?.stateNode;t&&typeof WeakRef<`u`&&t instanceof Element&&(s=new WeakRef(t))}catch{}t.push({name:i,selfTime:a,phase:r===`mount`?`mount`:`update`,changes:o,el:s})}),t.sort((e,t)=>t.selfTime-e.selfTime);let r=t.slice(0,e8),i=Math.max(0,t.length-e8),a=0;for(let e of t)a+=e.selfTime;let o=a8(),s=o-$6<=n8;Q6.push({at:o,duration:a,entries:r,droppedEntries:i,mounts:n,nearInput:s})}function l8(){if(!X6&&!(typeof window>`u`)){X6=!0;try{Y6({onCommitFiberRoot:(e,t)=>{if(Z6&&!(Q6.length>=t8))try{c8(t)}catch{}}})}catch{}}}function u8(){if(!(typeof window>`u`)&&!Z6){Q6=[],$6=-1/0,l8();try{for(let e of i8)window.addEventListener(e,r8,{capture:!0,passive:!0})}catch{}Z6=!0}}function d8(){Z6=!1;try{for(let e of i8)window.removeEventListener(e,r8,{capture:!0})}catch{}let e=Q6;return Q6=[],$6=-1/0,e}function f8(){let e=Q6;return Q6=[],e}var p8={budgets:{selfMs:2,commitMs:8},rules:{}},m8=/^###\s+(R\d+)\s*[·.\-–—:]?\s*`([^`]+)`.*?\((error|warn)\)\s*$/;function h8(e){return m8.test(e.trim())}function g8(e,t){let n=e.split(`
282
+ `),r=RegExp(`^\\s*\\*\\*${t.source}[^*]*:\\*\\*\\s*(.*)$`,`i`),i=/^\s*\*\*[^*]+:\*\*/,a=0;for(;a<n.length&&!r.test(n[a]);a++);if(a>=n.length)return``;let o=n[a].replace(r,`$1`),s=[];for(o.trim()&&s.push(o.trim()),a+=1;a<n.length;a++){let e=n[a];if(i.test(e)||/^###\s/.test(e)||/^##\s/.test(e)||/^---\s*$/.test(e))break;if(e.trim())s.push(e.trim());else if(s.length){let e=a+1;for(;e<n.length&&!n[e].trim();)e++;if(e>=n.length||i.test(n[e])||/^###\s|^##\s|^---\s*$/.test(n[e]))break}}return _8(s.join(` `)).trim()}function _8(e){return e.replace(/\*\*([^*]+)\*\*/g,`$1`).replace(/__([^_]+)__/g,`$1`).replace(/(^|[\s(])[*_]([^*_\s][^*_]*?)[*_]([\s.,;:)]|$)/g,`$1$2$3`).replace(/\s{2,}/g,` `)}function v8(e){let t=e.match(/≤(\d+(?:\.\d+)?)ms self/),n=e.match(/commit >(\d+(?:\.\d+)?)ms/)??e.match(/>(\d+(?:\.\d+)?)ms of React work/);return{selfMs:t?parseFloat(t[1]):p8.budgets.selfMs,commitMs:n?parseFloat(n[1]):p8.budgets.commitMs}}function y8(e){let t=v8(e),n={},r=e.split(`
283
+ `),i=0;for(;i<r.length;){let e=r[i];if(!h8(e)){i++;continue}let t=e.trim(),a=[],o=i+1;for(;o<r.length;o++){let e=r[o];if(h8(e)||/^##\s/.test(e.trim())||/^---\s*$/.test(e.trim()))break;a.push(e)}try{let e=t.match(m8);if(e){let[,t,r,i]=e,o=a.join(`
284
+ `);n[t]={id:t,slug:r,severity:i===`warn`?`warn`:`error`,ruleText:g8(o,/Rule/),fixText:g8(o,/Fix/),detectText:g8(o,/Detect/)}}}catch{}i=o}return{budgets:t,rules:n}}Br();var b8=[],x8=new Set;function S8(e){return x8.add(e),e(b8),()=>void x8.delete(e)}function C8(){b8=[];for(let e of x8)e(b8)}function w8(e,t){b8=[...e,...b8.filter(e=>e.page!==t)];for(let e of x8)e(b8);return X8(e).then(()=>{b8=[...b8];for(let e of x8)e(b8);Z8(e)}),e}var T8=new Set,E8=!1,D8=null;function O8(e){return T8.add(e),e(E8,D8),()=>void T8.delete(e)}function k8(){if(!(j8||E8)){u8(),E8=!0,D8=Date.now();for(let e of T8)e(!0,D8)}}async function A8(){if(!E8)return[];let e=d8();E8=!1,D8=null;for(let e of T8)e(!1,null);let t=await K8(),n=location.pathname;return w8(Y3(e,t,{ignore:await J8()}).map(e=>({...e,page:n})),n)}var j8=!1;try{j8=localStorage.getItem(`linear-grab:render-live`)===`1`}catch{}var M8=new Set;function N8(e){return M8.add(e),e(j8),()=>void M8.delete(e)}var P8=3e3,F8=4e3,I8=null,L8=[],R8=``;function z8(e){if(e!==j8&&!(e&&E8)){j8=e;try{localStorage.setItem(`linear-grab:render-live`,e?`1`:`0`)}catch{}for(let t of M8)t(e);e?(u8(),L8=[],R8=location.pathname,I8=setInterval(()=>void B8(!1),P8)):(I8&&clearInterval(I8),I8=null,B8(!0).finally(()=>{d8(),L8=[]}))}}async function B8(e){try{let t=location.pathname;if(t!==R8){let e=b8.filter(e=>e.page===R8);X8(e).then(()=>{b8=[...b8];for(let e of x8)e(b8);Z8(e)}),L8=[],R8=t}L8.push(...f8()),L8.length>F8&&L8.splice(0,L8.length-F8);let n=await K8(),r=Y3(L8,n,{ignore:await J8()}).map(e=>({...e,page:t}));b8=[...r,...b8.filter(e=>e.page!==t)];for(let e of x8)e(b8);if(e){await X8(r),b8=[...b8];for(let e of x8)e(b8);Z8(r)}}catch{}}function V8(){typeof window>`u`||!j8||I8||(u8(),L8=[],R8=location.pathname,I8=setInterval(()=>void B8(!1),P8))}function H8(){let e=location.pathname;return w8(Z3(document).map(t=>({...t,page:e})),e)}var U8=5*6e4,W8=null,G8=0;async function K8(){if(W8&&Date.now()-G8<U8)return W8;let e=p8;try{let t=await YO(),n=await(await fetch(`${t}/scan/rulebook`)).json();n.ok&&n.text&&(e=y8(n.text))}catch{}return e=await Y8(e),W8=e,G8=Date.now(),e}function q8(){return W8}async function J8(){try{let e=await Tr();return Array.isArray(e.renderIgnore)?e.renderIgnore:void 0}catch{return}}async function Y8(e){try{let t=(await Tr()).renderBudgets;if(t&&(t.selfMs!=null||t.commitMs!=null))return{...e,budgets:{selfMs:t.selfMs??e.budgets.selfMs,commitMs:t.commitMs??e.budgets.commitMs}}}catch{}return e}async function X8(e){let t=null;try{t=(await Promise.resolve().then(()=>(RZ(),AZ))).getGlobalApi()??null}catch{return}if(!t)return;let n=new Map;for(let t of e){let e=t.el?.deref();if(!e)continue;let r=n.get(e);r?r.push(t):n.set(e,[t])}let r=300;for(let[e,i]of n){if(r--<=0)break;let n=null,a=null;try{n=t.getDisplayName?.(e)??null}catch{}try{let n=await t.getSource?.(e);n?.filePath&&(a=`${n.filePath}${n.lineNumber==null?``:`:${n.lineNumber}`}`)}catch{}if(!(!n&&!a))for(let e of i)!e.component&&n&&(e.component=n),a&&(e.source=a)}}function Z8(e){if(e.length===0)return;let t=Date.now(),n=e.slice(0,200).map(({el:e,...n})=>({kind:`render-scan`,at:t,...n}));YO().then(e=>fetch(`${e}/scan/events`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({events:n}),keepalive:!0})).catch(()=>{})}var Q8=N(`<span class="text-text-faint font-normal tabular-nums"> · <!> pages`),$8=N(`<span class="bg-danger size-1.5 shrink-0 animate-pulse rounded-full"aria-hidden>`),e5=N(`<span class="text-danger inline-block min-w-[4ch] text-right text-[10.5px] font-medium tabular-nums">`),t5=N(`<svg width=13 height=13 viewBox="0 0 16 16"aria-hidden><rect x=3.5 y=3.5 width=9 height=9 rx=1.5 fill=currentColor>`),n5=N(`<svg width=13 height=13 viewBox="0 0 16 16"aria-hidden><rect x=4 y=3.5 width=3 height=9 rx=1 fill=currentColor></rect><rect x=9 y=3.5 width=3 height=9 rx=1 fill=currentColor>`),r5=N(`<span class="bg-success absolute -top-0.5 -right-0.5 size-1.5 animate-pulse rounded-full"aria-hidden>`),i5=N(`<svg width=13 height=13 viewBox="0 0 16 16"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round aria-hidden><path d="M5.5 3 6.5 1.5h3L10.5 3h2A1.5 1.5 0 0 1 14 4.5v7A1.5 1.5 0 0 1 12.5 13h-9A1.5 1.5 0 0 1 2 11.5v-7A1.5 1.5 0 0 1 3.5 3h2Z"></path><circle cx=8 cy=7.75 r=2.25>`),a5=N(`<span class="text-success text-[12px] leading-none">✓`),o5=N(`<svg width=12 height=12 viewBox="0 0 16 16"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round aria-hidden><path d="M4 4l8 8M12 4l-8 8">`),s5=N(`<p class="text-text-faint px-1 text-[10.5px] leading-snug">Recording commits… interact with the page.`),c5=N(`<p class="text-text-faint px-1 text-[10.5px] leading-snug">Live render scan — findings update as you interact and navigate.`),l5=N(`<div class="flex items-center gap-1 px-1"><button class="border-border cursor-pointer rounded-full border px-2 py-0.5 text-[10px] font-medium tabular-nums"> errors</button><button class="border-border cursor-pointer rounded-full border px-2 py-0.5 text-[10px] font-medium tabular-nums"> warns`),u5=N(`<div class="flex max-h-[28rem] flex-col gap-1.5 overflow-y-auto pr-3 pl-2">`),d5=N(`<div class="flex h-full flex-col gap-3 overflow-y-auto pt-3 pb-4 pr-3 pl-2"><div class="flex flex-col gap-1 px-1"><div class="flex items-center justify-between gap-2"><p class="text-text min-w-0 truncate text-[12.5px] font-semibold">Renders</p><div class="flex shrink-0 items-center gap-1"></div></div><p class="text-text-faint text-[10.5px] leading-snug">Commits graded against React-rerender-primitives.md — record then interact, go live, or snapshot the DOM. Accumulates per page.`),f5=N(`<svg width=13 height=13 viewBox="0 0 16 16"fill=none stroke=currentColor stroke-width=1.5 aria-hidden><circle cx=8 cy=8 r=6></circle><circle cx=8 cy=8 r=2.25 fill=currentColor stroke=none>`),p5=N(`<svg width=13 height=13 viewBox="0 0 16 16"aria-hidden><path d="M5 3.3v9.4a.5.5 0 0 0 .77.42l7.1-4.7a.5.5 0 0 0 0-.84l-7.1-4.7A.5.5 0 0 0 5 3.3Z"fill=currentColor>`),m5=N(`<svg width=13 height=13 viewBox="0 0 16 16"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round aria-hidden><path d="M8 1.5 9.6 6l4.4 1.6L9.6 9.2 8 13.7 6.4 9.2 2 7.6 6.4 6Z"></path><path d="M13 11.5l.6 1.7 1.7.6-1.7.6-.6 1.7-.6-1.7-1.7-.6 1.7-.6Z">`),h5=N(`<svg width=13 height=13 viewBox="0 0 16 16"fill=none stroke=currentColor stroke-width=1.5 stroke-linejoin=round aria-hidden><rect x=5.5 y=5.5 width=9 height=9 rx=1.5></rect><path d="M10.5 5.5v-2a2 2 0 0 0-2-2h-5a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h2">`),g5=N(`<div class="border-border flex flex-col gap-1 border-t px-2 py-1.5">`),_5=N(`<div class="bg-surface border-border flex flex-col rounded-lg border"><button class="flex w-full cursor-pointer items-center gap-2 px-2 py-1.5 text-left"><span class="size-1.5 shrink-0 rounded-full"aria-hidden></span><span class="text-accent min-w-0 truncate font-mono text-[11.5px]"></span><span class="text-text-faint ml-auto shrink-0 text-[10.5px] tabular-nums">×</span><svg width=10 height=10 viewBox="0 0 16 16"fill=none stroke=currentColor stroke-width=1.5 class="text-text-faint shrink-0 transition-transform"aria-hidden><path d="m4 6 4 4 4-4">`),v5=N(`<span class="text-accent font-mono"> `),y5=N(`<span class="text-text-faint tabular-nums"> ×`),b5=N(`<span class="flex flex-wrap gap-1">`),x5=N(`<span class="text-text-dim font-mono"> · `),S5=N(`<div class="flex flex-col gap-0.5 rounded px-1 py-0.5 text-left"><span class="text-text-dim text-[10.5px] leading-snug"></span><span class="text-text-faint text-[10px] leading-snug tabular-nums">`),C5=N(`<span class="bg-surface-2 text-text-dim rounded px-1 font-mono text-[9.5px] leading-relaxed">`);function w5(e){let t=e.el?.deref();if(!(t instanceof HTMLElement)||!t.isConnected)return!1;t.scrollIntoView({block:`center`,behavior:`smooth`});let n=t.style.outline,r=t.style.outlineOffset;return t.style.outline=`2px solid #e5a13a`,t.style.outlineOffset=`2px`,setTimeout(()=>{t.style.outline=n,t.style.outlineOffset=r},1400),!0}function T5(e){let t=Math.max(0,Math.floor(e/1e3));return`${Math.floor(t/60)}:${String(t%60).padStart(2,`0`)}`}function E5(e){return e.replace(/^prop:/,``)}function D5(){let[e,t]=T([]);ae(S8(t));let[n,r]=T(!1),[i,a]=T(null),[o,s]=T(Date.now()),c=null,l=()=>{c&&clearInterval(c),c=null};ae(l),ae(O8((e,t)=>{r(e),a(t),e?(s(Date.now()),c||=setInterval(()=>s(Date.now()),500)):l()}));let[u,d]=T(!1);ae(N8(d));let[f,p]=T(q8());K8().then(p);let[m,h]=T(null),[g,_]=T(null),[v,y]=T(!0),[b,x]=T(!0),[S,C]=T(!1),[w,E]=T(!1),[O,k]=T(!1),ee=async()=>{if(h(null),n())try{let e=await A8();p(q8()),_(null),e.length===0&&h(`No re-render anti-patterns caught — interact more (scroll, open menus, type) between record and stop.`)}catch(e){h(e instanceof Error?e.message:String(e))}else k8()},te=()=>{h(null),C(!0);try{H8(),_(null)}catch(e){h(e instanceof Error?e.message:String(e))}finally{C(!1)}},A=()=>{C8(),_(null)},ne=()=>new Set(e().map(e=>e.page)).size,re=()=>e().filter(e=>e.severity===`error`?v():b()),ie=()=>e().filter(e=>e.severity===`error`).reduce((e,t)=>e+(t.count??1),0),oe=()=>e().reduce((e,t)=>e+(t.count??1),0)-ie(),se=()=>{let e=new Map;for(let t of re()){let n=t.ruleId??`budget`,r=e.get(n);r?r.push(t):e.set(n,[t])}return[...e.entries()].sort((e,t)=>Number(t[1][0].severity===`error`)-Number(e[1][0].severity===`error`)||t[1].length-e[1].length)},ce=e=>{let t=e===`budget`?null:f()?.rules[e]?.slug??null;return t?`${e} · ${t}`:e},le=async()=>{try{await navigator.clipboard.writeText(o6(re())),E(!0),setTimeout(()=>E(!1),1600)}catch{h(`Clipboard was blocked — click Copy again.`)}},ue=async()=>{try{await navigator.clipboard.writeText(s6(re(),await K8())),k(!0),setTimeout(()=>k(!1),1600)}catch{h(`Clipboard was blocked — click Copy again.`)}};return(()=>{var t=d5(),r=t.firstChild.firstChild.firstChild;r.firstChild;var a=r.nextSibling;return P(r,j(M,{get when(){return ne()>1},get children(){var e=Q8(),t=e.firstChild.nextSibling;return t.nextSibling,P(e,ne,t),e}}),null),P(a,j(M,{get when(){return n()},get children(){return[$8(),(()=>{var e=e5();return P(e,()=>T5(o()-(i()??o()))),e})()]}}),null),P(a,j(q,{class:`size-7 px-0`,get variant(){return n()?`danger`:`ghost`},"data-tip-pos":`bottom left`,get disabled(){return u()},get title(){return $e(()=>!!u())()?`Live scan owns the recorder — pause it first`:n()?`Stop & analyze`:`Record renders`},get"aria-label"(){return n()?`Stop and analyze`:`Record renders`},onClick:()=>void ee(),get children(){return j(M,{get when(){return n()},get fallback(){return f5()},get children(){return t5()}})}}),null),P(a,j(q,{class:`relative size-7 px-0`,variant:`ghost`,"data-tip-pos":`bottom left`,get disabled(){return n()},get title(){return u()?`Pause live render scan`:`Live render scan — findings update as you browse`},"aria-label":`Toggle live render scan`,onClick:()=>z8(!u()),get children(){return[j(M,{get when(){return u()},get fallback(){return p5()},get children(){return n5()}}),j(M,{get when(){return u()},get children(){return r5()}})]}}),null),P(a,j(q,{class:`size-7 px-0`,variant:`ghost`,"data-tip-pos":`bottom left`,get loading(){return S()},title:`Snapshot scan (passive DOM pass)`,"aria-label":`Snapshot scan`,onClick:te,get children(){return i5()}}),null),P(a,j(q,{class:`size-7 px-0`,variant:`ghost`,"data-tip-pos":`bottom left`,get title(){return O()?`Copied!`:`Copy AI fix prompt`},"aria-label":`Copy AI fix prompt`,onClick:()=>void ue(),get children(){return j(M,{get when(){return O()},get fallback(){return m5()},get children(){return a5()}})}}),null),P(a,j(q,{class:`size-7 px-0`,variant:`ghost`,"data-tip-pos":`bottom left`,get title(){return w()?`Copied!`:`Copy report`},"aria-label":`Copy report`,onClick:()=>void le(),get children(){return j(M,{get when(){return w()},get fallback(){return h5()},get children(){return a5()}})}}),null),P(a,j(q,{class:`text-danger size-7 px-0`,variant:`ghost`,"data-tip-pos":`bottom left`,title:`Clear findings`,"aria-label":`Clear findings`,onClick:A,get children(){return o5()}}),null),P(t,j(M,{get when(){return m()},get children(){return j(Hj,{get message(){return m()}})}}),null),P(t,j(M,{get when(){return n()},get children(){return s5()}}),null),P(t,j(M,{get when(){return $e(()=>!!u())()&&!n()},get children(){return c5()}}),null),P(t,j(M,{get when(){return e().length>0},get fallback(){return j(M,{get when(){return $e(()=>!n())()&&!u()},get children(){return j(Vj,{title:`No renders scanned yet`,children:`Press record, then interact — scroll, open menus, navigate, type — and stop to analyze. Or go live and watch findings stream in as you browse. Snapshot grades the current DOM without recording.`})}})},get children(){return[(()=>{var e=l5(),t=e.firstChild,n=t.firstChild,r=t.nextSibling,i=r.firstChild;return t.$$click=()=>y(!v()),P(t,ie,n),r.$$click=()=>x(!b()),P(r,oe,i),D(e=>{var n={"text-danger bg-danger/10 border-danger/40":v(),"text-text-faint":!v()},i=v(),a={"text-warn bg-warn/10 border-warn/40":b(),"text-text-faint":!b()},o=b();return e.e=lt(t,n,e.e),i!==e.t&&it(t,`aria-pressed`,e.t=i),e.a=lt(r,a,e.a),o!==e.o&&it(r,`aria-pressed`,e.o=o),e},{e:void 0,t:void 0,a:void 0,o:void 0}),e})(),(()=>{var e=u5();return P(e,j(We,{get each(){return se()},children:([e,t])=>{let n=t[0],r=()=>g()===e;return(()=>{var i=_5(),a=i.firstChild,o=a.firstChild,s=o.nextSibling,c=s.nextSibling;c.firstChild;var l=c.nextSibling;return a.$$click=()=>_(r()?null:e),P(s,()=>ce(e)),P(c,()=>t.reduce((e,t)=>e+(t.count??1),0),null),P(i,j(M,{get when(){return r()},get children(){var e=g5();return P(e,j(We,{each:t,children:e=>{let t=()=>e.el?.deref()!=null;return(()=>{var n=S5(),r=n.firstChild,i=r.nextSibling;return n.$$click=()=>{t()&&(w5(e)||h(e.page===location.pathname?`Element is gone — record or snapshot again.`:`This finding is on ${e.page} — navigate there to reveal it.`))},P(r,j(M,{get when(){return ne()>1},get children(){var t=v5(),n=t.firstChild;return P(t,()=>e.page,n),t}}),null),P(r,()=>e.description,null),P(r,j(M,{get when(){return(e.count??1)>1},get children(){var t=y5();return t.firstChild,P(t,()=>e.count,null),t}}),null),P(n,j(M,{get when(){return e.changes.length>0},get children(){var t=b5();return P(t,j(We,{get each(){return e.changes},children:e=>(()=>{var t=C5();return P(t,()=>E5(e)),t})()})),t}}),i),P(i,()=>e.evidence,null),P(i,j(M,{get when(){return e.component||e.source},get children(){var t=x5();return t.firstChild,P(t,()=>[e.component,e.source].filter(Boolean).join(` @ `),null),t}}),null),D(e=>{var r={"hover:bg-surface-2 cursor-pointer":t()},i=t()?`Reveal on the page`:void 0;return e.e=lt(n,r,e.e),i!==e.t&&it(n,`title`,e.t=i),e},{e:void 0,t:void 0}),n})()}})),e}}),null),D(e=>{var t=n.severity===`error`,i=n.severity===`warn`,a=!!r();return t!==e.e&&o.classList.toggle(`bg-danger`,e.e=t),i!==e.t&&o.classList.toggle(`bg-warn`,e.t=i),a!==e.a&&l.classList.toggle(`rotate-180`,e.a=a),e},{e:void 0,t:void 0,a:void 0}),i})()}})),e})()]}}),null),t})()}rt([`click`]);var O5=[`defaultTeamId`,`defaultProjectId`,`defaultLabelIds`,`defaultRepo`,`workflowMode`,`cursorModel`,`stagingBranch`,`githubAssetsRepo`,`skillPaths`,`logUrl`,`logLines`,`issueTemplate`,`testUsername`,`renderBudgets`,`renderIgnore`];function k5(e){let t={};for(let n of O5){let r=e[n];r!==void 0&&r!==``&&!(Array.isArray(r)&&r.length===0)&&(t[n]=r)}return t}function A5(e,t){let n={};for(let r of O5)e[r]===void 0&&t[r]!==void 0&&(n[r]=t[r]);return Object.keys(n).length?n:null}Br();function j5(e){let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}async function M5(e){let t=j5(crypto.getRandomValues(new Uint8Array(32))),n=await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(t)),r=j5(new Uint8Array(n)),i=j5(crypto.getRandomValues(new Uint8Array(16))),a=chrome.identity.getRedirectURL(),o=new URL(`https://linear.app/oauth/authorize`);o.searchParams.set(`client_id`,e),o.searchParams.set(`redirect_uri`,a),o.searchParams.set(`response_type`,`code`),o.searchParams.set(`scope`,`read,write`),o.searchParams.set(`state`,i),o.searchParams.set(`code_challenge`,r),o.searchParams.set(`code_challenge_method`,`S256`);let s=await chrome.identity.launchWebAuthFlow({url:o.toString(),interactive:!0});if(!s)throw Error(`OAuth flow was cancelled`);let c=new URL(s).searchParams;if(c.get(`state`)!==i)throw Error(`OAuth state mismatch`);let l=c.get(`code`);if(!l)throw Error(c.get(`error_description`)??`No authorization code returned`);let u=await fetch(`https://api.linear.app/oauth/token`,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:new URLSearchParams({grant_type:`authorization_code`,code:l,redirect_uri:a,client_id:e,code_verifier:t})}),d=await u.json().catch(()=>null);if(!u.ok||!d?.access_token)throw Error(`Token exchange failed — check the OAuth app callback URL and client id`);await Er({linearAccessToken:d.access_token,linearOauthClientId:e})}async function N5(){await Er({linearAccessToken:void 0,linearApiKey:void 0})}Br(),Sr(),Ix(),_D();var P5=N(`<div class="bg-surface-2 border-border flex rounded-md border p-0.5">`),F5=N(`<span class="text-text-faint text-[10.5px] leading-snug">Cloud: picking an element opens the panel to draft &amp; delegate to the Cursor agent. Local (react-grab style): picking auto-copies the element's context — source, stack, and your skills/memory paths — straight to the clipboard for a local Claude Code or Cursor session; the panel stays out of the way. Both share the same picker; switch anytime.`),I5=N(`<label class="flex cursor-pointer items-center gap-2 select-none"><input type=checkbox class="accent-accent rounded"><span class="text-text text-[12px]">Element screenshots`),L5=N(`<span class="text-text-faint text-[10.5px] leading-snug">Captures a highlighted screenshot of each picked element and attaches it to the issue. Costs a beat on huge pages — with this off, picking is instant (pure react-grab speed).`),R5=N(`<span class=text-text>Connected as <span class=font-medium></span> · <span class=text-text-dim>`),z5=N(`<div class="bg-surface border-border flex items-center justify-between rounded-lg border p-2.5"><span class="text-text text-[12px]">`),B5=N(`<option value>Select a team…`),V5=N(`<option value>No project`),H5=N(`<div class="flex flex-wrap gap-1">`),U5=N(`<label class="flex items-start gap-2"><input type=checkbox class="accent-accent mt-0.5"><span class="flex flex-col gap-0.5"><span class=text-[12px]>Let agents close out Linear themselves</span><span class="text-text-faint text-[10.5px] leading-snug">Embeds your Linear API key + raw GraphQL closeout recipes in every issue's Agent instructions — cloud agent VMs have no authenticated Linear MCP, so without this they can't comment, attach media, or move the issue. The key is visible to anyone who can read the issue.`),W5=N(`<p class="text-text-dim text-[11px]">No agents found — install the Cursor integration in Linear first.`),G5=N(`<span class="text-text-faint text-[10.5px] leading-snug">Empty = the default above (computer-use testing, video demo, PR + review babysitting).`),K5=N(`<div class="flex flex-col gap-1.5">`),q5=N(`<div class="flex flex-col gap-1"><span class="text-text-dim text-[11px] font-medium">Mode</span><div class="bg-surface-2 border-border flex rounded-md border p-0.5"></div><span class="text-text-faint text-[10.5px] leading-snug">Beside page squeezes the app next to the panel, DevTools-style — nothing gets covered. Also toggleable from the dock icon in the panel header.`),J5=N(`<div class="flex flex-col gap-1"><span class="text-text-dim text-[11px] font-medium">Dock side</span><div class="bg-surface-2 border-border flex rounded-md border p-0.5"></div><span class="text-text-faint text-[10.5px] leading-snug">The launcher pill is draggable — park it anywhere it doesn't cover your app.`),Y5=N(`<p class="text-text-faint text-[10.5px] leading-snug">A committed <code>.lineargrab.json</code> at the repo root (where the bridge runs) shares team/project/labels, skills, staging branch, and workflow defaults with every machine and teammate — it seeds any setting you haven't set locally. Secrets never belong in it.`),X5=N(`<span class="inline-block min-w-[10ch] text-center">`),Z5=N(`<div class="flex items-center gap-2">`),Q5=N(`<option value>Select a channel…`),$5=N(`<label class="flex cursor-pointer items-center gap-2 select-none"><input type=checkbox class="accent-accent rounded"><span class="text-text text-[12px]">Announce new issues on create`),e7=N(`<span class="text-text-faint text-[10.5px] leading-snug">⚠️ Tokens are embedded in issue Agent-instructions so agents can post the finished demo — everyone who can read the issue can read them. Use single-channel-scoped bots.`),t7=N(`<div class="flex flex-col gap-1"><span class="text-text-dim text-[11px] font-medium">Provider preference</span><div class="bg-surface-2 border-border flex rounded-md border p-0.5"><button>Auto</button><button>OpenAI</button><button>Anthropic`),n7=N(`<p class="text-text-dim text-[11px]">`),r7=N(`<div class=min-h-[2lh]>`),i7=N(`<ol class="text-text-faint flex list-decimal flex-col gap-1 pl-4 text-[11px] leading-relaxed"><li>Pick an element on your running dev app.</li><li>Draft the issue (AI optional).</li><li>Create + delegate — Cursor's cloud agent fixes it and opens a PR.</li><li>Track and steer it from Activity.`),a7=N(`<div class="flex h-full flex-col gap-5 overflow-y-auto pt-3 pb-6 pl-3 pr-4">`),o7=N(`<button>`),s7=N(`<div class="flex gap-1.5">`),c7=N(`<p class="text-text-faint text-center text-[10.5px]">or`),l7=N(`<span class="text-text-faint text-[10.5px] leading-snug">Register this callback URL in your Linear OAuth app config:<br><span class="font-mono text-[10.5px] break-all">`),u7=N(`<div class="flex flex-col gap-3">`),d7=N(`<span class=text-text-dim>Connected — verifying…`),f7=N(`<option> (<!>)`),p7=N(`<option>`),m7=N(`<button type=button><span class="mr-1 inline-block size-2 rounded-full align-middle">`),h7=N(`<option value>Select the agent…`),g7=N(`<option>#`),_7=N(`<p class="text-text-dim text-[11px]">No key set — AI drafting disabled, manual drafting still works.`);function v7(){let e=sr(),t=_r(()=>({queryKey:[`settings`],queryFn:Tr,staleTime:0})),n=k(()=>t.data??{});async function r(t,n=!1){await Er(t),await e.invalidateQueries({queryKey:[`settings`]}),n&&(await e.invalidateQueries({queryKey:[`viewer`]}),await e.invalidateQueries({queryKey:[`teams`]}),await e.invalidateQueries({queryKey:[`agents`]}),await e.invalidateQueries({queryKey:[`my-issues`]}))}let i=k(()=>!!(n().linearApiKey||n().linearAccessToken)),a=_r(()=>({queryKey:[`viewer`],queryFn:uO,enabled:i(),retry:0})),o=_r(()=>({queryKey:[`teams`],queryFn:dO,enabled:i()})),s=_r(()=>({queryKey:[`linear-projects`],queryFn:xO,enabled:i()})),c=_r(()=>({queryKey:[`bridge-health`],queryFn:NO,retry:0})),[l,u]=T(!1),d=async()=>{try{await navigator.clipboard.writeText(JSON.stringify(k5(n()),null,2)+`
285
+ `),u(!0),setTimeout(()=>u(!1),1800)}catch{}},f=()=>{let e=c.data?.projectConfig;if(!e)return;let t={};for(let n of O5)e[n]!==void 0&&(t[n]=e[n]);r(t)},p=_r(()=>({queryKey:[`linear-labels`],queryFn:SO,enabled:i()})),m=_r(()=>({queryKey:[`agents`],queryFn:fO,enabled:i()})),[h,g]=T(``),[_,v]=T(!1),[y,b]=T(``);async function x(){let e=h().trim();if(e){v(!0),b(``);try{await r({linearApiKey:e},!0),await uO(),g(``)}catch{b(`Key rejected — could not verify. Check the key and try again.`),await r({linearApiKey:void 0},!0)}finally{v(!1)}}}let[S,C]=T(``),[w,E]=T(!1),[O,ee]=T(``);async function te(){let t=(S()||n().linearOauthClientId||``).trim();if(!t){ee(`Enter an OAuth client ID first.`);return}E(!0),ee(``);try{await M5(t),await e.invalidateQueries({queryKey:[`settings`]}),await e.invalidateQueries({queryKey:[`viewer`]}),await e.invalidateQueries({queryKey:[`teams`]}),await e.invalidateQueries({queryKey:[`agents`]}),await e.invalidateQueries({queryKey:[`my-issues`]})}catch(e){ee(e instanceof Error?e.message:`OAuth flow failed.`)}finally{E(!1)}}let[A,ne]=T(!1);async function re(){ne(!0);try{await N5(),await e.invalidateQueries({queryKey:[`settings`]}),await e.invalidateQueries({queryKey:[`viewer`]}),await e.invalidateQueries({queryKey:[`teams`]}),await e.invalidateQueries({queryKey:[`agents`]}),await e.invalidateQueries({queryKey:[`my-issues`]})}finally{ne(!1)}}let ie=xr?chrome.identity.getRedirectURL():null,ae=_r(()=>({queryKey:[`slack-channels`,n().slackToken],queryFn:()=>tk(n().slackToken),enabled:!!n().slackToken,retry:0,staleTime:6e4})),oe=k(()=>jx(n())),se=k(()=>{let e=oe();return e?`Drafting with ${e} — ${Px[e].fast} (fast) / ${Px[e].best} (best)`:null});return(()=>{var e=a7();return P(e,j(Rj,{title:`Workflow`,get children(){return[(()=>{var e=P5();return P(e,j(We,{each:[{id:`cloud`,label:`Cloud · Linear + Cursor`},{id:`local`,label:`Local · clipboard`}],children:e=>(()=>{var t=o7();return t.$$click=()=>void r({workflowMode:e.id}),P(t,()=>e.label),D(()=>st(t,`flex-1 rounded-[5px] px-2 py-1 text-[11.5px] font-medium transition-colors ${(n().workflowMode??`cloud`)===e.id?`bg-surface-3 text-text`:`text-text-dim hover:text-text cursor-pointer`}`)),t})()})),e})(),F5()]}}),null),P(e,j(Rj,{title:`Capture`,get children(){return[(()=>{var e=I5(),t=e.firstChild;return t.addEventListener(`change`,e=>void r({captureShots:e.currentTarget.checked||void 0})),D(()=>t.checked=!!n().captureShots),e})(),L5()]}}),null),P(e,j(Rj,{title:`Linear`,get children(){return j(M,{get when(){return i()},get fallback(){return(()=>{var e=u7();return P(e,j(Lj,{label:`Personal API key`,hint:`Create one at linear.app → Settings → API — fastest path.`,get children(){return[(()=>{var e=s7();return P(e,j(jj,{type:`password`,placeholder:`lin_api_…`,get value(){return h()},onInput:e=>g(e.currentTarget.value),"on:keydown":e=>{e.key===`Enter`&&x()}}),null),P(e,j(q,{variant:`primary`,get loading(){return _()},get disabled(){return!h().trim()},onClick:()=>void x(),class:`shrink-0`,children:`Connect`}),null),e})(),j(M,{get when(){return y()},get children(){return j(Hj,{get message(){return y()}})}})]}}),null),P(e,j(M,{when:xr,get children(){return[c7(),j(Lj,{label:`OAuth client ID`,get children(){return[(()=>{var e=s7();return P(e,j(jj,{placeholder:`your-client-id`,get value(){return S()||n().linearOauthClientId||``},onInput:e=>C(e.currentTarget.value)}),null),P(e,j(q,{variant:`ghost`,get loading(){return w()},onClick:()=>void te(),class:`shrink-0 whitespace-nowrap`,children:`Connect with OAuth`}),null),e})(),j(M,{get when(){return O()},get children(){return j(Hj,{get message(){return O()}})}}),(()=>{var e=l7(),t=e.firstChild.nextSibling.nextSibling;return P(t,ie),e})()]}})]}}),null),e})()},get children(){var e=z5(),t=e.firstChild;return P(t,j(M,{get when(){return!a.isLoading},get fallback(){return d7()},get children(){return j(M,{get when(){return a.data},get fallback(){return j(M,{get when(){return a.isError},get fallback(){return d7()},get children(){return j(Hj,{message:`Key rejected — reconnect`})}})},get children(){var e=R5(),t=e.firstChild.nextSibling,n=t.nextSibling.nextSibling;return P(t,()=>a.data.name),P(n,()=>a.data.email),e}})}})),P(e,j(q,{variant:`ghost`,get loading(){return A()},onClick:()=>void re(),class:`ml-2 shrink-0`,children:`Disconnect`}),null),e}})}}),null),P(e,j(M,{get when(){return i()},get children(){return j(Rj,{title:`Workspace`,get children(){return[j(Lj,{label:`Default team`,get children(){return j(Nj,{get value(){return n().defaultTeamId??``},onChange:e=>{let t=e.currentTarget.value;r({defaultTeamId:t||void 0})},get disabled(){return o.isLoading},get children(){return[B5(),j(M,{get when(){return o.data},get children(){return j(We,{get each(){return o.data},children:e=>(()=>{var t=f7(),r=t.firstChild,i=r.nextSibling;return i.nextSibling,P(t,()=>e.name,r),P(t,()=>e.key,i),D(()=>t.selected=e.id===n().defaultTeamId),D(()=>t.value=e.id),t})()})}})]}})}}),j(Lj,{label:`Default project`,hint:`Every issue created from the panel is filed into this project.`,get children(){return j(Nj,{get value(){return n().defaultProjectId??``},onChange:e=>void r({defaultProjectId:e.currentTarget.value||void 0}),get disabled(){return s.isLoading},get children(){return[(()=>{var e=V5();return D(()=>e.selected=!n().defaultProjectId),e})(),j(We,{get each(){return s.data??[]},children:e=>(()=>{var t=p7();return P(t,()=>e.name),D(()=>t.selected=e.id===n().defaultProjectId),D(()=>t.value=e.id),t})()})]}})}}),j(Lj,{label:`Default labels`,hint:`Applied to every issue created from the panel.`,get children(){var e=H5();return P(e,j(We,{get each(){return p.data??[]},children:e=>{let t=()=>(n().defaultLabelIds??[]).includes(e.id);return(()=>{var i=m7(),a=i.firstChild;return i.$$click=()=>{let i=n().defaultLabelIds??[];r({defaultLabelIds:t()?i.filter(t=>t!==e.id):[...i,e.id]})},P(i,()=>e.name,null),D(n=>{var r=`h-6 cursor-pointer rounded-full border px-2.5 text-[11px] font-medium transition-colors ${t()?`bg-accent-soft text-accent border-accent/40`:`bg-surface-2 text-text-dim border-border hover:bg-surface-3`}`,o=e.color;return r!==n.e&&st(i,n.e=r),o!==n.t&&dt(a,`background`,n.t=o),n},{e:void 0,t:void 0}),i})()}})),e}}),(()=>{var e=U5(),t=e.firstChild;return t.addEventListener(`change`,e=>void r({shareLinearKey:e.currentTarget.checked})),D(()=>t.checked=!!n().shareLinearKey),e})(),j(Lj,{label:`Staging branch`,hint:`Stage buttons on PRs merge the PR branch here — point your staging domain (e.g. preview.ahmedbanihani.com) at this branch in Vercel.`,get children(){return j(jj,{get value(){return n().stagingBranch??``},placeholder:`staging`,onChange:e=>void r({stagingBranch:e.currentTarget.value.trim()||void 0})})}}),j(Lj,{label:`Cursor agent`,hint:`App users in your workspace. Pick Cursor — requires the Cursor integration installed in Linear (workspace admin) with usage-based pricing enabled in Cursor.`,get children(){return j(M,{get when(){return $e(()=>!!m.data)()&&m.data.length===0},get fallback(){return j(Nj,{get value(){return n().cursorAgentId??``},onChange:e=>{let t=e.currentTarget.value;if(!t){r({cursorAgentId:void 0,cursorAgentName:void 0,cursorAgentUrl:void 0});return}let n=m.data?.find(e=>e.id===t);n&&r({cursorAgentId:n.id,cursorAgentName:n.displayName,cursorAgentUrl:n.url??void 0})},get disabled(){return m.isLoading},get children(){return[h7(),j(M,{get when(){return m.data},get children(){return j(We,{get each(){return m.data},children:e=>(()=>{var t=p7();return P(t,()=>e.displayName),D(()=>t.selected=e.id===n().cursorAgentId),D(()=>t.value=e.id),t})()})}})]}})},get children(){return W5()}})}}),j(Lj,{label:`Default repository`,hint:`Appended to delegated issues as [repo=…] so Cursor picks the right repo.`,get children(){return j(jj,{placeholder:`owner/repository`,get value(){return n().defaultRepo??``},onBlur:e=>{r({defaultRepo:e.currentTarget.value.trim()||void 0})}})}}),j(Lj,{label:`Cursor cloud model`,hint:`Appended as [model=…] — e.g. claude-opus-4-8, gpt-5.2, composer. Empty = Cursor's default.`,get children(){return j(jj,{placeholder:`Cursor's default`,get value(){return n().cursorModel??``},onBlur:e=>{r({cursorModel:e.currentTarget.value.trim()||void 0})}})}}),j(Lj,{label:`Agent instructions`,hint:`Appended to every issue as '### Agent instructions' and given to the AI draft. Add demo credentials (username/password) so the agent can log in, test, and record its video. Careful: credentials become visible to everyone who can read the issue.`,get children(){return[j(Mj,{rows:5,placeholder:gD,get value(){return n().issueTemplate??``},onBlur:e=>{r({issueTemplate:e.currentTarget.value.trim()||void 0})}}),G5()]}}),j(Lj,{label:`Dev server log URL`,hint:`Tail of your dev-server log attached to issues (and fed to AI drafts). Serve the log over HTTP: "dev:http": "next dev 2>&1 | tee public/dev-server.log" (gitignore it), then use /dev-server.log here. Empty = disabled.`,get children(){return j(jj,{placeholder:`/dev-server.log`,get value(){return n().logUrl??``},onBlur:e=>{r({logUrl:e.currentTarget.value.trim()||void 0})}})}}),j(Lj,{label:`Log lines to attach`,hint:`Trailing lines included in the issue (10–500).`,get children(){return j(jj,{type:`number`,min:`10`,max:`500`,placeholder:`100`,get value(){return n().logLines??``},onBlur:e=>{let t=Number(e.currentTarget.value);r({logLines:Number.isFinite(t)&&t>0?Math.min(500,Math.max(10,Math.round(t))):void 0})}})}}),j(Lj,{label:`Skills & memory paths`,hint:`One path per line. The cloud agent works in a full repo checkout, so committed paths (e.g. .claude/skills/apple-hig-design-principles) are readable directly — every issue gets a MANDATORY-reading section pointing at them. Repo-relative for cloud agents; absolute paths also work when you paste the issue into a local Claude Code session. Per project: these settings live per dev origin.`,get children(){return j(Mj,{rows:4,placeholder:`.claude/skills/apple-hig-design-principles
286
286
  .claude/CLAUDE.md
287
- docs/design-tokens.md`,get value(){return n().skillPaths??``},onBlur:e=>{r({skillPaths:e.currentTarget.value.trim()||void 0})}})}}),j(Lj,{label:`Test account`,hint:`The cloud agent logs into the app with this while testing and recording its demo. Added to every issue's Agent instructions. Use a throwaway account — it's visible to everyone who can read the issue.`,get children(){var e=H5();return P(e,j(jj,{placeholder:`Username or email (e.g. demo@yourapp.com)`,get value(){return n().testUsername??``},onBlur:e=>{r({testUsername:e.currentTarget.value.trim()||void 0})}}),null),P(e,j(jj,{type:`password`,placeholder:`Password`,get value(){return n().testPassword??``},onBlur:e=>{r({testPassword:e.currentTarget.value.trim()||void 0})}}),null),e}})]}})}}),null),P(e,j(M,{when:!xr,get children(){return j(Rj,{title:`Panel`,get children(){return[(()=>{var e=U5(),t=e.firstChild.nextSibling;return P(t,j(We,{each:[{id:`overlay`,label:`Overlay`},{id:`pinned`,label:`Beside page`}],children:e=>(()=>{var t=n7();return t.$$click=()=>void r({panelMode:e.id,panelPos:void 0}),P(t,()=>e.label),D(()=>st(t,`flex-1 rounded-[5px] px-2 py-0.5 text-[11.5px] font-medium transition-colors ${(n().panelMode??`overlay`)===e.id?`bg-surface-3 text-text`:`text-text-dim hover:text-text cursor-pointer`}`)),t})()})),e})(),(()=>{var e=W5(),t=e.firstChild.nextSibling;return P(t,j(We,{each:[`left`,`right`],children:e=>(()=>{var t=n7();return t.$$click=()=>void r({panelSide:e}),P(t,e===`left`?`Left`:`Right`),D(()=>st(t,`flex-1 rounded-[5px] px-2 py-0.5 text-[11.5px] font-medium transition-colors ${(n().panelSide??`right`)===e?`bg-surface-3 text-text`:`text-text-dim hover:text-text cursor-pointer`}`)),t})()})),e})()]}})}}),null),P(e,j(Rj,{title:`Local Claude Code`,get children(){return j(Lj,{label:`Bridge URL`,hint:'Run `npx linear-grab-bridge` in your repo\'s terminal (binds localhost only). Enables "Delegate to → Local Claude Code" in Draft, the Local tab, and relays blocked uploads to Linear storage.',get children(){return j(jj,{placeholder:`http://localhost:4577`,get value(){return n().bridgeUrl??``},onBlur:e=>{r({bridgeUrl:e.currentTarget.value.trim()||void 0})}})}})}}),null),P(e,j(Rj,{title:`Project config (.lineargrab.json)`,get children(){return[G5(),(()=>{var e=q5();return P(e,j(M,{get when(){return c.data?.projectConfig},get fallback(){return j(zj,{title:`No .lineargrab.json found at the bridge's cwd (or bridge offline / outdated)`,children:`not detected`})},get children(){return[j(zj,{class:`text-success`,children:`detected`}),j(q,{variant:`ghost`,class:`h-7 px-2 text-[11px]`,title:`Overwrite your local settings with every value from the repo's config`,onClick:f,children:`Apply all`})]}}),null),P(e,j(q,{variant:`ghost`,class:`h-7 px-2 text-[11px]`,get title(){return l()?`Copied!`:`Copy your current shareable settings as .lineargrab.json — commit it to the repo root`},onClick:()=>void d(),get children(){var e=K5();return P(e,()=>l()?`Copied ✓`:`Copy config`),e}}),null),e})()]}}),null),P(e,j(Rj,{title:`Asset uploads`,get children(){return[j(Lj,{label:`GitHub token`,hint:`Linear's storage blocks browser uploads in some browsers (Safari). With this set, GIFs/screenshots upload to your GitHub repo instead and embed automatically. Fine-grained PAT with Contents read/write on the assets repo.`,get children(){return j(jj,{type:`password`,placeholder:`github_pat_…`,get value(){return n().githubToken??``},onBlur:e=>{r({githubToken:e.currentTarget.value.trim()||void 0})}})}}),j(Lj,{label:`Assets repository`,hint:`owner/repo — must be PUBLIC so Linear (and agents) can render the images. Files land under linear-grab/.`,get children(){return j(jj,{placeholder:`ahmedbanihanibh/linear-grab-assets`,get value(){return n().githubAssetsRepo??``},onBlur:e=>{r({githubAssetsRepo:e.currentTarget.value.trim()||void 0})}})}})]}}),null),P(e,j(Rj,{title:`Notifications`,get children(){return[j(Lj,{label:`Slack bot token`,hint:`Bot token (xoxb-…) with chat:write + channels:read + files:write. New issues get announced with links + demo, and the AGENT receives the token to post its finished demo video itself.`,get children(){return j(jj,{type:`password`,placeholder:`xoxb-…`,get value(){return n().slackToken??``},onBlur:e=>{r({slackToken:e.currentTarget.value.trim()||void 0})}})}}),j(M,{get when(){return n().slackToken},get children(){return j(Lj,{label:`Slack channel`,get children(){return j(M,{get when(){return!ae.isError},get fallback(){return j(Hj,{message:`Couldn't list channels — check the token scopes (channels:read).`})},get children(){return j(Nj,{get value(){return n().slackChannelId??``},get disabled(){return ae.isLoading},onChange:e=>{let t=e.currentTarget.value,n=ae.data?.find(e=>e.id===t);r({slackChannelId:t||void 0,slackChannelName:n?.name})},get children(){return[J5(),j(We,{get each(){return ae.data??[]},children:e=>(()=>{var t=f7();return t.firstChild,P(t,()=>e.name,null),D(()=>t.selected=e.id===n().slackChannelId),D(()=>t.value=e.id),t})()})]}})}})}})}}),j(Lj,{label:`Telegram bot token`,hint:`From @BotFather. The agent also receives it to send the demo video (sendVideo).`,get children(){return j(jj,{type:`password`,placeholder:`123456:ABC-…`,get value(){return n().telegramToken??``},onBlur:e=>{r({telegramToken:e.currentTarget.value.trim()||void 0})}})}}),j(M,{get when(){return n().telegramToken},get children(){return j(Lj,{label:`Telegram chat ID`,hint:`Add the bot to your group/channel, send a message, then read the chat id from api.telegram.org/bot<token>/getUpdates.`,get children(){return j(jj,{placeholder:`-1001234567890`,get value(){return n().telegramChatId??``},onBlur:e=>{r({telegramChatId:e.currentTarget.value.trim()||void 0})}})}})}}),(()=>{var e=Y5(),t=e.firstChild;return t.addEventListener(`change`,e=>void r({notifyOnCreate:e.currentTarget.checked?void 0:!1})),D(()=>t.checked=n().notifyOnCreate!==!1),e})(),X5()]}}),null),P(e,j(Rj,{title:`AI providers`,get children(){return[j(Lj,{label:`OpenAI API key`,get children(){return j(jj,{type:`password`,placeholder:`sk-…`,get value(){return n().openaiKey??``},onBlur:e=>{r({openaiKey:e.currentTarget.value.trim()||void 0})}})}}),j(Lj,{label:`Anthropic API key`,get children(){return j(jj,{type:`password`,placeholder:`sk-ant-…`,get value(){return n().anthropicKey??``},onBlur:e=>{r({anthropicKey:e.currentTarget.value.trim()||void 0})}})}}),(()=>{var e=Z5(),t=e.firstChild.nextSibling.firstChild,i=t.nextSibling,a=i.nextSibling;return t.$$click=()=>void r({preferredProvider:void 0}),i.$$click=()=>void r({preferredProvider:`openai`}),a.$$click=()=>void r({preferredProvider:`anthropic`}),D(e=>{var r=`flex-1 rounded-[5px] px-2 py-0.5 text-[11.5px] font-medium transition-colors ${n().preferredProvider===void 0?`bg-surface-3 text-text`:`text-text-dim hover:text-text cursor-pointer`}`,o=`flex-1 rounded-[5px] px-2 py-0.5 text-[11.5px] font-medium transition-colors disabled:cursor-not-allowed ${n().preferredProvider===`openai`?`bg-surface-3 text-text`:`text-text-dim hover:text-text cursor-pointer disabled:text-text-faint`}`,s=!n().openaiKey,c=`flex-1 rounded-[5px] px-2 py-0.5 text-[11.5px] font-medium transition-colors disabled:cursor-not-allowed ${n().preferredProvider===`anthropic`?`bg-surface-3 text-text`:`text-text-dim hover:text-text cursor-pointer disabled:text-text-faint`}`,l=!n().anthropicKey;return r!==e.e&&st(t,e.e=r),o!==e.t&&st(i,e.t=o),s!==e.a&&(i.disabled=e.a=s),c!==e.o&&st(a,e.o=c),l!==e.i&&(a.disabled=e.i=l),e},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),e})(),(()=>{var e=$5();return P(e,j(M,{get when(){return se()},get fallback(){return p7()},get children(){var e=Q5();return P(e,se),e}})),e})()]}}),null),P(e,j(Rj,{title:`How it works`,get children(){return e7()}}),null),e})()}rt([`click`]);var h7=`linear-grab`,g7=`queries`,_7=[`my-issues`,`issue`,`sessions`,`teams`,`agents`];function v7(){return new Promise(e=>{try{let t=indexedDB.open(h7,1);t.onupgradeneeded=()=>t.result.createObjectStore(g7),t.onsuccess=()=>e(t.result),t.onerror=()=>e(null)}catch{e(null)}})}function y7(e){return typeof e[0]==`string`&&_7.includes(e[0])}async function b7(e){let t=await v7();if(!t)return()=>{};await new Promise(n=>{try{let r=t.transaction(g7,`readonly`).objectStore(g7).openCursor();r.onsuccess=()=>{let t=r.result;if(!t)return n();try{let{queryKey:n,data:r}=t.value;y7(n)&&e.getQueryData(n)===void 0&&e.setQueryData(n,r,{updatedAt:0})}catch{}t.continue()},r.onerror=()=>n()}catch{n()}});let n=new Map,r=e.getQueryCache().subscribe(r=>{if(r.type!==`updated`||r.action.type!==`success`)return;let{queryKey:i,queryHash:a}=r.query;if(!y7(i))return;let o=n.get(a);o&&clearTimeout(o),n.set(a,setTimeout(()=>{n.delete(a);try{let n=e.getQueryData(i);if(n===void 0)return;t.transaction(g7,`readwrite`).objectStore(g7).put({queryKey:i,data:n},a)}catch{}},400))});return()=>{r();for(let e of n.values())clearTimeout(e);t.close()}}Br();var x7=N(`<svg viewBox="0 0 100 100"fill=currentColor aria-hidden><path d="M1.22541 61.5228c-.2225-.9485.90748-1.5459 1.59638-.857L39.3342 97.1782c.6889.6889.0915 1.8189-.857 1.5964C20.0515 94.4522 5.54779 79.9485 1.22541 61.5228ZM.00189135 46.8891c-.01764375.2833.08887215.5599.28957165.7606L52.3503 99.7085c.2007.2007.4773.3075.7606.2896 2.3692-.1476 4.6938-.46 6.9624-.9259.7645-.157 1.0301-1.0963.4782-1.6481L2.57595 39.4485c-.55186-.5519-1.49117-.2863-1.648174.4782-.465915 2.2686-.77832 4.5932-.92588465 6.9624ZM4.21093 29.7054c-.16649.3738-.08169.8106.20765 1.1l64.77602 64.776c.2894.2894.7262.3742 1.1.2077 1.7861-.7956 3.5171-1.6927 5.1855-2.684.5521-.328.6373-1.0867.1832-1.5407L8.43566 24.3367c-.45409-.4541-1.21271-.3689-1.54074.1832-.99132 1.6684-1.88843 3.3994-2.68399 5.1855ZM12.6587 18.074c-.3701-.3701-.393-.9637-.0443-1.3541C21.7795 6.45931 35.1114 0 49.9519 0 77.5927 0 100 22.4073 100 50.0481c0 14.8405-6.4593 28.1724-16.7199 37.3375-.3903.3487-.984.3258-1.3541-.0443L12.6587 18.074Z">`),S7=N(`<button><svg width=12 height=12 viewBox="0 0 16 16"fill=none stroke=currentColor stroke-width=1.5 aria-hidden><rect x=1.5 y=2.5 width=13 height=11 rx=1.5></rect><path d="M10 2.5v11">`),C7=N(`<button aria-label="Minimize to launcher"title="Minimize to launcher"class="text-text-dim hover:text-text hover:bg-surface-3 grid size-6 shrink-0 cursor-pointer place-items-center rounded-md text-[15px] leading-none transition-colors">–`),w7=N(`<div class="bg-bg text-text flex h-full flex-col"><header><span class="text-accent mr-0.5 inline-flex shrink-0"title="Linear Grab"></span><div class="no-scrollbar flex min-w-0 flex-1 items-center gap-1 overflow-x-auto"></div></header><main class="min-h-0 flex-1"><div class=h-full></div><div class=h-full></div><div class=h-full></div><div class=h-full></div><div class=h-full></div><div class=h-full></div><div class=h-full></div><div class=h-full></div><div class=h-full></div><div class=h-full>`),T7=N(`<button>`),E7=[{id:`draft`,label:`Draft`},{id:`capture`,label:`Capture`},{id:`activity`,label:`Activity`},{id:`running`,label:`Running`},{id:`cloud`,label:`Cloud`},{id:`local`,label:`Local`},{id:`prs`,label:`PRs`},{id:`design`,label:`Design`},{id:`renders`,label:`Renders`},{id:`settings`,label:`Settings`}],D7=new Set;function O7(e,t,n){if(D7.has(e)||typeof Notification>`u`)return;D7.add(e);let r=()=>new Notification(t,{body:n});Notification.permission===`granted`?r():Notification.permission==="default"&&Notification.requestPermission().then(e=>e===`granted`&&r())}function k7(){setInterval(()=>{PO().then(e=>{for(let t of e){if(t.status!==`running`)continue;let e=t.lastEventAt??t.startedAt;Date.now()-e>10*6e4&&O7(`local-stuck:${t.id}:${e}`,`Local agent may be stuck`,`${t.title.slice(0,80)} — no output for ${Math.round((Date.now()-e)/6e4)}m. Nudge or interrupt it in the Local tab.`)}}).catch(()=>{}),_O().then(e=>{for(let t of e)/awaitingInput|elicit/i.test(t.status)&&O7(`cloud-input:${t.id}`,`Cloud agent needs input`,`${t.issue?.identifier??`Session`} — ${t.issue?.title?.slice(0,80)??`a Cursor agent`} is waiting for you.`)}).catch(()=>{})},6e4)}k7();var A7=new gr({defaultOptions:{queries:{retry:1,refetchOnWindowFocus:!1,staleTime:5e3}}});function j7(e){return(()=>{var t=x7();return D(n=>{var r=e.size??14,i=e.size??14;return r!==n.e&&it(t,`width`,n.e=r),i!==n.t&&it(t,`height`,n.t=i),n},{e:void 0,t:void 0}),t})()}function M7(e){let[t,n]=T(`draft`),r=()=>{A7.invalidateQueries({queryKey:[`grab`]}),lj()===`capture`&&n(`capture`),e.onGrab?.()};return O(()=>{let e=rj();e&&n(e)}),ie(()=>{let e=b7(A7),t=XZ(r),n=()=>{YO().then(y$),HO(),NO().then(async e=>{if(!e.projectConfig)return;let t=E5(await Tr(),e.projectConfig);t&&await Er(t)}).catch(()=>{})};n();let i=Mr(e=>{e===`settings`&&(A7.invalidateQueries({queryKey:[`settings`]}),n()),e===`grab`&&r()});ae(()=>{t(),i(),e.then(e=>e())})}),j(cr,{client:A7,get children(){var r=w7(),i=r.firstChild,a=i.firstChild,o=a.nextSibling,s=i.nextSibling.firstChild,c=s.nextSibling,l=c.nextSibling,u=l.nextSibling,d=u.nextSibling,f=d.nextSibling,p=f.nextSibling,m=p.nextSibling,h=m.nextSibling,g=h.nextSibling;return i.$$pointerdown=t=>e.onHeaderPointerDown?.(t),P(a,j(j7,{size:14})),P(o,j(We,{each:E7,children:e=>(()=>{var r=T7();return r.$$click=()=>n(e.id),P(r,()=>e.label),D(()=>st(r,`h-6 shrink-0 rounded-md px-2 text-[12px] font-medium whitespace-nowrap transition-colors ${t()===e.id?`bg-surface-3 text-text`:`text-text-dim hover:text-text cursor-pointer`}`)),r})()})),P(i,j(M,{get when(){return e.onTogglePin},get children(){var t=S7();return t.$$click=()=>e.onTogglePin?.(),D(n=>{var r=e.pinned?`Switch to overlay`:`Dock beside page`,i=e.pinned?`Overlay the page`:`Dock beside page (squeezes the app, DevTools-style)`,a=`hover:bg-surface-3 grid size-6 shrink-0 cursor-pointer place-items-center rounded-md transition-colors ${e.pinned?`text-accent`:`text-text-dim hover:text-text`}`;return r!==n.e&&it(t,`aria-label`,n.e=r),i!==n.t&&it(t,`title`,n.t=i),a!==n.a&&st(t,n.a=a),n},{e:void 0,t:void 0,a:void 0}),t}}),null),P(i,j(M,{get when(){return e.onClose},get children(){var t=C7();return t.$$click=()=>e.onClose?.(),t}}),null),P(s,j(wM,{onCreated:()=>n(`activity`)})),P(c,j(TQ,{})),P(l,j(_1,{})),P(u,j(B1,{})),P(d,j(P1,{})),P(f,j(T0,{})),P(p,j(B0,{onOpenIssue:()=>n(`activity`)})),P(m,j(H3,{})),P(h,j(C5,{})),P(g,j(m7,{})),D(n=>{var r=`border-border bg-surface flex shrink-0 items-center gap-1 border-b px-2 py-1.5 select-none ${e.onHeaderPointerDown?`cursor-grab active:cursor-grabbing`:``}`,a=t()!==`draft`,o=t()!==`capture`,_=t()!==`activity`,v=t()!==`running`,y=t()!==`cloud`,b=t()!==`local`,x=t()!==`prs`,S=t()!==`design`,C=t()!==`renders`,w=t()!==`settings`;return r!==n.e&&st(i,n.e=r),a!==n.t&&s.classList.toggle(`hidden`,n.t=a),o!==n.a&&c.classList.toggle(`hidden`,n.a=o),_!==n.o&&l.classList.toggle(`hidden`,n.o=_),v!==n.i&&u.classList.toggle(`hidden`,n.i=v),y!==n.n&&d.classList.toggle(`hidden`,n.n=y),b!==n.s&&f.classList.toggle(`hidden`,n.s=b),x!==n.h&&p.classList.toggle(`hidden`,n.h=x),S!==n.r&&m.classList.toggle(`hidden`,n.r=S),C!==n.d&&h.classList.toggle(`hidden`,n.d=C),w!==n.l&&g.classList.toggle(`hidden`,n.l=w),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0}),r}})}rt([`pointerdown`,`click`]);var N7=`/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */
288
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-contain-size:initial;--tw-contain-layout:initial;--tw-contain-paint:initial;--tw-contain-style:initial}}}@layer theme{:root,:host{--font-sans:"Inter", ui-sans-serif, system-ui, -apple-system, sans-serif;--font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--font-mono:ui-monospace, "SF Mono", Menlo, monospace;--color-red-500:oklch(63.7% .237 25.331);--color-white:#fff;--spacing:.25rem;--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-wide:.025em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:4px;--radius-md:6px;--radius-lg:10px;--radius-xl:.75rem;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-bg:#0b0c0e;--color-surface:#141517;--color-surface-2:#1c1d21;--color-surface-3:#24262b;--color-border:#26282d;--color-border-strong:#34363d;--color-text:#e8e9eb;--color-text-dim:#8b8e98;--color-text-faint:#5c5f6a;--color-accent:#5e6ad2;--color-accent-hover:#6e79e0;--color-accent-soft:#5e6ad226;--color-success:#4cb782;--color-warn:#f2c94c;--color-danger:#eb5757;--color-danger-soft:#eb575726}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{inset-block:0}.-top-0{top:0}.-top-0\\.5{top:calc(var(--spacing) * -.5)}.top-0{top:0}.top-0\\.5{top:calc(var(--spacing) * .5)}.top-1{top:var(--spacing)}.top-1\\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.top-\\[2px\\]{top:2px}.top-full{top:100%}.-right-0{right:0}.-right-0\\.5{right:calc(var(--spacing) * -.5)}.right-0{right:0}.right-0\\.5{right:calc(var(--spacing) * .5)}.right-4{right:calc(var(--spacing) * 4)}.right-full{right:100%}.bottom-0{bottom:0}.bottom-1{bottom:var(--spacing)}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-\\[2px\\]{bottom:2px}.bottom-full{bottom:100%}.-left-\\[13\\.5px\\]{left:-13.5px}.left-0{left:0}.left-1{left:var(--spacing)}.left-1\\/2{left:50%}.left-\\[5px\\]{left:5px}.left-full{left:100%}.z-1{z-index:1}.z-10{z-index:10}.z-\\[2147483645\\]{z-index:2147483645}.z-\\[2147483646\\]{z-index:2147483646}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-m-0{margin:0}.-m-0\\.5{margin:calc(var(--spacing) * -.5)}.-m-4{margin:calc(var(--spacing) * -4)}.m-0{margin:0}.-mx-2{margin-inline:calc(var(--spacing) * -2)}.-my-1{margin-block:calc(var(--spacing) * -1)}.-my-1\\.5{margin-block:calc(var(--spacing) * -1.5)}.mt-0{margin-top:0}.mt-0\\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-px{margin-top:1px}.mr-0{margin-right:0}.mr-0\\.5{margin-right:calc(var(--spacing) * .5)}.mr-1{margin-right:var(--spacing)}.mr-1\\.5{margin-right:calc(var(--spacing) * 1.5)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-2\\.5{margin-right:calc(var(--spacing) * 2.5)}.-mb-4{margin-bottom:calc(var(--spacing) * -4)}.mb-0{margin-bottom:0}.mb-0\\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:var(--spacing)}.mb-1\\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-2\\.5{margin-bottom:calc(var(--spacing) * 2.5)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-2\\.5{margin-left:calc(var(--spacing) * 2.5)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.ml-px{margin-left:1px}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-5{-webkit-line-clamp:5;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.size-0{width:0;height:0}.size-1{width:var(--spacing);height:var(--spacing)}.size-1\\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-\\[9px\\]{width:9px;height:9px}.size-\\[12px\\]{width:12px;height:12px}.size-\\[16px\\]{width:16px;height:16px}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-16{height:calc(var(--spacing) * 16)}.h-\\[8px\\]{height:8px}.h-\\[17px\\]{height:17px}.h-\\[18px\\]{height:18px}.h-\\[20px\\]{height:20px}.h-\\[24px\\]{height:24px}.h-fit{height:fit-content}.h-full{height:100%}.h-screen{height:100vh}.max-h-32{max-height:calc(var(--spacing) * 32)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-44{max-height:calc(var(--spacing) * 44)}.max-h-56{max-height:calc(var(--spacing) * 56)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-\\[28rem\\]{max-height:28rem}.max-h-\\[var\\(--rg-edit-list-max-h\\)\\]{max-height:var(--rg-edit-list-max-h)}.min-h-0{min-height:0}.min-h-4{min-height:calc(var(--spacing) * 4)}.min-h-\\[2lh\\]{min-height:2lh}.min-h-\\[28px\\]{min-height:28px}.w-1{width:var(--spacing)}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-16{width:calc(var(--spacing) * 16)}.w-28{width:calc(var(--spacing) * 28)}.w-72{width:calc(var(--spacing) * 72)}.w-\\[2px\\]{width:2px}.w-\\[Npx\\]{width:Npx}.w-\\[calc\\(100\\%\\+16px\\)\\]{width:calc(100% + 16px)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-\\[55\\%\\]{max-width:55%}.max-w-\\[100vw\\]{max-width:100vw}.max-w-\\[110px\\]{max-width:110px}.max-w-\\[280px\\]{max-width:280px}.max-w-full{max-width:100%}.min-w-0{min-width:0}.min-w-\\[3\\.5ch\\]{min-width:3.5ch}.min-w-\\[3ch\\]{min-width:3ch}.min-w-\\[4ch\\]{min-width:4ch}.min-w-\\[5ch\\]{min-width:5ch}.min-w-\\[6ch\\]{min-width:6ch}.min-w-\\[7ch\\]{min-width:7ch}.min-w-\\[8ch\\]{min-width:8ch}.min-w-\\[10ch\\]{min-width:10ch}.min-w-\\[12ch\\]{min-width:12ch}.min-w-\\[36px\\]{min-width:36px}.min-w-\\[52px\\]{min-width:52px}.min-w-\\[100px\\]{min-width:100px}.min-w-\\[150px\\]{min-width:150px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-rotate-90{rotate:-90deg}.rotate-0{rotate:0deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.list-decimal{list-style-type:decimal}.grid-cols-\\[0fr\\]{grid-template-columns:0fr}.grid-cols-\\[1fr\\]{grid-template-columns:1fr}.grid-rows-\\[0fr\\]{grid-template-rows:0fr}.grid-rows-\\[1fr\\]{grid-template-rows:1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:0}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-\\[5px\\]{gap:5px}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-clip{overflow:clip}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\\[1px\\]{border-radius:1px}.rounded-\\[3px\\]{border-radius:3px}.rounded-\\[4px\\]{border-radius:4px}.rounded-\\[5px\\]{border-radius:5px}.rounded-\\[6px\\]{border-radius:6px}.rounded-\\[13px\\]{border-radius:13px}.rounded-\\[14px\\]{border-radius:14px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-\\[10px\\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-l-\\[10px\\]{border-top-left-radius:10px;border-bottom-left-radius:10px}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-tl{border-top-left-radius:.25rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-r-\\[10px\\]{border-top-right-radius:10px;border-bottom-right-radius:10px}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-tr{border-top-right-radius:.25rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-b-\\[6px\\]{border-bottom-right-radius:6px;border-bottom-left-radius:6px}.rounded-b-\\[10px\\]{border-bottom-right-radius:10px;border-bottom-left-radius:10px}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.\\[border-width\\:0\\.5px\\]{border-width:.5px}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-4{border-top-style:var(--tw-border-style);border-top-width:4px}.\\[border-top-width\\:0\\.5px\\]{border-top-width:.5px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-\\[var\\(--rg-border-button\\)\\]{border-color:var(--rg-border-button)}.border-accent{border-color:var(--color-accent)}.border-accent\\/40{border-color:#5e6ad266}@supports (color:color-mix(in lab, red, red)){.border-accent\\/40{border-color:color-mix(in oklab, var(--color-accent) 40%, transparent)}}.border-border{border-color:var(--color-border)}.border-danger{border-color:var(--color-danger)}.border-danger\\/40{border-color:#eb575766}@supports (color:color-mix(in lab, red, red)){.border-danger\\/40{border-color:color-mix(in oklab, var(--color-danger) 40%, transparent)}}.border-success{border-color:var(--color-success)}.border-success\\/40{border-color:#4cb78266}@supports (color:color-mix(in lab, red, red)){.border-success\\/40{border-color:color-mix(in oklab, var(--color-success) 40%, transparent)}}.border-text-dim{border-color:var(--color-text-dim)}.border-transparent{border-color:#0000}.border-warn{border-color:var(--color-warn)}.border-warn\\/40{border-color:#f2c94c66}@supports (color:color-mix(in lab, red, red)){.border-warn\\/40{border-color:color-mix(in oklab, var(--color-warn) 40%, transparent)}}.border-t-\\[var\\(--rg-border-subtle\\)\\]{border-top-color:var(--rg-border-subtle)}.border-t-transparent{border-top-color:#0000}.bg-\\[var\\(--rg-error-bg\\)\\]{background-color:var(--rg-error-bg)}.bg-\\[var\\(--rg-panel-bg\\)\\]{background-color:var(--rg-panel-bg)}.bg-\\[var\\(--rg-submit-bg\\)\\]{background-color:var(--rg-submit-bg)}.bg-\\[var\\(--rg-surface-active\\)\\]{background-color:var(--rg-surface-active)}.bg-\\[var\\(--rg-surface-hover\\)\\]{background-color:var(--rg-surface-hover)}.bg-\\[var\\(--rg-text-primary\\)\\]{background-color:var(--rg-text-primary)}.bg-\\[var\\(--rg-text-secondary\\)\\]{background-color:var(--rg-text-secondary)}.bg-accent{background-color:var(--color-accent)}.bg-accent-soft{background-color:var(--color-accent-soft)}.bg-bg{background-color:var(--color-bg)}.bg-bg\\/80{background-color:#0b0c0ecc}@supports (color:color-mix(in lab, red, red)){.bg-bg\\/80{background-color:color-mix(in oklab, var(--color-bg) 80%, transparent)}}.bg-border{background-color:var(--color-border)}.bg-current{background-color:currentColor}.bg-danger{background-color:var(--color-danger)}.bg-danger-soft{background-color:var(--color-danger-soft)}.bg-danger\\/10{background-color:#eb57571a}@supports (color:color-mix(in lab, red, red)){.bg-danger\\/10{background-color:color-mix(in oklab, var(--color-danger) 10%, transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-success{background-color:var(--color-success)}.bg-surface{background-color:var(--color-surface)}.bg-surface-2{background-color:var(--color-surface-2)}.bg-surface-3{background-color:var(--color-surface-3)}.bg-text-faint{background-color:var(--color-text-faint)}.bg-transparent{background-color:#0000}.bg-warn{background-color:var(--color-warn)}.bg-warn\\/10{background-color:#f2c94c1a}@supports (color:color-mix(in lab, red, red)){.bg-warn\\/10{background-color:color-mix(in oklab, var(--color-warn) 10%, transparent)}}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:0}.p-0\\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\\.5{padding:calc(var(--spacing) * 2.5)}.p-6{padding:calc(var(--spacing) * 6)}.px-0{padding-inline:0}.px-0\\.25{padding-inline:calc(var(--spacing) * .25)}.px-1{padding-inline:var(--spacing)}.px-1\\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-\\[3px\\]{padding-inline:3px}.py-0{padding-block:0}.py-0\\.5{padding-block:calc(var(--spacing) * .5)}.py-0\\.25{padding-block:calc(var(--spacing) * .25)}.py-1{padding-block:var(--spacing)}.py-1\\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-px{padding-block:1px}.pt-0{padding-top:0}.pt-0\\.5{padding-top:calc(var(--spacing) * .5)}.pt-1{padding-top:var(--spacing)}.pt-1\\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-1{padding-right:var(--spacing)}.pr-1\\.5{padding-right:calc(var(--spacing) * 1.5)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pb-1{padding-bottom:var(--spacing)}.pb-1\\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pl-0{padding-left:0}.pl-0\\.5{padding-left:calc(var(--spacing) * .5)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-2\\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-end{text-align:end}.text-justify{text-align:justify}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.font-serif{font-family:var(--font-serif)}.text-\\[9\\.5px\\]{font-size:9.5px}.text-\\[9px\\]{font-size:9px}.text-\\[10\\.5px\\]{font-size:10.5px}.text-\\[10px\\]{font-size:10px}.text-\\[11\\.5px\\]{font-size:11.5px}.text-\\[11px\\]{font-size:11px}.text-\\[12\\.5px\\]{font-size:12.5px}.text-\\[12px\\]{font-size:12px}.text-\\[13px\\]{font-size:13px}.text-\\[15px\\]{font-size:15px}.leading-3{--tw-leading:calc(var(--spacing) * 3);line-height:calc(var(--spacing) * 3)}.leading-3\\.5{--tw-leading:calc(var(--spacing) * 3.5);line-height:calc(var(--spacing) * 3.5)}.leading-4{--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-normal{overflow-wrap:normal;word-break:normal}.break-words,.wrap-break-word{overflow-wrap:break-word}.break-all{word-break:break-all}.break-keep{word-break:keep-all}.text-ellipsis{text-overflow:ellipsis}.whitespace-break-spaces{white-space:break-spaces}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.text-\\[var\\(--rg-error-text\\)\\]{color:var(--rg-error-text)}.text-\\[var\\(--rg-submit-fg\\)\\]{color:var(--rg-submit-fg)}.text-\\[var\\(--rg-text-primary\\)\\]{color:var(--rg-text-primary)}.text-\\[var\\(--rg-text-primary-85\\)\\]{color:var(--rg-text-primary-85)}.text-\\[var\\(--rg-text-secondary\\)\\]{color:var(--rg-text-secondary)}.text-accent{color:var(--color-accent)}.text-danger{color:var(--color-danger)}.text-success{color:var(--color-success)}.text-text{color:var(--color-text)}.text-text-dim{color:var(--color-text-dim)}.text-text-faint{color:var(--color-text-faint)}.text-warn{color:var(--color-warn)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.lining-nums{--tw-numeric-figure:lining-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.oldstyle-nums{--tw-numeric-figure:oldstyle-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.proportional-nums{--tw-numeric-spacing:proportional-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.slashed-zero{--tw-slashed-zero:slashed-zero;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.accent-accent{accent-color:var(--color-accent)}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.\\[box-shadow\\:var\\(--rg-shadow\\)\\]{box-shadow:var(--rg-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.\\[filter\\:var\\(--rg-drop-shadow\\)\\]{filter:var(--rg-drop-shadow)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[grid-template-columns\\]{transition-property:grid-template-columns;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[grid-template-rows\\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[opacity\\,transform\\]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[padding\\,border-radius\\,transform\\]{transition-property:padding,border-radius,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[top\\,left\\,width\\,height\\,opacity\\,border-radius\\]{transition-property:top,left,width,height,opacity,border-radius;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[transform\\,color\\]{transition-property:transform,color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[transform\\,opacity\\]{transition-property:transform,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.delay-\\[80ms\\]{transition-delay:80ms}.duration-60{--tw-duration:60ms;transition-duration:60ms}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-120{--tw-duration:.12s;transition-duration:.12s}.duration-140{--tw-duration:.14s;transition-duration:.14s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-180{--tw-duration:.18s;transition-duration:.18s}.duration-220{--tw-duration:.22s;transition-duration:.22s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-400{--tw-duration:.4s;transition-duration:.4s}.ease-\\[cubic-bezier\\(0\\,0\\,0\\.2\\,1\\)\\]{--tw-ease:cubic-bezier(0,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.will-change-\\[opacity\\,transform\\]{will-change:opacity,transform}.will-change-transform{will-change:transform}.contain-layout{--tw-contain-layout:layout;contain:var(--tw-contain-size,) var(--tw-contain-layout,) var(--tw-contain-paint,) var(--tw-contain-style,)}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}.\\[corner-shape\\:superellipse\\(1\\.25\\)\\]{corner-shape:superellipse(1.25)}.\\[font-synthesis\\:none\\]{font-synthesis:none}.group-open\\:rotate-90:is(:where(.group):is([open],:popover-open,:open) *){rotate:90deg}@media (hover:hover){.group-hover\\:text-\\[var\\(--rg-text-primary\\)\\]:is(:where(.group):hover *){color:var(--rg-text-primary)}.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\\:text-text-faint::placeholder{color:var(--color-text-faint)}@media (hover:hover){.hover\\:bg-\\[var\\(--rg-error-bg-hover\\)\\]:hover{background-color:var(--rg-error-bg-hover)}.hover\\:bg-\\[var\\(--rg-surface-active\\)\\]:hover{background-color:var(--rg-surface-active)}.hover\\:bg-\\[var\\(--rg-surface-hover\\)\\]:hover{background-color:var(--rg-surface-hover)}.hover\\:bg-accent-hover:hover{background-color:var(--color-accent-hover)}.hover\\:bg-accent\\/50:hover{background-color:#5e6ad280}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-accent\\/50:hover{background-color:color-mix(in oklab, var(--color-accent) 50%, transparent)}}.hover\\:bg-danger\\/30:hover{background-color:#eb57574d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-danger\\/30:hover{background-color:color-mix(in oklab, var(--color-danger) 30%, transparent)}}.hover\\:bg-surface-2:hover{background-color:var(--color-surface-2)}.hover\\:bg-surface-3:hover{background-color:var(--color-surface-3)}.hover\\:text-\\[var\\(--rg-text-primary\\)\\]:hover{color:var(--rg-text-primary)}.hover\\:text-accent:hover{color:var(--color-accent)}.hover\\:text-danger:hover{color:var(--color-danger)}.hover\\:text-text:hover{color:var(--color-text)}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:opacity-80:hover{opacity:.8}}.focus\\:border-accent:focus{border-color:var(--color-accent)}.active\\:cursor-grabbing:active{cursor:grabbing}.active\\:bg-accent:active{background-color:var(--color-accent)}.active\\:transition-none:active{transition-property:none}.disabled\\:cursor-default:disabled{cursor:default}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:bg-surface-3:disabled{background-color:var(--color-surface-3)}.disabled\\:text-text-faint:disabled{color:var(--color-text-faint)}.disabled\\:opacity-40:disabled{opacity:.4}@media (hover:hover){.disabled\\:hover\\:bg-surface-2:disabled:hover{background-color:var(--color-surface-2)}}.data-\\[state\\=on\\]\\:transition-none[data-state=on],.data-\\[state\\=open\\]\\:transition-none[data-state=open],.data-\\[state\\=…\\]\\:transition-none[data-state=…]{transition-property:none}}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=light],:host([data-theme=light]){--color-bg:#fbfbfc;--color-surface:#fff;--color-surface-2:#f4f4f6;--color-surface-3:#e9e9ee;--color-border:#e2e2e8;--color-border-strong:#cfcfd8;--color-text:#1b1c20;--color-text-dim:#5c5f6a;--color-text-faint:#9a9da8;--color-accent-soft:#5e6ad21f;--color-danger-soft:#eb57571a;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:light){:root:not([data-theme=dark]){--color-bg:#fbfbfc;--color-surface:#fff;--color-surface-2:#f4f4f6;--color-surface-3:#e9e9ee;--color-border:#e2e2e8;--color-border-strong:#cfcfd8;--color-text:#1b1c20;--color-text-dim:#5c5f6a;--color-text-faint:#9a9da8;--color-accent-soft:#5e6ad21f;--color-danger-soft:#eb57571a;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}}body{background-color:var(--color-bg);font-family:var(--font-sans);color:var(--color-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-width:320px;margin:0;font-size:13px}@keyframes geist-spinner-fade{0%{opacity:1}to{opacity:.15}}[data-tip]{position:relative}[data-tip]:hover:after{content:attr(data-tip);color:#fff;white-space:nowrap;text-overflow:ellipsis;pointer-events:none;z-index:60;background:#1b1c20;border-radius:6px;max-width:260px;padding:3px 8px;font-size:10.5px;font-weight:500;line-height:1.35;position:absolute;bottom:calc(100% + 6px);left:50%;overflow:hidden;transform:translate(-50%);box-shadow:0 4px 12px #0000004d}[data-tip][data-tip-pos~=right]:hover:after{left:0;transform:none}[data-tip][data-tip-pos~=left]:hover:after{left:auto;right:0;transform:none}[data-tip][data-tip-pos~=bottom]:hover:after{top:calc(100% + 6px);bottom:auto}.no-scrollbar{scrollbar-width:none}.no-scrollbar::-webkit-scrollbar{display:none}.lg-md p{margin:0 0 6px}.lg-md p:last-child{margin-bottom:0}.lg-md a{color:var(--color-accent);word-break:break-all;text-decoration:none}.lg-md a:hover{text-decoration:underline}.lg-md code{background:var(--color-surface-2);border:1px solid var(--color-border);font-family:var(--font-mono);border-radius:4px;padding:0 4px;font-size:11px}.lg-md pre{background:var(--color-surface-2);border:1px solid var(--color-border);border-radius:6px;margin:6px 0;padding:8px;overflow-x:auto}.lg-md pre code{white-space:pre;background:0 0;border:none;padding:0;font-size:11px}.lg-md ul,.lg-md ol{flex-direction:column;gap:2px;margin:4px 0 6px;padding-left:18px;display:flex}.lg-md ul{list-style:outside}.lg-md ol{list-style:decimal}.lg-md h4{margin:8px 0 4px;font-size:12px;font-weight:600}.lg-md lg-media{display:block}.lg-md lg-media img,.lg-md lg-media video{border:1px solid var(--color-border);border-radius:6px;max-width:100%;margin:4px 0}.lg-md video{border:1px solid var(--color-border);background:#000;border-radius:6px;max-width:100%;margin:4px 0}.lg-md img{border:1px solid var(--color-border);border-radius:6px;max-width:100%;margin:4px 0}.lg-md strong{font-weight:600}*{scrollbar-width:thin;scrollbar-color:var(--color-border-strong) transparent}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:var(--color-border-strong);border-radius:4px}::-webkit-scrollbar-track{background:0 0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-contain-size{syntax:"*";inherits:false}@property --tw-contain-layout{syntax:"*";inherits:false}@property --tw-contain-paint{syntax:"*";inherits:false}@property --tw-contain-style{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}`;Br();var P7=N(`<span aria-hidden class="bg-danger size-2 shrink-0 animate-pulse rounded-full">`),F7=N(`<span class="text-text min-w-[5ch] text-[11px] font-medium tabular-nums">`),I7=N(`<button class="bg-accent hover:bg-accent-hover h-7 cursor-pointer rounded-full px-2.5 text-[11px] font-medium text-white transition-colors"><span class="inline-block min-w-[4ch] text-center">Stop`),L7=N(`<p class="text-warn px-1.5 pt-1 pb-1.5 text-[10.5px] font-semibold tracking-wide uppercase">Needs review`),R7=N(`<div><p class="text-text-dim px-1.5 pt-1 pb-1.5 text-[10.5px] font-semibold tracking-wide uppercase">Running agents`),z7=N(`<div class="fixed z-[2147483646] select-none"><div class="bg-surface border-border text-text flex h-9 cursor-grab items-center gap-1 rounded-full border py-1 pr-1 pl-2.5 font-sans shadow-lg active:cursor-grabbing">`),B7=N(`<div><div title="Drag to resize">`),V7=N(`<button title="Open Linear Grab"aria-label="Open Linear Grab"class="text-accent hover:opacity-80 inline-flex cursor-pointer items-center gap-1.5">`),H7=N(`<span class="bg-border h-4 w-px"aria-hidden>`),U7=N(`<span aria-hidden class="bg-warn size-2 rounded-full">`),W7=N(`<span class="text-warn min-w-[3.5ch] text-left text-[11px] font-medium tabular-nums"> rev`),G7=N(`<button title="Running agents"aria-label="Running agents"class="hover:bg-surface-2 flex h-7 cursor-pointer items-center gap-1.5 rounded-full px-2 transition-colors"><span aria-hidden></span><span>`),K7=N(`<span aria-hidden class="bg-accent size-2 shrink-0 animate-pulse rounded-full">`),q7=N(`<span class="text-text min-w-[3ch] text-[11px] font-medium tabular-nums">s`),J7=N(`<span class="text-text-dim min-w-[7ch] text-[11px] tabular-nums"> states`),Y7=N(`<p class="text-text-faint px-1.5 pb-1.5 text-[11.5px]">No agents running right now.`),X7=N(`<button class="hover:bg-surface-2 flex w-full cursor-pointer flex-col gap-0.5 rounded-md px-1.5 py-1.5 text-left transition-colors"><span class="flex min-w-0 items-center gap-1.5"><span aria-hidden class="size-1.5 shrink-0 rounded-full"></span><span class="font-mono text-text-dim shrink-0 text-[10.5px]"></span><span class="text-text truncate text-[11.5px]"></span></span><span class="text-text-faint pl-3 text-[10.5px] tabular-nums"> · <!> · `);function Z7(e={}){if(typeof window>`u`||window.__LINEAR_GRAB_PAGE__)return;window.__LINEAR_GRAB_PAGE__=!0;let t=()=>{uk(),z2(),Y4(),R8(),JZ();let t=document.createElement(`div`);t.id=`linear-grab-root`,document.body.appendChild(t);let n=e=>{let n=e.composedPath();if(!n.includes(t))return;e.stopImmediatePropagation();let r=n[0];e instanceof KeyboardEvent&&r&&r!==t&&r.dispatchEvent(new KeyboardEvent(e.type,{key:e.key,code:e.code,location:e.location,repeat:e.repeat,isComposing:e.isComposing,ctrlKey:e.ctrlKey,shiftKey:e.shiftKey,altKey:e.altKey,metaKey:e.metaKey,bubbles:!1,cancelable:!1}))};for(let e of[`keydown`,`keyup`,`keypress`])window.addEventListener(e,n,{capture:!0});let r=t.attachShadow({mode:`open`}),i=document.createElement(`style`);i.textContent=N7,r.appendChild(i);let a=document.createElement(`div`);r.appendChild(a);let o=()=>a.setAttribute(`data-theme`,Q7());o(),matchMedia(`(prefers-color-scheme: light)`).addEventListener(`change`,o),nt(()=>j(i9,{get defaultOpen(){return e.defaultOpen??!1}}),a)};document.body?t():document.addEventListener(`DOMContentLoaded`,t,{once:!0})}function Q7(){try{let e=[document.body,document.documentElement];for(let t of e){let e=getComputedStyle(t).backgroundColor.match(/rgba?\(([\d.]+)[,\s]+([\d.]+)[,\s]+([\d.]+)(?:[,\s/]+([\d.]+))?/);if(!(!e||e[4]!==void 0&&Number(e[4])===0))return .2126*e[1]+.7152*e[2]+.0722*e[3]>140?`light`:`dark`}}catch{}return matchMedia(`(prefers-color-scheme: light)`).matches?`light`:`dark`}var $7=130,e9=36,t9=380,n9=280,r9=720;function i9(e){let[t,n]=T(e.defaultOpen),[r,i]=T(`right`),[a,o]=T({x:Math.max(8,window.innerWidth-$7-24),y:Math.max(8,window.innerHeight-e9-20)}),[s,c]=T({running:[],review:[]}),l=()=>s().running,u=()=>s().review,[d,f]=T(!1),[p,m]=T(UD().phase),[h,g]=T({active:!1,msLeft:0,total:0,byTrigger:{}}),[_,v]=T(0);ie(()=>{let e=setInterval(()=>{p()===`recording`&&v(Date.now()-(UD().startedAt??Date.now()))},250);ae(()=>clearInterval(e))});let y=e=>{let t=Math.floor(e/1e3);return`${Math.floor(t/60)}:${String(t%60).padStart(2,`0`)}`},[b,x]=T(null),S=e=>({x:Math.min(Math.max(8,e.x),window.innerWidth-$7-8),y:Math.min(Math.max(8,e.y),window.innerHeight-e9-8)}),C=e=>({x:Math.min(Math.max(8-(ne()-80),e.x),window.innerWidth-80),y:Math.min(Math.max(0,e.y),window.innerHeight-80)}),[w,E]=T(!1),[k,ee]=T(`cloud`),[te,A]=T(!1),[ne,re]=T(t9),oe=e=>Math.min(r9,Math.max(n9,Math.min(e,window.innerWidth-60)));O(()=>{let e=document.documentElement,n=t()&&w();e.style.marginRight=n&&r()===`right`?`${ne()}px`:``,e.style.marginLeft=n&&r()===`left`?`${ne()}px`:``}),ae(()=>{document.documentElement.style.marginRight=``,document.documentElement.style.marginLeft=``});let se=()=>{let e=!w();E(e),e&&x(null),Er({panelMode:e?`pinned`:`overlay`,panelPos:void 0})};ie(()=>{Tr().then(e=>{e.panelSide&&i(e.panelSide),e.launcherPos&&o(S(e.launcherPos)),e.panelPos&&x(C(e.panelPos)),e.panelWidth&&re(oe(e.panelWidth)),E(e.panelMode===`pinned`),ee(e.workflowMode??`cloud`)});let e=Mr(e=>{e===`settings`&&Tr().then(e=>{i(e.panelSide??`right`),E(e.panelMode===`pinned`),ee(e.workflowMode??`cloud`)}),e===`grab`&&k()!==`local`&&n(!0)}),t=()=>{A(!0),setTimeout(()=>A(!1),1600)};window.addEventListener(zZ,t);let r=()=>{f(!1),w()||n(!1)};window.addEventListener(BZ,r);let s=()=>n(!0);window.addEventListener(`linear-grab:picker-finished`,s),ae(()=>{window.removeEventListener(zZ,t),window.removeEventListener(BZ,r),window.removeEventListener(`linear-grab:picker-finished`,s)});let l=e$(c);ae(i2(g));let u=UD().phase,d=WD(e=>{m(e.phase),e.phase===`recording`&&u!==`recording`&&!w()&&n(!1),e.phase===`ready`&&u!==`ready`&&(sj(`capture`),n(!0)),u=e.phase}),p=()=>{o(S(a()));let e=b();e&&x(C(e))};window.addEventListener(`resize`,p),ae(()=>{e(),l(),d(),window.removeEventListener(`resize`,p)})});let ce=!1,le=e=>{if(e.button!==0)return;let t={x:e.clientX,y:e.clientY},n=a();ce=!1;let r=e=>{let r=e.clientX-t.x,i=e.clientY-t.y;Math.abs(r)+Math.abs(i)>4&&(ce=!0),ce&&o(S({x:n.x+r,y:n.y+i}))},i=()=>{window.removeEventListener(`pointermove`,r),window.removeEventListener(`pointerup`,i),ce&&Er({launcherPos:a()}),setTimeout(()=>{ce=!1},0)};window.addEventListener(`pointermove`,r),window.addEventListener(`pointerup`,i)},ue=()=>a().y>260,de=e=>{f(!1),sj(`activity`,e),n(!0)},fe=e=>{if(e.button!==0)return;e.preventDefault(),e.stopPropagation();let t=e.clientX,n=ne(),i=b(),a=e=>{let a=e.clientX-t,o=r()===`right`?-a:a,s=oe(n+o);re(s),i&&r()===`right`&&x(C({x:i.x+(n-s),y:i.y}))},o=()=>{window.removeEventListener(`pointermove`,a),window.removeEventListener(`pointerup`,o),Er({panelWidth:ne(),...b()?{panelPos:b()}:{}})};window.addEventListener(`pointermove`,a),window.addEventListener(`pointerup`,o)},pe=e=>{if(e.button!==0)return;if(e.detail===2){x(null),Er({panelPos:void 0});return}let t={x:e.clientX,y:e.clientY},n=b()??{x:r()===`right`?window.innerWidth-ne():0,y:0},i=!1,a=e=>{let r=e.clientX-t.x,a=e.clientY-t.y;Math.abs(r)+Math.abs(a)>4&&(i=!0),i&&x(C({x:n.x+r,y:n.y+a}))},o=()=>{window.removeEventListener(`pointermove`,a),window.removeEventListener(`pointerup`,o);let e=b();i&&e&&Er({panelPos:e})};window.addEventListener(`pointermove`,a),window.addEventListener(`pointerup`,o)};return[j(M,{get when(){return!t()},get children(){var e=z7(),t=e.firstChild;return t.$$click=()=>{ce||p()===`recording`||h().active||(f(!1),n(!0))},t.$$pointerdown=le,P(t,j(M,{get when(){return p()===`recording`||h().active},get fallback(){return[(()=>{var e=V7();return e.$$click=()=>{ce||(f(!1),n(!0))},P(e,j(j7,{size:13})),e})(),H7(),(()=>{var e=G7(),t=e.firstChild,n=t.nextSibling;return e.$$click=e=>{e.stopPropagation(),!ce&&f(e=>!e)},P(n,(()=>{var e=$e(()=>!!te());return()=>e()?`Copied ✓`:`${l().length} run`})()),P(e,j(M,{get when(){return $e(()=>!te())()&&u().length>0},get children(){return[U7(),(()=>{var e=W7(),t=e.firstChild;return P(e,()=>u().length,t),e})()]}}),null),D(e=>{var r=`size-2 rounded-full ${te()?`bg-success`:l().length?`bg-success animate-pulse`:`bg-text-faint`}`,i=`min-w-[3.5ch] text-left text-[11px] font-medium tabular-nums ${te()?`text-success`:`text-text-dim`}`;return r!==e.e&&st(t,e.e=r),i!==e.t&&st(n,e.t=i),e},{e:void 0,t:void 0}),e})()]},get children(){return j(M,{get when(){return p()===`recording`},get fallback(){return[K7(),(()=>{var e=q7(),t=e.firstChild;return P(e,()=>Math.ceil(h().msLeft/1e3),t),e})(),(()=>{var e=J7(),t=e.firstChild;return P(e,()=>h().total,t),D(()=>it(e,`title`,Object.entries(h().byTrigger).map(([e,t])=>`${t} ${e}`).join(` · `)||`hover / open the component to record its states`)),e})(),(()=>{var e=I7();return e.$$click=e=>{e.stopPropagation(),!ce&&o2()},e})()]},get children(){return[P7(),(()=>{var e=F7();return P(e,()=>y(_())),e})(),(()=>{var e=I7();return e.$$click=()=>{ce||tO()},e})()]}})}})),P(e,j(M,{get when(){return d()},get children(){var e=R7(),t=e.firstChild;return P(e,j(M,{get when(){return u().length>0},get children(){return[L7(),j(We,{get each(){return u()},children:e=>j(a9,{agent:e,review:!0,onOpen:de})})]}}),t),P(e,j(M,{get when(){return l().length>0},get fallback(){return Y7()},get children(){return j(We,{get each(){return l()},children:e=>j(a9,{agent:e,onOpen:de})})}}),null),D(()=>st(e,`bg-surface border-border absolute w-72 rounded-lg border p-1.5 font-sans shadow-2xl ${ue()?`bottom-full mb-2`:`top-full mt-2`} ${a().x>window.innerWidth-300?`right-0`:`left-0`}`)),e}}),null),D(t=>{var n=`${a().x}px`,r=`${a().y}px`;return n!==t.e&&dt(e,`left`,t.e=n),r!==t.t&&dt(e,`top`,t.t=r),t},{e:void 0,t:void 0}),e}}),j(M,{get when(){return t()},get children(){var e=B7(),t=e.firstChild;return t.$$pointerdown=fe,P(e,j(M7,{onGrab:()=>n(!0),onClose:()=>n(!1),get onHeaderPointerDown(){return w()?void 0:pe},get pinned(){return w()},onTogglePin:se}),null),D(n=>{var i=`bg-bg text-text border-border fixed z-[2147483645] flex max-w-[100vw] flex-col overflow-hidden font-sans text-[13px] antialiased ${w()?``:`shadow-2xl`} ${!w()&&b()?`rounded-xl border`:r()===`right`?`top-0 right-0 h-screen border-l`:`top-0 left-0 h-screen border-r`}`,a={width:`${ne()}px`,...!w()&&b()?{left:`${b().x}px`,top:`${b().y}px`,height:`${Math.min(680,window.innerHeight-16)}px`}:{}},o=`hover:bg-accent/50 active:bg-accent absolute top-0 z-10 h-full w-1 cursor-col-resize transition-colors ${r()===`right`?`left-0`:`right-0`}`;return i!==n.e&&st(e,n.e=i),n.t=ut(e,a,n.t),o!==n.a&&st(t,n.a=o),n},{e:void 0,t:void 0,a:void 0}),e}})]}function a9(e){return(()=>{var t=X7(),n=t.firstChild,r=n.firstChild,i=r.nextSibling,a=i.nextSibling,o=n.nextSibling,s=o.firstChild,c=s.nextSibling;return c.nextSibling,t.$$click=()=>e.onOpen(e.agent.id),P(i,()=>e.agent.identifier),P(a,()=>e.agent.title),P(o,(()=>{var t=$e(()=>!!e.review);return()=>t()?`PR ready · needs review`:e.agent.stateName})(),s),P(o,()=>e.agent.delegateName,c),P(o,()=>o9(e.agent.updatedAt),null),D(t=>dt(r,`background`,e.review?`var(--color-warn)`:e.agent.stateColor)),t})()}function o9(e){let t=Math.max(0,Math.floor((Date.now()-Date.parse(e))/1e3));return t<60?`now`:t<3600?`${Math.floor(t/60)}m`:t<86400?`${Math.floor(t/3600)}h`:`${Math.floor(t/86400)}d`}rt([`pointerdown`,`click`]),Z7()})();
287
+ docs/design-tokens.md`,get value(){return n().skillPaths??``},onBlur:e=>{r({skillPaths:e.currentTarget.value.trim()||void 0})}})}}),j(Lj,{label:`Test account`,hint:`The cloud agent logs into the app with this while testing and recording its demo. Added to every issue's Agent instructions. Use a throwaway account — it's visible to everyone who can read the issue.`,get children(){var e=K5();return P(e,j(jj,{placeholder:`Username or email (e.g. demo@yourapp.com)`,get value(){return n().testUsername??``},onBlur:e=>{r({testUsername:e.currentTarget.value.trim()||void 0})}}),null),P(e,j(jj,{type:`password`,placeholder:`Password`,get value(){return n().testPassword??``},onBlur:e=>{r({testPassword:e.currentTarget.value.trim()||void 0})}}),null),e}})]}})}}),null),P(e,j(M,{when:!xr,get children(){return j(Rj,{title:`Panel`,get children(){return[(()=>{var e=q5(),t=e.firstChild.nextSibling;return P(t,j(We,{each:[{id:`overlay`,label:`Overlay`},{id:`pinned`,label:`Beside page`}],children:e=>(()=>{var t=o7();return t.$$click=()=>void r({panelMode:e.id,panelPos:void 0}),P(t,()=>e.label),D(()=>st(t,`flex-1 rounded-[5px] px-2 py-0.5 text-[11.5px] font-medium transition-colors ${(n().panelMode??`overlay`)===e.id?`bg-surface-3 text-text`:`text-text-dim hover:text-text cursor-pointer`}`)),t})()})),e})(),(()=>{var e=J5(),t=e.firstChild.nextSibling;return P(t,j(We,{each:[`left`,`right`],children:e=>(()=>{var t=o7();return t.$$click=()=>void r({panelSide:e}),P(t,e===`left`?`Left`:`Right`),D(()=>st(t,`flex-1 rounded-[5px] px-2 py-0.5 text-[11.5px] font-medium transition-colors ${(n().panelSide??`right`)===e?`bg-surface-3 text-text`:`text-text-dim hover:text-text cursor-pointer`}`)),t})()})),e})()]}})}}),null),P(e,j(Rj,{title:`Local Claude Code`,get children(){return j(Lj,{label:`Bridge URL`,hint:'Run `npx linear-grab-bridge` in your repo\'s terminal (binds localhost only). Enables "Delegate to → Local Claude Code" in Draft, the Local tab, and relays blocked uploads to Linear storage.',get children(){return j(jj,{placeholder:`http://localhost:4577`,get value(){return n().bridgeUrl??``},onBlur:e=>{r({bridgeUrl:e.currentTarget.value.trim()||void 0})}})}})}}),null),P(e,j(Rj,{title:`Project config (.lineargrab.json)`,get children(){return[Y5(),(()=>{var e=Z5();return P(e,j(M,{get when(){return c.data?.projectConfig},get fallback(){return j(zj,{title:`No .lineargrab.json found at the bridge's cwd (or bridge offline / outdated)`,children:`not detected`})},get children(){return[j(zj,{class:`text-success`,children:`detected`}),j(q,{variant:`ghost`,class:`h-7 px-2 text-[11px]`,title:`Overwrite your local settings with every value from the repo's config`,onClick:f,children:`Apply all`})]}}),null),P(e,j(q,{variant:`ghost`,class:`h-7 px-2 text-[11px]`,get title(){return l()?`Copied!`:`Copy your current shareable settings as .lineargrab.json — commit it to the repo root`},onClick:()=>void d(),get children(){var e=X5();return P(e,()=>l()?`Copied ✓`:`Copy config`),e}}),null),e})()]}}),null),P(e,j(Rj,{title:`Asset uploads`,get children(){return[j(Lj,{label:`GitHub token`,hint:`Linear's storage blocks browser uploads in some browsers (Safari). With this set, GIFs/screenshots upload to your GitHub repo instead and embed automatically. Fine-grained PAT with Contents read/write on the assets repo.`,get children(){return j(jj,{type:`password`,placeholder:`github_pat_…`,get value(){return n().githubToken??``},onBlur:e=>{r({githubToken:e.currentTarget.value.trim()||void 0})}})}}),j(Lj,{label:`Assets repository`,hint:`owner/repo — must be PUBLIC so Linear (and agents) can render the images. Files land under linear-grab/.`,get children(){return j(jj,{placeholder:`ahmedbanihanibh/linear-grab-assets`,get value(){return n().githubAssetsRepo??``},onBlur:e=>{r({githubAssetsRepo:e.currentTarget.value.trim()||void 0})}})}})]}}),null),P(e,j(Rj,{title:`Notifications`,get children(){return[j(Lj,{label:`Slack bot token`,hint:`Bot token (xoxb-…) with chat:write + channels:read + files:write. New issues get announced with links + demo, and the AGENT receives the token to post its finished demo video itself.`,get children(){return j(jj,{type:`password`,placeholder:`xoxb-…`,get value(){return n().slackToken??``},onBlur:e=>{r({slackToken:e.currentTarget.value.trim()||void 0})}})}}),j(M,{get when(){return n().slackToken},get children(){return j(Lj,{label:`Slack channel`,get children(){return j(M,{get when(){return!ae.isError},get fallback(){return j(Hj,{message:`Couldn't list channels — check the token scopes (channels:read).`})},get children(){return j(Nj,{get value(){return n().slackChannelId??``},get disabled(){return ae.isLoading},onChange:e=>{let t=e.currentTarget.value,n=ae.data?.find(e=>e.id===t);r({slackChannelId:t||void 0,slackChannelName:n?.name})},get children(){return[Q5(),j(We,{get each(){return ae.data??[]},children:e=>(()=>{var t=g7();return t.firstChild,P(t,()=>e.name,null),D(()=>t.selected=e.id===n().slackChannelId),D(()=>t.value=e.id),t})()})]}})}})}})}}),j(Lj,{label:`Telegram bot token`,hint:`From @BotFather. The agent also receives it to send the demo video (sendVideo).`,get children(){return j(jj,{type:`password`,placeholder:`123456:ABC-…`,get value(){return n().telegramToken??``},onBlur:e=>{r({telegramToken:e.currentTarget.value.trim()||void 0})}})}}),j(M,{get when(){return n().telegramToken},get children(){return j(Lj,{label:`Telegram chat ID`,hint:`Add the bot to your group/channel, send a message, then read the chat id from api.telegram.org/bot<token>/getUpdates.`,get children(){return j(jj,{placeholder:`-1001234567890`,get value(){return n().telegramChatId??``},onBlur:e=>{r({telegramChatId:e.currentTarget.value.trim()||void 0})}})}})}}),(()=>{var e=$5(),t=e.firstChild;return t.addEventListener(`change`,e=>void r({notifyOnCreate:e.currentTarget.checked?void 0:!1})),D(()=>t.checked=n().notifyOnCreate!==!1),e})(),e7()]}}),null),P(e,j(Rj,{title:`AI providers`,get children(){return[j(Lj,{label:`OpenAI API key`,get children(){return j(jj,{type:`password`,placeholder:`sk-…`,get value(){return n().openaiKey??``},onBlur:e=>{r({openaiKey:e.currentTarget.value.trim()||void 0})}})}}),j(Lj,{label:`Anthropic API key`,get children(){return j(jj,{type:`password`,placeholder:`sk-ant-…`,get value(){return n().anthropicKey??``},onBlur:e=>{r({anthropicKey:e.currentTarget.value.trim()||void 0})}})}}),(()=>{var e=t7(),t=e.firstChild.nextSibling.firstChild,i=t.nextSibling,a=i.nextSibling;return t.$$click=()=>void r({preferredProvider:void 0}),i.$$click=()=>void r({preferredProvider:`openai`}),a.$$click=()=>void r({preferredProvider:`anthropic`}),D(e=>{var r=`flex-1 rounded-[5px] px-2 py-0.5 text-[11.5px] font-medium transition-colors ${n().preferredProvider===void 0?`bg-surface-3 text-text`:`text-text-dim hover:text-text cursor-pointer`}`,o=`flex-1 rounded-[5px] px-2 py-0.5 text-[11.5px] font-medium transition-colors disabled:cursor-not-allowed ${n().preferredProvider===`openai`?`bg-surface-3 text-text`:`text-text-dim hover:text-text cursor-pointer disabled:text-text-faint`}`,s=!n().openaiKey,c=`flex-1 rounded-[5px] px-2 py-0.5 text-[11.5px] font-medium transition-colors disabled:cursor-not-allowed ${n().preferredProvider===`anthropic`?`bg-surface-3 text-text`:`text-text-dim hover:text-text cursor-pointer disabled:text-text-faint`}`,l=!n().anthropicKey;return r!==e.e&&st(t,e.e=r),o!==e.t&&st(i,e.t=o),s!==e.a&&(i.disabled=e.a=s),c!==e.o&&st(a,e.o=c),l!==e.i&&(a.disabled=e.i=l),e},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),e})(),(()=>{var e=r7();return P(e,j(M,{get when(){return se()},get fallback(){return _7()},get children(){var e=n7();return P(e,se),e}})),e})()]}}),null),P(e,j(Rj,{title:`How it works`,get children(){return i7()}}),null),e})()}rt([`click`]);var y7=`linear-grab`,b7=`queries`,x7=[`my-issues`,`issue`,`sessions`,`teams`,`agents`];function S7(){return new Promise(e=>{try{let t=indexedDB.open(y7,1);t.onupgradeneeded=()=>t.result.createObjectStore(b7),t.onsuccess=()=>e(t.result),t.onerror=()=>e(null)}catch{e(null)}})}function C7(e){return typeof e[0]==`string`&&x7.includes(e[0])}async function w7(e){let t=await S7();if(!t)return()=>{};await new Promise(n=>{try{let r=t.transaction(b7,`readonly`).objectStore(b7).openCursor();r.onsuccess=()=>{let t=r.result;if(!t)return n();try{let{queryKey:n,data:r}=t.value;C7(n)&&e.getQueryData(n)===void 0&&e.setQueryData(n,r,{updatedAt:0})}catch{}t.continue()},r.onerror=()=>n()}catch{n()}});let n=new Map,r=e.getQueryCache().subscribe(r=>{if(r.type!==`updated`||r.action.type!==`success`)return;let{queryKey:i,queryHash:a}=r.query;if(!C7(i))return;let o=n.get(a);o&&clearTimeout(o),n.set(a,setTimeout(()=>{n.delete(a);try{let n=e.getQueryData(i);if(n===void 0)return;t.transaction(b7,`readwrite`).objectStore(b7).put({queryKey:i,data:n},a)}catch{}},400))});return()=>{r();for(let e of n.values())clearTimeout(e);t.close()}}Br();var T7=N(`<svg viewBox="0 0 100 100"fill=currentColor aria-hidden><path d="M1.22541 61.5228c-.2225-.9485.90748-1.5459 1.59638-.857L39.3342 97.1782c.6889.6889.0915 1.8189-.857 1.5964C20.0515 94.4522 5.54779 79.9485 1.22541 61.5228ZM.00189135 46.8891c-.01764375.2833.08887215.5599.28957165.7606L52.3503 99.7085c.2007.2007.4773.3075.7606.2896 2.3692-.1476 4.6938-.46 6.9624-.9259.7645-.157 1.0301-1.0963.4782-1.6481L2.57595 39.4485c-.55186-.5519-1.49117-.2863-1.648174.4782-.465915 2.2686-.77832 4.5932-.92588465 6.9624ZM4.21093 29.7054c-.16649.3738-.08169.8106.20765 1.1l64.77602 64.776c.2894.2894.7262.3742 1.1.2077 1.7861-.7956 3.5171-1.6927 5.1855-2.684.5521-.328.6373-1.0867.1832-1.5407L8.43566 24.3367c-.45409-.4541-1.21271-.3689-1.54074.1832-.99132 1.6684-1.88843 3.3994-2.68399 5.1855ZM12.6587 18.074c-.3701-.3701-.393-.9637-.0443-1.3541C21.7795 6.45931 35.1114 0 49.9519 0 77.5927 0 100 22.4073 100 50.0481c0 14.8405-6.4593 28.1724-16.7199 37.3375-.3903.3487-.984.3258-1.3541-.0443L12.6587 18.074Z">`),E7=N(`<button><svg width=12 height=12 viewBox="0 0 16 16"fill=none stroke=currentColor stroke-width=1.5 aria-hidden><rect x=1.5 y=2.5 width=13 height=11 rx=1.5></rect><path d="M10 2.5v11">`),D7=N(`<button aria-label="Minimize to launcher"title="Minimize to launcher"class="text-text-dim hover:text-text hover:bg-surface-3 grid size-6 shrink-0 cursor-pointer place-items-center rounded-md text-[15px] leading-none transition-colors">–`),O7=N(`<div class="bg-bg text-text flex h-full flex-col"><header><span class="text-accent mr-0.5 inline-flex shrink-0"title="Linear Grab"></span><div class="no-scrollbar flex min-w-0 flex-1 items-center gap-1 overflow-x-auto"></div></header><main class="min-h-0 flex-1"><div class=h-full></div><div class=h-full></div><div class=h-full></div><div class=h-full></div><div class=h-full></div><div class=h-full></div><div class=h-full></div><div class=h-full></div><div class=h-full></div><div class=h-full>`),k7=N(`<button>`),A7=[{id:`draft`,label:`Draft`},{id:`capture`,label:`Capture`},{id:`activity`,label:`Activity`},{id:`running`,label:`Running`},{id:`cloud`,label:`Cloud`},{id:`local`,label:`Local`},{id:`prs`,label:`PRs`},{id:`design`,label:`Design`},{id:`renders`,label:`Renders`},{id:`settings`,label:`Settings`}],j7=new Set;function M7(e,t,n){if(j7.has(e)||typeof Notification>`u`)return;j7.add(e);let r=()=>new Notification(t,{body:n});Notification.permission===`granted`?r():Notification.permission==="default"&&Notification.requestPermission().then(e=>e===`granted`&&r())}function N7(){setInterval(()=>{PO().then(e=>{for(let t of e){if(t.status!==`running`)continue;let e=t.lastEventAt??t.startedAt;Date.now()-e>10*6e4&&M7(`local-stuck:${t.id}:${e}`,`Local agent may be stuck`,`${t.title.slice(0,80)} — no output for ${Math.round((Date.now()-e)/6e4)}m. Nudge or interrupt it in the Local tab.`)}}).catch(()=>{}),_O().then(e=>{for(let t of e)/awaitingInput|elicit/i.test(t.status)&&M7(`cloud-input:${t.id}`,`Cloud agent needs input`,`${t.issue?.identifier??`Session`} — ${t.issue?.title?.slice(0,80)??`a Cursor agent`} is waiting for you.`)}).catch(()=>{})},6e4)}N7();var P7=new gr({defaultOptions:{queries:{retry:1,refetchOnWindowFocus:!1,staleTime:5e3}}});function F7(e){return(()=>{var t=T7();return D(n=>{var r=e.size??14,i=e.size??14;return r!==n.e&&it(t,`width`,n.e=r),i!==n.t&&it(t,`height`,n.t=i),n},{e:void 0,t:void 0}),t})()}function I7(e){let[t,n]=T(`draft`),r=()=>{P7.invalidateQueries({queryKey:[`grab`]}),lj()===`capture`&&n(`capture`),e.onGrab?.()};return O(()=>{let e=rj();e&&n(e)}),ie(()=>{let e=w7(P7),t=XZ(r),n=()=>{YO().then(y$),HO(),NO().then(async e=>{if(!e.projectConfig)return;let t=A5(await Tr(),e.projectConfig);t&&await Er(t)}).catch(()=>{})};n();let i=Mr(e=>{e===`settings`&&(P7.invalidateQueries({queryKey:[`settings`]}),n()),e===`grab`&&r()});ae(()=>{t(),i(),e.then(e=>e())})}),j(cr,{client:P7,get children(){var r=O7(),i=r.firstChild,a=i.firstChild,o=a.nextSibling,s=i.nextSibling.firstChild,c=s.nextSibling,l=c.nextSibling,u=l.nextSibling,d=u.nextSibling,f=d.nextSibling,p=f.nextSibling,m=p.nextSibling,h=m.nextSibling,g=h.nextSibling;return i.$$pointerdown=t=>e.onHeaderPointerDown?.(t),P(a,j(F7,{size:14})),P(o,j(We,{each:A7,children:e=>(()=>{var r=k7();return r.$$click=()=>n(e.id),P(r,()=>e.label),D(()=>st(r,`h-6 shrink-0 rounded-md px-2 text-[12px] font-medium whitespace-nowrap transition-colors ${t()===e.id?`bg-surface-3 text-text`:`text-text-dim hover:text-text cursor-pointer`}`)),r})()})),P(i,j(M,{get when(){return e.onTogglePin},get children(){var t=E7();return t.$$click=()=>e.onTogglePin?.(),D(n=>{var r=e.pinned?`Switch to overlay`:`Dock beside page`,i=e.pinned?`Overlay the page`:`Dock beside page (squeezes the app, DevTools-style)`,a=`hover:bg-surface-3 grid size-6 shrink-0 cursor-pointer place-items-center rounded-md transition-colors ${e.pinned?`text-accent`:`text-text-dim hover:text-text`}`;return r!==n.e&&it(t,`aria-label`,n.e=r),i!==n.t&&it(t,`title`,n.t=i),a!==n.a&&st(t,n.a=a),n},{e:void 0,t:void 0,a:void 0}),t}}),null),P(i,j(M,{get when(){return e.onClose},get children(){var t=D7();return t.$$click=()=>e.onClose?.(),t}}),null),P(s,j(wM,{onCreated:()=>n(`activity`)})),P(c,j(TQ,{})),P(l,j(_1,{})),P(u,j(B1,{})),P(d,j(P1,{})),P(f,j(T0,{})),P(p,j(B0,{onOpenIssue:()=>n(`activity`)})),P(m,j(H3,{})),P(h,j(D5,{})),P(g,j(v7,{})),D(n=>{var r=`border-border bg-surface flex shrink-0 items-center gap-1 border-b px-2 py-1.5 select-none ${e.onHeaderPointerDown?`cursor-grab active:cursor-grabbing`:``}`,a=t()!==`draft`,o=t()!==`capture`,_=t()!==`activity`,v=t()!==`running`,y=t()!==`cloud`,b=t()!==`local`,x=t()!==`prs`,S=t()!==`design`,C=t()!==`renders`,w=t()!==`settings`;return r!==n.e&&st(i,n.e=r),a!==n.t&&s.classList.toggle(`hidden`,n.t=a),o!==n.a&&c.classList.toggle(`hidden`,n.a=o),_!==n.o&&l.classList.toggle(`hidden`,n.o=_),v!==n.i&&u.classList.toggle(`hidden`,n.i=v),y!==n.n&&d.classList.toggle(`hidden`,n.n=y),b!==n.s&&f.classList.toggle(`hidden`,n.s=b),x!==n.h&&p.classList.toggle(`hidden`,n.h=x),S!==n.r&&m.classList.toggle(`hidden`,n.r=S),C!==n.d&&h.classList.toggle(`hidden`,n.d=C),w!==n.l&&g.classList.toggle(`hidden`,n.l=w),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0}),r}})}rt([`pointerdown`,`click`]);var L7=`/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */
288
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-contain-size:initial;--tw-contain-layout:initial;--tw-contain-paint:initial;--tw-contain-style:initial}}}@layer theme{:root,:host{--font-sans:"Inter", ui-sans-serif, system-ui, -apple-system, sans-serif;--font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--font-mono:ui-monospace, "SF Mono", Menlo, monospace;--color-red-500:oklch(63.7% .237 25.331);--color-white:#fff;--spacing:.25rem;--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-wide:.025em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:4px;--radius-md:6px;--radius-lg:10px;--radius-xl:.75rem;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-bg:#0b0c0e;--color-surface:#141517;--color-surface-2:#1c1d21;--color-surface-3:#24262b;--color-border:#26282d;--color-border-strong:#34363d;--color-text:#e8e9eb;--color-text-dim:#8b8e98;--color-text-faint:#5c5f6a;--color-accent:#5e6ad2;--color-accent-hover:#6e79e0;--color-accent-soft:#5e6ad226;--color-success:#4cb782;--color-warn:#f2c94c;--color-danger:#eb5757;--color-danger-soft:#eb575726}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{inset-block:0}.-top-0{top:0}.-top-0\\.5{top:calc(var(--spacing) * -.5)}.top-0{top:0}.top-0\\.5{top:calc(var(--spacing) * .5)}.top-1{top:var(--spacing)}.top-1\\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.top-\\[2px\\]{top:2px}.top-full{top:100%}.-right-0{right:0}.-right-0\\.5{right:calc(var(--spacing) * -.5)}.right-0{right:0}.right-0\\.5{right:calc(var(--spacing) * .5)}.right-4{right:calc(var(--spacing) * 4)}.right-full{right:100%}.bottom-0{bottom:0}.bottom-1{bottom:var(--spacing)}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-\\[2px\\]{bottom:2px}.bottom-full{bottom:100%}.-left-\\[13\\.5px\\]{left:-13.5px}.left-0{left:0}.left-1{left:var(--spacing)}.left-1\\/2{left:50%}.left-\\[5px\\]{left:5px}.left-full{left:100%}.z-1{z-index:1}.z-10{z-index:10}.z-\\[2147483645\\]{z-index:2147483645}.z-\\[2147483646\\]{z-index:2147483646}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-m-0{margin:0}.-m-0\\.5{margin:calc(var(--spacing) * -.5)}.-m-4{margin:calc(var(--spacing) * -4)}.m-0{margin:0}.-mx-2{margin-inline:calc(var(--spacing) * -2)}.-my-1{margin-block:calc(var(--spacing) * -1)}.-my-1\\.5{margin-block:calc(var(--spacing) * -1.5)}.mt-0{margin-top:0}.mt-0\\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-px{margin-top:1px}.mr-0{margin-right:0}.mr-0\\.5{margin-right:calc(var(--spacing) * .5)}.mr-1{margin-right:var(--spacing)}.mr-1\\.5{margin-right:calc(var(--spacing) * 1.5)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-2\\.5{margin-right:calc(var(--spacing) * 2.5)}.-mb-4{margin-bottom:calc(var(--spacing) * -4)}.mb-0{margin-bottom:0}.mb-0\\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:var(--spacing)}.mb-1\\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-2\\.5{margin-bottom:calc(var(--spacing) * 2.5)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-2\\.5{margin-left:calc(var(--spacing) * 2.5)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.ml-px{margin-left:1px}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-5{-webkit-line-clamp:5;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.size-0{width:0;height:0}.size-1{width:var(--spacing);height:var(--spacing)}.size-1\\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-\\[9px\\]{width:9px;height:9px}.size-\\[12px\\]{width:12px;height:12px}.size-\\[16px\\]{width:16px;height:16px}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-16{height:calc(var(--spacing) * 16)}.h-\\[8px\\]{height:8px}.h-\\[17px\\]{height:17px}.h-\\[18px\\]{height:18px}.h-\\[20px\\]{height:20px}.h-\\[24px\\]{height:24px}.h-fit{height:fit-content}.h-full{height:100%}.h-screen{height:100vh}.max-h-32{max-height:calc(var(--spacing) * 32)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-44{max-height:calc(var(--spacing) * 44)}.max-h-56{max-height:calc(var(--spacing) * 56)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-\\[28rem\\]{max-height:28rem}.max-h-\\[var\\(--rg-edit-list-max-h\\)\\]{max-height:var(--rg-edit-list-max-h)}.min-h-0{min-height:0}.min-h-4{min-height:calc(var(--spacing) * 4)}.min-h-\\[2lh\\]{min-height:2lh}.min-h-\\[28px\\]{min-height:28px}.w-1{width:var(--spacing)}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-16{width:calc(var(--spacing) * 16)}.w-28{width:calc(var(--spacing) * 28)}.w-72{width:calc(var(--spacing) * 72)}.w-\\[2px\\]{width:2px}.w-\\[Npx\\]{width:Npx}.w-\\[calc\\(100\\%\\+16px\\)\\]{width:calc(100% + 16px)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-\\[55\\%\\]{max-width:55%}.max-w-\\[100vw\\]{max-width:100vw}.max-w-\\[110px\\]{max-width:110px}.max-w-\\[280px\\]{max-width:280px}.max-w-full{max-width:100%}.min-w-0{min-width:0}.min-w-\\[3\\.5ch\\]{min-width:3.5ch}.min-w-\\[3ch\\]{min-width:3ch}.min-w-\\[4ch\\]{min-width:4ch}.min-w-\\[5ch\\]{min-width:5ch}.min-w-\\[6ch\\]{min-width:6ch}.min-w-\\[7ch\\]{min-width:7ch}.min-w-\\[8ch\\]{min-width:8ch}.min-w-\\[10ch\\]{min-width:10ch}.min-w-\\[12ch\\]{min-width:12ch}.min-w-\\[36px\\]{min-width:36px}.min-w-\\[52px\\]{min-width:52px}.min-w-\\[100px\\]{min-width:100px}.min-w-\\[150px\\]{min-width:150px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-rotate-90{rotate:-90deg}.rotate-0{rotate:0deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.list-decimal{list-style-type:decimal}.grid-cols-\\[0fr\\]{grid-template-columns:0fr}.grid-cols-\\[1fr\\]{grid-template-columns:1fr}.grid-rows-\\[0fr\\]{grid-template-rows:0fr}.grid-rows-\\[1fr\\]{grid-template-rows:1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:0}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-\\[5px\\]{gap:5px}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-clip{overflow:clip}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\\[1px\\]{border-radius:1px}.rounded-\\[3px\\]{border-radius:3px}.rounded-\\[4px\\]{border-radius:4px}.rounded-\\[5px\\]{border-radius:5px}.rounded-\\[6px\\]{border-radius:6px}.rounded-\\[13px\\]{border-radius:13px}.rounded-\\[14px\\]{border-radius:14px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-\\[10px\\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-l-\\[10px\\]{border-top-left-radius:10px;border-bottom-left-radius:10px}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-tl{border-top-left-radius:.25rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-r-\\[10px\\]{border-top-right-radius:10px;border-bottom-right-radius:10px}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-tr{border-top-right-radius:.25rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-b-\\[6px\\]{border-bottom-right-radius:6px;border-bottom-left-radius:6px}.rounded-b-\\[10px\\]{border-bottom-right-radius:10px;border-bottom-left-radius:10px}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.\\[border-width\\:0\\.5px\\]{border-width:.5px}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-4{border-top-style:var(--tw-border-style);border-top-width:4px}.\\[border-top-width\\:0\\.5px\\]{border-top-width:.5px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-\\[var\\(--rg-border-button\\)\\]{border-color:var(--rg-border-button)}.border-accent{border-color:var(--color-accent)}.border-accent\\/40{border-color:#5e6ad266}@supports (color:color-mix(in lab, red, red)){.border-accent\\/40{border-color:color-mix(in oklab, var(--color-accent) 40%, transparent)}}.border-border{border-color:var(--color-border)}.border-danger{border-color:var(--color-danger)}.border-danger\\/40{border-color:#eb575766}@supports (color:color-mix(in lab, red, red)){.border-danger\\/40{border-color:color-mix(in oklab, var(--color-danger) 40%, transparent)}}.border-success{border-color:var(--color-success)}.border-success\\/40{border-color:#4cb78266}@supports (color:color-mix(in lab, red, red)){.border-success\\/40{border-color:color-mix(in oklab, var(--color-success) 40%, transparent)}}.border-text-dim{border-color:var(--color-text-dim)}.border-transparent{border-color:#0000}.border-warn{border-color:var(--color-warn)}.border-warn\\/40{border-color:#f2c94c66}@supports (color:color-mix(in lab, red, red)){.border-warn\\/40{border-color:color-mix(in oklab, var(--color-warn) 40%, transparent)}}.border-t-\\[var\\(--rg-border-subtle\\)\\]{border-top-color:var(--rg-border-subtle)}.border-t-transparent{border-top-color:#0000}.bg-\\[var\\(--rg-error-bg\\)\\]{background-color:var(--rg-error-bg)}.bg-\\[var\\(--rg-panel-bg\\)\\]{background-color:var(--rg-panel-bg)}.bg-\\[var\\(--rg-submit-bg\\)\\]{background-color:var(--rg-submit-bg)}.bg-\\[var\\(--rg-surface-active\\)\\]{background-color:var(--rg-surface-active)}.bg-\\[var\\(--rg-surface-hover\\)\\]{background-color:var(--rg-surface-hover)}.bg-\\[var\\(--rg-text-primary\\)\\]{background-color:var(--rg-text-primary)}.bg-\\[var\\(--rg-text-secondary\\)\\]{background-color:var(--rg-text-secondary)}.bg-accent{background-color:var(--color-accent)}.bg-accent-soft{background-color:var(--color-accent-soft)}.bg-bg{background-color:var(--color-bg)}.bg-bg\\/80{background-color:#0b0c0ecc}@supports (color:color-mix(in lab, red, red)){.bg-bg\\/80{background-color:color-mix(in oklab, var(--color-bg) 80%, transparent)}}.bg-border{background-color:var(--color-border)}.bg-current{background-color:currentColor}.bg-danger{background-color:var(--color-danger)}.bg-danger-soft{background-color:var(--color-danger-soft)}.bg-danger\\/10{background-color:#eb57571a}@supports (color:color-mix(in lab, red, red)){.bg-danger\\/10{background-color:color-mix(in oklab, var(--color-danger) 10%, transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-success{background-color:var(--color-success)}.bg-surface{background-color:var(--color-surface)}.bg-surface-2{background-color:var(--color-surface-2)}.bg-surface-3{background-color:var(--color-surface-3)}.bg-text-faint{background-color:var(--color-text-faint)}.bg-transparent{background-color:#0000}.bg-warn{background-color:var(--color-warn)}.bg-warn\\/10{background-color:#f2c94c1a}@supports (color:color-mix(in lab, red, red)){.bg-warn\\/10{background-color:color-mix(in oklab, var(--color-warn) 10%, transparent)}}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:0}.p-0\\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\\.5{padding:calc(var(--spacing) * 2.5)}.p-6{padding:calc(var(--spacing) * 6)}.px-0{padding-inline:0}.px-0\\.25{padding-inline:calc(var(--spacing) * .25)}.px-1{padding-inline:var(--spacing)}.px-1\\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-\\[3px\\]{padding-inline:3px}.py-0{padding-block:0}.py-0\\.5{padding-block:calc(var(--spacing) * .5)}.py-0\\.25{padding-block:calc(var(--spacing) * .25)}.py-1{padding-block:var(--spacing)}.py-1\\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-px{padding-block:1px}.pt-0{padding-top:0}.pt-0\\.5{padding-top:calc(var(--spacing) * .5)}.pt-1{padding-top:var(--spacing)}.pt-1\\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-1{padding-right:var(--spacing)}.pr-1\\.5{padding-right:calc(var(--spacing) * 1.5)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pb-1{padding-bottom:var(--spacing)}.pb-1\\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pl-0{padding-left:0}.pl-0\\.5{padding-left:calc(var(--spacing) * .5)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-2\\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-end{text-align:end}.text-justify{text-align:justify}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.font-serif{font-family:var(--font-serif)}.text-\\[9\\.5px\\]{font-size:9.5px}.text-\\[9px\\]{font-size:9px}.text-\\[10\\.5px\\]{font-size:10.5px}.text-\\[10px\\]{font-size:10px}.text-\\[11\\.5px\\]{font-size:11.5px}.text-\\[11px\\]{font-size:11px}.text-\\[12\\.5px\\]{font-size:12.5px}.text-\\[12px\\]{font-size:12px}.text-\\[13px\\]{font-size:13px}.text-\\[15px\\]{font-size:15px}.leading-3{--tw-leading:calc(var(--spacing) * 3);line-height:calc(var(--spacing) * 3)}.leading-3\\.5{--tw-leading:calc(var(--spacing) * 3.5);line-height:calc(var(--spacing) * 3.5)}.leading-4{--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-normal{overflow-wrap:normal;word-break:normal}.break-words,.wrap-break-word{overflow-wrap:break-word}.break-all{word-break:break-all}.break-keep{word-break:keep-all}.text-ellipsis{text-overflow:ellipsis}.whitespace-break-spaces{white-space:break-spaces}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.text-\\[var\\(--rg-error-text\\)\\]{color:var(--rg-error-text)}.text-\\[var\\(--rg-submit-fg\\)\\]{color:var(--rg-submit-fg)}.text-\\[var\\(--rg-text-primary\\)\\]{color:var(--rg-text-primary)}.text-\\[var\\(--rg-text-primary-85\\)\\]{color:var(--rg-text-primary-85)}.text-\\[var\\(--rg-text-secondary\\)\\]{color:var(--rg-text-secondary)}.text-accent{color:var(--color-accent)}.text-danger{color:var(--color-danger)}.text-success{color:var(--color-success)}.text-text{color:var(--color-text)}.text-text-dim{color:var(--color-text-dim)}.text-text-faint{color:var(--color-text-faint)}.text-warn{color:var(--color-warn)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.lining-nums{--tw-numeric-figure:lining-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.oldstyle-nums{--tw-numeric-figure:oldstyle-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.proportional-nums{--tw-numeric-spacing:proportional-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.slashed-zero{--tw-slashed-zero:slashed-zero;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.accent-accent{accent-color:var(--color-accent)}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.\\[box-shadow\\:var\\(--rg-shadow\\)\\]{box-shadow:var(--rg-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.\\[filter\\:var\\(--rg-drop-shadow\\)\\]{filter:var(--rg-drop-shadow)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[grid-template-columns\\]{transition-property:grid-template-columns;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[grid-template-rows\\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[opacity\\,transform\\]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[padding\\,border-radius\\,transform\\]{transition-property:padding,border-radius,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[top\\,left\\,width\\,height\\,opacity\\,border-radius\\]{transition-property:top,left,width,height,opacity,border-radius;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[transform\\,color\\]{transition-property:transform,color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[transform\\,opacity\\]{transition-property:transform,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.delay-\\[80ms\\]{transition-delay:80ms}.duration-60{--tw-duration:60ms;transition-duration:60ms}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-120{--tw-duration:.12s;transition-duration:.12s}.duration-140{--tw-duration:.14s;transition-duration:.14s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-180{--tw-duration:.18s;transition-duration:.18s}.duration-220{--tw-duration:.22s;transition-duration:.22s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-400{--tw-duration:.4s;transition-duration:.4s}.ease-\\[cubic-bezier\\(0\\,0\\,0\\.2\\,1\\)\\]{--tw-ease:cubic-bezier(0,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.will-change-\\[opacity\\,transform\\]{will-change:opacity,transform}.will-change-transform{will-change:transform}.contain-layout{--tw-contain-layout:layout;contain:var(--tw-contain-size,) var(--tw-contain-layout,) var(--tw-contain-paint,) var(--tw-contain-style,)}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}.\\[corner-shape\\:superellipse\\(1\\.25\\)\\]{corner-shape:superellipse(1.25)}.\\[font-synthesis\\:none\\]{font-synthesis:none}.group-open\\:rotate-90:is(:where(.group):is([open],:popover-open,:open) *){rotate:90deg}@media (hover:hover){.group-hover\\:text-\\[var\\(--rg-text-primary\\)\\]:is(:where(.group):hover *){color:var(--rg-text-primary)}.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\\:text-text-faint::placeholder{color:var(--color-text-faint)}@media (hover:hover){.hover\\:bg-\\[var\\(--rg-error-bg-hover\\)\\]:hover{background-color:var(--rg-error-bg-hover)}.hover\\:bg-\\[var\\(--rg-surface-active\\)\\]:hover{background-color:var(--rg-surface-active)}.hover\\:bg-\\[var\\(--rg-surface-hover\\)\\]:hover{background-color:var(--rg-surface-hover)}.hover\\:bg-accent-hover:hover{background-color:var(--color-accent-hover)}.hover\\:bg-accent\\/50:hover{background-color:#5e6ad280}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-accent\\/50:hover{background-color:color-mix(in oklab, var(--color-accent) 50%, transparent)}}.hover\\:bg-danger\\/30:hover{background-color:#eb57574d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-danger\\/30:hover{background-color:color-mix(in oklab, var(--color-danger) 30%, transparent)}}.hover\\:bg-surface-2:hover{background-color:var(--color-surface-2)}.hover\\:bg-surface-3:hover{background-color:var(--color-surface-3)}.hover\\:text-\\[var\\(--rg-text-primary\\)\\]:hover{color:var(--rg-text-primary)}.hover\\:text-accent:hover{color:var(--color-accent)}.hover\\:text-danger:hover{color:var(--color-danger)}.hover\\:text-text:hover{color:var(--color-text)}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:opacity-80:hover{opacity:.8}}.focus\\:border-accent:focus{border-color:var(--color-accent)}.active\\:cursor-grabbing:active{cursor:grabbing}.active\\:bg-accent:active{background-color:var(--color-accent)}.active\\:transition-none:active{transition-property:none}.disabled\\:cursor-default:disabled{cursor:default}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:bg-surface-3:disabled{background-color:var(--color-surface-3)}.disabled\\:text-text-faint:disabled{color:var(--color-text-faint)}.disabled\\:opacity-40:disabled{opacity:.4}@media (hover:hover){.disabled\\:hover\\:bg-surface-2:disabled:hover{background-color:var(--color-surface-2)}}.data-\\[state\\=on\\]\\:transition-none[data-state=on],.data-\\[state\\=open\\]\\:transition-none[data-state=open],.data-\\[state\\=…\\]\\:transition-none[data-state=…]{transition-property:none}}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=light],:host([data-theme=light]){--color-bg:#fbfbfc;--color-surface:#fff;--color-surface-2:#f4f4f6;--color-surface-3:#e9e9ee;--color-border:#e2e2e8;--color-border-strong:#cfcfd8;--color-text:#1b1c20;--color-text-dim:#5c5f6a;--color-text-faint:#9a9da8;--color-accent-soft:#5e6ad21f;--color-danger-soft:#eb57571a;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:light){:root:not([data-theme=dark]){--color-bg:#fbfbfc;--color-surface:#fff;--color-surface-2:#f4f4f6;--color-surface-3:#e9e9ee;--color-border:#e2e2e8;--color-border-strong:#cfcfd8;--color-text:#1b1c20;--color-text-dim:#5c5f6a;--color-text-faint:#9a9da8;--color-accent-soft:#5e6ad21f;--color-danger-soft:#eb57571a;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}}body{background-color:var(--color-bg);font-family:var(--font-sans);color:var(--color-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-width:320px;margin:0;font-size:13px}@keyframes geist-spinner-fade{0%{opacity:1}to{opacity:.15}}[data-tip]{position:relative}[data-tip]:hover:after{content:attr(data-tip);color:#fff;white-space:nowrap;text-overflow:ellipsis;pointer-events:none;z-index:60;background:#1b1c20;border-radius:6px;max-width:260px;padding:3px 8px;font-size:10.5px;font-weight:500;line-height:1.35;position:absolute;bottom:calc(100% + 6px);left:50%;overflow:hidden;transform:translate(-50%);box-shadow:0 4px 12px #0000004d}[data-tip][data-tip-pos~=right]:hover:after{left:0;transform:none}[data-tip][data-tip-pos~=left]:hover:after{left:auto;right:0;transform:none}[data-tip][data-tip-pos~=bottom]:hover:after{top:calc(100% + 6px);bottom:auto}.no-scrollbar{scrollbar-width:none}.no-scrollbar::-webkit-scrollbar{display:none}.lg-md p{margin:0 0 6px}.lg-md p:last-child{margin-bottom:0}.lg-md a{color:var(--color-accent);word-break:break-all;text-decoration:none}.lg-md a:hover{text-decoration:underline}.lg-md code{background:var(--color-surface-2);border:1px solid var(--color-border);font-family:var(--font-mono);border-radius:4px;padding:0 4px;font-size:11px}.lg-md pre{background:var(--color-surface-2);border:1px solid var(--color-border);border-radius:6px;margin:6px 0;padding:8px;overflow-x:auto}.lg-md pre code{white-space:pre;background:0 0;border:none;padding:0;font-size:11px}.lg-md ul,.lg-md ol{flex-direction:column;gap:2px;margin:4px 0 6px;padding-left:18px;display:flex}.lg-md ul{list-style:outside}.lg-md ol{list-style:decimal}.lg-md h4{margin:8px 0 4px;font-size:12px;font-weight:600}.lg-md lg-media{display:block}.lg-md lg-media img,.lg-md lg-media video{border:1px solid var(--color-border);border-radius:6px;max-width:100%;margin:4px 0}.lg-md video{border:1px solid var(--color-border);background:#000;border-radius:6px;max-width:100%;margin:4px 0}.lg-md img{border:1px solid var(--color-border);border-radius:6px;max-width:100%;margin:4px 0}.lg-md strong{font-weight:600}*{scrollbar-width:thin;scrollbar-color:var(--color-border-strong) transparent}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:var(--color-border-strong);border-radius:4px}::-webkit-scrollbar-track{background:0 0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-contain-size{syntax:"*";inherits:false}@property --tw-contain-layout{syntax:"*";inherits:false}@property --tw-contain-paint{syntax:"*";inherits:false}@property --tw-contain-style{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}`;Br();var R7=N(`<span aria-hidden class="bg-danger size-2 shrink-0 animate-pulse rounded-full">`),z7=N(`<span class="text-text min-w-[5ch] text-[11px] font-medium tabular-nums">`),B7=N(`<button class="bg-accent hover:bg-accent-hover h-7 cursor-pointer rounded-full px-2.5 text-[11px] font-medium text-white transition-colors"><span class="inline-block min-w-[4ch] text-center">Stop`),V7=N(`<p class="text-warn px-1.5 pt-1 pb-1.5 text-[10.5px] font-semibold tracking-wide uppercase">Needs review`),H7=N(`<div><p class="text-text-dim px-1.5 pt-1 pb-1.5 text-[10.5px] font-semibold tracking-wide uppercase">Running agents`),U7=N(`<div class="fixed z-[2147483646] select-none"><div class="bg-surface border-border text-text flex h-9 cursor-grab items-center gap-1 rounded-full border py-1 pr-1 pl-2.5 font-sans shadow-lg active:cursor-grabbing">`),W7=N(`<div><div title="Drag to resize">`),G7=N(`<button title="Open Linear Grab"aria-label="Open Linear Grab"class="text-accent hover:opacity-80 inline-flex cursor-pointer items-center gap-1.5">`),K7=N(`<span class="bg-border h-4 w-px"aria-hidden>`),q7=N(`<span aria-hidden class="bg-warn size-2 rounded-full">`),J7=N(`<span class="text-warn min-w-[3.5ch] text-left text-[11px] font-medium tabular-nums"> rev`),Y7=N(`<button title="Running agents"aria-label="Running agents"class="hover:bg-surface-2 flex h-7 cursor-pointer items-center gap-1.5 rounded-full px-2 transition-colors"><span aria-hidden></span><span>`),X7=N(`<span aria-hidden class="bg-accent size-2 shrink-0 animate-pulse rounded-full">`),Z7=N(`<span class="text-text min-w-[3ch] text-[11px] font-medium tabular-nums">s`),Q7=N(`<span class="text-text-dim min-w-[7ch] text-[11px] tabular-nums"> states`),$7=N(`<p class="text-text-faint px-1.5 pb-1.5 text-[11.5px]">No agents running right now.`),e9=N(`<button class="hover:bg-surface-2 flex w-full cursor-pointer flex-col gap-0.5 rounded-md px-1.5 py-1.5 text-left transition-colors"><span class="flex min-w-0 items-center gap-1.5"><span aria-hidden class="size-1.5 shrink-0 rounded-full"></span><span class="font-mono text-text-dim shrink-0 text-[10.5px]"></span><span class="text-text truncate text-[11.5px]"></span></span><span class="text-text-faint pl-3 text-[10.5px] tabular-nums"> · <!> · `);function t9(e={}){if(typeof window>`u`||window.__LINEAR_GRAB_PAGE__)return;window.__LINEAR_GRAB_PAGE__=!0;let t=()=>{uk(),z2(),Y4(),V8(),JZ();let t=document.createElement(`div`);t.id=`linear-grab-root`,document.body.appendChild(t);let n=e=>{let n=e.composedPath();if(!n.includes(t))return;e.stopImmediatePropagation();let r=n[0];e instanceof KeyboardEvent&&r&&r!==t&&r.dispatchEvent(new KeyboardEvent(e.type,{key:e.key,code:e.code,location:e.location,repeat:e.repeat,isComposing:e.isComposing,ctrlKey:e.ctrlKey,shiftKey:e.shiftKey,altKey:e.altKey,metaKey:e.metaKey,bubbles:!1,cancelable:!1}))};for(let e of[`keydown`,`keyup`,`keypress`])window.addEventListener(e,n,{capture:!0});let r=t.attachShadow({mode:`open`}),i=document.createElement(`style`);i.textContent=L7,r.appendChild(i);let a=document.createElement(`div`);r.appendChild(a);let o=()=>a.setAttribute(`data-theme`,n9());o(),matchMedia(`(prefers-color-scheme: light)`).addEventListener(`change`,o),nt(()=>j(c9,{get defaultOpen(){return e.defaultOpen??!1}}),a)};document.body?t():document.addEventListener(`DOMContentLoaded`,t,{once:!0})}function n9(){try{let e=[document.body,document.documentElement];for(let t of e){let e=getComputedStyle(t).backgroundColor.match(/rgba?\(([\d.]+)[,\s]+([\d.]+)[,\s]+([\d.]+)(?:[,\s/]+([\d.]+))?/);if(!(!e||e[4]!==void 0&&Number(e[4])===0))return .2126*e[1]+.7152*e[2]+.0722*e[3]>140?`light`:`dark`}}catch{}return matchMedia(`(prefers-color-scheme: light)`).matches?`light`:`dark`}var r9=130,i9=36,a9=380,o9=280,s9=720;function c9(e){let[t,n]=T(e.defaultOpen),[r,i]=T(`right`),[a,o]=T({x:Math.max(8,window.innerWidth-r9-24),y:Math.max(8,window.innerHeight-i9-20)}),[s,c]=T({running:[],review:[]}),l=()=>s().running,u=()=>s().review,[d,f]=T(!1),[p,m]=T(UD().phase),[h,g]=T({active:!1,msLeft:0,total:0,byTrigger:{}}),[_,v]=T(0);ie(()=>{let e=setInterval(()=>{p()===`recording`&&v(Date.now()-(UD().startedAt??Date.now()))},250);ae(()=>clearInterval(e))});let y=e=>{let t=Math.floor(e/1e3);return`${Math.floor(t/60)}:${String(t%60).padStart(2,`0`)}`},[b,x]=T(null),S=e=>({x:Math.min(Math.max(8,e.x),window.innerWidth-r9-8),y:Math.min(Math.max(8,e.y),window.innerHeight-i9-8)}),C=e=>({x:Math.min(Math.max(8-(ne()-80),e.x),window.innerWidth-80),y:Math.min(Math.max(0,e.y),window.innerHeight-80)}),[w,E]=T(!1),[k,ee]=T(`cloud`),[te,A]=T(!1),[ne,re]=T(a9),oe=e=>Math.min(s9,Math.max(o9,Math.min(e,window.innerWidth-60)));O(()=>{let e=document.documentElement,n=t()&&w();e.style.marginRight=n&&r()===`right`?`${ne()}px`:``,e.style.marginLeft=n&&r()===`left`?`${ne()}px`:``}),ae(()=>{document.documentElement.style.marginRight=``,document.documentElement.style.marginLeft=``});let se=()=>{let e=!w();E(e),e&&x(null),Er({panelMode:e?`pinned`:`overlay`,panelPos:void 0})};ie(()=>{Tr().then(e=>{e.panelSide&&i(e.panelSide),e.launcherPos&&o(S(e.launcherPos)),e.panelPos&&x(C(e.panelPos)),e.panelWidth&&re(oe(e.panelWidth)),E(e.panelMode===`pinned`),ee(e.workflowMode??`cloud`)});let e=Mr(e=>{e===`settings`&&Tr().then(e=>{i(e.panelSide??`right`),E(e.panelMode===`pinned`),ee(e.workflowMode??`cloud`)}),e===`grab`&&k()!==`local`&&n(!0)}),t=()=>{A(!0),setTimeout(()=>A(!1),1600)};window.addEventListener(zZ,t);let r=()=>{f(!1),w()||n(!1)};window.addEventListener(BZ,r);let s=()=>n(!0);window.addEventListener(`linear-grab:picker-finished`,s),ae(()=>{window.removeEventListener(zZ,t),window.removeEventListener(BZ,r),window.removeEventListener(`linear-grab:picker-finished`,s)});let l=e$(c);ae(i2(g));let u=UD().phase,d=WD(e=>{m(e.phase),e.phase===`recording`&&u!==`recording`&&!w()&&n(!1),e.phase===`ready`&&u!==`ready`&&(sj(`capture`),n(!0)),u=e.phase}),p=()=>{o(S(a()));let e=b();e&&x(C(e))};window.addEventListener(`resize`,p),ae(()=>{e(),l(),d(),window.removeEventListener(`resize`,p)})});let ce=!1,le=e=>{if(e.button!==0)return;let t={x:e.clientX,y:e.clientY},n=a();ce=!1;let r=e=>{let r=e.clientX-t.x,i=e.clientY-t.y;Math.abs(r)+Math.abs(i)>4&&(ce=!0),ce&&o(S({x:n.x+r,y:n.y+i}))},i=()=>{window.removeEventListener(`pointermove`,r),window.removeEventListener(`pointerup`,i),ce&&Er({launcherPos:a()}),setTimeout(()=>{ce=!1},0)};window.addEventListener(`pointermove`,r),window.addEventListener(`pointerup`,i)},ue=()=>a().y>260,de=e=>{f(!1),sj(`activity`,e),n(!0)},fe=e=>{if(e.button!==0)return;e.preventDefault(),e.stopPropagation();let t=e.clientX,n=ne(),i=b(),a=e=>{let a=e.clientX-t,o=r()===`right`?-a:a,s=oe(n+o);re(s),i&&r()===`right`&&x(C({x:i.x+(n-s),y:i.y}))},o=()=>{window.removeEventListener(`pointermove`,a),window.removeEventListener(`pointerup`,o),Er({panelWidth:ne(),...b()?{panelPos:b()}:{}})};window.addEventListener(`pointermove`,a),window.addEventListener(`pointerup`,o)},pe=e=>{if(e.button!==0)return;if(e.detail===2){x(null),Er({panelPos:void 0});return}let t={x:e.clientX,y:e.clientY},n=b()??{x:r()===`right`?window.innerWidth-ne():0,y:0},i=!1,a=e=>{let r=e.clientX-t.x,a=e.clientY-t.y;Math.abs(r)+Math.abs(a)>4&&(i=!0),i&&x(C({x:n.x+r,y:n.y+a}))},o=()=>{window.removeEventListener(`pointermove`,a),window.removeEventListener(`pointerup`,o);let e=b();i&&e&&Er({panelPos:e})};window.addEventListener(`pointermove`,a),window.addEventListener(`pointerup`,o)};return[j(M,{get when(){return!t()},get children(){var e=U7(),t=e.firstChild;return t.$$click=()=>{ce||p()===`recording`||h().active||(f(!1),n(!0))},t.$$pointerdown=le,P(t,j(M,{get when(){return p()===`recording`||h().active},get fallback(){return[(()=>{var e=G7();return e.$$click=()=>{ce||(f(!1),n(!0))},P(e,j(F7,{size:13})),e})(),K7(),(()=>{var e=Y7(),t=e.firstChild,n=t.nextSibling;return e.$$click=e=>{e.stopPropagation(),!ce&&f(e=>!e)},P(n,(()=>{var e=$e(()=>!!te());return()=>e()?`Copied ✓`:`${l().length} run`})()),P(e,j(M,{get when(){return $e(()=>!te())()&&u().length>0},get children(){return[q7(),(()=>{var e=J7(),t=e.firstChild;return P(e,()=>u().length,t),e})()]}}),null),D(e=>{var r=`size-2 rounded-full ${te()?`bg-success`:l().length?`bg-success animate-pulse`:`bg-text-faint`}`,i=`min-w-[3.5ch] text-left text-[11px] font-medium tabular-nums ${te()?`text-success`:`text-text-dim`}`;return r!==e.e&&st(t,e.e=r),i!==e.t&&st(n,e.t=i),e},{e:void 0,t:void 0}),e})()]},get children(){return j(M,{get when(){return p()===`recording`},get fallback(){return[X7(),(()=>{var e=Z7(),t=e.firstChild;return P(e,()=>Math.ceil(h().msLeft/1e3),t),e})(),(()=>{var e=Q7(),t=e.firstChild;return P(e,()=>h().total,t),D(()=>it(e,`title`,Object.entries(h().byTrigger).map(([e,t])=>`${t} ${e}`).join(` · `)||`hover / open the component to record its states`)),e})(),(()=>{var e=B7();return e.$$click=e=>{e.stopPropagation(),!ce&&o2()},e})()]},get children(){return[R7(),(()=>{var e=z7();return P(e,()=>y(_())),e})(),(()=>{var e=B7();return e.$$click=()=>{ce||tO()},e})()]}})}})),P(e,j(M,{get when(){return d()},get children(){var e=H7(),t=e.firstChild;return P(e,j(M,{get when(){return u().length>0},get children(){return[V7(),j(We,{get each(){return u()},children:e=>j(l9,{agent:e,review:!0,onOpen:de})})]}}),t),P(e,j(M,{get when(){return l().length>0},get fallback(){return $7()},get children(){return j(We,{get each(){return l()},children:e=>j(l9,{agent:e,onOpen:de})})}}),null),D(()=>st(e,`bg-surface border-border absolute w-72 rounded-lg border p-1.5 font-sans shadow-2xl ${ue()?`bottom-full mb-2`:`top-full mt-2`} ${a().x>window.innerWidth-300?`right-0`:`left-0`}`)),e}}),null),D(t=>{var n=`${a().x}px`,r=`${a().y}px`;return n!==t.e&&dt(e,`left`,t.e=n),r!==t.t&&dt(e,`top`,t.t=r),t},{e:void 0,t:void 0}),e}}),j(M,{get when(){return t()},get children(){var e=W7(),t=e.firstChild;return t.$$pointerdown=fe,P(e,j(I7,{onGrab:()=>n(!0),onClose:()=>n(!1),get onHeaderPointerDown(){return w()?void 0:pe},get pinned(){return w()},onTogglePin:se}),null),D(n=>{var i=`bg-bg text-text border-border fixed z-[2147483645] flex max-w-[100vw] flex-col overflow-hidden font-sans text-[13px] antialiased ${w()?``:`shadow-2xl`} ${!w()&&b()?`rounded-xl border`:r()===`right`?`top-0 right-0 h-screen border-l`:`top-0 left-0 h-screen border-r`}`,a={width:`${ne()}px`,...!w()&&b()?{left:`${b().x}px`,top:`${b().y}px`,height:`${Math.min(680,window.innerHeight-16)}px`}:{}},o=`hover:bg-accent/50 active:bg-accent absolute top-0 z-10 h-full w-1 cursor-col-resize transition-colors ${r()===`right`?`left-0`:`right-0`}`;return i!==n.e&&st(e,n.e=i),n.t=ut(e,a,n.t),o!==n.a&&st(t,n.a=o),n},{e:void 0,t:void 0,a:void 0}),e}})]}function l9(e){return(()=>{var t=e9(),n=t.firstChild,r=n.firstChild,i=r.nextSibling,a=i.nextSibling,o=n.nextSibling,s=o.firstChild,c=s.nextSibling;return c.nextSibling,t.$$click=()=>e.onOpen(e.agent.id),P(i,()=>e.agent.identifier),P(a,()=>e.agent.title),P(o,(()=>{var t=$e(()=>!!e.review);return()=>t()?`PR ready · needs review`:e.agent.stateName})(),s),P(o,()=>e.agent.delegateName,c),P(o,()=>u9(e.agent.updatedAt),null),D(t=>dt(r,`background`,e.review?`var(--color-warn)`:e.agent.stateColor)),t})()}function u9(e){let t=Math.max(0,Math.floor((Date.now()-Date.parse(e))/1e3));return t<60?`now`:t<3600?`${Math.floor(t/60)}m`:t<86400?`${Math.floor(t/3600)}h`:`${Math.floor(t/86400)}d`}rt([`pointerdown`,`click`]),t9()})();