castle-web-cli 0.4.182 → 0.4.183
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/shell/assets/{index-EGp86HKZ.js → index-DnNy-Z5u.js} +2 -2
- package/dist/shell/assets/{index-C5D4GoKe.css → index-cdsH2lna.css} +1 -1
- package/dist/shell/index.html +2 -2
- package/kits/physics-2d/castle.json +1 -1
- package/kits/physics-2d/engine/fields/fields.module.css +5 -2
- package/package.json +1 -1
|
@@ -41,7 +41,7 @@ Error generating stack: `+e.message+`
|
|
|
41
41
|
}`,{label:`interface`,detail:`definition`,type:`keyword`}),qv("type ${name} = ${type}",{label:`type`,detail:`definition`,type:`keyword`}),qv(`enum \${name} {
|
|
42
42
|
\${}
|
|
43
43
|
}`,{label:`enum`,detail:`definition`,type:`keyword`})]),xy=new gi,Sy=new Set([`Script`,`Block`,`FunctionExpression`,`FunctionDeclaration`,`ArrowFunction`,`MethodDeclaration`,`ForStatement`]);function Cy(e){return(t,n)=>{let r=t.node.getChild(`VariableDefinition`);return r&&n(r,e),!0}}var wy=[`FunctionDeclaration`],Ty={FunctionDeclaration:Cy(`function`),ClassDeclaration:Cy(`class`),ClassExpression:()=>!0,EnumDeclaration:Cy(`constant`),TypeAliasDeclaration:Cy(`type`),NamespaceDeclaration:Cy(`namespace`),VariableDefinition(e,t){e.matchContext(wy)||t(e,`variable`)},TypeDefinition(e,t){t(e,`type`)},__proto__:null};function Ey(e,t){let n=xy.get(t);if(n)return n;let r=[],i=!0;function a(t,n){let i=e.sliceString(t.from,t.to);r.push({label:i,type:n})}return t.cursor(Yr.IncludeAnonymous).iterate(t=>{if(i)i=!1;else if(t.name){let e=Ty[t.name];if(e&&e(t,a)||Sy.has(t.name))return!1}else if(t.to-t.from>8192){for(let n of Ey(e,t.node))r.push(n);return!1}}),xy.set(t,r),r}var Dy=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,Oy=[`TemplateString`,`String`,`RegExp`,`LineComment`,`BlockComment`,`VariableDefinition`,`TypeDefinition`,`Label`,`PropertyDefinition`,`PropertyName`,`PrivatePropertyDefinition`,`PrivatePropertyName`,`JSXText`,`JSXAttributeValue`,`JSXOpenTag`,`JSXCloseTag`,`JSXSelfClosingTag`,`.`,`?.`];function ky(e){let t=qh(e.state).resolveInner(e.pos,-1);if(Oy.indexOf(t.name)>-1)return null;let n=t.name==`VariableName`||t.to-t.from<20&&Dy.test(e.state.sliceDoc(t.from,t.to));if(!n&&!e.explicit)return null;let r=[];for(let n=t;n;n=n.parent)Sy.has(n.name)&&(r=r.concat(Ey(e.state.doc,n)));return{options:r,from:n?t.from:e.pos,validFor:Dy}}var Ay=Kh.define({name:`javascript`,parser:vo.configure({props:[dg.add({IfStatement:Cg({except:/^\s*({|else\b)/}),TryStatement:Cg({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:Sg,SwitchBody:e=>{let t=e.textAfter,n=/^\s*\}/.test(t),r=/^\s*(case|default)\b/.test(t);return e.baseIndent+(n?0:r?1:2)*e.unit},Block:bg({closing:`}`}),ArrowFunction:e=>e.baseIndent+e.unit,"TemplateString BlockComment":()=>null,"Statement Property":Cg({except:/^\s*{/}),JSXElement(e){let t=/^\s*<\//.test(e.textAfter);return e.lineIndent(e.node.from)+(t?0:e.unit)},JSXEscape(e){let t=/\s*\}/.test(e.textAfter);return e.lineIndent(e.node.from)+(t?0:e.unit)},"JSXOpenTag JSXSelfClosingTag"(e){return e.column(e.node.from)+e.unit}}),Dg.add({"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType":Og,BlockComment(e){return{from:e.from+2,to:e.to-2}},JSXElement(e){let t=e.firstChild;if(!t||t.name==`JSXSelfClosingTag`)return null;let n=e.lastChild;return{from:t.to,to:n.type.isError?e.to:n.from}},"JSXSelfClosingTag JSXOpenTag"(e){let t=e.firstChild?.nextSibling,n=e.lastChild;return!t||t.type.isError?null:{from:t.to,to:n.type.isError?e.to:n.from}}})]}),languageData:{closeBrackets:{brackets:[`(`,`[`,`{`,`'`,`"`,"`"]},commentTokens:{line:`//`,block:{open:`/*`,close:`*/`}},indentOnInput:/^\s*(?:case |default:|\{|\}|<\/)$/,wordChars:`$`}}),jy={test:e=>/^JSX/.test(e.name),facet:Hh({commentTokens:{block:{open:`{/*`,close:`*/}`}}})},My=Ay.configure({dialect:`ts`},`typescript`),Ny=Ay.configure({dialect:`jsx`,props:[Uh.add(e=>e.isTop?[jy]:void 0)]}),Py=Ay.configure({dialect:`jsx ts`,props:[Uh.add(e=>e.isTop?[jy]:void 0)]},`typescript`),Fy=e=>({label:e,type:`keyword`}),Iy=`break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield`.split(` `).map(Fy),Ly=Iy.concat([`declare`,`implements`,`private`,`protected`,`public`].map(Fy));function Ry(e={}){let t=e.jsx?e.typescript?Py:Ny:e.typescript?My:Ay,n=e.typescript?by.concat(Ly):yy.concat(Iy);return new rg(t,[Ay.data.of({autocomplete:L_(Oy,I_(n))}),Ay.data.of({autocomplete:ky}),e.jsx?Hy:[]])}function zy(e){for(;;){if(e.name==`JSXOpenTag`||e.name==`JSXSelfClosingTag`||e.name==`JSXFragmentTag`)return e;if(e.name==`JSXEscape`||!e.parent)return null;e=e.parent}}function By(e,t,n=e.length){for(let r=t?.firstChild;r;r=r.nextSibling)if(r.name==`JSXIdentifier`||r.name==`JSXBuiltin`||r.name==`JSXNamespacedName`||r.name==`JSXMemberExpression`)return e.sliceString(r.from,Math.min(r.to,n));return``}var Vy=typeof navigator==`object`&&/Android\b/.test(navigator.userAgent),Hy=W.inputHandler.of((e,t,n,r,i)=>{if((Vy?e.composing:e.compositionStarted)||e.state.readOnly||t!=n||r!=`>`&&r!=`/`||!Ay.isActiveAt(e.state,t,-1))return!1;let a=i(),{state:o}=a,s=o.changeByRange(e=>{let{head:t}=e,n=qh(o).resolveInner(t-1,-1),i;if(n.name==`JSXStartTag`&&(n=n.parent),!(o.doc.sliceString(t-1,t)!=r||n.name==`JSXAttributeValue`&&n.to>t)){if(r==`>`&&n.name==`JSXFragmentTag`)return{range:e,changes:{from:t,insert:`</>`}};if(r==`/`&&n.name==`JSXStartCloseTag`){let e=n.parent,r=e.parent;if(r&&e.from==t-2&&((i=By(o.doc,r.firstChild,t))||r.firstChild?.name==`JSXFragmentTag`)){let e=`${i}>`;return{range:L.cursor(t+e.length,-1),changes:{from:t,insert:e}}}}else if(r==`>`){let r=zy(n);if(r&&r.name==`JSXOpenTag`&&!/^\/?>|^<\//.test(o.doc.sliceString(t,t+2))&&(i=By(o.doc,r,t)))return{range:e,changes:{from:t,insert:`</${i}>`}}}}return{range:e}});return s.changes.empty?!1:(e.dispatch([a,o.update(s,{userEvent:`input.complete`,scrollIntoView:!0})]),!0)}),Uy={found:!1,groups:[]};function Wy(e){return e.replace(/([a-z0-9])([A-Z])/g,`$1 $2`).replace(/^./,e=>e.toUpperCase()).trim()}function Gy(e){return typeof e==`string`&&/^#[0-9a-fA-F]{3}([0-9a-fA-F]{3}([0-9a-fA-F]{2})?)?$/.test(e)}function Ky(e,t){for(let n=t.firstChild;n;n=n.nextSibling){let t=n.name===`ExportDeclaration`?n.getChild(`VariableDeclaration`):n.name===`VariableDeclaration`?n:null,r=t?.getChild(`VariableDefinition`);if(!r||e.slice(r.from,r.to)!==`PARAMS`)continue;let i=t?.getChild(`ObjectExpression`);if(i)return i}return null}function qy(e,t){let n=e.slice(t.from,t.to);return t.name===`PropertyDefinition`?n:t.name===`String`?nb(n)?.value??null:null}function Jy(e){for(let t=e.firstChild;t;t=t.nextSibling){if(t.name!==`:`)continue;let e=t.nextSibling;return e?{node:e,from:e.from}:null}return null}function Yy(e,t){let n=e.slice(t.from,t.to);if(t.name===`Number`){let e=Number(n);return Number.isFinite(e)?{kind:`number`,value:e}:{kind:`readonly`}}if(t.name===`UnaryExpression`){let e=Number(n.replace(/\s+/g,``));return Number.isFinite(e)?{kind:`number`,value:e}:{kind:`readonly`}}if(t.name===`BooleanLiteral`)return{kind:`boolean`,value:n===`true`};if(t.name===`String`){let e=nb(n);return e?{kind:Gy(e.value)?`color`:`string`,value:e.value,quote:e.quote}:{kind:`readonly`}}return{kind:`readonly`}}function Xy(e,t,n,r){let i={id:r?`${r}.${n}`:n,key:n,label:Wy(n)},a=Jy(t);if(!a?.node)return{...i,kind:`readonly`,source:e.slice(t.from,t.to),from:t.from,to:t.to};let{node:o}=a;return{...i,...Yy(e,o),source:e.slice(o.from,o.to),from:o.from,to:o.to}}function Zy(e){let t=[];for(let n=e.firstChild;n;n=n.nextSibling)n.name===`Property`&&t.push(n);return t}function Qy(e){let t=Ky(e,Py.parser.parse(e).topNode);if(!t)return Uy;let n=[],r=[];for(let i of Zy(t)){let t=i.firstChild,a=t?qy(e,t):null;if(a===null)continue;let o=Jy(i)?.node;if(o?.name===`ObjectExpression`){let t=Zy(o).flatMap(t=>{let n=t.firstChild?qy(e,t.firstChild):null;return n===null?[]:[Xy(e,t,n,a)]});r.push({title:Wy(a),slots:t});continue}n.push(Xy(e,i,a,``))}return{found:!0,groups:n.length>0?[{title:null,slots:n},...r]:r}}function $y(e,t){return typeof t==`boolean`?t?`true`:`false`:typeof t==`number`?Number.isFinite(t)?String(t):`0`:rb(t,e.quote??`'`)}function eb(e,t){for(let n of e.groups)for(let e of n.slots)if(e.id===t)return e;return null}function tb(e,t,n,r){let i=eb(t,n);if(!i||i.kind===`readonly`)return{text:e,doc:t};let a=$y(i,r);if(a===i.source)return{text:e,doc:t};let o=e.slice(0,i.from)+a+e.slice(i.to),s=a.length-(i.to-i.from),c=e=>e.id===i.id?{...e,value:r,source:a,to:e.from+a.length}:e.from<i.from?e:{...e,from:e.from+s,to:e.to+s};return{text:o,doc:{found:!0,groups:t.groups.map(e=>({...e,slots:e.slots.map(c)}))}}}function nb(e){let t=e[0];if(t!==`'`&&t!==`"`||e.length<2||e[e.length-1]!==t)return null;let n=e.slice(1,-1);if(!n.includes(`\\`))return{value:n,quote:t};let r=``;for(let e=0;e<n.length;e+=1){let t=n[e];if(t===`\\`){let i=n[e+1]??``;r+=i===`'`?`'`:t+i,e+=1}else t===`"`?r+=`\\"`:r+=t}try{return{value:JSON.parse(`"${r}"`),quote:t}}catch{return null}}function rb(e,t){let n=t;for(let r of e)r===`\\`||r===t?n+=`\\${r}`:r===`
|
|
44
|
-
`?n+=`\\n`:r===`\r`?n+=`\\r`:r===` `?n+=`\\t`:n+=r;return n+t}var ib=[500,1e3,2e3,4e3,8e3,15e3],ab=25e3,ob=8e3,sb=new Set,cb=new Map,lb=new Map,ub=new Set,db=null,fb=null,pb=0,mb=0,hb=!1,gb=!1,_b=null,vb=null,yb=new WeakSet,bb=[],xb=!1;function Sb(e){return sb.add(e),Nb(),()=>sb.delete(e)}function Cb(e,t){lb.set(e,t),Nb()}function wb(e,t){let n=cb.get(e);return n||(n=new Set,cb.set(e,n)),n.add(t),Nb(),()=>n.delete(t)}function Tb(){return sb.size>0||lb.size>0||cb.size>0||ub.size>0}function Eb(){return document.visibilityState!==`hidden`&&navigator.onLine!==!1}function Db(){fb!==null&&(clearTimeout(fb),fb=null)}function Ob(){if(fb!==null||!Eb()||!Tb())return;let e=ib[Math.min(pb,ib.length-1)];pb+=1,fb=setTimeout(()=>{fb=null,Tb()&&Nb()},e)}function kb(){_b!==null&&(clearInterval(_b),_b=null),vb!==null&&(clearTimeout(vb),vb=null)}function Ab(){vb!==null&&(clearTimeout(vb),vb=null)}function jb(){kb(),_b=setInterval(()=>{if(document.visibilityState!==`hidden`&&!(!db||db.readyState!==WebSocket.OPEN)&&vb===null){try{db.send(JSON.stringify({type:`ping`}))}catch{Fb(!0);return}vb=setTimeout(()=>{vb=null,Fb(!0)},ob)}},ab)}function Mb(e){return ub.add(e),Nb(),()=>ub.delete(e)}function Nb(){if(Ib(),db||xb||fb)return;if(!Eb()){hb=!0;return}let e=++mb;xb=!0,S(`serve`,`/__castle/ws`).then(t=>{if(xb=!1,mb!==e||!Tb()||!Eb()){yb.add(t),t.close(1e3,`superseded`);return}db=t,t.onopen=()=>{if(mb===e)for(pb=0,jb();bb.length>0&&t.readyState===WebSocket.OPEN;){let e=bb.shift();e&&t.send(e)}},t.onmessage=t=>{if(mb===e){Ab();try{Lb(JSON.parse(t.data))}catch{}}},t.onclose=()=>{mb===e&&(kb(),db=null,!yb.has(t)&&Ob())},t.onerror=()=>t.close()}).catch(()=>{mb===e&&(xb=!1,Ob())})}function Pb(e){let t=JSON.stringify(e);Nb(),db?.readyState===WebSocket.OPEN?db.send(t):bb.push(t)}function Fb(e){if(!Tb()||!Eb())return;pb=0,Db();let t=db;if(!(t&&t.readyState===WebSocket.CONNECTING)&&!(t&&t.readyState===WebSocket.OPEN&&!e)){if(t&&!yb.has(t)){yb.add(t);try{t.close(1e3,`reconnect`)}catch{}db=null}Nb()}}function Ib(){if(gb)return;gb=!0;let e=()=>{hb=!0,Db()},t=(e=!1)=>{let t=hb||e;hb=!1,Fb(t)};document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`?e():t()}),window.addEventListener(`pagehide`,e),window.addEventListener(`offline`,e),window.addEventListener(`pageshow`,e=>t(e.persisted)),window.addEventListener(`focus`,()=>t()),window.addEventListener(`online`,()=>t(!0))}function Lb(e){if(e.type===`pong`)return;for(let t of ub)try{t(e)}catch{}if(typeof e.type==`string`&&lb.has(e.type)){Rb(e.type,e);return}let t=typeof e.type==`string`?cb.get(e.type):void 0;if(t){for(let n of t)try{n(e)}catch{}return}if(e.type!==`files_changed`||!Array.isArray(e.changes))return;let n=[];for(let t of e.changes){if(typeof t?.path!=`string`)continue;let e=t.event;e!==`add`&&e!==`change`&&e!==`delete`||n.push({path:t.path,event:e,...t.forkChanged===!0?{forkChanged:!0}:{},affected:Array.isArray(t.affected)?t.affected.filter(e=>typeof e==`string`):[]})}if(n.length===0)return;let r={changes:n,affected:Array.isArray(e.affected)?e.affected.filter(e=>typeof e==`string`):[]};for(let e of sb)try{e(r)}catch{}}async function Rb(e,t){let n=lb.get(e);if(!n||typeof t.requestId!=`string`)return;let r;try{r=await n(t)}catch(e){r={ok:!1,error:e instanceof Error?e.message:String(e)}}db?.readyState===WebSocket.OPEN&&db.send(JSON.stringify({type:`${e.replace(/_request$/,``)}_response`,requestId:t.requestId,...r}))}var zb=[`.js`,`.jsx`,`.ts`,`.tsx`],Bb=300,Vb=null,Hb=new Set,Ub=new Map,Wb=!1,Gb=0;function Kb(){for(let e of Hb)e()}function qb(e,t){return e===null||t===null?e===t:e.length===t.length&&e.every((e,n)=>e.path===t[n].path&&e.slots===t[n].slots)}function Jb(e){qb(Vb,e)||(Vb=e,Kb())}function Yb(e){let t=Qy(e);return t.found?t.groups.reduce((e,t)=>e+t.slots.length,0):null}async function Xb(e){try{let{contents:t,binary:n}=await je(e);return n?null:Yb(t)}catch{return null}}function Zb(e,t){let n=(Vb??[]).filter(t=>t.path!==e);if(t===null){Jb(n);return}Jb([...n,{path:e,slots:t}].sort((e,t)=>e.path.localeCompare(t.path)))}async function Qb(){let e=Gb+=1;try{let t=await Ae(),n=await Promise.all(t.map(async e=>({path:e,slots:await Xb(e)})));if(e!==Gb)return;Jb(n.filter(e=>e.slots!==null))}catch{e===Gb&&Jb([])}}function $b(e,t){if(!zb.includes(Ge(e)))return;if(t===`delete`){Zb(e,null);return}let n=Ub.get(e);n&&clearTimeout(n),Ub.set(e,setTimeout(()=>{Ub.delete(e),Vb?.some(t=>t.path===e)?Xb(e).then(t=>Zb(e,t)):Qb()},Bb))}function ex(){Wb||(Wb=!0,Sb(e=>{for(let t of e.changes)$b(t.path,t.event)}),Qb())}function tx(e){return ex(),Hb.add(e),()=>{Hb.delete(e)}}function nx(){return Vb}function rx(){return g.useSyncExternalStore(tx,nx,nx)}function ix(e){let t=rx();return!e||!t?null:t.find(t=>t.path===e)??null}function ax(){return Vb!==null}function ox(e){return Vb?.some(t=>t.path===e)??!1}var sx=g.createContext(null),cx=sx.Provider;function lx(){let e=g.useContext(sx);if(!e)throw Error(`PanelHostContext missing`);return e}function ux(e){let t=g.useRef(e);t.current=e,g.useEffect(()=>{let e=e=>{let n=e.data;n&&(n.type===`castle-open-file`&&typeof n.path==`string`?t.current.openFile(n.path):n.type===`castle-open-playtest`&&t.current.openPlaytest(typeof n.scene==`string`?n.scene:void 0))};return window.addEventListener(`message`,e),()=>window.removeEventListener(`message`,e)},[])}function dx(e){return e.line===void 0?e.field===void 0?`fragment`:`field`:`line`}var fx=(e,t)=>`${t}\n${e}`,px=new Map,mx=new Map;function hx(e,t){let n=fx(e,dx(t)),r=mx.get(n);if(r?.size){for(let e of[...r])e(t);return}px.set(n,t)}function gx(e,t){let n=fx(e,t),r=px.get(n);return px.delete(n),r??null}function _x(e,t,n){let r=fx(e,t),i=mx.get(r);return i||(i=new Set,mx.set(r,i)),i.add(n),()=>{i.delete(n),i.size===0&&mx.delete(r)}}var vx={fieldRow:`_fieldRow_xvmu9_4`,fieldLabel:`_fieldLabel_xvmu9_18`,fieldLabelOverridden:`_fieldLabelOverridden_xvmu9_27`,fieldRowOverridden:`_fieldRowOverridden_xvmu9_31`,fieldOverride:`_fieldOverride_xvmu9_38`,fieldNote:`_fieldNote_xvmu9_49`,fieldNoteInner:`_fieldNoteInner_xvmu9_57`,fieldDefault:`_fieldDefault_xvmu9_65`,fieldDefaultInner:`_fieldDefaultInner_xvmu9_71`,fieldResetBtn:`_fieldResetBtn_xvmu9_88`,input:`_input_xvmu9_31`,numberField:`_numberField_xvmu9_113`,numberInput:`_numberInput_xvmu9_118`,numberScrub:`_numberScrub_xvmu9_134`,numberSlider:`_numberSlider_xvmu9_146`,numberValue:`_numberValue_xvmu9_150`,scrubGrip:`_scrubGrip_xvmu9_159`,scrubBubble:`_scrubBubble_xvmu9_172`,sliderFill:`_sliderFill_xvmu9_187`,sliderThumb:`_sliderThumb_xvmu9_197`,numpadBackdrop:`_numpadBackdrop_xvmu9_210`,numpadSheet:`_numpadSheet_xvmu9_220`,numpadValueRow:`_numpadValueRow_xvmu9_228`,numpadValueLabel:`_numpadValueLabel_xvmu9_239`,numpadValueNum:`_numpadValueNum_xvmu9_248`,numpadGrid:`_numpadGrid_xvmu9_255`,numpadKey:`_numpadKey_xvmu9_261`,numpadKeyZero:`_numpadKeyZero_xvmu9_276`,numpadKeyDone:`_numpadKeyDone_xvmu9_280`,colorInput:`_colorInput_xvmu9_287`,checkbox:`_checkbox_xvmu9_298`,checkboxOn:`_checkboxOn_xvmu9_315`,checkboxMark:`_checkboxMark_xvmu9_319`};function yx(...e){return e.filter(Boolean).join(` `)}function bx(e){let[t,n]=(0,g.useState)(()=>typeof window<`u`&&window.matchMedia(e).matches);return(0,g.useEffect)(()=>{let t=window.matchMedia(e),r=e=>n(e.matches);return t.addEventListener(`change`,r),n(t.matches),()=>t.removeEventListener(`change`,r)},[e]),t}function xx(){return bx(`(pointer: coarse)`)}var Sx=(0,g.createContext)({});function Cx({children:e}){let{portalClassName:t}=(0,g.useContext)(Sx);return(0,On.createPortal)(t?(0,M.jsx)(`div`,{className:t,children:e}):e,document.body)}function wx(e){return typeof e==`boolean`?e?`On`:`Off`:e==null||e===``?`none`:String(e)}function Tx({id:e,label:t,overridden:n,defaultValue:r,onReset:i,children:a}){let o=(0,M.jsxs)(`label`,{className:yx(vx.fieldRow,n&&vx.fieldRowOverridden),"data-field-id":e,children:[(0,M.jsx)(`span`,{className:yx(vx.fieldLabel,n&&vx.fieldLabelOverridden),children:t}),a]});return n?(0,M.jsxs)(`div`,{className:vx.fieldOverride,children:[o,(0,M.jsx)(`div`,{className:vx.fieldDefault,children:(0,M.jsxs)(`div`,{className:vx.fieldDefaultInner,children:[(0,M.jsxs)(`span`,{children:[`Default: `,wx(r)]}),i?(0,M.jsx)(`button`,{type:`button`,className:vx.fieldResetBtn,onClick:i,children:`Reset`}):null]})})]}):o}function Ex({value:e,onChange:t,...n}){return(0,M.jsx)(Tx,{...n,children:(0,M.jsx)(`input`,{className:vx.input,"data-field":`text`,value:e??``,onChange:e=>t(e.target.value)})})}function Dx(e){return Number.isFinite(e)?String(e):`0`}function Ox(e,t,n){return typeof t==`number`&&e<t&&(e=t),typeof n==`number`&&e>n&&(e=n),e}var kx=[[`7`,`8`,`9`,`back`],[`4`,`5`,`6`,`sign`],[`1`,`2`,`3`,`dot`],[`0`,`done`]].flat(),Ax={back:`⌫`,sign:`±`,dot:`.`,done:`Done`};function jx({label:e,value:t,min:n,max:r,onCommit:i,onClose:a}){let[o,s]=(0,g.useState)(()=>Dx(t)),c=(0,g.useRef)(!0);function l(){let e=Number(o);i(Ox(Number.isFinite(e)?e:t,n,r)),a()}function u(e){if(e===`done`)return l();if(e===`back`)return c.current=!1,s(e=>e.slice(0,-1));if(e===`sign`)return c.current=!1,s(e=>e.startsWith(`-`)?e.slice(1):`-`+(e===`0`?``:e));let t=c.current;if(c.current=!1,e===`dot`)return s(e=>t?`0.`:e.includes(`.`)?e:e===``||e===`-`?e+`0.`:e+`.`);s(n=>t||n===`0`?e:n===`-0`?`-`+e:n+e)}return(0,M.jsx)(Cx,{children:(0,M.jsx)(`div`,{className:vx.numpadBackdrop,onPointerDown:l,children:(0,M.jsxs)(`div`,{className:vx.numpadSheet,role:`dialog`,"aria-label":`Edit ${e}`,onPointerDown:e=>e.stopPropagation(),children:[(0,M.jsxs)(`div`,{className:vx.numpadValueRow,children:[(0,M.jsx)(`span`,{className:vx.numpadValueLabel,children:e}),(0,M.jsx)(`span`,{className:vx.numpadValueNum,children:o===``||o===`-`?`0`:o})]}),(0,M.jsx)(`div`,{className:vx.numpadGrid,children:kx.map(e=>(0,M.jsx)(`button`,{type:`button`,className:yx(vx.numpadKey,e===`done`&&vx.numpadKeyDone,e===`0`&&vx.numpadKeyZero),onClick:()=>u(e),children:Ax[e]??e},e))})]})})})}var Mx=12,Nx=12,Px=240;function Fx({value:e,min:t,max:n,step:r,onCommit:i,onDone:a}){let[o,s]=(0,g.useState)(()=>Dx(e)),c=(0,g.useRef)(!1);function l(t){if(c.current)return a();let n=Number(t);i(Number.isFinite(n)?n:e),a()}return(0,M.jsx)(`div`,{className:vx.numberField,children:(0,M.jsx)(`input`,{className:yx(vx.input,vx.numberInput),type:`number`,min:t,max:n,step:r,value:o,autoFocus:!0,onFocus:e=>e.currentTarget.select(),onChange:e=>s(e.target.value),onBlur:e=>l(e.target.value),onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),e.currentTarget.blur()):e.key===`Escape`&&(e.preventDefault(),c.current=!0,e.currentTarget.blur())}})})}function Ix(e,t){let n=Math.round(e/t)*t,r=String(t),i=r.includes(`e-`)?Number(r.split(`e-`)[1]):(r.split(`.`)[1]??``).length;return Number(n.toFixed(Math.min(i,100)))}function Lx(e,t){return typeof e==`number`&&typeof t==`number`&&t>e?{min:e,max:t}:null}function Rx({value:e,onChange:t,min:n,max:r,step:i=1,...a}){let o=Number.isFinite(e)?e??0:0,s=Lx(n,r),c=xx(),[l,u]=(0,g.useState)(!1),[d,f]=(0,g.useState)(!1),[p,m]=(0,g.useState)(null),h=(0,g.useRef)(null),_=(0,g.useRef)(null);function v(e,i){i&&(e=Ix(e,i)),e=Ox(e,n,r),e!==o&&t(e)}function y(e){l||d||e.pointerType===`mouse`&&e.button!==0||(_.current={id:e.pointerId,startX:e.clientX,startY:e.clientY,startValue:o,step:i,mode:`pending`})}function b(e){let t=_.current;if(!t||t.id!==e.pointerId)return;let n=e.clientX-t.startX,r=e.clientY-t.startY;if(t.mode===`pending`){if(Math.abs(n)<Mx&&Math.abs(r)<Mx)return;if(Math.abs(r)>=Math.abs(n)){t.mode=`scroll`;return}t.mode=`scrub`,h.current?.setPointerCapture?.(e.pointerId)}if(t.mode===`scrub`)if(e.preventDefault(),m({x:e.clientX,y:e.clientY}),s){let n=h.current.getBoundingClientRect(),r=Math.min(1,Math.max(0,(e.clientX-n.left)/n.width));v(s.min+r*(s.max-s.min),t.step)}else{let e=1+Math.abs(n)/Px;v(t.startValue+Math.round(n/Nx*e)*t.step,t.step)}}function x(e){let t=_.current;if(!t||t.id!==e.pointerId)return;t.mode===`scrub`&&h.current?.releasePointerCapture?.(e.pointerId);let n=t.mode===`pending`;_.current=null,m(null),n&&(c?u:f)(!0)}function S(){_.current=null,m(null)}let C=s?Math.min(100,Math.max(0,(o-s.min)/(s.max-s.min)*100)):0,w=e=>{let i=Ox(e,n,r);i!==o&&t(i)};return d?(0,M.jsx)(Tx,{...a,children:(0,M.jsx)(Fx,{value:o,min:n,max:r,step:i,onCommit:w,onDone:()=>f(!1)})}):(0,M.jsxs)(Tx,{...a,children:[(0,M.jsxs)(`div`,{ref:h,className:yx(vx.input,vx.numberScrub,s?vx.numberSlider:vx.numberGrip),"data-field":`number`,style:{touchAction:`pan-y`},onPointerDown:y,onPointerMove:b,onPointerUp:x,onPointerCancel:S,children:[s?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:vx.sliderFill,style:{width:`${C}%`},"aria-hidden":`true`}),(0,M.jsx)(`div`,{className:vx.sliderThumb,style:{left:`${C}%`},"aria-hidden":`true`})]}):(0,M.jsx)(`span`,{className:vx.scrubGrip,"aria-hidden":`true`,children:`⋮⋮`}),(0,M.jsx)(`span`,{className:vx.numberValue,children:Dx(o)})]}),p?(0,M.jsx)(Cx,{children:(0,M.jsx)(`div`,{className:vx.scrubBubble,style:{left:p.x,top:p.y-40},"aria-hidden":`true`,children:Dx(o)})}):null,l?(0,M.jsx)(jx,{label:a.label,value:o,min:n,max:r,onCommit:w,onClose:()=>u(!1)}):null]})}function zx({checked:e,onChange:t,...n}){return(0,M.jsx)(Tx,{...n,children:(0,M.jsx)(`button`,{type:`button`,className:yx(vx.checkbox,e&&vx.checkboxOn),"data-field":`checkbox`,role:`checkbox`,"aria-checked":!!e,onClick:()=>t(!e),children:(0,M.jsx)(`svg`,{className:vx.checkboxMark,viewBox:`0 0 12 12`,"aria-hidden":`true`,children:(0,M.jsx)(`path`,{d:`M2 6.2L4.8 9 10 3`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`})})})})}function Bx({value:e,onChange:t,...n}){let r=Vx(e),i=r.length===9?r.slice(7):``,a=r.slice(0,7);return(0,M.jsx)(Tx,{...n,children:(0,M.jsx)(`input`,{className:vx.colorInput,"data-field":`color`,type:`color`,value:a,onChange:e=>t(e.target.value+i)})})}function Vx(e){let t=(e??``).trim();return/^#[0-9a-fA-F]{3}$/.test(t)?`#`+t.slice(1).replace(/./g,e=>e+e):/^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$/.test(t)?t:`#000000`}function Hx(e){let t=xe(e),[n,r]=g.useState(!1);return g.useEffect(()=>{if(!t){r(!1);return}let n=!0,i=()=>{Pe(e).then(t=>n&&r(t.some(t=>t.path===e&&t.ownFork)),()=>n&&r(!1))};i();let a=Sb(t=>{t.changes.some(t=>t.path===e&&t.forkChanged===!0)&&i()});return()=>{n=!1,a()}},[e,t]),!v&&(!t||n)}var Ux=400;function Wx(e){let t=Hx(e),[n,r]=g.useState(null),[i,a]=g.useState(null),[o,s]=g.useState(null),c=g.useRef(null),l=g.useRef(null),u=g.useCallback(async()=>{l.current&&=(clearTimeout(l.current),null);let t=c.current;if(t!==null){c.current=null;try{await Ne(e,t),s(null)}catch(e){s(e instanceof Error?e.message:String(e))}}},[e]),d=g.useCallback(async()=>{try{let{contents:t,binary:n}=await je(e);if(n){a(`This file is not text.`);return}a(null),r({text:t,doc:Qy(t)})}catch(e){a(e instanceof Error?e.message:String(e))}},[e]);return g.useEffect(()=>{r(null),d()},[d]),g.useEffect(()=>Sb(t=>{c.current===null&&t.changes.some(t=>t.path===e)&&d()}),[e,d]),g.useEffect(()=>()=>void u(),[u]),{loaded:n,error:i,saveError:o,writable:t,setValue:g.useCallback((e,t)=>{r(n=>{if(!n)return n;let r=tb(n.text,n.doc,e,t);return r.text===n.text?n:(c.current=r.text,l.current&&clearTimeout(l.current),l.current=setTimeout(()=>void u(),Ux),r)})},[u])}}function Gx(e){return(0,M.jsx)(Tx,{id:e.id,label:e.label,children:(0,M.jsx)(`span`,{className:`paramExpr`,title:`${e.source} — not a literal, edit it in Code`,children:e.source})})}function Kx(e){if(!Number.isFinite(e)||Number.isInteger(e))return 1;let t=Math.min((String(e).split(`.`)[1]??``).length,6);return Number((10**-t).toFixed(t))}function qx(e){let{slot:t,onChange:n}=e,r=g.useCallback(e=>n(t.id,e),[n,t.id]);if(e.disabled||t.kind===`readonly`)return(0,M.jsx)(Gx,{id:t.id,label:t.label,source:t.source});if(t.kind===`number`){let e=Number(t.value);return(0,M.jsx)(Rx,{id:t.id,label:t.label,value:e,step:Kx(e),onChange:r})}return t.kind===`boolean`?(0,M.jsx)(zx,{id:t.id,label:t.label,checked:t.value===!0,onChange:r}):t.kind===`color`?(0,M.jsx)(Bx,{id:t.id,label:t.label,value:String(t.value),onChange:r}):(0,M.jsx)(Ex,{id:t.id,label:t.label,value:String(t.value),onChange:r})}var Jx={portalClassName:`castle-params-overlay`};function Yx(e){return(0,M.jsx)(Sx.Provider,{value:Jx,children:(0,M.jsx)(`div`,{className:`paramsFields`,children:e.doc.groups.map((t,n)=>(0,M.jsxs)(`section`,{className:`paramsGroup`,children:[t.title&&(0,M.jsx)(`div`,{className:`paramsGroupTitle`,children:t.title}),t.slots.map(t=>(0,M.jsx)(qx,{slot:t,disabled:e.disabled,onChange:e.onChange},t.id))]},t.title??`#${n}`))})})}function Xx(e){return(0,M.jsxs)(M.Fragment,{children:[e.saveError&&(0,M.jsxs)(`div`,{className:`paramsSaveError`,children:[`Not saved: `,e.saveError]}),!e.writable&&(0,M.jsx)(`div`,{className:`paramsSaveError`,children:`This file belongs to an import. Fork it to change its params.`})]})}function Zx(e){return/\.generated\.[^./]+$/i.test(e)}function Qx(e){return(0,M.jsxs)(`div`,{className:`paramsEmpty`,children:[(0,M.jsx)(`p`,{className:`paramsEmptyLead`,children:`No params in this file.`}),e.generated&&(0,M.jsxs)(`p`,{className:`paramsEmptyBody`,children:[(0,M.jsx)(`code`,{children:Ke(e.file)}),` is generated — a tool rewrites it whole, so anything added here is lost the next time it does. Put params in a file you maintain.`]}),e.writable&&!e.generated&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`p`,{className:`paramsEmptyBody`,children:[`An object called `,(0,M.jsx)(`code`,{children:`PARAMS`}),` inside `,(0,M.jsx)(`code`,{children:e.file}),` shows up here.`]}),(0,M.jsx)(`pre`,{className:`paramsEmptyCode`,children:`export const PARAMS = {
|
|
44
|
+
`?n+=`\\n`:r===`\r`?n+=`\\r`:r===` `?n+=`\\t`:n+=r;return n+t}var ib=[500,1e3,2e3,4e3,8e3,15e3],ab=25e3,ob=8e3,sb=new Set,cb=new Map,lb=new Map,ub=new Set,db=null,fb=null,pb=0,mb=0,hb=!1,gb=!1,_b=null,vb=null,yb=new WeakSet,bb=[],xb=!1;function Sb(e){return sb.add(e),Nb(),()=>sb.delete(e)}function Cb(e,t){lb.set(e,t),Nb()}function wb(e,t){let n=cb.get(e);return n||(n=new Set,cb.set(e,n)),n.add(t),Nb(),()=>n.delete(t)}function Tb(){return sb.size>0||lb.size>0||cb.size>0||ub.size>0}function Eb(){return document.visibilityState!==`hidden`&&navigator.onLine!==!1}function Db(){fb!==null&&(clearTimeout(fb),fb=null)}function Ob(){if(fb!==null||!Eb()||!Tb())return;let e=ib[Math.min(pb,ib.length-1)];pb+=1,fb=setTimeout(()=>{fb=null,Tb()&&Nb()},e)}function kb(){_b!==null&&(clearInterval(_b),_b=null),vb!==null&&(clearTimeout(vb),vb=null)}function Ab(){vb!==null&&(clearTimeout(vb),vb=null)}function jb(){kb(),_b=setInterval(()=>{if(document.visibilityState!==`hidden`&&!(!db||db.readyState!==WebSocket.OPEN)&&vb===null){try{db.send(JSON.stringify({type:`ping`}))}catch{Fb(!0);return}vb=setTimeout(()=>{vb=null,Fb(!0)},ob)}},ab)}function Mb(e){return ub.add(e),Nb(),()=>ub.delete(e)}function Nb(){if(Ib(),db||xb||fb)return;if(!Eb()){hb=!0;return}let e=++mb;xb=!0,S(`serve`,`/__castle/ws`).then(t=>{if(xb=!1,mb!==e||!Tb()||!Eb()){yb.add(t),t.close(1e3,`superseded`);return}db=t,t.onopen=()=>{if(mb===e)for(pb=0,jb();bb.length>0&&t.readyState===WebSocket.OPEN;){let e=bb.shift();e&&t.send(e)}},t.onmessage=t=>{if(mb===e){Ab();try{Lb(JSON.parse(t.data))}catch{}}},t.onclose=()=>{mb===e&&(kb(),db=null,!yb.has(t)&&Ob())},t.onerror=()=>t.close()}).catch(()=>{mb===e&&(xb=!1,Ob())})}function Pb(e){let t=JSON.stringify(e);Nb(),db?.readyState===WebSocket.OPEN?db.send(t):bb.push(t)}function Fb(e){if(!Tb()||!Eb())return;pb=0,Db();let t=db;if(!(t&&t.readyState===WebSocket.CONNECTING)&&!(t&&t.readyState===WebSocket.OPEN&&!e)){if(t&&!yb.has(t)){yb.add(t);try{t.close(1e3,`reconnect`)}catch{}db=null}Nb()}}function Ib(){if(gb)return;gb=!0;let e=()=>{hb=!0,Db()},t=(e=!1)=>{let t=hb||e;hb=!1,Fb(t)};document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`?e():t()}),window.addEventListener(`pagehide`,e),window.addEventListener(`offline`,e),window.addEventListener(`pageshow`,e=>t(e.persisted)),window.addEventListener(`focus`,()=>t()),window.addEventListener(`online`,()=>t(!0))}function Lb(e){if(e.type===`pong`)return;for(let t of ub)try{t(e)}catch{}if(typeof e.type==`string`&&lb.has(e.type)){Rb(e.type,e);return}let t=typeof e.type==`string`?cb.get(e.type):void 0;if(t){for(let n of t)try{n(e)}catch{}return}if(e.type!==`files_changed`||!Array.isArray(e.changes))return;let n=[];for(let t of e.changes){if(typeof t?.path!=`string`)continue;let e=t.event;e!==`add`&&e!==`change`&&e!==`delete`||n.push({path:t.path,event:e,...t.forkChanged===!0?{forkChanged:!0}:{},affected:Array.isArray(t.affected)?t.affected.filter(e=>typeof e==`string`):[]})}if(n.length===0)return;let r={changes:n,affected:Array.isArray(e.affected)?e.affected.filter(e=>typeof e==`string`):[]};for(let e of sb)try{e(r)}catch{}}async function Rb(e,t){let n=lb.get(e);if(!n||typeof t.requestId!=`string`)return;let r;try{r=await n(t)}catch(e){r={ok:!1,error:e instanceof Error?e.message:String(e)}}db?.readyState===WebSocket.OPEN&&db.send(JSON.stringify({type:`${e.replace(/_request$/,``)}_response`,requestId:t.requestId,...r}))}var zb=[`.js`,`.jsx`,`.ts`,`.tsx`],Bb=300,Vb=null,Hb=new Set,Ub=new Map,Wb=!1,Gb=0;function Kb(){for(let e of Hb)e()}function qb(e,t){return e===null||t===null?e===t:e.length===t.length&&e.every((e,n)=>e.path===t[n].path&&e.slots===t[n].slots)}function Jb(e){qb(Vb,e)||(Vb=e,Kb())}function Yb(e){let t=Qy(e);return t.found?t.groups.reduce((e,t)=>e+t.slots.length,0):null}async function Xb(e){try{let{contents:t,binary:n}=await je(e);return n?null:Yb(t)}catch{return null}}function Zb(e,t){let n=(Vb??[]).filter(t=>t.path!==e);if(t===null){Jb(n);return}Jb([...n,{path:e,slots:t}].sort((e,t)=>e.path.localeCompare(t.path)))}async function Qb(){let e=Gb+=1;try{let t=await Ae(),n=await Promise.all(t.map(async e=>({path:e,slots:await Xb(e)})));if(e!==Gb)return;Jb(n.filter(e=>e.slots!==null))}catch{e===Gb&&Jb([])}}function $b(e,t){if(!zb.includes(Ge(e)))return;if(t===`delete`){Zb(e,null);return}let n=Ub.get(e);n&&clearTimeout(n),Ub.set(e,setTimeout(()=>{Ub.delete(e),Vb?.some(t=>t.path===e)?Xb(e).then(t=>Zb(e,t)):Qb()},Bb))}function ex(){Wb||(Wb=!0,Sb(e=>{for(let t of e.changes)$b(t.path,t.event)}),Qb())}function tx(e){return ex(),Hb.add(e),()=>{Hb.delete(e)}}function nx(){return Vb}function rx(){return g.useSyncExternalStore(tx,nx,nx)}function ix(e){let t=rx();return!e||!t?null:t.find(t=>t.path===e)??null}function ax(){return Vb!==null}function ox(e){return Vb?.some(t=>t.path===e)??!1}var sx=g.createContext(null),cx=sx.Provider;function lx(){let e=g.useContext(sx);if(!e)throw Error(`PanelHostContext missing`);return e}function ux(e){let t=g.useRef(e);t.current=e,g.useEffect(()=>{let e=e=>{let n=e.data;n&&(n.type===`castle-open-file`&&typeof n.path==`string`?t.current.openFile(n.path):n.type===`castle-open-playtest`&&t.current.openPlaytest(typeof n.scene==`string`?n.scene:void 0))};return window.addEventListener(`message`,e),()=>window.removeEventListener(`message`,e)},[])}function dx(e){return e.line===void 0?e.field===void 0?`fragment`:`field`:`line`}var fx=(e,t)=>`${t}\n${e}`,px=new Map,mx=new Map;function hx(e,t){let n=fx(e,dx(t)),r=mx.get(n);if(r?.size){for(let e of[...r])e(t);return}px.set(n,t)}function gx(e,t){let n=fx(e,t),r=px.get(n);return px.delete(n),r??null}function _x(e,t,n){let r=fx(e,t),i=mx.get(r);return i||(i=new Set,mx.set(r,i)),i.add(n),()=>{i.delete(n),i.size===0&&mx.delete(r)}}var vx={fieldRow:`_fieldRow_13ckg_4`,fieldLabel:`_fieldLabel_13ckg_21`,fieldLabelOverridden:`_fieldLabelOverridden_13ckg_30`,fieldRowOverridden:`_fieldRowOverridden_13ckg_34`,fieldOverride:`_fieldOverride_13ckg_41`,fieldNote:`_fieldNote_13ckg_52`,fieldNoteInner:`_fieldNoteInner_13ckg_60`,fieldDefault:`_fieldDefault_13ckg_68`,fieldDefaultInner:`_fieldDefaultInner_13ckg_74`,fieldResetBtn:`_fieldResetBtn_13ckg_91`,input:`_input_13ckg_34`,numberField:`_numberField_13ckg_116`,numberInput:`_numberInput_13ckg_121`,numberScrub:`_numberScrub_13ckg_137`,numberSlider:`_numberSlider_13ckg_149`,numberValue:`_numberValue_13ckg_153`,scrubGrip:`_scrubGrip_13ckg_162`,scrubBubble:`_scrubBubble_13ckg_175`,sliderFill:`_sliderFill_13ckg_190`,sliderThumb:`_sliderThumb_13ckg_200`,numpadBackdrop:`_numpadBackdrop_13ckg_213`,numpadSheet:`_numpadSheet_13ckg_223`,numpadValueRow:`_numpadValueRow_13ckg_231`,numpadValueLabel:`_numpadValueLabel_13ckg_242`,numpadValueNum:`_numpadValueNum_13ckg_251`,numpadGrid:`_numpadGrid_13ckg_258`,numpadKey:`_numpadKey_13ckg_264`,numpadKeyZero:`_numpadKeyZero_13ckg_279`,numpadKeyDone:`_numpadKeyDone_13ckg_283`,colorInput:`_colorInput_13ckg_290`,checkbox:`_checkbox_13ckg_301`,checkboxOn:`_checkboxOn_13ckg_318`,checkboxMark:`_checkboxMark_13ckg_322`};function yx(...e){return e.filter(Boolean).join(` `)}function bx(e){let[t,n]=(0,g.useState)(()=>typeof window<`u`&&window.matchMedia(e).matches);return(0,g.useEffect)(()=>{let t=window.matchMedia(e),r=e=>n(e.matches);return t.addEventListener(`change`,r),n(t.matches),()=>t.removeEventListener(`change`,r)},[e]),t}function xx(){return bx(`(pointer: coarse)`)}var Sx=(0,g.createContext)({});function Cx({children:e}){let{portalClassName:t}=(0,g.useContext)(Sx);return(0,On.createPortal)(t?(0,M.jsx)(`div`,{className:t,children:e}):e,document.body)}function wx(e){return typeof e==`boolean`?e?`On`:`Off`:e==null||e===``?`none`:String(e)}function Tx({id:e,label:t,overridden:n,defaultValue:r,onReset:i,children:a}){let o=(0,M.jsxs)(`label`,{className:yx(vx.fieldRow,n&&vx.fieldRowOverridden),"data-field-id":e,children:[(0,M.jsx)(`span`,{className:yx(vx.fieldLabel,n&&vx.fieldLabelOverridden),children:t}),a]});return n?(0,M.jsxs)(`div`,{className:vx.fieldOverride,children:[o,(0,M.jsx)(`div`,{className:vx.fieldDefault,children:(0,M.jsxs)(`div`,{className:vx.fieldDefaultInner,children:[(0,M.jsxs)(`span`,{children:[`Default: `,wx(r)]}),i?(0,M.jsx)(`button`,{type:`button`,className:vx.fieldResetBtn,onClick:i,children:`Reset`}):null]})})]}):o}function Ex({value:e,onChange:t,...n}){return(0,M.jsx)(Tx,{...n,children:(0,M.jsx)(`input`,{className:vx.input,"data-field":`text`,value:e??``,onChange:e=>t(e.target.value)})})}function Dx(e){return Number.isFinite(e)?String(e):`0`}function Ox(e,t,n){return typeof t==`number`&&e<t&&(e=t),typeof n==`number`&&e>n&&(e=n),e}var kx=[[`7`,`8`,`9`,`back`],[`4`,`5`,`6`,`sign`],[`1`,`2`,`3`,`dot`],[`0`,`done`]].flat(),Ax={back:`⌫`,sign:`±`,dot:`.`,done:`Done`};function jx({label:e,value:t,min:n,max:r,onCommit:i,onClose:a}){let[o,s]=(0,g.useState)(()=>Dx(t)),c=(0,g.useRef)(!0);function l(){let e=Number(o);i(Ox(Number.isFinite(e)?e:t,n,r)),a()}function u(e){if(e===`done`)return l();if(e===`back`)return c.current=!1,s(e=>e.slice(0,-1));if(e===`sign`)return c.current=!1,s(e=>e.startsWith(`-`)?e.slice(1):`-`+(e===`0`?``:e));let t=c.current;if(c.current=!1,e===`dot`)return s(e=>t?`0.`:e.includes(`.`)?e:e===``||e===`-`?e+`0.`:e+`.`);s(n=>t||n===`0`?e:n===`-0`?`-`+e:n+e)}return(0,M.jsx)(Cx,{children:(0,M.jsx)(`div`,{className:vx.numpadBackdrop,onPointerDown:l,children:(0,M.jsxs)(`div`,{className:vx.numpadSheet,role:`dialog`,"aria-label":`Edit ${e}`,onPointerDown:e=>e.stopPropagation(),children:[(0,M.jsxs)(`div`,{className:vx.numpadValueRow,children:[(0,M.jsx)(`span`,{className:vx.numpadValueLabel,children:e}),(0,M.jsx)(`span`,{className:vx.numpadValueNum,children:o===``||o===`-`?`0`:o})]}),(0,M.jsx)(`div`,{className:vx.numpadGrid,children:kx.map(e=>(0,M.jsx)(`button`,{type:`button`,className:yx(vx.numpadKey,e===`done`&&vx.numpadKeyDone,e===`0`&&vx.numpadKeyZero),onClick:()=>u(e),children:Ax[e]??e},e))})]})})})}var Mx=12,Nx=12,Px=240;function Fx({value:e,min:t,max:n,step:r,onCommit:i,onDone:a}){let[o,s]=(0,g.useState)(()=>Dx(e)),c=(0,g.useRef)(!1);function l(t){if(c.current)return a();let n=Number(t);i(Number.isFinite(n)?n:e),a()}return(0,M.jsx)(`div`,{className:vx.numberField,children:(0,M.jsx)(`input`,{className:yx(vx.input,vx.numberInput),type:`number`,min:t,max:n,step:r,value:o,autoFocus:!0,onFocus:e=>e.currentTarget.select(),onChange:e=>s(e.target.value),onBlur:e=>l(e.target.value),onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),e.currentTarget.blur()):e.key===`Escape`&&(e.preventDefault(),c.current=!0,e.currentTarget.blur())}})})}function Ix(e,t){let n=Math.round(e/t)*t,r=String(t),i=r.includes(`e-`)?Number(r.split(`e-`)[1]):(r.split(`.`)[1]??``).length;return Number(n.toFixed(Math.min(i,100)))}function Lx(e,t){return typeof e==`number`&&typeof t==`number`&&t>e?{min:e,max:t}:null}function Rx({value:e,onChange:t,min:n,max:r,step:i=1,...a}){let o=Number.isFinite(e)?e??0:0,s=Lx(n,r),c=xx(),[l,u]=(0,g.useState)(!1),[d,f]=(0,g.useState)(!1),[p,m]=(0,g.useState)(null),h=(0,g.useRef)(null),_=(0,g.useRef)(null);function v(e,i){i&&(e=Ix(e,i)),e=Ox(e,n,r),e!==o&&t(e)}function y(e){l||d||e.pointerType===`mouse`&&e.button!==0||(_.current={id:e.pointerId,startX:e.clientX,startY:e.clientY,startValue:o,step:i,mode:`pending`})}function b(e){let t=_.current;if(!t||t.id!==e.pointerId)return;let n=e.clientX-t.startX,r=e.clientY-t.startY;if(t.mode===`pending`){if(Math.abs(n)<Mx&&Math.abs(r)<Mx)return;if(Math.abs(r)>=Math.abs(n)){t.mode=`scroll`;return}t.mode=`scrub`,h.current?.setPointerCapture?.(e.pointerId)}if(t.mode===`scrub`)if(e.preventDefault(),m({x:e.clientX,y:e.clientY}),s){let n=h.current.getBoundingClientRect(),r=Math.min(1,Math.max(0,(e.clientX-n.left)/n.width));v(s.min+r*(s.max-s.min),t.step)}else{let e=1+Math.abs(n)/Px;v(t.startValue+Math.round(n/Nx*e)*t.step,t.step)}}function x(e){let t=_.current;if(!t||t.id!==e.pointerId)return;t.mode===`scrub`&&h.current?.releasePointerCapture?.(e.pointerId);let n=t.mode===`pending`;_.current=null,m(null),n&&(c?u:f)(!0)}function S(){_.current=null,m(null)}let C=s?Math.min(100,Math.max(0,(o-s.min)/(s.max-s.min)*100)):0,w=e=>{let i=Ox(e,n,r);i!==o&&t(i)};return d?(0,M.jsx)(Tx,{...a,children:(0,M.jsx)(Fx,{value:o,min:n,max:r,step:i,onCommit:w,onDone:()=>f(!1)})}):(0,M.jsxs)(Tx,{...a,children:[(0,M.jsxs)(`div`,{ref:h,className:yx(vx.input,vx.numberScrub,s?vx.numberSlider:vx.numberGrip),"data-field":`number`,style:{touchAction:`pan-y`},onPointerDown:y,onPointerMove:b,onPointerUp:x,onPointerCancel:S,children:[s?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:vx.sliderFill,style:{width:`${C}%`},"aria-hidden":`true`}),(0,M.jsx)(`div`,{className:vx.sliderThumb,style:{left:`${C}%`},"aria-hidden":`true`})]}):(0,M.jsx)(`span`,{className:vx.scrubGrip,"aria-hidden":`true`,children:`⋮⋮`}),(0,M.jsx)(`span`,{className:vx.numberValue,children:Dx(o)})]}),p?(0,M.jsx)(Cx,{children:(0,M.jsx)(`div`,{className:vx.scrubBubble,style:{left:p.x,top:p.y-40},"aria-hidden":`true`,children:Dx(o)})}):null,l?(0,M.jsx)(jx,{label:a.label,value:o,min:n,max:r,onCommit:w,onClose:()=>u(!1)}):null]})}function zx({checked:e,onChange:t,...n}){return(0,M.jsx)(Tx,{...n,children:(0,M.jsx)(`button`,{type:`button`,className:yx(vx.checkbox,e&&vx.checkboxOn),"data-field":`checkbox`,role:`checkbox`,"aria-checked":!!e,onClick:()=>t(!e),children:(0,M.jsx)(`svg`,{className:vx.checkboxMark,viewBox:`0 0 12 12`,"aria-hidden":`true`,children:(0,M.jsx)(`path`,{d:`M2 6.2L4.8 9 10 3`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`})})})})}function Bx({value:e,onChange:t,...n}){let r=Vx(e),i=r.length===9?r.slice(7):``,a=r.slice(0,7);return(0,M.jsx)(Tx,{...n,children:(0,M.jsx)(`input`,{className:vx.colorInput,"data-field":`color`,type:`color`,value:a,onChange:e=>t(e.target.value+i)})})}function Vx(e){let t=(e??``).trim();return/^#[0-9a-fA-F]{3}$/.test(t)?`#`+t.slice(1).replace(/./g,e=>e+e):/^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$/.test(t)?t:`#000000`}function Hx(e){let t=xe(e),[n,r]=g.useState(!1);return g.useEffect(()=>{if(!t){r(!1);return}let n=!0,i=()=>{Pe(e).then(t=>n&&r(t.some(t=>t.path===e&&t.ownFork)),()=>n&&r(!1))};i();let a=Sb(t=>{t.changes.some(t=>t.path===e&&t.forkChanged===!0)&&i()});return()=>{n=!1,a()}},[e,t]),!v&&(!t||n)}var Ux=400;function Wx(e){let t=Hx(e),[n,r]=g.useState(null),[i,a]=g.useState(null),[o,s]=g.useState(null),c=g.useRef(null),l=g.useRef(null),u=g.useCallback(async()=>{l.current&&=(clearTimeout(l.current),null);let t=c.current;if(t!==null){c.current=null;try{await Ne(e,t),s(null)}catch(e){s(e instanceof Error?e.message:String(e))}}},[e]),d=g.useCallback(async()=>{try{let{contents:t,binary:n}=await je(e);if(n){a(`This file is not text.`);return}a(null),r({text:t,doc:Qy(t)})}catch(e){a(e instanceof Error?e.message:String(e))}},[e]);return g.useEffect(()=>{r(null),d()},[d]),g.useEffect(()=>Sb(t=>{c.current===null&&t.changes.some(t=>t.path===e)&&d()}),[e,d]),g.useEffect(()=>()=>void u(),[u]),{loaded:n,error:i,saveError:o,writable:t,setValue:g.useCallback((e,t)=>{r(n=>{if(!n)return n;let r=tb(n.text,n.doc,e,t);return r.text===n.text?n:(c.current=r.text,l.current&&clearTimeout(l.current),l.current=setTimeout(()=>void u(),Ux),r)})},[u])}}function Gx(e){return(0,M.jsx)(Tx,{id:e.id,label:e.label,children:(0,M.jsx)(`span`,{className:`paramExpr`,title:`${e.source} — not a literal, edit it in Code`,children:e.source})})}function Kx(e){if(!Number.isFinite(e)||Number.isInteger(e))return 1;let t=Math.min((String(e).split(`.`)[1]??``).length,6);return Number((10**-t).toFixed(t))}function qx(e){let{slot:t,onChange:n}=e,r=g.useCallback(e=>n(t.id,e),[n,t.id]);if(e.disabled||t.kind===`readonly`)return(0,M.jsx)(Gx,{id:t.id,label:t.label,source:t.source});if(t.kind===`number`){let e=Number(t.value);return(0,M.jsx)(Rx,{id:t.id,label:t.label,value:e,step:Kx(e),onChange:r})}return t.kind===`boolean`?(0,M.jsx)(zx,{id:t.id,label:t.label,checked:t.value===!0,onChange:r}):t.kind===`color`?(0,M.jsx)(Bx,{id:t.id,label:t.label,value:String(t.value),onChange:r}):(0,M.jsx)(Ex,{id:t.id,label:t.label,value:String(t.value),onChange:r})}var Jx={portalClassName:`castle-params-overlay`};function Yx(e){return(0,M.jsx)(Sx.Provider,{value:Jx,children:(0,M.jsx)(`div`,{className:`paramsFields`,children:e.doc.groups.map((t,n)=>(0,M.jsxs)(`section`,{className:`paramsGroup`,children:[t.title&&(0,M.jsx)(`div`,{className:`paramsGroupTitle`,children:t.title}),t.slots.map(t=>(0,M.jsx)(qx,{slot:t,disabled:e.disabled,onChange:e.onChange},t.id))]},t.title??`#${n}`))})})}function Xx(e){return(0,M.jsxs)(M.Fragment,{children:[e.saveError&&(0,M.jsxs)(`div`,{className:`paramsSaveError`,children:[`Not saved: `,e.saveError]}),!e.writable&&(0,M.jsx)(`div`,{className:`paramsSaveError`,children:`This file belongs to an import. Fork it to change its params.`})]})}function Zx(e){return/\.generated\.[^./]+$/i.test(e)}function Qx(e){return(0,M.jsxs)(`div`,{className:`paramsEmpty`,children:[(0,M.jsx)(`p`,{className:`paramsEmptyLead`,children:`No params in this file.`}),e.generated&&(0,M.jsxs)(`p`,{className:`paramsEmptyBody`,children:[(0,M.jsx)(`code`,{children:Ke(e.file)}),` is generated — a tool rewrites it whole, so anything added here is lost the next time it does. Put params in a file you maintain.`]}),e.writable&&!e.generated&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`p`,{className:`paramsEmptyBody`,children:[`An object called `,(0,M.jsx)(`code`,{children:`PARAMS`}),` inside `,(0,M.jsx)(`code`,{children:e.file}),` shows up here.`]}),(0,M.jsx)(`pre`,{className:`paramsEmptyCode`,children:`export const PARAMS = {
|
|
45
45
|
jumpHeight: 4.2,
|
|
46
46
|
};`})]})]})}function $x(){return(0,M.jsxs)(`div`,{className:`paramsEmpty`,children:[(0,M.jsx)(`p`,{className:`paramsEmptyLead`,children:`Nothing in this deck is tunable yet.`}),(0,M.jsxs)(`p`,{className:`paramsEmptyBody`,children:[`An object called `,(0,M.jsx)(`code`,{children:`PARAMS`}),` in any source file shows up here, and its values become fields you can scrub, toggle and pick.`]}),(0,M.jsx)(`pre`,{className:`paramsEmptyCode`,children:`export const PARAMS = {
|
|
47
47
|
jumpHeight: 4.2,
|
|
@@ -444,4 +444,4 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
444
444
|
|
|
445
445
|
`),chips:n}}function tq(e,t){let n=[],r=e.map((r,i)=>{if(r.kind!==`md`)return r;let a=eq(r.text,t&&i===e.length-1);for(let e of a.chips)n.includes(e)||n.push(e);return{kind:`md`,text:a.prose}});return n.length>0&&r.push({kind:`chips`,chips:n}),r}function nq(e){let t;try{t=JSON.parse(e)}catch{return null}if(!t||!Array.isArray(t.questions))return null;let n=[];return t.questions.forEach((e,t)=>{let r=e;if(!r||typeof r.q!=`string`||!Array.isArray(r.options))return;let i=r.options.filter(e=>typeof e==`string`&&e.trim()!==``);if(i.length===0)return;let a=typeof r.id==`string`&&r.id.trim()?r.id.trim():`q${t}`;n.push({id:a,q:r.q,options:i,multi:r.multi===!0})}),n.length===0?null:{questions:n}}function rq(e,t=!1){let n=!1;if((e.split("```").length-1)%2==1){let t=e.lastIndexOf("```"),r=e.slice(t+3),i=r.indexOf(`
|
|
446
446
|
`),a=(i===-1?r:r.slice(0,i)).trim();i===-1?a===``?e=e.slice(0,t):`ask`.startsWith(a)&&(e=e.slice(0,t),n=!0):a===`ask`&&(e=e.slice(0,t),n=!0)}let r=[],i=0,a;for(QK.lastIndex=0;(a=QK.exec(e))!==null;){let t=nq(a[1]);t&&(a.index>i&&r.push({kind:`md`,text:e.slice(i,a.index)}),r.push({kind:`ask`,spec:t}),i=a.index+a[0].length)}return i<e.length&&r.push({kind:`md`,text:e.slice(i)}),r.length===0&&!n&&r.push({kind:`md`,text:e}),n&&r.push({kind:`ask-pending`}),tq(r,t)}function iq(e){return e.some(e=>e.kind===`ask`||e.kind===`ask-pending`||e.kind===`chips`||e.kind===`md`&&e.text.trim()!==``)}function aq(e,t){let n=[];for(let r of e.questions){let e=(t[r.id]??[]).filter(e=>r.options.includes(e));e.length!==0&&n.push(`- ${r.q} \u2192 ${e.join(`, `)}`)}return n.length?`Here's what I picked:\n${n.join(`
|
|
447
|
-
`)}`:``}var oq={thinking:(0,M.jsx)(N,{name:`lightbulb`}),reading:(0,M.jsx)(N,{name:`book`}),building:(0,M.jsx)(N,{name:`hammer`}),painting:(0,M.jsx)(N,{name:`pencil`}),playing:(0,M.jsx)(N,{name:`gamepad`})},sq={thinking:`Thinking`,reading:`Reading files`,building:`Editing logic`,painting:`Editing art`,playing:`Playtesting`},cq={thinking:`#FFC826`,reading:`#FFC826`,building:`#FFEB57`,painting:`#FFEB57`,playing:`#D3FC7E`};function lq(e){if(e.status===`done`)return{icon:(0,M.jsx)(N,{name:`check`}),color:`#5AC54F`};if(e.status===`failed`)return{icon:(0,M.jsx)(N,{name:`times`}),color:`#F5545D`};if(e.status===`interrupted`)return{icon:(0,M.jsx)(N,{name:`stop`}),color:`#B4B4B4`};if(e.status===`blocked`)return{icon:(0,M.jsx)(N,{name:`stop`}),color:`#F5A623`};let t=e.avatar&&oq[e.avatar]?e.avatar:`thinking`;return{icon:oq[t],color:cq[t]}}function uq(e){let t=Math.max(1,Math.round((e??0)/1e3));if(t<60)return`Thought for ${t}s`;let n=Math.floor(t/60),r=t%60;return r===0?`Thought for ${n}m`:`Thought for ${n}m ${r}s`}var dq=`plan.md`;function fq(){let e=lx();return(0,M.jsxs)(`div`,{className:`operator-line msg-plan`,children:[(0,M.jsx)(N,{name:`file-md`,className:`icon-inline`}),(0,M.jsxs)(`span`,{children:[(0,M.jsx)(`button`,{type:`button`,className:`operator-line-link`,title:`Open ${dq}`,onClick:()=>e.openFile(dq),children:dq}),` `,`updated`]})]})}function pq(e){let t=lx();return(0,M.jsx)(`button`,{type:`button`,className:`msg-file`,title:`Open ${UM(e.loc)}`,onClick:()=>nN(t,e.loc),children:e.token})}function mq(e){let{text:t}=e,n=TK(),r=g.useMemo(()=>tN(t,wK),[t,n]),i=[],a=0;for(let e of r)e.start>a&&i.push(t.slice(a,e.start)),i.push((0,M.jsx)(pq,{loc:e.loc,token:t.slice(e.start,e.end)},e.start)),a=e.end;return a<t.length&&i.push(t.slice(a)),(0,M.jsx)(`span`,{children:i})}var hq=(0,M.jsx)(N,{name:`send`}),gq=(0,M.jsx)(N,{name:`stop`}),_q=(0,M.jsx)(N,{name:`chevron-down`}),vq=[{value:`claude`,label:`Claude`},{value:`cursor`,label:`Cursor`},{value:`smith`,label:`Smith`}],yq=[{value:`opus`,label:`Opus`},{value:`sonnet`,label:`Sonnet`},{value:`fable`,label:`Fable`},{value:`openrouter`,label:`OpenRouter`}];function bq(e,t){return e===`smith`||e===`claude`&&t===`openrouter`}function xq(e){if(!e||!e.trim())return null;let t=e.trim(),n=t.lastIndexOf(`/`);return n>=0?t.slice(n+1):t}function Sq(e,t,n){let r=vq.find(t=>t.value===e)?.label??e??`?`;if(e===`claude`){if(t===`openrouter`){let e=xq(n);return e?`${r} (${e})`:`${r} (OpenRouter)`}let e=yq.find(e=>e.value===t)?.label??t;return e?`${r} (${e})`:r}if(e===`smith`){let e=xq(n);return e?`${r} (${e})`:r}return r}function Cq(e){return`${Sq(e.router,e.routerClaudeModel,e.routerOpenrouterModel)} → ${Sq(e.tasks,e.tasksClaudeModel,e.tasksOpenrouterModel)}`}var wq=`/__castle/agent/model-caps`,Tq=[{value:`balanced`,label:`Balanced`},{value:`nitro`,label:`Nitro`},{value:`exacto`,label:`Exacto`},{value:`floor`,label:`Floor`}],Eq=[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`],Dq={none:`None`,minimal:`Minimal`,low:`Low`,medium:`Medium`,high:`High`,xhigh:`XHigh`,max:`Max`};function Oq(e){let t=e?.reasoningEfforts;if(!t||t.length===0)return null;let n=new Set(t);return Eq.filter(e=>n.has(e)).map(e=>({value:e,label:Dq[e]??e}))}var kq={openai:`OpenAI`,azure:`Azure`,anthropic:`Anthropic`,google:`Google`,"google-vertex":`Vertex`,deepinfra:`DeepInfra`,fireworks:`Fireworks`,together:`Together`,groq:`Groq`,cerebras:`Cerebras`,baseten:`Baseten`},Aq={flex:`Flex`,priority:`Priority`,standard:`Standard`,eu:`EU`};function jq(e){return e.length===0?e:e.charAt(0).toUpperCase()+e.slice(1)}function Mq(e){let[t,n]=e.split(`/`),r=kq[t]??jq(t);return n?`${r} ${Aq[n]??jq(n)}`:r}function Nq(e){let t=e?.providerTiers;return!t||t.length<2?null:[{value:``,label:`Auto`},...t.map(e=>({value:e,label:Mq(e)}))]}function Pq(e,t,n,r,i){let a=e===`router`,o=a?`routerClaudeModel`:`tasksClaudeModel`,s=a?`routerOpenrouterModel`:`tasksOpenrouterModel`,c=[{type:`enum`,key:e,label:a?`Operator`:`Tasks`,options:vq},{type:`enum`,key:o,label:`Model`,options:yq.filter(e=>!r.includes(e.value)),showWhen:t=>t[e]===`claude`,note:i&&t[o]===`openrouter`?`Pick Opus, Sonnet, or Fable to use your Anthropic credentials`:void 0},{type:`text`,key:s,label:`OpenRouter model`,placeholder:a?`openai/gpt-5.6-sol`:`openai/gpt-5.6-terra`,showWhen:t=>bq(t[e],t[o])}];if(t[e]===`smith`){let e=Oq(n);e&&c.push({type:`select`,key:a?`routerReasoningEffort`:`tasksReasoningEffort`,label:`Reasoning`,options:e}),c.push({type:`select`,key:a?`routerRouting`:`tasksRouting`,label:`Routing`,options:Tq});let t=Nq(n);t&&c.push({type:`select`,key:a?`routerProviderTier`:`tasksProviderTier`,label:`Provider`,options:t})}return c}function Fq(e){let{label:t,placeholder:n,value:r,warning:i,onCommit:a}=e,[o,s]=g.useState(r);g.useEffect(()=>s(r),[r]);let c=g.useRef(o),l=g.useRef(r),u=g.useRef(a);c.current=o,l.current=r,u.current=a;let d=()=>{let e=c.current.trim();return e&&e!==l.current?(u.current(e),!0):!1},f=()=>{d()||s(l.current)};g.useEffect(()=>()=>{d()},[]);let p=e=>{s(e),a(e)};return(0,M.jsxs)(`div`,{className:`settings-row settings-row-stack`,children:[(0,M.jsxs)(`div`,{className:`settings-row-main`,children:[(0,M.jsx)(`span`,{className:`settings-label`,children:t}),(0,M.jsx)(`input`,{type:`text`,className:`text-field${i?` settings-text-warn`:``}`,value:o,placeholder:n,onChange:e=>s(e.target.value),onBlur:f,onKeyDown:e=>{e.key===`Enter`&&(f(),e.target.blur())}})]}),i?(0,M.jsxs)(`div`,{className:`settings-warning`,children:[`⚠ `,i.message,i.suggestion?(0,M.jsxs)(M.Fragment,{children:[` `,`Did you mean`,` `,(0,M.jsx)(`button`,{type:`button`,className:`settings-warning-suggest`,onMouseDown:e=>{e.preventDefault(),p(i.suggestion)},children:i.suggestion}),`?`]}):null]}):null]})}function Iq(e,t,n){let r=e?.[t];if(!(!r||!n||r.model!==n))return{message:r.message,suggestion:r.suggestion}}function Lq(e){if(!e||e.limitMicros===null||e.limitMicros<=0)return null;if(e.blocked)return 1;if(e.credits?.plan===`daily`&&e.credits.dailyFreeRemainingCredits!==null){let t=e.credits.dailyFreeRemainingCredits*1e4;return t<=0?1:Math.min(1,Math.max(0,e.usedMicros/(e.usedMicros+t)))}return Math.min(1,e.usedMicros/e.limitMicros)}function Rq(e){let t=e?.autoReload;return!t?.enabled||t.disabledReason||t.thresholdCredits===null||t.amountCredits===null?null:{thresholdCredits:t.thresholdCredits,amountCredits:t.amountCredits}}function zq(e){if(e?.blocked)return`operator-usage-blocked`;if(e?.credits?.plan===`credits`)return e.credits.lowBalance&&!Rq(e.credits)?`operator-usage-warn`:``;let t=Lq(e);return t===null?``:t>=.8?`operator-usage-warn`:``}var Bq=new Intl.NumberFormat(void 0,{style:`currency`,currency:`USD`});function Vq(e){return Bq.format(e/100)}function Hq(e){return Vq(e/1e4)}function Uq(e,t){if(!t||t.displayUnit===`usd`||t.usdPerCredit<=0)return Hq(e);let n=Math.round(e/1e6/t.usdPerCredit);return`${n.toLocaleString()} ${n===1?`credit`:`credits`}`}function Wq(e){return e.resetAtMs?new Date(e.resetAtMs).toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`}):``}function Gq(e){let{usage:t}=e,n=Lq(t);if(n===null)return null;let r=Wq(t),i=t.credits?.plan===`daily`?t.credits.purchasedCredits+t.credits.grantedCredits:0,a=i>0?` + ${Vq(i)} credits`:``,o=(t.blocked?`Limit reached`:`${Math.round(n*100)}%${r?` \u00b7 resets ${r}`:``}`)+a;return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`settings-row`,children:(0,M.jsx)(`span`,{className:`settings-label`,children:`Daily Operator usage`})}),(0,M.jsx)(`div`,{className:`settings-usage-bar`,children:(0,M.jsx)(`div`,{className:`settings-usage-fill`+(t.blocked?` blocked`:``),style:{width:`${n*100}%`}})}),(0,M.jsx)(`div`,{className:`settings-usage-subtext`,children:o})]})}function Kq(e){let t=e.credits,n=t?.autoReload,r=Rq(t),i=t?.rates,a=`${Uq(e.creditsExhausted?0:e.spendableMicros??0,i)} left`,o=t?.nextGrantAt?`Refreshes ${new Date(t.nextGrantAt).toLocaleDateString()}`:null,s=r?`Auto-reload will add ${Uq(r.amountCredits*1e4,i)} when you drop below ${Uq(r.thresholdCredits*1e4,i)}`:null,c=Wq(e),l=e.blocked?`Daily limit reached${c?` · Resets at ${c}`:``}`:null,u=!!n?.disabledReason,d=null;return e.creditsExhausted?d=u?{severity:`danger`,text:`Auto-reload was unsuccessful`,action:`Update your card`}:{severity:`danger`,text:`Out of credits`,action:`Set up auto-reload`}:t?.lowBalance&&!r&&(d=u?{severity:`danger`,text:`Auto-reload was unsuccessful`,action:`Update your card`}:{severity:`warn`,text:`Running low on credits`,action:`Set up auto-reload`}),{amount:a,caption:s,grant:o,dailyBlocked:l,banner:d}}function qq(e){let{usage:t,onRefreshUsage:n}=e;if(t.spendableMicros===null)return null;let r=Kq(t);return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`settings-row`,children:(0,M.jsx)(`span`,{className:`settings-label`,children:`Operator credits`})}),(0,M.jsxs)(`div`,{className:`settings-split`,children:[(0,M.jsx)(`div`,{className:`settings-credits`,children:r.amount}),(0,M.jsx)(`button`,{type:`button`,className:`button`,onClick:()=>Yq(n),children:(0,M.jsx)(`span`,{children:`Get credits`})})]}),r.caption?(0,M.jsx)(`div`,{className:`settings-usage-subtext`,children:r.caption}):null,r.grant?(0,M.jsx)(`div`,{className:`settings-usage-subtext`,children:r.grant}):null,r.dailyBlocked?(0,M.jsx)(`p`,{className:`feedback-note feedback-danger settings-usage-subtext`,children:r.dailyBlocked}):null,r.banner?(0,M.jsxs)(`div`,{className:`feedback-banner feedback-${r.banner.severity} is-inset`,role:`status`,children:[(0,M.jsx)(`span`,{children:r.banner.text}),(0,M.jsx)(`button`,{type:`button`,className:`button`,onClick:()=>Yq(n),children:(0,M.jsx)(`span`,{children:r.banner.action})})]}):null]})}function Jq(e){return e.usage.credits?.plan===`credits`?(0,M.jsx)(qq,{usage:e.usage,onRefreshUsage:e.onRefreshUsage}):(0,M.jsx)(Gq,{usage:e.usage})}function Yq(e){if(window.ReactNativeWebView){window.ReactNativeWebView.postMessage(JSON.stringify({type:`castle-open-credits`}));return}if(!window.open(`https://castle.xyz/credits`,`_blank`))return;Xq?.();let t=()=>{document.visibilityState===`visible`&&(Xq?.(),e())};Xq=()=>{document.removeEventListener(`visibilitychange`,t),window.removeEventListener(`focus`,t),Xq=null},document.addEventListener(`visibilitychange`,t),window.addEventListener(`focus`,t)}var Xq=null;function Zq(e){let t=e.providers.filter(e=>e.key?.present||e.login?.loggedIn).map(e=>e.label);return(0,M.jsxs)(`div`,{className:`settings-split`,children:[t.length>0?(0,M.jsxs)(`div`,{className:`settings-split-copy`,children:[(0,M.jsx)(`div`,{className:`settings-credits`,children:`Use your own agent provider`}),(0,M.jsxs)(`div`,{className:`settings-usage-subtext`,children:[`Connected: `,t.join(`, `)]})]}):(0,M.jsx)(`div`,{className:`settings-credits`,children:`Use your own agent provider`}),(0,M.jsx)(`button`,{type:`button`,className:`button`,onClick:e.onOpen,children:(0,M.jsx)(`span`,{children:t.length>0?`Manage providers`:`Add provider`})})]})}function Qq(e){let{login:t}=e,[n,r]=g.useState(``),i=()=>{n.trim()&&e.onSubmitCode(n.trim())};return(0,M.jsxs)(M.Fragment,{children:[t.url?(0,M.jsxs)(`div`,{className:`castle-key-login`,children:[(0,M.jsx)(`div`,{className:`castle-key-subtitle`,children:`Open this link to sign in, then come back here.`}),(0,M.jsx)(`a`,{className:`castle-key-url`,href:t.url,target:`_blank`,rel:`noreferrer noopener`,children:t.url})]}):(0,M.jsx)(`div`,{className:`castle-key-subtitle`,children:`Starting sign-in…`}),t.phase===`awaiting-code`?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`castle-key-subtitle`,children:`Paste the code the browser shows you:`}),(0,M.jsx)(`input`,{className:`castle-key-input`,autoFocus:!0,spellCheck:!1,autoComplete:`off`,value:n,placeholder:`code`,onChange:e=>r(e.target.value),onKeyDown:e=>{e.key===`Enter`&&i()}}),t.message?(0,M.jsx)(`div`,{className:`castle-key-error`,children:t.message}):null]}):null,t.phase===`verifying`?(0,M.jsx)(`div`,{className:`castle-key-stored`,children:`Finishing sign-in…`}):null,t.phase===`error`?(0,M.jsx)(`div`,{className:`castle-key-error`,children:t.message}):null,(0,M.jsxs)(`div`,{className:`castle-modal-actions`,children:[(0,M.jsx)(`button`,{type:`button`,onClick:e.onCancel,children:t.phase===`error`?`Close`:`Cancel`}),t.phase===`awaiting-code`?(0,M.jsx)(`button`,{type:`button`,onClick:i,disabled:!n.trim(),children:`Submit`}):null]})]})}function $q(e){let t=e.accounts.providers,n=e.accounts.login,[r,i]=g.useState(()=>(t.find(e=>e.key?.present||e.login?.loggedIn)??t[0])?.id??``),[a,o]=g.useState(``),[s,c]=g.useState(null),l=(n?t.find(e=>e.login?.provider===n.provider):null)??t.find(e=>e.id===r)??t[0]??null,u=g.useRef(e.onClose);u.current=e.onClose;let d=n!==null;g.useEffect(()=>{let e=e=>{e.key===`Escape`&&!d&&u.current()};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[d]);let f=g.useRef(null);if(g.useEffect(()=>{if(n){f.current=n.provider;return}let e=f.current;e!==null&&(f.current=null,t.find(t=>t.login?.provider===e)?.login?.loggedIn&&u.current())}),!l)return null;let p=!!l.login?.loggedIn,m=!!l.key?.present,h=p||m,_=()=>{let t=a.trim();if(t){if(t.length>500){c(`That key is too long.`);return}if([...t].some(e=>{let t=e.codePointAt(0)??0;return t<32||t===127})){c(`That key contains invalid characters.`);return}e.onSave(l.id,t),e.onClose()}};return(0,On.createPortal)((0,M.jsx)(`div`,{className:`castle-modal-scrim`,onMouseDown:n?void 0:e.onClose,children:(0,M.jsxs)(`div`,{className:`castle-modal`,onMouseDown:e=>e.stopPropagation(),children:[(0,M.jsx)(`div`,{className:`castle-key-heading`,children:n?`Sign in to ${l.label}`:`Your account`}),n?null:(0,M.jsx)(`div`,{className:`castle-key-subtitle`,children:`Run the operator on your own account and bypass Castle's daily limit.`}),t.length>1&&!n?(0,M.jsx)(`div`,{className:`castle-key-tabs`,children:t.map(e=>(0,M.jsx)(`button`,{type:`button`,className:`castle-key-tab`+(e.id===l.id?` active`:``),onClick:()=>{i(e.id),o(``),c(null)},children:e.label},e.id))}):null,n?(0,M.jsx)(Qq,{login:n,onSubmitCode:e.onSubmitCode,onCancel:e.onCancelLogin}):(0,M.jsxs)(M.Fragment,{children:[h?(0,M.jsxs)(M.Fragment,{children:[p?(0,M.jsxs)(`div`,{className:`castle-key-row`,children:[(0,M.jsxs)(`span`,{children:[`Signed in with your `,l.label,` account.`]}),(0,M.jsx)(`button`,{type:`button`,onClick:()=>{e.onLogout(l.id),e.onClose()},children:`Sign out`})]}):null,m?(0,M.jsxs)(`div`,{className:`castle-key-row`,children:[(0,M.jsxs)(`span`,{children:[`API key saved (`,l.key?.hint,`).`]}),(0,M.jsx)(`button`,{type:`button`,onClick:()=>{e.onRemove(l.id),e.onClose()},children:`Remove`})]}):null]}):(0,M.jsxs)(M.Fragment,{children:[l.login?(0,M.jsxs)(`button`,{type:`button`,className:`castle-key-signin`,onClick:()=>e.onStartLogin(l.id),children:[`Sign in with your `,l.label,` account`]}):null,l.login&&l.key?(0,M.jsx)(`div`,{className:`castle-key-or`,children:`or`}):null,l.key?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`castle-key-field-label`,children:`Add API key`}),(0,M.jsx)(`input`,{type:`password`,className:`castle-key-input`,autoFocus:!0,spellCheck:!1,autoComplete:`off`,"data-1p-ignore":!0,"data-lpignore":`true`,value:a,placeholder:l.key.placeholder,onChange:e=>{o(e.target.value),c(null)},onKeyDown:e=>{e.key===`Enter`&&_()}}),s?(0,M.jsx)(`div`,{className:`castle-key-error`,children:s}):null]}):null]}),(0,M.jsxs)(`div`,{className:`castle-modal-actions`,children:[(0,M.jsx)(`button`,{type:`button`,onClick:e.onClose,children:`Cancel`}),!h&&l.key?(0,M.jsx)(`button`,{type:`button`,onClick:_,disabled:!a.trim(),children:`Save`}):null]})]})]})}),document.body)}function eJ(e){let{settings:t,onSetSetting:n,onClose:r}=e,i=e.usage?.credits?.plan===`credits`?e.usage.spendableMicros!==null:Lq(e.usage)!==null,a=e.accounts.providers.some(e=>e.key?.present||e.login?.loggedIn),o=e.accounts.providers.some(e=>e.id===`anthropic`&&(e.key?.present||e.login?.loggedIn)),s=e.accounts.providers.length>0&&(i||a),c=g.useRef(null),[l,u]=g.useState({}),d=t.routerOpenrouterModel?.trim()??``,f=t.tasksOpenrouterModel?.trim()??``,p=t.router===`smith`,m=t.tasks===`smith`;g.useEffect(()=>{let e=new Set;p&&d&&e.add(d),m&&f&&e.add(f);let t=!1;for(let n of e)fetch(`${wq}?model=${encodeURIComponent(n)}`).then(e=>e.ok?e.json():null).then(e=>{!t&&e&&u(t=>({...t,[n]:e}))}).catch(()=>{});return()=>{t=!0}},[p,d,m,f]);let h=e.usage?.blockedClaudeModels??[],_=[Pq(`router`,t,l[d],h,o),Pq(`tasks`,t,l[f],h,o)];return lS(c,r,e.triggerRef),(0,On.createPortal)((0,M.jsxs)(`div`,{className:`popover settings-popover`,ref:c,style:pS(c,e.triggerRef,[t,l,i,s,e.usage,o]),onMouseDown:e=>e.stopPropagation(),children:[i&&e.usage?(0,M.jsx)(`div`,{className:`settings-group`,children:(0,M.jsx)(Jq,{usage:e.usage,onRefreshUsage:e.onRefreshUsage})}):null,s?(0,M.jsx)(`div`,{className:`settings-group`,children:(0,M.jsx)(Zq,{providers:e.accounts.providers,onOpen:e.onOpenKeys})}):null,_.map((r,i)=>(0,M.jsx)(`div`,{className:`settings-group`,children:r.filter(e=>!e.showWhen||e.showWhen(t)).map(r=>{if(r.type===`text`)return(0,M.jsx)(Fq,{label:r.label,placeholder:r.placeholder,value:t[r.key]??``,warning:Iq(e.warnings,r.key,t[r.key]),onCommit:e=>n(r.key,e)},r.key);if(r.type===`select`)return(0,M.jsxs)(`div`,{className:`settings-row`,children:[(0,M.jsx)(`span`,{className:`settings-label`,children:r.label}),(0,M.jsx)(`select`,{className:`select`,value:t[r.key]??``,onChange:e=>n(r.key,e.target.value),children:r.options.map(e=>(0,M.jsx)(`option`,{value:e.value,children:e.label},e.value))})]},r.key);let i=t[r.key];return(0,M.jsxs)(`div`,{className:`settings-row settings-row-stack`,children:[(0,M.jsxs)(`div`,{className:`settings-row-main`,children:[(0,M.jsx)(`span`,{className:`settings-label`,children:r.label}),(0,M.jsx)(`div`,{className:`segmented`,role:`group`,"aria-label":r.label,children:r.options.map(e=>(0,M.jsx)(`button`,{type:`button`,tabIndex:-1,className:`button`,"aria-pressed":i===e.value,onClick:()=>n(r.key,e.value),children:(0,M.jsx)(`span`,{children:e.label})},e.value))})]}),r.note?(0,M.jsxs)(`div`,{className:`settings-warning`,children:[`⚠ `,r.note]}):null]},r.key)})},i))]}),document.body)}function tJ(e){let{spec:t,interactive:n,answers:r,onSubmit:i}=e,[a,o]=g.useState({}),s=n?a:r??{},c=(e,t,r)=>{n&&o(n=>{let i=n[e]??[];if(r){let r=i.includes(t)?i.filter(e=>e!==t):[...i,t];return{...n,[e]:r}}return{...n,[e]:i[0]===t?[]:[t]}})};return(0,M.jsxs)(`div`,{className:`picker${n?``:` picker-locked`}`,children:[t.questions.map(e=>(0,M.jsxs)(`fieldset`,{className:`picker-q`,disabled:!n,children:[(0,M.jsx)(`legend`,{className:`picker-q-label`,children:e.q}),(0,M.jsx)(`div`,{className:`picker-options`,children:e.options.map(t=>{let r=(s[e.id]??[]).includes(t);return(0,M.jsxs)(`label`,{className:`picker-option${r?` is-checked`:``}`,children:[(0,M.jsx)(`input`,{type:e.multi?`checkbox`:`radio`,name:e.id,checked:r,disabled:!n,onChange:()=>c(e.id,t,e.multi)}),(0,M.jsx)(`span`,{children:t})]},t)})})]},e.id)),n?(0,M.jsx)(`div`,{className:`picker-actions`,children:(0,M.jsx)(`button`,{className:`button`,type:`button`,onClick:()=>{let e=aq(t,a);e&&i(a,e)},children:(0,M.jsx)(`span`,{children:`Submit`})})}):null]})}function nJ(e){let{chips:t,interactive:n,onPick:r}=e,[i,a]=g.useState(null),o=n&&i===null;return(0,M.jsx)(`div`,{className:`chips`+(o?``:` chips-inert`),children:t.map(e=>(0,M.jsx)(`button`,{type:`button`,className:`chip`+(i===e?` is-picked`:``),disabled:!o,onClick:()=>{a(e),r(e)},children:e},e))})}function rJ(){return(0,M.jsxs)(`div`,{className:`picker picker-skeleton`,"aria-hidden":`true`,children:[(0,M.jsx)(`span`,{className:`picker-skeleton-hint`,children:`preparing options…`}),(0,M.jsxs)(`div`,{className:`picker-q`,children:[(0,M.jsx)(`div`,{className:`picker-skeleton-line picker-skeleton-label`}),(0,M.jsxs)(`div`,{className:`picker-options`,children:[(0,M.jsx)(`span`,{className:`picker-skeleton-chip`,style:{width:84}}),(0,M.jsx)(`span`,{className:`picker-skeleton-chip`,style:{width:116}}),(0,M.jsx)(`span`,{className:`picker-skeleton-chip`,style:{width:72}})]})]})]})}function iJ(e){let t=/^\[Editing (.+)\]$/,n=/^\[Reading (.+)\]$/,r=new Set;for(let n of e){let e=t.exec(n.trim());if(e)for(let t of e[1].split(`, `))r.add(t)}let i=[];for(let t of e){let e=n.exec(t.trim());if(e){let t=e[1].split(`, `).filter(e=>!r.has(e));if(t.length===0)continue;i.push(`[Reading ${t.join(`, `)}]`);continue}i.push(t)}return i}function aJ(e){let t=/^\[([A-Za-z]+)\s+(.+)\]$/,n=[];for(let r of e){let e=t.exec(r.trim());if(e){let r=n.length?t.exec(n[n.length-1].trim()):null;if(r&&r[1]===e[1]){r[2].split(`, `).includes(e[2])||(n[n.length-1]=`[${e[1]} ${r[2]}, ${e[2]}]`);continue}}n.push(r)}return n}function oJ(e){return e.detail?(0,M.jsxs)(`details`,{className:`msg-error-detail`,children:[(0,M.jsx)(`summary`,{children:`Details (full text in the browser console)`}),(0,M.jsx)(`pre`,{children:e.detail})]}):null}function sJ(e){let t=PK(),n=g.useRef(null),r=g.useRef(!0);return g.useLayoutEffect(()=>{let e=n.current;e&&r.current&&(e.scrollTop=e.scrollHeight)},[e.lines]),(0,M.jsx)(`div`,{className:`task-feed`,ref:n,onScroll:()=>{let e=n.current;e&&(r.current=e.scrollHeight-e.scrollTop-e.clientHeight<24)},onClick:e=>e.stopPropagation(),children:aJ(iJ(e.lines)).map((e,n)=>{let r=/^\[(.+)\]$/.exec(e.trim());return r?(0,M.jsx)(`div`,{className:`task-feed-tool`,children:r[1]},n):(0,M.jsx)(`div`,{className:`task-feed-msg`,onClick:t,dangerouslySetInnerHTML:MK(e)},n)})})}function cJ(e){let t=Math.max(0,Math.round(e/1e3)),n=Math.floor(t/60),r=t%60;return n>0?`${n}m ${r}s`:`${r}s`}function lJ(e,t,n){return t?`${e} · ${t}`:n?`${e} · Worked for ${n}`:e}function uJ(e){let[t,n]=g.useState(()=>Date.now());g.useEffect(()=>{if(e.status!==`running`)return;let t=setInterval(()=>n(Date.now()),1e3);return()=>clearInterval(t)},[e.status]);let r=e.startedAt?Date.parse(e.startedAt):null,i=e.finishedAt?Date.parse(e.finishedAt):null,a=C.includes(e.status),o=e.status===`done`?100:a?e.progress:Math.min(e.progress,95),s=e.status===`running`?e.phase?.trim()||sq[e.avatar??``]||`Working`:e.status===`waiting`?`Queued`:e.status===`blocked`?`Blocked`:e.status===`done`?`Done`:e.status===`failed`?`Failed`:e.status===`interrupted`?`Interrupted`:e.status,c=e.status===`running`&&r!==null?cJ(t-r):null,l=a&&r!==null&&i!==null?cJ(i-r):null;return{pct:o,avatar:lq(e),stage:s,elapsed:c,workedFor:l,finished:a,display:UK(e)}}function dJ(e){let{task:t,onAck:n}=e,r=e.variant===`archive`,i=PK(),[a,o]=g.useState(t.status===`failed`);g.useEffect(()=>{t.status===`failed`&&o(!0)},[t.status]);let s=()=>{o(e=>!e)},{pct:c,avatar:l,stage:u,elapsed:d,workedFor:f,finished:p,display:m}=uJ(t);return(0,M.jsxs)(`div`,{className:`task${a?` open`:``}`,onClick:s,children:[(0,M.jsxs)(`div`,{className:`task-row`,children:[(0,M.jsx)(`div`,{className:`pie`,style:{"--pct":c},children:(0,M.jsx)(`div`,{className:`avatar`,style:{background:l.color},children:(0,M.jsx)(`span`,{className:`avatar-icon-wrap`,"aria-hidden":`true`,children:l.icon})})}),(0,M.jsxs)(`div`,{className:`task-meta`,children:[(0,M.jsx)(`div`,{className:`task-name`,children:(0,M.jsx)(`span`,{className:`tn`,children:t.title})}),(0,M.jsx)(`div`,{className:`task-sub`,children:lJ(u,d,f)})]}),(0,M.jsxs)(`div`,{className:`task-actions`,children:[p&&!r?(0,M.jsx)(`button`,{className:`button button-icon task-action`,type:`button`,title:`Clear`,"aria-label":`Clear ${t.title}`,onClick:e=>{e.stopPropagation(),n(t.id,!1)},children:(0,M.jsx)(N,{name:`archive`})}):null,e.onOpen?(0,M.jsx)(`button`,{className:`button button-icon task-action`,type:`button`,title:`Open`,"aria-label":`Open ${t.title}`,onClick:n=>{n.stopPropagation(),e.onOpen?.(t)},children:(0,M.jsx)(N,{name:`chevron-right`})}):null]})]}),(0,M.jsxs)(`div`,{className:`task-body`,children:[a&&t.status===`running`&&e.feed&&e.feed.length>0?(0,M.jsx)(sJ,{lines:e.feed}):null,a&&t.status!==`running`&&m.error?(0,M.jsx)(`p`,{className:`feedback-note feedback-danger`,children:m.error}):null,a&&t.status!==`running`&&m.notes?(0,M.jsx)(`div`,{className:`task-notes`,onClick:i,dangerouslySetInnerHTML:MK(m.notes)}):null,a&&t.status===`failed`?(0,M.jsx)(oJ,{detail:t.errorDetail}):null,a?(0,M.jsx)(fJ,{frames:t.playtestFrames}):null]})]})}function fJ(e){let t=e.frames??[];return t.length===0?null:(0,M.jsxs)(`div`,{className:`task-playtest-frames`,children:[(0,M.jsxs)(`div`,{className:`task-playtest-frames-label`,children:[`Playtest frames (`,t.length,`)`]}),(0,M.jsx)(`div`,{className:`task-playtest-frames-row`,children:t.map(e=>(0,M.jsx)(`a`,{href:e,target:`_blank`,rel:`noreferrer`,onClick:e=>e.stopPropagation(),children:(0,M.jsx)(`img`,{className:`task-playtest-frame`,src:e,alt:`playtest frame`})},e))})]})}function pJ(e){return e.filter(e=>!(e.acknowledged&&C.includes(e.status)))}function mJ(e){let t=g.useRef(null),n=g.useRef(!0),r=g.useRef(0),[i,a]=g.useState(!1),o=pJ(e.tasks),s=JK(e.tasks);g.useLayoutEffect(()=>{let e=t.current;e&&n.current&&(e.scrollTop=e.scrollHeight)},[e.tasks]),g.useEffect(()=>()=>window.clearTimeout(r.current),[]);let c=()=>{let e=t.current;e&&(n.current=e.scrollHeight-e.scrollTop-e.clientHeight<24,a(!0),window.clearTimeout(r.current),r.current=window.setTimeout(()=>a(!1),900))};if(o.length===0&&s.length===0)return null;let l=o.filter(e=>C.includes(e.status));return(0,M.jsxs)(`div`,{id:`task-board`,className:`task-stack${i?` scrolling`:``}`,ref:t,onScroll:c,children:[(0,M.jsxs)(`div`,{className:`task-board-header`,children:[(0,M.jsxs)(`button`,{type:`button`,className:`button`,onClick:e.onOpenTasks,children:[(0,M.jsx)(`span`,{children:`Tasks`}),(0,M.jsx)(N,{name:`chevron-right`})]}),l.length>0?(0,M.jsxs)(`button`,{type:`button`,className:`button`,onClick:()=>{for(let t of l)e.onAck(t.id,!1)},children:[(0,M.jsx)(N,{name:`archive`}),(0,M.jsx)(`span`,{children:`Clear completed`}),(0,M.jsx)(`span`,{className:`button-badge`,children:l.length})]}):null]}),o.map(t=>(0,M.jsx)(dJ,{task:t,feed:e.feeds[t.id],onAck:e.onAck,onOpen:e.onOpenTask},t.id))]})}function hJ(e){let{task:t}=e,{pct:n,avatar:r,stage:i,elapsed:a,workedFor:o}=uJ(t);return(0,M.jsx)(`header`,{className:`task-page-header`,children:(0,M.jsxs)(`div`,{className:`task-row`,children:[(0,M.jsx)(`div`,{className:`pie`,style:{"--pct":n},children:(0,M.jsx)(`div`,{className:`avatar`,style:{background:r.color},children:(0,M.jsx)(`span`,{className:`avatar-icon-wrap`,"aria-hidden":`true`,children:r.icon})})}),(0,M.jsxs)(`div`,{className:`task-meta`,children:[(0,M.jsx)(`div`,{className:`task-name`,children:(0,M.jsx)(`span`,{className:`tn`,children:t.title})}),(0,M.jsx)(`div`,{className:`task-sub`,children:lJ(i,a,o)})]})]})})}function gJ(e){let{task:t}=e,n=PK(),r=g.useRef(null),i=g.useRef(!0),a=e.feed??[],o=UK(t),s=t.status===`running`,c=a.length>0,l=!s&&(!!o.error||!!o.notes);return g.useLayoutEffect(()=>{i.current=!0},[t.id]),g.useLayoutEffect(()=>{let e=r.current;e&&i.current&&(e.scrollTop=e.scrollHeight)},[t.id,e.feed,o.notes,o.error,t.status,t.playtestFrames]),(0,M.jsxs)(`div`,{className:`task-page`,children:[(0,M.jsx)(hJ,{task:t}),(0,M.jsxs)(`div`,{className:`task-page-body`,ref:r,onScroll:()=>{let e=r.current;e&&(i.current=e.scrollHeight-e.scrollTop-e.clientHeight<24)},children:[c?(0,M.jsx)(sJ,{lines:a}):null,l&&o.error?(0,M.jsx)(`p`,{className:`feedback-note feedback-danger`,children:o.error}):null,l&&o.notes?(0,M.jsxs)(`div`,{className:`task-notes`,onClick:n,children:[(0,M.jsx)(`p`,{className:`task-report-label`,children:`Report`}),(0,M.jsx)(`div`,{dangerouslySetInnerHTML:MK(o.notes)})]}):null,t.status===`failed`?(0,M.jsx)(oJ,{detail:t.errorDetail}):null,(0,M.jsx)(fJ,{frames:t.playtestFrames}),!c&&!l&&!(t.playtestFrames&&t.playtestFrames.length>0)?(0,M.jsx)(`p`,{className:`task-page-empty`,children:`No activity yet.`}):null]})]})}function _J(e){let t=pJ(e.tasks),n=JK(e.tasks);return(0,M.jsxs)(`div`,{className:`task-page-body task-board-page`,children:[t.length>0?(0,M.jsx)(`div`,{className:`task-stack`,children:t.map(t=>(0,M.jsx)(dJ,{task:t,feed:e.feeds[t.id],onAck:e.onAck,onOpen:e.onOpenTask},t.id))}):null,n.length>0?(0,M.jsxs)(`div`,{className:`task-archive task-stack`,children:[(0,M.jsx)(`div`,{className:`task-archive-heading text-style-smallcaps`,children:`Cleared`}),n.map(t=>(0,M.jsx)(dJ,{task:t,feed:e.feeds[t.id],onAck:e.onAck,onOpen:e.onOpenTask,variant:`archive`},t.id))]}):null,t.length===0&&n.length===0?(0,M.jsx)(`p`,{className:`task-page-empty`,children:`No tasks yet.`}):null]})}function vJ(e){let{msg:t,onPickerSubmit:n,onChip:r,chipsLive:i=!1,interactive:a=!1}=e,o=PK();if(t.role===`log`)return(0,M.jsx)(`div`,{className:`msg toolline`,children:t.text});if(t.role===`user`)return(0,M.jsxs)(`div`,{className:`msg user`,children:[(t.attachments??[]).map(e=>(0,M.jsx)(`img`,{className:`msg-image`,src:e,alt:``},e)),t.text?(0,M.jsx)(mq,{text:t.text}):null]});let s=t.status===`streaming`,c=rq(t.text,s),l=iq(c)||t.planUpdated===!0;if(!s&&!l)return null;let u=!s&&!t.pickerAnswers&&a,d=-1;c.forEach((e,t)=>{e.kind===`md`&&e.text.trim()!==``&&(d=t)});let f=c.some(e=>e.kind===`ask`||e.kind===`ask-pending`),p=s&&d===-1&&!f||!!(s&&t.activity),m=t.activity??`Thinking`;return(0,M.jsxs)(`div`,{className:`assistant-turn`,onClick:o,children:[t.thinking&&t.thinking.trim()?(0,M.jsxs)(`details`,{className:`msg-thinking`+(p?` is-active`:``),children:[(0,M.jsxs)(`summary`,{className:`operator-line`,children:[(0,M.jsx)(N,{name:`lightbulb`,className:`icon-inline`}),(0,M.jsx)(`span`,{className:`thinking-label`,children:p?m:uq(t.thinkingMs)}),(0,M.jsx)(N,{name:`chevron-right`,className:`icon-inline thinking-caret`})]}),(0,M.jsx)(`div`,{className:`msg-thinking-body`,dangerouslySetInnerHTML:MK(t.thinking??``)})]}):p?(0,M.jsxs)(`div`,{className:`operator-line msg-thinking is-active`,children:[(0,M.jsx)(N,{name:`lightbulb`,className:`icon-inline`}),(0,M.jsx)(`span`,{className:`thinking-label`,children:m})]}):null,c.map((e,a)=>{if(e.kind===`ask-pending`)return(0,M.jsx)(rJ,{},a);if(e.kind===`chips`)return(0,M.jsx)(nJ,{chips:e.chips,interactive:!s&&i,onPick:r},a);if(e.kind===`ask`)return(0,M.jsx)(tJ,{spec:e.spec,interactive:u,answers:t.pickerAnswers,onSubmit:(e,r)=>n(t,e,r)},a);if(!e.text.trim())return null;let o=[`msg`,`assistant`,`md`];return s&&a===d&&o.push(`streaming`),t.status===`error`&&o.push(`errbubble`),(0,M.jsx)(`div`,{className:o.join(` `),dangerouslySetInnerHTML:MK(e.text)},a)}),s?null:(0,M.jsx)(oJ,{detail:t.errorDetail}),t.planUpdated?(0,M.jsx)(fq,{}):null,t.interrupted?(0,M.jsxs)(`div`,{className:`operator-line`,children:[(0,M.jsx)(N,{name:`square`,className:`icon-inline`}),(0,M.jsx)(`span`,{children:`Interrupted by your next message`})]}):null]})}function yJ(e){let t=g.useRef(null),n=g.useRef(null),r=g.useRef(0),i=g.useRef(!0),a=g.useRef(0),o=g.useRef(0),[s,c]=g.useState(!1),l=g.useRef(!1),u=g.useCallback(()=>{l.current=!0,c(!0)},[]),d=g.useCallback(()=>{let e=t.current;if(!e)return;let n=Math.max(0,e.scrollHeight-e.clientHeight),r=Math.abs(e.scrollTop-n)>1;e.scrollTop=n,r&&(a.current=typeof performance<`u`?performance.now():Date.now())},[]);e.pinThreadRef.current=()=>{i.current&&d()};let f=g.useCallback(()=>{d();let e=t.current;e&&e.clientHeight>0&&u()},[d,u]);g.useLayoutEffect(()=>{if(!i.current)return;f();let e=requestAnimationFrame(f),t=window.setTimeout(f,250),n=window.setTimeout(u,500);return()=>{cancelAnimationFrame(e),clearTimeout(t),clearTimeout(n)}},[e.messages,f,u]),g.useEffect(()=>{let e=t.current;if(!e)return;o.current=e.clientHeight;let a=new ResizeObserver(()=>{o.current=e.clientHeight,i.current?f():e.scrollTop=e.scrollHeight-e.clientHeight-r.current});return a.observe(e),n.current&&a.observe(n.current),()=>a.disconnect()},[f]);let p=()=>{let e=t.current;if(!e||!l.current||(typeof performance<`u`?performance.now():Date.now())-a.current<200)return;let n=e.clientHeight,s=n!==o.current;o.current=n,!s&&(r.current=e.scrollHeight-e.scrollTop-e.clientHeight,i.current=r.current<48)},m=xJ(e.messages),h=SJ(e.messages);return(0,M.jsx)(`div`,{id:`chat-messages`,className:`chat-scroll`,"data-castle-allow-select":``,ref:t,onScroll:p,children:(0,M.jsxs)(`div`,{className:`chat-thread`+(s?` ready`:``),ref:n,children:[e.messages.length===0?(0,M.jsx)(`div`,{id:`chat-empty`,children:`Tell the agent what you want to make.`}):null,e.messages.map(t=>(0,M.jsx)(vJ,{msg:t,interactive:t.id===m,chipsLive:t.id===h,onPickerSubmit:e.onPickerSubmit,onChip:e.onChip},t.id))]})})}function bJ(e){return e.role!==`assistant`||e.pickerAnswers?!1:rq(e.text).some(e=>e.kind===`ask`)}function xJ(e){for(let t=e.length-1;t>=0;t--)if(bJ(e[t]))return e[t].id;return null}function SJ(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(n.role===`user`)return null;if(n.role===`assistant`){if(n.status===`streaming`)return null;if(rq(n.text).some(e=>e.kind===`chips`))return n.id}}return null}function CJ(e,t){for(let n of Array.from(e)){if(!n.type.startsWith(`image/`))continue;let e=new FileReader;e.onload=()=>{typeof e.result==`string`&&t({name:n.name,dataUrl:e.result})},e.readAsDataURL(n)}}function wJ(e){return e.pending.length===0?null:(0,M.jsx)(`div`,{id:`chat-pending`,children:e.pending.map((t,n)=>(0,M.jsx)(`img`,{className:`operator-thumb`,src:t.dataUrl,alt:t.name,title:`remove`,onClick:()=>e.onRemove(n)},`${t.name}-${n}`))})}function TJ(e){return e.queued.length===0?null:(0,M.jsx)(`div`,{className:`chat-queue`,onMouseDown:e=>e.preventDefault(),children:e.queued.map((t,n)=>(0,M.jsxs)(`div`,{className:`queue-row`,children:[(0,M.jsx)(`span`,{className:`queue-snippet`,children:t.length>60?`${t.slice(0,60)}\u2026`:t}),(0,M.jsx)(`button`,{className:`button`,type:`button`,tabIndex:-1,title:`Send now — interrupts the turn`,onClick:e.onInterrupt,children:(0,M.jsx)(`span`,{children:`Send now`})}),(0,M.jsx)(`button`,{className:`button button-icon button-quiet`,type:`button`,tabIndex:-1,title:`Remove from queue`,"aria-label":`Remove`,onClick:()=>e.onCancelQueued(n),children:(0,M.jsx)(N,{name:`times`})})]},n))})}function EJ(e,t){if(!e)return;e.style.height=`auto`;let n=Number.parseFloat(window.getComputedStyle(e).lineHeight),r=Number.isFinite(n)?Math.ceil(n):21,i=t.length===0?r:Math.min(e.scrollHeight,120);e.style.height=i>0?`${i}px`:``}function DJ(e){let{running:t,queued:n}=e,[r,i]=g.useState(``),[a,o]=g.useState(!1),[s,c]=g.useState(!1),l=g.useRef(null),[u,d]=g.useState([]),[f,p]=g.useState(!1);g.useEffect(()=>{t||p(!1)},[t]);let m=g.useRef(null),h=g.useRef(null),_=VK({inputRef:m,anchorRef:h,setValue:i});g.useLayoutEffect(()=>{EJ(m.current,r),e.pinThreadRef.current()},[r,u.length,n.length,e.pinThreadRef]);let v=e=>{d(t=>t.length>=6?t:[...t,e])},y=()=>{let t=r.trim();!t&&u.length===0||(e.onSend(t,u,_.attachedIn(t)),i(``),d([]),_.clear())},b=r.trim().length>0||u.length>0,x=e=>{let t=e.target;h.current?.contains(t)&&(t instanceof Element&&t.closest(`.composer-settings .button, #chat-send`)||m.current?.focus())},S=t&&!b;return(0,M.jsxs)(`div`,{className:`operator-composer`,children:[(0,M.jsx)(wJ,{pending:u,onRemove:e=>d(t=>t.filter((t,n)=>n!==e))}),_.overlay,(0,M.jsxs)(`div`,{className:`chat-input`,ref:h,children:[(0,M.jsx)(TJ,{queued:n,onInterrupt:e.onInterrupt,onCancelQueued:e.onCancelQueued}),(0,M.jsxs)(`div`,{className:`ta`,onClick:x,children:[(0,M.jsx)(`textarea`,{id:`chat-input`,className:`ta-text`,ref:m,rows:1,placeholder:t?`Queue a message…`:`Message the operator`,value:r,onChange:e=>{i(e.target.value),_.sync()},onSelect:_.sync,onPaste:e=>{let t=e.clipboardData?.files;t&&t.length>0&&(e.preventDefault(),CJ(t,v))},onKeyDown:e=>{_.handleKeyDown(e)||e.key===`Enter`&&!e.shiftKey&&!e.metaKey&&!e.altKey&&(e.preventDefault(),y())}}),(0,M.jsxs)(`div`,{className:`ta-bottom`,onMouseDown:e=>e.preventDefault(),children:[(0,M.jsxs)(`div`,{className:`composer-settings`,children:[(0,M.jsxs)(`button`,{ref:l,className:[`button`,`button-quiet`,zq(e.usage)].filter(Boolean).join(` `),type:`button`,tabIndex:-1,title:`Agent & model settings`,"aria-label":`Agent & model settings`,"aria-pressed":a,onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onClick:()=>{a||e.onRefreshUsage(),o(e=>!e)},children:[(0,M.jsx)(`span`,{children:Cq(e.settings)}),_q]}),a?(0,M.jsx)(eJ,{settings:e.settings,warnings:e.settingsWarnings,usage:e.usage,accounts:e.accounts,triggerRef:l,onSetSetting:e.onSetSetting,onOpenKeys:()=>c(!0),onRefreshUsage:e.onRefreshUsage,onClose:()=>o(!1)}):null,s?(0,M.jsx)($q,{accounts:e.accounts,onSave:e.onSetCredential,onRemove:e.onClearCredential,onStartLogin:e.onStartLogin,onSubmitCode:e.onSubmitLoginCode,onCancelLogin:e.onCancelLogin,onLogout:e.onLogout,onClose:()=>c(!1)}):null]}),(0,M.jsx)(`button`,{id:`chat-send`,className:`button button-icon composer-action`,type:`button`,tabIndex:-1,title:S?f?`Stopping…`:`Stop`:`Send`,"aria-label":S?f?`Stopping`:`Stop`:`Send`,disabled:!S&&!b||S&&f,onClick:()=>{S?(p(!0),e.onInterrupt()):y()},children:S?gq:hq})]})]})]})]})}function OJ(e){let{agent:t,mobile:n,active:r}=e,{messages:i,tasks:a,feeds:o,settings:s,running:c,queued:l}=t,u=KK(n),[d,f]=g.useState(null),p=g.useRef(()=>{}),m=qK(d),h=e=>{u.openView(e.id)};Qn(()=>!r||u.view===`home`?!1:(u.goHome(),!0));let _=(e,n,r)=>{t.submitPicker(e.id,n,r)},v=e=>{t.sendUserMessage(e,[],[])},y=u.view!==`home`&&u.view!==`tasks`?a.find(e=>e.id===u.view):void 0;return(0,M.jsxs)(`div`,{id:`chat-host`,ref:f,children:[m?(0,M.jsx)(YK,{view:u.view,openIds:u.openIds,tasks:a,mobile:n,onHome:u.goHome,onSelect:u.openView,onClose:u.closeView,onReorder:u.reorderOpenIds,slot:m}):null,(0,M.jsx)(`div`,{className:`operator-inset`,children:u.view===`home`?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(mJ,{tasks:a,feeds:o,onAck:t.ackTask,onOpenTask:h,onOpenTasks:()=>u.openView(GK)}),pJ(a).length>0||JK(a).length>0?(0,M.jsx)(`div`,{className:`chat-divider`,"aria-hidden":`true`}):null,(0,M.jsx)(yJ,{messages:i,onPickerSubmit:_,onChip:v,pinThreadRef:p})]}):u.view===`tasks`?(0,M.jsx)(_J,{tasks:a,feeds:o,onAck:t.ackTask,onOpenTask:h}):y?(0,M.jsx)(gJ,{task:y,feed:o[y.id]}):(0,M.jsx)(`p`,{className:`task-page-empty`,children:`This task is gone.`})}),(0,M.jsx)(DJ,{pinThreadRef:p,running:c,queued:l,onSend:t.sendUserMessage,onInterrupt:t.interrupt,onCancelQueued:t.cancelQueued,settings:s,settingsWarnings:t.settingsWarnings,usage:t.usage,accounts:t.accounts,onSetSetting:t.setSetting,onRefreshUsage:t.refreshUsage,onSetCredential:t.setCredential,onClearCredential:t.clearCredential,onStartLogin:t.startLogin,onSubmitLoginCode:t.submitLoginCode,onCancelLogin:t.cancelLogin,onLogout:t.logout})]})}var kJ=`castle-operator-seen-v1`,AJ=`castle-operator-seen-v2`;function jJ(){try{let e=localStorage.getItem(AJ);if(e!==null){let t=JSON.parse(e);if(t&&typeof t==`object`){let e=t,n=e.taskIds;return{messageId:typeof e.messageId==`string`?e.messageId:void 0,taskIds:Array.isArray(n)&&n.every(e=>typeof e==`string`)?n:void 0}}}let t=localStorage.getItem(kJ);if(t!==null)return{messageId:t,taskIds:void 0}}catch{}return{messageId:void 0,taskIds:void 0}}function MJ(e,t){try{localStorage.setItem(AJ,JSON.stringify({messageId:e,taskIds:t}))}catch{}}function NJ(e){let t=[];for(let n of e)n.role===`assistant`&&n.status!==`streaming`&&t.push(n.id);return t}function PJ(e){let t=NJ(e);return t[t.length-1]??``}function FJ(e){let t=[];for(let n of e)C.includes(n.status)&&!n.acknowledged&&t.push(n.id);return t}function IJ(e,t){if(t===void 0)return 0;let n=NJ(e);if(t===``)return n.length;let r=n.indexOf(t);return r<0?0:n.length-r-1}function LJ(e,t){if(t===void 0)return 0;let n=new Set(t),r=0;for(let t of e)n.has(t)||(r+=1);return r}function RJ(e,t){if(e===t)return!0;if(!e||!t||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function zJ(e,t,n,r){let i=PJ(t),a=FJ(n);if(e)return{messageId:i,taskIds:a};let o=NJ(t);return r.messageId===void 0?t.length===0?r:{messageId:i,taskIds:a}:r.messageId!==``&&o.length>0&&!o.includes(r.messageId)?{messageId:i,taskIds:r.taskIds}:r.taskIds===void 0?{messageId:r.messageId,taskIds:a}:r}function BJ(){let[e,t]=g.useState(()=>document.visibilityState===`visible`);return g.useEffect(()=>{let e=()=>t(document.visibilityState===`visible`);return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[]),e}function VJ(e){let t=e.boundingClientRect;if(t.width<=0||t.height<=0)return!1;let n=e.intersectionRect;return n.width>=t.width-1&&n.height>=t.height-1}var HJ=Array.from({length:21},(e,t)=>t/20);function UJ(e){let[t,n]=g.useState(!1);return g.useEffect(()=>{if(!e){n(!1);return}let t=new IntersectionObserver(([e])=>n(e?VJ(e):!1),{threshold:HJ});return t.observe(e),()=>t.disconnect()},[e]),t}function WJ(e,t,n){let r=BJ(),i=UJ(n),a=r&&(t||i),[o,s]=g.useState(jJ);g.useEffect(()=>{let t=zJ(a,e.messages,e.tasks,o);t.messageId===o.messageId&&RJ(t.taskIds,o.taskIds)||(t.messageId!==void 0&&t.taskIds!==void 0&&MJ(t.messageId,t.taskIds),s(t))},[a,e.messages,e.tasks,o]);let c=FJ(e.tasks),l=a?{messageId:PJ(e.messages),taskIds:c}:o;return IJ(e.messages,l.messageId)+LJ(c,l.taskIds)}var GJ=`castle-flow-layout:`,KJ=1;function qJ(e,t){if(e)try{let n={version:KJ,state:t};localStorage.setItem(GJ+e,JSON.stringify(n))}catch{}}function JJ(e,t,n){if(!e)return null;try{let r=localStorage.getItem(GJ+e);if(!r)return null;let i=JSON.parse(r);if(i.version!==KJ||!i.state||!Array.isArray(i.state.groups))return null;let a=Jt(tY(nY(i.state,t)),n);return a.groups.length===0?null:pt(a)}catch{return null}}var YJ=new Set([`operator`,`files`,`params`]);function XJ(e){let t=e.codeView;if(t===void 0)return e;let n={...e};return delete n.codeView,t&&(n.view=fe),n}function ZJ(e,t){let n=t.some(t=>t.id===e.activeTabId)?e.activeTabId:t[0].id;return{...e,tabs:t,activeTabId:n}}var QJ=`params`;function $J(e){return e.kind===`editor`&&e.view===QJ}function eY(e,t){if(e.kind!==`params`||e.path===void 0||t.has(e.path))return e;let n={...e};return delete n.path,n}function tY(e){if(!e.groups.some(e=>e.tabs.some($J)))return e;let t,n=!1,r=0,i=[];for(let a of e.groups){let e=[];for(let o of a.tabs){if(!$J(o)){e.push(o);continue}let a={...o};if(delete a.view,n){e.push(a);continue}n=!0,t=o.path,r=i.length+1}if(e.length===0){r=Math.min(r,i.length);continue}i.push(ZJ(a,e))}let a=ut(`params`,t);return i.splice(Math.min(r,i.length),0,ft([a],it(a))),{...e,groups:i}}function nY(e,t){let n=new Set,r=[];for(let i of e.groups){let e=i.tabs.filter(e=>!(e.kind===`editor`&&e.path!==void 0&&!t.has(e.path))).map(XJ).map(e=>eY(e,t));if(e.length===0)continue;let a=e.find(e=>e.kind!==`editor`);if(a&&YJ.has(a.kind)){if(n.has(a.kind))continue;n.add(a.kind)}r.push(ZJ(i,e))}return{groups:r,activeGroupId:r.some(t=>t.id===e.activeGroupId)?e.activeGroupId:r[0]?.id??null,pinnedGroupId:r.some(t=>t.id===e.pinnedGroupId)?e.pinnedGroupId:null,maximizedGroupId:null}}var rY=g.createContext(null),iY={groups:[],activeGroupId:null,pinnedGroupId:null,maximizedGroupId:null};function aY(e,t){let n=[];if(e.forEach((e,r)=>{let i=t.get(r);if(!i)return;let a=i.getBoundingClientRect(),o=e.left-a.left,s=e.top-a.top;Math.abs(o)<1&&Math.abs(s)<1||(i.style.transition=`none`,i.style.transform=`translate(${o}px, ${s}px)`,n.push(i))}),n.length!==0){n[0].getBoundingClientRect();for(let e of n){e.style.transition=`transform 180ms ease`,e.style.transform=`translate(0px, 0px)`;let t=()=>{e.style.transition=``,e.style.transform=``,e.removeEventListener(`transitionend`,t)};e.addEventListener(`transitionend`,t)}}}function oY(e){return Array.isArray(e.column)}function sY(e){return Array.isArray(e.tabs)}function cY(e){let t=[],n=e=>{sY(e)?t.push(...e.tabs??[]):t.push(e)};for(let t of e)oY(t)?(t.column??[]).forEach(n):n(t);return t}function lY(e){return e===`files`?`files`:e===`playtest`?`play`:e===`terminal`?`terminal`:e===`editor`?`editor`:e===`params`?`params`:null}var uY=[{type:`files`},{type:`playtest`},{type:`editor`,file:`scenes/main.scene`}];function dY(e,t){let n=e&&e.length>0?cY(e):uY,r=v?null:ut(`operator`),i=r?[ft([r],it(r))]:[],a=new Map,o=null;for(let e of n){let n=lY(e.type);if(!n||n===`editor`&&!e.file)continue;if(n===`editor`&&e.file){let n=t(e.file),r=a.get(n);if(r){r.tabs.push(ut(`editor`,e.file));continue}let s=ut(`editor`,e.file),c=ft([s],it(s));a.set(n,c),i.push(c),o||=c.id;continue}let r=ut(n,e.file);i.push(ft([r],it(r)))}return{groups:i,activeGroupId:o??i[0]?.id??null,pinnedGroupId:null,maximizedGroupId:null}}function fY(){let e=eC(),[t,n]=g.useState(()=>rC());return g.useEffect(()=>{if(e)return;let t=window.matchMedia(`(max-width: 768px)`),r=()=>n(t.matches);return t.addEventListener(`change`,r),()=>t.removeEventListener(`change`,r)},[e]),t}function pY(e){let t=e.target;if(!(t instanceof HTMLIFrameElement)||!t.classList.contains(`deck-frame`))return t;try{let n=t.contentDocument;if(!n)return t;let r=t.getBoundingClientRect();return n.elementFromPoint(e.clientX-r.left,e.clientY-r.top)??t}catch{return t}}function mY(e,t){let n=e,r=!!(n?.ownerDocument&&n.ownerDocument!==t.ownerDocument),i=r?null:t.parentElement;for(;n&&n!==i;){if(n.nodeType===1){let e=getComputedStyle(n).overflowY;if((e===`auto`||e===`scroll`)&&n.scrollHeight>n.clientHeight+1)return!0}if(!r&&n===t)break;n=n.parentElement}return!1}function hY(e,t,n){let r=e,i=t.parentElement;for(;r&&r!==i;){if(r.nodeType===1){let e=getComputedStyle(r),t=e.touchAction;if(t.includes(`pan-y`)&&!t.includes(`pan-x`))return!0;let i=e.overflowX;if(i===`auto`||i===`scroll`){let e=r.scrollWidth-r.clientWidth;if(e>1&&(n>0?r.scrollLeft>1:r.scrollLeft<e-1))return!0}}if(r===t)break;r=r.parentElement}return!1}function gY(e){g.useEffect(()=>{let t=e.current;if(!t)return;let n=e=>{e.deltaY!==0&&(t.scrollWidth<=t.clientWidth||!e.shiftKey&&mY(pY(e),t)||(t.scrollLeft+=e.deltaX-e.deltaY,e.preventDefault()))};return t.addEventListener(`wheel`,n,{passive:!1}),()=>t.removeEventListener(`wheel`,n)},[e])}function _Y(e,t,n){g.useLayoutEffect(()=>{let n=e.current,r=n?.querySelector(`.flow-row`);if(!n||!r)return;let i=()=>{let e=r.lastElementChild,i=e?e.offsetLeft+e.offsetWidth:0,a=t&&i>n.clientWidth?n.clientWidth/2:0;r.style.setProperty(`--flow-overscroll`,`${Math.round(a)}px`)};i();let a=new ResizeObserver(i);return a.observe(n),()=>a.disconnect()},[e,t,n])}function vY(e,t){let n=e.getBoundingClientRect(),r=t.getBoundingClientRect();if(r.left>=n.left-1&&r.right<=n.right+1)return;let i=window.matchMedia(`(prefers-reduced-motion: reduce)`).matches;e.scrollTo({left:e.scrollLeft+(r.left+r.width/2-(n.left+n.width/2)),behavior:i?`auto`:`smooth`})}function yY(e,t){let n=g.useRef(new Map),r=g.useCallback(e=>{let t=n.current.get(e);if(t)return t.obj;let r={visible:!1,active:!1,activeCbs:new Set,visibleCbs:new Set,obj:{id:e,isVisible:()=>r.visible,isActive:()=>r.active,onDidActiveChange:e=>(r.activeCbs.add(e),()=>r.activeCbs.delete(e)),onDidVisibilityChange:e=>(r.visibleCbs.add(e),()=>r.visibleCbs.delete(e))}};return n.current.set(e,r),r.obj},[]);return g.useEffect(()=>{let r=new Set;for(let i of e.groups){let a=t?i.id===e.activeGroupId:!0;for(let t of i.tabs){r.add(t.id);let o=n.current.get(t.id);if(!o)continue;let s=i.activeTabId===t.id,c=a&&s,l=i.id===e.activeGroupId&&s;c!==o.visible&&(o.visible=c,o.visibleCbs.forEach(e=>e(c))),l!==o.active&&(o.active=l,o.activeCbs.forEach(e=>e(l)))}}for(let e of n.current.keys())r.has(e)||n.current.delete(e)}),r}function bY({agent:e}){let[t,n]=g.useState(iY),[r,i]=g.useState(null),[a,o]=g.useState(null),s=g.useRef(null),c=g.useRef(!1),l=fY(),u=g.useRef(l);u.current=l;let d=g.useRef(iY),f=g.useRef(null),[p,m]=g.useState(null);d.current=t;let h=g.useRef(new Map),_=t.groups.find(e=>e.tabs.some(e=>e.kind===`operator`))?.id??null,y=g.useRef(_);y.current=_;let[b,x]=g.useState(null),S=g.useRef(null),C=g.useRef(null),w=g.useRef(null),T=g.useRef({page:0,count:0,ids:[]});gY(C),_Y(C,!l&&!t.maximizedGroupId,t.groups);let ee=yY(t,l);g.useEffect(()=>{let e=!0;Promise.all([be(),ke().catch(()=>[])]).then(([t,r])=>{e&&(s.current=t.deckId,le(t),i(t.kitEditorExtensions),o(r),n(JJ(t.deckId,new Set(r),me)??dY(t.initialPanels,me)),c.current=!0)},()=>{e&&(i([]),o([]),n(dY(null,me)),c.current=!0)});let t=Sb(t=>{t.changes.some(e=>e.event!==`change`)&&ke().then(t=>{e&&o(t)}).catch(()=>{}),t.changes.some(e=>e.path===`castle.json`||e.path.startsWith(`imports/`))&&be().then(t=>{e&&(le(t),i(t.kitEditorExtensions))},()=>{})});return()=>{e=!1,t()}},[]),g.useEffect(()=>{if(!c.current)return;let e=window.setTimeout(()=>qJ(s.current,t),400);return()=>window.clearTimeout(e)},[t]);let E=g.useMemo(()=>{let e=t.groups.find(e=>e.id===t.activeGroupId),n=e?.tabs.find(t=>t.id===e.activeTabId)??e?.tabs[0];return n&&n.kind===`editor`?n.path??null:null},[t.groups,t.activeGroupId]),te=g.useRef(null),D=g.useCallback(e=>{if(u.current||d.current.maximizedGroupId)return;let t=C.current,n=h.current.get(e);t&&n&&vY(t,n)},[]),O=g.useCallback((e,t)=>{e&&(te.current=e,t||requestAnimationFrame(()=>{te.current===e&&(te.current=null,D(e))}))},[D]);g.useLayoutEffect(()=>{let e=te.current;e&&(te.current=null,D(e))},[t.groups,t.activeGroupId,t.maximizedGroupId,D]);let ne=g.useCallback(e=>{let t=d.current,r=e(t);r!==t&&n(()=>r),O(r.activeGroupId,r!==t)},[O]),k=g.useCallback((e,t,r,i)=>{let a=d.current,o=i?.line===void 0&&i?.field===void 0;i&&!(o&>(a,e))&&hx(e,i);let c=u.current?1:1/0,l=t?zt(a,t,e,me,c,r):Rt(a,e,me,c,r);if(l===a)return;let f=nt(l);for(let e of nt(a))f.has(e)||rn(e);cr(s.current,e),n(()=>l),O(l.activeGroupId,!0)},[O]),A=g.useMemo(()=>({openFile:(e,t,n)=>k(e,void 0,t,n),openPlaytest:()=>ne(e=>Ht(e,`play`)),openParams:(e,t)=>{e&&t?.field&&hx(e,{field:t.field}),ne(t=>Kt(t,e))},setParamsScope:e=>n(t=>Gt(t,e)),mentionInChat:e=>{v||(FW(e),ne(e=>Ht(e,`operator`)))},closeEditor:e=>n(t=>{let n=gt(t,e);return n?Nt(t,n.group.id,n.tab.id):t}),activeEditorPath:E,kitEditorExts:r,terminalTheme:`dark`}),[r,E,k,ne]);ux(A);let re=g.useCallback((e,t)=>{let r=d.current,i=r.maximizedGroupId?Qt({...r,maximizedGroupId:null},e):kt(r,e);i!==r&&n(()=>i),t?.reveal&&O(e,i!==r)},[O]),ie=g.useCallback(e=>{let t=ht(d.current,e);if(t)for(let e of t.tabs)e.kind===`editor`&&e.path&&rn(e.path);n(t=>qt(t,e))},[]),ae=g.useCallback((e,t)=>{let r=ht(d.current,e)?.tabs.find(e=>e.id===t);r?.kind===`editor`&&r.path&&rn(r.path),n(n=>Nt(n,e,t))},[]),oe=g.useCallback((e,t)=>n(n=>At(n,e,t)),[]),se=g.useCallback((e,t,r)=>{n(n=>Xt(n,e,t,r))},[]),[j,ce]=g.useState(null),ue=g.useCallback(e=>ce(e),[]),de=g.useCallback(()=>ce(null),[]),fe=g.useCallback((e,t)=>k(t,e),[k]),pe=g.useCallback((e,t,r)=>{n(n=>It(n,e,t,r))},[]),he=g.useCallback(e=>n(t=>Zt(t,e)),[]),ge=g.useCallback(e=>{let t=d.current.maximizedGroupId===e;n(t=>Qt(t,e)),t&&O(e,!0)},[O]),_e=g.useCallback((e,t,r)=>{n(n=>en($t(n,e,t),e,r))},[]);g.useEffect(()=>{if(!l)return;let e=C.current,t=w.current;if(!e||!t)return;let r=0,i=0,a=0,o=1,s=!1,c=!1,u=null,d=e=>t.style.setProperty(`--flow-drag`,`${e}px`),f=t=>{t.touches.length===1&&(r=t.touches[0].clientX,i=t.touches[0].clientY,a=t.timeStamp,u=t.target,o=e.clientWidth||1,s=!1,c=!1)},p=n=>{if(n.touches.length!==1)return;let a=n.touches[0].clientX-r,o=n.touches[0].clientY-i;if(!s){if(Math.abs(a)<8&&Math.abs(o)<8)return;s=!0,c=Math.abs(a)>Math.abs(o)&&!hY(u,e,a),c&&t.classList.add(`flow-dragging`)}if(!c)return;n.preventDefault();let{page:l,count:f}=T.current;d(l===0&&a>0||l===f-1&&a<0?a*.3:a)},m=e=>{if(!c){t.classList.remove(`flow-dragging`);return}c=!1,t.classList.remove(`flow-dragging`);let i=e.changedTouches[0],s=i?i.clientX-r:0,l=e.timeStamp-a,{page:u,count:f,ids:p}=T.current,m=Math.abs(s)>50&&l<250,h=Math.abs(s)>o*.25,g=u;s<0&&(m||h)?g=Math.min(f-1,u+1):s>0&&(m||h)&&(g=Math.max(0,u-1));let _=p[g];g!==u&&_?n(e=>kt(e,_)):d(0)};return e.addEventListener(`touchstart`,f,{passive:!0}),e.addEventListener(`touchmove`,p,{passive:!1}),e.addEventListener(`touchend`,m,{passive:!0}),e.addEventListener(`touchcancel`,m,{passive:!0}),()=>{e.removeEventListener(`touchstart`,f),e.removeEventListener(`touchmove`,p),e.removeEventListener(`touchend`,m),e.removeEventListener(`touchcancel`,m)}},[l]);let ve=g.useCallback((e,t)=>{t?h.current.set(e,t):h.current.delete(e),e===y.current&&x(t)},[]);g.useLayoutEffect(()=>{x(_?h.current.get(_)??null:null)},[_]);let ye=WJ(e,(()=>{let e=t.groups.find(e=>e.id===t.activeGroupId);return(e?.tabs.find(t=>t.id===e.activeTabId)??e?.tabs[0])?.kind===`operator`})(),b),[xe,Se]=g.useState(null),Ce=g.useRef(null),we=g.useRef(!1);g.useLayoutEffect(()=>{let e=Ce.current;e&&(Ce.current=null,aY(e,h.current))});let Te=g.useCallback((e,t)=>{let r=d.current;if(u.current){let n=Yt(r,e,t),i=r.groups.findIndex(e=>e.id===r.activeGroupId);n.groups.findIndex(e=>e.id===n.activeGroupId)!==i&&(we.current=!0)}else{let e=new Map;for(let t of r.groups){let n=h.current.get(t.id)?.getBoundingClientRect();n&&e.set(t.id,n)}Ce.current=e}n(n=>Yt(n,e,t))},[]);g.useEffect(()=>()=>{S.current?.()},[]);let Ee=g.useCallback((e,r)=>{if(l||e.button!==0||e.target.closest(`.panel-tab, button`)||!h.current.get(r))return;let i=e.currentTarget,a=e.pointerId;try{i.setPointerCapture(a)}catch{}let o=e.clientX,s=t.groups.findIndex(e=>e.id===r),c=e=>{let n=t.groups.filter(e=>e.id!==r).map(e=>{let t=h.current.get(e.id)?.getBoundingClientRect();return{left:t?.left??1/0,right:t?.right??1/0,center:t?t.left+t.width/2:1/0}}),i=0;for(;i<n.length&&n[i].center<e;)i+=1;if(i===s)return{target:i,x:null};let a=i<n.length?n[i].left-6:n.length?n[n.length-1].right+6:e;return{target:i,x:a}},u=!1,d=e.clientX,f=0,p=()=>{let e=C.current;if(e&&e.scrollWidth>e.clientWidth+1){let t=e.getBoundingClientRect(),n=0;d<t.left+64?n=-(1-Math.max(0,d-t.left)/64):d>t.right-64&&(n=1-Math.max(0,t.right-d)/64),n!==0&&(e.scrollLeft+=n*24,Se({id:r,x:c(d).x}))}f=requestAnimationFrame(p)},m=e=>{!u&&Math.abs(e.clientX-o)<5||(u||(document.body.classList.add(`flow-reordering`),u=!0,f=requestAnimationFrame(p)),d=e.clientX,Se({id:r,x:c(e.clientX).x}))},g=!1,_=()=>{if(!g){g=!0,i.removeEventListener(`pointermove`,m),i.removeEventListener(`pointerup`,v),i.removeEventListener(`pointercancel`,y),i.removeEventListener(`lostpointercapture`,y);try{i.hasPointerCapture(a)&&i.releasePointerCapture(a)}catch{}f&&cancelAnimationFrame(f),document.body.classList.remove(`flow-reordering`),S.current=null}},v=e=>{let i=u;if(_(),i){let{target:i}=c(e.clientX);if(i!==s){let e=new Map;for(let n of t.groups){let t=h.current.get(n.id)?.getBoundingClientRect();t&&e.set(n.id,t)}Ce.current=e,n(e=>Yt(e,r,i))}}Se(null)},y=()=>{_(),Se(null)};S.current=y,i.addEventListener(`pointermove`,m),i.addEventListener(`pointerup`,v),i.addEventListener(`pointercancel`,y),i.addEventListener(`lostpointercapture`,y)},[l,t.groups]),[De,Oe]=g.useState(null),Ae=g.useCallback(e=>Oe(t=>t?null:{anchor:e}),[]),je=g.useCallback(()=>{let e=w.current?.querySelector(`.flow-tabs-add`);Oe({anchor:e?.getBoundingClientRect()??new DOMRect(window.innerWidth/2,48)})},[]);g.useEffect(()=>{let e=(e,t)=>(t&&t!==window?[...document.querySelectorAll(`iframe.deck-frame`)].find(e=>e.contentWindow===t):e)?.closest?.(`.flow-group`)?.getAttribute(`data-group-id`)??null;return Cn(`pointermove`,t=>{let n=e(t.target,t.view);f.current=n,!u.current&&m(e=>e===n?e:n)},{passive:!0})},[]);let Me=g.useMemo(()=>dn({getState:()=>d.current,setState:n,spawn:ne,focusGroup:e=>re(e,{reveal:!0}),closeGroup:ie,closeTab:ae,openPath:e=>k(e),openNewGroupPicker:je,getHoveredGroupId:()=>f.current,toggleMaximize:ge}),[ne,re,ie,ae,k,je,ge]),Ne=En(Me),Pe=t.groups.some(e=>e.id===t.activeGroupId)?t.activeGroupId:t.groups[0]?.id??null,Fe=l?null:t.maximizedGroupId,Ie=Math.max(0,t.groups.findIndex(e=>e.id===Pe));T.current={page:Ie,count:t.groups.length,ids:t.groups.map(e=>e.id)},g.useLayoutEffect(()=>{let e=w.current;if(!e)return;let t=we.current;t&&e.classList.add(`flow-dragging`),e.style.setProperty(`--flow-page`,String(Ie)),e.style.setProperty(`--flow-drag`,`0px`),t&&(we.current=!1,e.offsetHeight,requestAnimationFrame(()=>e.classList.remove(`flow-dragging`)))},[Ie,l]),Jn(w),Qn(()=>j?(ce(null),!0):De?(Oe(null),!0):!1,1);let Le=j?ht(t,j):null,Re=Le?.tabs.find(e=>e.id===Le.activeTabId)??Le?.tabs[0],ze=Re&&Re.kind===`editor`?Re.path??``:``;return(0,M.jsx)(cx,{value:A,children:(0,M.jsx)(rY.Provider,{value:e,children:(0,M.jsxs)(`div`,{ref:w,className:`flow-root${l?` is-mobile`:``}${Fe?` is-maximized`:``}`,children:[(0,M.jsx)(xY,{state:t,activeId:Pe,operatorBadge:ye,onFocusGroup:re,onReorderGroup:Te,onNewGroup:Ae}),(0,M.jsx)(`div`,{className:`flow-scroller`,ref:C,children:(0,M.jsx)(`div`,{className:`flow-field`,children:(0,M.jsx)(`div`,{className:`flow-row`,children:t.groups.map(e=>(0,M.jsx)(CY,{group:e,active:e.id===Pe,mobile:l,pinned:e.id===t.pinnedGroupId&&!Fe,maximized:e.id===Fe,hidden:Fe!==null&&e.id!==Fe,dragging:xe?.id===e.id,hovered:e.id===p,getLifecycle:ee,registerEl:ve,onFocusGroup:re,onClose:ie,onActivateTab:oe,onCloseTab:ae,onReorderTab:se,onOpenMobileSwitch:ue,onOpenInGroup:fe,onSetTabView:pe,onTogglePin:he,onToggleMaximize:ge,onStartDrag:Ee,onResize:_e},e.id))})})}),xe&&xe.x!==null&&(()=>{let e=C.current?.getBoundingClientRect(),t=h.current.get(xe.id)?.getBoundingClientRect();if(!e||!t)return null;let n=Math.max(t.top,e.top+12+36),r=Math.min(t.bottom,e.bottom)-n;return r<=0?null:(0,M.jsx)(`div`,{className:`flow-drop-indicator`,style:{left:xe.x,top:n,height:r}})})(),De&&(0,M.jsx)(NY,{anchor:De.anchor,files:a??[],onOpenFile:e=>k(e),onSpawnPanel:e=>ne(t=>Ht(t,e)),onSpawnClass:e=>ne(t=>Bt(t,e,me)),onClose:()=>Oe(null)}),j&&(0,M.jsx)(XS,{groupId:j,groupClass:tt(Le,me),currentFile:ze,files:a,recent:ur(s.current),view:Re?.view,onSetView:e=>{j&&Re&&pe(j,Re.id,e)},onOpen:(e,t)=>k(e,t),onClose:de}),(0,M.jsx)(rr,{openFile:e=>k(e),openPanel:e=>ne(t=>Ht(t,e===`playtest`?`play`:e)),panels:jY,getCommands:Me}),Ne?(0,M.jsxs)(`div`,{className:`chord-hint`,role:`status`,children:[(0,M.jsx)(`kbd`,{children:Ne}),(0,M.jsx)(`span`,{children:`waiting for the next key…`})]}):null]})})})}function xY(e){let{state:t,activeId:n,operatorBadge:r,onFocusGroup:i,onReorderGroup:a,onNewGroup:o}=e,s=er(),[c,l]=g.useState(!1),u=s?.title?.trim()||`Untitled deck`;Gn(u,r),Kn(r);let d=s?.visibility===`public`?Tr:s?.visibility===`unlisted`?Cr:wr,f=s?.saving??`idle`,p=s?.saveError??null,m=s?.draftAutosaveState??null,h=m===`starting`||m===`saving`?`Saving draft…`:m===`dirty`?`Unsaved changes`:m===`error`?`Draft save failed`:m===`saved`?`Draft saved`:null,[_,v]=g.useState(null),y=g.useRef(!1);g.useEffect(()=>{_!==null&&(f===`working`&&(y.current=!0),f===`done`&&y.current&&v(`done`),p&&y.current&&v(`failed`))},[f,p,_]);let b=g.useCallback(()=>{y.current=!1,v(`pushing`),Un(`push`)},[]);return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`div`,{className:`flow-topbar`,children:[(0,M.jsxs)(`div`,{className:`flow-topbar-leading`,children:[eC()?null:(0,M.jsxs)(`div`,{className:`flow-castle-wrap`,children:[(0,M.jsx)(`button`,{type:`button`,className:`dock-control dock-control-icon dock-control-mark`,title:`Menu`,"aria-haspopup":`menu`,"aria-expanded":c,onClick:()=>l(e=>!e),children:jr}),c&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`flow-menu-backdrop`,onClick:()=>l(!1)}),(0,M.jsxs)(`div`,{className:`menu flow-castle-menu`,role:`menu`,children:[(0,M.jsxs)(`button`,{type:`button`,role:`menuitem`,className:`menu-item`,onClick:()=>{l(!1),Un(`back-to-decks`)},children:[(0,M.jsx)(`span`,{className:`menu-icon`,children:Dr}),(0,M.jsx)(`span`,{className:`menu-item-label`,children:`Back to decks`})]}),(0,M.jsxs)(`button`,{type:`button`,role:`menuitem`,className:`menu-item`,onClick:()=>{l(!1),Un(`new-deck`)},children:[(0,M.jsx)(`span`,{className:`menu-icon`,children:yr}),(0,M.jsx)(`span`,{className:`menu-item-label`,children:`New deck`})]}),(0,M.jsx)(`div`,{className:`menu-separator flow-menu-narrow`}),(0,M.jsx)(`button`,{type:`button`,role:`menuitem`,className:`menu-item flow-menu-narrow`,onClick:()=>{l(!1),Un(`open-settings`)},children:(0,M.jsx)(`span`,{className:`menu-item-label`,children:`Deck settings`})}),(0,M.jsx)(`button`,{type:`button`,role:`menuitem`,className:`menu-item flow-menu-narrow`,disabled:f===`working`,onClick:()=>{l(!1),b()},children:(0,M.jsx)(`span`,{className:`menu-item-label`,children:f===`working`?`Pushing…`:p?`Push failed — retry`:f===`done`?`Pushed ✓`:`Push to Castle`})})]})]})]}),(0,M.jsxs)(`button`,{type:`button`,className:`dock-control dock-control-quiet flow-deck-identity`,title:`Deck settings`,onClick:()=>Un(`open-settings`),children:[(0,M.jsx)(`span`,{className:`flow-deck-vis`,children:d}),(0,M.jsx)(`span`,{className:`flow-deck-name`,children:u}),(0,M.jsx)(`span`,{className:`flow-deck-caret`,children:Or})]}),h?(0,M.jsx)(`span`,{className:`flow-draft-status${m===`error`?` is-error`:``}`,role:`status`,children:h}):null]}),(0,M.jsxs)(`div`,{className:`flow-tabs-wrap`,children:[(0,M.jsx)(ES,{groups:t.groups,activeId:n,operatorBadge:r,onFocusGroup:i,onReorderGroup:a}),(0,M.jsx)(`button`,{type:`button`,className:`button button-icon button-quiet flow-tabs-add flow-picker-trigger`,title:`New group`,"aria-label":`New group`,onClick:e=>o(e.currentTarget.getBoundingClientRect()),children:yr})]}),(0,M.jsx)(`div`,{className:`flow-topbar-trailing`,children:(0,M.jsxs)(`button`,{type:`button`,className:`dock-control flow-preview-btn${p?` flow-preview-btn-failed`:``}`,title:p??`Publish this deck to your Castle account (sandbox edits stay local until pushed)`,disabled:f===`working`,onClick:()=>Un(`push`),children:[Er,(0,M.jsxs)(`span`,{className:`flow-preview-label`,children:[(0,M.jsx)(`span`,{className:`flow-preview-label-sizer`,"aria-hidden":`true`,children:`Push to Castle`}),(0,M.jsx)(`span`,{children:f===`working`?`Pushing…`:p?`Push failed`:f===`done`?`Pushed ✓`:`Push to Castle`})]})]})})]}),_!==null&&(0,M.jsx)(`div`,{className:`flow-push-modal-backdrop`,children:(0,M.jsx)(`div`,{className:`flow-push-modal`,role:`dialog`,"aria-modal":`true`,children:_===`failed`?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`flow-push-check flow-push-check-failed`,children:`!`}),(0,M.jsx)(`div`,{className:`flow-push-title`,children:`Push failed`}),(0,M.jsx)(`div`,{className:`flow-push-sub`,children:p}),(0,M.jsx)(`button`,{type:`button`,className:`flow-push-done`,onClick:()=>v(null),children:`Dismiss`})]}):_===`done`?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`flow-push-check`,children:`✓`}),(0,M.jsx)(`div`,{className:`flow-push-title`,children:`Pushed to Castle`}),s?.shareUrl?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`flow-push-sub`,children:`Your deck is live at`}),(0,M.jsx)(`a`,{className:`flow-push-url`,href:s.shareUrl,target:`_blank`,rel:`noreferrer`,children:s.shareUrl.replace(/^https?:\/\//,``)})]}):(0,M.jsx)(`div`,{className:`flow-push-sub`,children:`Saved to your Castle account.`}),(0,M.jsx)(`button`,{type:`button`,className:`flow-push-done`,onClick:()=>v(null),children:`Done`})]}):(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`flow-push-spinner`}),(0,M.jsx)(`div`,{className:`flow-push-title`,children:`Pushing to Castle…`}),(0,M.jsx)(`div`,{className:`flow-push-sub`,children:`Publishing your latest changes.`})]})})})]})}function SY(e,t){e.currentTarget.blur(),t()}var CY=g.memo(function(e){let{group:t,active:n,mobile:r,pinned:i,maximized:a,hidden:o,dragging:s,hovered:c,getLifecycle:l,registerEl:u}=e,{onFocusGroup:d,onClose:f}=e,p=et(t),m=PY(t,e.onResize),[h,_]=g.useState(()=>p&&t.tabs.every($e)),v=g.useCallback(()=>_(e=>!e),[]),y=r?void 0:a?{flex:`1 1 auto`}:{flex:`0 0 auto`,width:t.w,height:t.h},b=p?null:t.tabs[0],x=(0,M.jsx)(`button`,{type:`button`,className:r?`button button-icon button-icon-large button-quiet`:`button button-icon button-quiet`,title:`Close`,"aria-label":`Close`,onClick:e=>SY(e,()=>f(t.id)),children:br}),S=n=>{n.target.closest(`button, .panel-tab`)||a||e.onStartDrag(n,t.id)},C=n&&!r&&!a,w=b?.kind===`operator`;return(0,M.jsxs)(`div`,{ref:e=>u(t.id,e),"data-group-id":t.id,className:`panel flow-group${C?` is-active`:``}${i?` pinned`:``}${a?` maximized`:``}${o?` hidden`:``}${s?` is-dragging`:``}${c?` is-hover`:``}${p?` is-editor`:``}`,style:y,onMouseDown:()=>d(t.id),children:[p?(0,M.jsx)(xS,{group:t,mobile:r,pinned:i,maximized:a,onStartDrag:e.onStartDrag,onActivateTab:e.onActivateTab,onCloseTab:e.onCloseTab,onCloseGroup:f,onReorderTab:e.onReorderTab,onTogglePin:e.onTogglePin,onToggleMaximize:e.onToggleMaximize,onOpenMobileSwitch:e.onOpenMobileSwitch,onSetTabView:e.onSetTabView,drawerOpen:h,onToggleDrawer:v}):(0,M.jsxs)(`div`,{className:`${w?`panel-tabs-header`:`panel-header`} flow-tabstrip${r?` flow-tabstrip-mobile`:``}`,onPointerDown:S,children:[w?(0,M.jsx)(`div`,{className:`operator-chrome`,"data-operator-chrome":!0}):r?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`flow-mobile-strip-left`}),(0,M.jsxs)(`div`,{className:`panel-mobile-current`,children:[(0,M.jsx)(`span`,{className:`flow-tab-icon`,children:b&&vr(b.kind,b.path)}),(0,M.jsx)(`span`,{className:`panel-mobile-current-label`,children:b?.label})]})]}):(0,M.jsxs)(`div`,{className:`panel-title`,children:[(0,M.jsx)(`span`,{className:`flow-tab-icon`,children:b&&vr(b.kind,b.path)}),(0,M.jsx)(`span`,{children:b?.label})]}),(0,M.jsxs)(`div`,{className:`panel-header-actions${r?` flow-mobile-strip-right`:``}`,children:[!r&&!a&&(0,M.jsx)(`button`,{type:`button`,className:`button button-icon button-quiet`,title:i?`Unpin`:`Pin to left`,"aria-label":i?`Unpin`:`Pin to left`,"aria-pressed":i,onClick:n=>SY(n,()=>e.onTogglePin(t.id)),children:Sr}),!r&&(0,M.jsx)(`button`,{type:`button`,className:`button button-icon button-quiet`,title:a?`Restore`:`Maximize`,"aria-label":a?`Restore`:`Maximize`,"aria-pressed":a,onClick:n=>SY(n,()=>e.onToggleMaximize(t.id)),children:a?Ar:kr}),x]})]}),(0,M.jsx)(`div`,{className:`flow-panel-body`,children:t.tabs.map(i=>(0,M.jsx)(`div`,{className:`flow-tab-body${i.id===t.activeTabId?``:` inactive`}`,children:(0,M.jsx)(wY,{tab:i,groupId:t.id,lifecycle:l(i.id),onOpenInGroup:e.onOpenInGroup,onSetTabView:e.onSetTabView,drawerOpen:h&&!r,mobile:r,active:n})},i.id))}),!r&&!a&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`flow-resize-e`,onPointerDown:m(`x`),title:`Drag to resize width`}),(0,M.jsx)(`div`,{className:`flow-resize-s`,onPointerDown:m(`y`),title:`Drag to resize height`}),(0,M.jsx)(`div`,{className:`flow-resize-se`,onPointerDown:m(`xy`),title:`Drag to resize`})]})]})}),wY=g.memo(function(e){let{tab:t,groupId:n,lifecycle:r,onOpenInGroup:i,onSetTabView:a,drawerOpen:o,mobile:s,active:c}=e;if(t.kind===`editor`&&$e(t))return(0,M.jsxs)(`div`,{className:`flow-empty-editor`,children:[o?(0,M.jsx)(wU,{currentFile:``,filterClass:t.classHint,onOpen:e=>i(n,e)}):null,(0,M.jsx)(`div`,{className:`flow-empty-editor-msg`,children:`Open a file`})]});switch(t.kind){case`editor`:return(0,M.jsx)(mU,{file:t.path,editorClass:t.view,lifecycle:r,hideContextBar:!0,drawerOpen:o,drawer:(0,M.jsx)(wU,{currentFile:t.path??``,filterClass:t.path?me(t.path):void 0,onOpen:e=>i(n,e),view:t.view,onSetView:e=>a(n,t.id,e)})});case`play`:return(0,M.jsx)(SU,{lifecycle:r});case`terminal`:return(0,M.jsx)(CU,{lifecycle:r});case`files`:return(0,M.jsx)(EW,{lifecycle:r});case`params`:return(0,M.jsx)(cS,{scope:t.path,lifecycle:r});case`operator`:return(0,M.jsx)(TY,{mobile:s,active:c});default:return(0,M.jsx)(EY,{tab:t})}});function TY(e){let t=g.useContext(rY);return t?(0,M.jsx)(`div`,{className:`shell-root docked flow-operator-host`,style:{"--operator-col":`100%`},children:(0,M.jsx)(OJ,{agent:t,mobile:e.mobile,active:e.active})}):(0,M.jsx)(`div`,{className:`flow-placeholder`,children:`operator unavailable`})}function EY(e){let{tab:t}=e;return(0,M.jsxs)(`div`,{className:`flow-placeholder kind-${t.kind}`,children:[(0,M.jsx)(`div`,{className:`flow-placeholder-icon`,children:vr(t.kind,t.path)}),(0,M.jsx)(`div`,{className:`flow-placeholder-label`,children:t.label}),(0,M.jsx)(`div`,{className:`flow-placeholder-kind`,children:t.path??t.kind})]})}function DY(e,t){g.useEffect(()=>{let n=n=>{n.target.closest(e)||t()},r=window.setTimeout(()=>document.addEventListener(`mousedown`,n),0);return()=>{window.clearTimeout(r),document.removeEventListener(`mousedown`,n)}},[e,t])}function OY(e,t){return Math.max(8,Math.min(e,window.innerWidth-t-8))}var kY=300,AY=[...v?[]:[{kind:`operator`,label:`Operator`}],{kind:`play`,label:`Play`},...v?[]:[{kind:`terminal`,label:`Terminal`}],{kind:`files`,label:`Files`},{kind:`params`,label:`Parameters`}],jY=AY.map(({kind:e,label:t})=>({kind:e===`play`?`playtest`:e,label:t}));function MY(e,t){let n=t.trim().toLowerCase(),r=AY.filter(e=>e.label.toLowerCase().includes(n)).map(e=>({kind:`panel`,panel:e.kind,label:e.label})),i=new Set;for(let t of e)i.add(me(t));let a=[...i].map(e=>{let t=he(e);return{kind:`class`,classId:e,label:t.label,icon:t.icon}}).filter(e=>e.label.toLowerCase().includes(n)).sort((e,t)=>e.label.localeCompare(t.label)),o=e.filter(e=>e.toLowerCase().includes(n)).slice(0,40).map(e=>({kind:`file`,path:e}));return[...r,...a,...o]}function NY(e){let{anchor:t,files:n,onOpenFile:r,onSpawnPanel:i,onSpawnClass:a,onClose:o}=e,[s,c]=g.useState(``),[l,u]=g.useState(0);DY(`.flow-picker, .flow-picker-trigger`,o);let d=MY(n,s),f=Math.min(l,Math.max(0,d.length-1)),p=e=>{e.kind===`panel`?i(e.panel):e.kind===`class`?a(e.classId):r(e.path),o()};return(0,On.createPortal)((0,M.jsxs)(`div`,{className:`menu flow-picker`,style:{top:t.bottom+4,left:OY(t.left,kY),width:kY},onMouseDown:e=>e.stopPropagation(),children:[(0,M.jsx)(`input`,{className:`flow-picker-input`,autoFocus:!0,placeholder:`Open a file or panel…`,value:s,onChange:e=>{c(e.target.value),u(0)},onKeyDown:e=>{e.key===`Escape`?o():e.key===`ArrowDown`?(e.preventDefault(),u(e=>Math.min(e+1,d.length-1))):e.key===`ArrowUp`?(e.preventDefault(),u(e=>Math.max(e-1,0))):e.key===`Enter`&&d[f]&&p(d[f])}}),(0,M.jsxs)(`div`,{className:`flow-picker-list`,children:[d.length===0&&(0,M.jsx)(`div`,{className:`flow-picker-empty`,children:`No matches`}),d.map((e,t)=>(0,M.jsxs)(`button`,{type:`button`,className:`menu-item${t===f?` is-hover`:``}`,onMouseEnter:()=>u(t),onClick:()=>p(e),children:[(0,M.jsx)(`span`,{className:`menu-icon`,children:e.kind===`panel`?vr(e.panel):e.kind===`class`?hr(e.icon):vr(`editor`,e.path)}),(0,M.jsx)(`span`,{className:`menu-item-label`,children:e.kind===`panel`||e.kind===`class`?e.label:e.path})]},e.kind===`panel`?`p:${e.panel}`:e.kind===`class`?`c:${e.classId}`:`f:${e.path}`))]})]}),document.body)}function PY(e,t){return g.useCallback(n=>r=>{r.preventDefault(),r.stopPropagation();let i=r.clientX,a=r.clientY,o=e.w,s=e.h,c=r.currentTarget;c.setPointerCapture(r.pointerId);let l=!1,u=r=>{let c=r.clientX-i,u=r.clientY-a;if(!l&&Math.abs(c)<5&&Math.abs(u)<5)return;l=!0;let d=n===`y`?o:Math.max(200,o+c),f=n===`x`?s:Math.max(160,s+u);t(e.id,d,f)},d=()=>{c.removeEventListener(`pointermove`,u),c.removeEventListener(`pointerup`,d)};c.addEventListener(`pointermove`,u),c.addEventListener(`pointerup`,d)},[e.id,e.w,e.h,t])}function FY(){let e=oe(),t=g.useRef(0);return $n(()=>{let n=Date.now();n-t.current<1e3||(t.current=n,e.refreshUsage())}),(0,M.jsx)(bY,{agent:e})}var IY=document.getElementById(`root`);if(!IY)throw Error(`Missing #root`);FU(),SN(),ex(),(0,_.createRoot)(IY).render((0,M.jsx)(FY,{}));
|
|
447
|
+
`)}`:``}var oq={thinking:(0,M.jsx)(N,{name:`lightbulb`}),reading:(0,M.jsx)(N,{name:`book`}),building:(0,M.jsx)(N,{name:`hammer`}),painting:(0,M.jsx)(N,{name:`pencil`}),playing:(0,M.jsx)(N,{name:`gamepad`})},sq={thinking:`Thinking`,reading:`Reading files`,building:`Editing logic`,painting:`Editing art`,playing:`Playtesting`},cq={thinking:`#FFC826`,reading:`#FFC826`,building:`#FFEB57`,painting:`#FFEB57`,playing:`#D3FC7E`};function lq(e){if(e.status===`done`)return{icon:(0,M.jsx)(N,{name:`check`}),color:`#5AC54F`};if(e.status===`failed`)return{icon:(0,M.jsx)(N,{name:`times`}),color:`#F5545D`};if(e.status===`interrupted`)return{icon:(0,M.jsx)(N,{name:`stop`}),color:`#B4B4B4`};if(e.status===`blocked`)return{icon:(0,M.jsx)(N,{name:`stop`}),color:`#F5A623`};let t=e.avatar&&oq[e.avatar]?e.avatar:`thinking`;return{icon:oq[t],color:cq[t]}}function uq(e){let t=Math.max(1,Math.round((e??0)/1e3));if(t<60)return`Thought for ${t}s`;let n=Math.floor(t/60),r=t%60;return r===0?`Thought for ${n}m`:`Thought for ${n}m ${r}s`}var dq=`plan.md`;function fq(){let e=lx();return(0,M.jsxs)(`div`,{className:`operator-line msg-plan`,children:[(0,M.jsx)(N,{name:`file-md`,className:`icon-inline`}),(0,M.jsxs)(`span`,{children:[(0,M.jsx)(`button`,{type:`button`,className:`operator-line-link`,title:`Open ${dq}`,onClick:()=>e.openFile(dq),children:dq}),` `,`updated`]})]})}function pq(e){let t=lx();return(0,M.jsx)(`button`,{type:`button`,className:`msg-file`,title:`Open ${UM(e.loc)}`,onClick:()=>nN(t,e.loc),children:e.token})}function mq(e){let{text:t}=e,n=TK(),r=g.useMemo(()=>tN(t,wK),[t,n]),i=[],a=0;for(let e of r)e.start>a&&i.push(t.slice(a,e.start)),i.push((0,M.jsx)(pq,{loc:e.loc,token:t.slice(e.start,e.end)},e.start)),a=e.end;return a<t.length&&i.push(t.slice(a)),(0,M.jsx)(`span`,{children:i})}var hq=(0,M.jsx)(N,{name:`send`}),gq=(0,M.jsx)(N,{name:`stop`}),_q=(0,M.jsx)(N,{name:`chevron-down`}),vq=[{value:`claude`,label:`Claude`},{value:`cursor`,label:`Cursor`},{value:`smith`,label:`Smith`}],yq=[{value:`opus`,label:`Opus`},{value:`sonnet`,label:`Sonnet`},{value:`fable`,label:`Fable`},{value:`openrouter`,label:`OpenRouter`}];function bq(e,t){return e===`smith`||e===`claude`&&t===`openrouter`}function xq(e){if(!e||!e.trim())return null;let t=e.trim(),n=t.lastIndexOf(`/`);return n>=0?t.slice(n+1):t}function Sq(e,t,n){let r=vq.find(t=>t.value===e)?.label??e??`?`;if(e===`claude`){if(t===`openrouter`){let e=xq(n);return e?`${r} (${e})`:`${r} (OpenRouter)`}let e=yq.find(e=>e.value===t)?.label??t;return e?`${r} (${e})`:r}if(e===`smith`){let e=xq(n);return e?`${r} (${e})`:r}return r}function Cq(e){return`${Sq(e.router,e.routerClaudeModel,e.routerOpenrouterModel)} → ${Sq(e.tasks,e.tasksClaudeModel,e.tasksOpenrouterModel)}`}var wq=`/__castle/agent/model-caps`,Tq=[{value:`balanced`,label:`Balanced`},{value:`nitro`,label:`Nitro`},{value:`exacto`,label:`Exacto`},{value:`floor`,label:`Floor`}],Eq=[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`],Dq={none:`None`,minimal:`Minimal`,low:`Low`,medium:`Medium`,high:`High`,xhigh:`XHigh`,max:`Max`};function Oq(e){let t=e?.reasoningEfforts;if(!t||t.length===0)return null;let n=new Set(t);return Eq.filter(e=>n.has(e)).map(e=>({value:e,label:Dq[e]??e}))}var kq={openai:`OpenAI`,azure:`Azure`,anthropic:`Anthropic`,google:`Google`,"google-vertex":`Vertex`,deepinfra:`DeepInfra`,fireworks:`Fireworks`,together:`Together`,groq:`Groq`,cerebras:`Cerebras`,baseten:`Baseten`},Aq={flex:`Flex`,priority:`Priority`,standard:`Standard`,eu:`EU`};function jq(e){return e.length===0?e:e.charAt(0).toUpperCase()+e.slice(1)}function Mq(e){let[t,n]=e.split(`/`),r=kq[t]??jq(t);return n?`${r} ${Aq[n]??jq(n)}`:r}function Nq(e){let t=e?.providerTiers;return!t||t.length<2?null:[{value:``,label:`Auto`},...t.map(e=>({value:e,label:Mq(e)}))]}function Pq(e,t,n,r,i){let a=e===`router`,o=a?`routerClaudeModel`:`tasksClaudeModel`,s=a?`routerOpenrouterModel`:`tasksOpenrouterModel`,c=[{type:`enum`,key:e,label:a?`Operator`:`Tasks`,options:vq},{type:`enum`,key:o,label:`Model`,options:yq.filter(e=>!r.includes(e.value)),showWhen:t=>t[e]===`claude`,note:i&&t[o]===`openrouter`?`Pick Opus, Sonnet, or Fable to use your Anthropic credentials`:void 0},{type:`text`,key:s,label:`OpenRouter model`,placeholder:a?`openai/gpt-5.6-sol`:`openai/gpt-5.6-terra`,showWhen:t=>bq(t[e],t[o])}];if(t[e]===`smith`){let e=Oq(n);e&&c.push({type:`select`,key:a?`routerReasoningEffort`:`tasksReasoningEffort`,label:`Reasoning`,options:e}),c.push({type:`select`,key:a?`routerRouting`:`tasksRouting`,label:`Routing`,options:Tq});let t=Nq(n);t&&c.push({type:`select`,key:a?`routerProviderTier`:`tasksProviderTier`,label:`Provider`,options:t})}return c}function Fq(e){let{label:t,placeholder:n,value:r,warning:i,onCommit:a}=e,[o,s]=g.useState(r);g.useEffect(()=>s(r),[r]);let c=g.useRef(o),l=g.useRef(r),u=g.useRef(a);c.current=o,l.current=r,u.current=a;let d=()=>{let e=c.current.trim();return e&&e!==l.current?(u.current(e),!0):!1},f=()=>{d()||s(l.current)};g.useEffect(()=>()=>{d()},[]);let p=e=>{s(e),a(e)};return(0,M.jsxs)(`div`,{className:`settings-row settings-row-stack`,children:[(0,M.jsxs)(`div`,{className:`settings-row-main`,children:[(0,M.jsx)(`span`,{className:`settings-label`,children:t}),(0,M.jsx)(`input`,{type:`text`,className:`text-field${i?` settings-text-warn`:``}`,value:o,placeholder:n,onChange:e=>s(e.target.value),onBlur:f,onKeyDown:e=>{e.key===`Enter`&&(f(),e.target.blur())}})]}),i?(0,M.jsxs)(`div`,{className:`settings-warning`,children:[`⚠ `,i.message,i.suggestion?(0,M.jsxs)(M.Fragment,{children:[` `,`Did you mean`,` `,(0,M.jsx)(`button`,{type:`button`,className:`settings-warning-suggest`,onMouseDown:e=>{e.preventDefault(),p(i.suggestion)},children:i.suggestion}),`?`]}):null]}):null]})}function Iq(e,t,n){let r=e?.[t];if(!(!r||!n||r.model!==n))return{message:r.message,suggestion:r.suggestion}}function Lq(e){if(!e||e.limitMicros===null||e.limitMicros<=0)return null;if(e.blocked)return 1;if(e.credits?.plan===`daily`&&e.credits.dailyFreeRemainingCredits!==null){let t=e.credits.dailyFreeRemainingCredits*1e4;return t<=0?1:Math.min(1,Math.max(0,e.usedMicros/(e.usedMicros+t)))}return Math.min(1,e.usedMicros/e.limitMicros)}function Rq(e){let t=e?.autoReload;return!t?.enabled||t.disabledReason||t.thresholdCredits===null||t.amountCredits===null?null:{thresholdCredits:t.thresholdCredits,amountCredits:t.amountCredits}}function zq(e){if(e?.blocked)return`operator-usage-blocked`;if(e?.credits?.plan===`credits`)return e.credits.lowBalance&&!Rq(e.credits)?`operator-usage-warn`:``;let t=Lq(e);return t===null?``:t>=.8?`operator-usage-warn`:``}var Bq=new Intl.NumberFormat(void 0,{style:`currency`,currency:`USD`});function Vq(e){return Bq.format(e/100)}function Hq(e){return Vq(e/1e4)}function Uq(e,t){if(!t||t.displayUnit===`usd`||t.usdPerCredit<=0)return Hq(e);let n=Math.round(e/1e6/t.usdPerCredit);return`${n.toLocaleString()} ${n===1?`credit`:`credits`}`}function Wq(e){return e.resetAtMs?new Date(e.resetAtMs).toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`}):``}function Gq(e){let{usage:t}=e,n=Lq(t);if(n===null)return null;let r=Wq(t),i=t.credits?.plan===`daily`?t.credits.purchasedCredits+t.credits.grantedCredits:0,a=i>0?` + ${Vq(i)} credits`:``,o=(t.blocked?`Limit reached`:`${Math.round(n*100)}%${r?` \u00b7 resets ${r}`:``}`)+a;return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`settings-row`,children:(0,M.jsx)(`span`,{className:`settings-label`,children:`Daily Operator usage`})}),(0,M.jsx)(`div`,{className:`settings-usage-bar`,children:(0,M.jsx)(`div`,{className:`settings-usage-fill`+(t.blocked?` blocked`:``),style:{width:`${n*100}%`}})}),(0,M.jsx)(`div`,{className:`settings-usage-subtext`,children:o})]})}function Kq(e){let t=e.credits,n=t?.autoReload,r=Rq(t),i=t?.rates,a=`${Uq(e.creditsExhausted?0:e.spendableMicros??0,i)} left`,o=t?.nextGrantAt?`Refreshes ${new Date(t.nextGrantAt).toLocaleDateString()}`:null,s=r?`Auto-reload will add ${Uq(r.amountCredits*1e4,i)} when you drop below ${Uq(r.thresholdCredits*1e4,i)}`:null,c=Wq(e),l=e.blocked?`Daily limit reached${c?` · Resets at ${c}`:``}`:null,u=!!n?.disabledReason,d=null;return e.creditsExhausted?d=u?{severity:`danger`,text:`Auto-reload was unsuccessful`,action:`Update your card`}:{severity:`danger`,text:`Out of credits`,action:`Set up auto-reload`}:t?.lowBalance&&!r&&(d=u?{severity:`danger`,text:`Auto-reload was unsuccessful`,action:`Update your card`}:{severity:`warn`,text:`Running low on credits`,action:`Set up auto-reload`}),{amount:a,caption:s,grant:o,dailyBlocked:l,banner:d}}function qq(e){let{usage:t,onRefreshUsage:n}=e;if(t.spendableMicros===null)return null;let r=Kq(t);return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`settings-row`,children:(0,M.jsx)(`span`,{className:`settings-label`,children:`Operator credits`})}),(0,M.jsxs)(`div`,{className:`settings-split`,children:[(0,M.jsx)(`div`,{className:`settings-credits`,children:r.amount}),(0,M.jsx)(`button`,{type:`button`,className:`button`,onClick:()=>Yq(n),children:(0,M.jsx)(`span`,{children:`Get credits`})})]}),r.caption?(0,M.jsx)(`div`,{className:`settings-usage-subtext`,children:r.caption}):null,r.grant?(0,M.jsx)(`div`,{className:`settings-usage-subtext`,children:r.grant}):null,r.dailyBlocked?(0,M.jsx)(`p`,{className:`feedback-note feedback-danger settings-usage-subtext`,children:r.dailyBlocked}):null,r.banner?(0,M.jsxs)(`div`,{className:`feedback-banner feedback-${r.banner.severity} is-inset`,role:`status`,children:[(0,M.jsx)(`span`,{children:r.banner.text}),(0,M.jsx)(`button`,{type:`button`,className:`button`,onClick:()=>Yq(n),children:(0,M.jsx)(`span`,{children:r.banner.action})})]}):null]})}function Jq(e){return e.usage.credits?.plan===`credits`?(0,M.jsx)(qq,{usage:e.usage,onRefreshUsage:e.onRefreshUsage}):(0,M.jsx)(Gq,{usage:e.usage})}function Yq(e){if(window.ReactNativeWebView){window.ReactNativeWebView.postMessage(JSON.stringify({type:`castle-open-credits`}));return}if(!window.open(`https://castle.xyz/credits`,`_blank`))return;Xq?.();let t=()=>{document.visibilityState===`visible`&&(Xq?.(),e())};Xq=()=>{document.removeEventListener(`visibilitychange`,t),window.removeEventListener(`focus`,t),Xq=null},document.addEventListener(`visibilitychange`,t),window.addEventListener(`focus`,t)}var Xq=null;function Zq(e){let t=e.providers.filter(e=>e.key?.present||e.login?.loggedIn).map(e=>e.label);return(0,M.jsxs)(`div`,{className:`settings-split`,children:[t.length>0?(0,M.jsxs)(`div`,{className:`settings-split-copy`,children:[(0,M.jsx)(`div`,{className:`settings-credits`,children:`Use your own agent provider`}),(0,M.jsxs)(`div`,{className:`settings-usage-subtext`,children:[`Connected: `,t.join(`, `)]})]}):(0,M.jsx)(`div`,{className:`settings-credits`,children:`Use your own agent provider`}),(0,M.jsx)(`button`,{type:`button`,className:`button`,onClick:e.onOpen,children:(0,M.jsx)(`span`,{children:t.length>0?`Manage providers`:`Add provider`})})]})}function Qq(e){let{login:t}=e,[n,r]=g.useState(``),i=()=>{n.trim()&&e.onSubmitCode(n.trim())};return(0,M.jsxs)(M.Fragment,{children:[t.url?(0,M.jsxs)(`div`,{className:`castle-key-login`,children:[(0,M.jsx)(`div`,{className:`castle-key-subtitle`,children:`Open this link to sign in, then come back here.`}),(0,M.jsx)(`a`,{className:`castle-key-url`,href:t.url,target:`_blank`,rel:`noreferrer noopener`,children:t.url})]}):(0,M.jsx)(`div`,{className:`castle-key-subtitle`,children:`Starting sign-in…`}),t.phase===`awaiting-code`?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`castle-key-subtitle`,children:`Paste the code the browser shows you:`}),(0,M.jsx)(`input`,{className:`castle-key-input`,autoFocus:!0,spellCheck:!1,autoComplete:`off`,value:n,placeholder:`code`,onChange:e=>r(e.target.value),onKeyDown:e=>{e.key===`Enter`&&i()}}),t.message?(0,M.jsx)(`div`,{className:`castle-key-error`,children:t.message}):null]}):null,t.phase===`verifying`?(0,M.jsx)(`div`,{className:`castle-key-stored`,children:`Finishing sign-in…`}):null,t.phase===`error`?(0,M.jsx)(`div`,{className:`castle-key-error`,children:t.message}):null,(0,M.jsxs)(`div`,{className:`castle-modal-actions`,children:[(0,M.jsx)(`button`,{type:`button`,onClick:e.onCancel,children:t.phase===`error`?`Close`:`Cancel`}),t.phase===`awaiting-code`?(0,M.jsx)(`button`,{type:`button`,onClick:i,disabled:!n.trim(),children:`Submit`}):null]})]})}function $q(e){let t=e.accounts.providers,n=e.accounts.login,[r,i]=g.useState(()=>(t.find(e=>e.key?.present||e.login?.loggedIn)??t[0])?.id??``),[a,o]=g.useState(``),[s,c]=g.useState(null),l=(n?t.find(e=>e.login?.provider===n.provider):null)??t.find(e=>e.id===r)??t[0]??null,u=g.useRef(e.onClose);u.current=e.onClose;let d=n!==null;g.useEffect(()=>{let e=e=>{e.key===`Escape`&&!d&&u.current()};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[d]);let f=g.useRef(null);if(g.useEffect(()=>{if(n){f.current=n.provider;return}let e=f.current;e!==null&&(f.current=null,t.find(t=>t.login?.provider===e)?.login?.loggedIn&&u.current())}),!l)return null;let p=!!l.login?.loggedIn,m=!!l.key?.present,h=p||m,_=()=>{let t=a.trim();if(t){if(t.length>500){c(`That key is too long.`);return}if([...t].some(e=>{let t=e.codePointAt(0)??0;return t<32||t===127})){c(`That key contains invalid characters.`);return}e.onSave(l.id,t),e.onClose()}};return(0,On.createPortal)((0,M.jsx)(`div`,{className:`castle-modal-scrim`,onMouseDown:n?void 0:e.onClose,children:(0,M.jsxs)(`div`,{className:`castle-modal`,onMouseDown:e=>e.stopPropagation(),children:[(0,M.jsx)(`div`,{className:`castle-key-heading`,children:n?`Sign in to ${l.label}`:`Your account`}),n?null:(0,M.jsx)(`div`,{className:`castle-key-subtitle`,children:`Run the operator on your own account and bypass Castle's daily limit.`}),t.length>1&&!n?(0,M.jsx)(`div`,{className:`castle-key-tabs`,children:t.map(e=>(0,M.jsx)(`button`,{type:`button`,className:`castle-key-tab`+(e.id===l.id?` active`:``),onClick:()=>{i(e.id),o(``),c(null)},children:e.label},e.id))}):null,n?(0,M.jsx)(Qq,{login:n,onSubmitCode:e.onSubmitCode,onCancel:e.onCancelLogin}):(0,M.jsxs)(M.Fragment,{children:[h?(0,M.jsxs)(M.Fragment,{children:[p?(0,M.jsxs)(`div`,{className:`castle-key-row`,children:[(0,M.jsxs)(`span`,{children:[`Signed in with your `,l.label,` account.`]}),(0,M.jsx)(`button`,{type:`button`,onClick:()=>{e.onLogout(l.id),e.onClose()},children:`Sign out`})]}):null,m?(0,M.jsxs)(`div`,{className:`castle-key-row`,children:[(0,M.jsxs)(`span`,{children:[`API key saved (`,l.key?.hint,`).`]}),(0,M.jsx)(`button`,{type:`button`,onClick:()=>{e.onRemove(l.id),e.onClose()},children:`Remove`})]}):null]}):(0,M.jsxs)(M.Fragment,{children:[l.login?(0,M.jsxs)(`button`,{type:`button`,className:`castle-key-signin`,onClick:()=>e.onStartLogin(l.id),children:[`Sign in with your `,l.label,` account`]}):null,l.login&&l.key?(0,M.jsx)(`div`,{className:`castle-key-or`,children:`or`}):null,l.key?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`castle-key-field-label`,children:`Add API key`}),(0,M.jsx)(`input`,{type:`password`,className:`castle-key-input`,autoFocus:!0,spellCheck:!1,autoComplete:`off`,"data-1p-ignore":!0,"data-lpignore":`true`,value:a,placeholder:l.key.placeholder,onChange:e=>{o(e.target.value),c(null)},onKeyDown:e=>{e.key===`Enter`&&_()}}),s?(0,M.jsx)(`div`,{className:`castle-key-error`,children:s}):null]}):null]}),(0,M.jsxs)(`div`,{className:`castle-modal-actions`,children:[(0,M.jsx)(`button`,{type:`button`,onClick:e.onClose,children:`Cancel`}),!h&&l.key?(0,M.jsx)(`button`,{type:`button`,onClick:_,disabled:!a.trim(),children:`Save`}):null]})]})]})}),document.body)}function eJ(e){let{settings:t,onSetSetting:n,onClose:r}=e,i=e.usage?.credits?.plan===`credits`?e.usage.spendableMicros!==null:Lq(e.usage)!==null,a=e.accounts.providers.some(e=>e.key?.present||e.login?.loggedIn),o=e.accounts.providers.some(e=>e.id===`anthropic`&&(e.key?.present||e.login?.loggedIn)),s=e.accounts.providers.length>0&&(i||a),c=g.useRef(null),[l,u]=g.useState({}),d=t.routerOpenrouterModel?.trim()??``,f=t.tasksOpenrouterModel?.trim()??``,p=t.router===`smith`,m=t.tasks===`smith`;g.useEffect(()=>{let e=new Set;p&&d&&e.add(d),m&&f&&e.add(f);let t=!1;for(let n of e)fetch(`${wq}?model=${encodeURIComponent(n)}`).then(e=>e.ok?e.json():null).then(e=>{!t&&e&&u(t=>({...t,[n]:e}))}).catch(()=>{});return()=>{t=!0}},[p,d,m,f]);let h=e.usage?.blockedClaudeModels??[],_=[Pq(`router`,t,l[d],h,o),Pq(`tasks`,t,l[f],h,o)];return lS(c,r,e.triggerRef),(0,On.createPortal)((0,M.jsxs)(`div`,{className:`popover settings-popover`,ref:c,style:pS(c,e.triggerRef,[t,l,i,s,e.usage,o]),onMouseDown:e=>e.stopPropagation(),children:[i&&e.usage?(0,M.jsx)(`div`,{className:`settings-group`,children:(0,M.jsx)(Jq,{usage:e.usage,onRefreshUsage:e.onRefreshUsage})}):null,s?(0,M.jsx)(`div`,{className:`settings-group`,children:(0,M.jsx)(Zq,{providers:e.accounts.providers,onOpen:e.onOpenKeys})}):null,_.map((r,i)=>(0,M.jsx)(`div`,{className:`settings-group`,children:r.filter(e=>!e.showWhen||e.showWhen(t)).map(r=>{if(r.type===`text`)return(0,M.jsx)(Fq,{label:r.label,placeholder:r.placeholder,value:t[r.key]??``,warning:Iq(e.warnings,r.key,t[r.key]),onCommit:e=>n(r.key,e)},r.key);if(r.type===`select`)return(0,M.jsxs)(`div`,{className:`settings-row`,children:[(0,M.jsx)(`span`,{className:`settings-label`,children:r.label}),(0,M.jsx)(`select`,{className:`select`,value:t[r.key]??``,onChange:e=>n(r.key,e.target.value),children:r.options.map(e=>(0,M.jsx)(`option`,{value:e.value,children:e.label},e.value))})]},r.key);let i=t[r.key];return(0,M.jsxs)(`div`,{className:`settings-row settings-row-stack`,children:[(0,M.jsxs)(`div`,{className:`settings-row-main`,children:[(0,M.jsx)(`span`,{className:`settings-label`,children:r.label}),(0,M.jsx)(`div`,{className:`segmented`,role:`group`,"aria-label":r.label,children:r.options.map(e=>(0,M.jsx)(`button`,{type:`button`,tabIndex:-1,className:`button`,"aria-pressed":i===e.value,onClick:()=>n(r.key,e.value),children:(0,M.jsx)(`span`,{children:e.label})},e.value))})]}),r.note?(0,M.jsxs)(`div`,{className:`settings-warning`,children:[`⚠ `,r.note]}):null]},r.key)})},i))]}),document.body)}function tJ(e){let{spec:t,interactive:n,answers:r,onSubmit:i}=e,[a,o]=g.useState({}),s=n?a:r??{},c=(e,t,r)=>{n&&o(n=>{let i=n[e]??[];if(r){let r=i.includes(t)?i.filter(e=>e!==t):[...i,t];return{...n,[e]:r}}return{...n,[e]:i[0]===t?[]:[t]}})};return(0,M.jsxs)(`div`,{className:`picker${n?``:` picker-locked`}`,children:[t.questions.map(e=>(0,M.jsxs)(`fieldset`,{className:`picker-q`,disabled:!n,children:[(0,M.jsx)(`legend`,{className:`picker-q-label`,children:e.q}),(0,M.jsx)(`div`,{className:`picker-options`,children:e.options.map(t=>{let r=(s[e.id]??[]).includes(t);return(0,M.jsxs)(`label`,{className:`picker-option${r?` is-checked`:``}`,children:[(0,M.jsx)(`input`,{type:e.multi?`checkbox`:`radio`,name:e.id,checked:r,disabled:!n,onChange:()=>c(e.id,t,e.multi)}),(0,M.jsx)(`span`,{children:t})]},t)})})]},e.id)),n?(0,M.jsx)(`div`,{className:`picker-actions`,children:(0,M.jsx)(`button`,{className:`button`,type:`button`,onClick:()=>{let e=aq(t,a);e&&i(a,e)},children:(0,M.jsx)(`span`,{children:`Submit`})})}):null]})}function nJ(e){let{chips:t,interactive:n,onPick:r}=e,[i,a]=g.useState(null),o=n&&i===null;return(0,M.jsx)(`div`,{className:`chips`+(o?``:` chips-inert`),children:t.map(e=>(0,M.jsx)(`button`,{type:`button`,className:`chip`+(i===e?` is-picked`:``),disabled:!o,onClick:()=>{a(e),r(e)},children:e},e))})}function rJ(){return(0,M.jsxs)(`div`,{className:`picker picker-skeleton`,"aria-hidden":`true`,children:[(0,M.jsx)(`span`,{className:`picker-skeleton-hint`,children:`preparing options…`}),(0,M.jsxs)(`div`,{className:`picker-q`,children:[(0,M.jsx)(`div`,{className:`picker-skeleton-line picker-skeleton-label`}),(0,M.jsxs)(`div`,{className:`picker-options`,children:[(0,M.jsx)(`span`,{className:`picker-skeleton-chip`,style:{width:84}}),(0,M.jsx)(`span`,{className:`picker-skeleton-chip`,style:{width:116}}),(0,M.jsx)(`span`,{className:`picker-skeleton-chip`,style:{width:72}})]})]})]})}function iJ(e){let t=/^\[Editing (.+)\]$/,n=/^\[Reading (.+)\]$/,r=new Set;for(let n of e){let e=t.exec(n.trim());if(e)for(let t of e[1].split(`, `))r.add(t)}let i=[];for(let t of e){let e=n.exec(t.trim());if(e){let t=e[1].split(`, `).filter(e=>!r.has(e));if(t.length===0)continue;i.push(`[Reading ${t.join(`, `)}]`);continue}i.push(t)}return i}function aJ(e){let t=/^\[([A-Za-z]+)\s+(.+)\]$/,n=[];for(let r of e){let e=t.exec(r.trim());if(e){let r=n.length?t.exec(n[n.length-1].trim()):null;if(r&&r[1]===e[1]){r[2].split(`, `).includes(e[2])||(n[n.length-1]=`[${e[1]} ${r[2]}, ${e[2]}]`);continue}}n.push(r)}return n}function oJ(e){return e.detail?(0,M.jsxs)(`details`,{className:`msg-error-detail`,children:[(0,M.jsx)(`summary`,{children:`Details (full text in the browser console)`}),(0,M.jsx)(`pre`,{children:e.detail})]}):null}function sJ(e){let t=PK(),n=g.useRef(null),r=g.useRef(!0);return g.useLayoutEffect(()=>{let e=n.current;e&&r.current&&(e.scrollTop=e.scrollHeight)},[e.lines]),(0,M.jsx)(`div`,{className:`task-feed`,ref:n,onScroll:()=>{let e=n.current;e&&(r.current=e.scrollHeight-e.scrollTop-e.clientHeight<24)},onClick:e=>e.stopPropagation(),children:aJ(iJ(e.lines)).map((e,n)=>{let r=/^\[(.+)\]$/.exec(e.trim());return r?(0,M.jsx)(`div`,{className:`task-feed-tool`,children:r[1]},n):(0,M.jsx)(`div`,{className:`task-feed-msg`,onClick:t,dangerouslySetInnerHTML:MK(e)},n)})})}function cJ(e){let t=Math.max(0,Math.round(e/1e3)),n=Math.floor(t/60),r=t%60;return n>0?`${n}m ${r}s`:`${r}s`}function lJ(e,t,n){return t?`${e} · ${t}`:n?`${e} · Worked for ${n}`:e}function uJ(e){let[t,n]=g.useState(()=>Date.now());g.useEffect(()=>{if(e.status!==`running`)return;let t=setInterval(()=>n(Date.now()),1e3);return()=>clearInterval(t)},[e.status]);let r=e.startedAt?Date.parse(e.startedAt):null,i=e.finishedAt?Date.parse(e.finishedAt):null,a=C.includes(e.status),o=e.status===`done`?100:a?e.progress:Math.min(e.progress,95),s=e.status===`running`?e.phase?.trim()||sq[e.avatar??``]||`Working`:e.status===`waiting`?`Queued`:e.status===`blocked`?`Blocked`:e.status===`done`?`Done`:e.status===`failed`?`Failed`:e.status===`interrupted`?`Interrupted`:e.status,c=e.status===`running`&&r!==null?cJ(t-r):null,l=a&&r!==null&&i!==null?cJ(i-r):null;return{pct:o,avatar:lq(e),stage:s,elapsed:c,workedFor:l,finished:a,display:UK(e)}}function dJ(e){let{task:t,onAck:n}=e,r=e.variant===`archive`,i=PK(),[a,o]=g.useState(t.status===`failed`);g.useEffect(()=>{t.status===`failed`&&o(!0)},[t.status]);let s=()=>{o(e=>!e)},{pct:c,avatar:l,stage:u,elapsed:d,workedFor:f,finished:p,display:m}=uJ(t);return(0,M.jsxs)(`div`,{className:`task${a?` open`:``}`,onClick:s,children:[(0,M.jsxs)(`div`,{className:`task-row`,children:[(0,M.jsx)(`div`,{className:`pie`,style:{"--pct":c},children:(0,M.jsx)(`div`,{className:`avatar`,style:{background:l.color},children:(0,M.jsx)(`span`,{className:`avatar-icon-wrap`,"aria-hidden":`true`,children:l.icon})})}),(0,M.jsxs)(`div`,{className:`task-meta`,children:[(0,M.jsx)(`div`,{className:`task-name`,children:(0,M.jsx)(`span`,{className:`tn`,children:t.title})}),(0,M.jsx)(`div`,{className:`task-sub`,children:lJ(u,d,f)})]}),(0,M.jsxs)(`div`,{className:`task-actions`,children:[p&&!r?(0,M.jsx)(`button`,{className:`button button-icon task-action`,type:`button`,title:`Clear`,"aria-label":`Clear ${t.title}`,onClick:e=>{e.stopPropagation(),n(t.id,!1)},children:(0,M.jsx)(N,{name:`archive`})}):null,e.onOpen?(0,M.jsx)(`button`,{className:`button button-icon task-action`,type:`button`,title:`Open`,"aria-label":`Open ${t.title}`,onClick:n=>{n.stopPropagation(),e.onOpen?.(t)},children:(0,M.jsx)(N,{name:`chevron-right`})}):null]})]}),(0,M.jsxs)(`div`,{className:`task-body`,children:[a&&t.status===`running`&&e.feed&&e.feed.length>0?(0,M.jsx)(sJ,{lines:e.feed}):null,a&&t.status!==`running`&&m.error?(0,M.jsx)(`p`,{className:`feedback-note feedback-danger`,children:m.error}):null,a&&t.status!==`running`&&m.notes?(0,M.jsx)(`div`,{className:`task-notes`,onClick:i,dangerouslySetInnerHTML:MK(m.notes)}):null,a&&t.status===`failed`?(0,M.jsx)(oJ,{detail:t.errorDetail}):null,a?(0,M.jsx)(fJ,{frames:t.playtestFrames}):null]})]})}function fJ(e){let t=e.frames??[];return t.length===0?null:(0,M.jsxs)(`div`,{className:`task-playtest-frames`,children:[(0,M.jsxs)(`div`,{className:`task-playtest-frames-label`,children:[`Playtest frames (`,t.length,`)`]}),(0,M.jsx)(`div`,{className:`task-playtest-frames-row`,children:t.map(e=>(0,M.jsx)(`a`,{href:e,target:`_blank`,rel:`noreferrer`,onClick:e=>e.stopPropagation(),children:(0,M.jsx)(`img`,{className:`task-playtest-frame`,src:e,alt:`playtest frame`})},e))})]})}function pJ(e){return e.filter(e=>!(e.acknowledged&&C.includes(e.status)))}function mJ(e){let t=g.useRef(null),n=g.useRef(!0),r=g.useRef(0),[i,a]=g.useState(!1),o=pJ(e.tasks),s=JK(e.tasks);g.useLayoutEffect(()=>{let e=t.current;e&&n.current&&(e.scrollTop=e.scrollHeight)},[e.tasks]),g.useEffect(()=>()=>window.clearTimeout(r.current),[]);let c=()=>{let e=t.current;e&&(n.current=e.scrollHeight-e.scrollTop-e.clientHeight<24,a(!0),window.clearTimeout(r.current),r.current=window.setTimeout(()=>a(!1),900))};if(o.length===0&&s.length===0)return null;let l=o.filter(e=>C.includes(e.status));return(0,M.jsxs)(`div`,{id:`task-board`,className:`task-stack${i?` scrolling`:``}`,ref:t,onScroll:c,children:[(0,M.jsxs)(`div`,{className:`task-board-header`,children:[(0,M.jsxs)(`button`,{type:`button`,className:`button`,onClick:e.onOpenTasks,children:[(0,M.jsx)(`span`,{children:`Tasks`}),(0,M.jsx)(N,{name:`chevron-right`})]}),l.length>0?(0,M.jsxs)(`button`,{type:`button`,className:`button`,onClick:()=>{for(let t of l)e.onAck(t.id,!1)},children:[(0,M.jsx)(N,{name:`archive`}),(0,M.jsx)(`span`,{children:`Clear completed`}),(0,M.jsx)(`span`,{className:`button-badge`,children:l.length})]}):null]}),o.map(t=>(0,M.jsx)(dJ,{task:t,feed:e.feeds[t.id],onAck:e.onAck,onOpen:e.onOpenTask},t.id))]})}function hJ(e){let{task:t}=e,{pct:n,avatar:r,stage:i,elapsed:a,workedFor:o}=uJ(t);return(0,M.jsx)(`header`,{className:`task-page-header`,children:(0,M.jsxs)(`div`,{className:`task-row`,children:[(0,M.jsx)(`div`,{className:`pie`,style:{"--pct":n},children:(0,M.jsx)(`div`,{className:`avatar`,style:{background:r.color},children:(0,M.jsx)(`span`,{className:`avatar-icon-wrap`,"aria-hidden":`true`,children:r.icon})})}),(0,M.jsxs)(`div`,{className:`task-meta`,children:[(0,M.jsx)(`div`,{className:`task-name`,children:(0,M.jsx)(`span`,{className:`tn`,children:t.title})}),(0,M.jsx)(`div`,{className:`task-sub`,children:lJ(i,a,o)})]})]})})}function gJ(e){let{task:t}=e,n=PK(),r=g.useRef(null),i=g.useRef(!0),a=e.feed??[],o=UK(t),s=t.status===`running`,c=a.length>0,l=!s&&(!!o.error||!!o.notes);return g.useLayoutEffect(()=>{i.current=!0},[t.id]),g.useLayoutEffect(()=>{let e=r.current;e&&i.current&&(e.scrollTop=e.scrollHeight)},[t.id,e.feed,o.notes,o.error,t.status,t.playtestFrames]),(0,M.jsxs)(`div`,{className:`task-page`,children:[(0,M.jsx)(hJ,{task:t}),(0,M.jsxs)(`div`,{className:`task-page-body`,ref:r,onScroll:()=>{let e=r.current;e&&(i.current=e.scrollHeight-e.scrollTop-e.clientHeight<24)},children:[c?(0,M.jsx)(sJ,{lines:a}):null,l&&o.error?(0,M.jsx)(`p`,{className:`feedback-note feedback-danger`,children:o.error}):null,l&&o.notes?(0,M.jsxs)(`div`,{className:`task-notes`,onClick:n,children:[(0,M.jsx)(`p`,{className:`task-report-label`,children:`Report`}),(0,M.jsx)(`div`,{dangerouslySetInnerHTML:MK(o.notes)})]}):null,t.status===`failed`?(0,M.jsx)(oJ,{detail:t.errorDetail}):null,(0,M.jsx)(fJ,{frames:t.playtestFrames}),!c&&!l&&!(t.playtestFrames&&t.playtestFrames.length>0)?(0,M.jsx)(`p`,{className:`task-page-empty`,children:`No activity yet.`}):null]})]})}function _J(e){let t=pJ(e.tasks),n=JK(e.tasks);return(0,M.jsxs)(`div`,{className:`task-page-body task-board-page`,children:[t.length>0?(0,M.jsx)(`div`,{className:`task-stack`,children:t.map(t=>(0,M.jsx)(dJ,{task:t,feed:e.feeds[t.id],onAck:e.onAck,onOpen:e.onOpenTask},t.id))}):null,n.length>0?(0,M.jsxs)(`div`,{className:`task-archive task-stack`,children:[(0,M.jsx)(`div`,{className:`task-archive-heading text-style-smallcaps`,children:`Cleared`}),n.map(t=>(0,M.jsx)(dJ,{task:t,feed:e.feeds[t.id],onAck:e.onAck,onOpen:e.onOpenTask,variant:`archive`},t.id))]}):null,t.length===0&&n.length===0?(0,M.jsx)(`p`,{className:`task-page-empty`,children:`No tasks yet.`}):null]})}function vJ(e){let{msg:t,onPickerSubmit:n,onChip:r,chipsLive:i=!1,interactive:a=!1}=e,o=PK();if(t.role===`log`)return(0,M.jsx)(`div`,{className:`msg toolline`,children:t.text});if(t.role===`user`)return(0,M.jsxs)(`div`,{className:`msg user`,children:[(t.attachments??[]).map(e=>(0,M.jsx)(`img`,{className:`msg-image`,src:e,alt:``},e)),t.text?(0,M.jsx)(mq,{text:t.text}):null]});let s=t.status===`streaming`,c=rq(t.text,s),l=iq(c)||t.planUpdated===!0;if(!s&&!l)return null;let u=!s&&!t.pickerAnswers&&a,d=-1;c.forEach((e,t)=>{e.kind===`md`&&e.text.trim()!==``&&(d=t)});let f=c.some(e=>e.kind===`ask`||e.kind===`ask-pending`),p=s&&d===-1&&!f||!!(s&&t.activity),m=t.activity??`Thinking`;return(0,M.jsxs)(`div`,{className:`assistant-turn`,onClick:o,children:[t.thinking&&t.thinking.trim()?(0,M.jsxs)(`details`,{className:`msg-thinking`+(p?` is-active`:``),children:[(0,M.jsxs)(`summary`,{className:`operator-line`,children:[(0,M.jsx)(N,{name:`lightbulb`,className:`icon-inline`}),(0,M.jsx)(`span`,{className:`thinking-label`,children:p?m:uq(t.thinkingMs)}),(0,M.jsx)(N,{name:`chevron-right`,className:`icon-inline thinking-caret`})]}),(0,M.jsx)(`div`,{className:`msg-thinking-body`,dangerouslySetInnerHTML:MK(t.thinking??``)})]}):p?(0,M.jsxs)(`div`,{className:`operator-line msg-thinking is-active`,children:[(0,M.jsx)(N,{name:`lightbulb`,className:`icon-inline`}),(0,M.jsx)(`span`,{className:`thinking-label`,children:m})]}):null,c.map((e,a)=>{if(e.kind===`ask-pending`)return(0,M.jsx)(rJ,{},a);if(e.kind===`chips`)return(0,M.jsx)(nJ,{chips:e.chips,interactive:!s&&i,onPick:r},a);if(e.kind===`ask`)return(0,M.jsx)(tJ,{spec:e.spec,interactive:u,answers:t.pickerAnswers,onSubmit:(e,r)=>n(t,e,r)},a);if(!e.text.trim())return null;let o=[`msg`,`assistant`,`md`];return s&&a===d&&o.push(`streaming`),t.status===`error`&&o.push(`errbubble`),(0,M.jsx)(`div`,{className:o.join(` `),dangerouslySetInnerHTML:MK(e.text)},a)}),s?null:(0,M.jsx)(oJ,{detail:t.errorDetail}),t.planUpdated?(0,M.jsx)(fq,{}):null,t.interrupted?(0,M.jsxs)(`div`,{className:`operator-line`,children:[(0,M.jsx)(N,{name:`square`,className:`icon-inline`}),(0,M.jsx)(`span`,{children:`Interrupted by your next message`})]}):null]})}function yJ(e){let t=g.useRef(null),n=g.useRef(null),r=g.useRef(0),i=g.useRef(!0),a=g.useRef(0),o=g.useRef(0),[s,c]=g.useState(!1),l=g.useRef(!1),u=g.useCallback(()=>{l.current=!0,c(!0)},[]),d=g.useCallback(()=>{let e=t.current;if(!e)return;let n=Math.max(0,e.scrollHeight-e.clientHeight),r=Math.abs(e.scrollTop-n)>1;e.scrollTop=n,r&&(a.current=typeof performance<`u`?performance.now():Date.now())},[]);e.pinThreadRef.current=()=>{i.current&&d()};let f=g.useCallback(()=>{d();let e=t.current;e&&e.clientHeight>0&&u()},[d,u]);g.useLayoutEffect(()=>{if(!i.current)return;f();let e=requestAnimationFrame(f),t=window.setTimeout(f,250),n=window.setTimeout(u,500);return()=>{cancelAnimationFrame(e),clearTimeout(t),clearTimeout(n)}},[e.messages,f,u]),g.useEffect(()=>{let e=t.current;if(!e)return;o.current=e.clientHeight;let a=new ResizeObserver(()=>{o.current=e.clientHeight,i.current?f():e.scrollTop=e.scrollHeight-e.clientHeight-r.current});return a.observe(e),n.current&&a.observe(n.current),()=>a.disconnect()},[f]);let p=()=>{let e=t.current;if(!e||!l.current||(typeof performance<`u`?performance.now():Date.now())-a.current<200)return;let n=e.clientHeight,s=n!==o.current;o.current=n,!s&&(r.current=e.scrollHeight-e.scrollTop-e.clientHeight,i.current=r.current<48)},m=xJ(e.messages),h=SJ(e.messages);return(0,M.jsx)(`div`,{id:`chat-messages`,className:`chat-scroll`,"data-castle-allow-select":``,ref:t,onScroll:p,children:(0,M.jsxs)(`div`,{className:`chat-thread`+(s?` ready`:``),ref:n,children:[e.messages.length===0?(0,M.jsx)(`div`,{id:`chat-empty`,children:`Tell the agent what you want to make.`}):null,e.messages.map(t=>(0,M.jsx)(vJ,{msg:t,interactive:t.id===m,chipsLive:t.id===h,onPickerSubmit:e.onPickerSubmit,onChip:e.onChip},t.id))]})})}function bJ(e){return e.role!==`assistant`||e.pickerAnswers?!1:rq(e.text).some(e=>e.kind===`ask`)}function xJ(e){for(let t=e.length-1;t>=0;t--)if(bJ(e[t]))return e[t].id;return null}function SJ(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(n.role===`user`)return null;if(n.role===`assistant`){if(n.status===`streaming`)return null;if(rq(n.text).some(e=>e.kind===`chips`))return n.id}}return null}function CJ(e,t){for(let n of Array.from(e)){if(!n.type.startsWith(`image/`))continue;let e=new FileReader;e.onload=()=>{typeof e.result==`string`&&t({name:n.name,dataUrl:e.result})},e.readAsDataURL(n)}}function wJ(e){return e.pending.length===0?null:(0,M.jsx)(`div`,{id:`chat-pending`,children:e.pending.map((t,n)=>(0,M.jsx)(`img`,{className:`operator-thumb`,src:t.dataUrl,alt:t.name,title:`remove`,onClick:()=>e.onRemove(n)},`${t.name}-${n}`))})}function TJ(e){return e.queued.length===0?null:(0,M.jsx)(`div`,{className:`chat-queue`,onMouseDown:e=>e.preventDefault(),children:e.queued.map((t,n)=>(0,M.jsxs)(`div`,{className:`queue-row`,children:[(0,M.jsx)(`span`,{className:`queue-snippet`,children:t.length>60?`${t.slice(0,60)}\u2026`:t}),(0,M.jsx)(`button`,{className:`button`,type:`button`,tabIndex:-1,title:`Send now — interrupts the turn`,onClick:e.onInterrupt,children:(0,M.jsx)(`span`,{children:`Send now`})}),(0,M.jsx)(`button`,{className:`button button-icon button-quiet`,type:`button`,tabIndex:-1,title:`Remove from queue`,"aria-label":`Remove`,onClick:()=>e.onCancelQueued(n),children:(0,M.jsx)(N,{name:`times`})})]},n))})}function EJ(e,t){if(!e)return;e.style.height=`auto`;let n=Number.parseFloat(window.getComputedStyle(e).lineHeight),r=Number.isFinite(n)?Math.ceil(n):21,i=t.length===0?r:Math.min(e.scrollHeight,120);e.style.height=i>0?`${i}px`:``}function DJ(e){let{running:t,queued:n}=e,[r,i]=g.useState(``),[a,o]=g.useState(!1),[s,c]=g.useState(!1),l=g.useRef(null),[u,d]=g.useState([]),[f,p]=g.useState(!1);g.useEffect(()=>{t||p(!1)},[t]);let m=g.useRef(null),h=g.useRef(null),_=VK({inputRef:m,anchorRef:h,setValue:i});g.useLayoutEffect(()=>{EJ(m.current,r),e.pinThreadRef.current()},[r,u.length,n.length,e.pinThreadRef]);let v=e=>{d(t=>t.length>=6?t:[...t,e])},y=()=>{let t=r.trim();!t&&u.length===0||(e.onSend(t,u,_.attachedIn(t)),i(``),d([]),_.clear())},b=r.trim().length>0||u.length>0,x=e=>{let t=e.target;h.current?.contains(t)&&(t instanceof Element&&t.closest(`.composer-settings .button, #chat-send`)||m.current?.focus())},S=t&&!b;return(0,M.jsxs)(`div`,{className:`operator-composer`,children:[(0,M.jsx)(wJ,{pending:u,onRemove:e=>d(t=>t.filter((t,n)=>n!==e))}),_.overlay,(0,M.jsxs)(`div`,{className:`chat-input`,ref:h,children:[(0,M.jsx)(TJ,{queued:n,onInterrupt:e.onInterrupt,onCancelQueued:e.onCancelQueued}),(0,M.jsxs)(`div`,{className:`ta`,onClick:x,children:[(0,M.jsx)(`textarea`,{id:`chat-input`,className:`ta-text`,ref:m,rows:1,placeholder:t?`Queue a message…`:`Message the operator`,value:r,onChange:e=>{i(e.target.value),_.sync()},onSelect:_.sync,onPaste:e=>{let t=e.clipboardData?.files;t&&t.length>0&&(e.preventDefault(),CJ(t,v))},onKeyDown:e=>{_.handleKeyDown(e)||e.key===`Enter`&&!e.shiftKey&&!e.metaKey&&!e.altKey&&(e.preventDefault(),y())}}),(0,M.jsxs)(`div`,{className:`ta-bottom`,onMouseDown:e=>e.preventDefault(),children:[(0,M.jsxs)(`div`,{className:`composer-settings`,children:[(0,M.jsxs)(`button`,{ref:l,className:[`button`,`button-quiet`,zq(e.usage)].filter(Boolean).join(` `),type:`button`,tabIndex:-1,title:`Agent & model settings`,"aria-label":`Agent & model settings`,"aria-pressed":a,onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onClick:()=>{a||e.onRefreshUsage(),o(e=>!e)},children:[(0,M.jsx)(`span`,{children:Cq(e.settings)}),_q]}),a?(0,M.jsx)(eJ,{settings:e.settings,warnings:e.settingsWarnings,usage:e.usage,accounts:e.accounts,triggerRef:l,onSetSetting:e.onSetSetting,onOpenKeys:()=>c(!0),onRefreshUsage:e.onRefreshUsage,onClose:()=>o(!1)}):null,s?(0,M.jsx)($q,{accounts:e.accounts,onSave:e.onSetCredential,onRemove:e.onClearCredential,onStartLogin:e.onStartLogin,onSubmitCode:e.onSubmitLoginCode,onCancelLogin:e.onCancelLogin,onLogout:e.onLogout,onClose:()=>c(!1)}):null]}),(0,M.jsx)(`button`,{id:`chat-send`,className:`button button-icon composer-action`,type:`button`,tabIndex:-1,title:S?f?`Stopping…`:`Stop`:`Send`,"aria-label":S?f?`Stopping`:`Stop`:`Send`,disabled:!S&&!b||S&&f,onClick:()=>{S?(p(!0),e.onInterrupt()):y()},children:S?gq:hq})]})]})]})]})}function OJ(e){let{agent:t,mobile:n,active:r}=e,{messages:i,tasks:a,feeds:o,settings:s,running:c,queued:l}=t,u=KK(n),[d,f]=g.useState(null),p=g.useRef(()=>{}),m=qK(d),h=e=>{u.openView(e.id)};Qn(()=>!r||u.view===`home`?!1:(u.goHome(),!0));let _=(e,n,r)=>{t.submitPicker(e.id,n,r)},v=e=>{t.sendUserMessage(e,[],[])},y=u.view!==`home`&&u.view!==`tasks`?a.find(e=>e.id===u.view):void 0;return(0,M.jsxs)(`div`,{id:`chat-host`,ref:f,children:[m?(0,M.jsx)(YK,{view:u.view,openIds:u.openIds,tasks:a,mobile:n,onHome:u.goHome,onSelect:u.openView,onClose:u.closeView,onReorder:u.reorderOpenIds,slot:m}):null,(0,M.jsx)(`div`,{className:`operator-inset`,children:u.view===`home`?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(mJ,{tasks:a,feeds:o,onAck:t.ackTask,onOpenTask:h,onOpenTasks:()=>u.openView(GK)}),pJ(a).length>0||JK(a).length>0?(0,M.jsx)(`div`,{className:`chat-divider`,"aria-hidden":`true`}):null,(0,M.jsx)(yJ,{messages:i,onPickerSubmit:_,onChip:v,pinThreadRef:p})]}):u.view===`tasks`?(0,M.jsx)(_J,{tasks:a,feeds:o,onAck:t.ackTask,onOpenTask:h}):y?(0,M.jsx)(gJ,{task:y,feed:o[y.id]}):(0,M.jsx)(`p`,{className:`task-page-empty`,children:`This task is gone.`})}),(0,M.jsx)(DJ,{pinThreadRef:p,running:c,queued:l,onSend:t.sendUserMessage,onInterrupt:t.interrupt,onCancelQueued:t.cancelQueued,settings:s,settingsWarnings:t.settingsWarnings,usage:t.usage,accounts:t.accounts,onSetSetting:t.setSetting,onRefreshUsage:t.refreshUsage,onSetCredential:t.setCredential,onClearCredential:t.clearCredential,onStartLogin:t.startLogin,onSubmitLoginCode:t.submitLoginCode,onCancelLogin:t.cancelLogin,onLogout:t.logout})]})}function kJ(e,t){if(e===t)return!0;if(!e||!t||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function AJ(e,t){return e.messageId===t.messageId&&kJ(e.taskIds,t.taskIds)}function jJ(e,t,n,r,i){if(!t)return i;let a=n[n.length-1]??``;return e||i.messageId===void 0?{messageId:a,taskIds:r}:i.messageId!==``&&n.length>0&&!n.includes(i.messageId)?{messageId:a,taskIds:i.taskIds}:i.taskIds===void 0?{messageId:i.messageId,taskIds:r}:i}function MJ(e,t){if(t===void 0)return 0;if(t===``)return e.length;let n=e.indexOf(t);return n<0?0:e.length-n-1}function NJ(e,t){if(t===void 0)return 0;let n=new Set(t),r=0;for(let t of e)n.has(t)||(r+=1);return r}function PJ(e,t,n){return MJ(e,n.messageId)+NJ(t,n.taskIds)}var FJ=`castle-operator-seen-v1`,IJ=`castle-operator-seen-v2`;function LJ(){try{let e=localStorage.getItem(IJ);if(e!==null){let t=JSON.parse(e);if(t&&typeof t==`object`){let e=t,n=e.taskIds;return{messageId:typeof e.messageId==`string`?e.messageId:void 0,taskIds:Array.isArray(n)&&n.every(e=>typeof e==`string`)?n:void 0}}}let t=localStorage.getItem(FJ);if(t!==null)return{messageId:t,taskIds:void 0}}catch{}return{messageId:void 0,taskIds:void 0}}function RJ(e,t){try{localStorage.setItem(IJ,JSON.stringify({messageId:e,taskIds:t}))}catch{}}function zJ(e){let t=[];for(let n of e)n.role===`assistant`&&n.status!==`streaming`&&t.push(n.id);return t}function BJ(e){let t=[];for(let n of e)C.includes(n.status)&&!n.acknowledged&&t.push(n.id);return t}function VJ(){let[e,t]=g.useState(()=>document.visibilityState===`visible`);return g.useEffect(()=>{let e=()=>t(document.visibilityState===`visible`);return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[]),e}function HJ(e){let t=e.boundingClientRect;if(t.width<=0||t.height<=0)return!1;let n=e.intersectionRect;return n.width>=t.width-1&&n.height>=t.height-1}var UJ=Array.from({length:21},(e,t)=>t/20);function WJ(e){let[t,n]=g.useState(!1);return g.useEffect(()=>{if(!e){n(!1);return}let t=new IntersectionObserver(([e])=>n(e?HJ(e):!1),{threshold:UJ});return t.observe(e),()=>t.disconnect()},[e]),t}function GJ(e,t,n){let r=VJ(),i=WJ(n),a=r&&(t||i),[o,s]=g.useState(LJ),c=zJ(e.messages),l=BJ(e.tasks),u=jJ(a,e.messages.length>0,c,l,o);return g.useEffect(()=>{AJ(u,o)||(u.messageId!==void 0&&u.taskIds!==void 0&&RJ(u.messageId,u.taskIds),s(u))},[a,e.messages,e.tasks,o]),PJ(c,l,u)}var KJ=`castle-flow-layout:`,qJ=1;function JJ(e,t){if(e)try{let n={version:qJ,state:t};localStorage.setItem(KJ+e,JSON.stringify(n))}catch{}}function YJ(e,t,n){if(!e)return null;try{let r=localStorage.getItem(KJ+e);if(!r)return null;let i=JSON.parse(r);if(i.version!==qJ||!i.state||!Array.isArray(i.state.groups))return null;let a=Jt(nY(rY(i.state,t)),n);return a.groups.length===0?null:pt(a)}catch{return null}}var XJ=new Set([`operator`,`files`,`params`]);function ZJ(e){let t=e.codeView;if(t===void 0)return e;let n={...e};return delete n.codeView,t&&(n.view=fe),n}function QJ(e,t){let n=t.some(t=>t.id===e.activeTabId)?e.activeTabId:t[0].id;return{...e,tabs:t,activeTabId:n}}var $J=`params`;function eY(e){return e.kind===`editor`&&e.view===$J}function tY(e,t){if(e.kind!==`params`||e.path===void 0||t.has(e.path))return e;let n={...e};return delete n.path,n}function nY(e){if(!e.groups.some(e=>e.tabs.some(eY)))return e;let t,n=!1,r=0,i=[];for(let a of e.groups){let e=[];for(let o of a.tabs){if(!eY(o)){e.push(o);continue}let a={...o};if(delete a.view,n){e.push(a);continue}n=!0,t=o.path,r=i.length+1}if(e.length===0){r=Math.min(r,i.length);continue}i.push(QJ(a,e))}let a=ut(`params`,t);return i.splice(Math.min(r,i.length),0,ft([a],it(a))),{...e,groups:i}}function rY(e,t){let n=new Set,r=[];for(let i of e.groups){let e=i.tabs.filter(e=>!(e.kind===`editor`&&e.path!==void 0&&!t.has(e.path))).map(ZJ).map(e=>tY(e,t));if(e.length===0)continue;let a=e.find(e=>e.kind!==`editor`);if(a&&XJ.has(a.kind)){if(n.has(a.kind))continue;n.add(a.kind)}r.push(QJ(i,e))}return{groups:r,activeGroupId:r.some(t=>t.id===e.activeGroupId)?e.activeGroupId:r[0]?.id??null,pinnedGroupId:r.some(t=>t.id===e.pinnedGroupId)?e.pinnedGroupId:null,maximizedGroupId:null}}var iY=g.createContext(null),aY={groups:[],activeGroupId:null,pinnedGroupId:null,maximizedGroupId:null};function oY(e,t){let n=[];if(e.forEach((e,r)=>{let i=t.get(r);if(!i)return;let a=i.getBoundingClientRect(),o=e.left-a.left,s=e.top-a.top;Math.abs(o)<1&&Math.abs(s)<1||(i.style.transition=`none`,i.style.transform=`translate(${o}px, ${s}px)`,n.push(i))}),n.length!==0){n[0].getBoundingClientRect();for(let e of n){e.style.transition=`transform 180ms ease`,e.style.transform=`translate(0px, 0px)`;let t=()=>{e.style.transition=``,e.style.transform=``,e.removeEventListener(`transitionend`,t)};e.addEventListener(`transitionend`,t)}}}function sY(e){return Array.isArray(e.column)}function cY(e){return Array.isArray(e.tabs)}function lY(e){let t=[],n=e=>{cY(e)?t.push(...e.tabs??[]):t.push(e)};for(let t of e)sY(t)?(t.column??[]).forEach(n):n(t);return t}function uY(e){return e===`files`?`files`:e===`playtest`?`play`:e===`terminal`?`terminal`:e===`editor`?`editor`:e===`params`?`params`:null}var dY=[{type:`files`},{type:`playtest`},{type:`editor`,file:`scenes/main.scene`}];function fY(e,t){let n=e&&e.length>0?lY(e):dY,r=v?null:ut(`operator`),i=r?[ft([r],it(r))]:[],a=new Map,o=null;for(let e of n){let n=uY(e.type);if(!n||n===`editor`&&!e.file)continue;if(n===`editor`&&e.file){let n=t(e.file),r=a.get(n);if(r){r.tabs.push(ut(`editor`,e.file));continue}let s=ut(`editor`,e.file),c=ft([s],it(s));a.set(n,c),i.push(c),o||=c.id;continue}let r=ut(n,e.file);i.push(ft([r],it(r)))}return{groups:i,activeGroupId:o??i[0]?.id??null,pinnedGroupId:null,maximizedGroupId:null}}function pY(){let e=eC(),[t,n]=g.useState(()=>rC());return g.useEffect(()=>{if(e)return;let t=window.matchMedia(`(max-width: 768px)`),r=()=>n(t.matches);return t.addEventListener(`change`,r),()=>t.removeEventListener(`change`,r)},[e]),t}function mY(e){let t=e.target;if(!(t instanceof HTMLIFrameElement)||!t.classList.contains(`deck-frame`))return t;try{let n=t.contentDocument;if(!n)return t;let r=t.getBoundingClientRect();return n.elementFromPoint(e.clientX-r.left,e.clientY-r.top)??t}catch{return t}}function hY(e,t){let n=e,r=!!(n?.ownerDocument&&n.ownerDocument!==t.ownerDocument),i=r?null:t.parentElement;for(;n&&n!==i;){if(n.nodeType===1){let e=getComputedStyle(n).overflowY;if((e===`auto`||e===`scroll`)&&n.scrollHeight>n.clientHeight+1)return!0}if(!r&&n===t)break;n=n.parentElement}return!1}function gY(e,t,n){let r=e,i=t.parentElement;for(;r&&r!==i;){if(r.nodeType===1){let e=getComputedStyle(r),t=e.touchAction;if(t.includes(`pan-y`)&&!t.includes(`pan-x`))return!0;let i=e.overflowX;if(i===`auto`||i===`scroll`){let e=r.scrollWidth-r.clientWidth;if(e>1&&(n>0?r.scrollLeft>1:r.scrollLeft<e-1))return!0}}if(r===t)break;r=r.parentElement}return!1}function _Y(e){g.useEffect(()=>{let t=e.current;if(!t)return;let n=e=>{e.deltaY!==0&&(t.scrollWidth<=t.clientWidth||!e.shiftKey&&hY(mY(e),t)||(t.scrollLeft+=e.deltaX-e.deltaY,e.preventDefault()))};return t.addEventListener(`wheel`,n,{passive:!1}),()=>t.removeEventListener(`wheel`,n)},[e])}function vY(e,t,n){g.useLayoutEffect(()=>{let n=e.current,r=n?.querySelector(`.flow-row`);if(!n||!r)return;let i=()=>{let e=r.lastElementChild,i=e?e.offsetLeft+e.offsetWidth:0,a=t&&i>n.clientWidth?n.clientWidth/2:0;r.style.setProperty(`--flow-overscroll`,`${Math.round(a)}px`)};i();let a=new ResizeObserver(i);return a.observe(n),()=>a.disconnect()},[e,t,n])}function yY(e,t){let n=e.getBoundingClientRect(),r=t.getBoundingClientRect();if(r.left>=n.left-1&&r.right<=n.right+1)return;let i=window.matchMedia(`(prefers-reduced-motion: reduce)`).matches;e.scrollTo({left:e.scrollLeft+(r.left+r.width/2-(n.left+n.width/2)),behavior:i?`auto`:`smooth`})}function bY(e,t){let n=g.useRef(new Map),r=g.useCallback(e=>{let t=n.current.get(e);if(t)return t.obj;let r={visible:!1,active:!1,activeCbs:new Set,visibleCbs:new Set,obj:{id:e,isVisible:()=>r.visible,isActive:()=>r.active,onDidActiveChange:e=>(r.activeCbs.add(e),()=>r.activeCbs.delete(e)),onDidVisibilityChange:e=>(r.visibleCbs.add(e),()=>r.visibleCbs.delete(e))}};return n.current.set(e,r),r.obj},[]);return g.useEffect(()=>{let r=new Set;for(let i of e.groups){let a=t?i.id===e.activeGroupId:!0;for(let t of i.tabs){r.add(t.id);let o=n.current.get(t.id);if(!o)continue;let s=i.activeTabId===t.id,c=a&&s,l=i.id===e.activeGroupId&&s;c!==o.visible&&(o.visible=c,o.visibleCbs.forEach(e=>e(c))),l!==o.active&&(o.active=l,o.activeCbs.forEach(e=>e(l)))}}for(let e of n.current.keys())r.has(e)||n.current.delete(e)}),r}function xY({agent:e}){let[t,n]=g.useState(aY),[r,i]=g.useState(null),[a,o]=g.useState(null),s=g.useRef(null),c=g.useRef(!1),l=pY(),u=g.useRef(l);u.current=l;let d=g.useRef(aY),f=g.useRef(null),[p,m]=g.useState(null);d.current=t;let h=g.useRef(new Map),_=t.groups.find(e=>e.tabs.some(e=>e.kind===`operator`))?.id??null,y=g.useRef(_);y.current=_;let[b,x]=g.useState(null),S=g.useRef(null),C=g.useRef(null),w=g.useRef(null),T=g.useRef({page:0,count:0,ids:[]});_Y(C),vY(C,!l&&!t.maximizedGroupId,t.groups);let ee=bY(t,l);g.useEffect(()=>{let e=!0;Promise.all([be(),ke().catch(()=>[])]).then(([t,r])=>{e&&(s.current=t.deckId,le(t),i(t.kitEditorExtensions),o(r),n(YJ(t.deckId,new Set(r),me)??fY(t.initialPanels,me)),c.current=!0)},()=>{e&&(i([]),o([]),n(fY(null,me)),c.current=!0)});let t=Sb(t=>{t.changes.some(e=>e.event!==`change`)&&ke().then(t=>{e&&o(t)}).catch(()=>{}),t.changes.some(e=>e.path===`castle.json`||e.path.startsWith(`imports/`))&&be().then(t=>{e&&(le(t),i(t.kitEditorExtensions))},()=>{})});return()=>{e=!1,t()}},[]),g.useEffect(()=>{if(!c.current)return;let e=window.setTimeout(()=>JJ(s.current,t),400);return()=>window.clearTimeout(e)},[t]);let E=g.useMemo(()=>{let e=t.groups.find(e=>e.id===t.activeGroupId),n=e?.tabs.find(t=>t.id===e.activeTabId)??e?.tabs[0];return n&&n.kind===`editor`?n.path??null:null},[t.groups,t.activeGroupId]),te=g.useRef(null),D=g.useCallback(e=>{if(u.current||d.current.maximizedGroupId)return;let t=C.current,n=h.current.get(e);t&&n&&yY(t,n)},[]),O=g.useCallback((e,t)=>{e&&(te.current=e,t||requestAnimationFrame(()=>{te.current===e&&(te.current=null,D(e))}))},[D]);g.useLayoutEffect(()=>{let e=te.current;e&&(te.current=null,D(e))},[t.groups,t.activeGroupId,t.maximizedGroupId,D]);let ne=g.useCallback(e=>{let t=d.current,r=e(t);r!==t&&n(()=>r),O(r.activeGroupId,r!==t)},[O]),k=g.useCallback((e,t,r,i)=>{let a=d.current,o=i?.line===void 0&&i?.field===void 0;i&&!(o&>(a,e))&&hx(e,i);let c=u.current?1:1/0,l=t?zt(a,t,e,me,c,r):Rt(a,e,me,c,r);if(l===a)return;let f=nt(l);for(let e of nt(a))f.has(e)||rn(e);cr(s.current,e),n(()=>l),O(l.activeGroupId,!0)},[O]),A=g.useMemo(()=>({openFile:(e,t,n)=>k(e,void 0,t,n),openPlaytest:()=>ne(e=>Ht(e,`play`)),openParams:(e,t)=>{e&&t?.field&&hx(e,{field:t.field}),ne(t=>Kt(t,e))},setParamsScope:e=>n(t=>Gt(t,e)),mentionInChat:e=>{v||(FW(e),ne(e=>Ht(e,`operator`)))},closeEditor:e=>n(t=>{let n=gt(t,e);return n?Nt(t,n.group.id,n.tab.id):t}),activeEditorPath:E,kitEditorExts:r,terminalTheme:`dark`}),[r,E,k,ne]);ux(A);let re=g.useCallback((e,t)=>{let r=d.current,i=r.maximizedGroupId?Qt({...r,maximizedGroupId:null},e):kt(r,e);i!==r&&n(()=>i),t?.reveal&&O(e,i!==r)},[O]),ie=g.useCallback(e=>{let t=ht(d.current,e);if(t)for(let e of t.tabs)e.kind===`editor`&&e.path&&rn(e.path);n(t=>qt(t,e))},[]),ae=g.useCallback((e,t)=>{let r=ht(d.current,e)?.tabs.find(e=>e.id===t);r?.kind===`editor`&&r.path&&rn(r.path),n(n=>Nt(n,e,t))},[]),oe=g.useCallback((e,t)=>n(n=>At(n,e,t)),[]),se=g.useCallback((e,t,r)=>{n(n=>Xt(n,e,t,r))},[]),[j,ce]=g.useState(null),ue=g.useCallback(e=>ce(e),[]),de=g.useCallback(()=>ce(null),[]),fe=g.useCallback((e,t)=>k(t,e),[k]),pe=g.useCallback((e,t,r)=>{n(n=>It(n,e,t,r))},[]),he=g.useCallback(e=>n(t=>Zt(t,e)),[]),ge=g.useCallback(e=>{let t=d.current.maximizedGroupId===e;n(t=>Qt(t,e)),t&&O(e,!0)},[O]),_e=g.useCallback((e,t,r)=>{n(n=>en($t(n,e,t),e,r))},[]);g.useEffect(()=>{if(!l)return;let e=C.current,t=w.current;if(!e||!t)return;let r=0,i=0,a=0,o=1,s=!1,c=!1,u=null,d=e=>t.style.setProperty(`--flow-drag`,`${e}px`),f=t=>{t.touches.length===1&&(r=t.touches[0].clientX,i=t.touches[0].clientY,a=t.timeStamp,u=t.target,o=e.clientWidth||1,s=!1,c=!1)},p=n=>{if(n.touches.length!==1)return;let a=n.touches[0].clientX-r,o=n.touches[0].clientY-i;if(!s){if(Math.abs(a)<8&&Math.abs(o)<8)return;s=!0,c=Math.abs(a)>Math.abs(o)&&!gY(u,e,a),c&&t.classList.add(`flow-dragging`)}if(!c)return;n.preventDefault();let{page:l,count:f}=T.current;d(l===0&&a>0||l===f-1&&a<0?a*.3:a)},m=e=>{if(!c){t.classList.remove(`flow-dragging`);return}c=!1,t.classList.remove(`flow-dragging`);let i=e.changedTouches[0],s=i?i.clientX-r:0,l=e.timeStamp-a,{page:u,count:f,ids:p}=T.current,m=Math.abs(s)>50&&l<250,h=Math.abs(s)>o*.25,g=u;s<0&&(m||h)?g=Math.min(f-1,u+1):s>0&&(m||h)&&(g=Math.max(0,u-1));let _=p[g];g!==u&&_?n(e=>kt(e,_)):d(0)};return e.addEventListener(`touchstart`,f,{passive:!0}),e.addEventListener(`touchmove`,p,{passive:!1}),e.addEventListener(`touchend`,m,{passive:!0}),e.addEventListener(`touchcancel`,m,{passive:!0}),()=>{e.removeEventListener(`touchstart`,f),e.removeEventListener(`touchmove`,p),e.removeEventListener(`touchend`,m),e.removeEventListener(`touchcancel`,m)}},[l]);let ve=g.useCallback((e,t)=>{t?h.current.set(e,t):h.current.delete(e),e===y.current&&x(t)},[]);g.useLayoutEffect(()=>{x(_?h.current.get(_)??null:null)},[_]);let ye=GJ(e,(()=>{let e=t.groups.find(e=>e.id===t.activeGroupId);return(e?.tabs.find(t=>t.id===e.activeTabId)??e?.tabs[0])?.kind===`operator`})(),b),[xe,Se]=g.useState(null),Ce=g.useRef(null),we=g.useRef(!1);g.useLayoutEffect(()=>{let e=Ce.current;e&&(Ce.current=null,oY(e,h.current))});let Te=g.useCallback((e,t)=>{let r=d.current;if(u.current){let n=Yt(r,e,t),i=r.groups.findIndex(e=>e.id===r.activeGroupId);n.groups.findIndex(e=>e.id===n.activeGroupId)!==i&&(we.current=!0)}else{let e=new Map;for(let t of r.groups){let n=h.current.get(t.id)?.getBoundingClientRect();n&&e.set(t.id,n)}Ce.current=e}n(n=>Yt(n,e,t))},[]);g.useEffect(()=>()=>{S.current?.()},[]);let Ee=g.useCallback((e,r)=>{if(l||e.button!==0||e.target.closest(`.panel-tab, button`)||!h.current.get(r))return;let i=e.currentTarget,a=e.pointerId;try{i.setPointerCapture(a)}catch{}let o=e.clientX,s=t.groups.findIndex(e=>e.id===r),c=e=>{let n=t.groups.filter(e=>e.id!==r).map(e=>{let t=h.current.get(e.id)?.getBoundingClientRect();return{left:t?.left??1/0,right:t?.right??1/0,center:t?t.left+t.width/2:1/0}}),i=0;for(;i<n.length&&n[i].center<e;)i+=1;if(i===s)return{target:i,x:null};let a=i<n.length?n[i].left-6:n.length?n[n.length-1].right+6:e;return{target:i,x:a}},u=!1,d=e.clientX,f=0,p=()=>{let e=C.current;if(e&&e.scrollWidth>e.clientWidth+1){let t=e.getBoundingClientRect(),n=0;d<t.left+64?n=-(1-Math.max(0,d-t.left)/64):d>t.right-64&&(n=1-Math.max(0,t.right-d)/64),n!==0&&(e.scrollLeft+=n*24,Se({id:r,x:c(d).x}))}f=requestAnimationFrame(p)},m=e=>{!u&&Math.abs(e.clientX-o)<5||(u||(document.body.classList.add(`flow-reordering`),u=!0,f=requestAnimationFrame(p)),d=e.clientX,Se({id:r,x:c(e.clientX).x}))},g=!1,_=()=>{if(!g){g=!0,i.removeEventListener(`pointermove`,m),i.removeEventListener(`pointerup`,v),i.removeEventListener(`pointercancel`,y),i.removeEventListener(`lostpointercapture`,y);try{i.hasPointerCapture(a)&&i.releasePointerCapture(a)}catch{}f&&cancelAnimationFrame(f),document.body.classList.remove(`flow-reordering`),S.current=null}},v=e=>{let i=u;if(_(),i){let{target:i}=c(e.clientX);if(i!==s){let e=new Map;for(let n of t.groups){let t=h.current.get(n.id)?.getBoundingClientRect();t&&e.set(n.id,t)}Ce.current=e,n(e=>Yt(e,r,i))}}Se(null)},y=()=>{_(),Se(null)};S.current=y,i.addEventListener(`pointermove`,m),i.addEventListener(`pointerup`,v),i.addEventListener(`pointercancel`,y),i.addEventListener(`lostpointercapture`,y)},[l,t.groups]),[De,Oe]=g.useState(null),Ae=g.useCallback(e=>Oe(t=>t?null:{anchor:e}),[]),je=g.useCallback(()=>{let e=w.current?.querySelector(`.flow-tabs-add`);Oe({anchor:e?.getBoundingClientRect()??new DOMRect(window.innerWidth/2,48)})},[]);g.useEffect(()=>{let e=(e,t)=>(t&&t!==window?[...document.querySelectorAll(`iframe.deck-frame`)].find(e=>e.contentWindow===t):e)?.closest?.(`.flow-group`)?.getAttribute(`data-group-id`)??null;return Cn(`pointermove`,t=>{let n=e(t.target,t.view);f.current=n,!u.current&&m(e=>e===n?e:n)},{passive:!0})},[]);let Me=g.useMemo(()=>dn({getState:()=>d.current,setState:n,spawn:ne,focusGroup:e=>re(e,{reveal:!0}),closeGroup:ie,closeTab:ae,openPath:e=>k(e),openNewGroupPicker:je,getHoveredGroupId:()=>f.current,toggleMaximize:ge}),[ne,re,ie,ae,k,je,ge]),Ne=En(Me),Pe=t.groups.some(e=>e.id===t.activeGroupId)?t.activeGroupId:t.groups[0]?.id??null,Fe=l?null:t.maximizedGroupId,Ie=Math.max(0,t.groups.findIndex(e=>e.id===Pe));T.current={page:Ie,count:t.groups.length,ids:t.groups.map(e=>e.id)},g.useLayoutEffect(()=>{let e=w.current;if(!e)return;let t=we.current;t&&e.classList.add(`flow-dragging`),e.style.setProperty(`--flow-page`,String(Ie)),e.style.setProperty(`--flow-drag`,`0px`),t&&(we.current=!1,e.offsetHeight,requestAnimationFrame(()=>e.classList.remove(`flow-dragging`)))},[Ie,l]),Jn(w),Qn(()=>j?(ce(null),!0):De?(Oe(null),!0):!1,1);let Le=j?ht(t,j):null,Re=Le?.tabs.find(e=>e.id===Le.activeTabId)??Le?.tabs[0],ze=Re&&Re.kind===`editor`?Re.path??``:``;return(0,M.jsx)(cx,{value:A,children:(0,M.jsx)(iY.Provider,{value:e,children:(0,M.jsxs)(`div`,{ref:w,className:`flow-root${l?` is-mobile`:``}${Fe?` is-maximized`:``}`,children:[(0,M.jsx)(SY,{state:t,activeId:Pe,operatorBadge:ye,onFocusGroup:re,onReorderGroup:Te,onNewGroup:Ae}),(0,M.jsx)(`div`,{className:`flow-scroller`,ref:C,children:(0,M.jsx)(`div`,{className:`flow-field`,children:(0,M.jsx)(`div`,{className:`flow-row`,children:t.groups.map(e=>(0,M.jsx)(wY,{group:e,active:e.id===Pe,mobile:l,pinned:e.id===t.pinnedGroupId&&!Fe,maximized:e.id===Fe,hidden:Fe!==null&&e.id!==Fe,dragging:xe?.id===e.id,hovered:e.id===p,getLifecycle:ee,registerEl:ve,onFocusGroup:re,onClose:ie,onActivateTab:oe,onCloseTab:ae,onReorderTab:se,onOpenMobileSwitch:ue,onOpenInGroup:fe,onSetTabView:pe,onTogglePin:he,onToggleMaximize:ge,onStartDrag:Ee,onResize:_e},e.id))})})}),xe&&xe.x!==null&&(()=>{let e=C.current?.getBoundingClientRect(),t=h.current.get(xe.id)?.getBoundingClientRect();if(!e||!t)return null;let n=Math.max(t.top,e.top+12+36),r=Math.min(t.bottom,e.bottom)-n;return r<=0?null:(0,M.jsx)(`div`,{className:`flow-drop-indicator`,style:{left:xe.x,top:n,height:r}})})(),De&&(0,M.jsx)(PY,{anchor:De.anchor,files:a??[],onOpenFile:e=>k(e),onSpawnPanel:e=>ne(t=>Ht(t,e)),onSpawnClass:e=>ne(t=>Bt(t,e,me)),onClose:()=>Oe(null)}),j&&(0,M.jsx)(XS,{groupId:j,groupClass:tt(Le,me),currentFile:ze,files:a,recent:ur(s.current),view:Re?.view,onSetView:e=>{j&&Re&&pe(j,Re.id,e)},onOpen:(e,t)=>k(e,t),onClose:de}),(0,M.jsx)(rr,{openFile:e=>k(e),openPanel:e=>ne(t=>Ht(t,e===`playtest`?`play`:e)),panels:MY,getCommands:Me}),Ne?(0,M.jsxs)(`div`,{className:`chord-hint`,role:`status`,children:[(0,M.jsx)(`kbd`,{children:Ne}),(0,M.jsx)(`span`,{children:`waiting for the next key…`})]}):null]})})})}function SY(e){let{state:t,activeId:n,operatorBadge:r,onFocusGroup:i,onReorderGroup:a,onNewGroup:o}=e,s=er(),[c,l]=g.useState(!1),u=s?.title?.trim()||`Untitled deck`;Gn(u,r),Kn(r);let d=s?.visibility===`public`?Tr:s?.visibility===`unlisted`?Cr:wr,f=s?.saving??`idle`,p=s?.saveError??null,m=s?.draftAutosaveState??null,h=m===`starting`||m===`saving`?`Saving draft…`:m===`dirty`?`Unsaved changes`:m===`error`?`Draft save failed`:m===`saved`?`Draft saved`:null,[_,v]=g.useState(null),y=g.useRef(!1);g.useEffect(()=>{_!==null&&(f===`working`&&(y.current=!0),f===`done`&&y.current&&v(`done`),p&&y.current&&v(`failed`))},[f,p,_]);let b=g.useCallback(()=>{y.current=!1,v(`pushing`),Un(`push`)},[]);return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`div`,{className:`flow-topbar`,children:[(0,M.jsxs)(`div`,{className:`flow-topbar-leading`,children:[eC()?null:(0,M.jsxs)(`div`,{className:`flow-castle-wrap`,children:[(0,M.jsx)(`button`,{type:`button`,className:`dock-control dock-control-icon dock-control-mark`,title:`Menu`,"aria-haspopup":`menu`,"aria-expanded":c,onClick:()=>l(e=>!e),children:jr}),c&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`flow-menu-backdrop`,onClick:()=>l(!1)}),(0,M.jsxs)(`div`,{className:`menu flow-castle-menu`,role:`menu`,children:[(0,M.jsxs)(`button`,{type:`button`,role:`menuitem`,className:`menu-item`,onClick:()=>{l(!1),Un(`back-to-decks`)},children:[(0,M.jsx)(`span`,{className:`menu-icon`,children:Dr}),(0,M.jsx)(`span`,{className:`menu-item-label`,children:`Back to decks`})]}),(0,M.jsxs)(`button`,{type:`button`,role:`menuitem`,className:`menu-item`,onClick:()=>{l(!1),Un(`new-deck`)},children:[(0,M.jsx)(`span`,{className:`menu-icon`,children:yr}),(0,M.jsx)(`span`,{className:`menu-item-label`,children:`New deck`})]}),(0,M.jsx)(`div`,{className:`menu-separator flow-menu-narrow`}),(0,M.jsx)(`button`,{type:`button`,role:`menuitem`,className:`menu-item flow-menu-narrow`,onClick:()=>{l(!1),Un(`open-settings`)},children:(0,M.jsx)(`span`,{className:`menu-item-label`,children:`Deck settings`})}),(0,M.jsx)(`button`,{type:`button`,role:`menuitem`,className:`menu-item flow-menu-narrow`,disabled:f===`working`,onClick:()=>{l(!1),b()},children:(0,M.jsx)(`span`,{className:`menu-item-label`,children:f===`working`?`Pushing…`:p?`Push failed — retry`:f===`done`?`Pushed ✓`:`Push to Castle`})})]})]})]}),(0,M.jsxs)(`button`,{type:`button`,className:`dock-control dock-control-quiet flow-deck-identity`,title:`Deck settings`,onClick:()=>Un(`open-settings`),children:[(0,M.jsx)(`span`,{className:`flow-deck-vis`,children:d}),(0,M.jsx)(`span`,{className:`flow-deck-name`,children:u}),(0,M.jsx)(`span`,{className:`flow-deck-caret`,children:Or})]}),h?(0,M.jsx)(`span`,{className:`flow-draft-status${m===`error`?` is-error`:``}`,role:`status`,children:h}):null]}),(0,M.jsxs)(`div`,{className:`flow-tabs-wrap`,children:[(0,M.jsx)(ES,{groups:t.groups,activeId:n,operatorBadge:r,onFocusGroup:i,onReorderGroup:a}),(0,M.jsx)(`button`,{type:`button`,className:`button button-icon button-quiet flow-tabs-add flow-picker-trigger`,title:`New group`,"aria-label":`New group`,onClick:e=>o(e.currentTarget.getBoundingClientRect()),children:yr})]}),(0,M.jsx)(`div`,{className:`flow-topbar-trailing`,children:(0,M.jsxs)(`button`,{type:`button`,className:`dock-control flow-preview-btn${p?` flow-preview-btn-failed`:``}`,title:p??`Publish this deck to your Castle account (sandbox edits stay local until pushed)`,disabled:f===`working`,onClick:()=>Un(`push`),children:[Er,(0,M.jsxs)(`span`,{className:`flow-preview-label`,children:[(0,M.jsx)(`span`,{className:`flow-preview-label-sizer`,"aria-hidden":`true`,children:`Push to Castle`}),(0,M.jsx)(`span`,{children:f===`working`?`Pushing…`:p?`Push failed`:f===`done`?`Pushed ✓`:`Push to Castle`})]})]})})]}),_!==null&&(0,M.jsx)(`div`,{className:`flow-push-modal-backdrop`,children:(0,M.jsx)(`div`,{className:`flow-push-modal`,role:`dialog`,"aria-modal":`true`,children:_===`failed`?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`flow-push-check flow-push-check-failed`,children:`!`}),(0,M.jsx)(`div`,{className:`flow-push-title`,children:`Push failed`}),(0,M.jsx)(`div`,{className:`flow-push-sub`,children:p}),(0,M.jsx)(`button`,{type:`button`,className:`flow-push-done`,onClick:()=>v(null),children:`Dismiss`})]}):_===`done`?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`flow-push-check`,children:`✓`}),(0,M.jsx)(`div`,{className:`flow-push-title`,children:`Pushed to Castle`}),s?.shareUrl?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`flow-push-sub`,children:`Your deck is live at`}),(0,M.jsx)(`a`,{className:`flow-push-url`,href:s.shareUrl,target:`_blank`,rel:`noreferrer`,children:s.shareUrl.replace(/^https?:\/\//,``)})]}):(0,M.jsx)(`div`,{className:`flow-push-sub`,children:`Saved to your Castle account.`}),(0,M.jsx)(`button`,{type:`button`,className:`flow-push-done`,onClick:()=>v(null),children:`Done`})]}):(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`flow-push-spinner`}),(0,M.jsx)(`div`,{className:`flow-push-title`,children:`Pushing to Castle…`}),(0,M.jsx)(`div`,{className:`flow-push-sub`,children:`Publishing your latest changes.`})]})})})]})}function CY(e,t){e.currentTarget.blur(),t()}var wY=g.memo(function(e){let{group:t,active:n,mobile:r,pinned:i,maximized:a,hidden:o,dragging:s,hovered:c,getLifecycle:l,registerEl:u}=e,{onFocusGroup:d,onClose:f}=e,p=et(t),m=FY(t,e.onResize),[h,_]=g.useState(()=>p&&t.tabs.every($e)),v=g.useCallback(()=>_(e=>!e),[]),y=r?void 0:a?{flex:`1 1 auto`}:{flex:`0 0 auto`,width:t.w,height:t.h},b=p?null:t.tabs[0],x=(0,M.jsx)(`button`,{type:`button`,className:r?`button button-icon button-icon-large button-quiet`:`button button-icon button-quiet`,title:`Close`,"aria-label":`Close`,onClick:e=>CY(e,()=>f(t.id)),children:br}),S=n=>{n.target.closest(`button, .panel-tab`)||a||e.onStartDrag(n,t.id)},C=n&&!r&&!a,w=b?.kind===`operator`;return(0,M.jsxs)(`div`,{ref:e=>u(t.id,e),"data-group-id":t.id,className:`panel flow-group${C?` is-active`:``}${i?` pinned`:``}${a?` maximized`:``}${o?` hidden`:``}${s?` is-dragging`:``}${c?` is-hover`:``}${p?` is-editor`:``}`,style:y,onMouseDown:()=>d(t.id),children:[p?(0,M.jsx)(xS,{group:t,mobile:r,pinned:i,maximized:a,onStartDrag:e.onStartDrag,onActivateTab:e.onActivateTab,onCloseTab:e.onCloseTab,onCloseGroup:f,onReorderTab:e.onReorderTab,onTogglePin:e.onTogglePin,onToggleMaximize:e.onToggleMaximize,onOpenMobileSwitch:e.onOpenMobileSwitch,onSetTabView:e.onSetTabView,drawerOpen:h,onToggleDrawer:v}):(0,M.jsxs)(`div`,{className:`${w?`panel-tabs-header`:`panel-header`} flow-tabstrip${r?` flow-tabstrip-mobile`:``}`,onPointerDown:S,children:[w?(0,M.jsx)(`div`,{className:`operator-chrome`,"data-operator-chrome":!0}):r?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`flow-mobile-strip-left`}),(0,M.jsxs)(`div`,{className:`panel-mobile-current`,children:[(0,M.jsx)(`span`,{className:`flow-tab-icon`,children:b&&vr(b.kind,b.path)}),(0,M.jsx)(`span`,{className:`panel-mobile-current-label`,children:b?.label})]})]}):(0,M.jsxs)(`div`,{className:`panel-title`,children:[(0,M.jsx)(`span`,{className:`flow-tab-icon`,children:b&&vr(b.kind,b.path)}),(0,M.jsx)(`span`,{children:b?.label})]}),(0,M.jsxs)(`div`,{className:`panel-header-actions${r?` flow-mobile-strip-right`:``}`,children:[!r&&!a&&(0,M.jsx)(`button`,{type:`button`,className:`button button-icon button-quiet`,title:i?`Unpin`:`Pin to left`,"aria-label":i?`Unpin`:`Pin to left`,"aria-pressed":i,onClick:n=>CY(n,()=>e.onTogglePin(t.id)),children:Sr}),!r&&(0,M.jsx)(`button`,{type:`button`,className:`button button-icon button-quiet`,title:a?`Restore`:`Maximize`,"aria-label":a?`Restore`:`Maximize`,"aria-pressed":a,onClick:n=>CY(n,()=>e.onToggleMaximize(t.id)),children:a?Ar:kr}),x]})]}),(0,M.jsx)(`div`,{className:`flow-panel-body`,children:t.tabs.map(i=>(0,M.jsx)(`div`,{className:`flow-tab-body${i.id===t.activeTabId?``:` inactive`}`,children:(0,M.jsx)(TY,{tab:i,groupId:t.id,lifecycle:l(i.id),onOpenInGroup:e.onOpenInGroup,onSetTabView:e.onSetTabView,drawerOpen:h&&!r,mobile:r,active:n})},i.id))}),!r&&!a&&(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`div`,{className:`flow-resize-e`,onPointerDown:m(`x`),title:`Drag to resize width`}),(0,M.jsx)(`div`,{className:`flow-resize-s`,onPointerDown:m(`y`),title:`Drag to resize height`}),(0,M.jsx)(`div`,{className:`flow-resize-se`,onPointerDown:m(`xy`),title:`Drag to resize`})]})]})}),TY=g.memo(function(e){let{tab:t,groupId:n,lifecycle:r,onOpenInGroup:i,onSetTabView:a,drawerOpen:o,mobile:s,active:c}=e;if(t.kind===`editor`&&$e(t))return(0,M.jsxs)(`div`,{className:`flow-empty-editor`,children:[o?(0,M.jsx)(wU,{currentFile:``,filterClass:t.classHint,onOpen:e=>i(n,e)}):null,(0,M.jsx)(`div`,{className:`flow-empty-editor-msg`,children:`Open a file`})]});switch(t.kind){case`editor`:return(0,M.jsx)(mU,{file:t.path,editorClass:t.view,lifecycle:r,hideContextBar:!0,drawerOpen:o,drawer:(0,M.jsx)(wU,{currentFile:t.path??``,filterClass:t.path?me(t.path):void 0,onOpen:e=>i(n,e),view:t.view,onSetView:e=>a(n,t.id,e)})});case`play`:return(0,M.jsx)(SU,{lifecycle:r});case`terminal`:return(0,M.jsx)(CU,{lifecycle:r});case`files`:return(0,M.jsx)(EW,{lifecycle:r});case`params`:return(0,M.jsx)(cS,{scope:t.path,lifecycle:r});case`operator`:return(0,M.jsx)(EY,{mobile:s,active:c});default:return(0,M.jsx)(DY,{tab:t})}});function EY(e){let t=g.useContext(iY);return t?(0,M.jsx)(`div`,{className:`shell-root docked flow-operator-host`,style:{"--operator-col":`100%`},children:(0,M.jsx)(OJ,{agent:t,mobile:e.mobile,active:e.active})}):(0,M.jsx)(`div`,{className:`flow-placeholder`,children:`operator unavailable`})}function DY(e){let{tab:t}=e;return(0,M.jsxs)(`div`,{className:`flow-placeholder kind-${t.kind}`,children:[(0,M.jsx)(`div`,{className:`flow-placeholder-icon`,children:vr(t.kind,t.path)}),(0,M.jsx)(`div`,{className:`flow-placeholder-label`,children:t.label}),(0,M.jsx)(`div`,{className:`flow-placeholder-kind`,children:t.path??t.kind})]})}function OY(e,t){g.useEffect(()=>{let n=n=>{n.target.closest(e)||t()},r=window.setTimeout(()=>document.addEventListener(`mousedown`,n),0);return()=>{window.clearTimeout(r),document.removeEventListener(`mousedown`,n)}},[e,t])}function kY(e,t){return Math.max(8,Math.min(e,window.innerWidth-t-8))}var AY=300,jY=[...v?[]:[{kind:`operator`,label:`Operator`}],{kind:`play`,label:`Play`},...v?[]:[{kind:`terminal`,label:`Terminal`}],{kind:`files`,label:`Files`},{kind:`params`,label:`Parameters`}],MY=jY.map(({kind:e,label:t})=>({kind:e===`play`?`playtest`:e,label:t}));function NY(e,t){let n=t.trim().toLowerCase(),r=jY.filter(e=>e.label.toLowerCase().includes(n)).map(e=>({kind:`panel`,panel:e.kind,label:e.label})),i=new Set;for(let t of e)i.add(me(t));let a=[...i].map(e=>{let t=he(e);return{kind:`class`,classId:e,label:t.label,icon:t.icon}}).filter(e=>e.label.toLowerCase().includes(n)).sort((e,t)=>e.label.localeCompare(t.label)),o=e.filter(e=>e.toLowerCase().includes(n)).slice(0,40).map(e=>({kind:`file`,path:e}));return[...r,...a,...o]}function PY(e){let{anchor:t,files:n,onOpenFile:r,onSpawnPanel:i,onSpawnClass:a,onClose:o}=e,[s,c]=g.useState(``),[l,u]=g.useState(0);OY(`.flow-picker, .flow-picker-trigger`,o);let d=NY(n,s),f=Math.min(l,Math.max(0,d.length-1)),p=e=>{e.kind===`panel`?i(e.panel):e.kind===`class`?a(e.classId):r(e.path),o()};return(0,On.createPortal)((0,M.jsxs)(`div`,{className:`menu flow-picker`,style:{top:t.bottom+4,left:kY(t.left,AY),width:AY},onMouseDown:e=>e.stopPropagation(),children:[(0,M.jsx)(`input`,{className:`flow-picker-input`,autoFocus:!0,placeholder:`Open a file or panel…`,value:s,onChange:e=>{c(e.target.value),u(0)},onKeyDown:e=>{e.key===`Escape`?o():e.key===`ArrowDown`?(e.preventDefault(),u(e=>Math.min(e+1,d.length-1))):e.key===`ArrowUp`?(e.preventDefault(),u(e=>Math.max(e-1,0))):e.key===`Enter`&&d[f]&&p(d[f])}}),(0,M.jsxs)(`div`,{className:`flow-picker-list`,children:[d.length===0&&(0,M.jsx)(`div`,{className:`flow-picker-empty`,children:`No matches`}),d.map((e,t)=>(0,M.jsxs)(`button`,{type:`button`,className:`menu-item${t===f?` is-hover`:``}`,onMouseEnter:()=>u(t),onClick:()=>p(e),children:[(0,M.jsx)(`span`,{className:`menu-icon`,children:e.kind===`panel`?vr(e.panel):e.kind===`class`?hr(e.icon):vr(`editor`,e.path)}),(0,M.jsx)(`span`,{className:`menu-item-label`,children:e.kind===`panel`||e.kind===`class`?e.label:e.path})]},e.kind===`panel`?`p:${e.panel}`:e.kind===`class`?`c:${e.classId}`:`f:${e.path}`))]})]}),document.body)}function FY(e,t){return g.useCallback(n=>r=>{r.preventDefault(),r.stopPropagation();let i=r.clientX,a=r.clientY,o=e.w,s=e.h,c=r.currentTarget;c.setPointerCapture(r.pointerId);let l=!1,u=r=>{let c=r.clientX-i,u=r.clientY-a;if(!l&&Math.abs(c)<5&&Math.abs(u)<5)return;l=!0;let d=n===`y`?o:Math.max(200,o+c),f=n===`x`?s:Math.max(160,s+u);t(e.id,d,f)},d=()=>{c.removeEventListener(`pointermove`,u),c.removeEventListener(`pointerup`,d)};c.addEventListener(`pointermove`,u),c.addEventListener(`pointerup`,d)},[e.id,e.w,e.h,t])}function IY(){let e=oe(),t=g.useRef(0);return $n(()=>{let n=Date.now();n-t.current<1e3||(t.current=n,e.refreshUsage())}),(0,M.jsx)(xY,{agent:e})}var LY=document.getElementById(`root`);if(!LY)throw Error(`Missing #root`);FU(),SN(),ex(),(0,_.createRoot)(LY).render((0,M.jsx)(IY,{}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--castle-font-body:baltomobile, Balto, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--castle-font-display:Basteleur, Georgia, "Times New Roman", serif;--castle-font-mono:ui-monospace, SFMono-Regular, Menlo, monospace;--castle-text-size-small:11px;--castle-text-size-base:13px;--castle-text-size-large:15px;--castle-text-style-smallcaps-size:var(--castle-text-size-small);--castle-text-style-smallcaps-letter-spacing:.05em;--castle-text-style-smallcaps-transform:uppercase;--castle-text-primary:#e6e6e6;--castle-text-secondary:#b3b3b3;--castle-text-muted:#888;--castle-text-dim:#525252;--castle-text-dark:#111;--castle-surface-1:#000;--castle-surface-2:#0c0c0c;--castle-surface-3:#181818;--castle-surface-4:#242424;--castle-surface-5:#303030;--castle-surface-6:#3c3c3c;--castle-surface-light:#e6e6e6;--castle-border-1:#2a2a2a;--castle-border-2:#6a6a6a;--castle-border-3:#3a3a3a;--castle-border-4:#e6e6e6;--castle-accent:#793a80;--castle-danger-text:#e86a73;--castle-danger-surface:#73172d;--castle-danger-surface-hover:#b4202a;--castle-warn-text:#e8b25a;--castle-warn-surface:#5a3d0a;--castle-space-small:3px;--castle-space-base:6px;--castle-space-large:12px;--castle-radius-small:4px;--castle-radius-base:8px;--castle-radius-large:16px;--castle-radius-pill:999px;--castle-button-height:24px;--castle-button-icon-size:16px;--castle-button-height-large:36px;--castle-button-icon-size-large:24px;--castle-icon-size-inline:12px;--castle-panel-header-height:36px;--castle-panel-header-height-mobile:48px}.text-style-smallcaps{font-size:var(--castle-text-style-smallcaps-size);letter-spacing:var(--castle-text-style-smallcaps-letter-spacing);text-transform:var(--castle-text-style-smallcaps-transform)}.icon-inline{flex:0 0 var(--castle-icon-size-inline);width:var(--castle-icon-size-inline);height:var(--castle-icon-size-inline);font-size:var(--castle-icon-size-inline)}.icon-slot{flex:0 0 var(--castle-button-icon-size);width:var(--castle-button-icon-size);height:var(--castle-button-icon-size);justify-content:center;align-items:center;display:flex}.icon-cell{flex:0 0 var(--castle-button-height);width:var(--castle-button-height);height:var(--castle-button-height);color:var(--castle-text-dim);pointer-events:none;justify-content:center;align-items:center;display:inline-flex}.icon-slot svg,.icon-slot iconify-icon,.icon-cell svg,.icon-cell iconify-icon{flex:0 0 var(--castle-button-icon-size);width:var(--castle-button-icon-size);height:var(--castle-button-icon-size);font-size:var(--castle-button-icon-size)}.button{justify-content:center;align-items:center;gap:var(--castle-space-base);max-width:100%;height:var(--castle-button-height);padding:0 var(--castle-space-base);border-radius:var(--castle-radius-small);background:var(--castle-surface-4);color:var(--castle-text-primary);font-family:var(--castle-font-body);font-size:var(--castle-text-size-base);white-space:nowrap;cursor:pointer;border:0;line-height:1.3;display:inline-flex}.button:not(.button-icon){min-width:0}.button>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.button:hover,.button.is-hover{background:var(--castle-surface-5)}.button:active,.button.is-pressed{background:var(--castle-surface-3)}.button:focus-visible,.button.is-focus{outline:1px solid var(--castle-border-2);outline-offset:2px}.button[aria-pressed=true],.button[aria-pressed=true]:hover,.button[aria-pressed=true]:active{background:var(--castle-surface-light);color:var(--castle-text-dark)}.button:disabled{opacity:.4;cursor:default}.button-icon{width:var(--castle-button-height);padding:0}.button-icon-large{width:var(--castle-button-height-large);height:var(--castle-button-height-large)}.button-danger{background:var(--castle-danger-surface);color:var(--castle-text-primary)}.button-danger:hover,.button-danger.is-hover{background:var(--castle-danger-surface-hover)}.button-danger:active,.button-danger.is-pressed{background:var(--castle-danger-surface)}.button-quiet{color:var(--castle-text-dim);background:0 0}.button-quiet:hover,.button-quiet.is-hover{background:var(--castle-surface-5);color:var(--castle-text-primary)}.button-quiet:active,.button-quiet.is-pressed{background:var(--castle-surface-3)}.button-quiet[aria-pressed=true],.button-quiet[aria-pressed=true]:hover,.button-quiet[aria-pressed=true]:active{background:var(--castle-surface-5);color:var(--castle-text-primary)}.composer-action{border-radius:var(--castle-radius-pill);color:var(--castle-text-muted);box-shadow:inset 0 0 0 1px var(--castle-border-2);background:0 0}.composer-action:disabled{opacity:1;color:var(--castle-text-muted);box-shadow:inset 0 0 0 1px var(--castle-border-1);background:0 0}.composer-action:not(:disabled),.composer-action:not(:disabled):hover,.composer-action:not(:disabled):active,.composer-action:not(:disabled).is-hover,.composer-action:not(:disabled).is-pressed{background:var(--castle-surface-light);color:var(--castle-text-dark);box-shadow:none}.button svg,.button iconify-icon{width:var(--castle-button-icon-size);height:var(--castle-button-icon-size);font-size:var(--castle-button-icon-size)}.button-icon-large svg,.button-icon-large iconify-icon{width:var(--castle-button-icon-size-large);height:var(--castle-button-icon-size-large);font-size:var(--castle-button-icon-size-large)}.button-badge{min-width:16px;height:16px;padding:0 var(--castle-space-small);border-radius:var(--castle-radius-pill);background:var(--castle-surface-5);color:var(--castle-text-secondary);font-size:var(--castle-text-size-small);font-variant-numeric:tabular-nums;text-align:center;text-overflow:clip;flex:none;line-height:16px;overflow:hidden}.button>.button-badge{text-overflow:clip;min-width:16px;overflow:hidden}.text-field{min-width:0;height:var(--castle-button-height);padding:0 var(--castle-space-base);border:1px solid var(--castle-border-3);border-radius:var(--castle-radius-small);background:var(--castle-surface-3);color:var(--castle-text-primary);font-family:var(--castle-font-body);font-size:var(--castle-text-size-base);cursor:text;outline:0}.text-field::placeholder{color:var(--castle-text-muted)}.text-field:hover,.text-field.is-hover{background:var(--castle-surface-4)}.text-field:focus,.text-field:focus-visible,.text-field.is-focus{outline:1px solid var(--castle-border-2);outline-offset:2px}.text-field:disabled{opacity:.4;cursor:default}.select{min-width:0;height:var(--castle-button-height);padding:0 var(--castle-space-base);border:1px solid var(--castle-border-3);border-radius:var(--castle-radius-small);background:var(--castle-surface-3);color:var(--castle-text-primary);font-family:var(--castle-font-body);font-size:var(--castle-text-size-base);cursor:pointer;outline:0}.select:hover,.select.is-hover{background:var(--castle-surface-4)}.select:focus,.select:focus-visible,.select.is-focus{outline:1px solid var(--castle-border-2);outline-offset:2px}.select:disabled{opacity:.4;cursor:default}.dock-control{justify-content:center;align-items:center;gap:var(--castle-space-base);max-width:100%;height:var(--castle-panel-header-height);padding:0 var(--castle-space-large);border:1px solid var(--castle-border-1);border-radius:var(--castle-radius-base);background:var(--castle-surface-3);color:var(--castle-text-primary);font-family:var(--castle-font-body);font-size:var(--castle-text-size-base);white-space:nowrap;cursor:pointer;font-weight:600;line-height:1;display:inline-flex}.dock-control:not(.dock-control-icon){min-width:0}.dock-control>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.dock-control-icon{width:var(--castle-panel-header-height);padding:0}.dock-control-quiet{background:0 0;border-color:#0000;justify-content:flex-start;min-width:0}.dock-control-mark{background:var(--castle-surface-1)}.dock-control-group{cursor:default;box-shadow:inset 0 0 0 1px var(--castle-border-1);border:none;justify-content:flex-start;align-items:stretch;gap:0;padding:0;overflow:hidden}button.dock-control:hover,button.dock-control.is-hover{background:var(--castle-surface-4);border-color:var(--castle-border-3)}button.dock-control:active,button.dock-control.is-pressed{background:var(--castle-surface-2)}button.dock-control-quiet:active,button.dock-control-quiet.is-pressed{background:var(--castle-surface-3)}button.dock-control:focus-visible,button.dock-control.is-focus{outline:1px solid var(--castle-border-2);outline-offset:2px}.dock-control:disabled{opacity:.4;cursor:default}button.dock-control:disabled:hover,button.dock-control:disabled.is-hover{background:var(--castle-surface-3);border-color:var(--castle-border-1)}button.dock-control-quiet:disabled:hover,button.dock-control-quiet:disabled.is-hover{background:0 0;border-color:#0000}button.dock-control-mark:disabled:hover,button.dock-control-mark:disabled.is-hover{background:var(--castle-surface-1)}.dock-control svg,.dock-control iconify-icon{width:var(--castle-button-icon-size);height:var(--castle-button-icon-size);font-size:var(--castle-button-icon-size);flex-shrink:0}.dock-control-mark svg,.dock-control-mark img{width:20px;height:20px}.dock-control-mark img{object-fit:contain;display:block}.dock-segment{flex:0 0 var(--castle-panel-header-height);width:var(--castle-panel-header-height);height:var(--castle-panel-header-height);color:var(--castle-text-muted);cursor:pointer;background:0 0;border:none;border-radius:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.dock-segment iconify-icon,.dock-segment svg{width:var(--castle-button-icon-size);height:var(--castle-button-icon-size);font-size:var(--castle-button-icon-size)}@media (hover:hover){.dock-segment:hover:not(.is-active){color:var(--castle-text-primary);background:var(--castle-surface-5)}}.dock-segment.is-hover:not(.is-active){color:var(--castle-text-primary);background:var(--castle-surface-5)}.dock-segment.is-active{color:var(--castle-text-dark);background:var(--castle-surface-light)}.dock-segment.is-drag-origin{opacity:0;pointer-events:none;flex:0 0 0;width:0;min-width:0;max-width:0;padding:0;overflow:hidden}.dock-segment-slot{flex:0 0 var(--castle-panel-header-height);width:var(--castle-panel-header-height);height:var(--castle-panel-header-height);color:var(--castle-text-primary);background:var(--castle-surface-6);pointer-events:none;justify-content:center;align-items:center;display:inline-flex}.dock-segment-slot iconify-icon,.dock-segment-slot svg{width:var(--castle-button-icon-size);height:var(--castle-button-icon-size);font-size:var(--castle-button-icon-size)}.dock-segment-ghost{border-radius:var(--castle-radius-small);pointer-events:none;box-shadow:0 8px 24px #00000073}.dock-segment:has(.dock-badge){position:relative}.dock-segment .dock-badge{top:var(--castle-space-small);right:var(--castle-space-small);z-index:1;background:var(--castle-surface-light);color:var(--castle-text-dark);pointer-events:none;transform-origin:50%;position:absolute}.dock-segment .dock-badge:not(.is-appearing){visibility:hidden;opacity:0;transform:scale(.45)}.dock-segment .dock-badge.is-appearing{visibility:visible;animation:.28s cubic-bezier(.2,.8,.2,1) both dock-badge-appear}@keyframes dock-badge-appear{0%{opacity:0;transform:scale(.45)}70%{opacity:1;transform:scale(1.08)}to{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion:reduce){.dock-segment .dock-badge.is-appearing{animation:none}}.menu{gap:var(--castle-space-small);width:max-content;min-width:144px;padding:var(--castle-space-small);border:1px solid var(--castle-border-3);border-radius:var(--castle-radius-base);background:var(--castle-surface-5);flex-direction:column;display:flex;box-shadow:0 8px 24px #0000008c}.menu-item{align-items:center;gap:var(--castle-space-base);width:100%;height:26px;padding:0 var(--castle-space-base);border-radius:var(--castle-radius-small);color:var(--castle-text-primary);font-family:var(--castle-font-body);font-size:var(--castle-text-size-base);cursor:pointer;background:0 0;border:0;display:flex}.menu-icon{flex:0 0 16px;width:16px;height:16px;font-size:16px}svg.menu-icon,iconify-icon.menu-icon{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5px}.menu-icon svg,.menu-icon iconify-icon{width:16px;height:16px;font-size:16px}.menu-item:hover:not(:disabled),.menu-item.is-hover:not(:disabled){background:var(--castle-surface-6)}.menu-item:disabled{opacity:.4;cursor:default}.menu-item-label{text-overflow:ellipsis;white-space:nowrap;text-align:left;flex:auto;min-width:0;overflow:hidden}.menu-check{color:var(--castle-text-primary);flex:none}.menu-keys{margin-left:var(--castle-space-large);color:var(--castle-text-muted);font-size:var(--castle-text-size-small);white-space:nowrap;flex:none}.menu-item:disabled .menu-keys{color:inherit}.menu-item-danger{color:var(--castle-danger-text)}.menu-separator{height:1px;margin:var(--castle-space-small) 0;background:var(--castle-border-3)}.menu-header{padding:var(--castle-space-small) var(--castle-space-base);color:var(--castle-text-muted);font-size:var(--castle-text-size-small);letter-spacing:.04em;text-transform:uppercase}.menu-confirm{gap:var(--castle-space-base);min-width:180px;padding:var(--castle-space-small) var(--castle-space-base);flex-direction:column;display:flex}.menu-confirm-text{color:var(--castle-text-primary);font-size:var(--castle-text-size-base);margin:0}.menu-confirm-actions{justify-content:flex-end;gap:var(--castle-space-base);display:flex}.menu-error{padding:var(--castle-space-small) var(--castle-space-base);color:var(--castle-danger-text);font-size:var(--castle-text-size-small);margin:0}.feedback-quiet{--castle-feedback-text:var(--castle-text-muted);--castle-feedback-surface:var(--castle-surface-3);--castle-feedback-border:var(--castle-border-3)}.feedback-warn{--castle-feedback-text:var(--castle-warn-text);--castle-feedback-surface:var(--castle-warn-surface);--castle-feedback-surface-hover:color-mix(in srgb, var(--castle-warn-text) 35%, var(--castle-warn-surface));--castle-feedback-border:color-mix(in srgb, var(--castle-warn-text), var(--castle-warn-surface))}.feedback-danger{--castle-feedback-text:var(--castle-danger-text);--castle-feedback-surface:var(--castle-danger-surface);--castle-feedback-surface-hover:var(--castle-danger-surface-hover);--castle-feedback-border:color-mix(in srgb, var(--castle-danger-text), var(--castle-danger-surface))}.feedback-note{color:var(--castle-feedback-text);margin:0}.feedback-banner{align-items:center;gap:var(--castle-space-base);min-height:var(--castle-panel-header-height);padding:var(--castle-space-base);border-bottom:1px solid var(--castle-feedback-border);background:var(--castle-feedback-surface);color:var(--castle-feedback-text);font-size:var(--castle-text-size-base);display:flex}.feedback-banner>span:not(.icon-cell){flex:auto;min-width:0}.feedback-banner .icon-cell{color:inherit}.feedback-warn .button,.feedback-danger .button{border:1px solid var(--castle-feedback-border);background:var(--castle-feedback-surface);color:var(--castle-text-primary)}.feedback-warn .button:hover,.feedback-warn .button.is-hover,.feedback-danger .button:hover,.feedback-danger .button.is-hover{background:var(--castle-feedback-surface-hover)}.feedback-warn .button:active,.feedback-warn .button.is-pressed,.feedback-danger .button:active,.feedback-danger .button.is-pressed{background:var(--castle-feedback-surface)}.feedback-takeover{padding:calc(var(--castle-space-large) * 2);border:1px solid var(--castle-feedback-border);border-radius:var(--castle-radius-base);background:var(--castle-feedback-surface);color:var(--castle-feedback-text);font-size:var(--castle-text-size-base);text-align:center;justify-content:center;align-items:center;display:flex}.panel{border:1px solid var(--castle-border-1);border-radius:var(--castle-radius-base);background:var(--castle-surface-2);color:var(--castle-text-primary);font-family:var(--castle-font-body);transition:border-color .12s;position:relative;overflow:hidden}@media (hover:hover){.panel:hover{border-color:var(--castle-border-3)}}.panel.is-hover{border-color:var(--castle-border-3)}.panel.is-active,.panel.is-active:hover,.panel.is-active.is-hover{border-color:var(--castle-border-2)}.panel.is-dragging,.panel.is-dragging:hover,.panel.is-dragging.is-hover,.panel.is-dragging.is-active{border-color:var(--castle-border-4)}.panel-header,.panel-tabs-header{height:var(--castle-panel-header-height);padding:0 var(--castle-space-base);border-bottom:1px solid var(--castle-border-1);background:var(--castle-surface-3);align-items:center;display:flex}@media (hover:hover){.panel-header:hover,.panel-tabs-header:hover{background:var(--castle-surface-4);cursor:grab}}.panel-header.is-hover,.panel-tabs-header.is-hover{background:var(--castle-surface-4);cursor:grab}.panel-header:active,.panel-header.is-pressed,.panel-tabs-header:active,.panel-tabs-header.is-pressed{cursor:grabbing}.panel-tabs-header{align-items:stretch;gap:var(--castle-space-base)}.panel-title{align-items:center;gap:var(--castle-space-base);min-width:0;padding:0 var(--castle-space-base);color:var(--castle-text-primary);font-family:var(--castle-font-display);font-size:var(--castle-text-size-base);margin:0 auto 0 0;font-weight:700;line-height:1.5;display:inline-flex}.panel-title svg,.panel-title iconify-icon{width:var(--castle-button-icon-size);height:var(--castle-button-icon-size);font-size:var(--castle-button-icon-size);flex-shrink:0}.panel-header-actions{align-items:center;gap:var(--castle-space-small);margin-left:auto;display:flex}.panel-type-toggle{align-items:center;gap:var(--castle-space-base);min-width:0;max-width:100%;height:var(--castle-button-height);padding:0 var(--castle-space-base);border-radius:var(--castle-radius-small);color:var(--castle-text-primary);font-family:var(--castle-font-display);font-size:var(--castle-text-size-base);white-space:nowrap;cursor:pointer;background:0 0;border:0;align-self:center;font-weight:700;display:inline-flex}.panel-type-toggle:hover,.panel-type-toggle.is-hover,.panel-type-toggle[aria-pressed=true]{background:var(--castle-surface-5)}.panel-type-toggle svg,.panel-type-toggle iconify-icon{width:var(--castle-button-icon-size);height:var(--castle-button-icon-size);font-size:var(--castle-button-icon-size);flex-shrink:0}.panel-tabs{align-items:center;gap:var(--castle-space-base);flex:auto;min-width:0;display:flex}.panel-tab{max-width:160px;height:var(--castle-button-height);padding:var(--castle-space-small) var(--castle-space-base);border-radius:var(--castle-radius-small);color:var(--castle-text-dim);font-family:var(--castle-font-body);font-size:var(--castle-text-size-base);white-space:nowrap;cursor:pointer;background:0 0;border:0;align-items:center;line-height:18px;display:flex;position:relative;overflow:hidden}.panel-tab>span{text-overflow:ellipsis;min-width:0;overflow:hidden}.panel-tab:hover,.panel-tab.is-hover{background:var(--castle-surface-5);color:var(--castle-text-secondary)}.panel-tab.is-active{background:var(--castle-surface-5);color:var(--castle-text-primary)}.panel-tab:hover>span,.panel-tab.is-hover>span{-webkit-mask-image:linear-gradient(to right, #000 calc(100% - (var(--castle-button-icon-size) + var(--castle-space-large))), transparent 100%);mask-image:linear-gradient(to right, #000 calc(100% - (var(--castle-button-icon-size) + var(--castle-space-large))), transparent 100%)}.panel-tab.is-narrow:not(.is-active):hover>span,.panel-tab.is-narrow:not(.is-active).is-hover>span{-webkit-mask-image:none;mask-image:none}.panel-tab-close{z-index:1;top:var(--castle-space-small);right:var(--castle-space-small);width:calc(var(--castle-button-icon-size) + var(--castle-space-large));height:var(--castle-button-icon-size);border-radius:var(--castle-radius-small);background:linear-gradient(to right, transparent, var(--castle-surface-3) 45%);color:currentColor;cursor:pointer;opacity:0;pointer-events:none;border:0;justify-content:flex-end;align-items:center;padding:0;display:inline-flex;position:absolute}.panel-tab-close svg,.panel-tab-close iconify-icon{width:var(--castle-button-icon-size);height:var(--castle-button-icon-size);font-size:var(--castle-button-icon-size)}.panel-tab:hover .panel-tab-close,.panel-tab.is-hover .panel-tab-close,.panel-tab:focus-within .panel-tab-close{opacity:1;pointer-events:auto;background:linear-gradient(to right, transparent, var(--castle-surface-5) 45%)}.panel-tab.is-active .panel-tab-close{background:linear-gradient(to right, transparent, var(--castle-surface-5) 45%)}.panel-tab-close:hover,.panel-tab-close.is-hover{background:linear-gradient(to right, transparent, var(--castle-surface-5) 45%);color:var(--castle-text-primary)}.panel-tab.is-narrow:not(.is-active):hover .panel-tab-close,.panel-tab.is-narrow:not(.is-active).is-hover .panel-tab-close{opacity:0;pointer-events:none}.panel-tab.is-drag-origin{opacity:0;pointer-events:none;border:0;width:0;min-width:0;max-width:0;padding:0}.panel-tab-insert{width:2px;height:var(--castle-button-height);border-radius:var(--castle-radius-pill);background:var(--castle-border-4);pointer-events:none;flex:0 0 2px}.panel-tab-ghost{padding:var(--castle-space-base) var(--castle-space-large);border:1px solid var(--castle-border-1);border-radius:var(--castle-radius-small);background:var(--castle-surface-3);color:var(--castle-text-primary);font-size:var(--castle-text-size-base);pointer-events:none;box-shadow:0 8px 24px #00000073}.panel-mobile-current{justify-content:center;align-self:center;align-items:center;gap:var(--castle-space-base);min-width:0;max-width:100%;height:var(--castle-button-height-large);padding:0 var(--castle-space-base);border-radius:var(--castle-radius-small);color:var(--castle-text-primary);font-family:var(--castle-font-body);font-size:var(--castle-text-size-base);cursor:pointer;background:0 0;border:0;display:inline-flex}.panel-mobile-current:hover,.panel-mobile-current.is-hover{background:var(--castle-surface-5)}.panel-mobile-current-text{align-items:baseline;gap:var(--castle-space-small);min-width:0;display:flex}.panel-mobile-current-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.panel-mobile-current strong,.panel-mobile-current-type{font-family:var(--castle-font-display);flex-shrink:0;font-weight:700}.panel-mobile-current svg,.panel-mobile-current iconify-icon{width:var(--castle-button-icon-size-large);height:var(--castle-button-icon-size-large);font-size:var(--castle-button-icon-size-large);flex:none}.segmented{border-radius:var(--castle-radius-small);flex-wrap:wrap;align-items:stretch;display:flex;overflow:hidden}.segmented>.button{border-radius:0}.feedback-banner.is-inset{border-radius:var(--castle-radius-small);border-bottom:none}.feedback-banner.is-inset .button{flex:none;width:auto}.popover{width:max-content;max-width:calc(100vw - 24px);max-height:calc(100vh - 16px);padding:var(--castle-space-large);border:1px solid var(--castle-border-3);border-radius:var(--castle-radius-base);background:var(--castle-surface-4);color:var(--castle-text-primary);font-family:var(--castle-font-body);font-size:var(--castle-text-size-base);flex-direction:column;display:flex;overflow:auto;box-shadow:0 8px 24px #0000008c}.popover .button:not(.button-quiet){background:var(--castle-surface-5)}.popover .button:not(.button-quiet):hover,.popover .button:not(.button-quiet).is-hover{background:var(--castle-surface-6)}.popover .button:not(.button-quiet):active,.popover .button:not(.button-quiet).is-pressed{background:var(--castle-surface-4)}.popover .button[aria-pressed=true],.popover .button[aria-pressed=true]:hover,.popover .button[aria-pressed=true]:active{background:var(--castle-surface-light);color:var(--castle-text-dark)}.popover .feedback-warn .button:not(.button-quiet),.popover .feedback-danger .button:not(.button-quiet){border:1px solid var(--castle-feedback-border);background:var(--castle-feedback-surface);color:var(--castle-text-primary)}.popover .feedback-warn .button:not(.button-quiet):hover,.popover .feedback-warn .button:not(.button-quiet).is-hover,.popover .feedback-danger .button:not(.button-quiet):hover,.popover .feedback-danger .button:not(.button-quiet).is-hover{background:var(--castle-feedback-surface-hover)}.popover .feedback-warn .button:not(.button-quiet):active,.popover .feedback-warn .button:not(.button-quiet).is-pressed,.popover .feedback-danger .button:not(.button-quiet):active,.popover .feedback-danger .button:not(.button-quiet).is-pressed{background:var(--castle-feedback-surface)}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--v2-gutter:#000;--v2-surface:#0d0d0d;--v2-raised:#161616;--v2-hover:#1d1d1d;--v2-fg:#e6e6e6;--v2-head:#e8e8e8;--v2-secondary:#b3b3b3;--v2-muted:#888;--v2-dim:#525252;--v2-placeholder:#666;--v2-ink:#111;--v2-white:#fff;--v2-border:#2a2a2a;--v2-accent:var(--castle-accent);--v2-accent-hover:color-mix(in srgb, var(--castle-accent) 84%, #fff);--v2-error-bg:#5a2b2b;--v2-warn:#e2c08d;--v2-error:#e08c8c;--v2-overlay-scrim:#00000059;--v2-overlay-code:#00000038;--v2-overlay-code-block:#00000047;--v2-overlay-task:#141414eb;--v2-overlay-feed-code:#7878784d;--v2-overlay-white-subtle:#ffffff0f;--v2-overlay-white-hover:#ffffff14;--v2-overlay-white-border:#ffffff24;--v2-overlay-white-quote:#fff6;--v2-overlay-white-dim:#ffffffd9;--v2-shadow-pop:0 10px 24px -10px #000000e6;--v2-selection:#e6e6e62e;--v2-mono:ui-monospace, SFMono-Regular, Menlo, monospace;--panel-gutter:10px;--panel-chrome-radius:8px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{color:var(--v2-fg);background:var(--v2-surface);font-family:baltomobile,Balto,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;overflow:hidden}.panel-error{height:100%;color:var(--v2-muted);flex-direction:column;align-items:flex-start;gap:8px;padding:14px 16px;font-size:13px;display:flex;overflow:auto}.panel-error-title{color:var(--v2-fg)}.panel-error-msg{white-space:pre-wrap;word-break:break-word;max-width:100%;color:var(--v2-muted);margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.panel-error-retry{font:inherit;border:1px solid var(--v2-border);background:var(--v2-raised);color:var(--v2-fg);cursor:pointer;border-radius:4px;padding:3px 10px;font-size:12px}.panel-error-retry:hover{background:var(--v2-hover)}.editor-panel-root{flex-direction:column;width:100%;height:100%;min-height:0;display:flex}.editor-shell{flex:auto;min-height:0;display:flex}.editor-panel-body{flex-direction:column;flex:auto;min-width:0;min-height:0;display:flex}.editor-panel-view{flex:auto;min-width:0;min-height:0;position:relative}.editor-import-banner{background:var(--flow-surface,#181818);border-bottom:1px solid var(--v2-border,#2a2a2a);color:var(--v2-muted,#888);flex:none;align-items:center;gap:8px;padding:8px;font:12px ui-sans-serif,system-ui,sans-serif;display:flex}.editor-import-chip{border:1px solid var(--v2-border,#2a2a2a);background:var(--v2-raised,#161616);color:var(--v2-muted,#888);letter-spacing:.02em;border-radius:999px;flex:none;align-items:center;padding:2px 8px;font-size:12px;line-height:1.4;display:inline-flex}.editor-import-banner-text{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.editor-import-banner-action{border:1px solid var(--v2-border,#2a2a2a);background:var(--v2-raised,#161616);color:var(--v2-text,#ddd);font:inherit;cursor:pointer;border-radius:4px;flex:none;margin-left:auto;padding:2px 10px}.editor-import-banner-action:hover{border-color:var(--v2-muted,#888)}.editor-import-chip.editor-fork-chip{color:var(--v2-text,#ddd)}.editor-fork-modal-scrim{z-index:40;background:#00000080;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.editor-fork-modal{border:1px solid var(--v2-border,#2a2a2a);background:var(--flow-surface,#181818);max-width:420px;color:var(--v2-text,#ddd);border-radius:6px;padding:16px;font:13px ui-sans-serif,system-ui,sans-serif}.editor-fork-modal-title{margin-bottom:8px;font-weight:600}.editor-fork-modal-body{color:var(--v2-muted,#888);line-height:1.5}.editor-fork-modal-actions{justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.editor-fork-modal-actions button{border:1px solid var(--v2-border,#2a2a2a);background:var(--v2-raised,#161616);color:var(--v2-text,#ddd);font:inherit;cursor:pointer;border-radius:4px;padding:4px 12px}.editor-fork-modal-actions button:hover{border-color:var(--v2-muted,#888)}.editor-contextbar{background:var(--v2-gutter,#0d0d0d);border-bottom:1px solid var(--v2-border,#2a2a2a);flex:none;align-items:center;gap:8px;padding:5px 8px;display:flex}.editor-drawer-toggle{width:26px;height:24px;color:var(--v2-muted,#888);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;flex:none;justify-content:center;align-items:center;display:inline-flex}.editor-drawer-toggle:hover{color:var(--v2-fg,#e7e7ef);background:var(--v2-surface,#1b1b2b)}.editor-drawer-toggle.on{color:var(--v2-fg,#e7e7ef);background:var(--v2-surface,#1b1b2b);border-color:var(--v2-border,#3a3a52)}.editor-drawer{background:var(--v2-gutter,#0d0d0d);border-right:1px solid var(--v2-border,#2a2a2a);flex:none;width:190px;padding:6px 4px;overflow-y:auto}.editor-drawer-folder{letter-spacing:.03em;text-transform:uppercase;color:var(--v2-muted,#888);padding:6px 8px 2px;font:10px ui-sans-serif,system-ui,sans-serif}.editor-drawer-item{width:100%;color:var(--v2-secondary,#b3b3b3);cursor:pointer;text-align:left;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:none;border-radius:6px;padding:5px 8px;font:12px ui-sans-serif,system-ui,sans-serif;display:block;overflow:hidden}.editor-drawer-item:hover{background:var(--v2-surface,#1b1b2b);color:var(--v2-fg,#e7e7ef)}.editor-drawer-item.current{color:var(--v2-fg,#e7e7ef);background:#ffffff1a}.editor-drawer-empty{color:var(--v2-muted,#888);padding:10px 8px;font-size:12px}.editor-view-picker{background:var(--v2-surface,#1b1b2b);color:var(--v2-fg,#e7e7ef);border:1px solid var(--v2-border,#3a3a52);cursor:pointer;border-radius:6px;flex:none;padding:3px 6px;font:12px system-ui,sans-serif}.editor-contextbar-path{text-overflow:ellipsis;white-space:nowrap;color:var(--v2-muted,#888);flex:auto;font:11px ui-monospace,SFMono-Regular,Menlo,monospace;overflow:hidden}.editor-contextbar-reload{width:22px;height:22px;color:var(--v2-muted,#888);cursor:pointer;background:0 0;border:none;border-radius:5px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.editor-contextbar-reload:hover{color:var(--v2-white,#fff);background:var(--v2-overlay-white-hover,#ffffff14)}.editor-contextbar-reload svg{width:13px;height:13px}.deck-panel{background:var(--v2-surface);width:100%;height:100%}.deck-frame{border:0;width:100%;height:100%;display:block}.play-panel{background:var(--castle-surface-2);flex-direction:column;width:100%;height:100%;display:flex}.play-scene-picker{padding:0 var(--castle-space-large) var(--castle-space-large);flex:none;justify-content:center;align-items:center;display:flex}.play-stage{min-height:0;padding:var(--castle-space-large);flex:auto;justify-content:center;align-items:center;display:flex;container-type:size}.play-stage:has(+.play-scene-picker){padding-bottom:var(--castle-space-base)}.play-frame-shell{aspect-ratio:5/7;border-radius:4%/2.85714%;width:min(100cqw,71.4286cqh);height:min(100cqh,140cqw);position:relative;overflow:hidden}.play-frame-shell .deck-frame{width:100%;height:100%}.play-logs{border-top:1px solid var(--castle-border-1);background:var(--castle-surface-2);color:var(--castle-text-secondary);flex:none;position:relative}.play-logs.is-open{--play-logs-height:160px;flex:0 0 var(--play-logs-height);height:var(--play-logs-height);flex-direction:column;min-height:0;display:flex;overflow:hidden}.play-logs-resize{z-index:2;cursor:row-resize;touch-action:none;height:12px;display:none;position:absolute;top:-6px;left:0;right:0}.play-logs.is-open>.play-logs-resize{display:block}body.play-logs-resizing,body.play-logs-resizing *{cursor:row-resize!important;-webkit-user-select:none!important;user-select:none!important}.play-logs-header{min-height:calc(var(--castle-button-height) + 2 * var(--castle-space-base));padding:var(--castle-space-base);align-items:center;column-gap:var(--castle-space-base);cursor:pointer;flex:none;grid-template-columns:minmax(0,1fr) minmax(0,max-content) max-content;display:grid;position:relative}.play-logs-header:hover{background:var(--castle-surface-3)}.play-logs-expand{z-index:0;cursor:pointer;background:0 0;border:0;padding:0;position:absolute;inset:0}.play-logs-expand:focus{outline:none}.play-logs-expand:focus-visible{outline:2px solid var(--castle-border-2);outline-offset:-2px}.play-logs-label{align-items:center;gap:var(--castle-space-base);min-width:0;color:var(--castle-text-dim);pointer-events:none;justify-self:start;display:inline-flex}.play-logs-header:hover .play-logs-label{color:var(--castle-text-primary)}.play-logs-label svg{flex:0 0 var(--castle-button-icon-size);width:var(--castle-button-icon-size);height:var(--castle-button-icon-size);font-size:var(--castle-button-icon-size)}.play-logs-pending{min-width:0;color:var(--castle-text-muted);font-size:var(--castle-text-size-small);text-overflow:ellipsis;white-space:nowrap;pointer-events:none;grid-column:2;margin:0;line-height:1.4;overflow:hidden}.play-logs-restart{z-index:1;grid-column:3;justify-self:end;min-width:max-content;position:relative}.play-logs-restart.is-pending,.play-logs-restart.is-pending:hover,.play-logs-restart.is-pending:active{color:var(--castle-warn-text)}.play-logs-restart-icon{line-height:1;display:inline-flex}.play-logs-restart-icon.is-spinning{animation:.6s linear infinite play-logs-spin}@keyframes play-logs-spin{to{transform:rotate(360deg)}}.play-logs-toolbar{align-items:center;gap:var(--castle-space-base);padding:var(--castle-space-base);border-top:1px solid var(--castle-border-1);flex-wrap:wrap;flex:none;display:flex}.play-logs-body{min-height:0;padding:var(--castle-space-base) var(--castle-space-large);border-top:1px solid var(--castle-border-1);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:var(--castle-text-size-small);flex:auto;line-height:1.5;overflow-y:auto}.play-logs-line{white-space:pre-wrap;word-break:break-word}.play-logs-warn{color:var(--castle-warn-text)}.play-logs-error{color:var(--castle-danger-text)}.play-logs-empty{color:var(--castle-text-dim)}.flow-root.is-mobile .play-panel{--castle-text-size-small:14px;--castle-text-size-base:16px;--castle-text-style-smallcaps-size:var(--castle-text-size-small);--castle-button-height:var(--castle-button-height-large)}.flow-root.is-mobile .play-panel .button:not(.button-icon){padding-left:var(--castle-space-large);padding-right:var(--castle-space-large)}.flow-root.is-mobile .play-logs.is-open{--play-logs-height:200px}.flow-root.is-mobile .play-logs-header:hover{background:0 0}.flow-root.is-mobile .play-logs-header:hover .play-logs-label{color:var(--castle-text-dim)}.flow-root.is-mobile .play-stage{padding:var(--castle-space-small)}.term-panel{width:100%;height:100%;position:relative}.term-host{overscroll-behavior:contain;padding:6px;position:absolute;inset:0}.shell-root{--operator-pad:var(--castle-space-large);--operator-col-fit:min(var(--operator-col,400px), 100%);background:var(--v2-gutter);height:100%;position:relative}#chat-host{width:var(--operator-col-fit);background:var(--v2-gutter);color:var(--v2-fg);z-index:10;flex-direction:column;font-family:Balto,system-ui,-apple-system,sans-serif;display:flex;position:absolute;top:0;bottom:0;left:0;overflow:hidden}.settings-popover{z-index:2147483000;width:390px;position:fixed}.settings-popover .settings-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px 10px;display:flex}.settings-popover .settings-row+.settings-row{margin-top:8px}.settings-popover .settings-label{white-space:nowrap}.settings-popover .settings-row-stack{flex-direction:column;align-items:stretch;gap:4px;display:flex}.settings-popover .settings-row-main{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px 10px;display:flex}.settings-popover .settings-text-warn{border-color:var(--v2-warn)}.settings-popover .settings-warning{color:var(--v2-warn);text-align:right;font-size:11px;line-height:1.35}.settings-popover .settings-warning-suggest{appearance:none;font:inherit;color:var(--v2-warn);cursor:pointer;background:0 0;border:none;margin:0;padding:0;text-decoration:underline}.settings-popover .settings-warning-suggest:hover{color:var(--castle-text-primary)}.settings-popover .settings-group+.settings-group{border-top:1px solid var(--castle-border-1);margin-top:12px;padding-top:12px}.settings-popover .settings-credits{margin-top:var(--castle-space-base);color:var(--castle-text-secondary);font-size:var(--castle-text-size-base)}.settings-popover .settings-usage-subtext{margin-top:var(--castle-space-small);color:var(--castle-text-muted);font-size:var(--castle-text-size-small)}.settings-popover .settings-usage-subtext.feedback-note{color:var(--castle-feedback-text)}.settings-popover .settings-split{justify-content:space-between;align-items:center;gap:var(--castle-space-large);margin-top:var(--castle-space-base);display:flex}.settings-popover .settings-group>.settings-split:first-child{margin-top:0}.settings-popover .settings-split-copy,.settings-popover .settings-split>.settings-credits{flex:auto;min-width:0}.settings-popover .settings-split .settings-credits{margin-top:0}.settings-popover .settings-split .button{flex:none;width:auto;margin-left:auto}.settings-popover .settings-group>.feedback-banner.is-inset{margin-top:var(--castle-space-base)}.settings-popover .text-field{flex:auto}.settings-popover .select{flex:0 auto;max-width:60%}.settings-popover .settings-usage-bar{height:4px;margin-top:var(--castle-space-base);background:var(--castle-surface-5);border-radius:2px;overflow:hidden}.settings-popover .settings-usage-fill{background:var(--castle-accent);height:100%}.settings-popover .settings-usage-fill.blocked{background:var(--castle-danger-text)}.castle-key-heading{margin-bottom:4px;font-weight:600}.castle-key-subtitle{color:#9a9a9a;margin-bottom:14px;font-size:12px;line-height:1.5}.castle-key-tabs{border:1px solid #3a3a3a;border-radius:4px;margin-bottom:12px;display:flex;overflow:hidden}.castle-key-tab{color:#9a9a9a;font:inherit;cursor:pointer;background:#2e2e2e;border:0;flex:1;padding:6px 10px;font-size:12px}.castle-key-tab+.castle-key-tab{border-left:1px solid #3a3a3a}.castle-key-tab:hover{color:#e8e8e8}.castle-key-tab.active{color:#e8e8e8;background:#3a3a3a}.castle-key-input{box-sizing:border-box;color:#e8e8e8;width:100%;font:inherit;background:#1b1b1b;border:1px solid #3a3a3a;border-radius:4px;outline:none;padding:7px 9px;font-size:12px;display:block}.castle-key-input:focus{border-color:#4a4a4a}.castle-key-input::placeholder{color:#6a6a6a}.castle-key-stored{color:#8a8a8a;margin-top:8px;font-size:11px}.castle-key-error{color:#e8705a;margin-top:8px;font-size:11px;line-height:1.4}.castle-key-row{color:#c8c8c8;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px;display:flex}.castle-key-row button{color:#e8e8e8;font:inherit;cursor:pointer;background:#2e2e2e;border:1px solid #3a3a3a;border-radius:4px;padding:5px 12px;font-size:12px}.castle-key-row button:hover{background:#383838}.castle-key-login{margin-bottom:12px}.castle-key-signin{color:#e8e8e8;width:100%;font:inherit;cursor:pointer;background:#2e2e2e;border:1px solid #3a3a3a;border-radius:4px;padding:9px 12px;font-size:13px;display:block}.castle-key-signin:hover{background:#383838}.castle-key-or{color:#7a7a7a;letter-spacing:.08em;text-transform:uppercase;align-items:center;gap:10px;margin:14px 0;font-size:11px;display:flex}.castle-key-or:before,.castle-key-or:after{content:"";background:#3a3a3a;flex:1;height:1px}.castle-key-field-label{color:#c8c8c8;margin-bottom:6px;font-size:12px}.castle-key-url{color:#7aa2f7;word-break:break-all;-webkit-user-select:all;user-select:all;background:#1b1b1b;border:1px solid #3a3a3a;border-radius:4px;padding:8px 9px;font-size:11px;line-height:1.4;display:block}#chat-messages{overflow-anchor:none;min-height:0;font-size:var(--castle-text-size-base);scrollbar-width:none;-ms-overflow-style:none;flex-direction:column;flex:1 1 0;padding:0;line-height:1.5;display:flex;overflow-y:auto}#chat-messages .chat-thread{gap:var(--castle-space-large);padding-bottom:var(--castle-space-large);opacity:0;flex-direction:column;transition:opacity .12s;display:flex}#chat-messages .chat-thread.ready{opacity:1}.shell-root.docked #chat-messages{padding:0}.shell-root.docked #chat-messages>:first-child{margin-top:auto}#chat-messages::-webkit-scrollbar{width:0;height:0}#chat-empty{color:var(--castle-text-muted)}#chat-host .msg{margin:0}#chat-host .msg.user{text-align:right}#chat-host .msg.user span:not(.msg-image){background:var(--castle-surface-light);color:var(--castle-text-dark);padding:var(--castle-space-base) var(--castle-space-large);border-radius:var(--castle-radius-large);text-align:left;white-space:pre-wrap;word-break:break-word;max-width:85%;display:inline-block}#chat-host .msg-image{border:1px solid var(--castle-border-1);border-radius:var(--castle-radius-base);max-width:220px;max-height:150px;margin:0 0 var(--castle-space-base) auto;display:block}#chat-host .assistant-turn{align-items:flex-start;gap:var(--castle-space-base);flex-direction:column;margin:0;display:flex}#chat-host .assistant-turn .feedback-note{max-width:85%}#chat-host .msg.assistant{background:var(--castle-accent);width:fit-content;color:var(--castle-surface-light);padding:var(--castle-space-base) var(--castle-space-large);border-radius:var(--castle-radius-large);word-break:break-word;max-width:85%;margin:0}#chat-host .msg.assistant.errbubble{background:var(--castle-danger-surface);color:var(--castle-danger-text)}#chat-host .msg.assistant.streaming:after{content:"▌";opacity:.6;animation:1s step-end infinite chat-blink}@keyframes chat-blink{50%{opacity:0}}#chat-host .msg.toolline{color:var(--castle-text-muted);font-size:var(--castle-text-size-base);font-family:var(--castle-font-mono);word-break:break-word}#chat-host .msg-error-detail{font-size:var(--castle-text-size-base);color:var(--castle-text-muted)}#chat-host .msg-error-detail summary{cursor:pointer;-webkit-user-select:none;user-select:none}#chat-host .msg-error-detail pre{margin:var(--castle-space-small) 0 0;padding:var(--castle-space-base);background:var(--castle-surface-1);border-radius:var(--castle-radius-small);font-size:var(--castle-text-size-small);white-space:pre-wrap;word-break:break-word;max-height:160px;overflow-y:auto}#chat-host .operator-line,#chat-host .msg-thinking{color:var(--castle-text-muted);font-size:var(--castle-text-size-base)}#chat-host .operator-line{align-items:center;gap:var(--castle-space-base);display:flex}#chat-host .operator-line .icon-inline{flex:0 0 var(--castle-icon-size-inline)}#chat-host .operator-line .icon-inline:not(:first-child){color:var(--castle-text-dim)}#chat-host .operator-line-link{color:inherit;font:inherit;text-underline-offset:2px;cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}#chat-host .operator-line-link:hover{color:var(--castle-text-primary)}#chat-host .msg-thinking summary{cursor:pointer;-webkit-user-select:none;user-select:none;list-style:none}#chat-host .msg-thinking summary::-webkit-details-marker{display:none}#chat-host .msg-thinking .thinking-caret{transform-origin:50%;transition:transform .12s}#chat-host .msg-thinking[open] .thinking-caret{transform:rotate(90deg)}#chat-host .msg-thinking.is-active .thinking-label{background-image:linear-gradient(90deg, var(--castle-text-muted) 20%, var(--castle-text-primary) 50%, var(--castle-text-muted) 80%);color:#0000;-webkit-text-fill-color:transparent;background-size:200% 100%;-webkit-background-clip:text;background-clip:text;animation:1.6s linear infinite thinking-shimmer;display:inline-block}@keyframes thinking-shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}@media (prefers-reduced-motion:reduce){#chat-host .msg-thinking.is-active .thinking-label{color:var(--castle-text-muted);-webkit-text-fill-color:currentColor;background:0 0;animation:none}}#chat-host .msg-thinking-body{max-height:160px;padding:0 var(--castle-space-large) 0 calc(var(--castle-icon-size-inline) + var(--castle-space-base));border-radius:var(--castle-radius-small);background:var(--castle-surface-1);color:var(--castle-text-muted);font-size:var(--castle-text-size-base);overflow-y:auto}#chat-host .msg.md>:first-child,#chat-host .task-notes>:first-child{margin-top:0}#chat-host .msg.md>:last-child,#chat-host .task-notes>:last-child{margin-bottom:0}#chat-host .msg.md p:empty{display:none}#chat-host .msg.md p,#chat-host .task-notes p{margin:.4em 0}#chat-host .msg.md ul,#chat-host .msg.md ol,#chat-host .task-notes ul,#chat-host .task-notes ol{margin:.4em 0;padding-left:1.3em}#chat-host .task-notes li,#chat-host .msg.md li{margin:.1em 0}#chat-host .msg.md h1,#chat-host .msg.md h2,#chat-host .msg.md h3{margin:.5em 0 .3em;font-weight:700;line-height:1.25}#chat-host .msg.md h1{font-size:1.2em}#chat-host .msg.md h2{font-size:1.12em}#chat-host .msg.md h3{font-size:1.05em}#chat-host .msg.md a:not(.msg-link),#chat-host .msg-thinking-body a:not(.msg-link),#chat-host .task-notes a:not(.msg-link),#chat-host .task-feed-msg a:not(.msg-link){color:var(--castle-surface-light);text-underline-offset:2px;text-decoration:underline}#chat-host .msg-link{border-radius:var(--castle-radius-small);color:inherit;font-family:var(--castle-font-mono);-webkit-text-decoration-color:color-mix(in srgb, currentColor 40%, transparent);text-decoration-color:color-mix(in srgb, currentColor 40%, transparent);text-underline-offset:2px;margin:0 -.35em;padding:.1em .35em}#chat-host .msg-link:hover{background:var(--castle-surface-4);color:var(--castle-text-primary);text-decoration-color:currentColor}#chat-host .msg.assistant .msg-link:hover{background:color-mix(in srgb, var(--castle-accent) 84%, #fff)}#chat-host .msg.md code{font-family:var(--castle-font-mono);font-size:var(--castle-text-size-small);background:color-mix(in srgb, var(--castle-accent) 78%, #000);border-radius:var(--castle-radius-small);padding:.1em .35em}#chat-host .msg.md pre{margin:var(--castle-space-base) 0;padding:var(--castle-space-base) var(--castle-space-large);background:color-mix(in srgb, var(--castle-accent) 72%, #000);border-radius:var(--castle-radius-small);white-space:pre-wrap;word-break:break-word;font-family:var(--castle-font-mono);font-size:var(--castle-text-size-small);line-height:1.4;overflow-x:auto}#chat-host .msg.md pre code{background:0 0;border-radius:0;padding:0}#chat-host .msg.md blockquote{margin:var(--castle-space-base) 0;padding-left:var(--castle-space-large);border-left:3px solid color-mix(in srgb, var(--castle-accent) 60%, #fff)}.shell-root.docked #chat-host .operator-inset{min-height:0;padding:0 var(--operator-pad);flex-direction:column;flex:1 1 0;display:flex;overflow:hidden}.shell-root.docked #chat-host .chat-divider{margin:0 calc(-1 * var(--operator-pad));background:var(--castle-border-1);flex:0 0 1px}.task-stack{gap:var(--castle-space-small);flex-direction:column;display:flex}#task-board{min-height:0;margin-inline:calc(-1 * var(--castle-space-base));padding-inline:var(--castle-space-base);padding-top:0;padding-bottom:var(--castle-space-base);scrollbar-width:thin;scrollbar-color:transparent transparent;flex-direction:column;flex:0 auto;max-height:40vh;display:flex;overflow:hidden auto}#task-board.scrolling{scrollbar-color:var(--castle-text-dim) transparent}#task-board::-webkit-scrollbar{width:6px}#task-board::-webkit-scrollbar-track{background:0 0}#task-board::-webkit-scrollbar-thumb{background:0 0;border-radius:3px;transition:background .25s}#task-board.scrolling::-webkit-scrollbar-thumb{background:var(--castle-text-dim)}#chat-host .task{margin:0 calc(-1 * var(--castle-space-base));border-radius:var(--castle-radius-small);cursor:pointer;transition:background .12s,box-shadow .12s}#chat-host .task.open{background:var(--castle-surface-2);box-shadow:inset 0 0 0 1px var(--castle-border-1)}#chat-host .task:hover{background:var(--castle-surface-3)}#chat-host .task-row{align-items:center;gap:var(--castle-space-large);padding:var(--castle-space-small) var(--castle-space-base);display:flex;position:relative}#chat-host .pie{background:conic-gradient(var(--castle-surface-light) calc(var(--pct,0) * 3.6deg), var(--castle-surface-5) 0deg);border-radius:50%;flex:0 0 32px;width:32px;height:32px;padding:2px;display:flex;position:relative}#chat-host .pie .avatar{background:var(--castle-surface-3);width:100%;height:100%;color:var(--castle-text-dark);border-radius:50%;justify-content:center;align-items:center;display:flex;overflow:hidden}#chat-host .pie .avatar .avatar-icon-wrap{justify-content:center;align-items:center;width:16px;height:16px;font-size:16px;display:flex}#chat-host .pie .avatar .avatar-icon-wrap svg{width:16px;height:16px;display:block}#chat-host .task-meta{flex:1;min-width:0}#chat-host .task-name{color:var(--castle-text-muted);font-size:var(--castle-text-size-base);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}#chat-host .task-name .tn{color:var(--castle-text-primary);font-weight:600}#chat-host .task-sub{color:var(--castle-text-muted);font-size:var(--castle-text-size-small);text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums;overflow:hidden}#chat-host .task-actions{align-items:center;gap:var(--castle-space-small);visibility:hidden;flex:none;margin-left:auto;display:flex}#chat-host .task:hover .task-actions,#chat-host .task.open .task-actions{visibility:visible}#chat-host .task-board-header{z-index:1;justify-content:space-between;align-items:center;gap:var(--castle-space-base);margin-inline:calc(-1 * var(--castle-space-base));padding:var(--castle-space-large) var(--castle-space-base) var(--castle-space-base);background:var(--castle-surface-1);display:flex;position:sticky;top:0}#chat-host .task-body{padding:0 var(--castle-space-base) var(--castle-space-base) calc(var(--castle-space-base) + 32px + var(--castle-space-large));font-size:var(--castle-text-size-base);color:var(--castle-text-secondary);display:none}#chat-host .task.open .task-body{display:block}#chat-host .task-notes{margin-top:var(--castle-space-small);font-size:var(--castle-text-size-base);color:var(--castle-text-secondary);word-break:break-word}#chat-host .task-body>.feedback-note{margin-top:var(--castle-space-small)}#chat-host .task-notes code{border-radius:var(--castle-radius-small);font-family:var(--castle-font-mono);padding:1px 4px;font-size:12px}#chat-host .task-playtest-frames{margin-top:var(--castle-space-base)}#chat-host .task-playtest-frames-label{font-size:var(--castle-text-size-small);color:var(--castle-text-muted);margin-bottom:var(--castle-space-small)}#chat-host .task-playtest-frames-row{gap:var(--castle-space-base);flex-wrap:wrap;display:flex}#chat-host .task-playtest-frame{object-fit:cover;border:1px solid var(--castle-border-1);background:var(--castle-text-dark);border-radius:4px;width:64px;height:90px;display:block}#chat-host .task-feed{margin-top:var(--castle-space-base);scrollbar-width:none;-ms-overflow-style:none;max-height:96px;font-size:var(--castle-text-size-base);color:var(--castle-text-secondary);cursor:default;word-break:break-word;line-height:1.5;overflow:hidden auto;-webkit-mask-image:linear-gradient(#0000,#000 8px 100%);mask-image:linear-gradient(#0000,#000 8px 100%)}#chat-host .task-feed::-webkit-scrollbar{width:0;height:0}#chat-host .task-feed-tool{padding-left:var(--castle-space-large);color:var(--castle-text-muted);font-family:var(--castle-font-mono);white-space:pre-wrap;font-size:12px}#chat-host .task-feed-msg{margin:0}#chat-host .task-feed-msg>:first-child{margin-top:0}#chat-host .task-feed-msg>:last-child{margin-bottom:0}#chat-host .task-feed-msg p{margin:0}#chat-host .task-feed-msg code{font-family:var(--castle-font-mono);font-size:var(--castle-text-size-base)}#chat-host .task-page{min-height:0;margin-inline:calc(-1 * var(--operator-pad));flex-direction:column;flex:1 1 0;display:flex}#chat-host .task-page-header{padding:var(--castle-space-large) var(--operator-pad);border-bottom:1px solid var(--castle-border-1);flex:none}#chat-host .task-page-header .task-row{padding:0}#chat-host .task-page-header .tn{color:var(--castle-text-primary)}#chat-host .task-page-body{min-height:0;padding:var(--castle-space-large) var(--operator-pad);flex:1 1 0;overflow:auto}#chat-host .task-page-body .task-feed{max-height:none;margin-top:0;overflow:visible;-webkit-mask-image:none;mask-image:none}#chat-host .task-page-body:not(.task-board-page) .task-notes{margin-top:var(--castle-space-large);padding-top:var(--castle-space-large);border-top:1px solid var(--castle-border-1)}#chat-host .task-page-body:not(.task-board-page) .task-notes:first-child{border-top:0;margin-top:0;padding-top:0}#chat-host .task-report-label{margin:0 0 var(--castle-space-small);color:var(--castle-text-primary);font-weight:700}#chat-host .task-page-empty{color:var(--castle-text-muted);margin:0}#chat-host .task-board-page{min-height:0;margin-inline:calc(-1 * var(--operator-pad));padding:var(--castle-space-large) var(--operator-pad);flex-direction:column;flex:1 1 0;display:flex;overflow:auto}#chat-host .task-archive{margin-top:var(--castle-space-base);padding-top:var(--castle-space-large);border-top:1px solid var(--castle-border-1)}#chat-host .task-archive:first-child{border-top:0;margin-top:0;padding-top:0}#chat-host .task-archive-heading{margin:0 0 var(--castle-space-large);color:var(--castle-text-muted)}#chat-host .operator-composer{flex-direction:column;flex:0 auto;min-height:0;max-height:50%;display:flex;overflow:auto}.chat-input{padding:0 var(--operator-pad) var(--operator-pad);flex:none;position:relative}#chat-host .chat-input .ta{width:100%;min-height:60px;padding:var(--castle-space-base) var(--castle-space-small);border:1px solid var(--castle-border-1);border-radius:var(--castle-radius-base);background:var(--castle-surface-2);cursor:text;flex-direction:column;display:flex;overflow:hidden}#chat-input{width:100%;min-height:21px;max-height:120px;padding:0 var(--castle-space-base);color:var(--castle-text-primary);font:inherit;font-size:var(--castle-text-size-base);resize:none;scrollbar-width:none;-ms-overflow-style:none;background:0 0;border:none;outline:none;line-height:1.5;display:block;overflow-y:auto}#chat-input::-webkit-scrollbar{width:0;height:0}#chat-input::placeholder{color:var(--castle-text-muted)}#chat-host .chat-input .ta-bottom{justify-content:space-between;align-items:center;gap:var(--castle-space-base);min-width:0;display:flex}#chat-host .composer-settings{flex:auto;min-width:0}#chat-host .composer-settings .button{min-width:0;max-width:100%;font-size:var(--castle-text-size-small);justify-content:flex-start}#chat-host .composer-settings .operator-usage-warn,#chat-host .composer-settings .operator-usage-warn:hover,#chat-host .composer-settings .operator-usage-warn[aria-pressed=true]{color:var(--castle-warn-text)}#chat-host .composer-settings .operator-usage-blocked,#chat-host .composer-settings .operator-usage-blocked:hover,#chat-host .composer-settings .operator-usage-blocked[aria-pressed=true]{color:var(--castle-danger-text)}#chat-host .queue-row .button,#chat-host .ta-bottom .button-icon{flex-shrink:0}#chat-host .composer-action{margin-right:var(--castle-space-small)}#chat-pending{gap:var(--castle-space-base);padding:0 var(--operator-pad) var(--castle-space-base);flex:none;display:flex}#chat-pending .operator-thumb{object-fit:cover;border:1px solid var(--castle-border-1);border-radius:var(--castle-radius-small);cursor:pointer;width:64px;height:44px;margin:0;display:block}#chat-host .chat-input .chat-queue{gap:var(--castle-space-small);margin-bottom:var(--castle-space-base);flex-direction:column;display:flex}#chat-host .chat-input .queue-row{align-items:center;gap:var(--castle-space-base);padding:var(--castle-space-base) var(--castle-space-base) var(--castle-space-base) var(--castle-space-large);border:1px dashed var(--castle-border-1);border-radius:var(--castle-radius-base);background:var(--castle-surface-1);color:var(--castle-text-muted);font-size:var(--castle-text-size-base);display:flex}#chat-host .chat-input .queue-snippet{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}#chat-host .picker{gap:var(--castle-space-large);width:100%;padding:var(--castle-space-large);border:1px solid var(--castle-border-1);border-radius:var(--castle-radius-base);background:var(--castle-surface-3);flex-direction:column;align-self:stretch;margin:0;display:flex}#chat-host .picker-q{border:none;min-width:0;margin:0;padding:0}#chat-host .picker-q-label{margin:0 0 var(--castle-space-base);color:var(--castle-text-primary);font-size:var(--castle-text-size-base);font-weight:inherit;padding:0}#chat-host .picker-options{gap:var(--castle-space-small);flex-direction:column;display:flex}#chat-host .picker-option{align-items:center;gap:var(--castle-space-base);padding:var(--castle-space-small) var(--castle-space-base);border-radius:var(--castle-radius-small);color:var(--castle-text-secondary);cursor:pointer;display:flex}#chat-host .picker-option input{appearance:none;border:1px solid var(--castle-border-2);border-radius:var(--castle-radius-small);background:var(--castle-surface-3);width:12px;height:12px;cursor:inherit;flex:none;place-content:center;margin:0;display:grid}#chat-host .picker-option input[type=radio]{border-radius:var(--castle-radius-pill)}#chat-host .picker-option input:checked{border-color:var(--castle-surface-light);background:var(--castle-surface-light)}#chat-host .picker-option input:before{content:"";display:block}#chat-host .picker-option input[type=radio]:checked:before{border-radius:var(--castle-radius-pill);background:var(--castle-text-dark);width:4px;height:4px}#chat-host .picker-option input[type=checkbox]:checked:before{border-left:1.5px solid var(--castle-text-dark);border-bottom:1.5px solid var(--castle-text-dark);width:6px;height:3px;margin-top:-2px;transform:rotate(-45deg)}#chat-host .picker:not(.picker-locked) .picker-option:hover,#chat-host .picker-option.is-checked{background:var(--castle-surface-5);color:var(--castle-text-primary)}#chat-host .picker-option:has(input:checked){background:var(--castle-surface-5);color:var(--castle-text-primary)}#chat-host .picker-locked{opacity:.72}#chat-host .picker-locked .picker-option{cursor:default}#chat-host .picker-actions{justify-content:flex-end;display:flex}#chat-host .chips{justify-content:flex-end;align-self:flex-end;gap:var(--castle-space-base);max-width:85%;margin:var(--castle-space-small) 0 var(--castle-space-small);flex-wrap:wrap;display:flex}#chat-host .chip{padding:var(--castle-space-base) var(--castle-space-large);border:1px dotted var(--castle-surface-light);border-radius:var(--castle-radius-pill);color:var(--castle-surface-light);font:inherit;font-size:var(--castle-text-size-base);text-align:left;cursor:pointer;background:0 0;line-height:1.3}#chat-host .chips-inert .chip{border-color:var(--castle-text-dim);color:var(--castle-text-muted);cursor:default}#chat-host .chip.is-picked,#chat-host .chips-inert .chip.is-picked{border-style:solid;border-color:var(--castle-surface-light);background:var(--castle-surface-light);color:var(--castle-text-dark)}#chat-host .msg-file{color:inherit;font:inherit;text-underline-offset:2px;text-decoration:underline;-webkit-text-decoration-color:color-mix(in srgb, currentColor 40%, transparent);text-decoration-color:color-mix(in srgb, currentColor 40%, transparent);cursor:pointer;word-break:break-all;background:0 0;border:0;margin:0;padding:0;display:inline}#chat-host .msg-file:hover{text-decoration-color:currentColor}#chat-host .picker-skeleton{pointer-events:none}#chat-host .picker-skeleton-hint{color:var(--castle-text-muted);font-size:var(--castle-text-size-base)}#chat-host .picker-skeleton-line,#chat-host .picker-skeleton-chip{border-radius:var(--castle-radius-small);background:var(--castle-border-1);display:block}#chat-host .picker-skeleton-label{width:60%;height:11px;margin-bottom:var(--castle-space-base)}#chat-host .picker-skeleton-chip{height:24px}.xterm,.xterm-viewport,.xterm-screen,.xterm-helpers{background-color:#0000!important}.xterm{overscroll-behavior:contain}.xterm-viewport{overscroll-behavior:contain;scrollbar-width:none;-ms-overflow-style:none}.xterm-viewport::-webkit-scrollbar{width:0;height:0}.xterm .xterm-scrollable-element>.scrollbar,.xterm .xterm-scrollable-element>.scrollbar.visible,.xterm .xterm-scrollable-element>.visible.scrollbar,.xterm .xterm-scrollable-element>.invisible.scrollbar,.xterm .xterm-scrollable-element>.xterm-scrollbar{opacity:0!important;pointer-events:none!important;width:0!important;min-width:0!important;height:0!important;min-height:0!important;display:none!important}.xterm .xterm-scrollable-element>.scrollbar>.slider,.xterm .xterm-scrollable-element>.scrollbar>.scra,.xterm .xterm-scrollable-element>.xterm-scrollbar>.xterm-slider{width:0!important;height:0!important;display:none!important}.xterm .xterm-scrollable-element>.shadow{display:none!important}.quick-open-backdrop{z-index:2147483100;justify-content:center;align-items:flex-start;padding-top:12vh;display:flex;position:fixed;inset:0}.quick-open{background:#232323;border:1px solid #3a3a3a;border-radius:8px;flex-direction:column;width:min(600px,90vw);max-height:60vh;display:flex;overflow:hidden;box-shadow:0 16px 48px #0009}.quick-open-input{color:#f0f0f0;background:#161616;border:1px solid #4a4a4a;border-radius:5px;outline:none;flex:none;margin:8px;padding:8px 10px;font-size:14px}.quick-open-input:focus{border-color:#5a8bd6}.quick-open-list{flex:auto;padding:4px;overflow-y:auto}.quick-open-item{color:#e6e6e6;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:4px;align-items:baseline;gap:8px;width:100%;padding:5px 8px;font-size:13px;display:flex}.quick-open-item.active{background:#37506f}.quick-open-name{white-space:nowrap;flex:none}.quick-open-dir{text-overflow:ellipsis;white-space:nowrap;color:#8a8a8a;flex:auto;min-width:0;font-size:12px;overflow:hidden}.quick-open-empty{color:#8a8a8a;text-align:center;padding:12px;font-size:13px}.quick-open-keys{color:#b0b0b0;white-space:nowrap;border:1px solid #4a4a4a;border-radius:4px;flex:none;margin-left:8px;padding:1px 6px;font-family:SFMono-Regular,Consolas,monospace;font-size:11px}.mention-picker{z-index:2147483100;background:#232323;border:1px solid #3a3a3a;border-radius:8px;width:min(360px,90vw);max-height:40vh;padding:4px;position:fixed;overflow-y:auto;box-shadow:0 16px 48px #0009}.mention-item{color:#e6e6e6;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:4px;align-items:baseline;gap:8px;width:100%;padding:5px 8px;font-size:13px;display:flex}.mention-item.active{background:#37506f}.mention-name{white-space:nowrap;flex:none}.mention-dir{text-overflow:ellipsis;white-space:nowrap;color:#8a8a8a;flex:auto;min-width:0;font-size:12px;overflow:hidden}.chord-hint{z-index:2147483200;color:#c7c7c7;background:#232323;border:1px solid #3a3a3a;border-radius:8px;align-items:center;gap:8px;padding:6px 12px;font-size:12px;display:flex;position:fixed;bottom:24px;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #0000008c}.chord-hint kbd{color:#f0f0f0;background:#333;border:1px solid #4a4a4a;border-radius:4px;padding:2px 7px;font-family:SFMono-Regular,Consolas,monospace;font-size:12px}@media (pointer:coarse){input,textarea,select,[contenteditable]:not(.cm-content){font-size:16px!important}}.cm-url,.cm-md-link{color:var(--v2-link,#82aaff);text-underline-offset:2px;cursor:pointer;text-decoration:underline;text-decoration-thickness:1px}.cm-url:hover,.cm-md-link:hover{color:var(--v2-white,#fff)}._fieldRow_xvmu9_4{grid-template-columns:minmax(82px,.5fr) minmax(0,1fr);align-items:center;gap:12px;min-height:28px;margin-bottom:0;padding-bottom:12px;display:grid}._fieldRow_xvmu9_4:last-child{margin-bottom:0}._fieldLabel_xvmu9_18{color:var(--castle-inspector-text);text-overflow:ellipsis;font-size:14px;overflow:hidden}._fieldLabelOverridden_xvmu9_27{color:var(--castle-override)}._fieldRowOverridden_xvmu9_31{--field-border:var(--castle-override-border)}._fieldOverride_xvmu9_38{padding-bottom:12px}._fieldOverride_xvmu9_38 ._fieldRow_xvmu9_4{padding-bottom:4px}._fieldNote_xvmu9_49{grid-template-columns:minmax(82px,.5fr) minmax(0,1fr);gap:12px;margin-top:-6px;padding-bottom:12px;display:grid}._fieldNoteInner_xvmu9_57{min-width:0;color:var(--castle-inspector-muted);grid-column:2;font-size:12px;line-height:1.35}._fieldDefault_xvmu9_65{grid-template-columns:minmax(82px,.5fr) minmax(0,1fr);gap:12px;display:grid}._fieldDefaultInner_xvmu9_71{min-width:0;color:var(--castle-inspector-muted);grid-column:2;align-items:center;gap:8px;font-size:12px;display:flex}._fieldDefaultInner_xvmu9_71>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._fieldResetBtn_xvmu9_88{color:var(--castle-override);cursor:pointer;background:0 0;border:0;margin-left:auto;padding:0;font-size:12px}._fieldResetBtn_xvmu9_88:hover{color:var(--castle-inspector-text)}._input_xvmu9_31{border:1px solid var(--field-border,var(--castle-inspector-border));border-radius:var(--castle-radius);background:var(--castle-inspector-input-bg);width:100%;color:var(--castle-inspector-text);font:inherit;outline:0;padding:5px 8px}._numberField_xvmu9_113{width:100%;position:relative}._numberInput_xvmu9_118{appearance:textfield}._numberInput_xvmu9_118::-webkit-inner-spin-button{appearance:none;margin:0}._numberInput_xvmu9_118::-webkit-outer-spin-button{appearance:none;margin:0}._numberScrub_xvmu9_134{cursor:ew-resize;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;padding:5px 8px;display:flex;position:relative;overflow:hidden}._numberSlider_xvmu9_146{cursor:pointer}._numberValue_xvmu9_150{z-index:1;text-align:right;font-variant-numeric:tabular-nums;flex:auto;min-width:0;position:relative}._scrubGrip_xvmu9_159{z-index:1;color:var(--castle-inspector-muted);letter-spacing:-2px;opacity:.4;flex:none;font-size:12px;line-height:1;position:relative}._scrubBubble_xvmu9_172{z-index:1001;border:1px solid var(--castle-inspector-border);color:var(--castle-inspector-text);font-variant-numeric:tabular-nums;pointer-events:none;background:#14181ef5;border-radius:8px;padding:3px 10px;font-size:15px;position:fixed;transform:translate(-50%,-100%);box-shadow:0 2px 10px #00000073}._sliderFill_xvmu9_187{pointer-events:none;z-index:0;background:#5a8cd24d;position:absolute;top:0;bottom:0;left:0}._sliderThumb_xvmu9_197{pointer-events:none;z-index:1;background:#96bef0f2;border-radius:2px;width:3px;height:60%;position:absolute;top:50%;transform:translate(-50%,-50%)}._numpadBackdrop_xvmu9_210{z-index:1000;background:#00000059;flex-direction:column;justify-content:flex-end;display:flex;position:fixed;inset:0}._numpadSheet_xvmu9_220{background:var(--castle-inspector-bg,#16181d);border-top:1px solid var(--castle-inspector-border);padding:10px 10px calc(10px + env(safe-area-inset-bottom,0px));border-radius:14px 14px 0 0;box-shadow:0 -8px 24px #0006}._numpadValueRow_xvmu9_228{justify-content:space-between;align-items:baseline;gap:12px;padding:6px 8px 12px;display:flex}._numpadValueLabel_xvmu9_239{color:var(--castle-inspector-text);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:22px;overflow:hidden}._numpadValueNum_xvmu9_248{color:var(--castle-inspector-text);font-variant-numeric:tabular-nums;flex:none;font-size:22px}._numpadGrid_xvmu9_255{grid-template-columns:repeat(4,1fr);gap:8px;display:grid}._numpadKey_xvmu9_261{border:1px solid var(--castle-inspector-border);background:var(--castle-inspector-input-bg);height:52px;color:var(--castle-inspector-text);cursor:pointer;touch-action:manipulation;border-radius:10px;font-size:20px}._numpadKey_xvmu9_261:active{background:var(--castle-inspector-divider)}._numpadKeyZero_xvmu9_276{grid-column:span 3}._numpadKeyDone_xvmu9_280{color:#fff;background:#5a8cd2e6;border-color:#0000;font-size:16px}._colorInput_xvmu9_287{border:1px solid var(--field-border,var(--castle-inspector-border));border-radius:var(--castle-radius);background:var(--castle-inspector-input-bg);cursor:pointer;outline:0;width:100%;height:28px;padding:2px}._checkbox_xvmu9_298{border:1px solid var(--field-border,var(--castle-inspector-border));border-radius:var(--castle-radius);background:var(--castle-inspector-input-bg);cursor:pointer;width:20px;height:20px;box-shadow:none;color:var(--castle-text);flex:none;justify-content:center;justify-self:end;align-items:center;padding:0;display:flex}._checkboxOn_xvmu9_315{background:var(--castle-black)}._checkboxMark_xvmu9_319{width:12px;height:12px;display:none}._checkboxOn_xvmu9_315 ._checkboxMark_xvmu9_319{display:block}.castle-file-panel,.castle-code-panel,.castle-params-panel,.castle-params-overlay,.flow-class-files{--castle-font-mono:"SFMono-Regular", Consolas, "Liberation Mono", monospace;--castle-black:var(--v2-ink);--castle-panel-raised:var(--v2-raised);--castle-border:#444;--castle-text:var(--v2-white);--castle-text-dim:var(--v2-muted);--castle-inspector-bg:var(--v2-surface);--castle-inspector-text:var(--v2-fg);--castle-inspector-muted:var(--v2-muted);--castle-inspector-border:var(--v2-border);--castle-inspector-divider:var(--v2-border);--castle-inspector-input-bg:var(--v2-raised);--castle-workspace-bg:var(--v2-surface);--castle-sheet-bg:var(--v2-surface);--castle-radius:4px}.castle-file-panel{background:var(--castle-sheet-bg);flex-direction:column;height:100%;display:flex;overflow:hidden;transform:translateZ(0)}.castle-file-panel>.fileBrowserBare{flex:1 1 0;height:auto;min-height:0}.castle-file-toolbar{border-bottom:1px solid var(--castle-inspector-border);flex-wrap:wrap;flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.castle-file-toolbar .button-icon{margin-left:auto}.castle-file-toolbar .button-icon+.button-icon{margin-left:0}.castle-file-toolbar.versions-toolbar{padding-left:var(--castle-space-large);justify-content:space-between}.versions-toolbar-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--castle-text-muted);line-height:1;overflow:hidden}.castle-versions{flex-direction:column;flex:1 1 0;min-height:0;display:flex}.versions-error{align-items:flex-start}.versions-error>span:not(.icon-cell){white-space:pre-line}.versions-save{align-items:center;gap:var(--castle-space-base);flex-wrap:wrap;padding:0;display:flex}.versions-save .text-field{flex:130px;width:auto;min-width:0}.versions-save .button{white-space:nowrap;flex:none}.versions-note{padding:var(--castle-space-large) var(--castle-space-large) 0;color:var(--castle-text-muted);font-size:var(--castle-text-size-base)}.versions-empty{padding:var(--castle-space-large);color:var(--castle-text-muted);font-size:var(--castle-text-size-base)}.castle-versions-list{flex:1 1 0;min-height:0;overflow-y:auto}.version{align-items:start;column-gap:var(--castle-space-base);padding:var(--castle-space-base) var(--castle-space-base) var(--castle-space-large);border-bottom:1px solid var(--castle-border-1);grid-template-columns:minmax(0,1fr) auto;display:grid}.version-toggle{grid-template-columns:var(--castle-button-height) minmax(0, 1fr);align-items:start;column-gap:var(--castle-space-base);min-width:0;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;grid-area:1/1/auto/-1;margin:0;padding:0;display:grid}.version.is-expanded:not(.version-new) .version-toggle{grid-column:1}.version-toggle:focus-visible{outline:1px solid var(--castle-border-2);outline-offset:2px}.version.later,.version.later .icon-cell,.version.later .version-message,.version.later .version-nomessage,.version.later .version-meta,.version.later .version-summary{color:var(--castle-text-dim)}.version:hover{background:var(--castle-surface-3)}.version-main{gap:var(--castle-space-small);flex-direction:column;min-width:0;display:flex}.version-heading{align-items:center;gap:var(--castle-space-base);min-width:0;min-height:var(--castle-button-height);display:flex}.version-message{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--castle-text-primary);font-size:var(--castle-text-size-base);flex:auto;overflow:hidden}.version-nomessage{color:var(--castle-text-muted);font-style:italic}.version-meta{color:var(--castle-text-muted);font-size:var(--castle-text-size-small);margin:0;display:block}.version-actions{min-height:var(--castle-button-height);flex:none;grid-area:1/2;align-items:center;display:none}.version.is-expanded .version-actions{display:flex}.version-detail{padding-left:calc(var(--castle-button-height) + var(--castle-space-base));grid-column:1/-1;display:none}.version-new{flex:none}.version.is-expanded .version-detail{gap:var(--castle-space-small);flex-direction:column;display:flex}.version-summary{color:var(--castle-text-secondary);font-size:var(--castle-text-size-base);overflow-wrap:anywhere;margin:0}.files-feedback-banner{flex:none}.fileEditInput{border:1px solid var(--castle-border);background:var(--castle-inspector-input-bg);min-width:0;color:var(--castle-inspector-text);font:inherit;border-radius:3px;flex:auto;padding:1px 4px;font-size:13px}.fileEditInput:focus{border-color:#5a8bd6;outline:none}.castle-file-menu{z-index:1000;min-width:168px;position:fixed}.castle-file-menu .menu-keys{font-family:SFMono-Regular,Consolas,monospace}.castle-file-picker{gap:var(--castle-space-small);flex-direction:column;min-width:180px;display:flex}.castle-file-picker .text-field{width:100%}.castle-file-picker-label{color:var(--castle-text-muted);margin:0}.castle-file-picker-list{gap:var(--castle-space-small);flex-direction:column;max-height:min(40vh,180px);display:flex;overflow-y:auto}.castle-file-picker-list[hidden]{display:none}.fileBrowserBare{flex-direction:column;min-width:0;height:100%;display:flex}.fileTree{min-height:0;padding:var(--castle-space-base);flex:1 1 0;overflow-y:auto}.fileBranch{min-width:0}.file-row,.file-row.folder-row{align-items:center;gap:var(--castle-space-base);width:100%;min-width:0;height:var(--castle-button-height);margin:0 0 var(--castle-space-small);padding:0 var(--castle-space-base);padding-left:calc(var(--castle-space-base) + var(--file-depth,0) * (var(--castle-button-icon-size) + var(--castle-space-base)));border-radius:var(--castle-radius-small);color:var(--castle-text-secondary);font-size:var(--castle-text-size-base);text-align:left;cursor:pointer;background:0 0;border:0;line-height:1;display:flex}.file-row.folder-row{color:var(--castle-text-muted)}.file-row>span:not(.icon-slot):not(.icon-inline):not(.icon-cell){text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.file-row:hover{background:var(--castle-surface-3);color:var(--castle-text-primary)}.file-row.imported-row{color:var(--castle-text-muted);font-style:italic}.file-row.forked-row{color:var(--castle-text-secondary);font-style:normal}.file-row.selected-row,.file-row.selected-row:hover{background:var(--castle-surface-4);color:var(--castle-text-primary)}.file-row.hidden-row{color:var(--castle-text-dim)}:is(.file-row:has(.button-icon),.file-row:has(.icon-cell)){padding-right:0}.file-row .button-icon,.file-row .icon-cell{margin-left:auto}.file-row.edit-row{height:auto;min-height:var(--castle-button-height);cursor:default;flex-wrap:wrap}.file-row.edit-row .text-field{flex:auto;width:auto}.file-suffix{color:var(--castle-text-muted);flex:none}.file-row .file-edit-feedback{padding-left:calc(var(--castle-button-icon-size) + var(--castle-space-base));padding-bottom:var(--castle-space-small);font-size:var(--castle-text-size-small);white-space:normal;flex:1 0 100%;line-height:1.45;overflow:visible}.flow-root.is-mobile .castle-file-panel,.flow-mobile-switch{--castle-button-height:var(--castle-button-height-large)}.flow-mobile-switch{--castle-text-size-small:14px;--castle-text-size-base:16px;--castle-text-style-smallcaps-size:var(--castle-text-size-small)}.flow-root.is-mobile .castle-file-panel .button:not(.button-icon){padding-left:var(--castle-space-large);padding-right:var(--castle-space-large)}.flow-root.is-mobile .file-row,.flow-mobile-switch .file-row{margin-bottom:0}.flow-root.is-mobile .file-row>span:not(.icon-slot):not(.icon-inline):not(.icon-cell),.flow-mobile-switch .file-row>span:not(.icon-slot):not(.icon-inline):not(.icon-cell){line-height:var(--castle-button-height)}.flow-root.is-mobile .file-row:hover,.flow-mobile-switch .file-row:hover{color:var(--castle-text-secondary);background:0 0}.flow-root.is-mobile .file-row.folder-row:hover,.flow-root.is-mobile .file-row.imported-row:hover,.flow-mobile-switch .file-row.folder-row:hover,.flow-mobile-switch .file-row.imported-row:hover{color:var(--castle-text-muted)}.flow-root.is-mobile .file-row.hidden-row:hover,.flow-mobile-switch .file-row.hidden-row:hover{color:var(--castle-text-dim)}.flow-root.is-mobile .file-row.selected-row:hover,.flow-mobile-switch .file-row.selected-row:hover{background:var(--castle-surface-4);color:var(--castle-text-primary)}.flow-root.is-mobile .version:hover{background:0 0}.castle-code-panel{flex-direction:column;width:100%;height:100%;display:flex;position:relative}.mainEditor{background:var(--castle-sheet-bg);flex-direction:column;flex:1 1 0;width:100%;min-width:0;height:100%;min-height:0;display:flex}.editorBody{flex:1;min-height:0;display:flex;overflow:hidden;container:editor/inline-size}.codeEditor{background:var(--castle-workspace-bg);flex:1;grid-template-columns:1fr;min-width:0;min-height:0;display:grid}.codeMirrorHost{min-width:0;height:100%;min-height:0}.castle-code-overlay{color:var(--castle-inspector-muted);pointer-events:none;font-size:12px;position:absolute;top:10px;left:12px}.castle-code-overlay.castle-code-error{color:var(--v2-error)}.castle-code-savebar{background:var(--v2-error-bg);color:var(--v2-error);padding:4px 10px;font-size:11px;position:absolute;bottom:0;left:0;right:0}.castle-tab-import{color:var(--v2-muted);font-style:italic}.castle-modal-scrim{z-index:1000;background:#00000080;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.castle-modal{color:#e8e8e8;background:#232323;border:1px solid #3a3a3a;border-radius:6px;min-width:260px;max-width:380px;padding:16px;font-size:13px;box-shadow:0 8px 24px #0000008c}.castle-modal-text{margin-bottom:14px}.castle-modal-actions{justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.castle-modal-actions button,.castle-import-link-row button{color:#e8e8e8;cursor:pointer;background:#2e2e2e;border:1px solid #3a3a3a;border-radius:4px;padding:5px 12px;font-size:12px}.castle-modal-actions button:hover:not(:disabled),.castle-import-link-row button:hover:not(:disabled){background:#383838}.castle-modal-actions button:disabled,.castle-import-link-row button:disabled{opacity:.6;cursor:default}.castle-upload-modal{flex-direction:column;gap:10px;width:min(460px,100vw - 24px);max-width:none;max-height:calc(100vh - 32px);display:flex;overflow-y:auto}.castle-upload-modal>.castle-modal-text{margin-bottom:0}.castle-upload-modal>.castle-file-picker{width:100%;min-width:0}.castle-upload-input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.castle-upload-drop{justify-content:center;align-items:center;gap:var(--castle-space-small);width:100%;padding:calc(var(--castle-space-large) + var(--castle-space-base)) var(--castle-space-large);border:1px dashed var(--castle-border-3);border-radius:var(--castle-radius-small);background:var(--castle-surface-3);color:var(--castle-text-primary);font:inherit;cursor:pointer;flex-direction:column;display:flex}.castle-upload-drop:hover,.castle-upload-drop.over{border-color:var(--castle-border-2);background:var(--castle-surface-5)}.castle-upload-drop svg{font-size:var(--castle-button-icon-size)}.castle-upload-drop-label{font-size:var(--castle-text-size-base)}.castle-upload-drop-hint{color:var(--castle-text-muted);font-size:var(--castle-text-size-small)}.castle-upload-picked{flex-direction:column;max-height:132px;display:flex;overflow-y:auto}.castle-upload-picked-row{align-items:center;gap:var(--castle-space-base);min-height:var(--castle-button-height);padding:var(--castle-space-small) 0;display:flex}.castle-upload-picked-row+.castle-upload-picked-row{border-top:1px solid var(--castle-border-1)}.castle-upload-picked-name{min-width:0;font-size:var(--castle-text-size-base);flex-direction:column;flex:auto;justify-content:center;display:flex}.castle-upload-picked-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.castle-upload-picked-name .text-field{width:100%}.castle-upload-picked-warning{color:var(--castle-warn-text);font-size:var(--castle-text-size-small);white-space:normal;margin-top:2px;display:block}.castle-upload-picked-size{color:var(--castle-text-muted);font-size:var(--castle-text-size-small);font-variant-numeric:tabular-nums;flex:none}.castle-upload-status{text-overflow:ellipsis;white-space:nowrap;opacity:.7;text-align:left;flex:auto;min-width:0;font-size:12px;overflow:hidden}@media (width<=520px){.castle-upload-modal{width:calc(100vw - 16px);min-width:0;padding:12px}.castle-upload-drop{padding:var(--castle-space-large) var(--castle-space-base)}.castle-upload-picked{max-height:104px}.castle-file-picker-list{max-height:132px}}.castle-import-modal{flex-direction:column;width:min(520px,100vw - 32px);max-width:none;height:min(560px,100vh - 64px);max-height:none;display:flex}.castle-import-modal>.castle-modal-text,.castle-import-modal>.castle-key-tabs,.castle-import-modal>.castle-import-select-bar,.castle-import-modal>.castle-import-filter,.castle-import-modal>.castle-import-note,.castle-import-modal>.castle-import-error,.castle-import-modal>.castle-modal-actions{flex:none}.castle-import-select-bar{align-items:center;gap:10px;margin-bottom:8px;display:flex}.castle-import-select-all{padding:4px 8px}.castle-import-update-row{align-items:center}.castle-import-tick{color:#1b1b1b;border:1px solid #5a5a5a;border-radius:3px;flex:none;justify-content:center;align-items:center;width:16px;height:16px;font-size:10px;display:flex}.castle-import-tick.checked{background:#8ab4f8;border-color:#8ab4f8}.castle-import-filter{margin-bottom:8px}.castle-import-empty{color:#9a9a9a;text-align:center;flex:auto;justify-content:center;align-items:center;min-height:0;padding:10px;font-size:11px;display:flex}.castle-import-tabs .castle-key-tab{min-height:34px}.castle-import-list{background:#1b1b1b;border:1px solid #3a3a3a;border-radius:4px;flex:auto;min-height:0;overflow-y:auto}.castle-import-row{color:#e8e8e8;width:100%;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-bottom:1px solid #2e2e2e;gap:10px;padding:8px;font-size:12px;display:flex}.castle-import-row:last-child{border-bottom:0}.castle-import-row:hover{background:#262626}.castle-import-row.selected{background:#3a3a3a}.castle-import-row.disabled{opacity:.5}.castle-import-thumb{object-fit:cover;background:#2e2e2e;border-radius:3px;flex:none;width:56px;height:79px}.castle-import-row-text{flex-direction:column;gap:3px;min-width:0;display:flex}.castle-import-row-title{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.castle-import-row-meta{color:#9a9a9a;font-size:11px}.castle-import-link{flex-direction:column;flex:auto;gap:8px;min-height:0;display:flex}.castle-import-link-row{gap:8px;display:flex}.castle-import-link-row button{white-space:nowrap}.castle-import-note{color:#9a9a9a;padding:10px 2px;font-size:11px}.castle-import-error{color:#ff8f8f;margin-top:8px;font-size:11px}.castle-code-params-strip{border:0;border-bottom:1px solid var(--castle-inspector-border);background:var(--castle-inspector-input-bg);width:100%;color:var(--castle-inspector-muted);font:inherit;text-align:left;cursor:pointer;align-items:center;gap:8px;padding:6px 12px;font-size:12px;display:flex}.castle-code-params-strip:hover{color:var(--castle-inspector-text)}.castle-code-params-icon{flex:none;display:inline-flex}.castle-code-params-count{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.castle-code-params-action{color:var(--castle-inspector-text);flex:none;margin-left:auto}.castle-code-selection-bar{z-index:2;position:absolute;bottom:12px;right:12px}.castle-params-panel{background:var(--castle-sheet-bg);height:100%;color:var(--castle-inspector-text);-webkit-overflow-scrolling:touch;font-size:14px;overflow:hidden auto}.paramsFields{padding:10px 16px 24px}.paramsGroup+.paramsGroup{margin-top:6px}.paramsGroupTitle{color:var(--castle-inspector-muted);text-transform:uppercase;letter-spacing:.06em;margin:0 0 10px;font-size:12px}.paramsGroup+.paramsGroup>.paramsGroupTitle{border-top:1px solid var(--castle-inspector-divider);margin-top:10px;padding-top:10px}.paramsNotice{color:var(--castle-inspector-muted);padding:16px}.paramsSaveError{border-bottom:1px solid var(--castle-inspector-border);color:var(--castle-inspector-text);background:#be464629;padding:8px 16px;font-size:13px}.paramsScopeBar{z-index:2;border-bottom:1px solid var(--castle-inspector-border);background:var(--castle-sheet-bg);align-items:center;gap:8px;padding:6px 10px;display:flex;position:sticky;top:0}.paramsScopeButton{border:1px solid var(--castle-inspector-border);border-radius:var(--castle-radius);background:var(--castle-inspector-input-bg);min-width:0;color:var(--castle-inspector-text);font:inherit;cursor:pointer;align-items:center;gap:6px;padding:4px 8px;font-size:13px;display:flex}.paramsScopeIcon,.paramsScopeChevron{flex:none;display:inline-flex}.paramsScopeLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.paramsScopeSummary{color:var(--castle-inspector-muted);font-size:12px}.paramsScopeMenu{max-width:calc(100% - 16px);max-height:60vh;position:absolute;top:100%;left:8px;overflow-y:auto}.paramsScopeMenu .menu-item-label{text-overflow:ellipsis;white-space:nowrap;text-align:left;direction:rtl;overflow:hidden}.paramsScopeDivider{color:var(--castle-inspector-muted);text-transform:uppercase;letter-spacing:.06em;padding:6px 10px 4px;font-size:11px}.paramsScopeCount,.paramsFileCount{color:var(--castle-inspector-muted);font-variant-numeric:tabular-nums;flex:none;margin-left:auto;padding-left:10px;font-size:12px}.paramsFile+.paramsFile{border-top:1px solid var(--castle-inspector-divider)}.paramsFileHead{align-items:center;padding:0 6px 0 0;display:flex}.paramsFileHead~.paramsFields{padding-bottom:6px}.paramsFileToggle{min-width:0;color:var(--castle-inspector-text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:1;align-items:center;gap:6px;padding:8px 4px 8px 10px;font-size:12px;display:flex}.paramsFileChevron{color:var(--castle-inspector-muted);flex:none;display:inline-flex}.paramsFilePath{text-overflow:ellipsis;white-space:nowrap;text-align:left;min-width:0;font-family:var(--castle-font-mono);direction:rtl;overflow:hidden}.paramsFileOpen{border-radius:var(--castle-radius);color:var(--castle-inspector-muted);cursor:pointer;background:0 0;border:0;flex:none;padding:4px 6px;display:inline-flex}.paramsFileOpen:hover{color:var(--castle-inspector-text)}.paramsScopeBar .paramsFileOpen{margin-left:auto}.paramsEmpty{max-width:46em;padding:20px 16px}.paramsEmptyLead{color:var(--castle-inspector-text);margin:0 0 10px;font-size:15px}.paramsEmptyBody{color:var(--castle-inspector-muted);margin:0 0 12px;line-height:1.5}.paramsEmpty code{font-family:var(--castle-font-mono);color:var(--castle-inspector-text);font-size:13px}.paramsEmptyCode{border:1px solid var(--castle-inspector-border);border-radius:var(--castle-radius);background:var(--castle-inspector-input-bg);color:var(--castle-inspector-text);font-family:var(--castle-font-mono);margin:0 0 14px;padding:10px 12px;font-size:13px;line-height:1.45;overflow-x:auto}.castle-params-panel .paramExpr{text-overflow:ellipsis;white-space:nowrap;border:1px dashed var(--castle-inspector-border);border-radius:var(--castle-radius);min-width:0;color:var(--castle-inspector-muted);font-family:var(--castle-font-mono);cursor:default;padding:5px 8px;font-size:13px;overflow:hidden}.castle-params-panel [data-field-id].paramFieldRevealed{animation:1.4s ease-out paramFieldReveal}@keyframes paramFieldReveal{0%,60%{background:var(--castle-inspector-input-bg);box-shadow:0 0 0 4px var(--castle-inspector-input-bg)}to{background:0 0;box-shadow:0 0 0 4px #0000}}.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre;font-family:monospace}.xterm .xterm-accessibility-tree>div{transform-origin:0;width:fit-content}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;z-index:11;background:0 0;transition:opacity .1s linear}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{display:none;position:absolute}.xterm .xterm-scrollable-element>.shadow.top{width:100%;height:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset;display:block;top:0;left:3px}.xterm .xterm-scrollable-element>.shadow.left{width:3px;height:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset;display:block;top:3px;left:0}.xterm .xterm-scrollable-element>.shadow.top-left-corner{width:3px;height:3px;display:block;top:0;left:0}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}@font-face{font-family:Basteleur;src:url(/__castle/ide/assets/Basteleur-Bold-DKFKedNb.woff2)format("woff2"),url(/__castle/ide/assets/Basteleur-Bold-CK8LF7Pt.woff)format("woff");font-weight:700;font-style:normal}.flow-root{--flow-gutter:#000;--flow-surface:#181818;--flow-chip:#282828;--flow-font-display:"Basteleur", Georgia, "Times New Roman", serif;--flow-fg:#e6e6e6;--flow-secondary:#b3b3b3;--flow-muted:#888;--flow-dim:#525252;--flow-border:#2a2a2a;--flow-border-active:#5a5a5a;--flow-gap:12px;--flow-dock-h:36px;--flow-tab-h:var(--castle-panel-header-height);--flow-icon-dock:var(--castle-button-icon-size);--flow-btn-sm:var(--castle-button-height);--flow-host-l:0px;--flow-host-r:0px;--flow-max-chips:6;--flow-chip-size:36px;--flow-chips-w:calc(var(--flow-max-chips) * var(--flow-chip-size));--flow-fade:22px;background:var(--flow-gutter);color:var(--flow-fg);flex-direction:column;font:13px ui-sans-serif,system-ui,-apple-system,sans-serif;display:flex;position:fixed;inset:0;overflow:hidden}.flow-root *{box-sizing:border-box}body.flow-reordering,body.flow-reordering *{touch-action:none;-webkit-user-select:none!important;user-select:none!important;cursor:grabbing!important}.flow-topbar{top:var(--flow-gap);left:var(--flow-gap);right:var(--flow-gap);height:var(--flow-dock-h);align-items:center;gap:var(--castle-space-base);z-index:40;pointer-events:none;padding-left:var(--flow-host-l);padding-right:var(--flow-host-r);grid-template-columns:minmax(0,1fr) minmax(0,auto) minmax(0,1fr);display:grid;position:absolute}.flow-topbar-leading{justify-self:start;align-items:center;gap:var(--castle-space-base);pointer-events:none;min-width:0;display:flex}.flow-topbar-leading>*{pointer-events:auto}.flow-castle-wrap{flex-shrink:0;position:relative}.flow-menu-backdrop{z-index:49;position:fixed;inset:0}.flow-castle-menu{top:calc(var(--flow-dock-h) + var(--castle-space-base));z-index:50;position:absolute;left:0}.flow-menu-narrow{display:none}.flow-deck-identity{max-width:260px}.flow-deck-vis{color:var(--flow-secondary);flex-shrink:0;font-size:14px;display:inline-flex}.flow-deck-vis svg{width:14px;height:14px}.flow-deck-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.flow-deck-caret{color:var(--flow-muted);flex-shrink:0;display:inline-flex}.flow-draft-status{color:var(--flow-muted);font-size:var(--castle-text-size-small);white-space:nowrap;flex-shrink:0}.flow-draft-status.is-error{color:var(--castle-danger-text)}.flow-tabs-wrap{pointer-events:auto;justify-self:center;align-items:center;gap:var(--castle-space-base);min-width:0;max-width:100%;display:flex}.flow-tabs{min-width:0;max-width:var(--flow-chips-w);flex:0 auto;position:relative}.flow-tabs-scroll{scrollbar-width:none;align-items:stretch;gap:0;height:100%;padding:0;display:flex;overflow:auto hidden}.flow-tabs-scroll::-webkit-scrollbar{display:none}.flow-tabs.more-left{-webkit-mask-image:linear-gradient(to right, transparent, #000 var(--flow-fade));-webkit-mask-image:linear-gradient(to right, transparent, #000 var(--flow-fade));mask-image:linear-gradient(to right, transparent, #000 var(--flow-fade));border-top-left-radius:0;border-bottom-left-radius:0}.flow-tabs.more-right{-webkit-mask-image:linear-gradient(to left, transparent, #000 var(--flow-fade));-webkit-mask-image:linear-gradient(to left, transparent, #000 var(--flow-fade));mask-image:linear-gradient(to left, transparent, #000 var(--flow-fade));border-top-right-radius:0;border-bottom-right-radius:0}.flow-tabs.more-left.more-right{-webkit-mask-image:linear-gradient(to right, transparent, #000 var(--flow-fade), #000 calc(100% - var(--flow-fade)), transparent);-webkit-mask-image:linear-gradient(to right, transparent, #000 var(--flow-fade), #000 calc(100% - var(--flow-fade)), transparent);mask-image:linear-gradient(to right, transparent, #000 var(--flow-fade), #000 calc(100% - var(--flow-fade)), transparent)}.button.flow-tabs-add{width:var(--castle-button-height-large);height:var(--castle-button-height-large);border-radius:var(--castle-radius-base);flex-shrink:0}.flow-chip-icon{font-size:var(--flow-icon-dock);display:inline-flex}.flow-chip-icon svg{width:var(--flow-icon-dock);height:var(--flow-icon-dock)}.flow-topbar-trailing{justify-self:end;align-items:center;gap:var(--castle-space-base);pointer-events:none;min-width:0;display:flex}.flow-preview-btn{pointer-events:auto;flex-shrink:0}.flow-preview-btn-failed{color:var(--castle-danger-text);border-color:var(--castle-danger-text)}.flow-preview-label{justify-items:center;display:grid}.flow-preview-label>*{grid-area:1/1}.flow-preview-label-sizer{visibility:hidden;pointer-events:none}.flow-root.is-mobile{--flow-max-chips:4;--flow-gap:var(--castle-space-base);--castle-text-size-small:14px;--castle-text-size-base:16px;--castle-text-style-smallcaps-size:var(--castle-text-size-small);--flow-tab-h:var(--castle-panel-header-height-mobile);--flow-icon-dock:var(--castle-button-icon-size-large);--flow-btn-sm:var(--castle-button-height-large)}.flow-root.is-mobile .flow-deck-identity,.flow-root.is-mobile .flow-topbar-trailing{display:none}.flow-root.is-mobile .flow-topbar{grid-template-columns:auto minmax(0,1fr)}.flow-root.is-mobile .flow-tabs-wrap{justify-self:start}.flow-root.is-mobile .flow-topbar-leading:not(:has(.flow-castle-wrap)):not(:has(.flow-draft-status)){display:none}.flow-root.is-mobile .menu-item.flow-menu-narrow{display:flex}.flow-root.is-mobile .menu-separator.flow-menu-narrow{display:block}.flow-scroller{flex:auto;min-height:0;overflow:auto}.flow-field{width:max-content;min-width:100%;min-height:100%}.flow-row{align-items:flex-start;gap:var(--flow-gap);width:max-content;min-height:100%;padding:calc(var(--flow-dock-h) + var(--flow-gap) * 2) var(--flow-gap) var(--flow-gap);padding-right:calc(var(--flow-gap) + var(--flow-overscroll,0px));display:flex}.flow-group{flex-direction:column;min-width:200px;display:flex;overflow:clip}.flow-root.is-mobile .panel:hover,.flow-root.is-mobile .panel.is-hover,.flow-root.is-maximized .panel:hover,.flow-root.is-maximized .panel.is-hover{border-color:var(--castle-border-1)}.flow-root.is-mobile .panel-header:hover,.flow-root.is-mobile .panel-tabs-header:hover{background:var(--castle-surface-3);cursor:default}.operator-chrome{align-items:stretch;gap:var(--castle-space-base);flex:auto;min-width:0;display:flex}.operator-chrome .panel-type-toggle{flex-shrink:0}.flow-root.is-mobile .operator-chrome{display:contents}.flow-tab-icon{font-size:var(--flow-icon-dock);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.flow-drop-indicator{background:var(--castle-border-4);z-index:60;pointer-events:none;border-radius:2px;width:3px;position:fixed;transform:translate(-50%)}.flow-group.pinned{left:var(--flow-gap);z-index:5;position:sticky;box-shadow:0 6px 24px #00000073}.flow-panel-body{flex:auto;min-height:0;position:relative;overflow:hidden}.flow-panel-slot{width:100%;height:100%}.flow-resize-e{top:var(--flow-tab-h);cursor:col-resize;touch-action:none;z-index:20;width:16px;position:absolute;bottom:0;right:-8px}.flow-resize-s{cursor:row-resize;touch-action:none;z-index:20;height:16px;position:absolute;bottom:-8px;left:0;right:0}.flow-resize-se{cursor:nwse-resize;touch-action:none;z-index:21;width:22px;height:22px;position:absolute;bottom:-11px;right:-11px}.flow-placeholder{height:100%;color:var(--flow-muted);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:16px;display:flex}.flow-placeholder-icon :is(svg){width:34px;height:34px}.flow-placeholder-label{color:var(--flow-secondary);font-size:14px}.flow-placeholder-kind{color:var(--flow-muted);font:11px ui-monospace,SFMono-Regular,Menlo,monospace}.flow-placeholder.kind-play{background:repeating-linear-gradient(45deg,#101018,#101018 10px,#0d0d14 10px 20px)}.flow-picker{z-index:50;max-height:min(60vh,420px);position:fixed}.flow-picker-input{margin-bottom:var(--castle-space-base);color:var(--flow-fg);background:var(--flow-surface);border:1px solid var(--flow-border);border-radius:var(--castle-radius-small);outline:none;flex:none;padding:7px 9px;font:13px ui-sans-serif,system-ui,sans-serif}.flow-picker-input:focus{border-color:var(--flow-border-active)}.flow-picker-list{flex:auto;min-height:0;overflow-y:auto}.flow-picker-empty{color:var(--flow-muted);padding:10px 8px;font-size:12px}.flow-operator-host{width:100%;height:100%}.flow-root.is-maximized .flow-scroller{overflow:hidden}.flow-root.is-maximized .flow-field,.flow-root.is-maximized .flow-row{width:100%;height:100%}.flow-root.is-maximized .flow-row{align-items:stretch}.flow-group.maximized{width:100%;height:100%}.flow-group.hidden{display:none}.flow-root.is-mobile .flow-scroller{position:relative;overflow:clip}.flow-root.is-mobile .flow-field{inset:calc(var(--flow-dock-h) + var(--flow-gap) * 2) 0 var(--flow-gap);width:auto;min-width:0;height:auto;min-height:0;position:absolute;overflow:clip}.flow-root.is-mobile .flow-row{width:100%;height:100%;transform:translateX(calc(var(--flow-page,0) * -100% + var(--flow-drag,0px)));will-change:transform;flex-wrap:nowrap;align-items:stretch;gap:0;padding:0;transition:transform .28s cubic-bezier(.22,.61,.36,1);display:flex}.flow-root.is-mobile.flow-dragging .flow-row{transition:none}.flow-root.is-mobile .flow-group{flex:0 0 100%;min-width:0;margin:0}.flow-root.is-mobile .flow-resize-e,.flow-root.is-mobile .flow-resize-s,.flow-root.is-mobile .flow-resize-se{display:none}@media (prefers-reduced-motion:reduce){.flow-root.is-mobile .flow-row{transition:none}}.flow-push-modal-backdrop{z-index:1000;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);pointer-events:auto;background:#0000008c;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.flow-push-modal{border:1px solid var(--flow-border);text-align:center;background:#141414;border-radius:18px;flex-direction:column;align-items:center;gap:10px;width:min(360px,100%);padding:28px 24px;display:flex;box-shadow:0 20px 60px #0009}.flow-push-spinner{border:3px solid #ffffff26;border-top-color:var(--flow-fg);border-radius:50%;width:34px;height:34px;animation:.8s linear infinite flow-push-spin}@keyframes flow-push-spin{to{transform:rotate(360deg)}}.flow-push-check{color:#fff;background:#2e7d32;border-radius:50%;justify-content:center;align-items:center;width:34px;height:34px;font-size:20px;font-weight:700;display:flex}.flow-push-check-failed{background:var(--castle-danger-surface)}.flow-push-title{color:var(--flow-fg);font-size:16px;font-weight:600}.flow-push-sub{color:var(--flow-secondary);font-size:12px}.flow-push-url{overflow-wrap:anywhere;color:#7aa2ff;max-width:100%;font:13px ui-monospace,SFMono-Regular,Menlo,monospace;text-decoration:none}.flow-push-url:hover{text-decoration:underline}.flow-push-done{background:var(--flow-fg);color:var(--flow-gutter);cursor:pointer;border:none;border-radius:999px;margin-top:8px;padding:9px 24px;font-size:14px;font-weight:600}.flow-tabstrip{height:var(--flow-tab-h);-webkit-user-select:none;user-select:none;touch-action:none;flex-shrink:0}.flow-tabs-row{position:relative;overflow:hidden}.flow-tabs-row .panel-tab{flex:0 auto;min-width:0}.flow-tab-icon svg{width:var(--flow-icon-dock);height:var(--flow-icon-dock)}.flow-tabs-row .panel-tab-insert{z-index:3;height:auto;position:absolute;top:0;bottom:0}.panel-tab-ghost,.dock-segment-ghost{z-index:80;position:fixed}.flow-tabstrip .button{flex-shrink:0;align-self:center}.flow-tab-body{position:absolute;inset:0}.flow-tab-body.inactive{display:none}.flow-class-drawer{background:var(--castle-sheet-bg,var(--v2-surface));border-right:1px solid var(--flow-border);flex-direction:column;flex:none;width:220px;min-height:0;padding:2px 4px 6px;display:flex;overflow:hidden}.flow-class-files{flex:auto;min-height:0;overflow-y:auto}.flow-class-files .fileBrowserBare,.flow-class-files .fileTree{flex:none;height:auto;overflow:visible}.flow-class-recent{border-bottom:1px solid var(--castle-inspector-divider,var(--flow-border));margin-bottom:10px;padding-bottom:10px}.flow-class-section{color:var(--v2-muted,var(--flow-muted));padding:5px 9px;font-size:14px}.flow-class-drawer .flow-view-segments{margin:4px 2px 8px}.flow-class-drawer-empty{color:var(--flow-muted);padding:10px 8px;font-size:12px}.flow-empty-editor{flex:auto;height:100%;min-height:0;display:flex}.flow-empty-editor .flow-class-drawer{flex:0 0 220px}.flow-empty-editor-msg{color:var(--flow-muted);background:var(--castle-sheet-bg,var(--v2-surface));flex:auto;justify-content:center;align-items:center;font-size:13px;display:flex}.flow-tabstrip-mobile{cursor:default;grid-template-columns:1fr auto 1fr;align-items:center;display:grid}.flow-mobile-strip-left,.flow-mobile-strip-right{align-items:center;min-width:0;display:flex}.flow-mobile-strip-left{justify-content:flex-start}.flow-mobile-strip-right{justify-content:flex-end}.flow-tabstrip-mobile .panel-header-actions{margin-left:0}.panel-mobile-current .flow-tab-icon,.panel-mobile-current .flow-tab-icon svg{width:var(--castle-button-icon-size-large);height:var(--castle-button-icon-size-large)}.flow-mobile-chevron{width:var(--castle-button-icon-size-large);height:var(--castle-button-icon-size-large);opacity:.6;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.flow-mobile-chevron svg{width:var(--castle-button-icon-size-large);height:var(--castle-button-icon-size-large);display:block}.flow-mobile-switch-backdrop{z-index:900;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);pointer-events:auto;background:#0000008c;align-items:flex-end;display:flex;position:fixed;inset:0}.flow-mobile-switch{border-top:1px solid var(--flow-border);background:#141414;border-radius:16px 16px 0 0;flex-direction:column;width:100%;max-height:70vh;display:flex;overflow:hidden}.flow-mobile-switch-header{border-bottom:1px solid var(--flow-border);justify-content:space-between;align-items:center;padding:14px 16px;font-weight:600;display:flex}.flow-mobile-switch-close{color:var(--flow-secondary);cursor:pointer;background:0 0;border:none;font-size:22px;line-height:1}.flow-view-segments{background:var(--v2-inset,#0e0e0e);border-radius:8px;flex:none;gap:2px;margin:10px 16px 6px;padding:2px;display:flex}.flow-view-segment{color:var(--flow-secondary);font:inherit;cursor:pointer;background:0 0;border:none;border-radius:6px;flex:1 1 0;padding:7px 10px;font-size:13px;font-weight:600}.flow-view-segment.on{color:var(--flow-text,#eee);background:#282828}.flow-mobile-switch-list{background:var(--v2-surface,#141414);flex-direction:column;flex:auto;min-height:0;display:flex;overflow:hidden}.flow-mobile-switch-list .flow-class-files{padding:4px 6px 10px}
|
|
1
|
+
:root{--castle-font-body:baltomobile, Balto, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--castle-font-display:Basteleur, Georgia, "Times New Roman", serif;--castle-font-mono:ui-monospace, SFMono-Regular, Menlo, monospace;--castle-text-size-small:11px;--castle-text-size-base:13px;--castle-text-size-large:15px;--castle-text-style-smallcaps-size:var(--castle-text-size-small);--castle-text-style-smallcaps-letter-spacing:.05em;--castle-text-style-smallcaps-transform:uppercase;--castle-text-primary:#e6e6e6;--castle-text-secondary:#b3b3b3;--castle-text-muted:#888;--castle-text-dim:#525252;--castle-text-dark:#111;--castle-surface-1:#000;--castle-surface-2:#0c0c0c;--castle-surface-3:#181818;--castle-surface-4:#242424;--castle-surface-5:#303030;--castle-surface-6:#3c3c3c;--castle-surface-light:#e6e6e6;--castle-border-1:#2a2a2a;--castle-border-2:#6a6a6a;--castle-border-3:#3a3a3a;--castle-border-4:#e6e6e6;--castle-accent:#793a80;--castle-danger-text:#e86a73;--castle-danger-surface:#73172d;--castle-danger-surface-hover:#b4202a;--castle-warn-text:#e8b25a;--castle-warn-surface:#5a3d0a;--castle-space-small:3px;--castle-space-base:6px;--castle-space-large:12px;--castle-radius-small:4px;--castle-radius-base:8px;--castle-radius-large:16px;--castle-radius-pill:999px;--castle-button-height:24px;--castle-button-icon-size:16px;--castle-button-height-large:36px;--castle-button-icon-size-large:24px;--castle-icon-size-inline:12px;--castle-panel-header-height:36px;--castle-panel-header-height-mobile:48px}.text-style-smallcaps{font-size:var(--castle-text-style-smallcaps-size);letter-spacing:var(--castle-text-style-smallcaps-letter-spacing);text-transform:var(--castle-text-style-smallcaps-transform)}.icon-inline{flex:0 0 var(--castle-icon-size-inline);width:var(--castle-icon-size-inline);height:var(--castle-icon-size-inline);font-size:var(--castle-icon-size-inline)}.icon-slot{flex:0 0 var(--castle-button-icon-size);width:var(--castle-button-icon-size);height:var(--castle-button-icon-size);justify-content:center;align-items:center;display:flex}.icon-cell{flex:0 0 var(--castle-button-height);width:var(--castle-button-height);height:var(--castle-button-height);color:var(--castle-text-dim);pointer-events:none;justify-content:center;align-items:center;display:inline-flex}.icon-slot svg,.icon-slot iconify-icon,.icon-cell svg,.icon-cell iconify-icon{flex:0 0 var(--castle-button-icon-size);width:var(--castle-button-icon-size);height:var(--castle-button-icon-size);font-size:var(--castle-button-icon-size)}.button{justify-content:center;align-items:center;gap:var(--castle-space-base);max-width:100%;height:var(--castle-button-height);padding:0 var(--castle-space-base);border-radius:var(--castle-radius-small);background:var(--castle-surface-4);color:var(--castle-text-primary);font-family:var(--castle-font-body);font-size:var(--castle-text-size-base);white-space:nowrap;cursor:pointer;border:0;line-height:1.3;display:inline-flex}.button:not(.button-icon){min-width:0}.button>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.button:hover,.button.is-hover{background:var(--castle-surface-5)}.button:active,.button.is-pressed{background:var(--castle-surface-3)}.button:focus-visible,.button.is-focus{outline:1px solid var(--castle-border-2);outline-offset:2px}.button[aria-pressed=true],.button[aria-pressed=true]:hover,.button[aria-pressed=true]:active{background:var(--castle-surface-light);color:var(--castle-text-dark)}.button:disabled{opacity:.4;cursor:default}.button-icon{width:var(--castle-button-height);padding:0}.button-icon-large{width:var(--castle-button-height-large);height:var(--castle-button-height-large)}.button-danger{background:var(--castle-danger-surface);color:var(--castle-text-primary)}.button-danger:hover,.button-danger.is-hover{background:var(--castle-danger-surface-hover)}.button-danger:active,.button-danger.is-pressed{background:var(--castle-danger-surface)}.button-quiet{color:var(--castle-text-dim);background:0 0}.button-quiet:hover,.button-quiet.is-hover{background:var(--castle-surface-5);color:var(--castle-text-primary)}.button-quiet:active,.button-quiet.is-pressed{background:var(--castle-surface-3)}.button-quiet[aria-pressed=true],.button-quiet[aria-pressed=true]:hover,.button-quiet[aria-pressed=true]:active{background:var(--castle-surface-5);color:var(--castle-text-primary)}.composer-action{border-radius:var(--castle-radius-pill);color:var(--castle-text-muted);box-shadow:inset 0 0 0 1px var(--castle-border-2);background:0 0}.composer-action:disabled{opacity:1;color:var(--castle-text-muted);box-shadow:inset 0 0 0 1px var(--castle-border-1);background:0 0}.composer-action:not(:disabled),.composer-action:not(:disabled):hover,.composer-action:not(:disabled):active,.composer-action:not(:disabled).is-hover,.composer-action:not(:disabled).is-pressed{background:var(--castle-surface-light);color:var(--castle-text-dark);box-shadow:none}.button svg,.button iconify-icon{width:var(--castle-button-icon-size);height:var(--castle-button-icon-size);font-size:var(--castle-button-icon-size)}.button-icon-large svg,.button-icon-large iconify-icon{width:var(--castle-button-icon-size-large);height:var(--castle-button-icon-size-large);font-size:var(--castle-button-icon-size-large)}.button-badge{min-width:16px;height:16px;padding:0 var(--castle-space-small);border-radius:var(--castle-radius-pill);background:var(--castle-surface-5);color:var(--castle-text-secondary);font-size:var(--castle-text-size-small);font-variant-numeric:tabular-nums;text-align:center;text-overflow:clip;flex:none;line-height:16px;overflow:hidden}.button>.button-badge{text-overflow:clip;min-width:16px;overflow:hidden}.text-field{min-width:0;height:var(--castle-button-height);padding:0 var(--castle-space-base);border:1px solid var(--castle-border-3);border-radius:var(--castle-radius-small);background:var(--castle-surface-3);color:var(--castle-text-primary);font-family:var(--castle-font-body);font-size:var(--castle-text-size-base);cursor:text;outline:0}.text-field::placeholder{color:var(--castle-text-muted)}.text-field:hover,.text-field.is-hover{background:var(--castle-surface-4)}.text-field:focus,.text-field:focus-visible,.text-field.is-focus{outline:1px solid var(--castle-border-2);outline-offset:2px}.text-field:disabled{opacity:.4;cursor:default}.select{min-width:0;height:var(--castle-button-height);padding:0 var(--castle-space-base);border:1px solid var(--castle-border-3);border-radius:var(--castle-radius-small);background:var(--castle-surface-3);color:var(--castle-text-primary);font-family:var(--castle-font-body);font-size:var(--castle-text-size-base);cursor:pointer;outline:0}.select:hover,.select.is-hover{background:var(--castle-surface-4)}.select:focus,.select:focus-visible,.select.is-focus{outline:1px solid var(--castle-border-2);outline-offset:2px}.select:disabled{opacity:.4;cursor:default}.dock-control{justify-content:center;align-items:center;gap:var(--castle-space-base);max-width:100%;height:var(--castle-panel-header-height);padding:0 var(--castle-space-large);border:1px solid var(--castle-border-1);border-radius:var(--castle-radius-base);background:var(--castle-surface-3);color:var(--castle-text-primary);font-family:var(--castle-font-body);font-size:var(--castle-text-size-base);white-space:nowrap;cursor:pointer;font-weight:600;line-height:1;display:inline-flex}.dock-control:not(.dock-control-icon){min-width:0}.dock-control>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.dock-control-icon{width:var(--castle-panel-header-height);padding:0}.dock-control-quiet{background:0 0;border-color:#0000;justify-content:flex-start;min-width:0}.dock-control-mark{background:var(--castle-surface-1)}.dock-control-group{cursor:default;box-shadow:inset 0 0 0 1px var(--castle-border-1);border:none;justify-content:flex-start;align-items:stretch;gap:0;padding:0;overflow:hidden}button.dock-control:hover,button.dock-control.is-hover{background:var(--castle-surface-4);border-color:var(--castle-border-3)}button.dock-control:active,button.dock-control.is-pressed{background:var(--castle-surface-2)}button.dock-control-quiet:active,button.dock-control-quiet.is-pressed{background:var(--castle-surface-3)}button.dock-control:focus-visible,button.dock-control.is-focus{outline:1px solid var(--castle-border-2);outline-offset:2px}.dock-control:disabled{opacity:.4;cursor:default}button.dock-control:disabled:hover,button.dock-control:disabled.is-hover{background:var(--castle-surface-3);border-color:var(--castle-border-1)}button.dock-control-quiet:disabled:hover,button.dock-control-quiet:disabled.is-hover{background:0 0;border-color:#0000}button.dock-control-mark:disabled:hover,button.dock-control-mark:disabled.is-hover{background:var(--castle-surface-1)}.dock-control svg,.dock-control iconify-icon{width:var(--castle-button-icon-size);height:var(--castle-button-icon-size);font-size:var(--castle-button-icon-size);flex-shrink:0}.dock-control-mark svg,.dock-control-mark img{width:20px;height:20px}.dock-control-mark img{object-fit:contain;display:block}.dock-segment{flex:0 0 var(--castle-panel-header-height);width:var(--castle-panel-header-height);height:var(--castle-panel-header-height);color:var(--castle-text-muted);cursor:pointer;background:0 0;border:none;border-radius:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.dock-segment iconify-icon,.dock-segment svg{width:var(--castle-button-icon-size);height:var(--castle-button-icon-size);font-size:var(--castle-button-icon-size)}@media (hover:hover){.dock-segment:hover:not(.is-active){color:var(--castle-text-primary);background:var(--castle-surface-5)}}.dock-segment.is-hover:not(.is-active){color:var(--castle-text-primary);background:var(--castle-surface-5)}.dock-segment.is-active{color:var(--castle-text-dark);background:var(--castle-surface-light)}.dock-segment.is-drag-origin{opacity:0;pointer-events:none;flex:0 0 0;width:0;min-width:0;max-width:0;padding:0;overflow:hidden}.dock-segment-slot{flex:0 0 var(--castle-panel-header-height);width:var(--castle-panel-header-height);height:var(--castle-panel-header-height);color:var(--castle-text-primary);background:var(--castle-surface-6);pointer-events:none;justify-content:center;align-items:center;display:inline-flex}.dock-segment-slot iconify-icon,.dock-segment-slot svg{width:var(--castle-button-icon-size);height:var(--castle-button-icon-size);font-size:var(--castle-button-icon-size)}.dock-segment-ghost{border-radius:var(--castle-radius-small);pointer-events:none;box-shadow:0 8px 24px #00000073}.dock-segment:has(.dock-badge){position:relative}.dock-segment .dock-badge{top:var(--castle-space-small);right:var(--castle-space-small);z-index:1;background:var(--castle-surface-light);color:var(--castle-text-dark);pointer-events:none;transform-origin:50%;position:absolute}.dock-segment .dock-badge:not(.is-appearing){visibility:hidden;opacity:0;transform:scale(.45)}.dock-segment .dock-badge.is-appearing{visibility:visible;animation:.28s cubic-bezier(.2,.8,.2,1) both dock-badge-appear}@keyframes dock-badge-appear{0%{opacity:0;transform:scale(.45)}70%{opacity:1;transform:scale(1.08)}to{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion:reduce){.dock-segment .dock-badge.is-appearing{animation:none}}.menu{gap:var(--castle-space-small);width:max-content;min-width:144px;padding:var(--castle-space-small);border:1px solid var(--castle-border-3);border-radius:var(--castle-radius-base);background:var(--castle-surface-5);flex-direction:column;display:flex;box-shadow:0 8px 24px #0000008c}.menu-item{align-items:center;gap:var(--castle-space-base);width:100%;height:26px;padding:0 var(--castle-space-base);border-radius:var(--castle-radius-small);color:var(--castle-text-primary);font-family:var(--castle-font-body);font-size:var(--castle-text-size-base);cursor:pointer;background:0 0;border:0;display:flex}.menu-icon{flex:0 0 16px;width:16px;height:16px;font-size:16px}svg.menu-icon,iconify-icon.menu-icon{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5px}.menu-icon svg,.menu-icon iconify-icon{width:16px;height:16px;font-size:16px}.menu-item:hover:not(:disabled),.menu-item.is-hover:not(:disabled){background:var(--castle-surface-6)}.menu-item:disabled{opacity:.4;cursor:default}.menu-item-label{text-overflow:ellipsis;white-space:nowrap;text-align:left;flex:auto;min-width:0;overflow:hidden}.menu-check{color:var(--castle-text-primary);flex:none}.menu-keys{margin-left:var(--castle-space-large);color:var(--castle-text-muted);font-size:var(--castle-text-size-small);white-space:nowrap;flex:none}.menu-item:disabled .menu-keys{color:inherit}.menu-item-danger{color:var(--castle-danger-text)}.menu-separator{height:1px;margin:var(--castle-space-small) 0;background:var(--castle-border-3)}.menu-header{padding:var(--castle-space-small) var(--castle-space-base);color:var(--castle-text-muted);font-size:var(--castle-text-size-small);letter-spacing:.04em;text-transform:uppercase}.menu-confirm{gap:var(--castle-space-base);min-width:180px;padding:var(--castle-space-small) var(--castle-space-base);flex-direction:column;display:flex}.menu-confirm-text{color:var(--castle-text-primary);font-size:var(--castle-text-size-base);margin:0}.menu-confirm-actions{justify-content:flex-end;gap:var(--castle-space-base);display:flex}.menu-error{padding:var(--castle-space-small) var(--castle-space-base);color:var(--castle-danger-text);font-size:var(--castle-text-size-small);margin:0}.feedback-quiet{--castle-feedback-text:var(--castle-text-muted);--castle-feedback-surface:var(--castle-surface-3);--castle-feedback-border:var(--castle-border-3)}.feedback-warn{--castle-feedback-text:var(--castle-warn-text);--castle-feedback-surface:var(--castle-warn-surface);--castle-feedback-surface-hover:color-mix(in srgb, var(--castle-warn-text) 35%, var(--castle-warn-surface));--castle-feedback-border:color-mix(in srgb, var(--castle-warn-text), var(--castle-warn-surface))}.feedback-danger{--castle-feedback-text:var(--castle-danger-text);--castle-feedback-surface:var(--castle-danger-surface);--castle-feedback-surface-hover:var(--castle-danger-surface-hover);--castle-feedback-border:color-mix(in srgb, var(--castle-danger-text), var(--castle-danger-surface))}.feedback-note{color:var(--castle-feedback-text);margin:0}.feedback-banner{align-items:center;gap:var(--castle-space-base);min-height:var(--castle-panel-header-height);padding:var(--castle-space-base);border-bottom:1px solid var(--castle-feedback-border);background:var(--castle-feedback-surface);color:var(--castle-feedback-text);font-size:var(--castle-text-size-base);display:flex}.feedback-banner>span:not(.icon-cell){flex:auto;min-width:0}.feedback-banner .icon-cell{color:inherit}.feedback-warn .button,.feedback-danger .button{border:1px solid var(--castle-feedback-border);background:var(--castle-feedback-surface);color:var(--castle-text-primary)}.feedback-warn .button:hover,.feedback-warn .button.is-hover,.feedback-danger .button:hover,.feedback-danger .button.is-hover{background:var(--castle-feedback-surface-hover)}.feedback-warn .button:active,.feedback-warn .button.is-pressed,.feedback-danger .button:active,.feedback-danger .button.is-pressed{background:var(--castle-feedback-surface)}.feedback-takeover{padding:calc(var(--castle-space-large) * 2);border:1px solid var(--castle-feedback-border);border-radius:var(--castle-radius-base);background:var(--castle-feedback-surface);color:var(--castle-feedback-text);font-size:var(--castle-text-size-base);text-align:center;justify-content:center;align-items:center;display:flex}.panel{border:1px solid var(--castle-border-1);border-radius:var(--castle-radius-base);background:var(--castle-surface-2);color:var(--castle-text-primary);font-family:var(--castle-font-body);transition:border-color .12s;position:relative;overflow:hidden}@media (hover:hover){.panel:hover{border-color:var(--castle-border-3)}}.panel.is-hover{border-color:var(--castle-border-3)}.panel.is-active,.panel.is-active:hover,.panel.is-active.is-hover{border-color:var(--castle-border-2)}.panel.is-dragging,.panel.is-dragging:hover,.panel.is-dragging.is-hover,.panel.is-dragging.is-active{border-color:var(--castle-border-4)}.panel-header,.panel-tabs-header{height:var(--castle-panel-header-height);padding:0 var(--castle-space-base);border-bottom:1px solid var(--castle-border-1);background:var(--castle-surface-3);align-items:center;display:flex}@media (hover:hover){.panel-header:hover,.panel-tabs-header:hover{background:var(--castle-surface-4);cursor:grab}}.panel-header.is-hover,.panel-tabs-header.is-hover{background:var(--castle-surface-4);cursor:grab}.panel-header:active,.panel-header.is-pressed,.panel-tabs-header:active,.panel-tabs-header.is-pressed{cursor:grabbing}.panel-tabs-header{align-items:stretch;gap:var(--castle-space-base)}.panel-title{align-items:center;gap:var(--castle-space-base);min-width:0;padding:0 var(--castle-space-base);color:var(--castle-text-primary);font-family:var(--castle-font-display);font-size:var(--castle-text-size-base);margin:0 auto 0 0;font-weight:700;line-height:1.5;display:inline-flex}.panel-title svg,.panel-title iconify-icon{width:var(--castle-button-icon-size);height:var(--castle-button-icon-size);font-size:var(--castle-button-icon-size);flex-shrink:0}.panel-header-actions{align-items:center;gap:var(--castle-space-small);margin-left:auto;display:flex}.panel-type-toggle{align-items:center;gap:var(--castle-space-base);min-width:0;max-width:100%;height:var(--castle-button-height);padding:0 var(--castle-space-base);border-radius:var(--castle-radius-small);color:var(--castle-text-primary);font-family:var(--castle-font-display);font-size:var(--castle-text-size-base);white-space:nowrap;cursor:pointer;background:0 0;border:0;align-self:center;font-weight:700;display:inline-flex}.panel-type-toggle:hover,.panel-type-toggle.is-hover,.panel-type-toggle[aria-pressed=true]{background:var(--castle-surface-5)}.panel-type-toggle svg,.panel-type-toggle iconify-icon{width:var(--castle-button-icon-size);height:var(--castle-button-icon-size);font-size:var(--castle-button-icon-size);flex-shrink:0}.panel-tabs{align-items:center;gap:var(--castle-space-base);flex:auto;min-width:0;display:flex}.panel-tab{max-width:160px;height:var(--castle-button-height);padding:var(--castle-space-small) var(--castle-space-base);border-radius:var(--castle-radius-small);color:var(--castle-text-dim);font-family:var(--castle-font-body);font-size:var(--castle-text-size-base);white-space:nowrap;cursor:pointer;background:0 0;border:0;align-items:center;line-height:18px;display:flex;position:relative;overflow:hidden}.panel-tab>span{text-overflow:ellipsis;min-width:0;overflow:hidden}.panel-tab:hover,.panel-tab.is-hover{background:var(--castle-surface-5);color:var(--castle-text-secondary)}.panel-tab.is-active{background:var(--castle-surface-5);color:var(--castle-text-primary)}.panel-tab:hover>span,.panel-tab.is-hover>span{-webkit-mask-image:linear-gradient(to right, #000 calc(100% - (var(--castle-button-icon-size) + var(--castle-space-large))), transparent 100%);mask-image:linear-gradient(to right, #000 calc(100% - (var(--castle-button-icon-size) + var(--castle-space-large))), transparent 100%)}.panel-tab.is-narrow:not(.is-active):hover>span,.panel-tab.is-narrow:not(.is-active).is-hover>span{-webkit-mask-image:none;mask-image:none}.panel-tab-close{z-index:1;top:var(--castle-space-small);right:var(--castle-space-small);width:calc(var(--castle-button-icon-size) + var(--castle-space-large));height:var(--castle-button-icon-size);border-radius:var(--castle-radius-small);background:linear-gradient(to right, transparent, var(--castle-surface-3) 45%);color:currentColor;cursor:pointer;opacity:0;pointer-events:none;border:0;justify-content:flex-end;align-items:center;padding:0;display:inline-flex;position:absolute}.panel-tab-close svg,.panel-tab-close iconify-icon{width:var(--castle-button-icon-size);height:var(--castle-button-icon-size);font-size:var(--castle-button-icon-size)}.panel-tab:hover .panel-tab-close,.panel-tab.is-hover .panel-tab-close,.panel-tab:focus-within .panel-tab-close{opacity:1;pointer-events:auto;background:linear-gradient(to right, transparent, var(--castle-surface-5) 45%)}.panel-tab.is-active .panel-tab-close{background:linear-gradient(to right, transparent, var(--castle-surface-5) 45%)}.panel-tab-close:hover,.panel-tab-close.is-hover{background:linear-gradient(to right, transparent, var(--castle-surface-5) 45%);color:var(--castle-text-primary)}.panel-tab.is-narrow:not(.is-active):hover .panel-tab-close,.panel-tab.is-narrow:not(.is-active).is-hover .panel-tab-close{opacity:0;pointer-events:none}.panel-tab.is-drag-origin{opacity:0;pointer-events:none;border:0;width:0;min-width:0;max-width:0;padding:0}.panel-tab-insert{width:2px;height:var(--castle-button-height);border-radius:var(--castle-radius-pill);background:var(--castle-border-4);pointer-events:none;flex:0 0 2px}.panel-tab-ghost{padding:var(--castle-space-base) var(--castle-space-large);border:1px solid var(--castle-border-1);border-radius:var(--castle-radius-small);background:var(--castle-surface-3);color:var(--castle-text-primary);font-size:var(--castle-text-size-base);pointer-events:none;box-shadow:0 8px 24px #00000073}.panel-mobile-current{justify-content:center;align-self:center;align-items:center;gap:var(--castle-space-base);min-width:0;max-width:100%;height:var(--castle-button-height-large);padding:0 var(--castle-space-base);border-radius:var(--castle-radius-small);color:var(--castle-text-primary);font-family:var(--castle-font-body);font-size:var(--castle-text-size-base);cursor:pointer;background:0 0;border:0;display:inline-flex}.panel-mobile-current:hover,.panel-mobile-current.is-hover{background:var(--castle-surface-5)}.panel-mobile-current-text{align-items:baseline;gap:var(--castle-space-small);min-width:0;display:flex}.panel-mobile-current-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.panel-mobile-current strong,.panel-mobile-current-type{font-family:var(--castle-font-display);flex-shrink:0;font-weight:700}.panel-mobile-current svg,.panel-mobile-current iconify-icon{width:var(--castle-button-icon-size-large);height:var(--castle-button-icon-size-large);font-size:var(--castle-button-icon-size-large);flex:none}.segmented{border-radius:var(--castle-radius-small);flex-wrap:wrap;align-items:stretch;display:flex;overflow:hidden}.segmented>.button{border-radius:0}.feedback-banner.is-inset{border-radius:var(--castle-radius-small);border-bottom:none}.feedback-banner.is-inset .button{flex:none;width:auto}.popover{width:max-content;max-width:calc(100vw - 24px);max-height:calc(100vh - 16px);padding:var(--castle-space-large);border:1px solid var(--castle-border-3);border-radius:var(--castle-radius-base);background:var(--castle-surface-4);color:var(--castle-text-primary);font-family:var(--castle-font-body);font-size:var(--castle-text-size-base);flex-direction:column;display:flex;overflow:auto;box-shadow:0 8px 24px #0000008c}.popover .button:not(.button-quiet){background:var(--castle-surface-5)}.popover .button:not(.button-quiet):hover,.popover .button:not(.button-quiet).is-hover{background:var(--castle-surface-6)}.popover .button:not(.button-quiet):active,.popover .button:not(.button-quiet).is-pressed{background:var(--castle-surface-4)}.popover .button[aria-pressed=true],.popover .button[aria-pressed=true]:hover,.popover .button[aria-pressed=true]:active{background:var(--castle-surface-light);color:var(--castle-text-dark)}.popover .feedback-warn .button:not(.button-quiet),.popover .feedback-danger .button:not(.button-quiet){border:1px solid var(--castle-feedback-border);background:var(--castle-feedback-surface);color:var(--castle-text-primary)}.popover .feedback-warn .button:not(.button-quiet):hover,.popover .feedback-warn .button:not(.button-quiet).is-hover,.popover .feedback-danger .button:not(.button-quiet):hover,.popover .feedback-danger .button:not(.button-quiet).is-hover{background:var(--castle-feedback-surface-hover)}.popover .feedback-warn .button:not(.button-quiet):active,.popover .feedback-warn .button:not(.button-quiet).is-pressed,.popover .feedback-danger .button:not(.button-quiet):active,.popover .feedback-danger .button:not(.button-quiet).is-pressed{background:var(--castle-feedback-surface)}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--v2-gutter:#000;--v2-surface:#0d0d0d;--v2-raised:#161616;--v2-hover:#1d1d1d;--v2-fg:#e6e6e6;--v2-head:#e8e8e8;--v2-secondary:#b3b3b3;--v2-muted:#888;--v2-dim:#525252;--v2-placeholder:#666;--v2-ink:#111;--v2-white:#fff;--v2-border:#2a2a2a;--v2-accent:var(--castle-accent);--v2-accent-hover:color-mix(in srgb, var(--castle-accent) 84%, #fff);--v2-error-bg:#5a2b2b;--v2-warn:#e2c08d;--v2-error:#e08c8c;--v2-overlay-scrim:#00000059;--v2-overlay-code:#00000038;--v2-overlay-code-block:#00000047;--v2-overlay-task:#141414eb;--v2-overlay-feed-code:#7878784d;--v2-overlay-white-subtle:#ffffff0f;--v2-overlay-white-hover:#ffffff14;--v2-overlay-white-border:#ffffff24;--v2-overlay-white-quote:#fff6;--v2-overlay-white-dim:#ffffffd9;--v2-shadow-pop:0 10px 24px -10px #000000e6;--v2-selection:#e6e6e62e;--v2-mono:ui-monospace, SFMono-Regular, Menlo, monospace;--panel-gutter:10px;--panel-chrome-radius:8px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{color:var(--v2-fg);background:var(--v2-surface);font-family:baltomobile,Balto,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;overflow:hidden}.panel-error{height:100%;color:var(--v2-muted);flex-direction:column;align-items:flex-start;gap:8px;padding:14px 16px;font-size:13px;display:flex;overflow:auto}.panel-error-title{color:var(--v2-fg)}.panel-error-msg{white-space:pre-wrap;word-break:break-word;max-width:100%;color:var(--v2-muted);margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}.panel-error-retry{font:inherit;border:1px solid var(--v2-border);background:var(--v2-raised);color:var(--v2-fg);cursor:pointer;border-radius:4px;padding:3px 10px;font-size:12px}.panel-error-retry:hover{background:var(--v2-hover)}.editor-panel-root{flex-direction:column;width:100%;height:100%;min-height:0;display:flex}.editor-shell{flex:auto;min-height:0;display:flex}.editor-panel-body{flex-direction:column;flex:auto;min-width:0;min-height:0;display:flex}.editor-panel-view{flex:auto;min-width:0;min-height:0;position:relative}.editor-import-banner{background:var(--flow-surface,#181818);border-bottom:1px solid var(--v2-border,#2a2a2a);color:var(--v2-muted,#888);flex:none;align-items:center;gap:8px;padding:8px;font:12px ui-sans-serif,system-ui,sans-serif;display:flex}.editor-import-chip{border:1px solid var(--v2-border,#2a2a2a);background:var(--v2-raised,#161616);color:var(--v2-muted,#888);letter-spacing:.02em;border-radius:999px;flex:none;align-items:center;padding:2px 8px;font-size:12px;line-height:1.4;display:inline-flex}.editor-import-banner-text{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.editor-import-banner-action{border:1px solid var(--v2-border,#2a2a2a);background:var(--v2-raised,#161616);color:var(--v2-text,#ddd);font:inherit;cursor:pointer;border-radius:4px;flex:none;margin-left:auto;padding:2px 10px}.editor-import-banner-action:hover{border-color:var(--v2-muted,#888)}.editor-import-chip.editor-fork-chip{color:var(--v2-text,#ddd)}.editor-fork-modal-scrim{z-index:40;background:#00000080;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.editor-fork-modal{border:1px solid var(--v2-border,#2a2a2a);background:var(--flow-surface,#181818);max-width:420px;color:var(--v2-text,#ddd);border-radius:6px;padding:16px;font:13px ui-sans-serif,system-ui,sans-serif}.editor-fork-modal-title{margin-bottom:8px;font-weight:600}.editor-fork-modal-body{color:var(--v2-muted,#888);line-height:1.5}.editor-fork-modal-actions{justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.editor-fork-modal-actions button{border:1px solid var(--v2-border,#2a2a2a);background:var(--v2-raised,#161616);color:var(--v2-text,#ddd);font:inherit;cursor:pointer;border-radius:4px;padding:4px 12px}.editor-fork-modal-actions button:hover{border-color:var(--v2-muted,#888)}.editor-contextbar{background:var(--v2-gutter,#0d0d0d);border-bottom:1px solid var(--v2-border,#2a2a2a);flex:none;align-items:center;gap:8px;padding:5px 8px;display:flex}.editor-drawer-toggle{width:26px;height:24px;color:var(--v2-muted,#888);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;flex:none;justify-content:center;align-items:center;display:inline-flex}.editor-drawer-toggle:hover{color:var(--v2-fg,#e7e7ef);background:var(--v2-surface,#1b1b2b)}.editor-drawer-toggle.on{color:var(--v2-fg,#e7e7ef);background:var(--v2-surface,#1b1b2b);border-color:var(--v2-border,#3a3a52)}.editor-drawer{background:var(--v2-gutter,#0d0d0d);border-right:1px solid var(--v2-border,#2a2a2a);flex:none;width:190px;padding:6px 4px;overflow-y:auto}.editor-drawer-folder{letter-spacing:.03em;text-transform:uppercase;color:var(--v2-muted,#888);padding:6px 8px 2px;font:10px ui-sans-serif,system-ui,sans-serif}.editor-drawer-item{width:100%;color:var(--v2-secondary,#b3b3b3);cursor:pointer;text-align:left;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:none;border-radius:6px;padding:5px 8px;font:12px ui-sans-serif,system-ui,sans-serif;display:block;overflow:hidden}.editor-drawer-item:hover{background:var(--v2-surface,#1b1b2b);color:var(--v2-fg,#e7e7ef)}.editor-drawer-item.current{color:var(--v2-fg,#e7e7ef);background:#ffffff1a}.editor-drawer-empty{color:var(--v2-muted,#888);padding:10px 8px;font-size:12px}.editor-view-picker{background:var(--v2-surface,#1b1b2b);color:var(--v2-fg,#e7e7ef);border:1px solid var(--v2-border,#3a3a52);cursor:pointer;border-radius:6px;flex:none;padding:3px 6px;font:12px system-ui,sans-serif}.editor-contextbar-path{text-overflow:ellipsis;white-space:nowrap;color:var(--v2-muted,#888);flex:auto;font:11px ui-monospace,SFMono-Regular,Menlo,monospace;overflow:hidden}.editor-contextbar-reload{width:22px;height:22px;color:var(--v2-muted,#888);cursor:pointer;background:0 0;border:none;border-radius:5px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.editor-contextbar-reload:hover{color:var(--v2-white,#fff);background:var(--v2-overlay-white-hover,#ffffff14)}.editor-contextbar-reload svg{width:13px;height:13px}.deck-panel{background:var(--v2-surface);width:100%;height:100%}.deck-frame{border:0;width:100%;height:100%;display:block}.play-panel{background:var(--castle-surface-2);flex-direction:column;width:100%;height:100%;display:flex}.play-scene-picker{padding:0 var(--castle-space-large) var(--castle-space-large);flex:none;justify-content:center;align-items:center;display:flex}.play-stage{min-height:0;padding:var(--castle-space-large);flex:auto;justify-content:center;align-items:center;display:flex;container-type:size}.play-stage:has(+.play-scene-picker){padding-bottom:var(--castle-space-base)}.play-frame-shell{aspect-ratio:5/7;border-radius:4%/2.85714%;width:min(100cqw,71.4286cqh);height:min(100cqh,140cqw);position:relative;overflow:hidden}.play-frame-shell .deck-frame{width:100%;height:100%}.play-logs{border-top:1px solid var(--castle-border-1);background:var(--castle-surface-2);color:var(--castle-text-secondary);flex:none;position:relative}.play-logs.is-open{--play-logs-height:160px;flex:0 0 var(--play-logs-height);height:var(--play-logs-height);flex-direction:column;min-height:0;display:flex;overflow:hidden}.play-logs-resize{z-index:2;cursor:row-resize;touch-action:none;height:12px;display:none;position:absolute;top:-6px;left:0;right:0}.play-logs.is-open>.play-logs-resize{display:block}body.play-logs-resizing,body.play-logs-resizing *{cursor:row-resize!important;-webkit-user-select:none!important;user-select:none!important}.play-logs-header{min-height:calc(var(--castle-button-height) + 2 * var(--castle-space-base));padding:var(--castle-space-base);align-items:center;column-gap:var(--castle-space-base);cursor:pointer;flex:none;grid-template-columns:minmax(0,1fr) minmax(0,max-content) max-content;display:grid;position:relative}.play-logs-header:hover{background:var(--castle-surface-3)}.play-logs-expand{z-index:0;cursor:pointer;background:0 0;border:0;padding:0;position:absolute;inset:0}.play-logs-expand:focus{outline:none}.play-logs-expand:focus-visible{outline:2px solid var(--castle-border-2);outline-offset:-2px}.play-logs-label{align-items:center;gap:var(--castle-space-base);min-width:0;color:var(--castle-text-dim);pointer-events:none;justify-self:start;display:inline-flex}.play-logs-header:hover .play-logs-label{color:var(--castle-text-primary)}.play-logs-label svg{flex:0 0 var(--castle-button-icon-size);width:var(--castle-button-icon-size);height:var(--castle-button-icon-size);font-size:var(--castle-button-icon-size)}.play-logs-pending{min-width:0;color:var(--castle-text-muted);font-size:var(--castle-text-size-small);text-overflow:ellipsis;white-space:nowrap;pointer-events:none;grid-column:2;margin:0;line-height:1.4;overflow:hidden}.play-logs-restart{z-index:1;grid-column:3;justify-self:end;min-width:max-content;position:relative}.play-logs-restart.is-pending,.play-logs-restart.is-pending:hover,.play-logs-restart.is-pending:active{color:var(--castle-warn-text)}.play-logs-restart-icon{line-height:1;display:inline-flex}.play-logs-restart-icon.is-spinning{animation:.6s linear infinite play-logs-spin}@keyframes play-logs-spin{to{transform:rotate(360deg)}}.play-logs-toolbar{align-items:center;gap:var(--castle-space-base);padding:var(--castle-space-base);border-top:1px solid var(--castle-border-1);flex-wrap:wrap;flex:none;display:flex}.play-logs-body{min-height:0;padding:var(--castle-space-base) var(--castle-space-large);border-top:1px solid var(--castle-border-1);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:var(--castle-text-size-small);flex:auto;line-height:1.5;overflow-y:auto}.play-logs-line{white-space:pre-wrap;word-break:break-word}.play-logs-warn{color:var(--castle-warn-text)}.play-logs-error{color:var(--castle-danger-text)}.play-logs-empty{color:var(--castle-text-dim)}.flow-root.is-mobile .play-panel{--castle-text-size-small:14px;--castle-text-size-base:16px;--castle-text-style-smallcaps-size:var(--castle-text-size-small);--castle-button-height:var(--castle-button-height-large)}.flow-root.is-mobile .play-panel .button:not(.button-icon){padding-left:var(--castle-space-large);padding-right:var(--castle-space-large)}.flow-root.is-mobile .play-logs.is-open{--play-logs-height:200px}.flow-root.is-mobile .play-logs-header:hover{background:0 0}.flow-root.is-mobile .play-logs-header:hover .play-logs-label{color:var(--castle-text-dim)}.flow-root.is-mobile .play-stage{padding:var(--castle-space-small)}.term-panel{width:100%;height:100%;position:relative}.term-host{overscroll-behavior:contain;padding:6px;position:absolute;inset:0}.shell-root{--operator-pad:var(--castle-space-large);--operator-col-fit:min(var(--operator-col,400px), 100%);background:var(--v2-gutter);height:100%;position:relative}#chat-host{width:var(--operator-col-fit);background:var(--v2-gutter);color:var(--v2-fg);z-index:10;flex-direction:column;font-family:Balto,system-ui,-apple-system,sans-serif;display:flex;position:absolute;top:0;bottom:0;left:0;overflow:hidden}.settings-popover{z-index:2147483000;width:390px;position:fixed}.settings-popover .settings-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px 10px;display:flex}.settings-popover .settings-row+.settings-row{margin-top:8px}.settings-popover .settings-label{white-space:nowrap}.settings-popover .settings-row-stack{flex-direction:column;align-items:stretch;gap:4px;display:flex}.settings-popover .settings-row-main{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px 10px;display:flex}.settings-popover .settings-text-warn{border-color:var(--v2-warn)}.settings-popover .settings-warning{color:var(--v2-warn);text-align:right;font-size:11px;line-height:1.35}.settings-popover .settings-warning-suggest{appearance:none;font:inherit;color:var(--v2-warn);cursor:pointer;background:0 0;border:none;margin:0;padding:0;text-decoration:underline}.settings-popover .settings-warning-suggest:hover{color:var(--castle-text-primary)}.settings-popover .settings-group+.settings-group{border-top:1px solid var(--castle-border-1);margin-top:12px;padding-top:12px}.settings-popover .settings-credits{margin-top:var(--castle-space-base);color:var(--castle-text-secondary);font-size:var(--castle-text-size-base)}.settings-popover .settings-usage-subtext{margin-top:var(--castle-space-small);color:var(--castle-text-muted);font-size:var(--castle-text-size-small)}.settings-popover .settings-usage-subtext.feedback-note{color:var(--castle-feedback-text)}.settings-popover .settings-split{justify-content:space-between;align-items:center;gap:var(--castle-space-large);margin-top:var(--castle-space-base);display:flex}.settings-popover .settings-group>.settings-split:first-child{margin-top:0}.settings-popover .settings-split-copy,.settings-popover .settings-split>.settings-credits{flex:auto;min-width:0}.settings-popover .settings-split .settings-credits{margin-top:0}.settings-popover .settings-split .button{flex:none;width:auto;margin-left:auto}.settings-popover .settings-group>.feedback-banner.is-inset{margin-top:var(--castle-space-base)}.settings-popover .text-field{flex:auto}.settings-popover .select{flex:0 auto;max-width:60%}.settings-popover .settings-usage-bar{height:4px;margin-top:var(--castle-space-base);background:var(--castle-surface-5);border-radius:2px;overflow:hidden}.settings-popover .settings-usage-fill{background:var(--castle-accent);height:100%}.settings-popover .settings-usage-fill.blocked{background:var(--castle-danger-text)}.castle-key-heading{margin-bottom:4px;font-weight:600}.castle-key-subtitle{color:#9a9a9a;margin-bottom:14px;font-size:12px;line-height:1.5}.castle-key-tabs{border:1px solid #3a3a3a;border-radius:4px;margin-bottom:12px;display:flex;overflow:hidden}.castle-key-tab{color:#9a9a9a;font:inherit;cursor:pointer;background:#2e2e2e;border:0;flex:1;padding:6px 10px;font-size:12px}.castle-key-tab+.castle-key-tab{border-left:1px solid #3a3a3a}.castle-key-tab:hover{color:#e8e8e8}.castle-key-tab.active{color:#e8e8e8;background:#3a3a3a}.castle-key-input{box-sizing:border-box;color:#e8e8e8;width:100%;font:inherit;background:#1b1b1b;border:1px solid #3a3a3a;border-radius:4px;outline:none;padding:7px 9px;font-size:12px;display:block}.castle-key-input:focus{border-color:#4a4a4a}.castle-key-input::placeholder{color:#6a6a6a}.castle-key-stored{color:#8a8a8a;margin-top:8px;font-size:11px}.castle-key-error{color:#e8705a;margin-top:8px;font-size:11px;line-height:1.4}.castle-key-row{color:#c8c8c8;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px;display:flex}.castle-key-row button{color:#e8e8e8;font:inherit;cursor:pointer;background:#2e2e2e;border:1px solid #3a3a3a;border-radius:4px;padding:5px 12px;font-size:12px}.castle-key-row button:hover{background:#383838}.castle-key-login{margin-bottom:12px}.castle-key-signin{color:#e8e8e8;width:100%;font:inherit;cursor:pointer;background:#2e2e2e;border:1px solid #3a3a3a;border-radius:4px;padding:9px 12px;font-size:13px;display:block}.castle-key-signin:hover{background:#383838}.castle-key-or{color:#7a7a7a;letter-spacing:.08em;text-transform:uppercase;align-items:center;gap:10px;margin:14px 0;font-size:11px;display:flex}.castle-key-or:before,.castle-key-or:after{content:"";background:#3a3a3a;flex:1;height:1px}.castle-key-field-label{color:#c8c8c8;margin-bottom:6px;font-size:12px}.castle-key-url{color:#7aa2f7;word-break:break-all;-webkit-user-select:all;user-select:all;background:#1b1b1b;border:1px solid #3a3a3a;border-radius:4px;padding:8px 9px;font-size:11px;line-height:1.4;display:block}#chat-messages{overflow-anchor:none;min-height:0;font-size:var(--castle-text-size-base);scrollbar-width:none;-ms-overflow-style:none;flex-direction:column;flex:1 1 0;padding:0;line-height:1.5;display:flex;overflow-y:auto}#chat-messages .chat-thread{gap:var(--castle-space-large);padding-bottom:var(--castle-space-large);opacity:0;flex-direction:column;transition:opacity .12s;display:flex}#chat-messages .chat-thread.ready{opacity:1}.shell-root.docked #chat-messages{padding:0}.shell-root.docked #chat-messages>:first-child{margin-top:auto}#chat-messages::-webkit-scrollbar{width:0;height:0}#chat-empty{color:var(--castle-text-muted)}#chat-host .msg{margin:0}#chat-host .msg.user{text-align:right}#chat-host .msg.user span:not(.msg-image){background:var(--castle-surface-light);color:var(--castle-text-dark);padding:var(--castle-space-base) var(--castle-space-large);border-radius:var(--castle-radius-large);text-align:left;white-space:pre-wrap;word-break:break-word;max-width:85%;display:inline-block}#chat-host .msg-image{border:1px solid var(--castle-border-1);border-radius:var(--castle-radius-base);max-width:220px;max-height:150px;margin:0 0 var(--castle-space-base) auto;display:block}#chat-host .assistant-turn{align-items:flex-start;gap:var(--castle-space-base);flex-direction:column;margin:0;display:flex}#chat-host .assistant-turn .feedback-note{max-width:85%}#chat-host .msg.assistant{background:var(--castle-accent);width:fit-content;color:var(--castle-surface-light);padding:var(--castle-space-base) var(--castle-space-large);border-radius:var(--castle-radius-large);word-break:break-word;max-width:85%;margin:0}#chat-host .msg.assistant.errbubble{background:var(--castle-danger-surface);color:var(--castle-danger-text)}#chat-host .msg.assistant.streaming:after{content:"▌";opacity:.6;animation:1s step-end infinite chat-blink}@keyframes chat-blink{50%{opacity:0}}#chat-host .msg.toolline{color:var(--castle-text-muted);font-size:var(--castle-text-size-base);font-family:var(--castle-font-mono);word-break:break-word}#chat-host .msg-error-detail{font-size:var(--castle-text-size-base);color:var(--castle-text-muted)}#chat-host .msg-error-detail summary{cursor:pointer;-webkit-user-select:none;user-select:none}#chat-host .msg-error-detail pre{margin:var(--castle-space-small) 0 0;padding:var(--castle-space-base);background:var(--castle-surface-1);border-radius:var(--castle-radius-small);font-size:var(--castle-text-size-small);white-space:pre-wrap;word-break:break-word;max-height:160px;overflow-y:auto}#chat-host .operator-line,#chat-host .msg-thinking{color:var(--castle-text-muted);font-size:var(--castle-text-size-base)}#chat-host .operator-line{align-items:center;gap:var(--castle-space-base);display:flex}#chat-host .operator-line .icon-inline{flex:0 0 var(--castle-icon-size-inline)}#chat-host .operator-line .icon-inline:not(:first-child){color:var(--castle-text-dim)}#chat-host .operator-line-link{color:inherit;font:inherit;text-underline-offset:2px;cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}#chat-host .operator-line-link:hover{color:var(--castle-text-primary)}#chat-host .msg-thinking summary{cursor:pointer;-webkit-user-select:none;user-select:none;list-style:none}#chat-host .msg-thinking summary::-webkit-details-marker{display:none}#chat-host .msg-thinking .thinking-caret{transform-origin:50%;transition:transform .12s}#chat-host .msg-thinking[open] .thinking-caret{transform:rotate(90deg)}#chat-host .msg-thinking.is-active .thinking-label{background-image:linear-gradient(90deg, var(--castle-text-muted) 20%, var(--castle-text-primary) 50%, var(--castle-text-muted) 80%);color:#0000;-webkit-text-fill-color:transparent;background-size:200% 100%;-webkit-background-clip:text;background-clip:text;animation:1.6s linear infinite thinking-shimmer;display:inline-block}@keyframes thinking-shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}@media (prefers-reduced-motion:reduce){#chat-host .msg-thinking.is-active .thinking-label{color:var(--castle-text-muted);-webkit-text-fill-color:currentColor;background:0 0;animation:none}}#chat-host .msg-thinking-body{max-height:160px;padding:0 var(--castle-space-large) 0 calc(var(--castle-icon-size-inline) + var(--castle-space-base));border-radius:var(--castle-radius-small);background:var(--castle-surface-1);color:var(--castle-text-muted);font-size:var(--castle-text-size-base);overflow-y:auto}#chat-host .msg.md>:first-child,#chat-host .task-notes>:first-child{margin-top:0}#chat-host .msg.md>:last-child,#chat-host .task-notes>:last-child{margin-bottom:0}#chat-host .msg.md p:empty{display:none}#chat-host .msg.md p,#chat-host .task-notes p{margin:.4em 0}#chat-host .msg.md ul,#chat-host .msg.md ol,#chat-host .task-notes ul,#chat-host .task-notes ol{margin:.4em 0;padding-left:1.3em}#chat-host .task-notes li,#chat-host .msg.md li{margin:.1em 0}#chat-host .msg.md h1,#chat-host .msg.md h2,#chat-host .msg.md h3{margin:.5em 0 .3em;font-weight:700;line-height:1.25}#chat-host .msg.md h1{font-size:1.2em}#chat-host .msg.md h2{font-size:1.12em}#chat-host .msg.md h3{font-size:1.05em}#chat-host .msg.md a:not(.msg-link),#chat-host .msg-thinking-body a:not(.msg-link),#chat-host .task-notes a:not(.msg-link),#chat-host .task-feed-msg a:not(.msg-link){color:var(--castle-surface-light);text-underline-offset:2px;text-decoration:underline}#chat-host .msg-link{border-radius:var(--castle-radius-small);color:inherit;font-family:var(--castle-font-mono);-webkit-text-decoration-color:color-mix(in srgb, currentColor 40%, transparent);text-decoration-color:color-mix(in srgb, currentColor 40%, transparent);text-underline-offset:2px;margin:0 -.35em;padding:.1em .35em}#chat-host .msg-link:hover{background:var(--castle-surface-4);color:var(--castle-text-primary);text-decoration-color:currentColor}#chat-host .msg.assistant .msg-link:hover{background:color-mix(in srgb, var(--castle-accent) 84%, #fff)}#chat-host .msg.md code{font-family:var(--castle-font-mono);font-size:var(--castle-text-size-small);background:color-mix(in srgb, var(--castle-accent) 78%, #000);border-radius:var(--castle-radius-small);padding:.1em .35em}#chat-host .msg.md pre{margin:var(--castle-space-base) 0;padding:var(--castle-space-base) var(--castle-space-large);background:color-mix(in srgb, var(--castle-accent) 72%, #000);border-radius:var(--castle-radius-small);white-space:pre-wrap;word-break:break-word;font-family:var(--castle-font-mono);font-size:var(--castle-text-size-small);line-height:1.4;overflow-x:auto}#chat-host .msg.md pre code{background:0 0;border-radius:0;padding:0}#chat-host .msg.md blockquote{margin:var(--castle-space-base) 0;padding-left:var(--castle-space-large);border-left:3px solid color-mix(in srgb, var(--castle-accent) 60%, #fff)}.shell-root.docked #chat-host .operator-inset{min-height:0;padding:0 var(--operator-pad);flex-direction:column;flex:1 1 0;display:flex;overflow:hidden}.shell-root.docked #chat-host .chat-divider{margin:0 calc(-1 * var(--operator-pad));background:var(--castle-border-1);flex:0 0 1px}.task-stack{gap:var(--castle-space-small);flex-direction:column;display:flex}#task-board{min-height:0;margin-inline:calc(-1 * var(--castle-space-base));padding-inline:var(--castle-space-base);padding-top:0;padding-bottom:var(--castle-space-base);scrollbar-width:thin;scrollbar-color:transparent transparent;flex-direction:column;flex:0 auto;max-height:40vh;display:flex;overflow:hidden auto}#task-board.scrolling{scrollbar-color:var(--castle-text-dim) transparent}#task-board::-webkit-scrollbar{width:6px}#task-board::-webkit-scrollbar-track{background:0 0}#task-board::-webkit-scrollbar-thumb{background:0 0;border-radius:3px;transition:background .25s}#task-board.scrolling::-webkit-scrollbar-thumb{background:var(--castle-text-dim)}#chat-host .task{margin:0 calc(-1 * var(--castle-space-base));border-radius:var(--castle-radius-small);cursor:pointer;transition:background .12s,box-shadow .12s}#chat-host .task.open{background:var(--castle-surface-2);box-shadow:inset 0 0 0 1px var(--castle-border-1)}#chat-host .task:hover{background:var(--castle-surface-3)}#chat-host .task-row{align-items:center;gap:var(--castle-space-large);padding:var(--castle-space-small) var(--castle-space-base);display:flex;position:relative}#chat-host .pie{background:conic-gradient(var(--castle-surface-light) calc(var(--pct,0) * 3.6deg), var(--castle-surface-5) 0deg);border-radius:50%;flex:0 0 32px;width:32px;height:32px;padding:2px;display:flex;position:relative}#chat-host .pie .avatar{background:var(--castle-surface-3);width:100%;height:100%;color:var(--castle-text-dark);border-radius:50%;justify-content:center;align-items:center;display:flex;overflow:hidden}#chat-host .pie .avatar .avatar-icon-wrap{justify-content:center;align-items:center;width:16px;height:16px;font-size:16px;display:flex}#chat-host .pie .avatar .avatar-icon-wrap svg{width:16px;height:16px;display:block}#chat-host .task-meta{flex:1;min-width:0}#chat-host .task-name{color:var(--castle-text-muted);font-size:var(--castle-text-size-base);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}#chat-host .task-name .tn{color:var(--castle-text-primary);font-weight:600}#chat-host .task-sub{color:var(--castle-text-muted);font-size:var(--castle-text-size-small);text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums;overflow:hidden}#chat-host .task-actions{align-items:center;gap:var(--castle-space-small);visibility:hidden;flex:none;margin-left:auto;display:flex}#chat-host .task:hover .task-actions,#chat-host .task.open .task-actions{visibility:visible}#chat-host .task-board-header{z-index:1;justify-content:space-between;align-items:center;gap:var(--castle-space-base);margin-inline:calc(-1 * var(--castle-space-base));padding:var(--castle-space-large) var(--castle-space-base) var(--castle-space-base);background:var(--castle-surface-1);display:flex;position:sticky;top:0}#chat-host .task-body{padding:0 var(--castle-space-base) var(--castle-space-base) calc(var(--castle-space-base) + 32px + var(--castle-space-large));font-size:var(--castle-text-size-base);color:var(--castle-text-secondary);display:none}#chat-host .task.open .task-body{display:block}#chat-host .task-notes{margin-top:var(--castle-space-small);font-size:var(--castle-text-size-base);color:var(--castle-text-secondary);word-break:break-word}#chat-host .task-body>.feedback-note{margin-top:var(--castle-space-small)}#chat-host .task-notes code{border-radius:var(--castle-radius-small);font-family:var(--castle-font-mono);padding:1px 4px;font-size:12px}#chat-host .task-playtest-frames{margin-top:var(--castle-space-base)}#chat-host .task-playtest-frames-label{font-size:var(--castle-text-size-small);color:var(--castle-text-muted);margin-bottom:var(--castle-space-small)}#chat-host .task-playtest-frames-row{gap:var(--castle-space-base);flex-wrap:wrap;display:flex}#chat-host .task-playtest-frame{object-fit:cover;border:1px solid var(--castle-border-1);background:var(--castle-text-dark);border-radius:4px;width:64px;height:90px;display:block}#chat-host .task-feed{margin-top:var(--castle-space-base);scrollbar-width:none;-ms-overflow-style:none;max-height:96px;font-size:var(--castle-text-size-base);color:var(--castle-text-secondary);cursor:default;word-break:break-word;line-height:1.5;overflow:hidden auto;-webkit-mask-image:linear-gradient(#0000,#000 8px 100%);mask-image:linear-gradient(#0000,#000 8px 100%)}#chat-host .task-feed::-webkit-scrollbar{width:0;height:0}#chat-host .task-feed-tool{padding-left:var(--castle-space-large);color:var(--castle-text-muted);font-family:var(--castle-font-mono);white-space:pre-wrap;font-size:12px}#chat-host .task-feed-msg{margin:0}#chat-host .task-feed-msg>:first-child{margin-top:0}#chat-host .task-feed-msg>:last-child{margin-bottom:0}#chat-host .task-feed-msg p{margin:0}#chat-host .task-feed-msg code{font-family:var(--castle-font-mono);font-size:var(--castle-text-size-base)}#chat-host .task-page{min-height:0;margin-inline:calc(-1 * var(--operator-pad));flex-direction:column;flex:1 1 0;display:flex}#chat-host .task-page-header{padding:var(--castle-space-large) var(--operator-pad);border-bottom:1px solid var(--castle-border-1);flex:none}#chat-host .task-page-header .task-row{padding:0}#chat-host .task-page-header .tn{color:var(--castle-text-primary)}#chat-host .task-page-body{min-height:0;padding:var(--castle-space-large) var(--operator-pad);flex:1 1 0;overflow:auto}#chat-host .task-page-body .task-feed{max-height:none;margin-top:0;overflow:visible;-webkit-mask-image:none;mask-image:none}#chat-host .task-page-body:not(.task-board-page) .task-notes{margin-top:var(--castle-space-large);padding-top:var(--castle-space-large);border-top:1px solid var(--castle-border-1)}#chat-host .task-page-body:not(.task-board-page) .task-notes:first-child{border-top:0;margin-top:0;padding-top:0}#chat-host .task-report-label{margin:0 0 var(--castle-space-small);color:var(--castle-text-primary);font-weight:700}#chat-host .task-page-empty{color:var(--castle-text-muted);margin:0}#chat-host .task-board-page{min-height:0;margin-inline:calc(-1 * var(--operator-pad));padding:var(--castle-space-large) var(--operator-pad);flex-direction:column;flex:1 1 0;display:flex;overflow:auto}#chat-host .task-archive{margin-top:var(--castle-space-base);padding-top:var(--castle-space-large);border-top:1px solid var(--castle-border-1)}#chat-host .task-archive:first-child{border-top:0;margin-top:0;padding-top:0}#chat-host .task-archive-heading{margin:0 0 var(--castle-space-large);color:var(--castle-text-muted)}#chat-host .operator-composer{flex-direction:column;flex:0 auto;min-height:0;max-height:50%;display:flex;overflow:auto}.chat-input{padding:0 var(--operator-pad) var(--operator-pad);flex:none;position:relative}#chat-host .chat-input .ta{width:100%;min-height:60px;padding:var(--castle-space-base) var(--castle-space-small);border:1px solid var(--castle-border-1);border-radius:var(--castle-radius-base);background:var(--castle-surface-2);cursor:text;flex-direction:column;display:flex;overflow:hidden}#chat-input{width:100%;min-height:21px;max-height:120px;padding:0 var(--castle-space-base);color:var(--castle-text-primary);font:inherit;font-size:var(--castle-text-size-base);resize:none;scrollbar-width:none;-ms-overflow-style:none;background:0 0;border:none;outline:none;line-height:1.5;display:block;overflow-y:auto}#chat-input::-webkit-scrollbar{width:0;height:0}#chat-input::placeholder{color:var(--castle-text-muted)}#chat-host .chat-input .ta-bottom{justify-content:space-between;align-items:center;gap:var(--castle-space-base);min-width:0;display:flex}#chat-host .composer-settings{flex:auto;min-width:0}#chat-host .composer-settings .button{min-width:0;max-width:100%;font-size:var(--castle-text-size-small);justify-content:flex-start}#chat-host .composer-settings .operator-usage-warn,#chat-host .composer-settings .operator-usage-warn:hover,#chat-host .composer-settings .operator-usage-warn[aria-pressed=true]{color:var(--castle-warn-text)}#chat-host .composer-settings .operator-usage-blocked,#chat-host .composer-settings .operator-usage-blocked:hover,#chat-host .composer-settings .operator-usage-blocked[aria-pressed=true]{color:var(--castle-danger-text)}#chat-host .queue-row .button,#chat-host .ta-bottom .button-icon{flex-shrink:0}#chat-host .composer-action{margin-right:var(--castle-space-small)}#chat-pending{gap:var(--castle-space-base);padding:0 var(--operator-pad) var(--castle-space-base);flex:none;display:flex}#chat-pending .operator-thumb{object-fit:cover;border:1px solid var(--castle-border-1);border-radius:var(--castle-radius-small);cursor:pointer;width:64px;height:44px;margin:0;display:block}#chat-host .chat-input .chat-queue{gap:var(--castle-space-small);margin-bottom:var(--castle-space-base);flex-direction:column;display:flex}#chat-host .chat-input .queue-row{align-items:center;gap:var(--castle-space-base);padding:var(--castle-space-base) var(--castle-space-base) var(--castle-space-base) var(--castle-space-large);border:1px dashed var(--castle-border-1);border-radius:var(--castle-radius-base);background:var(--castle-surface-1);color:var(--castle-text-muted);font-size:var(--castle-text-size-base);display:flex}#chat-host .chat-input .queue-snippet{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}#chat-host .picker{gap:var(--castle-space-large);width:100%;padding:var(--castle-space-large);border:1px solid var(--castle-border-1);border-radius:var(--castle-radius-base);background:var(--castle-surface-3);flex-direction:column;align-self:stretch;margin:0;display:flex}#chat-host .picker-q{border:none;min-width:0;margin:0;padding:0}#chat-host .picker-q-label{margin:0 0 var(--castle-space-base);color:var(--castle-text-primary);font-size:var(--castle-text-size-base);font-weight:inherit;padding:0}#chat-host .picker-options{gap:var(--castle-space-small);flex-direction:column;display:flex}#chat-host .picker-option{align-items:center;gap:var(--castle-space-base);padding:var(--castle-space-small) var(--castle-space-base);border-radius:var(--castle-radius-small);color:var(--castle-text-secondary);cursor:pointer;display:flex}#chat-host .picker-option input{appearance:none;border:1px solid var(--castle-border-2);border-radius:var(--castle-radius-small);background:var(--castle-surface-3);width:12px;height:12px;cursor:inherit;flex:none;place-content:center;margin:0;display:grid}#chat-host .picker-option input[type=radio]{border-radius:var(--castle-radius-pill)}#chat-host .picker-option input:checked{border-color:var(--castle-surface-light);background:var(--castle-surface-light)}#chat-host .picker-option input:before{content:"";display:block}#chat-host .picker-option input[type=radio]:checked:before{border-radius:var(--castle-radius-pill);background:var(--castle-text-dark);width:4px;height:4px}#chat-host .picker-option input[type=checkbox]:checked:before{border-left:1.5px solid var(--castle-text-dark);border-bottom:1.5px solid var(--castle-text-dark);width:6px;height:3px;margin-top:-2px;transform:rotate(-45deg)}#chat-host .picker:not(.picker-locked) .picker-option:hover,#chat-host .picker-option.is-checked{background:var(--castle-surface-5);color:var(--castle-text-primary)}#chat-host .picker-option:has(input:checked){background:var(--castle-surface-5);color:var(--castle-text-primary)}#chat-host .picker-locked{opacity:.72}#chat-host .picker-locked .picker-option{cursor:default}#chat-host .picker-actions{justify-content:flex-end;display:flex}#chat-host .chips{justify-content:flex-end;align-self:flex-end;gap:var(--castle-space-base);max-width:85%;margin:var(--castle-space-small) 0 var(--castle-space-small);flex-wrap:wrap;display:flex}#chat-host .chip{padding:var(--castle-space-base) var(--castle-space-large);border:1px dotted var(--castle-surface-light);border-radius:var(--castle-radius-pill);color:var(--castle-surface-light);font:inherit;font-size:var(--castle-text-size-base);text-align:left;cursor:pointer;background:0 0;line-height:1.3}#chat-host .chips-inert .chip{border-color:var(--castle-text-dim);color:var(--castle-text-muted);cursor:default}#chat-host .chip.is-picked,#chat-host .chips-inert .chip.is-picked{border-style:solid;border-color:var(--castle-surface-light);background:var(--castle-surface-light);color:var(--castle-text-dark)}#chat-host .msg-file{color:inherit;font:inherit;text-underline-offset:2px;text-decoration:underline;-webkit-text-decoration-color:color-mix(in srgb, currentColor 40%, transparent);text-decoration-color:color-mix(in srgb, currentColor 40%, transparent);cursor:pointer;word-break:break-all;background:0 0;border:0;margin:0;padding:0;display:inline}#chat-host .msg-file:hover{text-decoration-color:currentColor}#chat-host .picker-skeleton{pointer-events:none}#chat-host .picker-skeleton-hint{color:var(--castle-text-muted);font-size:var(--castle-text-size-base)}#chat-host .picker-skeleton-line,#chat-host .picker-skeleton-chip{border-radius:var(--castle-radius-small);background:var(--castle-border-1);display:block}#chat-host .picker-skeleton-label{width:60%;height:11px;margin-bottom:var(--castle-space-base)}#chat-host .picker-skeleton-chip{height:24px}.xterm,.xterm-viewport,.xterm-screen,.xterm-helpers{background-color:#0000!important}.xterm{overscroll-behavior:contain}.xterm-viewport{overscroll-behavior:contain;scrollbar-width:none;-ms-overflow-style:none}.xterm-viewport::-webkit-scrollbar{width:0;height:0}.xterm .xterm-scrollable-element>.scrollbar,.xterm .xterm-scrollable-element>.scrollbar.visible,.xterm .xterm-scrollable-element>.visible.scrollbar,.xterm .xterm-scrollable-element>.invisible.scrollbar,.xterm .xterm-scrollable-element>.xterm-scrollbar{opacity:0!important;pointer-events:none!important;width:0!important;min-width:0!important;height:0!important;min-height:0!important;display:none!important}.xterm .xterm-scrollable-element>.scrollbar>.slider,.xterm .xterm-scrollable-element>.scrollbar>.scra,.xterm .xterm-scrollable-element>.xterm-scrollbar>.xterm-slider{width:0!important;height:0!important;display:none!important}.xterm .xterm-scrollable-element>.shadow{display:none!important}.quick-open-backdrop{z-index:2147483100;justify-content:center;align-items:flex-start;padding-top:12vh;display:flex;position:fixed;inset:0}.quick-open{background:#232323;border:1px solid #3a3a3a;border-radius:8px;flex-direction:column;width:min(600px,90vw);max-height:60vh;display:flex;overflow:hidden;box-shadow:0 16px 48px #0009}.quick-open-input{color:#f0f0f0;background:#161616;border:1px solid #4a4a4a;border-radius:5px;outline:none;flex:none;margin:8px;padding:8px 10px;font-size:14px}.quick-open-input:focus{border-color:#5a8bd6}.quick-open-list{flex:auto;padding:4px;overflow-y:auto}.quick-open-item{color:#e6e6e6;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:4px;align-items:baseline;gap:8px;width:100%;padding:5px 8px;font-size:13px;display:flex}.quick-open-item.active{background:#37506f}.quick-open-name{white-space:nowrap;flex:none}.quick-open-dir{text-overflow:ellipsis;white-space:nowrap;color:#8a8a8a;flex:auto;min-width:0;font-size:12px;overflow:hidden}.quick-open-empty{color:#8a8a8a;text-align:center;padding:12px;font-size:13px}.quick-open-keys{color:#b0b0b0;white-space:nowrap;border:1px solid #4a4a4a;border-radius:4px;flex:none;margin-left:8px;padding:1px 6px;font-family:SFMono-Regular,Consolas,monospace;font-size:11px}.mention-picker{z-index:2147483100;background:#232323;border:1px solid #3a3a3a;border-radius:8px;width:min(360px,90vw);max-height:40vh;padding:4px;position:fixed;overflow-y:auto;box-shadow:0 16px 48px #0009}.mention-item{color:#e6e6e6;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:4px;align-items:baseline;gap:8px;width:100%;padding:5px 8px;font-size:13px;display:flex}.mention-item.active{background:#37506f}.mention-name{white-space:nowrap;flex:none}.mention-dir{text-overflow:ellipsis;white-space:nowrap;color:#8a8a8a;flex:auto;min-width:0;font-size:12px;overflow:hidden}.chord-hint{z-index:2147483200;color:#c7c7c7;background:#232323;border:1px solid #3a3a3a;border-radius:8px;align-items:center;gap:8px;padding:6px 12px;font-size:12px;display:flex;position:fixed;bottom:24px;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #0000008c}.chord-hint kbd{color:#f0f0f0;background:#333;border:1px solid #4a4a4a;border-radius:4px;padding:2px 7px;font-family:SFMono-Regular,Consolas,monospace;font-size:12px}@media (pointer:coarse){input,textarea,select,[contenteditable]:not(.cm-content){font-size:16px!important}}.cm-url,.cm-md-link{color:var(--v2-link,#82aaff);text-underline-offset:2px;cursor:pointer;text-decoration:underline;text-decoration-thickness:1px}.cm-url:hover,.cm-md-link:hover{color:var(--v2-white,#fff)}._fieldRow_13ckg_4{grid-template-columns:minmax(82px,.5fr) minmax(0,1fr);align-items:center;gap:12px;min-height:28px;margin-bottom:0;padding-bottom:12px;display:grid}._fieldRow_13ckg_4:last-child{margin-bottom:0}._fieldLabel_13ckg_21{color:var(--castle-inspector-text);overflow-wrap:anywhere;min-width:0;font-size:14px}._fieldLabelOverridden_13ckg_30{color:var(--castle-override)}._fieldRowOverridden_13ckg_34{--field-border:var(--castle-override-border)}._fieldOverride_13ckg_41{padding-bottom:12px}._fieldOverride_13ckg_41 ._fieldRow_13ckg_4{padding-bottom:4px}._fieldNote_13ckg_52{grid-template-columns:minmax(82px,.5fr) minmax(0,1fr);gap:12px;margin-top:-6px;padding-bottom:12px;display:grid}._fieldNoteInner_13ckg_60{min-width:0;color:var(--castle-inspector-muted);grid-column:2;font-size:12px;line-height:1.35}._fieldDefault_13ckg_68{grid-template-columns:minmax(82px,.5fr) minmax(0,1fr);gap:12px;display:grid}._fieldDefaultInner_13ckg_74{min-width:0;color:var(--castle-inspector-muted);grid-column:2;align-items:center;gap:8px;font-size:12px;display:flex}._fieldDefaultInner_13ckg_74>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._fieldResetBtn_13ckg_91{color:var(--castle-override);cursor:pointer;background:0 0;border:0;margin-left:auto;padding:0;font-size:12px}._fieldResetBtn_13ckg_91:hover{color:var(--castle-inspector-text)}._input_13ckg_34{border:1px solid var(--field-border,var(--castle-inspector-border));border-radius:var(--castle-radius);background:var(--castle-inspector-input-bg);width:100%;color:var(--castle-inspector-text);font:inherit;outline:0;padding:5px 8px}._numberField_13ckg_116{width:100%;position:relative}._numberInput_13ckg_121{appearance:textfield}._numberInput_13ckg_121::-webkit-inner-spin-button{appearance:none;margin:0}._numberInput_13ckg_121::-webkit-outer-spin-button{appearance:none;margin:0}._numberScrub_13ckg_137{cursor:ew-resize;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;padding:5px 8px;display:flex;position:relative;overflow:hidden}._numberSlider_13ckg_149{cursor:pointer}._numberValue_13ckg_153{z-index:1;text-align:right;font-variant-numeric:tabular-nums;flex:auto;min-width:0;position:relative}._scrubGrip_13ckg_162{z-index:1;color:var(--castle-inspector-muted);letter-spacing:-2px;opacity:.4;flex:none;font-size:12px;line-height:1;position:relative}._scrubBubble_13ckg_175{z-index:1001;border:1px solid var(--castle-inspector-border);color:var(--castle-inspector-text);font-variant-numeric:tabular-nums;pointer-events:none;background:#14181ef5;border-radius:8px;padding:3px 10px;font-size:15px;position:fixed;transform:translate(-50%,-100%);box-shadow:0 2px 10px #00000073}._sliderFill_13ckg_190{pointer-events:none;z-index:0;background:#5a8cd24d;position:absolute;top:0;bottom:0;left:0}._sliderThumb_13ckg_200{pointer-events:none;z-index:1;background:#96bef0f2;border-radius:2px;width:3px;height:60%;position:absolute;top:50%;transform:translate(-50%,-50%)}._numpadBackdrop_13ckg_213{z-index:1000;background:#00000059;flex-direction:column;justify-content:flex-end;display:flex;position:fixed;inset:0}._numpadSheet_13ckg_223{background:var(--castle-inspector-bg,#16181d);border-top:1px solid var(--castle-inspector-border);padding:10px 10px calc(10px + env(safe-area-inset-bottom,0px));border-radius:14px 14px 0 0;box-shadow:0 -8px 24px #0006}._numpadValueRow_13ckg_231{justify-content:space-between;align-items:baseline;gap:12px;padding:6px 8px 12px;display:flex}._numpadValueLabel_13ckg_242{color:var(--castle-inspector-text);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:22px;overflow:hidden}._numpadValueNum_13ckg_251{color:var(--castle-inspector-text);font-variant-numeric:tabular-nums;flex:none;font-size:22px}._numpadGrid_13ckg_258{grid-template-columns:repeat(4,1fr);gap:8px;display:grid}._numpadKey_13ckg_264{border:1px solid var(--castle-inspector-border);background:var(--castle-inspector-input-bg);height:52px;color:var(--castle-inspector-text);cursor:pointer;touch-action:manipulation;border-radius:10px;font-size:20px}._numpadKey_13ckg_264:active{background:var(--castle-inspector-divider)}._numpadKeyZero_13ckg_279{grid-column:span 3}._numpadKeyDone_13ckg_283{color:#fff;background:#5a8cd2e6;border-color:#0000;font-size:16px}._colorInput_13ckg_290{border:1px solid var(--field-border,var(--castle-inspector-border));border-radius:var(--castle-radius);background:var(--castle-inspector-input-bg);cursor:pointer;outline:0;width:100%;height:28px;padding:2px}._checkbox_13ckg_301{border:1px solid var(--field-border,var(--castle-inspector-border));border-radius:var(--castle-radius);background:var(--castle-inspector-input-bg);cursor:pointer;width:20px;height:20px;box-shadow:none;color:var(--castle-text);flex:none;justify-content:center;justify-self:end;align-items:center;padding:0;display:flex}._checkboxOn_13ckg_318{background:var(--castle-black)}._checkboxMark_13ckg_322{width:12px;height:12px;display:none}._checkboxOn_13ckg_318 ._checkboxMark_13ckg_322{display:block}.castle-file-panel,.castle-code-panel,.castle-params-panel,.castle-params-overlay,.flow-class-files{--castle-font-mono:"SFMono-Regular", Consolas, "Liberation Mono", monospace;--castle-black:var(--v2-ink);--castle-panel-raised:var(--v2-raised);--castle-border:#444;--castle-text:var(--v2-white);--castle-text-dim:var(--v2-muted);--castle-inspector-bg:var(--v2-surface);--castle-inspector-text:var(--v2-fg);--castle-inspector-muted:var(--v2-muted);--castle-inspector-border:var(--v2-border);--castle-inspector-divider:var(--v2-border);--castle-inspector-input-bg:var(--v2-raised);--castle-workspace-bg:var(--v2-surface);--castle-sheet-bg:var(--v2-surface);--castle-radius:4px}.castle-file-panel{background:var(--castle-sheet-bg);flex-direction:column;height:100%;display:flex;overflow:hidden;transform:translateZ(0)}.castle-file-panel>.fileBrowserBare{flex:1 1 0;height:auto;min-height:0}.castle-file-toolbar{border-bottom:1px solid var(--castle-inspector-border);flex-wrap:wrap;flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.castle-file-toolbar .button-icon{margin-left:auto}.castle-file-toolbar .button-icon+.button-icon{margin-left:0}.castle-file-toolbar.versions-toolbar{padding-left:var(--castle-space-large);justify-content:space-between}.versions-toolbar-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--castle-text-muted);line-height:1;overflow:hidden}.castle-versions{flex-direction:column;flex:1 1 0;min-height:0;display:flex}.versions-error{align-items:flex-start}.versions-error>span:not(.icon-cell){white-space:pre-line}.versions-save{align-items:center;gap:var(--castle-space-base);flex-wrap:wrap;padding:0;display:flex}.versions-save .text-field{flex:130px;width:auto;min-width:0}.versions-save .button{white-space:nowrap;flex:none}.versions-note{padding:var(--castle-space-large) var(--castle-space-large) 0;color:var(--castle-text-muted);font-size:var(--castle-text-size-base)}.versions-empty{padding:var(--castle-space-large);color:var(--castle-text-muted);font-size:var(--castle-text-size-base)}.castle-versions-list{flex:1 1 0;min-height:0;overflow-y:auto}.version{align-items:start;column-gap:var(--castle-space-base);padding:var(--castle-space-base) var(--castle-space-base) var(--castle-space-large);border-bottom:1px solid var(--castle-border-1);grid-template-columns:minmax(0,1fr) auto;display:grid}.version-toggle{grid-template-columns:var(--castle-button-height) minmax(0, 1fr);align-items:start;column-gap:var(--castle-space-base);min-width:0;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;grid-area:1/1/auto/-1;margin:0;padding:0;display:grid}.version.is-expanded:not(.version-new) .version-toggle{grid-column:1}.version-toggle:focus-visible{outline:1px solid var(--castle-border-2);outline-offset:2px}.version.later,.version.later .icon-cell,.version.later .version-message,.version.later .version-nomessage,.version.later .version-meta,.version.later .version-summary{color:var(--castle-text-dim)}.version:hover{background:var(--castle-surface-3)}.version-main{gap:var(--castle-space-small);flex-direction:column;min-width:0;display:flex}.version-heading{align-items:center;gap:var(--castle-space-base);min-width:0;min-height:var(--castle-button-height);display:flex}.version-message{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--castle-text-primary);font-size:var(--castle-text-size-base);flex:auto;overflow:hidden}.version-nomessage{color:var(--castle-text-muted);font-style:italic}.version-meta{color:var(--castle-text-muted);font-size:var(--castle-text-size-small);margin:0;display:block}.version-actions{min-height:var(--castle-button-height);flex:none;grid-area:1/2;align-items:center;display:none}.version.is-expanded .version-actions{display:flex}.version-detail{padding-left:calc(var(--castle-button-height) + var(--castle-space-base));grid-column:1/-1;display:none}.version-new{flex:none}.version.is-expanded .version-detail{gap:var(--castle-space-small);flex-direction:column;display:flex}.version-summary{color:var(--castle-text-secondary);font-size:var(--castle-text-size-base);overflow-wrap:anywhere;margin:0}.files-feedback-banner{flex:none}.fileEditInput{border:1px solid var(--castle-border);background:var(--castle-inspector-input-bg);min-width:0;color:var(--castle-inspector-text);font:inherit;border-radius:3px;flex:auto;padding:1px 4px;font-size:13px}.fileEditInput:focus{border-color:#5a8bd6;outline:none}.castle-file-menu{z-index:1000;min-width:168px;position:fixed}.castle-file-menu .menu-keys{font-family:SFMono-Regular,Consolas,monospace}.castle-file-picker{gap:var(--castle-space-small);flex-direction:column;min-width:180px;display:flex}.castle-file-picker .text-field{width:100%}.castle-file-picker-label{color:var(--castle-text-muted);margin:0}.castle-file-picker-list{gap:var(--castle-space-small);flex-direction:column;max-height:min(40vh,180px);display:flex;overflow-y:auto}.castle-file-picker-list[hidden]{display:none}.fileBrowserBare{flex-direction:column;min-width:0;height:100%;display:flex}.fileTree{min-height:0;padding:var(--castle-space-base);flex:1 1 0;overflow-y:auto}.fileBranch{min-width:0}.file-row,.file-row.folder-row{align-items:center;gap:var(--castle-space-base);width:100%;min-width:0;height:var(--castle-button-height);margin:0 0 var(--castle-space-small);padding:0 var(--castle-space-base);padding-left:calc(var(--castle-space-base) + var(--file-depth,0) * (var(--castle-button-icon-size) + var(--castle-space-base)));border-radius:var(--castle-radius-small);color:var(--castle-text-secondary);font-size:var(--castle-text-size-base);text-align:left;cursor:pointer;background:0 0;border:0;line-height:1;display:flex}.file-row.folder-row{color:var(--castle-text-muted)}.file-row>span:not(.icon-slot):not(.icon-inline):not(.icon-cell){text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.file-row:hover{background:var(--castle-surface-3);color:var(--castle-text-primary)}.file-row.imported-row{color:var(--castle-text-muted);font-style:italic}.file-row.forked-row{color:var(--castle-text-secondary);font-style:normal}.file-row.selected-row,.file-row.selected-row:hover{background:var(--castle-surface-4);color:var(--castle-text-primary)}.file-row.hidden-row{color:var(--castle-text-dim)}:is(.file-row:has(.button-icon),.file-row:has(.icon-cell)){padding-right:0}.file-row .button-icon,.file-row .icon-cell{margin-left:auto}.file-row.edit-row{height:auto;min-height:var(--castle-button-height);cursor:default;flex-wrap:wrap}.file-row.edit-row .text-field{flex:auto;width:auto}.file-suffix{color:var(--castle-text-muted);flex:none}.file-row .file-edit-feedback{padding-left:calc(var(--castle-button-icon-size) + var(--castle-space-base));padding-bottom:var(--castle-space-small);font-size:var(--castle-text-size-small);white-space:normal;flex:1 0 100%;line-height:1.45;overflow:visible}.flow-root.is-mobile .castle-file-panel,.flow-mobile-switch{--castle-button-height:var(--castle-button-height-large)}.flow-mobile-switch{--castle-text-size-small:14px;--castle-text-size-base:16px;--castle-text-style-smallcaps-size:var(--castle-text-size-small)}.flow-root.is-mobile .castle-file-panel .button:not(.button-icon){padding-left:var(--castle-space-large);padding-right:var(--castle-space-large)}.flow-root.is-mobile .file-row,.flow-mobile-switch .file-row{margin-bottom:0}.flow-root.is-mobile .file-row>span:not(.icon-slot):not(.icon-inline):not(.icon-cell),.flow-mobile-switch .file-row>span:not(.icon-slot):not(.icon-inline):not(.icon-cell){line-height:var(--castle-button-height)}.flow-root.is-mobile .file-row:hover,.flow-mobile-switch .file-row:hover{color:var(--castle-text-secondary);background:0 0}.flow-root.is-mobile .file-row.folder-row:hover,.flow-root.is-mobile .file-row.imported-row:hover,.flow-mobile-switch .file-row.folder-row:hover,.flow-mobile-switch .file-row.imported-row:hover{color:var(--castle-text-muted)}.flow-root.is-mobile .file-row.hidden-row:hover,.flow-mobile-switch .file-row.hidden-row:hover{color:var(--castle-text-dim)}.flow-root.is-mobile .file-row.selected-row:hover,.flow-mobile-switch .file-row.selected-row:hover{background:var(--castle-surface-4);color:var(--castle-text-primary)}.flow-root.is-mobile .version:hover{background:0 0}.castle-code-panel{flex-direction:column;width:100%;height:100%;display:flex;position:relative}.mainEditor{background:var(--castle-sheet-bg);flex-direction:column;flex:1 1 0;width:100%;min-width:0;height:100%;min-height:0;display:flex}.editorBody{flex:1;min-height:0;display:flex;overflow:hidden;container:editor/inline-size}.codeEditor{background:var(--castle-workspace-bg);flex:1;grid-template-columns:1fr;min-width:0;min-height:0;display:grid}.codeMirrorHost{min-width:0;height:100%;min-height:0}.castle-code-overlay{color:var(--castle-inspector-muted);pointer-events:none;font-size:12px;position:absolute;top:10px;left:12px}.castle-code-overlay.castle-code-error{color:var(--v2-error)}.castle-code-savebar{background:var(--v2-error-bg);color:var(--v2-error);padding:4px 10px;font-size:11px;position:absolute;bottom:0;left:0;right:0}.castle-tab-import{color:var(--v2-muted);font-style:italic}.castle-modal-scrim{z-index:1000;background:#00000080;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.castle-modal{color:#e8e8e8;background:#232323;border:1px solid #3a3a3a;border-radius:6px;min-width:260px;max-width:380px;padding:16px;font-size:13px;box-shadow:0 8px 24px #0000008c}.castle-modal-text{margin-bottom:14px}.castle-modal-actions{justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.castle-modal-actions button,.castle-import-link-row button{color:#e8e8e8;cursor:pointer;background:#2e2e2e;border:1px solid #3a3a3a;border-radius:4px;padding:5px 12px;font-size:12px}.castle-modal-actions button:hover:not(:disabled),.castle-import-link-row button:hover:not(:disabled){background:#383838}.castle-modal-actions button:disabled,.castle-import-link-row button:disabled{opacity:.6;cursor:default}.castle-upload-modal{flex-direction:column;gap:10px;width:min(460px,100vw - 24px);max-width:none;max-height:calc(100vh - 32px);display:flex;overflow-y:auto}.castle-upload-modal>.castle-modal-text{margin-bottom:0}.castle-upload-modal>.castle-file-picker{width:100%;min-width:0}.castle-upload-input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.castle-upload-drop{justify-content:center;align-items:center;gap:var(--castle-space-small);width:100%;padding:calc(var(--castle-space-large) + var(--castle-space-base)) var(--castle-space-large);border:1px dashed var(--castle-border-3);border-radius:var(--castle-radius-small);background:var(--castle-surface-3);color:var(--castle-text-primary);font:inherit;cursor:pointer;flex-direction:column;display:flex}.castle-upload-drop:hover,.castle-upload-drop.over{border-color:var(--castle-border-2);background:var(--castle-surface-5)}.castle-upload-drop svg{font-size:var(--castle-button-icon-size)}.castle-upload-drop-label{font-size:var(--castle-text-size-base)}.castle-upload-drop-hint{color:var(--castle-text-muted);font-size:var(--castle-text-size-small)}.castle-upload-picked{flex-direction:column;max-height:132px;display:flex;overflow-y:auto}.castle-upload-picked-row{align-items:center;gap:var(--castle-space-base);min-height:var(--castle-button-height);padding:var(--castle-space-small) 0;display:flex}.castle-upload-picked-row+.castle-upload-picked-row{border-top:1px solid var(--castle-border-1)}.castle-upload-picked-name{min-width:0;font-size:var(--castle-text-size-base);flex-direction:column;flex:auto;justify-content:center;display:flex}.castle-upload-picked-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.castle-upload-picked-name .text-field{width:100%}.castle-upload-picked-warning{color:var(--castle-warn-text);font-size:var(--castle-text-size-small);white-space:normal;margin-top:2px;display:block}.castle-upload-picked-size{color:var(--castle-text-muted);font-size:var(--castle-text-size-small);font-variant-numeric:tabular-nums;flex:none}.castle-upload-status{text-overflow:ellipsis;white-space:nowrap;opacity:.7;text-align:left;flex:auto;min-width:0;font-size:12px;overflow:hidden}@media (width<=520px){.castle-upload-modal{width:calc(100vw - 16px);min-width:0;padding:12px}.castle-upload-drop{padding:var(--castle-space-large) var(--castle-space-base)}.castle-upload-picked{max-height:104px}.castle-file-picker-list{max-height:132px}}.castle-import-modal{flex-direction:column;width:min(520px,100vw - 32px);max-width:none;height:min(560px,100vh - 64px);max-height:none;display:flex}.castle-import-modal>.castle-modal-text,.castle-import-modal>.castle-key-tabs,.castle-import-modal>.castle-import-select-bar,.castle-import-modal>.castle-import-filter,.castle-import-modal>.castle-import-note,.castle-import-modal>.castle-import-error,.castle-import-modal>.castle-modal-actions{flex:none}.castle-import-select-bar{align-items:center;gap:10px;margin-bottom:8px;display:flex}.castle-import-select-all{padding:4px 8px}.castle-import-update-row{align-items:center}.castle-import-tick{color:#1b1b1b;border:1px solid #5a5a5a;border-radius:3px;flex:none;justify-content:center;align-items:center;width:16px;height:16px;font-size:10px;display:flex}.castle-import-tick.checked{background:#8ab4f8;border-color:#8ab4f8}.castle-import-filter{margin-bottom:8px}.castle-import-empty{color:#9a9a9a;text-align:center;flex:auto;justify-content:center;align-items:center;min-height:0;padding:10px;font-size:11px;display:flex}.castle-import-tabs .castle-key-tab{min-height:34px}.castle-import-list{background:#1b1b1b;border:1px solid #3a3a3a;border-radius:4px;flex:auto;min-height:0;overflow-y:auto}.castle-import-row{color:#e8e8e8;width:100%;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-bottom:1px solid #2e2e2e;gap:10px;padding:8px;font-size:12px;display:flex}.castle-import-row:last-child{border-bottom:0}.castle-import-row:hover{background:#262626}.castle-import-row.selected{background:#3a3a3a}.castle-import-row.disabled{opacity:.5}.castle-import-thumb{object-fit:cover;background:#2e2e2e;border-radius:3px;flex:none;width:56px;height:79px}.castle-import-row-text{flex-direction:column;gap:3px;min-width:0;display:flex}.castle-import-row-title{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.castle-import-row-meta{color:#9a9a9a;font-size:11px}.castle-import-link{flex-direction:column;flex:auto;gap:8px;min-height:0;display:flex}.castle-import-link-row{gap:8px;display:flex}.castle-import-link-row button{white-space:nowrap}.castle-import-note{color:#9a9a9a;padding:10px 2px;font-size:11px}.castle-import-error{color:#ff8f8f;margin-top:8px;font-size:11px}.castle-code-params-strip{border:0;border-bottom:1px solid var(--castle-inspector-border);background:var(--castle-inspector-input-bg);width:100%;color:var(--castle-inspector-muted);font:inherit;text-align:left;cursor:pointer;align-items:center;gap:8px;padding:6px 12px;font-size:12px;display:flex}.castle-code-params-strip:hover{color:var(--castle-inspector-text)}.castle-code-params-icon{flex:none;display:inline-flex}.castle-code-params-count{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.castle-code-params-action{color:var(--castle-inspector-text);flex:none;margin-left:auto}.castle-code-selection-bar{z-index:2;position:absolute;bottom:12px;right:12px}.castle-params-panel{background:var(--castle-sheet-bg);height:100%;color:var(--castle-inspector-text);-webkit-overflow-scrolling:touch;font-size:14px;overflow:hidden auto}.paramsFields{padding:10px 16px 24px}.paramsGroup+.paramsGroup{margin-top:6px}.paramsGroupTitle{color:var(--castle-inspector-muted);text-transform:uppercase;letter-spacing:.06em;overflow-wrap:anywhere;margin:0 0 10px;font-size:12px}.paramsGroup+.paramsGroup>.paramsGroupTitle{border-top:1px solid var(--castle-inspector-divider);margin-top:10px;padding-top:10px}.paramsNotice{color:var(--castle-inspector-muted);padding:16px}.paramsSaveError{border-bottom:1px solid var(--castle-inspector-border);color:var(--castle-inspector-text);background:#be464629;padding:8px 16px;font-size:13px}.paramsScopeBar{z-index:2;border-bottom:1px solid var(--castle-inspector-border);background:var(--castle-sheet-bg);align-items:center;gap:8px;padding:6px 10px;display:flex;position:sticky;top:0}.paramsScopeButton{border:1px solid var(--castle-inspector-border);border-radius:var(--castle-radius);background:var(--castle-inspector-input-bg);min-width:0;color:var(--castle-inspector-text);font:inherit;cursor:pointer;align-items:center;gap:6px;padding:4px 8px;font-size:13px;display:flex}.paramsScopeIcon,.paramsScopeChevron{flex:none;display:inline-flex}.paramsScopeLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.paramsScopeSummary{color:var(--castle-inspector-muted);font-size:12px}.paramsScopeMenu{max-width:calc(100% - 16px);max-height:60vh;position:absolute;top:100%;left:8px;overflow-y:auto}.paramsScopeMenu .menu-item-label{text-overflow:ellipsis;white-space:nowrap;text-align:left;direction:rtl;overflow:hidden}.paramsScopeDivider{color:var(--castle-inspector-muted);text-transform:uppercase;letter-spacing:.06em;padding:6px 10px 4px;font-size:11px}.paramsScopeCount,.paramsFileCount{color:var(--castle-inspector-muted);font-variant-numeric:tabular-nums;flex:none;margin-left:auto;padding-left:10px;font-size:12px}.paramsFile+.paramsFile{border-top:1px solid var(--castle-inspector-divider)}.paramsFileHead{align-items:center;padding:0 6px 0 0;display:flex}.paramsFileHead~.paramsFields{padding-bottom:6px}.paramsFileToggle{min-width:0;color:var(--castle-inspector-text);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:1;align-items:center;gap:6px;padding:8px 4px 8px 10px;font-size:12px;display:flex}.paramsFileChevron{color:var(--castle-inspector-muted);flex:none;display:inline-flex}.paramsFilePath{text-overflow:ellipsis;white-space:nowrap;text-align:left;min-width:0;font-family:var(--castle-font-mono);direction:rtl;overflow:hidden}.paramsFileOpen{border-radius:var(--castle-radius);color:var(--castle-inspector-muted);cursor:pointer;background:0 0;border:0;flex:none;padding:4px 6px;display:inline-flex}.paramsFileOpen:hover{color:var(--castle-inspector-text)}.paramsScopeBar .paramsFileOpen{margin-left:auto}.paramsEmpty{max-width:46em;padding:20px 16px}.paramsEmptyLead{color:var(--castle-inspector-text);margin:0 0 10px;font-size:15px}.paramsEmptyBody{color:var(--castle-inspector-muted);margin:0 0 12px;line-height:1.5}.paramsEmpty code{font-family:var(--castle-font-mono);color:var(--castle-inspector-text);font-size:13px}.paramsEmptyCode{border:1px solid var(--castle-inspector-border);border-radius:var(--castle-radius);background:var(--castle-inspector-input-bg);color:var(--castle-inspector-text);font-family:var(--castle-font-mono);margin:0 0 14px;padding:10px 12px;font-size:13px;line-height:1.45;overflow-x:auto}.castle-params-panel .paramExpr{text-overflow:ellipsis;white-space:nowrap;border:1px dashed var(--castle-inspector-border);border-radius:var(--castle-radius);min-width:0;color:var(--castle-inspector-muted);font-family:var(--castle-font-mono);cursor:default;padding:5px 8px;font-size:13px;overflow:hidden}.castle-params-panel [data-field-id].paramFieldRevealed{animation:1.4s ease-out paramFieldReveal}@keyframes paramFieldReveal{0%,60%{background:var(--castle-inspector-input-bg);box-shadow:0 0 0 4px var(--castle-inspector-input-bg)}to{background:0 0;box-shadow:0 0 0 4px #0000}}.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre;font-family:monospace}.xterm .xterm-accessibility-tree>div{transform-origin:0;width:fit-content}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;z-index:11;background:0 0;transition:opacity .1s linear}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{display:none;position:absolute}.xterm .xterm-scrollable-element>.shadow.top{width:100%;height:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset;display:block;top:0;left:3px}.xterm .xterm-scrollable-element>.shadow.left{width:3px;height:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset;display:block;top:3px;left:0}.xterm .xterm-scrollable-element>.shadow.top-left-corner{width:3px;height:3px;display:block;top:0;left:0}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}@font-face{font-family:Basteleur;src:url(/__castle/ide/assets/Basteleur-Bold-DKFKedNb.woff2)format("woff2"),url(/__castle/ide/assets/Basteleur-Bold-CK8LF7Pt.woff)format("woff");font-weight:700;font-style:normal}.flow-root{--flow-gutter:#000;--flow-surface:#181818;--flow-chip:#282828;--flow-font-display:"Basteleur", Georgia, "Times New Roman", serif;--flow-fg:#e6e6e6;--flow-secondary:#b3b3b3;--flow-muted:#888;--flow-dim:#525252;--flow-border:#2a2a2a;--flow-border-active:#5a5a5a;--flow-gap:12px;--flow-dock-h:36px;--flow-tab-h:var(--castle-panel-header-height);--flow-icon-dock:var(--castle-button-icon-size);--flow-btn-sm:var(--castle-button-height);--flow-host-l:0px;--flow-host-r:0px;--flow-max-chips:6;--flow-chip-size:36px;--flow-chips-w:calc(var(--flow-max-chips) * var(--flow-chip-size));--flow-fade:22px;background:var(--flow-gutter);color:var(--flow-fg);flex-direction:column;font:13px ui-sans-serif,system-ui,-apple-system,sans-serif;display:flex;position:fixed;inset:0;overflow:hidden}.flow-root *{box-sizing:border-box}body.flow-reordering,body.flow-reordering *{touch-action:none;-webkit-user-select:none!important;user-select:none!important;cursor:grabbing!important}.flow-topbar{top:var(--flow-gap);left:var(--flow-gap);right:var(--flow-gap);height:var(--flow-dock-h);align-items:center;gap:var(--castle-space-base);z-index:40;pointer-events:none;padding-left:var(--flow-host-l);padding-right:var(--flow-host-r);grid-template-columns:minmax(0,1fr) minmax(0,auto) minmax(0,1fr);display:grid;position:absolute}.flow-topbar-leading{justify-self:start;align-items:center;gap:var(--castle-space-base);pointer-events:none;min-width:0;display:flex}.flow-topbar-leading>*{pointer-events:auto}.flow-castle-wrap{flex-shrink:0;position:relative}.flow-menu-backdrop{z-index:49;position:fixed;inset:0}.flow-castle-menu{top:calc(var(--flow-dock-h) + var(--castle-space-base));z-index:50;position:absolute;left:0}.flow-menu-narrow{display:none}.flow-deck-identity{max-width:260px}.flow-deck-vis{color:var(--flow-secondary);flex-shrink:0;font-size:14px;display:inline-flex}.flow-deck-vis svg{width:14px;height:14px}.flow-deck-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.flow-deck-caret{color:var(--flow-muted);flex-shrink:0;display:inline-flex}.flow-draft-status{color:var(--flow-muted);font-size:var(--castle-text-size-small);white-space:nowrap;flex-shrink:0}.flow-draft-status.is-error{color:var(--castle-danger-text)}.flow-tabs-wrap{pointer-events:auto;justify-self:center;align-items:center;gap:var(--castle-space-base);min-width:0;max-width:100%;display:flex}.flow-tabs{min-width:0;max-width:var(--flow-chips-w);flex:0 auto;position:relative}.flow-tabs-scroll{scrollbar-width:none;align-items:stretch;gap:0;height:100%;padding:0;display:flex;overflow:auto hidden}.flow-tabs-scroll::-webkit-scrollbar{display:none}.flow-tabs.more-left{-webkit-mask-image:linear-gradient(to right, transparent, #000 var(--flow-fade));-webkit-mask-image:linear-gradient(to right, transparent, #000 var(--flow-fade));mask-image:linear-gradient(to right, transparent, #000 var(--flow-fade));border-top-left-radius:0;border-bottom-left-radius:0}.flow-tabs.more-right{-webkit-mask-image:linear-gradient(to left, transparent, #000 var(--flow-fade));-webkit-mask-image:linear-gradient(to left, transparent, #000 var(--flow-fade));mask-image:linear-gradient(to left, transparent, #000 var(--flow-fade));border-top-right-radius:0;border-bottom-right-radius:0}.flow-tabs.more-left.more-right{-webkit-mask-image:linear-gradient(to right, transparent, #000 var(--flow-fade), #000 calc(100% - var(--flow-fade)), transparent);-webkit-mask-image:linear-gradient(to right, transparent, #000 var(--flow-fade), #000 calc(100% - var(--flow-fade)), transparent);mask-image:linear-gradient(to right, transparent, #000 var(--flow-fade), #000 calc(100% - var(--flow-fade)), transparent)}.button.flow-tabs-add{width:var(--castle-button-height-large);height:var(--castle-button-height-large);border-radius:var(--castle-radius-base);flex-shrink:0}.flow-chip-icon{font-size:var(--flow-icon-dock);display:inline-flex}.flow-chip-icon svg{width:var(--flow-icon-dock);height:var(--flow-icon-dock)}.flow-topbar-trailing{justify-self:end;align-items:center;gap:var(--castle-space-base);pointer-events:none;min-width:0;display:flex}.flow-preview-btn{pointer-events:auto;flex-shrink:0}.flow-preview-btn-failed{color:var(--castle-danger-text);border-color:var(--castle-danger-text)}.flow-preview-label{justify-items:center;display:grid}.flow-preview-label>*{grid-area:1/1}.flow-preview-label-sizer{visibility:hidden;pointer-events:none}.flow-root.is-mobile{--flow-max-chips:4;--flow-gap:var(--castle-space-base);--castle-text-size-small:14px;--castle-text-size-base:16px;--castle-text-style-smallcaps-size:var(--castle-text-size-small);--flow-tab-h:var(--castle-panel-header-height-mobile);--flow-icon-dock:var(--castle-button-icon-size-large);--flow-btn-sm:var(--castle-button-height-large)}.flow-root.is-mobile .flow-deck-identity,.flow-root.is-mobile .flow-topbar-trailing{display:none}.flow-root.is-mobile .flow-topbar{grid-template-columns:auto minmax(0,1fr)}.flow-root.is-mobile .flow-tabs-wrap{justify-self:start}.flow-root.is-mobile .flow-topbar-leading:not(:has(.flow-castle-wrap)):not(:has(.flow-draft-status)){display:none}.flow-root.is-mobile .menu-item.flow-menu-narrow{display:flex}.flow-root.is-mobile .menu-separator.flow-menu-narrow{display:block}.flow-scroller{flex:auto;min-height:0;overflow:auto}.flow-field{width:max-content;min-width:100%;min-height:100%}.flow-row{align-items:flex-start;gap:var(--flow-gap);width:max-content;min-height:100%;padding:calc(var(--flow-dock-h) + var(--flow-gap) * 2) var(--flow-gap) var(--flow-gap);padding-right:calc(var(--flow-gap) + var(--flow-overscroll,0px));display:flex}.flow-group{flex-direction:column;min-width:200px;display:flex;overflow:clip}.flow-root.is-mobile .panel:hover,.flow-root.is-mobile .panel.is-hover,.flow-root.is-maximized .panel:hover,.flow-root.is-maximized .panel.is-hover{border-color:var(--castle-border-1)}.flow-root.is-mobile .panel-header:hover,.flow-root.is-mobile .panel-tabs-header:hover{background:var(--castle-surface-3);cursor:default}.operator-chrome{align-items:stretch;gap:var(--castle-space-base);flex:auto;min-width:0;display:flex}.operator-chrome .panel-type-toggle{flex-shrink:0}.flow-root.is-mobile .operator-chrome{display:contents}.flow-tab-icon{font-size:var(--flow-icon-dock);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.flow-drop-indicator{background:var(--castle-border-4);z-index:60;pointer-events:none;border-radius:2px;width:3px;position:fixed;transform:translate(-50%)}.flow-group.pinned{left:var(--flow-gap);z-index:5;position:sticky;box-shadow:0 6px 24px #00000073}.flow-panel-body{flex:auto;min-height:0;position:relative;overflow:hidden}.flow-panel-slot{width:100%;height:100%}.flow-resize-e{top:var(--flow-tab-h);cursor:col-resize;touch-action:none;z-index:20;width:16px;position:absolute;bottom:0;right:-8px}.flow-resize-s{cursor:row-resize;touch-action:none;z-index:20;height:16px;position:absolute;bottom:-8px;left:0;right:0}.flow-resize-se{cursor:nwse-resize;touch-action:none;z-index:21;width:22px;height:22px;position:absolute;bottom:-11px;right:-11px}.flow-placeholder{height:100%;color:var(--flow-muted);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:16px;display:flex}.flow-placeholder-icon :is(svg){width:34px;height:34px}.flow-placeholder-label{color:var(--flow-secondary);font-size:14px}.flow-placeholder-kind{color:var(--flow-muted);font:11px ui-monospace,SFMono-Regular,Menlo,monospace}.flow-placeholder.kind-play{background:repeating-linear-gradient(45deg,#101018,#101018 10px,#0d0d14 10px 20px)}.flow-picker{z-index:50;max-height:min(60vh,420px);position:fixed}.flow-picker-input{margin-bottom:var(--castle-space-base);color:var(--flow-fg);background:var(--flow-surface);border:1px solid var(--flow-border);border-radius:var(--castle-radius-small);outline:none;flex:none;padding:7px 9px;font:13px ui-sans-serif,system-ui,sans-serif}.flow-picker-input:focus{border-color:var(--flow-border-active)}.flow-picker-list{flex:auto;min-height:0;overflow-y:auto}.flow-picker-empty{color:var(--flow-muted);padding:10px 8px;font-size:12px}.flow-operator-host{width:100%;height:100%}.flow-root.is-maximized .flow-scroller{overflow:hidden}.flow-root.is-maximized .flow-field,.flow-root.is-maximized .flow-row{width:100%;height:100%}.flow-root.is-maximized .flow-row{align-items:stretch}.flow-group.maximized{width:100%;height:100%}.flow-group.hidden{display:none}.flow-root.is-mobile .flow-scroller{position:relative;overflow:clip}.flow-root.is-mobile .flow-field{inset:calc(var(--flow-dock-h) + var(--flow-gap) * 2) 0 var(--flow-gap);width:auto;min-width:0;height:auto;min-height:0;position:absolute;overflow:clip}.flow-root.is-mobile .flow-row{width:100%;height:100%;transform:translateX(calc(var(--flow-page,0) * -100% + var(--flow-drag,0px)));will-change:transform;flex-wrap:nowrap;align-items:stretch;gap:0;padding:0;transition:transform .28s cubic-bezier(.22,.61,.36,1);display:flex}.flow-root.is-mobile.flow-dragging .flow-row{transition:none}.flow-root.is-mobile .flow-group{flex:0 0 100%;min-width:0;margin:0}.flow-root.is-mobile .flow-resize-e,.flow-root.is-mobile .flow-resize-s,.flow-root.is-mobile .flow-resize-se{display:none}@media (prefers-reduced-motion:reduce){.flow-root.is-mobile .flow-row{transition:none}}.flow-push-modal-backdrop{z-index:1000;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);pointer-events:auto;background:#0000008c;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.flow-push-modal{border:1px solid var(--flow-border);text-align:center;background:#141414;border-radius:18px;flex-direction:column;align-items:center;gap:10px;width:min(360px,100%);padding:28px 24px;display:flex;box-shadow:0 20px 60px #0009}.flow-push-spinner{border:3px solid #ffffff26;border-top-color:var(--flow-fg);border-radius:50%;width:34px;height:34px;animation:.8s linear infinite flow-push-spin}@keyframes flow-push-spin{to{transform:rotate(360deg)}}.flow-push-check{color:#fff;background:#2e7d32;border-radius:50%;justify-content:center;align-items:center;width:34px;height:34px;font-size:20px;font-weight:700;display:flex}.flow-push-check-failed{background:var(--castle-danger-surface)}.flow-push-title{color:var(--flow-fg);font-size:16px;font-weight:600}.flow-push-sub{color:var(--flow-secondary);font-size:12px}.flow-push-url{overflow-wrap:anywhere;color:#7aa2ff;max-width:100%;font:13px ui-monospace,SFMono-Regular,Menlo,monospace;text-decoration:none}.flow-push-url:hover{text-decoration:underline}.flow-push-done{background:var(--flow-fg);color:var(--flow-gutter);cursor:pointer;border:none;border-radius:999px;margin-top:8px;padding:9px 24px;font-size:14px;font-weight:600}.flow-tabstrip{height:var(--flow-tab-h);-webkit-user-select:none;user-select:none;touch-action:none;flex-shrink:0}.flow-tabs-row{position:relative;overflow:hidden}.flow-tabs-row .panel-tab{flex:0 auto;min-width:0}.flow-tab-icon svg{width:var(--flow-icon-dock);height:var(--flow-icon-dock)}.flow-tabs-row .panel-tab-insert{z-index:3;height:auto;position:absolute;top:0;bottom:0}.panel-tab-ghost,.dock-segment-ghost{z-index:80;position:fixed}.flow-tabstrip .button{flex-shrink:0;align-self:center}.flow-tab-body{position:absolute;inset:0}.flow-tab-body.inactive{display:none}.flow-class-drawer{background:var(--castle-sheet-bg,var(--v2-surface));border-right:1px solid var(--flow-border);flex-direction:column;flex:none;width:220px;min-height:0;padding:2px 4px 6px;display:flex;overflow:hidden}.flow-class-files{flex:auto;min-height:0;overflow-y:auto}.flow-class-files .fileBrowserBare,.flow-class-files .fileTree{flex:none;height:auto;overflow:visible}.flow-class-recent{border-bottom:1px solid var(--castle-inspector-divider,var(--flow-border));margin-bottom:10px;padding-bottom:10px}.flow-class-section{color:var(--v2-muted,var(--flow-muted));padding:5px 9px;font-size:14px}.flow-class-drawer .flow-view-segments{margin:4px 2px 8px}.flow-class-drawer-empty{color:var(--flow-muted);padding:10px 8px;font-size:12px}.flow-empty-editor{flex:auto;height:100%;min-height:0;display:flex}.flow-empty-editor .flow-class-drawer{flex:0 0 220px}.flow-empty-editor-msg{color:var(--flow-muted);background:var(--castle-sheet-bg,var(--v2-surface));flex:auto;justify-content:center;align-items:center;font-size:13px;display:flex}.flow-tabstrip-mobile{cursor:default;grid-template-columns:1fr auto 1fr;align-items:center;display:grid}.flow-mobile-strip-left,.flow-mobile-strip-right{align-items:center;min-width:0;display:flex}.flow-mobile-strip-left{justify-content:flex-start}.flow-mobile-strip-right{justify-content:flex-end}.flow-tabstrip-mobile .panel-header-actions{margin-left:0}.panel-mobile-current .flow-tab-icon,.panel-mobile-current .flow-tab-icon svg{width:var(--castle-button-icon-size-large);height:var(--castle-button-icon-size-large)}.flow-mobile-chevron{width:var(--castle-button-icon-size-large);height:var(--castle-button-icon-size-large);opacity:.6;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.flow-mobile-chevron svg{width:var(--castle-button-icon-size-large);height:var(--castle-button-icon-size-large);display:block}.flow-mobile-switch-backdrop{z-index:900;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);pointer-events:auto;background:#0000008c;align-items:flex-end;display:flex;position:fixed;inset:0}.flow-mobile-switch{border-top:1px solid var(--flow-border);background:#141414;border-radius:16px 16px 0 0;flex-direction:column;width:100%;max-height:70vh;display:flex;overflow:hidden}.flow-mobile-switch-header{border-bottom:1px solid var(--flow-border);justify-content:space-between;align-items:center;padding:14px 16px;font-weight:600;display:flex}.flow-mobile-switch-close{color:var(--flow-secondary);cursor:pointer;background:0 0;border:none;font-size:22px;line-height:1}.flow-view-segments{background:var(--v2-inset,#0e0e0e);border-radius:8px;flex:none;gap:2px;margin:10px 16px 6px;padding:2px;display:flex}.flow-view-segment{color:var(--flow-secondary);font:inherit;cursor:pointer;background:0 0;border:none;border-radius:6px;flex:1 1 0;padding:7px 10px;font-size:13px;font-weight:600}.flow-view-segment.on{color:var(--flow-text,#eee);background:#282828}.flow-mobile-switch-list{background:var(--v2-surface,#141414);flex-direction:column;flex:auto;min-height:0;display:flex;overflow:hidden}.flow-mobile-switch-list .flow-class-files{padding:4px 6px 10px}
|
package/dist/shell/index.html
CHANGED
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
<link rel="icon" type="image/png" sizes="32x32" href="/__castle/ide/favicon-32x32.png" />
|
|
11
11
|
<link rel="icon" type="image/png" sizes="16x16" href="/__castle/ide/favicon-16x16.png" />
|
|
12
12
|
<link rel="icon" href="/__castle/ide/favicon.ico" sizes="any" />
|
|
13
|
-
<script type="module" crossorigin src="/__castle/ide/assets/index-
|
|
14
|
-
<link rel="stylesheet" crossorigin href="/__castle/ide/assets/index-
|
|
13
|
+
<script type="module" crossorigin src="/__castle/ide/assets/index-DnNy-Z5u.js"></script>
|
|
14
|
+
<link rel="stylesheet" crossorigin href="/__castle/ide/assets/index-cdsH2lna.css">
|
|
15
15
|
</head>
|
|
16
16
|
<body>
|
|
17
17
|
<div id="root"></div>
|
|
@@ -15,11 +15,14 @@
|
|
|
15
15
|
margin-bottom: 0;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
+
/* `MAX_ENEMY_SPEED` is a single unbreakable token to the line breaker -- no
|
|
19
|
+
space, and an underscore is not a break opportunity -- so a long param name
|
|
20
|
+
has to be allowed to break mid-word or it overflows the label column. */
|
|
18
21
|
.fieldLabel {
|
|
19
22
|
color: var(--castle-inspector-text);
|
|
20
23
|
font-size: 14px;
|
|
21
|
-
|
|
22
|
-
|
|
24
|
+
min-width: 0;
|
|
25
|
+
overflow-wrap: anywhere;
|
|
23
26
|
}
|
|
24
27
|
|
|
25
28
|
/* Instance override: purple label + input border, plus a "Default: X [Reset]"
|