sliccy 2.26.2 → 2.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/README.md +5 -2
  2. package/dist/ui/assets/{anthropic-BCfzikVk.js → anthropic-Bbl8Sg5y.js} +1 -1
  3. package/dist/ui/assets/{azure-openai-responses-CGU2TZAi.js → azure-openai-responses-B3trwv0k.js} +1 -1
  4. package/dist/ui/assets/{es-CJWl2MN2.js → es-BKvQPtb5.js} +1 -1
  5. package/dist/ui/assets/{fs-BOiXGVkS.js → fs-t3D13Hd5.js} +1 -1
  6. package/dist/ui/assets/{google-BO7PilpD.js → google-C7sZ3HlN.js} +1 -1
  7. package/dist/ui/assets/index-B83C5cLK.css +1 -0
  8. package/dist/ui/assets/{index-D4tp1ANR.js → index-Bv5amGny.js} +2611 -2611
  9. package/dist/ui/assets/{mistral-Bl7QoMFH.js → mistral-ppKGJAy7.js} +1 -1
  10. package/dist/ui/assets/offscreen-client-DCrdvikK.js +1 -0
  11. package/dist/ui/assets/{onboarding-orchestrator-B-aufPPu.js → onboarding-orchestrator-Dvwfz7ld.js} +1 -1
  12. package/dist/ui/assets/{openai-codex-responses-B_UruyNV.js → openai-codex-responses-Gx5Fi-2N.js} +1 -1
  13. package/dist/ui/assets/{openai-completions-BFlhnFqz.js → openai-completions-CboEkAw6.js} +1 -1
  14. package/dist/ui/assets/{openai-responses-D_eDRlIR.js → openai-responses-Bza0SYF0.js} +1 -1
  15. package/dist/ui/assets/provider-settings-DS3C0NKi.js +95 -0
  16. package/dist/ui/assets/{skills-D15e98qd.js → skills-DclcqNBg.js} +1 -1
  17. package/dist/ui/electron-overlay-entry.js +4 -4
  18. package/dist/ui/index.html +9 -9
  19. package/dist/ui/packages/webapp/index.html +9 -9
  20. package/package.json +13 -7
  21. package/dist/ui/assets/index-BqtzdP8d.css +0 -1
  22. package/dist/ui/assets/offscreen-client-DRN1fwvT.js +0 -1
  23. package/dist/ui/assets/provider-settings-xCthm0Wq.js +0 -95
  24. /package/dist/ui/assets/{db-QbwB670D.js → db-CmHnV4DS.js} +0 -0
  25. /package/dist/ui/assets/{path-utils-DAY6ORUp.js → path-utils-Dzkyzd3x.js} +0 -0
