furifont 0.1.2 → 0.2.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.
- package/dist/cli.mjs +1 -1
- package/dist/client/200.html +1 -1
- package/dist/client/404.html +1 -1
- package/dist/client/_nuxt/5JUjClMv.js +3 -0
- package/dist/client/_nuxt/B8uEzYfq.js +1 -0
- package/dist/client/_nuxt/BGvM1Idk.js +2 -0
- package/dist/client/_nuxt/BI2Q9Enf.js +1 -0
- package/dist/client/_nuxt/{DA1XwGcq.js → Bo7DzF0m.js} +1 -1
- package/dist/client/_nuxt/CkUAspOr.js +3 -0
- package/dist/client/_nuxt/Ckc75SSp.js +1 -0
- package/dist/client/_nuxt/D4ezFGbh.js +2 -0
- package/dist/client/_nuxt/{CQTZHv-y.js → D8T7CxEJ.js} +1 -1
- package/dist/client/_nuxt/{Bs3Pv9Qv.js → DBjETv8r.js} +1 -1
- package/dist/client/_nuxt/IB1Ryazr.js +3 -0
- package/dist/client/_nuxt/IYM3Ipyg.js +1 -0
- package/dist/client/_nuxt/{C4NVi0HP.js → OTZjk4e0.js} +2 -2
- package/dist/client/_nuxt/OoUlbf8J.js +1 -0
- package/dist/client/_nuxt/Sgj54NgJ.js +3 -0
- package/dist/client/_nuxt/{Bc3GUY-S.js → VtV-OZNb.js} +2 -2
- package/dist/client/_nuxt/builds/latest.json +1 -1
- package/dist/client/_nuxt/builds/meta/0a20d338-7497-4d3f-82e8-9f5ae0d7be3d.json +1 -0
- package/dist/client/_nuxt/{entry.CsCxOCYm.css → entry.z8A6-8bZ.css} +1 -1
- package/dist/client/customize/index.html +1 -1
- package/dist/client/furifont.user.js +2 -2
- package/dist/client/index.html +1 -1
- package/dist/client/reference/index.html +1 -1
- package/dist/client/version.json +1 -1
- package/dist/{config-BgEXAgR6.mjs → config-B9fOD9wc.mjs} +1 -1
- package/dist/devframe.mjs +2 -2
- package/dist/index.d.mts +3 -1
- package/dist/index.mjs +2 -2
- package/dist/{studio-DLNpk_rE.mjs → studio-IpmE7PF6.mjs} +1 -1
- package/package.json +5 -5
- package/dist/client/_nuxt/AmQakyTh.js +0 -1
- package/dist/client/_nuxt/BDNMzG2s.js +0 -1
- package/dist/client/_nuxt/CC4_XjFP.js +0 -3
- package/dist/client/_nuxt/CEWHii-_.js +0 -3
- package/dist/client/_nuxt/CEo6aVYN.js +0 -1
- package/dist/client/_nuxt/CRzLMJPS.js +0 -1
- package/dist/client/_nuxt/Cg7TlFyt.js +0 -1
- package/dist/client/_nuxt/DGhFAXuQ.js +0 -1
- package/dist/client/_nuxt/DLl_pn_F.js +0 -58
- package/dist/client/_nuxt/DSYkQlQa.js +0 -1
- package/dist/client/_nuxt/DT7XmrQw.js +0 -132
- package/dist/client/_nuxt/DTC_KzWZ.js +0 -79
- package/dist/client/_nuxt/DhRy_lmV.js +0 -1
- package/dist/client/_nuxt/DmOlRIb5.js +0 -2
- package/dist/client/_nuxt/DmlUWPPW.js +0 -3
- package/dist/client/_nuxt/Dz56DRZ7.js +0 -59
- package/dist/client/_nuxt/HB7Qu17x.js +0 -1
- package/dist/client/_nuxt/JRbXhaR6.js +0 -1
- package/dist/client/_nuxt/builds/meta/1bd12827-b513-45af-9638-872afc8faff4.json +0 -1
- package/dist/client/_nuxt/g9q6jbAq.js +0 -1
- package/dist/client/_nuxt/jjE7wdAL.js +0 -1
- package/dist/client/_nuxt/nNFr3PcB.js +0 -2
- package/dist/client/_nuxt/nQF5Cd64.js +0 -3
- package/dist/client/docs/index.html +0 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{t as e}from"./y07Wd5I9.js";import{t}from"
|
|
1
|
+
import{t as e}from"./y07Wd5I9.js";import{i as t}from"#entry";function n(e){return t=>{let n=`${e.bold(e.red(`[${t.name}]`))} ${t.message}`,r=[];return t.fix&&r.push(`${e.dim(`fix:`)} ${t.fix}`),t.sources?.length&&r.push(`${e.dim(`sources:`)} ${t.sources.join(`, `)}`),t.docs&&r.push(`${e.dim(`see:`)} ${e.cyan(t.docs)}`),r.length===0?n:[n,...r.map((t,n)=>`${e.dim(n<r.length-1?`├▶`:`╰▶`)} ${t}`)].join(`
|
|
2
2
|
`)}}var r=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function i(e=21){let t=``,n=e;for(;n--;)t+=r[Math.random()*64|0];return t}function a(e,t){let n=`\x1B[${e}m`,r=`\x1B[${t}m`;return((e,...t)=>{if(Array.isArray(e)&&`raw`in e){let i=e,a=``;for(let e=0;e<i.length;e++)a+=i[e],e<t.length&&(a+=String(t[e]));return`${n}${a}${r}`}return`${n}${String(e)}${r}`})}var o={blue:a(34,39),cyan:a(36,39),gray:a(90,39),green:a(32,39),red:a(31,39),yellow:a(33,39),bold:a(1,22),dim:a(2,22),reset:a(0,0),underline:a(4,24)},s={bus:{agentManifestChanged:`agent:manifest:changed`,agentToolRegistered:`agent:tool:registered`,agentToolUnregistered:`agent:tool:unregistered`,agentResourceRegistered:`agent:resource:registered`,agentResourceUnregistered:`agent:resource:unregistered`},client:{isTrustedUpdated:`rpc:is-trusted:updated`,error:`rpc:error`,connectionStatus:`connection:status`,connectionError:`connection:error`},broadcast:{authRevoked:`devframe:auth:revoked`,cacheInvalidate:`devframe:rpc:cache:invalidate`,clientStateUpdated:`devframe:rpc:client-state:updated`,clientStatePatch:`devframe:rpc:client-state:patch`,streamingChunk:`devframe:streaming:chunk`,streamingEnd:`devframe:streaming:end`,streamingUploadCancel:`devframe:streaming:upload-cancel`},inPageChannel:{panelStateUpdated:`devframe:in-page:panel-state:updated`,panelStatePatch:`devframe:in-page:panel-state:patch`},postMessage:{remoteAssetsError:`devframe:remote-assets-error`,inPageChannel:`devframe:in-page-channel`}},c=n(o);function l(e,{method:t=`warn`}={}){console[t](c(e))}function u(t){return e({...t,reporters:[l,...t.reporters??[]]})}function d(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}var f=Math.random.bind(Math),p=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function m(e=21){let t=``,n=e;for(;n--;)t+=p[f()*64|0];return t}var h=6e4,g=e=>e,_=g,{clearTimeout:v,setTimeout:y}=globalThis;function b(e,t){let{post:n,on:r,off:i=()=>{},eventNames:a=[],serialize:o=g,deserialize:s=_,resolver:c,bind:l=`rpc`,timeout:u=h,proxify:f=!0}=t,p=!1,b=new Map,x,S;async function C(e,r,i,a){if(p)throw Error(`[birpc] rpc is closed, cannot call "${e}"`);let s={m:e,a:r,t:`q`};a&&(s.o=!0);let c=async e=>n(o(e));if(i){await c(s);return}if(x)try{await x}finally{x=void 0}let{promise:l,resolve:f,reject:h}=d(),g=m();s.i=g;let _;async function C(n=s){return u>=0&&(_=y(()=>{try{if(t.onTimeoutError?.call(S,e,r)!==!0)throw Error(`[birpc] timeout on calling "${e}"`)}catch(e){h(e)}b.delete(g)},u),typeof _==`object`&&(_=_.unref?.())),b.set(g,{resolve:f,reject:h,timeoutId:_,method:e}),await c(n),l}try{t.onRequest?await t.onRequest.call(S,s,C,f):await C()}catch(e){if(t.onGeneralError?.call(S,e)!==!0)throw e;return}finally{v(_),b.delete(g)}return l}let w={$call:(e,...t)=>C(e,t,!1),$callOptional:(e,...t)=>C(e,t,!1,!0),$callEvent:(e,...t)=>C(e,t,!0),$callRaw:e=>C(e.method,e.args,e.event,e.optional),$rejectPendingCalls:ee,get $closed(){return p},get $meta(){return t.meta},$close:T,$functions:e};S=f?new Proxy({},{get(t,n){if(Object.hasOwn(w,n))return w[n];if(n===`then`&&!a.includes(`then`)&&!(`then`in e))return;let r=(...e)=>C(n,e,!0);if(a.includes(n))return r.asEvent=r,r;let i=(...e)=>C(n,e,!1);return i.asEvent=r,i}}):w;function T(e){p=!0,b.forEach(({reject:t,method:n})=>{let r=Error(`[birpc] rpc is closed, cannot call "${n}"`);if(e)return e.cause??=r,t(e);t(r)}),b.clear(),i(E)}function ee(e){let t=Array.from(b.values()).map(({method:t,reject:n})=>e?e({method:t,reject:n}):n(Error(`[birpc]: rejected pending call "${t}".`)));return b.clear(),t}async function E(r,...i){let a;try{a=s(r)}catch(e){if(t.onGeneralError?.call(S,e)!==!0)throw e;return}if(a.t===`q`){let{m:r,a:s,o:u}=a,d,f,p=await(c?c.call(S,r,e[r]):e[r]);if(u&&(p||=()=>void 0),!p)f=Error(`[birpc] function "${r}" not found`);else try{d=await p.apply(l===`rpc`?S:e,s)}catch(e){f=e}if(a.i){if(f&&t.onFunctionError&&t.onFunctionError.call(S,f,r,s)===!0)return;if(!f)try{await n(o({t:`s`,i:a.i,r:d}),...i);return}catch(e){if(f=e,t.onGeneralError?.call(S,e,r,s)!==!0)throw e}try{await n(o({t:`s`,i:a.i,e:f}),...i)}catch(e){if(t.onGeneralError?.call(S,e,r,s)!==!0)throw e}}}else{let{i:e,r:t,e:n}=a,r=b.get(e);r&&(v(r.timeoutId),n?r.reject(n):r.resolve(t)),b.delete(e)}}return x=r(E),S}function x(e,t){return t.safety?t.safety:e===`static`||e===`query`||e==null?`read`:`action`}var S=Object.freeze({type:`object`,additionalProperties:!0});function C(e){let t=e[`~standard`];if(t.jsonSchema)try{return t.jsonSchema.input({target:`draft-2020-12`})}catch{return S}return S}function w(e){if(!e||e.length===0)return{type:`object`,properties:{}};let t={},n=[];for(let r=0;r<e.length;r++){let i=`arg${r}`;t[i]=C(e[r]),n.push(i)}return{type:`object`,properties:t,required:n,additionalProperties:!1}}function T(e,t){if(Array.isArray(e))return e;if(e==null)return[];if(typeof e!=`object`)return;let n=e;if(t!=null)return Array.from({length:t},(e,t)=>n[`arg${t}`]);if(`arg0`in n){let e=[];for(;`arg${e.length}`in n;)e.push(n[`arg${e.length}`]);return e}return Object.keys(n).length===0?[]:void 0}function ee(e,t){return T(e,t)??[e]}function E(e){return typeof e==`string`?`'${e}'`:new te().serialize(e)}var D=` _-,;:!?.'"()[]{}@*/\\&#%\`^+<=>|~$0123456789abcdefghijklmnopqrstuvwxyz`,O=(function(){let e=new Uint8Array(128);for(let t=0;t<69;t++)e[D.charCodeAt(t)]=t+1;for(let t=65;t<=90;t++)e[t]=e[t+32];return e})();function k(e,t){if(e===t)return 0;let n=Math.min(e.length,t.length),r=0;for(let i=0;i<n;i++){let n=e.charCodeAt(i),a=t.charCodeAt(i);if(n===a)continue;let o=n<128&&O[n]?O[n]:n+128,s=a<128&&O[a]?O[a]:a+128;if(o!==s)return o<s?-1:1;r===0&&(r=n>a?-1:1)}return e.length===t.length?r:e.length<t.length?-1:1}var te=(function(){class e{#e=new Map;compare(e,t){let n=typeof e,r=typeof t;return n===`string`&&r===`string`?k(e,t):n===`number`&&r===`number`?e-t:k(this.serialize(e,!0),this.serialize(t,!0))}serialize(e,t){if(e===null)return`null`;switch(typeof e){case`string`:return t?e:`'${e}'`;case`bigint`:return`${e}n`;case`object`:return this.$object(e);case`function`:return this.$function(e)}return String(e)}serializeObject(e){let t=Object.prototype.toString.call(e);if(t!==`[object Object]`)return this.serializeBuiltInType(t.length<10?`unknown:${t}`:t.slice(8,-1),e);let n=e.constructor,r=n===Object||n===void 0?``:n.name;if(r!==``&&globalThis[r]===n)return this.serializeBuiltInType(r,e);if(`toJSON`in e&&typeof e.toJSON==`function`){let t=e.toJSON();return r+(typeof t==`object`&&t?this.$object(t):`(${this.serialize(t)})`)}let i=Object.keys(e).sort(k),a=`${r}{`;for(let t=0;t<i.length;t++){let n=i[t];a+=`${n}:${this.serialize(e[n])}`,t<i.length-1&&(a+=`,`)}return a+`}`}serializeBuiltInType(e,t){let n=this[`$`+e];if(n)return n.call(this,t);if(typeof t.entries==`function`)return this.serializeObjectEntries(e,t.entries());throw Error(`Cannot serialize ${e}`)}serializeObjectEntries(e,t){let n=Array.from(t).sort((e,t)=>this.compare(e[0],t[0])),r=`${e}{`;for(let e=0;e<n.length;e++){let[t,i]=n[e];r+=`${this.serialize(t,!0)}:${this.serialize(i)}`,e<n.length-1&&(r+=`,`)}return r+`}`}$object(e){let t=this.#e.get(e);return t===void 0&&(this.#e.set(e,`#${this.#e.size}`),t=this.serializeObject(e),this.#e.set(e,t)),t}$function(e){let t=Function.prototype.toString.call(e);return t.slice(-15)===`[native code] }`?`${e.name||``}()[native]`:`${e.name}(${e.length})${t.replace(/\s*\n\s*/g,``)}`}$Array(e){let t=`[`;for(let n=0;n<e.length;n++)t+=this.serialize(e[n]),n<e.length-1&&(t+=`,`);return t+`]`}$Date(e){try{return`Date(${e.toISOString()})`}catch{return`Date(null)`}}$ArrayBuffer(e){return`ArrayBuffer[${new Uint8Array(e).join(`,`)}]`}$Set(e){return`Set${this.$Array(Array.from(e).sort((e,t)=>this.compare(e,t)))}`}$Map(e){return this.serializeObjectEntries(`Map`,e.entries())}}for(let t of[`Error`,`RegExp`,`URL`])e.prototype[`$`+t]=function(e){return`${t}(${e})`};for(let t of[`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float32Array`,`Float64Array`])e.prototype[`$`+t]=function(e){return`${t}[${e.join(`,`)}]`};for(let t of[`BigInt64Array`,`BigUint64Array`])e.prototype[`$`+t]=function(e){return`${t}[${e.join(`n,`)}${e.length>0?`n`:``}]`};return e})(),ne=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],A=[1116352408,1899447441,-1245643825,-373957723,961987163,1508970993,-1841331548,-1424204075,-670586216,310598401,607225278,1426881987,1925078388,-2132889090,-1680079193,-1046744716,-459576895,-272742522,264347078,604807628,770255983,1249150122,1555081692,1996064986,-1740746414,-1473132947,-1341970488,-1084653625,-958395405,-710438585,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,-2117940946,-1838011259,-1564481375,-1474664885,-1035236496,-949202525,-778901479,-694614492,-200395387,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,-2067236844,-1933114872,-1866530822,-1538233109,-1090935817,-965641998],re=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_`,j=[],ie=class{_data=new ae;_hash=new ae([...ne]);_nDataBytes=0;_minBufferSize=0;finalize(e){e&&this._append(e);let t=this._nDataBytes*8,n=this._data.sigBytes*8;return this._data.words[n>>>5]|=128<<24-n%32,this._data.words[(n+64>>>9<<4)+14]=Math.floor(t/4294967296),this._data.words[(n+64>>>9<<4)+15]=t,this._data.sigBytes=this._data.words.length*4,this._process(),this._hash}_doProcessBlock(e,t){let n=this._hash.words,r=n[0],i=n[1],a=n[2],o=n[3],s=n[4],c=n[5],l=n[6],u=n[7];for(let n=0;n<64;n++){if(n<16)j[n]=e[t+n]|0;else{let e=j[n-15],t=(e<<25|e>>>7)^(e<<14|e>>>18)^e>>>3,r=j[n-2],i=(r<<15|r>>>17)^(r<<13|r>>>19)^r>>>10;j[n]=t+j[n-7]+i+j[n-16]}let d=s&c^~s&l,f=r&i^r&a^i&a,p=(r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22),m=(s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25),h=u+m+d+A[n]+j[n],g=p+f;u=l,l=c,c=s,s=o+h|0,o=a,a=i,i=r,r=h+g|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+a|0,n[3]=n[3]+o|0,n[4]=n[4]+s|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+u|0}_append(e){typeof e==`string`&&(e=ae.fromUtf8(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes}_process(e){let t,n=this._data.sigBytes/64;n=e?Math.ceil(n):Math.max((n|0)-this._minBufferSize,0);let r=n*16,i=Math.min(r*4,this._data.sigBytes);if(r){for(let e=0;e<r;e+=16)this._doProcessBlock(this._data.words,e);t=this._data.words.splice(0,r),this._data.sigBytes-=i}return new ae(t,i)}},ae=class e{words;sigBytes;constructor(e,t){e=this.words=e||[],this.sigBytes=t===void 0?e.length*4:t}static fromUtf8(t){let n=unescape(encodeURIComponent(t)),r=n.length,i=[];for(let e=0;e<r;e++)i[e>>>2]|=(n.charCodeAt(e)&255)<<24-e%4*8;return new e(i,r)}toBase64(){let e=[];for(let t=0;t<this.sigBytes;t+=3){let n=this.words[t>>>2]>>>24-t%4*8&255,r=this.words[t+1>>>2]>>>24-(t+1)%4*8&255,i=this.words[t+2>>>2]>>>24-(t+2)%4*8&255,a=n<<16|r<<8|i;for(let n=0;n<4&&t*8+n*6<this.sigBytes*8;n++)e.push(re.charAt(a>>>6*(3-n)&63))}return e.join(``)}concat(e){if(this.words[this.sigBytes>>>2]&=4294967295<<32-this.sigBytes%4*8,this.words.length=Math.ceil(this.sigBytes/4),this.sigBytes%4)for(let t=0;t<e.sigBytes;t++){let n=e.words[t>>>2]>>>24-t%4*8&255;this.words[this.sigBytes+t>>>2]|=n<<24-(this.sigBytes+t)%4*8}else for(let t=0;t<e.sigBytes;t+=4)this.words[this.sigBytes+t>>>2]=e.words[t>>>2];this.sigBytes+=e.sigBytes}};function oe(e){return new ie().finalize(e).toBase64()}function se(e){return oe(E(e))}function ce(e){return se(e)}function le(){let e={};function t(t,...n){let r=e[t]||[];for(let e=0,t=r.length;e<t;e++){let t=r[e];t&&t(...n)}}function n(n,...r){t(n,...r),delete e[n]}function r(t,n){return(e[t]||=[]).push(n),()=>{e[t]=e[t]?.filter(e=>n!==e)}}function i(e,t){let n=r(e,((...e)=>(n(),t(...e))));return n}return{_listeners:e,emit:t,emitOnce:n,on:r,once:i}}var ue=/^[\w+.-]{2,}:\/\//;function de(e){return e.endsWith(`/`)?e:`${e}/`}function fe(e){return(e.endsWith(`/`)?e.slice(0,-1):e)||`/`}function pe(e,...t){let n=e;for(let e of t)e&&e!==`/`&&(n=n?de(n)+e.replace(/^\.?\//,``):e);return n}function me(e,t){if(!t||t===`/`||ue.test(e))return e;let n=fe(t);return e.startsWith(n)?e:pe(n,e)}function he(e,t){let n=e.match(ue);return t+(n?e.slice(n[0].length):e)}var ge=Symbol.for(`immer-nothing`),_e=Symbol.for(`immer-draftable`),M=Symbol.for(`immer-state`),ve=[function(e){return`The plugin for '${e}' has not been loaded into Immer. To enable the plugin, import and call \`enable${e}()\` when initializing your application.`},function(e){return`produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${e}'`},`This object has been frozen and should not be mutated`,function(e){return`Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? `+e},`An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.`,`Immer forbids circular references`,"The first or second argument to `produce` must be a function","The third argument to `produce` must be a function or undefined","First argument to `createDraft` must be a plain object, an array, or an immerable object","First argument to `finishDraft` must be a draft returned by `createDraft`",function(e){return`'current' expects a draft, got: ${e}`},`Object.defineProperty() cannot be used on an Immer draft`,`Object.setPrototypeOf() cannot be used on an Immer draft`,`Immer only supports deleting array indices`,`Immer only supports setting array indices and the 'length' property`,function(e){return`'original' expects a draft, got: ${e}`}];function N(e,...t){{let n=ve[e],r=G(n)?n.apply(null,t):n;throw Error(`[Immer] ${r}`)}}var P=Object,F=P.getPrototypeOf,I=`constructor`,L=`prototype`,ye=`configurable`,be=`enumerable`,xe=`writable`,R=`value`,z=e=>!!e&&!!e[M];function B(e){return e?we(e)||Oe(e)||!!e[_e]||!!e[I]?.[_e]||ke(e)||Ae(e):!1}var Se=P[L][I].toString(),Ce=new WeakMap;function we(e){if(!e||!W(e))return!1;let t=F(e);if(t===null||t===P[L])return!0;let n=P.hasOwnProperty.call(t,I)&&t[I];if(n===Object)return!0;if(!G(n))return!1;let r=Ce.get(n);return r===void 0&&(r=Function.toString.call(n),Ce.set(n,r)),r===Se}function Te(e,t,n=!0){V(e)===0?(n?Reflect.ownKeys(e):P.keys(e)).forEach(n=>{t(n,e[n],e)}):e.forEach((n,r)=>t(r,n,e))}function V(e){let t=e[M];return t?t.type_:Oe(e)?1:ke(e)?2:Ae(e)?3:0}var H=(e,t,n=V(e))=>n===2?e.has(t):P[L].hasOwnProperty.call(e,t),U=(e,t,n=V(e))=>n===2?e.get(t):e[t],Ee=(e,t,n,r=V(e))=>{r===2?e.set(t,n):r===3?e.add(n):e[t]=n};function De(e,t){return e===t?e!==0||1/e==1/t:e!==e&&t!==t}var Oe=Array.isArray,ke=e=>e instanceof Map,Ae=e=>e instanceof Set,W=e=>typeof e==`object`,G=e=>typeof e==`function`,je=e=>typeof e==`boolean`;function Me(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var Ne=e=>W(e)?e?.[M]:null,K=e=>e.copy_||e.base_,Pe=e=>e.modified_?e.copy_:e.base_;function Fe(e,t){if(ke(e))return new Map(e);if(Ae(e))return new Set(e);if(Oe(e))return Array[L].slice.call(e);let n=we(e);if(t===!0||t===`class_only`&&!n){let t=P.getOwnPropertyDescriptors(e);delete t[M];let n=Reflect.ownKeys(t);for(let r=0;r<n.length;r++){let i=n[r],a=t[i];a[xe]===!1&&(a[xe]=!0,a[ye]=!0),(a.get||a.set)&&(t[i]={[ye]:!0,[xe]:!0,[be]:a[be],[R]:e[i]})}return P.create(F(e),t)}{let t=F(e);if(t!==null&&n)return{...e};let r=P.create(t);return P.assign(r,e)}}function Ie(e,t=!1){return ze(e)||z(e)||!B(e)||(V(e)>1&&P.defineProperties(e,{set:Re,add:Re,clear:Re,delete:Re}),P.freeze(e),t&&Te(e,(e,t)=>{Ie(t,!0)},!1)),e}function Le(){N(2)}var Re={[R]:Le};function ze(e){return e===null||!W(e)||P.isFrozen(e)}var Be=`MapSet`,Ve=`Patches`,He=`ArrayMethods`,Ue={};function q(e){let t=Ue[e];return t||N(0,e),t}var We=e=>!!Ue[e];function Ge(e,t){Ue[e]||(Ue[e]=t)}var Ke,qe=()=>Ke,Je=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:We(Be)?q(Be):void 0,arrayMethodsPlugin_:We(He)?q(He):void 0});function Ye(e,t){t&&(e.patchPlugin_=q(Ve),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Xe(e){Ze(e),e.drafts_.forEach($e),e.drafts_=null}function Ze(e){e===Ke&&(Ke=e.parent_)}var Qe=e=>Ke=Je(Ke,e);function $e(e){let t=e[M];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function et(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];if(e!==void 0&&e!==n){n[M].modified_&&(Xe(t),N(4)),B(e)&&(e=tt(t,e));let{patchPlugin_:r}=t;r&&r.generateReplacementPatches_(n[M].base_,e,t)}else e=tt(t,n);return nt(t,e,!0),Xe(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e===ge?void 0:e}function tt(e,t){if(ze(t))return t;let n=t[M];if(!n)return ut(t,e.handledSet_,e);if(!it(n,e))return t;if(!n.modified_)return n.base_;if(!n.finalized_){let{callbacks_:t}=n;if(t)for(;t.length>0;)t.pop()(e);ct(n,e)}return n.copy_}function nt(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&Ie(t,n)}function rt(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var it=(e,t)=>e.scope_===t,at=[];function ot(e,t,n,r){let i=K(e),a=e.type_;if(r!==void 0&&U(i,r,a)===t){Ee(i,r,n,a);return}if(!e.draftLocations_){let t=e.draftLocations_=new Map;Te(i,(e,n)=>{if(z(n)){let r=t.get(n)||[];r.push(e),t.set(n,r)}})}let o=e.draftLocations_.get(t)??at;for(let e of o)Ee(i,e,n,a)}function st(e,t,n){e.callbacks_.push(function(r){let i=t;if(!i||!it(i,r))return;r.mapSetPlugin_?.fixSetContents(i);let a=Pe(i);ot(e,i.draft_??i,a,n),ct(i,r)})}function ct(e,t){if(e.modified_&&!e.finalized_&&(e.type_===3||e.type_===1&&e.allIndicesReassigned_||(e.assigned_?.size??0)>0)){let{patchPlugin_:n}=t;if(n){let r=n.getPath(e);r&&n.generatePatches_(e,r,t)}rt(e)}}function lt(e,t,n){let{scope_:r}=e;if(z(n)){let i=n[M];it(i,r)&&i.callbacks_.push(function(){yt(e),ot(e,n,Pe(i),t)})}else B(n)&&e.callbacks_.push(function(){let i=K(e);e.type_===3?i.has(n)&&ut(n,r.handledSet_,r):U(i,t,e.type_)===n&&r.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&ut(U(e.copy_,t,e.type_),r.handledSet_,r)})}function ut(e,t,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||z(e)||t.has(e)||!B(e)||ze(e)||(t.add(e),Te(e,(r,i)=>{if(z(i)){let t=i[M];it(t,n)&&(Ee(e,r,Pe(t),e.type_),rt(t))}else B(i)&&ut(i,t,n)})),e}function dt(e,t){let n=Oe(e),r={type_:+!!n,scope_:t?t.scope_:qe(),modified_:!1,finalized_:!1,assigned_:void 0,parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1,callbacks_:void 0},i=r,a=ft;n&&(i=[r],a=pt);let{revoke:o,proxy:s}=Proxy.revocable(i,a);return r.draft_=s,r.revoke_=o,[s,r]}var ft={get(e,t){if(t===M)return e;let n=e.scope_.arrayMethodsPlugin_,r=e.type_===1&&typeof t==`string`;if(r&&n?.isArrayOperationMethod(t))return n.createMethodInterceptor(e,t);let i=K(e);if(!H(i,t,e.type_))return gt(e,i,t);let a=i[t];if(e.finalized_||!B(a)||r&&e.operationMethod&&n?.isMutatingArrayMethod(e.operationMethod)&&Me(t))return a;if(a===mt(e.base_,t)||ht(e,t,a)){yt(e);let n=e.type_===1?+t:t,r=xt(e.scope_,a,e,n);return e.copy_[n]=r}return a},has(e,t){return t in K(e)},ownKeys(e){return Reflect.ownKeys(K(e))},set(e,t,n){let r=_t(K(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let r=mt(K(e),t),i=r?.[M];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_.delete(t),!0;if(De(n,r)&&(n!==void 0||H(e.base_,t,e.type_)))return!0;yt(e),vt(e)}return e.copy_[t]===n&&(n!==void 0||H(e.copy_,t,e.type_))||Number.isNaN(n)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=n,e.assigned_.set(t,!0),lt(e,t,n)),!0},deleteProperty(e,t){return yt(e),mt(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),vt(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=K(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{[xe]:!0,[ye]:e.type_!==1||t!==`length`,[be]:r[be],[R]:n[t]}},defineProperty(){N(11)},getPrototypeOf(e){return F(e.base_)},setPrototypeOf(){N(12)}},pt={};for(let e in ft){let t=ft[e];pt[e]=function(){let e=arguments;return e[0]=e[0][0],t.apply(this,e)}}pt.deleteProperty=function(e,t){return isNaN(parseInt(t))&&N(13),pt.set.call(this,e,t,void 0)},pt.set=function(e,t,n){return t!==`length`&&isNaN(parseInt(t))&&N(14),ft.set.call(this,e[0],t,n,e[0])};function mt(e,t){let n=e[M];return(n?K(n):e)[t]}function ht(e,t,n){return e.type_!==1||!e.allIndicesReassigned_||e.assigned_?.get(t)||!B(n)||n[M]?!1:e.baseRefs_.has(n)}function gt(e,t,n){let r=_t(t,n);return r?R in r?r[R]:r.get?.call(e.draft_):void 0}function _t(e,t){if(!(t in e))return;let n=F(e);for(;n;){let e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=F(n)}}function vt(e){e.modified_||(e.modified_=!0,e.parent_&&vt(e.parent_))}function yt(e){e.copy_||=(e.assigned_=new Map,Fe(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var bt=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(e,t,n)=>{if(G(e)&&!G(t)){let n=t;t=e;let r=this;return function(e=n,...i){return r.produce(e,e=>t.call(this,e,...i))}}G(t)||N(6),n!==void 0&&!G(n)&&N(7);let r;if(B(e)){let i=Qe(this),a=xt(i,e,void 0),o=!0;try{r=t(a),o=!1}finally{o?Xe(i):Ze(i)}return Ye(i,n),et(r,i)}if(!e||!W(e)){if(r=t(e),r===void 0&&(r=e),r===ge&&(r=void 0),this.autoFreeze_&&Ie(r,!0),n){let t=[],i=[];q(Ve).generateReplacementPatches_(e,r,{patches_:t,inversePatches_:i}),n(t,i)}return r}N(1,e)},this.produceWithPatches=(e,t)=>{if(G(e))return(t,...n)=>this.produceWithPatches(t,t=>e(t,...n));let n,r;return[this.produce(e,t,(e,t)=>{n=e,r=t}),n,r]},je(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),je(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),je(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){B(e)||N(8),z(e)&&(e=St(e));let t=Qe(this),n=xt(t,e,void 0);return n[M].isManual_=!0,Ze(t),n}finishDraft(e,t){let n=e&&e[M];(!n||!n.isManual_)&&N(9);let{scope_:r}=n;return Ye(r,t),et(void 0,r)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}setUseStrictIteration(e){this.useStrictIteration_=e}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(e,t){let n;for(n=t.length-1;n>=0;n--){let r=t[n];if(r.path.length===0&&r.op===`replace`){e=r.value;break}}n>-1&&(t=t.slice(n+1));let r=q(Ve).applyPatches_;return z(e)?r(e,t):this.produce(e,e=>r(e,t))}};function xt(e,t,n,r){let[i,a]=ke(t)?q(Be).proxyMap_(t,n):Ae(t)?q(Be).proxySet_(t,n):dt(t,n);return(n?.scope_??qe()).drafts_.push(i),a.callbacks_=n?.callbacks_??[],a.key_=r,n&&r!==void 0?st(n,a,r):a.callbacks_.push(function(e){e.mapSetPlugin_?.fixSetContents(a);let{patchPlugin_:t}=e;a.modified_&&t&&t.generatePatches_(a,[],e)}),i}function St(e){return z(e)||N(10,e),Ct(e)}function Ct(e){if(!B(e)||ze(e))return e;let t=e[M],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=Fe(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=Fe(e,!0);return Te(n,(e,t)=>{Ee(n,e,Ct(t))},r),t&&(t.finalized_=!1),n}function wt(){ve.push(`Sets cannot have "replace" patches.`,function(e){return`Unsupported patch operation: `+e},function(e){return`Cannot apply patch, path doesn't resolve: `+e},`Patching reserved attributes like __proto__, prototype and constructor is not allowed`);function e(n,r=[]){if(n.key_!==void 0){let e=n.parent_.copy_??n.parent_.base_,t=Ne(U(e,n.key_)),i=U(e,n.key_);if(i===void 0||i!==n.draft_&&i!==n.base_&&i!==n.copy_||t!=null&&t.base_!==n.base_)return null;let a=n.parent_.type_===3,o;if(a){let e=n.parent_;o=Array.from(e.drafts_.keys()).indexOf(n.key_)}else o=n.key_;if(!(a&&e.size>o||H(e,o)))return null;r.push(o)}if(n.parent_)return e(n.parent_,r);r.reverse();try{t(n.copy_,r)}catch{return null}return r}function t(e,t){let n=e;for(let e=0;e<t.length-1;e++){let r=t[e];if(n=U(n,r),!W(n)||n===null)throw Error(`Cannot resolve path at '${t.join(`/`)}'`)}return n}let n=`replace`,r=`remove`;function i(e,t,n){if(e.scope_.processedForPatches_.has(e))return;e.scope_.processedForPatches_.add(e);let{patches_:r,inversePatches_:i}=n;switch(e.type_){case 0:case 2:return o(e,t,r,i);case 1:return a(e,t,r,i);case 3:return s(e,t,r,i)}}function a(e,t,i,a){let{base_:o,assigned_:s}=e,c=e.copy_;c.length<o.length&&([o,c]=[c,o],[i,a]=[a,i]);let l=e.allIndicesReassigned_===!0;for(let e=0;e<o.length;e++){let r=c[e],u=o[e];if((l||s?.get(e.toString()))&&r!==u){let o=r?.[M];if(o&&o.modified_)continue;let s=t.concat([e]);i.push({op:n,path:s,value:d(r)}),a.push({op:n,path:s,value:d(u)})}}for(let e=o.length;e<c.length;e++){let n=t.concat([e]);i.push({op:`add`,path:n,value:d(c[e])})}for(let e=c.length-1;o.length<=e;--e){let n=t.concat([e]);a.push({op:r,path:n})}}function o(e,t,i,a){let{base_:o,copy_:s,type_:c}=e;Te(e.assigned_,(e,l)=>{let u=U(o,e,c),f=U(s,e,c),p=l?H(o,e)?n:`add`:r;if(u===f&&p===n)return;let m=t.concat(e);i.push(p===r?{op:p,path:m}:{op:p,path:m,value:d(f)}),a.push(p===`add`?{op:r,path:m}:p===r?{op:`add`,path:m,value:d(u)}:{op:n,path:m,value:d(u)})})}function s(e,t,n,i){let{base_:a,copy_:o}=e,s=0;a.forEach(e=>{if(!o.has(e)){let a=t.concat([s]);n.push({op:r,path:a,value:e}),i.unshift({op:`add`,path:a,value:e})}s++}),s=0,o.forEach(e=>{if(!a.has(e)){let a=t.concat([s]);n.push({op:`add`,path:a,value:e}),i.unshift({op:r,path:a,value:e})}s++})}function c(e,t,r){let{patches_:i,inversePatches_:a}=r;i.push({op:n,path:[],value:t===ge?void 0:t}),a.push({op:n,path:[],value:e})}function l(e,t){return t.forEach(t=>{let{path:i,op:a}=t,o=e;for(let e=0;e<i.length-1;e++){let t=V(o),n=i[e];typeof n!=`string`&&typeof n!=`number`&&(n=``+n),(t===0||t===1)&&(n===`__proto__`||n===I)&&N(19),G(o)&&n===L&&N(19),o=U(o,n),(o===null||!W(o))&&N(18,i.join(`/`))}let s=V(o),c=u(t.value),l=i[i.length-1];switch(a){case n:switch(s){case 2:return o.set(l,c);case 3:N(16);default:return o[l]=c}case`add`:switch(s){case 1:return l===`-`?o.push(c):o.splice(l,0,c);case 2:return o.set(l,c);case 3:return o.add(c);default:return o[l]=c}case r:switch(s){case 1:return o.splice(l,1);case 2:return o.delete(l);case 3:return o.delete(t.value);default:return delete o[l]}default:N(17,a)}}),e}function u(e){if(!B(e))return e;if(Oe(e))return e.map(u);if(ke(e))return new Map(Array.from(e.entries()).map(([e,t])=>[e,u(t)]));if(Ae(e))return new Set(Array.from(e).map(u));let t=Object.create(F(e));for(let n in e)t[n]=u(e[n]);return H(e,_e)&&(t[_e]=e[_e]),t}function d(e){return z(e)?u(e):e}Ge(Ve,{applyPatches_:l,generatePatches_:i,generateReplacementPatches_:c,getPath:e})}globalThis.Iterator?.from;var Tt=new bt,Et=Tt.produce,Dt=Tt.produceWithPatches.bind(Tt),Ot=Tt.applyPatches.bind(Tt),kt=1e3;function At(e,t){if(e.add(t),e.size>kt){let t=e.values().next().value;t!==void 0&&e.delete(t)}}function jt(e){let{enablePatches:t=!1}=e;t&&wt();let n=le(),r=e.initialValue,a=new Set;return{on:n.on,value:()=>r,patch:(e,t=i())=>{a.has(t)||(wt(),r=Ot(r,e),At(a,t),n.emit(`updated`,r,void 0,t))},mutate:(e,o=i())=>{if(!a.has(o)){if(At(a,o),t){let[t,i]=Dt(r,e);if(t===r)return;r=t,n.emit(`updated`,r,i,o)}else{let t=Et(r,e);if(t===r)return;r=t,n.emit(`updated`,r,void 0,o)}}},syncIds:a}}var Mt=typeof self==`object`?self:globalThis,Nt=new Set([`Error`,`EvalError`,`RangeError`,`ReferenceError`,`SyntaxError`,`TypeError`,`URIError`,`AggregateError`]),Pt=new Set([`Boolean`,`Number`,`String`,`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float16Array`,`Float32Array`,`Float64Array`,`BigInt64Array`,`BigUint64Array`]);function Ft(e,t){let n=(t,n)=>(e.set(n,t),t),r=i=>{if(e.has(i))return e.get(i);let[a,o]=t[i];switch(a){case 0:case-1:return n(o,i);case 1:{let e=n([],i);for(let t of o)e.push(r(t));return e}case 2:{let e=n({},i);for(let[t,n]of o)e[r(t)]=r(n);return e}case 3:return n(new Date(o),i);case 4:{let{source:e,flags:t}=o;return n(new RegExp(e,t),i)}case 5:{let e=n(new Map,i);for(let[t,n]of o)e.set(r(t),r(n));return e}case 6:{let e=n(new Set,i);for(let t of o)e.add(r(t));return e}case 7:{let{name:e,message:t}=o,r=Nt.has(e)?Mt[e]:void 0;return n(new(r??Mt.Error)(t),i)}case 8:return n(BigInt(o),i);case`BigInt`:return n(Object(BigInt(o)),i);case`ArrayBuffer`:return n(new Uint8Array(o).buffer,o);case`DataView`:{let{buffer:e}=new Uint8Array(o);return n(new DataView(e),o)}}if(typeof a==`string`&&Pt.has(a))return n(new Mt[a](o),i);throw TypeError(`unable to deserialize unsafe or unknown type: ${String(a)}`)};return r}function It(e){return Ft(new Map,e)(0)}var J=``,{toString:Lt}={},{keys:Rt}=Object;function zt(e){let t=typeof e;if(t!==`object`||!e)return[0,t];let n=Lt.call(e).slice(8,-1);switch(n){case`Array`:return[1,J];case`Object`:return[2,J];case`Date`:return[3,J];case`RegExp`:return[4,J];case`Map`:return[5,J];case`Set`:return[6,J];case`DataView`:return[1,n]}return n.includes(`Array`)?[1,n]:n.includes(`Error`)?[7,n]:[2,n]}function Bt([e,t]){return e===0&&(t===`function`||t===`symbol`)}function Vt(e,t,n,r){let i=(e,t)=>{let i=r.push(e)-1;return n.set(t,i),i},a=r=>{if(n.has(r))return n.get(r);let[o,s]=zt(r);switch(o){case 0:{let t=r;switch(s){case`bigint`:o=8,t=r.toString();break;case`function`:case`symbol`:if(e)throw TypeError(`unable to serialize ${s}`);t=null;break;case`undefined`:return i([-1],r)}return i([o,t],r)}case 1:{if(s){let e=r;return s===`DataView`?e=new Uint8Array(r.buffer):s===`ArrayBuffer`&&(e=new Uint8Array(r)),i([s,[...e]],r)}let e=[],t=i([o,e],r);for(let t of r)e.push(a(t));return t}case 2:{if(s)switch(s){case`BigInt`:return i([s,r.toString()],r);case`Boolean`:case`Number`:case`String`:return i([s,r.valueOf()],r)}if(t&&`toJSON`in r)return a(r.toJSON());let n=[],c=i([o,n],r);for(let t of Rt(r))(e||!Bt(zt(r[t])))&&n.push([a(t),a(r[t])]);return c}case 3:return i([o,r.toISOString()],r);case 4:{let{source:e,flags:t}=r;return i([o,{source:e,flags:t}],r)}case 5:{let t=[],n=i([o,t],r);for(let[n,i]of r)(e||!(Bt(zt(n))||Bt(zt(i))))&&t.push([a(n),a(i)]);return n}case 6:{let t=[],n=i([o,t],r);for(let n of r)(e||!Bt(zt(n)))&&t.push(a(n));return n}}let{message:c}=r;return i([o,{name:s,message:c}],r)};return a}function Ht(e,t={}){let n=[];return Vt(!(t.json||t.lossy),!!t.json,new Map,n)(e),n}var{parse:Ut,stringify:Wt}=JSON,Gt={json:!0,lossy:!0};function Kt(e){return It(Ut(e))}function qt(e){return Wt(Ht(e,Gt))}function Jt(e){return It(e)}function Yt(e){return qt(e)}function Xt(e){return Kt(e)}var Zt=256,Qt=class extends Error{name=`StreamClosedError`};function $t(e={}){let t=e.id??i(),n=Math.max(0,e.replayWindow??0),r=le(),a=new AbortController,o=[],s=!1,c=0;function l(e){if(s)throw new Qt(`Cannot write to a closed stream "${t}"`);c+=1,n>0&&(o.push({seq:c,chunk:e}),o.length>n&&(o.length-n===1?o.shift():o.splice(0,o.length-n))),r.emit(`chunk`,c,e)}function u(e){if(s)return;s=!0;let t=tn(e);a.abort(e),r.emit(`end`,t)}function d(){s||(s=!0,a.signal.aborted||a.abort(`stream closed`),r.emit(`end`,void 0))}function f(e){s||a.signal.aborted||a.abort(e??`aborted`)}let p=new WritableStream({write(e){l(e)},close(){d()},abort(e){u(e)}});return{id:t,signal:a.signal,get closed(){return s},get lastSeq(){return c},write:l,error:u,close:d,abort:f,writable:p,events:r,buffer:o}}function en(e={}){let t=e.id??i(),n=Math.max(1,e.highWaterMark??Zt),r=[],a=0,o=!1,s=!1,c,l,u,d;function f(){if(l){if(r.length>0){let e=r.shift(),t=l;l=void 0,t.resolve({value:e,done:!1})}else if(o){let e=l;if(l=void 0,c){let t=Error(c.message);t.name=c.name,e.reject(t)}else e.resolve({value:void 0,done:!0})}}}function p(){if(u){for(;r.length>0;){let e=r.shift();try{u.enqueue(e)}catch{break}}if(o&&u){try{if(c){let e=Error(c.message);e.name=c.name,u.error(e)}else u.close()}catch{}u=void 0}}}function m(t,i){if(!(o||s)&&!(t<=a)){if(a=t,r.push(i),r.length>n){let t=r.length-n;r.splice(0,t),e.onOverflow?.(t)}f(),d&&p()}}function h(e){o||(o=!0,c=e,f(),d&&p())}function g(){s||o||(s=!0,e.onCancel?.(),h(void 0))}function _(){return d||(d=new ReadableStream({start(e){u=e,p()},cancel(){g()}}),d)}return{id:t,get cancelled(){return s},get done(){return o},get lastSeenSeq(){return a},get readable(){return _()},cancel:g,_push:m,_end:h,[Symbol.asyncIterator](){return{next(){if(r.length>0)return Promise.resolve({value:r.shift(),done:!1});if(o){if(c){let e=Error(c.message);return e.name=c.name,Promise.reject(e)}return Promise.resolve({value:void 0,done:!0})}return new Promise((e,t)=>{l={resolve:e,reject:t}})},return(){return g(),Promise.resolve({value:void 0,done:!0})}}}}}function tn(e){if(e instanceof Error)return{name:e.name||`Error`,message:e.message};if(typeof e==`string`)return{name:`Error`,message:e};try{return{name:`Error`,message:JSON.stringify(e)}}catch{return{name:`Error`,message:String(e)}}}var nn=128;function rn(e){return e.replace(/[^\w-]+/g,`_`).slice(0,nn)}var an=`__connection.json`,on=`__DEVFRAME_CONNECTION__`,sn=`x-birpc-session`,cn=`__rpc-dump/index.json`,ln=`devframe:services`,un=`devframe_otp`,dn=`devframe_auth_token`;s.postMessage.remoteAssetsError;var fn=class{cacheMap=new Map;options;keySerializer;constructor(e){this.options=e,this.keySerializer=e.keySerializer||(e=>ce(e))}updateOptions(e){this.options={...this.options,...e}}cached(e,t){let n=this.cacheMap.get(e);if(n)return n.get(this.keySerializer(t))}has(e,t){return this.cacheMap.get(e)?.has(this.keySerializer(t))??!1}apply(e,t){let n=this.cacheMap.get(e.m)||new Map;n.set(this.keySerializer(e.a),t),this.cacheMap.set(e.m,n)}validate(e){return this.options.functions.includes(e)}clear(e){e?this.cacheMap.delete(e):this.cacheMap.clear()}},Y=u({docsBase:`https://devfra.me/errors`,codes:{DF0019:{why:e=>`RPC function "${e.name}" has \`agent\` set but \`jsonSerializable\` is \`false\`; MCP requires JSON-serializable data.`,fix:"Remove `jsonSerializable: false`, or remove `agent` to keep it RPC-only."},DF0020:{why:e=>`RPC function "${e.name}" declares \`jsonSerializable: true\` but the value at "${e.path}" is a ${e.type}.`,fix:"Either drop `jsonSerializable: true` (falls back to structured-clone) or change the value to a JSON-safe shape."},DF0021:{why:e=>`RPC function "${e.name}" is already registered`,fix:"Use the `force` parameter to overwrite an existing registration."},DF0022:{why:e=>`RPC function "${e.name}" is not registered. Use register() to add new functions.`},DF0023:{why:e=>`RPC function "${e.name}" is not registered`},DF0024:{why:e=>`Either handler or setup function must be provided for RPC function "${e.name}"`},DF0025:{why:e=>`Function "${e.name}" not found in dump store`},DF0026:{why:e=>`No dump match for "${e.name}" with args: ${e.args}`},DF0027:{why:e=>`Function "${e.name}" with type "${e.type}" cannot have dump configuration. Only "static" and "query" types support dumps.`},DF0028:{why:e=>`Function "${e.name}" with type "${e.type}" cannot use \`snapshot: true\`. Only "query" functions support this sugar; "static" functions have equivalent default behavior already.`,fix:"Remove `snapshot: true`, or change the function type to `query`."},DF0043:{why:e=>`RPC function "${e.name}" received an invalid argument at position ${e.index}: ${e.issues}`,fix:"Pass a value that satisfies the `args` schema declared for this function."},DF0044:{why:e=>`RPC function "${e.name}" returned a value that failed its \`returns\` schema: ${e.issues}`,fix:"Make the handler return a value that satisfies the `returns` schema, or relax the schema."}}});function pn(e){if(e.agent&&e.jsonSerializable===!1)throw Y.DF0019({name:e.name});e.agent&&!e.jsonSerializable&&(e.jsonSerializable=!0)}async function mn(e,t){let n=e[`~standard`].validate(t);return n instanceof Promise?await n:n}function hn(e){return e.map(e=>{let t=e.path?.map(e=>typeof e==`object`?e.key:e).join(`.`);return t?`${t}: ${e.message}`:e.message}).join(`; `)}async function gn(e,t,n){let r=n.slice();if(!t||t.length===0)return r;for(let r=0;r<t.length;r++){let i=t[r];if(!i)continue;let a=await mn(i,n[r]);if(a.issues)throw Y.DF0043({name:e,index:r,issues:hn(a.issues)})}return r}async function _n(e,t,n){if(!t)return n;let r=await mn(t,n);if(r.issues)throw Y.DF0044({name:e,issues:hn(r.issues)});return n}async function vn(e,t){if(!e.setup)return{};if(typeof t==`object`&&t){e.__cache??=new WeakMap;let n=e.__cache,r=n.get(t);return r||(r=Promise.resolve(e.setup(t)),r.catch(()=>{n.get(t)===r&&n.delete(t)}),n.set(t,r)),await r}if(!e.__promise){let n=Promise.resolve(e.setup(t));n.catch(()=>{e.__promise===n&&(e.__promise=void 0)}),e.__promise=n}return await e.__promise}async function yn(e,t){let n=e.handler;if(!n){let r=await vn(e,t);if(!r.handler)throw Y.DF0024({name:e.name});n=r.handler}let r=e.args,i=e.returns;if(!r&&!i)return n;let a=n;return async(...t)=>{let n=await gn(e.name,r,t),o=await a(...n);return await _n(e.name,i,o)}}var bn=class{context;definitions=new Map;functions;_onChanged=[];constructor(e){this.context=e;let t=this.definitions,n=this;this.functions=new Proxy({},{get(e,r){let i=t.get(r);if(i)return yn(i,n.context)},has(e,n){return t.has(n)},getOwnPropertyDescriptor(e,n){return{value:t.get(n)?.handler,configurable:!0,enumerable:!0}},ownKeys(){return Array.from(t.keys())}})}register(e,t=!1){if(this.definitions.has(e.name)&&!t)throw Y.DF0021({name:e.name});pn(e),this.definitions.set(e.name,e),this._onChanged.forEach(t=>t(e.name))}update(e,t=!1){if(!this.definitions.has(e.name)&&!t)throw Y.DF0022({name:e.name});pn(e),this.definitions.set(e.name,e),this._onChanged.forEach(t=>t(e.name))}onChanged(e){return this._onChanged.push(e),()=>{let t=this._onChanged.indexOf(e);t!==-1&&this._onChanged.splice(t,1)}}async getHandler(e){return await yn(this.definitions.get(e),this.context)}getSchema(e){let t=this.definitions.get(e);if(!t)throw Y.DF0023({name:String(e)});return{args:t.args,returns:t.returns}}has(e){return this.definitions.has(e)}get(e){return this.definitions.get(e)}list(){return Array.from(this.definitions.keys())}};function xn(e,t=``){return JSON.stringify(e,function(e,n){let r=this,i=r==null?n:r[e];if(i===void 0){if(Array.isArray(r))throw X(t,`undefined`,r,e);return n}return i!==null&&Sn(i,r,e,t),n})}function Sn(e,t,n,r){if(typeof e==`bigint`)throw X(r,`BigInt`,t,n);if(typeof e!=`object`)return;if(e instanceof Map)throw X(r,`Map`,t,n);if(e instanceof Set)throw X(r,`Set`,t,n);if(e instanceof Date)throw X(r,`Date`,t,n);if(Array.isArray(e))return;let i=Object.getPrototypeOf(e);if(i!==null&&i!==Object.prototype)throw X(r,e.constructor?.name??`class instance`,t,n)}function X(e,t,n,r){let i=Cn(n,r);return Y.DF0020({name:e||`<anonymous>`,type:t,path:i})}function Cn(e,t){return Array.isArray(e)?`[${t}]`:t===``?`<root>`:t}var wn=`__DEVFRAME_CONNECTION_META__`,Tn=`__DEVFRAME_CONNECTION_AUTH_TOKEN__`;function En(e){let t=[()=>window?.[e],()=>globalThis?.[e],()=>parent.window?.[e]];for(let e of t)try{let t=e();if(t)return t}catch{}}function Dn(){return En(on)}function On(){return En(wn)}function Z(e){if(e)return e;try{let e=localStorage.getItem(Tn);if(e)return e}catch{}return En(Tn)}function kn(e){globalThis[on]=e,globalThis[wn]={...e.connectionMeta,baseUrl:e.metaBaseUrl},e.authToken&&An(e.authToken)}function An(e){try{localStorage.setItem(Tn,e)}catch{}globalThis[Tn]=e;let t=Dn();t&&(globalThis[on]={...t,authToken:e})}function jn(e){let t=me(an,e);try{return new URL(t,globalThis.location?.href).href}catch{return t}}function Mn(e,t){return t&&t!==e.authToken?{...e,authToken:t}:e}function Nn(){let e=Dn();if(e)return Mn(e,Z()??e.authToken??e.connectionMeta.authToken);let t=On();if(t)return{connectionMeta:t,metaBaseUrl:t.baseUrl??jn(`./`),authToken:Z(t.authToken)}}async function Pn(e={}){if(e.connection){let t=Mn(e.connection,Z(e.authToken??e.connection.authToken??e.connection.connectionMeta.authToken));return kn(t),t}let t=Array.isArray(e.baseURL)?e.baseURL:[e.baseURL??`./`];if(e.connectionMeta){let n={connectionMeta:e.connectionMeta,metaBaseUrl:jn(t[0]??`./`),authToken:Z(e.authToken??e.connectionMeta.authToken)};return kn(n),n}let n=Nn();if(n){let t=Mn(n,Z(e.authToken??n.authToken??n.connectionMeta.authToken));return kn(t),t}let r=[];for(let n of t){let t=me(an,n),i=jn(n);try{let n=await fetch(t);if(!n.ok)throw Error(`Failed to fetch connection meta from ${i}: ${n.status}`);let r=await n.json(),a=n.url||i,o={connectionMeta:r,metaBaseUrl:r.baseUrl?new URL(r.baseUrl,a).href:a,authToken:Z(e.authToken??r.authToken)};return kn(o),o}catch(e){r.push(e)}}throw Error(`Failed to get connection meta from ${t.join(`, `)}`,{cause:r})}var Q=class extends Error{name=`DevframeConnectionError`;kind;constructor(e,t,n){super(t,n),this.kind=e}};function Fn(e=un){try{let t=globalThis.location?.hash?.replace(/^#/,``)??``;return new URLSearchParams(t).get(e)||void 0}catch{return}}function In(e){try{let t=new URL(globalThis.location.href),n=new URLSearchParams(t.hash.replace(/^#/,``));if(!n.has(e))return;n.delete(e),t.hash=n.toString(),globalThis.history?.replaceState(globalThis.history.state,``,t.href)}catch{}}function Ln(e=un){let t=Fn(e);return t&&In(e),t}async function Rn(e,t={}){let n=Ln(t.param??`devframe_otp`);return n?e.isTrusted?!0:e.requestTrustWithCode(n):!1}function zn(e){let t={},n=new WeakMap,r,i=()=>(r??=e.sharedState.get(ln,{initialValue:{}}).then(e=>(t=e.value(),e.on(`updated`,e=>{t=e}),e)),r);return i(),{state:i,has:e=>e in t,keys:()=>Object.keys(t),get:r=>{let i=t[r];if(!i)return;let a=n.get(i);return a||(a={...i,rpc:e.scope(i.scope).rpc},n.set(i,a)),a}}}function Bn(e){let t=new Map,n=new Map,r=new Map,i=new Set,a=e.connectionMeta.backend===`static`;function o(e,t){let n=r.get(e);return n&&typeof n==`object`&&!Array.isArray(n)&&typeof t==`object`&&!Array.isArray(t)?{...n,...t}:t}e.client.register({name:s.broadcast.clientStateUpdated,type:`event`,handler:(e,n,r)=>{let i=t.get(e);i&&!i.syncIds.has(r)&&i.mutate(()=>o(e,n),r)}}),e.client.register({name:s.broadcast.clientStatePatch,type:`event`,handler:(e,n,r)=>{let i=t.get(e);i&&!i.syncIds.has(r)&&i.patch(n,r)}});function c(t,n){let r=[];return r.push(n.on(`updated`,(n,r,i)=>{a||(r?e.callEvent(`devframe:rpc:server-state:patch`,t,r,i):e.callEvent(`devframe:rpc:server-state:set`,t,n,i))})),()=>{for(let e of r)e()}}return{keys:()=>Array.from(t.keys()),onKeyAdded(e){return i.add(e),()=>{i.delete(e)}},delete(e){let i=n.get(e);n.delete(e);let a=t.delete(e);return r.delete(e),i?.(),a},get:async(l,u)=>{if(u?.initialValue!==void 0&&r.set(l,u.initialValue),t.has(l))return t.get(l);let d=jt({initialValue:u?.initialValue,enablePatches:!1});async function f(){if(a||e.callEvent(`devframe:rpc:server-state:subscribe`,l),u?.initialValue!==void 0){t.set(l,d);for(let e of i)e(l);return e.call(`devframe:rpc:server-state:get`,l).then(e=>{e!==void 0&&d.mutate(()=>o(l,e))}).catch(e=>{console.error(`Error getting server state`,e)}),n.set(l,c(l,d)),d}{let r=await e.call(`devframe:rpc:server-state:get`,l);d.mutate(()=>o(l,r)),t.set(l,d);for(let e of i)e(l);return n.set(l,c(l,d)),d}}return new Promise((t,n)=>{if(e.isTrusted)f().then(t,n);else{t(d);let n=!1;e.events.on(s.client.isTrustedUpdated,e=>{e&&!n&&(n=!0,f())})}})}}}var Vn=new Map;function Hn(e=Vn){let t=new Map;return{serialize:n=>{let r;return n.t===`q`?r=n.m:(r=t.get(n.i),t.delete(n.i)),!(n.t===`s`&&`e`in n)&&r&&e.get(r)?.jsonSerializable===!0?xn(n,r??``):`s:${Yt(n)}`},deserialize:e=>{let n=e.startsWith(`s:`)?Xt(e.slice(2)):JSON.parse(e);return n.t===`q`&&n.i&&n.m&&t.set(n.i,n.m),n}}}function Un(){}function Wn(e){let t=e.search(/\n\n|\r\n\r\n/);if(!(t<0))return{frame:e.slice(0,t),rest:e.slice(t+(e[t]===`\r`?4:2))}}function Gn(e){let t=`message`,n=[];for(let r of e.split(/\r?\n/))r.startsWith(`:`)||(r.startsWith(`event:`)?t=r.slice(6).trimStart():r.startsWith(`data:`)&&n.push(r.slice(5).replace(/^ /,``)));return{event:t,data:n}}function Kn(e){let{onConnected:t=Un,onError:n=Un,onDisconnected:r=Un,definitions:i,fetch:a=globalThis.fetch.bind(globalThis)}=e,o=e.url;e.authToken&&(o=`${o}${o.includes(`?`)?`&`:`?`}${dn}=${encodeURIComponent(e.authToken)}`);let s=Hn(i),c=new AbortController,l=!1,u,d,f,p,m=new Promise((e,t)=>{f=e,p=t});m.catch(()=>{});function h(e){l||(l=!0,p(e),n(e),r())}function g(){l||(l=!0,p(Error(`Devframe SSE stream closed`)),r())}function _(e,n){e===`session`?(f(n),t()):u?.(n)}async function v(e){let t=e.getReader();d=t;let n=new TextDecoder,r=``;for(;;){let{done:e,value:i}=await t.read();if(e)break;for(r+=n.decode(i,{stream:!0});;){let e=Wn(r);if(!e)break;r=e.rest;let{event:t,data:n}=Gn(e.frame);n.length>0&&_(t,n.join(`
|
|
3
|
-
`))}}g()}return(async()=>{try{let e=await a(o,{headers:{accept:`text/event-stream`},signal:c.signal});if(!e.ok||!e.body)throw Error(`Devframe SSE stream request failed: ${e.status}`);await v(e.body)}catch(e){if(c.signal.aborted){g();return}h(e instanceof Error?e:Error(String(e)))}})(),{close:()=>{l=!0,c.abort(),d?.cancel().catch(()=>{})},on:e=>{u=e},post:async e=>{let t;try{t=await m}catch{return}if(l)n(Error(`Devframe SSE channel is closed; message dropped`));else try{let n=await a(o,{method:`POST`,headers:{"content-type":`text/plain; charset=utf-8`,[sn]:t},body:e});if(n.status===200){let e=await n.text();e&&u?.(e);return}if(!n.ok)throw Error(`Devframe SSE POST failed: ${n.status}`)}catch(e){n(e instanceof Error?e:Error(String(e)))}},serialize:s.serialize,deserialize:s.deserialize}}function qn(e,t){let{channel:n,rpcOptions:r={}}=t;return b(e,{...n,timeout:-1,...r,proxify:!1})}function Jn(e){let{transport:t,authToken:n,connectionMeta:r,events:i,clientRpc:a,rpcOptions:o={},callTimeout:c=0}=e,l=!1,u=`connecting`,d=null,f=Promise.withResolvers();function p(e,t=null){if(t?d=t:e===`connected`&&(d=null),e===u)return;let n=u;u=e,i.emit(s.client.connectionStatus,e,n)}let m=new Set;function h(e){for(let t of[...m])t.reject(e)}function g(){return u===`disconnected`||u===`error`?new Q(`connection`,`[devframe] Not connected to the devframe server`,{cause:d??void 0}):u===`unauthorized`?new Q(`auth`,`[devframe] Not authorized by the devframe server`,{cause:d??void 0}):null}function _(e,t){return new Promise((n,r)=>{let a=!1,o,l={reject(e){a||(u(),i.emit(s.client.error,e,t),r(e))}};function u(){a=!0,m.delete(l),o&&clearTimeout(o)}m.add(l),c>0&&(o=setTimeout(()=>{l.reject(new Q(`timeout`,`[devframe] RPC call "${t}" timed out after ${c}ms`))},c)),e.then(e=>{a||(u(),n(e))},e=>{if(a)return;u();let n=e instanceof Error?e:Error(String(e));i.emit(s.client.error,n,t),r(n)})})}let v=new Map;for(let e of r.jsonSerializableMethods??[])v.set(e,{jsonSerializable:!0});let y=e.createChannel({definitions:v,onError(e){p(`error`,e),i.emit(s.client.connectionError,e),h(new Q(`connection`,`[devframe] Connection to the devframe server failed`,{cause:e}))},onDisconnected(){u!==`error`&&p(`disconnected`),h(new Q(`connection`,`[devframe] Disconnected from the devframe server`,{cause:d??void 0}))}}),b=qn(a.functions,{channel:y,rpcOptions:o});a.register({name:s.broadcast.authRevoked,type:`event`,handler:()=>{l=!1;let e=new Q(`auth`,`[devframe] The devframe server revoked this client's trust`);p(`unauthorized`,e),i.emit(s.client.connectionError,e),h(e),i.emit(s.client.isTrustedUpdated,!1)}});let x=n;async function S(e){x=e;let t=await b.$call(`anonymous:devframe:auth`,{authToken:e,ua:navigator.userAgent,origin:location.origin});if(l=t.isTrusted,l)f.resolve(!0),p(`connected`);else{let e=new Q(`auth`,`[devframe] The devframe server refused this client's credentials`);p(`unauthorized`,e),i.emit(s.client.connectionError,e)}return i.emit(s.client.isTrustedUpdated,l),t.isTrusted}async function C(e){let t=(await b.$call(`anonymous:devframe:auth:exchange`,{code:e,ua:navigator.userAgent,origin:location.origin}))?.authToken??null;return t&&(x=t,l=!0,f.resolve(!0),p(`connected`),i.emit(s.client.isTrustedUpdated,!0)),t}async function w(e={}){await b.$call(`anonymous:devframe:auth:request-code`,{ua:navigator.userAgent,origin:location.origin,...e.reissue?{reissue:!0}:{}})}async function T(){return l?!0:S(x??``)}async function ee(e=6e4){if(l&&f.resolve(!0),e<=0)return f.promise;let t;try{return await Promise.race([f.promise,new Promise((n,r)=>{t=setTimeout(()=>{r(Error(`[devframe] Timeout waiting for rpc to be trusted`))},e)})]),l}finally{clearTimeout(t)}}return{transport:t,get isTrusted(){return l},get status(){return u},get connectionError(){return d},requestTrust:T,requestTrustWithToken:S,requestTrustWithCode:C,requestAuthCode:w,ensureTrusted:ee,call:(...e)=>{let t=String(e[0]),n=g();return n?(i.emit(s.client.error,n,t),Promise.reject(n)):_(b.$call(...e),t)},callEvent:(...e)=>{let t=g();if(t)i.emit(s.client.error,t,String(e[0]));else return b.$callEvent(...e)},callOptional:(...e)=>{let t=String(e[0]),n=g();return n?(i.emit(s.client.error,n,t),Promise.reject(n)):_(b.$callOptional(...e),t)},close:()=>{y.close()}}}function Yn(e,t,n){let r=(()=>{try{return new URL(t,n.href)}catch{return new URL(n.href)}})();if(e&&typeof e==`object`){if(e.host!=null||e.port!=null){let t=e.host??`${r.hostname}:${e.port}`;return new URL(e.path??`/`,`${r.protocol}//${t}`).href}return new URL(e.path??``,r).href}let i=e??``;return/^https?:\/\//i.test(i)?i:new URL(i,r).href}function Xn(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},sseOptions:s={},callTimeout:c=0}=e,l=Yn(n.sse,r??`./`,location);return Jn({transport:`sse`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>Kn({url:l,authToken:t,definitions:e.definitions,...s,onConnected(){s.onConnected?.()},onError(t){e.onError(t),s.onError?.(t)},onDisconnected(){e.onDisconnected(),s.onDisconnected?.()}})})}function Zn(e){let{name:t,message:n,cause:r,...i}=e,a=r instanceof Error?r:Qn(r)?Zn(r):r,o=a===void 0?Error(n):Error(n,{cause:a});return o.name=t,Object.assign(o,i),o}function Qn(e){return typeof e==`object`&&!!e&&typeof e.message==`string`&&typeof e.name==`string`}function $n(e){return typeof e==`object`&&!!e&&e.type===`static`&&typeof e.path==`string`}function er(e){return typeof e==`object`&&!!e&&e.type===`query`&&typeof e.records==`object`&&e.records!==null}function tr(e){return typeof e==`object`&&!!e&&(`output`in e||`error`in e)}function nr(e){if(e.error)throw Zn(e.error);return e.output}function rr(e){return e.some(e=>e!=null)}function ir(e){return typeof e==`object`&&e&&`serialization`in e&&`data`in e?e.data:e}function ar(e,t){let n=new Map,r=new Map;function i(e,t){return t===`structured-clone`&&Array.isArray(e)?Jt(e):e}function a(e,t){return i(ir(e),t)}async function o(e){n.has(e.path)||n.set(e.path,t(e.path).then(t=>a(t,e.serialization)));let r=await n.get(e.path);return tr(r)?nr(r):r}async function s(e,n){return r.has(e)||r.set(e,t(e).then(e=>a(e,n))),await r.get(e)}async function c(t,n){if(!(t in e))throw Error(`[devframe-rpc] Function "${t}" not found in dump store`);let r=e[t];if($n(r)){if(rr(n))throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`);return await o(r)}if(er(r)){let e=ce(n),i=r.records[e];if(i)return nr(await s(i,r.serialization));if(r.fallback)return nr(await s(r.fallback,r.serialization));throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}if(!rr(n))return r;throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}return{call:async(e,t)=>await c(e,t),callOptional:async(t,n)=>{if(t in e)return await c(t,n)},callEvent:async(e,t)=>{}}}async function or(e){let t=ar(await e.fetchJsonFromBases(cn),e.fetchJsonFromBases);return{transport:`static`,isTrusted:!0,status:`connected`,connectionError:null,requestTrust:async()=>!0,requestTrustWithToken:async()=>!0,requestTrustWithCode:async()=>null,requestAuthCode:async()=>{},ensureTrusted:async()=>!0,call:(...e)=>t.call(e[0],e.slice(1)),callEvent:(...e)=>t.callEvent(e[0],e.slice(1)),callOptional:(...e)=>t.callOptional(e[0],e.slice(1)),close:()=>{}}}var sr=``;function cr(e,t){return`${e}${sr}${t}`}function lr(e){let t=new Map,n=new Map;e.client.register({name:s.broadcast.streamingChunk,type:`event`,handler(e,n,r,i){t.get(cr(e,n))?._push(r,i)}}),e.client.register({name:s.broadcast.streamingEnd,type:`event`,handler(e,n,r){let i=cr(e,n),a=t.get(i);a&&(a._end(r),t.delete(i))}}),e.client.register({name:s.broadcast.streamingUploadCancel,type:`event`,handler(e,t){let r=cr(e,t),i=n.get(r);i&&(i.abort(`server cancelled upload`),n.delete(r))}}),e.events.on(s.client.isTrustedUpdated,n=>{if(n)for(let[n,r]of t){if(r.cancelled||r.done)continue;let t=n.indexOf(sr);if(t<0)continue;let i=n.slice(0,t),a=n.slice(t+1);e.callEvent(`devframe:streaming:subscribe`,i,a,{afterSeq:r.lastSeenSeq})}});function r(n,r,i={}){let a=cr(n,r),o=t.get(a);if(o)return o;let c=en({id:r,highWaterMark:i.highWaterMark,onOverflow(e){console.warn(`[devframe] DF0029: Stream "${n}#${r}" dropped ${e} chunk(s) after exceeding the client high-water mark.`)},onCancel(){e.callEvent(`devframe:streaming:cancel`,n,r),t.delete(a)}});if(t.set(a,c),e.isTrusted)e.callEvent(`devframe:streaming:subscribe`,n,r,{afterSeq:0});else{let i=e.events.on(s.client.isTrustedUpdated,o=>{o&&(i(),t.has(a)&&!c.cancelled&&!c.done&&e.callEvent(`devframe:streaming:subscribe`,n,r,{afterSeq:c.lastSeenSeq}))})}return c}function i(t,r){let i=cr(t,r),a=n.get(i);if(a)return a;let o=$t({id:r});return o.events.on(`chunk`,(n,i)=>{e.callEvent(`devframe:streaming:upload-chunk`,t,r,n,i)}),o.events.on(`end`,a=>{e.callEvent(`devframe:streaming:upload-end`,t,r,a),n.delete(i)}),n.set(i,o),o}return{subscribe:r,upload:i}}function ur(){}var dr=new Map;function fr(e){let t=e.url;e.authToken&&(t=`${t}?${dn}=${encodeURIComponent(e.authToken)}`);let n=new WebSocket(t),{onConnected:r=ur,onError:i=ur,onDisconnected:a=ur,definitions:o=dr}=e;n.addEventListener(`open`,e=>{r(e)}),n.addEventListener(`error`,e=>{let t=e instanceof Error?e:Error(e.type);i(t)}),n.addEventListener(`close`,e=>{a(e)});let s=Hn(o);return{close:()=>{n.close()},on:e=>{n.addEventListener(`message`,t=>{e(t.data)})},post:e=>{if(n.readyState===WebSocket.OPEN)n.send(e);else if(n.readyState===WebSocket.CONNECTING){let t=()=>{i(),n.readyState===WebSocket.OPEN&&n.send(e)},r=()=>i();function i(){n.removeEventListener(`open`,t),n.removeEventListener(`close`,r)}n.addEventListener(`open`,t),n.addEventListener(`close`,r)}else i(Error(`Devframe WebSocket is not open; message dropped`))},serialize:s.serialize,deserialize:s.deserialize}}function pr(e,t,n){let r=(()=>{try{return new URL(t,n.href)}catch{return new URL(n.href)}})(),i=r.protocol===`https:`?`wss:`:`ws:`;if(e&&typeof e==`object`){if(e.host!=null||e.port!=null){let t=e.host??`${r.hostname}:${e.port}`,n=new URL(e.path??`/`,`${i}//${t}`);return n.protocol=i,n.href}let t=new URL(e.path??``,r);return t.protocol=i,t.href}if(typeof e==`number`)return`${i}//${r.hostname}:${e}`;let a=e??``;if(/^wss?:\/\//i.test(a))return a;if(/^https?:\/\//i.test(a))return he(a,/^https/i.test(a)?`wss://`:`ws://`);let o=new URL(a,r);return o.protocol=i,o.href}function mr(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},wsOptions:s={},callTimeout:c=0}=e,l=pr(n.websocket,r??`./`,location);return Jn({transport:`websocket`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>fr({url:l,authToken:t,definitions:e.definitions,...s,onConnected(e){s.onConnected?.(e)},onError(t){e.onError(t),s.onError?.(t)},onDisconnected(t){e.onDisconnected(),s.onDisconnected?.(t)}})})}function hr(e){return e.includes(`:`)}function $(e,t){return hr(t)?t:`${e}:${t}`}function gr(e){return{async get(t){return(await e()).value()?.[t]},async set(t,n){(await e()).mutate(e=>{if(e===void 0)return{[t]:n};e[t]=n})},async delete(t){(await e()).mutate(e=>{e!==void 0&&delete e[t]})},async all(){return(await e()).value()??{}},async onChange(t){return(await e()).on(`updated`,e=>t(e??{}))}}}function _r(e,t,n){let r=`devframe:settings:${n}:${t}`,i;function a(){return i||=(async()=>(await e.ensureTrusted(),e.sharedState.get(r)))().catch(e=>{throw i=void 0,e}),i}return gr(a)}function vr(e,t){return{global:_r(e,t,`global`),project:_r(e,t,`project`)}}function yr(e,t){return{namespace:t,base:e,rpc:{namespace:t,register(n){if(hr(n.name))throw Error(`[devframe] Scoped client RPC registration for namespace "${t}" received an already-namespaced function name "${n.name}". Pass a bare name without a ":" separator.`);e.client.register({...n,name:`${t}:${n.name}`})},call:((n,...r)=>e.call($(t,n),...r)),callEvent:((n,...r)=>e.callEvent($(t,n),...r)),callOptional:((n,...r)=>e.callOptional($(t,n),...r)),sharedState:((n,r)=>e.sharedState.get($(t,n),r)),streaming:{subscribe:(n,r,i)=>e.streaming.subscribe($(t,n),r,i),upload:(n,r)=>e.streaming.upload($(t,n),r)}},settings:vr(e,t),scope:e.scope}}function br(){if(typeof document<`u`){let e=document.modelContext;if(e)return e}if(typeof navigator<`u`){let e=navigator.modelContext;if(e)return e}}function xr(e,t={}){let n=t.modelContext??br();if(!n)return()=>{};let r=n,i=new Map,a=new Map;function o(t,n){let o=rn(t.name),s=a.get(o);if(s&&s!==t.name){console.warn(`[devframe] WebMCP tool name "${o}" (from "${t.name}") collides with "${s}"; keeping the first registration.`);return}let c=new AbortController,l=x(t.type,n),u=r.registerTool({name:o,description:n.description,inputSchema:w(t.args),annotations:{title:n.title??t.name,readOnlyHint:l===`read`,destructiveHint:l===`destructive`},execute:n=>Sr(t,e.context,n)},{signal:c.signal});u&&`then`in u&&u.then(()=>{},()=>{}),a.set(o,t.name),i.set(t.name,()=>{c.abort(),u&&`unregister`in u&&typeof u.unregister==`function`&&u.unregister(),a.delete(o)})}function s(t){let n=t?[t]:[...e.definitions.keys()];for(let t of n){i.get(t)?.(),i.delete(t);let n=e.definitions.get(t),r=n?.agent;n&&r&&o(n,r)}}s();let c=e.onChanged(e=>s(e));return()=>{c();for(let e of i.values())e();i.clear()}}async function Sr(e,t,n){try{let r=ee(n,e.args?.length);return{content:[{type:`text`,text:Cr(await(await yn(e,t))(...r))}]}}catch(e){return{isError:!0,content:[{type:`text`,text:wr(e)}]}}}function Cr(e){return e===void 0?`undefined`:typeof e==`string`?e:JSON.stringify(e,null,2)}function wr(e){if(!(e instanceof Error))return String(e);let t=e.cause instanceof Error?` (cause: ${e.cause.message})`:``;return`${e.name}: ${e.message}${t}`}function Tr(e,t){if(t.backend===`static`)return`static`;let n=t.websocket!==void 0,r=t.sse!==void 0;if(e===`websocket`){if(!n)throw Error(`[devframe] transport: 'websocket' was requested, but this server does not advertise a WebSocket endpoint`);return`websocket`}if(e===`sse`){if(!r)throw Error(`[devframe] transport: 'sse' was requested, but this server does not advertise an SSE endpoint`);return`sse`}if(t.backend===`sse`&&r)return`sse`;if(n)return`websocket`;if(r)return`sse`;throw Error(`[devframe] This server advertises no RPC transport (backend "none"), so there is nothing to connect to. Enable the WebSocket or SSE endpoint on the server, or use its static/MCP surfaces instead.`)}async function Er(e={}){let{baseURL:n=`./`,rpcOptions:r={},cacheOptions:i=!1}=e,a=le(),o=Array.isArray(n)?n:[n],c=await Pn(e),{connectionMeta:l,metaBaseUrl:u,authToken:d}=c,f=o[0]??`./`;try{f=new URL(`.`,u).href}catch{}let p=new fn({functions:[],...typeof e.cacheOptions==`object`?e.cacheOptions:{}}),m={rpc:void 0},h=new bn(m),g=e.webmcp===!1?void 0:xr(h),_,v=!1,y=0,b;function x(){y++,b=void 0,p.clear(),i===!0&&p.updateOptions({functions:[]})}i&&(h.register({name:s.broadcast.cacheInvalidate,type:`event`,handler:x}),a.on(s.client.connectionStatus,x),a.on(s.client.isTrustedUpdated,x));async function S(e){let t=[f,...o.filter(e=>e!==f)].filter(e=>e!=null),n=[];for(let r of t)try{return await fetch(me(e,r)).then(t=>{if(!t.ok)throw Error(`Failed to fetch ${e} from ${r}: ${t.status}`);return t.json()})}catch(e){n.push(e)}throw Error(`Failed to load ${e} from ${t.join(`, `)}`,{cause:n})}let C=e.callTimeout??0,w=C>0?C:1/0,T,ee={authToken:d,connectionMeta:l,metaBaseUrl:u,events:a,clientRpc:h,callTimeout:e.callTimeout,rpcOptions:{...r,async onRequest(e,t,n){let a=performance.now()+w;if(await r.onRequest?.call(this,e,t,n),i===!0&&e.i&&T.isTrusted&&!e.m.startsWith(`anonymous:`)&&e.m!==`devframe:rpc:cacheable-functions`){function t(){if(performance.now()>=a)throw new Q(`timeout`,`[devframe] RPC call "${e.m}" timed out after ${C}ms`)}for(;!b&&(t(),!(v||T.status!==`connected`));){let e=y;b=T.callOptional(`devframe:rpc:cacheable-functions`).then(t=>{e===y&&p.updateOptions({functions:t??[]})}).catch(t=>{throw e===y&&(b=void 0),t}),await b}await b,t()}let o=y;if(i&&e.i&&!v&&T.isTrusted&&p.validate(e.m)){if(p.has(e.m,e.a))return n(p.cached(e.m,e.a));let r=await t(e);o===y&&!v&&p.apply(e,r)}else await t(e)}}},E=Tr(e.transport??`auto`,l);T=E===`static`?await or({fetchJsonFromBases:S}):E===`sse`?Xn({...ee,sseOptions:e.sseOptions}):mr({...ee,wsOptions:e.wsOptions});let D;try{D=new BroadcastChannel(`devframe-auth`)}catch{}let O,k=!1;function te(e){return((...t)=>k||!O?e(...t):O.then(()=>e(...t)))}function ne(){v=!0,x();try{_?.(),g?.()}finally{try{D?.close()}finally{T.close?.()}}}let A={events:a,get isTrusted(){return T.isTrusted},get status(){return T.status},get connectionError(){return T.connectionError},get transport(){return T.transport??E},get connection(){return c},connectionMeta:l,ensureTrusted:T.ensureTrusted,requestTrust:T.requestTrust,requestTrustWithToken:async e=>(An(e),c={...c,authToken:e},T.requestTrustWithToken(e)),requestTrustWithCode:async e=>{let t=await T.requestTrustWithCode(e);if(!t)return!1;An(t),c={...c,authToken:t};try{D?.postMessage({type:`auth-update`,authToken:t})}catch{}return!0},requestAuthCode:e=>T.requestAuthCode(e),call:te(T.call),callEvent:te(T.callEvent),callOptional:te(T.callOptional),client:h,sharedState:void 0,services:void 0,streaming:void 0,cacheManager:p,scope:void 0,close:ne};A.sharedState=Bn(A),A.streaming=lr(A),A.services=zn(A);let re=new Map;A.scope=(e=>{if(!e)return A;let t=re.get(e);return t||(t=yr(A,e),re.set(e,t)),t}),m.rpc=A;function j(){try{return typeof window<`u`&&window.self===window.top}catch{return!1}}async function ie(){if(e.simpleAuth!==!1&&j()&&typeof globalThis.prompt==`function`)for(await A.requestAuthCode().catch(()=>{});!A.isTrusted;){let e=globalThis.prompt(`devframe: enter the authentication code shown in your terminal`);if(e==null)return;let t=e.trim();if(t&&await A.requestTrustWithCode(t))return}}async function ae(){let t=await T.requestTrust(),n=e.otpParam??`devframe_otp`,r=n?await Rn(A,{param:n}):!1;t||r||A.isTrusted||await ie()}return O=ae().then(()=>{k=!0},()=>{k=!0}),l.mcp&&t(async()=>{let{setupBrowserAgentRpcBridge:e}=await import(`./CQTZHv-y.js`);return{setupBrowserAgentRpcBridge:e}},[],import.meta.url).then(({setupBrowserAgentRpcBridge:e})=>{v||(_=e(A))}).catch(()=>{}),D&&(D.onmessage=e=>{e.data?.type===`auth-update`&&e.data.authToken&&A.requestTrustWithToken(e.data.authToken)}),A}var Dr=Er;export{Dr as connectDevframe,i as t};
|
|
3
|
+
`))}}g()}return(async()=>{try{let e=await a(o,{headers:{accept:`text/event-stream`},signal:c.signal});if(!e.ok||!e.body)throw Error(`Devframe SSE stream request failed: ${e.status}`);await v(e.body)}catch(e){if(c.signal.aborted){g();return}h(e instanceof Error?e:Error(String(e)))}})(),{close:()=>{l=!0,c.abort(),d?.cancel().catch(()=>{})},on:e=>{u=e},post:async e=>{let t;try{t=await m}catch{return}if(l)n(Error(`Devframe SSE channel is closed; message dropped`));else try{let n=await a(o,{method:`POST`,headers:{"content-type":`text/plain; charset=utf-8`,[sn]:t},body:e});if(n.status===200){let e=await n.text();e&&u?.(e);return}if(!n.ok)throw Error(`Devframe SSE POST failed: ${n.status}`)}catch(e){n(e instanceof Error?e:Error(String(e)))}},serialize:s.serialize,deserialize:s.deserialize}}function qn(e,t){let{channel:n,rpcOptions:r={}}=t;return b(e,{...n,timeout:-1,...r,proxify:!1})}function Jn(e){let{transport:t,authToken:n,connectionMeta:r,events:i,clientRpc:a,rpcOptions:o={},callTimeout:c=0}=e,l=!1,u=`connecting`,d=null,f=Promise.withResolvers();function p(e,t=null){if(t?d=t:e===`connected`&&(d=null),e===u)return;let n=u;u=e,i.emit(s.client.connectionStatus,e,n)}let m=new Set;function h(e){for(let t of[...m])t.reject(e)}function g(){return u===`disconnected`||u===`error`?new Q(`connection`,`[devframe] Not connected to the devframe server`,{cause:d??void 0}):u===`unauthorized`?new Q(`auth`,`[devframe] Not authorized by the devframe server`,{cause:d??void 0}):null}function _(e,t){return new Promise((n,r)=>{let a=!1,o,l={reject(e){a||(u(),i.emit(s.client.error,e,t),r(e))}};function u(){a=!0,m.delete(l),o&&clearTimeout(o)}m.add(l),c>0&&(o=setTimeout(()=>{l.reject(new Q(`timeout`,`[devframe] RPC call "${t}" timed out after ${c}ms`))},c)),e.then(e=>{a||(u(),n(e))},e=>{if(a)return;u();let n=e instanceof Error?e:Error(String(e));i.emit(s.client.error,n,t),r(n)})})}let v=new Map;for(let e of r.jsonSerializableMethods??[])v.set(e,{jsonSerializable:!0});let y=e.createChannel({definitions:v,onError(e){p(`error`,e),i.emit(s.client.connectionError,e),h(new Q(`connection`,`[devframe] Connection to the devframe server failed`,{cause:e}))},onDisconnected(){u!==`error`&&p(`disconnected`),h(new Q(`connection`,`[devframe] Disconnected from the devframe server`,{cause:d??void 0}))}}),b=qn(a.functions,{channel:y,rpcOptions:o});a.register({name:s.broadcast.authRevoked,type:`event`,handler:()=>{l=!1;let e=new Q(`auth`,`[devframe] The devframe server revoked this client's trust`);p(`unauthorized`,e),i.emit(s.client.connectionError,e),h(e),i.emit(s.client.isTrustedUpdated,!1)}});let x=n;async function S(e){x=e;let t=await b.$call(`anonymous:devframe:auth`,{authToken:e,ua:navigator.userAgent,origin:location.origin});if(l=t.isTrusted,l)f.resolve(!0),p(`connected`);else{let e=new Q(`auth`,`[devframe] The devframe server refused this client's credentials`);p(`unauthorized`,e),i.emit(s.client.connectionError,e)}return i.emit(s.client.isTrustedUpdated,l),t.isTrusted}async function C(e){let t=(await b.$call(`anonymous:devframe:auth:exchange`,{code:e,ua:navigator.userAgent,origin:location.origin}))?.authToken??null;return t&&(x=t,l=!0,f.resolve(!0),p(`connected`),i.emit(s.client.isTrustedUpdated,!0)),t}async function w(e={}){await b.$call(`anonymous:devframe:auth:request-code`,{ua:navigator.userAgent,origin:location.origin,...e.reissue?{reissue:!0}:{}})}async function T(){return l?!0:S(x??``)}async function ee(e=6e4){if(l&&f.resolve(!0),e<=0)return f.promise;let t;try{return await Promise.race([f.promise,new Promise((n,r)=>{t=setTimeout(()=>{r(Error(`[devframe] Timeout waiting for rpc to be trusted`))},e)})]),l}finally{clearTimeout(t)}}return{transport:t,get isTrusted(){return l},get status(){return u},get connectionError(){return d},requestTrust:T,requestTrustWithToken:S,requestTrustWithCode:C,requestAuthCode:w,ensureTrusted:ee,call:(...e)=>{let t=String(e[0]),n=g();return n?(i.emit(s.client.error,n,t),Promise.reject(n)):_(b.$call(...e),t)},callEvent:(...e)=>{let t=g();if(t)i.emit(s.client.error,t,String(e[0]));else return b.$callEvent(...e)},callOptional:(...e)=>{let t=String(e[0]),n=g();return n?(i.emit(s.client.error,n,t),Promise.reject(n)):_(b.$callOptional(...e),t)},close:()=>{y.close()}}}function Yn(e,t,n){let r=(()=>{try{return new URL(t,n.href)}catch{return new URL(n.href)}})();if(e&&typeof e==`object`){if(e.host!=null||e.port!=null){let t=e.host??`${r.hostname}:${e.port}`;return new URL(e.path??`/`,`${r.protocol}//${t}`).href}return new URL(e.path??``,r).href}let i=e??``;return/^https?:\/\//i.test(i)?i:new URL(i,r).href}function Xn(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},sseOptions:s={},callTimeout:c=0}=e,l=Yn(n.sse,r??`./`,location);return Jn({transport:`sse`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>Kn({url:l,authToken:t,definitions:e.definitions,...s,onConnected(){s.onConnected?.()},onError(t){e.onError(t),s.onError?.(t)},onDisconnected(){e.onDisconnected(),s.onDisconnected?.()}})})}function Zn(e){let{name:t,message:n,cause:r,...i}=e,a=r instanceof Error?r:Qn(r)?Zn(r):r,o=a===void 0?Error(n):Error(n,{cause:a});return o.name=t,Object.assign(o,i),o}function Qn(e){return typeof e==`object`&&!!e&&typeof e.message==`string`&&typeof e.name==`string`}function $n(e){return typeof e==`object`&&!!e&&e.type===`static`&&typeof e.path==`string`}function er(e){return typeof e==`object`&&!!e&&e.type===`query`&&typeof e.records==`object`&&e.records!==null}function tr(e){return typeof e==`object`&&!!e&&(`output`in e||`error`in e)}function nr(e){if(e.error)throw Zn(e.error);return e.output}function rr(e){return e.some(e=>e!=null)}function ir(e){return typeof e==`object`&&e&&`serialization`in e&&`data`in e?e.data:e}function ar(e,t){let n=new Map,r=new Map;function i(e,t){return t===`structured-clone`&&Array.isArray(e)?Jt(e):e}function a(e,t){return i(ir(e),t)}async function o(e){n.has(e.path)||n.set(e.path,t(e.path).then(t=>a(t,e.serialization)));let r=await n.get(e.path);return tr(r)?nr(r):r}async function s(e,n){return r.has(e)||r.set(e,t(e).then(e=>a(e,n))),await r.get(e)}async function c(t,n){if(!(t in e))throw Error(`[devframe-rpc] Function "${t}" not found in dump store`);let r=e[t];if($n(r)){if(rr(n))throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`);return await o(r)}if(er(r)){let e=ce(n),i=r.records[e];if(i)return nr(await s(i,r.serialization));if(r.fallback)return nr(await s(r.fallback,r.serialization));throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}if(!rr(n))return r;throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}return{call:async(e,t)=>await c(e,t),callOptional:async(t,n)=>{if(t in e)return await c(t,n)},callEvent:async(e,t)=>{}}}async function or(e){let t=ar(await e.fetchJsonFromBases(cn),e.fetchJsonFromBases);return{transport:`static`,isTrusted:!0,status:`connected`,connectionError:null,requestTrust:async()=>!0,requestTrustWithToken:async()=>!0,requestTrustWithCode:async()=>null,requestAuthCode:async()=>{},ensureTrusted:async()=>!0,call:(...e)=>t.call(e[0],e.slice(1)),callEvent:(...e)=>t.callEvent(e[0],e.slice(1)),callOptional:(...e)=>t.callOptional(e[0],e.slice(1)),close:()=>{}}}var sr=``;function cr(e,t){return`${e}${sr}${t}`}function lr(e){let t=new Map,n=new Map;e.client.register({name:s.broadcast.streamingChunk,type:`event`,handler(e,n,r,i){t.get(cr(e,n))?._push(r,i)}}),e.client.register({name:s.broadcast.streamingEnd,type:`event`,handler(e,n,r){let i=cr(e,n),a=t.get(i);a&&(a._end(r),t.delete(i))}}),e.client.register({name:s.broadcast.streamingUploadCancel,type:`event`,handler(e,t){let r=cr(e,t),i=n.get(r);i&&(i.abort(`server cancelled upload`),n.delete(r))}}),e.events.on(s.client.isTrustedUpdated,n=>{if(n)for(let[n,r]of t){if(r.cancelled||r.done)continue;let t=n.indexOf(sr);if(t<0)continue;let i=n.slice(0,t),a=n.slice(t+1);e.callEvent(`devframe:streaming:subscribe`,i,a,{afterSeq:r.lastSeenSeq})}});function r(n,r,i={}){let a=cr(n,r),o=t.get(a);if(o)return o;let c=en({id:r,highWaterMark:i.highWaterMark,onOverflow(e){console.warn(`[devframe] DF0029: Stream "${n}#${r}" dropped ${e} chunk(s) after exceeding the client high-water mark.`)},onCancel(){e.callEvent(`devframe:streaming:cancel`,n,r),t.delete(a)}});if(t.set(a,c),e.isTrusted)e.callEvent(`devframe:streaming:subscribe`,n,r,{afterSeq:0});else{let i=e.events.on(s.client.isTrustedUpdated,o=>{o&&(i(),t.has(a)&&!c.cancelled&&!c.done&&e.callEvent(`devframe:streaming:subscribe`,n,r,{afterSeq:c.lastSeenSeq}))})}return c}function i(t,r){let i=cr(t,r),a=n.get(i);if(a)return a;let o=$t({id:r});return o.events.on(`chunk`,(n,i)=>{e.callEvent(`devframe:streaming:upload-chunk`,t,r,n,i)}),o.events.on(`end`,a=>{e.callEvent(`devframe:streaming:upload-end`,t,r,a),n.delete(i)}),n.set(i,o),o}return{subscribe:r,upload:i}}function ur(){}var dr=new Map;function fr(e){let t=e.url;e.authToken&&(t=`${t}?${dn}=${encodeURIComponent(e.authToken)}`);let n=new WebSocket(t),{onConnected:r=ur,onError:i=ur,onDisconnected:a=ur,definitions:o=dr}=e;n.addEventListener(`open`,e=>{r(e)}),n.addEventListener(`error`,e=>{let t=e instanceof Error?e:Error(e.type);i(t)}),n.addEventListener(`close`,e=>{a(e)});let s=Hn(o);return{close:()=>{n.close()},on:e=>{n.addEventListener(`message`,t=>{e(t.data)})},post:e=>{if(n.readyState===WebSocket.OPEN)n.send(e);else if(n.readyState===WebSocket.CONNECTING){let t=()=>{i(),n.readyState===WebSocket.OPEN&&n.send(e)},r=()=>i();function i(){n.removeEventListener(`open`,t),n.removeEventListener(`close`,r)}n.addEventListener(`open`,t),n.addEventListener(`close`,r)}else i(Error(`Devframe WebSocket is not open; message dropped`))},serialize:s.serialize,deserialize:s.deserialize}}function pr(e,t,n){let r=(()=>{try{return new URL(t,n.href)}catch{return new URL(n.href)}})(),i=r.protocol===`https:`?`wss:`:`ws:`;if(e&&typeof e==`object`){if(e.host!=null||e.port!=null){let t=e.host??`${r.hostname}:${e.port}`,n=new URL(e.path??`/`,`${i}//${t}`);return n.protocol=i,n.href}let t=new URL(e.path??``,r);return t.protocol=i,t.href}if(typeof e==`number`)return`${i}//${r.hostname}:${e}`;let a=e??``;if(/^wss?:\/\//i.test(a))return a;if(/^https?:\/\//i.test(a))return he(a,/^https/i.test(a)?`wss://`:`ws://`);let o=new URL(a,r);return o.protocol=i,o.href}function mr(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},wsOptions:s={},callTimeout:c=0}=e,l=pr(n.websocket,r??`./`,location);return Jn({transport:`websocket`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>fr({url:l,authToken:t,definitions:e.definitions,...s,onConnected(e){s.onConnected?.(e)},onError(t){e.onError(t),s.onError?.(t)},onDisconnected(t){e.onDisconnected(),s.onDisconnected?.(t)}})})}function hr(e){return e.includes(`:`)}function $(e,t){return hr(t)?t:`${e}:${t}`}function gr(e){return{async get(t){return(await e()).value()?.[t]},async set(t,n){(await e()).mutate(e=>{if(e===void 0)return{[t]:n};e[t]=n})},async delete(t){(await e()).mutate(e=>{e!==void 0&&delete e[t]})},async all(){return(await e()).value()??{}},async onChange(t){return(await e()).on(`updated`,e=>t(e??{}))}}}function _r(e,t,n){let r=`devframe:settings:${n}:${t}`,i;function a(){return i||=(async()=>(await e.ensureTrusted(),e.sharedState.get(r)))().catch(e=>{throw i=void 0,e}),i}return gr(a)}function vr(e,t){return{global:_r(e,t,`global`),project:_r(e,t,`project`)}}function yr(e,t){return{namespace:t,base:e,rpc:{namespace:t,register(n){if(hr(n.name))throw Error(`[devframe] Scoped client RPC registration for namespace "${t}" received an already-namespaced function name "${n.name}". Pass a bare name without a ":" separator.`);e.client.register({...n,name:`${t}:${n.name}`})},call:((n,...r)=>e.call($(t,n),...r)),callEvent:((n,...r)=>e.callEvent($(t,n),...r)),callOptional:((n,...r)=>e.callOptional($(t,n),...r)),sharedState:((n,r)=>e.sharedState.get($(t,n),r)),streaming:{subscribe:(n,r,i)=>e.streaming.subscribe($(t,n),r,i),upload:(n,r)=>e.streaming.upload($(t,n),r)}},settings:vr(e,t),scope:e.scope}}function br(){if(typeof document<`u`){let e=document.modelContext;if(e)return e}if(typeof navigator<`u`){let e=navigator.modelContext;if(e)return e}}function xr(e,t={}){let n=t.modelContext??br();if(!n)return()=>{};let r=n,i=new Map,a=new Map;function o(t,n){let o=rn(t.name),s=a.get(o);if(s&&s!==t.name){console.warn(`[devframe] WebMCP tool name "${o}" (from "${t.name}") collides with "${s}"; keeping the first registration.`);return}let c=new AbortController,l=x(t.type,n),u=r.registerTool({name:o,description:n.description,inputSchema:w(t.args),annotations:{title:n.title??t.name,readOnlyHint:l===`read`,destructiveHint:l===`destructive`},execute:n=>Sr(t,e.context,n)},{signal:c.signal});u&&`then`in u&&u.then(()=>{},()=>{}),a.set(o,t.name),i.set(t.name,()=>{c.abort(),u&&`unregister`in u&&typeof u.unregister==`function`&&u.unregister(),a.delete(o)})}function s(t){let n=t?[t]:[...e.definitions.keys()];for(let t of n){i.get(t)?.(),i.delete(t);let n=e.definitions.get(t),r=n?.agent;n&&r&&o(n,r)}}s();let c=e.onChanged(e=>s(e));return()=>{c();for(let e of i.values())e();i.clear()}}async function Sr(e,t,n){try{let r=ee(n,e.args?.length);return{content:[{type:`text`,text:Cr(await(await yn(e,t))(...r))}]}}catch(e){return{isError:!0,content:[{type:`text`,text:wr(e)}]}}}function Cr(e){return e===void 0?`undefined`:typeof e==`string`?e:JSON.stringify(e,null,2)}function wr(e){if(!(e instanceof Error))return String(e);let t=e.cause instanceof Error?` (cause: ${e.cause.message})`:``;return`${e.name}: ${e.message}${t}`}function Tr(e,t){if(t.backend===`static`)return`static`;let n=t.websocket!==void 0,r=t.sse!==void 0;if(e===`websocket`){if(!n)throw Error(`[devframe] transport: 'websocket' was requested, but this server does not advertise a WebSocket endpoint`);return`websocket`}if(e===`sse`){if(!r)throw Error(`[devframe] transport: 'sse' was requested, but this server does not advertise an SSE endpoint`);return`sse`}if(t.backend===`sse`&&r)return`sse`;if(n)return`websocket`;if(r)return`sse`;throw Error(`[devframe] This server advertises no RPC transport (backend "none"), so there is nothing to connect to. Enable the WebSocket or SSE endpoint on the server, or use its static/MCP surfaces instead.`)}async function Er(e={}){let{baseURL:n=`./`,rpcOptions:r={},cacheOptions:i=!1}=e,a=le(),o=Array.isArray(n)?n:[n],c=await Pn(e),{connectionMeta:l,metaBaseUrl:u,authToken:d}=c,f=o[0]??`./`;try{f=new URL(`.`,u).href}catch{}let p=new fn({functions:[],...typeof e.cacheOptions==`object`?e.cacheOptions:{}}),m={rpc:void 0},h=new bn(m),g=e.webmcp===!1?void 0:xr(h),_,v=!1,y=0,b;function x(){y++,b=void 0,p.clear(),i===!0&&p.updateOptions({functions:[]})}i&&(h.register({name:s.broadcast.cacheInvalidate,type:`event`,handler:x}),a.on(s.client.connectionStatus,x),a.on(s.client.isTrustedUpdated,x));async function S(e){let t=[f,...o.filter(e=>e!==f)].filter(e=>e!=null),n=[];for(let r of t)try{return await fetch(me(e,r)).then(t=>{if(!t.ok)throw Error(`Failed to fetch ${e} from ${r}: ${t.status}`);return t.json()})}catch(e){n.push(e)}throw Error(`Failed to load ${e} from ${t.join(`, `)}`,{cause:n})}let C=e.callTimeout??0,w=C>0?C:1/0,T,ee={authToken:d,connectionMeta:l,metaBaseUrl:u,events:a,clientRpc:h,callTimeout:e.callTimeout,rpcOptions:{...r,async onRequest(e,t,n){let a=performance.now()+w;if(await r.onRequest?.call(this,e,t,n),i===!0&&e.i&&T.isTrusted&&!e.m.startsWith(`anonymous:`)&&e.m!==`devframe:rpc:cacheable-functions`){function t(){if(performance.now()>=a)throw new Q(`timeout`,`[devframe] RPC call "${e.m}" timed out after ${C}ms`)}for(;!b&&(t(),!(v||T.status!==`connected`));){let e=y;b=T.callOptional(`devframe:rpc:cacheable-functions`).then(t=>{e===y&&p.updateOptions({functions:t??[]})}).catch(t=>{throw e===y&&(b=void 0),t}),await b}await b,t()}let o=y;if(i&&e.i&&!v&&T.isTrusted&&p.validate(e.m)){if(p.has(e.m,e.a))return n(p.cached(e.m,e.a));let r=await t(e);o===y&&!v&&p.apply(e,r)}else await t(e)}}},E=Tr(e.transport??`auto`,l);T=E===`static`?await or({fetchJsonFromBases:S}):E===`sse`?Xn({...ee,sseOptions:e.sseOptions}):mr({...ee,wsOptions:e.wsOptions});let D;try{D=new BroadcastChannel(`devframe-auth`)}catch{}let O,k=!1;function te(e){return((...t)=>k||!O?e(...t):O.then(()=>e(...t)))}function ne(){v=!0,x();try{_?.(),g?.()}finally{try{D?.close()}finally{T.close?.()}}}let A={events:a,get isTrusted(){return T.isTrusted},get status(){return T.status},get connectionError(){return T.connectionError},get transport(){return T.transport??E},get connection(){return c},connectionMeta:l,ensureTrusted:T.ensureTrusted,requestTrust:T.requestTrust,requestTrustWithToken:async e=>(An(e),c={...c,authToken:e},T.requestTrustWithToken(e)),requestTrustWithCode:async e=>{let t=await T.requestTrustWithCode(e);if(!t)return!1;An(t),c={...c,authToken:t};try{D?.postMessage({type:`auth-update`,authToken:t})}catch{}return!0},requestAuthCode:e=>T.requestAuthCode(e),call:te(T.call),callEvent:te(T.callEvent),callOptional:te(T.callOptional),client:h,sharedState:void 0,services:void 0,streaming:void 0,cacheManager:p,scope:void 0,close:ne};A.sharedState=Bn(A),A.streaming=lr(A),A.services=zn(A);let re=new Map;A.scope=(e=>{if(!e)return A;let t=re.get(e);return t||(t=yr(A,e),re.set(e,t)),t}),m.rpc=A;function j(){try{return typeof window<`u`&&window.self===window.top}catch{return!1}}async function ie(){if(e.simpleAuth!==!1&&j()&&typeof globalThis.prompt==`function`)for(await A.requestAuthCode().catch(()=>{});!A.isTrusted;){let e=globalThis.prompt(`devframe: enter the authentication code shown in your terminal`);if(e==null)return;let t=e.trim();if(t&&await A.requestTrustWithCode(t))return}}async function ae(){let t=await T.requestTrust(),n=e.otpParam??`devframe_otp`,r=n?await Rn(A,{param:n}):!1;t||r||A.isTrusted||await ie()}return O=ae().then(()=>{k=!0},()=>{k=!0}),l.mcp&&t(async()=>{let{setupBrowserAgentRpcBridge:e}=await import(`./D8T7CxEJ.js`);return{setupBrowserAgentRpcBridge:e}},[],import.meta.url).then(({setupBrowserAgentRpcBridge:e})=>{v||(_=e(A))}).catch(()=>{}),D&&(D.onmessage=e=>{e.data?.type===`auth-update`&&e.data.authToken&&A.requestTrustWithToken(e.data.authToken)}),A}var Dr=Er;export{Dr as connectDevframe,i as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"
|
|
1
|
+
{"id":"0a20d338-7497-4d3f-82e8-9f5ae0d7be3d","timestamp":1792055145245}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"0a20d338-7497-4d3f-82e8-9f5ae0d7be3d","timestamp":1792055145245,"prerendered":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--ff-bg:#fff;--ff-fg:#0a0a0a;--ff-muted:#0a0a0a9e;--ff-line:#0a0a0a1f;--ff-line-strong:#0a0a0a66;--ff-hover:#0a0a0a0d;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}html.dark{--ff-bg:#0a0a0a;--ff-fg:#fafafa;--ff-muted:#fafafa9e;--ff-line:#fafafa2b;--ff-line-strong:#fafafa66;--ff-hover:#fafafa12;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}html{scrollbar-gutter:stable}body,html{background:var(--ff-bg);color:var(--ff-fg)}body{-webkit-font-smoothing:antialiased}:lang(ja) body{font-family:var(--ff-font),ui-sans-serif,system-ui,sans-serif;font-feature-settings:var(--ff-features);line-height:1.8}::selection{background:var(--ff-fg);color:var(--ff-bg)}.display{letter-spacing:-.045em;text-wrap:balance;line-height:.95}:lang(ja) .display,:lang(zh) .display{letter-spacing:0;word-break:auto-phrase;line-height:1.2}.hero-title{font-size:calc(clamp(2.75rem,6vw,4.75rem))}:lang(ja) .hero-title,:lang(zh) .hero-title{font-size:calc(clamp(2.25rem,4.4vw,3.5rem))}@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--un-bg-opacity:100%;--un-border-opacity:100%;--un-leading:initial;--un-outline-opacity:100%;--un-outline-style:solid;--un-text-opacity:100%}}@property --un-text-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-leading{syntax:"*";inherits:false}@property --un-outline-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --un-border-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-bg-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-inset-ring-color{syntax:"*";inherits:false}@property --un-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-inset-shadow-color{syntax:"*";inherits:false}@property --un-ring-color{syntax:"*";inherits:false}@property --un-ring-inset{syntax:"*";inherits:false}@property --un-ring-offset-color{syntax:"*";inherits:false}@property --un-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --un-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-shadow-color{syntax:"*";inherits:false}@property --un-blur{syntax:"*";inherits:false}@property --un-brightness{syntax:"*";inherits:false}@property --un-contrast{syntax:"*";inherits:false}@property --un-drop-shadow{syntax:"*";inherits:false}@property --un-grayscale{syntax:"*";inherits:false}@property --un-hue-rotate{syntax:"*";inherits:false}@property --un-invert{syntax:"*";inherits:false}@property --un-saturate{syntax:"*";inherits:false}@property --un-sepia{syntax:"*";inherits:false}@property --un-numeric-figure{syntax:"*";inherits:false}@property --un-numeric-fraction{syntax:"*";inherits:false}@property --un-numeric-spacing{syntax:"*";inherits:false}@property --un-ordinal{syntax:"*";inherits:false}@property --un-slashed-zero{syntax:"*";inherits:false}:host,:root{--spacing:.25rem;--colors-amber-DEFAULT:oklch(82.8% .189 84.429);--fontWeight-semibold:600;--leading-relaxed:1.625;--default-transition-timingFunction:cubic-bezier(.4, 0, .2, 1);--default-transition-duration:.15s;--fontWeight-medium:500;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--container-6xl:72rem;--container-md:28rem;--fontWeight-normal:400;--tracking-tight:-.025em;--container-sm:24rem;--font-sans:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--tracking-wide:.025em;--leading-none:1;--radius-none:0;--colors-white:#fff;--colors-neutral-950:oklch(14.5% 0 0);--colors-neutral-500:oklch(55.6% 0 0);--text-xs-fontSize:.75rem;--text-xs-lineHeight:1rem;--text-base-fontSize:1rem;--text-base-lineHeight:1.5rem;--text-4xl-fontSize:2.25rem;--text-4xl-lineHeight:2.5rem;--text-sm-fontSize:.875rem;--text-sm-lineHeight:1.25rem;--text-2xl-fontSize:1.5rem;--text-2xl-lineHeight:2rem;--text-xl-fontSize:1.25rem;--text-xl-lineHeight:1.75rem;--text-3xl-fontSize:1.875rem;--text-3xl-lineHeight:2.25rem;--default-font-family:var(--font-sans);--default-monoFont-family:var(--font-mono)}*,::backdrop,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-featureSettings,normal);font-variation-settings:var(--default-font-variationSettings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-monoFont-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-monoFont-featureSettings,normal);font-variation-settings:var(--default-monoFont-variationSettings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden~=until-found])){display:none!important}.i-ph-arrow-counter-clockwise{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M224%20128a96%2096%200%200%201-94.71%2096H128a95.38%2095.38%200%200%201-65.9-26.2%208%208%200%200%201%2011-11.63%2080%2080%200%201%200-1.67-114.78%203%203%200%200%201-.26.25L44.59%2096H72a8%208%200%200%201%200%2016H24a8%208%200%200%201-8-8V56a8%208%200%200%201%2016%200v29.8L60.25%2060A96%2096%200%200%201%20224%20128%22%2F%3E%3C%2Fsvg%3E)}.i-ph-arrow-counter-clockwise,.i-ph-bookmark-simple,.i-ph-check,.i-ph-circle-notch,.i-ph-copy,.i-ph-download-simple,.i-ph-floppy-disk,.i-ph-github-logo,.i-ph-hammer,.i-ph-list-magnifying-glass,.i-ph-moon,.i-ph-puzzle-piece,.i-ph-shuffle,.i-ph-sliders-horizontal,.i-ph-sun,.i-ph-translate,.i-ph-warning,.i-ph-x{-webkit-mask:var(--un-icon) no-repeat;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;color:inherit;background-color:currentColor;width:1.15em;height:1.15em;-webkit-mask-size:100% 100%;mask-size:100% 100%}.i-ph-bookmark-simple{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M184%2032H72a16%2016%200%200%200-16%2016v176a8%208%200%200%200%2012.24%206.78L128%20193.43l59.77%2037.35A8%208%200%200%200%20200%20224V48a16%2016%200%200%200-16-16m0%20177.57-51.77-32.35a8%208%200%200%200-8.48%200L72%20209.57V48h112Z%22%2F%3E%3C%2Fsvg%3E)}.i-ph-check{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22m229.66%2077.66-128%20128a8%208%200%200%201-11.32%200l-56-56a8%208%200%200%201%2011.32-11.32L96%20188.69%20218.34%2066.34a8%208%200%200%201%2011.32%2011.32%22%2F%3E%3C%2Fsvg%3E)}.i-ph-circle-notch{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M232%20128a104%20104%200%200%201-208%200c0-41%2023.81-78.36%2060.66-95.27a8%208%200%200%201%206.68%2014.54C60.15%2061.59%2040%2093.27%2040%20128a88%2088%200%200%200%20176%200c0-34.73-20.15-66.41-51.34-80.73a8%208%200%200%201%206.68-14.54C208.19%2049.64%20232%2087%20232%20128%22%2F%3E%3C%2Fsvg%3E)}.i-ph-copy{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M216%2032H88a8%208%200%200%200-8%208v40H40a8%208%200%200%200-8%208v128a8%208%200%200%200%208%208h128a8%208%200%200%200%208-8v-40h40a8%208%200%200%200%208-8V40a8%208%200%200%200-8-8m-56%20176H48V96h112Zm48-48h-32V88a8%208%200%200%200-8-8H96V48h112Z%22%2F%3E%3C%2Fsvg%3E)}.i-ph-download-simple{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M224%20144v64a8%208%200%200%201-8%208H40a8%208%200%200%201-8-8v-64a8%208%200%200%201%2016%200v56h160v-56a8%208%200%200%201%2016%200m-101.66%205.66a8%208%200%200%200%2011.32%200l40-40a8%208%200%200%200-11.32-11.32L136%20124.69V32a8%208%200%200%200-16%200v92.69L93.66%2098.34a8%208%200%200%200-11.32%2011.32Z%22%2F%3E%3C%2Fsvg%3E)}.i-ph-floppy-disk{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M219.31%2072%20184%2036.69A15.86%2015.86%200%200%200%20172.69%2032H48a16%2016%200%200%200-16%2016v160a16%2016%200%200%200%2016%2016h160a16%2016%200%200%200%2016-16V83.31A15.86%2015.86%200%200%200%20219.31%2072M168%20208H88v-56h80Zm40%200h-24v-56a16%2016%200%200%200-16-16H88a16%2016%200%200%200-16%2016v56H48V48h124.69L208%2083.31ZM160%2072a8%208%200%200%201-8%208H96a8%208%200%200%201%200-16h56a8%208%200%200%201%208%208%22%2F%3E%3C%2Fsvg%3E)}.i-ph-github-logo{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M208.31%2075.68A59.78%2059.78%200%200%200%20202.93%2028a8%208%200%200%200-6.93-4%2059.75%2059.75%200%200%200-48%2024h-24a59.75%2059.75%200%200%200-48-24%208%208%200%200%200-6.93%204%2059.78%2059.78%200%200%200-5.38%2047.68A58.14%2058.14%200%200%200%2056%20104v8a56.06%2056.06%200%200%200%2048.44%2055.47A39.8%2039.8%200%200%200%2096%20192v8H72a24%2024%200%200%201-24-24%2040%2040%200%200%200-40-40%208%208%200%200%200%200%2016%2024%2024%200%200%201%2024%2024%2040%2040%200%200%200%2040%2040h24v16a8%208%200%200%200%2016%200v-40a24%2024%200%200%201%2048%200v40a8%208%200%200%200%2016%200v-40a39.8%2039.8%200%200%200-8.44-24.53A56.06%2056.06%200%200%200%20216%20112v-8a58.14%2058.14%200%200%200-7.69-28.32M200%20112a40%2040%200%200%201-40%2040h-48a40%2040%200%200%201-40-40v-8a41.74%2041.74%200%200%201%206.9-22.48%208%208%200%200%200%201.1-7.69%2043.8%2043.8%200%200%201%20.79-33.58%2043.88%2043.88%200%200%201%2032.32%2020.06%208%208%200%200%200%206.71%203.69h32.35a8%208%200%200%200%206.74-3.69%2043.87%2043.87%200%200%201%2032.32-20.06%2043.8%2043.8%200%200%201%20.77%2033.58%208.09%208.09%200%200%200%201%207.65%2041.7%2041.7%200%200%201%207%2022.52Z%22%2F%3E%3C%2Fsvg%3E)}.i-ph-hammer{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22m251.34%20112-67.46-67.92a96.1%2096.1%200%200%200-135.77%200l-.09.09L34.25%2058.4a8%208%200%200%200%2011.49%2011.13l13.73-14.18a80%2080%200%200%201%2018.71-13.9L124.68%2088l-96%2096a16%2016%200%200%200%200%2022.63l20.69%2020.69a16%2016%200%200%200%2022.63%200l96-96%2014.34%2014.34L200%20163.3a16%2016%200%200%200%2022.63%200l28.69-28.69a16%2016%200%200%200%20.02-22.61M60.68%20216%2040%20195.31l68-68L128.68%20148Zm101.66-101.68L140%20136.67%20119.31%20116l22.35-22.35a8%208%200%200%200%200-11.32L94.32%2035a80%2080%200%200%201%2078.23%2020.41l44.22%2044.51L188%20128.66l-14.34-14.34a8%208%200%200%200-11.32%200m49%2037.66-12-12L228%20111.25l12%2012Z%22%2F%3E%3C%2Fsvg%3E)}.i-ph-list-magnifying-glass{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M32%2064a8%208%200%200%201%208-8h176a8%208%200%200%201%200%2016H40a8%208%200%200%201-8-8m8%2072h72a8%208%200%200%200%200-16H40a8%208%200%200%200%200%2016m88%2048H40a8%208%200%200%200%200%2016h88a8%208%200%200%200%200-16m109.66%2013.66a8%208%200%200%201-11.32%200L206%20177.36A40%2040%200%201%201%20217.36%20166l20.3%2020.3a8%208%200%200%201%200%2011.36M184%20168a24%2024%200%201%200-24-24%2024%2024%200%200%200%2024%2024%22%2F%3E%3C%2Fsvg%3E)}.i-ph-moon{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M233.54%20142.23a8%208%200%200%200-8-2%2088.08%2088.08%200%200%201-109.8-109.8%208%208%200%200%200-10-10%20104.84%20104.84%200%200%200-52.91%2037A104%20104%200%200%200%20136%20224a103.1%20103.1%200%200%200%2062.52-20.88%20104.84%20104.84%200%200%200%2037-52.91%208%208%200%200%200-1.98-7.98m-44.64%2048.11A88%2088%200%200%201%2065.66%2067.11a89%2089%200%200%201%2031.4-26A106%20106%200%200%200%2096%2056a104.11%20104.11%200%200%200%20104%20104%20106%20106%200%200%200%2014.92-1.06%2089%2089%200%200%201-26.02%2031.4%22%2F%3E%3C%2Fsvg%3E)}.i-ph-puzzle-piece{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M220.27%20158.54a8%208%200%200%200-7.7-.46%2020%2020%200%201%201%200-36.16%208%208%200%200%200%2011.43-7.23V72a16%2016%200%200%200-16-16h-36.22a35%2035%200%200%200%20.22-4%2036.1%2036.1%200%200%200-11.36-26.24%2036%2036%200%200%200-60.55%2023.62%2036.6%2036.6%200%200%200%20.14%206.62H64a16%2016%200%200%200-16%2016v32.22a35%2035%200%200%200-4-.22%2036.12%2036.12%200%200%200-26.24%2011.36%2035.7%2035.7%200%200%200-9.69%2027%2036.08%2036.08%200%200%200%2033.31%2033.6%2035.7%2035.7%200%200%200%206.62-.14V208a16%2016%200%200%200%2016%2016h144a16%2016%200%200%200%2016-16v-42.69a8%208%200%200%200-3.73-6.77M208%20208H64v-42.69a8%208%200%200%200-11.43-7.23%2020%2020%200%201%201%200-36.16A8%208%200%200%200%2064%20114.69V72h46.69a8%208%200%200%200%207.23-11.43%2020%2020%200%201%201%2036.16%200A8%208%200%200%200%20161.31%2072H208v32.23a35.7%2035.7%200%200%200-6.62-.14A36%2036%200%200%200%20204%20176a35%2035%200%200%200%204-.22Z%22%2F%3E%3C%2Fsvg%3E)}.i-ph-shuffle{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M237.66%20178.34a8%208%200%200%201%200%2011.32l-24%2024a8%208%200%200%201-11.32-11.32L212.69%20192h-11.75a72.12%2072.12%200%200%201-58.59-30.15l-41.72-58.4A56.1%2056.1%200%200%200%2055.06%2080H32a8%208%200%200%201%200-16h23.06a72.12%2072.12%200%200%201%2058.59%2030.15l41.72%2058.4A56.1%2056.1%200%200%200%20200.94%20176h11.75l-10.35-10.34a8%208%200%200%201%2011.32-11.32ZM143%20107a8%208%200%200%200%2011.16-1.86l1.2-1.67A56.1%2056.1%200%200%201%20200.94%2080h11.75l-10.35%2010.34a8%208%200%200%200%2011.32%2011.32l24-24a8%208%200%200%200%200-11.32l-24-24a8%208%200%200%200-11.32%2011.32L212.69%2064h-11.75a72.12%2072.12%200%200%200-58.59%2030.15l-1.2%201.67A8%208%200%200%200%20143%20107m-30%2042a8%208%200%200%200-11.16%201.86l-1.2%201.67A56.1%2056.1%200%200%201%2055.06%20176H32a8%208%200%200%200%200%2016h23.06a72.12%2072.12%200%200%200%2058.59-30.15l1.2-1.67A8%208%200%200%200%20113%20149%22%2F%3E%3C%2Fsvg%3E)}.i-ph-sliders-horizontal{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M40%2088h33a32%2032%200%200%200%2062%200h81a8%208%200%200%200%200-16h-81a32%2032%200%200%200-62%200H40a8%208%200%200%200%200%2016m64-24a16%2016%200%201%201-16%2016%2016%2016%200%200%201%2016-16m112%20104h-17a32%2032%200%200%200-62%200H40a8%208%200%200%200%200%2016h97a32%2032%200%200%200%2062%200h17a8%208%200%200%200%200-16m-48%2024a16%2016%200%201%201%2016-16%2016%2016%200%200%201-16%2016%22%2F%3E%3C%2Fsvg%3E)}.i-ph-sun{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M120%2040V16a8%208%200%200%201%2016%200v24a8%208%200%200%201-16%200m72%2088a64%2064%200%201%201-64-64%2064.07%2064.07%200%200%201%2064%2064m-16%200a48%2048%200%201%200-48%2048%2048.05%2048.05%200%200%200%2048-48M58.34%2069.66a8%208%200%200%200%2011.32-11.32l-16-16a8%208%200%200%200-11.32%2011.32Zm0%20116.68-16%2016a8%208%200%200%200%2011.32%2011.32l16-16a8%208%200%200%200-11.32-11.32M192%2072a8%208%200%200%200%205.66-2.34l16-16a8%208%200%200%200-11.32-11.32l-16%2016A8%208%200%200%200%20192%2072m5.66%20114.34a8%208%200%200%200-11.32%2011.32l16%2016a8%208%200%200%200%2011.32-11.32ZM48%20128a8%208%200%200%200-8-8H16a8%208%200%200%200%200%2016h24a8%208%200%200%200%208-8m80%2080a8%208%200%200%200-8%208v24a8%208%200%200%200%2016%200v-24a8%208%200%200%200-8-8m112-88h-24a8%208%200%200%200%200%2016h24a8%208%200%200%200%200-16%22%2F%3E%3C%2Fsvg%3E)}.i-ph-translate{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22m247.15%20212.42-56-112a8%208%200%200%200-14.31%200l-21.71%2043.43A88%2088%200%200%201%20108%20126.93%20103.65%20103.65%200%200%200%20135.69%2064H160a8%208%200%200%200%200-16h-56V32a8%208%200%200%200-16%200v16H32a8%208%200%200%200%200%2016h87.63A87.76%2087.76%200%200%201%2096%20116.35a87.7%2087.7%200%200%201-19-31%208%208%200%201%200-15.08%205.34A103.6%20103.6%200%200%200%2084%20127a87.55%2087.55%200%200%201-52%2017%208%208%200%200%200%200%2016%20103.46%20103.46%200%200%200%2064-22.08%20104.2%20104.2%200%200%200%2051.44%2021.31l-26.6%2053.19a8%208%200%200%200%2014.31%207.16L148.94%20192h70.11l13.79%2027.58A8%208%200%200%200%20240%20224a8%208%200%200%200%207.15-11.58M156.94%20176%20184%20121.89%20211.05%20176Z%22%2F%3E%3C%2Fsvg%3E)}.i-ph-warning{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M236.8%20188.09%20149.35%2036.22a24.76%2024.76%200%200%200-42.7%200L19.2%20188.09a23.51%2023.51%200%200%200%200%2023.72A24.35%2024.35%200%200%200%2040.55%20224h174.9a24.35%2024.35%200%200%200%2021.33-12.19%2023.51%2023.51%200%200%200%20.02-23.72m-13.87%2015.71a8.5%208.5%200%200%201-7.48%204.2H40.55a8.5%208.5%200%200%201-7.48-4.2%207.59%207.59%200%200%201%200-7.72l87.45-151.87a8.75%208.75%200%200%201%2015%200l87.45%20151.87a7.59%207.59%200%200%201-.04%207.72M120%20144v-40a8%208%200%200%201%2016%200v40a8%208%200%200%201-16%200m20%2036a12%2012%200%201%201-12-12%2012%2012%200%200%201%2012%2012%22%2F%3E%3C%2Fsvg%3E)}.i-ph-x{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M205.66%20194.34a8%208%200%200%201-11.32%2011.32L128%20139.31l-66.34%2066.35a8%208%200%200%201-11.32-11.32L116.69%20128%2050.34%2061.66a8%208%200%200%201%2011.32-11.32L128%20116.69l66.34-66.35a8%208%200%200%201%2011.32%2011.32L139.31%20128Z%22%2F%3E%3C%2Fsvg%3E)}.btn-ghost{color:color-mix(in oklab,var(--ff-muted) var(--un-text-opacity),transparent);border-color:#0000}.btn-ghost,.btn-outline{font-size:var(--text-sm-fontSize);line-height:var(--un-leading,var(--text-sm-lineHeight));--un-font-weight:var(--fontWeight-medium);font-weight:var(--fontWeight-medium);padding-inline:calc(var(--spacing) * 4);gap:calc(var(--spacing) * 2);height:calc(var(--spacing) * 9);-webkit-user-select:none;user-select:none;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--un-gradient-from,--un-gradient-via,--un-gradient-to;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));--un-duration:.15s;border-width:1px;justify-content:center;align-items:center;transition-duration:.15s;display:inline-flex}.btn-outline{color:color-mix(in oklab,var(--ff-fg) var(--un-text-opacity),transparent);border-color:color-mix(in oklab,var(--ff-line-strong) var(--un-border-opacity),transparent)}.btn-solid{color:color-mix(in oklab,var(--ff-bg) var(--un-text-opacity),transparent);--un-font-weight:var(--fontWeight-medium);font-weight:var(--fontWeight-medium);padding-inline:calc(var(--spacing) * 4);border-color:color-mix(in oklab,var(--ff-fg) var(--un-border-opacity),transparent);background-color:color-mix(in oklab,var(--ff-fg) var(--un-bg-opacity),transparent);gap:calc(var(--spacing) * 2);height:calc(var(--spacing) * 9);-webkit-user-select:none;user-select:none;transition-duration:var(--un-duration,var(--default-transition-duration));--un-duration:.15s;justify-content:center;align-items:center;transition-duration:.15s;display:inline-flex}.btn-solid,.input{font-size:var(--text-sm-fontSize);line-height:var(--un-leading,var(--text-sm-lineHeight));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--un-gradient-from,--un-gradient-via,--un-gradient-to;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));border-width:1px}.input{color:color-mix(in oklab,var(--ff-fg) var(--un-text-opacity),transparent);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);--un-outline-style:none;border-color:color-mix(in oklab,var(--ff-line) var(--un-border-opacity),transparent);border-radius:var(--radius-none);width:100%;transition-duration:var(--un-duration,var(--default-transition-duration));background-color:#0000;outline-style:none}.prose h1{font-size:var(--text-4xl-fontSize);line-height:var(--un-leading,var(--text-4xl-lineHeight));--un-tracking:-.03em;letter-spacing:-.03em;margin-bottom:calc(var(--spacing) * 8)}.prose h1,.prose h2,.prose h3{--un-font-weight:var(--fontWeight-semibold);font-weight:var(--fontWeight-semibold)}.prose h2{font-size:var(--text-xl-fontSize);line-height:var(--un-leading,var(--text-xl-lineHeight));margin-bottom:calc(var(--spacing) * 4);margin-top:calc(var(--spacing) * 12)}.prose table{font-size:var(--text-sm-fontSize);line-height:var(--un-leading,var(--text-sm-lineHeight));margin-block:calc(var(--spacing) * 4);border-collapse:collapse}.\!color-base{color:color-mix(in oklab,var(--ff-fg) var(--un-text-opacity),transparent)!important}.color-base,.group:hover .group-hover\:color-base{color:color-mix(in oklab,var(--ff-fg) var(--un-text-opacity),transparent)}.color-inverse{color:color-mix(in oklab,var(--ff-bg) var(--un-text-opacity),transparent)}.color-muted,.label,.prose a:hover,.prose blockquote{color:color-mix(in oklab,var(--ff-muted) var(--un-text-opacity),transparent)}.label{--un-leading:calc(var(--spacing) * 4);font-size:11px;line-height:calc(var(--spacing) * 4);--un-tracking:.12em;letter-spacing:.12em;font-family:var(--font-mono);text-transform:uppercase}.prose{--un-leading:var(--leading-relaxed);font-size:15px;line-height:var(--leading-relaxed)}.prose blockquote{margin-block:calc(var(--spacing) * 4);padding-left:calc(var(--spacing) * 4);border-color:color-mix(in oklab,var(--ff-line-strong) var(--un-border-opacity),transparent);border-left-width:2px}.prose code{font-size:.9em;font-family:var(--font-mono);padding-inline:calc(var(--spacing));background-color:color-mix(in oklab,var(--ff-hover) var(--un-bg-opacity),transparent)}.prose pre{--un-leading:calc(var(--spacing) * 6);font-size:13px;line-height:calc(var(--spacing) * 6);margin-block:calc(var(--spacing) * 4);padding:calc(var(--spacing) * 4);border-width:1px;border-color:color-mix(in oklab,var(--ff-line) var(--un-border-opacity),transparent);overflow-x:auto}.btn-ghost:hover{color:color-mix(in oklab,var(--ff-fg) var(--un-text-opacity),transparent);background-color:color-mix(in oklab,var(--ff-hover) var(--un-bg-opacity),transparent)}.btn-outline:hover{color:color-mix(in oklab,var(--ff-bg) var(--un-text-opacity),transparent);border-color:color-mix(in oklab,var(--ff-fg) var(--un-border-opacity),transparent);background-color:color-mix(in oklab,var(--ff-fg) var(--un-bg-opacity),transparent)}.hover\:color-base:hover{color:color-mix(in oklab,var(--ff-fg) var(--un-text-opacity),transparent)}.hover\:color-muted:hover{color:color-mix(in oklab,var(--ff-muted) var(--un-text-opacity),transparent)}.input::placeholder{color:color-mix(in oklab,var(--ff-muted) var(--un-text-opacity),transparent)}.prose h3{margin-bottom:calc(var(--spacing) * 3);margin-top:calc(var(--spacing) * 8)}.prose th{--un-font-weight:var(--fontWeight-medium);font-weight:var(--fontWeight-medium);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);text-align:left;border-width:1px;border-color:color-mix(in oklab,var(--ff-line) var(--un-border-opacity),transparent)}.prose li{margin-block:calc(var(--spacing));max-width:66ch}.prose ol{padding-left:calc(var(--spacing) * 6);list-style-type:decimal}.prose ol,.prose p,.prose ul{margin-block:calc(var(--spacing) * 4)}.prose p{max-width:70ch}.prose ul{padding-left:calc(var(--spacing) * 6);list-style-type:disc}.slider::-webkit-slider-thumb{appearance:none;border-width:1px;border-color:color-mix(in oklab,var(--ff-line-strong) var(--un-border-opacity),transparent);--un-border-style:solid;background-color:color-mix(in oklab,var(--ff-bg) var(--un-bg-opacity),transparent);width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5);box-sizing:border-box;border-style:solid;margin-top:-5px}.prose pre code{padding:calc(var(--spacing) * 0);background-color:#0000}.prose td{padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);border-width:1px;border-color:color-mix(in oklab,var(--ff-line) var(--un-border-opacity),transparent)}.slider{appearance:none;height:calc(var(--spacing) * 3.5);cursor:pointer;background-color:#0000;width:100%}.slider:focus-visible{outline-style:var(--un-outline-style);outline-width:2px;outline-color:color-mix(in oklab,var(--ff-fg) var(--un-outline-opacity),transparent);outline-offset:2px}.slider::-moz-range-thumb{border-radius:var(--radius-none);background-color:color-mix(in oklab,var(--ff-bg) var(--un-bg-opacity),transparent);width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.slider::-moz-range-thumb{border-width:1px;border-color:color-mix(in oklab,var(--ff-line-strong) var(--un-border-opacity),transparent);--un-border-style:solid;box-sizing:border-box;border-style:solid}.slider::-moz-range-track{border-width:1px;border-color:color-mix(in oklab,var(--ff-line-strong) var(--un-border-opacity),transparent);--un-border-style:solid;box-sizing:border-box;border-style:solid}.slider::-moz-range-track{height:calc(var(--spacing) * 1.5)}.slider::-webkit-slider-runnable-track{border-width:1px;border-color:color-mix(in oklab,var(--ff-line-strong) var(--un-border-opacity),transparent);--un-border-style:solid;height:calc(var(--spacing) * 1.5);background:linear-gradient(var(--ff-fg),var(--ff-fg)) 0 0/calc(7px + var(--slider-fraction) * (100% - 14px)) 100% no-repeat;box-sizing:border-box;border-style:solid}.border-base{border-color:color-mix(in oklab,var(--ff-line) var(--un-border-opacity),transparent)}.border-inverse{border-color:color-mix(in oklab,var(--ff-fg) var(--un-border-opacity),transparent)}.border-strong,.hover\:border-strong:hover{border-color:color-mix(in oklab,var(--ff-line-strong) var(--un-border-opacity),transparent)}.input:focus{border-color:color-mix(in oklab,var(--ff-fg) var(--un-border-opacity),transparent)}.bg-base{background-color:color-mix(in oklab,var(--ff-bg) var(--un-bg-opacity),transparent)}.bg-inverse{background-color:color-mix(in oklab,var(--ff-fg) var(--un-bg-opacity),transparent)}.slider::-moz-range-progress{background-color:color-mix(in oklab,var(--ff-fg) var(--un-bg-opacity),transparent);height:calc(var(--spacing) * 1.5)}.hover\:bg-hover:hover{background-color:color-mix(in oklab,var(--ff-hover) var(--un-bg-opacity),transparent)}.btn-solid:hover{opacity:.85}.btn-ghost:disabled,.btn-outline:disabled,.btn-solid:disabled{opacity:.4;cursor:not-allowed}.container{width:100%}.prose a{text-underline-offset:3px;text-decoration-line:underline}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.text-2xl{font-size:var(--text-2xl-fontSize);line-height:var(--un-leading,var(--text-2xl-lineHeight))}.text-3xl{font-size:var(--text-3xl-fontSize);line-height:var(--un-leading,var(--text-3xl-lineHeight))}.text-4xl{font-size:var(--text-4xl-fontSize);line-height:var(--un-leading,var(--text-4xl-lineHeight))}.text-base{font-size:var(--text-base-fontSize);line-height:var(--un-leading,var(--text-base-lineHeight))}.text-sm{font-size:var(--text-sm-fontSize);line-height:var(--un-leading,var(--text-sm-lineHeight))}.text-xl{font-size:var(--text-xl-fontSize);line-height:var(--un-leading,var(--text-xl-lineHeight))}.text-xs{font-size:var(--text-xs-fontSize);line-height:var(--un-leading,var(--text-xs-lineHeight))}.dark .dark\:text-white{color:color-mix(in srgb,var(--colors-white) var(--un-text-opacity),transparent)}.text-\[11px\]{font-size:11px}.text-\[15px\]{font-size:15px}.text-\[56px\]{font-size:56px}.text-amber{color:color-mix(in srgb,var(--colors-amber-DEFAULT) var(--un-text-opacity),transparent)}.text-neutral-500{color:color-mix(in srgb,var(--colors-neutral-500) var(--un-text-opacity),transparent)}.text-neutral-950{color:color-mix(in srgb,var(--colors-neutral-950) var(--un-text-opacity),transparent)}.hover\:text-\[\#00DC82\]:hover{color:color-mix(in oklab,#00dc82 var(--un-text-opacity),transparent)}.text-inherit{color:inherit}.leading-none{--un-leading:var(--leading-none);line-height:var(--leading-none)}.leading-relaxed{--un-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.tracking-\[0\.04em\]{--un-tracking:.04em;letter-spacing:.04em}.tracking-\[0\.5em\]{--un-tracking:.5em;letter-spacing:.5em}.tracking-tight{--un-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--un-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.font-medium{--un-font-weight:var(--fontWeight-medium);font-weight:var(--fontWeight-medium)}.font-mono{font-family:var(--font-mono)}.font-normal{--un-font-weight:var(--fontWeight-normal);font-weight:var(--fontWeight-normal)}.font-sans{font-family:var(--font-sans)}.font-semibold{--un-font-weight:var(--fontWeight-semibold);font-weight:var(--fontWeight-semibold)}.mx-auto{margin-inline:auto}.my-4{margin-block:calc(var(--spacing) * 4)}.-mb-px{margin-bottom:-1px}.-mr-px{margin-right:-1px}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.ms{margin-inline-start:calc(var(--spacing) * 4)}.mt-4{margin-top:calc(var(--spacing) * 4)}.p-0{padding:calc(var(--spacing) * 0)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px,.px-4{padding-inline:calc(var(--spacing) * 4)}.px-0{padding-inline:calc(var(--spacing) * 0)}.px-1{padding-inline:calc(var(--spacing))}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing))}.py-12{padding-block:calc(var(--spacing) * 12)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-24{padding-block:calc(var(--spacing) * 24)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-8{padding-block:calc(var(--spacing) * 8)}.pl-7{padding-left:calc(var(--spacing) * 7)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-left{text-align:left}.appearance-none{appearance:none}.outline,.outline-1{outline-style:var(--un-outline-style);outline-width:1px}.outline-transparent{outline-color:#0000}.hover\:outline-\[var\(--ff-line\)\]:hover{outline-color:color-mix(in oklab,var(--ff-line) var(--un-outline-opacity),transparent)}.focus\:outline-\[var\(--ff-fg\)\]:focus,.peer:focus-visible~.peer-focus-visible\:outline-\[var\(--ff-fg\)\]{outline-color:color-mix(in oklab,var(--ff-fg) var(--un-outline-opacity),transparent)}.peer:focus-visible~.peer-focus-visible\:outline-2{outline-style:var(--un-outline-style);outline-width:2px}.outline-offset-4{outline-offset:4px}.peer:focus-visible~.peer-focus-visible\:outline-offset-2{outline-offset:2px}.focus\:outline-dashed:focus,.hover\:outline-dashed:hover{--un-outline-style:dashed;outline-style:dashed}.border{border-width:1px}.border-x{border-inline-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-0{border-width:0}.border-t-0{border-top-width:0}.last\:border-b-0:last-child{border-bottom-width:0}.last\:border-r-0:last-child{border-right-width:0}.rounded-none{border-radius:var(--radius-none)}.bg-\[var\(--ff-line\)\]{background-color:color-mix(in oklab,var(--ff-line) var(--un-bg-opacity),transparent)}.bg-amber\:5{background-color:color-mix(in srgb,var(--colors-amber-DEFAULT) 5%,transparent)}.bg-transparent{background-color:#0000}.bg-white{background-color:color-mix(in srgb,var(--colors-white) var(--un-bg-opacity),transparent)}.dark .dark\:bg-neutral-950{background-color:color-mix(in srgb,var(--colors-neutral-950) var(--un-bg-opacity),transparent)}.opacity-40{opacity:.4}.opacity-60{opacity:.6}.underline{text-decoration-line:underline}.underline-offset-3{text-underline-offset:3px}.flex{display:flex}.inline-flex{display:inline-flex}.flex-1{flex:1}.flex-auto{flex:auto}.shrink-0{flex-shrink:0}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.gap-1{gap:calc(var(--spacing))}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-x-2{-moz-column-gap:calc(var(--spacing) * 2);column-gap:calc(var(--spacing) * 2)}.gap-x-6{-moz-column-gap:calc(var(--spacing) * 6);column-gap:calc(var(--spacing) * 6)}.gap-y-3{row-gap:calc(var(--spacing) * 3)}.grid{display:grid}.col-span-full{grid-column:1/-1}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.size-\[10px\]{width:10px;height:10px}.size-\[11px\]{width:11px;height:11px}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.h-14{height:calc(var(--spacing) * 14)}.h-4{height:calc(var(--spacing) * 4)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-px{height:1px}.h1{height:calc(var(--spacing))}.h2{height:calc(var(--spacing) * 2)}.h3{height:calc(var(--spacing) * 3)}.max-h-\[32rem\]{max-height:32rem}.max-w-\[46ch\]{max-width:46ch}.max-w-\[52ch\]{max-width:52ch}.max-w-\[60ch\]{max-width:60ch}.max-w-520px{max-width:520px}.max-w-6xl{max-width:var(--container-6xl)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.min-h-56{min-height:calc(var(--spacing) * 56)}.min-h-72{min-height:calc(var(--spacing) * 72)}.min-h-screen{min-height:100vh}.min-w-0{min-width:calc(var(--spacing) * 0)}.w-28{width:calc(var(--spacing) * 28)}.w-7{width:calc(var(--spacing) * 7)}.w-9{width:calc(var(--spacing) * 9)}.w-fit{width:fit-content}.w-full{width:100%}.hidden{display:none}.invisible{visibility:hidden}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.pointer-events-none{pointer-events:none}.select-none{-webkit-user-select:none;user-select:none}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.uppercase{text-transform:uppercase}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.focus-ring:focus{--un-ring-shadow:var(--un-ring-inset,) 0 0 0 calc(1px + var(--un-ring-offset-width)) var(--un-ring-color,currentColor);box-shadow:var(--un-inset-shadow),var(--un-inset-ring-shadow),var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.transition-\[outline-color\]{transition-property:outline-color}.transition-\[outline-color\],.transition-all,.transition-colors{transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration))}.transition-all{transition-property:all}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--un-gradient-from,--un-gradient-via,--un-gradient-to}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.self-start{align-self:flex-start}.-inset-\[100vmax\]{inset:-100vmax}.-bottom-\[6px\]{bottom:-6px}.-left-\[6px\]{left:-6px}.-right-\[6px\]{right:-6px}.-top-\[6px\]{top:-6px}.bottom-3{bottom:calc(var(--spacing) * 3)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-\[14px\]{left:14px}.left-\[2px\]{left:2px}.left-2{left:calc(var(--spacing) * 2)}.left-4{left:calc(var(--spacing) * 4)}.right-3{right:calc(var(--spacing) * 3)}.top-\[2px\]{top:2px}.top-0{top:calc(var(--spacing) * 0)}.top-3{top:calc(var(--spacing) * 3)}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.place-content-center{place-content:center}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.-z-1{z-index:-1}.z-1{z-index:1}.z-10{z-index:10}.overflow-hidden{overflow:hidden}.overflow-x-clip{overflow-x:clip}.overflow-y-auto{overflow-y:auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.animate-spin{animation:1s linear infinite spin}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.isolate{isolation:isolate}.invert{--un-invert:invert(100%);filter:var(--un-blur,) var(--un-brightness,) var(--un-contrast,) var(--un-grayscale,) var(--un-hue-rotate,) var(--un-invert,) var(--un-saturate,) var(--un-sepia,) var(--un-drop-shadow,)}.tabular-nums{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal,) var(--un-slashed-zero,) var(--un-numeric-figure,) var(--un-numeric-spacing,) var(--un-numeric-fraction,)}.no-ruby{font-feature-settings:"ss01";line-height:1}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white{color:color-mix(in oklab,var(--colors-white) var(--un-text-opacity),transparent)}.text-amber{color:color-mix(in oklab,var(--colors-amber-DEFAULT) var(--un-text-opacity),transparent)}.text-neutral-500{color:color-mix(in oklab,var(--colors-neutral-500) var(--un-text-opacity),transparent)}.text-neutral-950{color:color-mix(in oklab,var(--colors-neutral-950) var(--un-text-opacity),transparent)}.bg-amber\:5{background-color:color-mix(in oklab,var(--colors-amber-DEFAULT) 5%,transparent)}.bg-white{background-color:color-mix(in oklab,var(--colors-white) var(--un-bg-opacity),transparent)}.dark .dark\:bg-neutral-950{background-color:color-mix(in oklab,var(--colors-neutral-950) var(--un-bg-opacity),transparent)}}@media (width>=40rem){.sm\:text-3xl{font-size:var(--text-3xl-fontSize);line-height:var(--un-leading,var(--text-3xl-lineHeight))}.sm\:text-\[72px\]{font-size:72px}.sm\:tracking-\[0\.12em\]{--un-tracking:.12em;letter-spacing:.12em}.sm\:px-2{padding-inline:calc(var(--spacing) * 2)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:border-r{border-right-width:1px}.sm\:border-b-0{border-bottom-width:0}.sm\:inline-flex{display:inline-flex}.sm\:gap-6{gap:calc(var(--spacing) * 6)}.sm\:grid-cols-\[1fr_2fr\]{grid-template-columns:1fr 2fr}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:inline{display:inline}}@media (width>=64rem){.lg\:py-24{padding-block:calc(var(--spacing) * 24)}.lg\:border-b{border-bottom-width:1px}.lg\:border-r{border-right-width:1px}.lg\:border-b-0{border-bottom-width:0}.lg\:border-t-0{border-top-width:0}.lg\:grid-cols-\[240px_1fr\]{grid-template-columns:240px 1fr}.lg\:grid-cols-\[340px_1fr\]{grid-template-columns:340px 1fr}.lg\:grid-cols-\[5fr_4fr\]{grid-template-columns:5fr 4fr}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lg\:top-14{top:calc(var(--spacing) * 14)}.lg\:sticky{position:sticky}.lg\:z-1{z-index:1}}
|
|
1
|
+
:root{--ff-bg:#fff;--ff-fg:#0a0a0a;--ff-muted:#0a0a0a9e;--ff-line:#0a0a0a1f;--ff-line-strong:#0a0a0a66;--ff-hover:#0a0a0a0d;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}html.dark{--ff-bg:#0a0a0a;--ff-fg:#fafafa;--ff-muted:#fafafa9e;--ff-line:#fafafa2b;--ff-line-strong:#fafafa66;--ff-hover:#fafafa12;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}html{scrollbar-gutter:stable}body,html{background:var(--ff-bg);color:var(--ff-fg)}body{-webkit-font-smoothing:antialiased}:lang(ja) body{font-family:var(--ff-font),ui-sans-serif,system-ui,sans-serif;font-feature-settings:var(--ff-features);line-height:1.8}::selection{background:var(--ff-fg);color:var(--ff-bg)}.display{letter-spacing:-.045em;text-wrap:balance;line-height:.95}:lang(ja) .display,:lang(zh) .display{letter-spacing:0;word-break:auto-phrase;line-height:1.2}.hero-title{font-size:calc(clamp(2.75rem,6vw,4.75rem))}:lang(ja) .hero-title,:lang(zh) .hero-title{font-size:calc(clamp(2.25rem,4.4vw,3.5rem))}@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--un-bg-opacity:100%;--un-border-opacity:100%;--un-leading:initial;--un-outline-opacity:100%;--un-outline-style:solid;--un-text-opacity:100%}}@property --un-text-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-leading{syntax:"*";inherits:false}@property --un-outline-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --un-border-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-bg-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-inset-ring-color{syntax:"*";inherits:false}@property --un-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-inset-shadow-color{syntax:"*";inherits:false}@property --un-ring-color{syntax:"*";inherits:false}@property --un-ring-inset{syntax:"*";inherits:false}@property --un-ring-offset-color{syntax:"*";inherits:false}@property --un-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --un-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --un-shadow-color{syntax:"*";inherits:false}@property --un-blur{syntax:"*";inherits:false}@property --un-brightness{syntax:"*";inherits:false}@property --un-contrast{syntax:"*";inherits:false}@property --un-drop-shadow{syntax:"*";inherits:false}@property --un-grayscale{syntax:"*";inherits:false}@property --un-hue-rotate{syntax:"*";inherits:false}@property --un-invert{syntax:"*";inherits:false}@property --un-saturate{syntax:"*";inherits:false}@property --un-sepia{syntax:"*";inherits:false}@property --un-numeric-figure{syntax:"*";inherits:false}@property --un-numeric-fraction{syntax:"*";inherits:false}@property --un-numeric-spacing{syntax:"*";inherits:false}@property --un-ordinal{syntax:"*";inherits:false}@property --un-slashed-zero{syntax:"*";inherits:false}:host,:root{--spacing:.25rem;--colors-amber-DEFAULT:oklch(82.8% .189 84.429);--fontWeight-semibold:600;--leading-relaxed:1.625;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--container-6xl:72rem;--container-md:28rem;--default-transition-timingFunction:cubic-bezier(.4, 0, .2, 1);--default-transition-duration:.15s;--container-sm:24rem;--tracking-tight:-.025em;--fontWeight-normal:400;--fontWeight-medium:500;--font-sans:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--tracking-wide:.025em;--leading-none:1;--radius-none:0;--colors-white:#fff;--colors-neutral-950:oklch(14.5% 0 0);--colors-neutral-500:oklch(55.6% 0 0);--text-xs-fontSize:.75rem;--text-xs-lineHeight:1rem;--text-base-fontSize:1rem;--text-base-lineHeight:1.5rem;--text-4xl-fontSize:2.25rem;--text-4xl-lineHeight:2.5rem;--text-sm-fontSize:.875rem;--text-sm-lineHeight:1.25rem;--text-2xl-fontSize:1.5rem;--text-2xl-lineHeight:2rem;--text-xl-fontSize:1.25rem;--text-xl-lineHeight:1.75rem;--text-3xl-fontSize:1.875rem;--text-3xl-lineHeight:2.25rem;--default-font-family:var(--font-sans);--default-monoFont-family:var(--font-mono)}*,::backdrop,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-featureSettings,normal);font-variation-settings:var(--default-font-variationSettings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-monoFont-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-monoFont-featureSettings,normal);font-variation-settings:var(--default-monoFont-variationSettings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden~=until-found])){display:none!important}.i-ph-arrow-counter-clockwise{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M224%20128a96%2096%200%200%201-94.71%2096H128a95.38%2095.38%200%200%201-65.9-26.2%208%208%200%200%201%2011-11.63%2080%2080%200%201%200-1.67-114.78%203%203%200%200%201-.26.25L44.59%2096H72a8%208%200%200%201%200%2016H24a8%208%200%200%201-8-8V56a8%208%200%200%201%2016%200v29.8L60.25%2060A96%2096%200%200%201%20224%20128%22%2F%3E%3C%2Fsvg%3E)}.i-ph-arrow-counter-clockwise,.i-ph-bookmark-simple,.i-ph-check,.i-ph-circle-notch,.i-ph-copy,.i-ph-download-simple,.i-ph-floppy-disk,.i-ph-github-logo,.i-ph-hammer,.i-ph-list-magnifying-glass,.i-ph-moon,.i-ph-puzzle-piece,.i-ph-shuffle,.i-ph-sliders-horizontal,.i-ph-sun,.i-ph-translate,.i-ph-warning,.i-ph-x{-webkit-mask:var(--un-icon) no-repeat;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;color:inherit;background-color:currentColor;width:1.15em;height:1.15em;-webkit-mask-size:100% 100%;mask-size:100% 100%}.i-ph-bookmark-simple{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M184%2032H72a16%2016%200%200%200-16%2016v176a8%208%200%200%200%2012.24%206.78L128%20193.43l59.77%2037.35A8%208%200%200%200%20200%20224V48a16%2016%200%200%200-16-16m0%20177.57-51.77-32.35a8%208%200%200%200-8.48%200L72%20209.57V48h112Z%22%2F%3E%3C%2Fsvg%3E)}.i-ph-check{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22m229.66%2077.66-128%20128a8%208%200%200%201-11.32%200l-56-56a8%208%200%200%201%2011.32-11.32L96%20188.69%20218.34%2066.34a8%208%200%200%201%2011.32%2011.32%22%2F%3E%3C%2Fsvg%3E)}.i-ph-circle-notch{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M232%20128a104%20104%200%200%201-208%200c0-41%2023.81-78.36%2060.66-95.27a8%208%200%200%201%206.68%2014.54C60.15%2061.59%2040%2093.27%2040%20128a88%2088%200%200%200%20176%200c0-34.73-20.15-66.41-51.34-80.73a8%208%200%200%201%206.68-14.54C208.19%2049.64%20232%2087%20232%20128%22%2F%3E%3C%2Fsvg%3E)}.i-ph-copy{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M216%2032H88a8%208%200%200%200-8%208v40H40a8%208%200%200%200-8%208v128a8%208%200%200%200%208%208h128a8%208%200%200%200%208-8v-40h40a8%208%200%200%200%208-8V40a8%208%200%200%200-8-8m-56%20176H48V96h112Zm48-48h-32V88a8%208%200%200%200-8-8H96V48h112Z%22%2F%3E%3C%2Fsvg%3E)}.i-ph-download-simple{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M224%20144v64a8%208%200%200%201-8%208H40a8%208%200%200%201-8-8v-64a8%208%200%200%201%2016%200v56h160v-56a8%208%200%200%201%2016%200m-101.66%205.66a8%208%200%200%200%2011.32%200l40-40a8%208%200%200%200-11.32-11.32L136%20124.69V32a8%208%200%200%200-16%200v92.69L93.66%2098.34a8%208%200%200%200-11.32%2011.32Z%22%2F%3E%3C%2Fsvg%3E)}.i-ph-floppy-disk{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M219.31%2072%20184%2036.69A15.86%2015.86%200%200%200%20172.69%2032H48a16%2016%200%200%200-16%2016v160a16%2016%200%200%200%2016%2016h160a16%2016%200%200%200%2016-16V83.31A15.86%2015.86%200%200%200%20219.31%2072M168%20208H88v-56h80Zm40%200h-24v-56a16%2016%200%200%200-16-16H88a16%2016%200%200%200-16%2016v56H48V48h124.69L208%2083.31ZM160%2072a8%208%200%200%201-8%208H96a8%208%200%200%201%200-16h56a8%208%200%200%201%208%208%22%2F%3E%3C%2Fsvg%3E)}.i-ph-github-logo{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M208.31%2075.68A59.78%2059.78%200%200%200%20202.93%2028a8%208%200%200%200-6.93-4%2059.75%2059.75%200%200%200-48%2024h-24a59.75%2059.75%200%200%200-48-24%208%208%200%200%200-6.93%204%2059.78%2059.78%200%200%200-5.38%2047.68A58.14%2058.14%200%200%200%2056%20104v8a56.06%2056.06%200%200%200%2048.44%2055.47A39.8%2039.8%200%200%200%2096%20192v8H72a24%2024%200%200%201-24-24%2040%2040%200%200%200-40-40%208%208%200%200%200%200%2016%2024%2024%200%200%201%2024%2024%2040%2040%200%200%200%2040%2040h24v16a8%208%200%200%200%2016%200v-40a24%2024%200%200%201%2048%200v40a8%208%200%200%200%2016%200v-40a39.8%2039.8%200%200%200-8.44-24.53A56.06%2056.06%200%200%200%20216%20112v-8a58.14%2058.14%200%200%200-7.69-28.32M200%20112a40%2040%200%200%201-40%2040h-48a40%2040%200%200%201-40-40v-8a41.74%2041.74%200%200%201%206.9-22.48%208%208%200%200%200%201.1-7.69%2043.8%2043.8%200%200%201%20.79-33.58%2043.88%2043.88%200%200%201%2032.32%2020.06%208%208%200%200%200%206.71%203.69h32.35a8%208%200%200%200%206.74-3.69%2043.87%2043.87%200%200%201%2032.32-20.06%2043.8%2043.8%200%200%201%20.77%2033.58%208.09%208.09%200%200%200%201%207.65%2041.7%2041.7%200%200%201%207%2022.52Z%22%2F%3E%3C%2Fsvg%3E)}.i-ph-hammer{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22m251.34%20112-67.46-67.92a96.1%2096.1%200%200%200-135.77%200l-.09.09L34.25%2058.4a8%208%200%200%200%2011.49%2011.13l13.73-14.18a80%2080%200%200%201%2018.71-13.9L124.68%2088l-96%2096a16%2016%200%200%200%200%2022.63l20.69%2020.69a16%2016%200%200%200%2022.63%200l96-96%2014.34%2014.34L200%20163.3a16%2016%200%200%200%2022.63%200l28.69-28.69a16%2016%200%200%200%20.02-22.61M60.68%20216%2040%20195.31l68-68L128.68%20148Zm101.66-101.68L140%20136.67%20119.31%20116l22.35-22.35a8%208%200%200%200%200-11.32L94.32%2035a80%2080%200%200%201%2078.23%2020.41l44.22%2044.51L188%20128.66l-14.34-14.34a8%208%200%200%200-11.32%200m49%2037.66-12-12L228%20111.25l12%2012Z%22%2F%3E%3C%2Fsvg%3E)}.i-ph-list-magnifying-glass{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M32%2064a8%208%200%200%201%208-8h176a8%208%200%200%201%200%2016H40a8%208%200%200%201-8-8m8%2072h72a8%208%200%200%200%200-16H40a8%208%200%200%200%200%2016m88%2048H40a8%208%200%200%200%200%2016h88a8%208%200%200%200%200-16m109.66%2013.66a8%208%200%200%201-11.32%200L206%20177.36A40%2040%200%201%201%20217.36%20166l20.3%2020.3a8%208%200%200%201%200%2011.36M184%20168a24%2024%200%201%200-24-24%2024%2024%200%200%200%2024%2024%22%2F%3E%3C%2Fsvg%3E)}.i-ph-moon{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M233.54%20142.23a8%208%200%200%200-8-2%2088.08%2088.08%200%200%201-109.8-109.8%208%208%200%200%200-10-10%20104.84%20104.84%200%200%200-52.91%2037A104%20104%200%200%200%20136%20224a103.1%20103.1%200%200%200%2062.52-20.88%20104.84%20104.84%200%200%200%2037-52.91%208%208%200%200%200-1.98-7.98m-44.64%2048.11A88%2088%200%200%201%2065.66%2067.11a89%2089%200%200%201%2031.4-26A106%20106%200%200%200%2096%2056a104.11%20104.11%200%200%200%20104%20104%20106%20106%200%200%200%2014.92-1.06%2089%2089%200%200%201-26.02%2031.4%22%2F%3E%3C%2Fsvg%3E)}.i-ph-puzzle-piece{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M220.27%20158.54a8%208%200%200%200-7.7-.46%2020%2020%200%201%201%200-36.16%208%208%200%200%200%2011.43-7.23V72a16%2016%200%200%200-16-16h-36.22a35%2035%200%200%200%20.22-4%2036.1%2036.1%200%200%200-11.36-26.24%2036%2036%200%200%200-60.55%2023.62%2036.6%2036.6%200%200%200%20.14%206.62H64a16%2016%200%200%200-16%2016v32.22a35%2035%200%200%200-4-.22%2036.12%2036.12%200%200%200-26.24%2011.36%2035.7%2035.7%200%200%200-9.69%2027%2036.08%2036.08%200%200%200%2033.31%2033.6%2035.7%2035.7%200%200%200%206.62-.14V208a16%2016%200%200%200%2016%2016h144a16%2016%200%200%200%2016-16v-42.69a8%208%200%200%200-3.73-6.77M208%20208H64v-42.69a8%208%200%200%200-11.43-7.23%2020%2020%200%201%201%200-36.16A8%208%200%200%200%2064%20114.69V72h46.69a8%208%200%200%200%207.23-11.43%2020%2020%200%201%201%2036.16%200A8%208%200%200%200%20161.31%2072H208v32.23a35.7%2035.7%200%200%200-6.62-.14A36%2036%200%200%200%20204%20176a35%2035%200%200%200%204-.22Z%22%2F%3E%3C%2Fsvg%3E)}.i-ph-shuffle{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M237.66%20178.34a8%208%200%200%201%200%2011.32l-24%2024a8%208%200%200%201-11.32-11.32L212.69%20192h-11.75a72.12%2072.12%200%200%201-58.59-30.15l-41.72-58.4A56.1%2056.1%200%200%200%2055.06%2080H32a8%208%200%200%201%200-16h23.06a72.12%2072.12%200%200%201%2058.59%2030.15l41.72%2058.4A56.1%2056.1%200%200%200%20200.94%20176h11.75l-10.35-10.34a8%208%200%200%201%2011.32-11.32ZM143%20107a8%208%200%200%200%2011.16-1.86l1.2-1.67A56.1%2056.1%200%200%201%20200.94%2080h11.75l-10.35%2010.34a8%208%200%200%200%2011.32%2011.32l24-24a8%208%200%200%200%200-11.32l-24-24a8%208%200%200%200-11.32%2011.32L212.69%2064h-11.75a72.12%2072.12%200%200%200-58.59%2030.15l-1.2%201.67A8%208%200%200%200%20143%20107m-30%2042a8%208%200%200%200-11.16%201.86l-1.2%201.67A56.1%2056.1%200%200%201%2055.06%20176H32a8%208%200%200%200%200%2016h23.06a72.12%2072.12%200%200%200%2058.59-30.15l1.2-1.67A8%208%200%200%200%20113%20149%22%2F%3E%3C%2Fsvg%3E)}.i-ph-sliders-horizontal{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M40%2088h33a32%2032%200%200%200%2062%200h81a8%208%200%200%200%200-16h-81a32%2032%200%200%200-62%200H40a8%208%200%200%200%200%2016m64-24a16%2016%200%201%201-16%2016%2016%2016%200%200%201%2016-16m112%20104h-17a32%2032%200%200%200-62%200H40a8%208%200%200%200%200%2016h97a32%2032%200%200%200%2062%200h17a8%208%200%200%200%200-16m-48%2024a16%2016%200%201%201%2016-16%2016%2016%200%200%201-16%2016%22%2F%3E%3C%2Fsvg%3E)}.i-ph-sun{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M120%2040V16a8%208%200%200%201%2016%200v24a8%208%200%200%201-16%200m72%2088a64%2064%200%201%201-64-64%2064.07%2064.07%200%200%201%2064%2064m-16%200a48%2048%200%201%200-48%2048%2048.05%2048.05%200%200%200%2048-48M58.34%2069.66a8%208%200%200%200%2011.32-11.32l-16-16a8%208%200%200%200-11.32%2011.32Zm0%20116.68-16%2016a8%208%200%200%200%2011.32%2011.32l16-16a8%208%200%200%200-11.32-11.32M192%2072a8%208%200%200%200%205.66-2.34l16-16a8%208%200%200%200-11.32-11.32l-16%2016A8%208%200%200%200%20192%2072m5.66%20114.34a8%208%200%200%200-11.32%2011.32l16%2016a8%208%200%200%200%2011.32-11.32ZM48%20128a8%208%200%200%200-8-8H16a8%208%200%200%200%200%2016h24a8%208%200%200%200%208-8m80%2080a8%208%200%200%200-8%208v24a8%208%200%200%200%2016%200v-24a8%208%200%200%200-8-8m112-88h-24a8%208%200%200%200%200%2016h24a8%208%200%200%200%200-16%22%2F%3E%3C%2Fsvg%3E)}.i-ph-translate{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22m247.15%20212.42-56-112a8%208%200%200%200-14.31%200l-21.71%2043.43A88%2088%200%200%201%20108%20126.93%20103.65%20103.65%200%200%200%20135.69%2064H160a8%208%200%200%200%200-16h-56V32a8%208%200%200%200-16%200v16H32a8%208%200%200%200%200%2016h87.63A87.76%2087.76%200%200%201%2096%20116.35a87.7%2087.7%200%200%201-19-31%208%208%200%201%200-15.08%205.34A103.6%20103.6%200%200%200%2084%20127a87.55%2087.55%200%200%201-52%2017%208%208%200%200%200%200%2016%20103.46%20103.46%200%200%200%2064-22.08%20104.2%20104.2%200%200%200%2051.44%2021.31l-26.6%2053.19a8%208%200%200%200%2014.31%207.16L148.94%20192h70.11l13.79%2027.58A8%208%200%200%200%20240%20224a8%208%200%200%200%207.15-11.58M156.94%20176%20184%20121.89%20211.05%20176Z%22%2F%3E%3C%2Fsvg%3E)}.i-ph-warning{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M236.8%20188.09%20149.35%2036.22a24.76%2024.76%200%200%200-42.7%200L19.2%20188.09a23.51%2023.51%200%200%200%200%2023.72A24.35%2024.35%200%200%200%2040.55%20224h174.9a24.35%2024.35%200%200%200%2021.33-12.19%2023.51%2023.51%200%200%200%20.02-23.72m-13.87%2015.71a8.5%208.5%200%200%201-7.48%204.2H40.55a8.5%208.5%200%200%201-7.48-4.2%207.59%207.59%200%200%201%200-7.72l87.45-151.87a8.75%208.75%200%200%201%2015%200l87.45%20151.87a7.59%207.59%200%200%201-.04%207.72M120%20144v-40a8%208%200%200%201%2016%200v40a8%208%200%200%201-16%200m20%2036a12%2012%200%201%201-12-12%2012%2012%200%200%201%2012%2012%22%2F%3E%3C%2Fsvg%3E)}.i-ph-x{--un-icon:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%221.15em%22%20height%3D%221.15em%22%20viewBox%3D%220%200%20256%20256%22%3E%3Cpath%20fill%3D%22currentColor%22%20d%3D%22M205.66%20194.34a8%208%200%200%201-11.32%2011.32L128%20139.31l-66.34%2066.35a8%208%200%200%201-11.32-11.32L116.69%20128%2050.34%2061.66a8%208%200%200%201%2011.32-11.32L128%20116.69l66.34-66.35a8%208%200%200%201%2011.32%2011.32L139.31%20128Z%22%2F%3E%3C%2Fsvg%3E)}.btn-ghost{color:color-mix(in oklab,var(--ff-muted) var(--un-text-opacity),transparent);border-color:#0000}.btn-ghost,.btn-outline{font-size:var(--text-sm-fontSize);line-height:var(--un-leading,var(--text-sm-lineHeight));--un-font-weight:var(--fontWeight-medium);font-weight:var(--fontWeight-medium);padding-inline:calc(var(--spacing) * 4);gap:calc(var(--spacing) * 2);height:calc(var(--spacing) * 9);-webkit-user-select:none;user-select:none;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--un-gradient-from,--un-gradient-via,--un-gradient-to;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration));--un-duration:.15s;border-width:1px;justify-content:center;align-items:center;transition-duration:.15s;display:inline-flex}.btn-outline{color:color-mix(in oklab,var(--ff-fg) var(--un-text-opacity),transparent);border-color:color-mix(in oklab,var(--ff-line-strong) var(--un-border-opacity),transparent)}.btn-solid{color:color-mix(in oklab,var(--ff-bg) var(--un-text-opacity),transparent);--un-font-weight:var(--fontWeight-medium);font-weight:var(--fontWeight-medium);padding-inline:calc(var(--spacing) * 4);border-color:color-mix(in oklab,var(--ff-fg) var(--un-border-opacity),transparent);background-color:color-mix(in oklab,var(--ff-fg) var(--un-bg-opacity),transparent);gap:calc(var(--spacing) * 2);height:calc(var(--spacing) * 9);-webkit-user-select:none;user-select:none;transition-duration:var(--un-duration,var(--default-transition-duration));--un-duration:.15s;justify-content:center;align-items:center;transition-duration:.15s;display:inline-flex}.btn-solid,.input{font-size:var(--text-sm-fontSize);line-height:var(--un-leading,var(--text-sm-lineHeight));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--un-gradient-from,--un-gradient-via,--un-gradient-to;transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));border-width:1px}.input{color:color-mix(in oklab,var(--ff-fg) var(--un-text-opacity),transparent);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);--un-outline-style:none;border-color:color-mix(in oklab,var(--ff-line) var(--un-border-opacity),transparent);border-radius:var(--radius-none);width:100%;transition-duration:var(--un-duration,var(--default-transition-duration));background-color:#0000;outline-style:none}.\!color-base{color:color-mix(in oklab,var(--ff-fg) var(--un-text-opacity),transparent)!important}.color-base,.group:hover .group-hover\:color-base{color:color-mix(in oklab,var(--ff-fg) var(--un-text-opacity),transparent)}.color-inverse{color:color-mix(in oklab,var(--ff-bg) var(--un-text-opacity),transparent)}.color-muted,.label{color:color-mix(in oklab,var(--ff-muted) var(--un-text-opacity),transparent)}.label{--un-leading:calc(var(--spacing) * 4);font-size:11px;line-height:calc(var(--spacing) * 4);--un-tracking:.12em;letter-spacing:.12em;font-family:var(--font-mono);text-transform:uppercase}.btn-ghost:hover{color:color-mix(in oklab,var(--ff-fg) var(--un-text-opacity),transparent);background-color:color-mix(in oklab,var(--ff-hover) var(--un-bg-opacity),transparent)}.btn-outline:hover{color:color-mix(in oklab,var(--ff-bg) var(--un-text-opacity),transparent);border-color:color-mix(in oklab,var(--ff-fg) var(--un-border-opacity),transparent);background-color:color-mix(in oklab,var(--ff-fg) var(--un-bg-opacity),transparent)}.hover\:color-base:hover{color:color-mix(in oklab,var(--ff-fg) var(--un-text-opacity),transparent)}.hover\:color-muted:hover{color:color-mix(in oklab,var(--ff-muted) var(--un-text-opacity),transparent)}.input::placeholder{color:color-mix(in oklab,var(--ff-muted) var(--un-text-opacity),transparent)}.slider::-webkit-slider-thumb{appearance:none;border-width:1px;border-color:color-mix(in oklab,var(--ff-line-strong) var(--un-border-opacity),transparent);--un-border-style:solid;background-color:color-mix(in oklab,var(--ff-bg) var(--un-bg-opacity),transparent);width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5);box-sizing:border-box;border-style:solid;margin-top:-5px}.slider{appearance:none;height:calc(var(--spacing) * 3.5);cursor:pointer;background-color:#0000;width:100%}.slider:focus-visible{outline-style:var(--un-outline-style);outline-width:2px;outline-color:color-mix(in oklab,var(--ff-fg) var(--un-outline-opacity),transparent);outline-offset:2px}.slider::-moz-range-thumb{border-radius:var(--radius-none);background-color:color-mix(in oklab,var(--ff-bg) var(--un-bg-opacity),transparent);width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.slider::-moz-range-thumb{border-width:1px;border-color:color-mix(in oklab,var(--ff-line-strong) var(--un-border-opacity),transparent);--un-border-style:solid;box-sizing:border-box;border-style:solid}.slider::-moz-range-track{border-width:1px;border-color:color-mix(in oklab,var(--ff-line-strong) var(--un-border-opacity),transparent);--un-border-style:solid;box-sizing:border-box;border-style:solid}.slider::-moz-range-track{height:calc(var(--spacing) * 1.5)}.slider::-webkit-slider-runnable-track{border-width:1px;border-color:color-mix(in oklab,var(--ff-line-strong) var(--un-border-opacity),transparent);--un-border-style:solid;height:calc(var(--spacing) * 1.5);background:linear-gradient(var(--ff-fg),var(--ff-fg)) 0 0/calc(7px + var(--slider-fraction) * (100% - 14px)) 100% no-repeat;box-sizing:border-box;border-style:solid}.border-base{border-color:color-mix(in oklab,var(--ff-line) var(--un-border-opacity),transparent)}.border-inverse{border-color:color-mix(in oklab,var(--ff-fg) var(--un-border-opacity),transparent)}.border-strong,.hover\:border-strong:hover{border-color:color-mix(in oklab,var(--ff-line-strong) var(--un-border-opacity),transparent)}.input:focus{border-color:color-mix(in oklab,var(--ff-fg) var(--un-border-opacity),transparent)}.bg-base{background-color:color-mix(in oklab,var(--ff-bg) var(--un-bg-opacity),transparent)}.bg-inverse{background-color:color-mix(in oklab,var(--ff-fg) var(--un-bg-opacity),transparent)}.slider::-moz-range-progress{background-color:color-mix(in oklab,var(--ff-fg) var(--un-bg-opacity),transparent);height:calc(var(--spacing) * 1.5)}.hover\:bg-hover:hover{background-color:color-mix(in oklab,var(--ff-hover) var(--un-bg-opacity),transparent)}.btn-solid:hover{opacity:.85}.btn-ghost:disabled,.btn-outline:disabled,.btn-solid:disabled{opacity:.4;cursor:not-allowed}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.text-2xl{font-size:var(--text-2xl-fontSize);line-height:var(--un-leading,var(--text-2xl-lineHeight))}.text-4xl{font-size:var(--text-4xl-fontSize);line-height:var(--un-leading,var(--text-4xl-lineHeight))}.text-base{font-size:var(--text-base-fontSize);line-height:var(--un-leading,var(--text-base-lineHeight))}.text-sm{font-size:var(--text-sm-fontSize);line-height:var(--un-leading,var(--text-sm-lineHeight))}.text-xl{font-size:var(--text-xl-fontSize);line-height:var(--un-leading,var(--text-xl-lineHeight))}.text-xs{font-size:var(--text-xs-fontSize);line-height:var(--un-leading,var(--text-xs-lineHeight))}.dark .dark\:text-white{color:color-mix(in srgb,var(--colors-white) var(--un-text-opacity),transparent)}.text-\[11px\]{font-size:11px}.text-\[15px\]{font-size:15px}.text-\[56px\]{font-size:56px}.text-amber{color:color-mix(in srgb,var(--colors-amber-DEFAULT) var(--un-text-opacity),transparent)}.text-neutral-500{color:color-mix(in srgb,var(--colors-neutral-500) var(--un-text-opacity),transparent)}.text-neutral-950{color:color-mix(in srgb,var(--colors-neutral-950) var(--un-text-opacity),transparent)}.hover\:text-\[\#00DC82\]:hover{color:color-mix(in oklab,#00dc82 var(--un-text-opacity),transparent)}.text-inherit{color:inherit}.leading-none{--un-leading:var(--leading-none);line-height:var(--leading-none)}.leading-relaxed{--un-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.tracking-\[0\.04em\]{--un-tracking:.04em;letter-spacing:.04em}.tracking-\[0\.5em\]{--un-tracking:.5em;letter-spacing:.5em}.tracking-tight{--un-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--un-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.font-medium{--un-font-weight:var(--fontWeight-medium);font-weight:var(--fontWeight-medium)}.font-mono{font-family:var(--font-mono)}.font-normal{--un-font-weight:var(--fontWeight-normal);font-weight:var(--fontWeight-normal)}.font-sans{font-family:var(--font-sans)}.font-semibold{--un-font-weight:var(--fontWeight-semibold);font-weight:var(--fontWeight-semibold)}.mx-auto{margin-inline:auto}.-mb-px{margin-bottom:-1px}.-mr-px{margin-right:-1px}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.ms{margin-inline-start:calc(var(--spacing) * 4)}.mt-4{margin-top:calc(var(--spacing) * 4)}.p-0{padding:calc(var(--spacing) * 0)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px,.px-4{padding-inline:calc(var(--spacing) * 4)}.px-0{padding-inline:calc(var(--spacing) * 0)}.px-1{padding-inline:calc(var(--spacing))}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing))}.py-12{padding-block:calc(var(--spacing) * 12)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-24{padding-block:calc(var(--spacing) * 24)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-8{padding-block:calc(var(--spacing) * 8)}.pl-7{padding-left:calc(var(--spacing) * 7)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-left{text-align:left}.appearance-none{appearance:none}.outline,.outline-1{outline-style:var(--un-outline-style);outline-width:1px}.outline-transparent{outline-color:#0000}.hover\:outline-\[var\(--ff-line\)\]:hover{outline-color:color-mix(in oklab,var(--ff-line) var(--un-outline-opacity),transparent)}.focus\:outline-\[var\(--ff-fg\)\]:focus,.peer:focus-visible~.peer-focus-visible\:outline-\[var\(--ff-fg\)\]{outline-color:color-mix(in oklab,var(--ff-fg) var(--un-outline-opacity),transparent)}.peer:focus-visible~.peer-focus-visible\:outline-2{outline-style:var(--un-outline-style);outline-width:2px}.outline-offset-4{outline-offset:4px}.peer:focus-visible~.peer-focus-visible\:outline-offset-2{outline-offset:2px}.focus\:outline-dashed:focus,.hover\:outline-dashed:hover{--un-outline-style:dashed;outline-style:dashed}.border{border-width:1px}.border-x{border-inline-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-0{border-width:0}.border-t-0{border-top-width:0}.last\:border-b-0:last-child{border-bottom-width:0}.last\:border-r-0:last-child{border-right-width:0}.rounded-none{border-radius:var(--radius-none)}.bg-\[var\(--ff-line\)\]{background-color:color-mix(in oklab,var(--ff-line) var(--un-bg-opacity),transparent)}.bg-amber\:5{background-color:color-mix(in srgb,var(--colors-amber-DEFAULT) 5%,transparent)}.bg-transparent{background-color:#0000}.bg-white{background-color:color-mix(in srgb,var(--colors-white) var(--un-bg-opacity),transparent)}.dark .dark\:bg-neutral-950{background-color:color-mix(in srgb,var(--colors-neutral-950) var(--un-bg-opacity),transparent)}.opacity-40{opacity:.4}.opacity-60{opacity:.6}.underline{text-decoration-line:underline}.underline-offset-3{text-underline-offset:3px}.flex{display:flex}.inline-flex{display:inline-flex}.flex-1{flex:1}.flex-auto{flex:auto}.shrink-0{flex-shrink:0}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.gap-1{gap:calc(var(--spacing))}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-x-2{-moz-column-gap:calc(var(--spacing) * 2);column-gap:calc(var(--spacing) * 2)}.gap-x-6{-moz-column-gap:calc(var(--spacing) * 6);column-gap:calc(var(--spacing) * 6)}.gap-y-3{row-gap:calc(var(--spacing) * 3)}.grid{display:grid}.col-span-full{grid-column:1/-1}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.size-\[10px\]{width:10px;height:10px}.size-\[11px\]{width:11px;height:11px}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.h-14{height:calc(var(--spacing) * 14)}.h-4{height:calc(var(--spacing) * 4)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-px{height:1px}.h1{height:calc(var(--spacing))}.h2{height:calc(var(--spacing) * 2)}.h3{height:calc(var(--spacing) * 3)}.max-h-\[32rem\]{max-height:32rem}.max-w-\[46ch\]{max-width:46ch}.max-w-\[52ch\]{max-width:52ch}.max-w-\[60ch\]{max-width:60ch}.max-w-520px{max-width:520px}.max-w-6xl{max-width:var(--container-6xl)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.min-h-56{min-height:calc(var(--spacing) * 56)}.min-h-72{min-height:calc(var(--spacing) * 72)}.min-h-screen{min-height:100vh}.min-w-0{min-width:calc(var(--spacing) * 0)}.w-28{width:calc(var(--spacing) * 28)}.w-7{width:calc(var(--spacing) * 7)}.w-9{width:calc(var(--spacing) * 9)}.w-fit{width:fit-content}.w-full{width:100%}.hidden{display:none}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.pointer-events-none{pointer-events:none}.select-none{-webkit-user-select:none;user-select:none}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.uppercase{text-transform:uppercase}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.focus-ring:focus{--un-ring-shadow:var(--un-ring-inset,) 0 0 0 calc(1px + var(--un-ring-offset-width)) var(--un-ring-color,currentColor);box-shadow:var(--un-inset-shadow),var(--un-inset-ring-shadow),var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.transition-\[outline-color\]{transition-property:outline-color}.transition-\[outline-color\],.transition-all,.transition-colors{transition-timing-function:var(--un-ease,var(--default-transition-timingFunction));transition-duration:var(--un-duration,var(--default-transition-duration))}.transition-all{transition-property:all}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--un-gradient-from,--un-gradient-via,--un-gradient-to}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.self-start{align-self:flex-start}.-inset-\[100vmax\]{inset:-100vmax}.-bottom-\[6px\]{bottom:-6px}.-left-\[6px\]{left:-6px}.-right-\[6px\]{right:-6px}.-top-\[6px\]{top:-6px}.bottom-3{bottom:calc(var(--spacing) * 3)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-\[14px\]{left:14px}.left-\[2px\]{left:2px}.left-2{left:calc(var(--spacing) * 2)}.left-4{left:calc(var(--spacing) * 4)}.right-3{right:calc(var(--spacing) * 3)}.top-\[2px\]{top:2px}.top-0{top:calc(var(--spacing) * 0)}.top-3{top:calc(var(--spacing) * 3)}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.place-content-center{place-content:center}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.-z-1{z-index:-1}.z-1{z-index:1}.z-10{z-index:10}.overflow-hidden{overflow:hidden}.overflow-x-clip{overflow-x:clip}.overflow-y-auto{overflow-y:auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.animate-spin{animation:1s linear infinite spin}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.isolate{isolation:isolate}.invert{--un-invert:invert(100%);filter:var(--un-blur,) var(--un-brightness,) var(--un-contrast,) var(--un-grayscale,) var(--un-hue-rotate,) var(--un-invert,) var(--un-saturate,) var(--un-sepia,) var(--un-drop-shadow,)}.tabular-nums{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal,) var(--un-slashed-zero,) var(--un-numeric-figure,) var(--un-numeric-spacing,) var(--un-numeric-fraction,)}.no-ruby{font-feature-settings:"ss01";line-height:1}@supports (color:color-mix(in lab,red,red)){.dark .dark\:text-white{color:color-mix(in oklab,var(--colors-white) var(--un-text-opacity),transparent)}.text-amber{color:color-mix(in oklab,var(--colors-amber-DEFAULT) var(--un-text-opacity),transparent)}.text-neutral-500{color:color-mix(in oklab,var(--colors-neutral-500) var(--un-text-opacity),transparent)}.text-neutral-950{color:color-mix(in oklab,var(--colors-neutral-950) var(--un-text-opacity),transparent)}.bg-amber\:5{background-color:color-mix(in oklab,var(--colors-amber-DEFAULT) 5%,transparent)}.bg-white{background-color:color-mix(in oklab,var(--colors-white) var(--un-bg-opacity),transparent)}.dark .dark\:bg-neutral-950{background-color:color-mix(in oklab,var(--colors-neutral-950) var(--un-bg-opacity),transparent)}}@media (width>=40rem){.sm\:text-3xl{font-size:var(--text-3xl-fontSize);line-height:var(--un-leading,var(--text-3xl-lineHeight))}.sm\:text-\[72px\]{font-size:72px}.sm\:tracking-\[0\.12em\]{--un-tracking:.12em;letter-spacing:.12em}.sm\:px-2{padding-inline:calc(var(--spacing) * 2)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:border-r{border-right-width:1px}.sm\:border-b-0{border-bottom-width:0}.sm\:inline-flex{display:inline-flex}.sm\:gap-6{gap:calc(var(--spacing) * 6)}.sm\:grid-cols-\[1fr_2fr\]{grid-template-columns:1fr 2fr}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:inline{display:inline}}@media (width>=64rem){.lg\:py-24{padding-block:calc(var(--spacing) * 24)}.lg\:border-b{border-bottom-width:1px}.lg\:border-r{border-right-width:1px}.lg\:border-b-0{border-bottom-width:0}.lg\:border-t-0{border-top-width:0}.lg\:grid-cols-\[340px_1fr\]{grid-template-columns:340px 1fr}.lg\:grid-cols-\[5fr_4fr\]{grid-template-columns:5fr 4fr}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.lg\:top-14{top:calc(var(--spacing) * 14)}.lg\:sticky{position:sticky}.lg\:z-1{z-index:1}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Furifont: furigana built into the font</title><script type="importmap">{"imports":{"#entry":"/_nuxt/
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Furifont: furigana built into the font</title><script type="importmap">{"imports":{"#entry":"/_nuxt/IB1Ryazr.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.z8A6-8bZ.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/IB1Ryazr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/y07Wd5I9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CkUAspOr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D4ezFGbh.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Sgj54NgJ.js"><script type="module" src="/_nuxt/IB1Ryazr.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/OoUlbf8J.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DBjETv8r.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/Bo7DzF0m.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.DqUWOYf4.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BI2Q9Enf.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BYTKxx4O.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/B8uEzYfq.js"><meta name="description" content="A Japanese font that shows furigana by itself."><meta property="og:type" content="website"><meta property="og:url" content="https://furifont.antfu.me"><meta property="og:title" content="Furifont: furigana built into the font"><meta property="og:description" content="A Japanese font that shows furigana by itself."><meta property="og:image" content="https://furifont.antfu.me/og.png"><meta property="og:image:width" content="2400"><meta property="og:image:height" content="1260"><meta property="og:image:alt" content="Furifont: furigana built into the font"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Furifont: furigana built into the font"><meta name="twitter:description" content="A Japanese font that shows furigana by itself."><meta name="twitter:image" content="https://furifont.antfu.me/og.png"><link rel="icon" type="image/svg+xml" href="favicon.svg"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{devCustomizeBase:"/__furifont/"},app:{baseURL:"/",buildId:"0a20d338-7497-4d3f-82e8-9f5ae0d7be3d",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1792055149747,false]</script></body></html>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// ==UserScript==
|
|
2
2
|
// @name Furifont
|
|
3
3
|
// @namespace https://furifont.antfu.me
|
|
4
|
-
// @version 0.
|
|
4
|
+
// @version 0.2.0
|
|
5
5
|
// @description Furigana on any page: Furifont turns on by itself on Japanese pages, and the menu switches family, turns it off, or turns okurigana readings (来る, 来ない) off.
|
|
6
6
|
// @homepageURL https://furifont.antfu.me
|
|
7
7
|
// @downloadURL https://furifont.antfu.me/furifont.user.js
|
|
@@ -55,7 +55,7 @@ var Furifont=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Mod
|
|
|
55
55
|
registerOkurigana();
|
|
56
56
|
if (/^ja(?:-|$)/i.test(document.documentElement.lang))
|
|
57
57
|
toggle({ ...options(saved), update: update() });
|
|
58
|
-
})({ getValue: GM_getValue, setValue: GM_setValue, registerMenuCommand: GM_registerMenuCommand, xmlHttpRequest: GM_xmlhttpRequest }, Furifont.toggleFurifont, [{"family":"Furifont Sans","url":"https://furifont.antfu.me/fonts/FurifontSansVF.woff2?v=0.
|
|
58
|
+
})({ getValue: GM_getValue, setValue: GM_setValue, registerMenuCommand: GM_registerMenuCommand, xmlHttpRequest: GM_xmlhttpRequest }, Furifont.toggleFurifont, [{"family":"Furifont Sans","url":"https://furifont.antfu.me/fonts/FurifontSansVF.woff2?v=0.2.0","readings":"https://furifont.antfu.me/fonts/FurifontSansVF.ivs.json?v=0.2.0"},{"family":"Furifont Sans Romaji","url":"https://furifont.antfu.me/fonts/FurifontSansRomajiVF.woff2?v=0.2.0","readings":"https://furifont.antfu.me/fonts/FurifontSansRomajiVF.ivs.json?v=0.2.0"},{"family":"Furifont Serif","url":"https://furifont.antfu.me/fonts/FurifontSerifVF.woff2?v=0.2.0","readings":"https://furifont.antfu.me/fonts/FurifontSerifVF.ivs.json?v=0.2.0"},{"family":"Furifont Serif Romaji","url":"https://furifont.antfu.me/fonts/FurifontSerifRomajiVF.woff2?v=0.2.0","readings":"https://furifont.antfu.me/fonts/FurifontSerifRomajiVF.ivs.json?v=0.2.0"}], "https://furifont.antfu.me/okurigana.json", {"version":"0.2.0","href":"https://furifont.antfu.me/furifont.user.js"}, {"en":{"message":"Furifont could not load its font on this page. Some sites, such as X and GitHub, do not let fonts load from other sites. On those sites, you must install Furifont on your computer.","download":"Download the fonts","close":"Close","outdated":"A newer version of Furifont is out.","userscript":"Update the userscript","bookmarklet":"Get the new bookmarklet"},"ja":{"message":"このページでは Furifont のフォントを読み込めませんでした。X や GitHub のように、他のサイトのフォントを読み込めないサイトがあります。そのようなサイトでは、パソコンに Furifont をインストールする必要があります。","download":"フォントをダウンロード","close":"閉じる","outdated":"Furifont の新しいバージョンがあります。","userscript":"ユーザースクリプトを更新","bookmarklet":"新しいブックマークレットを入手"},"zh-Hans":{"message":"Furifont 无法在此页面加载字体。有些网站(如 X 和 GitHub)不允许加载其他网站的字体。在这些网站上,需要在电脑上安装 Furifont。","download":"下载字体","close":"关闭","outdated":"Furifont 有新版本了。","userscript":"更新用户脚本","bookmarklet":"获取新的书签小工具"},"zh-Hant":{"message":"Furifont 無法在此頁面載入字型。有些網站(如 X 和 GitHub)不允許載入其他網站的字型。在這些網站上,需要在電腦上安裝 Furifont。","download":"下載字型","close":"關閉","outdated":"Furifont 有新版本了。","userscript":"更新使用者腳本","bookmarklet":"取得新的書籤小工具"}}, {"en":{"okuriganaOn":"Okurigana readings: on","okuriganaOff":"Okurigana readings: off"},"ja":{"okuriganaOn":"送り仮名の読み:オン","okuriganaOff":"送り仮名の読み:オフ"},"zh-Hans":{"okuriganaOn":"送假名读音:开","okuriganaOff":"送假名读音:关"},"zh-Hant":{"okuriganaOn":"送假名讀音:開","okuriganaOff":"送假名讀音:關"}}, function detectLocale(languages) {
|
|
59
59
|
for (const tag of languages.map((l) => l.toLowerCase())) {
|
|
60
60
|
if (tag.startsWith("zh"))
|
|
61
61
|
return /-(?:tw|hk|mo|hant)\b/.test(tag) ? "zh-Hant" : "zh-Hans";
|
package/dist/client/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Furifont: furigana built into the font</title><script type="importmap">{"imports":{"#entry":"/_nuxt/
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Furifont: furigana built into the font</title><script type="importmap">{"imports":{"#entry":"/_nuxt/IB1Ryazr.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.z8A6-8bZ.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/IB1Ryazr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/y07Wd5I9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CkUAspOr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D4ezFGbh.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Sgj54NgJ.js"><script type="module" src="/_nuxt/IB1Ryazr.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/OoUlbf8J.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DBjETv8r.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/Bo7DzF0m.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.DqUWOYf4.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BI2Q9Enf.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BYTKxx4O.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/B8uEzYfq.js"><meta name="description" content="A Japanese font that shows furigana by itself."><meta property="og:type" content="website"><meta property="og:url" content="https://furifont.antfu.me"><meta property="og:title" content="Furifont: furigana built into the font"><meta property="og:description" content="A Japanese font that shows furigana by itself."><meta property="og:image" content="https://furifont.antfu.me/og.png"><meta property="og:image:width" content="2400"><meta property="og:image:height" content="1260"><meta property="og:image:alt" content="Furifont: furigana built into the font"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Furifont: furigana built into the font"><meta name="twitter:description" content="A Japanese font that shows furigana by itself."><meta name="twitter:image" content="https://furifont.antfu.me/og.png"><link rel="icon" type="image/svg+xml" href="favicon.svg"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{devCustomizeBase:"/__furifont/"},app:{baseURL:"/",buildId:"0a20d338-7497-4d3f-82e8-9f5ae0d7be3d",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1792055149749,false]</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Furifont: furigana built into the font</title><script type="importmap">{"imports":{"#entry":"/_nuxt/
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Furifont: furigana built into the font</title><script type="importmap">{"imports":{"#entry":"/_nuxt/IB1Ryazr.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.z8A6-8bZ.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/IB1Ryazr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/y07Wd5I9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CkUAspOr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D4ezFGbh.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Sgj54NgJ.js"><script type="module" src="/_nuxt/IB1Ryazr.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/OoUlbf8J.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DBjETv8r.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/Bo7DzF0m.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.DqUWOYf4.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/BI2Q9Enf.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BYTKxx4O.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/B8uEzYfq.js"><meta name="description" content="A Japanese font that shows furigana by itself."><meta property="og:type" content="website"><meta property="og:url" content="https://furifont.antfu.me"><meta property="og:title" content="Furifont: furigana built into the font"><meta property="og:description" content="A Japanese font that shows furigana by itself."><meta property="og:image" content="https://furifont.antfu.me/og.png"><meta property="og:image:width" content="2400"><meta property="og:image:height" content="1260"><meta property="og:image:alt" content="Furifont: furigana built into the font"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Furifont: furigana built into the font"><meta name="twitter:description" content="A Japanese font that shows furigana by itself."><meta name="twitter:image" content="https://furifont.antfu.me/og.png"><link rel="icon" type="image/svg+xml" href="favicon.svg"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{devCustomizeBase:"/__furifont/"},app:{baseURL:"/",buildId:"0a20d338-7497-4d3f-82e8-9f5ae0d7be3d",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1792055149748,false]</script></body></html>
|
package/dist/client/version.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"0.
|
|
1
|
+
{"version":"0.2.0"}
|
|
@@ -10,7 +10,7 @@ import { randomUUID } from "node:crypto";
|
|
|
10
10
|
import * as v from "valibot";
|
|
11
11
|
//#region package.json
|
|
12
12
|
var name = "furifont";
|
|
13
|
-
var version = "0.
|
|
13
|
+
var version = "0.2.0";
|
|
14
14
|
var description = "Build Japanese fonts that show furigana by themselves, from the command line or a local studio";
|
|
15
15
|
var homepage = "https://github.com/antfu/furifont#readme";
|
|
16
16
|
//#endregion
|
package/dist/devframe.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { d as homepage, f as name, p as version, u as description } from "./config-
|
|
2
|
-
import { n as STUDIO_ID, r as setupStudio } from "./studio-
|
|
1
|
+
import { d as homepage, f as name, p as version, u as description } from "./config-B9fOD9wc.mjs";
|
|
2
|
+
import { n as STUDIO_ID, r as setupStudio } from "./studio-IpmE7PF6.mjs";
|
|
3
3
|
import { defineDevframe } from "devframe";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
//#region src/devframe.ts
|
package/dist/index.d.mts
CHANGED
|
@@ -19,6 +19,7 @@ export declare const FurifontConfigSchema: v.SchemaWithPipe<readonly [v.ObjectSc
|
|
|
19
19
|
readonly nfMin: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 48, undefined>]>, 1>;
|
|
20
20
|
readonly nfMax: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 48, undefined>]>, 48>;
|
|
21
21
|
readonly selectTags: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<readonly ["ichi1", "ichi2", "news1", "news2", "spec1", "spec2", "gai1", "gai2"], undefined>, undefined>, () => ("ichi1" | "news1" | "spec1" | "gai1")[]>;
|
|
22
|
+
readonly minTatoeba: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.IntegerAction<number, undefined>, v.MinValueAction<number, 0, undefined>]>, 3>;
|
|
22
23
|
readonly skipJlpt: v.OptionalSchema<v.PicklistSchema<readonly ["N5", "N4", "N3", "N2", "N1"], undefined>, undefined>;
|
|
23
24
|
readonly places: v.OptionalSchema<v.BooleanSchema<undefined>, true>;
|
|
24
25
|
readonly isolated: v.OptionalSchema<v.BooleanSchema<undefined>, true>;
|
|
@@ -32,7 +33,7 @@ export declare const FurifontConfigSchema: v.SchemaWithPipe<readonly [v.ObjectSc
|
|
|
32
33
|
readonly rubyScale: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0.2, undefined>, v.MaxValueAction<number, 0.8, undefined>]>, 0.5>;
|
|
33
34
|
readonly rubyGap: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0, undefined>, v.MaxValueAction<number, 0.5, undefined>]>, 0.05>;
|
|
34
35
|
readonly compressionFloor: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 0.3, undefined>, v.MaxValueAction<number, 1, undefined>]>, 0.8>;
|
|
35
|
-
readonly maxRubyWidth: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 3, undefined>]>, 1.
|
|
36
|
+
readonly maxRubyWidth: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 1, undefined>, v.MaxValueAction<number, 3, undefined>]>, 1.5>;
|
|
36
37
|
}, undefined>, {}>;
|
|
37
38
|
}, undefined>, v.CheckAction<{
|
|
38
39
|
base: string;
|
|
@@ -43,6 +44,7 @@ export declare const FurifontConfigSchema: v.SchemaWithPipe<readonly [v.ObjectSc
|
|
|
43
44
|
nfMin: number;
|
|
44
45
|
nfMax: number;
|
|
45
46
|
selectTags: ("ichi1" | "news1" | "spec1" | "gai1" | "ichi2" | "news2" | "spec2" | "gai2")[];
|
|
47
|
+
minTatoeba: number;
|
|
46
48
|
skipJlpt?: "N5" | "N4" | "N3" | "N2" | "N1" | undefined;
|
|
47
49
|
places: boolean;
|
|
48
50
|
isolated: boolean;
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as buildFont, i as loadConfig, l as previewFont, o as estimateFont, r as FurifontConfigSchema, t as CONFIG_FILE } from "./config-
|
|
2
|
-
import { n as STUDIO_ID, t as BUILD_CHANNEL } from "./studio-
|
|
1
|
+
import { a as buildFont, i as loadConfig, l as previewFont, o as estimateFont, r as FurifontConfigSchema, t as CONFIG_FILE } from "./config-B9fOD9wc.mjs";
|
|
2
|
+
import { n as STUDIO_ID, t as BUILD_CHANNEL } from "./studio-IpmE7PF6.mjs";
|
|
3
3
|
import { DEFAULTS, PREBUILT } from "@furifont/core";
|
|
4
4
|
export { BUILD_CHANNEL, CONFIG_FILE, DEFAULTS, FurifontConfigSchema, PREBUILT, STUDIO_ID, buildFont, estimateFont, loadConfig, previewFont };
|