@@ -1,3 +1,3 @@
1
- import{a as e,n as t,o as n,r,t as i}from"./chunk-jRWAZmH_.js";import{t as a}from"./logger-GnnuzSDq.js";import{n as o,r as s,t as c}from"./path-utils-DAY6ORUp.js";var l=i(((e,t)=>{t.exports=n;function n(e){var t,n;if(typeof e!=`function`)throw Error(`expected a function but got `+e);return function(){return t?n:(t=!0,n=e.apply(this,arguments),n)}}})),u=i((()=>{(function(e){function t(e,t){var n;return n=e instanceof Buffer?e:Buffer.from(e.buffer,e.byteOffset,e.byteLength),n.toString(t)}var n=function(e){return Buffer.from(e)};function r(e){for(var t=0,n=Math.min(256*256,e.length+1),r=new Uint16Array(n),i=[],a=0;;){var o=t<e.length;if(!o||a>=n-1){var s=r.subarray(0,a);if(i.push(String.fromCharCode.apply(null,s)),!o)return i.join(``);e=e.subarray(t),t=0,a=0}var c=e[t++];if(!(c&128))r[a++]=c;else if((c&224)==192){var l=e[t++]&63;r[a++]=(c&31)<<6|l}else if((c&240)==224){var l=e[t++]&63,u=e[t++]&63;r[a++]=(c&31)<<12|l<<6|u}else if((c&248)==240){var l=e[t++]&63,u=e[t++]&63,d=e[t++]&63,f=(c&7)<<18|l<<12|u<<6|d;f>65535&&(f-=65536,r[a++]=f>>>10&1023|55296,f=56320|f&1023),r[a++]=f}}}function i(e){for(var t=0,n=e.length,r=0,i=Math.max(32,n+(n>>>1)+7),a=new Uint8Array(i>>>3<<3);t<n;){var o=e.charCodeAt(t++);if(o>=55296&&o<=56319){if(t<n){var s=e.charCodeAt(t);(s&64512)==56320&&(++t,o=((o&1023)<<10)+(s&1023)+65536)}if(o>=55296&&o<=56319)continue}if(r+4>a.length){i+=8,i*=1+t/e.length*2,i=i>>>3<<3;var c=new Uint8Array(i);c.set(a),a=c}if(!(o&4294967168)){a[r++]=o;continue}else if(!(o&4294965248))a[r++]=o>>>6&31|192;else if(!(o&4294901760))a[r++]=o>>>12&15|224,a[r++]=o>>>6&63|128;else if(!(o&4292870144))a[r++]=o>>>18&7|240,a[r++]=o>>>12&63|128,a[r++]=o>>>6&63|128;else continue;a[r++]=o&63|128}return a.slice?a.slice(0,r):a.subarray(0,r)}var a=`Failed to `,o=function(e,t,n){if(e)throw Error(`${a}${t}: the '${n}' option is unsupported.`)},s=typeof Buffer==`function`&&Buffer.from,c=s?n:i;function l(){this.encoding=`utf-8`}l.prototype.encode=function(e,t){return o(t&&t.stream,`encode`,`stream`),c(e)};function u(e){var t;try{var n=new Blob([e],{type:`text/plain;charset=UTF-8`});t=URL.createObjectURL(n);var r=new XMLHttpRequest;return r.open(`GET`,t,!1),r.send(),r.responseText}finally{t&&URL.revokeObjectURL(t)}}var d=!s&&typeof Blob==`function`&&typeof URL==`function`&&typeof URL.createObjectURL==`function`,f=[`utf-8`,`utf8`,`unicode-1-1-utf-8`],p=r;s?p=t:d&&(p=function(e){try{return u(e)}catch{return r(e)}});var m=`construct 'TextDecoder'`,h=`${a} ${m}: the `;function g(e,t){o(t&&t.fatal,m,`fatal`),e||=`utf-8`;var n;if(n=s?Buffer.isEncoding(e):f.indexOf(e.toLowerCase())!==-1,!n)throw RangeError(`${h} encoding label provided ('${e}') is invalid.`);this.encoding=e,this.fatal=!1,this.ignoreBOM=!1}g.prototype.decode=function(e,t){o(t&&t.stream,`decode`,`stream`);var n;return n=e instanceof Uint8Array?e:e.buffer instanceof ArrayBuffer?new Uint8Array(e.buffer):new Uint8Array(e),p(n,this.encoding)},e.TextEncoder=e.TextEncoder||l,e.TextDecoder=e.TextDecoder||g})(typeof window<`u`?window:typeof globalThis<`u`?globalThis:void 0)})),d=i(((e,t)=>{u(),t.exports={encode:e=>new TextEncoder().encode(e),decode:e=>new TextDecoder().decode(e)}})),f=i(((e,t)=>{t.exports=n;function n(e,t,n){var r;return function(){if(!t)return e.apply(this,arguments);var i=this,a=arguments,o=n&&!r;if(clearTimeout(r),r=setTimeout(function(){if(r=null,!o)return e.apply(i,a)},t),o)return e.apply(this,arguments)}}})),p=i(((e,t)=>{function n(e){if(e.length===0)return`.`;let t=a(e);return t=t.reduce(c,[]),i(...t)}function r(...e){let t=``;for(let r of e)t=r.startsWith(`/`)?r:n(i(t,r));return t}function i(...e){if(e.length===0)return``;let t=e.join(`/`);return t=t.replace(/\/{2,}/g,`/`),t}function a(e){if(e.length===0)return[];if(e===`/`)return[`/`];let t=e.split(`/`);return t[t.length-1]===``&&t.pop(),e[0]===`/`?t[0]=`/`:t[0]!==`.`&&t.unshift(`.`),t}function o(e){let t=e.lastIndexOf(`/`);if(t===-1)throw Error(`Cannot get dirname of "${e}"`);return t===0?`/`:e.slice(0,t)}function s(e){if(e===`/`)throw Error(`Cannot get basename of "${e}"`);let t=e.lastIndexOf(`/`);return t===-1?e:e.slice(t+1)}function c(e,t){if(e.length===0)return e.push(t),e;if(t===`.`)return e;if(t===`..`){if(e.length===1){if(e[0]===`/`)throw Error(`Unable to normalize path - traverses above root directory`);if(e[0]===`.`)return e.push(t),e}return e[e.length-1]===`..`?(e.push(`..`),e):(e.pop(),e)}return e.push(t),e}t.exports={join:i,normalize:n,split:a,basename:s,dirname:o,resolve:r}})),m=i(((e,t)=>{function n(e){return class extends Error{constructor(...t){super(...t),this.code=e,this.message?this.message=e+`: `+this.message:this.message=e}}}t.exports={EEXIST:n(`EEXIST`),ENOENT:n(`ENOENT`),ENOTDIR:n(`ENOTDIR`),ENOTEMPTY:n(`ENOTEMPTY`),ETIMEDOUT:n(`ETIMEDOUT`),EISDIR:n(`EISDIR`)}})),h=i(((e,t)=>{var n=p(),{EEXIST:r,ENOENT:i,ENOTDIR:a,ENOTEMPTY:o,EISDIR:s}=m(),c=0;t.exports=class{constructor(){}_makeRoot(e=new Map){return e.set(c,{mode:511,type:`dir`,size:0,ino:0,mtimeMs:Date.now()}),e}activate(e=null){e===null?this._root=new Map([[`/`,this._makeRoot()]]):typeof e==`string`?this._root=new Map([[`/`,this._makeRoot(this.parse(e))]]):this._root=e}get activated(){return!!this._root}deactivate(){this._root=void 0}size(){return this._countInodes(this._root.get(`/`))-1}_countInodes(e){let t=1;for(let[n,r]of e)n!==c&&(t+=this._countInodes(r));return t}autoinc(){return this._maxInode(this._root.get(`/`))+1}_maxInode(e){let t=e.get(c).ino;for(let[n,r]of e)n!==c&&(t=Math.max(t,this._maxInode(r)));return t}print(e=this._root.get(`/`)){let t=``,n=(e,r)=>{for(let[i,a]of e){if(i===0)continue;let e=a.get(c),o=e.mode.toString(8);t+=`${` `.repeat(r)}${i}\t${o}`,e.type===`file`?t+=`\t${e.size}\t${e.mtimeMs}\n`:(t+=`
1
+ import{a as e,n as t,o as n,r,t as i}from"./chunk-jRWAZmH_.js";import{t as a}from"./logger-GnnuzSDq.js";import{n as o,r as s,t as c}from"./path-utils-Dzkyzd3x.js";var l=i(((e,t)=>{t.exports=n;function n(e){var t,n;if(typeof e!=`function`)throw Error(`expected a function but got `+e);return function(){return t?n:(t=!0,n=e.apply(this,arguments),n)}}})),u=i((()=>{(function(e){function t(e,t){var n;return n=e instanceof Buffer?e:Buffer.from(e.buffer,e.byteOffset,e.byteLength),n.toString(t)}var n=function(e){return Buffer.from(e)};function r(e){for(var t=0,n=Math.min(256*256,e.length+1),r=new Uint16Array(n),i=[],a=0;;){var o=t<e.length;if(!o||a>=n-1){var s=r.subarray(0,a);if(i.push(String.fromCharCode.apply(null,s)),!o)return i.join(``);e=e.subarray(t),t=0,a=0}var c=e[t++];if(!(c&128))r[a++]=c;else if((c&224)==192){var l=e[t++]&63;r[a++]=(c&31)<<6|l}else if((c&240)==224){var l=e[t++]&63,u=e[t++]&63;r[a++]=(c&31)<<12|l<<6|u}else if((c&248)==240){var l=e[t++]&63,u=e[t++]&63,d=e[t++]&63,f=(c&7)<<18|l<<12|u<<6|d;f>65535&&(f-=65536,r[a++]=f>>>10&1023|55296,f=56320|f&1023),r[a++]=f}}}function i(e){for(var t=0,n=e.length,r=0,i=Math.max(32,n+(n>>>1)+7),a=new Uint8Array(i>>>3<<3);t<n;){var o=e.charCodeAt(t++);if(o>=55296&&o<=56319){if(t<n){var s=e.charCodeAt(t);(s&64512)==56320&&(++t,o=((o&1023)<<10)+(s&1023)+65536)}if(o>=55296&&o<=56319)continue}if(r+4>a.length){i+=8,i*=1+t/e.length*2,i=i>>>3<<3;var c=new Uint8Array(i);c.set(a),a=c}if(!(o&4294967168)){a[r++]=o;continue}else if(!(o&4294965248))a[r++]=o>>>6&31|192;else if(!(o&4294901760))a[r++]=o>>>12&15|224,a[r++]=o>>>6&63|128;else if(!(o&4292870144))a[r++]=o>>>18&7|240,a[r++]=o>>>12&63|128,a[r++]=o>>>6&63|128;else continue;a[r++]=o&63|128}return a.slice?a.slice(0,r):a.subarray(0,r)}var a=`Failed to `,o=function(e,t,n){if(e)throw Error(`${a}${t}: the '${n}' option is unsupported.`)},s=typeof Buffer==`function`&&Buffer.from,c=s?n:i;function l(){this.encoding=`utf-8`}l.prototype.encode=function(e,t){return o(t&&t.stream,`encode`,`stream`),c(e)};function u(e){var t;try{var n=new Blob([e],{type:`text/plain;charset=UTF-8`});t=URL.createObjectURL(n);var r=new XMLHttpRequest;return r.open(`GET`,t,!1),r.send(),r.responseText}finally{t&&URL.revokeObjectURL(t)}}var d=!s&&typeof Blob==`function`&&typeof URL==`function`&&typeof URL.createObjectURL==`function`,f=[`utf-8`,`utf8`,`unicode-1-1-utf-8`],p=r;s?p=t:d&&(p=function(e){try{return u(e)}catch{return r(e)}});var m=`construct 'TextDecoder'`,h=`${a} ${m}: the `;function g(e,t){o(t&&t.fatal,m,`fatal`),e||=`utf-8`;var n;if(n=s?Buffer.isEncoding(e):f.indexOf(e.toLowerCase())!==-1,!n)throw RangeError(`${h} encoding label provided ('${e}') is invalid.`);this.encoding=e,this.fatal=!1,this.ignoreBOM=!1}g.prototype.decode=function(e,t){o(t&&t.stream,`decode`,`stream`);var n;return n=e instanceof Uint8Array?e:e.buffer instanceof ArrayBuffer?new Uint8Array(e.buffer):new Uint8Array(e),p(n,this.encoding)},e.TextEncoder=e.TextEncoder||l,e.TextDecoder=e.TextDecoder||g})(typeof window<`u`?window:typeof globalThis<`u`?globalThis:void 0)})),d=i(((e,t)=>{u(),t.exports={encode:e=>new TextEncoder().encode(e),decode:e=>new TextDecoder().decode(e)}})),f=i(((e,t)=>{t.exports=n;function n(e,t,n){var r;return function(){if(!t)return e.apply(this,arguments);var i=this,a=arguments,o=n&&!r;if(clearTimeout(r),r=setTimeout(function(){if(r=null,!o)return e.apply(i,a)},t),o)return e.apply(this,arguments)}}})),p=i(((e,t)=>{function n(e){if(e.length===0)return`.`;let t=a(e);return t=t.reduce(c,[]),i(...t)}function r(...e){let t=``;for(let r of e)t=r.startsWith(`/`)?r:n(i(t,r));return t}function i(...e){if(e.length===0)return``;let t=e.join(`/`);return t=t.replace(/\/{2,}/g,`/`),t}function a(e){if(e.length===0)return[];if(e===`/`)return[`/`];let t=e.split(`/`);return t[t.length-1]===``&&t.pop(),e[0]===`/`?t[0]=`/`:t[0]!==`.`&&t.unshift(`.`),t}function o(e){let t=e.lastIndexOf(`/`);if(t===-1)throw Error(`Cannot get dirname of "${e}"`);return t===0?`/`:e.slice(0,t)}function s(e){if(e===`/`)throw Error(`Cannot get basename of "${e}"`);let t=e.lastIndexOf(`/`);return t===-1?e:e.slice(t+1)}function c(e,t){if(e.length===0)return e.push(t),e;if(t===`.`)return e;if(t===`..`){if(e.length===1){if(e[0]===`/`)throw Error(`Unable to normalize path - traverses above root directory`);if(e[0]===`.`)return e.push(t),e}return e[e.length-1]===`..`?(e.push(`..`),e):(e.pop(),e)}return e.push(t),e}t.exports={join:i,normalize:n,split:a,basename:s,dirname:o,resolve:r}})),m=i(((e,t)=>{function n(e){return class extends Error{constructor(...t){super(...t),this.code=e,this.message?this.message=e+`: `+this.message:this.message=e}}}t.exports={EEXIST:n(`EEXIST`),ENOENT:n(`ENOENT`),ENOTDIR:n(`ENOTDIR`),ENOTEMPTY:n(`ENOTEMPTY`),ETIMEDOUT:n(`ETIMEDOUT`),EISDIR:n(`EISDIR`)}})),h=i(((e,t)=>{var n=p(),{EEXIST:r,ENOENT:i,ENOTDIR:a,ENOTEMPTY:o,EISDIR:s}=m(),c=0;t.exports=class{constructor(){}_makeRoot(e=new Map){return e.set(c,{mode:511,type:`dir`,size:0,ino:0,mtimeMs:Date.now()}),e}activate(e=null){e===null?this._root=new Map([[`/`,this._makeRoot()]]):typeof e==`string`?this._root=new Map([[`/`,this._makeRoot(this.parse(e))]]):this._root=e}get activated(){return!!this._root}deactivate(){this._root=void 0}size(){return this._countInodes(this._root.get(`/`))-1}_countInodes(e){let t=1;for(let[n,r]of e)n!==c&&(t+=this._countInodes(r));return t}autoinc(){return this._maxInode(this._root.get(`/`))+1}_maxInode(e){let t=e.get(c).ino;for(let[n,r]of e)n!==c&&(t=Math.max(t,this._maxInode(r)));return t}print(e=this._root.get(`/`)){let t=``,n=(e,r)=>{for(let[i,a]of e){if(i===0)continue;let e=a.get(c),o=e.mode.toString(8);t+=`${` `.repeat(r)}${i}\t${o}`,e.type===`file`?t+=`\t${e.size}\t${e.mtimeMs}\n`:(t+=`
2
2
  `,n(a,r+1))}};return n(e,0),t}parse(e){let t=0;function n(e){let n=++t,r=e.length===1?`dir`:`file`,[i,a,o]=e;return i=parseInt(i,8),a=a?parseInt(a):0,o=o?parseInt(o):Date.now(),new Map([[c,{mode:i,type:r,size:a,mtimeMs:o,ino:n}]])}let r=e.trim().split(`
3
3
  `),i=this._makeRoot(),a=[{indent:-1,node:i},{indent:0,node:null}];for(let e of r){let t=e.match(/^\t*/)[0].length;e=e.slice(t);let[r,...i]=e.split(` `),o=n(i);if(t<=a[a.length-1].indent)for(;t<=a[a.length-1].indent;)a.pop();a.push({indent:t,node:o}),a[a.length-2].node.set(r,o)}return i}_lookup(e,t=!0){let r=this._root,a=`/`,o=n.split(e);for(let s=0;s<o.length;++s){let l=o[s];if(r=r.get(l),!r)throw new i(e);if(t||s<o.length-1){let e=r.get(c);if(e.type===`symlink`){let t=n.resolve(a,e.target);r=this._lookup(t)}a=a?n.join(a,l):l}}return r}mkdir(e,{mode:t}){if(e===`/`)throw new r;let i=this._lookup(n.dirname(e)),a=n.basename(e);if(i.has(a))throw new r;let o=new Map,s={mode:t,type:`dir`,size:0,mtimeMs:Date.now(),ino:this.autoinc()};o.set(c,s),i.set(a,o)}rmdir(e){let t=this._lookup(e);if(t.get(c).type!==`dir`)throw new a;if(t.size>1)throw new o;let r=this._lookup(n.dirname(e)),i=n.basename(e);r.delete(i)}readdir(e){let t=this._lookup(e);if(t.get(c).type!==`dir`)throw new a;return[...t.keys()].filter(e=>typeof e==`string`)}writeStat(e,t,{mode:r}){let i,a;try{a=this.stat(e)}catch{}if(a!==void 0){if(a.type===`dir`)throw new s;r??=a.mode,i=a.ino}r??=438,i??=this.autoinc();let o=this._lookup(n.dirname(e)),l=n.basename(e),u={mode:r,type:`file`,size:t,mtimeMs:Date.now(),ino:i},d=new Map;return d.set(c,u),o.set(l,d),u}unlink(e){let t=this._lookup(n.dirname(e)),r=n.basename(e);t.delete(r)}rename(e,t){let r=n.basename(t),i=this._lookup(e);this._lookup(n.dirname(t)).set(r,i),this.unlink(e)}stat(e){return this._lookup(e).get(c)}lstat(e){return this._lookup(e,!1).get(c)}readlink(e){return this._lookup(e,!1).get(c).target}symlink(e,t){let r,i;try{let e=this.stat(t);i===null&&(i=e.mode),r=e.ino}catch{}i??=40960,r??=this.autoinc();let a=this._lookup(n.dirname(t)),o=n.basename(t),s={mode:i,type:`symlink`,target:e,size:0,mtimeMs:Date.now(),ino:r},l=new Map;return l.set(c,s),a.set(o,l),s}_du(e){let t=0;for(let[n,r]of e.entries())n===c?t+=r.size:t+=this._du(r);return t}du(e){let t=this._lookup(e);return this._du(t)}}})),g=r({Store:()=>T,clear:()=>S,close:()=>w,del:()=>x,get:()=>v,keys:()=>C,set:()=>y,update:()=>b});function _(){return E||=new T,E}function v(e,t=_()){let n;return t._withIDBStore(`readwrite`,t=>{n=t.get(e)}).then(()=>n.result)}function y(e,t,n=_()){return n._withIDBStore(`readwrite`,n=>{n.put(t,e)})}function b(e,t,n=_()){return n._withIDBStore(`readwrite`,n=>{let r=n.get(e);r.onsuccess=()=>{n.put(t(r.result),e)}})}function x(e,t=_()){return t._withIDBStore(`readwrite`,t=>{t.delete(e)})}function S(e=_()){return e._withIDBStore(`readwrite`,e=>{e.clear()})}function C(e=_()){let t=[];return e._withIDBStore(`readwrite`,e=>{(e.openKeyCursor||e.openCursor).call(e).onsuccess=function(){this.result&&(t.push(this.result.key),this.result.continue())}}).then(()=>t)}function w(e=_()){return e._close()}var T,E,D=t((()=>{T=class{constructor(e=`keyval-store`,t=`keyval`){this.storeName=t,this._dbName=e,this._storeName=t,this._init()}_init(){this._dbp||=new Promise((e,t)=>{let n=indexedDB.open(this._dbName);n.onerror=()=>t(n.error),n.onsuccess=()=>e(n.result),n.onupgradeneeded=()=>{n.result.createObjectStore(this._storeName)}})}_withIDBStore(e,t){return this._init(),this._dbp.then(n=>new Promise((r,i)=>{let a=n.transaction(this.storeName,e);a.oncomplete=()=>r(),a.onabort=a.onerror=()=>i(a.error),t(a.objectStore(this.storeName))}))}_close(){return this._init(),this._dbp.then(e=>{e.close(),this._dbp=void 0})}}})),O=i(((t,n)=>{var r=(D(),e(g));n.exports=class{constructor(e,t){this._database=e,this._storename=t,this._store=new r.Store(this._database,this._storename)}saveSuperblock(e){return r.set(`!root`,e,this._store)}loadSuperblock(){return r.get(`!root`,this._store)}readFile(e){return r.get(e,this._store)}writeFile(e,t){return r.set(e,t,this._store)}unlink(e){return r.del(e,this._store)}wipe(){return r.clear(this._store)}close(){return r.close(this._store)}}})),k=i(((e,t)=>{t.exports=class{constructor(e){this._url=e}loadSuperblock(){return fetch(this._url+`/.superblock.txt`).then(e=>e.ok?e.text():null)}async readFile(e){let t=await fetch(this._url+e);if(t.status===200)return t.arrayBuffer();throw Error(`ENOENT`)}async sizeFile(e){let t=await fetch(this._url+e,{method:`HEAD`});if(t.status===200)return t.headers.get(`content-length`);throw Error(`ENOENT`)}}})),A=i(((t,n)=>{var r=(D(),e(g)),i=e=>new Promise(t=>setTimeout(t,e));n.exports=class{constructor(e,t){this._id=Math.random(),this._database=e,this._storename=t,this._store=new r.Store(this._database,this._storename),this._lock=null}async has({margin:e=2e3}={}){if(this._lock&&this._lock.holder===this._id){let t=Date.now();return this._lock.expires>t+e?!0:await this.renew()}else return!1}async renew({ttl:e=5e3}={}){let t;return await r.update(`lock`,n=>{let r=Date.now()+e;return t=n&&n.holder===this._id,this._lock=t?{holder:this._id,expires:r}:n,this._lock},this._store),t}async acquire({ttl:e=5e3}={}){let t,n,i;if(await r.update(`lock`,r=>{let a=Date.now(),o=a+e;return n=r&&r.expires<a,t=r===void 0||n,i=r&&r.holder===this._id,this._lock=t?{holder:this._id,expires:o}:r,this._lock},this._store),i)throw Error(`Mutex double-locked`);return t}async wait({interval:e=100,limit:t=6e3,ttl:n}={}){for(;t--;){if(await this.acquire({ttl:n}))return!0;await i(e)}throw Error(`Mutex timeout`)}async release({force:e=!1}={}){let t,n,i;if(await r.update(`lock`,r=>(t=e||r&&r.holder===this._id,n=r===void 0,i=r&&r.holder!==this._id,this._lock=t?void 0:r,this._lock),this._store),await r.close(this._store),!t&&!e){if(n)throw Error(`Mutex double-freed`);if(i)throw Error(`Mutex lost ownership`)}return t}}})),j=i(((e,t)=>{t.exports=class{constructor(e){this._id=Math.random(),this._database=e,this._has=!1,this._release=null}async has(){return this._has}async acquire(){return new Promise(e=>{navigator.locks.request(this._database+`_lock`,{ifAvailable:!0},t=>(this._has=!!t,e(!!t),new Promise(e=>{this._release=e})))})}async wait({timeout:e=6e5}={}){return new Promise((t,n)=>{let r=new AbortController;setTimeout(()=>{r.abort(),n(Error(`Mutex timeout`))},e),navigator.locks.request(this._database+`_lock`,{signal:r.signal},e=>(this._has=!!e,t(!!e),new Promise(e=>{this._release=e})))})}async release({force:e=!1}={}){this._has=!1,this._release?this._release():e&&navigator.locks.request(this._database+`_lock`,{steal:!0},e=>!0)}}})),M=i(((e,t)=>{var{encode:n,decode:r}=d(),i=f(),a=h(),{ENOENT:o,ENOTEMPTY:s,ETIMEDOUT:c}=m(),l=O(),u=k(),g=A(),_=j(),v=p();t.exports=class{constructor(){this.saveSuperblock=i(()=>{this.flush()},500)}async init(e,{wipe:t,url:n,urlauto:r,fileDbName:i=e,db:o=null,fileStoreName:s=e+`_files`,lockDbName:c=e+`_lock`,lockStoreName:d=e+`_lock`}={}){this._name=e,this._idb=o||new l(i,s),this._mutex=navigator.locks?new _(e):new g(c,d),this._cache=new a(e),this._opts={wipe:t,url:n},this._needsWipe=!!t,n&&(this._http=new u(n),this._urlauto=!!r)}async activate(){if(this._cache.activated)return;this._needsWipe&&(this._needsWipe=!1,await this._idb.wipe(),await this._mutex.release({force:!0})),await this._mutex.has()||await this._mutex.wait();let e=await this._idb.loadSuperblock();if(e)this._cache.activate(e);else if(this._http){let e=await this._http.loadSuperblock();this._cache.activate(e),await this._saveSuperblock()}else this._cache.activate();if(!await this._mutex.has())throw new c}async deactivate(){await this._mutex.has()&&await this._saveSuperblock(),this._cache.deactivate();try{await this._mutex.release()}catch(e){console.log(e)}await this._idb.close()}async _saveSuperblock(){this._cache.activated&&(this._lastSavedAt=Date.now(),await this._idb.saveSuperblock(this._cache._root))}_writeStat(e,t,n){let r=v.split(v.dirname(e)),i=r.shift();for(let e of r){i=v.join(i,e);try{this._cache.mkdir(i,{mode:511})}catch{}}return this._cache.writeStat(e,t,n)}async readFile(e,t){let n=typeof t==`string`?t:t&&t.encoding;if(n&&n!==`utf8`)throw Error(`Only "utf8" encoding is supported in readFile`);let i=null,a=null;try{a=this._cache.stat(e),i=await this._idb.readFile(a.ino)}catch(e){if(!this._urlauto)throw e}if(!i&&this._http){let t=this._cache.lstat(e);for(;t.type===`symlink`;)e=v.resolve(v.dirname(e),t.target),t=this._cache.lstat(e);i=await this._http.readFile(e)}if(i&&((!a||a.size!=i.byteLength)&&(a=await this._writeStat(e,i.byteLength,{mode:a?a.mode:438}),this.saveSuperblock()),n===`utf8`?i=r(i):i.toString=()=>r(i)),!a)throw new o(e);return i}async writeFile(e,t,r){let{mode:i,encoding:a=`utf8`}=r;if(typeof t==`string`){if(a!==`utf8`)throw Error(`Only "utf8" encoding is supported in writeFile`);t=n(t)}let o=await this._cache.writeStat(e,t.byteLength,{mode:i});await this._idb.writeFile(o.ino,t)}async unlink(e,t){let n=this._cache.lstat(e);this._cache.unlink(e),n.type!==`symlink`&&await this._idb.unlink(n.ino)}readdir(e,t){return this._cache.readdir(e)}mkdir(e,t){let{mode:n=511}=t;this._cache.mkdir(e,{mode:n})}rmdir(e,t){if(e===`/`)throw new s;this._cache.rmdir(e)}rename(e,t){this._cache.rename(e,t)}stat(e,t){return this._cache.stat(e)}lstat(e,t){return this._cache.lstat(e)}readlink(e,t){return this._cache.readlink(e)}symlink(e,t){this._cache.symlink(e,t)}async backFile(e,t){let n=await this._http.sizeFile(e);await this._writeStat(e,n,t)}du(e){return this._cache.du(e)}flush(){return this._saveSuperblock()}}})),N=i(((e,t)=>{t.exports=class{constructor(e){this.type=e.type,this.mode=e.mode,this.size=e.size,this.ino=e.ino,this.mtimeMs=e.mtimeMs,this.ctimeMs=e.ctimeMs||e.mtimeMs,this.uid=1,this.gid=1,this.dev=1}isFile(){return this.type===`file`}isDirectory(){return this.type===`dir`}isSymbolicLink(){return this.type===`symlink`}}})),P=i(((e,t)=>{var n=M(),r=N(),i=p();function a(e,t,...n){return e=i.normalize(e),(t===void 0||typeof t==`function`)&&(t={}),typeof t==`string`&&(t={encoding:t}),[e,t,...n]}function o(e,t,n,...r){return e=i.normalize(e),(n===void 0||typeof n==`function`)&&(n={}),typeof n==`string`&&(n={encoding:n}),[e,t,n,...r]}function s(e,t,...n){return[i.normalize(e),i.normalize(t),...n]}t.exports=class{constructor(e,t={}){this.init=this.init.bind(this),this.readFile=this._wrap(this.readFile,a,!1),this.writeFile=this._wrap(this.writeFile,o,!0),this.unlink=this._wrap(this.unlink,a,!0),this.readdir=this._wrap(this.readdir,a,!1),this.mkdir=this._wrap(this.mkdir,a,!0),this.rmdir=this._wrap(this.rmdir,a,!0),this.rename=this._wrap(this.rename,s,!0),this.stat=this._wrap(this.stat,a,!1),this.lstat=this._wrap(this.lstat,a,!1),this.readlink=this._wrap(this.readlink,a,!1),this.symlink=this._wrap(this.symlink,s,!0),this.backFile=this._wrap(this.backFile,a,!0),this.du=this._wrap(this.du,a,!1),this._deactivationPromise=null,this._deactivationTimeout=null,this._activationPromise=null,this._operations=new Set,e&&this.init(e,t)}async init(...e){return this._initPromiseResolve&&await this._initPromise,this._initPromise=this._init(...e),this._initPromise}async _init(e,t={}){await this._gracefulShutdown(),this._activationPromise&&await this._deactivate(),this._backend&&this._backend.destroy&&await this._backend.destroy(),this._backend=t.backend||new n,this._backend.init&&await this._backend.init(e,t),this._initPromiseResolve&&=(this._initPromiseResolve(),null),t.defer||this.stat(`/`)}async _gracefulShutdown(){this._operations.size>0&&(this._isShuttingDown=!0,await new Promise(e=>this._gracefulShutdownResolve=e),this._isShuttingDown=!1,this._gracefulShutdownResolve=null)}_wrap(e,t,n){return async(...r)=>{r=t(...r);let i={name:e.name,args:r};this._operations.add(i);try{return await this._activate(),await e.apply(this,r)}finally{this._operations.delete(i),n&&this._backend.saveSuperblock(),this._operations.size===0&&(this._deactivationTimeout||clearTimeout(this._deactivationTimeout),this._deactivationTimeout=setTimeout(this._deactivate.bind(this),500))}}}async _activate(){this._initPromise||console.warn(Error(`Attempted to use LightningFS ${this._name} before it was initialized.`)),await this._initPromise,this._deactivationTimeout&&=(clearTimeout(this._deactivationTimeout),null),this._deactivationPromise&&await this._deactivationPromise,this._deactivationPromise=null,this._activationPromise||=this._backend.activate?this._backend.activate():Promise.resolve(),await this._activationPromise}async _deactivate(){return this._activationPromise&&await this._activationPromise,this._deactivationPromise||=this._backend.deactivate?this._backend.deactivate():Promise.resolve(),this._activationPromise=null,this._gracefulShutdownResolve&&this._gracefulShutdownResolve(),this._deactivationPromise}async readFile(e,t){return this._backend.readFile(e,t)}async writeFile(e,t,n){return await this._backend.writeFile(e,t,n),null}async unlink(e,t){return await this._backend.unlink(e,t),null}async readdir(e,t){return this._backend.readdir(e,t)}async mkdir(e,t){return await this._backend.mkdir(e,t),null}async rmdir(e,t){return await this._backend.rmdir(e,t),null}async rename(e,t){return await this._backend.rename(e,t),null}async stat(e,t){return new r(await this._backend.stat(e,t))}async lstat(e,t){return new r(await this._backend.lstat(e,t))}async readlink(e,t){return this._backend.readlink(e,t)}async symlink(e,t){return await this._backend.symlink(e,t),null}async backFile(e,t){return await this._backend.backFile(e,t),null}async du(e){return this._backend.du(e)}async flush(){return this._backend.flush()}}})),F=i(((e,t)=>{var n=l(),r=P();function i(e,t){return typeof e==`function`&&(t=e),t=n(t),[(...e)=>t(null,...e),t]}t.exports=class{constructor(...e){this.promises=new r(...e),this.init=this.init.bind(this),this.readFile=this.readFile.bind(this),this.writeFile=this.writeFile.bind(this),this.unlink=this.unlink.bind(this),this.readdir=this.readdir.bind(this),this.mkdir=this.mkdir.bind(this),this.rmdir=this.rmdir.bind(this),this.rename=this.rename.bind(this),this.stat=this.stat.bind(this),this.lstat=this.lstat.bind(this),this.readlink=this.readlink.bind(this),this.symlink=this.symlink.bind(this),this.backFile=this.backFile.bind(this),this.du=this.du.bind(this),this.flush=this.flush.bind(this)}init(e,t){return this.promises.init(e,t)}readFile(e,t,n){let[r,a]=i(t,n);this.promises.readFile(e,t).then(r).catch(a)}writeFile(e,t,n,r){let[a,o]=i(n,r);this.promises.writeFile(e,t,n).then(a).catch(o)}unlink(e,t,n){let[r,a]=i(t,n);this.promises.unlink(e,t).then(r).catch(a)}readdir(e,t,n){let[r,a]=i(t,n);this.promises.readdir(e,t).then(r).catch(a)}mkdir(e,t,n){let[r,a]=i(t,n);this.promises.mkdir(e,t).then(r).catch(a)}rmdir(e,t,n){let[r,a]=i(t,n);this.promises.rmdir(e,t).then(r).catch(a)}rename(e,t,n){let[r,a]=i(n);this.promises.rename(e,t).then(r).catch(a)}stat(e,t,n){let[r,a]=i(t,n);this.promises.stat(e).then(r).catch(a)}lstat(e,t,n){let[r,a]=i(t,n);this.promises.lstat(e).then(r).catch(a)}readlink(e,t,n){let[r,a]=i(t,n);this.promises.readlink(e).then(r).catch(a)}symlink(e,t,n){let[r,a]=i(n);this.promises.symlink(e,t).then(r).catch(a)}backFile(e,t,n){let[r,a]=i(t,n);this.promises.backFile(e,t).then(r).catch(a)}du(e,t){let[n,r]=i(t);this.promises.du(e).then(n).catch(r)}flush(e){let[t,n]=i(e);this.promises.flush().then(t).catch(n)}}})),I=n(F(),1),L=class extends Error{constructor(e,t,n){super(`${e}: ${t}${n?` '${n}'`:``}`),this.code=e,this.path=n,this.name=`FsError`}},R=`slicc-mount-table`,z=1,B=`mounts`;function V(){return new Promise((e,t)=>{let n=indexedDB.open(R,z);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(B)||e.createObjectStore(B)},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}async function H(e,t){let n=await V();try{let r=n.transaction(B,`readwrite`);r.objectStore(B).put(t,e),await new Promise((e,t)=>{r.oncomplete=()=>e(),r.onerror=()=>t(r.error),r.onabort=()=>t(r.error??new DOMException(`IndexedDB transaction aborted`,`AbortError`))})}finally{n.close()}}async function U(e){let t=await V();try{let n=t.transaction(B,`readwrite`);n.objectStore(B).delete(e),await new Promise((e,t)=>{n.oncomplete=()=>e(),n.onerror=()=>t(n.error),n.onabort=()=>t(n.error??new DOMException(`IndexedDB transaction aborted`,`AbortError`))})}finally{t.close()}}async function W(){let e=await V();try{let t=e.transaction(B,`readonly`),n=t.objectStore(B),r=()=>t.error??new DOMException(`IndexedDB transaction aborted`,`AbortError`),i=await new Promise((e,i)=>{let a=n.getAllKeys();a.onsuccess=()=>e(a.result),a.onerror=()=>i(a.error),t.onabort=()=>i(r())}),a=await new Promise((e,i)=>{let a=n.getAll();a.onsuccess=()=>e(a.result),a.onerror=()=>i(a.error),t.onabort=()=>i(r())});return i.map((e,t)=>({path:e,handle:a[t]}))}finally{e.close()}}async function G(){let e=await V();try{let t=e.transaction(B,`readwrite`);t.objectStore(B).clear(),await new Promise((e,n)=>{t.oncomplete=()=>e(),t.onerror=()=>n(t.error),t.onabort=()=>n(t.error??new DOMException(`IndexedDB transaction aborted`,`AbortError`))})}finally{e.close()}}var K=a(`mount-index`),q=class{mounts=new Map;listeners=new Set;registerMount(e,t){this.mounts.get(e)?.abortController?.abort();let n=new AbortController,r={handle:t,state:{status:`pending`,indexed:0},files:new Set,directories:new Set,abortController:n};this.mounts.set(e,r),this.notifyListeners(),this.indexMount(e,r,n.signal)}unregisterMount(e){let t=this.mounts.get(e);t&&(t.abortController?.abort(),this.mounts.delete(e),this.notifyListeners())}async refreshMount(e){let t=this.mounts.get(e);if(!t)throw Error(`No mount at ${e}`);t.abortController?.abort();let n=new AbortController;t.abortController=n,t.state={status:`pending`,indexed:0},t.files.clear(),t.directories.clear(),this.notifyListeners(),await this.indexMount(e,t,n.signal)}isReady(e){return this.mounts.get(e)?.state.status===`ready`}isAnyIndexing(){for(let e of this.mounts.values())if(e.state.status===`indexing`||e.state.status===`pending`)return!0;return!1}dispose(){for(let e of this.mounts.values())e.abortController?.abort();this.mounts.clear(),this.listeners.clear()}getState(e){return this.mounts.get(e)?.state}getFiles(e,t){let n=this.mounts.get(e);if(!n||n.state.status!==`ready`)return;if(!t)return[...n.files];let r=[];for(let e of n.files)t(e)&&r.push(e);return r}getDirectoryEntries(e,t){let n=this.mounts.get(e);if(!n||n.state.status!==`ready`)return;let r=t===`/`?`/`:t+`/`,i=new Map;for(let e of n.files){if(!e.startsWith(r))continue;let t=e.slice(r.length);t.includes(`/`)||i.set(t,`file`)}for(let e of n.directories){if(!e.startsWith(r))continue;let t=e.slice(r.length);t.includes(`/`)||i.set(t,`directory`)}return[...i.entries()].map(([e,t])=>({name:e,type:t}))}hasPath(e,t){let n=this.mounts.get(e);if(!(!n||n.state.status!==`ready`))return n.files.has(t)||n.directories.has(t)}notifyWrite(e){let t=this.findMountForPath(e);if(!t)return;let n=this.mounts.get(t);if(!n||n.state.status!==`ready`)return;n.files.add(e);let r=e;for(;r!==t;){let e=r.lastIndexOf(`/`);if(e<=0)break;r=r.slice(0,e)||`/`,r.length>=t.length&&n.directories.add(r)}}notifyDelete(e){let t=this.findMountForPath(e);if(!t)return;let n=this.mounts.get(t);if(!n||n.state.status!==`ready`)return;n.files.delete(e),n.directories.delete(e);let r=e+`/`;for(let e of n.files)e.startsWith(r)&&n.files.delete(e);for(let e of n.directories)e.startsWith(r)&&n.directories.delete(e)}notifyRename(e,t){let n=this.findMountForPath(e);if(!n)return;let r=this.mounts.get(n);if(!(!r||r.state.status!==`ready`)){if(r.files.has(e)){r.files.delete(e),r.files.add(t);return}if(r.directories.has(e)){r.directories.delete(e),r.directories.add(t);let n=e+`/`,i=t+`/`;for(let e of[...r.files])e.startsWith(n)&&(r.files.delete(e),r.files.add(i+e.slice(n.length)));for(let e of[...r.directories])e.startsWith(n)&&(r.directories.delete(e),r.directories.add(i+e.slice(n.length)))}}}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}findMountForPath(e){let t;for(let n of this.mounts.keys())(e===n||e.startsWith(n+`/`))&&(!t||n.length>t.length)&&(t=n);return t}notifyListeners(){for(let e of this.listeners)try{e()}catch{}}async indexMount(e,t,n){t.state={status:`indexing`,indexed:0},this.notifyListeners();try{if(await this.walkHandle(e,t.handle,t,n),n.aborted)return;t.state={status:`ready`,indexed:t.files.size+t.directories.size,total:t.files.size+t.directories.size},t.abortController=null,K.info(`Mount indexed`,{path:e,files:t.files.size,directories:t.directories.size})}catch(r){if(n.aborted)return;let i=r instanceof Error?r.message:String(r);t.state={status:`error`,indexed:0,error:i},K.error(`Mount indexing failed`,{path:e,error:i})}this.notifyListeners()}async walkHandle(e,t,n,r){if(r.aborted)return;n.directories.add(e);let i=t;for await(let[t,a]of i){if(r.aborted)return;let i=e===`/`?`/${t}`:`${e}/${t}`;a.kind===`file`?(n.files.add(i),n.state.indexed++):a.kind===`directory`&&await this.walkHandle(i,a,n,r),n.state.indexed%500==0&&(this.notifyListeners(),await new Promise(e=>setTimeout(e,0)))}}},J=10,Y=class e{lfs;rawFs;_ready;mountPoints=new Map;watcher=null;dbName;mountSyncChannel=null;mountIndex=new q;constructor(e,t){this.dbName=e;let n=new I.default(e,{wipe:t});if(this.rawFs=n,this.lfs=n.promises,this._ready=this.lfs.stat(`/`).then(()=>{}).catch(()=>{}),typeof BroadcastChannel<`u`)try{this.mountSyncChannel=new BroadcastChannel(`vfs-mount-sync:${e}`),this.mountSyncChannel.onmessage=e=>{let{type:t,path:n,handle:r}=e.data??{};t===`mount`&&typeof n==`string`&&r?(this.mountPoints.set(n,r),this.mountIndex.registerMount(n,r),this.watcher?.notify([{type:`modify`,path:n,entryType:`directory`}])):t===`unmount`&&typeof n==`string`&&(this.mountPoints.delete(n),this.mountIndex.unregisterMount(n),this.watcher?.notify([{type:`modify`,path:n,entryType:`directory`}]))}}catch{}}static async create(t){let n=t?.dbName??`browser-fs`,r=t?.wipe??!1,i=new e(n,r);return await i._ready,r&&await G().catch(()=>{}),i}getLightningFS(){return this.lfs}canWrite(e){return!0}setWatcher(e){this.watcher=e}getWatcher(){return this.watcher}async dispose(){this.mountSyncChannel?.close(),this.mountSyncChannel=null,this.watcher?.dispose(),this.watcher=null,this.mountIndex.dispose();let e=this.lfs;if(e._deactivationTimeout&&=(clearTimeout(e._deactivationTimeout),null),e._operations?.size>0&&await e._gracefulShutdown?.(),e._backend?.saveSuperblock?.cancel&&e._backend.saveSuperblock.cancel(),e._backend){try{e._backend.flush&&await e._backend.flush()}catch{}e._backend.deactivate&&await e._backend.deactivate()}if(e._backend=null,e._activationPromise=null,e._deactivationPromise=null,e._initPromise=null,typeof indexedDB<`u`&&indexedDB.deleteDatabase)try{let e=indexedDB.deleteDatabase(this.dbName);await new Promise((t,n)=>{e.onsuccess=()=>t(),e.onerror=()=>n(e.error)})}catch{}}getCacheFS(){try{let e=this.lfs._backend?._cache;return e?.activated&&e._root instanceof Map?e:null}catch{return null}}readDirSync(e){let t=o(e);if(this.findMount(t))return null;let n=this.getCacheFS();if(!n)return null;try{let e=n.readdir(t),r=[];for(let i of e){let e=t===`/`?`/${i}`:`${t}/${i}`;try{let t=n.lstat(e),a=t.type===`symlink`?`symlink`:t.type===`dir`?`directory`:`file`;r.push({name:i,type:a})}catch{}}return r}catch{return null}}statSync(e){let t=o(e);if(this.findMount(t))return null;let n=this.getCacheFS();if(!n)return null;try{let e=this.resolveSymlinksSync(n,t);if(e===null)return null;let r=n.lstat(e);return{type:r.type===`dir`?`directory`:`file`,size:r.size??0,mtime:r.mtimeMs??Date.now(),ctime:r.mtimeMs??Date.now()}}catch{return null}}resolveSymlinksSync(e,t,n={count:0}){let r=t.split(`/`).filter(Boolean),i=`/`;for(let t of r){i=i===`/`?`/${t}`:`${i}/${t}`;try{let t=e.lstat(i);if(t.type===`symlink`){if(++n.count>J)return null;let r=t.target;if(r.startsWith(`/`))i=o(r);else{let{dir:e}=s(i);i=o(c(e,r))}let a=this.resolveSymlinksSync(e,i,n);if(a===null)return null;i=a}}catch{return null}}return i}lstatSync(e){let t=o(e);if(this.findMount(t))return null;let n=this.getCacheFS();if(!n)return null;try{let e=n.lstat(t);return e.type===`symlink`?{type:`symlink`,size:e.size??0,mtime:e.mtimeMs??Date.now(),ctime:e.mtimeMs??Date.now(),isSymlink:!0,symlinkTarget:e.target}:{type:e.type===`dir`?`directory`:`file`,size:e.size??0,mtime:e.mtimeMs??Date.now(),ctime:e.mtimeMs??Date.now()}}catch{return null}}async mount(e,t){let n=o(e);if(this.mountPoints.has(n))throw new L(`EEXIST`,`mount point is already mounted`,n);try{if((await this.lstat(n)).type!==`directory`)throw new L(`ENOTDIR`,`mount point must be a directory`,n);if((await this.readDir(n)).length>0)throw new L(`ENOTEMPTY`,`mount point must be empty to avoid shadowing existing files`,n)}catch(e){if(!(e instanceof L)||e.code!==`ENOENT`)throw e}let{dir:r}=s(n);r!==`/`&&await this.mkdir(r,{recursive:!0});try{await this.lfs.mkdir(n)}catch{}this.mountPoints.set(n,t),this.mountIndex.registerMount(n,t);try{this.mountSyncChannel?.postMessage({type:`mount`,path:n,handle:t})}catch{}this.watcher?.notify([{type:`modify`,path:n,entryType:`directory`}]);try{await H(n,t)}catch{}}async unmount(e){let t=o(e);this.mountPoints.delete(t),this.mountIndex.unregisterMount(t);try{this.mountSyncChannel?.postMessage({type:`unmount`,path:t})}catch{}this.watcher?.notify([{type:`modify`,path:t,entryType:`directory`}]);try{await U(t)}catch{}}listMounts(){return[...this.mountPoints.keys()]}getMountIndex(){return this.mountIndex}async refreshMount(e){let t=o(e);if(!this.mountPoints.has(t))throw new L(`ENOENT`,`not a mount point`,t);await this.mountIndex.refreshMount(t)}isPathUnderMount(e){for(let t of this.mountPoints.keys())if(e===t||e.startsWith(t+`/`))return!0;return!1}findMount(e){let t=null;for(let[n,r]of this.mountPoints)(e===n||e.startsWith(n+`/`))&&(!t||n.length>t.mountPath.length)&&(t={mountPath:n,handle:r});return t?e===t.mountPath?{path:t.mountPath,handle:t.handle,relParts:[]}:{path:t.mountPath,handle:t.handle,relParts:e.slice(t.mountPath.length+1).split(`/`).filter(Boolean)}:null}static async fsaNavDir(e,t,n=!1){let r=e;for(let e of t)r=await r.getDirectoryHandle(e,{create:n});return r}static async fsaGetFile(t,n,r=!1){return(await e.fsaNavDir(t,n.slice(0,-1),r)).getFileHandle(n[n.length-1],{create:r})}convertFsaError(e,t){if(e instanceof L)return e;if(e instanceof Error){if(e.name===`NotFoundError`)return new L(`ENOENT`,`no such file or directory`,t);if(e.name===`TypeMismatchError`)return new L(`ENOTDIR`,`not a directory`,t);if(e.name===`NotAllowedError`)return new L(`EINVAL`,`permission denied`,t);if(e.name===`InvalidModificationError`)return new L(`ENOTEMPTY`,`directory not empty`,t)}return new L(`EINVAL`,e instanceof Error?e.message:String(e),t)}async readFile(t,n){let r=o(t),i=this.findMount(r);if(i){if(i.relParts.length===0)throw new L(`EISDIR`,`is a directory`,r);try{let t=await(await e.fsaGetFile(i.handle,i.relParts)).getFile();return(n?.encoding??`utf-8`)===`utf-8`?await t.text():new Uint8Array(await t.arrayBuffer())}catch(e){throw this.convertFsaError(e,r)}}let a=await this.resolveSymlinks(r);try{return(n?.encoding??`utf-8`)===`utf-8`?await this.lfs.readFile(a,{encoding:`utf8`}):await this.lfs.readFile(a)}catch(e){throw this.convertError(e,r)}}async writeFile(t,n,r){let i=o(t),a=this.findMount(i);if(a){if(a.relParts.length===0)throw new L(`EISDIR`,`is a directory`,i);let t=!1;try{await this.stat(i),t=!0}catch{}try{let t=await(await e.fsaGetFile(a.handle,a.relParts,!0)).createWritable(),r=typeof n==`string`?new TextEncoder().encode(n):n instanceof Uint8Array?new Uint8Array(n.buffer,n.byteOffset,n.byteLength):new Uint8Array(n);await t.write(r),await t.close()}catch(e){throw this.convertFsaError(e,i)}this.watcher?.notify([{type:t?`modify`:`create`,path:i,entryType:`file`}]),this.mountIndex.notifyWrite(i);return}let c;try{c=await this.resolveSymlinks(i)}catch{c=i}let l=!1;try{await this.lfs.stat(c),l=!0}catch{}let{dir:u}=s(c);u!==`/`&&await this.mkdir(u,{recursive:!0});try{await this.lfs.writeFile(c,n)}catch(e){throw this.convertError(e,i)}this.watcher?.notify([{type:l?`modify`:`create`,path:c,entryType:`file`}])}async readDir(t){let n=o(t),r=this.findMount(n);if(r){let t=this.mountIndex.getDirectoryEntries(r.path,n);if(t!==void 0){let e=new Map;for(let n of t)e.set(n.name,{name:n.name,type:n.type});let r=n===`/`?`/`:`${n}/`;for(let t of this.mountPoints.keys()){if(t===n||!t.startsWith(r))continue;let i=t.slice(r.length);!i||i.includes(`/`)||e.has(i)||e.set(i,{name:i,type:`directory`})}return[...e.values()]}try{let t=r.relParts.length===0?r.handle:await e.fsaNavDir(r.handle,r.relParts),i=new Map;for await(let[e,n]of t)i.set(e,{name:e,type:n.kind===`directory`?`directory`:`file`});let a=n===`/`?`/`:`${n}/`;for(let e of this.mountPoints.keys()){if(e===n||!e.startsWith(a))continue;let t=e.slice(a.length);!t||t.includes(`/`)||i.has(t)||i.set(t,{name:t,type:`directory`})}return[...i.values()]}catch(e){throw this.convertFsaError(e,n)}}let i=await this.resolveSymlinks(n);try{let e=await this.lfs.readdir(i),t=[];for(let n of e){let e=i===`/`?`/${n}`:`${i}/${n}`;try{let r=await this.lfs.lstat(e);r.isSymbolicLink()?t.push({name:n,type:`symlink`}):t.push({name:n,type:r.isDirectory()?`directory`:`file`})}catch{}}return t}catch(e){throw this.convertError(e,n)}}async mkdir(t,n){let r=o(t);if(r===`/`)return;let i=this.findMount(r);if(i){if(i.relParts.length===0)return;try{let t=await this.exists(r);await e.fsaNavDir(i.handle,i.relParts,!0),t||this.watcher?.notify([{type:`create`,path:r,entryType:`directory`}])}catch(e){throw this.convertFsaError(e,r)}return}if(n?.recursive){let e=r.split(`/`).filter(Boolean),t=``;for(let n of e){t+=`/`+n;try{await this.lfs.mkdir(t)}catch(e){if(e instanceof Error&&!e.message.includes(`EEXIST`))throw this.convertError(e,t)}}}else{try{await this.lfs.mkdir(r)}catch(e){throw this.convertError(e,r)}this.watcher?.notify([{type:`create`,path:r,entryType:`directory`}])}}async rm(t,n){let r=o(t),i=this.findMount(r);if(i){if(i.relParts.length===0)throw new L(`EINVAL`,`cannot remove a mount point — use unmount`,r);let t;try{t=(await this.stat(r)).type}catch{}try{let t=i.relParts.slice(0,-1),r=i.relParts[i.relParts.length-1];await(t.length===0?i.handle:await e.fsaNavDir(i.handle,t)).removeEntry(r,{recursive:n?.recursive})}catch(e){throw this.convertFsaError(e,r)}this.watcher?.notify([{type:`delete`,path:r,entryType:t}]),this.mountIndex.notifyDelete(r);return}try{let e=await this.lfs.lstat(r);e.isSymbolicLink()?await this.lfs.unlink(r):e.isDirectory()?n?.recursive?await this.rmRecursive(r):await this.lfs.rmdir(r):await this.lfs.unlink(r)}catch(e){throw this.convertError(e,r)}this.watcher?.notify([{type:`delete`,path:r}])}async rmRecursive(e){let t=await this.lfs.readdir(e);for(let n of t){let t=e===`/`?`/${n}`:`${e}/${n}`;(await this.lfs.stat(t)).isDirectory()?await this.rmRecursive(t):await this.lfs.unlink(t)}await this.lfs.rmdir(e)}async stat(t){let n=o(t),r=this.findMount(n);if(r){if(r.relParts.length===0)try{let e=await this.lfs.stat(n);return{type:`directory`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs}}catch{return{type:`directory`,size:0,mtime:Date.now(),ctime:Date.now()}}try{try{let t=await(await e.fsaGetFile(r.handle,r.relParts)).getFile();return{type:`file`,size:t.size,mtime:t.lastModified,ctime:t.lastModified}}catch{return await e.fsaNavDir(r.handle,r.relParts),{type:`directory`,size:0,mtime:Date.now(),ctime:Date.now()}}}catch(e){throw this.convertFsaError(e,n)}}let i=await this.resolveSymlinks(n);try{let e=await this.lfs.stat(i);return{type:e.isDirectory()?`directory`:`file`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs}}catch(e){throw this.convertError(e,n)}}async exists(e){let t=o(e),n=this.findMount(t);if(n){if(n.relParts.length===0)return!0;try{return await this.stat(t),!0}catch{return!1}}try{return await this.stat(t),!0}catch{try{return await this.lfs.lstat(t),!0}catch{return!1}}}async rename(e,t){let n=o(e),r=o(t),i;try{i=(await this.lstat(n)).type}catch{}try{await this.lfs.rename(n,r)}catch(e){throw this.convertError(e,n)}this.watcher?.notify([{type:`delete`,path:n,entryType:i},{type:`create`,path:r,entryType:i}]),this.mountIndex.notifyRename(n,r)}async readTextFile(e){return await this.readFile(e,{encoding:`utf-8`})}async*walk(e,t){let n=o(e);if(this.mountPoints.size>0&&this.mountPoints.has(n)&&![...this.mountPoints.keys()].some(e=>e!==n&&e.startsWith(n+`/`))&&this.mountIndex.isReady(n)){let e=this.mountIndex.getFiles(n);if(e){for(let t of e)yield t;return}}let r=t??new Set,i;try{i=await this.realpath(n)}catch{i=n}if(r.has(i))return;r.add(i);let a=await this.readDir(n);for(let e of a){let t=n===`/`?`/${e.name}`:`${n}/${e.name}`;if(e.type===`file`)yield t;else if(e.type===`symlink`)try{let e=await this.stat(t);e.type===`file`?yield t:e.type===`directory`&&(yield*this.walk(t,r))}catch{}else yield*this.walk(t,r)}}async copyFile(e,t){if((await this.stat(e)).type===`directory`)throw new L(`EISDIR`,`is a directory`,e);let n=await this.readFile(e,{encoding:`binary`});await this.writeFile(t,n)}dirname(e){return s(o(e)).dir}basename(e){return s(o(e)).base}async symlink(e,t){let n=o(t);if(this.findMount(n))throw new L(`EINVAL`,`symlinks not supported on mounted filesystems`,n);let{dir:r}=s(n);r!==`/`&&await this.mkdir(r,{recursive:!0});try{await this.lfs.symlink(e,n)}catch(e){throw this.convertError(e,n)}this.watcher?.notify([{type:`create`,path:n,entryType:`symlink`}])}async readlink(e){let t=o(e);try{return await this.lfs.readlink(t)}catch(e){throw this.convertError(e,t)}}async lstat(e){let t=o(e);if(this.findMount(t))return this.stat(t);try{let e=await this.lfs.lstat(t);if(e.isSymbolicLink()){let n=await this.lfs.readlink(t);return{type:`symlink`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs,isSymlink:!0,symlinkTarget:n}}return{type:e.isDirectory()?`directory`:`file`,size:e.size,mtime:e.mtimeMs,ctime:e.ctimeMs}}catch(e){throw this.convertError(e,t)}}async realpath(e,t=0){let n=o(e);if(this.findMount(n))return n;let r=n.split(`/`).filter(Boolean),i=`/`,a=t;for(let t of r){i=i===`/`?`/${t}`:`${i}/${t}`;try{if((await this.lfs.lstat(i)).isSymbolicLink()){if(++a>J)throw new L(`ELOOP`,`too many levels of symbolic links`,e);let t=await this.lfs.readlink(i);if(t.startsWith(`/`))i=o(t);else{let{dir:e}=s(i);i=o(c(e,t))}i=await this.realpath(i,a)}}catch(e){throw e instanceof L?e:this.convertError(e,i)}}return i}async resolveSymlinks(e){return this.findMount(e)?e:this.realpath(e)}convertError(e,t){if(e instanceof L)return e;let n=e instanceof Error?e.message:String(e);return n.includes(`ENOENT`)?new L(`ENOENT`,`no such file or directory`,t):n.includes(`EEXIST`)?new L(`EEXIST`,`file already exists`,t):n.includes(`ENOTDIR`)?new L(`ENOTDIR`,`not a directory`,t):n.includes(`EISDIR`)?new L(`EISDIR`,`is a directory`,t):n.includes(`ENOTEMPTY`)?new L(`ENOTEMPTY`,`directory not empty`,t):n.includes(`ELOOP`)?new L(`ELOOP`,`too many levels of symbolic links`,t):new L(`EINVAL`,n,t)}},X=class{vfs;allowedPrefixes;readOnlyPrefixes;constructor(e,t,n=[]){this.vfs=e;let r=e=>{let t=o(e);return t.endsWith(`/`)?t:t+`/`};this.allowedPrefixes=t.map(r),this.readOnlyPrefixes=n.map(r)}getAllPrefixes(){let e=this.vfs.listMounts().map(e=>e.endsWith(`/`)?e:e+`/`);return[...this.allowedPrefixes,...this.readOnlyPrefixes,...e]}isAllowed(e){let t=o(e);return this.getAllPrefixes().some(e=>t===e.slice(0,-1)||t.startsWith(e)||t===`/`||e.startsWith(t+`/`))}isAllowedStrict(e){let t=o(e);return this.getAllPrefixes().some(e=>t===e.slice(0,-1)||t.startsWith(e))}isWritable(e){let t=o(e);return this.allowedPrefixes.some(e=>t===e.slice(0,-1)||t.startsWith(e))}canWrite(e){return this.isWritable(e)}checkWrite(e){if(!this.isWritable(e))throw new L(`EACCES`,`permission denied`,o(e))}async resolveAndCheckRead(e){try{let t=await this.vfs.realpath(e);if(!this.isAllowedStrict(t))throw new L(`ENOENT`,`no such file or directory`,o(e));return t}catch(t){throw t instanceof L?t:new L(`ENOENT`,`no such file or directory`,o(e))}}async resolveAndCheckWrite(e){try{let t=await this.vfs.realpath(e);if(!this.isWritable(t))throw new L(`EACCES`,`permission denied`,o(e));return t}catch(t){throw t instanceof L?t:new L(`EACCES`,`permission denied`,o(e))}}getUnderlyingFS(){return this.vfs}getLightningFS(){return this.vfs.getLightningFS()}isPathUnderMount(e){return this.vfs.isPathUnderMount(e)}async readFile(e,t){if(!this.isAllowedStrict(e))throw new L(`ENOENT`,`no such file or directory`,o(e));let n=await this.resolveAndCheckRead(e);return this.vfs.readFile(n,t)}async readDir(e){if(!this.isAllowed(e))return[];let t=e;if(this.isAllowedStrict(e))try{t=await this.resolveAndCheckRead(e)}catch{return[]}let n=await this.vfs.readDir(t);if(!this.isAllowedStrict(e)){let t=o(e);return n.filter(e=>{let n=t===`/`?`/${e.name}`:`${t}/${e.name}`;return this.isAllowed(n)})}return n}async stat(e){if(!this.isAllowed(e))throw new L(`ENOENT`,`no such file or directory`,o(e));if(this.isAllowedStrict(e)){let t=await this.resolveAndCheckRead(e);return this.vfs.stat(t)}return this.vfs.stat(e)}scanPathForSymlinks(e,t){let n=o(e);if(n===`/`)return!1;let r=n.slice(1).split(`/`),i=t?r.length:r.length-1,a=``;for(let e=0;e<i;e++){a=a+`/`+r[e];let t=this.vfs.lstatSync(a);if(t===null)return null;if(t.type===`symlink`)return!0}return!1}statSync(e){return!this.isAllowedStrict(e)||this.scanPathForSymlinks(e,!0)!==!1?null:this.vfs.statSync(e)}lstatSync(e){return!this.isAllowed(e)||this.scanPathForSymlinks(e,!1)!==!1?null:this.vfs.lstatSync(e)}readDirSync(e){if(!this.isAllowed(e)||this.scanPathForSymlinks(e,!0)!==!1)return null;let t=this.vfs.readDirSync(e);if(t===null)return null;if(this.isAllowedStrict(e))return t;let n=o(e);return t.filter(e=>{let t=n===`/`?`/${e.name}`:`${n}/${e.name}`;return this.isAllowed(t)})}async realpath(e){let t;try{t=await this.vfs.realpath(e)}catch(t){throw t instanceof L?t:new L(`ENOENT`,`no such file or directory`,o(e))}if(!this.isAllowedStrict(t))throw new L(`ENOENT`,`no such file or directory`,o(e));return t}async exists(e){if(!this.isAllowed(e))return!1;if(this.isAllowedStrict(e))try{await this.resolveAndCheckRead(e)}catch{return!1}return this.vfs.exists(e)}async readTextFile(e){if(!this.isAllowedStrict(e))throw new L(`ENOENT`,`no such file or directory`,o(e));let t=await this.resolveAndCheckRead(e);return this.vfs.readTextFile(t)}async*walk(e){if(!this.isAllowed(e))return;let t=e;if(this.isAllowedStrict(e))try{t=await this.resolveAndCheckRead(e)}catch{return}for await(let e of this.vfs.walk(t))this.isAllowed(e)&&(yield e)}async writeFile(e,t,n){this.checkWrite(e);let r=this.vfs.dirname(e),i=this.vfs.basename(e);try{let t=await this.vfs.realpath(r);if(!this.isWritable(t+`/`+i))throw new L(`EACCES`,`permission denied`,o(e))}catch(e){if(e instanceof L&&e.code===`EACCES`)throw e}try{(await this.vfs.lstat(e)).type===`symlink`&&await this.resolveAndCheckWrite(e)}catch(e){if(e instanceof L&&e.code===`EACCES`)throw e}return this.vfs.writeFile(e,t,n)}async mkdir(e,t){this.checkWrite(e);let n=this.vfs.dirname(e),r=this.vfs.basename(e);try{let t=await this.vfs.realpath(n);if(!this.isWritable(t+`/`+r))throw new L(`EACCES`,`permission denied`,o(e))}catch(e){if(e instanceof L&&e.code===`EACCES`)throw e}return this.vfs.mkdir(e,t)}async rm(e,t){this.checkWrite(e);try{(await this.vfs.lstat(e)).type===`symlink`||await this.resolveAndCheckWrite(e)}catch(e){if(e instanceof L&&e.code===`EACCES`)throw e}return this.vfs.rm(e,t)}async rename(e,t){this.checkWrite(e),this.checkWrite(t),await this.resolveAndCheckWrite(e);let n=this.vfs.dirname(t),r=this.vfs.basename(t);try{let e=await this.vfs.realpath(n);if(!this.isWritable(e+`/`+r))throw new L(`EACCES`,`permission denied`,o(t))}catch(e){if(e instanceof L&&e.code===`EACCES`)throw e}return this.vfs.rename(e,t)}async copyFile(e,t){if(!this.isAllowed(e))throw new L(`ENOENT`,`no such file or directory`,o(e));this.checkWrite(t);let n=await this.resolveAndCheckRead(e),r=this.vfs.dirname(t),i=this.vfs.basename(t);try{let e=await this.vfs.realpath(r);if(!this.isWritable(e+`/`+i))throw new L(`EACCES`,`permission denied`,o(t))}catch(e){if(e instanceof L&&e.code===`EACCES`)throw e}try{(await this.vfs.lstat(t)).type===`symlink`&&await this.resolveAndCheckWrite(t)}catch(e){if(e instanceof L&&e.code===`EACCES`)throw e}return this.vfs.copyFile(n,t)}async symlink(e,t){this.checkWrite(t);let n=this.vfs.dirname(t),r=this.vfs.basename(t);try{let e=await this.vfs.realpath(n);if(!this.isWritable(e+`/`+r))throw new L(`EACCES`,`permission denied`,o(t))}catch(e){if(e instanceof L&&e.code===`EACCES`)throw e}return this.vfs.symlink(e,t)}async readlink(e){if(!this.isAllowedStrict(e))throw new L(`ENOENT`,`no such file or directory`,o(e));let t=await this.vfs.readlink(e),n;if(n=t.startsWith(`/`)?o(t):o(this.vfs.dirname(e)+`/`+t),!this.isAllowedStrict(n))throw new L(`ENOENT`,`no such file or directory`,o(e));return t}async lstat(e){if(!this.isAllowed(e))throw new L(`ENOENT`,`no such file or directory`,o(e));let t=o(e),n=this.vfs.dirname(t),r=this.vfs.basename(t),i;if(n===t)i=n;else try{i=await this.vfs.realpath(n)}catch{throw new L(`ENOENT`,`no such file or directory`,t)}let a=i===`/`?`/${r}`:`${i}/${r}`;if(!this.isAllowed(a))throw new L(`ENOENT`,`no such file or directory`,t);return this.vfs.lstat(a)}watch(e,t,n){if(!this.isAllowed(e))throw new L(`EACCES`,`permission denied`,o(e));let r=this.vfs.getWatcher();if(!r)throw new L(`EINVAL`,`no watcher configured`);return r.watch(o(e),t,n)}dirname(e){return this.vfs.dirname(e)}basename(e){return this.vfs.basename(e)}async dispose(){await this.vfs.dispose()}},Z=a(`fs-watcher`),Q=0;function ee(e,t){return t===`/`||e===t||e.startsWith(t+`/`)}var $=class{registrations=new Map;watch(e,t,n){let r=`fsw-${++Q}`;return this.registrations.set(r,{id:r,basePath:e,filter:t,callback:n}),Z.debug(`Watch registered`,{id:r,basePath:e}),()=>{this.registrations.delete(r),Z.debug(`Watch unregistered`,{id:r})}}notify(e){if(e.length!==0)for(let[,t]of this.registrations){let n=e.filter(e=>ee(e.path,t.basePath)&&t.filter(e.path));if(n.length>0)try{t.callback(n)}catch(e){Z.error(`Watch callback error`,{id:t.id,error:e instanceof Error?e.message:String(e)})}}}dispose(){this.registrations.clear(),Z.debug(`All watchers disposed`)}get size(){return this.registrations.size}},te=r({FsWatcher:()=>$,VirtualFS:()=>Y});export{W as a,Y as i,$ as n,L as o,X as r,F as s,te as t};
@@ -1 +1 @@
1
- import{a as e,c as t,l as n,n as r,o as i}from"./simple-options-CDIijiMb.js";import{m as a}from"./index-D4tp1ANR.js";import{a as o,i as s,n as c,o as l,r as u,s as d,t as f}from"./google-shared-tCK79d6s.js";var p=0,m=(e,n,r)=>{let o=new i;return(async()=>{let i={role:`assistant`,content:[],api:`google-generative-ai`,provider:e.provider,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`stop`,timestamp:Date.now()};try{let c=g(e,r?.apiKey||a(e.provider)||``,r?.headers),d=_(e,n,r),f=await r?.onPayload?.(d,e);f!==void 0&&(d=f);let m=await c.models.generateContentStream(d);o.push({type:`start`,partial:i});let h=null,v=i.content,y=()=>v.length-1;for await(let n of m){i.responseId||=n.responseId;let r=n.candidates?.[0];if(r?.content?.parts)for(let e of r.content.parts){if(e.text!==void 0){let t=u(e);(!h||t&&h.type!==`thinking`||!t&&h.type!==`text`)&&(h&&(h.type===`text`?o.push({type:`text_end`,contentIndex:v.length-1,content:h.text,partial:i}):o.push({type:`thinking_end`,contentIndex:y(),content:h.thinking,partial:i})),t?(h={type:`thinking`,thinking:``,thinkingSignature:void 0},i.content.push(h),o.push({type:`thinking_start`,contentIndex:y(),partial:i})):(h={type:`text`,text:``},i.content.push(h),o.push({type:`text_start`,contentIndex:y(),partial:i}))),h.type===`thinking`?(h.thinking+=e.text,h.thinkingSignature=l(h.thinkingSignature,e.thoughtSignature),o.push({type:`thinking_delta`,contentIndex:y(),delta:e.text,partial:i})):(h.text+=e.text,h.textSignature=l(h.textSignature,e.thoughtSignature),o.push({type:`text_delta`,contentIndex:y(),delta:e.text,partial:i}))}if(e.functionCall){h&&=(h.type===`text`?o.push({type:`text_end`,contentIndex:y(),content:h.text,partial:i}):o.push({type:`thinking_end`,contentIndex:y(),content:h.thinking,partial:i}),null);let t=e.functionCall.id,n={type:`toolCall`,id:!t||i.content.some(e=>e.type===`toolCall`&&e.id===t)?`${e.functionCall.name}_${Date.now()}_${++p}`:t,name:e.functionCall.name||``,arguments:e.functionCall.args??{},...e.thoughtSignature&&{thoughtSignature:e.thoughtSignature}};i.content.push(n),o.push({type:`toolcall_start`,contentIndex:y(),partial:i}),o.push({type:`toolcall_delta`,contentIndex:y(),delta:JSON.stringify(n.arguments),partial:i}),o.push({type:`toolcall_end`,contentIndex:y(),toolCall:n,partial:i})}}r?.finishReason&&(i.stopReason=s(r.finishReason),i.content.some(e=>e.type===`toolCall`)&&(i.stopReason=`toolUse`)),n.usageMetadata&&(i.usage={input:(n.usageMetadata.promptTokenCount||0)-(n.usageMetadata.cachedContentTokenCount||0),output:(n.usageMetadata.candidatesTokenCount||0)+(n.usageMetadata.thoughtsTokenCount||0),cacheRead:n.usageMetadata.cachedContentTokenCount||0,cacheWrite:0,totalTokens:n.usageMetadata.totalTokenCount||0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},t(e,i.usage))}if(h&&(h.type===`text`?o.push({type:`text_end`,contentIndex:y(),content:h.text,partial:i}):o.push({type:`thinking_end`,contentIndex:y(),content:h.thinking,partial:i})),r?.signal?.aborted)throw Error(`Request was aborted`);if(i.stopReason===`aborted`||i.stopReason===`error`)throw Error(`An unknown error occurred`);o.push({type:`done`,reason:i.stopReason,message:i}),o.end()}catch(e){for(let e of i.content)`index`in e&&delete e.index;i.stopReason=r?.signal?.aborted?`aborted`:`error`,i.errorMessage=e instanceof Error?e.message:JSON.stringify(e),o.push({type:`error`,reason:i.stopReason,error:i}),o.end()}})(),o},h=(e,t,i)=>{let o=i?.apiKey||a(e.provider);if(!o)throw Error(`No API key for provider: ${e.provider}`);let s=r(e,i,o);if(!i?.reasoning)return m(e,t,{...s,thinking:{enabled:!1}});let c=n(e,i.reasoning),l=c===`off`?`high`:c,u=e;return y(u)||b(u)||v(u)?m(e,t,{...s,thinking:{enabled:!0,level:S(l,u)}}):m(e,t,{...s,thinking:{enabled:!0,budgetTokens:C(u,l,i.thinkingBudgets)}})};function g(e,t,n){let r={};return e.baseUrl&&(r.baseUrl=e.baseUrl,r.apiVersion=``),(e.headers||n)&&(r.headers={...e.headers,...n}),new d({apiKey:t,httpOptions:Object.keys(r).length>0?r:void 0})}function _(t,n,r={}){let i=f(t,n),a={};r.temperature!==void 0&&(a.temperature=r.temperature),r.maxTokens!==void 0&&(a.maxOutputTokens=r.maxTokens);let s={...Object.keys(a).length>0&&a,...n.systemPrompt&&{systemInstruction:e(n.systemPrompt)},...n.tools&&n.tools.length>0&&{tools:c(n.tools)}};if(n.tools&&n.tools.length>0&&r.toolChoice?s.toolConfig={functionCallingConfig:{mode:o(r.toolChoice)}}:s.toolConfig=void 0,r.thinking?.enabled&&t.reasoning){let e={includeThoughts:!0};r.thinking.level===void 0?r.thinking.budgetTokens!==void 0&&(e.thinkingBudget=r.thinking.budgetTokens):e.thinkingLevel=r.thinking.level,s.thinkingConfig=e}else t.reasoning&&r.thinking&&!r.thinking.enabled&&(s.thinkingConfig=x(t));if(r.signal){if(r.signal.aborted)throw Error(`Request aborted`);s.abortSignal=r.signal}return{model:t.id,contents:i,config:s}}function v(e){return/gemma-?4/.test(e.id.toLowerCase())}function y(e){return/gemini-3(?:\.\d+)?-pro/.test(e.id.toLowerCase())}function b(e){return/gemini-3(?:\.\d+)?-flash/.test(e.id.toLowerCase())}function x(e){return y(e)?{thinkingLevel:`LOW`}:b(e)||v(e)?{thinkingLevel:`MINIMAL`}:{thinkingBudget:0}}function S(e,t){if(y(t))switch(e){case`minimal`:case`low`:return`LOW`;case`medium`:case`high`:return`HIGH`}if(v(t))switch(e){case`minimal`:case`low`:return`MINIMAL`;case`medium`:case`high`:return`HIGH`}switch(e){case`minimal`:return`MINIMAL`;case`low`:return`LOW`;case`medium`:return`MEDIUM`;case`high`:return`HIGH`}}function C(e,t,n){return n?.[t]===void 0?e.id.includes(`2.5-pro`)?{minimal:128,low:2048,medium:8192,high:32768}[t]:e.id.includes(`2.5-flash-lite`)?{minimal:512,low:2048,medium:8192,high:24576}[t]:e.id.includes(`2.5-flash`)?{minimal:128,low:2048,medium:8192,high:24576}[t]:-1:n[t]}export{m as streamGoogle,h as streamSimpleGoogle};
1
+ import{a as e,c as t,l as n,n as r,o as i}from"./simple-options-CDIijiMb.js";import{m as a}from"./index-Bv5amGny.js";import{a as o,i as s,n as c,o as l,r as u,s as d,t as f}from"./google-shared-tCK79d6s.js";var p=0,m=(e,n,r)=>{let o=new i;return(async()=>{let i={role:`assistant`,content:[],api:`google-generative-ai`,provider:e.provider,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`stop`,timestamp:Date.now()};try{let c=g(e,r?.apiKey||a(e.provider)||``,r?.headers),d=_(e,n,r),f=await r?.onPayload?.(d,e);f!==void 0&&(d=f);let m=await c.models.generateContentStream(d);o.push({type:`start`,partial:i});let h=null,v=i.content,y=()=>v.length-1;for await(let n of m){i.responseId||=n.responseId;let r=n.candidates?.[0];if(r?.content?.parts)for(let e of r.content.parts){if(e.text!==void 0){let t=u(e);(!h||t&&h.type!==`thinking`||!t&&h.type!==`text`)&&(h&&(h.type===`text`?o.push({type:`text_end`,contentIndex:v.length-1,content:h.text,partial:i}):o.push({type:`thinking_end`,contentIndex:y(),content:h.thinking,partial:i})),t?(h={type:`thinking`,thinking:``,thinkingSignature:void 0},i.content.push(h),o.push({type:`thinking_start`,contentIndex:y(),partial:i})):(h={type:`text`,text:``},i.content.push(h),o.push({type:`text_start`,contentIndex:y(),partial:i}))),h.type===`thinking`?(h.thinking+=e.text,h.thinkingSignature=l(h.thinkingSignature,e.thoughtSignature),o.push({type:`thinking_delta`,contentIndex:y(),delta:e.text,partial:i})):(h.text+=e.text,h.textSignature=l(h.textSignature,e.thoughtSignature),o.push({type:`text_delta`,contentIndex:y(),delta:e.text,partial:i}))}if(e.functionCall){h&&=(h.type===`text`?o.push({type:`text_end`,contentIndex:y(),content:h.text,partial:i}):o.push({type:`thinking_end`,contentIndex:y(),content:h.thinking,partial:i}),null);let t=e.functionCall.id,n={type:`toolCall`,id:!t||i.content.some(e=>e.type===`toolCall`&&e.id===t)?`${e.functionCall.name}_${Date.now()}_${++p}`:t,name:e.functionCall.name||``,arguments:e.functionCall.args??{},...e.thoughtSignature&&{thoughtSignature:e.thoughtSignature}};i.content.push(n),o.push({type:`toolcall_start`,contentIndex:y(),partial:i}),o.push({type:`toolcall_delta`,contentIndex:y(),delta:JSON.stringify(n.arguments),partial:i}),o.push({type:`toolcall_end`,contentIndex:y(),toolCall:n,partial:i})}}r?.finishReason&&(i.stopReason=s(r.finishReason),i.content.some(e=>e.type===`toolCall`)&&(i.stopReason=`toolUse`)),n.usageMetadata&&(i.usage={input:(n.usageMetadata.promptTokenCount||0)-(n.usageMetadata.cachedContentTokenCount||0),output:(n.usageMetadata.candidatesTokenCount||0)+(n.usageMetadata.thoughtsTokenCount||0),cacheRead:n.usageMetadata.cachedContentTokenCount||0,cacheWrite:0,totalTokens:n.usageMetadata.totalTokenCount||0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},t(e,i.usage))}if(h&&(h.type===`text`?o.push({type:`text_end`,contentIndex:y(),content:h.text,partial:i}):o.push({type:`thinking_end`,contentIndex:y(),content:h.thinking,partial:i})),r?.signal?.aborted)throw Error(`Request was aborted`);if(i.stopReason===`aborted`||i.stopReason===`error`)throw Error(`An unknown error occurred`);o.push({type:`done`,reason:i.stopReason,message:i}),o.end()}catch(e){for(let e of i.content)`index`in e&&delete e.index;i.stopReason=r?.signal?.aborted?`aborted`:`error`,i.errorMessage=e instanceof Error?e.message:JSON.stringify(e),o.push({type:`error`,reason:i.stopReason,error:i}),o.end()}})(),o},h=(e,t,i)=>{let o=i?.apiKey||a(e.provider);if(!o)throw Error(`No API key for provider: ${e.provider}`);let s=r(e,i,o);if(!i?.reasoning)return m(e,t,{...s,thinking:{enabled:!1}});let c=n(e,i.reasoning),l=c===`off`?`high`:c,u=e;return y(u)||b(u)||v(u)?m(e,t,{...s,thinking:{enabled:!0,level:S(l,u)}}):m(e,t,{...s,thinking:{enabled:!0,budgetTokens:C(u,l,i.thinkingBudgets)}})};function g(e,t,n){let r={};return e.baseUrl&&(r.baseUrl=e.baseUrl,r.apiVersion=``),(e.headers||n)&&(r.headers={...e.headers,...n}),new d({apiKey:t,httpOptions:Object.keys(r).length>0?r:void 0})}function _(t,n,r={}){let i=f(t,n),a={};r.temperature!==void 0&&(a.temperature=r.temperature),r.maxTokens!==void 0&&(a.maxOutputTokens=r.maxTokens);let s={...Object.keys(a).length>0&&a,...n.systemPrompt&&{systemInstruction:e(n.systemPrompt)},...n.tools&&n.tools.length>0&&{tools:c(n.tools)}};if(n.tools&&n.tools.length>0&&r.toolChoice?s.toolConfig={functionCallingConfig:{mode:o(r.toolChoice)}}:s.toolConfig=void 0,r.thinking?.enabled&&t.reasoning){let e={includeThoughts:!0};r.thinking.level===void 0?r.thinking.budgetTokens!==void 0&&(e.thinkingBudget=r.thinking.budgetTokens):e.thinkingLevel=r.thinking.level,s.thinkingConfig=e}else t.reasoning&&r.thinking&&!r.thinking.enabled&&(s.thinkingConfig=x(t));if(r.signal){if(r.signal.aborted)throw Error(`Request aborted`);s.abortSignal=r.signal}return{model:t.id,contents:i,config:s}}function v(e){return/gemma-?4/.test(e.id.toLowerCase())}function y(e){return/gemini-3(?:\.\d+)?-pro/.test(e.id.toLowerCase())}function b(e){return/gemini-3(?:\.\d+)?-flash/.test(e.id.toLowerCase())}function x(e){return y(e)?{thinkingLevel:`LOW`}:b(e)||v(e)?{thinkingLevel:`MINIMAL`}:{thinkingBudget:0}}function S(e,t){if(y(t))switch(e){case`minimal`:case`low`:return`LOW`;case`medium`:case`high`:return`HIGH`}if(v(t))switch(e){case`minimal`:case`low`:return`MINIMAL`;case`medium`:case`high`:return`HIGH`}switch(e){case`minimal`:return`MINIMAL`;case`low`:return`LOW`;case`medium`:return`MEDIUM`;case`high`:return`HIGH`}}function C(e,t,n){return n?.[t]===void 0?e.id.includes(`2.5-pro`)?{minimal:128,low:2048,medium:8192,high:32768}[t]:e.id.includes(`2.5-flash-lite`)?{minimal:512,low:2048,medium:8192,high:24576}[t]:e.id.includes(`2.5-flash`)?{minimal:128,low:2048,medium:8192,high:24576}[t]:-1:n[t]}export{m as streamGoogle,h as streamSimpleGoogle};
@@ -0,0 +1 @@
1
+ @font-face{font-family:Adobe Clean;src:url(/fonts/AdobeClean-Regular.otf)format("opentype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Adobe Clean;src:url(/fonts/AdobeClean-Medium.otf)format("opentype");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Adobe Clean;src:url(/fonts/AdobeClean-Bold.otf)format("opentype");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Adobe Clean;src:url(/fonts/AdobeClean-ExtraBold.otf)format("opentype");font-weight:800;font-style:normal;font-display:swap}:root{--s2-gray-25:#1a1a1a;--s2-gray-50:#1e1e1e;--s2-gray-75:#252525;--s2-gray-100:#2c2c2c;--s2-gray-200:#3a3a3a;--s2-gray-300:#4a4a4a;--s2-gray-400:#5a5a5a;--s2-gray-500:#6e6e6e;--s2-gray-600:#8a8a8a;--s2-gray-700:#a1a1a1;--s2-gray-800:#cfcfcf;--s2-gray-900:#e8e8e8;--s2-gray-1000:#fff;--s2-bg-base:var(--s2-gray-25);--s2-bg-layer-1:var(--s2-gray-50);--s2-bg-layer-2:var(--s2-gray-75);--s2-bg-elevated:var(--s2-gray-100);--s2-bg-sunken:#141414;--s2-content-default:var(--s2-gray-900);--s2-content-secondary:var(--s2-gray-700);--s2-content-tertiary:var(--s2-gray-600);--s2-content-disabled:var(--s2-gray-400);--slicc-cone:#ef7000;--slicc-scoop-blue:#3562ff;--slicc-scoop-purple:#a962e8;--slicc-scoop-teal:#2db9be;--slicc-accent:#15d675;--s2-accent:var(--slicc-scoop-blue);--s2-accent-hover:#4a75ff;--s2-accent-down:#2a52e0;--s2-negative:#e34850;--s2-positive:#2d9d78;--s2-informative:var(--slicc-scoop-blue);--s2-notice:#e68619;--s2-border-default:var(--s2-gray-300);--s2-border-subtle:var(--s2-gray-200);--s2-border-focus:var(--s2-accent);--s2-font-family:"Adobe Clean", "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--s2-font-mono:"Source Code Pro", "JetBrains Mono", "Fira Code", "Cascadia Code", monospace;--s2-font-size-50:11px;--s2-font-size-75:12px;--s2-font-size-100:14px;--s2-font-size-200:16px;--s2-font-size-300:18px;--s2-font-size-400:20px;--s2-font-size-500:22px;--s2-font-size-600:25px;--s2-line-height-50:14px;--s2-line-height-75:16px;--s2-line-height-100:18px;--s2-line-height-200:20px;--s2-line-height-300:22px;--s2-spacing-50:4px;--s2-spacing-75:6px;--s2-spacing-100:8px;--s2-spacing-200:12px;--s2-spacing-300:16px;--s2-spacing-400:24px;--s2-spacing-500:32px;--s2-spacing-600:40px;--s2-radius-s:4px;--s2-radius-default:8px;--s2-radius-l:12px;--s2-radius-xl:16px;--s2-radius-pill:9999px;--s2-shadow-elevated:0 4px 16px #0006, 0 1px 4px #0000004d;--s2-shadow-container:0 1px 4px #0003;--s2-transition-default:.13s ease;--s2-header-height:56px;--uxc-yellow-subtle-bg:#fff197;--uxc-yellow-subtle-text:#9e6600;--uxc-purple-subtle-bg:#f4ebfc;--uxc-purple-subtle-text:#9a47e2;--uxc-cyan-subtle-bg:#d9f4fd;--uxc-cyan-subtle-text:#0b78b3;--uxc-magenta-subtle-bg:#ffe8f0;--uxc-magenta-subtle-text:#d92361;--uxc-indigo-subtle-bg:#ebeeff;--uxc-indigo-subtle-text:#5424db;--uxc-gray-subtle-bg:#efefef;--uxc-gray-subtle-text:#292929;--uxc-positive-subtle-bg:#d7f7e1;--uxc-positive-subtle-text:#079355;--uxc-notice-subtle-bg:#ffeccf;--uxc-notice-subtle-text:#d45b00;--uxc-negative-subtle-bg:#ffe8f0;--uxc-negative-subtle-text:#d92361;--uxc-accent-subtle-bg:#e5f0fe;--uxc-accent-subtle-text:#3b63fb;--uxc-neutral-subtle-bg:#f3f3f3;--uxc-nav-rail-width:58px;--uxc-thread-header-height:56px;--uxc-content-max-width:800px;--slicc-warm-bg:color-mix(in oklch, var(--s2-gray-50) 94%, var(--slicc-cone) 6%);--slicc-brand-gradient:linear-gradient(90deg, var(--slicc-cone) 0%, var(--slicc-scoop-blue) 50%, var(--slicc-scoop-purple) 100%)}:root.theme-light{--s2-gray-25:#fff;--s2-gray-50:#f8f8f8;--s2-gray-75:#f3f3f3;--s2-gray-100:#e9e9e9;--s2-gray-200:#e1e1e1;--s2-gray-300:#dadada;--s2-gray-400:#c6c6c6;--s2-gray-500:#8f8f8f;--s2-gray-600:#717171;--s2-gray-700:#505050;--s2-gray-800:#292929;--s2-gray-900:#131313;--s2-gray-1000:#000;--s2-bg-sunken:#f3f3f3;--s2-accent:#3b63fb;--s2-accent-hover:#2b54db;--s2-accent-down:#1e44c4;--s2-negative:#d92361;--s2-positive:#05834e;--s2-notice:#d45b00;--s2-shadow-elevated:0 4px 12px #00000014, 0 2px 6px #0000000a, 0 0px 2px #0000001f;--s2-shadow-container:0 2px 8px #00000014, 0 1px 4px #0000000a, 0 0px 1px #00000014}.theme-light .tok-keyword{color:#8839ef}.theme-light .tok-string{color:#40a02b}.theme-light .tok-number{color:#d05d1a}.theme-light .tok-comment{color:var(--s2-gray-500)}.theme-light .tok-punct{color:#1e66f5}.theme-light .tok-fn{color:#2b6cb0}.theme-light .s2-tooltip{background:var(--s2-gray-900);color:var(--s2-gray-25)}.theme-light ::-webkit-scrollbar-thumb{background:var(--s2-gray-300)}.theme-light ::-webkit-scrollbar-thumb:hover{background:var(--s2-gray-400)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body{height:100%;overflow:hidden}body{font-family:var(--s2-font-family);background:var(--s2-bg-base);color:var(--s2-content-default);font-size:var(--s2-font-size-100);line-height:1.5}#app{flex-direction:column;height:100%;display:flex}:focus-visible{outline:2px solid var(--s2-accent);outline-offset:2px}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--s2-gray-300);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--s2-gray-400)}.layout{flex:1;min-height:0;display:flex}.layout__scoops{width:var(--uxc-nav-rail-width);min-width:var(--uxc-nav-rail-width);max-width:var(--uxc-nav-rail-width);background:var(--s2-bg-layer-1);flex-direction:column;flex-shrink:0;transition:width .2s,min-width .2s,max-width .2s;display:flex;overflow:visible}.layout__scoops--expanded{width:230px;min-width:230px;max-width:230px}.layout__left{background:var(--s2-bg-layer-1);flex-direction:column;flex:1;min-width:320px;display:flex}.layout__right{background:var(--s2-gray-25);flex-direction:column;flex:1;min-width:240px;display:flex;overflow:hidden}.layout__divider{cursor:col-resize;background:var(--s2-border-subtle);width:1px;transition:background var(--s2-transition-default);flex-shrink:0;position:relative}.layout__divider:after{content:"";position:absolute;inset:0 -3px}.layout__divider:hover,.layout__divider.active{background:var(--s2-accent)}.thread-header{height:var(--uxc-thread-header-height);min-height:var(--uxc-thread-header-height);background:var(--s2-gray-25);border-bottom:none;border-top-left-radius:12px;flex-shrink:0;justify-content:space-between;align-items:center;padding:0 16px;display:flex;position:relative;overflow:hidden}.thread-header:before{content:"";background:var(--slicc-brand-gradient);opacity:.5;height:1px;position:absolute;bottom:0;left:0;right:0}.thread-header:after{content:"";background:var(--s2-accent);transform-origin:0;opacity:0;height:2px;transition:opacity .2s;position:absolute;bottom:0;left:0;right:0;transform:scaleX(0)}.thread-header--processing:after{opacity:1;animation:1.8s ease-in-out infinite thread-progress}@keyframes thread-progress{0%{transform:scaleX(0)translate(0)}50%{transform:scaleX(.4)translate(125%)}to{transform:scaleX(0)translate(300%)}}.thread-header__title{flex:1;align-items:center;gap:8px;min-width:0;display:flex}.thread-header__name{letter-spacing:0;color:var(--s2-gray-900);white-space:nowrap;text-overflow:ellipsis;font-size:14px;font-weight:700;line-height:18px;overflow:hidden}.thread-header__icon{width:20px;height:20px;color:var(--s2-content-default);flex-shrink:0;justify-content:center;align-items:center;display:flex}.thread-header__actions{flex-shrink:0;align-items:center;gap:4px;display:flex}.thread-header--with-switcher{z-index:12;overflow:visible}.thread-header--with-switcher .thread-header__title{gap:0}.thread-header--with-switcher .scoop-switcher{align-items:center;margin-left:0;display:flex}.layout__right-divider{cursor:row-resize;background:var(--s2-border-subtle);height:1px;transition:background var(--s2-transition-default);flex-shrink:0;position:relative}.layout__right-divider:after{content:"";position:absolute;inset:-3px 0}.layout__right-divider:hover,.layout__right-divider.active{background:var(--s2-accent)}.thread-header__panel-toggle{width:32px;height:32px;color:var(--s2-content-secondary);border-radius:var(--s2-radius-pill);cursor:pointer;transition:background var(--s2-transition-default), color var(--s2-transition-default);background:0 0;border:none;justify-content:center;align-items:center;display:inline-flex}.thread-header__panel-toggle:hover{background:var(--s2-gray-200);color:var(--s2-content-default)}.thread-header__panel-toggle svg{width:16px;height:16px}.chat__gradient-top{background:linear-gradient(to bottom, var(--s2-bg-base) 0%, transparent 100%);pointer-events:none;z-index:1;height:80px;position:absolute;top:0;left:0;right:0}.layout__left--fullpage-hidden,.layout__divider--fullpage-hidden,.layout__scoops--fullpage-hidden{display:none!important}.layout__right--fullpage{flex:1;min-width:0;width:auto!important;box-shadow:none!important;position:static!important;transform:none!important}@media (width>=1024px){.thread-header__panel-toggle--right{display:none}}@media (width<=1023px){.layout__right{right:0;top:var(--s2-header-height);z-index:50;width:50vw;min-width:400px;transition:transform .25s;position:fixed;bottom:0;transform:translate(100%);box-shadow:-4px 0 24px #0000001a}.layout__right--open{transform:translate(0)}.layout__divider--vertical{display:none}.layout__left{flex:1;min-width:0}}@media (width<=767px){.layout__scoops{left:0;top:var(--s2-header-height);z-index:60;border-right:1px solid var(--s2-border-subtle);width:var(--uxc-nav-rail-width);min-width:var(--uxc-nav-rail-width);max-width:var(--uxc-nav-rail-width);transition:transform .25s;position:fixed;bottom:0;transform:translate(-100%);box-shadow:4px 0 24px #0000001a}.layout__scoops--expanded{width:200px;min-width:200px;max-width:200px;transform:translate(0)}.layout__divider--scoops{display:none}.layout__right{width:100vw;min-width:100vw}.thread-header{padding:0 var(--s2-spacing-200)}.chat__input-area{padding:var(--s2-spacing-200)}}@media (width>=1440px){.layout__left,.layout__right{flex:1}}.header{height:var(--s2-header-height);min-height:var(--s2-header-height);background:var(--s2-bg-layer-2);z-index:10;flex-shrink:0;justify-content:space-between;align-items:center;padding:8px 16px;display:flex}.header__row{align-items:center;gap:6px;width:100%;display:flex}.header__brand{align-items:center;gap:10px;display:flex}.header__spacer{flex:1}.header__logo{flex-shrink:0;width:32px;height:32px;margin-right:12px;transition:viewBox .3s}.header__brand .scoops-hamburger{width:32px;height:32px;color:var(--s2-content-secondary);cursor:pointer;background:0 0;border:none;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;transition:background .13s,color .13s;display:flex}.header__brand .scoops-hamburger:hover{background:var(--s2-bg-elevated);color:var(--s2-content-default)}.logo-scoop-enter{transform-box:fill-box;transform-origin:50%;animation:.6s cubic-bezier(.34,1.56,.64,1) both scoop-drop}@keyframes scoop-drop{0%{opacity:0;transform:translateY(-18px)scale(.2)}40%{opacity:1;transform:translateY(1px)scale(1.15)}60%{transform:translateY(-2px)scale(.95)}80%{transform:translateY(.5px)scale(1.03)}to{opacity:1;transform:translateY(0)scale(1)}}.logo-scoop-wiggle{transform-box:fill-box;transform-origin:50%;animation:.5s both scoop-wiggle}@keyframes scoop-wiggle{0%{transform:translateY(0)}20%{transform:translateY(1.5px)}40%{transform:translateY(-1px)}60%{transform:translateY(.5px)}to{transform:translateY(0)}}.logo-cone-squash{transform-box:fill-box;transform-origin:top;animation:.5s both cone-squash}@keyframes cone-squash{0%{transform:scaleY(1)scaleX(1)}30%{transform:scaleY(.92)scaleX(1.06)}60%{transform:scaleY(1.03)scaleX(.98)}to{transform:scaleY(1)scaleX(1)}}.header__title{color:var(--s2-gray-900);letter-spacing:-.01em;font-size:18px;font-weight:800;line-height:20px}.header__actions{align-items:center;gap:8px;display:flex}.header__separator{background:var(--s2-border-subtle);width:1px;height:20px;margin:0}.header__btn{color:var(--s2-content-default);width:32px;height:32px;font-size:14px;font-family:var(--s2-font-family);cursor:pointer;transition:background var(--s2-transition-default), color var(--s2-transition-default), transform var(--s2-transition-default);background:0 0;border:none;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:inline-flex;position:relative}.header__btn:hover{background:var(--s2-bg-elevated);color:var(--s2-content-default)}.header__btn:active{transform:scale(.92)}.header__btn svg{width:20px;height:20px}.header__btn--text{width:auto;padding:var(--s2-spacing-50) var(--s2-spacing-200);font-size:var(--s2-font-size-75);border-radius:var(--s2-radius-default);gap:var(--s2-spacing-75);font-weight:500}.s2-tooltip{background:var(--s2-gray-900);color:var(--s2-gray-25);font-size:11px;font-weight:500;font-family:var(--s2-font-family);white-space:nowrap;text-align:center;border-radius:var(--s2-radius-s);pointer-events:none;opacity:0;z-index:10000;padding:4px 8px;line-height:1.3;transition:opacity .13s;position:fixed}.s2-tooltip--visible{opacity:1}.header__avatar{cursor:pointer;width:28px;height:28px;transition:border-color var(--s2-transition-default), box-shadow var(--s2-transition-default);background:var(--s2-gray-200);color:var(--s2-content-tertiary);border:2px solid #0000;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden}.header__avatar:hover{border-color:var(--s2-gray-300);box-shadow:0 0 0 2px color-mix(in srgb, var(--s2-accent) 20%, transparent)}.header__avatar img{object-fit:cover;border-radius:50%;width:100%;height:100%}.header__avatar--initials{background:var(--slicc-cone);color:#fff;font-size:11px;font-weight:700;font-family:var(--s2-font-family);line-height:1}.header__avatar--placeholder svg{width:16px;height:16px}.avatar-popover{z-index:10001;background:var(--s2-bg-layer-2);border:1px solid var(--s2-border-subtle);border-radius:var(--s2-radius-default);min-width:220px;font-family:var(--s2-font-family);padding:8px 0;position:fixed;box-shadow:0 8px 24px #0000001f,0 2px 8px #00000014}.avatar-popover__user{border-bottom:1px solid var(--s2-border-subtle);padding:12px 16px}.avatar-popover__name{color:var(--s2-content-default);font-size:14px;font-weight:600}.avatar-popover__provider{color:var(--s2-content-tertiary);margin-top:2px;font-size:11px}.avatar-popover__caption{color:var(--s2-content-tertiary);padding:4px 16px 8px;font-size:11px}.avatar-popover__item{width:100%;color:var(--s2-content-default);font-size:13px;font-family:var(--s2-font-family);cursor:pointer;text-align:left;transition:background var(--s2-transition-default);background:0 0;border:none;align-items:center;gap:8px;padding:8px 16px;display:flex}.avatar-popover__item:hover{background:var(--s2-bg-elevated)}.avatar-popover__item--danger{color:var(--s2-negative)}.avatar-popover__item--danger:hover{background:color-mix(in srgb, var(--s2-negative) 8%, transparent)}.avatar-popover__separator{background:var(--s2-border-subtle);height:1px;margin:4px 0}.chat{background:var(--s2-bg-base);flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.chat__messages{flex-direction:column;flex:1;gap:16px;padding:16px;display:flex;overflow-y:auto}.chat__messages-inner{width:100%;max-width:var(--uxc-content-max-width);flex-direction:column;gap:16px;margin:0 auto;display:flex}.chat__jump-pill{background:var(--s2-bg-layer-2);color:var(--s2-content-default);border:1px solid var(--s2-border-subtle);border-radius:var(--s2-radius-l);cursor:pointer;z-index:10;opacity:0;pointer-events:none;padding:5px 14px;font-size:12px;transition:opacity .2s;position:absolute;bottom:68px;left:50%;transform:translate(-50%)}.chat__jump-pill--visible{opacity:1;pointer-events:auto}.chat__jump-pill:hover{background:var(--s2-bg-elevated)}.msg{word-wrap:break-word;letter-spacing:0;max-width:100%;color:var(--s2-content-default);padding:0;font-size:14px;line-height:1.5}.msg--user{color:#fff;letter-spacing:0;background:#7155fa;border-radius:10px;align-self:flex-end;min-width:80px;max-width:560px;padding:8px 16px;font-size:14px;font-weight:500;line-height:18px}.msg--user .msg__content a,.msg--user .msg__content a:visited{color:#c8bbff!important;text-decoration:underline!important}.msg--user .msg__content a:hover{color:#fff!important}.msg--user :not(pre)>code{color:#fff!important;background:#ffffff2e!important}.msg--user pre{background:#00000040!important;border-color:#ffffff1a!important}.msg--user pre code{color:#e8e0ff!important}.msg--user .msg__attachments{margin-bottom:8px}.msg-group--continuation .msg--user{padding-left:0}.msg--assistant{background:0 0;align-self:stretch}.msg--assistant .msg__content{white-space:normal;color:var(--s2-content-default);font-size:14px;line-height:1.5}.msg--assistant .msg__error{margin:var(--s2-spacing-75) 0}.msg--assistant .msg__error-label{color:var(--s2-negative);font-size:10px;font-weight:600;font-family:var(--s2-font-mono);text-transform:uppercase;letter-spacing:.04em;align-items:center;gap:6px;display:inline-flex}.msg--assistant .msg__error-label:before{content:"!";border-radius:var(--s2-radius-s);background:color-mix(in srgb, var(--s2-negative) 18%, transparent);border:1px solid color-mix(in srgb, var(--s2-negative) 45%, var(--s2-border-subtle));justify-content:center;align-items:center;width:16px;height:16px;display:inline-flex}.msg--assistant .msg__error-body{padding:var(--s2-spacing-75);border-left:2px solid color-mix(in srgb, var(--s2-negative) 60%, var(--s2-border-subtle));background:color-mix(in srgb, var(--s2-negative) 8%, var(--s2-bg-sunken));border-radius:var(--s2-radius-s);color:var(--s2-content-secondary);font-family:var(--s2-font-mono);font-size:var(--s2-font-size-50);white-space:pre-wrap;margin-top:2px;overflow-x:auto}.msg--assistant .msg__error-body code{font-size:inherit}.msg__dip{border-radius:var(--s2-radius-default);min-height:32px;margin:.6em 0;overflow:hidden}.msg__dip iframe{background:0 0;border:none;width:100%;display:block;overflow:hidden}.msg-group--continuation .msg{padding-left:0}.msg__role,.msg__icon{display:none}.msg__collapsible{cursor:pointer}.msg__collapsible summary{cursor:pointer;color:var(--s2-content-tertiary);font-size:var(--s2-font-size-75);padding:var(--s2-spacing-50) 0;list-style:none}.msg__collapsible summary::-webkit-details-marker{display:none}.msg__collapsible summary:before{content:"▸";color:var(--s2-content-tertiary);transition:transform var(--s2-transition-default);margin-right:var(--s2-spacing-50);font-size:10px;display:inline-block}.msg__collapsible[open] summary:before{transform:rotate(90deg)}.msg__collapsible[open] .msg__content{margin-top:var(--s2-spacing-100)}.msg-group{flex-direction:column;gap:8px;display:flex}.msg--queued{opacity:.55}.msg__queued-badge{text-transform:uppercase;background:var(--s2-bg-elevated);color:var(--s2-content-disabled);border-radius:var(--s2-radius-s);letter-spacing:.5px;vertical-align:middle;margin-left:8px;padding:1px 6px;font-size:9px;font-weight:600;display:inline-block}.msg__queued-delete{color:var(--s2-content-disabled);cursor:pointer;vertical-align:middle;background:0 0;border:none;margin-left:6px;padding:0 4px;font-size:14px;line-height:1}.msg__queued-delete:hover{color:var(--s2-negative)}.streaming-cursor{background:var(--s2-accent);vertical-align:text-bottom;border-radius:1px;width:2px;height:16px;margin-left:2px;animation:1s step-end infinite blink;display:inline-block}@keyframes blink{50%{opacity:0}}.chat__input-area{padding:var(--s2-spacing-300);background:var(--s2-bg-base);border-top:none}.chat__input-area-inner{max-width:var(--uxc-content-max-width);width:100%;margin:0 auto}.chat__suggested-actions{gap:var(--s2-spacing-100);margin-bottom:var(--s2-spacing-200);flex-wrap:wrap;justify-content:center;display:flex}.chat__suggested-btn{align-items:center;gap:var(--s2-spacing-75);border:1px solid var(--s2-gray-200);border-radius:var(--s2-radius-pill);background:var(--s2-bg-base);height:32px;color:var(--s2-content-default);font-size:var(--s2-font-size-75);font-weight:600;font-family:var(--s2-font-family);cursor:pointer;transition:background var(--s2-transition-default), border-color var(--s2-transition-default);padding:0 16px;display:inline-flex}.chat__suggested-btn:hover{background:var(--s2-gray-75);border-color:var(--s2-gray-300)}.chat__suggested-btn--accent{background:var(--s2-accent);color:#fff;border-color:#0000}.chat__suggested-btn--accent:hover{background:var(--s2-accent-hover)}.chat__input-wrapper{border:1px solid var(--s2-border-subtle);background:var(--s2-gray-25);transition:border-color var(--s2-transition-default), box-shadow var(--s2-transition-default);border-radius:16px;flex-direction:column;min-height:112px;padding:16px;display:flex;box-shadow:0 0 1px #00000014,0 1px 4px #0000000a,0 2px 8px #00000014}.chat__input-wrapper:focus-within{border-color:var(--s2-accent);box-shadow:0 0 1px #00000014,0 1px 4px #0000000a,0 4px 16px #0000001f}.chat__attachments,.msg__attachments{flex-wrap:wrap;gap:8px;display:none}.chat__attachments--visible,.msg__attachments{display:flex}.chat__attachments{margin-bottom:10px}.attachment-chip{border-radius:var(--s2-radius-default);border:1px solid var(--s2-border-subtle);background:var(--s2-bg-base);max-width:min(260px,100%);min-height:36px;color:var(--s2-content-default);align-items:center;gap:8px;padding:5px 8px 5px 6px;font-size:12px;line-height:1.2;display:inline-flex}.msg--user .attachment-chip{color:#fff;background:#ffffff24;border-color:#fff3}.attachment-chip__visual{background:color-mix(in srgb, var(--s2-bg-elevated) 80%, transparent);border-radius:6px;flex:none;justify-content:center;align-items:center;width:26px;height:26px;display:inline-flex;overflow:hidden}.msg--user .attachment-chip__visual{background:#ffffff29}.attachment-chip__visual img{object-fit:cover;width:100%;height:100%}.attachment-chip__body{flex-direction:column;gap:1px;min-width:0;display:flex}.attachment-chip__name,.attachment-chip__meta,.attachment-chip__path{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.attachment-chip__name{font-weight:600}.attachment-chip__meta{color:var(--s2-content-tertiary);font-size:11px}.attachment-chip__path{color:var(--s2-content-tertiary);font-size:11px;font-family:var(--s2-font-mono,ui-monospace, monospace)}.msg--user .attachment-chip__meta,.msg--user .attachment-chip__path{color:#ffffffb3}.attachment-chip__remove{border-radius:var(--s2-radius-s);width:22px;height:22px;color:var(--s2-content-tertiary);cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;display:inline-flex}.attachment-chip__remove:hover{background:var(--s2-bg-elevated);color:var(--s2-content-default)}.chat__textarea{resize:none;min-height:18px;max-height:30vh;color:var(--s2-content-default);font-family:var(--s2-font-family);letter-spacing:0;background:0 0;border:none;outline:none;flex:none;padding:0;font-size:14px;font-weight:400;line-height:18px;overflow-y:auto}.chat__textarea::placeholder{color:var(--s2-content-tertiary)}.chat__action-bar{flex-shrink:0;justify-content:space-between;align-items:center;margin-top:auto;display:flex}.chat__action-bar-left{align-items:center;gap:8px;display:flex}.chat__action-bar-right{align-items:center;gap:8px;margin-left:12px;display:flex}.chat__model-selector{flex:1;justify-content:flex-end;align-items:center;gap:6px;display:flex;position:relative}.chat__thinking-btn{border-radius:var(--s2-radius-default);cursor:pointer;width:28px;height:28px;color:var(--s2-content-default);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;transition:opacity .13s,transform .13s,background .13s,color .13s;display:flex}.chat__thinking-btn svg{width:18px;height:18px}.chat__thinking-btn:hover{background:var(--s2-bg-elevated)}.chat__thinking-btn:active{transform:scale(.92)}.chat__thinking-btn[hidden]{display:none}.chat__thinking-btn[data-level=off]{opacity:.5}.chat__thinking-btn[data-level=minimal],.chat__thinking-btn[data-level=low]{opacity:.75}.chat__thinking-btn[data-level=medium],.chat__thinking-btn[data-level=high]{opacity:1;color:var(--s2-accent,var(--slicc-cone,#6b8afd))}.chat__thinking-btn[data-level=xhigh]{opacity:1;color:#fff;background:linear-gradient(135deg, var(--slicc-cone-mint,#b8e6c9), var(--slicc-cone-strawberry,#ffb3c1), var(--slicc-cone-vanilla,#fff4c2), var(--slicc-cone-blueberry,#b8c9ff));background-size:300% 300%;animation:6s ease-in-out infinite chat-thinking-shimmer}@keyframes chat-thinking-shimmer{0%,to{background-position:0%}50%{background-position:100%}}@media (prefers-reduced-motion:reduce){.chat__thinking-btn[data-level=xhigh]{animation:none}}.chat__model-pill{border:1px solid var(--s2-border-subtle);color:var(--s2-content-secondary);border-radius:var(--s2-radius-pill);font-size:12px;font-family:var(--s2-font-family);cursor:pointer;white-space:nowrap;background:0 0;padding:4px 12px;transition:background .13s,color .13s,border-color .13s}.chat__model-pill:hover{background:var(--s2-bg-elevated);color:var(--s2-content-default)}.chat__model-pill--active{background:var(--s2-accent);color:#fff;border-color:var(--s2-accent)}.chat__model-pill--active:hover{background:var(--s2-accent-hover);border-color:var(--s2-accent-hover)}.chat__model-btn--compact{border:1px solid var(--s2-border-subtle);color:var(--s2-content-secondary);border-radius:var(--s2-radius-pill);font-size:12px;font-family:var(--s2-font-family);cursor:pointer;white-space:nowrap;background:0 0;align-items:center;gap:4px;padding:4px 8px 4px 12px;transition:background .13s,color .13s;display:flex}.chat__model-btn--compact:hover{background:var(--s2-bg-elevated);color:var(--s2-content-default)}.chat__model-chevron{opacity:.6;align-items:center;display:flex}.chat__model-btn--disabled{cursor:default;opacity:.5;pointer-events:none}.chat__model-menu{background:var(--s2-bg-base);border:1px solid var(--s2-border-subtle);z-index:100;border-radius:12px;min-width:200px;max-height:240px;padding:6px;display:none;position:absolute;bottom:calc(100% + 6px);right:0;overflow-y:auto;box-shadow:0 4px 24px #0000001f}.chat__model-menu-item{cursor:pointer;font-size:13px;font-family:var(--s2-font-family);color:var(--s2-content-default);border-radius:8px;justify-content:space-between;align-items:center;padding:8px 12px;transition:background .1s;display:flex}.chat__model-menu-item:hover{background:var(--s2-bg-elevated)}.chat__model-menu-item--active{font-weight:600}.chat__model-check{color:var(--s2-accent);align-items:center;display:flex}.chat__send-btn{background:var(--s2-gray-100);width:32px;height:32px;color:var(--s2-gray-400);cursor:pointer;transition:background var(--s2-transition-default), color var(--s2-transition-default), transform var(--s2-transition-default);border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:14px;display:flex}.chat__send-btn:not(:disabled){color:#fff;background:#7155fa}.chat__send-btn:not(:disabled):hover{background:#6248e0}.chat__send-btn:active{transform:scale(.92)}.chat__send-btn:disabled{cursor:not-allowed}.chat__stop-btn{background:var(--s2-gray-800);width:32px;height:32px;color:var(--s2-gray-25);cursor:pointer;transition:background var(--s2-transition-default), transform var(--s2-transition-default);border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:14px;display:flex}.chat__stop-btn:hover{background:var(--s2-gray-900)}.chat__stop-btn:active{transform:scale(.92)}.chat__attach-btn,.chat__mic-btn{border-radius:var(--s2-radius-default);width:32px;height:32px;color:var(--s2-content-default);cursor:pointer;transition:background var(--s2-transition-default), color var(--s2-transition-default), transform var(--s2-transition-default);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;display:flex}.chat__attach-btn svg,.chat__mic-btn svg{width:20px;height:20px}.chat__attach-btn:hover,.chat__mic-btn:hover{background:var(--s2-bg-elevated);color:var(--s2-content-default)}.chat__attach-btn:disabled,.chat__mic-btn:disabled{opacity:.3;cursor:not-allowed}.chat__attach-btn--busy{color:var(--s2-accent)}.chat__file-input{display:none}.chat__mic-btn--active{color:var(--slicc-cone)}.chat__mic-btn--active.chat__mic-btn--listening,.chat__mic-btn--listening{background:var(--slicc-cone);color:#fff;animation:1.5s ease-in-out infinite mic-pulse}.chat__mic-btn--listening:hover{background:#d96600}@keyframes mic-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.85;transform:scale(1.06)}}.msg__feedback{align-items:center;gap:8px;padding-top:8px;display:flex}.msg__feedback-btn{width:24px;height:24px;color:var(--s2-content-secondary);cursor:pointer;transition:color var(--s2-transition-default), background var(--s2-transition-default);background:0 0;border:none;border-radius:7px;flex-shrink:0;justify-content:center;align-items:center;padding:4px;display:inline-flex}.msg__feedback-btn:hover{color:var(--s2-content-default);background:var(--s2-bg-elevated)}.msg__feedback-btn svg{width:16px;height:16px}.theme-light .msg__content a{color:#1e66f5}.theme-light .msg__content a:hover{color:#1444b0}.theme-light .msg__content a:visited{color:#1e66f5}.tool-call{font-size:var(--s2-font-size-75);--tool-status-color:var(--s2-gray-500);padding:0}.tool-call--running{--tool-status-color:#e6a23c}.tool-call--success{--tool-status-color:var(--s2-positive)}.tool-call--error{--tool-status-color:var(--s2-negative)}.tool-call--other{--tool-status-color:var(--s2-accent)}.tool-call summary{cursor:pointer;background:var(--s2-bg-layer-1);color:var(--s2-content-secondary);font-weight:400;font-size:var(--s2-font-size-75);transition:background var(--s2-transition-default);border-radius:8px;align-items:center;gap:8px;padding:8px 12px;line-height:1.4;list-style:none;display:flex}.tool-call summary:hover{background:var(--s2-bg-layer-2)}.tool-call summary::-webkit-details-marker{display:none}.tool-call__header{cursor:pointer;align-items:center;gap:8px;width:100%;display:flex}.tool-call__icon{width:16px;height:16px;color:var(--s2-content-secondary);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.tool-call__icon svg{width:14px;height:14px;display:block}.tool-call__name{color:var(--s2-content-secondary);font-weight:500;font-family:var(--s2-font-family);font-size:var(--s2-font-size-75);flex-shrink:0}.tool-call__preview{color:var(--s2-content-tertiary);font-size:var(--s2-font-size-75);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-family:var(--s2-font-mono);flex:1;overflow:hidden}.tool-call__status{background:var(--tool-status-color);border-radius:50%;flex-shrink:0;width:7px;height:7px;margin-left:auto}.tool-call__status--running{animation:1.2s ease-in-out infinite tool-status-pulse}@keyframes tool-status-pulse{0%,to{opacity:.4}50%{opacity:1}}.tool-call--stale .tool-call__status{opacity:.5}.tool-call--stale .tool-call__status--running{animation:none}.tool-call-cluster{font-size:var(--s2-font-size-75);padding:0}.tool-call-cluster>summary{cursor:pointer;background:var(--s2-bg-layer-1);color:var(--s2-content-secondary);font-weight:500;font-size:var(--s2-font-size-75);transition:background var(--s2-transition-default);border-radius:8px;align-items:center;gap:8px;padding:8px 12px;line-height:1.4;list-style:none;display:flex}.tool-call-cluster>summary:hover{background:var(--s2-bg-layer-2)}.tool-call-cluster>summary::-webkit-details-marker{display:none}.tool-call-cluster__dots{flex-wrap:wrap;flex-shrink:0;justify-content:flex-end;align-items:center;gap:4px;max-width:50%;margin-left:auto;display:inline-flex}.tool-call-cluster__dot{margin-left:0}.tool-call-cluster__body{border-left:2px solid var(--s2-border-subtle);flex-direction:column;gap:2px;margin-top:4px;margin-left:10px;padding-left:18px;display:flex}.tool-call-cluster.tool-call--stale>summary .tool-call__status{opacity:.5}.tool-call-cluster.tool-call--stale>summary .tool-call__status--running{animation:none}.tool-call__details{margin-top:2px;padding:8px 12px 12px 30px}.tool-call__body{flex-direction:column;gap:8px;display:flex}.tool-call__yaml{border-radius:var(--s2-radius-s);background:var(--s2-bg-sunken);color:var(--s2-content-default);font-family:var(--s2-font-mono);font-size:var(--s2-font-size-75);white-space:pre;max-height:320px;margin:0;padding:10px 12px;line-height:1.55;overflow-x:auto}.tool-call__yaml-key{color:var(--slicc-scoop-blue);font-weight:600}.tool-call__yaml-string{color:var(--s2-content-default)}.tool-call__yaml-scalar{color:var(--s2-content-tertiary)}.tool-call__yaml-null{color:var(--s2-content-tertiary);font-style:italic}.tool-call__result{border-radius:var(--s2-radius-s);background:var(--s2-bg-sunken);color:var(--s2-content-secondary);font-family:var(--s2-font-mono);font-size:var(--s2-font-size-75);white-space:pre-wrap;word-break:break-word;max-height:240px;margin:0;padding:10px 12px;line-height:1.5;overflow-y:auto}.tool-call__result--error{color:var(--s2-negative);background:color-mix(in oklch, var(--s2-negative) 10%, var(--s2-bg-sunken))}.tool-call__terminal{border-radius:var(--s2-radius-s);color:#e6e6e6;font-family:var(--s2-font-mono);font-size:var(--s2-font-size-75);background:#0d0d0f;border:1px solid #ffffff0f;padding:12px 14px;line-height:1.55;overflow:hidden}.tool-call__terminal-prompt{color:#f5f5f5;word-break:break-word;flex-wrap:wrap;align-items:flex-start;gap:8px;display:flex}.tool-call__terminal-sigil{color:#50d79a;flex-shrink:0;font-weight:600}.tool-call__terminal-cmd{white-space:pre-wrap;word-break:break-word}.tool-call__terminal-output{color:#c8c8c8;font-family:var(--s2-font-mono);font-size:var(--s2-font-size-75);white-space:pre-wrap;word-break:break-word;background:0 0;max-height:280px;margin:8px 0 0;padding:0;overflow-y:auto}.tool-call__terminal-output--error{color:#f38ba8}.tool-call__terminal-pending{color:gray;letter-spacing:2px;margin-top:8px}.tool-call__diff-path{font-family:var(--s2-font-mono);font-size:var(--s2-font-size-75);color:var(--s2-content-secondary);padding:4px 0}.tool-call__diff{font-family:var(--s2-font-mono);font-size:var(--s2-font-size-75);white-space:pre-wrap;word-break:break-word;background:0 0;max-height:320px;margin:0;padding:0;line-height:1.55;overflow:hidden auto}.tool-call__diff-del,.tool-call__diff-add{white-space:pre-wrap;word-break:break-word;border-radius:2px;padding:1px 6px;display:block}.tool-call__diff-del{background:color-mix(in oklch, var(--s2-negative) 15%, transparent);color:var(--s2-negative)}.tool-call__diff-add{background:color-mix(in oklch, var(--s2-positive) 18%, transparent);color:var(--s2-positive)}.tool-call__screenshot{border-radius:var(--s2-radius-default);max-width:100%;max-height:200px;margin-top:var(--s2-spacing-50);cursor:pointer;border:1px solid var(--s2-border-subtle);transition:border-color var(--s2-transition-default)}.tool-call__screenshot:hover{border-color:var(--slicc-cone)}.tool-call__ui{margin-top:8px}.lick{width:100%;max-width:560px;font-size:var(--s2-font-size-75);align-self:flex-end;padding:0}.lick summary{cursor:pointer;background:var(--s2-bg-layer-1);color:var(--s2-content-secondary);border:1px solid var(--s2-border-subtle);transition:background var(--s2-transition-default);border-radius:10px;flex-direction:row;align-items:center;gap:8px;padding:8px 12px;list-style:none;display:flex}.lick summary:hover{background:var(--s2-bg-layer-2)}.lick summary::-webkit-details-marker{display:none}.lick__header{cursor:pointer;justify-content:flex-start;align-items:center;gap:8px;width:100%;display:flex}.lick__type{color:var(--s2-content-secondary);font-weight:500;font-size:var(--s2-font-size-75);flex-shrink:0}.lick__preview{color:var(--s2-content-tertiary);font-size:var(--s2-font-size-75);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-family:var(--s2-font-mono);flex:1;overflow:hidden}.lick__icon{width:16px;height:16px;color:var(--s2-content-secondary);flex-shrink:0;order:99;justify-content:center;align-items:center;margin-left:auto;display:inline-flex}.lick__icon svg{width:14px;height:14px;display:block}.lick__details{border-radius:var(--s2-radius-s);background:var(--s2-bg-sunken);color:var(--s2-content-secondary);font-size:var(--s2-font-size-75);word-break:break-word;margin-top:6px;padding:12px 14px;line-height:1.55}.lick__details>:first-child{margin-top:0}.lick__details>:last-child{margin-bottom:0}.lick__details p,.lick__details ul,.lick__details ol{margin:.5em 0}.lick__details ul,.lick__details ol{padding-left:1.4em}.lick__details pre{font-size:var(--s2-font-size-75);font-family:var(--s2-font-mono);white-space:pre;background:0 0;border:0;max-height:320px;margin:0;padding:0;overflow:auto}.msg__content p,.msg__content ul,.msg__content ol,.msg__content table,.msg__content blockquote{margin:.45em 0}.msg__content h1,.msg__content h2,.msg__content h3,.msg__content h4,.msg__content h5,.msg__content h6{margin:1.2em 0 .35em;font-weight:700}.msg__content>:first-child{margin-top:0}.msg__content>:last-child{margin-bottom:0}.msg__content h1{font-size:22px}.msg__content h2{font-size:var(--s2-font-size-300)}.msg__content h3{font-size:var(--s2-font-size-200)}.msg__content ul,.msg__content ol{padding-left:1.4em}.msg__content table{border-collapse:collapse;font-size:var(--s2-font-size-75)}.msg__content th,.msg__content td{border:1px solid var(--s2-border-subtle);padding:var(--s2-spacing-50) var(--s2-spacing-200);text-align:left}.msg__content th{background:var(--s2-bg-layer-2);font-weight:700}.msg__content blockquote{border-left:3px solid var(--slicc-cone);padding-left:var(--s2-spacing-200);color:var(--s2-content-secondary)}.msg__content a{color:#82aaff;text-decoration:none}.msg__content a:hover{color:#a0c4ff;text-decoration:underline}.msg__content a:visited{color:#82aaff}.msg pre{background:var(--s2-bg-sunken);padding:var(--s2-spacing-200);border-radius:var(--s2-radius-default);margin:var(--s2-spacing-100) 0;font-size:12px;font-family:var(--s2-font-mono);white-space:pre-wrap;border:1px solid var(--s2-border-subtle);overflow-x:auto}.msg code{font-family:var(--s2-font-mono);font-size:12px}.msg :not(pre)>code{background:var(--s2-gray-200);border-radius:var(--s2-radius-s);padding:2px 6px;font-size:.9em}.tok-keyword{color:#d19afc}.tok-string{color:#87d68d}.tok-number{color:#f5a76c}.tok-comment{color:var(--s2-gray-500);font-style:italic}.tok-punct{color:#7cc5e9}.tok-fn{color:#7ea8f8}.panel-header{padding:var(--s2-spacing-100) var(--s2-spacing-300);background:var(--s2-bg-layer-1);border-bottom:1px solid var(--s2-border-subtle);font-size:var(--s2-font-size-50);color:var(--s2-content-tertiary);letter-spacing:.05em;text-transform:uppercase;flex-shrink:0;align-items:center;font-weight:700;display:flex}.terminal-panel{background:var(--s2-bg-layer-1);flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.terminal-panel__view{background:var(--s2-bg-sunken);flex-direction:column;flex:1;min-height:0;padding-bottom:5px;display:flex;overflow:hidden}.terminal-panel__mount{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.terminal-panel__terminal-host{flex:1;min-height:0;padding:8px;overflow:hidden}.terminal-panel__terminal-host .xterm{padding:0}.terminal-panel__terminal-host .xterm-viewport{background-color:var(--s2-bg-sunken)!important}.terminal-panel__terminal-host .xterm-viewport::-webkit-scrollbar{width:6px}.terminal-panel__terminal-host .xterm-viewport::-webkit-scrollbar-thumb{background:var(--s2-gray-300);border-radius:3px}.terminal-panel__preview{min-height:0;padding:var(--s2-spacing-200);background:var(--s2-bg-sunken);flex:1;display:none;overflow:auto}.terminal-panel__preview.terminal-panel__preview--visible{flex-direction:column;display:flex}.terminal-panel__preview-item{gap:var(--s2-spacing-100);flex-direction:column;display:flex}.terminal-panel__preview-item+.terminal-panel__preview-item{margin-top:var(--s2-spacing-200)}.terminal-panel__preview-label{color:var(--s2-content-tertiary);font-size:var(--s2-font-size-50);font-family:var(--s2-font-mono)}.terminal-panel__preview-media{object-fit:contain;border-radius:var(--s2-radius-default);background:var(--s2-bg-sunken);border:1px solid var(--s2-border-subtle);width:100%;max-width:100%;max-height:min(100%,520px);display:block}.terminal-panel__empty-state{min-height:0;padding:var(--s2-spacing-400);color:var(--s2-content-disabled);font-size:var(--s2-font-size-75);flex:1;justify-content:center;align-items:center;display:flex}.file-browser__header{height:32px;min-height:32px;padding:0 var(--s2-spacing-200);border-bottom:1px solid var(--s2-border-subtle);align-items:center;gap:var(--s2-spacing-100);flex-shrink:0;display:flex}.file-browser__header-title{font-size:var(--s2-font-size-50);color:var(--s2-content-tertiary);letter-spacing:.05em;text-transform:uppercase;flex:1;font-weight:700}.file-browser__header-btn{color:var(--s2-content-tertiary);cursor:pointer;border-radius:var(--s2-radius-s);width:24px;height:24px;transition:background var(--s2-transition-default), color var(--s2-transition-default);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex}.file-browser__header-btn:hover{background:var(--s2-gray-200);color:var(--s2-content-default)}.file-browser__header-btn svg{width:14px;height:14px}.file-browser__header-btn--active{color:var(--s2-content-default);background:var(--s2-gray-300)}.file-browser__header-btn--active:hover{background:var(--s2-gray-300)}.file-browser__header-btn:disabled{color:var(--s2-content-disabled);cursor:default}.file-browser__header-btn:disabled:hover{color:var(--s2-content-disabled);background:0 0}.file-browser{flex-direction:column;flex:1;min-height:0;display:flex}.file-browser__body{min-height:0;padding:var(--s2-spacing-50) 0;font-family:var(--s2-font-mono);font-size:var(--s2-font-size-75);flex:1;overflow-y:auto}.file-browser__item{align-items:center;gap:var(--s2-spacing-50);padding:3px var(--s2-spacing-100);color:var(--s2-content-default);white-space:nowrap;text-overflow:ellipsis;border-radius:var(--s2-radius-s);margin:0 var(--s2-spacing-50);transition:background var(--s2-transition-default);display:flex;overflow:hidden}.file-browser__item:hover{background:var(--s2-bg-elevated)}.file-browser__item--selected{background:var(--s2-bg-elevated);box-shadow:inset 2px 0 0 var(--s2-accent)}.file-browser__item--selected:hover{background:var(--s2-bg-elevated)}.file-browser__item--selected.file-browser__item--copy-flash{background:color-mix(in srgb, var(--s2-positive) 20%, transparent)}.file-browser__arrow{width:12px;color:var(--s2-content-tertiary);flex-shrink:0;justify-content:center;align-items:center;display:flex}.file-browser__icon{color:var(--s2-content-tertiary);flex-shrink:0;align-items:center;display:flex}.file-browser__name{text-overflow:ellipsis;overflow:hidden}.file-browser__size{color:var(--s2-content-tertiary);font-size:var(--s2-font-size-50);padding-left:var(--s2-spacing-100);flex-shrink:0;margin-left:auto}.file-browser__action-btn{color:var(--s2-content-tertiary);cursor:pointer;padding:2px var(--s2-spacing-75);border-radius:var(--s2-radius-pill);font-size:9px;line-height:1.2;font-family:var(--s2-font-mono);letter-spacing:.05em;transition:all var(--s2-transition-default);opacity:0;background:0 0;border:none;flex-shrink:0;font-weight:600}.file-browser__item:hover .file-browser__action-btn{opacity:1}.file-browser__action-btn:hover{background:var(--s2-accent);color:#fff}.file-browser__action-btn:active{transform:scale(.92)}.file-browser__action-btn:disabled{opacity:0;cursor:not-allowed}.memory-panel{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.memory-panel__body{min-height:0;padding:var(--s2-spacing-100);font-family:var(--s2-font-mono);font-size:var(--s2-font-size-75);flex:1;height:100%;overflow-y:auto}.memory-panel__section{margin-bottom:var(--s2-spacing-300)}.memory-panel__section-header{font-weight:700;font-family:var(--s2-font-family);color:var(--slicc-cone);margin-bottom:var(--s2-spacing-100);padding-bottom:var(--s2-spacing-50);border-bottom:1px solid var(--s2-border-subtle);font-size:var(--s2-font-size-75)}.memory-panel__memory-content{white-space:pre-wrap;color:var(--s2-content-default);background:var(--s2-bg-sunken);padding:var(--s2-spacing-100);border-radius:var(--s2-radius-default);line-height:1.5}.mini-tabs{gap:var(--s2-spacing-100);padding:var(--s2-spacing-200) var(--s2-spacing-300);flex-shrink:0;align-items:center;display:flex;overflow:hidden}.mini-tabs__scroll{gap:var(--s2-spacing-100);scrollbar-width:none;flex:1;align-items:center;min-width:0;display:flex;overflow-x:auto}.mini-tabs__scroll::-webkit-scrollbar{display:none}.mini-tabs__tab{padding:7px var(--s2-spacing-300);background:var(--s2-gray-100);color:var(--s2-content-default);font-size:14px;font-weight:500;font-family:var(--s2-font-family);letter-spacing:0;cursor:pointer;white-space:nowrap;border-radius:var(--s2-radius-default);transition:color var(--s2-transition-default), background var(--s2-transition-default), border-color var(--s2-transition-default);align-items:center;gap:var(--s2-spacing-75);border:1px solid #0000;flex:none;height:32px;line-height:18px;display:inline-flex;position:relative}.mini-tabs__tab:after{display:none}.mini-tabs__tab:hover{color:var(--s2-content-default);background:var(--s2-gray-300);border-color:#0000}.mini-tabs__tab--active{color:var(--s2-gray-25);background:var(--s2-gray-800);border-color:var(--s2-gray-800)}.mini-tabs__tab--active:hover{background:var(--s2-gray-800);border-color:var(--s2-gray-800);color:var(--s2-gray-25)}.mini-tabs__tab-badge{background:color-mix(in srgb, var(--s2-accent) 20%, #fff);min-width:18px;height:18px;color:var(--s2-accent);border-radius:999px;justify-content:center;align-items:center;padding:0 6px;font-size:11px;font-weight:700;line-height:1;display:inline-flex}.mini-tabs__tab--active .mini-tabs__tab-badge{background:color-mix(in srgb, var(--s2-gray-25) 18%, transparent);color:var(--s2-gray-25)}.mini-tabs__tab:focus-visible{outline:2px solid var(--s2-accent);outline-offset:2px;border-radius:var(--s2-radius-default)}.mini-tabs__tab:disabled{color:var(--s2-content-disabled);cursor:not-allowed}.mini-tabs__tab--add{color:var(--s2-content-tertiary);background:0 0;border-color:#0000;font-size:16px}.mini-tabs__tab--add:hover{border-color:var(--s2-gray-200);background:var(--s2-gray-75);color:var(--s2-content-default)}.mini-tabs__tab--icon{width:32px;height:32px;color:var(--s2-content-default);background:0 0;border-color:#0000;justify-content:center;padding:0}.mini-tabs__tab--icon svg{flex-shrink:0;width:16px;height:16px}.mini-tabs__tab--icon:hover{background:var(--s2-gray-200);border-color:#0000}.mini-tabs__tab--icon.mini-tabs__tab--active,.mini-tabs__tab--icon.mini-tabs__tab--active:hover{background:var(--s2-gray-800);color:var(--s2-gray-25)}.mini-tabs__tab--dimmed{opacity:.3}.mini-tabs__tab--dimmed:hover{opacity:.65}.mini-tabs__separator{background:var(--s2-border-subtle);width:1px;height:20px;margin:0 var(--s2-spacing-75);flex-shrink:0}.mini-tabs__tab--fullpage{color:var(--s2-content-tertiary);background:0 0;border-color:#0000;justify-content:center;width:32px;margin-left:auto;padding:0}.mini-tabs__tab--fullpage:hover{background:var(--s2-gray-75);color:var(--s2-content-default)}.mini-tabs__tab--fullpage svg{flex-shrink:0}.tab-bar{background:var(--s2-bg-layer-1);border-bottom:1px solid var(--s2-border-subtle);flex-shrink:0;display:flex}.tab-bar__tab{padding:var(--s2-spacing-100) 0;color:var(--s2-content-tertiary);font-size:var(--s2-font-size-75);font-weight:600;font-family:var(--s2-font-family);cursor:pointer;text-align:center;transition:color var(--s2-transition-default), border-color var(--s2-transition-default);letter-spacing:.02em;background:0 0;border:none;border-bottom:2px solid #0000;flex:1;justify-content:center;align-items:center;gap:6px;display:flex}.tab-bar__tab-badge{background:color-mix(in srgb, var(--s2-accent) 18%, transparent);min-width:18px;height:18px;color:var(--s2-accent);border-radius:999px;justify-content:center;align-items:center;padding:0 6px;font-size:11px;font-weight:700;line-height:1;display:inline-flex}.tab-bar__tab:hover{color:var(--s2-content-default)}.tab-bar__tab-close{border-radius:var(--s2-radius-s);width:16px;height:16px;color:var(--s2-content-tertiary);opacity:.6;justify-content:center;align-items:center;margin-left:6px;font-size:11px;line-height:1;display:inline-flex}.tab-bar__tab-close:hover{opacity:1;color:var(--s2-negative);background:color-mix(in srgb, var(--s2-negative) 10%, transparent)}.tab-bar__tab--active{color:var(--s2-content-default);border-bottom-color:var(--s2-accent)}.tab-bar__tab--active .tab-bar__tab-badge{background:color-mix(in srgb, var(--s2-accent) 22%, transparent);color:var(--s2-content-default)}.tab-content{flex-direction:column;flex:1;min-height:0;display:flex}.tab-content__panel{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.mini-tabs__tab--utility{color:var(--s2-content-tertiary);background:0 0;border-color:#0000;flex:none;justify-content:center;width:28px;height:28px;padding:0}.mini-tabs__tab--utility:hover{background:var(--s2-gray-200);color:var(--s2-content-default);border-color:#0000}.mini-tabs__tab--utility svg{flex-shrink:0;width:14px;height:14px}.mini-tabs__tab-close{border-radius:var(--s2-radius-s);width:16px;height:16px;color:var(--s2-content-tertiary);justify-content:center;align-items:center;margin-left:6px;font-size:12px;line-height:1;display:inline-flex}.mini-tabs__tab-close:hover{color:var(--s2-negative);background:color-mix(in srgb, var(--s2-negative) 10%, transparent)}.rail{background:var(--s2-bg-layer-1);border-left:1px solid var(--s2-border-subtle);width:48px;padding:var(--s2-spacing-200) var(--s2-spacing-100);gap:var(--s2-spacing-100);flex-direction:column;flex-shrink:0;display:flex}.rail__section{gap:var(--s2-spacing-100);flex-direction:column;align-items:center;display:flex}.rail__section--top{flex:1;min-height:0;overflow:hidden}.rail__section--bottom{flex:none}.rail__section--header{height:var(--uxc-thread-header-height);border-bottom:1px solid var(--s2-border-subtle);margin-bottom:var(--s2-spacing-100);flex:none;justify-content:center;align-items:center;display:flex}.rail__section--header .header__avatar{margin:0 auto}.rail:has(.rail__section--header){padding-top:0}.rail__item{width:32px;height:32px;color:var(--s2-content-default);border-radius:var(--s2-radius-default);cursor:pointer;transition:background var(--s2-transition-default), color var(--s2-transition-default), border-color var(--s2-transition-default);background:0 0;border:1px solid #0000;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:inline-flex;position:relative}.rail__item svg{z-index:1;flex-shrink:0;width:16px;height:16px;position:relative}.rail__item-press-layer{border-radius:inherit;pointer-events:none;z-index:0;position:absolute;inset:0;overflow:hidden}.rail__item-press{background:var(--s2-accent);opacity:.85;pointer-events:none;will-change:width, height;border-radius:50%;transition-property:width,height;transition-timing-function:cubic-bezier(.4,0,.2,1);position:absolute;transform:translate(-50%,-50%)}.rail__item--active .rail__item-press{background:var(--s2-accent);opacity:1}.rail__item:hover{background:var(--s2-gray-200)}.rail__item--active,.rail__item--active:hover{background:var(--s2-gray-800);color:var(--s2-gray-25)}.rail__item--active img{filter:brightness(0)}:root.theme-light .rail__item--active img{filter:brightness(0)invert()}.rail__item:focus-visible{outline:2px solid var(--s2-accent);outline-offset:2px}.rail__item--add{color:var(--s2-content-tertiary)}.rail__item--add:hover{color:var(--s2-content-default);background:var(--s2-gray-75)}.rail__item--attention{color:var(--s2-accent);animation:1.6s ease-in-out infinite rail-item-attention}.rail__item--attention:hover{background:var(--s2-gray-200);animation:none}.rail__item--attention:after{content:"";background:var(--s2-accent);width:6px;height:6px;box-shadow:0 0 0 2px var(--s2-bg-layer-1);pointer-events:none;z-index:2;border-radius:50%;position:absolute;top:4px;right:4px}@keyframes rail-item-attention{0%,to{opacity:1;transform:scale(1)}50%{opacity:.85;transform:scale(1.06)}}.rail-content{border-left:1px solid var(--s2-border-subtle);background:var(--s2-bg-base);flex-direction:column;flex:none;width:360px;min-width:280px;max-width:50vw;display:flex;overflow:hidden}.rail-content--collapsed{display:none!important}.layout:has(.rail-content--collapsed) .layout__divider--vertical,.layout--rail-fullpage .layout__left,.layout--rail-fullpage .layout__divider--vertical,.layout--rail-fullpage .layout__scoops{display:none}.layout--rail-fullpage .rail-content{flex:1;width:auto;max-width:none}.dialog-overlay{z-index:100;backdrop-filter:blur(4px);background:#0000008c;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.dialog{background:var(--s2-bg-layer-2);border-radius:var(--s2-radius-xl);padding:var(--s2-spacing-500);width:440px;max-width:90vw;box-shadow:var(--s2-shadow-elevated);border:1px solid var(--s2-border-subtle)}.dialog__title{font-size:var(--s2-font-size-300);color:var(--s2-content-default);margin-bottom:var(--s2-spacing-100);font-weight:700}.dialog__desc{font-size:var(--s2-font-size-75);color:var(--s2-content-secondary);margin-bottom:var(--s2-spacing-300);line-height:1.5}.dialog__input{width:100%;padding:var(--s2-spacing-100) var(--s2-spacing-200);border-radius:var(--s2-radius-default);border:1px solid var(--s2-border-default);background:var(--s2-bg-sunken);color:var(--s2-content-default);font-family:var(--s2-font-mono);font-size:var(--s2-font-size-100);margin-bottom:var(--s2-spacing-300);transition:border-color var(--s2-transition-default);outline:none}.dialog__input:focus{border-color:var(--s2-accent)}.dialog__btn{border-radius:var(--s2-radius-pill);background:var(--s2-accent);color:#fff;width:100%;font-size:var(--s2-font-size-100);font-weight:600;font-family:var(--s2-font-family);cursor:pointer;transition:background var(--s2-transition-default), transform var(--s2-transition-default);border:none;padding:10px}.dialog__btn:hover{background:var(--s2-accent-hover)}.dialog__btn:active{transform:scale(.98)}.dialog__btn:disabled{opacity:.4;cursor:not-allowed}.dialog__btn--secondary{border:1px solid var(--s2-border-default);color:var(--s2-content-default);background:0 0}.dialog__btn--secondary:hover{background:var(--s2-gray-200)}.sprinkle-content{padding:var(--s2-spacing-200)}.sprinkle-heading{font-size:var(--s2-font-size-300);color:var(--s2-gray-900);margin:0 0 var(--s2-spacing-100);letter-spacing:0;font-weight:700;line-height:1.3}.sprinkle-heading--m{font-size:var(--s2-font-size-200)}.sprinkle-heading--s{font-size:var(--s2-font-size-100)}.sprinkle-label{font-size:var(--s2-font-size-50);text-transform:uppercase;letter-spacing:.06em;color:var(--s2-gray-600);margin:0;font-weight:600;line-height:1.3}.sprinkle-body{font-size:var(--s2-font-size-100);color:var(--s2-content-default);font-weight:400;line-height:1.5}.sprinkle-detail{font-size:var(--s2-font-size-75);color:var(--s2-gray-600);font-weight:500;line-height:1.3}.sprinkle-icon{stroke-width:2px;vertical-align:middle;width:16px;height:16px;display:inline-block}.sprinkle-icon svg{width:100%;height:100%;display:block}.sprinkle-icon--xs{width:12px;height:12px}.sprinkle-icon--s{width:14px;height:14px}.sprinkle-icon--m{width:16px;height:16px}.sprinkle-icon--l{width:20px;height:20px}.sprinkle-icon--xl{width:24px;height:24px}.sprinkle-btn{justify-content:center;align-items:center;gap:var(--s2-spacing-75);border:1px solid var(--s2-gray-200);border-radius:var(--s2-radius-xl);background:var(--s2-gray-50);height:32px;color:var(--s2-gray-800);font-size:var(--s2-font-size-100);font-weight:700;font-family:var(--s2-font-family);cursor:default;box-shadow:var(--s2-shadow-container);transition:background var(--s2-transition-default), border-color var(--s2-transition-default), transform var(--s2-transition-default);padding:0 16px;display:inline-flex}.sprinkle-btn:hover{background:var(--s2-gray-100)}.sprinkle-btn:active{transform:scale(.98)}.sprinkle-btn:focus-visible{outline:2px solid var(--s2-border-focus);outline-offset:2px}.sprinkle-btn:disabled,.sprinkle-btn[disabled]{opacity:.4;pointer-events:none}.sprinkle-btn--primary{background:var(--s2-accent);color:#fff;border-radius:var(--s2-radius-pill);box-shadow:none;border-color:#0000}.sprinkle-btn--primary:hover{background:var(--s2-accent-hover)}.sprinkle-btn--primary:active{background:var(--s2-accent-down);transform:scale(.98)}.sprinkle-btn--secondary{background:var(--s2-gray-50);border-color:var(--s2-gray-200);color:var(--s2-gray-800)}.sprinkle-btn--secondary:hover{background:var(--s2-gray-100)}.sprinkle-btn--negative{background:var(--s2-negative);color:var(--s2-gray-25);border-radius:var(--s2-radius-pill);box-shadow:none;border-color:#0000}.sprinkle-btn--negative:hover{background:color-mix(in srgb, var(--s2-negative) 85%, #000)}.sprinkle-btn--quiet{box-shadow:none;color:var(--s2-gray-800);background:0 0;border-color:#0000}.sprinkle-btn--quiet:hover{background:var(--s2-gray-100)}.sprinkle-btn-group{gap:var(--s2-spacing-100);display:inline-flex}.sprinkle-badge{white-space:nowrap;background:var(--s2-gray-800);color:var(--s2-gray-25);border-radius:8px;align-items:center;gap:4px;padding:4px 8px;font-size:12px;font-weight:700;line-height:16px;display:inline-flex}.sprinkle-badge--positive{background:var(--s2-positive);color:var(--s2-gray-25)}.sprinkle-badge--negative{background:var(--s2-negative);color:var(--s2-gray-25)}.sprinkle-badge--notice{background:var(--s2-notice);color:var(--s2-gray-25)}.sprinkle-badge--informative{background:var(--s2-informative);color:#fff}.sprinkle-badge--accent{background:var(--s2-accent);color:#fff}.sprinkle-badge--subtle{background:var(--uxc-neutral-subtle-bg);color:var(--s2-gray-700)}.sprinkle-badge--subtle.sprinkle-badge--positive{background:var(--uxc-positive-subtle-bg);color:var(--uxc-positive-subtle-text)}.sprinkle-badge--subtle.sprinkle-badge--negative{background:var(--uxc-negative-subtle-bg);color:var(--uxc-negative-subtle-text)}.sprinkle-badge--subtle.sprinkle-badge--notice{background:var(--uxc-notice-subtle-bg);color:var(--uxc-notice-subtle-text)}.sprinkle-badge--subtle.sprinkle-badge--informative,.sprinkle-badge--subtle.sprinkle-badge--accent{background:var(--uxc-accent-subtle-bg);color:var(--uxc-accent-subtle-text)}.sprinkle-badge--yellow{background:var(--uxc-yellow-subtle-bg);color:var(--uxc-yellow-subtle-text)}.sprinkle-badge--purple{background:var(--uxc-purple-subtle-bg);color:var(--uxc-purple-subtle-text)}.sprinkle-badge--cyan{background:var(--uxc-cyan-subtle-bg);color:var(--uxc-cyan-subtle-text)}.sprinkle-badge--magenta{background:var(--uxc-magenta-subtle-bg);color:var(--uxc-magenta-subtle-text)}.sprinkle-badge--indigo{background:var(--uxc-indigo-subtle-bg);color:var(--uxc-indigo-subtle-text)}.sprinkle-badge--gray{background:var(--uxc-gray-subtle-bg);color:var(--uxc-gray-subtle-text)}.sprinkle-badge--outline{color:var(--s2-content-secondary);box-shadow:inset 0 0 0 1px var(--s2-border-default);background:0 0}.sprinkle-badge--outline.sprinkle-badge--positive{color:var(--s2-positive);box-shadow:inset 0 0 0 1px var(--s2-positive)}.sprinkle-badge--outline.sprinkle-badge--negative{color:var(--s2-negative);box-shadow:inset 0 0 0 1px var(--s2-negative)}.sprinkle-badge--outline.sprinkle-badge--notice{color:var(--s2-notice);box-shadow:inset 0 0 0 1px var(--s2-notice)}.sprinkle-badge--outline.sprinkle-badge--informative{color:var(--s2-informative);box-shadow:inset 0 0 0 1px var(--s2-informative)}.sprinkle-chip{border:1px solid var(--s2-gray-200);border-radius:var(--s2-radius-pill);font-size:var(--s2-font-size-75);color:var(--s2-gray-800);cursor:default;transition:background var(--s2-transition-default);background:#fff;align-items:center;gap:6px;padding:6px 12px;font-weight:500;display:inline-flex}.sprinkle-chip:hover{background:var(--s2-gray-50)}.sprinkle-chip svg{flex-shrink:0;width:14px;height:14px}.sprinkle-status-light{align-items:center;gap:var(--s2-spacing-75);font-size:var(--s2-font-size-75);color:var(--s2-content-default);display:inline-flex}.sprinkle-status-light:before{content:"";background:var(--s2-content-tertiary);border-radius:50%;flex-shrink:0;width:8px;height:8px}.sprinkle-status-light--positive:before{background:var(--s2-positive)}.sprinkle-status-light--negative:before{background:var(--s2-negative)}.sprinkle-status-light--notice:before{background:var(--s2-notice)}.sprinkle-status-light--informative:before{background:var(--s2-informative)}.sprinkle-status-light--m{font-size:var(--s2-font-size-100);color:var(--s2-gray-600)}.sprinkle-status-light--m:before{width:10px;height:10px}.sprinkle-card{background:var(--s2-gray-25);border:1px solid var(--s2-gray-300);border-radius:var(--s2-radius-xl);padding:var(--s2-spacing-400);box-shadow:var(--s2-shadow-container);transition:box-shadow var(--s2-transition-default)}.sprinkle-card:hover{box-shadow:var(--s2-shadow-elevated)}.sprinkle-stat-card{background:var(--s2-gray-25);border:1px solid var(--s2-gray-300);border-radius:var(--s2-radius-xl);padding:var(--s2-spacing-200) var(--s2-spacing-300);text-align:center;box-shadow:var(--s2-shadow-container);transition:box-shadow var(--s2-transition-default)}.sprinkle-stat-card:hover{box-shadow:var(--s2-shadow-elevated)}.sprinkle-stat-card .value{font-size:var(--s2-font-size-500);color:var(--s2-content-default);font-weight:700;line-height:1.2}.sprinkle-stat-card .label{font-size:var(--s2-font-size-75);color:var(--s2-gray-600);margin-top:var(--s2-spacing-50);font-weight:500}.sprinkle-action-card{background:var(--s2-gray-25);border:1px solid var(--s2-gray-200);border-radius:var(--s2-radius-xl);box-shadow:var(--s2-shadow-container);flex-direction:column;display:flex;overflow:hidden}.sprinkle-action-card__header{color:var(--s2-gray-900);align-items:center;gap:12px;padding:16px 24px;font-size:16px;font-weight:700;line-height:1.3;display:flex}.sprinkle-action-card__header .sprinkle-badge{margin-left:auto}.sprinkle-action-card__icon{border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;width:40px;min-width:40px;height:40px;font-size:18px;display:flex}.sprinkle-action-card__icon--yellow{color:#9e6600;background:#fff197}.sprinkle-action-card__icon--blue{background:var(--uxc-accent-subtle-bg);color:var(--uxc-accent-subtle-text)}.sprinkle-action-card__icon--green{background:var(--uxc-positive-subtle-bg);color:var(--uxc-positive-subtle-text)}.sprinkle-action-card__icon--indigo{background:var(--uxc-indigo-subtle-bg);color:#5424db}.sprinkle-action-card__meta{color:var(--s2-gray-600);margin-top:2px;font-size:12px;font-weight:400}.sprinkle-action-card__header-actions{color:var(--s2-gray-800);align-items:center;gap:12px;margin-left:auto;font-size:12px;font-weight:500;display:flex}.sprinkle-action-card__header-actions a{color:var(--s2-gray-800);align-items:center;gap:4px;text-decoration:none;display:flex}.sprinkle-action-card__body{color:var(--s2-gray-700);padding:0 24px 16px;font-size:14px;line-height:1.5}.sprinkle-action-card__actions{border-top:1px solid var(--s2-gray-200);justify-content:flex-end;gap:8px;padding:12px 24px;display:flex}.sprinkle-list-item{border-top:1px solid var(--s2-gray-100);align-items:center;gap:16px;min-height:56px;padding:16px 24px;display:flex}.sprinkle-list-item__icon{background:var(--s2-gray-75);border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;width:40px;min-width:40px;height:40px;font-size:16px;display:flex}.sprinkle-list-item__content{flex:1;min-width:0}.sprinkle-list-item__title{color:var(--s2-gray-900);align-items:center;gap:6px;font-size:14px;font-weight:700;line-height:1.3;display:flex}.sprinkle-list-item__subtitle{color:var(--s2-gray-600);margin-top:2px;font-size:14px;font-weight:400;line-height:1.5}.sprinkle-list-item__end{flex-shrink:0;align-items:center;gap:8px;display:flex}.sprinkle-table{border-collapse:collapse;border:1px solid var(--s2-gray-100);border-radius:var(--s2-radius-default);width:100%;font-size:14px;overflow:hidden}.sprinkle-table th{text-align:left;border-bottom:1px solid var(--s2-gray-100);color:var(--s2-gray-700);box-sizing:border-box;background:0 0;height:32px;padding:7px 16px;font-size:14px;font-weight:700;line-height:1.3}.sprinkle-table td{border-bottom:1px solid var(--s2-gray-100);color:var(--s2-content-default);box-sizing:border-box;padding:12px 16px;font-size:14px;line-height:1.5}.sprinkle-table tr:last-child td{border-bottom:none}.sprinkle-table tr:hover td{background:var(--s2-gray-50)}.sprinkle-task-group{background:var(--s2-gray-50);border-radius:var(--s2-radius-default);flex-direction:column;gap:8px;padding:16px;display:flex}.sprinkle-task-group__header{justify-content:space-between;align-items:center;display:flex}.sprinkle-task-group__title{color:var(--s2-gray-1000);align-items:center;gap:8px;font-size:16px;font-weight:700;display:flex}.sprinkle-task-group__title svg{flex-shrink:0;width:20px;height:20px}.sprinkle-task-group__meta{color:var(--s2-gray-600);align-items:center;gap:16px;font-size:12px;display:flex}.sprinkle-task-item{align-items:center;gap:8px;height:24px;padding-left:4px;font-size:14px;line-height:18px;display:flex}.sprinkle-task-item--done{color:var(--s2-gray-600)}.sprinkle-task-item--pending{color:var(--s2-gray-800)}.sprinkle-task-item__check{border:1.5px solid var(--s2-gray-400);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;display:flex}.sprinkle-task-item--done .sprinkle-task-item__check{background:var(--s2-positive);border-color:var(--s2-positive)}.sprinkle-task-item--done .sprinkle-task-item__check:after{content:"";border-bottom:1.5px solid #fff;border-left:1.5px solid #fff;width:8px;height:5px;transform:rotate(-45deg)translateY(-1px)}.sprinkle-progress-bar{gap:var(--s2-spacing-75);--_bar-color:var(--s2-accent);flex-direction:column;display:flex}.sprinkle-progress-bar--positive{--_bar-color:var(--s2-positive)}.sprinkle-progress-bar--negative{--_bar-color:var(--s2-negative)}.sprinkle-progress-bar--notice{--_bar-color:var(--s2-notice)}.sprinkle-progress-bar--informative{--_bar-color:var(--s2-informative)}.sprinkle-progress-bar__header{font-size:var(--s2-font-size-75);color:var(--s2-content-default);justify-content:space-between;align-items:baseline;display:flex}.sprinkle-progress-bar__header .label{font-weight:400}.sprinkle-progress-bar__header .value{color:var(--s2-gray-600);font-weight:400}.sprinkle-progress-bar__track{border-radius:var(--s2-radius-pill);background:var(--s2-gray-200);height:4px;position:relative;overflow:hidden}.sprinkle-progress-bar__track .fill{border-radius:var(--s2-radius-pill);background:var(--fill-color,var(--_bar-color,var(--s2-accent)));height:100%;transition:width .3s}.sprinkle-progress-bar__track:after{content:"";width:var(--progress,var(--value,0%));border-radius:var(--s2-radius-pill);background:var(--fill-color,var(--_bar-color,var(--s2-accent)));transition:width .3s;position:absolute;inset:0 auto 0 0}.sprinkle-progress-bar__track:has(>.fill):after{display:none}.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track)){border-radius:var(--s2-radius-pill);background:var(--s2-gray-200);flex-direction:row;width:100%;height:4px;position:relative;overflow:hidden}.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track))>.fill{border-radius:var(--s2-radius-pill);background:var(--fill-color,var(--_bar-color,var(--s2-accent)));height:100%;transition:width .3s}.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track)):after{content:"";width:var(--progress,var(--value,0%));border-radius:var(--s2-radius-pill);background:var(--fill-color,var(--_bar-color,var(--s2-accent)));transition:width .3s;position:absolute;inset:0 auto 0 0}.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track)):has(>.fill):after{display:none}.sprinkle-meter{gap:var(--s2-spacing-75);--_meter-color:var(--s2-informative);flex-direction:column;display:flex}.sprinkle-meter--positive{--_meter-color:var(--s2-positive)}.sprinkle-meter--notice{--_meter-color:var(--s2-notice)}.sprinkle-meter--negative{--_meter-color:var(--s2-negative)}.sprinkle-meter__header{font-size:var(--s2-font-size-75);color:var(--s2-content-default);justify-content:space-between;align-items:baseline;display:flex}.sprinkle-meter__header .label{font-weight:400}.sprinkle-meter__header .value{color:var(--s2-gray-600);font-weight:400}.sprinkle-meter__track{border-radius:var(--s2-radius-pill);background:var(--s2-gray-200);height:4px;position:relative;overflow:hidden}.sprinkle-meter__track .fill{border-radius:var(--s2-radius-pill);background:var(--fill-color,var(--_meter-color));height:100%;transition:width .3s}.sprinkle-meter__track:after{content:"";width:var(--progress,var(--value,0%));border-radius:var(--s2-radius-pill);background:var(--fill-color,var(--_meter-color));transition:width .3s;position:absolute;inset:0 auto 0 0}.sprinkle-meter__track:has(>.fill):after{display:none}.sprinkle-meter:not(:has(.sprinkle-meter__track)){border-radius:var(--s2-radius-pill);background:var(--s2-gray-200);flex-direction:row;width:100%;height:4px;position:relative;overflow:hidden}.sprinkle-meter:not(:has(.sprinkle-meter__track))>.fill{border-radius:var(--s2-radius-pill);background:var(--fill-color,var(--_meter-color));height:100%;transition:width .3s}.sprinkle-meter:not(:has(.sprinkle-meter__track)):after{content:"";width:var(--progress,var(--value,0%));border-radius:var(--s2-radius-pill);background:var(--fill-color,var(--_meter-color));transition:width .3s;position:absolute;inset:0 auto 0 0}.sprinkle-meter:not(:has(.sprinkle-meter__track)):has(>.fill):after{display:none}.sprinkle-kv-list{margin:0;padding:0;list-style:none}.sprinkle-kv-list li{padding:var(--s2-spacing-100) 0;border-bottom:1px solid var(--s2-border-subtle);font-size:var(--s2-font-size-75);justify-content:space-between;align-items:center;display:flex}.sprinkle-kv-list li:last-child{border-bottom:none}.sprinkle-kv-list .key{color:var(--s2-gray-600);font-weight:400}.sprinkle-kv-list .value{color:var(--s2-content-default);font-weight:700}dl.sprinkle-kv-list{font-size:var(--s2-font-size-75);grid-template-columns:auto 1fr;gap:0;display:grid}dl.sprinkle-kv-list dt,dl.sprinkle-kv-list dd{padding:var(--s2-spacing-100) 0;border-bottom:1px solid var(--s2-border-subtle);margin:0}dl.sprinkle-kv-list dt{color:var(--s2-gray-600);padding-right:var(--s2-spacing-300);font-weight:400}dl.sprinkle-kv-list dd{color:var(--s2-content-default);text-align:right;font-weight:700}dl.sprinkle-kv-list dt:last-of-type,dl.sprinkle-kv-list dd:last-of-type{border-bottom:none}.sprinkle-text-field{width:100%;font-size:var(--s2-font-size-100);font-family:var(--s2-font-family);color:var(--s2-content-default);border:1px solid var(--s2-gray-200);border-radius:var(--s2-radius-default);transition:border-color var(--s2-transition-default);box-sizing:border-box;background:#fff;outline:none;padding:7px 12px}.sprinkle-text-field::placeholder{color:var(--s2-gray-600)}.sprinkle-text-field:hover{border-color:var(--s2-gray-700)}.sprinkle-text-field:focus{border-color:var(--s2-accent);box-shadow:0 0 0 1px var(--s2-accent)}.sprinkle-grid{gap:var(--s2-spacing-200);grid-template-columns:repeat(auto-fit,minmax(180px,1fr));display:grid}.sprinkle-stack{gap:var(--s2-spacing-200);flex-direction:column;display:flex}.sprinkle-row{align-items:center;gap:var(--s2-spacing-200);display:flex}.sprinkle-divider{border:none;border-top:1px solid var(--s2-border-subtle);margin:var(--s2-spacing-200) 0}.sprinkle-divider--medium{border-top-width:2px;border-top-color:var(--s2-border-default);margin:var(--s2-spacing-300) 0}.sprinkle-empty-state{text-align:center;padding:var(--s2-spacing-500) var(--s2-spacing-300);color:var(--s2-content-tertiary);font-size:var(--s2-font-size-100)}.sprinkle-toolbar{align-items:center;gap:var(--s2-spacing-100);padding:var(--s2-spacing-100) var(--s2-spacing-200);border-bottom:1px solid var(--s2-gray-200);background:var(--s2-gray-50);flex-shrink:0;min-height:40px;display:flex}.sprinkle-toolbar__start{align-items:center;gap:var(--s2-spacing-100);display:flex}.sprinkle-toolbar__center{align-items:center;gap:var(--s2-spacing-100);flex:1;justify-content:center;display:flex}.sprinkle-toolbar__end{align-items:center;gap:var(--s2-spacing-100);margin-left:auto;display:flex}.sprinkle-tabs{border-bottom:1px solid var(--s2-gray-200);background:var(--s2-gray-50);flex-shrink:0;gap:0;display:flex;overflow-x:auto}.sprinkle-tabs__tab{padding:var(--s2-spacing-100) var(--s2-spacing-200);font-size:var(--s2-font-size-100);color:var(--s2-gray-600);cursor:default;white-space:nowrap;transition:color var(--s2-transition-default), border-color var(--s2-transition-default);font-weight:500;font-family:var(--s2-font-family);background:0 0;border:none;border-bottom:2px solid #0000}.sprinkle-tabs__tab:hover{color:var(--s2-gray-800)}.sprinkle-tabs__tab--active{color:var(--s2-gray-900);border-bottom-color:var(--s2-gray-900);font-weight:700}.sprinkle-tabs__panel{flex:1;min-height:0;display:none;overflow-y:auto}.sprinkle-tabs__panel--active{flex-direction:column;display:flex}.sprinkle-sidebar{flex:1;gap:0;min-height:0;display:flex}.sprinkle-sidebar__nav{border-right:1px solid var(--s2-gray-200);background:var(--s2-gray-50);width:240px;min-width:240px;padding:var(--s2-spacing-200) 0;overflow-y:auto}.sprinkle-sidebar__nav-item{align-items:center;gap:var(--s2-spacing-100);padding:var(--s2-spacing-100) var(--s2-spacing-200);font-size:var(--s2-font-size-100);color:var(--s2-gray-700);cursor:default;transition:background var(--s2-transition-default);border-radius:0;display:flex}.sprinkle-sidebar__nav-item:hover{background:var(--s2-gray-100)}.sprinkle-sidebar__nav-item--active{background:var(--s2-gray-800);color:var(--s2-gray-25);font-weight:600}.sprinkle-sidebar__nav-label{padding:var(--s2-spacing-200) var(--s2-spacing-200) var(--s2-spacing-50);font-size:var(--s2-font-size-50);text-transform:uppercase;letter-spacing:.04em;color:var(--s2-gray-600);font-weight:700}.sprinkle-sidebar__main{min-width:0;padding:var(--s2-spacing-200);flex:1;overflow-y:auto}.sprinkle-dialog{z-index:100;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.sprinkle-dialog[hidden]{display:none}.sprinkle-dialog__backdrop{backdrop-filter:blur(2px);background:#0006;position:absolute;inset:0}.sprinkle-dialog__content{background:var(--s2-gray-25);border-radius:var(--s2-radius-xl);box-shadow:var(--s2-shadow-elevated);padding:var(--s2-spacing-400);min-width:280px;max-width:min(560px,100% - 32px);max-height:calc(100% - 64px);position:relative;overflow-y:auto}.sprinkle-dialog__header{margin-bottom:var(--s2-spacing-300);justify-content:space-between;align-items:center;display:flex}.sprinkle-dialog__title{font-size:var(--s2-font-size-200);color:var(--s2-content-default);font-weight:700}.sprinkle-dialog__close{border-radius:var(--s2-radius-pill);width:28px;height:28px;color:var(--s2-gray-600);cursor:default;transition:background var(--s2-transition-default);background:0 0;border:none;justify-content:center;align-items:center;font-size:18px;display:flex}.sprinkle-dialog__close:hover{background:var(--s2-gray-100)}.sprinkle-dialog__footer{justify-content:flex-end;gap:var(--s2-spacing-100);margin-top:var(--s2-spacing-300);display:flex}.sprinkle-collapsible__header{align-items:center;gap:var(--s2-spacing-100);padding:var(--s2-spacing-100) var(--s2-spacing-200);cursor:default;font-size:var(--s2-font-size-100);color:var(--s2-content-default);text-align:left;border-radius:var(--s2-radius-default);width:100%;transition:background var(--s2-transition-default);font-weight:600;font-family:var(--s2-font-family);background:0 0;border:none;display:flex}.sprinkle-collapsible__header:hover{background:var(--s2-gray-100)}.sprinkle-collapsible__chevron{flex-shrink:0;width:16px;height:16px;transition:transform .2s;display:inline-block}.sprinkle-collapsible__chevron:before{content:"▶";color:var(--s2-gray-600);font-size:10px}.sprinkle-collapsible--open .sprinkle-collapsible__chevron{transform:rotate(90deg)}.sprinkle-collapsible__body{padding:var(--s2-spacing-100) var(--s2-spacing-200) var(--s2-spacing-200) calc(var(--s2-spacing-200) + 16px + var(--s2-spacing-100));display:none}.sprinkle-collapsible--open .sprinkle-collapsible__body{display:block}.sprinkle-split{flex:1;gap:0;min-height:0;display:flex}.sprinkle-split>*{flex:1;min-width:0;overflow-y:auto}.sprinkle-split>:not(:last-child){border-right:1px solid var(--s2-border-default)}.sprinkle-split--vertical{flex-direction:column}.sprinkle-split--vertical>:not(:last-child){border-right:none;border-bottom:1px solid var(--s2-border-default)}.sprinkle-canvas{border-radius:var(--s2-radius-l);background:var(--s2-bg-layer-1);width:100%;position:relative;overflow:hidden}.sprinkle-canvas--16x9{aspect-ratio:16/9}.sprinkle-canvas--4x3{aspect-ratio:4/3}.sprinkle-canvas--1x1{aspect-ratio:1}.sprinkle-canvas svg,.sprinkle-canvas canvas{width:100%;height:100%;display:block}.sprinkle-density-compact .sprinkle-content{padding:var(--s2-spacing-100)}.sprinkle-density-compact .sprinkle-heading{font-size:var(--s2-font-size-100);margin-bottom:var(--s2-spacing-50)}.sprinkle-density-compact .sprinkle-heading--m{font-size:13px}.sprinkle-density-compact .sprinkle-body{font-size:var(--s2-font-size-75);line-height:1.4}.sprinkle-density-compact .sprinkle-detail{font-size:var(--s2-font-size-50)}.sprinkle-density-compact .sprinkle-table th{font-size:var(--s2-font-size-50);height:28px;padding:5px 12px}.sprinkle-density-compact .sprinkle-table td{font-size:var(--s2-font-size-75);padding:6px 12px}.sprinkle-density-compact .sprinkle-btn{height:26px;font-size:var(--s2-font-size-75);padding:0 10px}.sprinkle-density-compact .sprinkle-badge{padding:2px 6px;font-size:10px}.sprinkle-density-compact .sprinkle-card{padding:var(--s2-spacing-200)}.sprinkle-density-compact .sprinkle-list-item{gap:10px;min-height:40px;padding:8px 16px}.sprinkle-density-compact .sprinkle-list-item__icon{width:28px;min-width:28px;height:28px;font-size:13px}.sprinkle-density-compact .sprinkle-list-item__title{font-size:var(--s2-font-size-75)}.sprinkle-density-compact .sprinkle-list-item__subtitle{font-size:11px}.sprinkle-density-compact .sprinkle-sidebar__nav-item{padding:6px var(--s2-spacing-200);font-size:var(--s2-font-size-75)}.sprinkle-density-compact .sprinkle-text-field{height:28px;font-size:var(--s2-font-size-75);padding:4px 8px}.sprinkle-density-compact .sprinkle-tabs__tab{padding:6px var(--s2-spacing-200);font-size:var(--s2-font-size-75)}.sprinkle-density-compact .sprinkle-kv-list li{font-size:var(--s2-font-size-50);padding:6px 0}.sprinkle-density-compact .sprinkle-chip{padding:3px 8px;font-size:11px}.sprinkle-density-spacious .sprinkle-content{padding:var(--s2-spacing-400)}.sprinkle-density-spacious .sprinkle-heading{font-size:var(--s2-font-size-500);margin-bottom:var(--s2-spacing-200)}.sprinkle-density-spacious .sprinkle-heading--m{font-size:var(--s2-font-size-300)}.sprinkle-density-spacious .sprinkle-body{font-size:15px;line-height:1.65}.sprinkle-density-spacious .sprinkle-card{padding:var(--s2-spacing-500)}.sprinkle-density-spacious .sprinkle-btn{height:36px;padding:0 20px}.sprinkle-density-spacious .sprinkle-action-card__body{padding:0 32px 24px;font-size:15px}.sprinkle-panel{container-type:inline-size}@container (width<=400px){.sprinkle-sidebar{flex-direction:column}.sprinkle-sidebar__nav{border-right:none;border-bottom:1px solid var(--s2-border-default);width:100%;min-width:0;max-height:200px}.sprinkle-grid{grid-template-columns:1fr}.sprinkle-split:not(.sprinkle-split--vertical){flex-direction:column}.sprinkle-split:not(.sprinkle-split--vertical)>:not(:last-child){border-right:none;border-bottom:1px solid var(--s2-border-default)}.sprinkle-toolbar{flex-wrap:wrap}}@container (width>=600px){.sprinkle-sidebar__nav{width:240px;min-width:240px}.sprinkle-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}}.skill-drop-overlay{backdrop-filter:blur(3px);opacity:0;pointer-events:none;transition:opacity var(--s2-transition-default);z-index:180;background:#00000061;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.skill-drop-overlay--visible{opacity:1}.skill-drop-overlay__card{min-width:min(420px,100vw - 32px);max-width:calc(100vw - 32px);padding:var(--s2-spacing-400);border-radius:var(--s2-radius-xl);background:color-mix(in srgb, var(--s2-bg-layer-2) 92%, transparent);border:1px dashed var(--s2-accent);box-shadow:var(--s2-shadow-elevated);text-align:center}.skill-drop-overlay__title{font-size:var(--s2-font-size-300);color:var(--s2-content-default);font-weight:700}.skill-drop-overlay__desc{margin-top:var(--s2-spacing-75);color:var(--s2-content-secondary);font-size:var(--s2-font-size-75);font-family:var(--s2-font-mono);word-break:break-word}.skill-drop-toast-container{top:calc(var(--s2-header-height) + var(--s2-spacing-200));right:var(--s2-spacing-200);gap:var(--s2-spacing-100);z-index:190;pointer-events:none;flex-direction:column;display:flex;position:fixed}.skill-drop-toast{max-width:min(420px,100vw - 32px);padding:var(--s2-spacing-200) var(--s2-spacing-300);border-radius:var(--s2-radius-default);background:var(--s2-bg-layer-2);color:var(--s2-content-default);border:1px solid var(--s2-border-subtle);box-shadow:var(--s2-shadow-elevated);font-size:var(--s2-font-size-75);opacity:0;line-height:1.45;transition:opacity .16s,transform .16s;transform:translateY(-8px)}.skill-drop-toast--visible{opacity:1;transform:translateY(0)}.skill-drop-toast--success{border-color:color-mix(in srgb, var(--s2-positive) 55%, var(--s2-border-subtle))}.skill-drop-toast--error{border-color:color-mix(in srgb, var(--s2-negative) 65%, var(--s2-border-subtle))}